UNPKG

mermaid

Version:

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

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