UNPKG

mermaid

Version:

Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.

2 lines 116 kB
import{c as go}from"./chunk-VY5UBI4V.mjs";import{D as uo}from"./chunk-W44A43WB.mjs";import{a as oo,b as Gt,c as ro,d as so,f as io,g as ao}from"./chunk-PE7DX7ZZ.mjs";import{e as to,f as no,g as co,i as lo,j as fo}from"./chunk-NLANEA3F.mjs";import"./chunk-5IMINLNL.mjs";import"./chunk-WJBAP47W.mjs";import{b as Sn}from"./chunk-5VCL7Z4A.mjs";import{b as eo}from"./chunk-UAT7B5JY.mjs";import"./chunk-SZD42YQK.mjs";import"./chunk-2SREHG4O.mjs";import{p as Ot}from"./chunk-7CWYLC5S.mjs";import"./chunk-STOV2HOB.mjs";import{_ as Qn,t as Zn}from"./chunk-2AEHWXPW.mjs";import{b as Mt}from"./chunk-LIEV3EAG.mjs";import{a}from"./chunk-AQ6EADP3.mjs";async function mo(e,t){let n=new uo({multigraph:!0,compound:!0}),o=[...t.edges],r=Qn(),s=e.insert("g").attr("class","root"),i=s.insert("g").attr("class","clusters"),u=s.insert("g").attr("class","edges edgePath"),c=s.insert("g").attr("class","edgeLabels"),l=s.insert("g").attr("class","nodes"),g=new Map,y=e.node()!=null;await Promise.all(t.nodes.map(async M=>{if(M.isGroup)n.setNode(M.id,{...M});else{if(y){let p=await co(l,M,{config:r,dir:M.dir}),m=p.node()?.getBBox()??{width:0,height:0};g.set(M.id,p),M.width=m.width,M.height=m.height}n.setNode(M.id,{...M})}}));for(let M of o)n.setEdge(M.start,M.end,{...M},M.id),t.edges.some(m=>m.id===M.id)||t.edges.push(M);if(globalThis.mermaidCaptureSizes){let{captureNodeSizes:M}=await import("./sizeCapture-5GORAGP4.mjs");M(e,t)}return{graph:n,groups:{clusters:i,edgePaths:u,edgeLabels:c,nodes:l,rootGroups:s},nodeElements:g}}a(mo,"createGraphWithElements");var po=5,Wt=1e-5,Kt=1e-6;function Ln(e){let t=[];for(let n=0;n<e.length-1;n++)t.push({a:e[n],b:e[n+1]});return t}a(Ln,"buildSegmentList");function Kr(e,t,n,o){let r=t.x-e.x,s=t.y-e.y,i=o.x-n.x,u=o.y-n.y,c=r*u-s*i;if(c===0)return null;let l=n.x-e.x,g=n.y-e.y,y=(l*u-g*i)/c,M=(l*s-g*r)/c;return y<=Kt||y>=1-Kt||M<=Kt||M>=1-Kt?null:{point:{x:e.x+y*r,y:e.y+y*s},tA:y,tB:M}}a(Kr,"segmentIntersection");function ho(e){return Math.abs(e.b.x-e.a.x)>=Math.abs(e.b.y-e.a.y)}a(ho,"isHorizontalSeg");function Jr(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n],r=Ln(o.points);for(let s=n+1;s<e.length;s++){let i=e[s],u=Ln(i.points);for(let[c,l]of r.entries())for(let[g,y]of u.entries()){let M=Kr(l.a,l.b,y.a,y.b);if(!M)continue;let p=ho(l),m=ho(y);(p!==m?p:!1)?t.push({jumpEdgeId:o.id,otherEdgeId:i.id,segIndex:c,t:M.tA,point:M.point}):t.push({jumpEdgeId:i.id,otherEdgeId:o.id,segIndex:g,t:M.tB,point:M.point})}}}return t}a(Jr,"findEdgeIntersections");function lt(e){let t=Math.round(e*1e3)/1e3;return Number.isInteger(t)?`${t}`:`${t}`}a(lt,"fmt");function Dt(e){return`${lt(e.x)},${lt(e.y)}`}a(Dt,"pointToString");function qr(e){let t=e.b.x-e.a.x,n=e.b.y-e.a.y;return Math.abs(t)>=Math.abs(n)?t>=0?1:0:n>=0?1:0}a(qr,"getArcSweepFlag");var Zr=.001;function Qr(e,t){if(e.length<2)return e.map(s=>({...s}));let n=e.map(s=>({...s})),o=t.arrowTypeStart&&Sn[t.arrowTypeStart];if(o){let s=e[0],i=e[1],u=Math.atan2(i.y-s.y,i.x-s.x);n[0].x=s.x+o*Math.cos(u),n[0].y=s.y+o*Math.sin(u)}let r=t.arrowTypeEnd&&Sn[t.arrowTypeEnd];if(r){let s=e.length,i=e[s-2],u=e[s-1],c=Math.atan2(u.y-i.y,u.x-i.x);n[s-1].x=u.x-r*Math.cos(c),n[s-1].y=u.y-r*Math.sin(c)}return n}a(Qr,"applyMarkerOffsets");function es(e,t,n,o,r){let s=e.point.x,i=e.point.y,u={x:s-t*e.r,y:i-n*e.r},c={x:s+t*e.r,y:i+n*e.r},l=[`L${Dt(u)}`];return r==="arc"?l.push(`A${lt(e.r)},${lt(e.r)} 0 0 ${o} ${Dt(c)}`):l.push(`M${Dt(c)}`),l}a(es,"emitJump");function yo(e,t,n,o){let r=t.x-e.x,s=t.y-e.y,i=n.x-t.x,u=n.y-t.y,c=Math.hypot(r,s),l=Math.hypot(i,u);if(c<Wt||l<Wt)return null;let g=r/c,y=s/c,M=i/l,p=u/l,m=g*M+y*p,d=Math.max(-1,Math.min(1,m)),h=Math.acos(d);if(h<Wt||Math.abs(Math.PI-h)<Wt)return null;let N=Math.min(o/Math.sin(h/2),c/2,l/2);return{startX:t.x-g*N,startY:t.y-y*N,endX:t.x+M*N,endY:t.y+p*N,ctrlX:t.x,ctrlY:t.y,cutLen:N}}a(yo,"computeRoundedCorner");function ts(e,t,n){let o=e.points;if(o.length<2)return"";let r=Qr(o,e),s=e.curve==="rounded",i=Ln(r),u=new Map;for(let l of t){let g=i[l.segIndex];if(!g)continue;let y=Math.hypot(g.b.x-g.a.x,g.b.y-g.a.y),M=u.get(l.segIndex)??[];M.push({t:l.t,point:l.point,d:l.t*y,r:n.jumpRadius}),u.set(l.segIndex,M)}let c=[`M${Dt(r[0])}`];for(let l=0;l<i.length;l++){let g=i[l],y=Math.hypot(g.b.x-g.a.x,g.b.y-g.a.y),M=y===0?0:(g.b.x-g.a.x)/y,p=y===0?0:(g.b.y-g.a.y)/y,m=qr(g),d=0;if(s&&l>0){let E=yo(r[l-1],r[l],r[l+1]??r[l],po);E&&(d=E.cutLen)}let h=y,N=null;s&&l<i.length-1&&(N=yo(r[l],r[l+1],r[l+2]??r[l+1],po),N&&(h=y-N.cutLen));let I=[...u.get(l)??[]].sort((E,O)=>E.t-O.t);for(let E of I)E.r=Math.min(E.r,E.d-d,h-E.d);for(let E=0;E<I.length-1;E++){let O=I[E+1].d-I[E].d;if(I[E].r+I[E+1].r>O){let S=O/2;I[E].r=Math.min(I[E].r,S),I[E+1].r=Math.min(I[E+1].r,S)}}for(let E of I)E.r<Zr||c.push(...es(E,M,p,m,n.jumpStyle));s&&N?(c.push(`L${lt(N.startX)},${lt(N.startY)}`),c.push(`Q${lt(N.ctrlX)},${lt(N.ctrlY)} ${lt(N.endX)},${lt(N.endY)}`)):c.push(`L${Dt(g.b)}`)}return c.join(" ")}a(ts,"rewriteEdgePath");function ns(e){return/^[\d\s+,.LMelm-]*$/.test(e)}a(ns,"isStraightPath");function os(e){return e?e==="linear"||e==="rounded"||e==="step"||e==="stepBefore"||e==="stepAfter":!0}a(os,"curveSupportsLineHops");function rs(e){if(!e)return null;try{let t=typeof atob=="function"?atob(e):Buffer.from(e,"base64").toString(),n=JSON.parse(t);if(!Array.isArray(n))return null;let o=[];for(let r of n)r&&typeof r.x=="number"&&typeof r.y=="number"&&o.push({x:r.x,y:r.y});return o.length>=2?o:null}catch{return null}}a(rs,"decodeDataPoints");function xo(e,t,n){if(!n.enabled)return;let o=e.node();if(!o)return;let r=new Map;for(let l of t)r.set(l.id,l);let s=[],i=new Map;for(let l of t){let g=typeof CSS<"u"&&CSS.escape?CSS.escape(l.id):l.id,y=o.querySelector(`path[data-id="${g}"]`);if(!y)continue;i.set(l.id,y);let p=rs(y.getAttribute("data-points"))??l.points;s.push({...l,points:p})}let u=Jr(s);if(u.length===0)return;let c=new Map;for(let l of u){let g=c.get(l.jumpEdgeId)??[];g.push(l),c.set(l.jumpEdgeId,g)}for(let l of s){let g=c.get(l.id);if(!g||g.length===0)continue;let M=r.get(l.id)?.curve;if(M!==void 0&&!os(M))continue;let p=i.get(l.id);if(!p)continue;if(M===void 0){let E=p.getAttribute("d")??"";if(!ns(E))continue}let m=p.getAttribute("style")??"",d=/stroke-dasharray\s*:\s*0\s+([\d.]+)\s+[\d.]+\s+([\d.]+)/.exec(m),h=d?Number.parseFloat(d[1]):null,N=d?Number.parseFloat(d[2]):null,I=ts(l,g,n);if(p.setAttribute("d",I),h!==null&&N!==null&&typeof p.getTotalLength=="function"){let E=p.getTotalLength(),O=Math.max(0,E-h-N),S=`0 ${h} ${O} ${N}`,b=m.replace(/stroke-dasharray\s*:[^;]*;?/g,`stroke-dasharray: ${S};`).replace(/;\s*;+/g,";");p.setAttribute("style",b)}}}a(xo,"applyLineJumpsToSvg");async function bo(e,t){for(let r of e.nodes)r.isGroup?await to(t.clusters,r):fo(r);let n=new Map;for(let r of e.nodes)r?.id&&n.set(r.id,r);for(let r of e.edges){let s=r.start?n.get(r.start)??{}:{},i=r.end?n.get(r.end)??{}:{},u=io(t.edgePaths,{...r},{},e.type,s,i,e.diagramId);r.label&&await so(t.rootGroups,r),r.label&&ss(r,u)}let o=e.config?.swimlane?.lineHops;if(o!==!1){let r=o==="gap"?"gap":"arc",s=e.edges.filter(i=>Array.isArray(i.points)&&i.points.length>=2).map(i=>({id:i.id,points:i.points,curve:i.curve,arrowTypeStart:i.arrowTypeStart,arrowTypeEnd:i.arrowTypeEnd}));xo(t.edgePaths,s,{enabled:!0,jumpRadius:6,jumpStyle:r})}}a(bo,"adjustLayout");function ss(e,t){let n=t?.updatedPath??t?.originalPath,o=Zn(),{subGraphTitleTotalMargin:r}=eo({flowchart:o.flowchart??{}});if(e.label){let s=oo.get(e.id),i=e.x,u=e.y;if(n){let c=Ot.calcLabelPosition(n);Mt.debug("Moving label "+e.label+" from (",i,",",u,") to (",c.x,",",c.y,") abc88"),t&&(i=c.x,u=c.y)}s.attr("transform",`translate(${i}, ${u+r/2})`)}if(e?.startLabelLeft){let s=Gt.get(e.id).startLeft,i=e?.x,u=e?.y;if(n){let c=Ot.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_left",n);i=c.x,u=c.y}s.attr("transform",`translate(${i}, ${u})`)}if(e.startLabelRight){let s=Gt.get(e.id).startRight,i=e.x,u=e.y;if(n){let c=Ot.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_right",n);i=c.x,u=c.y}s.attr("transform",`translate(${i}, ${u})`)}if(e.endLabelLeft){let s=Gt.get(e.id).endLeft,i=e.x,u=e.y;if(n){let c=Ot.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_left",n);i=c.x,u=c.y}s.attr("transform",`translate(${i}, ${u})`)}if(e.endLabelRight){let s=Gt.get(e.id).endRight,i=e.x,u=e.y;if(n){let c=Ot.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_right",n);i=c.x,u=c.y}s.attr("transform",`translate(${i}, ${u})`)}}a(ss,"positionEdgeLabel");var Nn="__swimlane_default__";function Io(e){return Math.max(e.padding??20,20)}a(Io,"topLaneHorizontalPadding");function is(e){let{x:t,y:n,width:o,height:r}=e,s=e.swimlaneContentTop;if(typeof t!="number"||typeof n!="number"||typeof o!="number"||typeof r!="number"||typeof s!="number"||!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(o)||!Number.isFinite(r)||!Number.isFinite(s)||o<=0||r<=0){delete e.groupTitleRect;return}let i=n-r/2,u=Math.min(s,n+r/2),c=Math.min(21,Math.max(0,u-i)),l=i+c;if(l<=i){delete e.groupTitleRect;return}e.groupTitleRect={left:t-o/2,right:t+o/2,top:i,bottom:l}}a(is,"assignTopLaneTitleRect");function Mo(e){let t=e.direction,n=e.nodes??=[];for(let s of e.nodes??[])s.isGroup&&!s.parentId&&(s.shape="swimlane",t&&(s.direction=t));let o=n.filter(s=>!s.isGroup&&!s.parentId);if(o.length===0)return;let r=n.find(s=>s.id===Nn);r?r.isGroup&&(r.shape="swimlane",t&&(r.direction=t)):(r={id:Nn,label:"",isGroup:!0,shape:"swimlane",padding:20,...t?{direction:t}:{}},n.push(r));for(let s of o)s.parentId=Nn}a(Mo,"prepareLayoutForSwimlanes");function So(e){let t=new Map;for(let c of e.nodes??[])t.set(c.id,c);let n=[];for(let c of e.edges??[]){let l=typeof c.start=="string"?c.start:void 0,g=typeof c.end=="string"?c.end:void 0;!l||!g||c.labelNodeId||n.push({id:c.id,src:l,dst:g,ref:c})}let o=e.nodes??[],r=o.filter(c=>c.isGroup),s=o.filter(c=>!c.isGroup);return{nodes:[...[...r].reverse(),...s].map(c=>c.id),edges:n,layout:e,nodeById:t}}a(So,"toGraphView");function Lo(e,t,n,o){let{layout:r}=e,s=e.nodeById,i=o?.layerGap??100,u=o?.nodeGap??40,c=0;for(let M of t.layers){let p=0;for(let m of M){let d=s.get(m);if(!d){p++;continue}d.layer=c,d.order=p;let h=n.x[m]??p*u,N=n.y[m]??c*i;d.x=h,d.y=N,p++}c++}let l=r.nodes??[],g=new Map,y=[];for(let M of l){if(!M?.isGroup)continue;M.parentId||y.push(M);let p=l.filter(I=>I.parentId===M.id),m=1/0,d=-1/0,h=1/0,N=-1/0;for(let I of p){let E=I.x??n.x[I.id],O=I.y??n.y[I.id],S=I.width??0,b=I.height??0;E!=null&&O!=null&&(m=Math.min(m,E-S/2),d=Math.max(d,E+S/2),h=Math.min(h,O-b/2),N=Math.max(N,O+b/2))}if(m===1/0||h===1/0)M.x=M.x??0,M.y=M.y??0,M.width=M.width??0,M.height=M.height??0;else{let I=M.padding??20,E=M.parentId?I:2*Io(M),O=I,S=Math.max(0,d-m)+E,b=Math.max(0,N-h)+O,R=(m+d)/2,w=(h+N)/2;M.x=R,M.y=w,M.width=S,M.height=b,g.set(M.id,{minX:m,maxX:d,minY:h,maxY:N})}}if(y.length>0&&g.size>0){let M=1/0,p=-1/0,m=0;for(let d of y){let h=d.padding??20;h>m&&(m=h);let N=g.get(d.id);N&&(M=Math.min(M,N.minY),p=Math.max(p,N.maxY))}if(M!==1/0&&p!==-1/0){let d=Math.max(0,p-M),N=Math.max(m,36),I=d+2*N,E=(M+p)/2;for(let B of y)B.y=E,B.height=I,B.swimlaneContentTop=M;let O=[...y].sort((B,T)=>{let D=B.x??0,G=T.x??0;return D-G}),S=[],b=[],R=[];for(let B of O){let T=g.get(B.id);if(!T)continue;let D=Math.max(0,T.maxX-T.minX)+2*Io(B),G=(T.minX+T.maxX)/2;S.push(B.id),b.push(G),R.push(D)}let w=S.length;if(w>0){let B=new Map;if(w===1)B.set(S[0],R[0]);else{let T=[];for(let Y=0;Y<w-1;Y++)T.push(b[Y+1]-b[Y]);let D=new Array(w);D[0]=0;for(let Y=0;Y<w-1;Y++)D[Y+1]=2*T[Y]-D[Y];let G=0,v=Number.POSITIVE_INFINITY;for(let Y=0;Y<w;Y++){let K=R[Y];Y%2===0?G=Math.max(G,K-D[Y]):v=Math.min(v,D[Y]-K)}let z=G;G<=v?z=(G+v)/2:z=G;for(let Y=0;Y<w;Y++){let K=D[Y]+(Y%2===0?z:-z),ae=Math.max(R[Y],K);B.set(S[Y],ae)}}for(let T of y){let D=B.get(T.id);D!=null&&(T.width=D),is(T)}}}}}a(Lo,"writeBackToLayoutData");var as="[EdgeLabelNodes]";function No(e){let t=[],n=[],o=new Map;for(let i of e.nodes)o.set(i.id,i);for(let i of e.edges){if(!i.label||i.label.length===0||i.isLayoutOnly||i.labelNodeId)continue;let u=i.start?o.get(i.start):void 0,c=i.end?o.get(i.end):void 0;if(!u||!c){Mt.warn(as,`Edge ${i.id} has missing source or target node`);continue}let l=`edge-label-${i.start}-${i.end}-${i.id}`,y=u.parentId!==c.parentId?c.parentId:u.parentId,M={id:l,label:i.label,edgeStart:i.start??"",edgeEnd:i.end??"",shape:"labelRect",width:0,height:0,isEdgeLabel:!0,isDummy:!0,parentId:y,isGroup:!1,labelStyle:Array.isArray(i.labelStyle)?i.labelStyle[0]:i.labelStyle??"",...u.dir?{dir:u.dir}:{}};t.push(M),i.labelNodeId=l,i.label=void 0,i.text=void 0;let p={id:`${i.id}-to-label`,start:i.start,end:l,type:"normal",isLayoutOnly:!0},m={id:`${i.id}-from-label`,start:l,end:i.end,type:"normal",isLayoutOnly:!0};n.push(p,m)}let r=[...e.nodes,...t],s=[...e.edges,...n];return{...e,nodes:r,edges:s}}a(No,"createEdgeLabelNodes");function Po(e){let t=e.x??0,n=e.y??0,o=e.width??0,r=e.height??0;return o>0&&r>0?{cx:t,cy:n,rect:wt(t,n,o,r)}:void 0}a(Po,"measuredNodeRect");function Ro(e){if(e.isGroup)return;let t=Po(e);return t?{id:String(e.id??""),cx:t.cx,cy:t.cy,rect:t.rect}:void 0}a(Ro,"nodeBoundsInfoFor");function Je(e,t,n=.001){return Math.abs(e.x-t.x)<n&&Math.abs(e.y-t.y)<n}a(Je,"samePoint");function de(e,t,n=.001){return Math.abs(e.x-t.x)<n}a(de,"sameX");function ue(e,t,n=.001){return Math.abs(e.y-t.y)<n}a(ue,"sameY");function Pe(e,t,n=.001){return ue(e,t,n)&&Math.abs(e.x-t.x)>n}a(Pe,"isHorizontalSegment");function Re(e,t,n=.001){return de(e,t,n)&&Math.abs(e.y-t.y)>n}a(Re,"isVerticalSegment");function Xe(e,t,n,o){return Math.max(0,Math.min(Math.max(e,t),Math.max(n,o))-Math.max(Math.min(e,t),Math.min(n,o)))}a(Xe,"overlapLength");function it(e,t,n=.001){return e.horizontal&&t.horizontal&&ue(e.a,t.a,n)?Xe(e.a.x,e.b.x,t.a.x,t.b.x):e.vertical&&t.vertical&&de(e.a,t.a,n)?Xe(e.a.y,e.b.y,t.a.y,t.b.y):0}a(it,"sameAxisSegmentOverlapLength");function ht(e,t=.001){let n=[];for(let o=0;o<e.length-1;o++){let r=e[o],s=e[o+1],i=Pe(r,s,t),u=Re(r,s,t);(i||u)&&n.push({index:o,a:r,b:s,horizontal:i,vertical:u})}return n}a(ht,"orthogonalSegmentsForPoints");function qe(e,t=.001){let n=ht(e,t),o=0;for(let r=1;r<n.length;r++)n[r-1].horizontal!==n[r].horizontal&&o++;return o}a(qe,"countOrthogonalBends");function le(e,t=.001){let n=[];for(let o of e){let r=n.length>0?n[n.length-1]:void 0;(!r||!Je(r,o,t))&&n.push({x:o.x,y:o.y})}return n}a(le,"dedupeConsecutivePoints");function Jt(e,t=.001){if(!e||e.length!==4)return;let[n,o,r,s]=e;return Pe(n,o,t)&&Re(o,r,t)&&Pe(r,s,t)?{kind:"HVH",p0:n,p1:o,p2:r,p3:s}:Re(n,o,t)&&Pe(o,r,t)&&Re(r,s,t)?{kind:"VHV",p0:n,p1:o,p2:r,p3:s}:void 0}a(Jt,"classifyThreeSegmentRoute");function _t(e,t,n,o=0){let r=Math.min(e.x,t.x),s=Math.max(e.x,t.x),i=Math.min(e.y,t.y),u=Math.max(e.y,t.y);return s>n.left-o&&r<n.right+o&&u>n.top-o&&i<n.bottom+o}a(_t,"segmentBoundsOverlapRect");function qt(e,t,n=0){return e.x>t.left+n&&e.x<t.right-n&&e.y>t.top+n&&e.y<t.bottom-n}a(qt,"pointInsideRect");function Co(e,t){return e.left<=t.left&&e.right>=t.right&&e.top<=t.top&&e.bottom>=t.bottom}a(Co,"rectContainsRect");function Zt(e,t){return e.left<t.right&&e.right>t.left&&e.top<t.bottom&&e.bottom>t.top}a(Zt,"rectsOverlap");function En(e,t){return{left:e.left-t,right:e.right+t,top:e.top-t,bottom:e.bottom+t}}a(En,"inflateRect");function wt(e,t,n,o){return{left:e-n/2,right:e+n/2,top:t-o/2,bottom:t+o/2}}a(wt,"rectFromCenterSize");function Ge(e){return Po(e)?.rect}a(Ge,"rectOfNodeBounds");function yt(e,t){switch(t){case"top":return{x:e.cx,y:e.rect.top};case"bottom":return{x:e.cx,y:e.rect.bottom};case"left":return{x:e.rect.left,y:e.cy};case"right":return{x:e.rect.right,y:e.cy}}}a(yt,"portForRectSide");function Qt(e,t,n,o,r,s=.001){let i=t==="left"||t==="right",u=o==="left"||o==="right";if(i&&u){if(t==="right"&&o==="left"&&e.x<n.x||t==="left"&&o==="right"&&e.x>n.x){if(ue(e,n,s))return[e,n];let y=(e.x+n.x)/2;return[e,{x:y,y:e.y},{x:y,y:n.y},n]}if(t===o){if(ue(e,n,s))return;let y=t==="left"?Math.min(e.x,n.x)-r:Math.max(e.x,n.x)+r;return[e,{x:y,y:e.y},{x:y,y:n.y},n]}return}if(!i&&!u){if(t===o){if(de(e,n,s))return;let M=t==="top"?Math.min(e.y,n.y)-r:Math.max(e.y,n.y)+r;return[e,{x:e.x,y:M},{x:n.x,y:M},n]}if(!(t==="bottom"&&o==="top"&&e.y<n.y||t==="top"&&o==="bottom"&&e.y>n.y))return;if(de(e,n,s))return[e,n];let y=(e.y+n.y)/2;return[e,{x:e.x,y},{x:n.x,y},n]}if(i&&!u){let g=t==="right"&&n.x>e.x||t==="left"&&n.x<e.x,y=o==="top"&&e.y<n.y||o==="bottom"&&e.y>n.y;return g&&y?[e,{x:n.x,y:e.y},n]:void 0}let c=t==="bottom"&&n.y>e.y||t==="top"&&n.y<e.y,l=o==="left"&&e.x<n.x||o==="right"&&e.x>n.x;return c&&l?[e,{x:e.x,y:n.y},n]:void 0}a(Qt,"buildOrthogonalPortPath");function en(e,t,n,o){return t==="left"||t==="right"?[e,{x:o,y:e.y},{x:o,y:n.y},n]:[e,{x:e.x,y:o},{x:n.x,y:o},n]}a(en,"buildSameSideTrackPath");function At(e){let t=new Map,n=[];for(let o of e){if(o.isEdgeLabel)continue;let r=Ro(o);r&&(t.set(r.id,r),n.push({id:r.id,rect:r.rect}))}return{nodeInfoById:t,realNodeRects:n}}a(At,"collectRealNodeBounds");function ft(e){let t=[],n=[];for(let o of e){let r=Ro(o);if(!r)continue;let s={id:r.id,rect:r.rect};o.isEdgeLabel?n.push(s):t.push(s)}return{realNodeRects:t,labelNodeRects:n}}a(ft,"collectNodeRectEntries");function To(e,{includeEdgeLabels:t=!0}={}){let n=[];for(let o of e){if(o.isGroup||!t&&o.isEdgeLabel)continue;let r=o.x??0,s=o.y??0,i=o.width??0,u=o.height??0;n.push({nodeId:o.id,...wt(r,s,i,u)})}return n}a(To,"collectLayoutNodeRects");function tn(e,t,n=.001){let o=e.start,r=e.end;if(!o||!r)return;let s=t.get(o),i=t.get(r);if(!(!s||!i))return{srcId:o,dstId:r,srcInfo:s,dstInfo:i,collinearX:Math.abs(s.cx-i.cx)<n,collinearY:Math.abs(s.cy-i.cy)<n}}a(tn,"getNodePairGeometry");function Se(e,t,n,o=[],r=0){for(let s of n)if(!o.includes(s.id)&&_t(e,t,s.rect,-r))return!0;return!1}a(Se,"segmentHitsAnyRect");function Pn(e,t,n,o,r=.001,s=1e-6){let i=ue(e,t,r),u=de(e,t,r),c=ue(n,o,r),l=de(n,o,r);if(i&&c||u&&l||!(i||u)||!(c||l))return!1;let g=i?{a:e,b:t}:{a:n,b:o},y=u?{a:e,b:t}:{a:n,b:o},M=g.a.y,p=Math.min(g.a.x,g.b.x),m=Math.max(g.a.x,g.b.x),d=y.a.x,h=Math.min(y.a.y,y.b.y),N=Math.max(y.a.y,y.b.y);if(d<p||d>m||M<h||M>N)return!1;let I=Math.abs(d-g.a.x)<s&&Math.abs(M-g.a.y)<s||Math.abs(d-g.b.x)<s&&Math.abs(M-g.b.y)<s,E=Math.abs(d-y.a.x)<s&&Math.abs(M-y.a.y)<s||Math.abs(d-y.b.x)<s&&Math.abs(M-y.b.y)<s;return!(I&&E)}a(Pn,"orthogonalSegmentsCross");function cs(e,t,n,o,r=.001){let s=ue(e,t,r),i=de(e,t,r),u=ue(n,o,r),c=de(n,o,r);return i&&c&&de(e,n,r)?Xe(e.y,t.y,n.y,o.y)>r:s&&u&&ue(e,n,r)?Xe(e.x,t.x,n.x,o.x)>r:!1}a(cs,"sameAxisSegmentsOverlap");function Ft(e,t,n,o,{epsilon:r=.001,skipDegenerateOther:s=!1}={}){for(let i of n){if(i===o||i.isLayoutOnly)continue;let u=i.points;if(!(!u||u.length<2))for(let c=0;c<u.length-1;c++){let l=u[c],g=u[c+1];if(!(s&&Je(l,g,r))&&(Pn(e,t,l,g,r)||cs(e,t,l,g,r)))return!0}}return!1}a(Ft,"segmentConflictsWithAnyEdge");function at(e,t,n,o,r=.001){let s=ue(e,t,r),i=de(e,t,r),u=ue(n,o,r),c=de(n,o,r);if(!(s&&c||i&&u))return!1;let l=s?{a:e,b:t}:{a:n,b:o},g=s?{a:n,b:o}:{a:e,b:t},y=l.a.y,M=Math.min(l.a.x,l.b.x),p=Math.max(l.a.x,l.b.x),m=g.a.x,d=Math.min(g.a.y,g.b.y),h=Math.max(g.a.y,g.b.y);return m>M+r&&m<p-r&&y>d+r&&y<h-r}a(at,"orthogonalSegmentsStrictlyCross");function Eo(e,t,n){let o=Math.min(t,n),r=Math.max(t,n);return e>o+.001&&e<r-.001}a(Eo,"strictlyBetween");function ds(e,t,n){return de(e,t)&&de(t,n)?Eo(t.y,e.y,n.y):ue(e,t)&&ue(t,n)?Eo(t.x,e.x,n.x):!1}a(ds,"isCollinearIntermediate");function ls(e){let t=!1,n=[];for(let o=0;o<e.length;o++){let r=n[n.length-1],s=e[o],i=o+1<e.length?e[o+1]:void 0;if(r&&i){if(Je(r,i)){o++,t=!0;continue}if(ds(r,s,i)){t=!0;continue}}n.push(s)}return{points:n,changed:t}}a(ls,"simplifyPolylineOnce");function zt(e){let t=[e[0]];for(let o=1;o<e.length;o++){let r=t[t.length-1],s=e[o];if(!de(r,s)&&!ue(r,s)){let i=t.length>=2?t[t.length-2]:void 0,c=(i?de(i,r):!1)?{x:r.x,y:s.y}:{x:s.x,y:r.y};t.push(c)}t.push(s)}let n=[];for(let o of t){let r=n[n.length-1];(!r||!Je(r,o))&&n.push(o)}return n}a(zt,"orthogonalizePolyline");function rt(e){if(e.length<3)return e;let t=[...e];for(let n=0;n<32;n++){let o=ls(t);if(t=o.points,!o.changed)break}return t}a(rt,"simplifyPolyline");var ne=.001,fs=.5,Oo=4;function zo(e,t,n){let o=e;if(o.isLayoutOnly||!o.points||o.points.length<n)return;let r=o.start?t.get(o.start):void 0,s=o.end?t.get(o.end):void 0;return{edge:o,points:o.points,srcRect:r?Ge(r):void 0,dstRect:s?Ge(s):void 0}}a(zo,"endpointContextFor");function us(e,t,n){if(ue(e,t,ne))return{x:e.x<n.left?n.left:n.right,y:e.y};if(de(e,t,ne)){let o=e.y<n.top?n.top:n.bottom;return{x:e.x,y:o}}return{x:Math.min(n.right,Math.max(n.left,e.x)),y:Math.min(n.bottom,Math.max(n.top,e.y))}}a(us,"segmentEnterPoint");function wo(e,t,n){let o=n?1:-1,r=n?0:e.length-1;for(;r>=0&&r<e.length&&qt(e[r],t,fs);)r+=o;if(r<0||r>=e.length)return e;let s=r-o;if(s<0||s>=e.length)return e;let i=us(e[r],e[s],t);return n?[i,...e.slice(r)]:[...e.slice(0,r+1),i]}a(wo,"clipEndpoint");function Ho(e,t){for(let n of e){let o=zo(n,t,2);if(!o)continue;let r=[...o.points];o.srcRect&&(r=wo(r,o.srcRect,!0)),o.dstRect&&(r=wo(r,o.dstRect,!1)),r=rt(zt(r)),r=Xo(r,o.srcRect,o.dstRect),o.edge.points=rt(zt(r))}}a(Ho,"clipEdgeEndpointsToNodeBoundaries");function Ao(e,t,n,o=!1){if(ue(e,t,ne)){if(t.y<n.top-ne||t.y>n.bottom+ne)return t;if(o){if(e.x<n.left-ne)return{x:n.left,y:e.y};if(e.x>n.right+ne)return{x:n.right,y:e.y}}return{x:Math.abs(t.x-n.left)<=Math.abs(t.x-n.right)?n.left:n.right,y:e.y}}if(de(e,t,ne)){if(t.x<n.left-ne||t.x>n.right+ne)return t;if(o){if(e.y<n.top-ne)return{x:e.x,y:n.top};if(e.y>n.bottom+ne)return{x:e.x,y:n.bottom}}let r=Math.abs(t.y-n.top)<=Math.abs(t.y-n.bottom);return{x:e.x,y:r?n.top:n.bottom}}return t}a(Ao,"snapEndpointToBoundary");function Rn(e,t,n){let o=e[t];for(let r=t+n;r>=0&&r<e.length;r+=n){let s=e[r];if(!Je(s,o,ne))return s}return e[t+n]}a(Rn,"firstDistinctAdjacent");function Cn(e,t){let n=e+Oo,o=t-Oo;return n<=o?{lo:n,hi:o}:{lo:(e+t)/2,hi:(e+t)/2}}a(Cn,"cornerClearanceRange");function vo(e,t,n){let{lo:o,hi:r}=Cn(t,n);return Math.min(r,Math.max(o,e))}a(vo,"clampToCornerClearance");function gs(e){let t=Math.max(...e.map(o=>o.lo)),n=Math.min(...e.map(o=>o.hi));if(!(t>n))return{lo:t,hi:n}}a(gs,"intersectRanges");function Bo(e,t){return t==="left"||t==="right"?Cn(e.top,e.bottom):Cn(e.left,e.right)}a(Bo,"clearanceRangeForSide");function Tn(e,t,n){let o=e.y>=n.top-ne&&e.y<=n.bottom+ne,r=e.x>=n.left-ne&&e.x<=n.right+ne;if(ue(e,t,ne)&&o){if(Math.abs(e.x-n.left)<ne)return"left";if(Math.abs(e.x-n.right)<ne)return"right"}if(de(e,t,ne)&&r){if(Math.abs(e.y-n.top)<ne)return"top";if(Math.abs(e.y-n.bottom)<ne)return"bottom"}}a(Tn,"terminalSideForSegment");function nn(e){return e==="left"||e==="right"}a(nn,"isHorizontalSide");function ms(e,t,n,o,r){let s=[],i=n?Tn(e,t,n):void 0,u=o?Tn(t,e,o):void 0;return n&&i&&nn(i)===r&&s.push(Bo(n,i)),o&&u&&nn(u)===r&&s.push(Bo(o,u)),s.length>0?gs(s):void 0}a(ms,"straightClearanceRange");function ko(e,t,n,o,r){let s=ms(e,t,n,o,r);if(!s)return;let i=r?e.y:e.x,u=Math.min(s.hi,Math.max(s.lo,i));if(!(Math.abs(u-i)<ne))return r?[{x:e.x,y:u},{x:t.x,y:u}]:[{x:u,y:e.y},{x:u,y:t.y}]}a(ko,"clearStraightEndpointCornerAxis");function Xo(e,t,n){if(e.length!==2)return e;let[o,r]=e;return ue(o,r,ne)?ko(o,r,t,n,!0)??e:de(o,r,ne)?ko(o,r,t,n,!1)??e:e}a(Xo,"clearStraightEndpointCornerConnections");function ps(e,t,n){return nn(n)?{x:e.x,y:vo(e.y,t.top,t.bottom)}:{x:vo(e.x,t.left,t.right),y:e.y}}a(ps,"cornerClearedEndpoint");function hs(e,t,n,o,r,s){let i=e.map(u=>({...u}));for(let u=t;u>=0&&u<e.length;u+=n){let c=e[u];if(s&&!ue(c,o,ne)||!s&&!de(c,o,ne))break;s?i[u].y=r.y:i[u].x=r.x}return i}a(hs,"moveCollinearEndpointRun");function Go(e,t,n){if(e.length<2)return e;let o=n?0:e.length-1,r=n?1:-1,s=e[o],i=Rn(e,o,r);if(!i)return e;let u=Tn(s,i,t);if(!u)return e;let c=nn(u),l=ps(s,t,u);return Je(s,l,ne)?e:hs(e,o,r,s,l,c)}a(Go,"clearEndpointCornerConnection");function Do(e,t,n){let o=Math.min(e.x,t.x)>=n.left-ne&&Math.max(e.x,t.x)<=n.right+ne,r=Math.min(e.y,t.y)>=n.top-ne&&Math.max(e.y,t.y)<=n.bottom+ne;if(Math.abs(e.y-n.top)<ne&&Math.abs(t.y-n.top)<ne&&o)return"top";if(Math.abs(e.y-n.bottom)<ne&&Math.abs(t.y-n.bottom)<ne&&o)return"bottom";if(Math.abs(e.x-n.left)<ne&&Math.abs(t.x-n.left)<ne&&r)return"left";if(Math.abs(e.x-n.right)<ne&&Math.abs(t.x-n.right)<ne&&r)return"right"}a(Do,"borderSideForSegment");function _o(e,t,n,o){switch(e){case"top":return de(t,n,ne)&&n.y<o.top-ne;case"bottom":return de(t,n,ne)&&n.y>o.bottom+ne;case"left":return ue(t,n,ne)&&n.x<o.left-ne;case"right":return ue(t,n,ne)&&n.x>o.right+ne}}a(_o,"leavesOutward");function Fo(e,t,n){if(e.length<3)return e;if(n){let s=Do(e[0],e[1],t);return s&&_o(s,e[1],e[2],t)?e.slice(1):e}let o=e.length-1,r=Do(e[o-1],e[o],t);return r&&_o(r,e[o-1],e[o-2],t)?e.slice(0,o):e}a(Fo,"collapseOwnBorderStub");function ys(e,t,n){let o=e;if(t){let s=Rn(o,0,1);if(s){let i=Ao(s,o[0],t);i!==o[0]&&(o=[i,...o.slice(1)])}o=Fo(o,t,!0)}if(n){let s=o.length-1,i=Rn(o,s,-1);if(i){let u=Ao(i,o[s],n,!0);u!==o[s]&&(o=[...o.slice(0,s),u])}o=Fo(o,n,!1)}let r=Xo(o,t,n);return r!==o||o.length===2?r:(t&&(o=Go(o,t,!0)),n&&(o=Go(o,n,!1)),o)}a(ys,"snapAndCollapseEndpoints");function On(e,t){for(let n of e){let o=zo(n,t,2);if(!o)continue;let r=le(o.points,ne),s=ys(r,o.srcRect,o.dstRect);if(s.length<3){o.edge.points=s;continue}let i=[s[0],{...s[0]},...s.slice(1,-1),s[s.length-1],{...s[s.length-1]}];o.edge.points=i}}a(On,"prepareEdgeEndpointsForRenderer");function $o(e){return new Map(e.map(t=>[t.id,t]))}a($o,"buildNodeMap");function xs(e,t){let n=e.parentId,o=null;for(;n;){let r=t.get(n);if(!r?.isGroup)break;o=r.id,n=r.parentId}return o}a(xs,"resolveTopLevelGroupId");function Yo(e,t){let n=0,o=e.parentId;for(;o;){let r=t.get(o);if(!r?.isGroup)break;n++,o=r.parentId}return n}a(Yo,"groupDepth");function jo(e){let t=1/0,n=-1/0,o=1/0,r=-1/0;for(let s of e){let i=s.x,u=s.y;if(typeof i!="number"||typeof u!="number")continue;let c=s.width??0,l=s.height??0;t=Math.min(t,i-c/2),n=Math.max(n,i+c/2),o=Math.min(o,u-l/2),r=Math.max(r,u+l/2)}return t===1/0||o===1/0?null:{minX:t,maxX:n,minY:o,maxY:r}}a(jo,"boundsForChildren");function bs(e,t){let n=e.padding??20;e.x=(t.minX+t.maxX)/2,e.y=(t.minY+t.maxY)/2,e.width=Math.max(0,t.maxX-t.minX)+n,e.height=Math.max(0,t.maxY-t.minY)+n}a(bs,"applyGroupBounds");function Is(e){let t=$o(e),n=e.filter(o=>o.isGroup&&o.parentId).sort((o,r)=>Yo(r,t)-Yo(o,t));for(let o of n){let r=e.filter(i=>i.parentId===o.id),s=jo(r);s&&bs(o,s)}}a(Is,"recomputeNestedGroupBounds");function wn(e,t){let n=e.nodes??[],o=e.edges??[],r=n.filter(c=>!c.isGroup),s=1/0,i=-1/0;for(let c of r){let l=c[t];typeof l=="number"&&(s=Math.min(s,l),i=Math.max(i,l))}if(!Number.isFinite(s)||!Number.isFinite(i))return!1;let u=a(c=>s+i-c,"mirror");for(let c of n){let l=c[t];typeof l=="number"&&(c[t]=u(l));let g=c.groupTitleRect;g&&(c.groupTitleRect=t==="x"?{...g,left:u(g.right),right:u(g.left)}:{...g,top:u(g.bottom),bottom:u(g.top)})}for(let c of o)for(let l of c.points??[])l[t]=u(l[t]);return!0}a(wn,"mirrorAxis");function Vo(e){return(e.nodes??[]).some(n=>!n.isGroup)?wn(e,"y"):!0}a(Vo,"applyBtDirectionTransform");function Uo(e,t="LR"){let n=e.nodes??[],o=e.edges??[],r=n.filter(v=>!v.isGroup),s=1/0,i=1/0;for(let v of r){let z=v.x??0,Y=v.y??0;z<s&&(s=z),Y<i&&(i=Y)}if(!Number.isFinite(s)||!Number.isFinite(i))return!1;let u=36,c=0,l=0;for(let v of r)c+=v.width??0,l+=v.height??0;let g=c/r.length,y=l/r.length,M=y>0?Math.max(1,g/y):1;for(let v of r){let z=v.x??0,K=((v.y??0)-i)*M+u,ae=z-s;v.x=K,v.y=ae}for(let v of o)if(v.points)for(let z of v.points){let Y=z.x,ae=(z.y-i)*M+u,he=Y-s;z.x=ae,z.y=he}Is(n);let p=n.filter(v=>v.isGroup&&!v.parentId);if(p.length===0)return t==="RL"&&wn(e,"x"),!0;let m=$o(n),d=new Map;for(let v of n){if(v.isGroup)continue;let z=xs(v,m);if(!z)continue;let Y=d.get(z)??[];Y.push(v),d.set(z,Y)}let h=0;for(let v of p){let z=v.padding??0;z>h&&(h=z)}let N=[],I=1/0,E=-1/0;for(let v of p){let z=d.get(v.id)??[],Y=jo(z);Y&&(I=Math.min(I,Y.minX),E=Math.max(E,Y.maxX),N.push({lane:v,contentTop:Y.minY,contentBottom:Y.maxY,centerY:(Y.minY+Y.maxY)/2}))}if(I===1/0||E===-1/0)return!0;let O=Math.max(0,E-I),S=Math.max(h,10),b=O+2*S,R=u+b,T=(I+E)/2-b/2-u,D=T+R/2,G=Math.max(h,u);N.sort((v,z)=>v.centerY-z.centerY);for(let v=0;v<N.length;v++){let z=N[v],Y,K;if(v===0?Y=z.contentTop-G:Y=(N[v-1].contentBottom+z.contentTop)/2,v===N.length-1)K=z.contentBottom+G;else{let Oe=N[v+1];K=(z.contentBottom+Oe.contentTop)/2}let ae=Math.max(0,K-Y),he=(Y+K)/2;z.lane.x=D,z.lane.y=he,z.lane.width=R,z.lane.height=ae,z.lane.swimlaneContentTop=z.contentTop,z.lane.groupTitleRect={left:T,right:T+u,top:Y,bottom:K}}return t==="RL"&&wn(e,"x"),!0}a(Uo,"applyLrDirectionTransform");var ct=1e-6,Ms=8,on=Ms,Ss=[0,on,-on,2*on,-2*on];function Wo(e,t){let{nodeInfoById:n,realNodeRects:o}=At(t);for(let r of e){if(r.isLayoutOnly)continue;let s=r.points;if(!s||s.length<4)continue;let i=Jt(le(s,ct),ct);if(!i)continue;let{p3:u}=i,c=i.kind==="HVH",l=tn(r,n,ct);if(!l)continue;let{srcId:g,dstId:y,srcInfo:M,dstInfo:p,collinearX:m,collinearY:d}=l;if(m||d)continue;let h,N=M.rect;for(let I of Ss){let E,O,S;if(c){let D=p.cy>M.cy?N.bottom:N.top,G=M.cx+I;if(G<=N.left+ct||G>=N.right-ct)continue;E={x:G,y:D},O={x:G,y:u.y},S={x:u.x,y:u.y}}else{let D=p.cx>M.cx?N.right:N.left,G=M.cy+I;if(G<=N.top+ct||G>=N.bottom-ct)continue;E={x:D,y:G},O={x:u.x,y:G},S={x:u.x,y:u.y}}let b=Je(E,O,ct),R=Je(O,S,ct);if(b&&R||!b&&Se(E,O,o,[g],1)||!R&&Se(O,S,o,[y],1))continue;let w=!b&&Ft(E,O,e,r,{epsilon:ct,skipDegenerateOther:!0}),B=!R&&Ft(O,S,e,r,{epsilon:ct,skipDegenerateOther:!0});if(!(w||B)){b?h=[O,S]:R?h=[E,O]:h=[E,O,S];break}}h&&(r.points=h)}}a(Wo,"portSwapToLShape");function Ko(e,t){let{realNodeRects:s,labelNodeRects:i}=ft(t.values());for(let u of e){if(u.isLayoutOnly)continue;let c=u.points;if(!c||c.length<4)continue;let l=le(c,.001);if(l.length<4)continue;let g=l.length-1,y=l[g],M=l[g-1],p=l[g-2],m=y.x-M.x,d=y.y-M.y,h=Math.hypot(m,d);if(h>=10||h<.001)continue;let N=M.x-p.x,I=M.y-p.y;if(Math.hypot(N,I)<.001)continue;let O=Pe(M,y,.001),S=Re(M,y,.001),b=Pe(p,M,.001),R=Re(p,M,.001);if(!(O&&R||S&&b))continue;let w=u.end,B=u.start,T=w?t.get(w):void 0;if(!T)continue;let D=T.x??0,G=T.y??0,v=Ge(T);if(!v)continue;let z,Y;if(R){let W=I<0;z={x:D,y:p.y},Y={x:D,y:W?v.bottom:v.top}}else{let W=N>0;z={x:p.x,y:G},Y={x:W?v.right:v.left,y:G}}if(Se(z,Y,s,w?[w]:[],-2)||Se(z,Y,i,[],-2))continue;if(B){let W=t.get(B),te=W?Ge(W):void 0;if(te&&qt(z,te,2))continue}let K=a((W,te)=>`${W.x.toFixed(3)},${W.y.toFixed(3)}|${te.x.toFixed(3)},${te.y.toFixed(3)}`,"ownSegmentKey"),ae=new Set;for(let W=0;W<l.length-1;W++)ae.add(K(l[W],l[W+1]));let he=a((W,te)=>{for(let fe of e){if(fe===u||fe.isLayoutOnly)continue;let pe=fe.points;if(!(!pe||pe.length<2))for(let xe=0;xe<pe.length-1;xe++){let Ee=pe[xe],Ve=pe[xe+1];if(!ae.has(K(Ee,Ve))&&at(W,te,Ee,Ve,.001))return!0}}return!1},"segmentCrossesOtherEdge");if(he(z,Y))continue;if(g-3>=0){let W=l[g-3],te=[B,w].filter(fe=>!!fe);if(Se(W,z,s,te,-2)||he(W,z))continue}let Be=[...l.slice(0,g-2),z,Y];u.points=Be;let Q=u.labelNodeId;if(Q){let W=t.get(Q);if(W){let te=W.width??0,fe=W.height??0;if(te>0&&fe>0){let pe,xe,Ee=-1;for(let Ve=0;Ve<Be.length-1;Ve++){let Ue=Be[Ve],We=Be[Ve+1],nt=Math.hypot(We.x-Ue.x,We.y-Ue.y),Et=ue(Ue,We,.001),ut=de(Ue,We,.001);(Et&&nt>=te+2||ut&&nt>=fe+2)&&nt>Ee&&(Ee=nt,pe=(Ue.x+We.x)/2,xe=(Ue.y+We.y)/2)}pe!==void 0&&xe!==void 0&&(W.x=pe,W.y=xe)}}}}}a(Ko,"collapseShortTerminalStub");var Z=.001,De=8,ie=ht,An=a((e,t)=>de(e,t,Z)||ue(e,t,Z),"orthogonallyAligned");function Jo(e,t){let r=a((p,m)=>{let d=p.x??0,h=p.y??0,N=m.x-d,I=m.y-h,E=(p.width??0)/2,O=(p.height??0)/2;return Math.abs(I)*E>Math.abs(N)*O?(I<0&&(O=-O),{x:d+(I===0?0:O*N/I),y:h+O}):(N<0&&(E=-E),{x:d+E,y:h+(N===0?0:E*I/N)})},"rectIntersect"),s=a((p,m)=>{let d=le(p.points??[]);if(d.length<2)return;let h=m?p.start:p.end,N=h?t.get(h):void 0,I=N?Ge(N):void 0;if(!N||!h||!I)return;let E=m?d[0]:d[d.length-1],O=m?d[1]:d[d.length-2],S=r(N,E),b=E;if(An(O,S)&&(b=O),de(S,b,Z))return{edge:p,edgeId:String(p.id??""),nodeId:h,atStart:m,orientation:"V",coord:S.x,min:Math.min(S.y,b.y),max:Math.max(S.y,b.y),boundary:S,railEnd:b,rect:I};if(ue(S,b,Z))return{edge:p,edgeId:String(p.id??""),nodeId:h,atStart:m,orientation:"H",coord:S.y,min:Math.min(S.x,b.x),max:Math.max(S.x,b.x),boundary:S,railEnd:b,rect:I}},"terminalLaneFor"),i=a((p,m)=>Math.max(0,Math.min(p.max,m.max)-Math.max(p.min,m.min)),"projectedOverlapLength"),u=a((p,m)=>p.nodeId!==m.nodeId||p.orientation!==m.orientation?!1:p.orientation==="H"?(Math.abs(p.boundary.x-p.rect.left)<1||Math.abs(p.boundary.x-p.rect.right)<1)&&de(p.boundary,m.boundary,1):(Math.abs(p.boundary.y-p.rect.top)<1||Math.abs(p.boundary.y-p.rect.bottom)<1)&&ue(p.boundary,m.boundary,1),"sameTerminalFace"),c=a((p,m)=>p.nodeId!==m.nodeId||p.orientation!==m.orientation?!1:i(p,m)>=De&&Math.abs(p.coord-m.coord)<.5,"exactTerminalLaneConflict"),l=a((p,m)=>{if(p.nodeId!==m.nodeId||p.orientation!==m.orientation||p.orientation!=="H"||p.atStart===m.atStart)return!1;let d=i(p,m);if(d<De)return!1;let h=p.rect.bottom-p.rect.top;return d<h||d>2*h?!1:u(p,m)&&Math.abs(p.coord-m.coord)<16},"nearTerminalLaneConflict"),g=a((p,m)=>{let d=le(p.edge.points??[]);if(d.length<2)return;let h=p.orientation==="V"?{x:p.boundary.x+m,y:p.boundary.y}:{x:p.boundary.x,y:p.boundary.y+m},N=p.orientation==="V"?{x:p.railEnd.x+m,y:p.railEnd.y}:{x:p.railEnd.x,y:p.railEnd.y+m};if(!a(()=>Math.abs(p.boundary.y-p.rect.top)<1||Math.abs(p.boundary.y-p.rect.bottom)<1?ue(h,p.boundary,Z)&&h.x>=p.rect.left+1&&h.x<=p.rect.right-1:Math.abs(p.boundary.x-p.rect.left)<1||Math.abs(p.boundary.x-p.rect.right)<1?de(h,p.boundary,Z)&&h.y>=p.rect.top+1&&h.y<=p.rect.bottom-1:!1,"boundaryStaysOnSameFace")())return;if(p.atStart){let b=d.length>1&&Je(d[1],p.railEnd,Z),R=d.slice(b?2:1),w=R[0];return w&&!An(w,N)?void 0:[h,N,...R]}let E=d.length>1&&Je(d[d.length-2],p.railEnd,Z),O=d.slice(0,E?-2:-1),S=O[O.length-1];if(!(S&&!An(S,N)))return[...O,N,h]},"shiftedCandidate"),y=a(p=>{let m=p.edge,d=le(m.points??[]);if(d.length!==2)return!1;let h=m.start,N=m.end,I=h?t.get(h):void 0,E=N?t.get(N):void 0;if(!I||!E)return!1;let O=I.x??0,S=I.y??0,b=E.x??0,R=E.y??0,[w,B]=d;return ue(w,B,Z)&&Math.abs(S-R)<1&&Math.abs(O-b)>1||de(w,B,Z)&&Math.abs(O-b)<1&&Math.abs(S-R)>1},"laneIsStraightCollinearConnector"),M=[-7,7,-14,14,-21,21];for(let p=0;p<8;p++){let m=e.filter(h=>!h.isLayoutOnly).flatMap(h=>[s(h,!0),s(h,!1)]).filter(h=>!!h),d=!1;for(let h=0;h<m.length&&!d;h++)for(let N=h+1;N<m.length&&!d;N++){let I=m[h],E=m[N];if(I.edge===E.edge||!(c(I,E)||l(I,E)))continue;let O=!c(I,E),S=[I,E].sort((b,R)=>{let w=y(b),B=y(R);return w!==B?Number(w)-Number(B):+!R.atStart-+!b.atStart});for(let b of S){for(let R of M){let w=g(b,R);if(!w)continue;let B=s({...b.edge,points:w},b.atStart);if(!(!B||m.some(T=>T.edge!==b.edge&&(c(B,T)||O&&l(B,T))))){b.edge.points=w,d=!0;break}}if(d)break}}if(!d)return}}a(Jo,"separateSharedRenderedTerminalLanes");function qo(e,t){let{realNodeRects:r,labelNodeRects:s}=ft(t.values()),i=a((c,l)=>{let g=c.start,y=c.end,M=ie(l);if(M.length!==l.length-1)return!1;let p=[g,y].filter(m=>!!m);for(let m of M)if(Se(m.a,m.b,r,p,-2)||Se(m.a,m.b,s,[],-2))return!1;for(let m of e){if(m===c||m.isLayoutOnly)continue;let d=m.points;if(!(!d||d.length<2)){for(let h of M)for(let N of ie(le(d)))if(it(h,N,.5)>=De||at(h.a,h.b,N.a,N.b,Z))return!1}}return!0},"candidateIsSafe"),u=a((c,l)=>{if(l+4>=c.length)return;let g=c[l],y=c[l+1],M=c[l+2],p=c[l+3],m=c[l+4],d=Pe(g,y)&&Re(y,M)&&Pe(M,p)&&Re(p,m)&&de(g,p,Z)&&de(g,m,Z)&&de(y,M,Z)&&(y.x-g.x)*(p.x-M.x)<0,h=Re(g,y)&&Pe(y,M)&&Re(M,p)&&Pe(p,m)&&ue(g,p,Z)&&ue(g,m,Z)&&ue(y,M,Z)&&(y.y-g.y)*(p.y-M.y)<0;if(d||h)return le([...c.slice(0,l+1),m,...c.slice(l+5)]);if(l+5>=c.length)return;let N=c[l+5],I=Re(g,y)&&Pe(y,M)&&Re(M,p)&&Pe(p,m)&&Re(m,N)&&de(g,m,Z)&&de(g,N,Z)&&de(M,p,Z)&&(M.x-y.x)*(m.x-p.x)<0,E=Pe(g,y)&&Re(y,M)&&Pe(M,p)&&Re(p,m)&&Pe(m,N)&&ue(g,m,Z)&&ue(g,N,Z)&&ue(M,p,Z)&&(M.y-y.y)*(m.y-p.y)<0;if(!(!I&&!E))return le([...c.slice(0,l+1),N,...c.slice(l+6)])},"withoutDogleg");for(let c=0;c<8;c++){let l=!1;for(let g of e){if(g.isLayoutOnly)continue;let y=le(g.points??[]);for(let M=0;M<=y.length-5;M++){let p=u(y,M);if(!(!p||!i(g,p))){g.points=p,l=!0;break}}if(l)break}if(!l)return}}a(qo,"collapseRedundantRectangularDoglegs");function vn(e,t){let{realNodeRects:s,labelNodeRects:i}=ft(t.values()),u=e.filter(m=>!m.isLayoutOnly),c=a((m,d,h)=>le(m===d?h??[]:m.points??[]),"pointsFor"),l=a((m,d)=>{let h=0;for(let N=0;N<u.length;N++){let I=ie(c(u[N],m,d));for(let E=N+1;E<u.length;E++){let O=ie(c(u[E],m,d));for(let S of I)for(let b of O)at(S.a,S.b,b.a,b.b,Z)&&h++}}return h},"strictCrossingCount"),g=a(m=>{let d=ie(m);if(d.length!==3)return;let h=d[1];if(!(d[0].horizontal===h.horizontal||d[2].horizontal===h.horizontal))return{index:h.index,horizontal:h.horizontal,vertical:h.vertical,segment:h}},"middleRail"),y=a((m,d)=>{let h=[m.start,m.end].filter(N=>!!N);return s.filter(N=>{if(h.includes(N.id))return!1;let I=N.rect;return d.horizontal?Xe(d.a.x,d.b.x,I.left,I.right)>=De&&d.a.y>=I.top-2&&d.a.y<=I.bottom+2:Xe(d.a.y,d.b.y,I.top,I.bottom)>=De&&d.a.x>=I.left-2&&d.a.x<=I.right+2})},"blockingRectsFor"),M=a((m,d,h)=>{let N=m.map(E=>({...E}));if(d.horizontal)N[d.index].y=h,N[d.index+1].y=h;else if(d.vertical)N[d.index].x=h,N[d.index+1].x=h;else return;let I=rt(le(N));return ie(I).length===I.length-1?I:void 0},"candidateByMovingRail"),p=a((m,d,h)=>{let N=[m.start,m.end].filter(E=>!!E),I=ie(d);if(I.length!==d.length-1)return!1;for(let E of I)if(Se(E.a,E.b,s,N,-2)||Se(E.a,E.b,i,[],-2))return!1;for(let E of u)if(E!==m){for(let O of I)for(let S of ie(c(E)))if(it(O,S,.5)>=De)return!1}return l(m,d)<=h},"candidateIsSafe");for(let m=0;m<8;m++){let d=l(),h=!1;for(let N of u){let I=c(N),E=g(I);if(!E)continue;let O=y(N,E.segment);if(O.length===0)continue;let S=E.horizontal?[Math.min(...O.map(b=>b.rect.top))-20,Math.max(...O.map(b=>b.rect.bottom))+20]:[Math.min(...O.map(b=>b.rect.left))-20,Math.max(...O.map(b=>b.rect.right))+20];for(let b of S){let R=M(I,E.segment,b);if(!(!R||!p(N,R,d))){N.points=R,h=!0;break}}if(h)break}if(!h)return}}a(vn,"liftObstacleHuggingSameSideRails");function Bn(e,t){let o=a(c=>{let l=c.groupTitleRect;if(!(!l||typeof l.left!="number"||typeof l.right!="number"||typeof l.top!="number"||typeof l.bottom!="number"||!Number.isFinite(l.left)||!Number.isFinite(l.right)||!Number.isFinite(l.top)||!Number.isFinite(l.bottom)||l.right<=l.left||l.bottom<=l.top))return{left:l.left,right:l.right,top:l.top,bottom:l.bottom}},"validTitleRect"),r=a(c=>{if(!c.isGroup||c.parentId)return;let l=c.direction,g=typeof l=="string"?l.toUpperCase():"";if(g==="LR"||g==="RL"||g==="BT")return;let y=o(c),M=c.y,p=c.height;if(!y||typeof M!="number"||typeof p!="number"||!Number.isFinite(M)||!Number.isFinite(p)||p<=0)return;let m=y.right-y.left,d=y.bottom-y.top;if(!(d<=0||m<d))return{node:c,rect:y}},"topLaneTitleFor"),s=a((c,l)=>{if(!c.horizontal)return!1;let g=c.a.y;return g<=l.top+Z||g>=l.bottom-Z?!1:Xe(c.a.x,c.b.x,l.left,l.right)>=De},"horizontalSegmentIntersectsTitle"),i=[...t.values()].map(r).filter(c=>!!c);if(i.length===0)return;let u=0;for(let c of e){if(c.isLayoutOnly)continue;let l=le(c.points??[]);for(let g of ie(l))for(let y of i)s(g,y.rect)&&(u=Math.max(u,y.rect.bottom-g.a.y+4))}if(!(u<=Z))for(let c of i){let l=c.node.y,g=c.node.height;typeof l!="number"||typeof g!="number"||!Number.isFinite(l)||!Number.isFinite(g)||g<=0||(c.node.y=l-u/2,c.node.height=g+u,c.node.groupTitleRect={...c.rect,top:c.rect.top-u,bottom:c.rect.bottom-u})}}a(Bn,"liftTopLaneTitleBandsAboveRails");function kn(e,t){let o=a(l=>{let g=l.groupTitleRect;if(!(!g||typeof g.left!="number"||typeof g.right!="number"||typeof g.top!="number"||typeof g.bottom!="number"||!Number.isFinite(g.left)||!Number.isFinite(g.right)||!Number.isFinite(g.top)||!Number.isFinite(g.bottom)||g.right<=g.left||g.bottom<=g.top))return{left:g.left,right:g.right,top:g.top,bottom:g.bottom}},"validTitleRect"),r=a(l=>{if(!l.isGroup||l.parentId||l.direction!=="LR")return;let y=o(l),M=l.x,p=l.width;if(!y||typeof M!="number"||typeof p!="number"||!Number.isFinite(M)||!Number.isFinite(p)||p<=0)return;let m=y.right-y.left,d=y.bottom-y.top;if(!(m<=0||d<m))return{node:l,rect:y}},"leftLaneTitleFor"),s=a((l,g)=>{if(!l.vertical)return!1;let y=l.a.x;return y<=g.left+Z||y>=g.right-Z?!1:Xe(l.a.y,l.b.y,g.top,g.bottom)>=De},"verticalSegmentIntersectsTitle"),i=a((l,g)=>{if(!l.horizontal)return!1;let y=l.a.y;return y<=g.top+Z||y>=g.bottom-Z?!1:Xe(l.a.x,l.b.x,g.left,g.right)>=De},"horizontalSegmentIntersectsTitle"),u=[...t.values()].map(r).filter(l=>!!l);if(u.length===0)return;let c=0;for(let l of e){if(l.isLayoutOnly)continue;let g=le(l.points??[]);for(let y of ie(g))for(let M of u)if(s(y,M.rect))c=Math.max(c,M.rect.right-y.a.x+4);else if(i(y,M.rect)){let p=Math.min(y.a.x,y.b.x);c=Math.max(c,M.rect.right-p+4)}}if(!(c<=Z))for(let l of u){let g=l.node.x,y=l.node.width;typeof g!="number"||typeof y!="number"||!Number.isFinite(g)||!Number.isFinite(y)||y<=0||(l.node.x=g-c/2,l.node.width=y+c,l.node.groupTitleRect={...l.rect,left:l.rect.left-c,right:l.rect.right-c})}}a(kn,"shiftLeftLaneTitleBandsLeftOfRails");function Zo(e,t){let{realNodeRects:r}=ft(t.values()),s=e.filter(d=>!d.isLayoutOnly),i=a((d,h=new Map)=>le(h.get(d)??d.points??[]),"replacementPointsFor"),u=a((d=new Map)=>{let h=0;for(let N=0;N<s.length;N++){let I=ie(i(s[N],d));for(let E=N+1;E<s.length;E++){let O=ie(i(s[E],d));for(let S of I)for(let b of O)at(S.a,S.b,b.a,b.b,Z)&&h++}}return h},"crossingCount"),c=a((d=new Map)=>s.reduce((h,N)=>h+qe(i(N,d)),0),"totalBends"),l=a(d=>{let h=i(d);if(h.length<4)return;let N=h[h.length-2],I=h[h.length-1];if(!(!Pe(N,I,Z)&&!Re(N,I,Z)))return{tailStart:N,terminal:I}},"terminalTailFor"),g=a((d,h)=>{let N=i(d);if(N.length<3)return;let I=N[0],E=N[1],O;if(Pe(I,E,Z))O={x:E.x,y:h.tailStart.y};else if(Re(I,E,Z))O={x:h.tailStart.x,y:E.y};else return;let S=rt(le([I,E,O,h.tailStart,h.terminal]));return ie(S).length===S.length-1?S:void 0},"candidateWithDestinationTail"),y=a((d,h)=>{let N=[d.start,d.end].filter(I=>!!I);for(let I of ie(h))if(Se(I.a,I.b,r,N,-2))return!0;return!1},"pathHasNodeHit"),M=a((d,h,N)=>{for(let I of s)if(I!==d){for(let E of ie(h))for(let O of ie(i(I,N)))if(it(E,O,.5)>=De)return!0}return!1},"pathHasSharedTrack"),p=a((d,h,N)=>!y(d,h)&&!M(d,h,N),"candidateIsSafe"),m=a(()=>{let d=new Map;for(let h of s){let N=h.end;if(!N||!t.has(N)||i(h).length<4)continue;let E=d.get(N)??[];E.push(h),d.set(N,E)}return d},"edgesByDestination");for(let d=0;d<4;d++){let h=u();if(h===0)return;let N=c(),I,E=h,O=N;for(let S of m().values())for(let b=0;b<S.length;b++)for(let R=b+1;R<S.length;R++){let w=S[b],B=S[R],T=l(w),D=l(B);if(!T||!D)continue;let G=g(w,D),v=g(B,T);if(!G||!v)continue;let z=new Map([[w,G],[B,v]]);if(!p(w,G,z)||!p(B,v,z))continue;let Y=u(z),K=c(z);Y>=h||Y>E||Y===E&&K>=O||(I=z,E=Y,O=K)}if(!I)return;for(let[S,b]of I)S.points=b}}a(Zo,"swapDestinationTerminalTailsToReduceCrossings");function Qo(e,t){let{realNodeRects:i,labelNodeRects:u}=ft(t.values()),c=e.filter(S=>!S.isLayoutOnly),l=a((S,b=new Map)=>le(b.get(S)??S.points??[]),"replacementPointsFor"),g=a((S=new Map)=>{let b=0;for(let R=0;R<c.length;R++){let w=ie(l(c[R],S));for(let B=R+1;B<c.length;B++){let T=ie(l(c[B],S));for(let D of w)for(let G of T)at(D.a,D.b,G.a,G.b,Z)&&b++}}return b},"strictCrossingCount"),y=a((S=new Map)=>c.reduce((b,R)=>b+qe(l(R,S)),0),"totalBends"),M=a(S=>{let b=S.start,R=S.end,w=b?t.get(b):void 0,B=R?t.get(R):void 0,T=w?Ge(w):void 0,D=B?Ge(B):void 0;return T&&D?{src:T,dst:D}:void 0},"endpointRectsFor"),p=a((S,b,R)=>{if(R.index<=0||R.index+1>=b.length-1)return;let w=M(S);if(w){if(R.vertical){let B=R.a.x,T=Math.min(w.src.left,w.dst.left),D=Math.max(w.src.right,w.dst.right),G=B<T-Z?"left":B>D+Z?"right":void 0;return G?{edge:S,points:b,segmentIndex:R.index,axis:"vertical",side:G,coord:B,min:Math.min(R.a.y,R.b.y),max:Math.max(R.a.y,R.b.y)}:void 0}if(R.horizontal){let B=R.a.y,T=Math.min(w.src.top,w.dst.top),D=Math.max(w.src.bottom,w.dst.bottom),G=B<T-Z?"top":B>D+Z?"bottom":void 0;return G?{edge:S,points:b,segmentIndex:R.index,axis:"horizontal",side:G,coord:B,min:Math.min(R.a.x,R.b.x),max:Math.max(R.a.x,R.b.x)}:void 0}}},"externalRailForSegment"),m=a(()=>{let S=[];for(let b of c){let R=l(b);for(let w of ie(R)){let B=p(b,R,w);B&&S.push(B)}}return S},"collectExternalRails"),d=a((S,b)=>S.edge!==b.edge&&S.axis===b.axis&&S.side===b.side&&Xe(S.min,S.max,b.min,b.max)>=De,"railsInteract"),h=a(S=>{let b=[],R=new Set;for(let w of S){if(R.has(w))continue;let B=[w],T=[];for(R.add(w);B.length>0;){let D=B.pop();T.push(D);for(let G of S)!R.has(G)&&d(D,G)&&(R.add(G),B.push(G))}T.length>1&&b.push(T)}return b},"connectedComponents"),N=a(S=>{let b=[];for(let R of S)b.some(w=>Math.abs(w-R.coord)<Z)||b.push(R.coord);for(;b.length<S.length;){let R=Math.min(...b),w=Math.max(...b),B=S[0].side;b.push(B==="left"||B==="top"?R-12*(S.length-b.length):w+12*(S.length-b.length))}return b},"uniqueCoordsFor"),I=a(S=>{let b=S.map(B=>B.coord),R=N(S),w=[];if(S.length<=6){let B=new Array(R.length).fill(!1),T=[],D=a(()=>{if(T.length===S.length){T.some((G,v)=>Math.abs(G-b[v])>=Z)&&w.push([...T]);return}for(let[G,v]of R.entries())B[G]||(B[G]=!0,T.push(v),D(),T.pop(),B[G]=!1)},"visit");return D(),w}for(let B=0;B<b.length;B++)for(let T=B+1;T<b.length;T++){let D=[...b];[D[B],D[T]]=[D[T],D[B]],w.push(D)}return w},"coordinateAssignmentsFor"),E=a((S,b)=>{let R=new Map;for(let[B,T]of S.entries()){let D=b[B],G=R.get(T.edge)??T.points.map(v=>({x:v.x,y:v.y}));T.axis==="vertical"?(G[T.segmentIndex].x=D,G[T.segmentIndex+1].x=D):(G[T.segmentIndex].y=D,G[T.segmentIndex+1].y=D),R.set(T.edge,G)}let w=new Map;for(let[B,T]of R){let D=rt(le(T));if(ie(D).length!==D.length-1)return;w.set(B,D)}return w},"replacementsForAssignment"),O=a(S=>{for(let[b,R]of S){let w=[b.start,b.end].filter(B=>!!B);for(let B of ie(R))if(Se(B.a,B.b,i,w,-2)||Se(B.a,B.b,u,[],-2))return!1}for(let b=0;b<c.length;b++){let R=c[b],w=S.has(R),B=ie(l(R,S));for(let T=b+1;T<c.length;T++){let D=c[T];if(!w&&!S.has(D))continue;let G=ie(l(D,S));for(let v of B)for(let z of G)if(it(v,z,.5)>=De)return!1}}return!0},"candidateIsSafe");for(let S=0;S<4;S++){let b=g();if(b===0)return;let R,w=b,B=y(),T=Number.POSITIVE_INFINITY;for(let D of h(m()))for(let G of I(D)){let v=E(D,G);if(!v||!O(v))continue;let z=g(v);if(z>=b)continue;let Y=y(v),K=D.reduce((ae,he,Oe)=>ae+Math.abs(G[Oe]-he.coord),0);z>w||z===w&&(Y>B||Y===B&&K>=T)||(R=v,w=z,B=Y,T=K)}if(!R)return;for(let[D,G]of R)D.points=G}}a(Qo,"reassignCrossingExternalRailChannels");function er(e,t){let{realNodeRects:r,labelNodeRects:s}=ft(t.values()),i=e.filter(m=>!m.isLayoutOnly),u=a((m,d,h)=>le(m===d?h??[]:m.points??[]),"pointsFor"),c=a(m=>ie(m).reduce((d,h)=>{let N=h.a.x-h.b.x,I=h.a.y-h.b.y;return d+Math.hypot(N,I)},0),"pathLength"),l=a((m,d)=>{let h=0;for(let N=0;N<i.length;N++){let I=ie(u(i[N],m,d));for(let E=N+1;E<i.length;E++){let O=ie(u(i[E],m,d));for(let S of I)for(let b of O)at(S.a,S.b,b.a,b.b,Z)&&h++}}return h},"strictCrossingCount"),g=a((m,d)=>{if(m.horizontal){let h=m.a.y;return(Math.abs(h-d.top)<1||Math.abs(h-d.bottom)<1)&&Xe(m.a.x,m.b.x,d.left,d.right)>=De}if(m.vertical){let h=m.a.x;return(Math.abs(h-d.left)<1||Math.abs(h-d.right)<1)&&Xe(m.a.y,m.b.y,d.top,d.bottom)>=De}return!1},"segmentRunsAlongRectBorder"),y=a(m=>{let d=[m.start,m.end].filter(N=>!!N),h=[];for(let N of d){let I=t.get(N),E=I?Ge(I):void 0;E&&h.push(E)}return h},"endpointRectsFor"),M=a((m,d)=>{if(d+3>=m.length)return[];let h=m[d],N=m[d+1],I=m[d+2],E=m[d+3],O=Pe(h,N,Z)&&Re(N,I,Z)&&Pe(I,E,Z),S=Re(h,N,Z)&&Pe(N,I,Z)&&Re(I,E,Z);if(!O&&!S)return[];if(!(O?Math.sign(N.x-h.x)!==Math.sign(E.x-I.x):Math.sign(N.y-h.y)!==Math.sign(E.y-I.y)))return[];let R=de(h,E,Z)||ue(h,E,Z)?[]:[{x:h.x,y:E.y},{x:E.x,y:h.y}],w=R.length===0?[[...m.slice(0,d+1),...m.slice(d+3)]]:R.map(T=>[...m.slice(0,d+1),T,...m.slice(d+3)]),B=new Set;return w.map(T=>rt(le(T))).filter(T=>{if(ie(T).length!==T.length-1||!T.some(G=>Je(G,E,Z)))return!1;let D=T.map(G=>`${G.x.toFixed(3)},${G.y.toFixed(3)}`).join("|");return B.has(D)?!1:(B.add(D),!0)})},"shortcutCandidatesAt"),p=a((m,d,h)=>{let N=[m.start,m.end].filter(E=>!!E),I=y(m);for(let E of ie(d))if(Se(E.a,E.b,r,N,-2)||Se(E.a,E.b,s,[],-2)||I.some(O=>g(E,O)))return!1;for(let E of i)if(E!==m){for(let O of ie(d))for(let S of ie(u(E)))if(it(O,S,.5)>=De)return!1}return l(m,d)<=h},"candidateIsSafe");for(let m=0;m<8;m++){let d=l(),h,N,I=d,E=Number.POSITIVE_INFINITY,O=Number.POSITIVE_INFINITY;for(let S of i){let b=u(S),R=qe(b,Z),w=c(b);for(let B=0;B<=b.length-4;B++)for(let T of M(b,B)){let D=qe(T,Z),G=c(T);if(!(D<R||D===R&&G<w-Z)||!p(S,T,d))continue;let z=l(S,T);z>I||z===I&&(D>E||D===E&&G>=O)||(h=S,N=T,I=z,E=D,O=G)}}if(!h||!N)return;h.points=N}}a(er,"shortcutRedundantOrthogonalJogs");function tr(e,t){let i=[];for(let A of t.values()){if(A.isGroup||A.isEdgeLabel)continue;let _=A.x??0,F=A.y??0,V=Ge(A);V&&i.push({id:String(A.id??""),cx:_,cy:F,rect:V})}if(i.length===0)return;let u=new Map(i.map(A=>[A.id,A])),c=i.map(A=>({id:A.id,rect:A.rect})),l=["top","bottom","left","right"],g={top:Math.min(...i.map(A=>A.rect.top))-20,bottom:Math.max(...i.map(A=>A.rect.bottom))+20,left:Math.min(...i.map(A=>A.rect.left))-20,right:Math.max(...i.map(A=>A.rect.right))+20},y=e.filter(A=>!A.isLayoutOnly),M=new Map(y.map((A,_)=>[A,_])),p=a(A=>{let _=A==="left"||A==="top"?-1:1,F=[];for(let V=0;V<=2;V++)F.push(g[A]+_*20*V);return F},"outwardTracksForSide"),m=a((A,_=new Map)=>le(_.get(A)??A.points??[]),"replacementPointsFor"),d=a((A,_)=>{let F=0;for(let V of A)for(let f of _)at(V.a,V.b,f.a,f.b,Z)&&F++;return F},"crossingCountBetweenSegments"),h=a((A,_)=>d(ie(A),ie(_)),"crossingCountBetweenPaths"),N=a((A=new Map)=>{let _=0,F=[],V=new Set,f=[],x=a(L=>{V.has(L)||(V.add(L),f.push(L))},"addEdge");for(let L=0;L<y.length;L++){let P=y[L],C=m(P,A);for(let k=L+1;k<y.length;k++){let U=y[k],q=h(C,m(U,A));q>0&&(_+=q,F.push({first:P,second:U,count:q}),x(P),x(U))}}return f.sort((L,P)=>(M.get(L)??0)-(M.get(P)??0)),{count:_,pairs:F,edgeSet:V,edges:f}},"crossingSnapshot"),I=a((A,_)=>{let F=new Set(_.keys());if(F.size===0)return A.count;let V=0;for(let x of A.pairs)(F.has(x.first)||F.has(x.second))&&(V+=x.count);let f=0;for(let x=0;x<y.length;x++){let L=y[x],P=F.has(L),C=m(L,_);for(let k=x+1;k<y.length;k++){let U=y[k];!P&&!F.has(U)||(f+=h(C,m(U,_)))}}return A.count-V+f},"crossingCountWithReplacements"),E=a(A=>{let _=new Map;for(let f of A.pairs){let x=_.get(f.first)??new Set;x.add(f.second),_.set(f.first,x);let L=_.get(f.second)??new Set;L.add(f.first),_.set(f.second,L)}let F=[],V=new Set;for(let f of A.edges){if(V.has(f))continue;let x=[f],L=[];for(V.add(f);x.length>0;){let P=x.pop();L.push(P);for(let C of _.get(P)??[])V.has(C)||(V.add(C),x.push(C))}L.sort((P,C)=>(M.get(P)??0)-(M.get(C)??0)),L.length>1&&F.push(L)}return F},"crossingComponents"),O=a(A=>[A.start,A.end].filter(_=>!!_),"endpointIdsFor"),S=a(A=>{let _=[];for(let F of E(A)){let V=new Set(F),f=new Set(F.flatMap(L=>O(L))),x=[...F];for(let L of y)V.has(L)||O(L).some(P=>f.has(P))&&x.push(L);x.sort((L,P)=>(M.get(L)??0)-(M.get(P)??0)),_.push(x)}return _},"pairSearchGroups"),b=a((A,_,F)=>I(A,new Map([[_,F]])),"crossingCountWithSingleReplacement"),R=a(A=>{let _=new Map;for(let F of A.pairs)_.set(F.first,(_.get(F.first)??0)+F.count),_.set(F.second,(_.get(F.second)??0)+F.count);return _},"currentCrossingsByEdge"),w=a(A=>A.slice(1).reduce((_,F,V)=>{let f=A[V];return _+Math.abs(F.x-f.x)+Math.abs(F.y-f.y)},0),"pathLength"),B=a((A=new Map)=>y.reduce((_,F)=>_+qe(m(F,A)),0),"totalBends"),T=a((A=new Map)=>y.reduce((_,F)=>_+w(m(F,A)),0),"totalLength"),D=a((A,_,F=new Map)=>{let V=ie(_);for(let f of y)if(f!==A){for(let x of V)for(let L of ie(m(f,F)))if(it(x,L,.5)>=De)return!0}return!1},"pathHasSegmentConflict"),G=a((A,_)=>{let F=[A.start,A.end].filter(V=>!!V);for(let V of ie(_))if(Se(V.a,V.b,c,F,-2))return!0;return!1},"pathHitsNode"),v=a((A,_)=>{let F=rt(le(_));ie(F).length===F.length-1&&A.push(F)},"pushOrthogonalCandidate"),z=a(A=>A==="left"||A==="right","sideIsHorizontal"),Y=a((A,_,F)=>{switch(_){case"left":return Math.min(A.x,F.x)-20;case"right":return Math.max(A.x,F.x)+20;case"top":return Math.min(A.y,F.y)-20;case"bottom":return Math.max(A.y,F.y)+20}},"localTrackForSameSide"),K=a((A,_,F,V)=>{let f=F==="left"||F==="top"?-1:1,x=[Y(_,F,V),g[F]];for(let L of x)for(let P=0;P<=2;P++)v(A,en(_,F,V,L+f*20*P))},"addSameSideCandidates"),ae=a((A,_,F,V,f)=>{for(let x of p(F))for(let L of p(f))v(A,[_,{x,y:_.y},{x,y:L},{x:V.x,y:L},V])},"addHorizontalToVerticalCandidates"),he=a((A,_,F,V,f)=>{for(let x of p(F))for(let L of p(f))v(A,[_,{x:_.x,y:x},{x:L,y:x},{x:L,y:V.y},V])},"addVerticalToHorizontalCandidates"),Oe=a((A,_,F,V,f)=>{let x=[...p("top"),...p("bottom")];for(let L of p(F))for(let P of p(f))for(let C of x)v(A,[_,{x:L,y:_.y},{x:L,y:C},{x:P,y:C},{x:P,y:V.y},V])},"addHorizontalPairCandidates"),Be=a((A,_,F,V,f)=>{let x=[...p("left"),...p("right")];for(let L of p(F))for(let P of p(f))for(let C of x)v(A,[_,{x:_.x,y:L},{x:C,y:L},{x:C,y:P},{x:V.x,y:P},V])},"addVerticalPairCandidates"),Q=a(A=>{let _=new Set;return A.map(F=>le(F)).filter(F=>{let V=F.map(f=>`${f.x.toFixed(3)},${f.y.toFixed(3)}`).join("|");return _.has(V)||F.length<2?!1:(_.add(V),!0)})},"dedupeCandidatePaths"),W=a((A,_,F,V)=>{let f=[],x=Qt(A,_,F,V,20,Z);x&&v(f,x),_===V&&K(f,A,_,F);let L=z(_),P=z(V);return L&&!P?ae(f,A,_,F,V):!L&&P?he(f,A,_,F,V):L?Oe(f,A,_,F,V):Be(f,A,_,F,V),Q(f)},"buildCandidatesForSides"),te=a((A,_,F,V)=>{let f=[...p("left"),...p("right")],x=[...p("top"),...p("bottom")];for(let L of l){let P=yt(V,L),C=L==="top"||L==="bottom"?p(L):x;for(let k of f){v(A,[_,F,{x:k,y:F.y},{x:k,y:P.y},P]);for(let U of C)v(A,[_,F,{x:k,y:F.y},{x:k,y:U},{x:P.x,y:U},P])}}},"addVerticalDepartureOuterTrackCandidates"),fe=a((A,_,F,V)=>{let f=[...p("left"),...p("right")],x=[...p("top"),...p("bottom")];for(let L of l){let P=yt(V,L),C=L==="left"||L==="right"?p(L):f;for(let k of x){v(A,[_,F,{x:F.x,y:k},{x:P.x,y:k},P]);for(let U of C)v(A,[_,F,{x:F.x,y:k},{x:U,y:k},{x:U,y:P.y},P])}}},"addHorizontalDepartureOuterTrackCandidates"),pe=a(A=>{let _=A.start,F=A.end,V=F?u.get(F):void 0;if(!_||!V)return[];let f=le(A.points??[]);if(f.length<4)return[];let x=f[0],L=f[1],P=[];return Re(x,L,Z)?te(P,x,L,V):Pe(x,L,Z)&&fe(P,x,L,V),P},"terminalPreservingOuterTrackCandidates"),xe=a(A=>{let _=A.start,F=A.end,V=_?u.get(_):void 0,f=F?u.get(F):void 0;if(!V||!f)return[];let x=[];for(let L of l){let P=yt(V,L);for(let C of l)x.push(...W(P,L,yt(f,C),C))}return x.push(...pe(A)),x},"candidatePathsFor"),Ee=a(()=>new Map(y.map(A=>[A,ie(m(A))])),"currentSegmentsByEdge"),Ve=a((A,_,F)=>{let V=new Set;for(let f of y){if(f===A)continue;let x=F.get(f)??ie(m(f));_.some(L=>x.some(P=>it(L,P,.5)>=De))&&V.add(f)}return V},"sharedTrackConflictsFor"),Ue=a((A,_,F,V)=>{let f=new Set;return xe(A).map(L=>rt(le(L))).filter(L=>{if(G(A,L))return!1;let P=L.map(C=>`${C.x.toFixed(3)},${C.y.toFixed(3)}`).join("|");return f.has(P)||L.length<2?!1:(f.add(P),!0)}).map(L=>{let P=ie(L),C=0;for(let k of y)k!==A&&(C+=d(P,F.get(k)??ie(m(k))));return{candidate:L,candidateSegments:P,crossings:_.count-(V.get(A)??0)+C,bends:qe(L,Z),totalBends:qe(L),length:w(L)}}).filter(({crossings:L})=>L<=_.count).sort((L,P)=>L.crossings-P.crossings||L.bends-P.bends||L.length-P.length).slice(0,48).map(L=>({path:L.candidate,segments:L.candidateSegments,sharedTrackConflicts:Ve(A,L.candidateSegments,F),totalBends:L.totalBends,length:L.length}))},"pairCandidatesFor"),We=a((A,_,F,V,f,x)=>{let L=0;for(let C of A.pairs)(C.first===_||C.second===_||C.first===V||C.second===V)&&(L+=C.count);let P=d(F.segments,f.segments);for(let C of y){if(C===_||C===V)continue;let k=x.get(C)??ie(m(C));P+=d(F.segments,k)+d(f.segments,k)}return A.count-L+P},"pairCrossingCount"),nt=a((A,_)=>{for(let F of A.sharedTrackConflicts)if(F!==_)return!1;return!0},"conflictsOnlyWith"),Et=a((A,_)=>A.segments.some(F=>_.segments.some(V=>it(F,V,.5)>=De)),"candidatesShareTrack"),ut=a((A,_,F,V)=>nt(_,F.edge)&&nt(V,A.edge)&&!Et(_,V),"pairCandidatesAreCompatible"),Pt=a((A,_,F,V,f)=>{let x=We(A.current,_.edge,F,V.edge,f,A.baseSegments);if(!(x>=A.current.count))return{replacements:new Map([[_.edge,F.path],[V.edge,f.path]]),crossings:x,bends:A.currentBends-(A.baseBendsByEdge.get(_.edge)??0)-(A.baseBendsByEdge.get(V.edge)??0)+F.totalBends+f.totalBends,length:A.currentLength-(A.baseLengthByEdge.get(_.edge)??0)-(A.baseLengthByEdge.get(V.edge)??0)+F.length+f.length}},"scorePairReplacement"),gn=a((A,_)=>A.crossings<_.crossings||A.crossings===_.crossings&&(A.bends<_.bends||A.bends===_.bends&&A.length<_.length),"pairScoreIsBetter"),mn=a((A,_,F,V)=>{let f=V;for(let x of _.candidates)for(let L of F.candidates){if(!ut(_,x,F,L))continue;let P=Pt(A,_,x,F,L);P&&gn(P,f)&&(f=P)}return f},"bestScoreForOptionPair"),pn=a(A=>{let _=B(),F=T(),V=Ee(),f=R(A),x=new Map(y.map(q=>[q,qe(m(q))])),L=new Map(y.map(q=>[q,w(m(q))])),P=new Map,C=S(A);for(let q of C)for(let j of q){if(P.has(j))continue;let X=Ue(j,A,V,f);X.length>0&&P.set(j,{edge:j,candidates:X})}let k={replacements:new Map,crossings:A.count,bends:_,length:F},U={current:A,currentBends:_,currentLength:F,baseBendsByEdge:x,baseLengthByEdge:L,baseSegments:V};for(let q of C){let j=new Set(q.filter(oe=>A.edgeSet.has(oe))),X=q.map(oe=>P.get(oe)).filter(oe=>!!oe);for(let oe=0;oe<X.length;oe++){let se=X[oe];for(let re=oe+1;re<X.length;re++){let ee=X[re];!j.has(se.edge)&&!j.has(ee.edge)||(k=mn(U,se,ee,k))}}}return k.replacements.size>0?k.replacements:void 0},"bestPairedReplacement");for(let A=0;A<4;A++){let _=N(),F=_.count;if(F===0)return;let V,f,x=F,L=Number.POSITIVE_INFINITY;for(let C of _.edges){let k=qe(m(C),Z);for(let U of xe(C)){let q=G(C,U),j=!q&&D(C,U),X=b(_,C,U),oe=qe(U,Z);q||j||!(X<F||X===F&&oe<k)||X>x||X===x&&oe>=L||(V=C,f=U,x=X,L=oe)}}if(V&&f){V.points=f;continue}let P=pn(_);if(!P)return;for(let[C,k]of P)C.points=k}}a(tr,"resolveRenderedOrthogonalCrossings");var xt=.001,Ls=8;function nr(e,t){let{nodeInfoById:n,realNodeRects:o}=At(t),r=["top","bottom","left","right"],s=20,i={top:Math.min(...o.map(d=>d.rect.top))-s,bottom:Math.max(...o.map(d=>d.rect.bottom))+s,left:Math.min(...o.map(d=>d.rect.left))-s,right:Math.max(...o.map(d=>d.rect.right))+s},u=a((d,h,N,I)=>{let E=[],O=Qt(d,h,N,I,s,xt);return O&&E.push(O),h===I&&E.push(en(d,h,N,i[h])),E},"buildOrthogonalPathCandidates"),c=a((d,h)=>{for(let N=0;N<d.length-1;N++){let I=d[N],E=d[N+1];if(Se(I,E,o,h,1))return!0}return!1},"pathHitsNode"),l=a((d,h,N=!1)=>{let I=0,E=ht(d,xt),O=h.start,S=h.end;for(let b of e){if(b===h||b.isLayoutOnly)continue;let R=b.start,w=b.end;if(!N&&O&&S&&(R===O||R===S||w===O||w===S))continue;let B=b.points;if(!(!B||B.length<2))for(let T of E)for(let D of ht(B,xt)){if(Pn(T.a,T.b,D.a,D.b,xt,xt)){I++;continue}it(T,D,xt)>=Ls&&I++}}return I},"pathConflictCount"),g=4,y=a((d,h)=>{let N=Math.abs(d.y-h.rect.top),I=Math.abs(d.y-h.rect.bottom),E=Math.abs(d.x-h.rect.left),O=Math.abs(d.x-h.rect.right),S="top",b=N;return I<b&&(S="bottom",b=I),E<b&&(S="left",b=E),O<b&&(S="right",b=O),S},"nearestSideOfRect"),M=new Map,p=a((d,h,N)=>{let I=M.get(d)??[];I.push({side:h,edgeId:N}),M.set(d,I)},"addFaceClaim");for(let d of e){if(d.isLayoutOnly)continue;let h=d.points??[];if(h.length<1)continue;let N=d.id??"",I=d.start,E=d.end;if(I){let O=n.get(I);O&&p(I,y(h[0],O),N)}if(E){let O=n.get(E);O&&p(E,y(h[h.length-1],O),N)}}let m=a((d,h,N)=>M.get(d)?.some(I=>I.edgeId!==N&&I.side===h)??!1,"faceIsClaimed");for(let d of e){if(d.isLayoutOnly)continue;let h=d.points;if(!h||h.length<2)continue;let N=qe(h,xt);if(N<g)continue;let I=d.start,E=d.end;if(!I||!E)continue;let O=n.get(I),S=n.get(E);if(!O||!S)continue;let b=d.id??"",R=l(h,d,!0),w=l(h,d),B,T=R,D=N;for(let G of r){if(m(I,G,b))continue;let v=yt(O,G);for(let z of r){if(m(E,z,b))continue;let Y=yt(S,z);for(let K of u(v,G,Y,z)){if(c(K,[I,E]))continue;let ae=qe(K,xt);if(R>0){let he=l(K,d,!0);if(he>T||he===T&&ae>=D)continue;T=he,D=ae,B=K;continue}l(K,d)>w||ae<D&&(D=ae,B=K)}}}if(B){d.points=B;let G=M.get(I);G&&M.set(I,G.filter(z=>z.edgeId!==b));let v=M.get(E);v&&M.set(E,v.filter(z=>z.edgeId!==b)),p(I,y(B[0],O),b),p(E,y(B[B.length-1],S),b)}}}a(nr,"simplifyDetouredEdges");var Ze=.001,or=10,rn=7;function rr(e,t){let n=t?0:e.length-1,o=t?1:-1,r=e[n],s=e[n+o];if(!r||!s)return;let i=s.x-r.x,u=s.y-r.y;if(!(Math.abs(i)+Math.abs(u)<Ze)){if(Math.abs(u)<=Ze){let l=r.x+Math.sign(i)*or;return{left:Math.min(r.x,l),right:Math.max(r.x,l),top:r.y-rn,bottom:r.y+rn}}if(Math.abs(i)<=Ze){let l=r.y+Math.sign(u)*or;return{left:r.x-rn,right:r.x+rn,top:Math.min(r.y,l),bottom:Math.max(r.y,l)}}return{left:Math.min(r.x,s.x),right:Math.max(r.x,s.x),top:Math.min(r.y,s.y),bottom:Math.max(r.y,s.y)}}}a(rr,"markerClearanceRectFor");function Ns(e){return{left:Math.min(e.left,e.right),right:Math.max(e.left,e.right),top:Math.min(e.top,e.bottom),bottom:Math.max(e.top,e.bottom)}}a(Ns,"normalizeRect");function sr(e,t){let n=le(t),o=rr(n,!0),r=rr(n,!1);return[o,r].some(s=>s&&Zt(e,Ns(s)))}a(sr,"labelOverlapsOwnMarker");function sn(e,t){let n=[];for(let m of e){if(m.isLayoutOnly)continue;let d=m.points;if(!(!d||d.length<2))for(let h=0;h<d.length-1;h++)n.push({edgeId:m.id,p1:d[h],p2:d[h+1]})}let o=[],r=[];for(let m of t.values()){let d=m.isGroup,h=m.parentId;if(d&&!h){let I=Ge(m);I&&r.push({id:m.id,rect:I});continue}if(d||m.isEdgeLabel)continue;let N=Ge(m);N&&o.push({nodeId:m.id,rect:N})}let s=3,i=1,u=12,c=a((m,d)=>{let h=En(d,s);for(let{nodeId:N,rect:I}of o)if(N!==m&&Zt(h,I))return!0;return!1},"labelOverlapsForeignNode"),l=a((m,d)=>{let h=En(d,s);for(let N of n)if(N.edgeId!==m&&_t(N.p1,N.p2,h))return!0;return!1},"labelOverlapsForeignEdge"),g=a((m,d,h)=>c(m,h)||l(d,h),"labelOverlapsAnything"),y=[],M=a(m=>{for(let{id:d,rect:h}of r)if(Co(h,m))return d},"findContainingLane"),p=a((m,d)=>y.some(h=>h.labelId!==m&&Zt(d,h.rect)),"overlapsPlacedLabel");for(let m of e){if(m.isLayoutOnly)continue;let d=m.labelNodeId;if(!d)continue;let h=t.get(d);if(!h)continue;let N=m.points;if(!N||N.length<2)continue;let I=h.width??0,E=h.height??0;if(I<=0||E<=0)continue;let O=[];for(let Q=0;Q<N.length-1;Q++){let W=N[Q],te=N[Q+1],fe=Math.abs(W.x-te.x),pe=Math.abs(W.y-te.y);fe<Ze&&pe<Ze||fe>=Ze&&pe>=Ze||O.push({idx:Q,length:fe+pe,orientation:fe>=Ze?"horizontal":"vertical",midX:(W.x+te.x)/2,midY:(W.y+te.y)/2})}if(O.length===0)continue;let S=O.length>=3?O.filter(Q=>Q.idx>0&&Q.idx<O.length-1):O,b=S.length>0?S:O,R=I>=E?"horizontal":"vertical",w=a(Q=>[...Q].sort((W,te)=>{let fe=W.orientation===R,pe=te.orientation===R;if(fe!==pe)return fe?-1:1;let xe=W.length>=(W.orientation==="horizontal"?I:E)+2,Ee=te.length>=(te.orientation==="horizontal"?I:E)+2;return xe!==Ee?xe?-1:1:te.length-W.length}),"rankSegments"),B=O[0],T=O[O.length-1],D=[.5,.25,.75,.05,.95,.15,.85,.1,.9],G=a((Q,W)=>{let te=N[Q.idx],fe=N[Q.idx+1];return{midX:te.x+(fe.x-te.x)*W,midY:te.y+(fe.y-te.y)*W}},"anchorAtT"),v=a((Q,W,te)=>Math.min(te,Math.max(W,Q)),"clamp"),z=a((Q,W)=>Q.midX>=W.left-Ze&&Q.midX<=W.right+Ze&&Q.midY>=W.top-Ze&&Q.midY<=W.bottom+Ze,"pointInsideRectInclusive"),Y=a(Q=>{let W=wt(Q.midX,Q.midY,I,E),te=M(W);if(te)return{laneId:te,anchor:Q,rect:W};let fe=r.find(({rect:nt})=>z(Q,nt));if(!fe)return;let pe=fe.rect.left+I/2+i,xe=fe.rect.right-I/2-i,Ee=fe.rect.top+E/2+i,Ve=fe.rect.bottom-E/2-i;if(pe>xe||Ee>Ve)return;let Ue={midX:v(Q.midX,pe,xe),midY:v(Q.midY,Ee,Ve)},We=wt(Ue.midX,Ue.midY,I,E);return z(Q,We)?{laneId:fe.id,anchor:Ue,rect:We}:void 0},"placementForAnchor"),K=a((Q,W,te)=>Q.orientation==="horizontal"?Math.abs(W.midX-te.x):Math.abs(W.midY-te.y),"distanceAlongSegment"),ae=a((Q,W)=>{let fe=(Q.orientation==="horizontal"?I/2:E/2)+u;if(Q===B){let pe=N[Q.idx];if(K(Q,W,pe)+Ze<fe)return!1}if(Q===T){let pe=N[Q.idx+1];if(K(Q,W,pe)+Ze<fe)return!1}return!0},"labelClearsTerminalEndpoints"),he=a(Q=>{let W=w(Q);for(let te of W)for(let fe of D){let pe=G(te,fe);if(!ae(te,pe))continue;let xe=Y(pe);if(xe&&!sr(xe.rect,N)&&!p(d,xe.rect)&&!g(d,m.id,xe.rect))return{laneId:xe.laneId,anchor:xe.anchor}}},"tryPool"),Oe=a((Q,W,te=!1)=>{let fe=w(Q);for(let pe of fe){let xe={midX:pe.midX,midY:pe.midY};if(W&&!ae(pe,xe))continue;let Ee=Y(xe);if(Ee&&!sr(Ee.rect,N)&&!p(d,Ee.rect)&&!c(d,Ee.rect)&&(te||!l(m.id,Ee.rect)))return{laneId:Ee.laneId,anchor:Ee.anchor}}},"findLaneContainingFallback"),Be=he(b)??(b.length<O.length?he(O):void 0)??Oe(O,!0)??Oe(O,!1)??Oe(O,!1,!0);if(Be){h.x=Be.anchor.midX,h.y=Be.anchor.midY,h.parentId=Be.laneId;let Q=wt(Be.anchor.midX,Be.anchor.midY,I,E),W=y.findIndex(te=>te.labelId===d);W>=0?y[W]={labelId:d,rect:Q}:y.push({labelId:d,rect:Q})}}}a(sn,"anchorLabelsToPolyline");var Gn=1e-6,Es=8,ir=Es/2,Ps=3;function ar(e,t){return e<t?`${e}::${t}`:`${t}::${e}`}a(ar,"pairKey");function cr(e,t){let{nodeInfoById:n,realNodeRects:o}=At(t),r=new Map;for(let i of t){let u=i.id;if(!i.isGroup&&i.isEdgeLabel){r.set(u,{w:i.width??0,h:i.height??0});continue}}let s=a((i,u,c,l)=>{let g=ar(u,c),y=0,M=a(p=>{if(!p)return;let m=r.get(p);if(!m)return;let d=l==="x"?m.w/2:m.h/2;d>y&&(y=d)},"consider");M(i.labelNodeId);for(let p of e){if(p===i||p.isLayoutOnly)continue;let m=p.start,d=p.end;!m||!d||ar(m,d)===g&&M(p.labelNodeId)}return y>0?y+Ps:0},"labelClearanceFor");for(let i of e){if(i.isLayoutOnly)continue;let u=i.points;if(!Jt(u,Gn))continue;let c=tn(i,n,Gn);if(!c)continue;let{srcId:l,dstId:g,srcInfo:y,dstInfo:M,collinearX:p,collinearY:m}=c;if(p===m)continue;let d,h;if(p){let S=M.cy>y.cy;d={x:y.cx,y:S?y.rect.bottom:y.rect.top},h={x:M.cx,y:S?M.rect.top:M.rect.bottom}}else{let S=M.cx>y.cx;d={x:S?y.rect.right:y.rect.left,y:y.cy},h={x:S?M.rect.left:M.rect.right,y:M.cy}}if(Se(d,h,o,[l,g],1))continue;let I=s(i,l,g,p?"x":"y"),E=I>ir?I:ir,O=[0,E,-E];for(let S of O){let b={...d},R={...h};if(p){if(b.x+=S,R.x+=S,b.x<=y.rect.left||b.x>=y.rect.right||R.x<=M.rect.left||R.x>=M.rect.right)continue}else if(b.y+=S,R.y+=S,b.y<=y.rect.top||b.y>=y.rect.bottom||R.y<=M.rect.top||R.y>=M.rect.bottom)continue;if(!Se(b,R,o,[l,g],1)&&!Ft(b,R,e,i,{epsilon:Gn})){i.points=[b,R];break}}}}a(cr,"straightenCollinearSiblingDetours");function Dn(e,t){let{realNodeRects:l,labelNodeRects:g}=ft(t.values()),y=a((b,R)=>ht(R,.001).map(w=>({...w,edge:b,interior:w.index>=1&&w.index<=R.length-3})),"segmentsFor"),M=a(()=>{let b=[];for(let R of e){if(R.isLayoutOnly)continue;let w=R.points;!w||w.length<2||b.push(...y(R,le(w)))}return b},"allSegments"),p=a((b,R)=>b.horizontal&&R.horizontal?Xe(b.a.x,b.b.x,R.a.x,R.b.x)>=8&&Math.abs(b.a.y-R.a.y)<7:b.vertical&&R.vertical?Xe(b.a.y,b.b.y,R.a.y,R.b.y)>=8&&Math.abs(b.a.x-R.a.x)<7:!1,"hasCrowdedParallelTrack"),m=a((b,R)=>{let w=b.start,B=b.end,T=y(b,R);if(T.length!==R.length-1)return!1;let D=[w,B].filter(v=>!!v),G=b.labelNodeId?[b.labelNodeId]:[];for(let v of T)if(Se(v.a,v.b,l,D,-2)||Se(v.a,v.b,g,G,-2))return!1;for(let v of e){if(v===b||v.isLayoutOnly)continue;let z=v.points;if(!(!z||z.length<2)){for(let Y of T)for(let K of y(v,le(z)))if(p(Y,K)||at(Y.a,Y.b,K.a,K.b,.001))return!1}}return!0},"candidateIsSafe"),d=a((b,R)=>{let w=le(b.edge.points??[]);if(w.length<4||b.index>=w.length-1)return;let B=w.map(T=>({...T}));if(b.horizontal)B[b.index].y+=R,B[b.index+1].y+=R;else if(b.vertical)B[b.index].x+=R,B[b.index+1].x+=R;else return;return y(b.edge,B).length===B.length-1?B:void 0},"shiftedCandidate"),h=a((b,R)=>({x:b.x??(R.left+R.right)/2,y:b.y??(R.top+R.bottom)/2}),"nodeCenter"),N=a(b=>{let R=b.edge,w=le(R.points??[]);if(w.length!==4||b.index!==1)return;let B=R.start?t.get(R.start):void 0,T=R.end?t.get(R.end):void 0,D=B?Ge(B):void 0,G=T?Ge(T):void 0,v=w.slice(b.index+2);if(!(!B||!T||!D||!G||v.length===0))return{sourceCenter:h(B,D),targetCenter:h(T,G),sourceRect:D,tail:v}},"sourceDetourContextFor"),I=a((b,R,w,B,T,D)=>{let G=B.y>=w.y,v=G?T.bottom:T.top,z=v+(G?20:-20);if(G&&b.b.y<=z+.001||!G&&b.b.y>=z-.001)return;let Y=b.a.x+R;return le([{x:w.x,y:v},{x:w.x,y:z},{x:Y,y:z},{x:Y,y:b.b.y},...D],.001)},"verticalSourceDetour"),E=a((b,R,w,B,T,D)=>{let G=B.x>=w.x,v=G?T.right:T.left,z=v+(G?20:-20);if(G&&b.b.x<=z+.001||!G&&b.b.x>=z-.001)return;let Y=b.a.y+R;return le([{x:v,y:w.y},{x:z,y:w.y},{x:z,y:Y},{x:b.b.x,y:Y},...D],.001)},"horizontalSourceDetour"),O=a((b,R)=>{let w=N(b);if(w){if(b.vertical)return I(b,R,w.sourceCenter,w.targetCenter,w.sourceRect,w.tail);if(b.horizontal)return E(b,R,w.sourceCenter,w.targetCenter,w.sourceRect,w.tail)}},"sourceDetourCandidate"),S=[-7,7,-14,14,-21,21];for(let b=0;b<12;b++){let R=M(),w=!1;for(let B=0;B<R.length&&!w;B++)for(let T=B+1;T<R.length&&!w;T++){let D=R[B],G=R[T];if(D.edge===G.edge||!p(D,G))continue;let v=[D,G].filter(z=>z.interior);for(let z of v){for(let Y of S){let K=d(z,Y);if(K&&m(z.edge,K)){z.edge.points=K,w=!0;break}let ae=O(z,Y);if(ae&&m(z.edge,ae)){z.edge.points=ae,w=!0;break}}if(w)break}}if(!w)return}}a(Dn,"nudgeSharedInteriorSubpaths");function Rs(e,t,n,o){let r=t.x-e.x,s=t.y-e.y,i=o.x-n.x,u=o.y-n.y,c=r*u-s*i;if(Math.abs(c)<1e-10)return!1;let l=n.x-e.x,g=n.y-e.y,y=(l*u-g*i)/c,M=(l*s-g*r)/c,p=.01;return y>p&&y<1-p&&M>p&&M<1-p}a(Rs,"segmentsIntersect");function _n(e){let t=e.nodes??[],n=e.edges??[],o=[];if(!n.length||!t.length)return o;let r=To(t),s=1,i=[];for(let c of n){if(c.isLayoutOnly)continue;let l=c.points;if(!l||l.length<2)continue;let g=c.start,y=c.end,M=c.labelNodeId,p=c.id??`${g}->${y}`;for(let m of r)if(!(m.nodeId===g||m.nodeId===y)&&!(M&&m.nodeId===M)){for(let d=0;d<l.length-1;d++)if(_t(l[d],l[d+1],m,-s)){o.push({type:"edge-node-overlap",edgeId:p,targetId:m.nodeId,detail:`segment ${d} passes through node "${m.nodeId}"`});break}}for(let m=0;m<l.length-1;m++)i.push({edgeId:p,start:g,end:y,p1:l[m],p2:l[m+1]})}let u=new Set;for(let c=0;c<i.length;c++)for(let l=c+1;l<i.length;l++){let g=i[c],y=i[l];if(g.edgeId!==y.edgeId&&!(g.start===y.start||g.start===y.end||g.end===y.start||g.end===y.end)&&Rs(g.p1,g.p2,y.p1,y.p2)){let M=g.edgeId<y.edgeId?`${g.edgeId}|${y.edgeId}`:`${y.edgeId}|${g.edgeId}`;u.has(M)||(u.add(M),o.push({type:"edge-edge-crossing",edgeId:g.edgeId,targetId:y.edgeId,detail:`edges "${g.edgeId}" and "${y.edgeId}" cross`}))}}if(o.length>0){let c=o.filter(g=>g.type==="edge-node-overlap").length,l=o.filter(g=>g.type==="edge-edge-crossing").length;Mt.warn(`[SWIMLANE_VALIDATE] ${o.length} issue(s) detected: ${c} edge-node overlap(s), ${l} edge crossing(s)`);for(let g of o)Mt.warn(`[SWIMLANE_VALIDATE]   ${g.type}: ${g.detail}`)}return o}a(_n,"validateSwimlanesLayout");function dr(e,t){let n=e.nodes??[],o=e.edges??[],r=n.filter(u=>!u.isGroup);if((t==="LR"||t==="RL")&&r.length>0&&!Uo(e,t)||t==="BT"&&r.length>0&&!Vo(e))return;for(let u of o){if(u.isLayoutOnly)continue;let c=u.points;!c||c.length<2||(u.points=rt(zt(c)))}nr(o,n),cr(o,n),Wo(o,n);let s=new Map;for(let u of n)s.set(String(u.id),u);sn(o,s),Ho(o,s),Ko(o,s),Dn(o,s),Jo(o,s),qo(o,s),vn(o,s),Zo(o,s);let i=a(()=>{tr(o,s),Qo(o,s),er(o,s),sn(o,s),On(o,s),vn(o,s),sn(o,s),On(o,s)},"finalizeRenderedEdges");i(),Dn(o,s),i(),Bn(o,s),kn(o,s),Bn(o,s),kn(o,s)}a(dr,"postProcessSwimlaneLayout");function Qe(e){let t=new Map(e.nodeById),n=new Set,o=[];for(let s of e.edges){if(!t.has(s.src)||!t.has(s.dst))continue;let i=`${s.id}:${s.src}->${s.dst}`;n.has(i)||(n.add(i),o.push(s))}return{nodes:[...t.keys()],edges:o,layout:e.layout,nodeById:t}}a(Qe,"normalizeGraph");function an(e,t){return e.edges.filter(n=>n.dst===t)}a(an,"incoming");function Cs(e){let t=new Map;for(let n of e.nodes)t.set(n,[]);for(let n of e.edges)t.get(n.src).push(n.dst);return t}a(Cs,"buildSuccessorMap");function Fn(e){let t=Cs(e);for(let n of t.values())n.sort((o,r)=>o.localeCompare(r));return t}a(Fn,"buildSortedSuccessorMap");function zn(e){let t=new Map;for(let n of e.nodes)t.set(n,0);for(let n of e.edges)t.set(n.dst,(t.get(n.dst)??0)+1);return t}a(zn,"buildInDegreeMap");function Hn(e){return[...e.entries()].filter(([,t])=>t===0).map(([t])=>t).sort((t,n)=>t.localeCompare(n))}a(Hn,"sortedZeroInDegreeNodes");function vt(e,t=()=>!0){let n=new Map,o=new Map;for(let r of e.nodes)n.set(r,[]),o.set(r,[]);for(let r of e.edges)t(r)&&(o.get(r.src).push(r.dst),n.get(r.dst).push(r.src));return{preds:n,succs:o}}a(vt,"buildPredecessorSuccessorMaps");function cn(e,t,n,o){let r=0;for(let i of e.nodes)o?.skipGroups&&e.nodeById.get(i)?.isGroup||(r=Math.max(r,n[i]??0));let s=Array.from({length:r+1},()=>[]);for(let i of t)o?.skipGroups&&e.nodeById.get(i)?.isGroup||s[Math.max(0,n[i]??0)].push(i);return s}a(cn,"buildLayersFromRanks");function bt(e){let t=zn(e),n=Hn(t),o=[],r=Fn(e);for(;n.length;){let s=n.shift();o.push(s);for(let i of r.get(s)??[])if(t.set(i,(t.get(i)??0)-1),(t.get(i)??0)===0){let u=0;for(;u<n.length&&n[u]<i;)u++;n.splice(u,0,i)}}return o.length===e.nodes.length?o:null}a(bt,"topoSortIfAcyclic");function St(e){let t=new Map,n=0;for(let o of e)t.set(o,n),n++;return t}a(St,"buildLayerIndex");function dn(e){let t=new Array(e.length),n=a((o,r)=>{if(r-o<=1)return 0;let s=o+r>>1,i=n(o,s)+n(s,r),u=o,c=s,l=o;for(;u<s||c<r;)c>=r||u<s&&e[u]<=e[c]?t[l++]=e[u++]:(t[l++]=e[c++],i+=s-u);for(let g=o;g<r;g++)e[g]=t[g];return i},"count");return n(0,e.length)}a(dn,"countInversions");function lr(e){let t=Qe(e),n=new Map;for(let g of t.nodes)n.set(g,[]);for(let g of t.edges)n.get(g.src).push(g);for(let g of n.values())g.sort((y,M)=>y.dst===M.dst?y.id.localeCompare(M.id):y.dst.localeCompare(M.dst));let o=Object.create(null);for(let g of t.nodes)o[g]=0;let r=[],s=a(g=>{o[g]=1;for(let y of n.get(g)??[]){let M=y.dst;o[M]===0?s(M):o[M]===1&&r.push(y)}o[g]=2},"dfs"),i=[...t.nodes].sort((g,y)=>g.localeCompare(y));for(let g of i)o[g]===0&&s(g);let u=new Set(r.map(g=>`${g.id}:${g.src}->${g.dst}`)),c=t.edges.map(g=>u.has(`${g.id}:${g.src}->${g.dst}`)?{id:g.id,src:g.dst,dst:g.src,weight:g.weight,ref:g.ref}:g);return{acyclic:{nodes:[...t.nodes],edges:c,layout:t.layout,nodeById:new Map(t.nodeById)},reversed:r}}a(lr,"removeCycles_DFS");function Ts(e){let t=new Map,n=a(o=>{if(t.has(o))return t.get(o);let r=e.nodeById.get(o);if(!r)return t.set(o,null),null;let s=r.parentId;if(!s)return t.set(o,null),null;let u=n(s)??s;return t.set(o,u),u},"resolve");for(let o of e.nodes)n(o);return t}a(Ts,"buildTopLaneMap");function Ye(e){let t=Ts(e);return n=>t.get(n)??null}a(Ye,"createTopLaneResolver");function ln(e){let t=[];for(let n of e.layout.nodes??[])n.isGroup&&!n.parentId&&t.push(n.id);return[...new Set(t)].reverse()}a(ln,"buildTopLaneOrder");function fn(e,t){let n=ln(e);if(!t||t.length===0)return n;let o=new Set(n),r=new Set,s=[];for(let i of t)!o.has(i)||r.has(i)||(r.add(i),s.push(i));for(let i of n)r.has(i)||s.push(i);return s}a(fn,"resolveTopLaneOrder");var fr={EPSILON:1e-6},Lt={GRAVITY_ITERATIONS:8,MAX_CROSSING_OPTIMIZATION_PASSES:4,DEFAULT_COMPACT_SINGLE_INPUT:!0},Xn={DEFAULT_LAYER_GAP:100,DEFAULT_NODE_GAP:40};function ur(e,t){let n=Qe(e),o=t?.laneOf??(()=>null),r=t?.rankHint,{preds:s}=vt(n);for(let S of s.values())S.sort((b,R)=>b.localeCompare(R));let i=bt(n)??[...n.nodes].sort((S,b)=>S.localeCompare(b)),u=new Map;for(let[S,b]of i.entries())u.set(b,S);let c=new Map,l=new Map;for(let S of n.nodes)l.set(S,[]);for(let S of i){let b=(s.get(S)??[]).filter(R=>c.has(R));if(b.length>0){let R=Os(S,b,{laneOf:o,rankHint:r,topoIndex:u});c.set(S,R),l.get(R).push(S)}else c.has(S)||c.set(S,null)}for(let S of n.nodes)c.has(S)||c.set(S,null);let g=new Set;for(let S of n.nodes)(c.get(S)??null)===null&&g.add(S);let y=[...g].sort((S,b)=>{let R=u.get(S)??0,w=u.get(b)??0;return R===w?S.localeCompare(b):R-w}),M=ws(n),p=new Map;for(let[S,b]of M.entries())p.set(S,[...b].sort((R,w)=>R.localeCompare(w)));let m=As(p),d=vs(p),h=new Map;for(let S of n.nodes)h.set(S,[]);for(let S of d)for(let b of S.nodes){let R=h.get(b);R?R.push(S.id):h.set(b,[S.id])}let N=[],I=[],E=new Set,O=a(S=>{if(!E.has(S)){E.add(S),N.push(S);for(let b of l.get(S)??[])O(b);I.push(S)}},"walk");for(let S of y)O(S);for(let S of i)O(S);return{parent:c,children:l,roots:y,componentOf:m,blocks:d,nodeBlocks:h,adjacency:p,preorder:N,postorder:I,topologicalOrder:i}}a(ur,"buildDrivingTree");function Os(e,t,n){let o=n.laneOf(e);return[...t].sort((s,i)=>{let u=n.laneOf(s),c=n.laneOf(i),l=u!=null&&u===o,g=c!=null&&c===o;if(l!==g)return l?-1:1;let y=n.rankHint?.[s],M=n.rankHint?.[i];if(y!=null&&M!=null&&y!==M)return M-y;let p=n.topoIndex.get(s)??0,m=n.topoIndex.get(i)??0;return p!==m?p-m:s.localeCompare(i)})[0]}a(Os,"chooseParent");function ws(e){let t=new Map;for(let n of e.nodes)t.set(n,new Set);for(let n of e.edges)t.get(n.src).add(n.dst),t.get(n.dst).add(n.src);return t}a(ws,"buildAdjacency");function As(e){let t=new Map,n=0;for(let o of e.keys()){if(t.has(o))continue;let r=[o];for(;r.length>0;){let s=r.pop();if(!t.has(s)){t.set(s,n);for(let i of e.get(s)??[])t.has(i)||r.push(i)}}n++}return t}a(As,"assignComponents");function vs(e){let t=new Map,n=new Map,o=[],r=[],s=0,i=a((u,c)=>{t.set(u,++s),n.set(u,s);for(let l of e.get(u)??[])l!==c&&(t.has(l)?(t.get(l)??0)<(t.get(u)??0)&&(o.push([u,l]),n.set(u,Math.min(n.get(u)??s,t.get(l)??s))):(o.push([u,l]),i(l,u),n.set(u,Math.min(n.get(u)??s,n.get(l)??s)),(n.get(l)??0)>=(t.get(u)??0)&&r.push(Bs(u,l,o,r.length))))},"visit");for(let u of e.keys())t.has(u)||i(u,null);return r}a(vs,"computeBlocks");function Bs(e,t,n,o){let r=[],s=new Set;for(;n.length>0;){let i=n.pop();if(r.push(i),s.add(i[0]),s.add(i[1]),i[0]===e&&i[1]===t||i[0]===t&&i[1]===e)break}return{id:o,edges:r,nodes:[...s]}}a(Bs,"popBlock");function gr(e,t,n){let o=[...e.nodes],r=new Map;for(let[I,E]of o.entries())r.set(E,I);let s=o.length,i=new Array(s).fill(-1),u=new Array(s).fill(0),c=[],l=new Set;for(let I of o){let E=n.parent.get(I)??null,O=r.get(I);O!=null&&E==null&&(i[O]=-1,u[O]=0,l.has(I)||(l.add(I),c.push(I)))}for(;c.length>0;){let I=c.shift(),E=r.get(I);if(E==null)continue;let O=n.children.get(I)??[];for(let S of O){if(l.has(S))continue;let b=r.get(S);b!=null&&(i[b]=E,u[b]=u[E]+1,l.add(S),c.push(S))}}for(let I of o){if(l.has(I))continue;let E=r.get(I);E!=null&&(i[E]=-1,u[E]=0,l.add(I))}let g=Math.max(1,Math.ceil(Math.log2(Math.max(1,s)))+1),y=Array.from({length:g},()=>new Array(s).fill(-1));for(let I=0;I<s;I++)y[0][I]=i[I];for(let I=1;I<g;I++)for(let E=0;E<s;E++){let O=y[I-1][E];y[I][E]=O===-1?-1:y[I-1][O]}let M=a((I,E)=>{if(I===-1||E===-1)return-1;u[I]<u[E]&&([I,E]=[E,I]);let O=u[I]-u[E];for(let S=0;S<g;S++)if(O>>S&1&&(I=y[S][I],I===-1))return-1;if(I===E)return I;for(let S=g-1;S>=0;S--){let b=y[S][I],R=y[S][E];b===-1||R===-1||b!==R&&(I=b,E=R)}return y[0][I]},"lcaIndex"),p=Array.from({length:s},()=>new Map);for(let I of e.edges){let E=I.src,O=I.dst,S=t[E],b=t[O];if(S==null||b==null||(S>b&&([E,O]=[O,E],[S,b]=[b,S]),S==null||b==null||S===b))continue;let R=r.get(E),w=r.get(O);if(R==null||w==null)continue;let B=M(R,w);if(B===-1)continue;let T=p[B];for(let D=S;D<b;D++)T.set(D,(T.get(D)??0)+1)}let m=new Map,d=a((I,E)=>{if(E.size!==0)for(let[O,S]of E)I.set(O,(I.get(O)??0)+S)},"mergeInto"),h=new Set,N=a(I=>{let E=r.get(I);h.add(I);let O=E==null?void 0:p[E],S=O?new Map(O):new Map,b=n.children.get(I)??[];for(let R of b){let w=N(R),B=t[I];if(B!=null){let T=m.get(I);T||(T=new Map,m.set(I,T));let D=w.get(B)??0,G=t[R];G!=null&&G>B&&(D+=1),T.set(R,D)}d(S,w)}return S},"dfs");for(let I of n.roots)h.has(I)||N(I);for(let I of o)h.has(I)||N(I);return m}a(gr,"computeSubtreeCrossCounts");function mr(e,t,n){let o=new Map,r=a(s=>{let i=n[s]??0,u=[...t.get(s)??[]];u.sort(Yn(n));for(let c of u){r(c);let l=o.get(c);l!=null&&(i=Math.min(i,l))}o.set(s,i)},"annotate");for(let s of e)r(s);return o}a(mr,"annotateMinimumLayers");function Yn(e){return(t,n)=>{let o=e[t]??0,r=e[n]??0;return o===r?t.localeCompare(n):o-r}}a(Yn,"compareByRankThenId");function pr(e,t,n,o){let r=0;for(let c of t){let l=n[c]??0;l>r&&(r=l)}let s=Array.from({length:r+1},()=>[]),i=new Set,u=a(c=>{if(i.has(c))return;i.add(c);let l=n[c]??0;s[l]||(s[l]=[]),s[l].push(c);for(let g of o(c))u(g)},"emit");for(let c of e)u(c);for(let c of t)if(!i.has(c)){let l=n[c]??0;s[l]||(s[l]=[]),s[l].push(c),i.add(c)}return s}a(pr,"emitNodesInTreeOrder");function hr(e){let t=[];for(let n of e){let o=new Set,r=[];for(let s of n)o.has(s)||(o.add(s),r.push(s));t.push(r)}return t}a(hr,"deduplicateLayers");function ks(e,t,n,o){return r=>{let s=e.get(r)??[];if(s.length===0)return[];let i=t[r]??0,u=[],c=[],l=n.get(r);for(let g of s){let y=o.get(g)??i;y>i?u.push({child:g,min:y}):c.push(g)}return u.sort((g,y)=>g.min===y.min?g.child.localeCompare(y.child):g.min-y.min),c.sort((g,y)=>{let M=l?.get(g)??0,p=l?.get(y)??0;if(M!==p)return M-p;let m=o.get(g)??i,d=o.get(y)??i;return m!==d?m-d:g.localeCompare(y)}),[...u.map(g=>g.child),...c]}}a(ks,"createChildOrderer");function Ht(e,t,n){let o=ur(e,{rankHint:t,laneOf:n}),{children:r,roots:s}=o;for(let y of e.nodes)r.has(y)||r.set(y,[]);let i=gr(e,t,o),u=[...s].sort(Yn(t)),c=mr(u,r,t),l=ks(r,t,i,c),g=pr(u,e.nodes,t,l);return g=hr(g),g}a(Ht,"buildMultitreeLayerOrder");function Gs(e,t,n){let o=new Set(e),r=new Set(t),s=St(t),i=[];for(let u of n)o.has(u.src)&&r.has(u.dst)&&i.push(s.get(u.dst));return dn(i)}a(Gs,"countCrossingsBetweenAdjacent");function yr(e,t,n){let o=[];for(let s of t){let i=n[s.src],u=n[s.dst];if(i==null||u==null||i===u)continue;let c=s.src,l=s.dst,g=i,y=u;i>u&&(c=s.dst,l=s.src,g=u,y=i);for(let M=g;M<y;M++)o.push({id:`${s.id}@${M}`,src:c,dst:l,ref:s.ref})}let r=0;for(let s=0;s+1<e.length;s++)r+=Gs(e[s],e[s+1],o);return r}a(yr,"totalCrossings");function xr(e,t){let n={...t},{preds:o}=vt(e),r=Ye(e),s=Ht(e,n,r),i=yr(s,e.edges,n),u=Lt.MAX_CROSSING_OPTIMIZATION_PASSES;for(let c=0;c<u;c++){let l=!1,g=[...e.nodes].sort((y,M)=>(n[M]??0)-(n[y]??0));for(let y of g){let M=n[y]??0;if(M===0)continue;let p=0;for(let N of o.get(y)??[])p=Math.max(p,(n[N]??0)+1);if(p>=M)continue;let m=M;n[y]=p;let d=Ht(e,n,r),h=yr(d,e.edges,n);h<i?(i=h,l=!0):n[y]=m}if(!l)break}return n}a(xr,"optimizeRanksByCrossings");function br(e,t){let n=Ye(e),o=[...e.nodes].sort((r,s)=>(t[r]??0)-(t[s]??0)||r.localeCompare(s));for(let r of o){let s=n(r);if(!s)continue;let i=e.edges.filter(d=>d.src===r);if(i.length===0)continue;let u=!1,c=0;for(let d of i){let h=n(d.dst);h==null||h===s?u=!0:c++}if(c===0||u)continue;let l=0,g=!1;for(let d of e.edges){if(d.dst!==r)continue;let h=n(d.src);h&&(h===s?g=!0:l++)}if(l>0||!g)continue;let y=t[r]??0,M=y+c,p=0;for(let d of e.edges)d.dst===r&&(p=Math.max(p,(t[d.src]??0)+1));let m=Math.max(y,p,M);m!==y&&(t[r]=m)}}a(br,"adjustCrossLaneSources");function Ir(e,t){let n=Qe(e),o=bt(n)??[...n.nodes].sort(),r=t?.compactSingleInput??!1,s=Ye(n),i=Object.create(null);for(let c of o){let l=an(n,c),g=t?.ignoreCrossLaneEdges?l.filter(y=>{let M=s(y.src),p=s(c);return!M||!p?!0:M===p}):l;if(g.length===0)i[c]=0;else if(r&&g.length===1){let y=g[0].src,M=s(y),p=s(c);M!==p?i[c]=i[y]??0:i[c]=(i[y]??0)+1}else{let y=-1/0;for(let M of g)y=Math.max(y,(i[M.src]??0)+1);i[c]=y===-1/0?0:y}}return(t?.optimizeRanksByCrossings??!1)&&(i=xr(n,i)),t?.ignoreCrossLaneEdges&&br(n,i),{layers:Ht(n,i,s),rankOf:i,dummy:new Set}}a(Ir,"assignLayers_LongestPath");function Mr(e,t){let n=Qe(e),r={...Ir(n,{compactSingleInput:t?.compactSingleInput,ignoreCrossLaneEdges:t?.ignoreCrossLaneEdges,optimizeRanksByCrossings:t?.optimizeRanksByCrossings}).rankOf},s=Ye(n),{preds:i,succs:u}=vt(n,m=>{if(t?.ignoreCrossLaneEdges){let d=s(m.src),h=s(m.dst);if(d&&h&&d!==h)return!1}return!0}),c=bt(n)??[...n.nodes],l=[...c].reverse(),g=a((m,d)=>{let h=0;for(let E of i.get(m)??[])h=Math.max(h,(r[E]??0)+1);let N=Number.POSITIVE_INFINITY,I=u.get(m)??[];return I.length>0&&(N=Math.min(...I.map(E=>(r[E]??0)-1))),Number.isFinite(N)||(N=Math.max(h,d)),Math.min(Math.max(d,h),N)},"clampFeasible"),y=Lt.GRAVITY_ITERATIONS,M=a(m=>{let d=!1;for(let h of m){let N=i.get(h)??[],I=u.get(h)??[];if(N.length===0&&I.length===0)continue;let E=N.length>0?N.reduce((R,w)=>R+(r[w]??0)+1,0)/N.length:r[h]??0,O=I.length>0?I.reduce((R,w)=>R+(r[w]??0)-1,0)/I.length:r[h]??0,S=Math.round((E+O)/2),b=g(h,S);b!==r[h]&&(r[h]=b,d=!0)}return d},"relaxOrder");for(let m=0;m<y;m++){let d=M(c),h=M(l);if(!d&&!h)break}for(let m of c){let d=0;for(let h of i.get(m)??[])d=Math.max(d,(r[h]??0)+1);(r[m]??0)<d&&(r[m]=d)}for(let m of l){let d=u.get(m)??[];if(d.length>0){let h=Math.min(...d.map(N=>(r[N]??0)-1));(r[m]??0)>h&&(r[m]=h)}}return{layers:cn(n,c,r),rankOf:r,dummy:new Set}}a(Mr,"assignLayers_Gravity");function Ds(e){let t=zn(e),n=Fn(e),o=Hn(t),r=[];for(;o.length>0;){let s=[];for(let i of o){r.push(i);for(let u of n.get(i)??[])t.set(u,(t.get(u)??0)-1),(t.get(u)??0)===0&&s.push(u)}o=s.sort((i,u)=>i.localeCompare(u))}return r.length===e.nodes.length?r:null}a(Ds,"topoSortByGenerationIfAcyclic");function Sr(e,t){let n=Qe(e),o=t?.direction==="LR"?Ds(n)??[...n.nodes].sort():bt(n)??[...n.nodes].sort(),r=Ye(n),s=a(g=>r(g)??g,"laneOf"),i=Object.create(null),u=new Map,c=a((g,y)=>t?.ignoreCrossLaneEdges??!0?s(g)===s(y)?1:0:1,"edgeWeight");for(let g of o){if(n.nodeById.get(g)?.isGroup)continue;let M=an(n,g),p=0;if(M.length>0)for(let N of M){let I=N.src,E=i[I]??0;p=Math.max(p,E+c(I,g))}let m=s(g),d=u.get(m)??0,h=Math.max(p,d);i[g]=h,u.set(m,h+1)}return{layers:cn(n,o,i,{skipGroups:!0}),rankOf:i,dummy:new Set}}a(Sr,"assignLayers_LaneAwareCompact");function Lr(e,t){let n=Qe(t),{rankOf:o}=e,r=e.layers.map(p=>[...p]),s=new Set(e.dummy?[...e.dummy]:[]),i=0,u=new Map(n.nodeById),c=a(p=>{let m=`placeholder-${i++}`,d={id:m,isGroup:!1,isDummy:!0,width:0,height:0};for(u.set(m,d),s.add(m);r.length<=p;)r.push([]);return r[p].push(m),o[m]=p,m},"addDummyAt"),l=[...n.edges].sort((p,m)=>p.id===m.id?p.src===m.src?p.dst.localeCompare(m.dst):p.src.localeCompare(m.src):p.id.localeCompare(m.id)),g=[];for(let p of l){let m=o[p.src]??0,d=o[p.dst]??0;if(d-m<=1){g.push(p);continue}let h=p.src;for(let I=m+1,E=0;I<d;I++,E++){let O=c(I);g.push({id:`${p.id}#${E}`,src:h,dst:O,weight:p.weight,ref:p.ref}),h=O}let N=d-m-2;g.push({id:`${p.id}#${Math.max(N+1,0)}`,src:h,dst:p.dst,weight:p.weight,ref:p.ref})}let M={nodes:[...n.nodes,...[...s].filter(p=>!n.nodes.includes(p))],edges:g,layout:n.layout,nodeById:u};return{layering:{layers:r,rankOf:o,dummy:s},graphWithDummies:M}}a(Lr,"makeProperLayering");function Nr(e){let t=e.length;if(t===0)return Number.POSITIVE_INFINITY;let n=[...e].sort((o,r)=>o-r);return t%2===1?n[(t-1)/2]:.5*(n[t/2-1]+n[t/2])}a(Nr,"median");function Er(e){return e.length===0?Number.POSITIVE_INFINITY:e.reduce((n,o)=>n+o,0)/e.length}a(Er,"barycenter");function _s(e,t,n,o){let r=new Map;for(let s of e)r.set(s,[]);for(let s of n)o==="down"?t.has(s.src)&&r.has(s.dst)&&r.get(s.dst).push(t.get(s.src)):t.has(s.dst)&&r.has(s.src)&&r.get(s.src).push(t.get(s.dst));return r}a(_s,"neighborPositionsFor");function Fs(e,t,n){let o=n.get(e)??0,r=n.get(t)??0;return o!==r?o-r:e.localeCompare(t)}a(Fs,"currentOrderTieBreak");function Pr(e,t,n){let o=new Set(e),r=new Set(t),s=St(e),i=St(t),u=[];for(let l of n)o.has(l.src)&&r.has(l.dst)&&u.push({u:s.get(l.src),v:i.get(l.dst)});u.sort((l,g)=>l.u===g.u?l.v-g.v:l.u-g.u);let c=u.map(l=>l.v);return dn(c)}a(Pr,"countCrossingsBetweenAdjacent");function $n(e,t,n){return[...e].sort((o,r)=>{let s=Nr(t.get(o)??[]),i=Nr(t.get(r)??[]);return s===i?Fs(o,r,n):isFinite(s)?isFinite(i)?s-i:-1:1})}a($n,"sortByHeuristic");function Rr(e,t,n,o,r,s){let i=St(e),u=St(t),c=_s(t,i,n,o);if(!r||!s||s.length===0)return $n(t,c,u);let l=new Map;for(let M of t){let p=r(M),m=l.get(p)??[];m.push(M),l.set(p,m)}let g=[];for(let M of s){let p=l.get(M);if(!p||p.length===0)continue;let m=$n(p,c,u);g.push(...m)}let y=l.get(null);if(y&&y.length>0){let M=$n(y,c,u);for(let p of M){let m=Er(c.get(p)??[]),d=g.length;if(isFinite(m))for(let[h,N]of g.entries()){let I=Er(c.get(N)??[]);if(m<I){d=h;break}}g.splice(d,0,p)}}return g}a(Rr,"reorderLayer");function Cr(e,t,n,o,r){let s=[...t],i=new Set(e),u=new Set(t),c=o?new Set(o):null,l=n.filter(d=>i.has(d.src)&&u.has(d.dst)),g=c?n.filter(d=>u.has(d.src)&&c.has(d.dst)):void 0,y=a(d=>{let h=Pr(e,d,l);return g&&o&&(h+=Pr(d,o,g)),h},"crossingScore"),M=r?new Map:null;if(r&&M)for(let d of t)M.set(d,r(d));let p=!0,m=y(s);for(;p;){p=!1;for(let d=0;d+1<s.length;d++){if(M){let I=M.get(s[d]),E=M.get(s[d+1]);if(I!==E)continue}let h=m;[s[d],s[d+1]]=[s[d+1],s[d]];let N=y(s);N<h?(m=N,p=!0):[s[d],s[d+1]]=[s[d+1],s[d]]}}return s}a(Cr,"transposeImprove");function Tr(e,t,n){let o=e.layers.map(u=>[...u]),r=t.edges,s=Ye(t),i=fn(t,n?.laneOrder);for(let u=0;u<3;u++){for(let c=1;c<o.length;c++)o[c]=Rr(o[c-1],o[c],r,"down",s,i),o[c]=Cr(o[c-1],o[c],r,o[c+1],s);for(let c=o.length-2;c>=0;c--)o[c]=Rr(o[c+1],o[c],r,"up",s,i),o[c]=Cr(o[c+1],o[c],r,o[c-1],s)}return{layers:o}}a(Tr,"orderLayers");function Or(e,t,n){let o=n?.layerGap??Xn.DEFAULT_LAYER_GAP,r=n?.nodeGap??Xn.DEFAULT_NODE_GAP,s=n?.laneGap??r*2,i=n?.direction??"TB",u=i==="LR"||i==="RL",c=e.layers,l=Object.create(null),g=Object.create(null),y=a(T=>t.nodeById.get(T),"getNode"),M=a(T=>y(T)?.width??0,"getWidth"),p=a(T=>y(T)?.height??0,"getHeight"),m=Ye(t),d=fn(t,n?.laneOrder),h=c.map(T=>T.reduce((D,G)=>Math.max(D,p(G)),0)),N=[];if(u)for(let T=0;T+1<c.length;T++){let D=c[T].reduce((he,Oe)=>Math.max(he,M(Oe)),0),G=c[T+1].reduce((he,Oe)=>Math.max(he,M(Oe)),0),v=h[T],z=h[T+1],Y=v/2+z/2,K=(D+G)/2,ae=Math.max(0,K-Y-o);N.push(ae)}let I=new Set;for(let T of c)for(let D of T)I.add(m(D));let E=I.has(null),O=d.filter(T=>I.has(T)),S=[...E?[null]:[],...O],b=Object.create(null);for(let T of O)b[T]=0;E&&(b.null=0);for(let T of c){let D=Object.create(null),G=[];for(let v of T){let z=m(v);z===null?G.push(v):(D[z]||=[]).push(v)}for(let[v,z]of Object.entries(D)){let Y=z.reduce((K,ae)=>K+M(ae),0)+r*Math.max(0,z.length-1);b[v]=Math.max(b[v]??0,Y)}if(E&&G.length){let v=G.reduce((z,Y)=>z+M(Y),0)+r*Math.max(0,G.length-1);b.null=Math.max(b.null??0,v)}}let R=new Map;{let T=S.map(v=>(v===null?b.null:b[v])??0),G=-(T.reduce((v,z)=>v+z,0)+s*Math.max(0,S.length-1))/2;for(let v=0;v<S.length;v++){let z=S[v],Y=T[v]??0,K=G+Y/2;R.set(z,K),G+=Y,v<S.length-1&&(G+=s)}}let w=0;for(let[T,D]of c.entries()){let G=h[T]??0,v=new Map;for(let Y of D){let K=m(Y),ae=v.get(K)??[];ae.push(Y),v.set(K,ae)}for(let Y of S){let K=v.get(Y)??[];if(K.length===0)continue;let ae=R.get(Y);if(K.length===1){let he=K[0];l[he]=ae,g[he]=w+G/2}else{let he=K.map(Q=>M(Q)),Oe=he.reduce((Q,W)=>Q+W,0)+r*(K.length-1),Be=ae-Oe/2;for(let[Q,W]of K.entries()){let te=he[Q];l[W]=Be+te/2,g[W]=w+G/2,Be+=te+r}}}let z=N[T]??0;w+=G+o+z}let B=new Map;for(let T of t.edges){let D=T.ref.id;B.has(D)||B.set(D,[]),B.get(D).push(T)}for(let[,T]of B){if(T.length===0)continue;let D=T[0].ref,G=D.start,v=D.end;if(G==null||v==null)continue;let z=Math.round(((l[G]??0)+(l[v]??0))/2),Y=new Set;for(let K of T)Y.add(K.src),Y.add(K.dst);for(let K of Y){if(K===G||K===v)continue;t.nodeById.get(K)?.isDummy&&(l[K]=z)}}return{x:l,y:g}}a(Or,"assignCoordinates");var jn=8;function zs(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}a(zs,"hashString");function Hs(e){let t=e>>>0;return()=>{t+=1831565813;let n=t;return n=Math.imul(n^n>>>15,n|1),n^=n+Math.imul(n^n>>>7,n|61),((n^n>>>14)>>>0)/4294967296}}a(Hs,"mulberry32");function Xs(e,t){let n=[...e],o=Hs(t);for(let r=n.length-1;r>0;r--){let s=Math.floor(o()*(r+1));[n[r],n[s]]=[n[s],n[r]]}return n}a(Xs,"deterministicShuffle");function Ys(e,t){let n=0;for(let[o,r]of e.entries())n+=Math.abs(o-(t.get(r)??o));return n}a(Ys,"sourceDistance");function wr(e,t){let n=new Map;for(let[r,s]of e.entries())n.set(s,r);let o=0;for(let{a:r,b:s,weight:i}of t){let u=n.get(r),c=n.get(s);u==null||c==null||(o+=i*Math.abs(u-c))}return o}a(wr,"laneArrangementCost");function $s(e){let t=ln(e);if(t.length<2)return[];let n=new Map(t.map((s,i)=>[s,i])),o=Ye(e),r=new Map;for(let s of e.layout.edges??[]){if(s.isLayoutOnly)continue;let i=typeof s.start=="string"?s.start:void 0,u=typeof s.end=="string"?s.end:void 0;if(!i||!u||!e.nodeById.has(i)||!e.nodeById.has(u))continue;let c=o(i),l=o(u);if(!c||!l||c===l)continue;let g=n.get(c),y=n.get(l);if(g==null||y==null)continue;let[M,p]=g<=y?[c,l]:[l,c],m=`${M}\0${p}`,d=r.get(m);d?d.weight++:r.set(m,{a:M,b:p,weight:1})}return[...r.values()]}a($s,"buildWeightedLaneEdges");function Ar(e,t,n){let o=[...e],r=wr(o,t),s=!0,i=0,u=Math.max(1,o.length);for(;s&&i<u;){s=!1,i++;for(let c=0;c+1<o.length;c++){[o[c],o[c+1]]=[o[c+1],o[c]];let l=wr(o,t);l<r?(r=l,s=!0):[o[c],o[c+1]]=[o[c+1],o[c]]}}return{order:o,cost:r,sourceDistance:Ys(o,n)}}a(Ar,"greedySwitch");function js(e,t){return e.cost!==t.cost?e.cost<t.cost:e.sourceDistance<t.sourceDistance}a(js,"isBetterCandidate");function Vs(e,t,n){let o=[...t].sort((r,s)=>r.a===s.a?r.b.localeCompare(s.b):r.a.localeCompare(s.a)).map(({a:r,b:s,weight:i})=>`${r}:${s}:${i}`).join("|");return zs(`${e.join("|")}#${o}#${n}`)}a(Vs,"seedForRestart");function vr(e,t={}){let n=ln(e);if(n.length<2)return n;let o=$s(e);if(o.length===0)return n;let r=new Map(n.map((u,c)=>[u,c])),s=Ar(n,o,r),i=Math.max(0,t.restarts??jn);for(let u=0;u<i;u++){let c=Vs(n,o,u),l=Xs(n,c),g=Ar(l,o,r);js(g,s)&&(s=g)}return s.order}a(vr,"optimizeTopLaneOrder");function Br(e,t){let n=t?.ignoreCrossLaneEdges??!0,o=t?.optimizeRanksByCrossings??!0,r=Qe(e),s=t?.automaticLaneOrdering?vr(r,{restarts:jn}):void 0,i=lr(r),u=i.acyclic,c=n?Sr(u,{compactSingleInput:t?.compactSingleInput??Lt.DEFAULT_COMPACT_SINGLE_INPUT,ignoreCrossLaneEdges:!0,direction:t?.direction}):Mr(u,{compactSingleInput:t?.compactSingleInput??Lt.DEFAULT_COMPACT_SINGLE_INPUT,ignoreCrossLaneEdges:!1,optimizeRanksByCrossings:o}),{layering:l,graphWithDummies:g}=Lr(c,u),y=Tr(l,g,{laneOrder:s}),M=Or(y,g,{layerGap:t?.layerGap,nodeGap:t?.nodeGap,direction:t?.direction,laneOrder:s});return{acyclic:u,reversed:i.reversed,layering:l,ordered:y,coordinates:M}}a(Br,"sugiyamaLayout");var ce=fr.EPSILON,Us=8,Nt=15,Bt=15,un=25,st=20,Vn=10;function kr(e,t,n){let o=e.x??0,r=e.y??0,s=t.x-o,i=t.y-r,u=Math.abs(s),c=Math.abs(i);return u<ce&&c<ce?n:c>ce&&c*3>=u?i>0?"bottom":"top":u>ce?s>0?"right":"left":n}a(kr,"chooseOrthogonalSide");function Gr(e,t){return Math.abs(e.to-t.from)<ce||Math.abs(e.to-t.to)<ce?e.to:e.from}a(Gr,"sharedLineEndpointCoord");function kt(e,t){return e.orient==="vertical"?{x:e.coord,y:t}:{x:t,y:e.coord}}a(kt,"pointOnLine");function Dr(e,t){let n=e.nodes??[],o=e.edges??[],r=[];for(let f of o)f.isLayoutOnly||r.push({...f,__originalEdge:f});let s=new Map,i=new Map,u=[],c=t==="LR";for(let f of n)s.set(f.id,f);let l=n.filter(f=>f.isGroup&&!f.parentId);for(let f of l){let x={id:f.id},L=a(P=>{i.set(P.id,x),n.filter(C=>C.parentId===P.id).forEach(L)},"assignLane");L(f)}let g=n.filter(f=>!f.isGroup&&!f.isEdgeLabel).map(f=>{let x=f.width??10,L=f.height??10,P=f.x??0,C=f.y??0,k=Us;return{nodeId:f.id,minX:P-x/2-k,maxX:P+x/2+k,minY:C-L/2-k,maxY:C+L/2+k,visualXHalfExtent:c?L/2+k:x/2+k}}),y=a((f,x,L,P)=>{let C=u.find(k=>k.orientation===f&&Math.abs(k.coord-x)<1);return C||(C={id:`pipe-${f}-${x.toFixed(0)}`,orientation:f,coord:x,spanMin:L,spanMax:P,tracks:[]},u.push(C)),C.spanMin=Math.min(C.spanMin,L),C.spanMax=Math.max(C.spanMax,P),C},"getOrAddPipe"),M=a((f,x)=>{let L=f.width??10,P=f.height??10,C=f.x??0,k=f.y??0;switch(x){case"top":return{x:C,y:k-P/2};case"bottom":return{x:C,y:k+P/2};case"left":return{x:C-L/2,y:k};case"right":return{x:C+L/2,y:k}}},"portForSide"),p=a((f,x,L)=>M(f,kr(f,x,L?"bottom":"top")),"getOrthogonalPort"),m=[],d=[],h=new Set,N=1e3,I=a((f,x,L)=>{if(m.length===0)return 0;let P=Math.abs(x.y-L.y)<ce,C=Math.abs(x.x-L.x)<ce;if(!P&&!C)return 0;let k=0;if(P){let U=x.y,q=Math.min(x.x,L.x)-ce,j=Math.max(x.x,L.x)+ce;if(j<=q)return 0;for(let X of m)X.edgeIndex===f||X.orientation!=="vertical"||X.pipe.coord<q||X.pipe.coord>j||X.from-ce<=U&&X.to+ce>=U&&(k+=N)}else if(C){let U=x.x,q=Math.min(x.y,L.y)-ce,j=Math.max(x.y,L.y)+ce;if(j<=q)return 0;for(let X of m)X.edgeIndex===f||X.orientation!=="horizontal"||X.pipe.coord<q||X.pipe.coord>j||X.from-ce<=U&&X.to+ce>=U&&(k+=N)}return k},"crossingPenalty"),E=r.map((f,x)=>{if(!f.start||!f.end)return{idx:x,crossLane:0,dx:0,dy:0};let L=s.get(f.start),P=s.get(f.end),C=i.get(f.start),k=i.get(f.end),U=C&&k&&C.id!==k.id?1:0,q=L&&P?Math.abs((P.x??0)-(L.x??0)):0,j=L&&P?Math.abs((P.y??0)-(L.y??0)):0;return{idx:x,crossLane:U,dx:q,dy:j}}).sort((f,x)=>{if(f.crossLane!==x.crossLane)return x.crossLane-f.crossLane;let L=f.dx+f.dy,P=x.dx+x.dy;return Math.abs(L-P)>1?L-P:f.idx-x.idx}).map(f=>f.idx),O=a((f,x,L,P)=>{let C=Math.min(f.x,x.x),k=Math.max(f.x,x.x),U=Math.min(f.y,x.y),q=Math.max(f.y,x.y);return!!g.find(X=>L&&X.nodeId===L||P&&X.nodeId===P?!1:Math.abs(f.x-x.x)>ce?X.minY<f.y&&X.maxY>f.y&&X.maxX>C&&X.minX<k:X.minX<f.x&&X.maxX>f.x&&X.maxY>U&&X.minY<q)},"isSegmentBlocked"),S=new Map,b=new Map;for(let f of r)!f.start||!f.end||f.start===f.end||(b.set(f.start,(b.get(f.start)??0)+1),b.set(f.end,(b.get(f.end)??0)+1));let R=a((f,x)=>kr(f,x,"bottom"),"determineSide"),w=new Map;for(let[f,x]of r.entries()){if(!x.start||!x.end||x.start===x.end||x.points&&x.points.length>0)continue;let L=s.get(x.start),P=s.get(x.end);if(!L||!P)continue;let C=(P.x??0)-(L.x??0),k=(P.y??0)-(L.y??0);w.set(f,{edgeIdx:f,srcId:x.start,dstId:x.end,srcSide:R(L,{x:P.x??0,y:P.y??0}),dstSide:R(P,{x:L.x??0,y:L.y??0}),absDx:Math.abs(C),absDy:Math.abs(k),dxSign:Math.sign(C),dySign:Math.sign(k)})}let B=a(f=>f.srcSide==="top"||f.srcSide==="bottom"?f.absDx===0?1/0:f.absDy/f.absDx:f.absDy===0?1/0:f.absDx/f.absDy,"preferenceStrength"),T=a(f=>f.srcSide==="top"||f.srcSide==="bottom"?f.dxSign>=0?"right":"left":f.dySign>=0?"bottom":"top","secondarySide"),D=new Map;for(let f of w.values()){let x=`${f.srcId}:${f.srcSide}`;D.has(x)||D.set(x,[]),D.get(x).push(f)}let G=new Map,v=a((f,x)=>`${f}:${x}`,"loadKey");for(let f of w.values())G.set(v(f.srcId,f.srcSide),(G.get(v(f.srcId,f.srcSide))??0)+1),G.set(v(f.dstId,f.dstSide),(G.get(v(f.dstId,f.dstSide))??0)+1);for(let f of D.values())if(!(f.length<2)){f.sort((x,L)=>{let P=B(x),C=B(L);return Math.abs(P-C)>1e-9?C-P:x.edgeIdx-L.edgeIdx});for(let x=1;x<f.length;x++){let L=f[x],P=T(L),C=G.get(v(L.srcId,L.srcSide))??0,k=G.get(v(L.srcId,P))??0;k>=C||(G.set(v(L.srcId,L.srcSide),C-1),G.set(v(L.srcId,P),k+1),L.srcSide=P)}}let z=a(f=>{let x=f?.shape;return x==="question"||x==="diamond"},"isDiamondNode"),Y=new Map;for(let f of w.values())Y.has(f.dstId)||Y.set(f.dstId,new Set),Y.get(f.dstId).add(f.dstSide);for(let f of w.values()){if(!z(s.get(f.srcId)))continue;let x=Y.get(f.srcId);if(!x?.has(f.srcSide))continue;let L=T(f);if(x.has(L)||(G.get(v(f.srcId,L))??0)>0)continue;let P=G.get(v(f.srcId,f.srcSide))??0;G.set(v(f.srcId,f.srcSide),Math.max(0,P-1)),G.set(v(f.srcId,L),1),f.srcSide=L}for(let f of w.values()){let{edgeIdx:x,srcId:L,dstId:P,srcSide:C,dstSide:k}=f,U=s.get(L),q=s.get(P),j=`${L}:${C}:src`,X=C==="top"||C==="bottom"?q.x??0:q.y??0;S.has(j)||S.set(j,[]),S.get(j).push({edgeIdx:x,oppositeCoord:X});let oe=`${P}:${k}:dst`,se=k==="top"||k==="bottom"?U.x??0:U.y??0;S.has(oe)||S.set(oe,[]),S.get(oe).push({edgeIdx:x,oppositeCoord:se})}let K=new Map,ae=8;for(let[f,x]of S){if(x.length<2)continue;x.sort((Ce,_e)=>Ce.oppositeCoord-_e.oppositeCoord);let L=f.split(":"),P=L.slice(0,-2).join(":"),C=L[L.length-2],k=L[L.length-1],U=s.get(P);if(!U)continue;let j=C==="left"||C==="right"?U.height??10:U.width??10,X=U.shape,se=X==="question"||X==="diamond"?j*.3:j,ee=Math.min(20,Math.max(ae,se/(x.length+1))),we=-(ee*(x.length-1))/2;for(let[Ce,_e]of x.entries()){let et=we+Ce*ee,hn=`${_e.edgeIdx}:${k}`;K.set(hn,et)}}let he=a(f=>!!r[f]?.labelNodeId,"edgeHasLabelNode"),Oe=a((f,x)=>f?(S.get(`${f}:${x}:src`)??[]).some(({edgeIdx:L})=>he(L))||(S.get(`${f}:${x}:dst`)??[]).some(({edgeIdx:L})=>he(L)):!1,"faceHasLabelNode"),Be=a((f,x,L)=>x==="top"||x==="bottom"?{x:f.x+L,y:f.y}:{x:f.x,y:f.y+L},"applyPortOffset"),Q=a((f,x,L)=>{let P=w.get(f),C={x:L.x??0,y:L.y??0},k={x:x.x??0,y:x.y??0},U=P?.srcSide??R(x,C),q=P?.dstSide??R(L,k),j=P?M(x,P.srcSide):p(x,C,!0),X=P?M(L,P.dstSide):p(L,k,!1),oe=K.get(`${f}:src`),se=K.get(`${f}:dst`);return oe!==void 0&&(j=Be(j,U,oe)),se!==void 0&&(X=Be(X,q,se)),{pSrcPort:j,pDstPort:X,srcSide:U,dstSide:q}},"portsForEdge");for(let f of E){let x=r[f];if(d[f]=[],!x.start||!x.end||x.points&&x.points.length>0||x.start===x.end)continue;let L=s.get(x.start),P=s.get(x.end);if(!L||!P)continue;let{pSrcPort:C,pDstPort:k,srcSide:U,dstSide:q}=Q(f,L,P),j={...C},X={...k},oe=U==="top"||U==="bottom",se=q==="top"||q==="bottom";if(oe){let H=C.y>(L.y??0);j.y=H?C.y+st:C.y-st}else{let H=C.x>(L.x??0);j.x=H?C.x+st:C.x-st}if(se){let H=k.y>(P.y??0);X.y=H?k.y+st:k.y-st}else{let H=k.x>(P.x??0);X.x=H?k.x+st:k.x-st}let re=a((H,$)=>{for(let J of g)if(!$.includes(J.nodeId)&&H.x>J.minX&&H.x<J.maxX&&H.y>J.minY&&H.y<J.maxY)return{inside:!0,obstacle:J};return{inside:!1}},"isPointInObstacle"),ee=a((H,$,J,ge,Ne)=>{if(Ne){let Ae=H.y>($.y??0);return{x:(J.x??0)>=H.x?ge.maxX+Nt:ge.minX-Nt,y:Ae?ge.maxY+Bt:ge.minY-Bt,leavesPositiveSide:Ae}}let be=H.x>($.x??0),Te=(J.y??0)>=H.y;return{x:be?ge.maxX+Nt:ge.minX-Nt,y:Te?ge.maxY+Bt:ge.minY-Bt,leavesPositiveSide:be}},"obstacleDetour"),ye=[],we=[x.start,x.end],Ce=re(j,we);if(Ce.inside&&Ce.obstacle){let H=Ce.obstacle;if(oe){let $=ee(C,L,P,H,!0);j.x=$.x,j.y=$.y;let J=$.leavesPositiveSide?Math.min(H.minY-2,C.y+st):Math.max(H.maxY+2,C.y-st);ye=[{x:C.x,y:J},{x:$.x,y:J},{x:$.x,y:$.y}]}else{let $=ee(C,L,P,H,!1),J=$.leavesPositiveSide?Math.min(H.minX-2,C.x+st):Math.max(H.maxX+2,C.x-st);j.x=$.x,j.y=$.y,ye=[{x:J,y:C.y},{x:J,y:$.y},{x:$.x,y:$.y}]}}let _e=[],et=re(X,we);if(et.inside&&et.obstacle){let H=et.obstacle;if(se){let $=ee(k,P,L,H,!0);X.x=$.x,X.y=$.y,_e=[{x:$.x,y:$.y},{x:k.x,y:$.y}]}else{let $=ee(k,P,L,H,!1);X.x=$.x,X.y=$.y,_e=[{x:$.x,y:$.y},{x:$.x,y:k.y}]}}if(ye.length===0&&_e.length===0){let H=Nt,$=Math.abs(j.x-X.x)<H,J=Math.abs(j.y-X.y)<H,ge=K.get(`${f}:src`)!==void 0||K.get(`${f}:dst`)!==void 0,Ne=(S.get(`${x.start??""}:${U}:src`)?.length??0)+(S.get(`${x.start??""}:${U}:dst`)?.length??0),be=(S.get(`${x.end??""}:${q}:src`)?.length??0)+(S.get(`${x.end??""}:${q}:dst`)?.length??0),Te=Ne>1||be>1,Ae=b.get(x.start??"")??0,me=b.get(x.end??"")??0,He=Ne>1&&Oe(x.start,U)||be>1&&Oe(x.end,q),ot=Ne<=1||Ae<=2,ke=be<=1||me<=2;if(($||J)&&!ge&&(!Te||Te&&!He&&ot&&ke)&&!O(C,k,x.start,x.end)){x.points=[{...C},{...j},{...X},{...k}],h.add(f);let Ie=J?"horizontal":"vertical",je=J?C.y:C.x,Me=J?Math.min(C.x,k.x):Math.min(C.y,k.y),Le=J?Math.max(C.x,k.x):Math.max(C.y,k.y),Ke={id:`fast-path-${Ie}-${je.toFixed(0)}-${f}`,orientation:Ie,coord:je,spanMin:Me,spanMax:Le,tracks:[]};m.push({edgeIndex:f,segmentIndex:0,orientation:Ie,pipe:Ke,trackIndex:0,from:Me,to:Le});continue}}let hn=y("vertical",j.x,j.y,j.y);j.x=hn.coord;let Fr=y("vertical",X.x,X.y,X.y);X.x=Fr.coord;let gt=Math.min(j.x,X.x)-50,mt=Math.max(j.x,X.x)+50,Rt=Math.min(j.y,X.y)-50,Ct=Math.max(j.y,X.y)+50;for(let H of g){let $=Math.min(j.x,X.x),J=Math.max(j.x,X.x),ge=Math.min(j.y,X.y),Ne=Math.max(j.y,X.y);H.minX<J&&H.maxX>$&&H.minY<Ne&&H.maxY>ge&&(gt=Math.min(gt,H.minX-un),mt=Math.max(mt,H.maxX+un),Rt=Math.min(Rt,H.minY-un),Ct=Math.max(Ct,H.maxY+un))}for(let H of g){if(H.maxX<gt||H.minX>mt||H.maxY<Rt||H.minY>Ct)continue;let $=Nt;y("horizontal",H.minY-$,gt,mt),y("horizontal",H.maxY+$,gt,mt);let J=Bt;y("vertical",H.minX-J,Rt,Ct),y("vertical",H.maxX+J,Rt,Ct)}y("horizontal",j.y,gt,mt),y("horizontal",X.y,gt,mt);let zr=u.filter(H=>H.orientation==="horizontal"&&H.coord>=Rt&&H.coord<=Ct),Hr=u.filter(H=>H.orientation==="vertical"&&H.coord>=gt&&H.coord<=mt),Xt=a((H,$)=>`${H.toFixed(1)},${$.toFixed(1)}`,"getKey"),Yt=Xt(j.x,j.y),Un=Xt(X.x,X.y),$t=new Map,yn=new Map,xn=new Map,jt=new Set,It=[];$t.set(Yt,0),xn.set(Yt,"n"),It.push({key:Yt,f:Math.hypot(X.x-j.x,X.y-j.y),pt:j}),jt.add(Yt);let Fe=[],pt=a((H,$)=>O(H,$,x.start,x.end),"checkSegmentBlocked"),bn={x:X.x,y:j.y},Xr=pt(j,bn),Yr=pt(bn,X),$r=Xr||Yr,In={x:j.x,y:X.y},jr=pt(j,In),Vr=pt(In,X);if($r?jr||Vr||(Math.abs(j.x-X.x)<ce?Fe=[j,X]:Fe=[j,In,X]):Math.abs(j.y-X.y)<ce||Math.abs(j.x-X.x)<ce?Fe=[j,X]:Fe=[j,bn,X],Fe.length===0)for(;It.length>0;){It.sort((me,He)=>me.f-He.f);let H=It.shift();if(jt.delete(H.key),H.key===Un){let me=Un,He=X;for(Fe=[He];yn.has(me);){let ot=yn.get(me);Fe.unshift(ot),He=ot,me=Xt(ot.x,ot.y)}break}let $=H.pt.x,J=H.pt.y,ge=Hr.sort((me,He)=>me.coord-He.coord),Ne=ge.findIndex(me=>Math.abs(me.coord-$)<1),be=zr.sort((me,He)=>me.coord-He.coord),Te=be.findIndex(me=>Math.abs(me.coord-J)<1),Ae=[];Ne>0&&Ae.push({x:ge[Ne-1].coord,y:J}),Ne>=0&&Ne<ge.length-1&&Ae.push({x:ge[Ne+1].coord,y:J}),Te>0&&Ae.push({x:$,y:be[Te-1].coord}),Te>=0&&Te<be.length-1&&Ae.push({x:$,y:be[Te+1].coord});for(let me of Ae){let He=Math.min($,me.x),ot=Math.max($,me.x),ke=Math.min(J,me.y),$e=Math.max(J,me.y);if(g.some(tt=>tt.nodeId===x.start||tt.nodeId===x.end?!1:He!==ot?tt.minY<J&&tt.maxY>J&&tt.maxX>He&&tt.minX<ot:tt.minX<$&&tt.maxX>$&&tt.maxY>ke&&tt.minY<$e))continue;let Ie=Xt(me.x,me.y),je=Math.abs(me.x-$)+Math.abs(me.y-J),Me=I(f,H.pt,me),Le=0,Ke=X.x-j.x,Tt=X.y-j.y,Vt=me.x-$,Mn=me.y-J;(Tt>10&&Mn<-5||Tt<-10&&Mn>5)&&(Le=Math.abs(Mn)*100),(Ke>10&&Vt<-5||Ke<-10&&Vt>5)&&(Le+=Math.abs(Vt)*50);let Wn=0,Kn=xn.get(H.key)??"n",Jn=Math.abs(Vt)>ce?"h":"v";Kn!=="n"&&Kn!==Jn&&(Wn=50);let Ur=je+Me+Le+Wn,Ut=($t.get(H.key)??1/0)+Ur,qn=Math.abs(X.x-me.x)+Math.abs(X.y-me.y);if(Ut<($t.get(Ie)??1/0))if(yn.set(Ie,H.pt),$t.set(Ie,Ut),xn.set(Ie,Jn),!jt.has(Ie))It.push({key:Ie,f:Ut+qn,pt:me}),jt.add(Ie);else{let tt=It.findIndex(Wr=>Wr.key===Ie);tt!==-1&&(It[tt].f=Ut+qn)}}}if(Fe.length===0&&(Fe=[j,{x:j.x,y:X.y},X]),Fe.length>4){let H=Fe[0],$=Fe[Fe.length-1],J=Math.min(H.x,$.x),ge=Math.max(H.x,$.x),Ne=Math.min(H.y,$.y),be=Math.max(H.y,$.y);for(let ke of Fe)J=Math.min(J,ke.x),ge=Math.max(ge,ke.x),Ne=Math.min(Ne,ke.y),be=Math.max(be,ke.y);let Te=ge>Math.max(H.x,$.x),Ae=J<Math.min(H.x,$.x);if(c){let ke=Bt;if(Te){let $e=Math.max(H.x,$.x),ve=Math.min(H.y,$.y),Ie=Math.max(H.y,$.y),je=g.filter(Me=>Me.minX<$e&&Me.maxX>$e&&Me.minY<Ie&&Me.maxY>ve);if(je.length>0){let Me=Math.max(H.x,$.x);for(let Le of je){let Ke=(Le.minX+Le.maxX)/2;if(Le.visualXHalfExtent===void 0||isNaN(Le.visualXHalfExtent))continue;let Tt=Ke+Le.visualXHalfExtent+ke;Me=Math.max(Me,Tt)}isNaN(Me)||(ge=Me)}}if(Ae){let $e=g.filter(ve=>ve.minX<Math.min(H.x,$.x)+ke&&ve.minY<Math.max(H.y,$.y)&&ve.maxY>Math.min(H.y,$.y));if($e.length>0){let ve=Math.min(H.x,$.x);for(let Ie of $e){let Me=(Ie.minX+Ie.maxX)/2-Ie.visualXHalfExtent-ke;ve=Math.min(ve,Me)}J=ve}}}let me=a(ke=>{let $e=$.y>H.y,ve=g.filter(Me=>{let Le=Math.min(H.x,$.x)<Me.maxX&&Math.max(H.x,$.x)>Me.minX,Ke=Math.min(H.y,$.y)<Me.maxY&&Math.max(H.y,$.y)>Me.minY;return Le&&Ke}),Ie=ve;if(c&&ve.length>0){let Me=ve.filter(Le=>Le.minX<ke&&Le.maxX>ke);Me.length>0&&(Ie=Me)}if(Ie.length===0)return $.y;let je=Nt;if($e){let Le=Math.max(...Ie.map(Ke=>Ke.maxY))+je;if(Le<$.y-ce)return Le}else{let Le=Math.min(...Ie.map(Ke=>Ke.minY))-je;if(Le>$.y+ce)return Le}return $.y},"findBestReturnY"),He=a(ke=>{let $e=me(ke),ve={x:ke,y:H.y},Ie={x:ke,y:$e},je={x:$.x,y:$e},Me=pt(H,ve),Le=pt(ve,Ie),Ke=pt(Ie,je),Tt=$e!==$.y?pt(je,$):!1;return!Me&&!Le&&!Ke&&!Tt?Math.abs($e-$.y)<ce?[H,ve,Ie,$]:[H,ve,Ie,je,$]:null},"trySimplifyWithDetourX"),ot=Te&&!Ae?He(ge):Ae&&!Te?He(J):null;ot&&(Fe=ot)}let ze=[C,...ye,...Fe,..._e.reverse(),k];if(ze.length>=3){let H=ze[ze.length-1],$=ze[ze.length-2],J=ze[ze.length-3],ge=Math.abs(J.y-$.y)<ce&&Math.abs($.y-H.y)<ce,Ne=Math.abs(J.x-$.x)<ce&&Math.abs($.x-H.x)<ce;if(ge){let be=Math.sign($.x-J.x),Te=Math.sign(H.x-J.x);be!==0&&be===Te&&Math.abs($.x-J.x)>Math.abs(H.x-J.x)&&ze.splice(-2,1)}else if(Ne){let be=Math.sign($.y-J.y),Te=Math.sign(H.y-J.y);be!==0&&be===Te&&Math.abs($.y-J.y)>Math.abs(H.y-J.y)&&ze.splice(-2,1)}}let dt=[ze[0]];for(let H=1;H<ze.length-1;H++){if(H===1){dt.push(ze[H]);continue}let $=dt[dt.length-1],J=ze[H],ge=ze[H+1];if(Math.abs($.y-J.y)<ce&&Math.abs(J.y-ge.y)<ce){let Ne=J.x>$.x,be=ge.x>J.x;if(Ne!==be){dt.push(J);continue}continue}if(Math.abs($.x-J.x)<ce&&Math.abs(J.x-ge.x)<ce){let Ne=J.y>$.y,be=ge.y>J.y;if(Ne!==be){dt.push(J);continue}continue}dt.push(J)}dt.push(ze[ze.length-1]);for(let H=0;H<dt.length-1;H++){let $=dt[H],J=dt[H+1],ge=Math.abs($.x-J.x)<ce?"vertical":"horizontal",Ne=ge==="vertical"?$.x:$.y,be=ge==="vertical"?Math.min($.y,J.y):Math.min($.x,J.x),Te=ge==="vertical"?Math.max($.y,J.y):Math.max($.x,J.x),Ae=y(ge,Ne,be,Te),me={edgeIndex:f,segmentIndex:H,orientation:ge,pipe:Ae,trackIndex:0,from:be,to:Te};m.push(me),d[f].push(m.length-1),Ae.tracks[0]||(Ae.tracks[0]={index:0,coord:Ae.coord,segments:[]}),Ae.tracks[0].segments.push({edgeIndex:f,segmentIndex:H,from:be,to:Te})}}let W=a((f,x)=>f.from<x.to&&x.from<f.to,"segmentsOverlap"),te=a((f,x,L,P)=>{let C=!P.segments.some(U=>(U.edgeIndex!==x.edgeIndex||U.segmentIndex!==x.segmentIndex)&&W(U,f)),k=!L.segments.some(U=>(U.edgeIndex!==f.edgeIndex||U.segmentIndex!==f.segmentIndex)&&W(U,x));return C&&k?(f.trackIndex=P.index,x.trackIndex=L.index,L.segments=[...L.segments.filter(U=>U.edgeIndex!==f.edgeIndex||U.segmentIndex!==f.segmentIndex),{edgeIndex:x.edgeIndex,segmentIndex:x.segmentIndex,from:x.from,to:x.to}],P.segments=[...P.segments.filter(U=>U.edgeIndex!==x.edgeIndex||U.segmentIndex!==x.segmentIndex),{edgeIndex:f.edgeIndex,segmentIndex:f.segmentIndex,from:f.from,to:f.to}],!0):!1},"trySwapSegmentsAcrossTracks"),fe=a(f=>{let x=f.tracks.length;return f.tracks[x]={index:x,coord:f.coord,segments:[]},x},"createNewTrack"),pe=a((f,x)=>{let L=f.pipe.tracks[f.trackIndex];L.segments=L.segments.filter(C=>C.edgeIndex!==f.edgeIndex||C.segmentIndex!==f.segmentIndex),f.trackIndex=x,f.pipe.tracks[x].segments.push({edgeIndex:f.edgeIndex,segmentIndex:f.segmentIndex,from:f.from,to:f.to})},"moveSegmentToTrack"),xe=a((f,x)=>{let L=d[f.edgeIndex];for(let P of L){let C=m[P];C.pipe===f.pipe&&pe(C,x)}},"moveSegmentChainToTrack"),Ee=a(f=>{let x=d[f.edgeIndex],L=x.indexOf(m.indexOf(f)),P=[];return L>0&&P.push(m[x[L-1]]),L<x.length-1&&P.push(m[x[L+1]]),P},"getAdjacentSegmentsAlongEdge"),Ve=a((f,x)=>{if(f.orientation===x.orientation)return!1;let L=f.orientation==="horizontal"?f:x,P=f.orientation==="horizontal"?x:f;return P.pipe.coord>L.from&&P.pipe.coord<L.to&&L.pipe.coord>P.from&&L.pipe.coord<P.to},"haveAnyCrossing"),Ue=a((f,x)=>{for(let L of f.tracks)if(!L.segments.some(C=>(C.edgeIndex!==x.edgeIndex||C.segmentIndex!==x.segmentIndex)&&W(C,x)))return L.index;return-1},"findAvailableTrack"),We=a((f,x)=>{if(f.trackIndex===x.trackIndex)return W(f,x);let L=Ee(f),P=Ee(x);return L.some(C=>P.some(k=>Ve(C,k)))},"segmentsConflict"),nt=a((f,x,L)=>{if(te(f,x,f.pipe.tracks[f.trackIndex],x.pipe.tracks[x.trackIndex]))return;let P=Ue(f.pipe,x);L(x,P!==-1?P:fe(f.pipe))},"resolveTrackConflict"),Et=a(f=>{let x=0;for(let L=0;L<f.length;L++)for(let P=L+1;P<f.length;P++){let C=f[L],k=f[P];C.pipe===k.pipe&&We(C,k)&&(x++,nt(C,k,xe))}return x},"resolveHandleConflicts"),ut=new Map,Pt=a(f=>{if(ut.has(f))return ut.get(f);let x=d[f];if(x.length===0){let q={dest:0,deviation:0,base:0,delta:0};return ut.set(f,q),q}let P=m[x[0]].pipe.coord,C=P;for(let q=1;q<x.length;q++){let j=m[x[q]];if(j.orientation==="horizontal"){let X=j.from,oe=j.to;C=Math.abs(X-P)>Math.abs(oe-P)?X:oe;break}}let k=Math.abs(C-P),U={dest:C,deviation:k,base:P,delta:C-P};return ut.set(f,U),U},"getDestInfo"),gn=a(()=>{let f=0,x=new Map;for(let[P,C]of r.entries())d[P].length!==0&&C.start&&(x.has(C.start)||x.set(C.start,[]),x.get(C.start).push(P));let L=a(P=>{let C=r[P];if(!C.start||!C.end)return 0;let k=s.get(C.start),U=s.get(C.end);if(!k||!U)return 0;let q=(U.x??0)-(k.x??0),j=(U.y??0)-(k.y??0);return Math.abs(q)+Math.abs(j)},"getEdgeDistance");for(let P of x.values()){P.sort((k,U)=>{let q=Pt(k),j=Pt(U);if(Math.abs(q.deviation-j.deviation)>1)return q.deviation-j.deviation;if(Math.abs(q.dest-j.dest)>1)return q.dest-j.dest;let X=L(k),oe=L(U);if(Math.abs(X-oe)>1)return oe-X;let se=d[k].length,re=d[U].length;if(se!==re)return se-re;if(se===1){let ee=d[k][0],ye=d[U][0];if(m[ee]&&m[ye]){let we=m[ee],Ce=m[ye],_e=Math.abs(we.to-we.from),et=Math.abs(Ce.to-Ce.from);if(Math.abs(_e-et)>1)return _e-et}}return 0});let C=P.map(k=>m[d[k][0]]);f+=Et(C)}return f},"fixSourceHandleCrossings"),mn=a(()=>{let f=0,x=new Map;for(let[L,P]of r.entries())d[L].length!==0&&P.end&&(x.has(P.end)||x.set(P.end,[]),x.get(P.end).push(L));for(let L of x.values()){L.sort((C,k)=>{let U=a(X=>{let oe=d[X];if(oe.length<2)return 0;let se=m[oe[oe.length-2]];return Math.abs(se.to-se.from)},"getDist"),q=U(C),j=U(k);return Math.abs(q-j)>.1?q-j:C-k});let P=L.map(C=>m[d[C][d[C].length-1]]);f+=Et(P)}return f},"fixTargetHandleCrossings"),pn=a(()=>{let f=0;for(let x of u){let L=[];for(let P of x.tracks)for(let C of P.segments){let k=d[C.edgeIndex].find(U=>m[U].segmentIndex===C.segmentIndex);k!==void 0&&L.push(m[k])}L.sort((P,C)=>P.edgeIndex-C.edgeIndex||P.segmentIndex-C.segmentIndex);for(let P=0;P<L.length;P++)for(let C=P+1;C<L.length;C++){let k=L[P],U=L[C];We(k,U)&&(f++,nt(k,U,pe))}}return f},"fixPipeCrossings"),A=0,_=10;for(;A<_;){let f=0;if(f+=gn(),f+=mn(),f+=pn(),f===0)break;A++}let F=new Map;for(let f of u){let x=[];f.tracks.forEach(P=>{P.segments.forEach(C=>{x.push({edgeIndex:C.edgeIndex,segmentIndex:C.segmentIndex,trackIndex:P.index,from:C.from,to:C.to})})}),x.sort((P,C)=>P.from-C.from);let L=[];if(x.length>0){let P=[x[0]],C=x[0].to;for(let k=1;k<x.length;k++){let U=x[k];U.from<C?(P.push(U),C=Math.max(C,U.to)):(L.push(P),P=[U],C=U.to)}L.push(P)}for(let P of L){let C=new Set;P.forEach(ee=>C.add(ee.trackIndex));let k=new Map;P.forEach(ee=>{let ye=Pt(ee.edgeIndex);k.set(ee.trackIndex,(k.get(ee.trackIndex)??0)+ye.delta)});let U=[...C].filter(ee=>(k.get(ee)??0)<-1),q=[...C].filter(ee=>(k.get(ee)??0)>1),j=[...C].filter(ee=>Math.abs(k.get(ee)??0)<=1);U.sort((ee,ye)=>(k.get(ye)??0)-(k.get(ee)??0)),q.sort((ee,ye)=>(k.get(ee)??0)-(k.get(ye)??0));let X=a((ee,ye)=>{P.filter(we=>we.trackIndex===ee).forEach(we=>{let Ce=h.has(we.edgeIndex)?f.coord:ye;F.set(`${we.edgeIndex}-${we.segmentIndex}`,Ce)})},"assignCoord"),oe=0;for(let ee of U)oe++,X(ee,f.coord-oe*Vn);if(j.length===0&&C.size>0){let ee=[...C].sort((Ce,_e)=>Math.abs(k.get(Ce)??0)-Math.abs(k.get(_e)??0))[0],ye=U.indexOf(ee);ye!==-1&&U.splice(ye,1);let we=q.indexOf(ee);we!==-1&&q.splice(we,1),j.push(ee)}let se=0;for(let ee of j){if(se===0)X(ee,f.coord);else{let ye=se%2===1?1:-1,we=Math.ceil(se/2);X(ee,f.coord+ye*we*Vn*.5)}se++}let re=0;for(let ee of q)re++,X(ee,f.coord+re*Vn)}}for(let[f,x]of r.entries()){let L=d[f]??[];if(L.length===0)continue;let P=[],C=s.get(x.start),k=s.get(x.end),{pSrcPort:U,pDstPort:q}=Q(f,C,k),j=L.map(se=>{let re=m[se],ee=F.get(`${re.edgeIndex}-${re.segmentIndex}`)??re.pipe.coord;return{orient:re.orientation,coord:ee,from:re.from,to:re.to}});P.push(U);for(let se=0;se<j.length;se++){let re=j[se],ee=P[P.length-1],ye=re.orient==="vertical"?ee.y:ee.x,we=re.orient==="vertical"?ee.x:ee.y,Ce=j[se+1],_e=se<j.length-1;if(Math.abs(we-re.coord)>ce&&P.push(kt(re,ye)),_e&&Ce.orient===re.orient)if(Math.abs(re.coord-Ce.coord)>ce){let et=re.orient==="vertical"?(ye+Ce.from)/2:Gr(re,Ce);P.push(kt(re,et),kt(Ce,et))}else(se===0||se===j.length-2)&&P.push(kt(re,Gr(re,Ce)));else if(_e)P.push(kt(re,Ce.coord));else{let et=Math.abs(re.from-ye)<Math.abs(re.to-ye)?re.to:re.from;P.push(kt(re,et))}}let X=P[P.length-1];(Math.abs(X.x-q.x)>ce||Math.abs(X.y-q.y)>ce)&&P.push(q);let oe=[];P.length>0&&oe.push(P[0]);for(let se=1;se<P.length;se++){let re=P[se],ee=oe[oe.length-1];(Math.abs(re.x-ee.x)>ce||Math.abs(re.y-ee.y)>ce)&&oe.push(re)}x.points=oe}for(let f of r){let x=f.__originalEdge;x&&f.points&&(x.points=f.points)}e.edges=(e.edges??[]).filter(f=>!f.isLayoutOnly);let V=a((f,x)=>{let L=x.x??0,P=x.y??0,C=x.width??0,k=x.height??0;if(C<=0||k<=0)return f;let U=L-C/2,q=L+C/2,j=P-k/2,X=P+k/2;if(f.x<U||f.x>q||f.y<j||f.y>X)return f;let oe=f.x-U,se=q-f.x,re=f.y-j,ee=X-f.y,ye=Math.min(oe,se,re,ee);return ye===oe?{x:U,y:f.y}:ye===se?{x:q,y:f.y}:ye===re?{x:f.x,y:j}:{x:f.x,y:X}},"nodeBoundaryClamp");for(let f of e.edges){let x=f.points;if(!x||x.length<2)continue;let L=f.start,P=f.end,C=L?s.get(L):void 0,k=P?s.get(P):void 0;C&&(x[0]=V(x[0],C)),k&&(x[x.length-1]=V(x[x.length-1],k))}return e}a(Dr,"routeEdgesOrthogonal");function Ws(e){return e.direction??"TB"}a(Ws,"getSwimlaneDirection");function _r(e){let t=So(e),n=e.config.flowchart?.nodeSpacing??40,o=e.config.flowchart?.rankSpacing??100,r=e.config.swimlane?.ignoreCrossLaneEdges??!0,s=e.config.swimlane?.optimizeRanksByCrossings??!0,i=e.config.swimlane?.automaticLaneOrdering??!1,u=Ws(e),{ordered:c,coordinates:l}=Br(t,{nodeGap:n,layerGap:o,ignoreCrossLaneEdges:r,optimizeRanksByCrossings:s,automaticLaneOrdering:i,direction:u});Lo(t,c,l,{nodeGap:n,layerGap:o});for(let g of e.edges??[])delete g.points;Dr(e,u);for(let g of e.edges??[])(!g.curve||g.curve==="basis")&&(g.curve="rounded");return dr(e,u),_n(e),u}a(_r,"runSwimlaneLayoutCore");async function Vc(e,t){let n=t.select("g");ao(n,e.markers,e.type,e.diagramId),lo(),ro(),no(),go(),Mo(e);let o=No(e);e.nodes=o.nodes,e.edges=o.edges;let{groups:r}=await mo(n,e);_r(e),await bo(e,r)}a(Vc,"render");export{Vc as render};