All Downloads are FREE. Search and download functionalities are using the official Maven repository.

web-interface.assets.0fe74163-3.8772c3b88e590016e5d1.js.map Maven / Gradle / Ivy

There is a newer version: 6.0.5
Show newest version
{"version":3,"sources":["webpack:///./node_modules/d3/d3.js"],"names":["d3","version","d3_arraySlice","slice","d3_array","list","call","d3_document","this","document","d3_documentElement","node","ownerDocument","documentElement","d3_window","defaultView","childNodes","nodeType","e","i","length","array","Array","Date","now","createElement","style","setProperty","error","d3_element_prototype","Element","prototype","d3_element_setAttribute","setAttribute","d3_element_setAttributeNS","setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","name","value","space","local","priority","d3_ascending","a","b","NaN","d3_number","x","d3_numeric","isNaN","d3_bisector","compare","left","lo","hi","arguments","mid","right","ascending","descending","min","f","n","max","extent","c","sum","s","mean","j","quantile","values","p","H","h","Math","floor","v","median","numbers","push","sort","variance","d","m","deviation","apply","sqrt","d3_bisect","d3_transposeLength","bisectLeft","bisect","bisectRight","bisector","shuffle","i0","i1","t","random","permute","indexes","permutes","pairs","p1","transpose","matrix","row","zip","keys","map","key","entries","merge","arrays","merged","abs","d3_range_integerScale","k","d3_class","ctor","properties","Object","defineProperty","enumerable","d3_Map","_","create","range","start","stop","step","Infinity","Error","object","forEach","set","isArray","o","d3_map_escape","d3_map_unescape","d3_map_has","d3_map_remove","d3_map_keys","d3_map_size","size","d3_map_empty","d3_Set","d3_identity","d3_rebind","target","source","method","d3_vendorSymbol","charAt","toUpperCase","d3_vendorPrefixes","prefixName","has","get","remove","empty","nest","sortValues","rollup","sortKeys","mapType","depth","keyValue","setter","valuesByKey","sortKey","keyMap","order","add","behavior","rebind","d3_noop","d3_dispatch","d3_dispatch_event","dispatch","listeners","listenerByName","event","l","z","on","listener","indexOf","concat","d3_eventPreventDefault","preventDefault","d3_eventSource","sourceEvent","d3_eventDispatch","of","thiz","argumentz","e1","e0","type","hasOwnProperty","requote","replace","d3_requote_re","d3_subclass","__proto__","property","d3_selection","groups","d3_selectionPrototype","d3_select","querySelector","d3_selectAll","querySelectorAll","d3_selectMatches","d3_selectMatcher","matches","Sizzle","matchesSelector","selection","select","d3_selection_selector","selector","d3_selection_selectorAll","subgroup","subnode","group","subgroups","parentNode","__data__","selectAll","d3_nsXhtml","d3_nsPrefix","svg","xhtml","xlink","xml","xmlns","d3_selection_attr","ns","qualify","removeAttributeNS","removeAttribute","d3_collapse","trim","d3_selection_classedRe","RegExp","d3_selection_classes","split","d3_selection_classed","d3_selection_classedName","re","classList","getAttribute","lastIndex","test","d3_selection_style","removeProperty","d3_selection_property","d3_selection_creator","createElementNS","namespace","namespaceURI","d3_selectionRemove","parent","removeChild","d3_selection_dataNode","data","d3_selection_filter","d3_selection_sortComparator","comparator","d3_selection_each","callback","d3_selection_enter","d3_selection_enterPrototype","prefix","attr","getAttributeNS","each","classed","contains","getComputedStyle","getPropertyValue","text","textContent","html","innerHTML","append","appendChild","insert","before","insertBefore","bind","groupData","nodeData","n0","updateNodes","enterNodes","exitNodes","nodeByKeyValue","keyValues","update","enter","exit","datum","filter","next","nextSibling","args","d3_selection_enterInsertBefore","j0","d3_selection_on","capture","wrap","d3_selection_onListener","d3_selection_onFilters","onRemove","removeEventListener","$","d3_selection_onFilter","addEventListener","match","upgroup","nodes","mouseenter","mouseleave","related","relatedTarget","compareDocumentPosition","d3_event_dragSelect","d3_event_dragId","d3_event_dragSuppress","click","w","suppressClick","off","setTimeout","mouse","container","d3_mousePoint","d3_mouse_bug44083","navigator","userAgent","changedTouches","ownerSVGElement","createSVGPoint","point","window","scrollX","scrollY","ctm","position","top","margin","padding","border","getScreenCTM","pageX","y","pageY","clientX","clientY","matrixTransform","inverse","rect","getBoundingClientRect","clientLeft","clientTop","d3_behavior_dragTouchId","identifier","touch","touches","drag","origin","mousedown","dragstart","touchstart","id","subject","move","end","dragOffset","that","correspondingElement","dragged","dragId","dragName","dragSubject","moved","ended","dragRestore","position0","dx","dy","position1","ε","ε2","π","PI","τ","τε","halfπ","d3_radians","d3_degrees","d3_sgn","d3_cross2d","d3_acos","acos","d3_asin","asin","d3_cosh","exp","d3_haversin","sin","ρ","SQRT2","interpolateZoom","p0","S","ux0","uy0","w0","ux1","uy1","w1","d2","log","d1","b0","b1","r0","r1","coshr0","u","d3_sinh","duration","zoom","translate0","center0","center","mousewheelTimer","touchtime","x0","x1","y0","y1","view","scaleExtent","d3_behavior_zoomInfinity","zooming","mousemove","mouseup","g","mousedowned","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","location","scaleTo","translateTo","zoomTo","__chart__","pow","transition","rescale","domain","invert","zoomstarted","zoomed","scale","translate","zoomended","location0","d3_selection_interrupt","scale0","locations0","distance0","zoomName","touchmove","touchend","targets","relocate","started","changed","LN2","q","l0","l1","distance1","scale1","clearTimeout","d3_behavior_zoomDelta","shiftKey","ceil","deltaY","deltaMode","wheelDelta","detail","view1","d3_transitionInheritId","tween","cx","cy","copy","d3_color","d3_hsl","d3_rgb_parse","d3_rgb_hsl","color","toString","rgb","hsl","d3_hslPrototype","d3_hsl_rgb","m1","m2","vv","round","d3_rgb","d3_hcl","d3_lab_hcl","d3_lab","d3_rgb_lab","r","brighter","darker","hcl","d3_hclPrototype","d3_hcl_lab","cos","d3_lab_K","lab","d3_labPrototype","d3_lab_rgb","d3_xyz_rgb","d3_lab_xyz","atan2","d3_xyz_lab","d3_rgbNumber","d3_rgbString","d3_rgbPrototype","d3_rgb_hex","format","exec","toLowerCase","parseFloat","d3_rgb_parseNumber","d3_rgb_names","parseInt","d3_rgb_xyz","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","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","d3_functor","d3_xhrType","response","url","mimeType","d3_xhr","xhr","headers","request","XMLHttpRequest","responseType","respond","result","status","responseText","d3_xhrHasResponse","load","XDomainRequest","onload","onerror","onreadystatechange","readyState","onprogress","progress","header","send","open","setRequestHeader","overrideMimeType","beforesend","abort","d3_xhr_fixCallback","functor","dsv","delimiter","reFormat","delimiterCode","charCodeAt","typedResponse","parse","formatRow","formatValue","join","parseRows","Function","JSON","stringify","eol","EOL","EOF","rows","N","I","token","formatRows","fieldSet","fields","field","csv","tsv","d3_timer_queueHead","d3_timer_queueTail","d3_timer_interval","d3_timer_timeout","d3_timer_frame","d3_timer","delay","then","time","timer","d3_timer_step","d3_timer_mark","d3_timer_sweep","isFinite","t0","t1","d3_format_precision","LN10","flush","d3_formatPrefixes","symbol","d3_locale_numberFormat","locale","locale_decimal","decimal","locale_thousands","thousands","locale_grouping","grouping","locale_currency","currency","formatGroup","width","substring","reverse","specifier","d3_format_re","fill","align","sign","zfill","comma","precision","suffix","integer","exponent","d3_format_types","d3_format_typeDefault","zcomma","fullSuffix","negative","unit","formatPrefix","after","lastIndexOf","String","fromCharCode","X","toPrecision","toExponential","toFixed","d3_time","d3_date","d3_date_utc","UTC","getDate","getUTCDate","getDay","getUTCDay","getFullYear","getUTCFullYear","getHours","getUTCHours","getMilliseconds","getUTCMilliseconds","getMinutes","getUTCMinutes","getMonth","getUTCMonth","getSeconds","getUTCSeconds","getTime","getTimezoneOffset","valueOf","setDate","d3_time_prototype","setUTCDate","setDay","setUTCDay","setFullYear","setUTCFullYear","setHours","setUTCHours","setMilliseconds","setUTCMilliseconds","setMinutes","setUTCMinutes","setMonth","setUTCMonth","setSeconds","setUTCSeconds","setTime","d3_time_interval","number","date","d0","offset","dt","times","utc","d3_time_interval_utc","d3_locale_timeFormat","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_days","days","locale_shortDays","shortDays","locale_months","months","locale_shortMonths","shortMonths","d3_time_format","template","string","d3_time_formatPads","d3_time_formats","M","L","Z","d3_time_parse","localZ","W","U","d3_time_parsers","multi","d3_time_formatMulti","d3_time_periodLookup","d3_time_dayRe","d3_time_formatRe","d3_time_dayLookup","d3_time_formatLookup","d3_time_dayAbbrevRe","d3_time_dayAbbrevLookup","d3_time_monthRe","d3_time_monthLookup","d3_time_monthAbbrevRe","d3_time_monthAbbrevLookup","A","B","d3_time_formatPad","dayOfYear","sundayOfYear","mondayOfYear","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","year","day","years","interval","week","sunday","weeks","weekOfYear","d3_time_numberRe","d3_time_percentRe","names","zs","zh","zm","formats","numberFormat","timeFormat","d3_locale_enUS","d3_adder","geo","d3_adderSum","d3_adderTemp","reset","bv","av","d3_geo_streamGeometry","geometry","d3_geo_streamGeometryType","stream","d3_geo_streamObjectType","Feature","feature","FeatureCollection","features","Sphere","sphere","Point","coordinates","MultiPoint","LineString","d3_geo_streamLine","MultiLineString","Polygon","d3_geo_streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","area","d3_geo_areaSum","d3_geo_area","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","d3_geo_areaRingSum","d3_geo_areaRingStart","λ00","φ00","λ0","cosφ0","sinφ0","nextPoint","λ","φ","dλ","sdλ","adλ","cosφ","sinφ","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","bounds","φ0","λ1","φ1","λ_","λ__","φ__","dλSum","ranges","bound","ringPoint","ringStart","ringEnd","linePoint","normal","inflection","λi","antimeridian","φi","angle","compareRanges","withinRange","best","centroid","d3_geo_centroid","d3_geo_centroidPoint","d3_geo_centroidLineStart","d3_geo_centroidLineEnd","d3_geo_centroidRingStart","d3_geo_centroidPointXYZ","z0","cz","d3_geo_compose","compose","d3_true","d3_geo_clipPolygon","segments","clipStartInside","interpolate","clip","segment","d3_geo_clipPolygonIntersection","d3_geo_clipPolygonLinkCircular","entry","points","current","isSubject","other","d3_geo_clip","pointVisible","clipLine","clipStart","rotate","line","rotatedClipStart","pointRing","polygon","meridian","parallel","meridianNormal","polarAngle","winding","ring","point0","arc","intersection","φarc","d3_geo_pointInPolygon","polygonStarted","d3_geo_clipSort","pointLine","buffer","d3_geo_clipBufferListener","ringListener","clean","ringSegments","pop","shift","d3_geo_clipSegmentLength1","lines","rejoin","d3_geo_clipAntimeridian","sλ0","sλ1","cosφ1","sinλ0_λ1","atan","d3_geo_clipAntimeridianIntersect","from","to","direction","d3_geo_clipCircle","radius","cr","smallRadius","notHemisphere","visible","c0","v0","v00","point2","point1","code","intersect","d3_geo_circleInterpolate","two","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","t2","δλ","polar","q1","d3_geom_clipLine","ax","ay","d3_geo_clipExtent","x__","y__","v__","x_","y_","v_","first","listener_","bufferListener","wn","insidePolygon","inside","a1","corner","comparePoints","ca","cb","d3_geo_conic","projectAt","d3_geo_projectionMutator","parallels","d3_geo_conicEqualArea","C","ρ0","forward","ρ0_y","clipExtent","output","valid","conicEqualArea","raw","albers","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","lower48Stream","alaskaStream","hawaiiStream","d3_geo_pathAreaSum","d3_geo_pathAreaPolygon","d3_geo_pathBoundsX0","d3_geo_pathBoundsY0","d3_geo_pathBoundsX1","d3_geo_pathBoundsY1","d3_geo_pathArea","d3_geo_pathAreaRingStart","x00","y00","d3_geo_pathBounds","d3_geo_pathBuffer","pointCircle","d3_geo_pathBufferCircle","pointLineStart","lineEndPolygon","pointRadius","d3_geo_lengthSum","d3_geo_pathCentroid","d3_geo_pathCentroidPoint","d3_geo_pathCentroidLineStart","d3_geo_pathCentroidLineEnd","d3_geo_pathCentroidRingStart","d3_geo_pathContext","context","moveTo","lineTo","closePath","d3_geo_resample","project","δ2","cosMinDistance","maxDepth","resample","resampleRecursive","resampleNone","d3_geo_transformPoint","a00","b00","c00","a0","resampleLineTo","φ2","λ2","x2","y2","dx2","dy2","dz","d3_geo_pathProjectStream","d3_geo_projectionRadians","d3_geo_transform","d3_geo_projection","projectRotate","δx","δy","projectResample","δφ","δγ","preclip","postclip","clipAngle","projection","d3_geo_rotation","invalidate","d3_geo_equirectangular","d3_geo_identityRotation","d3_geo_rotationλ","d3_geo_rotationφγ","d3_geo_forwardRotationλ","rotation","cosδφ","sinδφ","cosδγ","sinδγ","sr","d3_geo_circleAngle","d3_geo_graticuleX","d3_geo_graticuleY","d3_source","d3_target","path","projectStream","contextStream","cacheStream","transform","methods","projectionMutator","equirectangular","circle","distance","Δλ","sinΔλ","cosΔλ","sinφ1","graticule","X1","X0","Y1","Y0","DX","DY","outline","majorExtent","minorExtent","majorStep","minorStep","greatArc","source_","target_","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","d3_geo_length","d3_geo_azimuthal","azimuthal","cosλ","sinc","cosc","d3_geo_azimuthalEqualArea","cosλcosφ","azimuthalEqualArea","d3_geo_azimuthalEquidistant","d3_geo_conicConformal","F","d3_geo_mercator","d3_geo_conicEquidistant","G","azimuthalEquidistant","conicConformal","conicEquidistant","d3_geo_gnomonic","d3_geo_mercatorProjection","clipAuto","gnomonic","mercator","d3_geo_orthographic","orthographic","d3_geo_stereographic","d3_geo_transverseMercator","d3_geom_pointX","d3_geom_pointY","d3_geom_hullUpper","hull","hs","d3_geom_hullOrder","stereographic","transverseMercator","geom","vertices","fx","fy","flippedPoints","upper","lower","skipLeft","skipRight","d3_geom_polygonPrototype","d3_geom_polygonInside","d3_geom_polygonIntersect","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","input","d3_geom_voronoiEdges","d3_geom_voronoiCells","d3_geom_voronoiBeaches","d3_geom_voronoiFirstCircle","d3_geom_voronoiCircles","d3_geom_voronoiBeachPool","d3_geom_voronoiCirclePool","d3_geom_voronoiBeach","d3_geom_voronoiRedBlackNode","edge","site","d3_geom_voronoiCreateBeach","beach","d3_geom_voronoiDetachBeach","d3_geom_voronoiDetachCircle","d3_geom_voronoiRemoveBeach","vertex","previous","P","disappearing","lArc","unshift","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","bx","by","rSite","hb","hc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","d3_geom_voronoiCell","edges","d3_geom_voronoiHalfEdgeOrder","d3_geom_voronoiCircle","cSite","ha","d3_geom_voronoiConnectEdge","vb","fm","fb","va","lx","ly","rx","ry","d3_geom_voronoiEdge","d3_geom_voronoiHalfEdge","d3_geom_voronoiCreateBorderEdge","d3_geom_voronoiRedBlackTree","d3_geom_voronoiRedBlackRotateLeft","tree","d3_geom_voronoiRedBlackRotateRight","d3_geom_voronoiRedBlackFirst","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","splice","d3_geom_voronoiClipEdges","cell","iHalfEdge","halfEdges","nHalfEdges","cells","iCell","prepare","d3_geom_voronoiCloseCells","diagram","grandpa","uncle","sibling","voronoi","d3_geom_voronoiClipExtent","polygons","links","triangles","s0","s1","d3_geom_quadtreeCompatX","d3_geom_quadtreeCompatY","d3_geom_quadtreeVisit","sx","sy","children","d3_geom_quadtreeFind","root","closestPoint","minDistance2","find","distance2","xm","ym","d3_interpolateRgb","ar","ag","ab","br","bg","bb","d3_interpolateObject","d3_interpolate","d3_interpolateNumber","d3_interpolateString","am","bm","bs","bi","d3_interpolate_numberA","d3_interpolate_numberB","index","delaunay","quadtree","compat","xs","ys","x1_","y1_","x2_","y2_","leaf","nx","ny","insertChild","nPoint","below","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolators","d3_interpolateArray","na","nb","interpolateArray","d3_ease_default","d3_ease","linear","poly","quad","d3_ease_quad","cubic","d3_ease_cubic","d3_ease_sin","d3_ease_exp","d3_ease_circle","elastic","back","bounce","d3_ease_bounce","d3_ease_mode","out","d3_ease_reverse","d3_ease_reflect","d3_ease_clamp","d3_ease_cubicInOut","t3","d3_interpolateRound","d3_transform","kx","d3_transformNormalize","kz","d3_transformDot","ky","skew","ease","interpolateHcl","ah","ac","al","bh","bc","bl","interpolateHsl","as","interpolateLab","aa","ba","interpolateRound","baseVal","consolidate","d3_transformIdentity","d3_interpolateTransformPop","d3_interpolateTransform","ta","tb","d3_interpolateTranslate","ra","rb","d3_interpolateRotate","wa","wb","d3_interpolateSkew","ka","kb","d3_interpolateScale","d3_uninterpolateNumber","d3_uninterpolateClamp","d3_layout_bundlePath","link","lca","aNodes","d3_layout_bundleAncestors","bNodes","aNode","bNode","sharedNode","d3_layout_bundleLeastCommonAncestor","ancestors","d3_layout_forceDragstart","fixed","d3_layout_forceDragend","d3_layout_forceMouseover","px","py","d3_layout_forceMouseout","interpolateTransform","layout","bundle","paths","chord","chords","sortGroups","sortSubgroups","sortChords","relayout","groupSums","groupIndex","subgroupIndex","di","dj","subindex","startAngle","endAngle","resort","force","alpha","distances","strengths","charges","friction","linkDistance","d3_layout_forceLinkDistance","linkStrength","d3_layout_forceLinkStrength","charge","chargeDistance2","d3_layout_forceChargeDistance2","gravity","theta2","repulse","dw","dn","pointCharge","dragmove","resume","tick","weight","d3_layout_forceAccumulate","visit","chargeDistance","theta","neighbors","dimension","candidates","d3_layout_hierarchyRebind","hierarchy","d3_layout_hierarchyLinks","d3_layout_hierarchyVisitBefore","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","d3_layout_hierarchyValue","d3_layout_hierarchySort","child","stack","childs","revalue","partition","pie","Number","d3_layout_pieSortByValue","padAngle","da","pa","arcs","d3_layout_stackX","d3_layout_stackY","d3_layout_stackOut","d3_layout_stackOrderDefault","d3_layout_stackOffsetZero","series","orders","offsets","d3_layout_stackOrders","d3_layout_stackOffsets","d3_layout_stackMaxIndex","sums","d3_layout_stackReduceSum","bottom","tops","bottoms","silhouette","wiggle","s2","s3","o0","expand","zero","reduce","d3_layout_stackSum","d3_layout_histogramBinSturges","d3_layout_histogramBinFixed","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","d3_layout_packUnlink","db","dc","d3_layout_treeSeparation","d3_layout_treeLeft","d3_layout_treeRight","d3_layout_treeMove","wm","wp","change","d3_layout_treeAncestor","vim","ancestor","d3_layout_treemapPadNull","d3_layout_treemapPad","d3_scaleExtent","d3_scaleRange","rangeExtent","d3_scale_bilinear","uninterpolate","d3_scale_nice","nice","d3_scale_niceStep","d3_scale_niceIdentity","histogram","frequency","valuer","ranger","binner","bin","bins","thresholds","pack","d3_layout_packTransform","separation","nodeSize","root0","root1","node1","queue","wrapTree","firstWalk","secondWalk","sizeNode","tx","siblings","d3_layout_treeShift","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","cluster","previousNode","d3_layout_clusterX","d3_layout_clusterY","d3_layout_clusterLeft","d3_layout_clusterRight","treemap","stickies","pad","sticky","mode","ratio","squarify","score","remaining","worst","stickify","rmax","rmin","padFunction","padConstant","µ","σ","logNormal","bates","irwinHall","d3_scale_polylinear","d3_scale_linearRebind","d3_scale_linearNice","d3_scale_linearTickRange","span","err","d3_scale_linearTicks","d3_scale_linearTickFormat","d3_scale_linearPrecision","d3_scale_linearFormatSignificant","d3_scale_linearFormatPrecision","d3_scale_linear","clamp","rangeRound","ticks","tickFormat","d3_scale_log","base","positive","niced","d3_scale_logNiceNegative","d3_scale_logFormat","d3_scale_powPow","d3_scale_pow","powp","powb","ordinal","d3_scale_ordinal","rangeBand","steps","xi","rangePoints","rangeRoundPoints","rangeBands","outerPadding","rangeRoundBands","category10","d3_category10","category20","d3_category20","category20b","d3_category20b","category20c","d3_category20c","d3_zero","d3_scale_quantile","quantiles","invertExtent","quantize","d3_scale_quantize","threshold","d3_scale_threshold","identity","d3_scale_identity","innerRadius","d3_svg_arcInnerRadius","outerRadius","d3_svg_arcOuterRadius","cornerRadius","padRadius","d3_svg_arcAuto","d3_svg_arcStartAngle","d3_svg_arcEndAngle","d3_svg_arcPadAngle","cw","rc","circleSegment","rp","ap","d3_svg_arcSweep","h1","h0","rc1","rc0","oc","kc","lc","t30","d3_svg_arcCornerTangents","t12","t03","t21","x01","y01","ox","oy","D","cx0","cx1","dx0","dy0","dx1","dy1","d3_svg_line","defined","d3_svg_lineLinear","interpolateKey","tension","d3_svg_lineInterpolators","d3_svg_lineLinearClosed","d3_svg_lineStepBefore","d3_svg_lineStepAfter","basis","d3_svg_lineBasis","pi","d3_svg_lineDot4","d3_svg_lineBasisBezier3","d3_svg_lineBasisBezier","cardinal","d3_svg_lineHermite","d3_svg_lineCardinalTangents","monotone","tangents","d3_svg_lineSlope","d3_svg_lineFiniteDifferences","d3_svg_lineMonotoneTangents","lp","p2","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineRadial","d3_svg_area","interpolateReverse","points0","points1","fx0","fy0","fx1","fy1","d3_svg_chordRadius","d3_svg_diagonalProjection","d3_svg_diagonalRadialProjection","d3_svg_symbolSize","d3_svg_symbolType","d3_svg_symbolCircle","radial","curve","self","diagonal","p3","projection_","d3_svg_symbols","cross","diamond","d3_svg_symbolTan30","square","d3_svg_symbolSqrt3","symbolTypes","d3_transitionId","d3_transitionNamespace","d3_transitionInherit","d3_transitionNode","d3_transition","interrupt","d3_selection_interruptNS","lock","activeId","active","count","d3_transitionPrototype","d3_transition_tween","d3_transition_text","inherit","tweens","elapsed","cancelId","cancel","subnodes","nameNS","attrNull","attrNullNS","attrTween","attrTweenNS","styleNull","styleString","styleTween","inheritId","id0","id1","axis","tickFormat_","orient","d3_svg_axisDefaultOrient","innerTickSize","outerTickSize","tickPadding","tickArguments_","tickValues","tickTransform","tickEnter","tickExit","tickUpdate","tickSpacing","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","d3_svg_axisX","d3_svg_axisY","d3_svg_axisOrients","tickSize","tickSubdivide","brush","xExtentDomain","yExtentDomain","xExtent","yExtent","xClamp","yClamp","resizes","d3_svg_brushResizes","brushstart","background","resize","d3_svg_brushCursor","gUpdate","backgroundUpdate","redrawX","redrawY","redraw","eventTarget","event_","resizing","resizingX","resizingY","dragging","keydown","keyup","brushmove","brushend","ex","ey","altKey","keyCode","move1","extent1","extent0","yi","clear","nw","ne","se","sw","d3_time_formatUtc","d3_time_formatIso","d3_time_formatIsoNative","toISOString","d3_time_scale","tickMethod","d3_time_scaleSteps","d3_time_scaleMilliseconds","d3_time_scaleDate","skip","skipped","iso","second","seconds","minute","minutes","hour","timezone","hours","month","d3_time_scaleLocalMethods","d3_time_scaleLocalFormat","d3_time_scaleUtcMethods","d3_time_scaleUtcFormat","d3_json","d3_html","createRange","selectNode","body","createContextualFragment","json","responseXML"],"mappings":"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","file":"0fe74163-3.8772c3b88e590016e5d1.js","sourcesContent":["!function() {\n  var d3 = {\n    version: \"3.5.17\"\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.transpose = function(matrix) {\n    if (!(n = matrix.length)) return [];\n    for (var i = -1, m = d3.min(matrix, d3_transposeLength), transpose = new Array(m); ++i < m; ) {\n      for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n; ) {\n        row[j] = matrix[j][i];\n      }\n    }\n    return transpose;\n  };\n  function d3_transposeLength(d) {\n    return d.length;\n  }\n  d3.zip = function() {\n    return d3.transpose(arguments);\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_nsXhtml = \"http://www.w3.org/1999/xhtml\";\n  var d3_nsPrefix = {\n    svg: \"http://www.w3.org/2000/svg\",\n    xhtml: d3_nsXhtml,\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 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\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 === d3_nsXhtml && document.documentElement.namespaceURI === d3_nsXhtml ? document.createElement(name) : document.createElementNS(namespace, 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 (node = group[i]) {\n            if (nodeByKeyValue.has(keyValue = key.call(node, node.__data__, i))) {\n              exitNodes[i] = node;\n            } else {\n              nodeByKeyValue.set(keyValue, node);\n            }\n            keyValues[i] = keyValue;\n          }\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 (i in keyValues && 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 = d3_array(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.correspondingElement || 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);\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], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S;\n    if (d2 < ε2) {\n      S = Math.log(w1 / w0) / ρ;\n      i = function(t) {\n        return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * t * S) ];\n      };\n    } else {\n      var 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);\n      S = (r1 - r0) / ρ;\n      i = function(t) {\n        var s = t * S, 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    }\n    i.duration = S * 1e3;\n    return i;\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: null\n      };\n      scaleTo(+_);\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      }), center0 = null;\n    }\n    function mousedowned() {\n      var that = this, 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);\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 d3_selection_interrupt.call(this), \n      translate0 = location(center0 = center || d3.mouse(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]+)\\((.*)\\)/.exec(format = format.toLowerCase());\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)) {\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_frame = this[d3_vendorSymbol(this, \"requestAnimationFrame\")] || function(callback) {\n    setTimeout(callback, 17);\n  };\n  d3.timer = function() {\n    d3_timer.apply(this, arguments);\n  };\n  function d3_timer(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      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    return timer;\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(), timer = d3_timer_queueHead;\n    while (timer) {\n      if (now >= timer.t && timer.c(now - timer.t)) timer.c = null;\n      timer = timer.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.c) {\n        if (t1.t < time) time = t1.t;\n        t1 = (t0 = t1).n;\n      } else {\n        t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = 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 = +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 || \"U\" in d) {\n          if (!(\"w\" in d)) d.w = \"W\" in d ? 1 : 0;\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 < -ε) ^ 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.toLowerCase()) || /^(#|rgb\\(|hsl\\()/i.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_interpolateTransformPop(s) {\n    return s.length ? s.pop() + \",\" : \"\";\n  }\n  function d3_interpolateTranslate(ta, tb, s, q) {\n    if (ta[0] !== tb[0] || ta[1] !== tb[1]) {\n      var i = s.push(\"translate(\", null, \",\", null, \")\");\n      q.push({\n        i: i - 4,\n        x: d3_interpolateNumber(ta[0], tb[0])\n      }, {\n        i: i - 2,\n        x: d3_interpolateNumber(ta[1], tb[1])\n      });\n    } else if (tb[0] || tb[1]) {\n      s.push(\"translate(\" + tb + \")\");\n    }\n  }\n  function d3_interpolateRotate(ra, rb, s, q) {\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(d3_interpolateTransformPop(s) + \"rotate(\", null, \")\") - 2,\n        x: d3_interpolateNumber(ra, rb)\n      });\n    } else if (rb) {\n      s.push(d3_interpolateTransformPop(s) + \"rotate(\" + rb + \")\");\n    }\n  }\n  function d3_interpolateSkew(wa, wb, s, q) {\n    if (wa !== wb) {\n      q.push({\n        i: s.push(d3_interpolateTransformPop(s) + \"skewX(\", null, \")\") - 2,\n        x: d3_interpolateNumber(wa, wb)\n      });\n    } else if (wb) {\n      s.push(d3_interpolateTransformPop(s) + \"skewX(\" + wb + \")\");\n    }\n  }\n  function d3_interpolateScale(ka, kb, s, q) {\n    if (ka[0] !== kb[0] || ka[1] !== kb[1]) {\n      var i = s.push(d3_interpolateTransformPop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({\n        i: i - 4,\n        x: d3_interpolateNumber(ka[0], kb[0])\n      }, {\n        i: i - 2,\n        x: d3_interpolateNumber(ka[1], kb[1])\n      });\n    } else if (kb[0] !== 1 || kb[1] !== 1) {\n      s.push(d3_interpolateTransformPop(s) + \"scale(\" + kb + \")\");\n    }\n  }\n  function d3_interpolateTransform(a, b) {\n    var s = [], q = [];\n    a = d3.transform(a), b = d3.transform(b);\n    d3_interpolateTranslate(a.translate, b.translate, s, q);\n    d3_interpolateRotate(a.rotate, b.rotate, s, q);\n    d3_interpolateSkew(a.skew, b.skew, s, q);\n    d3_interpolateScale(a.scale, b.scale, s, q);\n    a = b = null;\n    return function(t) {\n      var i = -1, n = q.length, 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: groupSums[di]\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\"), timer, 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        timer = null;\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 / (s.weight + t.weight) : .5);\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) {\n          alpha = x;\n        } else {\n          timer.c = null, timer.t = NaN, timer = null;\n          event.end({\n            type: \"end\",\n            alpha: alpha = 0\n          });\n        }\n      } else if (x > 0) {\n        event.start({\n          type: \"start\",\n          alpha: alpha = x\n        });\n        timer = 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), sum = d3.sum(values), k = sum ? (da - n * pa) / sum : 0, 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 = root.y = 0;\n      if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0;\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    d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n    d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n    return domain;\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, base * n / scale.ticks().length);\n      return function(d) {\n        var i = d / pow(Math.round(log(d)));\n        if (i * base < base - .5) i *= base;\n        return i <= 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 (da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {\n        cr = r0 < r1 ^ cw ? 0 : 1;\n        var rc1 = rc, rc0 = rc;\n        if (da < π) {\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          rc0 = Math.min(rc, (r0 - lc) / (kc - 1));\n          rc1 = Math.min(rc, (r1 - lc) / (kc + 1));\n        }\n        if (x1 != null) {\n          var 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 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(Math.max(0, 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.length > 1 ? points.join(\"L\") : points + \"Z\";\n  }\n  function d3_svg_lineLinearClosed(points) {\n    return points.join(\"L\") + \"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_lineLinearClosed(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, activeId, active;\n      if ((lock = this[ns]) && (active = lock[activeId = lock.active])) {\n        active.timer.c = null;\n        active.timer.t = NaN;\n        if (--lock.count) delete lock[activeId]; 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], time, timer, duration, ease, tweens;\n    function schedule(elapsed) {\n      var delay = transition.delay;\n      timer.t = delay + time;\n      if (delay <= elapsed) return start(elapsed - delay);\n      timer.c = start;\n    }\n    function start(elapsed) {\n      var activeId = lock.active, active = lock[activeId];\n      if (active) {\n        active.timer.c = null;\n        active.timer.t = NaN;\n        --lock.count;\n        delete lock[activeId];\n        active.event && active.event.interrupt.call(node, node.__data__, active.index);\n      }\n      for (var cancelId in lock) {\n        if (+cancelId < id) {\n          var cancel = lock[cancelId];\n          cancel.timer.c = null;\n          cancel.timer.t = NaN;\n          --lock.count;\n          delete lock[cancelId];\n        }\n      }\n      timer.c = tick;\n      d3_timer(function() {\n        if (timer.c && tick(elapsed || 1)) {\n          timer.c = null;\n          timer.t = NaN;\n        }\n        return 1;\n      }, 0, time);\n      lock.active = id;\n      transition.event && transition.event.start.call(node, node.__data__, i);\n      tweens = [];\n      transition.tween.forEach(function(key, value) {\n        if (value = value.call(node, node.__data__, i)) {\n          tweens.push(value);\n        }\n      });\n      ease = transition.ease;\n      duration = transition.duration;\n    }\n    function tick(elapsed) {\n      var t = elapsed / duration, e = ease(t), n = tweens.length;\n      while (n > 0) {\n        tweens[--n].call(node, e);\n      }\n      if (t >= 1) {\n        transition.event && transition.event.end.call(node, node.__data__, i);\n        if (--lock.count) delete lock[id]; else delete node[ns];\n        return 1;\n      }\n    }\n    if (!transition) {\n      time = inherit.time;\n      timer = d3_timer(schedule, 0, time);\n      transition = lock[id] = {\n        tween: new d3_Map(),\n        time: time,\n        timer: timer,\n        delay: inherit.delay,\n        duration: inherit.duration,\n        ease: inherit.ease,\n        index: i\n      };\n      inherit = null;\n      ++lock.count;\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_ = d3_array(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) this.d3 = d3, define(d3); else if (typeof module === \"object\" && module.exports) module.exports = d3; else this.d3 = d3;\n}();"],"sourceRoot":""}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy