<script type=“text/javascript”>
/*
* http://d3js.org/d3.v3.min.js */
!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function u(n){return!isNaN(n)}function i(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t,e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t,e)>0?u=i:r=i+1}return r}}}function a(n){return n.length}function o(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t,enumerable:!1})}function c(){this._=Object.create(null)}function s(n){return(n+=“”)===xa||n===ba?ba+n:n}function f(n){return(n+=“”)===ba?n.slice(1):n}function h(n){return s(n)in this._}function g(n){return(n=s(n))in this._&&delete this._}function p(){var n=[];for(var t in this._)n.push(f(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function m(){this._=Object.create(null)}function y(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=_a.length;r>e;++e){var u=_a+t;if(u in n)return u}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,u=-1,i=r.length;++u.on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,u){var i,a=r.get(t);return arguments.length<2?a&&a.on:(a&&(a.on=null,e=e.slice(0,i=e.indexOf(a)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function S(){oa.event.preventDefault()}function k(){for(var n,t=oa.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e )))?h.push(s):d.set(l,);return t?(s=t(),f=function(e,r){s.set(e,n(t,r,o))}):(s={},f=function(e,r){s=n(t,r,o)}),d.forEach(f),s}function t(n,e){if(e>=i.length)return n;var r=[],u=a;return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],a=;return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(oa.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return a=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},oa.set=function(n){var t=new m;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n);return t},l(m,{has:h,add:function(n){return this._=!0,n},remove:g,values:p,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,f(t))}}),oa.behavior={},oa.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r]=M(n,t,t);return n};var _a=;oa.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t ,f,h,v,d,m,y);–g}else n.forEach(k.add);return f=h=n=s=null,k}var a,o=Ce,l=ze;return(a=arguments.length)?(o=sr,l=fr,3===a&&(u=e,r=t,e=t=0),i(n)):(i.x=function(n){return arguments.length?(o=n,i):o},i.y=function(n){return arguments.length?(l=n,i):l},i.extent=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=+n[0],e=+n[1],r=+n[0],u=+n[1]),i):null==t?null:[,[r,u]]},i.size=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=e=0,r=+n,u=+n),i):null==t?null:},i)},oa.interpolateRgb=vr,oa.interpolateObject=dr,oa.interpolateNumber=mr,oa.interpolateString=yr;var hl=/?(?:d+.?d*|.?d+)(?:[-+]?d+)?/g,gl=new RegExp(hl.source,”g“);oa.interpolate=Mr,oa.interpolators=[function(n,t){var e=typeof t;return(”string“===e?uo.has(t.toLowerCase())||/^(#|rgb(|hsl()/i.test(t)?vr:yr:t instanceof on?vr:Array.isArray(t)?xr:”object“===e&&isNaN(t)?dr:mr)(n,t)}],oa.interpolateArray=xr;var pl=function(){return y},vl=oa.map({linear:pl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=oa.map({”in“:y,out:_r,”in-out“:wr,”out-in“:function(n){return wr(_r(n))}});oa.ease=function(n){var t=n.indexOf(”-“),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):”in“;return e=vl.get(e)||pl,r=dl.get®||y,br(r(e.apply(null,la.call(arguments,1))))},oa.interpolateHcl=Rr,oa.interpolateHsl=Dr,oa.interpolateLab=Pr,oa.interpolateRound=Ur,oa.transform=function(n){var t=sa.createElementNS(oa.ns.prefix.svg,”g“);return(oa.transform=function(n){if(null!=n){t.setAttribute(”transform“,n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:ml)})(n)},jr.prototype.toString=function(){return”translate(“ /* // d3.tip // Copyright © 2013 Justin Palmer // // Tooltips for d3.js SVG visualizations // Public - contructs a new tooltip // // Returns a tip d3.tip = function() { }; /* (function() { })(); </script>n
”a“n
”,“n
” 0 1,1 0,“+-2*n+”a“n
”,“n
” 0 1,1 0,“+2*n+”z“}function Gt(n,t){Co+=n,zo+=t,++Lo}function Kt(){function n(n,r){var u=n-t,i=r-e,a=Math.sqrt(u*u+i*i);qo+=a*(t+n)/2,To+=a*(e+r)/2,Ro+=a,Gt(t=n,e=r)}var t,e;Wo.point=function(r,u){Wo.point=n,Gt(t=r,e=u)}}function Qt(){Wo.point=Gt}function ne(){function n(n,t){var e=n-r,i=t-u,a=Math.sqrt(e*e+i*i);qo+=a*(r+n)/2,To+=a*(u+t)/2,Ro+=a,a=u*n-r*t,Do+=a*(r+n),Po+=a*(u+t),Uo+=3*a,Gt(r=n,u=t)}var t,e,r,u;Wo.point=function(i,a){Wo.point=n,Gt(t=r=i,e=u=a)},Wo.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+a,e),n.arc(t,e,a,0,Fa)}function e(t,e){n.moveTo(t,e),o.point=r}function r(t,e){n.lineTo(t,e)}function u(){o.point=t}function i(){n.closePath()}var a=4.5,o={point:t,lineStart:function(){o.point=e},lineEnd:u,polygonStart:function(){o.lineEnd=i},polygonEnd:function(){o.lineEnd=u,o.point=t},pointRadius:function(n){return a=n,o},result:b};return o}function ee(n){function t(n){return(o?r:e)(n)}function e(t){return ie(t,function(e,r){e=n(e,r),t.point(e,e)})}function r(t){function e(e,r){e=n(e,r),t.point(e,e)}function r(){M=NaN,S.point=i,t.lineStart()}function i(e,r){var i=dt(),a=n(e,r);u(M,x,y,b,_,w,M=a,x=a,y=e,b=i,_=i,w=i,o,t),t.point(M,x)}function a(){S.point=e,t.lineEnd()}function l(){ r(),S.point=c,S.lineEnd=s}function c(n,t){i(f=n,h=t),g=M,p=x,v=b,d=_,m=w,S.point=i}function s(){u(M,x,y,b,_,w,g,p,f,v,d,m,o,t),S.lineEnd=a,a()}var f,h,g,p,v,d,m,y,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:a,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,o,l,c,s,f,h,g,p,v,d,m){var y=s-t,M=f-e,x=y*y+M*M;if(x>4*i&&d–){var b=o+g,_=l+p,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=Ma(Ma(w)-1)t
”)“)}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+”rotate(“,null,”)“)-2,x:mr(n,t)})):t&&e.push(Ir(e)+”rotate(“t
”)“)}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+”skewX(“,null,”)“)-2,x:mr(n,t)}):t&&e.push(Ir(e)+”skewX(“t
”)“)}function Xr(n,t,e,r){if(n!==t||n!==t){var u=e.push(Ir(e)+”scale(“,null,”,“,null,”)“);r.push({i:u-4,x:mr(n,t)},{i:u-2,x:mr(n,t)})}else(1!==t||1!==t)&&e.push(Ir(e)+”scale(“t
”)“)}function $r(n,t){var e=[],r=;return n=oa.transform(n),t=oa.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,u=-1,i=r.length;++u).i]=t.x(n);return e.join(”“)}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),u=;t!==r;)t=t.parent,u.push(t);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),u=e.pop(),i=r.pop(),a=null;u===i;)a=u,u=e.pop(),i=r.pop();return a}function Qr(n){n.fixed|=2}function nu(n){n.fixed&=-7}function tu(n){n.fixed|=4,n.px=n.x,n.py=n.y}function eu(n){n.fixed&=-5}function ru(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,a=n.nodes,o=a.length,l=-1;++li[0]
”,“+i,u=n,l=2),t.length>1){o=t,i=n,l++,r+=”C“+(ua[0])
”,“+(ua[1])
”,“+(i-o)+”,“+(i-o)+”,“i[0]
”,“+i;for(var c=2;ci[0]
”,“+i}if(e){var s=n;r+=”Q“+(i+2*o/3)+”,“+(i+2*o/3)+”,“s[0]
”,“+s}return r}function Ci(n,t){for(var e,r=[],u=(1-t)/2,i=n,a=n,o=1,l=n.length;++ot
”A“t
”,“t
” 0 1,1 0,“-t
”A“t
”,“t
” 0 1,1 0,“t
”Z“}function Bi(n){return function(){var t,e,r;(t=this)&&(r=t)&&(r.timer.c=null,r.timer.t=NaN,–t.count?delete t:delete this,t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wi(n,t,e){return Sa(n,Yl),n.namespace=t,n.id=e,n}function Ji(n,t,e,r){var u=n.id,i=n.namespace;return Y(n,”function“==typeof e?function(n,a,o){n[u].tween.set(t,r(e.call(n,n.__data__,a,o)))}:(e=r(e),function(n){n[u].tween.set(t,e)}))}function Gi(n){return null==n&&(n=”“),function(){this.textContent=n}}function Ki(n){return null==n?”__transition__“:”_transition“n
”__“}function Qi(n,t,e,r,u){function i(n){var t=v.delay;return s.t=t+l,n>=t?a(n-t):void(s.c=a)}function a(e){var u=p.active,i=p;i&&(i.timer.c=null,i.timer.t=NaN,–p.count,delete p,i.event&&i.event.interrupt.call(n,n.__data__,i.index));for(var a in p)if(r>+a){var c=p;c.timer.c=null,c.timer.t=NaN,–p.count,delete p}s.c=o,qn(function(){return s.c&&o(e||1)&&(s.c=null,s.t=NaN),1},0,l),p.active=r,v.event&&v.event.start.call(n,n.__data__,t),g=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&g.push®}),h=v.ease,f=v.duration}function o(u){for(var i=u/f,a=h(i),o=g.length;o>0;)g.call(n,a);return i>=1?(v.event&&v.event.end.call(n,n.__data__,t),–p.count?delete p:delete n,1):void 0}var l,s,f,h,g,p=n||(n={active:0,count:0}),v=p;v||(l=u.time,s=qn(i,0,l),v=p={tween:new c,time:l,timer:s,delay:u.delay,duration:u.duration,ease:u.ease,index:t},u=null,++p.count)}function na(n,t,e){n.attr(”transform“,function(n){var r=t(n);return”translate(“+(isFinite®?r:e(n))+”,0)“})}function ta(n,t,e){n.attr(”transform“,function(n){var r=t(n);return”translate(0,“+(isFinite®?r:e(n))+”)“})}function ea(n){return n.toISOString()}function ra(n,t,e){function r(t){return n(t)}function u(n,e){var r=n-n,u=r/e,i=oa.bisect(Kl,u);return i==Kl.length?[t.year,Ku(n.map(function(n){return n/31536e6}),e)]:i?t[u/Kl<Kl/u?i-1:i]:[tc,Ku(n,e)]}return r.invert=function(t){return ua(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(ua)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,ua(+e+1),t).length}var i=r.domain(),a=Yu(i),o=null==n?u(a,10):”number“==typeof n&&u(a,n);return o&&(n=o,t=o),r.domain(Xu(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=ua(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=ua(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yu(r.domain()),i=null==n?u(e,10):”number“==typeof n?u(e,n):!n.range&&;return i&&(n=i,t=i),n.range(e,ua(+e+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ra(n.copy(),t,e)},Ju(r,n)}function ua(n){return new Date(n)}function ia(n){return JSON.parse(n.responseText)}function aa(n){var t=sa.createRange();return t.selectNode(sa.body),t.createContextualFragment(n.responseText)}var oa={version:”3.5.16“},la=[].slice,ca=function(n){return la.call(n)},sa=this.document;if(sa)try{ca(sa.documentElement.childNodes).nodeType}catch(fa){ca=function(n){for(var t=n.length,e=new Array(t);t–;)e=n;return e}}if(Date.now||(Date.now=function(){return+new Date}),sa)try{sa.createElement(”DIV“).style.setProperty(”opacity“,0,”“)}catch(ha){var ga=this.Element.prototype,pa=ga.setAttribute,va=ga.setAttributeNS,da=this.CSSStyleDeclaration.prototype,ma=da.setProperty;ga.setAttribute=function(n,t){pa.call(this,n,t+”“)},ga.setAttributeNS=function(n,t,e){va.call(this,n,t,e+”“)},da.setProperty=function(n,t,e){ma.call(this,n,t+”“,e)}}oa.ascending=e,oa.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},oa.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u)&&r>=r){e=r;break}for(;++u)&&e>r&&(e=r)}else{for(;++u,u))&&r>=r){e=r;break}for(;++u,u))&&e>r&&(e=r)}return e},oa.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u)&&r>=r){e=r;break}for(;++u)&&r>e&&(e=r)}else{for(;++u,u))&&r>=r){e=r;break}for(;++u,u))&&r>e&&(e=r)}return e},oa.extent=function(n,t){var e,r,u,i=-1,a=n.length;if(1===arguments.length){for(;++i)&&r>=r){e=u=r;break}for(;++i)&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i,i))&&r>=r){e=u=r;break}for(;++i,i))&&(e>r&&(e=r),r>u&&(u=r))}return},oa.sum=function(n,t){var e,r=0,i=n.length,a=-1;if(1===arguments.length)for(;++a)&&(r+=e);else for(;++a,a))&&(r+=e);return r},oa.mean=function(n,t){var e,i=0,a=n.length,o=-1,l=a;if(1===arguments.length)for(;++o))?i+=e:–l;else for(;++o,o)))?i+=e:–l;return l?i/l:void 0},oa.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n,i=e-r;return i?u+i*(n-u):u},oa.median=function(n,t){var i,a=[],o=n.length,l=-1;if(1===arguments.length)for(;++l)?(t.push(r=e=n.call(u.parentNode,i.__data__,c,o)),e.__data__=i.__data__):t.push(null)}return E(a)},La.insert=function(n,t){return arguments.length<2&&(t=V(this)),Aa.insert.call(this,n,t)},oa.select=function(t){var e;return”string“==typeof t?(e=,e.parentNode=sa.documentElement):(e=,e.parentNode=n(t)),E()},oa.selectAll=function(n){var t;return”string“==typeof n?(t=ca(Na(n,sa)),t.parentNode=sa.documentElement):(t=ca(n),t.parentNode=null),E()},Aa.on=function(n,t,e){var r=arguments.length;if(3>r){if(”string“!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n,t));return this}if(2>r)return(r=this.node())&&r._;e=!1}return this.each(X(n,t,e))};var qa=oa.map({mouseenter:”mouseover“,mouseleave:”mouseout“});sa&&qa.forEach(function(n){”on“+n in sa&&qa.remove(n)});var Ta,Ra=0;oa.mouse=function(n){return J(n,k())};var Da=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;oa.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t).identifier===e)return J(n,r)},oa.behavior.drag=function(){function n(){this.on(”mousedown.drag“,i).on(”touchstart.drag“,a)}function e(n,t,e,i,a){return function(){function o(){var n,e,r=t(h,v);r&&(n=r-M,e=r-M,p|=n|e,M=r,g({type:”drag“,x:r+c,y:r+c,dx:n,dy:e}))}function l(){t(h,v)&&(m.on(i+d,null).on(a+d,null),y(p),g({type:”dragend“}))}var c,s=this,f=oa.event.target.correspondingElement||oa.event.target,h=s.parentNode,g=r.of(s,arguments),p=0,v=n(),d=”.drag“+(null==v?”“:”-“+v),m=oa.select(e(f)).on(i+d,o).on(a+d,l),y=W(f),M=t(h,v);u?(c=u.apply(s,arguments),c=[c.x-M,c.y-M]):c=,g({type:”dragstart“})}}var r=N(n,”drag“,”dragstart“,”dragend“),u=null,i=e(b,oa.mouse,t,”mousemove“,”mouseup“),a=e(G,oa.touch,y,”touchmove“,”touchend“);return n.origin=function(t){return arguments.length?(u=t,n):u},oa.rebind(n,r,”on“)},oa.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?ca(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Pa=1e-6,Ua=Pa*Pa,ja=Math.PI,Fa=2*ja,Ha=Fa-Pa,Oa=ja/2,Ia=ja/180,Ya=180/ja,Za=Math.SQRT2,Va=2,Xa=4;oa.interpolateZoom=function(n,t){var e,r,u=n,i=n,a=n,o=t,l=t,c=t,s=o-u,f=l-i,h=s*s+f*f;if(Ua>h)r=Math.log(c/a)/Za,e=function(n){return};else{var g=Math.sqrt(h),p=(c*c-a*a+Xa*h)/(2*a*Va*g),v=(c*c-a*a-Xa*h)/(2*c*Va*g),d=Math.log(Math.sqrt(p*p+1)-p),m=Math.log(Math.sqrt(v*v+1)-v);r=(m-d)/Za,e=function(n){var t=n*r,e=rn(d),o=a/(Va*g)*(e*un(Za*t+d)-en(d));return}}return e.duration=1e3*r,e},oa.behavior.zoom=function(){function n(n){n.on(L,f).on(Ba+”.zoom“,g).on(”dblclick.zoom“,p).on(R,h)}function e(n){return[(n-k.x)/k.k,(n-k.y)/k.k]}function r(n){return[n*k.k+k.x,n*k.k+k.y]}function u(n){k.k=Math.max(A,Math.min(A,n))}function i(n,t){t=r(t),k.x+=n-t,k.y+=n-t}function a(t,e,r,a){t.__chart__={x:k.x,y:k.y,k:k.k},u(Math.pow(2,a)),i(d=e,r),t=oa.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function o(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:”zoomstart“})}function c(n){o(),n({type:”zoom“,scale:k.k,translate:})}function s(n){–z||(n({type:”zoomend“}),d=null)}function f(){function n(){o=1,i(oa.mouse(u),h),c(a)}function r(){f.on(q,null).on(T,null),g(o),s(a)}var u=this,a=D.of(u,arguments),o=0,f=oa.select(t(u)).on(q,n).on(T,r),h=e(oa.mouse(u)),g=W(u);Il.call(u),l(a)}function h(){function n(){var n=oa.touches(p);return g=k.k,n.forEach(function(n){n.identifier in d&&(d=e(n))}),n}function t(){var t=oa.event.target;oa.select(t).on(x,r).on(b,o),_.push(t);for(var e=oa.event.changedTouches,u=0,i=e.length;i>u;++u)d[e.identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var s=l;a(p,s,d,Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var s=l,f=l,h=s-f,g=s-f;m=h*h+g*g}}function r(){var n,t,e,r,a=oa.touches(p);Il.call(p);for(var o=0,l=a.length;l>o;++o,r=null)if(e=a,r=d){if(t)break;n=e,t=r}if®{var s=(s=e-n)*s+(s=e-n)*s,f=m&&Math.sqrt(s/m);n=[(n+e)/2,(n+e)/2],t=[(t+r)/2,(t+r)/2],u(f*g)}M=null,i(n,t),c(v)}function o(){if(oa.event.touches.length){for(var t=oa.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t.identifier];for(var u in d)return void n()}oa.selectAll(_).on(y,null),w.on(L,f).on(R,h),N(),s(v)}var g,p=this,v=D.of(p,arguments),d={},m=0,y=”.zoom-“+oa.event.changedTouches.identifier,x=”touchmove“+y,b=”touchend“+y,_=[],w=oa.select(p),N=W(p);t(),l(v),w.on(L,null).on(R,t)}function g(){var n=D.of(this,arguments);y?clearTimeout(y):(Il.call(this),v=e(d=m||oa.mouse(this)),l(n)),y=setTimeout(function(){y=null,s(n)},50),S(),u(Math.pow(2,.002*$a())*k.k),i(d,v),c(n)}function p(){var n=oa.mouse(this),t=Math.log(k.k)/Math.LN2;a(this,n,e(n),oa.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,m,y,M,x,b,_,w,k={x:0,y:0,k:1},E=,A=Wa,C=250,z=0,L=”mousedown.zoom“,q=”mousemove.zoom“,T=”mouseup.zoom“,R=”touchstart.zoom“,D=N(n,”zoomstart“,”zoom“,”zoomend“);return Ba||(Ba=”onwheel“in sa?($a=function(){return-oa.event.deltaY*(oa.event.deltaMode?120:1)},”wheel“):”onmousewheel“in sa?($a=function(){return oa.event.wheelDelta},”mousewheel“):($a=function(){return-oa.event.detail},”MozMousePixelScroll“)),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?oa.select(this).transition().each(”start.zoom“,function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween(”zoom:zoom“,function(){var e=E,r=E,u=d?d:e/2,i=d?d:r/2,a=oa.interpolateZoom(,[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=a(t),o=e/r;this.__chart__=k={x:u-r*o,y:i-r*o,k:o},c(n)}}).each(”interrupt.zoom“,function(){s(n)}).each(”end.zoom“,function(){s(n)}):(this.__chart__=k,l(n),c(n),s(n))})},n.translate=function(t){return arguments.length?(k={x:+t,y:+t,k:k.k},o(),n):},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},u(+t),o(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Wa:[+t,+t],n):A},n.center=function(t){return arguments.length?(m=t&&[+t,+t],n):m},n.size=function(t){return arguments.length?(E=t&&[+t,+t],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},oa.rebind(n,D,”on“)};var $a,Ba,Wa=;oa.color=on,on.prototype.toString=function(){return this.rgb()+”“},oa.hsl=ln;var Ja=ln.prototype=new on;Ja.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Ja.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Ja.rgb=function(){return cn(this.h,this.s,this.l)},oa.hcl=sn;var Ga=sn.prototype=new on;Ga.brighter=function(n){return new sn(this.h,this.c,Math.min(100,this.l+Ka*(arguments.length?n:1)))},Ga.darker=function(n){return new sn(this.h,this.c,Math.max(0,this.l-Ka*(arguments.length?n:1)))},Ga.rgb=function(){return fn(this.h,this.c,this.l).rgb()},oa.lab=hn;var Ka=18,Qa=.95047,no=1,to=1.08883,eo=hn.prototype=new on;eo.brighter=function(n){return new hn(Math.min(100,this.l+Ka*(arguments.length?n:1)),this.a,this.b)},eo.darker=function(n){return new hn(Math.max(0,this.l-Ka*(arguments.length?n:1)),this.a,this.b)},eo.rgb=function(){return gn(this.l,this.a,this.b)},oa.rgb=yn;var ro=yn.prototype=new on;ro.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new yn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new yn(u,u,u)},ro.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new yn(n*this.r,n*this.g,n*this.b)},ro.hsl=function(){return wn(this.r,this.g,this.b)},ro.toString=function(){return”#“+bn(this.r)+bn(this.g)+bn(this.b)};var uo=oa.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});uo.forEach(function(n,t){uo.set(n,Mn(t))}),oa.functor=En,oa.xhr=An(y),oa.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var a=Cn(n,t,null==e?r:u(e),i);return a.row=function(n){return arguments.length?a.response(null==(e=n)?r:u(n)):e},a}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(a).join(n)}function a(n){return o.test(n)?'”'+n.replace(/"/g,'“”')+'“':n}var o=new RegExp(‘[”’n
“n]”),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if®return r(n,e-1);var u=new Function(“d”,“return {”+n.map(function(n,t){return JSON.stringify(n)+“: d[”t
“]”}).join(“,”)+“}”);r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(s>=c)return a;if(u)return u=!1,i;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}s=e+2;var r=n.charCodeAt(e+1);return 13===r?(u=!0,10===n.charCodeAt(e+2)&&++s):10===r&&(u=!0),n.slice(t+1,e).replace(/“”/g,'“')}for(;c>s;){var r=n.charCodeAt(s++),o=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(s)&&(++s,++o);else if(r!==l)continue;return n.slice(t,s-o)}return n.slice(t)}for(var r,u,i={},a={},o=[],c=n.length,s=0,f=0;(r=e())!==a;){for(var h=[];r!==i&&r!==a;)h.push®,r=e();t&&null==(h=t(h,f++))||o.push(h)}return o},e.format=function(t){if(Array.isArray(t))return e.formatRows(t);var r=new m,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(a).join(n)].concat(t.map(function(t){return u.map(function(n){return a(t)}).join(n)})).join(”n“)},e.formatRows=function(n){return n.map(i).join(”n“)},e},oa.csv=oa.dsv(”,“,”text/csv“),oa.tsv=oa.dsv(” “,”text/tab-separated-values“);var io,ao,oo,lo,co=this||function(n){setTimeout(n,17)};oa.timer=function(){qn.apply(this,arguments)},oa.timer.flush=function(){Rn(),Dn()},oa.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var so=.map(Un);oa.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=oa.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),so};var fo=/(?:()?([<>=^]))?([+- ])?([$#])?(0)?(d+)?(,)?(.-?d+)?()?/i,ho=oa.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=oa.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),go=oa.time={},po=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){vo.setUTCDate.apply(this._,arguments)},setDay:function(){vo.setUTCDay.apply(this._,arguments)},setFullYear:function(){vo.setUTCFullYear.apply(this._,arguments)},setHours:function(){vo.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){vo.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){vo.setUTCMinutes.apply(this._,arguments)},setMonth:function(){vo.setUTCMonth.apply(this._,arguments)},setSeconds:function(){vo.setUTCSeconds.apply(this._,arguments)},setTime:function(){vo.setTime.apply(this._,arguments)}};var vo=Date.prototype;go.year=On(function(n){return n=go.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),go.years=go.year.range,go.years.utc=go.year.utc.range,go.day=On(function(n){var t=new po(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),go.days=go.day.range,go.days.utc=go.day.utc.range,go.dayOfYear=function(n){var t=go.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},[”sunday“,”monday“,”tuesday“,”wednesday“,”thursday“,”friday“,”saturday“].forEach(function(n,t){t=7-t;var e=go=On(function(n){return(n=go.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=go.year(n).getDay();return Math.floor((go.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});go=e.range,go.utc=e.utc.range,go=function(n){var e=go.year(n).getDay();return Math.floor((go.dayOfYear(n)+(e+t)%7)/7)}}),go.week=go.sunday,go.weeks=go.sunday.range,go.weeks.utc=go.sunday.utc.range,go.weekOfYear=go.sundayOfYear;var mo={”-“:”“,_:” “,0:”0“},yo=/^s*d+/,Mo=/^%/;oa.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xo=oa.locale({decimal:”.“,thousands:”,“,grouping:,currency:,dateTime:”%a %b %e %X %Y“,date:”%m/%d/%Y“,time:”%H:%M:%S“,periods:,days:, shortDays:,months:,shortMonths:});oa.format=xo.numberFormat,oa.geo={},st.prototype={s:0,t:0,add:function(n){ft(n,this.t,bo),ft(bo.s,this.s,this),this.s?this.t+=bo.t:this.s=bo.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var bo=new st;oa.geo.stream=function(n,t){n&&_o.hasOwnProperty(n.type)?_o(n,t):ht(n,t)};var _o={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r.geometry,t)}},wo={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n,n,n)},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r,t.point(n,n,n)},LineString:function(n,t){gt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r,t,0)},Polygon:function(n,t){pt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r,t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r,t)}};oa.geo.area=function(n){return So=0,oa.geo.stream(n,No),So};var So,ko=new st,No={sphere:function(){So+=4*ja},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ko.reset(),No.lineStart=vt},polygonEnd:function(){var n=2*ko;So+=0>n?4*ja+n:n,No.lineStart=No.lineEnd=No.point=b}};oa.geo.bounds=function(){function n(n,t){M.push(x=),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=dt();if(m){var u=yt(m,r),i=[u,-u,0],a=yt(i,u);bt(a),a=_t(a);var l=t-p,c=l>0?1:-1,v=a*Ya*c,d=Ma(l)>180;if(d^(v>c*p&&c*t>v)){var y=a*Ya;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>c*p&&c*t>v)){var y=-a*Ya;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?o(s,t)>o(s,h)&&(h=t):o(t,h)>o(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?o(s,t)>o(s,h)&&(h=t):o(t,h)>o(s,h)&&(s=t)}else n(t,e);m=r,p=t}function e(){b.point=t}function r(){x=s,x=h,b.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=Ma®>180?r+(r>0?360:-360):r}else v=n,d=e;No.point(n,e),t(n,e)}function i(){No.lineStart()}function a(){u(v,d),No.lineEnd(),Ma(y)>Pa&&(s=-(h=180)),x=s,x=h,m=null}function o(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n-t}function c(n,t){return t<=t?t<=n&&n<=t:nthis.translate
”)rotate(“this.rotate
”)skewX(“this.skew
”)scale(“this.scale
”)“};var ml={a:1,b:0,c:0,d:1,e:0,f:0};oa.interpolateTransform=$r,oa.layout={},oa.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e[n]))return a;return Math.random()*r}var t,e,r,u=M.length,c=x.length,f=s,v=s;for(t=0;u>t;++t)(r=M).index=t,r.weight=0;for(t=0;c>t;++t)r=x,”number“==typeof r.source&&(r.source=M),”number“==typeof r.target&&(r.target=M),++r.source.weight,++r.target.weight;for(t=0;u>t;++t)r=M,isNaN(r.x)&&(r.x=n(”x“,f)),isNaN(r.y)&&(r.y=n(”y“,v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(i=[],”function“==typeof h)for(t=0;c>t;++t)i=+h.call(this,x,t);else for(t=0;c>t;++t)i=h;if(a=[],”function“==typeof g)for(t=0;c>t;++t)a=+g.call(this,x,t);else for(t=0;c>t;++t)a=g;if(o=[],”function“==typeof p)for(t=0;u>t;++t)o=+p.call(this,M,t);else for(t=0;u>t;++t)o=p;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=oa.behavior.drag().origin(y).on(”dragstart.force“,Qr).on(”drag.force“,t).on(”dragend.force“,nu)),arguments.length?void this.on(”mouseover.force“,tu).on(”mouseout.force“,eu).call®:r},oa.rebind(l,c,”on“)};var yl=20,Ml=1,xl=1/0;oa.layout.hierarchy=function(){function n(u){var i,a=,o=[];for(u.depth=0;null!=(i=a.pop());)if(o.push(i),(c=e.call(n,i,i.depth))&&(l=c.length)){for(var l,c,s;–l>=0;)a.push(s=c),s.parent=i,s.depth=i.depth+1;r&&(i.value=0),i.children=c}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return au(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),o}var t=cu,e=ou,r=lu;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(iu(t,function(n){n.children&&(n.value=0)}),au(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},oa.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(a=i.length)){var a,o,l,c=-1;for(r=t.value?r/t.value:0;++c,e,l=o.value*r,u),e+=l}}function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i));return 1+r}function e(e,i){var a=r.call(this,e,i);return n(a,0,u,u/t(a)),a}var r=oa.layout.hierarchy(),u=;return e.size=function(n){return arguments.length?(u=n,e):u},uu(e,r)},oa.layout.pie=function(){function n(a){var o,l=a.length,c=a.map(function(e,r){return+t.call(n,e,r)}),s=+(”function“==typeof r?r.apply(this,arguments):r),f=(”function“==typeof u?u.apply(this,arguments):u)-s,h=Math.min(Math.abs(f)/l,+(”function“==typeof i?i.apply(this,arguments):i)),g=h*(0>f?-1:1),p=oa.sum©,v=p?(f-l*g)/p:0,d=oa.range(l),m=[];return null!=e&&d.sort(e===bl?function(n,t){return c-c}:function(n,t){return e(a,a)}),d.forEach(function(n){m={data:a,value:o=c,startAngle:s,endAngle:s+=o*v+g,padAngle:h}}),m}var t=Number,e=bl,r=0,u=Fa,i=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n.padAngle=function(t){return arguments.length?(i=t,n):i},n};var bl={};oa.layout.stack=function(){function n(o,l){if(!(h=o.length))return o;var c=o.map(function(e,r){return t.call(n,e,r)}),s=c.map(function(t){return t.map(function(t,e){return})}),f=e.call(n,s,l);c=oa.permute(c,f),s=oa.permute(s,f);var h,g,p,v,d=r.call(n,s,l),m=c.length;for(p=0;m>p;++p)for(u.call(n,c[p],v=d,s[p]),g=1;h>g;++g)u.call(n,c[p],v+=s[p],s[p]);return o}var t=y,e=pu,r=vu,u=gu,i=fu,a=hu;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e=”function“==typeof t?t:_l.get(t)||pu,n):e},n.offset=function(t){return arguments.length?(r=”function“==typeof t?t:wl.get(t)||vu,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(a=t,n):a},n.out=function(t){return arguments.length?(u=t,n):u},n};var _l=oa.map({”inside-out“:function(n){var t,e,r=n.length,u=n.map(du),i=n.map(mu),a=oa.range®.sort(function(n,t){return u-u}),o=0,l=0,c=[],s=;for(t=0;r>t;++t)e=a,l>o?(o+=i,c.push(e)):(l+=i,s.push(e));return s.reverse().concat©},reverse:function(n){return oa.range(n.length).reverse()},”default“:pu}),wl=oa.map({silhouette:function(n){var t,e,r,u=n.length,i=n.length,a=[],o=0,l=;for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[e];r>o&&(o=r),a.push®}for(e=0;i>e;++e)l=(o-a)/2;return l},wiggle:function(n){var t,e,r,u,i,a,o,l,c,s=n.length,f=n,h=f.length,g=[];for(g=l=c=0,e=1;h>e;++e){for(t=0,u=0;s>t;++t)u+=n[e];for(t=0,i=0,o=f[0]-f[0];s>t;++t){for(r=0,a=(n[e]-n[e-1])/(2*o);t>r;++r)a+=(n[e]-n[e-1])/o;i+=a*n[e]}g=l-=u?i/u*o:0,c>l&&(c=l)}for(e=0;h>e;++e)g-=c;return g},expand:function(n){var t,e,r,u=n.length,i=n.length,a=1/u,o=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[e];if®for(t=0;u>t;t++)n[e]/=r;else for(t=0;u>t;t++)n[e]=a}for(e=0;i>e;++e)o=0;return o},zero:vu});oa.layout.histogram=function(){function n(n,i){for(var a,o,l=[],c=n.map(e,this),s=r.call(this,c,i),f=u.call(this,s,c,i),i=-1,h=c.length,g=f.length-1,p=t?1:1/h;++in
”A“n
”,“n
” 0 1,“t
” 0,“-n
”A“n
”,“n
” 0 1,“t
” 0,“+n}var e=hi,r=gi,u=fi,i=ql,a=pi,o=vi,l=di;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(u=En(t),n):u},n.padRadius=function(t){return arguments.length?(i=t==ql?ql:En(t),n):i},n.startAngle=function(t){return arguments.length?(a=En(t),n):a},n.endAngle=function(t){return arguments.length?(o=En(t),n):o},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+a.apply(this,arguments)+ +o.apply(this,arguments))/2-Oa;return},n};var ql=”auto“;oa.svg.line=function(){return Mi(y)};var Tl=oa.map({linear:xi,”linear-closed“:bi,step:_i,”step-before“:wi,”step-after“:Si,basis:zi,”basis-open“:Li,”basis-closed“:qi,bundle:Ti,cardinal:Ei,”cardinal-open“:ki,”cardinal-closed“:Ni,monotone:Fi});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=,Dl=,Pl=;oa.svg.line.radial=function(){var n=Mi(Hi);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wi.reverse=Si,Si.reverse=wi,oa.svg.area=function(){return Oi(y)},oa.svg.area.radial=function(){var n=Oi(Hi);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},oa.svg.chord=function(){function n(n,o){var l=t(this,i,n,o),c=t(this,a,n,o);return”M“+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?u(l.r,l.p1,l.r,l.p0):u(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+u(c.r,c.p1,l.r,l.p0))+”Z“}function t(n,t,e,r){var u=t.call(n,e,r),i=o.call(n,u,r),a=l.call(n,u,r)-Oa,s=c.call(n,u,r)-Oa;return{r:i,a0:a,a1:s,p0:,p1:}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return”A“n
”,“n
” 0 “+ +(e>ja)+”,1 “+t}function u(n,t,e,r){return”Q 0,0 “+r}var i=Me,a=xe,o=Ii,l=pi,c=vi;return n.radius=function(t){return arguments.length?(o=En(t),n):o},n.source=function(t){return arguments.length?(i=En(t),n):i},n.target=function(t){return arguments.length?(a=En(t),n):a},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},oa.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),a=e.call(this,n,u),o=(i.y+a.y)/2,l=;return l=l.map®,”M“l[0]
”C“l[1]
” “l[2]
” “+l}var t=Me,e=xe,r=Yi;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},oa.svg.diagonal.radial=function(){var n=oa.svg.diagonal(),t=Yi,e=n.projection;return n.projection=function(n){return arguments.length?e(Zi(t=n)):t},n},oa.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$i)(e.call(this,n,r))}var t=Xi,e=Vi;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=oa.map({circle:$i,cross:function(n){var t=Math.sqrt(n/5)/2;return”M“+-3*t+”,“-t
”H“-t
”V“+-3*t+”H“t
”V“-t
”H“+3*t+”V“t
”H“t
”V“+3*t+”H“-t
”V“t
”H“+-3*t+”Z“},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return”M0,“-t
”L“e
”,0 0,“t
” “-e
”,0Z“},square:function(n){var t=Math.sqrt(n)/2;return”M“-t
”,“-t
”L“t
”,“-t
” “t
”,“t
” “-t
”,“t
”Z“},”triangle-down“:function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return”M0,“e
”L“t
”,“-e
” “-t
”,“-e
”Z“},”triangle-up“:function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return”M0,“-e
”L“t
”,“e
” “-t
”,“e
”Z“}});oa.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Ia);Aa.transition=function(n){for(var t,e,r=Hl||++Zl,u=Ki(n),i=[],a=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},o=-1,l=this.length;++ox[0]
”,“+q*i+”V0H“x[1]
”V“+q*i)):(n=ta,w=”y“,k=”x“,S=”y2“,N=”x2“,C.attr(”dy“,”.32em“).style(”text-anchor“,0>q?”end“:”start“),_.attr(”d“,”M“+q*i+”,“x[0]
”H0V“x[1]
”H“+q*i)),E.attr(N,q*u),z.attr(k,q*M),A.attr(S,0).attr(N,q*u),L.attr(w,0).attr(k,q*M),f.rangeBand){var T=f,R=T.rangeBand()/2;s=f=function(n){return T(n)+R}}else s.rangeBand?s=f:d.call(n,f,s);v.call(n,s,f),m.call(n,f,f)})}var t,e=oa.scale.linear(),r=Vl,u=6,i=6,a=3,o=,l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+”“:Vl,n):r},n.ticks=function(){return arguments.length?(o=ca(arguments),n):o},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments,n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(a=+t,n):a},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl=”bottom“,Xl={top:1,right:1,bottom:1,left:1};oa.svg.brush=function(){function n(t){t.each(function(){var t=oa.select(this).style(”pointer-events“,”all“).style(”-webkit-tap-highlight-color“,”rgba(0,0,0,0)“).on(”mousedown.brush“,i).on(”touchstart.brush“,i),a=t.selectAll(”.background“).data();a.enter().append(”rect“).attr(”class“,”background“).style(”visibility“,”hidden“).style(”cursor“,”crosshair“),t.selectAll(”.extent“).data().enter().append(”rect“).attr(”class“,”extent“).style(”cursor“,”move“);var o=t.selectAll(”.resize“).data(v,y);o.exit().remove(),o.enter().append(”g“).attr(”class“,function(n){return”resize “+n}).style(”cursor“,function(n){return $l}).append(”rect“).attr(”x“,function(n){return/$/.test(n)?-3:null}).attr(”y“,function(n){return/^/.test(n)?-3:null}).attr(”width“,6).attr(”height“,6).style(”visibility“,”hidden“),o.style(”display“,n.empty()?”none“:null);var l,f=oa.transition(t),h=oa.transition(a);c&&(l=Zu©,h.attr(”x“,l).attr(”width“,l-l),r(f)),s&&(l=Zu(s),h.attr(”y“,l).attr(”height“,l-l),u(f)),e(f)})}function e(n){n.selectAll(”.resize“).attr(”transform“,function(n){return”translate(“f[
/e$/.test(n)]+”,“h[
/^s/.test(n)]+”)“})}function r(n){n.select(”.extent“).attr(”x“,f),n.selectAll(”.extent,.n>rect,.s>rect“).attr(”width“,f-f)}function u(n){n.select(”.extent“).attr(”y“,h),n.selectAll(”.extent,.e>rect,.w>rect“).attr(”height“,h-h)}function i(){function i(){32==oa.event.keyCode&&(C||(M=null,L-=f,L-=h,C=2),S())}function v(){32==oa.event.keyCode&&2==C&&(L+=f,L+=h,C=0,S())}function d(){var n=oa.mouse(b),t=!1;x&&(n+=x,n+=x),C||(oa.event.altKey?(M||(M=[(f+f)/2,(h+h)/2]),L=f[+(n<M)],L=h[+(n<M)]):M=null),E&&m(n,c,0)&&(r(k),t=!0),A&&m(n,s,1)&&(u(k),t=!0),t&&(e(k),w({type:”brush“,mode:C?”move“:”resize“}))}function m(n,t,e){var r,u,i=Zu(t),l=i,c=i,s=L,v=e?h:f,d=v-v;return C&&(l-=s,c-=d+s),r=(e?p:g)?Math.max(l,Math.min(c,n)):n,C?u=(r+=s)+d:(M&&(s=Math.max(l,Math.min(c,2*M-r))),r>s?(u=r,r=s):u=s),v!=r||v!=u?(e?o=null:a=null,v=r,v=u,!0):void 0}function y(){d(),k.style(”pointer-events“,”all“).selectAll(”.resize“).style(”display“,n.empty()?”none“:null),oa.select(”body“).style(”cursor“,null),q.on(”mousemove.brush“,null).on(”mouseup.brush“,null).on(”touchmove.brush“,null).on(”touchend.brush“,null).on(”keydown.brush“,null).on(”keyup.brush“,null),z(),w({type:”brushend“})}var M,x,b=this,_=oa.select(oa.event.target),w=l.of(b,arguments),k=oa.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&s,C=_.classed(”extent“),z=W(b),L=oa.mouse(b),q=oa.select(t(b)).on(”keydown.brush“,i).on(”keyup.brush“,v);if(oa.event.changedTouches?q.on(”touchmove.brush“,d).on(”touchend.brush“,y):q.on(”mousemove.brush“,d).on(”mouseup.brush“,y),k.interrupt().selectAll(”*“).interrupt(),C)L=f-L,L=h-L;else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[f-L,h-L],L=f,L=h}else oa.event.altKey&&(M=L.slice());k.style(”pointer-events“,”none“).selectAll(”.resize“).style(”display“,null),oa.select(”body“).style(”cursor“,_.style(”cursor“)),w({type:”brushstart“}),d()}var a,o,l=N(n,”brushstart“,”brush“,”brushend“),c=null,s=null,f=,h=,g=!0,p=!0,v=Bl;return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:f,y:h,i:a,j:o},e=this.__chart__||t;this.__chart__=t,Hl?oa.select(this).transition().each(”start.brush“,function(){a=e.i,o=e.j,f=e.x,h=e.y,n({type:”brushstart“})}).tween(”brush:brush“,function(){var e=xr(f,t.x),r=xr(h,t.y);return a=o=null,function(u){f=t.x=e(u),h=t.y=r(u),n({type:”brush“,mode:”resize“})}}).each(”end.brush“,function(){a=t.i,o=t.j,n({type:”brush“,mode:”resize“}),n({type:”brushend“})}):(n({type:”brushstart“}),n({type:”brush“,mode:”resize“}),n({type:”brushend“}))})},n.x=function(t){return arguments.length?(c=t,v=Bl,n):c},n.y=function(t){return arguments.length?(s=t,v=Bl,n):s},n.clamp=function(t){return arguments.length?(c&&s?(g=!!t,p=!!t):c?g=!!t:s&&(p=!!t),n):c&&s?:c?g:s?p:null},n.extent=function(t){var e,r,u,i,l;return arguments.length?(c&&(e=t,r=t,s&&(e=e,r=r),a=,c.invert&&(e=c(e),r=c®),e>r&&(l=e,e=r,r=l),(e!=f||r!=f)&&(f=)),s&&(u=t,i=t,c&&(u=u,i=i),o=,s.invert&&(u=s(u),i=s(i)),u>i&&(l=u,u=i,i=l),(u!=h||i!=h)&&(h=)),n):(c&&(a?(e=a,r=a):(e=f,r=f,c.invert&&(e=c.invert(e),r=c.invert®),e>r&&(l=e,e=r,r=l))),s&&(o?(u=o,i=o):(u=h,i=h,s.invert&&(u=s.invert(u),i=s.invert(i)),u>i&&(l=u,u=i,i=l))),c&&s?[,[r,i]]:c?:s&&)},n.clear=function(){return n.empty()||(f=,h=,a=o=null),n},n.empty=function(){return!!c&&f==f||!!s&&h==h},oa.rebind(n,l,”on“)};var $l={n:”ns-resize“,e:”ew-resize“,s:”ns-resize“,w:”ew-resize“,nw:”nwse-resize“,ne:”nesw-resize“,se:”nwse-resize“,sw:”nesw-resize“},Bl=[,[”e“,”w“],,[]],Wl=go.format=xo.timeFormat,Jl=Wl.utc,Gl=Jl(”%Y-%m-%dT%H:%M:%S.%LZ“);Wl.iso=Date.prototype.toISOString&&+new Date(”2000-01-01T00:00:00.000Z“)?ea:Gl,ea.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},ea.toString=Gl.toString,go.second=On(function(n){return new po(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),go.seconds=go.second.range,go.seconds.utc=go.second.utc.range,go.minute=On(function(n){return new po(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),go.minutes=go.minute.range,go.minutes.utc=go.minute.utc.range,go.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new po(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),go.hours=go.hour.range,go.hours.utc=go.hour.utc.range,go.month=On(function(n){return n=go.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),go.months=go.month.range,go.months.utc=go.month.utc.range;var Kl=,Ql=[,[go.second,5],,[go.second,30],,[go.minute,5],,[go.minute,30],,[go.hour,3],,[go.hour,12],,[go.day,2],,[go.month,1],,[go.year,1]],nc=Wl.multi([[”.%L“,function(n){return n.getMilliseconds()}],[”:%S“,function(n){return n.getSeconds()}],[”%I:%M“,function(n){return n.getMinutes()}],[”%I %p“,function(n){return n.getHours()}],[”%a %d“,function(n){return n.getDay()&&1!=n.getDate()}],[”%b %d“,function(n){return 1!=n.getDate()}],[”%B“,function(n){return n.getMonth()}],[”%Y“,zt]]),tc={range:function(n,t,e){return oa.range(Math.ceil(n/e)*e,+t,e).map(ua)},floor:y,ceil:y};Ql.year=go.year,go.scale=function(){return ra(oa.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n.utc,n]}),rc=Jl.multi([[”.%L“,function(n){return n.getUTCMilliseconds()}],[”:%S“,function(n){return n.getUTCSeconds()}],[”%I:%M“,function(n){return n.getUTCMinutes()}],[”%I %p“,function(n){return n.getUTCHours()}],[”%a %d“,function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],[”%b %d“,function(n){return 1!=n.getUTCDate()}],[”%B“,function(n){return n.getUTCMonth()}],[”%Y“,zt]]);ec.year=go.year.utc,go.scale.utc=function(){return ra(oa.scale.linear(),ec,rc)},oa.text=An(function(n){return n.responseText}),oa.json=function(n,t){return Cn(n,”application/json“,ia,t)},oa.html=function(n,t){return Cn(n,”text/html“,aa,t)},oa.xml=An(function(n){return n.responseXML}),”function“==typeof define&&define.amd?(this.d3=oa,define(oa)):”object“==typeof module&&module.exports?module.exports=oa:this.d3=oa}();* http://labratrevenge.com/d3-tip/javascripts/d3.tip.v0.6.3.js
*/
var direction = d3_tip_direction,
offset = d3_tip_offset,
html = d3_tip_html,
node = initNode(),
svg = null,
point = null,
target = null
function tip(vis) {
svg = getSVGNode(vis)
point = svg.createSVGPoint()
document.body.appendChild(node)
}
// Public - show the tooltip on the screen
//
// Returns a tip
tip.show = function() {
var args = Array.prototype.slice.call(arguments)
if(args[args.length - 1] instanceof SVGElement) target = args.pop()
var content = html.apply(this, args),
poffset = offset.apply(this, args),
dir = direction.apply(this, args),
nodel = d3.select(node), i = 0,
coords
nodel.html(content)
.style({ opacity: 1, 'pointer-events': 'all' })
while(i--) nodel.classed(directions[i], false)
coords = direction_callbacks.get(dir).apply(this)
nodel.classed(dir, true).style({
top: (coords.top + poffset[0]) + 'px',
left: (coords.left + poffset[1]) + 'px'
})
return tip
}
// Public - hide the tooltip
//
// Returns a tip
tip.hide = function() {
nodel = d3.select(node)
nodel.style({ opacity: 0, 'pointer-events': 'none' })
return tip
}
// Public: Proxy attr calls to the d3 tip container. Sets or gets attribute value.
//
// n - name of the attribute
// v - value of the attribute
//
// Returns tip or attribute value
tip.attr = function(n, v) {
if (arguments.length < 2 && typeof n === 'string') {
return d3.select(node).attr(n)
} else {
var args = Array.prototype.slice.call(arguments)
d3.selection.prototype.attr.apply(d3.select(node), args)
}
return tip
}
// Public: Proxy style calls to the d3 tip container. Sets or gets a style value.
//
// n - name of the property
// v - value of the property
//
// Returns tip or style property value
tip.style = function(n, v) {
if (arguments.length < 2 && typeof n === 'string') {
return d3.select(node).style(n)
} else {
var args = Array.prototype.slice.call(arguments)
d3.selection.prototype.style.apply(d3.select(node), args)
}
return tip
}
// Public: Set or get the direction of the tooltip
//
// v - One of n(north), s(south), e(east), or w(west), nw(northwest),
// sw(southwest), ne(northeast) or se(southeast)
//
// Returns tip or direction
tip.direction = function(v) {
if (!arguments.length) return direction
direction = v == null ? v : d3.functor(v)
return tip
}
// Public: Sets or gets the offset of the tip
//
// v - Array of [x, y] offset
//
// Returns offset or
tip.offset = function(v) {
if (!arguments.length) return offset
offset = v == null ? v : d3.functor(v)
return tip
}
// Public: sets or gets the html value of the tooltip
//
// v - String value of the tip
//
// Returns html value or tip
tip.html = function(v) {
if (!arguments.length) return html
html = v == null ? v : d3.functor(v)
return tip
}
function d3_tip_direction() { return 'n' }
function d3_tip_offset() { return [0, 0] }
function d3_tip_html() { return ' ' }
var direction_callbacks = d3.map({
n: direction_n,
s: direction_s,
e: direction_e,
w: direction_w,
nw: direction_nw,
ne: direction_ne,
sw: direction_sw,
se: direction_se
}),
directions = direction_callbacks.keys()
function direction_n() {
var bbox = getScreenBBox()
return {
top: bbox.n.y - node.offsetHeight,
left: bbox.n.x - node.offsetWidth / 2
}
}
function direction_s() {
var bbox = getScreenBBox()
return {
top: bbox.s.y,
left: bbox.s.x - node.offsetWidth / 2
}
}
function direction_e() {
var bbox = getScreenBBox()
return {
top: bbox.e.y - node.offsetHeight / 2,
left: bbox.e.x
}
}
function direction_w() {
var bbox = getScreenBBox()
return {
top: bbox.w.y - node.offsetHeight / 2,
left: bbox.w.x - node.offsetWidth
}
}
function direction_nw() {
var bbox = getScreenBBox()
return {
top: bbox.nw.y - node.offsetHeight,
left: bbox.nw.x - node.offsetWidth
}
}
function direction_ne() {
var bbox = getScreenBBox()
return {
top: bbox.ne.y - node.offsetHeight,
left: bbox.ne.x
}
}
function direction_sw() {
var bbox = getScreenBBox()
return {
top: bbox.sw.y,
left: bbox.sw.x - node.offsetWidth
}
}
function direction_se() {
var bbox = getScreenBBox()
return {
top: bbox.se.y,
left: bbox.e.x
}
}
function initNode() {
var node = d3.select(document.createElement('div'))
node.style({
position: 'absolute',
opacity: 0,
pointerEvents: 'none',
boxSizing: 'border-box'
})
return node.node()
}
function getSVGNode(el) {
el = el.node()
if(el.tagName.toLowerCase() == 'svg')
return el
return el.ownerSVGElement
}
// Private - gets the screen coordinates of a shape
//
// Given a shape on the screen, will return an SVGPoint for the directions
// n(north), s(south), e(east), w(west), ne(northeast), se(southeast), nw(northwest),
// sw(southwest).
//
// +-+-+
// | |
// + +
// | |
// +-+-+
//
// Returns an Object {n, s, e, w, nw, sw, ne, se}
function getScreenBBox() {
var targetel = target || d3.event.target,
bbox = {},
matrix = targetel.getScreenCTM(),
tbbox = targetel.getBBox(),
width = tbbox.width,
height = tbbox.height,
x = tbbox.x,
y = tbbox.y,
scrollTop = document.documentElement.scrollTop || document.body.scrollTop,
scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft
point.x = x + scrollLeft
point.y = y + scrollTop
bbox.nw = point.matrixTransform(matrix)
point.x += width
bbox.ne = point.matrixTransform(matrix)
point.y += height
bbox.se = point.matrixTransform(matrix)
point.x -= width
bbox.sw = point.matrixTransform(matrix)
point.y -= height / 2
bbox.w = point.matrixTransform(matrix)
point.x += width
bbox.e = point.matrixTransform(matrix)
point.x -= width / 2
point.y -= height / 2
bbox.n = point.matrixTransform(matrix)
point.y += height
bbox.s = point.matrixTransform(matrix)
return bbox
}
return tip
* http://martinspier.io/d3-flame-graph/d3.flameGraph.js
*/
'use strict';
function flameGraph() {
var w = 960, // graph width
h = 540, // graph height
c = 18, // cell height
selection = null, // selection
tooltip = true, // enable tooltip
title = "", // graph title
transitionDuration = 750,
transitionEase = "cubic-in-out", // tooltip offset
sort = true;
var tip = d3.tip()
.direction("s")
.offset([8, 0])
.attr('class', 'd3-flame-graph-tip')
.html(function(d) { return label(d); });
var labelFormat = function(d) {
// return d.name + " (" + d3.round(100 * d.dx, 3) + "%, " + d.value + " samples)";
return d.name + " (" +
d3.round(100 * d.dx, 3) + "%) self (" +
d3.round(100 * d.lost / d.value, 3) + "%) total (" +
d3.round(100 * d.value, 3) + ")";
};
function setDetails(t) {
var details = document.getElementById("details");
if (details)
details.innerHTML = t;
}
function label(d) {
if (!d.dummy) {
return labelFormat(d);
} else {
return "";
}
}
function name(d) {
return d.name;
}
function generateHash(name) {
// Return a vector (0.0->1.0) that is a hash of the input string.
// The hash is computed to favor early characters over later ones, so
// that strings with similar starts have similar vectors. Only the first
// 6 characters are considered.
var hash = 0, weight = 1, max_hash = 0, mod = 10, max_char = 6;
if (name) {
for (var i = 0; i < name.length; i++) {
if (i > max_char) { break; }
hash += weight * (name.charCodeAt(i) % mod);
max_hash += weight * (mod - 1);
weight *= 0.70;
}
if (max_hash > 0) { hash = hash / max_hash; }
}
return hash;
}
function colorHash(name) {
// Return an rgb() color string that is a hash of the provided name,
// and with a warm palette.
var vector = 0;
if (name) {
name = name.replace(/.*[#\.]/, ""); // drop module name if present
name = name.replace(/\(.*/, ""); // drop extra info
vector = generateHash(name);
}
var r = 200 + Math.round(55 * vector);
var g = 0 + Math.round(230 * (1 - vector));
var b = 0 + Math.round(55 * (1 - vector));
return "rgb(" + r + "," + g + "," + b + ")";
}
function augment(data) {
// Augment partitioning layout with "dummy" nodes so that internal nodes'
// values dictate their width. Annoying, but seems to be least painful
// option. https://github.com/mbostock/d3/pull/574
if (data.children && (data.children.length > 0)) {
data.children.forEach(augment);
var childValues = 0;
data.children.forEach(function(child) {
childValues += child.value;
});
if (childValues < data.value) {
data.children.push(
{
"name": "",
"value": data.value - childValues,
"dummy": true
}
);
}
}
}
function hide(d) {
if(!d.original) {
d.original = d.value;
}
d.value = 0;
if(d.children) {
d.children.forEach(hide);
}
}
function show(d) {
d.fade = false;
if(d.original) {
d.value = d.original;
}
if(d.children) {
d.children.forEach(show);
}
}
function getSiblings(d) {
var siblings = [];
if (d.parent) {
var me = d.parent.children.indexOf(d);
siblings = d.parent.children.slice(0);
siblings.splice(me, 1);
}
return siblings;
}
function hideSiblings(d) {
var siblings = getSiblings(d);
siblings.forEach(function(s) {
hide(s);
});
if(d.parent) {
hideSiblings(d.parent);
}
}
function fadeAncestors(d) {
if(d.parent) {
d.parent.fade = true;
fadeAncestors(d.parent);
}
}
function getRoot(d) {
if(d.parent) {
return getRoot(d.parent);
}
return d;
}
function zoom(d) {
tip.hide(d);
hideSiblings(d);
show(d);
fadeAncestors(d);
update();
}
function searchTree(d, term) {
var re = new RegExp(term),
label = d.name;
if(d.children) {
d.children.forEach(function(child) {
searchTree(child, term);
});
}
if (label.match(re)) {
d.highlight = true;
} else {
d.highlight = false;
}
}
function clear(d) {
d.highlight = false;
if(d.children) {
d.children.forEach(function(child) {
clear(child, term);
});
}
}
function doSort(a, b) {
if (typeof sort === 'function') {
return sort(a, b);
} else if (sort) {
return d3.ascending(a.name, b.name);
} else {
return 0;
}
}
var partition = d3.layout.partition()
.sort(doSort)
.value(function(d) {return d.v || d.value;})
.children(function(d) {return d.c || d.children;});
function update() {
selection.each(function(data) {
var x = d3.scale.linear().range([0, w]),
y = d3.scale.linear().range([0, c]);
var nodes = partition(data);
var kx = w / data.dx;
var g = d3.select(this).select("svg").selectAll("g").data(nodes);
g.transition()
.duration(transitionDuration)
.ease(transitionEase)
.attr("transform", function(d) { return "translate(" + x(d.x) + "," + (h - y(d.depth) - c) + ")"; });
g.select("rect").transition()
.duration(transitionDuration)
.ease(transitionEase)
.attr("width", function(d) { return d.dx * kx; });
var node = g.enter()
.append("svg:g")
.attr("transform", function(d) { return "translate(" + x(d.x) + "," + (h - y(d.depth) - c) + ")"; });
node.append("svg:rect")
.attr("width", function(d) { return d.dx * kx; });
if (!tooltip)
node.append("svg:title");
node.append("foreignObject")
.append("xhtml:div");
g.attr("width", function(d) { return d.dx * kx; })
.attr("height", function(d) { return c; })
.attr("name", function(d) { return d.name; })
.attr("class", function(d) { return d.fade ? "frame fade" : "frame"; });
g.select("rect")
.attr("height", function(d) { return c; })
.attr("fill", function(d) {return d.highlight ? "#E600E6" : colorHash(d.name); })
.style("visibility", function(d) {return d.dummy ? "hidden" : "visible";});
if (!tooltip)
g.select("title")
.text(label);
g.select("foreignObject")
.attr("width", function(d) { return d.dx * kx; })
.attr("height", function(d) { return c; })
.select("div")
.attr("class", "label")
.style("display", function(d) { return (d.dx * kx < 25) || d.dummy ? "none" : "block";})
.text(name);
g.on('click', zoom);
g.exit().remove();
g.on('mouseover', function(d) {
if(!d.dummy) {
if (tooltip) tip.show(d);
setDetails(label(d));
}
}).on('mouseout', function(d) {
if(!d.dummy) {
if (tooltip) tip.hide(d);
setDetails("");
}
});
});
}
function chart(s) {
selection = s;
if (!arguments.length) return chart;
selection.each(function(data) {
var svg = d3.select(this)
.append("svg:svg")
.attr("width", w)
.attr("height", h)
.attr("class", "partition d3-flame-graph")
.call(tip);
svg.append("svg:text")
.attr("class", "title")
.attr("text-anchor", "middle")
.attr("y", "25")
.attr("x", w/2)
.attr("fill", "#808080")
.text(title);
augment(data);
// "creative" fix for node ordering when partition is called for the first time
partition(data);
// first draw
update();
});
}
chart.height = function (_) {
if (!arguments.length) { return h; }
h = _;
return chart;
};
chart.width = function (_) {
if (!arguments.length) { return w; }
w = _;
return chart;
};
chart.cellHeight = function (_) {
if (!arguments.length) { return c; }
c = _;
return chart;
};
chart.tooltip = function (_) {
if (!arguments.length) { return tooltip; }
if (typeof _ === "function") {
tip = _;
}
tooltip = true;
return chart;
};
chart.title = function (_) {
if (!arguments.length) { return title; }
title = _;
return chart;
};
chart.transitionDuration = function (_) {
if (!arguments.length) { return transitionDuration; }
transitionDuration = _;
return chart;
};
chart.transitionEase = function (_) {
if (!arguments.length) { return transitionEase; }
transitionEase = _;
return chart;
};
chart.sort = function (_) {
if (!arguments.length) { return sort; }
sort = _;
return chart;
};
chart.label = function(_) {
if (!arguments.length) { return labelFormat; }
labelFormat = _;
return chart;
};
chart.search = function(term) {
selection.each(function(data) {
searchTree(data, term);
update();
});
};
chart.clear = function() {
selection.each(function(data) {
clear(data);
update();
});
};
chart.resetZoom = function() {
selection.each(function (data) {
zoom(data); // zoom to root
});
};
return chart;
}
if (typeof module !== 'undefined' && module.exports){
module.exports = flameGraph;
}
else {
d3.flameGraph = flameGraph;
}