d3 = function() { var π = Math.PI, ε = 1e-6, d3 = { version: "3.0.6" }, d3_radians = π / 180, d3_degrees = 180 / π, d3_document = document, d3_window = window; function d3_target(d) { return d.target; } function d3_source(d) { return d.source; } var d3_format_decimalPoint = ".", d3_format_thousandsSeparator = ",", d3_format_grouping = [ 3, 3 ]; if (!Date.now) Date.now = function() { return +new Date(); }; try { d3_document.createElement("div").style.setProperty("opacity", 0, ""); } catch (error) { var d3_style_prototype = d3_window.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty; d3_style_prototype.setProperty = function(name, value, priority) { d3_style_setProperty.call(this, name, value + "", priority); }; } function d3_class(ctor, properties) { try { for (var key in properties) { Object.defineProperty(ctor.prototype, key, { value: properties[key], enumerable: false }); } } catch (e) { ctor.prototype = properties; } } var d3_array = d3_arraySlice; function d3_arrayCopy(pseudoarray) { var i = -1, n = pseudoarray.length, array = []; while (++i < n) array.push(pseudoarray[i]); return array; } function d3_arraySlice(pseudoarray) { return Array.prototype.slice.call(pseudoarray); } try { d3_array(d3_document.documentElement.childNodes)[0].nodeType; } catch (e) { d3_array = d3_arrayCopy; } var d3_arraySubclass = [].__proto__ ? function(array, prototype) { array.__proto__ = prototype; } : function(array, prototype) { for (var property in prototype) array[property] = prototype[property]; }; d3.map = function(object) { var map = new d3_Map(); for (var key in object) map.set(key, object[key]); return map; }; function d3_Map() {} d3_class(d3_Map, { has: function(key) { return d3_map_prefix + key in this; }, get: function(key) { return this[d3_map_prefix + key]; }, set: function(key, value) { return this[d3_map_prefix + key] = value; }, remove: function(key) { key = d3_map_prefix + key; return key in this && delete this[key]; }, keys: function() { var keys = []; this.forEach(function(key) { keys.push(key); }); return keys; }, values: function() { var values = []; this.forEach(function(key, value) { values.push(value); }); return values; }, entries: function() { var entries = []; this.forEach(function(key, value) { entries.push({ key: key, value: value }); }); return entries; }, forEach: function(f) { for (var key in this) { if (key.charCodeAt(0) === d3_map_prefixCode) { f.call(this, key.substring(1), this[key]); } } } }); var d3_map_prefix = "\0", d3_map_prefixCode = d3_map_prefix.charCodeAt(0); function d3_identity(d) { return d; } function d3_true() { return true; } function d3_functor(v) { return typeof v === "function" ? v : function() { return v; }; } d3.functor = d3_functor; d3.rebind = function(target, source) { var i = 1, n = arguments.length, method; while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]); return target; }; function d3_rebind(target, source, method) { return function() { var value = method.apply(source, arguments); return arguments.length ? target : value; }; } d3.ascending = function(a, b) { return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; }; d3.descending = function(a, b) { return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; }; d3.mean = function(array, f) { var n = array.length, a, m = 0, i = -1, j = 0; if (arguments.length === 1) { while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j; } else { while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j; } return j ? m : undefined; }; d3.median = function(array, f) { if (arguments.length > 1) array = array.map(f); array = array.filter(d3_number); return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined; }; d3.min = function(array, f) { var i = -1, n = array.length, a, b; if (arguments.length === 1) { while (++i < n && ((a = array[i]) == null || a != a)) a = undefined; while (++i < n) if ((b = array[i]) != null && a > b) a = b; } else { while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined; while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; } return a; }; d3.max = function(array, f) { var i = -1, n = array.length, a, b; if (arguments.length === 1) { while (++i < n && ((a = array[i]) == null || a != a)) a = undefined; while (++i < n) if ((b = array[i]) != null && b > a) a = b; } else { while (++i < n && ((a = f.call(array, array[i], i)) == null || a != a)) a = undefined; while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; } return a; }; d3.extent = function(array, f) { var i = -1, n = array.length, a, b, c; if (arguments.length === 1) { while (++i < n && ((a = c = array[i]) == null || a != a)) a = c = undefined; while (++i < n) if ((b = array[i]) != null) { if (a > b) a = b; if (c < b) c = b; } } else { while (++i < n && ((a = c = f.call(array, array[i], i)) == null || a != a)) a = undefined; while (++i < n) if ((b = f.call(array, array[i], i)) != null) { if (a > b) a = b; if (c < b) c = b; } } return [ a, c ]; }; d3.random = { normal: function(µ, σ) { var n = arguments.length; if (n < 2) σ = 1; if (n < 1) µ = 0; return function() { var x, y, r; do { x = Math.random() * 2 - 1; y = Math.random() * 2 - 1; r = x * x + y * y; } while (!r || r > 1); return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r); }; }, logNormal: function() { var random = d3.random.normal.apply(d3, arguments); return function() { return Math.exp(random()); }; }, irwinHall: function(m) { return function() { for (var s = 0, j = 0; j < m; j++) s += Math.random(); return s / m; }; } }; function d3_number(x) { return x != null && !isNaN(x); } d3.sum = function(array, f) { var s = 0, n = array.length, a, i = -1; if (arguments.length === 1) { while (++i < n) if (!isNaN(a = +array[i])) s += a; } else { while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a; } return s; }; d3.quantile = function(values, p) { var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h; return e ? v + e * (values[h] - v) : v; }; d3.shuffle = function(array) { var m = array.length, t, i; while (m) { i = Math.random() * m-- | 0; t = array[m], array[m] = array[i], array[i] = t; } return array; }; d3.transpose = function(matrix) { return d3.zip.apply(d3, matrix); }; d3.zip = function() { if (!(n = arguments.length)) return []; for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) { for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) { zip[j] = arguments[j][i]; } } return zips; }; function d3_zipLength(d) { return d.length; } d3.bisector = function(f) { return { left: function(a, x, lo, hi) { if (arguments.length < 3) lo = 0; if (arguments.length < 4) hi = a.length; while (lo < hi) { var mid = lo + hi >>> 1; if (f.call(a, a[mid], mid) < x) lo = mid + 1; else hi = mid; } return lo; }, right: function(a, x, lo, hi) { if (arguments.length < 3) lo = 0; if (arguments.length < 4) hi = a.length; while (lo < hi) { var mid = lo + hi >>> 1; if (x < f.call(a, a[mid], mid)) hi = mid; else lo = mid + 1; } return lo; } }; }; var d3_bisector = d3.bisector(function(d) { return d; }); d3.bisectLeft = d3_bisector.left; d3.bisect = d3.bisectRight = d3_bisector.right; d3.nest = function() { var nest = {}, keys = [], sortKeys = [], sortValues, rollup; function map(array, depth) { if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array; var i = -1, n = array.length, key = keys[depth++], keyValue, object, valuesByKey = new d3_Map(), values, o = {}; while (++i < n) { if (values = valuesByKey.get(keyValue = key(object = array[i]))) { values.push(object); } else { valuesByKey.set(keyValue, [ object ]); } } valuesByKey.forEach(function(keyValue, values) { o[keyValue] = map(values, depth); }); return o; } function entries(map, depth) { if (depth >= keys.length) return map; var a = [], sortKey = sortKeys[depth++], key; for (key in map) { a.push({ key: key, values: entries(map[key], depth) }); } if (sortKey) a.sort(function(a, b) { return sortKey(a.key, b.key); }); return a; } nest.map = function(array) { return map(array, 0); }; nest.entries = function(array) { return entries(map(array, 0), 0); }; nest.key = function(d) { keys.push(d); return nest; }; nest.sortKeys = function(order) { sortKeys[keys.length - 1] = order; return nest; }; nest.sortValues = function(order) { sortValues = order; return nest; }; nest.rollup = function(f) { rollup = f; return nest; }; return nest; }; d3.keys = function(map) { var keys = []; for (var key in map) keys.push(key); return keys; }; d3.values = function(map) { var values = []; for (var key in map) values.push(map[key]); return values; }; d3.entries = function(map) { var entries = []; for (var key in map) entries.push({ key: key, value: map[key] }); return entries; }; d3.permute = function(array, indexes) { var permutes = [], i = -1, n = indexes.length; while (++i < n) permutes[i] = array[indexes[i]]; return permutes; }; d3.merge = function(arrays) { return Array.prototype.concat.apply([], arrays); }; function d3_collapse(s) { return s.trim().replace(/\s+/g, " "); } d3.range = function(start, stop, step) { if (arguments.length < 3) { step = 1; if (arguments.length < 2) { stop = start; start = 0; } } if ((stop - start) / step === Infinity) throw new Error("infinite range"); var range = [], k = d3_range_integerScale(Math.abs(step)), i = -1, j; start *= k, stop *= k, step *= k; if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k); return range; }; function d3_range_integerScale(x) { var k = 1; while (x * k % 1) k *= 10; return k; } d3.requote = function(s) { return s.replace(d3_requote_re, "\\$&"); }; var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; d3.round = function(x, n) { return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x); }; d3.xhr = function(url, mimeType, callback) { var xhr = {}, dispatch = d3.dispatch("progress", "load", "error"), headers = {}, response = d3_identity, request = new (d3_window.XDomainRequest && /^(http(s)?:)?\/\//.test(url) ? XDomainRequest : XMLHttpRequest)(); "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() { request.readyState > 3 && respond(); }; function respond() { var s = request.status; !s && request.responseText || s >= 200 && s < 300 || s === 304 ? dispatch.load.call(xhr, response.call(xhr, request)) : dispatch.error.call(xhr, request); } request.onprogress = function(event) { var o = d3.event; d3.event = event; try { dispatch.progress.call(xhr, request); } finally { d3.event = o; } }; xhr.header = function(name, value) { name = (name + "").toLowerCase(); if (arguments.length < 2) return headers[name]; if (value == null) delete headers[name]; else headers[name] = value + ""; return xhr; }; xhr.mimeType = function(value) { if (!arguments.length) return mimeType; mimeType = value == null ? null : value + ""; return xhr; }; xhr.response = function(value) { response = value; return xhr; }; [ "get", "post" ].forEach(function(method) { xhr[method] = function() { return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments))); }; }); xhr.send = function(method, data, callback) { if (arguments.length === 2 && typeof data === "function") callback = data, data = null; request.open(method, url, true); if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*"; d3=function(){var k=Math.PI,z=1e-6,F={version:"3.0.6"},b=k/180,x=180/k,u=document,N=window;function t(t){return t.target}function e(t){return t.source}var a=[3,3];Date.now||(Date.now=function(){return+new Date});try{u.createElement("div").style.setProperty("opacity",0,"")}catch(t){var n=N.CSSStyleDeclaration.prototype,r=n.setProperty;n.setProperty=function(t,n,e){r.call(this,t,n+"",e)}}var f=function(t){return Array.prototype.slice.call(t)};function i(t){for(var n=-1,e=t.length,r=[];++n>>1;o.call(t,t[i],i)>>1;n=g.length)return s?s.call(h,t):f?t.sort(f):t;for(var n,r,i,o=-1,u=t.length,a=g[e++],c=new M,l={};++o=g.length)return n;var r,i=[],o=u[e++];for(r in n)i.push({key:r,values:t(n[r],e)});return o&&i.sort(function(t,n){return o(t.key,n.key)}),i}(p(t,0),0)},h.key=function(t){return g.push(t),h},h.sortKeys=function(t){return u[g.length-1]=t,h},h.sortValues=function(t){return f=t,h},h.rollup=function(t){return s=t,h},h},F.keys=function(t){var n=[];for(var e in t)n.push(e);return n},F.values=function(t){var n=[];for(var e in t)n.push(t[e]);return n},F.entries=function(t){var n=[];for(var e in t)n.push({key:e,value:t[e]});return n},F.permute=function(t,n){for(var e=[],r=-1,i=n.length;++rn;)i.push(r/o);else for(;(r=t+e*++u)",a=n[3]||"",c=n[4]||"",l=n[5],f=+n[6],s=n[7],h=n[8],g=n[9],p=1,d="",v=!1;switch(h&&(h=+h.substring(1)),(l||"0"===o&&"="===u)&&(l=o="0",u="=",s&&(f-=Math.floor((f-1)/4))),g){case"n":s=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":c&&(c="0"+g.toLowerCase());case"c":case"d":v=!0,h=0;break;case"s":p=-1,g="r"}"#"===c&&(c=""),"r"!=g||h||(g="g"),g=L.get(g)||j;var m=l&&s;return function(t){if(v&&t%1)return"";var n=t<0||0===t&&1/t<0?(t=-t,"-"):a;if(p<0){var e=F.formatPrefix(t,h);t=e.scale(t),d=e.symbol}else t*=p;t=g(t,h),!l&&s&&(t=P(t));var r=c.length+t.length+(m?0:n.length),i=r"===u?i+n+t:"^"===u?i.substring(0,r>>=1)+n+t+i.substring(r):n+(m?t:i+t))+d}};var D=/(?:([^{])?([<>=^]))?([+\- ])?(#)?(0)?([0-9]+)?(,)?(\.[0-9]+)?([a-zA-Z%])?/,L=F.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,n){return t.toPrecision(n)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},r:function(t,n){return(t=F.round(t,H(t,n))).toFixed(Math.max(0,Math.min(20,H(t*(1+1e-15),n))))}});function H(t,n){return n-(t?Math.ceil(Math.log(t)/Math.LN10):1)}function j(t){return t+""}var P=S,R=a.length;P=function(t){for(var n=t.lastIndexOf("."),e=0<=n?"."+t.substring(n+1):(n=t.length,""),r=[],i=0,o=a[0];0g?f():(p.active=g,u.start.call(s,i,h),r.tween.forEach(function(t,n){(n=n.call(s,i,h))&&l.push(n)}),e(t)||F.timer(e,0,d),1)}function e(t){if(p.active!==g)return f();for(var n=(t-a)/c,e=o(n),r=l.length;0=e.delay&&(e.flush=e.callback(t)),e=e.next;var r=wn()-n;24o;r--);n=n.slice(e,r)}return n};o.tickFormat=function(t,n){if(arguments.length<2&&(n=Rn),!arguments.length)return n;var e,r=Math.max(.1,t/o.ticks().length),i=c===Yn?(e=-1e-12,Math.floor):(e=1e-12,Math.ceil);return function(t){return t/l(i(c(t)+e))<=r?n(t):""}};o.copy=function(){return t(a.copy(),c)};return zn(o,a)}(F.scale.linear(),On)};var Rn=F.format(".0e");function On(t){return Math.log(t<0?0:t)/Math.LN10}function Yn(t){return-Math.log(0=u[0]&&r.push(o);for(--a,i=0;++irect,.s>rect").attr("width",_[1][0]-_[0][0])}function E(t){t.select(".extent").attr("y",_[0][1]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",_[1][1]-_[0][1])}function u(){var f,e,n=this,t=F.select(F.event.target),r=M.of(n,arguments),i=F.select(n),o=t.datum(),u=!/^(n|s)$/.test(o)&&b,a=!/^(e|w)$/.test(o)&&x,s=t.classed("extent"),h=p(),c=F.select(N).on("mousemove.brush",d).on("mouseup.brush",m).on("touchmove.brush",d).on("touchend.brush",m).on("keydown.brush",function(){32==F.event.keyCode&&(s||(f=null,h[0]-=_[1][0],h[1]-=_[1][1],s=2),W())}).on("keyup.brush",function(){32==F.event.keyCode&&2==s&&(h[0]+=_[1][0],h[1]+=_[1][1],s=0,W())});if(s)h[0]=_[0][0]-h[0],h[1]=_[0][1]-h[1];else if(o){var l=+/w$/.test(o),g=+/^n/.test(o);e=[_[1-l][0]-h[0],_[1-g][1]-h[1]],h[0]=_[l][0],h[1]=_[g][1]}else F.event.altKey&&(f=h.slice());function p(){var t=F.event.changedTouches;return t?F.touches(n,t)[0]:F.mouse(n)}function d(){var t=p(),n=!1;e&&(t[0]+=e[0],t[1]+=e[1]),s||(F.event.altKey?(f||(f=[(_[0][0]+_[1][0])/2,(_[0][1]+_[1][1])/2]),h[0]=_[+(t[0]i&&(r=e,i=n);return r}function Ke(t){return t.reduce(We,0)}function We(t,n){return t+n[1]}function Qe(t,n){return tr(t,Math.ceil(Math.log(n.length)/Math.LN2+1))}function tr(t,n){for(var e=-1,r=+t[0],i=(t[1]-r)/n,o=[];++e<=n;)o[e]=i*e+r;return o}function nr(t){return[F.min(t),F.max(t)]}function er(t,n){return F.rebind(t,n,"sort","children","value"),(t.nodes=t).links=ur,t}function rr(t){return t.children}function ir(t){return t.value}function or(t,n){return n.value-t.value}function ur(t){return F.merge(t.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function ar(t,n){return t.value-n.value}function cr(t,n){var e=t._pack_next;(t._pack_next=n)._pack_prev=t,(n._pack_next=e)._pack_prev=n}function lr(t,n){(t._pack_next=n)._pack_prev=t}function fr(t,n){var e=n.x-t.x,r=n.y-t.y,i=t.r+n.r;return.001=u[0]&&r<=u[1]&&((e=i[F.bisect(a,r,1,l)-1]).y+=f,e.push(t[n]));return i}return e.value=function(t){return arguments.length?(h=t,e):h},e.range=function(t){return arguments.length?(g=A(t),e):g},e.bins=function(n){return arguments.length?(p="number"==typeof n?function(t){return tr(t,n)}:A(n),e):p},e.frequency=function(t){return arguments.length?(s=!!t,e):s},e},F.layout.hierarchy=function(){var s=or,h=rr,g=ir;function p(t){var n=[];return function t(n,e,r){var i=h.call(p,n,e);if(n.depth=e,r.push(n),i&&(o=i.length)){for(var o,u,a=-1,c=n.children=[],l=0,f=e+1;++ae.dy)&&(l=e.dy);++oe.dx)&&(l=e.dx);++oz)return[Math.atan2(Xr,Vr)*x,Math.asin(Math.max(-1,Math.min(1,Zr/n)))*x]};var Jr={sphere:function(){Ur<2&&(Ur=2,Ir=Vr=Xr=Zr=0)},point:Gr,lineStart:Wr,lineEnd:Qr,polygonStart:function(){Ur<2&&(Ur=2,Ir=Vr=Xr=Zr=0),Jr.lineStart=Kr},polygonEnd:function(){Jr.lineStart=Wr}};function Gr(t,n){if(!Ur){++Ir,t*=b;var e=Math.cos(n*=b);Vr+=(e*Math.cos(t)-Vr)/Ir,Xr+=(e*Math.sin(t)-Xr)/Ir,Zr+=(Math.sin(n)-Zr)/Ir}}function Kr(){var e,r;Ur=1,Wr(),Ur=2;var i=Jr.point;Jr.point=function(t,n){i(e=t,r=n)},Jr.lineEnd=function(){Jr.point(e,r),Qr(),Jr.lineEnd=Qr}}function Wr(){var a,c,l;function r(t,n){t*=b;var e=Math.cos(n*=b),r=e*Math.cos(t),i=e*Math.sin(t),o=Math.sin(n),u=Math.atan2(Math.sqrt((u=c*o-l*i)*u+(u=l*r-a*o)*u+(u=a*i-c*r)*u),a*r+c*i+l*o);Ir+=u,Vr+=u*(a+(a=r)),Xr+=u*(c+(c=i)),Zr+=u*(l+(l=o))}1z?Math.atan((Math.sin(r)*(a=Math.cos(o))*Math.sin(i)-Math.sin(o)*(u=Math.cos(r))*Math.sin(e))/(u*a*c)):(r+o)/2,s.point(d,p),s.lineEnd(),s.lineStart(),s.point(l,p),h=0),s.point(g=t,p=n),d=l},lineEnd:function(){s.lineEnd(),g=p=NaN},clean:function(){return 2-h}}},function(t,n,e,r){var i;if(null==t)i=e*k/2,r.point(-k,i),r.point(0,i),r.point(k,i),r.point(k,0),r.point(k,-i),r.point(0,-i),r.point(-k,-i),r.point(-k,0),r.point(-k,i);else if(Math.abs(t[0]-n[0])>z){var o=(t[0]d}function s(t,n){var e=[1,0,0],r=Hr(Lr(t),Lr(n)),i=Fr(r,r),o=r[0],u=i-o*o;if(!u)return t;var a=d*i/u,c=-d*o/u,l=Hr(e,r),f=Pr(e,a);jr(f,Pr(r,c));var s=l,h=Fr(f,s),g=Fr(s,s),p=Pr(s,(-h-Math.sqrt(h*h-g*(Fr(f,f)-1)))/g);return jr(p,f),zr(p)}}(v=+t),m):v},m.scale=function(t){return arguments.length?(a=+t,M()):a},m.translate=function(t){return arguments.length?(c=+t[0],l=+t[1],M()):[c,l]},m.center=function(t){return arguments.length?(f=t[0]%360*b,s=t[1]%360*b,M()):[f*x,s*x]},m.rotate=function(t){return arguments.length?(h=t[0]%360*b,g=t[1]%360*b,p=2z}).map(function(t){return n[t]})})).forEach(function(t,n){var e=t.length;if(!e)return t.push([-y,-y],[-y,y],[y,y],[y,-y]);if(!(2n.y?1:t.xn.x?1:0}),bottomSite:null},e={list:[],leftEnd:null,rightEnd:null,init:function(){e.leftEnd=e.createHalfEdge(null,"l"),e.rightEnd=e.createHalfEdge(null,"l"),e.leftEnd.r=e.rightEnd,e.rightEnd.l=e.leftEnd,e.list.unshift(e.leftEnd,e.rightEnd)},createHalfEdge:function(t,n){return{edge:t,side:n,vertex:null,l:null,r:null}},insert:function(t,n){n.l=t,n.r=t.r,t.r.l=n,t.r=n},leftBound:function(t){for(var n=e.leftEnd;(n=n.r)!=e.rightEnd&&i.rightOf(n,t););return n=n.l},del:function(t){t.l.r=t.r,t.r.l=t.l,t.edge=null},right:function(t){return t.r},left:function(t){return t.l},leftRegion:function(t){return null==t.edge?n.bottomSite:t.edge.region[t.side]},rightRegion:function(t){return null==t.edge?n.bottomSite:t.edge.region[Yi[t.side]]}},i={bisect:function(t,n){var e={region:{l:t,r:n},ep:{l:null,r:null}},r=n.x-t.x,i=n.y-t.y,o=0=(c.yr.x;if(i&&"l"===t.side)return 1;if(!i&&"r"===t.side)return 0;if(1===e.a){var o=n.y-r.y,u=n.x-r.x,a=0,c=0;if(!i&&e.b<0||i&&0<=e.b?c=a=o>=e.b*u:(c=n.x+n.y*e.b>e.c,e.b<0&&(c=!c),c||(a=1)),!a){var l=r.x-e.region.l.x;c=e.b*(u*u-o*o)u.ystar||t.ystar==u.ystar&&n.x>u.vertex.x))break}i.splice(r,0,t)},del:function(t){for(var n=0,e=a.list,r=e.length;ng.y&&(p=h,h=g,g=p,y="r"),m=i.bisect(h,g),s=e.createHalfEdge(m,y),e.insert(l,s),i.endPoint(m,Yi[y],v),(d=i.intersect(l,s))&&(a.del(l),a.insert(l,d,i.distance(d,h))),(d=i.intersect(s,f))&&a.insert(s,d,i.distance(d,h))}for(u=e.right(e.leftEnd);u!=e.rightEnd;u=e.right(u))r(u.edge)}F.geom.delaunay=function(a){var n=a.map(function(){return[]}),c=[];return Ui(a,function(t){n[t.region.l.index].push(a[t.region.r.index])}),n.forEach(function(t,n){var e=a[n],r=e[0],i=e[1];t.forEach(function(t){t.angle=Math.atan2(t[0]-r,t[1]-i)}),t.sort(function(t,n){return t.angle-n.angle});for(var o=0,u=t.length-1;or&&(r=o.x),o.y>i&&(i=o.y);var c=r-n,l=i-e;function s(t,n,e,r,i,o){if(!isNaN(n.x)&&!isNaN(n.y))if(t.leaf){var u=t.point;u?(Math.abs(u.x-n.x)+Math.abs(u.y-n.y)<.01||(t.point=null,f(t,u,e,r,i,o)),f(t,n,e,r,i,o)):t.point=n}else f(t,n,e,r,i,o)}function f(t,n,e,r,i,o){var u=.5*(e+i),a=.5*(r+o),c=n.x>=u,l=n.y>=a,f=(l<<1)+c;t.leaf=!1,c?e=u:i=u,l?r=a:o=a,s(t=t.nodes[f]||(t.nodes[f]={leaf:!0,nodes:[],point:null}),n,e,r,i,o)}l