http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/05e1861e/airflow/www_rbac/static/dagre-d3.min.js
----------------------------------------------------------------------
diff --git a/airflow/www_rbac/static/dagre-d3.min.js 
b/airflow/www_rbac/static/dagre-d3.min.js
new file mode 100644
index 0000000..8d9ec3a
--- /dev/null
+++ b/airflow/www_rbac/static/dagre-d3.min.js
@@ -0,0 +1,2 @@
+(function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var j=typeof 
require=="function"&&require;if(!h&&j)return j(g,!0);if(f)return f(g,!0);throw 
new Error("Cannot find module '"+g+"'")}var 
k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return 
e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}var f=typeof 
require=="function"&&require;for(var g=0;g<d.length;g++)e(d[g]);return 
e})({1:[function(a,b,c){var 
d=self;d.dagreD3=a("./index")},{"./index":2}],2:[function(a,b,c){b.exports={Digraph:a("graphlib").Digraph,Graph:a("graphlib").Graph,Renderer:a("./lib/Renderer"),json:a("graphlib").converter.json,layout:a("dagre").layout,version:a("./lib/version"),debug:a("dagre").debug}},{"./lib/Renderer":3,"./lib/version":4,dagre:11,graphlib:29}],3:[function(a,b,c){function
 
g(){this._layout=d(),this.drawNodes(l),this.drawEdgeLabels(m),this.drawEdgePaths(n),this.positionNodes(o),this.positionEdgeLabels(p),this.positionEdgePaths(u),this.zoomSetup(w),this.zoom(x),this.transiti
 
on(v),this.postLayout(y),this.postRender(z),this.edgeInterpolate("bundle"),this.edgeTension(.95)}function
 h(a){var b=a.copy();return b.graph()===undefined&&b.graph({}),"arrowheadFix"in 
b.graph()||(b.graph().arrowheadFix=!0),b.nodes().forEach(function(a){var 
c=i(b.node(a));b.node(a,c),"label"in 
c||(c.label="")}),b.edges().forEach(function(a){var 
c=i(b.edge(a));b.edge(a,c),"label"in c||(c.label="")}),b}function i(a){var 
b={};for(var c in a)b[c]=a[c];return b}function j(a,b){var 
c=a.getBBox();b.width=c.width,b.height=c.height}function k(a,b){var 
c=b.run(a);return 
a.eachNode(function(a,b){c.node(a).label=b.label}),a.eachEdge(function(a,b,d,e){c.edge(a).label=e.label}),c}function
 l(a,b){var 
c=a.nodes().filter(function(b){return!M(a,b)}),d=b.selectAll("g.node").classed("enter",!1).data(c,function(a){return
 a});return 
d.selectAll("*").remove(),d.enter().append("g").style("opacity",0).attr("class","node
 enter"),d.each(function(b){var 
c=a.node(b),d=e.select(this);B(c,d,!0,10,10)}),this._tran
 sition(d.exit()).style("opacity",0).remove(),d}function m(a,b){var 
c=b.selectAll("g.edgeLabel").classed("enter",!1).data(a.edges(),function(a){return
 a});return 
c.selectAll("*").remove(),c.enter().append("g").style("opacity",0).attr("class","edgeLabel
 
enter"),c.each(function(b){B(a.edge(b),e.select(this),!1,0,0)}),this._transition(c.exit()).style("opacity",0).remove(),c}function
 o(a,b){function c(b){var 
c=a.node(b);return"translate("+c.x+","+c.y+")"}b.filter(".enter").attr("transform",c),this._transition(b).style("opacity",1).attr("transform",c)}function
 p(a,b){function c(b){var 
c=a.edge(b),d=F(c.points);return"translate("+d.x+","+d.y+")"}b.filter(".enter").attr("transform",c),this._transition(b).style("opacity",1).attr("transform",c)}function
 q(a){return Object.prototype.toString.call(a)==="[object 
SVGEllipseElement]"}function r(a){return 
Object.prototype.toString.call(a)==="[object SVGCircleElement]"}function 
s(a){return Object.prototype.toString.call(a)==="[object SVGPolygonEleme
 nt]"}function t(a,b,c){if(a.useDef){var d=c.select("defs 
#"+a.useDef).node();if(d){var e=d.childNodes[0];if(r(e)||q(e))return 
H(a,e,b);if(s(e))return L(a,e,b)}}return G(a,b)}function u(a,b,c){function 
g(b){var 
g=a.edge(b),h=a.node(a.incidentNodes(b)[0]),i=a.node(a.incidentNodes(b)[1]),j=g.points.slice(),k=j.length===0?i:j[0],l=j.length===0?h:j[j.length-1];return
 j.unshift(t(h,k,c)),j.push(t(i,l,c)),e.svg.line().x(function(a){return 
a.x}).y(function(a){return a.y}).interpolate(d).tension(f)(j)}var 
d=this._edgeInterpolate,f=this._edgeTension;b.filter(".enter").selectAll("path").attr("d",g),this._transition(b.selectAll("path")).attr("d",g).style("opacity",1)}function
 v(a){return a}function w(a,b){var c=b.property("ownerSVGElement");return 
c?c=e.select(c):c=b,c.select("rect.overlay").empty()&&(c.insert("rect",":first-child").attr("class","overlay").attr("width","100%").attr("height","100%").style("fill","none").style("pointer-events","all"),b=b.append("g").attr("class","zoom"),this._zoo
 m&&c.call(this._zoom(a,b))),b}function x(a,b){return 
e.behavior.zoom().on("zoom",function(){b.attr("transform","translate("+e.event.translate+")scale("+e.event.scale+")")})}function
 y(){}function 
z(a,b){a.isDirected()&&A(b,"arrowhead").attr("fill","#333")}function A(a,b){var 
c=a.select("#"+b);if(!c.empty())return c;var 
d=a.select("defs");d.empty()&&(d=a.append("svg:defs"));var 
e=d.append("svg:marker").attr("id",b).attr("viewBox","0 0 10 
10").attr("refX",8).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",5).attr("orient","auto");return
 e.append("svg:path").attr("d","M 0 0 L 10 5 L 0 10 z"),e}function 
B(a,b,c,d,e){if(a.useDef){b.append("use").attr("xlink:href","#"+a.useDef);return}var
 
f=a.label,g=b.append("rect");a.width&&g.attr("width",a.width),a.height&&g.attr("height",a.height);var
 
h=b.append("g"),i;f[0]==="<"?(C(f,h),d=e=0):(i=D(f,h,Math.floor(a.labelCols),a.labelCut),O(a.labelStyle,i));var
 j=h.node().getBBox();h.attr("transform","transla
 te("+ -j.width/2+","+ -j.height/2+")");var 
k=b.node().getBBox();g.attr("rx",a.rx?a.rx:5).attr("ry",a.ry?a.ry:5).attr("x",-(k.width/2+d)).attr("y",-(k.height/2+e)).attr("width",k.width+2*d).attr("height",k.height+2*e).attr("fill","#fff"),c&&(O(a.style,g),a.fill&&g.style("fill",a.fill),a.stroke&&g.style("stroke",a.stroke),a["stroke-width"]&&g.style("stroke-width",a["stroke-width"]+"px"),a["stroke-dasharray"]&&g.style("stroke-dasharray",a["stroke-dasharray"]),a.href&&b.attr("class",b.attr("class")+"
 clickable").on("click",function(){window.open(a.href)}))}function C(a,b){var 
c=b.append("foreignObject").attr("width","100000"),d,e;c.append("xhtml:div").style("float","left").html(function(){return
 
a}).each(function(){d=this.clientWidth,e=this.clientHeight}),c.attr("width",d).attr("height",e)}function
 
D(a,b,c,d){d===undefined&&(d="false"),d=d.toString().toLowerCase()==="true";var 
e=b.append("text").attr("text-anchor","left");a=a.replace(/\\n/g,"\n");var 
f=c?E(a,c,d):a;f=f.split("\n");for(v
 ar 
g=0;g<f.length;g++)e.append("tspan").attr("dy","1em").attr("x","1").text(f[g]);return
 e}function E(a,b,c,d){d=d||"\n",b=b||75,c=c||!1;if(!a)return a;var 
e=".{1,"+b+"}(\\s|$)"+(c?"|.{"+b+"}|.+$":"|\\S+?(\\s|$)");return a.match(new 
RegExp(e,"g")).join(d)}function F(a){var b=a.length/2;if(a.length%2)return 
a[Math.floor(b)];var 
c=a[b-1],d=a[b];return{x:(c.x+d.x)/2,y:(c.y+d.y)/2}}function G(a,b){var 
c=a.x,d=a.y,e=b.x-c,f=b.y-d,g=a.width/2,h=a.height/2,i,j;return 
Math.abs(f)*g>Math.abs(e)*h?(f<0&&(h=-h),i=f===0?0:h*e/f,j=h):(e<0&&(g=-g),i=g,j=e===0?0:g*f/e),{x:c+i,y:d+j}}function
 H(a,b,c){var 
d=a.x,e=a.y,f,g;r(b)?f=g=b.r.baseVal.value:(f=b.rx.baseVal.value,g=b.ry.baseVal.value);var
 
h=d-c.x,i=e-c.y,j=Math.sqrt(f*f*i*i+g*g*h*h),k=Math.abs(f*g*h/j);c.x<d&&(k=-k);var
 l=Math.abs(f*g*i/j);return c.y<e&&(l=-l),{x:d+k,y:e+l}}function I(a,b){return 
a*b>0}function J(a,b,c){c.some(function(c){return 
c[0]===a&&c[1]===b})||c.push([a,b])}function K(a,b,c,d,e,f,g,h,i){var 
j,k,l,m,n,o,p,q,r,s,t,u,v,w,
 
x;j=d-b,l=a-c,n=c*b-a*d,r=j*e+l*f+n,s=j*g+l*h+n;if(r!==0&&s!==0&&I(r,s))return;k=h-f,m=e-g,o=g*f-e*h,p=k*a+m*b+o,q=k*c+m*d+o;if(p!==0&&q!==0&&I(p,q))return;t=j*m-k*l;if(t===0)return;u=Math.abs(t/2),v=l*o-m*n,w=v<0?(v-u)/t:(v+u)/t,v=k*n-j*o,x=v<0?(v-u)/t:(v+u)/t,J(w,x,i)}function
 L(a,b,c){var d=a.x,e=a.y,f=c.x,g=c.y,h=[],i=b.points,j=1e5,k=1e5;for(var 
l=0;l<i.numberOfItems;l++){var 
m=i.getItem(l);j=Math.min(j,m.x),k=Math.min(k,m.y)}var 
n=d-a.width/2-j,o=e-a.height/2-k;for(var p=0;p<i.numberOfItems;p++){var 
q=i.getItem(p),r=i.getItem(p<i.numberOfItems-1?p+1:0);K(d,e,f,g,n+q.x,o+q.y,n+r.x,o+r.y,h)}return
 h.length===1?{x:h[0][0],y:h[0][1]}:h.length>1?(h.sort(function(a,b){var 
d=a[0]-c.x,e=a[1]-c.y,f=Math.sqrt(d*d+e*e),g=b[0]-c.x,h=b[1]-c.y,i=Math.sqrt(g*g+h*h);return
 f<i?-1:f===i?0:1}),{x:h[0][0],y:h[0][1]}):(console.log("NO INTERSECTION FOUND, 
RETURN NODE CENTER",a),a)}function M(a,b){return"children"in 
a&&a.children(b).length}function N(a,b){return 
a.bind?a.bind(b):function(){return a
 .apply(b,arguments)}}function O(a,b){if(a){var 
c=b.attr("style")||"";b.attr("style",c+"; "+a)}}var 
d=a("dagre").layout,e;try{e=a("d3")}catch(f){e=window.d3}b.exports=g,g.prototype.layout=function(a){return
 
arguments.length?(this._layout=a,this):this._layout},g.prototype.drawNodes=function(a){return
 
arguments.length?(this._drawNodes=N(a,this),this):this._drawNodes},g.prototype.drawEdgeLabels=function(a){return
 
arguments.length?(this._drawEdgeLabels=N(a,this),this):this._drawEdgeLabels},g.prototype.drawEdgePaths=function(a){return
 
arguments.length?(this._drawEdgePaths=N(a,this),this):this._drawEdgePaths},g.prototype.positionNodes=function(a){return
 
arguments.length?(this._positionNodes=N(a,this),this):this._positionNodes},g.prototype.positionEdgeLabels=function(a){return
 
arguments.length?(this._positionEdgeLabels=N(a,this),this):this._positionEdgeLabels},g.prototype.positionEdgePaths=function(a){return
 
arguments.length?(this._positionEdgePaths=N(a,this),this):this._positionEdgePaths},
 g.prototype.transition=function(a){return 
arguments.length?(this._transition=N(a,this),this):this._transition},g.prototype.zoomSetup=function(a){return
 
arguments.length?(this._zoomSetup=N(a,this),this):this._zoomSetup},g.prototype.zoom=function(a){return
 arguments.length?(a?this._zoom=N(a,this):delete 
this._zoom,this):this._zoom},g.prototype.postLayout=function(a){return 
arguments.length?(this._postLayout=N(a,this),this):this._postLayout},g.prototype.postRender=function(a){return
 
arguments.length?(this._postRender=N(a,this),this):this._postRender},g.prototype.edgeInterpolate=function(a){return
 
arguments.length?(this._edgeInterpolate=a,this):this._edgeInterpolate},g.prototype.edgeTension=function(a){return
 
arguments.length?(this._edgeTension=a,this):this._edgeTension},g.prototype.run=function(a,b){a=h(a);var
 c=this._zoomSetup(a,b);c.selectAll("g.edgePaths, g.edgeLabels, 
g.nodes").data(["edgePaths","edgeLabels","nodes"]).enter().append("g").attr("class",function(a){return
 a});var d=th
 
is._drawNodes(a,c.select("g.nodes")),e=this._drawEdgeLabels(a,c.select("g.edgeLabels"));d.each(function(b){j(this,a.node(b))}),e.each(function(b){j(this,a.edge(b))});var
 
f=k(a,this._layout);a.eachNode(function(a,b){b.useDef&&(f.node(a).useDef=b.useDef)}),this._postLayout(f,c);var
 g=this._drawEdgePaths(a,c.select("g.edgePaths"));return 
this._positionNodes(f,d),this._positionEdgeLabels(f,e),this._positionEdgePaths(f,g,b),this._postRender(f,c),f};var
 n=function(a,b){var 
c=b.selectAll("g.edgePath").classed("enter",!1).data(a.edges(),function(a){return
 a}),d="url(#arrowhead)",f=d;return 
a.isDirected()?a.graph().arrowheadFix!=="false"&&a.graph().arrowheadFix!==!1&&(f=function(){var
 a=e.select(this).style("stroke");if(a){var 
c="arrowhead-"+a.replace(/[^a-zA-Z0-9]/g,"_");return 
A(b,c).style("fill",a),"url(#"+c+")"}return 
d}):f=null,c.enter().append("g").attr("class","edgePath 
enter").append("path").style("opacity",0),c.selectAll("path").each(function(b){O(a.edge(b).style,e.select(this))}).a
 
ttr("marker-end",f),this._transition(c.exit()).style("opacity",0).remove(),c}},{d3:10,dagre:11}],4:[function(a,b,c){b.exports="0.2.9"},{}],5:[function(a,b,c){c.Set=a("./lib/Set"),c.PriorityQueue=a("./lib/PriorityQueue"),c.version=a("./lib/version")},{"./lib/PriorityQueue":6,"./lib/Set":7,"./lib/version":9}],6:[function(a,b,c){function
 
d(){this._arr=[],this._keyIndices={}}b.exports=d,d.prototype.size=function(){return
 this._arr.length},d.prototype.keys=function(){return 
this._arr.map(function(a){return a.key})},d.prototype.has=function(a){return a 
in this._keyIndices},d.prototype.priority=function(a){var 
b=this._keyIndices[a];if(b!==undefined)return 
this._arr[b].priority},d.prototype.min=function(){if(this.size()===0)throw new 
Error("Queue underflow");return 
this._arr[0].key},d.prototype.add=function(a,b){var c=this._keyIndices;if(a in 
c)return!1;var d=this._arr,e=d.length;return 
c[a]=e,d.push({key:a,priority:b}),this._decrease(e),!0},d.prototype.removeMin=function(){this._swap(0,thi
 s._arr.length-1);var a=this._arr.pop();return delete 
this._keyIndices[a.key],this._heapify(0),a.key},d.prototype.decrease=function(a,b){var
 c=this._keyIndices[a];if(b>this._arr[c].priority)throw new Error("New priority 
is greater than current priority. Key: "+a+" Old: "+this._arr[c].priority+" 
New: 
"+b);this._arr[c].priority=b,this._decrease(c)},d.prototype._heapify=function(a){var
 
b=this._arr,c=2*a,d=c+1,e=a;c<b.length&&(e=b[c].priority<b[e].priority?c:e,d<b.length&&(e=b[d].priority<b[e].priority?d:e),e!==a&&(this._swap(a,e),this._heapify(e)))},d.prototype._decrease=function(a){var
 
b=this._arr,c=b[a].priority,d;while(a!==0){d=a>>1;if(b[d].priority<c)break;this._swap(a,d),a=d}},d.prototype._swap=function(a,b){var
 
c=this._arr,d=this._keyIndices,e=c[a],f=c[b];c[a]=f,c[b]=e,d[f.key]=a,d[e.key]=b}},{}],7:[function(a,b,c){function
 e(a){this._size=0,this._keys={};if(a)for(var 
b=0,c=a.length;b<c;++b)this.add(a[b])}function f(a){var 
b=Object.keys(a),c=b.length,d=new Array(c),e;for(e=0;e<c;+
 +e)d[e]=a[b[e]];return d}var 
d=a("./util");b.exports=e,e.intersect=function(a){if(a.length===0)return new 
e;var b=new e(d.isArray(a[0])?a[0]:a[0].keys());for(var 
c=1,f=a.length;c<f;++c){var g=b.keys(),h=d.isArray(a[c])?new 
e(a[c]):a[c];for(var i=0,j=g.length;i<j;++i){var 
k=g[i];h.has(k)||b.remove(k)}}return b},e.union=function(a){var 
b=d.reduce(a,function(a,b){return a+(b.size?b.size():b.length)},0),c=new 
Array(b),f=0;for(var g=0,h=a.length;g<h;++g){var 
i=a[g],j=d.isArray(i)?i:i.keys();for(var 
k=0,l=j.length;k<l;++k)c[f++]=j[k]}return new 
e(c)},e.prototype.size=function(){return 
this._size},e.prototype.keys=function(){return 
f(this._keys)},e.prototype.has=function(a){return a in 
this._keys},e.prototype.add=function(a){return a in 
this._keys?!1:(this._keys[a]=a,++this._size,!0)},e.prototype.remove=function(a){return
 a in this._keys?(delete 
this._keys[a],--this._size,!0):!1}},{"./util":8}],8:[function(a,b,c){Array.isArray?c.isArray=Array.isArray:c.isArray=function(a){return
 Object.pro
 totype.toString.call(a)==="[object Array]"},"function"!=typeof 
Array.prototype.reduce?c.reduce=function(a,b,c){"use 
strict";if(null===a||"undefined"==typeof a)throw new 
TypeError("Array.prototype.reduce called on null or 
undefined");if("function"!=typeof b)throw new TypeError(b+" is not a 
function");var 
d,e,f=a.length>>>0,g=!1;1<arguments.length&&(e=c,g=!0);for(d=0;f>d;++d)a.hasOwnProperty(d)&&(g?e=b(e,a[d],d,a):(e=a[d],g=!0));if(!g)throw
 new TypeError("Reduce of empty array with no initial value");return 
e}:c.reduce=function(a,b,c){return 
a.reduce(b,c)}},{}],9:[function(a,b,c){b.exports="1.1.3"},{}],10:[function(a,b,c){a("./d3"),b.exports=d3,function(){delete
 
this.d3}()},{}],11:[function(a,b,c){c.Digraph=a("graphlib").Digraph,c.Graph=a("graphlib").Graph,c.layout=a("./lib/layout"),c.version=a("./lib/version"),c.debug=a("./lib/debug")},{"./lib/debug":12,"./lib/layout":13,"./lib/version":28,graphlib:29}],12:[function(a,b,c){"use
 strict";var d=a("./util");c.dotOrdering=function(a){func
 tion e(b){var d=a.children(b);d.length?(c+="subgraph cluster_"+b+" 
{",c+='label="'+b+'";',d.forEach(function(a){e(a)}),c+="}"):(c+=b,a.node(b).dummy&&(c+="
 [shape=diamond]"),c+=";")}var 
b=d.ordering(a.filterNodes(d.filterNonSubgraphs(a))),c="digraph {";return 
a.children(null).forEach(e),b.forEach(function(a){c+='subgraph { rank=same; 
edge 
[style="invis"];',c+=a.join("->"),c+="}"}),a.eachEdge(function(a,b,d){c+=b+"->"+d+";"}),c+="}",c}},{"./util":27}],13:[function(a,b,c){"use
 strict";var 
d=a("./util"),e=a("./rank"),f=a("./order"),g=a("graphlib").CGraph,h=a("graphlib").CDigraph;b.exports=function(){function
 j(a){var c=new 
h;a.eachNode(function(a,b){b===undefined&&(b={}),c.addNode(a,{width:b.width,height:b.height}),b.hasOwnProperty("rank")&&(c.node(a).prefRank=b.rank)}),a.parent&&a.nodes().forEach(function(b){c.parent(b,a.parent(b))}),a.eachEdge(function(a,b,d,e){e===undefined&&(e={});var
 
f={e:a,minLen:e.minLen||1,width:e.width||0,height:e.height||0,points:[]};c.addEdge(null,b,d,f)});v
 ar d=a.graph()||{};return 
c.graph({rankDir:d.rankDir||b.rankDir,orderRestarts:d.orderRestarts}),c}function
 k(a){var g=i.rankSep(),h;try{return 
h=d.time("initLayoutGraph",j)(a),h.order()===0?h:(h.eachEdge(function(a,b,c,d){d.minLen*=2}),i.rankSep(g/2),d.time("rank.run",e.run)(h,b.rankSimplex),d.time("normalize",l)(h),d.time("order",f)(h,b.orderMaxSweeps),d.time("position",c.run)(h),d.time("undoNormalize",m)(h),d.time("fixupEdgePoints",n)(h),d.time("rank.restoreEdges",e.restoreEdges)(h),d.time("createFinalGraph",o)(h,a.isDirected()))}finally{i.rankSep(g)}}function
 l(a){var b=0;a.eachEdge(function(c,d,e,f){var 
g=a.node(d).rank,h=a.node(e).rank;if(g+1<h){for(var 
i=d,j=g+1,k=0;j<h;++j,++k){var l="_D"+ 
++b,m={width:f.width,height:f.height,edge:{id:c,source:d,target:e,attrs:f},rank:j,dummy:!0};k===0?m.index=0:j+1===h&&(m.index=1),a.addNode(l,m),a.addEdge(null,i,l,{}),i=l}a.addEdge(null,i,e,{}),a.delEdge(c)}})}function
 m(a){a.eachNode(function(b,c){if(c.dummy){if("index"in c){var d=c.edge;a
 .hasEdge(d.id)||a.addEdge(d.id,d.source,d.target,d.attrs);var 
e=a.edge(d.id).points;e[c.index]={x:c.x,y:c.y,ul:c.ul,ur:c.ur,dl:c.dl,dr:c.dr}}a.delNode(b)}})}function
 n(a){a.eachEdge(function(a,b,c,d){d.reversed&&d.points.reverse()})}function 
o(a,b){var c=b?new h:new 
g;c.graph(a.graph()),a.eachNode(function(a,b){c.addNode(a,b)}),a.eachNode(function(b){c.parent(b,a.parent(b))}),a.eachEdge(function(a,b,d,e){c.addEdge(e.e,b,d,e)});var
 d=0,e=0;return 
a.eachNode(function(b,c){a.children(b).length||(d=Math.max(d,c.x+c.width/2),e=Math.max(e,c.y+c.height/2))}),a.eachEdge(function(a,b,c,f){var
 g=Math.max.apply(Math,f.points.map(function(a){return 
a.x})),h=Math.max.apply(Math,f.points.map(function(a){return 
a.y}));d=Math.max(d,g+f.width/2),e=Math.max(e,h+f.height/2)}),c.graph().width=d,c.graph().height=e,c}function
 p(a){return function(){return 
arguments.length?(a.apply(null,arguments),i):a()}}var 
b={debugLevel:0,orderMaxSweeps:f.DEFAULT_MAX_SWEEPS,rankSimplex:!1,rankDir:"TB"},c=a("./position"
 )(),i={};return 
i.orderIters=d.propertyAccessor(i,b,"orderMaxSweeps"),i.rankSimplex=d.propertyAccessor(i,b,"rankSimplex"),i.nodeSep=p(c.nodeSep),i.edgeSep=p(c.edgeSep),i.universalSep=p(c.universalSep),i.rankSep=p(c.rankSep),i.rankDir=d.propertyAccessor(i,b,"rankDir"),i.debugAlignment=p(c.debugAlignment),i.debugLevel=d.propertyAccessor(i,b,"debugLevel",function(a){d.log.level=a,c.debugLevel(a)}),i.run=d.time("Total
 
layout",k),i._normalize=l,i}},{"./order":14,"./position":19,"./rank":20,"./util":27,graphlib:29}],14:[function(a,b,c){function
 j(a,b){function 
o(){a.eachNode(function(a,b){n[a]=b.order})}arguments.length<2&&(b=i);var 
c=a.graph().orderRestarts||0,h=f(a);h.forEach(function(b){b=b.filterNodes(function(b){return!a.children(b).length})});var
 j=0,k,l=Number.MAX_VALUE,n={};for(var 
p=0;p<Number(c)+1&&l!==0;++p){k=Number.MAX_VALUE,g(a,c>0),d.log(2,"Order phase 
start cross count: "+a.graph().orderInitCC);var 
q,r,s;for(q=0,r=0;r<4&&q<b&&k>0;++q,++r,++j)m(a,h,q),s=e(a),s<k&&(r=0,k=s,s
 <l&&(o(),l=s)),d.log(3,"Order phase start "+p+" iter "+q+" cross count: 
"+s)}Object.keys(n).forEach(function(b){if(!a.children||!a.children(b).length)a.node(b).order=n[b]}),a.graph().orderCC=l,d.log(2,"Order
 iterations: "+j),d.log(2,"Order phase best cross count: 
"+a.graph().orderCC)}function k(a,b){var c={};return 
b.forEach(function(b){c[b]=a.inEdges(b).map(function(b){return 
a.node(a.source(b)).order})}),c}function l(a,b){var c={};return 
b.forEach(function(b){c[b]=a.outEdges(b).map(function(b){return 
a.node(a.target(b)).order})}),c}function 
m(a,b,c){c%2===0?n(a,b,c):o(a,b,c)}function n(a,b){var c;for(var 
d=1;d<b.length;++d)c=h(b[d],c,k(a,b[d].nodes()))}function o(a,b){var c;for(var 
d=b.length-2;d>=0;--d)h(b[d],c,l(a,b[d].nodes()))}"use strict";var 
d=a("./util"),e=a("./order/crossCount"),f=a("./order/initLayerGraphs"),g=a("./order/initOrder"),h=a("./order/sortLayer");b.exports=j;var
 
i=24;j.DEFAULT_MAX_SWEEPS=i},{"./order/crossCount":15,"./order/initLayerGraphs":16,"./order/initOrde
 r":17,"./order/sortLayer":18,"./util":27}],15:[function(a,b,c){function 
e(a){var b=0,c=d.ordering(a);for(var 
e=1;e<c.length;++e)b+=f(a,c[e-1],c[e]);return b}function f(a,b,c){var 
d=[];b.forEach(function(b){var 
c=[];a.outEdges(b).forEach(function(b){c.push(a.node(a.target(b)).order)}),c.sort(function(a,b){return
 a-b}),d=d.concat(c)});var e=1;while(e<c.length)e<<=1;var f=2*e-1;e-=1;var 
g=[];for(var h=0;h<f;++h)g[h]=0;var i=0;return d.forEach(function(a){var 
b=a+e;++g[b];while(b>0)b%2&&(i+=g[b+1]),b=b-1>>1,++g[b]}),i}"use strict";var 
d=a("../util");b.exports=e},{"../util":27}],16:[function(a,b,c){function 
f(a){function 
c(d){if(d===null){a.children(d).forEach(function(a){c(a)});return}var 
f=a.node(d);f.minRank="rank"in f?f.rank:Number.MAX_VALUE,f.maxRank="rank"in 
f?f.rank:Number.MIN_VALUE;var h=new e;return 
a.children(d).forEach(function(b){var 
d=c(b);h=e.union([h,d]),f.minRank=Math.min(f.minRank,a.node(b).minRank),f.maxRank=Math.max(f.maxRank,a.node(b).maxRank)}),"rank"in
 f&&h.add(f.ra
 nk),h.keys().forEach(function(a){a in b||(b[a]=[]),b[a].push(d)}),h}var 
b=[];c(null);var f=[];return 
b.forEach(function(b,c){f[c]=a.filterNodes(d(b))}),f}"use strict";var 
d=a("graphlib").filter.nodesFromList,e=a("cp-data").Set;b.exports=f},{"cp-data":5,graphlib:29}],17:[function(a,b,c){function
 f(a,b){var c=[];a.eachNode(function(b,d){var 
e=c[d.rank];if(a.children&&a.children(b).length>0)return;e||(e=c[d.rank]=[]),e.push(b)}),c.forEach(function(c){b&&e.shuffle(c),c.forEach(function(b,c){a.node(b).order=c})});var
 f=d(a);a.graph().orderInitCC=f,a.graph().orderCC=Number.MAX_VALUE}"use 
strict";var 
d=a("./crossCount"),e=a("../util");b.exports=f},{"../util":27,"./crossCount":15}],18:[function(a,b,c){function
 h(a,b,c){c=n(a,c);var d=i(a,null,b,c);return 
d.list.forEach(function(b,c){a.node(b).order=c}),d.constraintGraph}function 
i(a,b,c,f){c=c?c.filterNodes(g(a.children(b))):new e;var 
h={};a.children(b).forEach(function(b){if(a.children(b).length)h[b]=i(a,b,c,f),h[b].firstSG=b,h[b].lastSG=b
 ;else{var 
e=f[b];h[b]={degree:e.length,barycenter:d.sum(e)/e.length,order:a.node(b).order,orderCount:1,list:[b]}}}),l(a,c,h);var
 k=Object.keys(h);k.sort(function(a,b){return 
h[a].barycenter-h[b].barycenter||h[a].order-h[b].order});var 
m=k.map(function(a){return h[a]}).reduce(function(b,c){return j(a,b,c)});return 
m}function j(a,b,c){var d=k(b.constraintGraph,c.constraintGraph);return 
b.lastSG!==undefined&&c.firstSG!==undefined&&(d===undefined&&(d=new 
e),d.hasNode(b.lastSG)||d.addNode(b.lastSG),d.addNode(c.firstSG),d.addEdge(null,b.lastSG,c.firstSG)),{degree:b.degree+c.degree,barycenter:(b.barycenter*b.degree+c.barycenter*c.degree)/(b.degree+c.degree),order:(b.order*b.orderCount+c.order*c.orderCount)/(b.orderCount+c.orderCount),orderCount:b.orderCount+c.orderCount,list:b.list.concat(c.list),firstSG:b.firstSG!==undefined?b.firstSG:c.firstSG,lastSG:c.lastSG!==undefined?c.lastSG:b.lastSG,constraintGraph:d}}function
 k(a,b){return a===undefined?b:b===undefined?a:(a=a.copy(),b.nodes().forE
 
ach(function(b){a.addNode(b)}),b.edges().forEach(function(b,c,d){a.addEdge(null,c,d)}),a)}function
 l(a,b,c){function 
d(a,c,d){b.inEdges(a).forEach(function(a){b.delEdge(a),b.addEdge(null,b.source(a),d)}),b.outEdges(c).forEach(function(a){b.delEdge(a),b.addEdge(null,d,b.target(a))}),b.delNode(a),b.delNode(c)}var
 e;while((e=m(b,c))!==undefined){var 
f=b.source(e),g=b.target(e),h;while((h=b.addNode(null))&&a.hasNode(h))b.delNode(h);c[h]=j(a,c[f],c[g]),delete
 c[f],delete 
c[g],d(f,g,h),b.incidentEdges(h).length===0&&b.delNode(h)}}function m(a,b){var 
c=f(a);for(var d=0;d<c.length;++d){var e=c[d],g=a.inEdges(e);for(var 
h=0;h<g.length;++h){var 
i=g[h];if(b[a.source(i)].barycenter>=b[e].barycenter)return i}}}function 
n(a,b){var 
c=Number.MAX_VALUE,e=0,f={};a.eachNode(function(f){if(a.children(f).length)return;var
 g=b[f];g.length&&(c=Math.min(c,d.min(g)),e=Math.max(e,d.max(g)))});var 
g=e-c;return a.eachNode(function(d){if(a.children(d).length)return;var 
e=b[d];e.length?f[d]=e.map(function(b){ret
 urn g?(b-c)*(a.order()-1)/g:a.order()-.5}):f[d]=[a.node(d).order]}),f}"use 
strict";var 
d=a("../util"),e=a("graphlib").Digraph,f=a("graphlib").alg.topsort,g=a("graphlib").filter.nodesFromList;b.exports=h},{"../util":27,graphlib:29}],19:[function(a,b,c){"use
 strict";var d=a("./util");b.exports=function(){function 
c(b){b=b.filterNodes(d.filterNonSubgraphs(b));var 
c=d.ordering(b),e=f(b,c),i={};["u","d"].forEach(function(d){d==="d"&&c.reverse(),["l","r"].forEach(function(f){f==="r"&&m(c);var
 
j=d+f,k=g(b,c,e,d==="u"?"predecessors":"successors");i[j]=h(b,c,k.pos,k.root,k.align),a.debugLevel>=3&&t(d+f,b,c,i[j]),f==="r"&&l(i[j]),f==="r"&&m(c)}),d==="d"&&c.reverse()}),k(b,c,i),b.eachNode(function(a){var
 c=[];for(var d in i){var 
e=i[d][a];r(d,b,a,e),c.push(e)}c.sort(function(a,b){return 
a-b}),q(b,a,(c[1]+c[2])/2)});var 
j=0,p=b.graph().rankDir==="BT"||b.graph().rankDir==="RL";c.forEach(function(c){var
 e=d.max(c.map(function(a){return 
o(b,a)}));j+=e/2,c.forEach(function(a){s(b,a,p?-j:j)}),j+=e/2
 +a.rankSep});var u=d.min(b.nodes().map(function(a){return 
q(b,a)-n(b,a)/2})),v=d.min(b.nodes().map(function(a){return 
s(b,a)-o(b,a)/2}));b.eachNode(function(a){q(b,a,q(b,a)-u),s(b,a,s(b,a)-v)})}function
 e(a,b){return 
a<b?a.toString().length+":"+a+"-"+b:b.toString().length+":"+b+"-"+a}function 
f(a,b){function k(a){var b=d[a];if(b<h||b>j)c[e(g[i],a)]=!0}var 
c={},d={},f,g,h,i,j;if(b.length<=2)return 
c;b[1].forEach(function(a,b){d[a]=b});for(var 
l=1;l<b.length-1;++l){f=b[l],g=b[l+1],h=0,i=0;for(var m=0;m<g.length;++m){var 
n=g[m];d[n]=m,j=undefined;if(a.node(n).dummy){var 
o=a.predecessors(n)[0];o!==undefined&&a.node(o).dummy&&(j=d[o])}j===undefined&&m===g.length-1&&(j=f.length-1);if(j!==undefined){for(;i<=m;++i)a.predecessors(g[i]).forEach(k);h=j}}}return
 c}function g(a,b,c,d){var f={},g={},h={};return 
b.forEach(function(a){a.forEach(function(a,b){g[a]=a,h[a]=a,f[a]=b})}),b.forEach(function(b){var
 i=-1;b.forEach(function(b){var 
j=a[d](b),k;j.length>0&&(j.sort(function(a,b){return f[a]-f[
 
b]}),k=(j.length-1)/2,j.slice(Math.floor(k),Math.ceil(k)+1).forEach(function(a){h[b]===b&&!c[e(a,b)]&&i<f[a]&&(h[a]=b,h[b]=g[b]=g[a],i=f[a])}))})}),{pos:f,root:g,align:h}}function
 h(a,b,c,e,f){function l(a,b,c){b in 
h[a]?h[a][b]=Math.min(h[a][b],c):h[a][b]=c}function m(b){if(!(b in 
k)){k[b]=0;var d=b;do{if(c[d]>0){var h=e[j[d]];m(h),g[b]===b&&(g[b]=g[h]);var 
i=p(a,j[d])+p(a,d);g[b]!==g[h]?l(g[h],g[b],k[b]-k[h]-i):k[b]=Math.max(k[b],k[h]+i)}d=f[d]}while(d!==b)}}var
 g={},h={},i={},j={},k={};return 
b.forEach(function(a){a.forEach(function(b,c){g[b]=b,h[b]={},c>0&&(j[b]=a[c-1])})}),d.values(e).forEach(function(a){m(a)}),b.forEach(function(a){a.forEach(function(a){k[a]=k[e[a]];if(a===e[a]&&a===g[a]){var
 b=0;a in 
h&&Object.keys(h[a]).length>0&&(b=d.min(Object.keys(h[a]).map(function(b){return
 h[a][b]+(b in 
i?i[b]:0)}))),i[a]=b}})}),b.forEach(function(a){a.forEach(function(a){k[a]+=i[g[e[a]]]||0})}),k}function
 i(a,b,c){return d.min(b.map(function(a){var b=a[0];return c[b]}))}function 
j(a,b
 ,c){return d.max(b.map(function(a){var b=a[a.length-1];return c[b]}))}function 
k(a,b,c){function h(a){c[l][a]+=g[l]}var 
d={},e={},f,g={},k=Number.POSITIVE_INFINITY;for(var l in c){var 
m=c[l];d[l]=i(a,b,m),e[l]=j(a,b,m);var 
n=e[l]-d[l];n<k&&(k=n,f=l)}["u","d"].forEach(function(a){["l","r"].forEach(function(b){var
 c=a+b;g[c]=b==="l"?d[f]-d[c]:e[f]-e[c]})});for(l in c)a.eachNode(h)}function 
l(a){for(var b in a)a[b]=-a[b]}function 
m(a){a.forEach(function(a){a.reverse()})}function 
n(a,b){switch(a.graph().rankDir){case"LR":return 
a.node(b).height;case"RL":return a.node(b).height;default:return 
a.node(b).width}}function o(a,b){switch(a.graph().rankDir){case"LR":return 
a.node(b).width;case"RL":return a.node(b).width;default:return 
a.node(b).height}}function p(b,c){if(a.universalSep!==null)return 
a.universalSep;var 
d=n(b,c),e=b.node(c).dummy?a.edgeSep:a.nodeSep;return(d+e)/2}function 
q(a,b,c){if(a.graph().rankDir==="LR"||a.graph().rankDir==="RL"){if(arguments.length<3)return
 a.node(b).y;a.no
 de(b).y=c}else{if(arguments.length<3)return 
a.node(b).x;a.node(b).x=c}}function 
r(a,b,c,d){if(b.graph().rankDir==="LR"||b.graph().rankDir==="RL"){if(arguments.length<3)return
 b.node(c)[a];b.node(c)[a]=d}else{if(arguments.length<3)return 
b.node(c)[a];b.node(c)[a]=d}}function 
s(a,b,c){if(a.graph().rankDir==="LR"||a.graph().rankDir==="RL"){if(arguments.length<3)return
 a.node(b).x;a.node(b).x=c}else{if(arguments.length<3)return 
a.node(b).y;a.node(b).y=c}}function t(a,b,c,d){c.forEach(function(c,e){var 
f,g;c.forEach(function(c){var h=d[c];if(f){var 
i=p(b,f)+p(b,c);h-g<i&&console.log("Position phase: sep violation. Align: 
"+a+". Layer: "+e+". "+"U: "+f+" V: "+c+". Actual sep: "+(h-g)+" Expected sep: 
"+i)}f=c,g=h})})}var 
a={nodeSep:50,edgeSep:10,universalSep:null,rankSep:30},b={};return 
b.nodeSep=d.propertyAccessor(b,a,"nodeSep"),b.edgeSep=d.propertyAccessor(b,a,"edgeSep"),b.universalSep=d.propertyAccessor(b,a,"universalSep"),b.rankSep=d.propertyAccessor(b,a,"rankSep"),b.debugLevel=d.prope
 
rtyAccessor(b,a,"debugLevel"),b.run=c,b}},{"./util":27}],20:[function(a,b,c){function
 
l(a,b){n(a),d.time("constraints.apply",h.apply)(a),o(a),d.time("acyclic",e)(a);var
 c=a.filterNodes(d.filterNonSubgraphs(a));f(c),j(c).forEach(function(a){var 
d=c.filterNodes(k.nodesFromList(a));r(d,b)}),d.time("constraints.relax",h.relax(a)),d.time("reorientEdges",q)(a)}function
 m(a){e.undo(a)}function n(a){a.eachEdge(function(b,c,d,e){if(c===d){var 
f=p(a,b,c,d,e,0,!1),g=p(a,b,c,d,e,1,!0),h=p(a,b,c,d,e,2,!1);a.addEdge(null,f,c,{minLen:1,selfLoop:!0}),a.addEdge(null,f,g,{minLen:1,selfLoop:!0}),a.addEdge(null,c,h,{minLen:1,selfLoop:!0}),a.addEdge(null,g,h,{minLen:1,selfLoop:!0}),a.delEdge(b)}})}function
 o(a){a.eachEdge(function(b,c,d,e){if(c===d){var 
f=e.originalEdge,g=p(a,f.e,f.u,f.v,f.value,0,!0);a.addEdge(null,c,g,{minLen:1}),a.addEdge(null,g,d,{minLen:1}),a.delEdge(b)}})}function
 p(a,b,c,d,e,f,g){return 
a.addNode(null,{width:g?e.width:0,height:g?e.height:0,edge:{id:b,source:c,target:d,attrs:e},du
 mmy:!0,index:f})}function 
q(a){a.eachEdge(function(b,c,d,e){a.node(c).rank>a.node(d).rank&&(a.delEdge(b),e.reversed=!0,a.addEdge(b,d,c,e))})}function
 r(a,b){var c=g(a);b&&(d.log(1,"Using network simplex for 
ranking"),i(a,c)),s(a)}function s(a){var 
b=d.min(a.nodes().map(function(b){return 
a.node(b).rank}));a.eachNode(function(a,c){c.rank-=b})}"use strict";var 
d=a("./util"),e=a("./rank/acyclic"),f=a("./rank/initRank"),g=a("./rank/feasibleTree"),h=a("./rank/constraints"),i=a("./rank/simplex"),j=a("graphlib").alg.components,k=a("graphlib").filter;c.run=l,c.restoreEdges=m},{"./rank/acyclic":21,"./rank/constraints":22,"./rank/feasibleTree":23,"./rank/initRank":24,"./rank/simplex":26,"./util":27,graphlib:29}],21:[function(a,b,c){function
 e(a){function f(d){if(d in 
c)return;c[d]=b[d]=!0,a.outEdges(d).forEach(function(c){var 
h=a.target(c),i;d===h?console.error('Warning: found self loop "'+c+'" for node 
"'+d+'"'):h in 
b?(i=a.edge(c),a.delEdge(c),i.reversed=!0,++e,a.addEdge(c,h,d,i)):f(h)}),de
 lete b[d]}var b={},c={},e=0;return 
a.eachNode(function(a){f(a)}),d.log(2,"Acyclic Phase: reversed "+e+" 
edge(s)"),e}function f(a){a.eachEdge(function(b,c,d,e){e.reversed&&(delete 
e.reversed,a.delEdge(b),a.addEdge(b,d,c,e))})}"use strict";var 
d=a("../util");b.exports=e,b.exports.undo=f},{"../util":27}],22:[function(a,b,c){function
 d(a){return 
a!=="min"&&a!=="max"&&a.indexOf("same_")!==0?(console.error("Unsupported rank 
type: "+a),!1):!0}function e(a,b,c,d){a.inEdges(b).forEach(function(b){var 
e=a.edge(b),f;e.originalEdge?f=e:f={originalEdge:{e:b,u:a.source(b),v:a.target(b),value:e},minLen:a.edge(b).minLen},e.selfLoop&&(d=!1),d?(a.addEdge(null,c,a.source(b),f),f.reversed=!0):a.addEdge(null,a.source(b),c,f)})}function
 f(a,b,c,d){a.outEdges(b).forEach(function(b){var 
e=a.edge(b),f;e.originalEdge?f=e:f={originalEdge:{e:b,u:a.source(b),v:a.target(b),value:e},minLen:a.edge(b).minLen},e.selfLoop&&(d=!1),d?(a.addEdge(null,a.target(b),c,f),f.reversed=!0):a.addEdge(null,c,a.target(b),f)})}func
 tion 
g(a,b,c){c!==undefined&&a.children(b).forEach(function(b){b!==c&&!a.outEdges(c,b).length&&!a.node(b).dummy&&a.addEdge(null,c,b,{minLen:0})})}function
 
h(a,b,c){c!==undefined&&a.children(b).forEach(function(b){b!==c&&!a.outEdges(b,c).length&&!a.node(b).dummy&&a.addEdge(null,b,c,{minLen:0})})}"use
 strict",c.apply=function(a){function b(c){var 
i={};a.children(c).forEach(function(g){if(a.children(g).length){b(g);return}var 
h=a.node(g),j=h.prefRank;if(j!==undefined){if(!d(j))return;j in 
i?i.prefRank.push(g):i.prefRank=[g];var 
k=i[j];k===undefined&&(k=i[j]=a.addNode(null,{originalNodes:[]}),a.parent(k,c)),e(a,g,k,j==="min"),f(a,g,k,j==="max"),a.node(k).originalNodes.push({u:g,value:h,parent:c}),a.delNode(g)}}),g(a,c,i.min),h(a,c,i.max)}b(null)},c.relax=function(a){var
 b=[];a.eachEdge(function(a,c,d,e){var 
f=e.originalEdge;f&&b.push(f)}),a.eachNode(function(
+b,c){var 
d=c.originalNodes;d&&(d.forEach(function(b){b.value.rank=c.rank,a.addNode(b.u,b.value),a.parent(b.u,b.parent)}),a.delNode(b))}),b.forEach(function(b){a.addEdge(b.e,b.u,b.v,b.value)})}},{}],23:[function(a,b,c){function
 g(a){function g(d){var e=!0;return 
a.predecessors(d).forEach(function(f){b.has(f)&&!h(a,f,d)&&(b.has(d)&&(c.addNode(d,{}),b.remove(d),c.graph({root:d})),c.addNode(f,{}),c.addEdge(null,f,d,{reversed:!0}),b.remove(f),g(f),e=!1)}),a.successors(d).forEach(function(f){b.has(f)&&!h(a,d,f)&&(b.has(d)&&(c.addNode(d,{}),b.remove(d),c.graph({root:d})),c.addNode(f,{}),c.addEdge(null,d,f,{}),b.remove(f),g(f),e=!1)}),e}function
 i(){var 
d=Number.MAX_VALUE;b.keys().forEach(function(c){a.predecessors(c).forEach(function(e){if(!b.has(e)){var
 
f=h(a,e,c);Math.abs(f)<Math.abs(d)&&(d=-f)}}),a.successors(c).forEach(function(e){if(!b.has(e)){var
 
f=h(a,c,e);Math.abs(f)<Math.abs(d)&&(d=f)}})}),c.eachNode(function(b){a.node(b).rank-=d})}var
 b=new d(a.nodes()),c=new e;if(b.size()===1){v
 ar f=a.nodes()[0];return 
c.addNode(f,{}),c.graph({root:f}),c}while(b.size()){var 
j=c.order()?c.nodes():b.keys();for(var 
k=0,l=j.length;k<l&&g(j[k]);++k);b.size()&&i()}return c}function h(a,b,c){var 
d=a.node(c).rank-a.node(b).rank,e=f.max(a.outEdges(b,c).map(function(b){return 
a.edge(b).minLen}));return d-e}"use strict";var 
d=a("cp-data").Set,e=a("graphlib").Digraph,f=a("../util");b.exports=g},{"../util":27,"cp-data":5,graphlib:29}],24:[function(a,b,c){function
 f(a){var b=e(a);b.forEach(function(b){var 
c=a.inEdges(b);if(c.length===0){a.node(b).rank=0;return}var 
e=c.map(function(b){return 
a.node(a.source(b)).rank+a.edge(b).minLen});a.node(b).rank=d.max(e)})}"use 
strict";var 
d=a("../util"),e=a("graphlib").alg.topsort;b.exports=f},{"../util":27,graphlib:29}],25:[function(a,b,c){function
 d(a,b,c,d){return Math.abs(a.node(b).rank-a.node(c).rank)-d}"use 
strict",b.exports={slack:d}},{}],26:[function(a,b,c){function 
f(a,b){g(a,b);for(;;){var c=k(b);if(c===null)break;var d=l(a,b,c);m(a,b,c,d)
 }}function g(a,b){function c(d){var e=b.successors(d);for(var f in e){var 
g=e[f];c(g)}d!==b.graph().root&&i(a,b,d)}h(b),b.eachEdge(function(a,b,c,d){d.cutValue=0}),c(b.graph().root)}function
 h(a){function c(d){var e=a.successors(d),f=b;for(var g in e){var 
h=e[g];c(h),f=Math.min(f,a.node(h).low)}a.node(d).low=f,a.node(d).lim=b++}var 
b=0;c(a.graph().root)}function i(a,b,c){var 
d=b.inEdges(c)[0],e=[],f=b.outEdges(c);for(var g in 
f)e.push(b.target(f[g]));var h=0,i=0,k=0,l=0,m=0,n=a.outEdges(c),o;for(var p in 
n){var q=a.target(n[p]);for(o in e)j(b,q,e[o])&&i++;j(b,q,c)||l++}var 
r=a.inEdges(c);for(var s in r){var t=a.source(r[s]);for(o in 
e)j(b,t,e[o])&&k++;j(b,t,c)||m++}var u=0;for(o in e){var 
v=b.edge(f[o]).cutValue;b.edge(f[o]).reversed?u-=v:u+=v}b.edge(d).reversed?h-=u-i+k-l+m:h+=u-i+k-l+m,b.edge(d).cutValue=h}function
 j(a,b,c){return 
a.node(c).low<=a.node(b).lim&&a.node(b).lim<=a.node(c).lim}function k(a){var 
b=a.edges();for(var c in b){var d=b[c],e=a.edge(d);if(e.cutValue<0)return d
 }return null}function l(a,b,c){var 
d=b.source(c),f=b.target(c),g=b.node(f).lim<b.node(d).lim?f:d,h=!b.edge(c).reversed,i=Number.POSITIVE_INFINITY,k;h?a.eachEdge(function(d,f,h,l){if(d!==c&&j(b,f,g)&&!j(b,h,g)){var
 
m=e.slack(a,f,h,l.minLen);m<i&&(i=m,k=d)}}):a.eachEdge(function(d,f,h,l){if(d!==c&&!j(b,f,g)&&j(b,h,g)){var
 m=e.slack(a,f,h,l.minLen);m<i&&(i=m,k=d)}});if(k===undefined){var 
l=[],m=[];throw a.eachNode(function(a){j(b,a,g)?m.push(a):l.push(a)}),new 
Error("No edge found from outside of tree to inside")}return k}function 
m(a,b,c,d){function h(a){var c=b.inEdges(a);for(var d in c){var 
e=c[d],f=b.source(e),g=b.edge(e);h(f),b.delEdge(e),g.reversed=!g.reversed,b.addEdge(e,a,f,g)}}b.delEdge(c);var
 e=a.source(d),f=a.target(d);h(f);var 
i=e,j=b.inEdges(i);while(j.length>0)i=b.source(j[0]),j=b.inEdges(i);b.graph().root=i,b.addEdge(null,e,f,{cutValue:0}),g(a,b),n(a,b)}function
 n(a,b){function c(d){var e=b.successors(d);e.forEach(function(b){var 
e=o(a,d,b);a.node(b).rank=a.node(d).rank+
 e,c(b)})}c(b.graph().root)}function o(a,b,c){var 
e=a.outEdges(b,c);if(e.length>0)return d.max(e.map(function(b){return 
a.edge(b).minLen}));var 
f=a.inEdges(b,c);if(f.length>0)return-d.max(f.map(function(b){return 
a.edge(b).minLen}))}"use strict";var 
d=a("../util"),e=a("./rankUtil");b.exports=f},{"../util":27,"./rankUtil":25}],27:[function(a,b,c){function
 d(a,b){return function(){var c=(new Date).getTime();try{return 
b.apply(null,arguments)}finally{e(1,a+" time: "+((new 
Date).getTime()-c)+"ms")}}}function 
e(a){e.level>=a&&console.log.apply(console,Array.prototype.slice.call(arguments,1))}"use
 strict",c.min=function(a){return 
Math.min.apply(Math,a)},c.max=function(a){return 
Math.max.apply(Math,a)},c.all=function(a,b){for(var 
c=0;c<a.length;++c)if(!b(a[c]))return!1;return!0},c.sum=function(a){return 
a.reduce(function(a,b){return a+b},0)},c.values=function(a){return 
Object.keys(a).map(function(b){return a[b]})},c.shuffle=function(a){for(var 
b=a.length-1;b>0;--b){var c=Math.floor(Math.ran
 
dom()*(b+1)),d=a[c];a[c]=a[b],a[b]=d}},c.propertyAccessor=function(a,b,c,d){return
 function(e){return 
arguments.length?(b[c]=e,d&&d(e),a):b[c]}},c.ordering=function(a){var 
b=[];return a.eachNode(function(a,c){var 
d=b[c.rank]||(b[c.rank]=[]);d[c.order]=a}),b},c.filterNonSubgraphs=function(a){return
 function(b){return 
a.children(b).length===0}},d.enabled=!1,c.time=d,e.level=0,c.log=e},{}],28:[function(a,b,c){b.exports="0.4.6"},{}],29:[function(a,b,c){c.Graph=a("./lib/Graph"),c.Digraph=a("./lib/Digraph"),c.CGraph=a("./lib/CGraph"),c.CDigraph=a("./lib/CDigraph"),a("./lib/graph-converters"),c.alg={isAcyclic:a("./lib/alg/isAcyclic"),components:a("./lib/alg/components"),dijkstra:a("./lib/alg/dijkstra"),dijkstraAll:a("./lib/alg/dijkstraAll"),findCycles:a("./lib/alg/findCycles"),floydWarshall:a("./lib/alg/floydWarshall"),postorder:a("./lib/alg/postorder"),preorder:a("./lib/alg/preorder"),prim:a("./lib/alg/prim"),tarjan:a("./lib/alg/tarjan"),topsort:a("./lib/alg/topsort")},c.converter={json:a
 ("./lib/converter/json.js")};var 
d=a("./lib/filter");c.filter={all:d.all,nodesFromList:d.nodesFromList},c.version=a("./lib/version")},{"./lib/CDigraph":31,"./lib/CGraph":32,"./lib/Digraph":33,"./lib/Graph":34,"./lib/alg/components":35,"./lib/alg/dijkstra":36,"./lib/alg/dijkstraAll":37,"./lib/alg/findCycles":38,"./lib/alg/floydWarshall":39,"./lib/alg/isAcyclic":40,"./lib/alg/postorder":41,"./lib/alg/preorder":42,"./lib/alg/prim":43,"./lib/alg/tarjan":44,"./lib/alg/topsort":45,"./lib/converter/json.js":47,"./lib/filter":48,"./lib/graph-converters":49,"./lib/version":51}],30:[function(a,b,c){function
 
e(){this._value=undefined,this._nodes={},this._edges={},this._nextId=0}function 
f(a,b,c){(a[b]||(a[b]=new d)).add(c)}function g(a,b,c){var 
d=a[b];d.remove(c),d.size()===0&&delete a[b]}var 
d=a("cp-data").Set;b.exports=e,e.prototype.order=function(){return 
Object.keys(this._nodes).length},e.prototype.size=function(){return 
Object.keys(this._edges).length},e.prototype.graph=function(a){if(arg
 uments.length===0)return 
this._value;this._value=a},e.prototype.hasNode=function(a){return a in 
this._nodes},e.prototype.node=function(a,b){var 
c=this._strictGetNode(a);if(arguments.length===1)return 
c.value;c.value=b},e.prototype.nodes=function(){var a=[];return 
this.eachNode(function(b){a.push(b)}),a},e.prototype.eachNode=function(a){for(var
 b in this._nodes){var 
c=this._nodes[b];a(c.id,c.value)}},e.prototype.hasEdge=function(a){return a in 
this._edges},e.prototype.edge=function(a,b){var 
c=this._strictGetEdge(a);if(arguments.length===1)return 
c.value;c.value=b},e.prototype.edges=function(){var a=[];return 
this.eachEdge(function(b){a.push(b)}),a},e.prototype.eachEdge=function(a){for(var
 b in this._edges){var 
c=this._edges[b];a(c.id,c.u,c.v,c.value)}},e.prototype.incidentNodes=function(a){var
 
b=this._strictGetEdge(a);return[b.u,b.v]},e.prototype.addNode=function(a,b){if(a===undefined||a===null){do
 a="_"+ ++this._nextId;while(this.hasNode(a))}else if(this.hasNode(a))throw new 
Error("
 Graph already has node '"+a+"'");return 
this._nodes[a]={id:a,value:b},a},e.prototype.delNode=function(a){this._strictGetNode(a),this.incidentEdges(a).forEach(function(a){this.delEdge(a)},this),delete
 
this._nodes[a]},e.prototype._addEdge=function(a,b,c,d,e,g){this._strictGetNode(b),this._strictGetNode(c);if(a===undefined||a===null){do
 a="_"+ ++this._nextId;while(this.hasEdge(a))}else if(this.hasEdge(a))throw new 
Error("Graph already has edge '"+a+"'");return 
this._edges[a]={id:a,u:b,v:c,value:d},f(e[c],b,a),f(g[b],c,a),a},e.prototype._delEdge=function(a,b,c){var
 d=this._strictGetEdge(a);g(b[d.v],d.u,a),g(c[d.u],d.v,a),delete 
this._edges[a]},e.prototype.copy=function(){var a=new this.constructor;return 
a.graph(this.graph()),this.eachNode(function(b,c){a.addNode(b,c)}),this.eachEdge(function(b,c,d,e){a.addEdge(b,c,d,e)}),a._nextId=this._nextId,a},e.prototype.filterNodes=function(a){var
 b=new this.constructor;return 
b.graph(this.graph()),this.eachNode(function(c,d){a(c)&&b.addNode(c,d)}
 
),this.eachEdge(function(a,c,d,e){b.hasNode(c)&&b.hasNode(d)&&b.addEdge(a,c,d,e)}),b},e.prototype._strictGetNode=function(a){var
 b=this._nodes[a];if(b===undefined)throw new Error("Node '"+a+"' is not in 
graph");return b},e.prototype._strictGetEdge=function(a){var 
b=this._edges[a];if(b===undefined)throw new Error("Edge '"+a+"' is not in 
graph");return b}},{"cp-data":5}],31:[function(a,b,c){var 
d=a("./Digraph"),e=a("./compoundify"),f=e(d);b.exports=f,f.fromDigraph=function(a){var
 b=new f,c=a.graph();return 
c!==undefined&&b.graph(c),a.eachNode(function(a,c){c===undefined?b.addNode(a):b.addNode(a,c)}),a.eachEdge(function(a,c,d,e){e===undefined?b.addEdge(null,c,d):b.addEdge(null,c,d,e)}),b},f.prototype.toString=function(){return"CDigraph
 
"+JSON.stringify(this,null,2)}},{"./Digraph":33,"./compoundify":46}],32:[function(a,b,c){var
 
d=a("./Graph"),e=a("./compoundify"),f=e(d);b.exports=f,f.fromGraph=function(a){var
 b=new f,c=a.graph();return c!==undefined&&b.graph(c),a.eachNode(function(a,c){
 
c===undefined?b.addNode(a):b.addNode(a,c)}),a.eachEdge(function(a,c,d,e){e===undefined?b.addEdge(null,c,d):b.addEdge(null,c,d,e)}),b},f.prototype.toString=function(){return"CGraph
 
"+JSON.stringify(this,null,2)}},{"./Graph":34,"./compoundify":46}],33:[function(a,b,c){function
 g(){e.call(this),this._inEdges={},this._outEdges={}}var 
d=a("./util"),e=a("./BaseGraph"),f=a("cp-data").Set;b.exports=g,g.prototype=new 
e,g.prototype.constructor=g,g.prototype.isDirected=function(){return!0},g.prototype.successors=function(a){return
 this._strictGetNode(a),Object.keys(this._outEdges[a]).map(function(a){return 
this._nodes[a].id},this)},g.prototype.predecessors=function(a){return 
this._strictGetNode(a),Object.keys(this._inEdges[a]).map(function(a){return 
this._nodes[a].id},this)},g.prototype.neighbors=function(a){return 
f.union([this.successors(a),this.predecessors(a)]).keys()},g.prototype.sources=function(){var
 a=this;return this._filterNodes(function(b){return 
a.inEdges(b).length===0})},g.prototy
 pe.sinks=function(){var a=this;return this._filterNodes(function(b){return 
a.outEdges(b).length===0})},g.prototype.source=function(a){return 
this._strictGetEdge(a).u},g.prototype.target=function(a){return 
this._strictGetEdge(a).v},g.prototype.inEdges=function(a,b){this._strictGetNode(a);var
 c=f.union(d.values(this._inEdges[a])).keys();return 
arguments.length>1&&(this._strictGetNode(b),c=c.filter(function(a){return 
this.source(a)===b},this)),c},g.prototype.outEdges=function(a,b){this._strictGetNode(a);var
 c=f.union(d.values(this._outEdges[a])).keys();return 
arguments.length>1&&(this._strictGetNode(b),c=c.filter(function(a){return 
this.target(a)===b},this)),c},g.prototype.incidentEdges=function(a,b){return 
arguments.length>1?f.union([this.outEdges(a,b),this.outEdges(b,a)]).keys():f.union([this.inEdges(a),this.outEdges(a)]).keys()},g.prototype.toString=function(){return"Digraph
 "+JSON.stringify(this,null,2)},g.prototype.addNode=function(a,b){return 
a=e.prototype.addNode.call(this,a,b),
 
this._inEdges[a]={},this._outEdges[a]={},a},g.prototype.delNode=function(a){e.prototype.delNode.call(this,a),delete
 this._inEdges[a],delete 
this._outEdges[a]},g.prototype.addEdge=function(a,b,c,d){return 
e.prototype._addEdge.call(this,a,b,c,d,this._inEdges,this._outEdges)},g.prototype.delEdge=function(a){e.prototype._delEdge.call(this,a,this._inEdges,this._outEdges)},g.prototype._filterNodes=function(a){var
 b=[];return 
this.eachNode(function(c){a(c)&&b.push(c)}),b}},{"./BaseGraph":30,"./util":50,"cp-data":5}],34:[function(a,b,c){function
 g(){e.call(this),this._incidentEdges={}}var 
d=a("./util"),e=a("./BaseGraph"),f=a("cp-data").Set;b.exports=g,g.prototype=new 
e,g.prototype.constructor=g,g.prototype.isDirected=function(){return!1},g.prototype.neighbors=function(a){return
 
this._strictGetNode(a),Object.keys(this._incidentEdges[a]).map(function(a){return
 this._nodes[a].id},this)},g.prototype.incidentEdges=function(a,b){return 
this._strictGetNode(a),arguments.length>1?(this._strictGetNod
 e(b),b in 
this._incidentEdges[a]?this._incidentEdges[a][b].keys():[]):f.union(d.values(this._incidentEdges[a])).keys()},g.prototype.toString=function(){return"Graph
 "+JSON.stringify(this,null,2)},g.prototype.addNode=function(a,b){return 
a=e.prototype.addNode.call(this,a,b),this._incidentEdges[a]={},a},g.prototype.delNode=function(a){e.prototype.delNode.call(this,a),delete
 this._incidentEdges[a]},g.prototype.addEdge=function(a,b,c,d){return 
e.prototype._addEdge.call(this,a,b,c,d,this._incidentEdges,this._incidentEdges)},g.prototype.delEdge=function(a){e.prototype._delEdge.call(this,a,this._incidentEdges,this._incidentEdges)}},{"./BaseGraph":30,"./util":50,"cp-data":5}],35:[function(a,b,c){function
 e(a){function 
e(b,d){c.has(b)||(c.add(b),d.push(b),a.neighbors(b).forEach(function(a){e(a,d)}))}var
 b=[],c=new d;return a.nodes().forEach(function(a){var 
c=[];e(a,c),c.length>0&&b.push(c)}),b}var 
d=a("cp-data").Set;b.exports=e},{"cp-data":5}],36:[function(a,b,c){function 
e(a,b,c,e){function
  h(b){var 
d=a.incidentNodes(b),e=d[0]!==i?d[0]:d[1],h=f[e],k=c(b),l=j.distance+k;if(k<0)throw
 new Error("dijkstra does not allow negative edge weights. Bad edge: "+b+" 
Weight: "+k);l<h.distance&&(h.distance=l,h.predecessor=i,g.decrease(e,l))}var 
f={},g=new d;c=c||function(){return 1},e=e||(a.isDirected()?function(b){return 
a.outEdges(b)}:function(b){return 
a.incidentEdges(b)}),a.eachNode(function(a){var 
c=a===b?0:Number.POSITIVE_INFINITY;f[a]={distance:c},g.add(a,c)});var 
i,j;while(g.size()>0){i=g.removeMin(),j=f[i];if(j.distance===Number.POSITIVE_INFINITY)break;e(i).forEach(h)}return
 f}var 
d=a("cp-data").PriorityQueue;b.exports=e},{"cp-data":5}],37:[function(a,b,c){function
 e(a,b,c){var e={};return a.eachNode(function(f){e[f]=d(a,f,b,c)}),e}var 
d=a("./dijkstra");b.exports=e},{"./dijkstra":36}],38:[function(a,b,c){function 
e(a){return d(a).filter(function(a){return a.length>1})}var 
d=a("./tarjan");b.exports=e},{"./tarjan":44}],39:[function(a,b,c){function 
d(a,b,c){var d={},e=a.nodes
 ();return b=b||function(){return 1},c=c||(a.isDirected()?function(b){return 
a.outEdges(b)}:function(b){return 
a.incidentEdges(b)}),e.forEach(function(f){d[f]={},d[f][f]={distance:0},e.forEach(function(a){f!==a&&(d[f][a]={distance:Number.POSITIVE_INFINITY})}),c(f).forEach(function(c){var
 
e=a.incidentNodes(c),h=e[0]!==f?e[0]:e[1],i=b(c);i<d[f][h].distance&&(d[f][h]={distance:i,predecessor:f})})}),e.forEach(function(a){var
 b=d[a];e.forEach(function(c){var f=d[c];e.forEach(function(c){var 
d=f[a],e=b[c],g=f[c],h=d.distance+e.distance;h<g.distance&&(g.distance=h,g.predecessor=e.predecessor)})})}),d}b.exports=d},{}],40:[function(a,b,c){function
 e(a){try{d(a)}catch(b){if(b instanceof d.CycleException)return!1;throw 
b}return!0}var 
d=a("./topsort");b.exports=e},{"./topsort":45}],41:[function(a,b,c){function 
e(a,b,c){function f(b,d){if(e.has(b))throw new Error("The input graph is not a 
tree: "+a);e.add(b),a.neighbors(b).forEach(function(a){a!==d&&f(a,b)}),c(b)}var 
e=new d;if(a.isDirected())thr
 ow new Error("This function only works for undirected graphs");f(b)}var 
d=a("cp-data").Set;b.exports=e},{"cp-data":5}],42:[function(a,b,c){function 
e(a,b,c){function f(b,d){if(e.has(b))throw new Error("The input graph is not a 
tree: "+a);e.add(b),c(b),a.neighbors(b).forEach(function(a){a!==d&&f(a,b)})}var 
e=new d;if(a.isDirected())throw new Error("This function only works for 
undirected graphs");f(b)}var 
d=a("cp-data").Set;b.exports=e},{"cp-data":5}],43:[function(a,b,c){function 
f(a,b){function i(c){var 
d=a.incidentNodes(c),e=d[0]!==h?d[0]:d[1],i=g.priority(e);if(i!==undefined){var 
j=b(c);j<i&&(f[e]=h,g.decrease(e,j))}}var c=new d,f={},g=new 
e,h;if(a.order()===0)return 
c;a.eachNode(function(a){g.add(a,Number.POSITIVE_INFINITY),c.addNode(a)}),g.decrease(a.nodes()[0],0);var
 j=!1;while(g.size()>0){h=g.removeMin();if(h in 
f)c.addEdge(null,h,f[h]);else{if(j)throw new Error("Input graph is not 
connected: "+a);j=!0}a.incidentEdges(h).forEach(i)}return c}var 
d=a("../Graph"),e=a("cp-data").P
 
riorityQueue;b.exports=f},{"../Graph":34,"cp-data":5}],44:[function(a,b,c){function
 d(a){function f(h){var 
i=d[h]={onStack:!0,lowlink:b,index:b++};c.push(h),a.successors(h).forEach(function(a){a
 in 
d?d[a].onStack&&(i.lowlink=Math.min(i.lowlink,d[a].index)):(f(a),i.lowlink=Math.min(i.lowlink,d[a].lowlink))});if(i.lowlink===i.index){var
 j=[],k;do 
k=c.pop(),d[k].onStack=!1,j.push(k);while(h!==k);e.push(j)}}if(!a.isDirected())throw
 new Error("tarjan can only be applied to a directed graph. Bad input: "+a);var 
b=0,c=[],d={},e=[];return a.nodes().forEach(function(a){a in 
d||f(a)}),e}b.exports=d},{}],45:[function(a,b,c){function d(a){function 
f(g){if(g in c)throw new e;g in 
b||(c[g]=!0,b[g]=!0,a.predecessors(g).forEach(function(a){f(a)}),delete 
c[g],d.push(g))}if(!a.isDirected())throw new Error("topsort can only be applied 
to a directed graph. Bad input: "+a);var 
b={},c={},d=[],g=a.sinks();if(a.order()!==0&&g.length===0)throw new e;return 
a.sinks().forEach(function(a){f(a)}),d}function e()
 {}b.exports=d,d.CycleException=e,e.prototype.toString=function(){return"Graph 
has at least one cycle"}},{}],46:[function(a,b,c){function e(a){function 
b(){a.call(this),this._parents={},this._children={},this._children[null]=new 
d}return b.prototype=new 
a,b.prototype.constructor=b,b.prototype.parent=function(a,b){this._strictGetNode(a);if(arguments.length<2)return
 this._parents[a];if(a===b)throw new Error("Cannot make "+a+" a parent of 
itself");b!==null&&this._strictGetNode(b),this._children[this._parents[a]].remove(a),this._parents[a]=b,this._children[b].add(a)},b.prototype.children=function(a){return
 
a!==null&&this._strictGetNode(a),this._children[a].keys()},b.prototype.addNode=function(b,c){return
 
b=a.prototype.addNode.call(this,b,c),this._parents[b]=null,this._children[b]=new
 d,this._children[null].add(b),b},b.prototype.delNode=function(b){var 
c=this.parent(b);return 
this._children[b].keys().forEach(function(a){this.parent(a,c)},this),this._children[c].remove(b),delete
 this._pare
 nts[b],delete 
this._children[b],a.prototype.delNode.call(this,b)},b.prototype.copy=function(){var
 b=a.prototype.copy.call(this);return 
this.nodes().forEach(function(a){b.parent(a,this.parent(a))},this),b},b.prototype.filterNodes=function(b){function
 f(a){var b=c.parent(a);return b===null||d.hasNode(b)?(e[a]=b,b):b in 
e?e[b]:f(b)}var c=this,d=a.prototype.filterNodes.call(this,b),e={};return 
d.eachNode(function(a){d.parent(a,f(a))}),d},b}var 
d=a("cp-data").Set;b.exports=e},{"cp-data":5}],47:[function(a,b,c){function 
h(a){return Object.prototype.toString.call(a).slice(8,-1)}var 
d=a("../Graph"),e=a("../Digraph"),f=a("../CGraph"),g=a("../CDigraph");c.decode=function(a,b,c){c=c||e;if(h(a)!=="Array")throw
 new Error("nodes is not an Array");if(h(b)!=="Array")throw new Error("edges is 
not an Array");if(typeof 
c=="string")switch(c){case"graph":c=d;break;case"digraph":c=e;break;case"cgraph":c=f;break;case"cdigraph":c=g;break;default:throw
 new Error("Unrecognized graph type: "+c)}var i=new c;re
 turn 
a.forEach(function(a){i.addNode(a.id,a.value)}),i.parent&&a.forEach(function(a){a.children&&a.children.forEach(function(b){i.parent(b,a.id)})}),b.forEach(function(a){i.addEdge(a.id,a.u,a.v,a.value)}),i},c.encode=function(a){var
 b=[],c=[];a.eachNode(function(c,d){var e={id:c,value:d};if(a.children){var 
f=a.children(c);f.length&&(e.children=f)}b.push(e)}),a.eachEdge(function(a,b,d,e){c.push({id:a,u:b,v:d,value:e})});var
 h;if(a instanceof g)h="cdigraph";else if(a instanceof f)h="cgraph";else if(a 
instanceof e)h="digraph";else if(a instanceof d)h="graph";else throw new 
Error("Couldn't determine type of graph: 
"+a);return{nodes:b,edges:c,type:h}}},{"../CDigraph":31,"../CGraph":32,"../Digraph":33,"../Graph":34}],48:[function(a,b,c){var
 d=a("cp-data").Set;c.all=function(){return 
function(){return!0}},c.nodesFromList=function(a){var b=new d(a);return 
function(a){return b.has(a)}}},{"cp-data":5}],49:[function(a,b,c){var 
d=a("./Graph"),e=a("./Digraph");d.prototype.toDigraph=d.prototype.a
 sDirected=function(){var a=new e;return 
this.eachNode(function(b,c){a.addNode(b,c)}),this.eachEdge(function(b,c,d,e){a.addEdge(null,c,d,e),a.addEdge(null,d,c,e)}),a},e.prototype.toGraph=e.prototype.asUndirected=function(){var
 a=new d;return 
this.eachNode(function(b,c){a.addNode(b,c)}),this.eachEdge(function(b,c,d,e){a.addEdge(b,c,d,e)}),a}},{"./Digraph":33,"./Graph":34}],50:[function(a,b,c){c.values=function(a){var
 b=Object.keys(a),c=b.length,d=new 
Array(c),e;for(e=0;e<c;++e)d[e]=a[b[e]];return 
d}},{}],51:[function(a,b,c){b.exports="0.7.4"},{}]},{},[1]);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/05e1861e/airflow/www_rbac/static/dagre.css
----------------------------------------------------------------------
diff --git a/airflow/www_rbac/static/dagre.css 
b/airflow/www_rbac/static/dagre.css
new file mode 100644
index 0000000..acf4ff5
--- /dev/null
+++ b/airflow/www_rbac/static/dagre.css
@@ -0,0 +1,38 @@
+/**
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+svg {
+    overflow: hidden;
+}
+
+.node rect {
+    stroke: #333;
+    stroke-width: 1px;
+    fill: #fff;
+}
+
+.edgeLabel rect {
+    fill: #fff;
+}
+
+.edgePath {
+    stroke: #333;
+    stroke-width: 1px;
+    fill: none;
+}

http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/05e1861e/airflow/www_rbac/static/dataTables.bootstrap.css
----------------------------------------------------------------------
diff --git a/airflow/www_rbac/static/dataTables.bootstrap.css 
b/airflow/www_rbac/static/dataTables.bootstrap.css
new file mode 100644
index 0000000..8ca39c3
--- /dev/null
+++ b/airflow/www_rbac/static/dataTables.bootstrap.css
@@ -0,0 +1,333 @@
+/**
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+div.dataTables_length label {
+       font-weight: normal;
+       text-align: left;
+       white-space: nowrap;
+}
+
+div.dataTables_length select {
+       width: 75px;
+       display: inline-block;
+}
+
+div.dataTables_filter {
+       text-align: right;
+}
+
+div.dataTables_filter label {
+       font-weight: normal;
+       white-space: nowrap;
+       text-align: left;
+}
+
+div.dataTables_filter input {
+       margin-left: 0.5em;
+       display: inline-block;
+}
+
+div.dataTables_info {
+       padding-top: 8px;
+       white-space: nowrap;
+}
+
+div.dataTables_paginate {
+       margin: 0;
+       white-space: nowrap;
+       text-align: right;
+}
+
+div.dataTables_paginate ul.pagination {
+       margin: 2px 0;
+       white-space: nowrap;
+}
+
+@media screen and (max-width: 767px) {
+       div.dataTables_length,
+       div.dataTables_filter,
+       div.dataTables_info,
+       div.dataTables_paginate {
+               text-align: center;
+       }
+}
+
+
+table.dataTable td,
+table.dataTable th {
+       -webkit-box-sizing: content-box;
+       -moz-box-sizing: content-box;
+       box-sizing: content-box;
+}
+
+
+table.dataTable {
+       clear: both;
+       margin-top: 6px !important;
+       margin-bottom: 6px !important;
+       max-width: none !important;
+}
+
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+       cursor: pointer;
+}
+
+table.dataTable thead .sorting { background: url('../images/sort_both.png') 
no-repeat center right; }
+table.dataTable thead .sorting_asc { background: url('../images/sort_asc.png') 
no-repeat center right; }
+table.dataTable thead .sorting_desc { background: 
url('../images/sort_desc.png') no-repeat center right; }
+
+table.dataTable thead .sorting_asc_disabled { background: 
url('../images/sort_asc_disabled.png') no-repeat center right; }
+table.dataTable thead .sorting_desc_disabled { background: 
url('../images/sort_desc_disabled.png') no-repeat center right; }
+
+table.dataTable thead > tr > th {
+       padding-left: 18px;
+       padding-right: 18px;
+}
+
+table.dataTable th:active {
+       outline: none;
+}
+
+/* Scrolling */
+div.dataTables_scrollHead table {
+       margin-bottom: 0 !important;
+       border-bottom-left-radius: 0;
+       border-bottom-right-radius: 0;
+}
+
+div.dataTables_scrollHead table thead tr:last-child th:first-child,
+div.dataTables_scrollHead table thead tr:last-child td:first-child {
+       border-bottom-left-radius: 0 !important;
+       border-bottom-right-radius: 0 !important;
+}
+
+div.dataTables_scrollBody table {
+       border-top: none;
+       margin-top: 0 !important;
+       margin-bottom: 0 !important;
+}
+
+div.dataTables_scrollBody tbody tr:first-child th,
+div.dataTables_scrollBody tbody tr:first-child td {
+       border-top: none;
+}
+
+div.dataTables_scrollFoot table {
+       margin-top: 0 !important;
+       border-top: none;
+}
+
+/* Frustratingly the border-collapse:collapse used by Bootstrap makes the 
column
+   width calculations when using scrolling impossible to align columns. We have
+   to use separate
+ */
+table.table-bordered.dataTable {
+       border-collapse: separate !important;
+}
+table.table-bordered thead th,
+table.table-bordered thead td {
+       border-left-width: 0;
+       border-top-width: 0;
+}
+table.table-bordered tbody th,
+table.table-bordered tbody td {
+       border-left-width: 0;
+       border-bottom-width: 0;
+}
+table.table-bordered th:last-child,
+table.table-bordered td:last-child {
+       border-right-width: 0;
+}
+div.dataTables_scrollHead table.table-bordered {
+       border-bottom-width: 0;
+}
+
+
+
+
+/*
+ * TableTools styles
+ */
+.table.dataTable tbody tr.active td,
+.table.dataTable tbody tr.active th {
+       background-color: #08C;
+       color: white;
+}
+
+.table.dataTable tbody tr.active:hover td,
+.table.dataTable tbody tr.active:hover th {
+       background-color: #0075b0 !important;
+}
+
+.table.dataTable tbody tr.active th > a,
+.table.dataTable tbody tr.active td > a {
+       color: white;
+}
+
+.table-striped.dataTable tbody tr.active:nth-child(odd) td,
+.table-striped.dataTable tbody tr.active:nth-child(odd) th {
+       background-color: #017ebc;
+}
+
+table.DTTT_selectable tbody tr {
+       cursor: pointer;
+}
+
+div.DTTT .btn:hover {
+       text-decoration: none !important;
+}
+
+ul.DTTT_dropdown.dropdown-menu {
+  z-index: 2003;
+}
+
+ul.DTTT_dropdown.dropdown-menu a {
+       color: #333 !important; /* needed only when demo_page.css is included */
+}
+
+ul.DTTT_dropdown.dropdown-menu li {
+       position: relative;
+}
+
+ul.DTTT_dropdown.dropdown-menu li:hover a {
+       background-color: #0088cc;
+       color: white !important;
+}
+
+div.DTTT_collection_background {
+       z-index: 2002;
+}
+
+/* TableTools information display */
+div.DTTT_print_info {
+       position: fixed;
+       top: 50%;
+       left: 50%;
+       width: 400px;
+       height: 150px;
+       margin-left: -200px;
+       margin-top: -75px;
+       text-align: center;
+       color: #333;
+       padding: 10px 30px;
+       opacity: 0.95;
+
+       background-color: white;
+       border: 1px solid rgba(0, 0, 0, 0.2);
+       border-radius: 6px;
+
+       -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
+               box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
+}
+
+div.DTTT_print_info h6 {
+       font-weight: normal;
+       font-size: 28px;
+       line-height: 28px;
+       margin: 1em;
+}
+
+div.DTTT_print_info p {
+       font-size: 14px;
+       line-height: 20px;
+}
+
+div.dataTables_processing {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    width: 100%;
+    height: 60px;
+    margin-left: -50%;
+    margin-top: -25px;
+    padding-top: 20px;
+    padding-bottom: 20px;
+    text-align: center;
+    font-size: 1.2em;
+    background-color: white;
+    background: -webkit-gradient(linear, left top, right top, color-stop(0%, 
rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, 
rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));
+    background: -webkit-linear-gradient(left, rgba(255,255,255,0) 0%, 
rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+    background: -moz-linear-gradient(left, rgba(255,255,255,0) 0%, 
rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+    background: -ms-linear-gradient(left, rgba(255,255,255,0) 0%, 
rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+    background: -o-linear-gradient(left, rgba(255,255,255,0) 0%, 
rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+    background: linear-gradient(to right, rgba(255,255,255,0) 0%, 
rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+}
+
+
+
+/*
+ * FixedColumns styles
+ */
+div.DTFC_LeftHeadWrapper table,
+div.DTFC_LeftFootWrapper table,
+div.DTFC_RightHeadWrapper table,
+div.DTFC_RightFootWrapper table,
+table.DTFC_Cloned tr.even {
+    background-color: white;
+    margin-bottom: 0;
+}
+
+div.DTFC_RightHeadWrapper table ,
+div.DTFC_LeftHeadWrapper table {
+       border-bottom: none !important;
+    margin-bottom: 0 !important;
+    border-top-right-radius: 0 !important;
+    border-bottom-left-radius: 0 !important;
+    border-bottom-right-radius: 0 !important;
+}
+
+div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child,
+div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child,
+div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,
+div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child {
+    border-bottom-left-radius: 0 !important;
+    border-bottom-right-radius: 0 !important;
+}
+
+div.DTFC_RightBodyWrapper table,
+div.DTFC_LeftBodyWrapper table {
+    border-top: none;
+    margin: 0 !important;
+}
+
+div.DTFC_RightBodyWrapper tbody tr:first-child th,
+div.DTFC_RightBodyWrapper tbody tr:first-child td,
+div.DTFC_LeftBodyWrapper tbody tr:first-child th,
+div.DTFC_LeftBodyWrapper tbody tr:first-child td {
+    border-top: none;
+}
+
+div.DTFC_RightFootWrapper table,
+div.DTFC_LeftFootWrapper table {
+    border-top: none;
+    margin-top: 0 !important;
+}
+
+
+/*
+ * FixedHeader styles
+ */
+div.FixedHeader_Cloned table {
+       margin: 0 !important
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/05e1861e/airflow/www_rbac/static/docs
----------------------------------------------------------------------
diff --git a/airflow/www_rbac/static/docs b/airflow/www_rbac/static/docs
new file mode 120000
index 0000000..d5d3801
--- /dev/null
+++ b/airflow/www_rbac/static/docs
@@ -0,0 +1 @@
+../../../docs/_build/html/
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/05e1861e/airflow/www_rbac/static/favicon.ico
----------------------------------------------------------------------
diff --git a/airflow/www_rbac/static/favicon.ico 
b/airflow/www_rbac/static/favicon.ico
new file mode 100644
index 0000000..822e6d7
Binary files /dev/null and b/airflow/www_rbac/static/favicon.ico differ

http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/05e1861e/airflow/www_rbac/static/gantt-chart-d3v2.js
----------------------------------------------------------------------
diff --git a/airflow/www_rbac/static/gantt-chart-d3v2.js 
b/airflow/www_rbac/static/gantt-chart-d3v2.js
new file mode 100644
index 0000000..d21311a
--- /dev/null
+++ b/airflow/www_rbac/static/gantt-chart-d3v2.js
@@ -0,0 +1,267 @@
+/**
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @author Dimitry Kudrayvtsev
+ * @version 2.1
+ * @modifiedby Maxime Beauchemin
+ */
+
+d3.gantt = function() {
+  var FIT_TIME_DOMAIN_MODE = "fit";
+  var FIXED_TIME_DOMAIN_MODE = "fixed";
+  var tip = d3.tip()
+    .attr('class', 'd3-tip')
+    .offset([-10, 0])
+    .html(function(d) {
+      var s = ""
+      s += "<div class='row'>";
+      s += "<div class='col-md-3'>start:<br/>end:<br/>duration:</div>"
+      s += "<div class='col-md-9'><span style='color: #AAA'> "
+      s += d.isoStart + "<br/>";
+      s += d.isoEnd + "<br/>";
+      s += d.duration + "<br/>";
+      s += "</span></div>";
+      s += "</div>";
+      return s;
+  })
+
+  var margin = {
+    top : 20,
+    right : 40,
+    bottom : 20,
+    left : 150
+  };
+  var yAxisLeftOffset = 220;
+  var selector = 'body';
+  var timeDomainStart = d3.time.day.offset(new Date(),-3);
+  var timeDomainEnd = d3.time.hour.offset(new Date(),+3);
+  var timeDomainMode = FIT_TIME_DOMAIN_MODE;// fixed or fit
+  var taskTypes = [];
+  var taskStatus = [];
+  var height = document.body.clientHeight - margin.top - margin.bottom-5;
+  var width = $('.gantt').width() - margin.right - margin.left-5;
+
+  var tickFormat = "%H:%M";
+
+  var keyFunction = function(d) {
+    return d.startDate + d.taskName + d.endDate;
+  };
+
+  var rectTransform = function(d) {
+    return "translate(" + (x(d.startDate) + yAxisLeftOffset) + "," + 
y(d.taskName) + ")";
+  };
+
+  var x = d3.time.scale().domain([ timeDomainStart, timeDomainEnd ]).range([ 
0, (width-yAxisLeftOffset) ]).clamp(true);
+
+  var y = d3.scale.ordinal().domain(taskTypes).rangeRoundBands([ 0, height - 
margin.top - margin.bottom ], .1);
+
+  var xAxis = 
d3.svg.axis().scale(x).orient("bottom").tickFormat(d3.time.format(tickFormat)).tickSubdivide(true)
+  .tickSize(8).tickPadding(8);
+
+  var yAxis = d3.svg.axis().scale(y).orient("left").tickSize(0);
+
+  var initTimeDomain = function(tasks) {
+    if (timeDomainMode === FIT_TIME_DOMAIN_MODE) {
+      if (tasks === undefined || tasks.length < 1) {
+        timeDomainStart = d3.time.day.offset(new Date(), -3);
+        timeDomainEnd = d3.time.hour.offset(new Date(), +3);
+        return;
+      }
+      tasks.sort(function(a, b) {
+        return a.endDate - b.endDate;
+      });
+      timeDomainEnd = tasks[tasks.length - 1].endDate;
+      tasks.sort(function(a, b) {
+        return a.startDate - b.startDate;
+      });
+      timeDomainStart = tasks[0].startDate;
+    }
+  };
+
+  var initAxis = function() {
+    x = d3.time.scale().domain([ timeDomainStart, timeDomainEnd ]).range([ 0, 
width-yAxisLeftOffset ]).clamp(true);
+    y = d3.scale.ordinal().domain(taskTypes).rangeRoundBands([ 0, height - 
margin.top - margin.bottom ], .1);
+    xAxis = 
d3.svg.axis().scale(x).orient("bottom").tickFormat(d3.time.format(tickFormat)).tickSubdivide(true)
+    .tickSize(8).tickPadding(8);
+
+    yAxis = d3.svg.axis().scale(y).orient("left").tickSize(0);
+  };
+
+  function gantt(tasks) {
+
+    initTimeDomain(tasks);
+    initAxis();
+
+    var svg = d3.select(selector)
+    .append("svg")
+    .attr("class", "chart")
+    .attr("width", width + margin.left + margin.right)
+    .attr("height", height + margin.top + margin.bottom)
+    .append("g")
+    .attr("class", "gantt-chart")
+    .attr("width", width + margin.left + margin.right)
+    .attr("height", height + margin.top + margin.bottom)
+    .attr("transform", "translate(" + margin.left + ", " + margin.top + ")");
+
+    svg.selectAll(".chart")
+    .data(tasks, keyFunction).enter()
+    .append("rect")
+    .on('mouseover', tip.show)
+    .on('mouseout', tip.hide)
+    .on('click', function(d) {
+      call_modal(d.taskName, d.executionDate);
+    })
+    .attr("class", function(d){
+      if(taskStatus[d.status] == null){ return "bar";}
+      return taskStatus[d.status];
+    })
+    .attr("y", 0)
+    .attr("transform", rectTransform)
+    .attr("height", function(d) { return y.rangeBand(); })
+    .attr("width", function(d) {
+      return d3.max([x(d.endDate) - x(d.startDate), 1]);
+    });
+
+
+    svg.append("g")
+    .attr("class", "x axis")
+    .attr("transform", "translate(" + yAxisLeftOffset + ", " + (height - 
margin.top - margin.bottom) + ")")
+    .transition()
+    .call(xAxis);
+
+    svg.append("g").attr("class", "y axis").transition().attr("transform", 
"translate(" + yAxisLeftOffset + ", 0)").call(yAxis);
+    svg.call(tip);
+
+    return gantt;
+
+  };
+
+  gantt.redraw = function(tasks) {
+
+    initTimeDomain(tasks);
+    initAxis();
+
+    var svg = d3.select(".chart");
+
+    var ganttChartGroup = svg.select(".gantt-chart");
+    var rect = ganttChartGroup.selectAll("rect").data(tasks, keyFunction);
+
+    rect.enter()
+    .insert("rect",":first-child")
+    .attr("rx", 5)
+    .attr("ry", 5)
+    .attr("class", function(d){
+      if(taskStatus[d.status] == null){ return "bar";}
+      return taskStatus[d.status];
+    })
+    .transition()
+    .attr("y", 0)
+    .attr("transform", rectTransform)
+    .attr("height", function(d) { return y.rangeBand(); })
+    .attr("width", function(d) {
+      return (x(d.endDate) - x(d.startDate));
+    });
+
+    rect.transition()
+    .attr("transform", rectTransform)
+    .attr("height", function(d) { return y.rangeBand(); })
+    .attr("width", function(d) {
+      return (x(d.endDate) - x(d.startDate));
+    });
+
+    rect.exit().remove();
+
+    svg.select(".x").transition().call(xAxis);
+    svg.select(".y").transition().call(yAxis);
+
+    return gantt;
+  };
+
+  gantt.margin = function(value) {
+    if (!arguments.length)
+      return margin;
+    margin = value;
+    return gantt;
+  };
+
+  gantt.timeDomain = function(value) {
+    if (!arguments.length)
+      return [ timeDomainStart, timeDomainEnd ];
+    timeDomainStart = +value[0], timeDomainEnd = +value[1];
+    return gantt;
+  };
+
+  /**
+   * @param {string}
+   *                vale The value can be "fit" - the domain fits the data or
+   *                "fixed" - fixed domain.
+   */
+  gantt.timeDomainMode = function(value) {
+    if (!arguments.length)
+      return timeDomainMode;
+    timeDomainMode = value;
+    return gantt;
+
+  };
+
+  gantt.taskTypes = function(value) {
+    if (!arguments.length)
+      return taskTypes;
+    taskTypes = value;
+    return gantt;
+  };
+
+  gantt.taskStatus = function(value) {
+    if (!arguments.length)
+      return taskStatus;
+    taskStatus = value;
+    return gantt;
+  };
+
+  gantt.width = function(value) {
+    if (!arguments.length)
+      return width;
+    width = +value;
+    return gantt;
+  };
+
+  gantt.height = function(value) {
+    if (!arguments.length)
+      return height;
+    height = +value;
+    return gantt;
+  };
+
+  gantt.tickFormat = function(value) {
+    if (!arguments.length)
+      return tickFormat;
+    tickFormat = value;
+    return gantt;
+  };
+
+  gantt.selector = function(value) {
+    if (!arguments.length)
+      return selector;
+    selector = value;
+    return gantt;
+  };
+
+  return gantt;
+};

http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/05e1861e/airflow/www_rbac/static/gantt.css
----------------------------------------------------------------------
diff --git a/airflow/www_rbac/static/gantt.css 
b/airflow/www_rbac/static/gantt.css
new file mode 100644
index 0000000..8714705
--- /dev/null
+++ b/airflow/www_rbac/static/gantt.css
@@ -0,0 +1,57 @@
+/**
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+.axis path,.axis line {
+    fill: none;
+    stroke: #000;
+    shape-rendering: crispEdges;
+}
+rect {
+    stroke: black;
+    cursor: pointer;
+}
+.d3-tip {
+  line-height: 1;
+  font-weight: bold;
+  padding: 5px;
+  background: rgba(0, 0, 0, 0.8);
+  color: #fff;
+  border-radius: 2px;
+  font-size: 12px;
+}
+
+/* Creates a small triangle extender for the tooltip */
+.d3-tip:after {
+  box-sizing: border-box;
+  display: inline;
+  font-size: 8px;
+  width: 100%;
+  line-height: 1;
+  color: rgba(0, 0, 0, 0.8);
+  content: "\25BC";
+  position: absolute;
+  text-align: center;
+}
+
+/* Style northward tooltips differently */
+.d3-tip.n:after {
+  margin: -1px 0 0 0;
+  top: 100%;
+  left: 0;
+}

http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/05e1861e/airflow/www_rbac/static/graph.css
----------------------------------------------------------------------
diff --git a/airflow/www_rbac/static/graph.css 
b/airflow/www_rbac/static/graph.css
new file mode 100644
index 0000000..f1d3480
--- /dev/null
+++ b/airflow/www_rbac/static/graph.css
@@ -0,0 +1,72 @@
+/**
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+g.node rect {
+    stroke-width: 3;
+    stroke: white;
+    cursor: pointer;
+}
+g.node text {
+    cursor: pointer;
+}
+g.node.success rect {
+    stroke: green;
+}
+g.node.up_for_retry rect {
+    stroke: gold;
+}
+
+g.node.queued rect {
+    stroke: grey;
+}
+
+g.node.running rect{
+    stroke: lime;
+}
+g.node.failed rect {
+    stroke: red;
+}
+g.node.shutdown rect{
+    stroke: blue;
+}
+g.node.upstream_failed rect{
+    stroke: orange;
+}
+g.node.skipped rect{
+    stroke: pink;
+}
+div#svg_container {
+ border: 1px solid black;
+ background-color: #EEE;
+ cursor: move;
+}
+
+#refresh_button {
+    top: 15px;
+    right: 15px;
+    position: relative;
+}
+
+#loading {
+    margin: auto;
+    display: none;
+    position: relative;
+    width: 100px;
+    top: -550px;
+}

http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/05e1861e/airflow/www_rbac/static/jqClock.min.js
----------------------------------------------------------------------
diff --git a/airflow/www_rbac/static/jqClock.min.js 
b/airflow/www_rbac/static/jqClock.min.js
new file mode 100644
index 0000000..5528efd
--- /dev/null
+++ b/airflow/www_rbac/static/jqClock.min.js
@@ -0,0 +1,27 @@
+/**
+ * jQuery Clock plugin
+ * Copyright (c) 2010 John R D'Orazio (pri...@johnromanodorazio.com)
+ * Licensed under the Apache 2.0 license:
+ * https://www.apache.org/licenses/LICENSE-2.0
+ */
+Date.prototype.hasOwnProperty("stdTimezoneOffset")||(Date.prototype.stdTimezoneOffset=function(){var
 
b=this.getFullYear();if(!Date.prototype.stdTimezoneOffset.cache.hasOwnProperty(b)){for(var
 d=(new 
Date(b,0,1)).getTimezoneOffset(),h=[6,7,5,8,4,9,3,10,2,11,1],a=0;12>a;a++){var 
m=(new 
Date(b,h[a],1)).getTimezoneOffset();if(m!=d){d=Math.max(d,m);break}}Date.prototype.stdTimezoneOffset.cache[b]=d}return
 
Date.prototype.stdTimezoneOffset.cache[b]},Date.prototype.stdTimezoneOffset.cache={});
+Date.prototype.hasOwnProperty("isDST")||(Date.prototype.isDST=function(){return
 
this.getTimezoneOffset()<this.stdTimezoneOffset()});Date.prototype.hasOwnProperty("isLeapYear")||(Date.prototype.isLeapYear=function(){var
 b=this.getFullYear();return 
0!=(b&3)?!1:0!=b%100||0==b%400});Date.prototype.hasOwnProperty("getDOY")||(Date.prototype.getDOY=function(){var
 
b=this.getMonth(),d=this.getDate(),d=[0,31,59,90,120,151,181,212,243,273,304,334][b]+d;1<b&&this.isLeapYear()&&d++;return
 d});
+Date.prototype.hasOwnProperty("daysInMonth")||(Date.prototype.daysInMonth=function(){return[31,this.isLeapYear()?29:28,31,30,31,30,31,31,30,31,30,31][this.getMonth()]});Date.prototype.hasOwnProperty("getWOY")||(Date.prototype.getWOY=function(b){var
 d=new 
Date(+this);d.setHours(0,0,0,0);d.setDate(d.getDate()+4-(d.getDay()||7));return 
b?d.getFullYear():Math.ceil(((d-new Date(d.getFullYear(),0,1))/864E5+1)/7)});
+Date.prototype.hasOwnProperty("swatchTime")||(Date.prototype.swatchTime=function(){return("00"+Math.floor((60*((this.getUTCHours()+1)%24*60+this.getUTCMinutes())+this.getUTCSeconds()+.001*this.getUTCMilliseconds())/86.4)).slice(-3)});String.prototype.padStart||(String.prototype.padStart=function(b,d){b>>=0;d=String(d||"
 ");if(this.length>b)return 
String(this);b-=this.length;b>d.length&&(d+=d.repeat(b/d.length));return 
d.slice(0,b)+String(this)});
+(function(b,d){b.clock={version:"2.3.0",options:[{type:"string",value:"destroy",description:"Passing
 in 'destroy' to an already initialized clock will remove the setTimeout for 
that clock to stop it from ticking, and remove all html markup and data 
associated with the plugin instance on the dom 
elements"},{type:"string",value:"stop",description:"Passing in 'stop' to an 
already initialized clock will clear the setTimeout for that clock to stop it 
from ticking"},{type:"string",value:"start",description:"Passing in 'start' to 
an already initialized clock will restart the setTimeout for that clock to get 
it ticking again, as though it had never lost time"},
+{type:"object",description:"option set 
{}",values:[{name:"timestamp",description:"Either a javascript timestamp as 
produces by [JAVASCRIPT new Date().getTime()] or a php timestamp as produced by 
[PHP time()] ",type:"unix timestamp",values:["javascript timestamp","php 
timestamp"]},{name:"langSet",description:"two letter locale to be used for the 
translation of Day names and Month names",type:"String",values:"am ar bn bg ca 
zh hr cs da nl en et fi fr de el gu hi hu id it ja kn ko lv lt ms ml mr mo ps 
fa pl pt ro ru sr sk sl es sw sv ta te th tr uk vi".split(" ")},
+{name:"calendar",description:"Whether the date should be displayed together 
with the 
time",type:"Boolean",values:[!0,!1]},{name:"dateFormat",description:"PHP Style 
Format string for formatting a local date, see 
http://php.net/manual/en/function.date.php",type:"String",values:"dDjlNSwzWFmMntLoYy".split("")},{name:"timeFormat",description:"PHP
 Style Format string for formatting a local date, see 
http://php.net/manual/en/function.date.php",type:"String",values:"aABgGhHisveIOPZcrU".split("")},{name:"isDST",
+description:"When a client side timestamp is used, whether DST is active will 
be automatically determined. However this cannot be determined for a 
server-side timestamp which must be passed in as UTC, in that can case it can 
be set with this 
option",type:"Boolean",values:[!0,!1]},{name:"rate",description:"Defines the 
rate at which the clock will update, in milliseconds",type:"Integer",values:"1 
- 9007199254740991 (recommended 10-60000)"}]}],methods:{destroy:"Chaining 
clock().destroy() has the same effect as passing the 'destroy' option as in 
clock('destroy')",
+stop:"Chaining clock().stop() has the same effect as passing the 'stop' option 
as in clock('stop')",start:"Chaining clock().start() has the same effect as 
passing the 'start' option as in clock('start')"}};Object.freeze(b.clock);var 
h=h||{};b.fn.clock=function(a){var m=this;this.initialize=function(){return 
this};this.destroy=function(){return 
m.each(function(a){a=b(this).attr("id");h.hasOwnProperty(a)&&(clearTimeout(h[a]),delete
 
h[a]);b(this).html("");b(this).hasClass("jqclock")&&b(this).removeClass("jqclock");
+b(this).removeData("clockoptions")})};this.stop=function(){return 
m.each(function(a){a=b(this).attr("id");h.hasOwnProperty(a)&&(clearTimeout(h[a]),delete
 h[a])})};this.start=function(){return 
m.each(function(a){a=b(this).attr("id");var 
c=b(this).data("clockoptions");if(c!==d&&!1===h.hasOwnProperty(a)){var 
g=this;h[a]=setTimeout(function(){x(b(g))},c.rate)}})};var 
B=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var
 b=16*Math.random()|0;return("x"==a?b:b&3|8).toString(16)}).toUpperCase()},
+x=function(a){var c=b(a).data("clockoptions"),d=(new 
Date).getTime()+c.sysdiff,k=new 
Date(d),g=k.getHours(),m=k.getMinutes(),C=k.getSeconds(),B=k.getMilliseconds(),e=k.getDay(),l=k.getDate(),D=k.getMonth(),y=k.getFullYear(),p=k.isLeapYear(),w=k.getDOY(),q=k.getWOY(),v=k.getWOY(!0),G=k.daysInMonth(),H=k.swatchTime(),n=parseInt(c.tzOffset/60),z=parseInt(60*c.tzOffset),E="AM",f="",r="";11<g&&(E="PM");r=g;12<r?r-=12:0===r&&(r=12);if(!0===c.calendar){for(var
 f="",t=0;t<=c.dateFormat.length;t++){var F=
+c.dateFormat.charAt(t);switch(F){case "d":f+=(""+l).padStart(2,"0");break;case 
"D":f+=(new 
Intl.DateTimeFormat(c.langSet,{weekday:"short"})).format(k);break;case 
"j":f+=l;break;case "l":f+=(new 
Intl.DateTimeFormat(c.langSet,{weekday:"long"})).format(k);break;case 
"N":f+=0===e?7:e;break;case 
"S":f+=1===l||1===l%10&&11!=l?"st":2===l||2===l%10&&12!=l?"nd":3===l||3===l%10&&13!=l?"rd":"th";break;case
 "w":f+=e;break;case "z":f+=w-1;break;case "W":f+=q;break;case "F":f+=(new 
Intl.DateTimeFormat(c.langSet,
+{month:"long"})).format(k);break;case 
"m":f+=(D+1+"").padStart(2,"0");break;case "M":f+=(new 
Intl.DateTimeFormat(c.langSet,{month:"short"})).format(k);break;case 
"n":f+=D+1;break;case "t":f+=G;break;case "L":f+=p?1:0;break;case 
"o":f+=v;break;case "Y":f+=y;break;case 
"y":f+=y.toString().substr(2,2);break;case 
String.fromCharCode(92):f+=c.dateFormat.charAt(++t);break;case "%":for(var 
u=t+1,A=c.dateFormat;u<A.length&&"%"!=A.charAt(u);)u++;u>t+1&&u!=A.length?(f+=A.substring(t+1,u),t+=u-t):f+=F;break;
+default:f+=F}}f='<span 
class="clockdate">'+f+"</span>"}e="";for(p=0;p<=c.timeFormat.length;p++)switch(w=c.timeFormat.charAt(p),w){case
 "a":e+=E.toLowerCase();break;case "A":e+=E;break;case "B":e+=H;break;case 
"g":e+=r;break;case "G":e+=g;break;case 
"h":e+=(""+r).padStart(2,"0");break;case 
"H":e+=(""+g).padStart(2,"0");break;case 
"i":e+=(""+m).padStart(2,"0");break;case 
"s":e+=(""+C).padStart(2,"0");break;case 
"v":e+=(""+B).padStart(3,"0");break;case "e":e+=c.timezone;break;case 
"I":e+=c.isDST?"DST":
+"";break;case 
"O":e+=(0>n?"+"+(""+Math.abs(n)).padStart(2,"0"):0<n?(""+-1*n).padStart(2,"0"):"+00")+"00";break;case
 
"P":e+=(0>n?"+"+(""+Math.abs(n)).padStart(2,"0"):0<n?(""+-1*n).padStart(2,"0"):"+00")+":00";break;case
 "Z":e+=0>z?""+Math.abs(z):0<z?""+-1*z:"0";break;case 
"c":e+=y+"-"+(D+1+"").padStart(2,"0")+"-"+(""+l).padStart(2,"0")+"T"+(""+g).padStart(2,"0")+":"+(""+m).padStart(2,"0")+":"+(""+C).padStart(2,"0")+(0>n?"+"+(""+Math.abs(n)).padStart(2,"0"):0<tzh?(""+-1*tzh).padStart(2,"0"):"+00")+
+":00";break;case "r":e+=(new 
Intl.DateTimeFormat(c.langSet,{weekday:"short"})).format(k)+", "+l+" "+(new 
Intl.DateTimeFormat(c.langSet,{month:"short"})).format(k)+" "+y+" 
"+(""+g).padStart(2,"0")+":"+(""+m).padStart(2,"0")+":"+(""+C).padStart(2,"0")+"
 
"+(0>n?"+"+(""+Math.abs(n)).padStart(2,"0"):0<tzh?(""+-1*tzh).padStart(2,"0"):"+00")+"00";break;case
 "U":e+=Math.floor(d/1E3);break;case 
String.fromCharCode(92):e+=c.timeFormat.charAt(++p);break;case 
"%":q=p+1;for(v=c.timeFormat;q<v.length&&"%"!=v.charAt(q);)q++;
+q>p+1&&q!=v.length?(e+=v.substring(p+1,q),p+=q-p):e+=w;break;default:e+=w}r='<span
 
class="clocktime">'+e+"</span>";b(a).html(f+r);d=b(a).attr("id");h[d]=setTimeout(function(){x(b(a))},c.rate)};this.each(function(g){if("undefined"===typeof
 a||"object"===typeof a){g=new 
Date;a=a||{};a.timestamp=a.timestamp||"localsystime";a.langSet=a.langSet||"en";a.calendar=a.hasOwnProperty("calendar")?a.calendar:!0;a.dateFormat=a.dateFormat||("en"==a.langSet?"l,
 F j, Y":"l, j F Y");a.timeFormat=a.timeFormat||("en"==
+a.langSet?"h:i:s 
A":"H:i:s");a.timezone=a.timezone||"localsystimezone";a.isDST=a.hasOwnProperty("isDST")?a.isDST:g.isDST();a.rate=a.rate||500;"string"!==typeof
 a.langSet&&(a.langSet=""+a.langSet);"string"===typeof 
a.calendar?a.calendar="false"==a.calendar?!1:!0:"boolean"!==typeof 
a.calendar&&(a.calendar=!!a.calendar);"string"!==typeof 
a.dateFormat&&(a.dateFormat=""+a.dateFormat);"string"!==typeof 
a.timeFormat&&(a.timeFormat=""+a.dateFormat);"string"!==typeof 
a.timezone&&(a.timezone=""+a.timezone);
+"string"===typeof a.isDST?a.isDST="true"==a.isDST?!0:!1:"boolean"!==typeof 
a.isDST&&(a.isDST=!!a.isDST);"number"!==typeof 
a.rate&&(a.rate=parseInt(a.rate));a.tzOffset=g.getTimezoneOffset();var 
c=a.tzOffset/60;a.sysdiff=0;"localsystime"!=a.timestamp?2<(g.getTime()+"").length-(a.timestamp+"").length?(a.timestamp*=1E3,a.sysdiff=a.timestamp-g.getTime()+6E4*a.tzOffset):(a.sysdiff=a.timestamp-g.getTime(),"localsystimezone"==a.timezone&&(a.timezone="UTC",0>c?a.timezone+="+"+Math.abs(c):0<c&&(a.timezone+=
+-1*c))):"localsystimezone"==a.timezone&&(a.timezone="UTC",0>c?a.timezone+="+"+Math.abs(c):0<c&&(a.timezone+=-1*c));b(this).hasClass("jqclock")||b(this).addClass("jqclock");b(this).is("[id]")||b(this).attr("id",B());b(this).data("clockoptions",a);!1===h.hasOwnProperty(b(this).attr("id"))&&x(b(this))}else
 if("string"===typeof a)switch(g=b(this).attr("id"),a){case 
"destroy":h.hasOwnProperty(g)&&(clearTimeout(h[g]),delete 
h[g]);b(this).html("");b(this).hasClass("jqclock")&&b(this).removeClass("jqclock");
+b(this).removeData("clockoptions");break;case 
"stop":h.hasOwnProperty(g)&&(clearTimeout(h[g]),delete h[g]);break;case 
"start":var 
m=this,c=b(this).data("clockoptions");c!==d&&!1===h.hasOwnProperty(g)&&(h[g]=setTimeout(function(){x(b(m))},c.rate))}});return
 this.initialize()};return this})(jQuery);


Reply via email to