UNPKG

gojs

Version:

Interactive diagrams, charts, and graphs, such as trees, flowcharts, orgcharts, UML, BPMN, or business diagrams

219 lines 1.12 MB
/**
 * @license GoJS
 * GoJS v4.0.4 JavaScript Library for Interactive Diagrams, https://gojs.net
 * GoJS and Northwoods Software are registered trademarks of Northwoods Software Corporation, https://nwoods.com.
 * Copyright 1998-2026 by Northwoods Software Corporation.  All Rights Reserved.
 * THIS SOFTWARE IS LICENSED.  THE LICENSE AGREEMENT IS AT: https://gojs.net/4.0.4/license.html.
 * DO NOT MODIFY THIS FILE.  DO NOT DISTRIBUTE A MODIFIED COPY OF THE CONTENTS OF THIS FILE.
 */
(function() {const root=typeof globalThis=="object"&&globalThis||typeof global=="object"&&global.global===global&&global||typeof self=="object"&&self.self===self&&self||{};root.requestAnimationFrame===void 0&&(root.setImmediate===void 0?root.requestAnimationFrame=w=>root.setTimeout(w,0):root.requestAnimationFrame=root.setImmediate);const Debug={boundsInfoEnabled:!1,drawLocationsEnabled:!1,drawClipEnabled:!1,drawLinkpointsEnabled:!1,nodeInspector:!1,handleMessages:!1,drawFrames:!1,defaultDiagram:null,trace:function(w){root.console&&root.console.log(w)},drawDiagramBounds(w,t,i,e){w.strokeStyle="red",w.fillStyle="red",w.font="8px sans-serif",w.beginPath(),w.moveTo(-10,0),w.lineTo(10,0),w.moveTo(0,-10),w.lineTo(0,10),w.stroke(),w.setTransform(1,0,0,1,0,0),w.scale(i,i),w.transform(t.m11,t.m12,t.m21,t.m22,t.dx,t.dy),w.lineWidth=2,w.beginPath(),w.moveTo(e.left,e.top+20),w.lineTo(e.left,e.top),w.lineTo(e.left+20,e.top),w.moveTo(e.right,e.bottom-20),w.lineTo(e.right,e.bottom),w.lineTo(e.right-20,e.bottom),w.stroke(),w.fillText("DB: "+Math.round(e.x)+", "+Math.round(e.y)+", "+Math.round(e.width)+", "+Math.round(e.height),e.left,e.top-5)},attachReadonlyWarnings:function(w){for(const t in w){if(t==="licenseKey")continue;const i=w[t];if(i.prototype===void 0)continue;const e=Object.getOwnPropertyNames(i.prototype);for(let s=0;s<e.length;s++){const n=Object.getOwnPropertyDescriptor(i.prototype,e[s]);n&&n.get!==void 0&&n.set===void 0&&Object.defineProperty(i.prototype,e[s],{set:function(o){U.n("Property "+e[s]+" of "+t+" is read-only.")}})}}}};class U{static zo=root.navigator!==void 0&&root.navigator.platform!==void 0&&root.navigator.platform.match(/(iPhone|iPod|iPad|Mac)/i)!==null;static vk(t,i,e){let s=-1;return function(){const n=this,o=arguments;s!==-1&&U.Vc(s),s=U.Sn(()=>{s=-1,e||t.apply(n,o)},i),e&&!s&&t.apply(n,o)}}static Sn(t,i){return root.setTimeout(t,i)}static Vc(t){root.clearTimeout(t)}static Re(t){return root.document.createElement(t)}static n(t){throw new Error(t)}static F(t,i){let e="The object is frozen, so its properties cannot be set: "+t.toString();i!==void 0&&(e+="  to value: "+i),U.n(e)}static s(t,i,e,s){if(!(t instanceof i)){let n=U.zc(e);s!==void 0&&(n+="."+s),U.Ii(t,i,n)}}static i(t,i,e,s){if(typeof t!==i){let n=U.zc(e);s!==void 0&&(n+="."+s),U.Ii(t,i,n)}}static r(t,i,e){if(typeof t!="number"||!isFinite(t)){let s=U.zc(i);e!==void 0&&(s+="."+e),U.n(s+" must be a real number type, and not NaN or Infinity: "+t)}}static Xo(t,i,e){if(t===null||typeof t!="object"){let s=U.zc(i);e!==void 0&&(s+="."+e),U.Ii(t,"object",s)}}static C(t,i,e){U.i(t,"function",i,e)}static j(t,i,e){t in i||U.n(`${t} is not a valid value in enumeration: ${e}`)}static Ii(t,i,e,s){const n=" value is not an instance of "+U.zc(i)+": ";let o=U.zc(e);s!==void 0&&(o+="."+s),typeof t=="string"&&(t='"'+t+'"'),U.n(o+n+t)}static q(t,i,e,s){let n=U.zc(e);s!==void 0&&(n+="."+s),U.n(n+" is not in the range "+i+": "+t)}static $e(t){U.n("Collection was modified during iteration: "+t.toString()+`
  Perhaps you should iterate over a copy of the collection,
  or you could collect items to be removed from the collection after the iteration.`)}static Pr(t,i){U.n("No property to set for this enum value: "+i+" on "+t.toString())}static et(t){root.console&&root.console.log(t)}static st(t){return t!==null&&typeof t=="object"}static at(t){return typeof t=="function"}static Wk=[];static ct(){const t=U.Wk.pop();return t===void 0?[]:t}static nt(t){t.length=0,U.Wk.push(t)}static lV=Object.freeze([]);static zc(t){return t===null?"*":typeof t=="string"?t:U.at(t)?t.name:""}static to(t){return U.at(t)?t.className?t.className:t.name:U.st(t)&&t.constructor?U.to(t.constructor):typeof t}static fa(t,i){return i==null||i===""?null:U.st(t)&&i in t||t[i]?t[i]:null}static toString(t){let i=t;return U.st(t)&&(t.text?i=t.text:t.name?i=t.name:t.key!==void 0?i=t.key:t.id!==void 0?i=t.id:t.constructor===Object&&(t.Text?i=t.Text:t.Name?i=t.Name:t.Key!==void 0?i=t.Key:t.Id!==void 0?i=t.Id:t.ID!==void 0&&(i=t.ID))),i===void 0?"undefined":i===null?"null":i.toString()}static fx(t,i){if(t.hasOwnProperty(i))return!0;let e=Object.getPrototypeOf(t);for(;e&&e!==Function;){if(e.hasOwnProperty(i))return!0;const s=e.hV;if(s&&s[i])return!0;e=Object.getPrototypeOf(e)}return!1}static NI(t){const i=[];let e=0;for(e=0;e<256;e++)i[e]=e;let s=0,n=0;for(e=0;e<256;e++)s=(s+i[e]+119)%256,n=i[e],i[e]=i[s],i[s]=n;e=0,s=0;let o="";for(let r=0;r<t.length;r++)e=(e+1)%256,s=(s+i[e])%256,n=i[e],i[e]=i[s],i[s]=n,o+=String.fromCharCode(t.charCodeAt(r)^i[(i[e]+i[s])%256]);return o}static AI(t){const i="0123456789abcdef",e=[];for(let r=0;r<256;r++)e[i.charAt(r>>4)+i.charAt(r&15)]=String.fromCharCode(r);t.length%2&&(t="0"+t);const s=[];let n=0;for(let r=0;r<t.length;r+=2)s[n++]=e[t.substring(r,r+2)];const o=s.join("");return o===""?"0":o}static Si(t){return U.NI(U.AI(t))}static color1="@COLOR1";static color2="@COLOR2";static ux="32ab5ff3b26f42dc0ed90f21422913b5";static wm(){const t=new Uint32Array(1);return root.crypto.getRandomValues(t),t[0]/4294967296}}U.vfo="2ee646fdb7";class StringBuilder{jk;constructor(){this.jk=[]}toString(){return this.jk.join("")}add(t){t!==""&&this.jk.push(t)}}class PropertyCollection{}const Figures={None:"None",Rectangle:"Rectangle",Square:"Square",RoundedRectangle:"RoundedRectangle",Border:"Border",RoundedTopRectangle:"RoundedTopRectangle",RoundedBottomRectangle:"RoundedBottomRectangle",RoundedLeftRectangle:"RoundedLeftRectangle",RoundedRightRectangle:"RoundedRightRectangle",Ellipse:"Ellipse",Circle:"Circle",TriangleRight:"TriangleRight",TriangleDown:"TriangleDown",TriangleLeft:"TriangleLeft",TriangleUp:"TriangleUp",Triangle:"Triangle",Diamond:"Diamond",LineH:"LineH",LineV:"LineV",BarH:"BarH",BarV:"BarV",MinusLine:"MinusLine",PlusLine:"PlusLine",XLine:"XLine",LineRight:"LineRight",LineDown:"LineDown",LineLeft:"LineLeft",LineUp:"LineUp",Capsule:"Capsule",Borders:"Borders"},Arrowheads={Standard:"Standard",Backward:"Backward",Triangle:"Triangle",BackwardTriangle:"BackwardTriangle",Boomerang:"Boomerang",BackwardBoomerang:"BackwardBoomerang",SidewaysV:"SidewaysV",BackwardV:"BackwardV",OpenTriangle:"OpenTriangle",BackwardOpenTriangle:"BackwardOpenTriangle",OpenTriangleLine:"OpenTriangleLine",BackwardOpenTriangleLine:"BackwardOpenTriangleLine",OpenTriangleTop:"OpenTriangleTop",BackwardOpenTriangleTop:"BackwardOpenTriangleTop",OpenTriangleBottom:"OpenTriangleBottom",BackwardOpenTriangleBottom:"BackwardOpenTriangleBottom",HalfTriangleTop:"HalfTriangleTop",BackwardHalfTriangleTop:"BackwardHalfTriangleTop",HalfTriangleBottom:"HalfTriangleBottom",BackwardHalfTriangleBottom:"BackwardHalfTriangleBottom",ForwardSemiCircle:"ForwardSemiCircle",BackwardSemiCircle:"BackwardSemiCircle",Feather:"Feather",BackwardFeather:"BackwardFeather",DoubleFeathers:"DoubleFeathers",BackwardDoubleFeathers:"BackwardDoubleFeathers",TripleFeathers:"TripleFeathers",BackwardTripleFeathers:"BackwardTripleFeathers",ForwardSlash:"ForwardSlash",BackSlash:"BackSlash",DoubleForwardSlash:"DoubleForwardSlash",DoubleBackSlash:"DoubleBackSlash",TripleForwardSlash:"TripleForwardSlash",TripleBackSlash:"TripleBackSlash",Fork:"Fork",BackwardFork:"BackwardFork",LineFork:"LineFork",BackwardLineFork:"BackwardLineFork",CircleFork:"CircleFork",BackwardCircleFork:"BackwardCircleFork",CircleLineFork:"CircleLineFork",BackwardCircleLineFork:"BackwardCircleLineFork",Circle:"Circle",Block:"Block",StretchedDiamond:"StretchedDiamond",Diamond:"Diamond",Chevron:"Chevron",StretchedChevron:"StretchedChevron",NormalArrow:"NormalArrow",X:"X",TailedNormalArrow:"TailedNormalArrow",DoubleTriangle:"DoubleTriangle",BigEndArrow:"BigEndArrow",ConcaveTailArrow:"ConcaveTailArrow",RoundedTriangle:"RoundedTriangle",SimpleArrow:"SimpleArrow",AccelerationArrow:"AccelerationArrow",BoxArrow:"BoxArrow",TriangleLine:"TriangleLine",CircleEndedArrow:"CircleEndedArrow",DynamicWidthArrow:"DynamicWidthArrow",EquilibriumArrow:"EquilibriumArrow",FastForward:"FastForward",Kite:"Kite",HalfArrowTop:"HalfArrowTop",HalfArrowBottom:"HalfArrowBottom",OpposingDirectionDoubleArrow:"OpposingDirectionDoubleArrow",PartialDoubleTriangle:"PartialDoubleTriangle",LineCircle:"LineCircle",DoubleLineCircle:"DoubleLineCircle",TripleLineCircle:"TripleLineCircle",CircleLine:"CircleLine",DiamondCircle:"DiamondCircle",PlusCircle:"PlusCircle",OpenRightTriangleTop:"OpenRightTriangleTop",OpenRightTriangleBottom:"OpenRightTriangleBottom",Line:"Line",DoubleLine:"DoubleLine",TripleLine:"TripleLine",PentagonArrow:"PentagonArrow"},PanelTypes={Position:"Position",Horizontal:"Horizontal",Vertical:"Vertical",Spot:"Spot",Auto:"Auto",Table:"Table",Viewbox:"Viewbox",TableRow:"TableRow",TableColumn:"TableColumn",Link:"Link",Grid:"Grid",Graduated:"Graduated"},ToolNames={Action:"Action",Relinking:"Relinking",LinkReshaping:"LinkReshaping",Rotating:"Rotating",Resizing:"Resizing",Linking:"Linking",Dragging:"Dragging",DragSelecting:"DragSelecting",Panning:"Panning",ContextMenu:"ContextMenu",TextEditing:"TextEditing",ClickCreating:"ClickCreating",ClickSelecting:"ClickSelecting"},Builders={Button:"Button",TreeExpanderButton:"TreeExpanderButton",SubGraphExpanderButton:"SubGraphExpanderButton",ToolTip:"ToolTip",ContextMenu:"ContextMenu",ContextMenuButton:"ContextMenuButton",PanelExpanderButton:"PanelExpanderButton",CheckBoxButton:"CheckBoxButton",CheckBox:"CheckBox",AutoRepeatButton:"AutoRepeatButton",ToggleSwitch:"ToggleSwitch",Toggle:"Toggle"},LayerNames={Grid:"Grid",ViewportBackground:"ViewportBackground",Background:"Background",Default:"",Foreground:"Foreground",ViewportForeground:"ViewportForeground",Adornment:"Adornment",Tool:"Tool"};class EmptyIterator{b;constructor(){this.b=[]}[Symbol.iterator](){return this.b.values()}key;value;get iterator(){return this}reset(){}next(){return!1}hasNext(){return!1}first(){return null}any(){return!1}all(){return!0}each(){return this}map(t){return this}filter(){return this}get count(){return 0}zl(){}toString(){return"EmptyIterator"}static instance=new EmptyIterator}class SingletonIterator{constructor(t){this.key=-1,this.value=t}[Symbol.iterator](){return[this.value].values()}key;value;get iterator(){return this}reset(){this.key=-1}next(){return this.key===-1?(this.key=0,!0):!1}hasNext(){return this.next()}first(){return this.key=0,this.value}any(t){return this.key=-1,t(this.value)}all(t){return this.key=-1,t(this.value)}each(t){return this.key=-1,t(this.value),this}map(t){return new SingletonIterator(t(this.value))}filter(t){return t(this.value)?new SingletonIterator(this.value):EmptyIterator.instance}get count(){return 1}zl(){this.value=null}toString(){return"SingletonIterator("+this.value+")"}}class ListIterator{ti;$s;Jt;Vt;constructor(t){this.ti=t,this.$s=null,t.Mr=null,this.Jt=t.dt,this.Vt=-1}[Symbol.iterator](){return this.$s===null?this.ti.h.values():this.ti.h.filter(this.$s).values()}key;value;get iterator(){return this}get predicate(){return this.$s}set predicate(t){this.$s=t}reset(){const t=this.ti;t.Mr=null,this.Jt=t.dt,this.Vt=-1}next(){const t=this.ti;if(t.dt!==this.Jt){if(this.key<0)return!1;U.$e(t)}const i=t.h,e=i.length;let s=++this.Vt;const n=this.$s;if(n!==null)for(;s<e;){const o=i[s];if(n(o))return this.Vt=s,this.key=s,this.value=o,!0;s++}else{if(s<e)return this.key=s,this.value=i[s],!0;this.zl()}return!1}hasNext(){return this.next()}first(){const t=this.ti;this.Jt=t.dt,this.Vt=0;const i=t.h,e=i.length,s=this.$s;if(s!==null){let n=0;for(;n<e;){const o=i[n];if(s(o))return this.Vt=n,this.key=n,this.value=o,o;n++}return null}else if(e>0){const n=i[0];return this.key=0,this.value=n,n}else return null}any(t){const i=this.ti;i.Mr=null;const e=i.dt;this.Vt=-1;const s=i.h,n=s.length,o=this.$s;for(let r=0;r<n;r++){const l=s[r];if(!(o!==null&&!o(l))){if(t(l))return!0;i.dt!==e&&U.$e(i)}}return!1}all(t){const i=this.ti;i.Mr=null;const e=i.dt;this.Vt=-1;const s=i.h,n=s.length,o=this.$s;for(let r=0;r<n;r++){const l=s[r];if(!(o!==null&&!o(l))){if(!t(l))return!1;i.dt!==e&&U.$e(i)}}return!0}each(t){const i=this.ti;i.Mr=null;const e=i.dt;this.Vt=-1;const s=i.h,n=s.length,o=this.$s;for(let r=0;r<n;r++){const l=s[r];o!==null&&!o(l)||(t(l),i.dt!==e&&U.$e(i))}return this}map(t){const i=this.ti;i.Mr=null;const e=i.dt;this.Vt=-1;const s=[],n=i.h,o=n.length,r=this.$s;for(let h=0;h<o;h++){const a=n[h];r!==null&&!r(a)||(s.push(t(a)),i.dt!==e&&U.$e(i))}const l=new List;return l.h=s,l.Ze(),l.iterator}filter(t){const i=this.ti;i.Mr=null;const e=i.dt;this.Vt=-1;const s=[],n=i.h,o=n.length,r=this.$s;for(let h=0;h<o;h++){const a=n[h];r!==null&&!r(a)||(t(a)&&s.push(a),i.dt!==e&&U.$e(i))}const l=new List;return l.h=s,l.Ze(),l.iterator}get count(){const t=this.$s;if(t!==null){let i=0;const e=this.ti.h,s=e.length;for(let n=0;n<s;n++)t(e[n])&&i++;return i}else return this.ti.h.length}zl(){this.key=-1,this.value=null,this.Jt=-1,this.$s=null,this.ti.Mr=this}toString(){return"ListIterator@"+this.Vt+"/"+this.ti.count}}class ListIteratorBackwards{ti;Jt;Vt;constructor(t){this.ti=t,t.Cr=null,this.Jt=t.dt,this.Vt=t.h.length}[Symbol.iterator](){return this.ti.h.reverse().values()}key;value;get iterator(){return this}reset(){const t=this.ti;t.Cr=null,this.Jt=t.dt,this.Vt=t.h.length}next(){const t=this.ti;if(t.dt!==this.Jt){if(this.key<0)return!1;U.$e(t)}const i=--this.Vt;return i>=0?(this.key=i,this.value=t.h[i],!0):(this.zl(),!1)}hasNext(){return this.next()}first(){const t=this.ti;this.Jt=t.dt;const i=t.h,e=i.length-1;if(this.Vt=e,e>=0){const s=i[e];return this.key=e,this.value=s,s}else return null}any(t){const i=this.ti;i.Cr=null;const e=i.dt,s=i.h,n=s.length;this.Vt=n;for(let o=n-1;o>=0;o--){const r=s[o];if(t(r))return!0;i.dt!==e&&U.$e(i)}return!1}all(t){const i=this.ti;i.Cr=null;const e=i.dt,s=i.h,n=s.length;this.Vt=n;for(let o=n-1;o>=0;o--){const r=s[o];if(!t(r))return!1;i.dt!==e&&U.$e(i)}return!0}each(t){const i=this.ti;i.Cr=null;const e=i.dt,s=i.h,n=s.length;this.Vt=n;for(let o=n-1;o>=0;o--){const r=s[o];t(r),i.dt!==e&&U.$e(i)}return this}map(t){const i=this.ti;i.Cr=null;const e=i.dt,s=[],n=i.h,o=n.length;this.Vt=o;for(let l=o-1;l>=0;l--){const h=n[l];s.push(t(h)),i.dt!==e&&U.$e(i)}const r=new List;return r.h=s,r.Ze(),r.iterator}filter(t){const i=this.ti;i.Cr=null;const e=i.dt,s=[],n=i.h,o=n.length;this.Vt=o;for(let l=o-1;l>=0;l--){const h=n[l];t(h)&&s.push(h),i.dt!==e&&U.$e(i)}const r=new List;return r.h=s,r.Ze(),r.iterator}get count(){return this.ti.h.length}zl(){this.key=-1,this.value=null,this.Jt=-1,this.ti.Cr=this}toString(){return"ListIteratorBackwards("+this.Vt+"/"+this.ti.count+")"}}class List{p;h;dt;Mr;Cr;constructor(t){GSet.se(this),this.p=!1,this.h=[],this.dt=0,this.Mr=null,this.Cr=null,t!==void 0&&this.addAll(t)}[Symbol.iterator](){return this.h.values()}Ze(){let t=this.dt;t++,t>999999999&&(t=0),this.dt=t}S(){return this.p=!0,this}si(){return this.p=!1,this}toString(){return"List()#"+GSet.Cs(this)}add(t){return this.p&&U.F(this,t),this.h.push(t),this.Ze(),this}push(t){this.add(t)}addAll(t){if(t===null)return this;this.p&&U.F(this);const i=this.h;if(t.first){const e=t.iterator;for(;e.next();)i.push(e.value)}else for(const e of t)i.push(e);return this.Ze(),this}clear(){this.p&&U.F(this),this.h.length=0,this.Ze()}contains(t){return this.has(t)}has(t){return t===null?!1:this.h.indexOf(t)!==-1}indexOf(t){return t===null?-1:this.h.indexOf(t)}elt(t){Debug&&U.r(t,List,"elt:i");const i=this.h;return(t<0||t>=i.length)&&U.q(t,"0 <= i < length",List,"elt:i"),i[t]}get(t){return this.elt(t)}setElt(t,i){Debug&&U.r(t,List,"setElt:i");const e=this.h;(t<0||t>=e.length)&&U.q(t,"0 <= i < length",List,"setElt:i"),this.p&&U.F(this,t),e[t]=i}set(t,i){this.setElt(t,i)}first(){const t=this.h;return t.length===0?null:t[0]}last(){const t=this.h,i=t.length;return i>0?t[i-1]:null}pop(){this.p&&U.F(this);const t=this.h;if(t.length>0){const i=t.pop();return i===void 0?null:i}return null}any(t){const i=this.h,e=this.dt,s=i.length;for(let n=0;n<s;n++){if(t(i[n]))return!0;this.dt!==e&&U.$e(this)}return!1}all(t){const i=this.h,e=this.dt,s=i.length;for(let n=0;n<s;n++){if(!t(i[n]))return!1;this.dt!==e&&U.$e(this)}return!0}each(t){const i=this.h,e=this.dt,s=i.length;for(let n=0;n<s;n++)t(i[n]),this.dt!==e&&U.$e(this);return this}map(t){const i=new List,e=[],s=this.h,n=this.dt,o=s.length;for(let r=0;r<o;r++)e.push(t(s[r])),this.dt!==n&&U.$e(this);return i.h=e,i.Ze(),i}filter(t){const i=new List,e=[],s=this.h,n=this.dt,o=s.length;for(let r=0;r<o;r++){const l=s[r];t(l)&&e.push(l),this.dt!==n&&U.$e(this)}return i.h=e,i.Ze(),i}insertAt(t,i){Debug&&U.r(t,List,"insertAt:i"),t<0&&U.q(t,">= 0",List,"insertAt:i"),this.p&&U.F(this,t);const e=this.h;t>=e.length?e.push(i):e.splice(t,0,i),this.Ze()}remove(t){return this.delete(t)}delete(t){if(t===null)return!1;this.p&&U.F(this,t);const i=this.h,e=i.indexOf(t);return e===-1?!1:(e===i.length-1?i.pop():i.splice(e,1),this.Ze(),!0)}removeAt(t){Debug&&U.r(t,List,"removeAt:i");const i=this.h;(t<0||t>=i.length)&&U.q(t,"0 <= i < length",List,"removeAt:i"),this.p&&U.F(this,t),t===i.length-1?i.pop():i.splice(t,1),this.Ze()}removeRange(t,i){Debug&&(U.r(t,List,"removeRange:from"),U.r(i,List,"removeRange:to"));const e=this.h,s=e.length;if(t<0)t=0;else if(t>=s)return this;if(i<0)return this;if(i>=s&&(i=s-1),t>i)return this;this.p&&U.F(this);let n=t,o=i+1;for(;o<s;)e[n++]=e[o++];return e.length=s-(i-t+1),this.Ze(),this}copy(){const t=new List,i=this.h;return i.length>0&&(t.h=Array.prototype.slice.call(i)),t}toArray(){const t=this.h,i=this.count,e=new Array(i);for(let s=0;s<i;s++)e[s]=t[s];return e}get aT(){return this.h}toSet(){const t=new GSet,i=this.h,e=this.count;for(let s=0;s<e;s++)t.add(i[s]);return t}sort(t){return Debug&&U.C(t,List,"sort:sortfunc"),this.p&&U.F(this),this.h.sort(t),this.Ze(),this}sortRange(t,i,e){const s=this.h,n=s.length;i===void 0&&(i=0),e===void 0&&(e=n),Debug&&(U.C(t,List,"sortRange:sortfunc"),U.r(i,List,"sortRange:from"),U.r(e,List,"sortRange:to")),this.p&&U.F(this);const o=e-i;if(o<=1)return this;if((i<0||i>=n-1)&&U.q(i,"0 <= from < length",List,"sortRange:from"),o===2){const r=s[i],l=s[i+1];return t(r,l)>0&&(s[i]=l,s[i+1]=r,this.Ze()),this}if(i===0)if(e>=n)s.sort(t);else{const r=s.slice(0,e);r.sort(t);for(let l=0;l<e;l++)s[l]=r[l]}else if(e>=n){const r=s.slice(i);r.sort(t);for(let l=i;l<n;l++)s[l]=r[l-i]}else{const r=s.slice(i,e);r.sort(t);for(let l=i;l<e;l++)s[l]=r[l-i]}return this.Ze(),this}reverse(){return this.p&&U.F(this),this.h.reverse(),this.Ze(),this}get count(){return this.h.length}get size(){return this.h.length}get length(){return this.h.length}get iterator(){if(this.h.length<=0)return EmptyIterator.instance;const t=this.Mr;return t!==null?(t.reset(),t):new ListIterator(this)}get iteratorBackwards(){if(this.h.length<=0)return EmptyIterator.instance;const t=this.Cr;return t!==null?(t.reset(),t):new ListIteratorBackwards(this)}}class SetIterator{Yo;fi;constructor(t){this.Yo=t,this.fi=t.b.values()}[Symbol.iterator](){return this.Yo.b.values()}key;value;get iterator(){return this}reset(){const t=this.Yo;this.fi=t.b.values()}next(){const t=this.fi.next();return this.value=t.value,this.key=t.value,!t.done}hasNext(){return this.next()}first(){return this.Yo.b.size===0?null:(this.fi=this.Yo.b.values(),this.fi.next().value)}any(t){return this.Yo.any(t)}all(t){return this.Yo.all(t)}each(t){return this.Yo.each(t),this}map(t){const i=new List;return this.Yo.b.forEach(e=>i.add(t(e))),i.iterator}filter(t){const i=new List;return this.Yo.b.forEach(e=>{t(e)&&i.add(e)}),i.iterator}get count(){return this.Yo.count}zl(){this.key=null,this.value=null,this.fi=null}toString(){return"SetIterator"}}class GSet{p;b;constructor(t){this.p=!1,this.b=new Set,t!==void 0&&this.addAll(t)}[Symbol.iterator](){return this.b.values()}values(){return this.b.values()}S(){return this.p=!0,this}si(){return this.p=!1,this}toString(){return"Set()#"+GSet.Cs(this)}add(t){return t===null?this:(this.b.add(t),this)}addAll(t){if(t===null)return this;if(this.p&&U.F(this),t.first){const i=t.iterator;for(;i.next();)this.b.add(i.value)}else for(const i of t)this.b.add(i);return this}has(t){return this.b.has(t)}contains(t){return this.has(t)}containsAll(t){if(t===null)return!0;if(t.first){const i=t.iterator;for(;i.next();)if(!this.has(i.value))return!1}else for(const i of t)if(!this.has(i))return!1;return!0}containsAny(t){if(t===null)return!0;if(t.first){const i=t.iterator;for(;i.next();)if(this.has(i.value))return!0}else for(const i of t)if(this.has(i))return!0;return!1}first(){return this.b.size===0?null:this.b.values().next().value}any(t){for(const i of this.b)if(t(i))return!0;return!1}all(t){for(const i of this.b)if(!t(i))return!1;return!0}each(t){for(const i of this.b)t(i);return this}map(t){const i=new GSet;for(const e of this.b)i.add(t(e));return i}filter(t){const i=new GSet;for(const e of this.b)t(e)&&i.add(e);return i}delete(t){return this.p&&U.F(this),this.b.delete(t)}remove(t){return this.delete(t)}removeAll(t){if(t===null)return this;if(this.p&&U.F(this),t.first){const i=t.iterator;for(;i.next();)this.delete(i.value)}else for(const i of t)this.delete(i);return this}retainAll(t){if(t===null)return this;if(this.count===0)return this;this.p&&U.F(this);const i=new GSet;i.addAll(t);const e=[];if(t.first){const s=t.iterator;for(;s.next();){const n=s.value;i.has(n)||e.push(n)}}else for(const s of t)i.has(s)||e.push(s);return this.removeAll(e),this}clear(){this.p&&U.F(this),this.b.clear()}copy(){const t=new GSet;return this.b.forEach(i=>t.add(i)),t}toArray(){return Array.from(this.b)}toList(){const t=new List;return this.b.forEach(i=>t.add(i)),t}get count(){return this.b.size}get size(){return this.b.size}get iterator(){return this.b.size<=0?EmptyIterator.instance:new SetIterator(this)}entries(){return this.b.entries()}keys(){return this.b.keys()}forEach(t,i){return this.b.forEach(t,i)}static gx=1;static se(t){t.__gohashid=GSet.gx++}static Cs(t){return t.__gohashid}}class MapKeySetIterator{_;fi;constructor(t){this._=t,this.fi=t.b.keys()}[Symbol.iterator](){return this._.b.keys()}key;value;get iterator(){return this}reset(){const t=this._;this.fi=t.b.keys()}next(){const t=this.fi.next();return this.value=t.value,this.key=t.value,!t.done}hasNext(){return this.next()}first(){return this._.b.size===0?null:(this.fi=this._.b.keys(),this.fi.next().value)}any(t){for(const i of this._.b)if(t(i[0]))return!0;return!1}all(t){for(const i of this._.b)if(!t(i[0]))return!1;return!0}each(t){for(const i of this._.b)t(i[0]);return this}map(t){const i=this._,e=new List;for(const s of i.b)e.add(t(s[0]));return e.iterator}filter(t){const i=this._,e=new List;for(const s of i.b){const n=s[0];t(n)&&e.add(n)}return e.iterator}get count(){return this._.size}zl(){this.key=null,this.value=null,this.fi=null}toString(){return"MapKeySetIterator"}}class MapKeySet extends GSet{_;constructor(t){super(),GSet.se(this),this.p=!0,this._=t}[Symbol.iterator](){return this.b.keys()}values(){return this.b.keys()}S(){return this}si(){return this}toString(){return"MapKeySet("+this._.toString()+")"}add(t){U.n("This Set is read-only: "+this.toString())}has(t){return this._.has(t)}contains(t){return this.has(t)}delete(t){U.n("This Set is read-only: "+this.toString())}remove(t){return this.delete(t)}clear(){U.n("This Set is read-only: "+this.toString())}first(){return this._.b.size===0?null:this._.b.keys().next().value}any(t){for(const i of this._.b)if(t(i[0]))return!0;return!1}all(t){for(const i of this._.b)if(!t(i[0]))return!1;return!0}each(t){for(const i of this._.b)t(i[0]);return this}map(t){const i=new GSet;for(const e of this._.b)i.add(t(e[0]));return i}filter(t){const i=new GSet;for(const e of this._.b){const s=e[0];t(s)&&i.add(s)}return i}copy(){return new MapKeySet(this._)}toSet(){const t=new GSet,i=this._.b;for(const e of i)t.add(e[0]);return t}toArray(){const t=this._.b,i=new Array(t.size);let e=0;for(const s of t)i[e]=s[0],e++;return i}toList(){const t=new List,i=this._.b;for(const e of i)t.add(e[0]);return t}get count(){return this._.size}get size(){return this._.size}get iterator(){return this._.size<=0?EmptyIterator.instance:new MapKeySetIterator(this._)}}class MapValueSetIterator{_;fi;constructor(t){this._=t,this.fi=t.b.values()}[Symbol.iterator](){return this._.b.values()}key;value;get iterator(){return this}reset(){const t=this._;this.fi=t.b.values()}next(){const t=this.fi.next();return this.value=t.value,this.key=t.value,!t.done}hasNext(){return this.next()}first(){return this._.b.size===0?null:(this.fi=this._.b.values(),this.fi.next().value)}any(t){for(const i of this._.b)if(t(i[1]))return!0;return!1}all(t){for(const i of this._.b)if(!t(i[1]))return!1;return!0}each(t){for(const i of this._.b)t(i[1]);return this}map(t){const i=this._,e=new List;for(const s of i.b)e.add(t(s[1]));return e.iterator}filter(t){const i=this._,e=new List;for(const s of i.b){const n=s[1];t(n)&&e.add(n)}return e.iterator}get count(){return this._.size}zl(){this.key=null,this.value=null,this.fi=null}toString(){return"MapValueSetIterator"}}class KeyValuePair{constructor(t,i){this.key=t,this.value=i}toString(){return"{"+this.key+":"+this.value+"}"}key;value}class MapIterator{_;fi;constructor(t){this._=t,this.fi=t.b.entries()}[Symbol.iterator](){return this._.b.entries()}key;value;get iterator(){return this}reset(){const t=this._;this.fi=t.b.entries()}next(){const t=this.fi.next();return t.done?(this.key=null,this.value=null,!1):(this.key=t.value[0],this.value=t.value[1],!0)}hasNext(){return this.next()}first(){if(this._.b.size===0)return null;this.fi=this._.b.entries();const t=this.fi.next().value;return this.key=t[0],this.value=t[1],new KeyValuePair(t[0],t[1])}any(t){return this._.any(t)}all(t){return this._.all(t)}each(t){return this._.each(t),this}map(t){const i=new List;let e=null;return this._.b.forEach((s,n)=>{e===null?e=new KeyValuePair(n,s):(e.key=n,e.value=s),i.add(t(e))}),i.iterator}filter(t){const i=new List;let e=null;return this._.b.forEach((s,n)=>{e===null?e=new KeyValuePair(n,s):(e.key=n,e.value=s),t(e)&&(i.add(e),e=null)}),i.iterator}get count(){return this._.size}zl(){this.key=null,this.value=null,this.fi=null}toString(){return"MapIterator"}}class GMap{p;b;constructor(t){GSet.se(this),this.p=!1,this.b=new Map,t!==void 0&&this.addAll(t)}[Symbol.iterator](){return this.b.entries()}entries(){return this.b.entries()}S(){return this.p=!0,this}si(){return this.p=!1,this}toString(){return"Map()#"+GSet.Cs(this)}set(t,i){return this.p&&U.F(this,t),this.b.set(t,i),this}add(t,i){return this.set(t,i)}addAll(t){if(t===null)return this;if(this.p&&U.F(this),t instanceof GMap){const i=t.iterator;for(;i.next();)this.b.set(i.key,i.value)}else if(t.first){const i=t.iterator;for(;i.next();){const e=i.value;this.b.set(e.key,e.value)}}else for(const i of t){const e=i;Array.isArray(e)?this.b.set(e[0],e[1]):this.b.set(e.key,e.value)}return this}first(){if(this.b.size===0)return null;const t=this.b.entries().next().value;return t?new KeyValuePair(t[0],t[1]):null}any(t){let i=null;for(const[e,s]of this.b)if(i===null?i=new KeyValuePair(e,s):(i.key=e,i.value=s),t(i))return!0;return!1}all(t){let i=null;for(const[e,s]of this.b)if(i===null?i=new KeyValuePair(e,s):(i.key=e,i.value=s),!t(i))return!1;return!0}each(t){let i=null;for(const[e,s]of this.b)i===null?i=new KeyValuePair(e,s):(i.key=e,i.value=s),t(i);return this}map(t){const i=new GMap;let e=null;for(const[s,n]of this.b)e===null?e=new KeyValuePair(s,n):(e.key=s,e.value=n),i.set(s,t(e));return i}filter(t){const i=new GMap;let e=null;for(const[s,n]of this.b)e===null?e=new KeyValuePair(s,n):(e.key=s,e.value=n),t(e)&&i.set(s,n);return i}has(t){return this.b.has(t)}contains(t){return this.has(t)}get(t){const i=this.b.get(t);return i===void 0?null:i}getValue(t){return this.get(t)}delete(t){return t===null?!1:(this.p&&U.F(this,t),this.b.delete(t))}remove(t){return this.delete(t)}clear(){this.p&&U.F(this),this.b.clear()}copy(){const t=new GMap;return t.b=new Map(this.b),t}toArray(){const t=this.b,i=new Array(t.size);let e=0;for(const s of t)i[e]=new KeyValuePair(s[0],s[1]),e++;return i}toKeySet(){return new MapKeySet(this)}get count(){return this.b.size}get size(){return this.b.size}get iterator(){return this.b.size<=0?EmptyIterator.instance:new MapIterator(this)}get iteratorKeys(){return this.count<=0?EmptyIterator.instance:new MapKeySetIterator(this)}keys(){return this.b.keys()}get iteratorValues(){return this.count<=0?EmptyIterator.instance:new MapValueSetIterator(this)}values(){return this.b.values()}forEach(t,i){return this.b.forEach(t,i)}}class Point{px;py;p;constructor(t,i){t===void 0?(this.px=0,this.py=0):typeof t=="number"&&typeof i=="number"?(this.px=t,this.py=i):U.n("Invalid arguments to Point constructor: "+t+", "+i),this.p=!1}f(t){return this.px=t.px,this.py=t.py,this}e(t,i){return this.px=t,this.py=i,this}setTo(t,i){return Debug&&(U.i(t,"number",Point,"setTo:x"),U.i(i,"number",Point,"setTo:y"),this.tt()),this.px=t,this.py=i,this}set(t){return Debug&&(U.s(t,Point,Point,"set:p"),this.tt()),this.px=t.px,this.py=t.py,this}copy(){const t=new Point;return t.px=this.px,t.py=this.py,t}Ct(){return this.p=!0,Object.freeze(this),this}T(){return this.p||Object.isFrozen(this)?this:this.copy().S()}S(){return this.p||(this.p=!0),this}tt(t){if(Debug&&this.p){let i="The Point is frozen, so its properties cannot be set: "+this.toString();t!==void 0&&(i+="  to value: "+t),U.n(i)}}static parse(t){if(typeof t=="string"){const i=t.split(" ");let e=0,s=0;for(;i[e]==="";)e++;let n=i[e++];n&&(s=parseFloat(n));let o=0;for(;i[e]==="";)e++;return n=i[e++],n&&(o=parseFloat(n)),new Point(s,o)}else return new Point}static stringify(t){return Debug&&U.s(t,Point),t.x.toString()+" "+t.y.toString()}static stringifyFixed(t){return U.i(t,"number",Point,"stringifyFixed:digits"),i=>i.x.toFixed(t)+" "+i.y.toFixed(t)}toString(){return"Point("+this.x+","+this.y+")"}equals(t){return t instanceof Point?this.px===t.x&&this.py===t.y:!1}equalTo(t,i){return this.px===t&&this.py===i}equalsApprox(t){return G.u(this.px,t.x)&&G.u(this.py,t.y)}add(t){return Debug&&(U.s(t,Point,Point,"add:p"),this.tt()),this.px+=t.x,this.py+=t.y,this}subtract(t){return Debug&&(U.s(t,Point,Point,"subtract:p"),this.tt()),this.px-=t.x,this.py-=t.y,this}offset(t,i){return Debug&&(U.r(t,Point,"offset:dx"),U.r(i,Point,"offset:dy"),this.tt()),this.px+=t,this.py+=i,this}rotate(t){if(Debug&&(U.r(t,Point,"rotate:angle"),this.tt()),t===0)return this;const i=this.px,e=this.py;if(i===0&&e===0)return this;let s=0,n=0;if(t=G.qi(t),t===90)s=0,n=1;else if(t===180)s=-1,n=0;else if(t===270)s=0,n=-1;else{const o=t*Math.PI/180;s=Math.cos(o),n=Math.sin(o)}return this.px=s*i-n*e,this.py=n*i+s*e,this}scale(t,i){return Debug&&(U.r(t,Point,"scale:sx"),U.r(i,Point,"scale:sy"),this.tt()),this.px*=t,this.py*=i,this}distanceSquaredPoint(t){Debug&&U.s(t,Point,Point,"distanceSquaredPoint:p");const i=t.x-this.px,e=t.y-this.py;return i*i+e*e}distanceSquared(t,i){Debug&&(U.r(t,Point,"distanceSquared:px"),U.r(i,Point,"distanceSquared:py"));const e=t-this.px,s=i-this.py;return e*e+s*s}normalize(){Debug&&this.tt();const t=this.px,i=this.py,e=Math.sqrt(t*t+i*i);return e>0&&(this.px=t/e,this.py=i/e),this}directionPoint(t){return Debug&&U.s(t,Point,Point,"directionPoint:p"),this.cT(t.x-this.px,t.y-this.py)}direction(t,i){return Debug&&(U.r(t,Point,"direction:px"),U.r(i,Point,"direction:py")),this.cT(t-this.px,i-this.py)}cT(t,i){if(t===0)return i>0?90:i<0?270:0;if(i===0)return t>0?0:180;{if(isNaN(t)||isNaN(i))return 0;let e=Math.atan(Math.abs(i/t))*180/Math.PI;return t<0?i<0?e+=180:e=180-e:i<0&&(e=360-e),e}}static compareWithLineSegment(t,i,e,s,n,o){return Debug&&(U.r(t,Point,"compareWithLineSegment:a1x"),U.r(i,Point,"compareWithLineSegment:a1y"),U.r(e,Point,"compareWithLineSegment:a2x"),U.r(s,Point,"compareWithLineSegment:a2y"),U.r(n,Point,"compareWithLineSegment:b1x"),U.r(o,Point,"compareWithLineSegment:b1y")),G.Eu(t,i,e,s,n,o)}compareWithLineSegmentPoint(t,i){return Debug&&(U.s(t,Point,Point,"compareWithLineSegmentPoint:p"),U.s(i,Point,Point,"compareWithLineSegmentPoint:q")),G.Eu(t.x,t.y,i.x,i.y,this.x,this.y)}static intersectingLineSegments(t,i,e,s,n,o,r,l){return Debug&&(U.r(t,Point,"intersectingLineSegments:a1x"),U.r(i,Point,"intersectingLineSegments:a1y"),U.r(e,Point,"intersectingLineSegments:a2x"),U.r(s,Point,"intersectingLineSegments:a2y"),U.r(n,Point,"intersectingLineSegments:b1x"),U.r(o,Point,"intersectingLineSegments:b1y"),U.r(r,Point,"intersectingLineSegments:b2x"),U.r(l,Point,"intersectingLineSegments:b2y")),G.Nr(t,i,e,s,n,o,r,l)}projectOntoLineSegment(t,i,e,s){return Debug&&(U.r(t,Point,"projectOntoLineSegment:px"),U.r(i,Point,"projectOntoLineSegment:py"),U.r(e,Point,"projectOntoLineSegment:qx"),U.r(s,Point,"projectOntoLineSegment:qy")),G.Xl(t,i,e,s,this.px,this.py,this),this}projectOntoLineSegmentPoint(t,i){return Debug&&(U.s(t,Point,Point,"projectOntoLineSegmentPoint:p"),U.s(i,Point,Point,"projectOntoLineSegmentPoint:q")),G.Xl(t.x,t.y,i.x,i.y,this.px,this.py,this),this}snapToGrid(t,i,e,s){return Debug&&(U.r(t,Point,"snapToGrid:originx"),U.r(i,Point,"snapToGrid:originy"),U.r(e,Point,"snapToGrid:cellwidth"),U.r(s,Point,"snapToGrid:cellheight")),G.xm(this.px,this.py,t,i,e,s,this),this}snapToGridPoint(t,i){return Debug&&(U.s(t,Point,Point,"snapToGridPoint:p"),U.s(i,Size,Point,"snapToGridPoint:q")),G.xm(this.px,this.py,t.x,t.y,i.width,i.height,this),this}setRectSpot(t,i){return Debug&&(U.s(t,Rect,Point,"setRectSpot:r"),U.s(i,Spot,Point,"setRectSpot:spot"),this.tt()),this.px=t.x+i.x*t.width+i.offsetX,this.py=t.y+i.y*t.height+i.offsetY,this}setSpot(t,i,e,s,n){return Debug&&(U.r(t,Point,"setSpot:x"),U.r(i,Point,"setSpot:y"),U.r(e,Point,"setSpot:w"),U.r(s,Point,"setSpot:h"),(e<0||s<0)&&U.n("Point.setSpot:Width and height cannot be negative"),U.s(n,Spot,Point,"setSpot:spot"),this.tt()),this.px=t+n.x*e+n.offsetX,this.py=i+n.y*s+n.offsetY,this}D(t){return t.Pt(this),this}Ie(t){return t.Oe(this),this}static distanceLineSegmentSquared(t,i,e,s,n,o){Debug&&(U.r(t,Point,"distanceLineSegmentSquared:px"),U.r(i,Point,"distanceLineSegmentSquared:py"),U.r(e,Point,"distanceLineSegmentSquared:ax"),U.r(s,Point,"distanceLineSegmentSquared:ay"),U.r(n,Point,"distanceLineSegmentSquared:bx"),U.r(o,Point,"distanceLineSegmentSquared:by"));let r=n-e,l=o-s;const h=r*r+l*l,a=e-t,c=s-i,f=-a*r-c*l;if(f<=0||f>=h)return r=n-t,l=o-i,Math.min(a*a+c*c,r*r+l*l);{const u=r*c-l*a;return u*u/h}}static distanceSquared(t,i,e,s){Debug&&(U.r(t,Point,"distanceSquared:px"),U.r(i,Point,"distanceSquared:py"),U.r(e,Point,"distanceSquared:qx"),U.r(s,Point,"distanceSquared:qy"));const n=e-t,o=s-i;return n*n+o*o}static direction(t,i,e,s){Debug&&(U.r(t,Point,"direction:px"),U.r(i,Point,"direction:py"),U.r(e,Point,"direction:qx"),U.r(s,Point,"direction:qy"));const n=e-t,o=s-i;if(n===0)return o>0?90:o<0?270:0;if(o===0)return n>0?0:180;{if(isNaN(n)||isNaN(o))return 0;let r=Math.atan(Math.abs(o/n))*180/Math.PI;return n<0?o<0?r+=180:r=180-r:o<0&&(r=360-r),r}}get x(){return this.px}set x(t){Debug&&(U.i(t,"number",Point,"x"),this.tt(t)),this.px=t}get y(){return this.py}set y(t){Debug&&(U.i(t,"number",Point,"y"),this.tt(t)),this.py=t}isReal(){return isFinite(this.x)&&isFinite(this.y)}static kn=new Point(0,0).Ct();static fT=new Point(-1/0,-1/0).Ct();static uT=new Point(1/0,1/0).Ct();static dT=new Point(6,6).Ct();static Pn=new Point(NaN,NaN).Ct();static mx=[];static a(){const t=Point.mx.pop();return t===void 0?new Point:t}static Qe(t){const i=Point.mx.pop();return i===void 0?t.copy():i.f(t)}static V(t,i){const e=Point.mx.pop();return e===void 0?new Point(t,i):(e.x=t,e.y=i,e)}static o(t){Point.mx.push(t)}}class Size{sw;sh;p;constructor(t,i){t===void 0?(this.sw=0,this.sh=0):typeof t=="number"&&(t>=0||isNaN(t))&&typeof i=="number"&&(i>=0||isNaN(i))?(this.sw=t,this.sh=i):U.n("Invalid arguments to Size constructor: "+t+", "+i),this.p=!1}f(t){return this.sw=t.sw,this.sh=t.sh,this}e(t,i){return this.sw=t,this.sh=i,this}setTo(t,i){return Debug&&(U.i(t,"number",Size,"setTo:w"),U.i(i,"number",Size,"setTo:h"),t<0&&U.q(t,">= 0",Size,"setTo:w"),i<0&&U.q(i,">= 0",Size,"setTo:h"),this.tt()),this.sw=t,this.sh=i,this}set(t){return Debug&&(U.s(t,Size,Size,"set:s"),this.tt()),this.sw=t.sw,this.sh=t.sh,this}copy(){const t=new Size;return t.sw=this.sw,t.sh=this.sh,t}Ct(){return this.p=!0,Object.freeze(this),this}T(){return this.p||Object.isFrozen(this)?this:this.copy().S()}S(){return this.p||(this.p=!0),this}tt(t){if(Debug&&this.p){let i="The Size is frozen, so its properties cannot be set: "+this.toString();t!==void 0&&(i+="  to value: "+t),U.n(i)}}static parse(t){if(typeof t=="string"){const i=t.split(" ");let e=0,s=0;for(;i[e]==="";)e++;let n=i[e++];n&&(s=parseFloat(n));let o=0;for(;i[e]==="";)e++;return n=i[e++],n&&(o=parseFloat(n)),new Size(s,o)}else return new Size}static stringify(t){return Debug&&U.s(t,Size),t.width.toString()+" "+t.height.toString()}static stringifyFixed(t){return U.i(t,"number",Size,"stringifyFixed:digits"),i=>i.width.toFixed(t)+" "+i.height.toFixed(t)}toString(){return"Size("+this.width+","+this.height+")"}equals(t){return t instanceof Size?this.sw===t.width&&this.sh===t.height:!1}equalTo(t,i){return this.sw===t&&this.sh===i}equalsApprox(t){return G.u(this.sw,t.width)&&G.u(this.sh,t.height)}inflate(t,i){Debug&&(U.r(t,Size,"inflate:w"),U.r(i,Size,"inflate:h"));const e=this.width+t;this.sw=e>=0?e:0;const s=this.height+i;return this.sh=s>=0?s:0,this}get width(){return this.sw}set width(t){Debug&&(U.i(t,"number",Size,"width"),this.tt(t)),t<0&&U.q(t,">= 0",Size,"width"),this.sw=t}get height(){return this.sh}set height(t){Debug&&(U.i(t,"number",Size,"height"),this.tt(t)),t<0&&U.q(t,">= 0",Size,"height"),this.sh=t}isReal(){return isFinite(this.width)&&isFinite(this.height)}static ua=new Size(0,0).Ct();static Jk=new Size(1,1).Ct();static gT=new Size(6,6).Ct();static Bu=new Size(8,8).Ct();static mT=new Size(10,10).Ct();static yx=new Size(1/0,1/0).Ct();static wx=new Size(NaN,NaN).Ct();static pT=[];static a(){const t=Size.pT.pop();return t===void 0?new Size:t}static o(t){Size.pT.push(t)}}class Rect{rx;ry;rw;rh;p;constructor(t,i,e,s){if(t===void 0)this.rx=0,this.ry=0,this.rw=0,this.rh=0;else if(typeof t=="number"&&typeof i=="number"&&typeof e=="number"&&(e>=0||isNaN(e))&&typeof s=="number"&&(s>=0||isNaN(s)))this.rx=t,this.ry=i,this.rw=e,this.rh=s;else if(t instanceof Point){const n=t.x,o=t.y;if(i instanceof Point){const r=i.x,l=i.y;this.rx=Math.min(n,r),this.ry=Math.min(o,l),this.rw=Math.abs(n-r),this.rh=Math.abs(o-l)}else i instanceof Size?(this.rx=n,this.ry=o,this.rw=i.width,this.rh=i.height):U.n("Incorrect second argument supplied to Rect constructor "+i)}else U.n("Invalid arguments to Rect constructor: "+t+", "+i+", "+e+", "+s);this.p=!1}f(t){return this.rx=t.rx,this.ry=t.ry,this.rw=t.rw,this.rh=t.rh,this}e(t,i,e,s){return this.rx=t,this.ry=i,this.rw=e,this.rh=s,this}io(t,i){return this.rw=t,this.rh=i,this}setTo(t,i,e,s){return Debug&&(U.i(t,"number",Rect,"setTo:x"),U.i(i,"number",Rect,"setTo:y"),U.i(e,"number",Rect,"setTo:w"),U.i(s,"number",Rect,"setTo:h"),e<0&&U.q(e,">= 0",Rect,"setTo:w"),s<0&&U.q(s,">= 0",Rect,"setTo:h"),this.tt()),this.rx=t,this.ry=i,this.rw=e,this.rh=s,this}set(t){return Debug&&(U.s(t,Rect,Rect,"set:r"),this.tt()),this.rx=t.rx,this.ry=t.ry,this.rw=t.rw,this.rh=t.rh,this}setPoint(t){return Debug&&(U.s(t,Point,Rect,"setPoint:p"),this.tt()),this.rx=t.x,this.ry=t.y,this}setSize(t){return Debug&&(U.s(t,Size,Rect,"setSize:s"),this.tt()),this.rw=t.width,this.rh=t.height,this}copy(){const t=new Rect;return t.rx=this.rx,t.ry=this.ry,t.rw=this.rw,t.rh=this.rh,t}Ct(){return this.p=!0,Object.freeze(this),this}T(){return this.p||Object.isFrozen(this)?this:this.copy().S()}S(){return this.p||(this.p=!0),this}si(){return this.p&&(Object.isFrozen(this)&&U.n("cannot thaw constant: "+this),this.p=!1),this}tt(t){if(Debug&&this.p){let i="The Rect is frozen, so its properties cannot be set: "+this.toString();t!==void 0&&(i+="  to value: "+t),U.n(i)}}static parse(t){if(typeof t=="string"){const i=t.split(" ");let e=0,s=0;for(;i[e]==="";)e++;let n=i[e++];n&&(s=parseFloat(n));let o=0;for(;i[e]==="";)e++;n=i[e++],n&&(o=parseFloat(n));let r=0;for(;i[e]==="";)e++;n=i[e++],n&&(r=parseFloat(n));let l=0;for(;i[e]==="";)e++;return n=i[e++],n&&(l=parseFloat(n)),new Rect(s,o,r,l)}else return new Rect}static stringify(t){return Debug&&U.s(t,Rect),t.x.toString()+" "+t.y.toString()+" "+t.width.toString()+" "+t.height.toString()}static stringifyFixed(t){return U.i(t,"number",Rect,"stringifyFixed:digits"),i=>i.x.toFixed(t)+" "+i.y.toFixed(t)+" "+i.width.toFixed(t)+" "+i.height.toFixed(t)}toString(){return"Rect("+this.x+","+this.y+","+this.width+","+this.height+")"}equals(t){return t instanceof Rect?this.rx===t.x&&this.ry===t.y&&this.rw===t.width&&this.rh===t.height:!1}equalTo(t,i,e,s){return this.rx===t&&this.ry===i&&this.rw===e&&this.rh===s}equalsApprox(t){return G.u(this.rx,t.x)&&G.u(this.ry,t.y)&&G.u(this.rw,t.width)&&G.u(this.rh,t.height)}equalsApproxTo(t,i,e,s){return G.u(this.rx,t)&&G.u(this.ry,i)&&G.u(this.rw,e)&&G.u(this.rh,s)}equalsApproxClose(t){return G.H(this.rx,t.x)&&G.H(this.ry,t.y)&&G.H(this.rw,t.width)&&G.H(this.rh,t.height)}containsPoint(t){return Debug&&U.s(t,Point,Rect,"containsPoint:p"),this.rx<=t.x&&this.rx+this.rw>=t.x&&this.ry<=t.y&&this.ry+this.rh>=t.y}containsRect(t){return Debug&&U.s(t,Rect,Rect,"containsRect:r"),this.rx<=t.x&&t.x+t.width<=this.rx+this.rw&&this.ry<=t.y&&t.y+t.height<=this.ry+this.rh}contains(t,i,e,s){return Debug?(U.r(t,Rect,"contains:x"),U.r(i,Rect,"contains:y"),e===void 0?e=0:U.r(e,Rect,"contains:w"),s===void 0?s=0:U.r(s,Rect,"contains:h"),(e<0||s<0)&&U.n("Rect.contains:Width and height cannot be negative")):(e===void 0&&(e=0),s===void 0&&(s=0)),this.rx<=t&&t+e<=this.rx+this.rw&&this.ry<=i&&i+s<=this.ry+this.rh}offset(t,i){return Debug&&(U.r(t,Rect,"offset:dx"),U.r(i,Rect,"offset:dy"),this.tt()),this.rx+=t,this.ry+=i,this}inflate(t,i){return Debug&&(U.r(t,Rect,"inflate:w"),U.r(i,Rect,"inflate:h")),this.xx(i,t,i,t)}addMargin(t){return Debug&&U.s(t,Margin,Rect,"addMargin:m"),this.xx(t.top,t.right,t.bottom,t.left)}subtractMargin(t){return Debug&&U.s(t,Margin,Rect,"subtractMargin:m"),this.xx(-t.top,-t.right,-t.bottom,-t.left)}grow(t,i,e,s){return Debug&&(U.r(t,Rect,"grow:t"),U.r(i,Rect,"grow:r"),U.r(e,Rect,"grow:b"),U.r(s,Rect,"grow:l")),this.xx(t,i,e,s)}xx(t,i,e,s){Debug&&this.tt();const n=this.rw;i+s<=-n?(this.rx+=n/2,this.rw=0):(this.rx-=s,this.rw+=i+s);const o=this.rh;return t+e<=-o?(this.ry+=o/2,this.rh=0):(this.ry-=t,this.rh+=t+e),this}intersectRect(t){return Debug&&U.s(t,Rect,Rect,"intersectRect:r"),this.yT(t.x,t.y,t.width,t.height)}intersect(t,i,e,s){return Debug&&(U.r(t,Rect,"intersect:x"),U.r(i,Rect,"intersect:y"),U.r(e,Rect,"intersect:w"),U.r(s,Rect,"intersect:h"),(e<0||s<0)&&U.n("Rect.intersect:Width and height cannot be negative")),this.yT(t,i,e,s)}yT(t,i,e,s){Debug&&this.tt();const n=Math.max(this.rx,t),o=Math.max(this.ry,i),r=Math.min(this.rx+this.rw,t+e),l=Math.min(this.ry+this.rh,i+s);return this.rx=n,this.ry=o,this.rw=Math.max(0,r-n),this.rh=Math.max(0,l-o),this}intersectsRect(t){return Debug&&U.s(t,Rect,Rect,"intersectsRect:r"),this.intersects(t.x,t.y,t.width,t.height)}intersects(t,i,e,s){Debug&&(U.r(t,Rect,"intersects:x"),U.r(i,Rect,"intersects:y"),U.r(t,Rect,"intersects:w"),U.r(i,Rect,"intersects:h"),(e<0||s<0)&&U.n("Rect.intersects:Width and height cannot be negative"));let n=this.rw;const o=this.rx;if(n!==1/0&&e!==1/0&&(n+=o,e+=t,isNaN(e)||isNaN(n)||o>e||t>n))return!1;let r=this.rh;const l=this.ry;return!(r!==1/0&&s!==1/0&&(r+=l,s+=i,isNaN(s)||isNaN(r)||l>s||i>r))}$k(t,i){let e=this.rw,s=t.width+i+i;const n=this.rx,o=t.x-i;if(e+=n,s+=o,n>s||o>e)return!1;let r=this.rh,l=t.height+i+i;const h=this.ry,a=t.y-i;return r+=h,l+=a,!(h>l||a>r)}unionPoint(t){return Debug&&U.s(t,Point,Rect,"unionPoint:p"),this.ui(t.x,t.y,0,0)}unionRect(t){return Debug&&U.s(t,Rect,Rect,"unionRect:r"),this.ui(t.rx,t.ry,t.rw,t.rh)}union(t,i,e,s){return Debug?(U.r(t,Rect,"union:x"),U.r(i,Rect,"union:y"),e===void 0?e=0:U.r(e,Rect,"union:w"),s===void 0?s=0:U.r(s,Rect,"union:h"),(e<0||s<0)&&U.n("Rect.union:Width and height cannot be negative"),this.tt()):(e===void 0&&(e=0),s===void 0&&(s=0)),this.ui(t,i,e,s)}ui(t,i,e,s){const n=Math.min(this.rx,t),o=Math.min(this.ry,i),r=Math.max(this.rx+this.rw,t+e),l=Math.max(this.ry+this.rh,i+s);return this.rx=n,this.ry=o,this.rw=r-n,this.rh=l-o,this}setSpot(t,i,e){return Debug&&(U.r(t,Rect,"setSpot:x"),U.r(i,Rect,"setSpot:y"),U.s(e,Spot,Rect,"setSpot:spot"),this.tt()),this.rx=t-e.offsetX-e.x*this.rw,this.ry=i-e.offsetY-e.y*this.rh,this}nearestSideDirection(t,i){return Debug&&(U.r(t,Rect,"nearestSideDirection:x"),U.r(i,Rect,"nearestSideDirection:y")),G.Sx(this,t,i,!0)}nearestSideDirectionPoint(t){return Debug&&U.s(t,Point,Rect,"unionPoint:p"),G.Sx(this,t.x,t.y,!0)}static contains(t,i,e,s,n,o,r,l){return Debug?(U.r(t,Rect,"contains:rx"),U.r(i,Rect,"contains:ry"),U.r(e,Rect,"contains:rw"),U.r(s,Rect,"contains:rh"),U.r(n,Rect,"contains:x"),U.r(o,Rect,"contains:y"),r===void 0?r=0:U.r(r,Rect,"contains:w"),l===void 0?l=0:U.r(l,Rect,"contains:h"),(e<0||s<0||r<0||l<0)&&U.n("Rect.contains:Width and height cannot be negative")):(r===void 0&&(r=0),l===void 0&&(l=0)),t<=n&&n+r<=t+e&&i<=o&&o+l<=i+s}static intersects(t,i,e,s,n,o,r,l){Debug&&(U.r(t,Rect,"intersects:rx"),U.r(i,Rect,"intersects:ry"),U.r(e,Rect,"intersects:rw"),U.r(s,Rect,"intersects:rh"),U.r(n,Rect,"intersects:x"),U.r(o,Rect,"intersects:y"),U.r(r,Rect,"intersects:w"),U.r(l,Rect,"intersects:h"),(e<0||s<0||r<0||l<0)&&U.n("Rect.intersects:Width and height cannot be negative"));let h=e,a=r;const c=t,f=n;if(h+=c,a+=f,c>a||f>h)return!1;let u=s,d=l;const m=i,g=o;return u+=m,d+=g,!(m>d||g>u)}static intersectsLineSegment(t,i,e,s,n,o,r,l){return Debug&&(U.r(t,Rect,"intersectsLineSegment:x"),U.r(i,Rect,"intersectsLineSegment:y"),U.r(e,Rect,"intersectsLineSegment:w"),U.r(s,Rect,"intersectsLineSegment:h"),U.r(n,Rect,"intersectsLineSegment:p1x"),U.r(o,Rect,"intersectsLineSegment:p1y"),U.r(r,Rect,"intersectsLineSegment:p2x"),U.r(l,Rect,"intersectsLineSegment:p2y"),(e<0||s<0)&&U.n("Rect.intersectsLineSegment: width and height cannot be negative")),G.wT(t,i,e,s,n,o,r,l)}get x(){return this.rx}set x(t){Debug&&(U.i(t,"number",Rect,"x"),this.tt(t)),this.rx=t}get y(){return this.ry}set y(t){Debug&&(U.i(t,"number",Rect,"y"),this.tt(t)),this.ry=t}get width(){return this.rw}set width(t){Debug&&(U.i(t,"number",Rect,"width"),this.tt(t)),t<0&&U.q(t,">= 0",Rect,"width"),this.rw=t}get height(){return this.rh}set height(t){Debug&&(U.i(t,"number",Rect,"height"),this.tt(t)),t<0&&U.q(t,">= 0",Rect,"height"),this.rh=t}get left(){return this.rx}set left(t){Debug&&(U.i(t,"number",Rect,"left"),this.tt(t)),this.rx=t}get top(){return this.ry}set top(t){Debug&&(U.i(t,"number",Rect,"top"),this.tt(t)),this.ry=t}get right(){return this.rx+this.rw}set right(t){Debug&&(U.r(t,Rect,"right"),this.tt(t)),this.rx+=t-(this.rx+this.rw)}get bottom(){return this.ry+this.rh}set bottom(t){Debug&&(U.r(t,Rect,"top"),this.tt(t)),this.ry+=t-(this.ry+this.rh)}get position(){return new Point(this.rx,this.ry)}set position(t){Debug&&(U.s(t,Point,Rect,"position"),this.tt(t)),this.rx=t.x,this.ry=t.y}get size(){return new Size(this.rw,this.rh)}set size(t){Debug&&(U.s(t,Size,Rect,"size"),this.tt(t)),this.rw=t.width,this.rh=t.height}get center(){return new Point(this.rx+this.rw/2,this.ry+this.rh/2)}set center(t){Debug&&(U.s(t,Point,Rect,"center"),this.tt(t)),this.rx=t.x-this.rw/2,this.ry=t.y-this.rh/2}get centerX(){return this.rx+this.rw/2}set centerX(t){Debug&&(U.r(t,Rect,"centerX"),this.tt(t)),this.rx=t-this.rw/2}get centerY(){return this.ry+this.rh/2}set centerY(t){Debug&&(U.r(t,Rect,"centerY"),this.tt(t)),this.ry=t-this.rh/2}isReal(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)}isEmpty(){return this.width===0&&this.height===0}static bm=new Rect(0,0,0,0).Ct();static TI=new Rect(NaN,NaN,NaN,NaN).Ct();static kx=[];static a(){const t=Rect.kx.pop();return t===void 0?new Rect:t}static Qe(t){const i=Rect.kx.pop();return i===void 0?t.copy():i.f(t)}static V(t,i,e,s){const n=Rect.kx.pop();return n===void 0?new Rect(t,i,e,s):n.e(t,i,e,s)}static o(t){Rect.kx.push(t)}}class Margin{mt;mr;mb;ml;constructor(t,i,e,s){t===void 0?(this.mt=0,this.mr=0,this.mb=0,this.ml=0):i===void 0?(i=t,e=t,s=t,this.mt=t,this.mr=i,this.mb=e,this.ml=s):e===void 0?(e=t,s=i,this.mt=t,this.mr=i,this.mb=e,this.ml=s):s!==void 0?(this.mt=t,this.mr=i,this.mb=e,this.ml=s):U.n("Invalid arguments to Margin constructor: "+t+", "+i+", "+e+", "+s)}setTo(t,i,e,s){return Debug&&(U.i(t,"number",Margin,"setTo:t"),U.i(i,"number",Margin,"setTo:r"),U.i(e,"number",Margin,"setTo:b"),U.i(s,"number",Margin,"setTo:l"),this.tt()),this.mt=t,this.mr=i,this.mb=e,this.ml=s,this}set(t){return Debug&&(U.s(t,Margin,Margin,"assign:m"),this.tt()),this.mt=t.mt,this.mr=t.mr,this.mb=t.mb,this.ml=t.ml,this}copy(){const t=new Margin;return t.mt=this.mt,t.mr=this.mr,t.mb=this.mb,t.ml=this.ml,t}Ct(){return Object.freeze(this),this}T(){return Object.isFrozen(this)?this:this.copy().Ct()}tt(t){if(Debug&&Object.isFrozen(this)){let i="The Margin is frozen, so its properties cannot be set: "+this.toString();t!==void 0&&(i+="  to value: "+t),U.n(i)}}static parse(t){if(typeof t=="string"){const i=t.split(" ");let e=0,s=NaN;for(;i[e]==="";)e++;let n=i[e++];if(n&&(s=parseFloat(n)),isNaN(s))return new Margin;let o=NaN;for(;i[e]==="";)e++;if(n=i[e++],n&&(o=parseFloat(n)),isNaN(o))return new Margin(s);let r=NaN;for(;i[e]==="";)e++;if(n=i[e++],n&&(r=parseFloat(n)),isNaN(r))return new Margin(s,o);let l=NaN;for(;i[e]==="";)e++;return n=i[e++],n&&(l=parseFloat(n)),isNaN(l)?new Margin(s,o):new Margin(s,o,r,l)}else return new Margin}static stringify(t){return Debug&&U.s(t,Margin),t.top.toString()+" "+t.right.toString()+" "+t.bottom.toString()+" "+t.left.toString()}static stringifyFixed(t){return U.i(t,"number",Margin,"stringifyFixed:digits"),i=>i.top.toFixed(t)+" "+i.right.toFixed(t)+" "+i.bottom.toFixed(t)+" "+i.left.toFixed(t)}toString(){return"Margin("+this.top+","+this.right+","+this.bottom+","+this.left+")"}equals(t){return t instanceof Margin?this.mt===t.top&&this.mr===t.right&&this.mb===t.bottom&&this.ml===t.left:!1}equalTo(t,i,e,s){return this.mt===t&&this.mr===i&&this.mb===e&&this.ml===s}equalsApprox(t){return G.u(this.mt,t.top)&&G.u(this.mr,t.right)&&G.u(this.mb,t.bottom)&&G.u(this.ml,t.left)}get top(){return this.mt}set top(t){Debug&&(U.r(t,Margin,"top"),this.tt(t)),this.mt=t}get right(){return this.mr}set right(t){Debug&&(U.r(t,Margin,"right"),this.tt(t)),this.mr=t}get bottom(){return this.mb}set bottom(t){Debug&&(U.r(t,Margin,"bottom"),this.tt(t)),this.mb=t}get left(){return this.ml}set left(t){Debug&&(U.r(t,Margin,"left"),this.tt(t)),this.ml=t}isReal(){return isFinite(this.top)&&isFinite(this.right)&&isFinite(this.bottom)&&isFinite(this.left)}static Sm=new Margin(0,0,0,0).Ct();static xT=new Margin(2,2,2,2).Ct()}class Spot{sx;sy;ox;oy;constructor(t,i,e,s){t===void 0?(this.sx=0,this.sy=0,this.ox=0,this.oy=0):(i===void 0&&(i=0),e===void 0&&(e=0),s===void 0&&(s=0),this.sx=t,this.sy=i,this.ox=e,this.oy=s)}setTo(t,i,e,s){return Debug&&(this.Px(t,"setTo:x"),this.Px(i,"setTo:y"),this.Mx(e,"setTo:offx"),this.Mx(s,"setTo:offy"),this.tt()),this.sx=t,this.sy=i,this.ox=e,this.oy=s,this}set(t){return Debug&&(U.s(t,Spot,Spot,"set:s"),this.tt()),this.sx=t.sx,this.sy=t.sy,this.ox=t.ox,this.oy=t.oy,this}copy(){const t=new Spot;return t.sx=this.sx,t.sy=this.sy,t.ox=this.ox,t.oy=this.oy,t}Ct(){return Object.freeze(this),this}T(){return Object.isFrozen(this)?this:this.copy().Ct()}tt(t){if(Debug&&Object.isFrozen(this)){let i="The Spot is frozen, so its properties cannot be set: "+this.toString();t!==void 0&&(i+="  to value: "+t),U.n(i)}}_e(t){return this.sx=NaN,this.sy=NaN,this.ox=t,this.Ct()}Px(t,i){(isNaN(t)||t>1||t<0)&&U.q(t,"0 <= "+i+" <= 1",Spot,i)}Mx(t,i){(isNaN(t)||t===1/0||t===-1/0)&&U.q(t,"real number, not NaN or Infinity",Spot,i)}static parse(t){if(typeof t=="string"){if(t=t.trim(),t==="None")return Spot.None;if(t==="TopLeft")return Spot.TopLeft;if(t==="Top"||t==="TopCenter"||t==="MiddleTop")return Spot.TopCenter;if(t==="TopRight")return Spot.TopRight;if(t==="Left"||t==="LeftCenter"||t==="MiddleLeft")return Spot.LeftCenter;if(t==="Center")return Spot.Center;if(t==="Right"||t==="RightCenter"||t==="MiddleRight")return Spot.RightCenter;if(t==="BottomLeft")return Spot.BottomLeft;if(t==="Bottom"||t==="BottomCenter"||t==="MiddleBottom")return Spot.BottomCenter;if(t==="BottomRight")return Spot.BottomRight;if(t==="TopSide")return Spot.TopSide;if(t==="LeftSide")return Spot.LeftSide;if(t==="RightSide")return Spot.RightSide;if(t==="BottomSide")return Spot.BottomSide;if(t==="TopBottomSides")return Spot.TopBottomSides;if(t==="LeftRightSides")return Spot.LeftRightSides;if(t==="TopLeftSides")return Spot.TopLeftSides;if(t==="TopRightSides")return Spot.TopRightSides;if(t==="BottomLeftSides")return Spot.BottomLeftSides;if(t==="BottomRightSides")return Spot.BottomRightSides;if(t==="NotTopSide")return Spot.NotTopSide;if(t==="NotLeftSide")return Spot.NotLeftSide;if(t==="NotRightSide")return Spot.NotRightSide;if(t==="NotBottomSide")return Spot.NotBottomSide;if(t==="AllSides")return Spot.AllSides;if(t==="Default")return Spot.Default;const i=t.split(" ");let e=0,s=0;for(;i[e]==="";)e++;let n=i[e++];n!==void 0&&n.length>0&&(s=parseFloat(n));let o=0;for(;i[e]==="";)e++;n=i[e++],n!==void 0&&n.length>0&&(o=parseFloat(n));let r=0;for(;i[e]==="";)e++;n=i[e++],n!==void 0&&n.length>0&&(r=parseFloat(n));let l=0;for(;i[e]==="";)e++;return n=i[e++],n!==void 0&&n.length>0&&(l=parseFloat(n)),new Spot(s,o,r,l)}else return new Spot}static stringify(t){return Debug&&U.s(t,Spot),t.isSpot()?t.x.toString()+" "+t.y.toString()+" "+t.offsetX.toString()+" "+t.offsetY.toString():t.toString()}static stringifyFixed(t){return U.i(t,"number",Spot,"stringifyFixed:digits"),i=>i.x.toFixed(t)+" "+i.y.toFixed(t)+" "+i.offsetX.toFixed(t)+" "+i.offsetY.toFixed(t)}toString(){return this.isSpot()?this.ox===0&&this.oy===0?"Spot("+this.x+","+this.y+")":"Spot("+this.x+","+this.y+","+this.offsetX+","+this.offsetY+")":this.equals(Spot.None)?"None":this.equals(Spot.TopLeft)?"TopLeft":this.equals(Spot.TopCenter)?"Top":this.equals(Spot.TopRight)?"TopRight":this.equals(Spot.LeftCenter)?"Left":this.equals(Spot.Center)?"Center":this.equals(Spot.RightCenter)?"Right":this.equals(Spot.BottomLeft)?"BottomLeft":this.equals(Spot.BottomCenter)?"Bottom":this.equals(Spot.BottomRight)?"BottomRight":this.equals(Spot.TopSide)?"TopSide":this.equals(Spot.LeftSide)?"LeftSide":this.equals(Spot.RightSide)?"RightSide":this.equals(Spot.BottomSide)?"BottomSide":this.equals(Spot.TopBottomSides)?"TopBottomSides":this.equals(Spot.LeftRightSides)?"LeftRightSides":this.equals(Spot.TopLeftSides)?"TopLeftSides":this.equals(Spot.TopRightSides)?"TopRightSides":this.equals(Spot.BottomLeftSides)?"BottomLeftSides":this.equals(Spot.BottomRightSides)?"BottomRightSides":this.equals(Spot.NotTopSide)?"NotTopSide":this.equals(Spot.NotLeftSide)?"NotLeftSide":this.equals(Spot.NotRightSide)?"NotRightSide":this.equals(Spot.NotBottomSide)?"NotBottomSide":this.equals(Spot.AllSides)?"AllSides":this.equals(Spot.Default)?"Default":"None"}equals(t){return t instanceof Spot?(this.sx===t.x||isNaN(this.sx)&&isNaN(t.x))&&(this.sy===t.y||isNaN(this.sy)&&isNaN(t.y))&&this.ox===t.offsetX&&this.oy===t.offsetY:!1}opposite(){return new Spot(.5-(this.sx-.5),.5-(this.sy-.5),-this.ox,-this.oy)}includesSide(t){if(!this.isSide())return!1;if(!t.isSide())if(t.equals(Spot.Left))t=Spot.LeftSide;else if(t.equals(Spot.Right))t=Spot.RightSide;else if(t.equals(Spot.Top))t=Spot.TopSide;else if(t.equals(Spot.Bottom))t=Spot.BottomSide;else return!1;const i=this.oy,e=t.offsetY;return(i&e)===e}get x(){return this.sx}set x(t){Debug&&(this.Px(t,"x"),this.tt(t)),this.sx=t}get y(){return this.sy}set y(t){Debug&&(this.Px(t,"y"),this.tt(t)),this.sy=t}get offsetX(){return this.ox}set offsetX(t){Debug&&(this.Mx(t,"offsetX"),this.tt(t)),this.ox=t}get offsetY(){return this.oy}set offsetY(t){Debug&&(this.Mx(t,"offsetY"),this.tt(t)),this.oy=t}isSpot(){return!isNaN(this.x)&&!isNaN(this.y)}isNoSpot(){return isNaN(this.x)||isNaN(this.y)}isSide(){return isNaN(this.x)&&isNaN(this.y)&&this.offsetX===1&&this.offsetY!==0}isNone(){return isNaN(this.x)&&isNaN(this.y)&&this.offsetX===0&&this.offsetY===0}isDefault(){return isNaN(this.x)&&isNaN(this.y)&&this.offsetX===-1&&this.offsetY===0}static None=new Spot(0,0,0,0)._e(0);static Default=new Spot(0,0,-1,0)._e(-1);static TopLeft=new Spot(0,0,0,0).Ct();static TopCenter=new Spot(.5,0,0,0).Ct();static TopRight=new Spot(1,0,0,0).Ct();static LeftCenter=new Spot(0,.5,0,0).Ct();static Center=new Spot(.5,.5,0,0).Ct();static RightCenter=new Spot(1,.5,0,0).Ct();static BottomLeft=new Spot(0,1,0,0).Ct();static BottomCenter=new Spot(.5,1,0,0).Ct();static BottomRight=new Spot(1,1,0,0).Ct();static MiddleTop=Spot.TopCenter;static MiddleLeft=Spot.LeftCenter;static MiddleRight=Spot.RightCenter;static MiddleBottom=Spot.BottomCenter;static Top=Spot.TopCenter;static Left=Spot.LeftCenter;static Right=Spot.RightCenter;static Bottom=Spot.BottomCenter;static TopSide=new Spot(0,0,1,1)._e(1);static LeftSide=new Spot(0,0,1,2)._e(1);static RightSide=new Spot(0,0,1,4)._e(1);static BottomSide=new Spot(0,0,1,8)._e(1);static TopBottomSides=new Spot(0,0,1,9)._e(1);static LeftRightSides=new Spot(0,0,1,6)._e(1);static TopLeftSides=new Spot(0,0,1,3)._e(1);static TopRightSides=new Spot(0,0,1,5)._e(1);static BottomLeftSides=new Spot(0,0,1,10)._e(1);static BottomRightSides=new Spot(0,0,1,12)._e(1);static NotTopSide=new Spot(0,0,1,14)._e(1);static NotLeftSide=new Spot(0,0,1,13)._e(1);static NotRightSide=new Spot(0,0,1,11)._e(1);static NotBottomSide=new Spot(0,0,1,7)._e(1);static AllSides=new Spot(0,0,1,15)._e(1);static Zk=new Spot(.156,.156).Ct();static Qk=new Spot(.844,.844).Ct()}class Transform{m11;m12;m21;m22;dx;dy;constructor(){this.m11=1,this.m12=0,this.m21=0,this.m22=1,this.dx=0,this.dy=0}set(t){return this.m11=t.m11,this.m12=t.m12,this.m21=t.m21,this.m22=t.m22,this.dx=t.dx,this.dy=t.dy,this}setTo(t,i,e,s,n,o){return this.m11=t,this.m12=i,this.m21=e,this.m22=s,this.dx=n,this.dy=o,this}copy(){const t=new Transform;return t.m11=this.m11,t.m12=this.m12,t.m21=this.m21,t.m22=this.m22,t.dx=this.dx,t.dy=this.dy,t}toString(){return"Transform("+this.m11+","+this.m12+","+this.m21+","+this.m22+","+this.dx+","+this.dy+")"}equals(t){return this.m11===t.m11&&this.m12===t.m12&&this.m21===t.m21&&this.m22===t.m22&&this.dx===t.dx&&this.dy===t.dy}_k(){return this.dx===0&&this.dy===0&&this.m11===1&&this.m12===0&&this.m21===0&&this.m22===1}Hi(){return this.m11=1,this.m12=0,this.m21=0,this.m22=1,this.dx=0,this.dy=0,this}Xc(t){const i=this.m11*t.m11+this.m21*t.m12,e=this.m12*t.m11+this.m22*t.m12,s=this.m11*t.m21+this.m21*t.m22,n=this.m12*t.m21+this.m22*t.m22;return this.dx=this.m11*t.dx+this.m21*t.dy+this.dx,this.dy=this.m12*t.dx+this.m22*t.dy+this.dy,this.m11=i,this.m12=e,this.m21=s,this.m22=n,this}bT(t){const i=1/(t.m11*t.m22-t.m12*t.m21),e=t.m22*i,s=-t.m12*i,n=-t.m21*i,o=t.m11*i,r=i*(t.m21*t.dy-t.m22*t.dx),l=i*(t.m12*t.dx-t.m11*t.dy),h=this.m11*e+this.m21*s,a=this.m12*e+this.m22*s,c=this.m11*n+this.m21*o,f=this.m12*n+this.m22*o;return this.dx=this.m11*r+this.m21*l+this.dx,this.dy=this.m12*r+this.m22*l+this.dy,this.m11=h,this.m12=a,this.m21=c,this.m22=f,this}Cx(){const t=1/(this.m11*this.m22-this.m12*this.m21),i=this.m22*t,e=-this.m12*t,s=-this.m21*t,n=this.m11*t,o=t*(this.m21*this.dy-this.m22*this.dx),r=t*(this.m12*this.dx-this.m11*this.dy);return this.m11=i,this.m12=e,this.m21=s,this.m22=n,this.dx=o,this.dy=r,this}Ns(t,i,e){if(t=G.qi(t),t===0)return this;this.Zs(i,e);let s=0,n=0;if(t===90)s=0,n=1;else if(t===180)s=-1,n=0;else if(t===270)s=0,n=-1;else{const a=t*Math.PI/180;s=Math.cos(a),n=Math.sin(a)}const o=this.m11*s+this.m21*n,r=this.m12*s+this.m22*n,l=this.m11*-n+this.m21*s,h=this.m12*-n+this.m22*s;return this.m11=o,this.m12=r,this.m21=l,this.m22=h,this.Zs(-i,-e),this}Zs(t,i){return this.dx+=this.m11*t+this.m21*i,this.dy+=this.m12*t+this.m22*i,this}lt(t,i){return i===void 0&&(i=t),this.m11*=t,this.m12*=t,this.m21*=i,this.m22*=i,this}LI(){if(this.m11===1&&this.m12===0)return 0;let t=Math.atan2(this.m12,this.m11)*180/Math.PI;return t<0&&(t+=360),t}Pt(t){const i=t.x,e=t.y;return t.e(i*this.m11+e*this.m21+this.dx,i*this.m12+e*this.m22+this.dy)}Oe(t){const i=1/(this.m11*this.m22-this.m12*this.m21),e=this.m22*i,s=-this.m12*i,n=-this.m21*i,o=this.m11*i,r=t.x-this.dx,l=t.y-this.dy;return t.e(r*e+l*n,r*s+l*o)}Vu(t){const i=1/(this.m11*this.m22-this.m12*this.m21),e=this.m22*i,s=-this.m12*i,n=-this.m21*i,o=this.m11*i,r=i*(this.m21*this.dy-this.m22*this.dx),l=i*(this.m12*this.dx-this.m11*this.dy),h=t.x*1.25,a=t.y*1.2;return t.e(h*e+a*n+r,h*s+a*o+l)}km(t){const i=t.x,e=t.y,s=i+t.width,n=e+t.height,o=this.m11,r=this.m12,l=this.m21,h=this.m22,a=this.dx,c=this.dy,f=i*o+e*l+a,u=i*r+e*h+c,d=s*o+e*l+a,m=s*r+e*h+c,g=i*o+n*l+a,p=i*r+n*h+c,y=s*o+n*l+a,x=s*r+n*h+c;let b=f,S=f,k=u,P=u;return b=Math.min(b,d),S=Math.max(S,d),k=Math.min(k,m),P=Math.max(P,m),b=Math.min(b,g),S=Math.max(S,g),k=Math.min(k,p),P=Math.max(P,p),b=Math.min(b,y),S=Math.max(S,y),k=Math.min(k,x),P=Math.max(P,x),t.e(b,k,S-b,P-k),t}static ST=[];static a(){const t=Transform.ST.pop();return t===void 0?new Transform:t}static o(t){Transform.ST.push(t)}static tP="54a702f3e53909c447824c6706603faf4c"}class Quadtree{ii;Yl;zu;Ar;As;Ot;Kl;Xu;constructor(t,i,e,s,n=10,o=4,r=0){this.ii=new Rect(t,i,e,s),this.Yl=n,this.zu=o,this.Ar=r,this.As=new Map,this.Ot=[],this.Kl=null,this.Xu=null}get bounds(){return this.ii}get objects(){return this.As}get level(){return this.Ar}get subTrees(){return this.Ot}get isLeaf(){return this.Ot.length===0}get aggregates(){return this.Xu}clear(){this.As.clear();for(let t=0;t<this.Ot.length;t++)this.Ot[t].clear();this.Ot=[],this.Xu=null}reinitialize(t=10){if(this.Yl===t)return;this.Yl=t,this.Kl===null&&(this.Kl=new Map);const i=this.toMap(this.Kl);this.As.clear();for(let e=0;e<this.Ot.length;e++)this.Ot[e].clear();this.Ot=[];for(const e of i)this.set(e[0],e[1]);this.Kl.clear()}resize(t,i=200){this.level!==0&&U.n("Quadtree.resize called on a non-root Quadtree"),this.Kl===null&&(this.Kl=new Map);const e=this.toMap(this.Kl);this.ii.e(t.x-i,t.y-i,t.width+i*2,t.height+i*2),this.As.clear(),this.Ot=[];for(const s of e)this.set(s[0],s[1]);this.Kl.clear()}Nx(t,i,e,s){const n=this.ii,o=n.x+n.width/2,r=n.y+n.height/2,l=i<=r,h=t<=o,a=t+e>=o,c=i+s>=r;let f=0;return l&&a&&(f|=1),h&&l&&(f|=2),h&&c&&(f|=4),a&&c&&(f|=8),f}DI(){const t=this.Ar+1,i=this.ii.width/2,e=this.ii.height/2,s=this.ii.x,n=this.ii.y;this.Ot[0]=new Quadtree(s+i,n,i,e,this.Yl,this.zu,t),this.Ot[1]=new Quadtree(s,n,i,e,this.Yl,this.zu,t),this.Ot[2]=new Quadtree(s,n+e,i,e,this.Yl,this.zu,t),this.Ot[3]=new Quadtree(s+i,n+e,i,e,this.Yl,this.zu,t)}kT(){let t=new Map(this.As);for(let i=0;i<this.Ot.length;i++){const e=this.Ot[i].kT();for(const s of e)t.set(s[0],s[1])}if(t.size<=this.Yl){this.As=t;for(let i=0;i<this.Ot.length;i++)this.Ot[i].As.clear();this.Ot=[]}return t}set(t,i){if(this.Ot.length){const n=this.Nx(i.x,i.y,i.width,i.height);for(let o=0;o<4;o++)n&1<<o&&this.Ot[o].set(t,i);return}const e=this.As,s=e.get(t);if(!(s!==void 0&&s.equals(i))&&(e.set(t,i),e.size>this.Yl&&this.Ar<this.zu)){this.Ot.length||this.DI();for(const n of e){const o=n[1],r=this.Nx(o.x,o.y,o.width,o.height);for(let l=0;l<4;l++)r&1<<l&&this.Ot[l].set(n[0],o)}this.As.clear()}}add(t,i){this.set(t,i)}setTo(t,i,e,s=0,n=0){this.set(t,new Rect(i,e,s,n))}find(t,i=new Set){return this.findIn(t.x,t.y,t.width,t.height,i)}findIn(t,i,e=0,s=0,n=new Set){const o=this.Nx(t,i,e,s);for(const r of this.As.keys())n.add(r);if(this.Ot.length)for(let r=0;r<4;r++)o&1<<r&&this.Ot[r].findIn(t,i,e,s,n);return n}findInArray(t,i,e=0,s=0,n){const o=this.Nx(t,i,e,s);for(const r of this.As.keys())n.indexOf(r)===-1&&n.push(r);if(this.Ot.length)for(let r=0;r<4;r++)o&1<<r&&this.Ot[r].findInArray(t,i,e,s,n);return n}delete(t,i=!1){const e=this.As.delete(t);for(let s=0;s<this.Ot.length;s++)this.Ot[s].delete(t);return this.Ar===0&&!i&&this.kT(),e}remove(t,i=!1){return this.delete(t,i)}move(t,i,e=!1){this.delete(t,e),this.set(t,i)}moveTo(t,i,e,s,n,o=!1){this.delete(t,o),this.set(t,new Rect(i,e,s,n))}toMap(t=new Map){for(const[i,e]of this.As)t.set(i,e);for(let i=0;i<this.Ot.length;i++)this.Ot[i].toMap(t);return t}computeAggregates(t,i){if(this.Ot.length===0)this.Xu=t(this.As,this.ii);else{const e=[];for(let s=0;s<this.Ot.length;s++)e.push(this.Ot[s].computeAggregates(t,i));this.Xu=i(e,this.ii)}return this.Xu}dump(){for(let t=0;t<this.Ot.length;t++)this.Ot[t].dump();U.et(`level ${this.level} - ${this.objects.size} objs, ${this.bounds.toString()}`)}}const G={FI:"7da71ca0ad381e90",eo:4*((Math.sqrt(2)-1)/3),u:(w,t)=>{const i=w-t;return i<.5&&i>-.5},H:(w,t)=>{const i=w-t;return i<5e-8&&i>-5e-8},vi:(w,t,i,e,s,n,o)=>{s<=0&&(s=1e-6);let r=0,l=0,h=0,a=0;if(w<i?(l=w,r=i):(l=i,r=w),t<e?(a=t,h=e):(a=e,h=t),w===i)return a<=o&&o<=h&&w-s<=n&&n<=w+s;if(t===e)return l<=n&&n<=r&&t-s<=o&&o<=t+s;const c=r+s,f=l-s;if(f<=n&&n<=c){const u=h+s,d=a-s;if(d<=o&&o<=u)if(c-f>u-d)if(w-i>s||i-w>s){const g=(e-t)/(i-w)*(n-w)+t;if(g-s<=o&&o<=g+s)return!0}else return!0;else if(t-e>s||e-t>s){const g=(i-w)/(e-t)*(o-t)+w;if(g-s<=n&&n<=g+s)return!0}else return!0}return!1},Ax:(w,t,i,e,s,n,o,r,l,h,a,c)=>{if(!G.vi(w,t,o,r,c,i,e)||!G.vi(w,t,o,r,c,s,n)){const f=(w+i)/2,u=(t+e)/2,d=(i+s)/2,m=(e+n)/2,g=(s+o)/2,p=(n+r)/2,y=(f+d)/2,x=(u+m)/2,b=(d+g)/2,S=(m+p)/2,k=(y+b)/2,P=(x+S)/2;return G.Ax(w,t,f,u,y,x,k,P,l,h,a,c)||G.Ax(k,P,b,S,g,p,o,r,l,h,a,c)}else return G.vi(w,t,o,r,c,h,a)},PT:(w,t,i,e,s,n,o,r,l)=>{const h=(w+i)/2,a=(t+e)/2,c=(i+s)/2,f=(e+n)/2,u=(s+o)/2,d=(n+r)/2,m=(h+c)/2,g=(a+f)/2,p=(c+u)/2,y=(f+d)/2;return l.e((m+p)/2,(g+y)/2),l},RI:(w,t,i,e,s,n,o,r)=>{const l=(w+i)/2,h=(t+e)/2,a=(i+s)/2,c=(e+n)/2,f=(s+o)/2,u=(n+r)/2,d=(l+a)/2,m=(h+c)/2,g=(a+f)/2,p=(c+u)/2;return Point.direction(d,m,g,p)},Yu:(w,t,i,e,s,n,o,r,l,h)=>{if(!G.vi(w,t,o,r,l,i,e)||!G.vi(w,t,o,r,l,s,n)){const a=(w+i)/2,c=(t+e)/2,f=(i+s)/2,u=(e+n)/2,d=(s+o)/2,m=(n+r)/2,g=(a+f)/2,p=(c+u)/2,y=(f+d)/2,x=(u+m)/2,b=(g+y)/2,S=(p+x)/2;G.Yu(w,t,a,c,g,p,b,S,l,h),G.Yu(b,S,y,x,d,m,o,r,l,h)}else h.ui(w,t,0,0),h.ui(o,r,0,0);return h},so:(w,t,i,e,s,n,o,r,l,h)=>{if(!G.vi(w,t,o,r,l,i,e)||!G.vi(w,t,o,r,l,s,n)){const a=(w+i)/2,c=(t+e)/2,f=(i+s)/2,u=(e+n)/2,d=(s+o)/2,m=(n+r)/2,g=(a+f)/2,p=(c+u)/2,y=(f+d)/2,x=(u+m)/2,b=(g+y)/2,S=(p+x)/2;G.so(w,t,a,c,g,p,b,S,l,h),G.so(b,S,y,x,d,m,o,r,l,h)}else h.length===0&&(h.push(w),h.push(t)),h.push(o),h.push(r);return h},iP:(w,t,i,e,s,n,o,r,l,h)=>{if(G.vi(w,t,s,n,h,i,e))return G.vi(w,t,s,n,h,r,l);{const a=(w+i)/2,c=(t+e)/2,f=(i+s)/2,u=(e+n)/2,d=(a+f)/2,m=(c+u)/2;return G.iP(w,t,a,c,d,m,o,r,l,h)||G.iP(d,m,f,u,s,n,o,r,l,h)}},eP:(w,t,i,e,s,n,o,r)=>{if(G.vi(w,t,s,n,o,i,e))r.ui(w,t,0,0),r.ui(s,n,0,0);else{const l=(w+i)/2,h=(t+e)/2,a=(i+s)/2,c=(e+n)/2,f=(l+a)/2,u=(h+c)/2;G.eP(w,t,l,h,f,u,o,r),G.eP(f,u,a,c,s,n,o,r)}return r},Pm:(w,t,i,e,s,n,o,r)=>{if(G.vi(w,t,s,n,o,i,e))r.length===0&&(r.push(w),r.push(t)),r.push(s),r.push(n);else{const l=(w+i)/2,h=(t+e)/2,a=(i+s)/2,c=(e+n)/2,f=(l+a)/2,u=(h+c)/2;G.Pm(w,t,l,h,f,u,o,r),G.Pm(f,u,a,c,s,n,o,r)}return r},Mm:(w,t,i,e,s,n,o,r,l,h,a,c,f,u)=>{if(!G.vi(w,t,o,r,f,i,e)||!G.vi(w,t,o,r,f,s,n)){const d=(w+i)/2,m=(t+e)/2,g=(i+s)/2,p=(e+n)/2,y=(s+o)/2,x=(n+r)/2,b=(d+g)/2,S=(m+p)/2,k=(g+y)/2,P=(p+x)/2,A=(b+k)/2,N=(S+P)/2;let M=1/0,C=!1,T=0,L=0;if(G.Mm(w,t,d,m,b,S,A,N,l,h,a,c,f,u)){const D=(u.x-l)**2+(u.y-h)**2;D<M&&(M=D,C=!0,T=u.x,L=u.y)}if(G.Mm(A,N,k,P,y,x,o,r,l,h,a,c,f,u)){const D=(u.x-l)**2+(u.y-h)**2;D<M&&(M=D,C=!0,T=u.x,L=u.y)}return C&&(u.x=T,u.y=L),C}else{if(!G.Nr(w,t,o,r,l,h,a,c))return!1;const d=(w-o)*(h-c)-(t-r)*(l-a);if(d===0)return!1;const m=((w*r-t*o)*(l-a)-(w-o)*(l*c-h*a))/d,g=((w*r-t*o)*(h-c)-(t-r)*(l*c-h*a))/d;return u.e(m,g),!0}},Cm:(w,t,i,e,s,n,o,r,l,h,a,c,f)=>{let u=0;if(!G.vi(w,t,o,r,f,i,e)||!G.vi(w,t,o,r,f,s,n)){const d=(w+i)/2,m=(t+e)/2,g=(i+s)/2,p=(e+n)/2,y=(s+o)/2,x=(n+r)/2,b=(d+g)/2,S=(m+p)/2,k=(g+y)/2,P=(p+x)/2,A=(b+k)/2,N=(S+P)/2;u+=G.Cm(w,t,d,m,b,S,A,N,l,h,a,c,f),u+=G.Cm(A,N,k,P,y,x,o,r,l,h,a,c,f)}else{const d=(w-o)*(h-c)-(t-r)*(l-a);if(d===0)return u;const m=((w*r-t*o)*(l-a)-(w-o)*(l*c-h*a))/d,g=((w*r-t*o)*(h-c)-(t-r)*(l*c-h*a))/d;if(m>=a)return u;let p=0,y=0;if((l>a?l-a:a-l)<(h>c?h-c:c-h)){if(t<r?(p=t,y=r):(p=r,y=t),g<p||g>y)return u}else if(w<o?(p=w,y=o):(p=o,y=w),m<p||m>y)return u;d>0?u++:d<0&&u--}return u},Xl:(w,t,i,e,s,n,o)=>{if(G.H(w,i)){let r=0,l=0;t<e?(r=t,l=e):(r=e,l=t);const h=n;return h<r?(o.e(w,r),!1):h>l?(o.e(w,l),!1):(o.e(w,h),!0)}else if(G.H(t,e)){let r=0,l=0;w<i?(r=w,l=i):(r=i,l=w);const h=s;return h<r?(o.e(r,t),!1):h>l?(o.e(l,t),!1):(o.e(h,t),!0)}else{const r=(i-w)**2+(e-t)**2,l=((w-s)*(w-i)+(t-n)*(t-e))/r;if(l<-5e-6)return o.e(w,t),!1;if(l>1.000005)return o.e(i,e),!1;{const h=w+l*(i-w),a=t+l*(e-t);return o.e(h,a),!0}}},Ts:(w,t,i,e,s,n,o,r,l)=>{if(G.u(w,i)&&G.u(t,e))return l.e(w,t),!1;if(G.H(s,o)){if(G.H(w,i))return G.Xl(w,t,i,e,s,n,l),!1;{const a=(e-t)/(i-w)*(s-w)+t;return G.Xl(w,t,i,e,s,a,l)}}else{const h=(r-n)/(o-s);if(G.H(w,i)){const a=h*(w-s)+n;let c=0,f=0;return t<e?(c=t,f=e):(c=e,f=t),a<c?(l.e(w,c),!1):a>f?(l.e(w,f),!1):(l.e(w,a),!0)}else{const a=(e-t)/(i-w);if(G.H(h,a))return G.Xl(w,t,i,e,s,n,l),!1;{const c=(a*w-h*s+n-t)/(a-h);if(G.H(a,0)){let f=0,u=0;return w<i?(f=w,u=i):(f=i,u=w),c<f?(l.e(f,t),!1):c>u?(l.e(u,t),!1):(l.e(c,t),!0)}else{const f=a*(c-w)+t;return G.Xl(w,t,i,e,c,f,l)}}}}},Ul:(w,t,i,e,s,n,o,r,l)=>{let h=1e21,a=w,c=t;if(G.Ts(w,t,w,e,s,n,o,r,l)){const f=(l.x-s)**2+(l.y-n)**2;f<h&&(h=f,a=l.x,c=l.y)}if(G.Ts(i,t,i,e,s,n,o,r,l)){const f=(l.x-s)**2+(l.y-n)**2;f<h&&(h=f,a=l.x,c=l.y)}if(G.Ts(w,t,i,t,s,n,o,r,l)){const f=(l.x-s)**2+(l.y-n)**2;f<h&&(h=f,a=l.x,c=l.y)}if(G.Ts(w,e,i,e,s,n,o,r,l)){const f=(l.x-s)**2+(l.y-n)**2;f<h&&(h=f,a=l.x,c=l.y)}return l.e(a,c),h<1e21},Tx:(w,t,i)=>G.wT(w.x,w.y,w.width,w.height,t.x,t.y,i.x,i.y),wT:(w,t,i,e,s,n,o,r)=>{const l=w,h=w+i,a=t,c=t+e;if(s===o){let f=0,u=0;return n<r?(f=n,u=r):(f=r,u=n),l<=s&&s<=h&&f<=c&&u>=a}if(n===r){let f=0,u=0;return s<o?(f=s,u=o):(f=o,u=s),a<=n&&n<=c&&f<=h&&u>=l}return!!(Rect.contains(w,t,i,e,s,n)||Rect.contains(w,t,i,e,o,r)||G.Nr(l,a,h,a,s,n,o,r)||G.Nr(h,a,h,c,s,n,o,r)||G.Nr(h,c,l,c,s,n,o,r)||G.Nr(l,c,l,a,s,n,o,r))},Nr:(w,t,i,e,s,n,o,r)=>w===i&&t===e&&s===o&&n===r?w===s&&t===n:G.Eu(w,t,i,e,s,n)*G.Eu(w,t,i,e,o,r)<=0&&G.Eu(s,n,o,r,w,t)*G.Eu(s,n,o,r,i,e)<=0,Eu:(w,t,i,e,s,n)=>{const o=i-w,r=e-t;let l=s-w,h=n-t,a=l*r-h*o;return a===0&&(a=l*o+h*r,a>0&&(l-=o,h-=r,a=l*o+h*r,a<0&&(a=0))),a},Sx(w,t,i,e){e===void 0&&(e=!1);let s=0;const n=w===null?t:(t-w.x)/(w.width>0?w.width:1),o=w===null?i:(i-w.y)/(w.height>0?w.height:1);return n>o?n>1-o||(e||n<1-o?s=270:s=315):e||n<o?n>1-o?s=90:e||n<1-o?s=180:s=135:n<.5?s=225:n>.5&&(s=45),s},qi:w=>(w>=360?w-=360:w<0&&(w+=360),w),II:(w,t)=>w>t?Math.min(w-t,Math.abs(w-360-t)):t>w?Math.min(t-w,Math.abs(w-(t-360))):0,MT:(w,t,i,e,s,n)=>{const o=Math.PI;n||(e=e*(o/180),s=s*(o/180));const r=e>s?-1:1,l=1e-5,h=o*2,a=[],c=o/2;let f=e,u=Math.min(h,Math.abs(s-e));if(u<l){const d=f+r*Math.min(u,c),m=w+i*Math.cos(f),g=t+i*Math.sin(f),p=w+i*Math.cos(d),y=t+i*Math.sin(d),x=(m+p)/2,b=(g+y)/2;return a.push([m,g,x,b,x,b,p,y]),a}for(;u>l;){const d=f+r*Math.min(u,c);a.push(G.OI(i,f,d,w,t)),u-=Math.abs(d-f),f=d}return a},OI:(w,t,i,e,s)=>{const n=(i-t)/2,o=w*Math.cos(n),r=w*Math.sin(n),l=o,h=-r,a=l*l+h*h,c=a+l*o+h*r,f=4/3*(Math.sqrt(2*a*c)-c)/(l*r-h*o),u=l-f*h,d=h+f*l,m=u,g=-d,p=n+t,y=Math.cos(p),x=Math.sin(p);return[e+w*Math.cos(t),s+w*Math.sin(t),e+u*y-d*x,s+u*x+d*y,e+m*y-g*x,s+m*x+g*y,e+w*Math.cos(i),s+w*Math.sin(i)]},xm:(w,t,i,e,s,n,o)=>{const r=s,l=n,h=Math.floor((w-i)/r)*r+i,a=Math.floor((t-e)/l)*l+e;let c=h;h+r-w<r/2&&(c=h+r);let f=a;return a+l-t<l/2&&(f=a+l),o.e(c,f),o},CT:(w,t)=>{let i=Math.max(w,t),e=Math.min(w,t),s=1,n=1;do s=i%e,n=e,i=e,e=s;while(s>0);return n},EI:(w,t,i,e)=>{const s=i<0,n=e<0;let o=0,r=0,l=0;w<t?(r=1,l=0):(r=0,l=1);let h=0,a=0,c=0,f=0;return o=r,h=o===0?w:t,c=o===0?i:e,(o===0?s:n)&&(c=-c),o=l,a=o===0?w:t,f=o===0?i:e,(o===0?s:n)&&(f=-f),G.BI(h,a,c,f,0,0)},BI:(w,t,i,e,s,n)=>{let o=0;if(e>0)if(i>0){const r=w*w,l=t*t,h=w*i,a=t*e;let c=-l+a,f=-l+Math.sqrt(h*h+a*a),u=c;const d=9999999999;for(let p=0;p<d&&(u=.5*(c+f),!(u===c||u===f));++p){const y=h/(u+r),x=a/(u+l),b=y*y+x*x-1;if(b>0)c=u;else if(b<0)f=u;else break}s=r*i/(u+r),n=l*e/(u+l);const m=s-i,g=n-e;o=Math.sqrt(m*m+g*g)}else s=0,n=t,o=Math.abs(e-t);else{const r=w*w-t*t,l=w*i;if(l<r){const h=l/r,a=h*h;s=w*h,n=t*Math.sqrt(Math.abs(1-a));const c=s-i;o=Math.sqrt(c*c+n*n)}else s=w,n=0,o=Math.abs(i-w)}return o},Mn:{},Nm:new PropertyCollection,Tr:new PropertyCollection,Lr:0,Am:100};G.za=G.FI;var GeometryType=(w=>(w[w.Line=1]="Line",w[w.Rectangle=2]="Rectangle",w[w.Ellipse=3]="Ellipse",w[w.Path=4]="Path",w))(GeometryType||{}),GeometryStretch=(w=>(w[w.None=0]="None",w[w.Default=1]="Default",w[w.Fill=2]="Fill",w[w.Uniform=6]="Uniform",w))(GeometryStretch||{});class Geometry{l;Tm;Lm;Yc;Ku;Uu;no;oo;ro;it;Ee;Be;ce;fe;Qs;Kc;Uc;constructor(t,i){Debug&&arguments.length>2&&U.n("Geometry constructor can take at most two optional arguments, the Geometry type and an initialization Object"),GSet.se(this),this.l=2,t===void 0?t=4:Debug&&U.j(t,GeometryType,"GeometryType"),this.it=t,this.Ee=0,this.Be=0,this.ce=0,this.fe=0,t===4?this.Qs=new List:this.Qs=Geometry.Lx,this.Tm=this.Qs.dt,this.Lm=new Rect,this.Yc=null,this.Ku=null,this.Uu=NaN,this.no=Spot.TopLeft,this.oo=Spot.BottomRight,this.Kc=NaN,this.Uc=NaN,this.ro=2,i&&Object.assign(this,i)}copy(){const t=new Geometry;if(t.l=this.l&-2,t.it=this.it,t.Ee=this.Ee,t.Be=this.Be,t.ce=this.ce,t.fe=this.fe,this.it===4){const i=this.Qs.h,e=t.Qs;for(let s=0;s<i.length;s++){const n=i[s];e.add(n.copy())}t.Qs=e}else t.Qs=this.Qs;return t.Tm=this.Tm,t.Lm.f(this.Lm),t.Yc=this.Yc,t.Ku=this.Ku,t.Uu=this.Uu,t.no=this.no.T(),t.oo=this.oo.T(),t.Kc=this.Kc,t.Uc=this.Uc,t.ro=this.ro,t}static Line=1;static Rectangle=2;static Ellipse=3;static Path=4;static Lx=new List().S();get p(){return(this.l&1)!==0}set p(t){t?this.l|=1:this.l&=-2}get Mt(){return(this.l&2)!==0}set Mt(t){t?this.l|=2:this.l&=-3}S(){if(this.p=!0,this.type!==4)return this;const t=this.figures;t.S();for(const i of t)i.S();return this}equalsApprox(t){if(!(t instanceof Geometry))return!1;if(this.type!==t.type)return this.type===1&&t.type===4?this.NT(t):t.type===1&&this.type===4?t.NT(this):!1;if(this.type===4){const i=this.figures.h,e=t.figures.h,s=i.length;if(s!==e.length)return!1;for(let n=0;n<s;n++){const o=i[n],r=e[n];if(!o.equalsApprox(r))return!1}return!0}else return G.u(this.startX,t.startX)&&G.u(this.startY,t.startY)&&G.u(this.endX,t.endX)&&G.u(this.endY,t.endY)}NT(t){if(this.type!==1||t.type!==4)return!1;if(t.figures.count===1){const i=t.figures.elt(0);if(i.segments.count===1&&G.u(this.startX,i.startX)&&G.u(this.startY,i.startY)){const e=i.segments.elt(0);if(e.type===2&&G.u(this.endX,e.endX)&&G.u(this.endY,e.endY))return!0}}return!1}static stringify(t){return t.toString()}static stringifyFixed(t){return U.i(t,"number",Geometry,"stringifyFixed:digits"),i=>i.toString(t)}yi(t){t in GeometryType?this.type=t:U.Pr(this,t)}toString(t){t===void 0&&(t=-1);const i=s=>s===0?"0":s.toFixed(t);let e;switch(this.type){case 1:return t<0?"M"+this.startX.toString()+" "+this.startY.toString()+"L"+this.endX.toString()+" "+this.endY.toString():"M"+i(this.startX)+" "+i(this.startY)+"L"+i(this.endX)+" "+i(this.endY);case 2:return e=new Rect(this.startX,this.startY,0,0),e.union(this.endX,this.endY,0,0),t<0?"M"+e.x.toString()+" "+e.y.toString()+"H"+e.right.toString()+"V"+e.bottom.toString()+"H"+e.left.toString()+"z":"M"+i(e.x)+" "+i(e.y)+"H"+i(e.right)+"V"+i(e.bottom)+"H"+i(e.left)+"z";case 3:if(e=new Rect(this.startX,this.startY,0,0),e.union(this.endX,this.endY,0,0),t<0){const r=e.left.toString()+" "+(e.y+e.height/2).toString(),l=e.right.toString()+" "+(e.y+e.height/2).toString();return"M"+r+"A"+(e.width/2).toString()+" "+(e.height/2).toString()+" 0 0 1 "+l+"A"+(e.width/2).toString()+" "+(e.height/2).toString()+" 0 0 1 "+r}else{const r=i(e.left)+" "+i(e.y+e.height/2),l=i(e.right)+" "+i(e.y+e.height/2);return"M"+r+"A"+i(e.width/2)+" "+i(e.height/2)+" 0 0 1 "+l+"A"+i(e.width/2)+" "+i(e.height/2)+" 0 0 1 "+r}case 4:let s="";const n=this.figures.h,o=n.length;for(let r=0;r<o;r++){const l=n[r];r>0&&(s+=" x "),l.isFilled&&(s+="F "),s+=l.toString(t)}return s;default:return GeometryType[this.type]}}static fillPath(t){typeof t!="string"&&U.Ii(t,"string",Geometry,"fillPath:str");const i=t.split(/[Xx]/),e=i.length;let s="";for(let n=0;n<e;n++){const o=i[n];if(o.match(/[Ff]/)!==null){n===0?s+=o:s+="X"+(o[0]===" "?"":" ")+o;continue}s+=(n===0?"":"X ")+"F"+(o[0]===" "?"":" ")+o}return s}static Dm="UuBbMmZzLlHhVvCcSsQqTtAaFfXx";static parse(t,i){i===void 0&&(i=!1),typeof t!="string"&&U.Ii(t,"string",Geometry,"parse:str");const e=new RegExp("(["+Geometry.Dm+"])(["+Geometry.Dm+"])","gm"),s=new RegExp("(["+Geometry.Dm+"])([^s])","gm"),n=new RegExp("([^s])(["+Geometry.Dm+"])","gm");t=t.replace(/,/gm," "),t=t.replace(e,"$1 $2"),t=t.replace(e,"$1 $2"),t=t.replace(s,"$1 $2"),t=t.replace(n,"$1 $2"),t=t.replace(/([0-9])([+\-])/gm,"$1 $2"),t=t.replace(/[\s\r\t\n]+/gm," "),t=t.replace(/^\s+|\s+$/g,"");const o=t.split(" ");for(let T=0;T<o.length;T++){const L=o[T];if(L.match(/(\.[0-9]*)(\.)/gm)!==null){const D=U.ct();let F="",R=!1;for(let I=0;I<L.length;I++){const O=L[I];O==="."&&!R?(R=!0,F+=O):O==="."?(D.push(F),F="."):F+=O}D.push(F),o.splice(T,1);for(let I=0;I<D.length;I++)o.splice(T+I,0,D[I]);T+=D.length-1,U.nt(D)}}let r=-1,l="",h="";const a=new Point(0,0),c=new Point(0,0),f=new Point(0,0);let u=!0;function d(){return r>=b-1||o[r+1].match(M)!==null?!0:(u=!1,!1)}function m(){return r++,o[r]}function g(T){let L=parseFloat(m()),D=parseFloat(m());l===l.toLowerCase()&&(L=f.x+L,D=f.y+D),T.e(L,D)}function p(){return g(f),f}function y(){return g(c),c}function x(){const T=h.toLowerCase();return T==="c"||T==="s"||T==="q"||T==="t"?new Point(2*f.x-c.x,2*f.y-c.y):new Point(f.x,f.y)}const b=o.length,S=GeoStream.AT(null);let k=!1,P=!1,A=!1,N=!0;const M=new RegExp("["+Geometry.Dm+"]");for(;!(r>=b-1);){if(h=l,l=m(),l==="")continue;u=!0;let T=!1;switch(l.toUpperCase()){case"X":N=!0,k=!1,P=!1;break;case"M":const L=p();for(S.Oi===null||N===!0?(S.Gu(L.x,L.y,k,!1,!P,A),N=!1):S.VI(L.x,L.y),a.f(f);!d();){const D=p();S._s(D.x,D.y)}break;case"L":for(;!d();){const D=p();S._s(D.x,D.y)}u&&(T=!0);break;case"H":for(;!d();)f.e((l===l.toLowerCase()?f.x:0)+parseFloat(m()),f.y),S._s(f.x,f.y);break;case"V":for(;!d();)f.e(f.x,(l===l.toLowerCase()?f.y:0)+parseFloat(m())),S._s(f.x,f.y);u&&(T=!0);break;case"C":for(;!d();){const D=new Point;g(D);const F=y(),R=p();S.Dr(D.x,D.y,F.x,F.y,R.x,R.y)}u&&(T=!0);break;case"S":for(;!d();){const D=x(),F=y(),R=p();S.Dr(D.x,D.y,F.x,F.y,R.x,R.y)}u&&(T=!0);break;case"Q":for(;!d();){const D=y(),F=p();S.qu(D.x,D.y,F.x,F.y)}u&&(T=!0);break;case"T":for(;!d();){const D=x();c.f(D);const F=p();S.qu(D.x,D.y,F.x,F.y),c.f(F)}u&&(T=!0);break;case"B":for(;!d();){const D=parseFloat(m()),F=parseFloat(m());let R=parseFloat(m()),I=parseFloat(m());const O=parseFloat(m());let X=O,Y=!1;d()||(X=parseFloat(m()),d()||(Y=parseFloat(m())!==0)),l===l.toLowerCase()&&(R+=f.x,I+=f.y),S.zI(D,F,R,I,O,X,Y)}u&&(T=!0);break;case"A":for(;!d();){const D=Math.abs(parseFloat(m())),F=Math.abs(parseFloat(m())),R=parseFloat(m());let I=!1,O=!1,X=0,Y=0;const B=m();B.length===1?(I=!!parseFloat(B),O=!!parseFloat(m()),X=parseFloat(m()),Y=parseFloat(m())):B.length===2?(I=!!parseFloat(B[0]),O=!!parseFloat(B[1]),X=parseFloat(m()),Y=parseFloat(m())):(I=!!parseFloat(B[0]),O=!!parseFloat(B[1]),X=parseFloat(B.slice(2)),Y=parseFloat(m())),l===l.toLowerCase()&&(X=f.x+X,Y=f.y+Y),f.e(X,Y),S.XI(D,F,R,I,O,X,Y)}u&&(T=!0);break;case"Z":S.YI(),f.f(a);break;case"F":{let D="",F=1;for(;o[r+F];){if(o[r+F]==="0"){A=!0,F++;continue}if(o[r+F].match(/[Uu]/)!==null){F++;continue}if(o[r+F].match(M)===null){F++;continue}D=o[r+F];break}D.match(/[Mm]/)?k=!0:S.KI();break}case"U":{let D="",F=1;for(;o[r+F];){if(o[r+F].match(/[Ff]/)!==null){F++;continue}if(o[r+F].match(M)===null){F++;continue}D=o[r+F];break}D.match(/[Mm]/)?P=!0:S.UI(!1);break}default:if(l==="0"||l==="1")break;U.et("Unknown geometry command: "+l);break}if(T){U.et(`Bad geometry command: ${l}, next token: ${m()},
string: ${t}`);break}}const C=S.Fm;if(GeoStream.TT(S),i){const T=C.figures.iterator;for(;T.next();){const L=T.value;L.isFilled=!0}}return C}static LT(t,i){const e=t.length,s=Point.a();for(let n=0;n<e;n++){const o=t[n];s.x=o[0],s.y=o[1],i.Pt(s),o[0]=s.x,o[1]=s.y,s.x=o[2],s.y=o[3],i.Pt(s),o[2]=s.x,o[3]=s.y,s.x=o[4],s.y=o[5],i.Pt(s),o[4]=s.x,o[5]=s.y,s.x=o[6],s.y=o[7],i.Pt(s),o[6]=s.x,o[7]=s.y}Point.o(s)}sP(){if(this.Mt)return!0;if(this.type===4){const t=this.figures;if(this.Tm!==t.dt)return!0;const i=this.figures.h,e=i.length;for(let s=0;s<e;s++)if(i[s].sP())return!0}return!1}Dx(){if(this.Mt=!1,this.Yc=null,this.Ku=null,this.Uu=NaN,this.type===4){const i=this.figures;this.Tm=i.dt;const e=this.figures.h,s=e.length;for(let n=0;n<s;n++)e[n].GI()}const t=this.Lm;isNaN(this.Kc)||isNaN(this.Uc)?t.e(0,0,0,0):t.e(0,0,this.Kc,this.Uc),this.DT(t,!1),t.ui(0,0,0,0)}computeBoundsWithoutOrigin(t){return t===void 0&&(t=new Rect),this.DT(t,!0),t}DT(t,i){switch(this.type){case 1:case 2:case 3:i?t.e(this.Ee,this.Be,0,0):t.ui(this.Ee,this.Be,0,0),t.ui(this.ce,this.fe,0,0);break;case 4:const e=this.figures,s=e.h,n=e.length;for(let o=0;o<n;o++){const r=s[o];i&&o===0?t.e(r.startX,r.startY,0,0):t.ui(r.startX,r.startY,0,0);const h=r.segments.h,a=h.length;let c=r.startX,f=r.startY;for(let u=0;u<a;u++){const d=h[u];switch(d.type){case 2:case 1:c=d.endX,f=d.endY,t.ui(c,f,0,0);break;case 3:G.Yu(c,f,d.point1X,d.point1Y,d.point2X,d.point2Y,d.endX,d.endY,.5,t),c=d.endX,f=d.endY;break;case 4:G.eP(c,f,d.point1X,d.point1Y,d.endX,d.endY,.5,t),c=d.endX,f=d.endY;break;case 5:case 6:const m=d.type===5?d.Ko(r):d.da(r,c,f),g=m.length;if(g===0){c=d.type===5?d.centerX:d.endX,f=d.type===5?d.centerY:d.endY,t.ui(c,f,0,0);break}let p=null;for(let y=0;y<g;y++)p=m[y],G.Yu(p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7],.5,t);p!==null&&(c=p[6],f=p[7]);break;default:U.n("Unknown Segment type: "+d.type)}}}break;default:U.n("Unknown Geometry type: "+this.type)}}qI(t,i){const e=this.bounds;let s=t/e.width,n=i/e.height;return isFinite(s)||(s=1),isFinite(n)||(n=1),s===1&&n===1?this:this.copy().scale(s,n)}normalize(){this.p&&U.F(this);const t=this.computeBoundsWithoutOrigin();return this.offset(-t.x,-t.y),new Point(-t.x,-t.y)}offset(t,i){return this.p&&U.F(this),Debug&&(U.r(t,Geometry,"offset"),U.r(i,Geometry,"offset")),this.D(1,0,0,1,t,i),this}scale(t,i){return this.p&&U.F(this),Debug&&(U.r(t,Geometry,"scale:x"),U.r(i,Geometry,"scale:y"),t===0&&U.q(t,"scale must be non-zero",Geometry,"scale:x"),i===0&&U.q(i,"scale must be non-zero",Geometry,"scale:y")),this.D(t,0,0,i,0,0),this}rotate(t,i,e){this.p&&U.F(this),i===void 0&&(i=0),e===void 0&&(e=0),Debug&&(U.r(t,Geometry,"rotate:angle"),U.r(i,Geometry,"rotate:x"),U.r(e,Geometry,"rotate:y"));const s=Transform.a();return s.Hi(),s.Ns(t,i,e),this.D(s.m11,s.m12,s.m21,s.m22,s.dx,s.dy),Transform.o(s),this}D(t,i,e,s,n,o){let r=0,l=0;switch(this.type){case 1:case 2:case 3:r=this.Ee,l=this.Be,this.Ee=r*t+l*e+n,this.Be=r*i+l*s+o,r=this.ce,l=this.fe,this.ce=r*t+l*e+n,this.fe=r*i+l*s+o;break;case 4:const a=this.figures.h,c=a.length;for(let f=0;f<c;f++){const u=a[f];r=u.startX,l=u.startY,u.startX=r*t+l*e+n,u.startY=r*i+l*s+o;const m=u.segments.h,g=m.length;for(let p=0;p<g;p++){const y=m[p];switch(y.type){case 2:case 1:r=y.endX,l=y.endY,y.endX=r*t+l*e+n,y.endY=r*i+l*s+o;break;case 3:r=y.point1X,l=y.point1Y,y.point1X=r*t+l*e+n,y.point1Y=r*i+l*s+o,r=y.point2X,l=y.point2Y,y.point2X=r*t+l*e+n,y.point2Y=r*i+l*s+o,r=y.endX,l=y.endY,y.endX=r*t+l*e+n,y.endY=r*i+l*s+o;break;case 4:r=y.point1X,l=y.point1Y,y.point1X=r*t+l*e+n,y.point1Y=r*i+l*s+o,r=y.endX,l=y.endY,y.endX=r*t+l*e+n,y.endY=r*i+l*s+o;break;case 5:if(r=y.centerX,l=y.centerY,y.centerX=r*t+l*e+n,y.centerY=r*i+l*s+o,i!==0){let x=Math.atan2(i,t)*180/Math.PI;x<0&&(x+=360),y.startAngle+=x}t<0&&(y.startAngle=180-y.startAngle,y.sweepAngle=-y.sweepAngle),s<0&&(y.startAngle=-y.startAngle,y.sweepAngle=-y.sweepAngle),y.radiusX*=Math.sqrt(t*t+e*e),y.radiusY!==void 0&&(y.radiusY*=Math.sqrt(i*i+s*s));break;case 6:if(r=y.endX,l=y.endY,y.endX=r*t+l*e+n,y.endY=r*i+l*s+o,y.radiusX===0||y.radiusY===0)break;if(i!==0){let x=Math.atan2(i,t)*180/Math.PI;x<0&&(x+=360),y.xAxisRotation+=x}t<0&&(y.xAxisRotation=180-y.xAxisRotation,y.isClockwiseArc=!y.isClockwiseArc),s<0&&(y.xAxisRotation=-y.xAxisRotation,y.isClockwiseArc=!y.isClockwiseArc),y.radiusX*=Math.sqrt(t*t+e*e),y.radiusY*=Math.sqrt(i*i+s*s);break;default:U.n("Unknown Segment type: "+y.type)}}}break}return this.Mt=!0,this}containsPoint(t,i){i===void 0&&(i=0);const e=this.Ee,s=this.Be,n=this.ce,o=this.fe;switch(this.type){case 1:return G.vi(e,s,n,o,i,t.x,t.y);case 2:{const r=Math.min(e,n)-i,l=Math.min(s,o)-i,h=Math.abs(n-e)+i*2,a=Math.abs(o-s)+i*2,c=Rect.V(r,l,h,a),f=c.containsPoint(t);return Rect.o(c),f}case 3:{let r=Math.min(e,n)-i,l=Math.min(s,o)-i;const h=Math.abs(n-e)+i*2,a=Math.abs(o-s)+i*2,c=h/2,f=a/2;return c<=0||f<=0?!1:(r=t.x-(r+c),l=t.y-(l+f),r*r/(c*c)+l*l/(f*f)<=1)}case 4:return this.nP(t,i,!0,!1);default:return!1}}nP(t,i,e,s){const n=t.x,o=t.y,r=this.bounds.x-20,l=o;let h=0,a=0,c=0,f=0,u=0,d=0;const m=this.figures.h,g=m.length;for(let p=0;p<g;p++){const y=m[p],x=!y.isEvenOdd;if(y.isFilled){if(e&&y.oP(n,o,i))return!0}else{if(y.oP(n,o,s?i:i+2))return!0;continue}const b=y.segments;a=y.startX,c=y.startY;let S=a,k=c;const P=b.h;let A=P[0];for(let N=0;N<=b.length;N++){let M;switch(N!==b.length?(A=P[N],M=A.type,u=A.endX,d=A.endY):(M=2,u=S,d=k),M){case 1:{const C=this.Fx(n,o,r,l,a,c,S,k);if(isNaN(C))return!0;h+=C,S=u,k=d;break}case 2:{const C=this.Fx(n,o,r,l,a,c,u,d);if(isNaN(C))return!0;h+=C;break}case 3:f=G.Cm(a,c,A.point1X,A.point1Y,A.point2X,A.point2Y,u,d,r,l,n,o,.5),h+=f;break;case 4:{const C=(a+2*A.point1X)/3,T=(c+2*A.point1Y)/3,L=(A.point1X*2+u)/3,D=(A.point1Y*2+d)/3;f=G.Cm(a,c,C,T,L,D,u,d,r,l,n,o,.5),h+=f;break}case 5:case 6:{const C=A.type===5?A.Ko(y):A.da(y,a,c),T=C.length;if(T===0){const D=this.Fx(n,o,r,l,a,c,A.type===5?A.centerX:A.endX,A.type===5?A.centerY:A.endY);if(isNaN(D))return!0;h+=D;break}let L=null;for(let D=0;D<T;D++){if(L=C[D],D===0){const F=this.Fx(n,o,r,l,a,c,L[0],L[1]);if(isNaN(F))return!0;h+=F}f=G.Cm(L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],r,l,n,o,.5),h+=f}L!==null&&(u=L[6],d=L[7]);break}default:U.n("Unknown Segment type: "+A.type)}a=u,c=d}if(x){if(h!==0)return!0}else if(h%2!==0)return!0;h=0}return!1}Fx(t,i,e,s,n,o,r,l){if(G.vi(n,o,r,l,.05,t,i))return NaN;const h=(t-e)*(o-l);if(h===0)return 0;const a=((t*s-i*e)*(n-r)-(t-e)*(n*l-o*r))/h,c=(t*s-i*e)*(o-l)/h;if(a>=t)return 0;if((n>r?n-r:r-n)<(o>l?o-l:l-o)){if(o<l){if(c<o||c>l)return 0}else if(c<l||c>o)return 0}else if(n<r){if(a<n||a>r)return 0}else if(a<r||a>n)return 0;return h>0?1:-1}FT(t,i,e){const s=this.figures.h,n=s.length;for(let o=0;o<n;o++)if(s[o].oP(t,i,e))return!0;return!1}getPointAlongPath(t,i){if(t<0?t=0:t>1&&(t=1),i===void 0&&(i=new Point),this.type===1)return i.e(this.startX+t*(this.endX-this.startX),this.startY+t*(this.endY-this.startY)),i;const e=this.flattenedSegments,s=this.flattenedLengths,n=this.flattenedTotalLength,o=e.length,r=n*t;let l=0;for(let h=0;h<o;h++){const a=s[h],c=a.length;for(let f=0;f<c;f++){const u=a[f];if(l+u>=r){const d=r-l,m=u===0?0:d/u,g=e[h],p=g[f*2],y=g[f*2+1],x=g[f*2+2],b=g[f*2+3];return i.e(p+(x-p)*m,y+(b-y)*m),i}l+=u}}return i}getAngleAlongPath(t){if(t<0?t=0:t>1&&(t=1),this.type===1)return Math.atan2(this.endY-this.startY,this.endX-this.startX)*180/Math.PI;const i=this.flattenedSegments,e=this.flattenedLengths,s=this.flattenedTotalLength,n=i.length,o=s*t;let r=0;for(let l=0;l<n;l++){const h=e[l],a=h.length;for(let c=0;c<a;c++){const f=h[c];if(r+f>=o){const u=i[l],d=u[c*2],m=u[c*2+1],g=u[c*2+2],p=u[c*2+3];return Math.abs(g-d)<1&&Math.abs(p-m)<1?0:Math.abs(g-d)<1?p-m>=0?90:270:Math.abs(p-m)<1?g-d>=0?0:180:Math.atan2(p-m,g-d)*180/Math.PI}r+=f}}return NaN}getPointAndAngleAlongPath(t,i){if(t<0?t=0:t>1&&(t=1),i===void 0&&(i=[]),i.length=3,this.type===1)return i[0]=this.startX+t*(this.endX-this.startX),i[1]=this.startY+t*(this.endY-this.startY),i[2]=Math.atan2(this.endY-this.startY,this.endX-this.startX)*180/Math.PI,i;const e=this.flattenedSegments,s=this.flattenedLengths,n=this.flattenedTotalLength,o=e.length,r=n*t;let l=0;for(let h=0;h<o;h++){const a=s[h],c=a.length;for(let f=0;f<c;f++){const u=a[f];if(l+u>=r){const d=r-l,m=u===0?0:d/u,g=e[h],p=g[f*2],y=g[f*2+1],x=g[f*2+2],b=g[f*2+3];i[0]=p+(x-p)*m,i[1]=y+(b-y)*m;let S;return Math.abs(x-p)<1&&Math.abs(b-y)<1?S=0:Math.abs(x-p)<1?S=b-y>=0?90:270:Math.abs(b-y)<1?S=x-p>=0?0:180:S=Math.atan2(b-y,x-p)*180/Math.PI,i[2]=S,i}l+=u}}return i}getFractionForPoint(t){if(this.type===1){const i=this.startX,e=this.startY,s=this.endX,n=this.endY;if(i===s&&e===n)return 0;{const o=t.x,r=t.y;let l=0,h=0;if(i===s)return e<n?(l=e,h=n):(l=n,h=e),r<=l?l===e?0:1:r>=h?h===e?0:1:Math.abs(r-e)/(h-l);if(e===n)return i<s?(l=i,h=s):(l=s,h=i),o<=l?l===i?0:1:o>=h?h===i?0:1:Math.abs(o-i)/(h-l);{const a=(s-i)**2+(n-e)**2,c=Point.a();G.Xl(i,e,s,n,o,r,c);const f=c.x,u=c.y;return Point.o(c),Math.sqrt(((f-i)**2+(u-e)**2)/a)}}}else if(this.type===2){const i=this.startX,e=this.startY,s=this.endX,n=this.endY;if(i===s&&e===n)return 0;{const o=s-i,r=n-e,l=o*2+r*2;let h=t.x,a=t.y;h=Math.min(Math.max(h,i),s),a=Math.min(Math.max(a,e),n);const c=Math.abs(h-i),f=Math.abs(h-s),u=Math.abs(a-e),d=Math.abs(a-n),m=Math.min(c,f,u,d);if(m===u)return h/l;if(m===f)return(o+a)/l;if(m===d)return(o*2+r-h)/l;if(m===c)return(o*2+r*2-a)/l}}else{const i=this.flattenedSegments,e=this.flattenedLengths,s=this.flattenedTotalLength,n=Point.a();let o=1/0,r=0,l=0;const h=i.length;let a=0,c=0;for(let u=0;u<h;u++){const d=i[u],m=e[u],g=d.length;for(let p=0;p<g;p+=2){const y=d[p],x=d[p+1];if(p===0){a=y,c=x;continue}G.Xl(a,c,y,x,t.x,t.y,n);const b=(n.x-t.x)**2+(n.y-t.y)**2;b<o&&(o=b,r=l,r+=Math.sqrt((n.x-a)**2+(n.y-c)**2)),l+=m[(p-2)/2],a=y,c=x}}Point.o(n);const f=r/s;return f<0?0:f>1?1:f}return 0}get flattenedSegments(){return this.RT(),this.Yc}RT(){if(this.Yc===null){const t=this.Yc=[],i=this.Ku=[];this.HI(t,i)}}get flattenedLengths(){return this.RT(),this.Ku}get flattenedTotalLength(){let t=this.Uu;if(isNaN(t)){if(this.type===1){const i=Math.abs(this.endX-this.startX),e=Math.abs(this.endY-this.startY);t=Math.sqrt(i*i+e*e)}else if(this.type===2){const i=Math.abs(this.endX-this.startX),e=Math.abs(this.endY-this.startY);t=i*2+e*2}else{const i=this.flattenedLengths,e=i.length;t=0;for(let s=0;s<e;s++){const n=i[s],o=n.length;for(let r=0;r<o;r++)t+=n[r]}}this.Uu=t}return t}rP(t){const i=[];let e=0,s=0;const n=t.length;for(let o=0;o<n;o+=2){const r=t[o],l=t[o+1];if(o===0){e=r,s=l;continue}const h=Math.sqrt(Point.distanceSquared(e,s,r,l));i.push(h),e=r,s=l}return i}HI(t,i){let e=[];const s=[];if(this.type===1)e.push(this.startX),e.push(this.startY),e.push(this.endX),e.push(this.endY),t.push(e),s.push(Math.sqrt((this.startX-this.endX)**2+(this.startY-this.endY)**2)),i.push(s);else if(this.type===2)e.push(this.startX),e.push(this.startY),e.push(this.endX),e.push(this.startY),e.push(this.endX),e.push(this.endY),e.push(this.startX),e.push(this.endY),e.push(this.startX),e.push(this.startY),t.push(e),s.push(Math.abs(this.startX-this.endX)),s.push(Math.abs(this.startY-this.endY)),s.push(Math.abs(this.startX-this.endX)),s.push(Math.abs(this.startY-this.endY)),i.push(s);else if(this.type===3){const n=new PathFigure;n.startX=this.endX,n.startY=(this.startY+this.endY)/2;const o=new PathSegment(5);o.startAngle=0,o.sweepAngle=360,o.centerX=(this.startX+this.endX)/2,o.centerY=(this.startY+this.endY)/2,o.radiusX=Math.abs(this.startX-this.endX)/2,o.radiusY=Math.abs(this.startY-this.endY)/2,n.add(o);const r=o.Ko(n),l=r.length;if(l===0)e.push(o.centerX),e.push(o.centerY);else{let h=n.startX,a=n.startY;for(let c=0;c<l;c++){const f=r[c];G.so(h,a,f[2],f[3],f[4],f[5],f[6],f[7],.5,e),h=f[6],a=f[7]}}t.push(e),i.push(this.rP(e))}else{const n=this.figures.iterator;for(;n.next();){const o=n.value;e=[],e.push(o.startX),e.push(o.startY);let r=o.startX,l=o.startY,h=r,a=l;const c=o.segments.h,f=c.length;for(let u=0;u<f;u++){const d=c[u];switch(d.type){case 1:e.length>=4&&(t.push(e),i.push(this.rP(e))),e=[],e.push(d.endX),e.push(d.endY),r=d.endX,l=d.endY,h=r,a=l;break;case 2:e.push(d.endX),e.push(d.endY),r=d.endX,l=d.endY;break;case 3:G.so(r,l,d.point1X,d.point1Y,d.point2X,d.point2Y,d.endX,d.endY,.5,e),r=d.endX,l=d.endY;break;case 4:G.Pm(r,l,d.point1X,d.point1Y,d.endX,d.endY,.5,e),r=d.endX,l=d.endY;break;case 5:{const m=d.Ko(o),g=m.length;if(g===0){e.push(d.centerX),e.push(d.centerY),r=d.centerX,l=d.centerY;break}for(let p=0;p<g;p++){const y=m[p];G.so(r,l,y[2],y[3],y[4],y[5],y[6],y[7],.5,e),r=y[6],l=y[7]}break}case 6:{const m=d.da(o,r,l),g=m.length,p=d.endX,y=d.endY;if(g===0){e.push(p),e.push(y),r=p,l=y;break}for(let x=0;x<g;x++){const b=m[x];G.so(r,l,b[2],b[3],b[4],b[5],b[6],b[7],.5,e),r=b[6],l=b[7]}break}default:U.n("Segment not of valid type: "+d.type)}d.isClosed&&(e.push(h),e.push(a))}e.length>=4&&(t.push(e),i.push(this.rP(e)))}}}get type(){return this.it}set type(t){this.it!==t&&(Debug&&U.j(t,GeometryType,"GeometryType"),this.p&&U.F(this,t),this.it=t,t===4?this.Qs=new List:(Geometry.Lx===null&&(Geometry.Lx=new List().S()),this.Qs=Geometry.Lx),this.Mt=!0)}get startX(){return this.Ee}set startX(t){this.Ee!==t&&(Debug&&U.r(t,Geometry,"startX"),this.p&&U.F(this,t),this.Ee=t,this.Mt=!0)}get startY(){return this.Be}set startY(t){this.Be!==t&&(Debug&&U.r(t,Geometry,"startY"),this.p&&U.F(this,t),this.Be=t,this.Mt=!0)}get endX(){return this.ce}set endX(t){this.ce!==t&&(Debug&&U.r(t,Geometry,"endX"),this.p&&U.F(this,t),this.ce=t,this.Mt=!0)}get endY(){return this.fe}set endY(t){this.fe!==t&&(Debug&&U.r(t,Geometry,"endY"),this.p&&U.F(this,t),this.fe=t,this.Mt=!0)}get figures(){return this.Qs}set figures(t){this.Qs!==t&&(Debug&&U.s(t,List,Geometry,"figures"),this.p&&U.F(this,t),this.Qs=t,this.Mt=!0)}add(t){return Debug&&U.s(t,PathFigure,Geometry,"add"),this.Qs.add(t),this}setSpots(t,i,e,s,n,o,r,l){return this.p&&U.F(this),this.no=new Spot(t,i,n,o),this.oo=new Spot(e,s,r,l),this}get spot1(){return this.no}set spot1(t){Debug&&U.s(t,Spot,Geometry,"spot1"),this.p&&U.F(this,t),this.no=t.T()}get spot2(){return this.oo}set spot2(t){Debug&&U.s(t,Spot,Geometry,"spot2"),this.p&&U.F(this,t),this.oo=t.T()}get defaultStretch(){return this.ro}set defaultStretch(t){this.ro=t}get bounds(){return this.sP()&&this.Dx(),this.Lm}polygonClosestSegment(t,i){if(i===void 0&&(i=10),this.type!==4)return null;const e=t.x,s=t.y;let n=1/0,o=0,r=0,l=0,h=0,a=0,c=0,f=0,u=0;return this.figures.each(d=>{let m=d.startX,g=d.startY;d.segments.each(p=>{let y=p.endX,x=p.endY,b=0;if(p.type===2)b=Point.distanceLineSegmentSquared(e,s,m,g,y,x);else{m=p.endX,g=p.endY;return}b<n&&(n=b,o=l,r=h,a=m,c=g,f=y,u=x),m=y,g=x,h++,p.isClosed&&(y=d.startX,x=d.startY,b=Point.distanceLineSegmentSquared(e,s,m,g,y,x),b<n&&(n=b,o=l,r=h,a=m,c=g,f=y,u=x),h++)}),l++,h=0}),n<i*i?{figi:o,segi:r,ax:a,ay:c,bx:f,by:u}:null}get polygonArea(){if(this.type===4){const t=this.figures.iterator;let i=0,e=0,s=0,n=0,o=0;for(;t.next();){const r=t.value;if(!r.isFilled)continue;i=r.startX,e=r.startY;const l=r.segments.iterator;for(;l.next();){const h=l.value;s=h.endX,n=h.endY,h.type===1||h.type!==5&&(o+=i*n-e*s),i=s,e=n}o+=i*r.startY-e*r.startX}return Math.abs(o)/2}else if(this.type===2){const t=Math.abs(this.startX-this.endX),i=Math.abs(this.startY-this.endY);return t*i}else if(this.type===3){const t=Math.abs(this.startX-this.endX),i=Math.abs(this.startY-this.endY);return Math.PI*t/2*i/2}else return 0}get polygonLength(){if(this.type===4){const t=this.figures.iterator;let i=0,e=0,s=0,n=0,o=0;for(;t.next();){const r=t.value;i=r.startX,e=r.startY;const l=r.segments.iterator;for(;l.next();){const a=l.value;s=a.endX,n=a.endY,a.type===1||a.type!==5&&(o+=Math.sqrt((s-i)*(s-i)+(n-e)*(n-e))),i=s,e=n}const h=r.segments.last();h&&h.isClosed&&(s=r.startX,n=r.startY,o+=Math.sqrt((s-i)*(s-i)+(n-e)*(n-e)))}return o}else if(this.type===2){const t=Math.abs(this.startX-this.endX),i=Math.abs(this.startY-this.endY);return t*2+i*2}else if(this.type===3){const t=Math.abs(this.startX-this.endX)/2,i=Math.abs(this.startY-this.endY)/2;if(t+i===0)return 0;const e=(t-i)*(t-i)/((t+i)*(t+i));let s=e,n=1+s/4;return s*=e,n+=s/64,s*=e,n+=s/256,s*=e,n+=s*25/16384,s*=e,n+=s*49/65536,s*=e,n+=s*441/1048576,Math.PI*(t+i)*n}else{const t=this.startX,i=this.startY,e=this.endX,s=this.endY;return Math.sqrt((e-t)*(e-t)+(s-i)*(s-i))}}static computeConvexHull(t){t.sort((s,n)=>s.x===n.x?n.y-s.y:n.x-s.x);const i=[];for(let s=0;s<t.length;s++){for(;i.length>=2&&t[s].compareWithLineSegmentPoint(i[i.length-2],i[i.length-1])>=0;)i.pop();i.push(t[s])}i.pop();const e=[];for(let s=t.length-1;s>=0;s--){for(;e.length>=2&&t[s].compareWithLineSegmentPoint(e[e.length-2],e[e.length-1])>=0;)e.pop();e.push(t[s])}return e.pop(),i.concat(e)}static generatePolygon(t,i,e){i===void 0&&(i=0),e===void 0&&(e=!0);const s=new Geometry;if(t.length>1)if(i>0)if(e){t.push(t[0]),t.push(t[1]);let n=!0;const o=new PathFigure(0,0,e,!1);for(let l=1;l<t.length;l++){const h=(t[l-1].x+t[l].x)/2,a=(t[l-1].y+t[l].y)/2,c=t[l-1].distanceSquaredPoint(t[l]),f=.5*i/Math.sqrt(c);if(f<.5){const u=t[l-1].x+(t[l].x-t[l-1].x)*f,d=t[l-1].y+(t[l].y-t[l-1].y)*f;if(n?(n=!1,o.startX=u,o.startY=d):o.add(new PathSegment(3,u,d,t[l-1].x,t[l-1].y,t[l-1].x,t[l-1].y)),l<t.length-1){const m=t[l].x+(t[l-1].x-t[l].x)*f,g=t[l].y+(t[l-1].y-t[l].y)*f;o.add(new PathSegment(2,m,g))}}else n?(n=!1,o.startX=h,o.startY=a):o.add(new PathSegment(3,h,a,t[l-1].x,t[l-1].y,t[l-1].x,t[l-1].y))}const r=o.segments.last();r&&r.close(),s.add(o)}else{const n=new PathFigure(t[0].x,t[0].y,!1,!1);for(let o=1;o<t.length;o++){const r=(t[o-1].x+t[o].x)/2,l=(t[o-1].y+t[o].y)/2,h=t[o-1].distanceSquaredPoint(t[o]),a=.5*i/Math.sqrt(h);if(a<.5){if(o>1){const u=t[o-1].x+(t[o].x-t[o-1].x)*a,d=t[o-1].y+(t[o].y-t[o-1].y)*a;n.add(new PathSegment(3,u,d,t[o-1].x,t[o-1].y,t[o-1].x,t[o-1].y))}const c=t[o].x+(t[o-1].x-t[o].x)*a,f=t[o].y+(t[o-1].y-t[o].y)*a;n.add(new PathSegment(2,c,f))}else o>1&&n.add(new PathSegment(3,r,l,t[o-1].x,t[o-1].y,t[o-1].x,t[o-1].y));o===t.length-1&&n.add(new PathSegment(2,t[o].x,t[o].y))}s.add(n)}else{const n=new PathFigure(t[0].x,t[0].y,e,!1);for(let o=1;o<t.length;o++)n.add(new PathSegment(2,t[o].x,t[o].y));if(e){const o=n.segments.last();o&&o.close()}s.add(n)}return s}}Geometry.stringify=Geometry.stringify,Geometry.stringifyFixed=Geometry.stringifyFixed,Geometry.fillPath=Geometry.fillPath,Geometry.parse=Geometry.parse;class PathFigure{l;Ee;Be;Gc;Rm;ts;constructor(t,i,e,s,n){e===void 0&&(e=!0),s===void 0&&(s=!0),n===void 0&&(n=!1),this.l=2|(e?4:0)|(s?8:0)|(n?16:0),t!==void 0?(Debug&&U.r(t,PathFigure,"sx"),this.Ee=t):this.Ee=0,i!==void 0?(Debug&&U.r(i,PathFigure,"sy"),this.Be=i):this.Be=0,this.Gc=new List,this.Rm=this.Gc.dt,this.ts=null}copy(){const t=new PathFigure;t.l=this.l&-2,t.Ee=this.Ee,t.Be=this.Be;const i=this.Gc.h,e=i.length,s=t.Gc;for(let n=0;n<e;n++){const r=i[n].copy();s.add(r)}return t.Rm=this.Rm,t.ts=this.ts,t}equalsApprox(t){if(!(t instanceof PathFigure)||!G.u(this.startX,t.startX)||!G.u(this.startY,t.startY))return!1;const i=this.segments.h,e=t.segments.h,s=i.length;if(s!==e.length)return!1;for(let n=0;n<s;n++){const o=i[n],r=e[n];if(!o.equalsApprox(r))return!1}return!0}toString(t){t===void 0&&(t=-1);let i="";if(t<0)i="M"+this.startX.toString()+" "+this.startY.toString();else{const n=o=>o===0?"0":o.toFixed(t);i="M"+n(this.startX)+" "+n(this.startY)}const e=this.segments.h,s=e.length;for(let n=0;n<s;n++){const o=e[n];i+=" "+o.toString(t)}return i}get p(){return(this.l&1)!==0}set p(t){t?this.l|=1:this.l&=-2}get Mt(){return(this.l&2)!==0}set Mt(t){t?this.l|=2:this.l&=-3}S(){this.p=!0;const t=this.segments;t.S();const i=t.h,e=t.length;for(let s=0;s<e;s++)i[s].S();return this}sP(){if(this.Mt)return!0;const t=this.segments;if(this.Rm!==t.dt)return!0;for(const i of t)if(i.Mt)return!0;return!1}GI(){this.Mt=!1,this.ts=null;const t=this.segments;this.Rm=t.dt;for(const i of t)i.Mt=!1,i.tn=null}get isFilled(){return(this.l&4)!==0}set isFilled(t){Debug&&U.i(t,"boolean",PathFigure,"isFilled"),this.p&&U.F(this,t),t?this.l|=4:this.l&=-5}get isShadowed(){return(this.l&8)!==0}set isShadowed(t){Debug&&U.i(t,"boolean",PathFigure,"isShadowed"),this.p&&U.F(this,t),t?this.l|=8:this.l&=-9}get isEvenOdd(){return(this.l&16)!==0}set isEvenOdd(t){Debug&&U.i(t,"boolean",PathFigure,"isEvenOdd"),this.p&&U.F(this,t),t?this.l|=16:this.l&=-17}get startX(){return this.Ee}set startX(t){Debug&&U.r(t,PathFigure,"startX"),this.p&&U.F(this,t),this.Ee=t,this.ts=null,this.Mt=!0}get startY(){return this.Be}set startY(t){Debug&&U.r(t,PathFigure,"startY"),this.p&&U.F(this,t),this.Be=t,this.ts=null,this.Mt=!0}get segments(){return this.Gc}set segments(t){Debug&&U.s(t,List,PathFigure,"segments"),this.p&&U.F(this,t),this.Gc=t,this.ts=null,this.Mt=!0}add(t){return Debug&&U.s(t,PathSegment,PathFigure,"add"),this.Gc.add(t),this.ts=null,this}oP(t,i,e){const s=this;let n=s.startX,o=s.startY,r=n,l=o;const h=s.segments.h,a=h.length;for(let c=0;c<a;c++){const f=h[c];switch(f.type){case 1:r=f.endX,l=f.endY,n=f.endX,o=f.endY;break;case 2:if(G.vi(n,o,f.endX,f.endY,e,t,i))return!0;n=f.endX,o=f.endY;break;case 3:if(G.Ax(n,o,f.point1X,f.point1Y,f.point2X,f.point2Y,f.endX,f.endY,.5,t,i,e))return!0;n=f.endX,o=f.endY;break;case 4:if(G.iP(n,o,f.point1X,f.point1Y,f.endX,f.endY,.5,t,i,e))return!0;n=f.endX,o=f.endY;break;case 5:case 6:const u=f.type===5?f.Ko(s):f.da(s,n,o),d=u.length,m=f.type===5?f.centerX:f.endX,g=f.type===5?f.centerY:f.endY;if(d===0){if(G.vi(n,o,m,g,e,t,i))return!0;n=m,o=g;break}let p=null;for(let y=0;y<d;y++)if(p=u[y],y===0&&G.vi(n,o,p[0],p[1],e,t,i)||G.Ax(p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7],.5,t,i,e))return!0;p!==null&&(n=p[6],o=p[7]);break;default:U.n("Unknown Segment type: "+f.type)}if(f.isClosed&&(n!==r||o!==l)&&G.vi(n,o,r,l,e,t,i))return!0}return!1}}var SegmentType=(w=>(w[w.Move=1]="Move",w[w.Line=2]="Line",w[w.Bezier=3]="Bezier",w[w.QuadraticBezier=4]="QuadraticBezier",w[w.Arc=5]="Arc",w[w.SvgArc=6]="SvgArc",w))(SegmentType||{});class PathSegment{it;l;ce;fe;Cn;Gl;ql;Fr;tn;constructor(t,i,e,s,n,o,r,l){if(GSet.se(this),t===void 0?t=2:Debug&&U.j(t,SegmentType,"SegmentType"),this.it=t,this.l=2,i!==void 0?(Debug&&U.r(i,PathSegment,"ex"),this.ce=i):this.ce=0,e!==void 0?(Debug&&U.r(e,PathSegment,"ey"),this.fe=e):this.fe=0,s===void 0&&(s=0),n===void 0&&(n=0),o===void 0&&(o=0),r===void 0&&(r=0),t===6){let h=o;h=h%360,h<0&&(h+=360),this.Cn=h,this.Gl=0,Debug&&U.r(s,PathSegment,"x1"),this.ql=Math.max(s,0),Debug&&U.r(n,PathSegment,"y1"),this.Fr=Math.max(n,0),typeof r=="boolean"?r&&(this.isLargeArc=!0):typeof r=="number"&&r&&(this.isLargeArc=!0),l&&(this.isClockwiseArc=!0)}else Debug&&U.r(s,PathSegment,"x1"),this.Cn=s,Debug&&U.r(n,PathSegment,"y1"),this.Gl=n,Debug&&U.r(o,PathSegment,"x2"),t===5&&(o=Math.max(o,0)),this.ql=o,typeof r=="number"?(t===5&&(r=Math.max(r,0)),this.Fr=r):this.Fr=0;this.tn=null}copy(){const t=new PathSegment;return t.it=this.it,t.l=this.l&-2,t.ce=this.ce,t.fe=this.fe,t.Cn=this.Cn,t.Gl=this.Gl,t.ql=this.ql,t.Fr=this.Fr,t}equalsApprox(t){if(!(t instanceof PathSegment)||this.type!==t.type||this.isClosed!==t.isClosed)return!1;switch(this.type){case 1:case 2:return G.u(this.endX,t.endX)&&G.u(this.endY,t.endY);case 3:return G.u(this.endX,t.endX)&&G.u(this.endY,t.endY)&&G.u(this.point1X,t.point1X)&&G.u(this.point1Y,t.point1Y)&&G.u(this.point2X,t.point2X)&&G.u(this.point2Y,t.point2Y);case 4:return G.u(this.endX,t.endX)&&G.u(this.endY,t.endY)&&G.u(this.point1X,t.point1X)&&G.u(this.point1Y,t.point1Y);case 5:return G.u(this.startAngle,t.startAngle)&&G.u(this.sweepAngle,t.sweepAngle)&&G.u(this.centerX,t.centerX)&&G.u(this.centerY,t.centerY)&&G.u(this.radiusX,t.radiusX)&&G.u(this.radiusY,t.radiusY);case 6:return this.isClockwiseArc===t.isClockwiseArc&&this.isLargeArc===t.isLargeArc&&G.u(this.xAxisRotation,t.xAxisRotation)&&G.u(this.endX,t.endX)&&G.u(this.endY,t.endY)&&G.u(this.radiusX,t.radiusX)&&G.u(this.radiusY,t.radiusY);default:return!1}}yi(t){t in SegmentType?this.type=t:U.Pr(this,t)}toString(t){t===void 0&&(t=-1);const i=s=>s===0?"0":s.toFixed(t);let e="";switch(this.type){case 1:t<0?e="M"+this.endX.toString()+" "+this.endY.toString():e="M"+i(this.endX)+" "+i(this.endY);break;case 2:t<0?e="L"+this.endX.toString()+" "+this.endY.toString():e="L"+i(this.endX)+" "+i(this.endY);break;case 3:t<0?e="C"+this.point1X.toString()+" "+this.point1Y.toString()+" "+this.point2X.toString()+" "+this.point2Y.toString()+" "+this.endX.toString()+" "+this.endY.toString():e="C"+i(this.point1X)+" "+i(this.point1Y)+" "+i(this.point2X)+" "+i(this.point2Y)+" "+i(this.endX)+" "+i(this.endY);break;case 4:t<0?e="Q"+this.point1X.toString()+" "+this.point1Y.toString()+" "+this.endX.toString()+" "+this.endY.toString():e="Q"+i(this.point1X)+" "+i(this.point1Y)+" "+i(this.endX)+" "+i(this.endY);break;case 5:t<0?e="B"+this.startAngle.toString()+" "+this.sweepAngle.toString()+" "+this.centerX.toString()+" "+this.centerY.toString()+" "+this.radiusX.toString()+" "+this.radiusY.toString():e="B"+i(this.startAngle)+" "+i(this.sweepAngle)+" "+i(this.centerX)+" "+i(this.centerY)+" "+i(this.radiusX)+" "+i(this.radiusY);break;case 6:t<0?e="A"+this.radiusX.toString()+" "+this.radiusY.toString()+" "+this.xAxisRotation.toString()+" "+(this.isLargeArc?1:0)+" "+(this.isClockwiseArc?1:0)+" "+this.endX.toString()+" "+this.endY.toString():e="A"+i(this.radiusX)+" "+i(this.radiusY)+" "+i(this.xAxisRotation)+" "+(this.isLargeArc?1:0)+" "+(this.isClockwiseArc?1:0)+" "+i(this.endX)+" "+i(this.endY);break;default:e=SegmentType[this.type]}return e+(this.isClosed?"z":"")}static Move=1;static Line=2;static Bezier=3;static QuadraticBezier=4;static Arc=5;static SvgArc=6;get p(){return(this.l&1)!==0}set p(t){t?this.l|=1:this.l&=-2}get Mt(){return(this.l&2)!==0}set Mt(t){t?this.l|=2:this.l&=-3}S(){return this.p=!0,this}close(){return this.isClosed=!0,this}Ko(t){if(this.tn!==null&&t.Mt===!1)return this.tn;const i=this.radiusX;let e=this.radiusY;if(e===void 0&&(e=i),i===0||e===0)return this.tn=[],this.tn;const s=this.Cn,n=this.Gl,o=G.MT(0,0,i<e?i:e,this.startAngle,this.startAngle+this.sweepAngle,!1);if(i!==e){const l=Transform.a();l.Hi(),i<e?l.lt(1,e/i):l.lt(i/e,1),Geometry.LT(o,l),Transform.o(l)}const r=o.length;for(let l=0;l<r;l++){const h=o[l];h[0]+=s,h[1]+=n,h[2]+=s,h[3]+=n,h[4]+=s,h[5]+=n,h[6]+=s,h[7]+=n}return this.tn=o,this.tn}da(t,i,e){if(this.tn!==null&&t.Mt===!1)return this.tn;if(this.radiusX===0||this.radiusY===0)return this.tn=[],this.tn;const s=i,n=e;let o=this.ql,r=this.Fr;o===0&&(o=1e-4),r===0&&(r=1e-4);const l=this.Cn*(Math.PI/180),h=this.isLargeArc,a=this.isClockwiseArc,c=this.ce,f=this.fe,u=Math.cos(l),d=Math.sin(l),m=u*(s-c)/2+d*(n-f)/2,g=-d*(s-c)/2+u*(n-f)/2,p=m*m/(o*o)+g*g/(r*r);p>1&&(o*=Math.sqrt(p),r*=Math.sqrt(p));let y=(h===a?-1:1)*Math.sqrt((o*o*r*r-o*o*g*g-r*r*m*m)/(o*o*g*g+r*r*m*m));isNaN(y)&&(y=0);let x=y*o*g/r,b=y*-r*m/o;isNaN(x)&&(x=0),isNaN(b)&&(b=0);const S=(s+c)/2+u*x-d*b,k=(n+f)/2+d*x+u*b,P=(K,z)=>Math.sqrt(K*K+z*z),A=(K,z,H,v)=>(K*H+z*v)/(P(K,z)*P(H,v)),N=(K,z,H,v)=>(K*v<z*H?-1:1)*Math.acos(A(K,z,H,v)),M=N(1,0,(m-x)/o,(g-b)/r),C=(m-x)/o,T=(g-b)/r,L=(-m-x)/o,D=(-g-b)/r;let F=N(C,T,L,D);const R=A(C,T,L,D);R<=-1?F=Math.PI:R>=1&&(F=0),!a&&F>0&&(F=F-2*Math.PI),a&&F<0&&(F=F+2*Math.PI);const I=o>r?o:r,O=o>r?1:o/r,X=o>r?r/o:1,Y=G.MT(0,0,I,M,M+F,!0),B=Transform.a();return B.Hi(),B.Zs(S,k),B.Ns(this.Cn,0,0),B.lt(O,X),Geometry.LT(Y,B),Transform.o(B),this.tn=Y,this.tn}get isClosed(){return(this.l&8)!==0}set isClosed(t){this.isClosed!==t&&(t?this.l|=8:this.l&=-9,this.Mt=!0)}get type(){return this.it}set type(t){Debug&&U.j(t,SegmentType,"SegmentType"),this.p&&U.F(this,t),this.it=t,this.Mt=!0}get endX(){return this.ce}set endX(t){Debug&&U.r(t,PathSegment,"endX"),this.p&&U.F(this,t),this.ce=t,this.Mt=!0}get endY(){return this.fe}set endY(t){Debug&&U.r(t,PathSegment,"endY"),this.p&&U.F(this,t),this.fe=t,this.Mt=!0}get point1X(){return this.Cn}set point1X(t){Debug&&U.r(t,PathSegment,"point1X"),this.p&&U.F(this,t),this.Cn=t,this.Mt=!0}get point1Y(){return this.Gl}set point1Y(t){Debug&&U.r(t,PathSegment,"point1Y"),this.p&&U.F(this,t),this.Gl=t,this.Mt=!0}get point2X(){return this.ql}set point2X(t){Debug&&U.r(t,PathSegment,"point2X"),this.p&&U.F(this,t),this.ql=t,this.Mt=!0}get point2Y(){return this.Fr}set point2Y(t){Debug&&U.r(t,PathSegment,"point2Y"),this.p&&U.F(this,t),this.Fr=t,this.Mt=!0}get centerX(){return this.Cn}set centerX(t){Debug&&U.r(t,PathSegment,"centerX"),this.p&&U.F(this,t),this.Cn=t,this.Mt=!0}get centerY(){return this.Gl}set centerY(t){Debug&&U.r(t,PathSegment,"centerY"),this.p&&U.F(this,t),this.Gl=t,this.Mt=!0}get radiusX(){return this.ql}set radiusX(t){Debug&&U.r(t,PathSegment,"radiusX"),t<0&&U.q(t,">= zero",PathSegment,"radiusX"),this.p&&U.F(this,t),this.ql=t,this.Mt=!0}get radiusY(){return this.Fr}set radiusY(t){Debug&&U.r(t,PathSegment,"radiusY"),t<0&&U.q(t,">= zero",PathSegment,"radiusY"),this.p&&U.F(this,t),this.Fr=t,this.Mt=!0}get startAngle(){return this.ce}set startAngle(t){Debug&&U.r(t,PathSegment,"startAngle"),this.p&&U.F(this,t),t=t%360,t<0&&(t+=360),this.ce=t,this.Mt=!0}get sweepAngle(){return this.fe}set sweepAngle(t){Debug&&U.r(t,PathSegment,"sweepAngle"),this.p&&U.F(this,t),t>360&&(t=360),t<-360&&(t=-360),this.fe=t,this.Mt=!0}get isClockwiseArc(){return(this.l&4)!==0}set isClockwiseArc(t){this.p&&U.F(this,t),t?this.l|=4:this.l&=-5,this.Mt=!0}get isLargeArc(){return(this.l&16)!==0}set isLargeArc(t){this.p&&U.F(this,t),t?this.l|=16:this.l&=-17,this.Mt=!0}get xAxisRotation(){return this.Cn}set xAxisRotation(t){Debug&&U.r(t,PathSegment,"xAxisRotation"),this.p&&U.F(this,t),t=t%360,t<0&&(t+=360),this.Cn=t,this.Mt=!0}}class InputEvent{c;Rx;Ix;Im;Om;Em;Bm;Vm;zm;Xm;Ym;Km;Um;Gm;Hl;qm;Hm;Ls;Ve;constructor(){this.c=null,this.Rx=new Point(0,0).S(),this.Ix=new Point(0,0).S(),this.Im=0,this.Om=0,this.Em=1,this.Bm="",this.Vm="",this.zm=!1,this.Xm=!1,this.Ym=0,this.Km=0,this.Um=!1,this.Gm=!1,this.Hl=!1,this.qm=null,this.Hm=0,this.Ls=null,this.Ve=null}copy(){const t=new InputEvent;return this.clone(t)}clone(t){return t.c=this.c,t.Rx.f(this.viewPoint),t.Ix.f(this.documentPoint),t.Im=this.Im,t.Om=this.Om,t.Em=this.Em,t.Bm=this.Bm,t.Vm=this.Vm,t.zm=this.zm,t.Xm=this.Xm,t.Ym=this.Ym,t.Km=this.Km,t.Um=this.Um,t.Gm=this.Gm,t.Hl=this.Hl,t.qm=this.qm,t.Hm=this.Hm,t.Ls=this.Ls,t.Ve=this.Ve,t}toString(){let t="^";return this.modifiers!==0&&(t+="M:"+this.modifiers),this.button!==0&&(t+="B:"+this.button),this.key!==""&&(t+="K:"+this.key),this.clickCount!==0&&(t+="C:"+this.clickCount),this.delta!==0&&(t+="D:"+this.delta),this.handled&&(t+="h"),this.bubbles&&(t+="b"),this.documentPoint!==null&&(t+="@"+this.documentPoint.toString()),t}get diagram(){return this.c}set diagram(t){this.c=t}get viewPoint(){return this.Rx}set viewPoint(t){Debug&&U.s(t,Point,InputEvent,"viewPoint"),this.Rx.f(t)}get documentPoint(){return this.Ix}set documentPoint(t){Debug&&U.s(t,Point,InputEvent,"documentPoint"),this.Ix.f(t)}getMultiTouchViewPoint(t,i){const e=this.diagram;return e===null||e.IT(this.event,t,i),i}getMultiTouchDocumentPoint(t,i){const e=this.diagram;return e===null||(e.IT(this.event,t,i),i.f(e.transformViewToDoc(i))),i}OT(t){if(this.diagram===null)return t;const e=this.getMultiTouchDocumentPoint(0,Point.V(NaN,NaN)),s=this.getMultiTouchDocumentPoint(1,Point.V(NaN,NaN));return t.e((Math.min(s.x,e.x)+Math.max(s.x,e.x))/2,(Math.min(s.y,e.y)+Math.max(s.y,e.y))/2),Point.o(e),Point.o(s),t}aV(t){if(this.diagram===null)return t;const e=this.getMultiTouchViewPoint(0,Point.V(NaN,NaN)),s=this.getMultiTouchViewPoint(1,Point.V(NaN,NaN));return t.e((Math.min(s.x,e.x)+Math.max(s.x,e.x))/2,(Math.min(s.y,e.y)+Math.max(s.y,e.y))/2),Point.o(e),Point.o(s),t}get modifiers(){return this.Im}set modifiers(t){this.Im=t}get button(){return this.Om}set button(t){if(this.Om=t,this.event===null)switch(t){case 0:this.buttons=1;return;case 1:this.buttons=4;return;case 2:this.buttons=2;return}}get buttons(){return this.Em}set buttons(t){this.Em=t}get key(){return this.Bm}set key(t){this.Bm=t}get code(){return this.Vm}set code(t){this.Vm=t}get down(){return this.zm}set down(t){this.zm=t}get up(){return this.Xm}set up(t){this.Xm=t}get clickCount(){return this.Ym}set clickCount(t){this.Ym=t}get delta(){return this.Km}set delta(t){this.Km=t}get isMultiTouch(){return this.Um}set isMultiTouch(t){this.Um=t}get handled(){return this.Gm}set handled(t){this.Gm=t}get bubbles(){return this.Hl}set bubbles(t){this.Hl=t}get event(){return this.qm}set event(t){this.qm=t}get isTouchEvent(){const t=this.event;return t===null?!1:t.pointerType==="touch"||t.pointerType==="pen"}get timestamp(){return this.Hm}set timestamp(t){this.Hm=t}get targetDiagram(){return this.Ls}set targetDiagram(t){this.Ls=t}get targetObject(){return this.Ve}set targetObject(t){this.Ve=t}get control(){return(this.modifiers&1)!==0}set control(t){this.modifiers=t?this.modifiers|1:this.modifiers&-2}get shift(){return(this.modifiers&4)!==0}set shift(t){this.modifiers=t?this.modifiers|4:this.modifiers&-5}get alt(){return(this.modifiers&2)!==0}set alt(t){this.modifiers=t?this.modifiers|2:this.modifiers&-3}get meta(){return(this.modifiers&8)!==0}set meta(t){this.modifiers=t?this.modifiers|8:this.modifiers&-9}get left(){const t=this.event;return t!==null&&(t.type==="mousedown"||t.type==="mouseup"||t.type==="pointerdown"||t.type==="pointerup")?this.button===0:(this.buttons&1)!==0}set left(t){t?this.buttons|=1:this.buttons&=-2}get right(){const t=this.event;return t!==null&&(t.type==="mousedown"||t.type==="mouseup"||t.type==="pointerdown"||t.type==="pointerup")?this.button===2:(this.buttons&2)!==0}set right(t){t?this.buttons|=2:this.buttons&=-3}get middle(){const t=this.event;return t!==null&&(t.type==="mousedown"||t.type==="mouseup"||t.type==="pointerdown"||t.type==="pointerup")?this.button===1:(this.buttons&4)!==0}set middle(t){t?this.buttons|=4:this.buttons&=-5}get commandKey(){const t=this.code,i=this.key;return"cxvyzagCXVYZAG".includes(i)?i.toLowerCase():t==="KeyC"?"c":t==="KeyX"?"x":t==="KeyV"?"v":t==="KeyY"?"y":t==="KeyZ"?"z":t==="KeyA"?"a":t==="KeyG"?"g":t!==""?t:i}}class DiagramEvent{c;Nt;vm;Wm;constructor(){this.c=null,this.Nt="",this.vm=null,this.Wm=null}copy(){const t=new DiagramEvent;return t.c=this.c,t.Nt=this.Nt,t.vm=this.vm,t.Wm=this.Wm,t}toString(){let t="*"+this.name;return this.subject!==null&&(t+=":"+this.subject.toString()),this.parameter!==null&&(t+="("+this.parameter.toString()+")"),t}get diagram(){return this.c}set diagram(t){this.c=t}get name(){return this.Nt}set name(t){this.Nt=t}get subject(){return this.vm}set subject(t){this.vm=t}get parameter(){return this.Wm}set parameter(t){this.Wm=t}}var ChangeType=(w=>(w[w.Transaction=1]="Transaction",w[w.Property=2]="Property",w[w.Insert=3]="Insert",w[w.Remove=4]="Remove",w))(ChangeType||{});class ChangedEvent{Hu;jm;Nn;Ei;c;vu;qc;Hc;vc;Wc;constructor(){this.Hu=2,this.jm="",this.Nn="",this.Ei=null,this.c=null,this.vu=null,this.qc=null,this.Hc=null,this.vc=null,this.Wc=null}static Transaction=1;static Property=2;static Insert=3;static Remove=4;clear(){this.Ei=null,this.c=null,this.vu=null,this.qc=null,this.Hc=null,this.vc=null,this.Wc=null}copy(){const t=new ChangedEvent;t.Hu=this.Hu,t.jm=this.jm,t.Nn=this.Nn,t.Ei=this.Ei,t.c=this.c,t.vu=this.vu;let i=this.qc;return U.st(i)&&U.at(i.copyFrozen)?t.qc=i.copyFrozen():t.qc=i,i=this.Hc,U.st(i)&&U.at(i.copyFrozen)?t.Hc=i.copyFrozen():t.Hc=i,i=this.vc,U.st(i)&&U.at(i.copyFrozen)?t.vc=i.copyFrozen():t.vc=i,i=this.Wc,U.st(i)&&U.at(i.copyFrozen)?t.Wc=i.copyFrozen():t.Wc=i,t}yi(t){t in ChangeType?this.change=t:U.Pr(this,t)}toString(){let t="";return this.change===1?t+="* ":this.change===2?t+=this.model!==null?"!m":"!d":t+=(this.model!==null?"!m":"!d")+this.change,this.propertyName&&typeof this.propertyName=="string"&&(t+=" "+this.propertyName),this.modelChange&&this.modelChange!==this.propertyName&&(t+=" "+this.modelChange),t+=": ",this.change===1?this.oldValue!==null&&(t+=" "+this.oldValue):(this.object!==null&&(t+=U.toString(this.object)),this.oldValue!==null&&(t+="  old: "+U.toString(this.oldValue)),this.oldParam!==null&&(t+=" "+this.oldParam),this.newValue!==null&&(t+="  new: "+U.toString(this.newValue)),this.newParam!==null&&(t+=" "+this.newParam)),t}getValue(t){return t?this.oldValue:this.newValue}getParam(t){return t?this.oldParam:this.newParam}canUndo(){return this.model!==null||this.diagram!==null}undo(){this.canUndo()&&(this.model!==null?this.model.changeState(this,!0):this.diagram!==null&&this.diagram.ET(this,!0))}canRedo(){return this.model!==null||this.diagram!==null}redo(){this.canRedo()&&(this.model!==null?this.model.changeState(this,!1):this.diagram!==null&&this.diagram.ET(this,!1))}get model(){return this.Ei}set model(t){this.Ei=t}get diagram(){return this.c}set diagram(t){this.c=t}get change(){return this.Hu}set change(t){this.Hu=t}get modelChange(){return this.jm}set modelChange(t){Debug&&U.i(t,"string",ChangedEvent,"modelChange"),this.jm=t}get propertyName(){return this.Nn}set propertyName(t){Debug&&typeof t!="string"&&U.C(t,ChangedEvent,"propertyName"),this.Nn=t}get isTransactionFinished(){return this.Hu===1&&(this.Nn==="CommittedTransaction"||this.Nn==="FinishedUndo"||this.Nn==="FinishedRedo")}get object(){return this.vu}set object(t){this.vu=t}get oldValue(){return this.qc}set oldValue(t){this.qc=t}get oldParam(){return this.Hc}set oldParam(t){this.Hc=t}get newValue(){return this.vc}set newValue(t){this.vc=t}get newParam(){return this.Wc}set newParam(t){this.Wc=t}}class Transaction{BT;Nt;lP;constructor(){this.BT=new List().S(),this.Nt="",this.lP=!1}toString(t){let i="Transaction: "+this.name+" "+this.changes.count.toString()+(this.isComplete?"":", incomplete");if(t!==void 0&&t>0){const e=this.changes.count;for(let s=0;s<e;s++){const n=this.changes.elt(s);n!==null&&(i+=`
  `+n.toString())}}return i}clear(){const t=this.changes;t.si();for(let i=t.count-1;i>=0;i--){const e=t.elt(i);e!==null&&e.clear()}t.clear(),t.S()}canUndo(){return this.isComplete}undo(){if(this.canUndo())for(let t=this.changes.count-1;t>=0;t--){const i=this.changes.elt(t);i!==null&&i.undo()}}canRedo(){return this.isComplete}redo(){if(!this.canRedo())return;const t=this.changes.count;for(let i=0;i<t;i++){const e=this.changes.elt(i);e!==null&&e.redo()}}vI(t){const i=this.changes;for(let e=i.count-1;e>=t;e--){const s=i.elt(e);s!==null&&s.undo(),i.si(),i.removeAt(e)}i.S()}WI(t){const i=this.changes;i.si(),i.addAll(t),i.S()}thaw(){this.changes.si()}optimize(){if(!this.isComplete)return;const t=this.changes;t.si();const i=new Map;for(let s=0;s<t.count;s++){const n=t.elt(s);if(n===null||n.change!==2||!n.object)continue;let o=i.get(n.object);o||(o=new Map,i.set(n.object,o));const r=o.get(n.propertyName);r===void 0?o.set(n.propertyName,-1):(r>0&&t.setElt(r,null),o.set(n.propertyName,s))}let e=0;for(let s=0;s<t.count;s++){const n=t.elt(s);n!==null&&(s>e&&t.setElt(e,n),e++)}for(;t.length>e;)t.pop();t.S()}get changes(){return this.BT}get name(){return this.Nt}set name(t){this.Nt=t}get isComplete(){return this.lP}set isComplete(t){this.lP=!!t}}class UndoManager{Ox;Wi;VT;Ds;hP;Jm;vl;Ex;aP;An;jc;Bx;en;Vx;zx;$m;Xx;constructor(t){this.Ox=new GSet,this.Wi=!1,this.VT=new List().S(),this.Ds=-1,this.hP=999,this.en=!1,this.Jm=null,this.vl=0,this.Ex=!1,Debug&&(this.Ex=!0),this.aP=23,this.An=new List().S(),this.jc=new List,this.Bx=!0,this.Vx=!1,this.zx=!1,this.$m=!1,this.Xx=!1,t&&Object.assign(this,t)}toString(t){let i="UndoManager "+this.historyIndex+"<"+this.history.count+"<="+this.maxHistoryLength;i+="[";let e=this.nestedTransactionNames.count;for(let s=0;s<e;s++)s>0&&(i+=" "),i+=this.nestedTransactionNames.elt(s);if(i+="]",t!==void 0&&t>0){e=this.history.count;for(let s=0;s<e;s++)i+=`
 `+this.history.elt(s).toString(t-1)}return i}clear(){const t=this.history;t.si();for(let i=t.count-1;i>=0;i--){const e=t.elt(i);e!==null&&e.clear()}t.clear(),this.Ds=-1,t.S(),this.en=!1,this.Jm=null,this.vl=0,this.An.si(),this.An.clear(),this.An.S(),this.jc.clear(),this.Vx=!1,this.zx=!1,this.$m=!1,this.Xx=!1}copyProperties(t){this.isEnabled=t.isEnabled,this.maxHistoryLength=t.maxHistoryLength,this.checksTransactionLevel=t.checksTransactionLevel}addModel(t){this.Ox.add(t)}removeModel(t){this.Ox.delete(t)}startTransaction(t){if(t===void 0&&(t=""),t===null&&(t=""),this.isUndoingRedoing)return!1;this.Bx===!0&&(this.Bx=!1,this.vl++,this.Wl||this.jl("StartingFirstTransaction",t,this.currentTransaction),this.vl>0&&this.vl--),this.isEnabled&&(this.An.si(),this.An.add(t),this.An.S(),this.currentTransaction===null?this.jc.add(0):this.jc.add(this.currentTransaction.changes.count)),this.vl++;const i=this.transactionLevel===1;return i&&(this.Wl||this.jl("StartedTransaction",t,this.currentTransaction)),i}commitTransaction(t){return t===void 0&&(t=""),this.zT(!0,t)}rollbackTransaction(){return this.zT(!1,"")}zT(t,i){if(this.isUndoingRedoing)return!1;this.checksTransactionLevel&&this.transactionLevel<1&&U.et("Ending transaction without having started a transaction: "+i);const e=this.transactionLevel===1;let s=this.currentTransaction;e&&t&&(this.Wl||this.jl("CommittingTransaction",i,s));let n=0;if(this.transactionLevel>0&&(this.vl--,this.isEnabled)){const o=this.An.count;o>0&&(i===""&&(i=this.An.elt(0)),this.An.si(),this.An.removeAt(o-1),this.An.S());const r=this.jc.count;r>0&&(n=this.jc.elt(r-1),this.jc.removeAt(r-1))}if(e){if(t){if(this.$m=!1,s===null&&i!==""&&(s=this.currentTransaction),this.isEnabled&&s!==null){const o=s;o.isComplete||(o.isComplete=!0,o.name=i),this.discardHistoryAfterIndex();const r=this.history;r.si();const l=this.maxHistoryLength;if(l>=0){if(l===0)r.clear();else if(r.count>=l){const h=r.elt(0);h!==null&&h.clear(),r.removeAt(0),this.Ds--}}l!==0&&(r.count===0||r.get(r.count-1)!==o)&&(r.add(o),this.Ds++),r.S(),s=o}this.Wl||this.jl("CommittedTransaction",i,s)}else{this.en=!0;try{this.isEnabled&&s!==null&&(s.isComplete=!0,s.undo())}finally{this.Wl||this.jl("RolledBackTransaction",i,s),this.en=!1}s!==null&&s.clear()}return this.Jm=null,this.Yx&&this.clear(),this.Yx=!1,this.Kx=!1,!0}else return this.isEnabled&&!t&&s!==null&&s.vI(n),!1}discardHistoryAfterIndex(){if(this.isUndoingRedoing||!this.canRedo())return;const t=this.history;t.si();for(let i=t.count-1;i>this.historyIndex;i--){const e=t.elt(i);e!==null&&e.clear(),t.removeAt(i),this.$m=!0}t.S()}combineTransactions(t){if(this.isUndoingRedoing)return;const i=this.history;if(i.count<2)return;i.si();let e=-1;t?(e=i.indexOf(t),e<0&&U.n("combineTransactions given unknown Transaction: "+t),e++):(t=i.elt(i.count-2),e=i.count-1);const s=i.elt(e);t.WI(s.changes),i.removeAt(e),this.historyIndex>=i.count&&this.Ds--,i.S()}thaw(){this.history.si()}canUndo(){if(!this.isEnabled||this.transactionLevel>0)return!1;const t=this.transactionToUndo;return!!(t!==null&&t.canUndo())}undo(){if(!this.canUndo())return;const t=this.transactionToUndo;if(t!==null)try{this.en=!0,this.jl("StartingUndo","Undo",t),this.Ds--,t.undo()}catch(i){U.et("undo error: "+i.toString())}finally{this.jl("FinishedUndo","Undo",t),this.en=!1}}canRedo(){if(!this.isEnabled||this.transactionLevel>0)return!1;const t=this.transactionToRedo;return!!(t!==null&&t.canRedo())}redo(){if(!this.canRedo())return;const t=this.transactionToRedo;if(t!==null)try{this.en=!0,this.jl("StartingRedo","Redo",t),this.Ds++,t.redo()}catch(i){U.et("redo error: "+i.toString())}finally{this.jl("FinishedRedo","Redo",t),this.en=!1}}jl(t,i,e){const s=new ChangedEvent;s.change=1,s.propertyName=t,s.object=e,s.oldValue=i;const n=this.models;for(;n.next();){const o=n.value;s.model=o,o.jI(s)}}handleChanged(t){if(!this.isEnabled||this.isUndoingRedoing||this.skipsEvent(t))return;let i=this.currentTransaction;i===null&&(i=new Transaction,this.Jm=i);const e=t.copy(),s=i.changes;if(s.si(),s.add(e),s.S(),this.checksTransactionLevel&&this.aP>0&&this.transactionLevel<=0&&!this.Bx){const n=t.diagram;if(n!==null&&n.ga===!1)return;U.et("Change not within a transaction: "+e.toString()),this.aP--}}skipsEvent(t){if(t===null||t.change===1)return!0;const i=t.object;if(i===null)return!1;if(i.layer!==void 0){const e=i.layer;if(e!==null&&e.isTemporary)return!0}else if(i.isTemporary)return!0;return!1}get models(){return this.Ox.iterator}get isEnabled(){return this.Wi}set isEnabled(t){this.Wi=!!t}get transactionToUndo(){return this.historyIndex>=0&&this.historyIndex<=this.history.count-1?this.history.elt(this.historyIndex):null}get transactionToRedo(){return this.historyIndex<this.history.count-1?this.history.elt(this.historyIndex+1):null}get isUndoingRedoing(){return this.en}get history(){return this.VT}get maxHistoryLength(){return this.hP}set maxHistoryLength(t){typeof t!="number"||isNaN(t)||(this.hP=t)}get historyIndex(){return this.Ds}get currentTransaction(){return this.Jm}get transactionLevel(){return this.vl}get isInTransaction(){return this.vl>0}get nestedTransactionNames(){return this.An}get checksTransactionLevel(){return this.Ex}set checksTransactionLevel(t){this.Ex=t}get Yx(){return this.Vx}set Yx(t){this.Vx=t}get Kx(){return this.zx}set Kx(t){this.zx=t}get Wl(){return this.Xx}set Wl(t){this.Xx=t}get isJustDiscarded(){return this.$m}}class Tool{c;Nt;Wi;cP;fP;Zm;XT;constructor(){GSet.se(this),this.c=Diagram.Qm(),this.Nt="",this.Wi=!0,this.cP=!1,this.fP=null,this.XT=new InputEvent,this.Zm=-1}get diagram(){return this.c}set diagram(t){t instanceof Diagram&&(this.c=t)}toString(){return this.name!==""?this.name+" Tool":U.to(this.constructor)}updateAdornments(t){}canStart(){return this.isEnabled}canStartButton(){return this.diagram.lastInput.left}doStart(){}doActivate(){this.isActive=!0}doDeactivate(){this.isActive=!1}doStop(){}doCancel(){this.transactionResult=null,this.stopTool()}stopTool(){const t=this.diagram;t.currentTool===this&&(t.currentTool=null,t.currentCursor="")}doMouseDown(){!this.isActive&&this.canStart()&&this.doActivate()}doMouseMove(){}doMouseUp(){this.stopTool()}doMouseWheel(){}canStartMultiTouch(){return!0}standardPinchZoomStart(){const t=this.diagram,i=t.lastInput,e=i.getMultiTouchViewPoint(0,Point.V(NaN,NaN)),s=i.getMultiTouchViewPoint(1,Point.V(NaN,NaN));if(!e.isReal()||!s.isReal()){Point.o(e),Point.o(s);return}if(this.doCancel(),t.getInputOption("hasGestureZoom")){t.uP=t.scale;const n=s.x-e.x,o=s.y-e.y,r=Math.sqrt(n*n+o*o);t.dP=r,i.bubbles=!1}Point.o(e),Point.o(s)}standardPinchZoomMove(){const t=this.diagram,i=t.lastInput,e=i.getMultiTouchViewPoint(0,Point.V(NaN,NaN)),s=i.getMultiTouchViewPoint(1,Point.V(NaN,NaN));if(!e.isReal()||!s.isReal()){Point.o(e),Point.o(s);return}if(this.doCancel(),t.getInputOption("hasGestureZoom")){const n=s.x-e.x,o=s.y-e.y,l=Math.sqrt(n*n+o*o)/t.dP,h=new Point((Math.min(s.x,e.x)+Math.max(s.x,e.x))/2,(Math.min(s.y,e.y)+Math.max(s.y,e.y))/2),a=t.uP*l,c=t.commandHandler;if(a!==t.scale&&c.canResetZoom(a)){const f=t.zoomPoint;t.zoomPoint=h,c.resetZoom(a),t.zoomPoint=f}i.bubbles=!1}Point.o(e),Point.o(s)}doKeyDown(){this.diagram.lastInput.code==="Escape"&&this.doCancel()}doKeyUp(){}startTransaction(t){return t===void 0&&(t=this.name),this.transactionResult=null,this.diagram.startTransaction(t)}stopTransaction(){const t=this.diagram;return this.transactionResult===null?t.rollbackTransaction():t.commitTransaction(this.transactionResult)}standardMouseSelect(){const t=this.diagram;if(!t.allowSelect)return;const i=t.lastInput,e=t.findPartAt(i.documentPoint,!1);if(e!==null){if(U.zo?i.meta:i.control){t.O("ChangingSelection",t.selection);let s=e;for(;s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&(s.isSelected=!s.isSelected),t.O("ChangedSelection",t.selection)}else if(i.shift){if(!e.isSelected){t.O("ChangingSelection",t.selection);let s=e;for(;s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&(s.isSelected=!0),t.O("ChangedSelection",t.selection)}}else if(!e.isSelected){let s=e;for(;s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&t.select(s)}}else this.canStartButton()&&!(U.zo?i.meta:i.control)&&!i.shift&&t.clearSelection()}standardMouseClick(t,i){t===void 0&&(t=null),i===void 0&&(i=o=>!o.layer?.isTemporary);const e=this.diagram,s=e.lastInput,n=e.findObjectAt(s.documentPoint,t,i);return s.targetObject=n,this.YT(n,s,e)}YT(t,i,e){if(i.handled=!1,t!==null&&!t.isEnabledObject())return!1;let s=0;i.left?i.clickCount===1?s=1:i.clickCount===2?s=2:s=1:i.right&&i.clickCount===1&&(s=3);let n="ObjectSingleClicked";if(t!==null){switch(s){case 1:n="ObjectSingleClicked";break;case 2:n="ObjectDoubleClicked";break;case 3:n="ObjectContextClicked";break}s!==0&&e.O(n,t)}else{switch(s){case 1:n="BackgroundSingleClicked";break;case 2:n="BackgroundDoubleClicked";break;case 3:n="BackgroundContextClicked";break}s!==0&&e.O(n)}if(t!==null)for(;t!==null;){let o=null;switch(s){case 1:o=t.click;break;case 2:o=t.doubleClick?t.doubleClick:t.click;break;case 3:o=t.contextClick;break}if(o!==null&&(o(i,t),i.handled))break;t=t.panel}else{let o=null;switch(s){case 1:o=e.click;break;case 2:o=e.doubleClick?e.doubleClick:e.click;break;case 3:o=e.contextClick;break}o!==null&&o(i)}return i.handled}standardMouseOver(){const t=this.diagram,i=t.lastInput;if(t.animationManager.Li===!0)return;const e=t.skipsUndoManager;t.skipsUndoManager=!0;let s=t.viewportBounds.containsPoint(i.documentPoint)?t.findObjectAt(i.documentPoint,null,null):null;i.event&&(i.event.type==="pointercancel"||i.event.type==="pointerout")&&(s=null),i.targetObject=s;let n=!1;if(s!==t.Jc){let o=t.Jc;const r=o;for(t.Jc=s,this.KT(o,s),i.handled=!1;o!==null;){const l=o.mouseLeave;if(l!==null&&(s===o||s!==null&&s.isContainedBy(o)||(l(i,o,s),n=!0,i.handled)))break;o=o.panel}for(o=r,i.handled=!1;s!==null;){const l=s.mouseEnter;if(l!==null&&(o===s||o!==null&&o.isContainedBy(s)||(l(i,s,o),n=!0,i.handled)))break;s=s.panel}s=t.Jc}if(s!==null){let o=s,r="";for(;o!==null&&(r=o.cursor,r==="");)o=o.panel;for(t.currentCursor=r,i.handled=!1,o=s;o!==null;){const l=o.mouseOver;if(l!==null&&(l(i,o),n=!0,i.handled))break;o=o.panel}}else{this.doUpdateCursor(null);const o=t.mouseOver;o!==null&&(o(i),n=!0)}n&&t.requestUpdate(),t.skipsUndoManager=e}doUpdateCursor(t){const i=this.diagram;i&&(i.currentCursor="")}KT(t,i){}standardMouseWheel(){const t=this.diagram,i=t.lastInput;let e=i.delta;if(e===0||!t.documentBounds.isReal())return;const s=t.commandHandler,n=t.toolManager.mouseWheelBehavior;if(s!==null&&(n===2&&!i.shift||n===1&&i.control)){if(e>0?s.canIncreaseZoom():s.canDecreaseZoom()){const o=t.zoomPoint;t.zoomPoint=i.viewPoint,e>0?s.increaseZoom():s.decreaseZoom(),t.zoomPoint=o}i.bubbles=!1}else if(n===2&&i.shift||n===1&&!i.control){const o=t.position.copy(),r=i.event,l=r.deltaMode;let h=r.deltaX,a=r.deltaY,c="pixel";if((h!==0||a!==0)&&!i.shift){switch(l){case 0:c="pixel";break;case 1:c="line";break;case 2:c="page";break}if(h!==0&&t.allowHorizontalScroll){const f=t.scrollHorizontalLineChange;h=h*(f/16),t.scroll(c,h>0?"right":"left",Math.abs(h))}if(a!==0&&t.allowVerticalScroll){const f=t.scrollVerticalLineChange;a=a*(f/16),t.scroll(c,a>0?"down":"up",Math.abs(a))}}else!i.shift&&t.allowVerticalScroll?(e=e*3*t.scrollVerticalLineChange,t.scroll(c,e>0?"up":"down",Math.abs(e))):i.shift&&t.allowHorizontalScroll&&(e=e*3*t.scrollHorizontalLineChange,t.scroll(c,e>0?"left":"right",Math.abs(e)));this.doWheelChange(t,o,i)}}doWheelChange(t,i,e){(!t.position.equals(i)||e.event.wheelDeltaX!==0)&&(e.bubbles=!1)}standardWaitAfter(t,i){Debug&&U.i(t,"number",Tool,"standardWaitAfter:delay"),i===void 0&&(i=this.diagram.lastInput),this.cancelWaitAfter();const e=this,s=i.clone(this.XT);this.Zm=U.Sn(()=>e.doWaitAfter(s),t)}cancelWaitAfter(){this.Zm!==-1&&U.Vc(this.Zm),this.Zm=-1}doWaitAfter(t){}findToolHandleAt(t,i){const s=this.diagram.findObjectAt(t,n=>{for(;n!==null&&!(n.panel instanceof Adornment);)n=n.panel;return n});return s===null?null:s.part.category===i?s:null}isBeyondDragSize(t,i){const e=this.diagram;t===void 0&&(t=e.firstInput.viewPoint),i===void 0&&(i=e.lastInput.viewPoint);const s=e.toolManager.dragSize;let n=s.width,o=s.height;return e.firstInput.isTouchEvent&&(n+=6,o+=6),Math.abs(i.x-t.x)>n||Math.abs(i.y-t.y)>o}get name(){return this.Nt}set name(t){U.i(t,"string",Tool,"name"),this.Nt=t}get isEnabled(){return this.Wi}set isEnabled(t){U.i(t,"boolean",Tool,"isEnabled"),this.Wi=t}get isActive(){return this.cP}set isActive(t){U.i(t,"boolean",Tool,"isActive"),this.cP=t}get transactionResult(){return this.fP}set transactionResult(t){t!==null&&U.i(t,"string",Tool,"transactionResult"),this.fP=t}}var WheelMode=(w=>(w[w.Scroll=1]="Scroll",w[w.Zoom=2]="Zoom",w[w.None=3]="None",w))(WheelMode||{}),GestureMode=(w=>(w[w.Zoom=1]="Zoom",w[w.Cancel=2]="Cancel",w[w.None=3]="None",w))(GestureMode||{});class ToolManager extends Tool{UT;GT;qT;gP;mP;pP;yP;wP;xP;bP;_m;ma;constructor(t){super(),this.name="ToolManager",this.UT=new List,this.GT=new List,this.qT=new List,this.gP=850,this.mP=850,this.pP=new Size(2,2).Ct(),this.yP=5e3,this.wP=1,this.xP=1,this.bP=null,this._m=null,this.ma=-1,t&&Object.assign(this,t)}static WheelScroll=1;static WheelZoom=2;static WheelNone=3;static GestureZoom=1;static GestureCancel=2;static GestureNone=3;get mouseWheelBehavior(){return this.wP}set mouseWheelBehavior(t){U.j(t,WheelMode,"WheelMode"),this.wP=t}get gestureBehavior(){return this.xP}set gestureBehavior(t){if(U.j(t,GestureMode,"GestureMode"),this.diagram&&this.diagram.ht){const i=this.diagram.ht;t===1?i.St.style.touchAction="none":t===3?i.St.style.touchAction="pinch-zoom":t===2&&(i.St.style.touchAction="none")}this.xP=t}initializeStandardTools(){return this}updateAdornments(t){const i=this.currentToolTip;if(i instanceof Adornment&&this._m===t){const e=i.adornedObject;(t!==null?e!==null&&e.part===t:e===null)?this.showToolTip(i,e):this.hideToolTip()}}doMouseDown(){const t=this.diagram,i=t.lastInput;if(i.isTouchEvent&&this.gestureBehavior===2&&(i.bubbles=!1),i.isMultiTouch){if(this.cancelWaitAfter(),this.gestureBehavior===3){i.bubbles=!0;return}if(this.gestureBehavior===2)return}const e=t.undoManager;Debug&&e.checksTransactionLevel&&e.transactionLevel!==0&&U.et("WARNING: In ToolManager.doMouseDown: UndoManager.transactionLevel is not zero");const s=this.mouseDownTools.length;for(let n=0;n<s;n++){const o=this.mouseDownTools.elt(n);if(o.diagram=this.diagram,o.canStart()){t.doFocus(),t.currentTool=o,t.currentTool===o&&(o.isActive||o.doActivate(),o.doMouseDown());return}}t.lastInput.button===1&&(this.mouseWheelBehavior===1?this.mouseWheelBehavior=2:this.mouseWheelBehavior===2&&(this.mouseWheelBehavior=1)),this.doActivate(),this.standardWaitAfter(this.holdDelay,i)}doMouseMove(){const t=this.diagram,i=t.lastInput;if(i.isMultiTouch){if(this.gestureBehavior===3){i.bubbles=!0;return}if(this.gestureBehavior===2)return}if(this.isActive){const s=this.mouseMoveTools.length;for(let n=0;n<s;n++){const o=this.mouseMoveTools.elt(n);if(o.diagram=this.diagram,o.canStart()){t.doFocus(),t.currentTool=o,t.currentTool===o&&(o.isActive||o.doActivate(),o.doMouseMove());return}}}this.HT(t);const e=i.event;e!==null&&(e.type==="pointermove"||!e.cancelable)&&(i.bubbles=!0)}HT(t){this.standardMouseOver(),this.isBeyondDragSize()&&this.standardWaitAfter(this.isActive?this.holdDelay:this.hoverDelay,t.lastInput)}KT(t,i){const e=this.currentToolTip;e!==null&&(i!==null&&e instanceof Adornment&&(i===e||i.isContainedBy(e))||this.hideToolTip())}doWaitAfter(t){const i=this.diagram;if(!i.JI())return;const e=i.lastInput;if(i.lastInput=t,this.doMouseHover(),this.isActive||this.doToolTip(),t.isTouchEvent&&!i.lastInput.handled){const s=t.copy();s.button=2,i.lastInput=s,i.Ux=!0,i.doMouseUp()}i.lastInput=e}doMouseHover(){const t=this.diagram,i=t.lastInput;i.targetObject===null&&(i.targetObject=t.findObjectAt(i.documentPoint,null,null));let e=i.targetObject;if(e!==null)for(i.handled=!1;e!==null;){const s=this.isActive?e.mouseHold:e.mouseHover;if(s!==null&&(s(i,e),i.handled))break;e=e.panel}else{const s=this.isActive?t.mouseHold:t.mouseHover;s!==null&&s(i)}}doToolTip(){const t=this.diagram,i=t.lastInput;i.targetObject===null&&(i.targetObject=t.findObjectAt(i.documentPoint,null,null));let e=i.targetObject;if(e!==null){const s=this.currentToolTip;if(s instanceof Adornment&&(e===s||e.isContainedBy(s)))return;for(;e!==null;){const n=e.toolTip;if(n!==null){this.showToolTip(n,e);return}e=e.panel}this.hideToolTip()}else{const s=t.toolTip;s!==null?this.showToolTip(s,null):this.hideToolTip()}}showToolTip(t,i){Debug&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("showToolTip:tooltip must be an Adornment or HTMLInfo."),i!==null&&U.s(i,GraphObject,ToolManager,"showToolTip:obj");const e=this.diagram;if(t!==this.currentToolTip&&this.hideToolTip(),t instanceof Adornment){t.layerName="Tool",t.selectable=!1,t.scale=1/e.scale,t.category="ToolTip",t.hasPlaceholder()&&(t.placeholder.scale=e.scale);const s=t.diagram;s!==null&&s!==e&&s.remove(t),e.add(t),i!==null?t.adornedObject=i:t.data=e.model,t.ensureBounds(),this.positionToolTip(t,i)}else t instanceof HTMLInfo&&t!==this.currentToolTip&&t.show!==null&&t.show(i,e,this);this.currentToolTip=t,this.extendToolTip(this.toolTipDuration)}positionToolTip(t,i){if(t.hasPlaceholder())return;const e=t,s=this.diagram,n=s.lastInput.documentPoint.copy(),o=e.measuredBounds,r=s.viewportBounds;s.lastInput.isTouchEvent&&(n.x-=o.width),n.x+o.width>r.right&&(n.x-=o.width+5/s.scale),n.x<r.x&&(n.x=r.x),n.y+20/s.scale+o.height>r.bottom?n.y-=o.height+5/s.scale:n.y+=20/s.scale,n.y<r.y&&(n.y=r.y),e.position=n}extendToolTip(t){t===void 0&&(t=3e3),this.currentToolTip!==null&&(this.ma!==-1&&(U.Vc(this.ma),this.ma=-1),t>0&&t!==1/0&&(this.ma=U.Sn(()=>this.hideToolTip(),t)))}hideToolTip(){this.ma!==-1&&(U.Vc(this.ma),this.ma=-1);const t=this.diagram,i=this.currentToolTip;i!==null&&(i instanceof Adornment?(t.remove(i),this._m!==null&&this._m.removeAdornment(i.category),i.data=null,i.adornedObject=null):i instanceof HTMLInfo&&i.hide!==null&&i.hide(t,this),this.currentToolTip=null)}get currentToolTip(){return this.bP}set currentToolTip(t){Debug&&t!==null&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("ToolManager.currentToolTip must be an Adornment or HTMLInfo."),this.bP=t,this._m=t!==null&&t instanceof Adornment?t.adornedPart:null}doMouseUp(){this.cancelWaitAfter();const t=this.diagram;if(this.isActive){const i=this.mouseUpTools.length;for(let e=0;e<i;e++){const s=this.mouseUpTools.elt(e);if(s.diagram=this.diagram,s.canStart()){t.doFocus(),t.currentTool=s,t.currentTool===s&&(s.isActive||s.doActivate(),s.doMouseUp());return}}}t.doFocus(),this.doDeactivate()}doMouseWheel(){this.standardMouseWheel()}doKeyDown(){const t=this.diagram;t.commandHandler!==null&&t.commandHandler.doKeyDown()}doKeyUp(){const t=this.diagram;t.commandHandler!==null&&t.commandHandler.doKeyUp()}findTool(t){U.i(t,"string",ToolManager,"findTool:name");let i=this.mouseDownTools.length;for(let e=0;e<i;e++){const s=this.mouseDownTools.elt(e);if(s.name===t)return s}i=this.mouseMoveTools.length;for(let e=0;e<i;e++){const s=this.mouseMoveTools.elt(e);if(s.name===t)return s}i=this.mouseUpTools.length;for(let e=0;e<i;e++){const s=this.mouseUpTools.elt(e);if(s.name===t)return s}return null}replaceTool(t,i){U.i(t,"string",ToolManager,"replaceTool:name"),i!==null&&(U.s(i,Tool,ToolManager,"replaceTool:newtool"),i.diagram=this.diagram);let e=this.mouseDownTools.length;for(let s=0;s<e;s++){const n=this.mouseDownTools.elt(s);if(n.name===t)return i!==null?this.mouseDownTools.setElt(s,i):this.mouseDownTools.removeAt(s),n}e=this.mouseMoveTools.length;for(let s=0;s<e;s++){const n=this.mouseMoveTools.elt(s);if(n.name===t)return i!==null?this.mouseMoveTools.setElt(s,i):this.mouseMoveTools.removeAt(s),n}e=this.mouseUpTools.length;for(let s=0;s<e;s++){const n=this.mouseUpTools.elt(s);if(n.name===t)return i!==null?this.mouseUpTools.setElt(s,i):this.mouseUpTools.removeAt(s),n}return null}replaceStandardTool(t,i,e){this.ni(t,i,e)}ni(t,i,e){U.i(t,"string",ToolManager,"replaceStandardTool:name"),U.s(e,List,ToolManager,"replaceStandardTool:list"),i!==null&&(U.s(i,Tool,ToolManager,"replaceStandardTool:newtool"),i.name=t,i.diagram=this.diagram),this.findTool(t)?this.replaceTool(t,i):i!==null&&e.add(i)}get mouseDownTools(){return this.UT}get mouseMoveTools(){return this.GT}get mouseUpTools(){return this.qT}get hoverDelay(){return this.gP}set hoverDelay(t){U.i(t,"number",ToolManager,"hoverDelay"),this.gP=t}get holdDelay(){return this.mP}set holdDelay(t){U.i(t,"number",ToolManager,"holdDelay"),this.mP=t}get dragSize(){return this.pP}set dragSize(t){U.s(t,Size,ToolManager,"dragSize"),this.pP=t.T()}get toolTipDuration(){return this.yP}set toolTipDuration(t){U.i(t,"number",ToolManager,"toolTipDuration"),this.yP=t}get actionTool(){return this.findTool("Action")}set actionTool(t){this.ni("Action",t,this.mouseDownTools)}get relinkingTool(){return this.findTool("Relinking")}set relinkingTool(t){this.ni("Relinking",t,this.mouseDownTools)}get linkReshapingTool(){return this.findTool("LinkReshaping")}set linkReshapingTool(t){this.ni("LinkReshaping",t,this.mouseDownTools)}get resizingTool(){return this.findTool("Resizing")}set resizingTool(t){this.ni("Resizing",t,this.mouseDownTools)}get rotatingTool(){return this.findTool("Rotating")}set rotatingTool(t){this.ni("Rotating",t,this.mouseDownTools)}get linkingTool(){return this.findTool("Linking")}set linkingTool(t){this.ni("Linking",t,this.mouseMoveTools)}get draggingTool(){return this.findTool("Dragging")}set draggingTool(t){this.ni("Dragging",t,this.mouseMoveTools)}get dragSelectingTool(){return this.findTool("DragSelecting")}set dragSelectingTool(t){this.ni("DragSelecting",t,this.mouseMoveTools)}get panningTool(){return this.findTool("Panning")}set panningTool(t){this.ni("Panning",t,this.mouseMoveTools)}get contextMenuTool(){return this.findTool("ContextMenu")}set contextMenuTool(t){this.ni("ContextMenu",t,this.mouseUpTools)}get textEditingTool(){return this.findTool("TextEditing")}set textEditingTool(t){this.ni("TextEditing",t,this.mouseUpTools)}get clickCreatingTool(){return this.findTool("ClickCreating")}set clickCreatingTool(t){this.ni("ClickCreating",t,this.mouseUpTools)}get clickSelectingTool(){return this.findTool("ClickSelecting")}set clickSelectingTool(t){this.ni("ClickSelecting",t,this.mouseUpTools)}}class DraggingTool extends Tool{SP;kP;Tn;PP;MP;CP;NP;$c;t0;AP;pa;Rr;vT;TP;Wu;ju;LP;DP;FP;RP;static Gx=new List;static di=null;static ya=null;constructor(t){super(),this.name="Dragging",this.SP=!0,this.RP=!0,this.kP=!0,this.Tn=null,this.PP=null,this.MP=null,this.CP=null,this.NP=!1,this.Wu=!1,this.$c=new Point(NaN,NaN),this.t0=new Point,this.AP=!0,this.pa=100,this.Rr=[],this.vT=new GSet().S(),this.TP=new DraggingOptions,this.ju=null,this.LP="copy",this.DP="",this.FP="no-drop",t&&Object.assign(this,t)}get isCopyEnabled(){return this.SP}set isCopyEnabled(t){U.i(t,"boolean",DraggingTool,"isCopyEnabled"),this.SP=t}get copiesEffectiveCollection(){return this.kP}set copiesEffectiveCollection(t){U.i(t,"boolean",DraggingTool,"copiesEffectiveCollection"),this.kP=t}get dragOptions(){return this.TP}set dragOptions(t){U.s(t,DraggingOptions,DraggingTool,"dragOptions"),this.TP=t}get isGridSnapEnabled(){return this.dragOptions.isGridSnapEnabled}set isGridSnapEnabled(t){U.i(t,"boolean",DraggingTool,"isGridSnapEnabled"),this.dragOptions.isGridSnapEnabled=t}get isComplexRoutingRealtime(){return this.AP}set isComplexRoutingRealtime(t){this.AP=t;const i=this.diagram.findRouter("AvoidsLinks");i!==null&&(i.isRealtime=t)}get isGridSnapRealtime(){return this.dragOptions.isGridSnapRealtime}set isGridSnapRealtime(t){U.i(t,"boolean",DraggingTool,"isGridSnapRealtime"),this.dragOptions.isGridSnapRealtime=t}get gridSnapCellSize(){return this.dragOptions.gridSnapCellSize}set gridSnapCellSize(t){U.s(t,Size,DraggingTool,"gridSnapCellSize"),this.dragOptions.gridSnapCellSize.equals(t)||(t=t.T(),this.dragOptions.gridSnapCellSize=t)}get gridSnapCellSpot(){return this.dragOptions.gridSnapCellSpot}set gridSnapCellSpot(t){U.s(t,Spot,DraggingTool,"gridSnapCellSpot"),this.dragOptions.gridSnapCellSpot.equals(t)||(t=t.T(),this.dragOptions.gridSnapCellSpot=t)}get gridSnapOrigin(){return this.dragOptions.gridSnapOrigin}set gridSnapOrigin(t){U.s(t,Point,DraggingTool,"gridSnapOrigin"),this.dragOptions.gridSnapOrigin.equals(t)||(t=t.T(),this.dragOptions.gridSnapOrigin=t)}get dragsLink(){return this.dragOptions.dragsLink}set dragsLink(t){U.i(t,"boolean",DraggingTool,"dragsLink"),this.dragOptions.dragsLink=t}get dragsTree(){return this.dragOptions.dragsTree}set dragsTree(t){U.i(t,"boolean",DraggingTool,"dragsTree"),this.dragOptions.dragsTree=t}get copyCursor(){return this.LP}set copyCursor(t){this.LP=t}get moveCursor(){return this.DP}set moveCursor(t){this.DP=t}get nodropCursor(){return this.FP}set nodropCursor(t){this.FP=t}get currentPart(){return this.PP}set currentPart(t){t!==null&&U.s(t,Part,DraggingTool,"currentPart"),this.PP=t}get copiedParts(){return this.CP}set copiedParts(t){this.CP=t}get draggedParts(){return this.MP}set draggedParts(t){this.MP=t}get draggingParts(){return this.copiedParts!==null?this.copiedParts.toKeySet():this.draggedParts!==null?this.draggedParts.toKeySet():this.vT}get draggedLink(){return this.diagram.draggedLink}set draggedLink(t){t!==null&&U.s(t,Link,DraggingTool,"draggedLink"),this.diagram.draggedLink=t}get isDragOutStarted(){return this.NP}set isDragOutStarted(t){this.NP=t}get startPoint(){return this.t0}set startPoint(t){U.s(t,Point,DraggingTool,"startPoint"),this.t0.equals(t)||this.t0.f(t)}get delay(){return this.pa}set delay(t){U.i(t,"number",DraggingTool,"delay"),this.pa=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(t===null||t.isReadOnly&&!t.allowDragOut||!t.allowMove&&!t.allowCopy&&!t.allowDragOut||!t.allowSelect||!this.canStartButton())return!1;if(t.currentTool!==this){if(!this.isBeyondDragSize())return!1;const e=t.lastInput;if(e.isTouchEvent&&e.timestamp-t.firstInput.timestamp<this.pa)return!1}return this.findDraggablePart()!==null}findDraggablePart(){const t=this.diagram;let i=t.findPartAt(t.firstInput.documentPoint,!1);if(i===null)return null;for(;i!==null&&!i.canSelect();)i=i.containingGroup;return i!==null&&(i.canMove()||i.canCopy())?i:null}standardMouseSelect(){const t=this.diagram;if(!t.allowSelect)return;let i=t.findPartAt(t.firstInput.documentPoint,!1);if(i!==null){for(;i!==null&&!i.canSelect();)i=i.containingGroup;if(this.currentPart=i,this.currentPart!==null&&!this.currentPart.isSelected){t.O("ChangingSelection",t.selection);const e=t.lastInput;!(U.zo?e.meta:e.control)&&!e.shift&&t.clearSelection(!0),this.currentPart.isSelected=!0,t.O("ChangedSelection",t.selection)}}}doActivate(){const t=this.diagram;this.ju=null,this.currentPart===null&&this.standardMouseSelect();const i=this.currentPart;if(i===null||!i.canMove()&&!i.canCopy())return;t.cacheGroupExternalLinks(!0),DraggingTool.di=null,this.isActive=!0,this.$c.set(t.position),this.IP(t.selection),this.Rr.length=0,t.animationManager.stopAnimation();const e=this.computeEffectiveCollection(t.selection,this.dragOptions);this.draggedParts=e,this.RP=!!this.diagram.layout.isRealtime,this.diagram.layout.isRealtime=!1,t.Ju=!0,t.WT(this.draggedParts),t.$u=!0,this.startTransaction("Drag"),this.startPoint=t.firstInput.documentPoint,t.isMouseCaptured=!0,t.allowDragOut&&this.$I()}IP(t){if(!this.dragsLink)return;const i=this.diagram,e=i.model.OP(),s=t.first();e&&t.count===1&&s instanceof Link&&this.mayDragLink(s)?(this.draggedLink=s,this.draggedLink.canRelinkFrom()&&this.draggedLink.canRelinkTo()&&this.draggedLink.clearAdornments(),this.Tn=i.toolManager.findTool("Relinking"),this.Tn===null&&(this.Tn=new RelinkingTool,this.Tn.diagram=i),this.Tn.originalLink=this.draggedLink):(this.draggedLink=null,this.Tn=null)}mayDragLink(t){const i=this.diagram;return i!==null&&i.allowRelink}computeEffectiveCollection(t,i){return this.diagram.commandHandler.computeEffectiveCollection(t,i)}sn(t){return t===void 0?new DraggingInfo(Point.kn):this.isGridSnapEnabled?new DraggingInfo(new Point(Math.round(t.x*1e3)/1e3,Math.round(t.y*1e3)/1e3)):new DraggingInfo(t.copy())}doDeactivate(){this.isActive=!1;const t=this.diagram;this.diagram.layout.isRealtime=this.RP,t.$u=!1,t.Jl=!0,t.cacheGroupExternalLinks(!1),t.stopAutoScroll(),this.EP(),t.BP(this.draggedParts),this.ju=null,this.currentPart=null,this.draggedParts=null,this.isDragOutStarted=!1,this.Wu=!1,DraggingTool.ZI(),this.jT(),this.$c.e(NaN,NaN),DraggingTool.ya!==null&&(DraggingTool.ya.currentCursor=""),DraggingTool.ya=null,DraggingTool.di=null,this.$l(),t.isMouseCaptured=!1,t.currentCursor="",t.Ju=!1,this.stopTransaction()}stopTransaction(){const t=this.diagram,i=super.stopTransaction();return i&&t.undoManager.transactionToUndo!==null&&t.undoManager.transactionToUndo.optimize(),i}EP(){const t=this.diagram,i=t.skipsUndoManager;t.skipsUndoManager=!0;const e=t.lastInput;this.JT(e,null),t.skipsUndoManager=i,this.Rr.length=0}$T(){this.$l(),this.VP();const t=this.diagram;this.$c.isReal()&&(t.position=this.$c),t.stopAutoScroll()}doCancel(){this.$l(),this.VP();const t=this.diagram;this.$c.isReal()&&(t.position=this.$c),this.stopTool()}doKeyDown(){const t=this.diagram;if(!this.isActive)return;const i=t.lastInput,e=t.previousInput;i.code==="Escape"?this.doCancel():(i.code!==e.code||i.modifiers!==e.modifiers)&&this.doMouseMove()}doKeyUp(){this.isActive&&this.doMouseMove()}QI(t,i){let e=1/0,s=1/0,n=-1/0,o=-1/0;const r=t.iterator;for(;r.next();){const l=r.value;if(!l.isVisible())continue;const h=l.location,a=h.x,c=h.y;isNaN(a)||isNaN(c)||(a<e&&(e=a),c<s&&(s=c),a>n&&(n=a),c>o&&(o=c))}return e===1/0?i.e(0,0,0,0):i.e(e,s,n-e,o-s),i}zP(t){if(this.copiedParts!==null)return;const i=this.diagram;if(t&&(i.isReadOnly||i.isModelReadOnly)||this.draggedParts===null)return;const e=i.undoManager;e.isEnabled&&e.isInTransaction?e.currentTransaction!==null&&e.currentTransaction.changes.count>0&&(i.undoManager.rollbackTransaction(),i.startTransaction("Drag")):this.VP(),i.skipsUndoManager=!t,i.partManager.addsToTemporaryLayer=!t,this.startPoint=i.firstInput.documentPoint;const s=this.copiesEffectiveCollection?this.draggedParts.toKeySet():i.selection,n=i.copyParts(s,i,!0);i.commandHandler.Zc(n);const o=new GMap,r=this.draggedParts.iterator;for(;r.next();){const h=r.key;if(h.ze()&&h.canCopy()){const a=n.get(h);if(a===null)continue;a.location=h.location,a.ensureBounds(),o.set(a,this.sn(a.location))}}const l=n.iterator;for(;l.next();){const h=l.value;h instanceof Link&&h.canCopy()&&o.set(h,this.sn())}if(this.copiedParts=o,this.IP(o.toKeySet()),this.draggedLink!==null){const h=this.draggedLink,a=h.routeBounds;h.Ir(this.startPoint.x-(a.x+a.width/2),this.startPoint.y-(a.y+a.height/2))}this.doUpdateCursor(null)}$l(){const t=this.diagram;if(this.copiedParts!==null){if(t.removeParts(this.copiedParts.toKeySet(),!1),this.copiedParts=null,this.draggedParts!==null){const i=this.draggedParts.iterator;for(;i.next();)if(i.key instanceof Link){const s=i.value;s.point=new Point(0,0)}}this.doUpdateCursor(null)}t.skipsUndoManager=!1,t.partManager.addsToTemporaryLayer=!1,this.startPoint=t.firstInput.documentPoint}jT(){this.draggedLink!==null&&(this.dragsLink&&this.Tn!==null&&(this.Tn.stopDraggingMouseMove(),this.Tn.originalLink=null),this.draggedLink=null,this.Tn=null)}Qc(t,i){if(t===null)return;const e=this.diagram,s=this.startPoint,n=Point.a();n.f(e.lastInput.documentPoint),this.moveParts(t,n.subtract(s),i),Point.o(n)}moveParts(t,i,e){e===void 0&&(e=!1);const s=this.diagram;s!==null&&s.qx(t,i,this.dragOptions,e)}VP(){if(this.draggedParts===null)return;const t=this.diagram;let i=this.draggedParts.iterator;for(;i.next();){const e=i.key;e.ze()&&(e.location=i.value.point)}for(i=this.draggedParts.iterator;i.next();){const e=i.key;if(e instanceof Link&&e.suspendsRouting){const s=i.value.point;this.draggedParts.set(e,this.sn()),e.Ir(-s.x,-s.y)}}t.maybeUpdate()}_I(t){if(t===null)return!0;const i=t.part;return!!(i===null||i instanceof Adornment||i.layer?.isTemporary||this.draggedParts&&this.draggedParts.has(i)||this.copiedParts&&this.copiedParts.has(i))}XP(t){const i=this.diagram;this.dragsLink&&(this.draggedLink!==null&&(this.draggedLink.fromNode=null,this.draggedLink.toNode=null),this.ZT(!1));const e=this.findDragOverObject(t),s=i.lastInput;s.targetObject=e,this.doUpdateCursor(e);const n=i.skipsUndoManager;let o=!1;try{if(i.skipsUndoManager=!0,o=this.JT(s,e),!this.isActive&&DraggingTool.di===null)return;const r=e!==null?e.part:null;if(r===null||i.handlesDragDropForTopLevelParts&&r.isTopLevel&&!(r instanceof Group)){const l=i.mouseDragOver;l!==null&&(l(s),o=!0)}if(!this.isActive&&DraggingTool.di===null||(this.doDragOver(t,e),!this.isActive&&DraggingTool.di===null))return}finally{i.skipsUndoManager=n,o&&i.maybeUpdate()}this.ju=e,!i.isReadOnly&&(i.allowMove||i.allowCopy)&&(i.allowHorizontalScroll||i.allowVerticalScroll)&&i.doAutoScroll(s.viewPoint)}findDragOverObject(t){return this.diagram.YP(t,null,i=>!this._I(i))}doUpdateCursor(t){const i=this.diagram;(t===null||this.ju!==t)&&(!this.diagram.currentTool.isActive||this.mayCopy()?i.currentCursor=this.copyCursor:this.mayMove()?i.currentCursor=this.moveCursor:this.mayDragOut()&&(i.currentCursor=this.nodropCursor))}JT(t,i){let e=!1,s=this.Rr.length;const n=s>0?this.Rr[0]:null;if(i===n)return!1;t.handled=!1;for(let r=0;r<s;r++){const l=this.Rr[r],h=l.mouseDragLeave;if(h!==null&&(h(t,l,i),e=!0,t.handled))break}if(this.Rr.length=0,!this.isActive&&DraggingTool.di===null||i===null)return e;t.handled=!1;let o=i;for(;o!==null;)this.Rr.push(o),o=this.QT(o);s=this.Rr.length;for(let r=0;r<s;r++){const l=this.Rr[r],h=l.mouseDragEnter;if(h!==null&&(h(t,l,n),e=!0,t.handled))break}return e}cV(t,i){return t===null?!1:!!(t===i||t.isContainedBy(i)||i instanceof Group&&!(t instanceof Group)&&i.handlesDragDropForMembers&&t.part?.isMemberOf(i))}QT(t){const i=t.panel;if(i!==null)return i;if(t instanceof Part&&!(t instanceof Group)){const e=t.containingGroup;if(e!==null&&e.handlesDragDropForMembers)return e}return null}_T(t,i){const e=this.diagram,s=this.Tn;if(s===null)return null;const n=s.portGravity,o=e.findObjectsNear(t,n,a=>s.findValidLinkablePort(a,i)),r=Point.a();let l=1/0,h=null;for(const a=o.iterator;a.next();){const c=a.value;if(c.part===null)continue;const u=c.getDocumentPoint(Spot.Center,r),d=t.distanceSquaredPoint(u);d<l&&(h=c,l=d)}return Point.o(r),h}ZT(t){const i=this.draggedLink;if(i!==null){if(i.pointsCount<2)return;const e=this.diagram;if(e.isReadOnly)return;const s=this.Tn;if(s===null)return;let n=null,o=null;i.fromNode===null&&(n=this._T(i.getPoint(0),!1),n!==null&&(o=n.part));let r=null,l=null;i.toNode===null&&(r=this._T(i.getPoint(i.pointsCount-1),!0),r!==null&&(l=r.part)),s.isValidLink(o,n,l,r)?t?(i.defaultFromPoint=i.getPoint(0),i.defaultToPoint=i.getPoint(i.pointsCount-1),i.suspendsRouting=!1,i.fromNode=o,n!==null&&(i.fromPortId=n.portId),i.toNode=l,r!==null&&(i.toPortId=r.portId),i.fromPort!==e.KP&&e.O("LinkRelinked",i,e.KP),i.toPort!==e.UP&&e.O("LinkRelinked",i,e.UP)):s.doDraggingMouseMove(o,n,l,r):s.doDraggingMouseMove(null,null,null,null)}}doDragOver(t,i){}tL(t){const i=this.diagram;this.dragsLink&&this.ZT(!0),this.EP();const e=this.findDragOverObject(t),s=i.lastInput;if(s.targetObject=e,e!==null){s.handled=!1;let l=e;for(;l!==null;){const h=l.mouseDrop;if(h!==null&&(h(s,l),s.handled))break;this.tO(s,l),l=this.QT(l)}}else{const l=i.mouseDrop;l!==null&&l(s)}if(!this.isActive&&DraggingTool.di===null)return;const n=this.copiedParts||this.draggedParts;if(n!==null){const l=n.iterator;for(;l.next();){const h=l.key;h instanceof Node&&h.linksConnected.each(a=>a.suspendsRouting=!1)}}if(this.doDropOnto(t,e),!this.isActive&&DraggingTool.di===null)return;const o=Rect.a(),r=i.selection.iterator;for(;r.next();){const l=r.value;l instanceof Node&&this.iO(i,l,o)}Rect.o(o)}tO(t,i){const e=this.diagram,s=i.part;if(e.handlesDragDropForTopLevelParts&&s!==null&&s.isTopLevel&&!(s instanceof Group)){const n=e.mouseDrop;n!==null&&n(t)}}iO(t,i,e){if(!i.canAvoid())return;let s=!1;e=i.getAvoidableRect(e),t.viewportBounds.containsRect(e)&&(s=!0);const n=this.copiedParts||this.draggedParts;if(n===null)return;const o=t.GP(e,l=>l.part,l=>l instanceof Link,!0,l=>l instanceof Link,s);if(o.count===0)return;const r=o.iterator;for(;r.next();){const l=r.value;n.has(l)&&n.has(i)||!l.isMemberOf(i)&&l.isAvoiding&&l.oi()}}doDropOnto(t,i){}doMouseMove(){if(!this.isActive)return;const t=this.diagram,i=t.lastInput;if(this.simulatedMouseMove(i.event,i.documentPoint,i.targetDiagram))return;this.currentPart!==null&&this.draggedParts!==null&&(this.mayCopy()?(this.zP(!1),this.Qc(this.copiedParts,!1)):this.mayMove()?(this.$l(),this.Qc(this.draggedParts,!0)):this.mayDragOut()?(this.zP(!1),this.Qc(this.copiedParts,!1)):this.$l(),this.XP(t.lastInput.documentPoint))}doMouseUp(){if(!this.isActive)return;const t=this.diagram,i=t.lastInput;if(this.simulatedMouseUp(i.event,i.documentPoint,i.targetDiagram))return;let e=!1;const s=this.mayCopy();if(s&&this.copiedParts!==null?(this.$l(),this.zP(!0),this.Qc(this.copiedParts,!1),this.copiedParts!==null&&(t.O("ChangingSelection",t.selection),t.clearSelection(!0),this.copiedParts.iteratorKeys.each(n=>{n.isSelected=!0}))):(e=!0,this.$l(),this.mayMove()&&(this.Qc(this.draggedParts,!0),this.XP(t.lastInput.documentPoint))),this.Wu=!0,this.tL(t.lastInput.documentPoint),this.isActive){const n=s&&this.copiedParts,o=n?this.copiedParts?.toKeySet():this.draggedParts?this.draggedParts.toKeySet():null;this.copiedParts=null,e&&this.eO(),t.invalidateDocumentBounds(),t.BP(this.draggedParts),this.transactionResult=n?"Copy":"Move",t.O(n?"SelectionCopied":"SelectionMoved",o)}this.stopTool(),s&&t.O("ChangedSelection",t.selection)}simulatedMouseMove(t,i,e){if(DraggingTool.di===null)return!1;const s=DraggingTool.di.diagram;e instanceof Diagram||(e=null);const n=DraggingTool.ya;if(e!==n){if(n!==null&&n!==s){n.stopAutoScroll(),DraggingTool.di.isDragOutStarted=!1;const r=n.toolManager.findTool("Dragging");r!==null&&r.doSimulatedDragLeave()}if(DraggingTool.ya=e,e!==null&&e!==s){DraggingTool.di.$T();const r=e.toolManager.findTool("Dragging");r!==null&&(r.iL(),r.doSimulatedDragEnter())}this.doUpdateCursor(null)}if(e===null||e===s||!e.allowDrop||e.isReadOnly||!e.allowInsert)return!1;const o=e.toolManager.findTool("Dragging");if(o!==null){let r=i;t!==null&&(t.targetTouches!==void 0&&(t.targetTouches.length>0?t=t.targetTouches[0]:t.changedTouches.length>0&&(t=t.changedTouches[0])),r=e.getMouse(t)),e.lastInput.documentPoint=r,e.lastInput.viewPoint=e.transformDocToView(r),e.lastInput.down=!1,e.lastInput.up=!1,o.doSimulatedDragOver()}return!0}simulatedMouseUp(t,i,e){if(DraggingTool.di===null)return!1;const s=DraggingTool.ya,n=DraggingTool.di.diagram;if(e===null)return DraggingTool.di.doCancel(),!0;if(e!==s){if(s!==null){const r=s.toolManager.findTool("Dragging");if(s!==null&&s!==n&&r!==null)return s.stopAutoScroll(),DraggingTool.di.isDragOutStarted=!1,r.doSimulatedDragLeave(),!1}DraggingTool.ya=e;const o=e.toolManager.findTool("Dragging");o!==null&&(DraggingTool.di.$T(),o.iL(),o.doSimulatedDragEnter())}if(e!==this.diagram){let o=i;t!==null?(t.targetTouches!==void 0&&(t.targetTouches.length>0?t=t.targetTouches[0]:t.changedTouches.length>0&&(t=t.changedTouches[0])),o=e.getMouse(t)):o===null&&(o=new Point),e.lastInput.documentPoint=o,e.lastInput.viewPoint=e.transformDocToView(o),e.lastInput.down=!1,e.lastInput.up=!0;const r=e.toolManager.findTool("Dragging");r!==null&&r.doSimulatedDrop();const l=DraggingTool.di;if(l!==null){const h=l.mayCopy();l.transactionResult=h?"Copy":"Move",l.stopTool()}return!0}return!1}eO(){if(this.draggedParts===null)return;const t=this.draggedParts.iterator;for(;t.next();){const i=t.key;if(i instanceof Node){const e=i.containingGroup;e!==null&&e.hasPlaceholder()&&!this.draggedParts.has(e)&&e.placeholder.g()}}}mayCopy(){if(!this.isCopyEnabled)return!1;const t=this.diagram;if(t.isReadOnly||t.isModelReadOnly||!t.allowInsert||!t.allowCopy||!(U.zo?t.lastInput.alt:t.lastInput.control))return!1;const i=t.selection.iterator;for(;i.next();)if(i.value.canCopy())return!0;return!!(this.draggedLink!==null&&this.dragsLink&&this.draggedLink.canCopy())}mayDragOut(){if(!this.isCopyEnabled)return!1;const t=this.diagram;if(!t.allowDragOut||!t.allowCopy||t.allowMove)return!1;const i=t.selection.iterator;for(;i.next();)if(i.value.canCopy())return!0;return!!(this.draggedLink!==null&&this.dragsLink&&this.draggedLink.canCopy())}mayMove(){const t=this.diagram;if(t.isReadOnly||!t.allowMove)return!1;const i=t.selection.iterator;for(;i.next();)if(i.value.canMove())return!0;return!!(this.draggedLink!==null&&this.dragsLink&&this.draggedLink.canMove())}iL(){DraggingTool.Gx.has(this)||DraggingTool.Gx.add(this)}static ZI(){if(DraggingTool.Gx.count>0){const t=DraggingTool.Gx,i=t.length;for(let e=0;e<i;e++){const s=t.elt(e);s.jT(),s.$l(),s.EP(),s.diagram.stopAutoScroll()}t.clear()}}sO(t,i,e){return!this.Wu&&this.draggedParts!==null&&!this.draggedParts.has(t)?(e.f(i),!0):!1}get draggingSource(){return DraggingTool.di}mayDragIn(){const t=this.diagram;if(!t.allowDrop||t.isReadOnly||t.isModelReadOnly||!t.allowInsert)return!1;const i=DraggingTool.di;return!(i===null||i.diagram.model.dataFormat!==t.model.dataFormat)}doSimulatedDragEnter(){if(!this.mayDragIn())return;const t=this.diagram;t.animationManager.stopAnimation(),t.Or(),t.animationManager.stopAnimation();const i=DraggingTool.di;i!==null&&(this.diagram.Ju=!0,t.lastInput.event===null&&(t.lastInput.event=i.diagram.lastInput.event)),this.doUpdateCursor(null)}doSimulatedDragLeave(){const t=DraggingTool.di;t!==null&&t.doSimulatedDragOut(),this.diagram.Ju=!1,this.doCancel()}doSimulatedDragOver(){const t=this.diagram;t.animationManager.Zu=!0;const i=DraggingTool.di;if(i!==null&&i.draggedParts!==null){if(!this.mayDragIn())return;this.eL(i.draggedParts.toKeySet(),!1,t.firstInput),this.Qc(this.copiedParts,!1),this.XP(t.lastInput.documentPoint)}t.animationManager.Zu=!1}doSimulatedDrop(){const t=this.diagram,i=DraggingTool.di;if(i!==null){const e=i.diagram;if(i.Wu=!0,this.$l(),i.draggedParts===null||!this.mayDragIn())return;t.animationManager.Zu=!0,t.O("ChangingSelection",t.selection),this.startTransaction("Drop"),this.eL(i.draggedParts.toKeySet(),!0,t.lastInput),this.Qc(this.copiedParts,!1);const s=new GSet;this.copiedParts!==null&&(t.clearSelection(!0),this.copiedParts.iteratorKeys.each(n=>{n.isSelected=!0,s.add(n)})),this.tL(t.lastInput.documentPoint),t.invalidateDocumentBounds(),this.copiedParts!==null&&(this.transactionResult="ExternalCopy"),this.copiedParts=null,t.doFocus(),t.Ju=!1,t.O("ExternalObjectsDropped",s,e),this.stopTransaction(),t.O("ChangedSelection",t.selection)}t.animationManager.Zu=!1}eL(t,i,e){if(this.copiedParts!==null)return;const s=this.diagram;if(s.isReadOnly||s.isModelReadOnly)return;s.skipsUndoManager=!i,s.partManager.addsToTemporaryLayer=!i,this.startPoint=e.documentPoint;const n=s.copyParts(t,s,!0);s.commandHandler.Zc(n);const o=Rect.a();this.QI(t,o);const r=o.x+o.width/2,l=o.y+o.height/2;Rect.o(o);const h=this.t0,a=new GMap,c=Point.a(),f=t.iterator;for(;f.next();){const d=f.value;if(d instanceof Link&&d.canCopy()){const m=n.get(d);if(m===null)continue;m.points=d.points,m.Ir(h.x-r,h.y-l),m.suspendsRouting=!0,a.set(m,this.sn())}}const u=t.iterator;for(;u.next();){const d=u.value;if(d.ze()&&d.canCopy()){const m=n.get(d);if(m===null)continue;const g=d.location;c.e(h.x-(r-g.x),h.y-(l-g.y)),m.location=c,m.ensureBounds(),a.set(m,this.sn(c))}}if(Point.o(c),this.copiedParts=a,this.IP(a.toKeySet()),this.draggedLink!==null){const d=this.draggedLink,m=d.routeBounds;d.Ir(this.startPoint.x-(m.x+m.width/2),this.startPoint.y-(m.y+m.height/2))}this.doUpdateCursor(null)}$I(){this.isDragOutStarted=!0,this.Wu=!1,DraggingTool.di=this,DraggingTool.ya=this.diagram,this.doSimulatedDragOut()}doSimulatedDragOut(){const t=this.diagram;!this.mayCopy()&&!this.mayMove()?t.currentCursor=this.nodropCursor:t.currentCursor="",this.ju=null}computeMove(t,i,e,s){const n=this.diagram;return n!==null?n.computeMove(t,i,this.dragOptions,s):new Point}}ToolManager.prototype.doCancel=function(){DraggingTool.di!==null&&DraggingTool.di.doCancel(),Tool.prototype.doCancel.call(this)};class LinkingBaseTool extends Tool{qP;HP;Zl;vP;WP;wa;jP;xa;JP;$P;ZP;QP;_P;tM;sL;iM;Ql;eM;constructor(){super(),this.qP=100,this.HP=!1,this.Zl="pointer",this.vP=new Link({layerName:"Tool"}).add(new Shape({isPanelMain:!0,stroke:"blue"}).theme("stroke","tempLink"),new Shape({toArrow:"Standard",fill:"blue",stroke:"blue"}).theme("fill","tempLink").theme("stroke","tempLink")).Ut(),this.wa=new Shape("Rectangle",{portId:"",fill:null,stroke:"magenta",strokeWidth:2,desiredSize:Size.Jk}).theme("stroke","tempPort"),this.WP=new Node({selectable:!1,layerName:"Tool"}).add(this.wa).Ut(),this.xa=new Shape("Rectangle",{portId:"",fill:null,stroke:"magenta",strokeWidth:2,desiredSize:Size.Jk}).theme("stroke","tempPort"),this.jP=new Node({selectable:!1,layerName:"Tool"}).add(this.xa).Ut(),this.JP=null,this.$P=null,this.ZP=null,this.QP=null,this._P=null,this.tM=!0,this.sL=new GMap,this.iM=null,this.Ql=null,this.eM=null}doStop(){this.diagram.stopAutoScroll(),this.originalLink=null,this.originalFromNode=null,this.originalFromPort=null,this.originalToNode=null,this.originalToPort=null,this.validPortsCache.clear(),this.targetPort=null}get portGravity(){return this.qP}set portGravity(t){U.i(t,"number",LinkingBaseTool,"portGravity"),t>=0&&(this.qP=t)}get isUnconnectedLinkValid(){return this.HP}set isUnconnectedLinkValid(t){U.i(t,"boolean",LinkingBaseTool,"isUnconnectedLinkValid"),this.HP=t}get linkingCursor(){return this.Zl}set linkingCursor(t){this.Zl=t}get temporaryLink(){return this.vP}set temporaryLink(t){U.s(t,Link,LinkingBaseTool,"temporaryLink"),t.Ut(),this.vP=t}get temporaryFromNode(){return this.WP}set temporaryFromNode(t){U.s(t,Node,LinkingBaseTool,"temporaryFromNode"),t.Ut(),this.WP=t,t&&(this.wa=t.port)}get temporaryFromPort(){return this.wa}set temporaryFromPort(t){if(U.s(t,GraphObject,LinkingBaseTool,"temporaryFromPort"),this.wa!==null){const i=this.wa.panel;if(i!==null){const e=i.E.indexOf(this.wa);i.removeAt(e),i.insertAt(e,t)}}this.wa=t}get temporaryToNode(){return this.jP}set temporaryToNode(t){U.s(t,Node,LinkingBaseTool,"temporaryToNode"),t.Ut(),this.jP=t,t&&(this.xa=t.port)}get temporaryToPort(){return this.xa}set temporaryToPort(t){if(U.s(t,GraphObject,LinkingBaseTool,"temporaryToPort"),this.xa!==null){const i=this.xa.panel;if(i!==null){const e=i.E.indexOf(this.xa);i.removeAt(e),i.insertAt(e,t)}}this.xa=t}get originalLink(){return this.JP}set originalLink(t){t!==null&&U.s(t,Link,LinkingBaseTool,"originalLink"),this.JP=t}get originalFromNode(){return this.$P}set originalFromNode(t){t!==null&&U.s(t,Node,LinkingBaseTool,"originalFromNode"),this.$P=t}get originalFromPort(){return this.ZP}set originalFromPort(t){t!==null&&U.s(t,GraphObject,LinkingBaseTool,"originalFromPort"),this.ZP=t}get originalToNode(){return this.QP}set originalToNode(t){t!==null&&U.s(t,Node,LinkingBaseTool,"originalToNode"),this.QP=t}get originalToPort(){return this._P}set originalToPort(t){t!==null&&U.s(t,GraphObject,LinkingBaseTool,"originalToPort"),this._P=t}get isForwards(){return this.tM}set isForwards(t){this.tM=t}get validPortsCache(){return this.sL}get targetPort(){return this.iM}set targetPort(t){t!==null&&U.s(t,GraphObject,LinkingBaseTool,"targetPort"),this.iM=t}copyPortProperties(t,i,e,s,n){if(t===null||i===null||e===null||s===null)return;const o=i.getDocumentScale(),r=Size.a();r.width=i.naturalBounds.width*o,r.height=i.naturalBounds.height*o,s.desiredSize=r,Size.o(r),n?(s.toSpot=i.toSpot,s.toEndSegmentLength=i.toEndSegmentLength):(s.fromSpot=i.fromSpot,s.fromEndSegmentLength=i.fromEndSegmentLength),e.locationSpot=Spot.Center;const l=Point.a();e.location=i.getDocumentPoint(Spot.Center,l),Point.o(l),s.angle=i.getDocumentAngle(),this.portTargeted!==null&&this.portTargeted(t,i,e,s,n)}setNoTargetPortProperties(t,i,e){i!==null&&(i.desiredSize=Size.Jk,i.fromSpot=Spot.None,i.toSpot=Spot.None),t!==null&&(t.location=this.diagram.lastInput.documentPoint),this.portTargeted!==null&&this.portTargeted(null,null,t,i,e)}doMouseDown(){this.isActive&&this.doMouseMove()}doMouseMove(){if(this.isActive){const t=this.diagram;if(this.targetPort=this.findTargetPort(this.isForwards),this.targetPort!==null&&this.targetPort.part instanceof Node){const i=this.targetPort.part;this.isForwards?this.copyPortProperties(i,this.targetPort,this.temporaryToNode,this.temporaryToPort,!0):this.copyPortProperties(i,this.targetPort,this.temporaryFromNode,this.temporaryFromPort,!1)}else this.isForwards?this.setNoTargetPortProperties(this.temporaryToNode,this.temporaryToPort,!0):this.setNoTargetPortProperties(this.temporaryFromNode,this.temporaryFromPort,!1);(t.allowHorizontalScroll||t.allowVerticalScroll)&&t.doAutoScroll(t.lastInput.viewPoint)}}findValidLinkablePort(t,i){if(t===null)return null;const e=t.part;if(!(e instanceof Node))return null;for(;t!==null;){const s=i?t.toLinkable:t.fromLinkable;if(s===!0&&(t.portId!==null||t instanceof Node)&&(i?this.isValidTo(e,t):this.isValidFrom(e,t)))return t;if(s===!1)return null;t=t.panel}return null}findTargetPort(t){const i=this.diagram,e=i.lastInput.documentPoint;let s=this.portGravity;const n=i.findObjectsNear(e,s,h=>this.findValidLinkablePort(h,t),null,!0);let o=1/0,r=null;const l=n.iterator;for(;l.next();){const h=l.value,a=h.part;if(!(a instanceof Node))continue;const c=h.getDocumentPoint(Spot.Center,Point.a()),f=e.x-c.x,u=e.y-c.y;Point.o(c);const d=f*f+u*u;if(d<o){const m=this.validPortsCache.get(h);m!==null?m&&(r=h,o=d):t&&this.isValidLink(this.originalFromNode,this.originalFromPort,a,h)||!t&&this.isValidLink(a,h,this.originalToNode,this.originalToPort)?(this.validPortsCache.set(h,!0),r=h,o=d):this.validPortsCache.set(h,!1)}}if(r!==null){const h=r.part;if(h instanceof Node&&(h.layer===null||h.layer.allowLink))return r}return null}isValidFrom(t,i){if(t===null||i===null)return this.isUnconnectedLinkValid;if(this.diagram.currentTool===this&&(t.layer!==null&&!t.layer.allowLink||i.fromLinkable!==!0))return!1;const e=i.fromMaxLinks;if(e<1/0){if(this.originalLink!==null&&t===this.originalFromNode&&i===this.originalFromPort)return!0;let s=i.portId;if(s===null&&(s=""),t.findLinksOutOf(s).count>=e)return!1}return!0}isValidTo(t,i){if(t===null||i===null)return this.isUnconnectedLinkValid;if(this.diagram.currentTool===this&&(t.layer!==null&&!t.layer.allowLink||i.toLinkable!==!0))return!1;const e=i.toMaxLinks;if(e<1/0){if(this.originalLink!==null&&t===this.originalToNode&&i===this.originalToPort)return!0;let s=i.portId;if(s===null&&(s=""),t.findLinksInto(s).count>=e)return!1}return!0}isInSameNode(t,i){if(t===null||i===null)return!1;if(t===i)return!0;const e=t.part,s=i.part;return e!==null&&e===s}isLinked(t,i){if(t===null||i===null)return!1;const e=t.part;if(!(e instanceof Node))return!1;let s=t.portId;s===null&&(s="");const n=i.part;if(!(n instanceof Node))return!1;let o=i.portId;o===null&&(o="");const r=n.findLinksInto(o);for(;r.next();){const l=r.value;if(l.fromNode===e&&l.fromPortId===s)return!0}return!1}isValidLink(t,i,e,s){if(!this.isValidFrom(t,i)||!this.isValidTo(e,s)||i!==null&&s!==null&&(!(i.fromLinkableSelfNode&&s.toLinkableSelfNode)&&this.isInSameNode(i,s)||!(i.fromLinkableDuplicates&&s.toLinkableDuplicates)&&this.isLinked(i,s))||this.originalLink!==null&&(t!==null&&this.isLabelDependentOnLink(t,this.originalLink)||e!==null&&this.isLabelDependentOnLink(e,this.originalLink))||t!==null&&e!==null&&(t.data===null&&e.data!==null||t.data!==null&&e.data===null)||!this.isValidCycle(t,e,this.originalLink))return!1;let n;return t!==null&&i!==null&&(n=t.linkValidation,n!==null&&!n(t,i,e,s,this.originalLink))||e!==null&&s!==null&&(n=e.linkValidation,n!==null&&!n(t,i,e,s,this.originalLink))?!1:(n=this.linkValidation,n!==null?n(t,i,e,s,this.originalLink):!0)}isLabelDependentOnLink(t,i){if(t===null)return!1;const e=t.labeledLink;if(e===null)return!1;if(e===i)return!0;const s=new GSet;return s.add(t),this.sM(e,i,s)}sM(t,i,e){if(t===i)return!0;const s=t.fromNode;if(s!==null&&s.labeledLink&&(e.add(s),this.sM(s.labeledLink,i,e)))return!0;const n=t.toNode;return!!(n!==null&&n.labeledLink&&(e.add(n),this.sM(n.labeledLink,i,e)))}isValidCycle(t,i,e){if(e===void 0&&(e=null),t===null||i===null)return this.isUnconnectedLinkValid;const s=this.diagram;let n=1;if(s&&(s.model.Hx()?n=s.isTreePathToChildren?5:6:n=s.validCycle),n===1)return!0;if(n===5){const o=e||this.temporaryLink;if(o!==null&&!o.isTreeLink)return!0;const r=i.linksConnected;for(;r.next();){const l=r.value;if(l!==e&&l.isTreeLink&&l.toNode===i)return!1}return!this.Qu(t,i,e,!0)}else if(n===6){const o=e||this.temporaryLink;if(o!==null&&!o.isTreeLink)return!0;const r=t.linksConnected;for(;r.next();){const l=r.value;if(l!==e&&l.isTreeLink&&l.fromNode===t)return!1}return!this.Qu(t,i,e,!0)}else{if(n===2)return!this.nO(t,i,e);if(n===3)return!this.Qu(t,i,e,!1);if(n===4)return!this.oO(t,i,e)}return!0}Qu(t,i,e,s){if(t===i)return!0;if(t===null||i===null)return!1;const n=t.linksConnected;for(;n.next();){const o=n.value;if(o===e||s&&!o.isTreeLink||o.toNode!==t)continue;const r=o.fromNode;if(!(r===t||r===null)&&this.Qu(r,i,e,s))return!0}return!1}nO(t,i,e){if(t===i)return!0;const s=new Set;return s.add(i),this.nL(s,t,i,e)}nL(t,i,e,s){if(i===e)return!0;if(i===null||e===null||t.has(i))return!1;t.add(i);const n=i.linksConnected;for(;n.next();){const o=n.value;if(o===s||o.toNode!==i)continue;const r=o.fromNode;if(!(r===i||r===null)&&this.nL(t,r,e,s))return!0}return!1}oO(t,i,e){if(t===i)return!0;const s=new Set;return s.add(i),this.oL(s,t,i,e)}oL(t,i,e,s){if(i===e)return!0;if(i===null||e===null||t.has(i))return!1;t.add(i);const n=i.linksConnected;for(;n.next();){const o=n.value;if(o===s)continue;const r=o.fromNode,l=o.toNode,h=r===i?l:r;if(!(h===i||h===null)&&this.oL(t,h,e,s))return!0}return!1}get linkValidation(){return this.Ql}set linkValidation(t){t!==null&&U.C(t,LinkingBaseTool,"linkValidation"),this.Ql=t}get portTargeted(){return this.eM}set portTargeted(t){t!==null&&U.C(t,LinkingBaseTool,"portTargeted"),this.eM=t}}var LinkingDirection=(w=>(w[w.Either=1]="Either",w[w.ForwardsOnly=2]="ForwardsOnly",w[w.BackwardsOnly=3]="BackwardsOnly",w))(LinkingDirection||{});class LinkingTool extends LinkingBaseTool{nM;oM;P;rM;constructor(t){super(),this.name="Linking",this.nM={},this.oM=null,this.P=1,this.rM=null,t&&Object.assign(this,t)}static Either=1;static ForwardsOnly=2;static BackwardsOnly=3;get archetypeLinkData(){return this.nM}set archetypeLinkData(t){t!==null&&U.Xo(t,LinkingTool,"archetypeLinkData"),t instanceof GraphObject&&U.s(t,Link,LinkingTool,"archetypeLinkData"),this.nM=t}get archetypeLabelNodeData(){return this.oM}set archetypeLabelNodeData(t){t!==null&&U.Xo(t,LinkingTool,"archetypeLabelNodeData"),t instanceof GraphObject&&U.s(t,Node,LinkingTool,"archetypeLabelNodeData"),this.oM=t}get direction(){return this.P}set direction(t){U.j(t,LinkingDirection,"LinkingDirection"),this.P=t}get startObject(){return this.rM}set startObject(t){t!==null&&U.s(t,GraphObject,LinkingTool,"startObject"),this.rM=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return t.isReadOnly||t.isModelReadOnly||!t.allowLink||!t.model.vx()||!this.canStartButton()||t.currentTool!==this&&!this.isBeyondDragSize()?!1:this.findLinkablePort()!==null}findLinkablePort(){const t=this.diagram;let i=this.startObject;if(i===null&&(i=t.findObjectAt(t.firstInput.documentPoint,null,null)),i===null)return null;const e=i.part;if(!(e instanceof Node))return null;const s=this.direction;if(s===1||s===2){const n=this.findValidLinkablePort(i,!1);if(n!==null)return this.isForwards=!0,n;if(this.startObject===e){const o=e.port;if(this.findValidLinkablePort(o,!1))return this.isForwards=!0,o}}if(s===1||s===3){const n=this.findValidLinkablePort(i,!0);if(n!==null)return this.isForwards=!1,n;if(this.startObject===e){const o=e.port;if(this.findValidLinkablePort(o,!0))return this.isForwards=!1,o}}return null}doActivate(){const t=this.diagram,i=this.findLinkablePort();if(i===null){this.stopTool();return}if(this.startTransaction(this.name),t.isMouseCaptured=!0,t.currentCursor=this.linkingCursor,this.isForwards){this.temporaryToNode!==null&&(this.temporaryToNode.location=t.lastInput.documentPoint),this.originalFromPort=i;const e=this.originalFromPort.part;e instanceof Node&&(this.originalFromNode=e),this.copyPortProperties(this.originalFromNode,this.originalFromPort,this.temporaryFromNode,this.temporaryFromPort,!1)}else{this.temporaryFromNode!==null&&(this.temporaryFromNode.location=t.lastInput.documentPoint),this.originalToPort=i;const e=this.originalToPort.part;e instanceof Node&&(this.originalToNode=e),this.copyPortProperties(this.originalToNode,this.originalToPort,this.temporaryToNode,this.temporaryToPort,!0)}t.add(this.temporaryFromNode),this.temporaryFromNode&&this.temporaryFromNode.ensureBounds(),t.add(this.temporaryToNode),this.temporaryToNode&&this.temporaryToNode.ensureBounds(),this.temporaryLink!==null&&(this.temporaryFromNode!==null&&(this.temporaryLink.fromNode=this.temporaryFromNode),this.temporaryToNode!==null&&(this.temporaryLink.toNode=this.temporaryToNode),this.temporaryLink.isTreeLink=this.isNewTreeLink(),this.temporaryLink.oi(),t.add(this.temporaryLink)),this.isActive=!0}doDeactivate(){this.isActive=!1;const t=this.diagram;t.remove(this.temporaryLink),t.remove(this.temporaryFromNode),t.remove(this.temporaryToNode),t.isMouseCaptured=!1,t.currentCursor="",this.stopTransaction()}doStop(){super.doStop(),this.startObject=null}doMouseUp(){if(this.isActive){const t=this.diagram;this.transactionResult=null;let i=null,e=null,s=null,n=null,o=null;try{this.targetPort=this.findTargetPort(this.isForwards);const r=this.targetPort;if(r!==null){const l=r.part;l instanceof Node&&(this.isForwards?(this.originalFromNode!==null&&(i=this.originalFromNode,e=this.originalFromPort),s=l,n=r):(i=l,e=r,this.originalToNode!==null&&(s=this.originalToNode,n=this.originalToPort)))}else this.isForwards?this.originalFromNode!==null&&this.isUnconnectedLinkValid&&(i=this.originalFromNode,e=this.originalFromPort):this.originalToNode!==null&&this.isUnconnectedLinkValid&&(s=this.originalToNode,n=this.originalToPort);i!==null||s!==null?(o=this.insertLink(i,e,s,n),o!==null?(r===null&&(this.isForwards?o.defaultToPoint=t.lastInput.documentPoint:o.defaultFromPoint=t.lastInput.documentPoint),t.allowSelect&&(t.O("ChangingSelection",t.selection),t.clearSelection(!0),o.isSelected=!0),this.transactionResult=this.name,t.O("LinkDrawn",o)):this.doNoLink(i,e,s,n)):this.isForwards?this.doNoLink(this.originalFromNode,this.originalFromPort,null,null):this.doNoLink(null,null,this.originalToNode,this.originalToPort)}finally{this.stopTool(),o&&t.allowSelect&&t.O("ChangedSelection",t.selection)}}}isNewTreeLink(){const t=this.archetypeLinkData;if(t===null)return!0;if(t instanceof Link)return t.isTreeLink;const i=this.diagram;if(i===null)return!0;const e=i.partManager.getLinkCategoryForData(t),s=i.partManager.findLinkTemplateForCategory(e);return s!==null?s.isTreeLink:!0}insertLink(t,i,e,s){return this.diagram.partManager.insertLink(t,i,e,s)}doNoLink(t,i,e,s){}}class RelinkingTool extends LinkingBaseTool{rL=null;lL=null;lM=null;hM=null;Fs;aM;constructor(t){super(),this.name="Relinking",this.fromHandleArchetype=new Shape("Diamond",{desiredSize:Size.Bu,fill:"lightblue",stroke:"dodgerblue",cursor:this.linkingCursor,segmentIndex:0}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.toHandleArchetype=new Shape("Diamond",{desiredSize:Size.Bu,fill:"lightblue",stroke:"dodgerblue",cursor:this.linkingCursor,segmentIndex:-1}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.Fs=null,this.aM=new Rect,t&&Object.assign(this,t)}updateAdornments(t){if(t===null||!(t instanceof Link))return;let i="RelinkFrom",e=null;if(t.isSelected&&!this.diagram.isReadOnly){const s=t.selectionObject;s!==null&&t.canRelinkFrom()&&t.actualBounds.isReal()&&t.isVisible()&&s.actualBounds.isReal()&&s.isVisibleObject()&&(e=t.findAdornment(i),e===null&&(e=this.makeAdornment(s,!1),t.addAdornment(i,e)))}if(e===null&&t.removeAdornment(i),i="RelinkTo",e=null,t.isSelected&&!this.diagram.isReadOnly){const s=t.selectionObject;s!==null&&t.canRelinkTo()&&t.actualBounds.isReal()&&t.isVisible()&&s.actualBounds.isReal()&&s.isVisibleObject()&&(e=t.findAdornment(i),e===null?(e=this.makeAdornment(s,!0),t.addAdornment(i,e)):e.g())}e===null&&t.removeAdornment(i)}makeAdornment(t,i){let e=i?this.hM:this.lM;return e&&(e=e.copy(),e.adornedObject=t),e}get fromHandleArchetype(){return this.rL}set fromHandleArchetype(t){t!==null&&U.s(t,GraphObject,RelinkingTool,"fromHandleArchetype"),this.rL=t,t!==null?this.lM=new Adornment(Panel.Link).add(t).Ut():this.lM=null}get toHandleArchetype(){return this.lL}set toHandleArchetype(t){t!==null&&U.s(t,GraphObject,RelinkingTool,"toHandleArchetype"),this.lL=t,t!==null?this.hM=new Adornment(Panel.Link).add(t).Ut():this.hM=null}get handle(){return this.Fs}set handle(t){t!==null&&(U.s(t,GraphObject,RelinkingTool,"handle"),t.part instanceof Adornment||U.n("new handle is not in an Adornment: "+t)),this.Fs=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(t.isReadOnly||t.isModelReadOnly||!t.allowRelink||!t.model.vx()||!this.canStartButton())return!1;let e=this.findToolHandleAt(t.firstInput.documentPoint,"RelinkFrom");return e===null&&(e=this.findToolHandleAt(t.firstInput.documentPoint,"RelinkTo")),e!==null}doActivate(){const t=this.diagram;if(this.originalLink===null){let e=this.handle;if(e===null&&(e=this.findToolHandleAt(t.firstInput.documentPoint,"RelinkFrom"),e===null&&(e=this.findToolHandleAt(t.firstInput.documentPoint,"RelinkTo"))),e===null)return;const s=e.part;if(!(s instanceof Adornment)||!(s.adornedPart instanceof Link))return;this.handle=e,this.isForwards=s===null||s.category==="RelinkTo",this.originalLink=s.adornedPart}const i=this.originalLink;i!==null&&(this.startTransaction(this.name),t.isMouseCaptured=!0,t.currentCursor=this.linkingCursor,this.originalFromPort=i.fromPort,this.originalFromNode=i.fromNode,this.originalToPort=i.toPort,this.originalToNode=i.toNode,this.aM.set(i.actualBounds),i.pointsCount>0&&(i.fromNode===null&&(this.temporaryFromPort!==null&&(this.temporaryFromPort.desiredSize=Size.ua),this.temporaryFromNode!==null&&(this.temporaryFromNode.location=i.getPoint(0))),i.toNode===null&&(this.temporaryToPort!==null&&(this.temporaryToPort.desiredSize=Size.ua),this.temporaryToNode!==null&&(this.temporaryToNode.location=i.getPoint(i.pointsCount-1)))),this.copyPortProperties(this.originalFromNode,this.originalFromPort,this.temporaryFromNode,this.temporaryFromPort,!1),this.copyPortProperties(this.originalToNode,this.originalToPort,this.temporaryToNode,this.temporaryToPort,!0),t.add(this.temporaryFromNode),t.add(this.temporaryToNode),this.temporaryLink!==null&&(this.temporaryFromNode!==null&&(this.temporaryLink.fromNode=this.temporaryFromNode),this.temporaryToNode!==null&&(this.temporaryLink.toNode=this.temporaryToNode),this.copyLinkProperties(i,this.temporaryLink),this.temporaryLink.oi(),t.add(this.temporaryLink)),this.isActive=!0)}copyLinkProperties(t,i){if(t===null||i===null)return;i.adjusting=t.adjusting,i.corner=t.corner;let e=t.curve;(e===11||e===10)&&(e=0),i.curve=e,i.curviness=t.curviness,i.isTreeLink=t.isTreeLink,i.points=t.points,i.routing=t.routing,i.smoothness=t.smoothness,i.fromSpot=t.fromSpot,i.fromEndSegmentLength=t.fromEndSegmentLength,i.fromShortLength=t.fromShortLength,i.toSpot=t.toSpot,i.toEndSegmentLength=t.toEndSegmentLength,i.toShortLength=t.toShortLength}doDeactivate(){this.isActive=!1;const t=this.diagram;t.remove(this.temporaryLink),t.remove(this.temporaryFromNode),t.remove(this.temporaryToNode),t.isMouseCaptured=!1,t.currentCursor="",this.stopTransaction()}doStop(){super.doStop(),this.handle=null}doMouseUp(){if(this.isActive){const t=this.diagram;this.transactionResult=null;let i=this.originalFromNode,e=this.originalFromPort,s=this.originalToNode,n=this.originalToPort,o=this.originalLink;try{if(this.targetPort=this.findTargetPort(this.isForwards),this.targetPort!==null){const r=this.targetPort.part;r instanceof Node&&(this.isForwards?(s=r,n=this.targetPort):(i=r,e=this.targetPort))}else this.isUnconnectedLinkValid?this.isForwards?(s=null,n=null):(i=null,e=null):o=null;o!==null?(this.reconnectLink(o,this.isForwards?s:i,this.isForwards?n:e,this.isForwards),this.targetPort===null&&(this.isForwards?o.defaultToPoint=t.lastInput.documentPoint:o.defaultFromPoint=t.lastInput.documentPoint,o.oi()),this.transactionResult=this.name,t.O("LinkRelinked",o,this.isForwards?this.originalToPort:this.originalFromPort)):this.originalLink!==null&&this.doNoRelink(this.originalLink,this.isForwards),this.originalLink!==null&&this.originalLink.invalidateOtherJumpOvers(this.aM)}finally{this.stopTool()}}}reconnectLink(t,i,e,s){const n=e!==null&&e.portId!==null?e.portId:"";return s?(t.toNode=i,t.toPortId=n):(t.fromNode=i,t.fromPortId=n),!0}doNoRelink(t,i){}doDraggingMouseMove(t,i,e,s){t!==null?(this.copyPortProperties(t,i,this.temporaryFromNode,this.temporaryFromPort,!1),this.diagram.add(this.temporaryFromNode)):this.diagram.remove(this.temporaryFromNode),e!==null?(this.copyPortProperties(e,s,this.temporaryToNode,this.temporaryToPort,!0),this.diagram.add(this.temporaryToNode)):this.diagram.remove(this.temporaryToNode)}stopDraggingMouseMove(){this.diagram.remove(this.temporaryFromNode),this.diagram.remove(this.temporaryToNode)}}var ReshapingBehavior=(w=>(w[w.None=0]="None",w[w.Horizontal=1]="Horizontal",w[w.Vertical=2]="Vertical",w[w.All=3]="All",w))(ReshapingBehavior||{});class LinkReshapingTool extends Tool{Er;cM;fM;Fs;Wx;jx;_u;constructor(t){super(),this.name="LinkReshaping",this.Er=new Shape("Rectangle",{desiredSize:Size.gT,fill:"lightblue",stroke:"dodgerblue"}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.cM=new Shape("Diamond",{desiredSize:Size.Bu,fill:"lightblue",stroke:"dodgerblue",cursor:"move"}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.fM=3,this.Fs=null,this.Wx=null,this.jx=new Point,this._u=new List,t&&Object.assign(this,t)}static None=0;static Horizontal=1;static Vertical=2;static All=3;getReshapingBehavior(t){return t?t.Br:0}setReshapingBehavior(t,i){t.Br=i}updateAdornments(t){if(t===null||!(t instanceof Link))return;let i=null;if(t.isSelected&&!this.diagram.isReadOnly){const e=t.path;e!==null&&t.canReshape()&&t.actualBounds.isReal()&&t.isVisible()&&e.actualBounds.isReal()&&e.isVisibleObject()&&(i=t.findAdornment(this.name),(i===null||i.uM!==t.pointsCount||i.dM!==t.resegmentable)&&(i=this.makeAdornment(e),i!==null&&(i.uM=t.pointsCount,i.dM=t.resegmentable,t.addAdornment(this.name,i))))}i===null&&t.removeAdornment(this.name)}makeAdornment(t){const i=t.part;let e=null;if(i.pointsCount>1){e=new Adornment,e.type=Panel.Link;const s=i.firstPickIndex,n=i.lastPickIndex,o=i.isOrthogonal?1:0;if(i.resegmentable&&(i.computeCurve()!==9||i.isOrthogonal))for(let h=s+o;h<n-o;h++){const a=this.makeResegmentHandle(t,h);a!==null&&(a.segmentIndex=h,a.segmentFraction=.5,a.fromMaxLinks=999,e.add(a))}let r=s+1,l=n-1;for(;r<=l;)if(r<l)this.gM(t,e,s,n,r),this.gM(t,e,s,n,l),r++,l--;else if(r===l){this.gM(t,e,s,n,r);break}e.adornedObject=t}return e}gM(t,i,e,s,n){const o=t.part,r=o.isOrthogonal,l=this.makeHandle(t,n);if(l!==null){if(l.segmentIndex=n,n!==e)if(n===e+1&&r){const h=o.getPoint(e);let a=o.getPoint(e+1);G.u(h.x,a.x)&&G.u(h.y,a.y)?(a=o.getPoint(e-1),G.u(h.x,a.x)?(this.setReshapingBehavior(l,2),l.cursor="n-resize"):G.u(h.y,a.y)&&(this.setReshapingBehavior(l,1),l.cursor="w-resize")):G.u(h.x,a.x)?(this.setReshapingBehavior(l,2),l.cursor="n-resize"):G.u(h.y,a.y)&&(this.setReshapingBehavior(l,1),l.cursor="w-resize")}else if(n===s-1&&r){let h=o.getPoint(s-1);const a=o.getPoint(s);G.u(h.x,a.x)&&G.u(h.y,a.y)?(h=o.getPoint(s+1),G.u(h.x,a.x)?(this.setReshapingBehavior(l,2),l.cursor="n-resize"):G.u(h.y,a.y)&&(this.setReshapingBehavior(l,1),l.cursor="w-resize")):G.u(h.x,a.x)?(this.setReshapingBehavior(l,2),l.cursor="n-resize"):G.u(h.y,a.y)&&(this.setReshapingBehavior(l,1),l.cursor="w-resize")}else n===s||(this.setReshapingBehavior(l,3),l.cursor="move");i.add(l)}}makeHandle(t,i){const e=this.handleArchetype;return e===null?null:e.copy().mM()}get handleArchetype(){return this.Er}set handleArchetype(t){t!==null&&U.s(t,GraphObject,LinkReshapingTool,"handleArchetype"),this.Er=t}makeResegmentHandle(t,i){const e=this.midHandleArchetype;return e===null?null:e.copy().mM()}get midHandleArchetype(){return this.cM}set midHandleArchetype(t){t!==null&&U.s(t,GraphObject,LinkReshapingTool,"midHandleArchetype"),this.cM=t}get handle(){return this.Fs}set handle(t){t!==null&&(U.s(t,GraphObject,LinkReshapingTool,"handle"),t.part instanceof Adornment||U.n("new handle is not in an Adornment: "+t)),this.Fs=t}get adornedLink(){return this.Wx}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return t.isReadOnly||!t.allowReshape||!this.canStartButton()?!1:this.findToolHandleAt(t.firstInput.documentPoint,this.name)!==null}doActivate(){const t=this.diagram;if(this.handle===null&&(this.handle=this.findToolHandleAt(t.firstInput.documentPoint,this.name)),this.handle===null)return;const i=this.handle.part.adornedPart;if(i instanceof Link){if(this.Wx=i,t.isMouseCaptured=!0,this.startTransaction(this.name),i.resegmentable&&this.handle.fromMaxLinks===999){const e=i.points.copy(),s=this.getResegmentingPoint();if(e.insertAt(this.handle.segmentIndex+1,s),i.isOrthogonal&&e.insertAt(this.handle.segmentIndex+1,s),i.points=e,i.invalidateAdornments(),i.updateAdornments(),this.handle=this.findToolHandleAt(t.firstInput.documentPoint,this.name),this.handle===null){this.doDeactivate();return}}this.jx=i.getPoint(this.handle.segmentIndex),this._u=i.points.copy(),this.isActive=!0}}doDeactivate(){this.stopTransaction(),this.handle=null,this.Wx=null;const t=this.diagram;t.isMouseCaptured=!1,this.isActive=!1}stopTransaction(){const t=this.diagram,i=super.stopTransaction();return i&&t.undoManager.transactionToUndo!==null&&t.undoManager.transactionToUndo.optimize(),i}doCancel(){const t=this.adornedLink;t!==null&&(t.points=this._u),this.stopTool()}getResegmentingPoint(){return this.handle===null?this.diagram.lastInput.documentPoint:this.handle.getDocumentPoint(Spot.Center)}doMouseMove(){const t=this.diagram;if(this.isActive){const i=this.computeReshape(t.lastInput.documentPoint);this.reshape(i)}}doMouseUp(){const t=this.diagram;if(this.isActive){const i=this.computeReshape(t.lastInput.documentPoint);this.reshape(i);const e=this.adornedLink;if(e!==null&&e.resegmentable&&this.handle!==null&&(e.computeCurve()!==9||e.isOrthogonal)){const s=this.handle.segmentIndex,n=e.getPoint(s-1),o=e.getPoint(s),r=e.getPoint(s+1);if(e.isOrthogonal){if(s>e.firstPickIndex+1&&s<e.lastPickIndex-1){let l=e.getPoint(s-2);if(this.isWithinResegmentingDistance(n,o)&&(this.isInLineOrtho(l,n,o,r,!0)||this.isInLineOrtho(l,n,o,r,!1))){const h=e.points.copy();this.isInLineOrtho(l,n,o,r,!0)?(h.setElt(s-2,new Point(l.x,(r.y+l.y)/2)),h.setElt(s+1,new Point(r.x,(r.y+l.y)/2))):(h.setElt(s-2,new Point((r.x+l.x)/2,l.y)),h.setElt(s+1,new Point((r.x+l.x)/2,r.y))),h.removeAt(s),h.removeAt(s-1),e.points=h,e.invalidateAdornments()}else if(l=e.getPoint(s+2),this.isWithinResegmentingDistance(o,r)&&(this.isInLineOrtho(n,o,r,l,!0)||this.isInLineOrtho(n,o,r,l,!1))){const h=e.points.copy();this.isInLineOrtho(n,o,r,l,!0)?(h.setElt(s-1,new Point(n.x,(n.y+l.y)/2)),h.setElt(s+2,new Point(l.x,(n.y+l.y)/2))):(h.setElt(s-1,new Point((n.x+l.x)/2,n.y)),h.setElt(s+2,new Point((n.x+l.x)/2,l.y))),h.removeAt(s+1),h.removeAt(s),e.points=h,e.invalidateAdornments()}}}else{const l=Point.a();if(G.Xl(n.x,n.y,r.x,r.y,o.x,o.y,l)&&l.distanceSquaredPoint(o)<this.resegmentingDistance*this.resegmentingDistance){const h=e.points.copy();h.removeAt(s),e.points=h,e.invalidateAdornments()}Point.o(l)}}t.invalidateDocumentBounds(),this.transactionResult=this.name,t.O("LinkReshaped",this.adornedLink,this._u)}this.stopTool()}isWithinResegmentingDistance(t,i){return Math.abs(t.x-i.x)<this.resegmentingDistance&&Math.abs(t.y-i.y)<this.resegmentingDistance}isInLineOrtho(t,i,e,s,n){return n?Math.abs(t.y-i.y)<this.resegmentingDistance&&Math.abs(i.y-e.y)<this.resegmentingDistance&&Math.abs(e.y-s.y)<this.resegmentingDistance:Math.abs(t.x-i.x)<this.resegmentingDistance&&Math.abs(i.x-e.x)<this.resegmentingDistance&&Math.abs(e.x-s.x)<this.resegmentingDistance}get resegmentingDistance(){return this.fM}set resegmentingDistance(t){U.i(t,"number",LinkReshapingTool,"resegmentingDistance"),this.fM=t}reshape(t){const i=this.adornedLink;if(i===null)return;const e=this.handle;if(e===null)return;i.startRoute();let s=e.segmentIndex;const n=this.getReshapingBehavior(e);if(i.isOrthogonal)if(s===i.firstPickIndex+1){const o=i.firstPickIndex+1;n===2?(i.setPointAt(o,i.getPoint(o-1).x,t.y),i.setPointAt(o+1,i.getPoint(o+2).x,t.y)):n===1&&(i.setPointAt(o,t.x,i.getPoint(o-1).y),i.setPointAt(o+1,t.x,i.getPoint(o+2).y))}else if(s===i.lastPickIndex-1){const o=i.lastPickIndex-1;n===2?(i.setPointAt(o-1,i.getPoint(o-2).x,t.y),i.setPointAt(o,i.getPoint(o+1).x,t.y)):n===1&&(i.setPointAt(o-1,t.x,i.getPoint(o-2).y),i.setPointAt(o,t.x,i.getPoint(o+1).y))}else{let o=s;const r=i.getPoint(o);if(!t.equalsApprox(r)){const l=i.getPoint(o-2),h=i.getPoint(o-1),a=i.getPoint(o+1),c=i.getPoint(o+2);G.u(h.x,r.x)&&G.u(r.y,a.y)?(G.u(h.x,l.x)&&!G.u(h.y,l.y)&&!G.u(t.x,r.x)?(i.insertPointAt(o,t.x,h.y),s++,o++):i.setPointAt(o-1,t.x,h.y),G.u(a.y,c.y)&&!G.u(a.x,c.x)&&!G.u(t.y,r.y)?i.insertPointAt(o+1,a.x,t.y):i.setPointAt(o+1,a.x,t.y)):G.u(h.y,r.y)&&G.u(r.x,a.x)?(G.u(h.y,l.y)&&!G.u(h.x,l.x)&&!G.u(t.y,r.y)?(i.insertPointAt(o,h.x,t.y),s++,o++):i.setPointAt(o-1,h.x,t.y),G.u(a.x,c.x)&&!G.u(a.y,c.y)&&!G.u(t.x,r.x)?i.insertPointAt(o+1,t.x,a.y):i.setPointAt(o+1,t.x,a.y)):G.u(h.x,r.x)&&G.u(r.x,a.x)?(G.u(h.x,l.x)&&!G.u(h.y,l.y)&&!G.u(t.x,r.x)?(i.insertPointAt(o,t.x,h.y),s++,o++):i.setPointAt(o-1,t.x,h.y),G.u(a.x,c.x)&&!G.u(a.y,c.y)&&!G.u(t.x,r.x)?i.insertPointAt(o+1,t.x,a.y):i.setPointAt(o+1,t.x,a.y)):G.u(h.y,r.y)&&G.u(r.y,a.y)&&(G.u(h.y,l.y)&&!G.u(h.x,l.x)&&!G.u(t.y,r.y)?(i.insertPointAt(o,h.x,t.y),s++,o++):i.setPointAt(o-1,h.x,t.y),G.u(a.y,c.y)&&!G.u(a.x,c.x)&&!G.u(t.y,r.y)?i.insertPointAt(o+1,a.x,t.y):i.setPointAt(o+1,a.x,t.y)),i.setPointAt(s,t.x,t.y)}}else{i.setPointAt(s,t.x,t.y);let o=i.fromNode,r=i.fromPort;if(o!==null){const a=o.findVisibleNode();a!==null&&a!==o&&(o=a,r=o.port)}if(s===1&&r!==null&&i.computeSpot(!0,r).isNoSpot()){const a=r.getDocumentPoint(Spot.Center,Point.a()),c=i.getLinkPointFromPoint(o,r,a,t,!0,Point.a());i.setPointAt(0,c.x,c.y),Point.o(a),Point.o(c)}let l=i.toNode,h=i.toPort;if(l!==null){const a=l.findVisibleNode();a!==null&&a!==l&&(l=a,h=l.port)}if(s===i.pointsCount-2&&h!==null&&i.computeSpot(!1,h).isNoSpot()){const a=h.getDocumentPoint(Spot.Center,Point.a()),c=i.getLinkPointFromPoint(l,h,a,t,!1,Point.a());i.setPointAt(i.pointsCount-1,c.x,c.y),Point.o(a),Point.o(c)}}i.commitRoute()}computeReshape(t){const i=this.adornedLink;if(i===null)return t;const e=this.handle;if(e===null)return t;const s=e.segmentIndex;switch(this.getReshapingBehavior(e)){case 3:return t;case 2:{const n=i.getPoint(s);return new Point(n.x,t.y)}case 1:{const n=i.getPoint(s);return new Point(t.x,n.y)}default:case 0:return i.getPoint(s)}}get originalPoint(){return this.jx}set originalPoint(t){this.jx=t.copy()}get originalPoints(){return this._u}set originalPoints(t){this._u=t.copy()}}class ResizingTool extends Tool{Vr;zr;Uo;_c;pM;Rs;Er;Fs;i0;Jx;Xr;$x;Zx;Qx;constructor(t){super(),this.name="Resizing",this.Vr=new Size(1,1).S(),this.zr=new Size(9999,9999).S(),this.Uo=new Size(NaN,NaN).S(),this._c=!1,this.pM=!0,this.Rs=null,this.Er=new Shape("Rectangle",{alignmentFocus:Spot.Center,desiredSize:Size.gT,fill:"lightblue",stroke:"dodgerblue",strokeWidth:1,cursor:"pointer"}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.Fs=null,this.i0=new Point,this.Jx=new Size,this.Xr=new Point,this.$x=new Size(0,0),this.Zx=new Size(1/0,1/0),this.Qx=new Size(1,1),t&&Object.assign(this,t)}updateAdornments(t){if(t!==null){if(t.isSelected&&!this.diagram.isReadOnly){const i=t.resizeObject;if(t.Yr()&&(i===t||i===t.path||i.isPanelMain))return;let e=t.findAdornment(this.name);if(i!==null&&t.canResize()&&t.actualBounds.isReal()&&t.isVisible()&&i.actualBounds.isReal()&&i.isVisibleObject()&&((e===null||e.adornedObject!==i)&&(e=this.makeAdornment(i)),e!==null)){const s=i.getDocumentAngle();t.tf()&&this.updateResizeHandles(e,s),t.addAdornment(this.name,e);return}}t.removeAdornment(this.name)}}makeAdornment(t){let i=null;const e=t.part?.resizeAdornmentTemplate;if(e){if(i=e.copy(),i===null)return null}else{i=new Adornment,i.type=Panel.Spot,i.locationSpot=Spot.Center;const s=new Placeholder;s.isPanelMain=!0,i.add(s);let n=this.makeHandle(t,Spot.TopLeft);n!==null&&i.add(n),n=this.makeHandle(t,Spot.TopRight),n!==null&&i.add(n),n=this.makeHandle(t,Spot.BottomRight),n!==null&&i.add(n),n=this.makeHandle(t,Spot.BottomLeft),n!==null&&i.add(n),n=this.makeHandle(t,Spot.MiddleTop),n!==null&&i.add(n),n=this.makeHandle(t,Spot.MiddleRight),n!==null&&i.add(n),n=this.makeHandle(t,Spot.MiddleBottom),n!==null&&i.add(n),n=this.makeHandle(t,Spot.MiddleLeft),n!==null&&i.add(n)}return i.adornedObject=t,i}makeHandle(t,i){const e=this.handleArchetype;if(e===null)return null;const s=e.copy().mM();return s.alignment=i,s}updateResizeHandles(t,i){if(t!==null){if(!t.alignment.isDefault()&&(t.cursor==="pointer"||t.cursor.indexOf("resize")>0))this.rO(t,i);else if(t instanceof Panel){const e=t.elements;for(;e.next();){const s=e.value;this.updateResizeHandles(s,i)}}}}rO(t,i){let e=t.alignment;e.isNoSpot()&&(e=Spot.Center);let s=i;if(e.x<=0)e.y<=0?s+=225:e.y>=1?s+=135:s+=180;else if(e.x>=1)e.y<=0?s+=315:e.y>=1&&(s+=45);else if(e.y<=0)s+=270;else if(e.y>=1)s+=90;else return;s=G.qi(s),s<22.5?t.cursor="e-resize":s<67.5?t.cursor="se-resize":s<112.5?t.cursor="s-resize":s<157.5?t.cursor="sw-resize":s<202.5?t.cursor="w-resize":s<247.5?t.cursor="nw-resize":s<292.5?t.cursor="n-resize":s<337.5?t.cursor="ne-resize":t.cursor="e-resize"}get handleArchetype(){return this.Er}set handleArchetype(t){t!==null&&U.s(t,GraphObject,ResizingTool,"handleArchetype"),this.Er=t}get handle(){return this.Fs}set handle(t){t!==null&&(U.s(t,GraphObject,ResizingTool,"handle"),t.part instanceof Adornment||U.n("new handle is not in an Adornment: "+t)),this.Fs=t}get adornedObject(){return this.Rs}set adornedObject(t){t!==null&&(U.s(t,GraphObject,ResizingTool,"handle"),t.part instanceof Adornment&&U.n("new handle must not be in an Adornment: "+t)),this.Rs=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return t.isReadOnly||!t.allowResize||!this.canStartButton()?!1:this.findToolHandleAt(t.firstInput.documentPoint,this.name)!==null}doActivate(){const t=this.diagram;this.handle===null&&(this.handle=this.findToolHandleAt(t.firstInput.documentPoint,this.name)),this.handle!==null&&(this.adornedObject=this.handle.part.adornedObject,this.adornedObject!==null&&this.adornedObject.part!==null&&(t.isMouseCaptured=!0,t.animationManager.stopAnimation(),t.$u=!0,this.startTransaction(this.name),this.i0.set(this.adornedObject.getDocumentPoint(this.handle.alignment.opposite())),this.Xr.set(this.adornedObject.part.location),this.Jx.set(this.adornedObject.desiredSize),this.Qx=this.computeCellSize(),this.$x=this.computeMinSize(),this.Zx=this.computeMaxSize(),this.isActive=!0))}doDeactivate(){const t=this.diagram;t.$u=!1,t.Jl=!0,this.stopTransaction(),this.handle=null,this.Rs=null,t.isMouseCaptured=!1,this.isActive=!1}stopTransaction(){const t=this.diagram,i=super.stopTransaction();return i&&t.undoManager.transactionToUndo!==null&&t.undoManager.transactionToUndo.optimize(),i}doCancel(){this.adornedObject!==null&&this.adornedObject.part!==null&&(this.adornedObject.desiredSize=this.originalDesiredSize,this.adornedObject.part.location=this.originalLocation),this.stopTool()}doMouseMove(){const t=this.diagram;if(!this.isActive||this.adornedObject===null||this.handle===null)return;const i=this.$x,e=this.Zx,s=this.Qx,n=t.lastInput.documentPoint,o=this.adornedObject.getLocalPoint(n,Point.a()),r=this.computeReshape(),l=this.computeResize(o,this.handle.alignment,i,e,s,r);this.resize(l),t.maybeUpdate(),Point.o(o)}doMouseUp(){const t=this.diagram;if(this.isActive&&this.adornedObject!==null&&this.handle!==null){const i=this.$x,e=this.Zx,s=this.Qx,n=this.adornedObject.getLocalPoint(t.lastInput.documentPoint,Point.a()),o=this.computeReshape(),r=this.computeResize(n,this.handle.alignment,i,e,s,o);this.resize(r),Point.o(n),t.invalidateDocumentBounds(),this.transactionResult=this.name,t.O("PartResized",this.adornedObject,this.originalDesiredSize)}this.stopTool()}resize(t){const i=this.diagram,e=this.adornedObject;if(e===null)return;e.desiredSize=t.size;const s=e.part;if(s===null||this.handle===null)return;s.ensureBounds();const n=e.getDocumentPoint(this.handle.alignment.opposite());if(s instanceof Group){const o=new List;o.add(s);let r;!this.dragsMembers&&!s.hasPlaceholder()&&(r=new DraggingOptions,r.dragsMembers=!1),i.moveParts(o,this.oppositePoint.copy().subtract(n),!0,r)}else s.location=s.location.copy().subtract(n).add(this.oppositePoint);i.maybeUpdate()}computeResize(t,i,e,s,n,o){if(this.adornedObject===null)return Rect.bm;i.isNoSpot()&&(i=Spot.Center);const r=this.adornedObject.naturalBounds,l=r.x,h=r.y,a=r.x+r.width,c=r.y+r.height;let f=1;if(!o){let m=r.width,g=r.height;m<=0&&(m=1),g<=0&&(g=1),f=g/m}const u=Point.a();G.xm(t.x,t.y,l,h,n.width,n.height,u);const d=r.copy();return i.x<=0?i.y<=0?(d.x=Math.max(u.x,a-s.width),d.x=Math.min(d.x,a-e.width),d.width=Math.max(a-d.x,e.width),d.y=Math.max(u.y,c-s.height),d.y=Math.min(d.y,c-e.height),d.height=Math.max(c-d.y,e.height),o||(d.height/d.width>=1?(d.height=Math.max(Math.min(f*d.width,s.height),e.height),d.width=d.height/f):(d.width=Math.max(Math.min(d.height/f,s.width),e.width),d.height=f*d.width),d.x=a-d.width,d.y=c-d.height)):i.y>=1?(d.x=Math.max(u.x,a-s.width),d.x=Math.min(d.x,a-e.width),d.width=Math.max(a-d.x,e.width),d.height=Math.max(Math.min(u.y-h,s.height),e.height),o||(d.height/d.width>=1?(d.height=Math.max(Math.min(f*d.width,s.height),e.height),d.width=d.height/f):(d.width=Math.max(Math.min(d.height/f,s.width),e.width),d.height=f*d.width),d.x=a-d.width)):(d.x=Math.max(u.x,a-s.width),d.x=Math.min(d.x,a-e.width),d.width=a-d.x,o||(d.height=Math.max(Math.min(f*d.width,s.height),e.height),d.width=d.height/f,d.y=h+.5*(c-h-d.height))):i.x>=1?i.y<=0?(d.width=Math.max(Math.min(u.x-l,s.width),e.width),d.y=Math.max(u.y,c-s.height),d.y=Math.min(d.y,c-e.height),d.height=Math.max(c-d.y,e.height),o||(d.height/d.width>=1?(d.height=Math.max(Math.min(f*d.width,s.height),e.height),d.width=d.height/f):(d.width=Math.max(Math.min(d.height/f,s.width),e.width),d.height=f*d.width),d.y=c-d.height)):i.y>=1?(d.width=Math.max(Math.min(u.x-l,s.width),e.width),d.height=Math.max(Math.min(u.y-h,s.height),e.height),o||(d.height/d.width>=1?(d.height=Math.max(Math.min(f*d.width,s.height),e.height),d.width=d.height/f):(d.width=Math.max(Math.min(d.height/f,s.width),e.width),d.height=f*d.width))):(d.width=Math.max(Math.min(u.x-l,s.width),e.width),o||(d.height=Math.max(Math.min(f*d.width,s.height),e.height),d.width=d.height/f,d.y=h+.5*(c-h-d.height))):i.y<=0?(d.y=Math.max(u.y,c-s.height),d.y=Math.min(d.y,c-e.height),d.height=c-d.y,o||(d.width=Math.max(Math.min(d.height/f,s.width),e.width),d.height=f*d.width,d.x=l+.5*(a-l-d.width))):i.y>=1&&(d.height=Math.max(Math.min(u.y-h,s.height),e.height),o||(d.width=Math.max(Math.min(d.height/f,s.width),e.width),d.height=f*d.width,d.x=l+.5*(a-l-d.width))),Point.o(u),d}computeReshape(){let t=0;return this.adornedObject instanceof Shape&&(t=this.adornedObject.yM()),!(t===6||this.diagram.lastInput.shift)}computeMinSize(){if(this.adornedObject===null)return Size.ua;const t=this.adornedObject.minSize.copy(),i=this.minSize;return!isNaN(i.width)&&i.width>t.width&&(t.width=i.width),!isNaN(i.height)&&i.height>t.height&&(t.height=i.height),t}computeMaxSize(){if(this.adornedObject===null)return Size.yx;const t=this.adornedObject.maxSize.copy(),i=this.maxSize;return!isNaN(i.width)&&i.width<t.width&&(t.width=i.width),!isNaN(i.height)&&i.height<t.height&&(t.height=i.height),t}computeCellSize(){const t=new Size(NaN,NaN),i=this.adornedObject?.part;if(i){const n=i.resizeCellSize;!isNaN(n.width)&&n.width>0&&(t.width=n.width),!isNaN(n.height)&&n.height>0&&(t.height=n.height)}let e=this.cellSize;isNaN(t.width)&&!isNaN(e.width)&&e.width>0&&(t.width=e.width),isNaN(t.height)&&!isNaN(e.height)&&e.height>0&&(t.height=e.height);const s=this.diagram;if((isNaN(t.width)||isNaN(t.height))&&s){const n=s.grid;n!==null&&n.visible&&this.isGridSnapEnabled&&(e=n.gridCellSize,isNaN(t.width)&&!isNaN(e.width)&&e.width>0&&(t.width=e.width),isNaN(t.height)&&!isNaN(e.height)&&e.height>0&&(t.height=e.height))}return(isNaN(t.width)||t.width===0||t.width===1/0)&&(t.width=1),(isNaN(t.height)||t.height===0||t.height===1/0)&&(t.height=1),t}get minSize(){return this.Vr}set minSize(t){if(U.s(t,Size,ResizingTool,"minSize"),!this.Vr.equals(t)){let e=t.width;isNaN(e)&&(e=0);let s=t.height;isNaN(s)&&(s=0),this.Vr.e(e,s)}}get maxSize(){return this.zr}set maxSize(t){if(U.s(t,Size,ResizingTool,"maxSize"),!this.zr.equals(t)){let e=t.width;isNaN(e)&&(e=1/0);let s=t.height;isNaN(s)&&(s=1/0),this.zr.e(e,s)}}get cellSize(){return this.Uo}set cellSize(t){U.s(t,Size,ResizingTool,"cellSize"),this.Uo.equals(t)||this.Uo.f(t)}get isGridSnapEnabled(){return this._c}set isGridSnapEnabled(t){U.i(t,"boolean",ResizingTool,"isGridSnapEnabled"),this._c=t}get dragsMembers(){return this.pM}set dragsMembers(t){U.i(t,"boolean",ResizingTool,"dragsMembers"),this.pM=t}get oppositePoint(){return this.i0}set oppositePoint(t){U.s(t,Point,ResizingTool,"oppositePoint"),this.i0.equals(t)||this.i0.f(t)}get originalDesiredSize(){return this.Jx}set originalDesiredSize(t){this.Jx=t.copy()}get originalLocation(){return this.Xr}set originalLocation(t){this.Xr=t.copy()}}class RotatingTool extends Tool{wM;xM;Rs=null;Er=null;_x=null;Fs=null;ba;e0;Xr;bM;SM;constructor(t){super(),this.name="Rotating",this.wM=45,this.xM=2,this.Xr=new Point,this.Rs=null,this.handleArchetype=new Shape("Ellipse",{desiredSize:Size.Bu,fill:"lightblue",stroke:"dodgerblue",strokeWidth:1,cursor:"pointer"}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.Fs=null,this.ba=0,this.e0=new Point(NaN,NaN),this.bM=0,this.SM=50,t&&Object.assign(this,t)}updateAdornments(t){if(t!==null){if(t.Yr()){const i=t.rotateObject;if(i===t||i===t.path||i.isPanelMain)return}if(t.isSelected&&!this.diagram.isReadOnly){const i=t.rotateObject;if(i!==null&&t.canRotate()&&t.actualBounds.isReal()&&t.isVisible()&&i.actualBounds.isReal()&&i.isVisibleObject()){let e=t.findAdornment(this.name);if((e===null||e.adornedObject!==i)&&(e=this.makeAdornment(i)),e!==null){e.angle=i.getDocumentAngle(),e.hasPlaceholder()||(e.location=this.computeAdornmentLocation(i)),t.addAdornment(this.name,e);return}}}t.removeAdornment(this.name)}}makeAdornment(t){let i=null;const e=t.part?.rotateAdornmentTemplate;return e?i=e.copy():this._x!==null&&(i=this._x.copy()),i===null?null:(i.adornedObject=t,i)}get handleArchetype(){return this.Er}set handleArchetype(t){t!==null&&U.s(t,GraphObject,RotatingTool,"handleArchetype"),this.Er=t,t!==null?this._x=new Adornment(Panel.Position,{locationSpot:Spot.Center}).add(t).Ut():this._x=null}get handle(){return this.Fs}set handle(t){t!==null&&(U.s(t,GraphObject,RotatingTool,"handle"),t.part instanceof Adornment||U.n("new handle is not in an Adornment: "+t)),this.Fs=t}get adornedObject(){return this.Rs}set adornedObject(t){t!==null&&(U.s(t,GraphObject,RotatingTool,"handle"),t.part instanceof Adornment&&U.n("new handle must not be in an Adornment: "+t)),this.Rs=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return t.isReadOnly||!t.allowRotate||!this.canStartButton()?!1:this.findToolHandleAt(t.firstInput.documentPoint,this.name)!==null}doActivate(){const t=this.diagram;if(this.adornedObject===null){if(this.handle===null&&(this.handle=this.findToolHandleAt(t.firstInput.documentPoint,this.name)),this.handle===null)return;this.adornedObject=this.handle.part.adornedObject}this.adornedObject===null||this.adornedObject.part===null||(t.isMouseCaptured=!0,t.delaysLayout=!0,this.startTransaction(this.name),this.ba=this.adornedObject.angle,this.e0=this.computeRotationPoint(this.adornedObject),this.Xr=this.adornedObject.part.location.copy(),this.isActive=!0)}computeRotationPoint(t){const i=t.part;if(i!==null){const e=i.locationObject;if(i.rotationSpot.isSpot())return t.getDocumentPoint(i.rotationSpot);if(t===i||t===e)return e.getDocumentPoint(i.locationSpot)}return t.getDocumentPoint(Spot.Center)}computeAdornmentLocation(t){let i=this.rotationPoint;i.isReal()||(i=this.computeRotationPoint(t));const e=t.getLocalPoint(i);let s=this.handleAngle;const n=this.handleDistance;if(s===0)e.x=t.naturalBounds.width+n;else if(s===90)e.y=t.naturalBounds.height+n;else if(s===180)e.x=-n;else if(s===270)e.y=-n;else{const o=Rect.Qe(t.naturalBounds).inflate(n,n),r=e.x,l=e.y,h=Point.V(Math.max(o.width,o.height)*2,0).rotate(s).offset(r,l);G.Nr(o.x,o.y,o.right,o.y,h.x,h.y,r,l)?G.Ts(o.x,o.y,o.right,o.y,h.x,h.y,r,l,e):G.Nr(o.right,o.y,o.right,o.bottom,h.x,h.y,r,l)?G.Ts(o.right,o.y,o.right,o.bottom,h.x,h.y,r,l,e):G.Nr(o.right,o.bottom,o.x,o.bottom,h.x,h.y,r,l)?G.Ts(o.right,o.bottom,o.x,o.bottom,h.x,h.y,r,l,e):G.Nr(o.x,o.bottom,o.x,o.y,h.x,h.y,r,l)?G.Ts(o.x,o.bottom,o.x,o.y,h.x,h.y,r,l,e):(e.x=t.naturalBounds.width+n,e.y=l),Point.o(h),Rect.o(o)}return t.getDocumentPoint(e)}doDeactivate(){const t=this.diagram;this.stopTransaction(),this.handle=null,this.Rs=null,this.e0=new Point(NaN,NaN),t.isMouseCaptured=!1,this.isActive=!1}stopTransaction(){const t=this.diagram,i=super.stopTransaction();return i&&t.undoManager.transactionToUndo!==null&&t.undoManager.transactionToUndo.optimize(),i}doCancel(){const t=this.diagram;t.delaysLayout=!1,this.rotate(this.originalAngle),this.stopTool()}doMouseMove(){const t=this.diagram;if(this.isActive){const i=this.computeRotate(t.lastInput.documentPoint);this.rotate(i)}}doMouseUp(){const t=this.diagram;if(this.isActive){t.delaysLayout=!1;const i=this.computeRotate(t.lastInput.documentPoint);this.rotate(i),t.invalidateDocumentBounds(),this.transactionResult=this.name,t.O("PartRotated",this.adornedObject,this.originalAngle)}this.stopTool()}rotate(t){Debug&&U.r(t,RotatingTool,"rotate:newangle");const i=this.adornedObject;if(i===null||i.part===null)return;i.angle=t,t=i.angle;const e=i.part;e.ensureBounds();const s=e.locationObject,n=e.rotateObject;if(s===n||s.isContainedBy(n)){const o=Point.Qe(this.Xr);e.location=o.subtract(this.rotationPoint).rotate(t-this.originalAngle).add(this.rotationPoint),Point.o(o)}this.diagram.maybeUpdate()}computeRotate(t){let i=this.rotationPoint.directionPoint(t)-this.handleAngle;const e=this.adornedObject?.panel;e&&(i-=e.getDocumentAngle()),i=G.qi(i);const s=Math.min(Math.abs(this.snapAngleMultiple),180),n=Math.min(Math.abs(this.snapAngleEpsilon),s/2);return!this.diagram.lastInput.shift&&s>0&&n>0&&(i%s<n?i=Math.floor(i/s)*s:i%s>s-n&&(i=(Math.floor(i/s)+1)*s)),G.qi(i)}get snapAngleMultiple(){return this.wM}set snapAngleMultiple(t){U.i(t,"number",RotatingTool,"snapAngleMultiple"),this.wM=t}get snapAngleEpsilon(){return this.xM}set snapAngleEpsilon(t){U.i(t,"number",RotatingTool,"snapAngleEpsilon"),this.xM=t}get originalAngle(){return this.ba}set originalAngle(t){this.ba=t}get originalLocation(){return this.Xr}set originalLocation(t){this.Xr=t.copy()}get rotationPoint(){return this.e0}set rotationPoint(t){this.e0=t.copy()}get handleAngle(){return this.bM}set handleAngle(t){U.i(t,"number",RotatingTool,"handleAngle"),this.bM=G.qi(t)}get handleDistance(){return this.SM}set handleDistance(t){U.i(t,"number",RotatingTool,"handleDistance"),this.SM=t}}class PanningTool extends Tool{kM;PM;ba;Hl;MM;CM;NM;AM;TM;t1;s0;LM;DM;FM;RM;IM;OM;constructor(t){super(),this.name="Panning",this.kM=new Point,this.PM=1,this.ba=0,this.Hl=!1,this.MM=0,this.CM=25,this.NM=100,this.AM=10;const i=this;this.TM=()=>{const e=i.diagram;e!==null&&e.Bi(root.document,"scroll",i.TM,!1),i.stopTool()},this.t1=!1,this.s0=new Point,this.LM=new Point,this.DM=0,this.FM=0,this.RM=!1,this.IM=!1,this.OM=!1,t&&Object.assign(this,t)}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return!(!t.allowHorizontalScroll&&!t.allowVerticalScroll||!this.canStartButton()||t.currentTool!==this&&!this.isBeyondDragSize()&&!t.lastInput.isMultiTouch)}doActivate(){const t=this.diagram;t!==null&&(this.bubbles?(t.lastInput.bubbles=!0,t.Gt(root.document,"scroll",this.TM,!1)):(t.currentCursor="move",t.isMouseCaptured=!0,this.originalPosition.f(t.position),this.originalScale=t.scale,this.originalAngle=0,this.startedPanning=!1,this.startedScaling=!1,this.startedRotating=!1,this.setInitial()),this.isActive=!0)}setInitial(){const t=this.diagram;if(t===null)return;const i=t.lastInput;if(i.isMultiTouch){i.OT(this.s0);const e=i.getMultiTouchViewPoint(0,Point.a()),s=i.getMultiTouchViewPoint(1,Point.a());this.initialPosition.x=(e.x+s.x)/2,this.initialPosition.y=(e.y+s.y)/2;const n=s.x-e.x,o=s.y-e.y;this.initialDistance=Math.sqrt(n*n+o*o),this.initialAngle=e.directionPoint(s),Point.o(e),Point.o(s)}else this.s0.f(t.firstInput.documentPoint),this.initialPosition.x=i.viewPoint.x,this.initialPosition.y=i.viewPoint.y,this.initialDistance=0,this.initialAngle=0}doDeactivate(){const t=this.diagram;t!==null&&(t.currentCursor="",t.isMouseCaptured=!1,this.isActive=!1)}doCancel(){const t=this.diagram;t!==null&&(t.position=this.originalPosition,t.scale=this.originalScale,this.stopTool())}doMouseDown(){this.setInitial()}doMouseMove(){this.hL()}doMouseUp(){this.hL(),this.stopTool()}hL(){const t=this.diagram;if(!this.isActive||!t)return;if(this.bubbles){t.lastInput.bubbles=!0;return}const i=t.lastInput,e=t.position,s=Point.V(i.documentPoint.x,i.documentPoint.y);i.isMultiTouch?(i.OT(s),this.t1=!0):(this.t1&&this.s0.f(s),this.t1=!1),Point.o(s);const n=this.s0;let o=e.x+n.x-s.x,r=e.y+n.y-s.y;t.allowHorizontalScroll||(o=e.x),t.allowVerticalScroll||(r=e.y);const l=Point.V(o,r);!this.startedPanning&&Math.sqrt(l.distanceSquaredPoint(e))>this.positionDistanceThreshold/t.scale&&(this.startedPanning=!0);let h=t.scale,a=0,c=0,f=0,u=Point.V(i.viewPoint.x,i.viewPoint.y);if(i.isMultiTouch){const d=i.getMultiTouchViewPoint(0,Point.a()),m=i.getMultiTouchViewPoint(1,Point.a()),g=m.x-d.x,p=m.y-d.y;if(c=Math.sqrt(g*g+p*p),f=d.directionPoint(m),u.x=(m.x+d.x)/2,u.y=(m.y+d.y)/2,Point.o(d),Point.o(m),this.startedScaling||Math.abs(c-this.initialDistance)>this.scaleDifferenceThreshold){this.startedScaling=!0;const x=c/this.initialDistance;h=this.originalScale*x}const y=f-this.initialAngle;(this.startedRotating||Math.abs(y)>this.angleThreshold)&&(this.startedRotating=!0,a=this.originalAngle+y)}this.pan(l,h,a,c,f,u),Point.o(l)}pan(t,i,e,s,n,o){const r=this.diagram;if(r&&(r.position=t,s>this.scaleMinimumThreshold&&i!==r.scale)){const l=r.zoomPoint;r.zoomPoint=o,r.scale=i,r.zoomPoint=l}}get bubbles(){return this.Hl}set bubbles(t){U.i(t,"boolean",PanningTool,"bubbles"),this.Hl=t}get originalPosition(){return this.kM}set originalPosition(t){this.kM.set(t)}get initialPosition(){return this.LM}set initialPosition(t){this.LM.set(t)}get positionDistanceThreshold(){return this.MM}set positionDistanceThreshold(t){this.MM=t}get startedPanning(){return this.RM}set startedPanning(t){this.RM=t}get originalScale(){return this.PM}set originalScale(t){t>0&&(this.PM=t)}get initialDistance(){return this.DM}set initialDistance(t){this.DM=t}get scaleDifferenceThreshold(){return this.CM}set scaleDifferenceThreshold(t){this.CM=t}get scaleMinimumThreshold(){return this.NM}set scaleMinimumThreshold(t){this.NM=t}get startedScaling(){return this.IM}set startedScaling(t){this.IM=t}get originalAngle(){return this.ba}set originalAngle(t){this.ba=t}get initialAngle(){return this.FM}set initialAngle(t){this.FM=t}get angleThreshold(){return this.AM}set angleThreshold(t){this.AM=t}get startedRotating(){return this.OM}set startedRotating(t){this.OM=t}}class ClickSelectingTool extends Tool{constructor(t){super(),this.name="ClickSelecting",t&&Object.assign(this,t)}canStart(){return!(!this.isEnabled||this.isBeyondDragSize())}doMouseUp(){this.isActive&&(this.standardMouseSelect(),this.standardMouseClick()||this.diagram.lastInput.isTouchEvent&&this.diagram.toolManager.doToolTip()),this.stopTool()}}class ActionTool extends Tool{ef;constructor(t){super(),this.name="Action",this.ef=null,t&&Object.assign(this,t)}canStart(){if(!this.isEnabled)return!1;const t=this.diagram,i=t.lastInput,e=t.findObjectAt(i.documentPoint,s=>{for(;s.panel!==null;){if(s.isActionable)return s;s=s.panel}return s});return e!==null&&e.isActionable?(this.ef=e,t.Jc=t.findObjectAt(i.documentPoint,null,null),!0):!1}doMouseDown(){if(!this.isActive)this.canStart()&&this.doActivate();else{const i=this.diagram.lastInput,e=this.ef;if(e===null)return;i.targetObject=e,e.actionDown!==null&&e.actionDown(i,e)}}doMouseMove(){if(this.isActive){const i=this.diagram.lastInput,e=this.ef;if(e===null)return;i.targetObject=e,e.actionMove!==null&&e.actionMove(i,e)}}doMouseUp(){if(this.isActive){const i=this.diagram.lastInput,e=this.ef;if(e===null)return;i.targetObject=e,e.actionUp!==null&&e.actionUp(i,e),this.standardMouseClick(s=>{for(;s.panel!==null;){if(s.isActionable&&s===e)return s;s=s.panel}return s},s=>s===e)}this.stopTool()}doCancel(){const i=this.diagram.lastInput,e=this.ef;e!==null&&(i.targetObject=e,e.actionCancel!==null&&e.actionCancel(i,e),this.stopTool())}doStop(){this.ef=null}}class ClickCreatingTool extends Tool{_l;EM;_c;BM;constructor(t){super(),this.name="ClickCreating",this._l=null,this.EM=!0,this._c=!1,this.BM=new Point(0,0),t&&Object.assign(this,t)}canStart(){if(!this.isEnabled||this.archetypeNodeData===null)return!1;const t=this.diagram;if(t.isReadOnly||t.isModelReadOnly||!t.allowInsert||!this.canStartButton()||this.isBeyondDragSize())return!1;if(this.isDoubleClick){if(t.lastInput.clickCount===1&&(this.BM=t.lastInput.viewPoint.copy()),t.lastInput.clickCount!==2||this.isBeyondDragSize(this.BM))return!1}else if(t.lastInput.clickCount!==1)return!1;return!(t.currentTool!==this&&t.findPartAt(t.lastInput.documentPoint,!0)!==null)}doMouseUp(){const t=this.diagram;this.isActive&&this.insertPart(t.lastInput.documentPoint),this.stopTool()}insertPart(t){const i=this.diagram,e=this.archetypeNodeData;if(e===null)return null;let s=null;try{if(i.O("ChangingSelection",i.selection),this.startTransaction(this.name),e instanceof Part)e.ze()&&(e.Ut(),s=e.copy(),s!==null&&i.add(s));else if(e!==null){const n=i.model.copyNodeData(e);i.model.addNodeData(n),s=i.findPartForData(n)}if(s!==null){const n=Point.V(t.x,t.y);this.isGridSnapEnabled&&this.diagram.VM(s,t,n),s.location=n,i.allowSelect&&(i.clearSelection(!0),s.isSelected=!0),Point.o(n)}i.invalidateDocumentBounds(),this.transactionResult=this.name,i.O("PartCreated",s)}finally{this.stopTransaction(),i.O("ChangedSelection",i.selection)}return s}get archetypeNodeData(){return this._l}set archetypeNodeData(t){t!==null&&U.Xo(t,ClickCreatingTool,"archetypeNodeData"),this._l=t}get isDoubleClick(){return this.EM}set isDoubleClick(t){U.i(t,"boolean",ClickCreatingTool,"isDoubleClick"),this.EM=t}get isGridSnapEnabled(){return this._c}set isGridSnapEnabled(t){U.i(t,"boolean",ClickCreatingTool,"isGridSnapEnabled"),this._c=t}}class DragSelectingTool extends Tool{pa;zM;th;constructor(t){super(),this.name="DragSelecting",this.pa=175,this.zM=!1,this.th=new Part({layerName:"Tool",selectable:!1}).add(new Shape("Rectangle",{name:"SHAPE",fill:null,stroke:"magenta"}).theme("stroke","dragSelect")).Ut(),t&&Object.assign(this,t)}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(!t.allowSelect||!this.canStartButton())return!1;if(t.currentTool!==this){if(!this.isBeyondDragSize())return!1;const i=t.lastInput;if(i.timestamp-t.firstInput.timestamp<this.delay||t.findPartAt(i.documentPoint,!0)!==null)return!1}return!0}doActivate(){const t=this.diagram;this.isActive=!0,t.isMouseCaptured=!0,t.skipsUndoManager=!0,this.box&&t.add(this.box),this.doMouseMove()}doDeactivate(){const t=this.diagram;t.stopAutoScroll(),this.box&&t.remove(this.box),t.skipsUndoManager=!1,t.isMouseCaptured=!1,this.isActive=!1}doMouseMove(){const t=this.diagram;if(this.isActive&&this.box!==null){const i=this.computeBoxBounds();let e=this.box.findObject("SHAPE");e===null&&(e=this.box.findMainElement());const s=Size.a().e(i.width,i.height);e!==null&&(e.desiredSize=s),this.box.sf(i.x,i.y,!1),Size.o(s),(t.allowHorizontalScroll||t.allowVerticalScroll)&&t.doAutoScroll(t.lastInput.viewPoint)}}doMouseUp(){if(this.isActive){const t=this.diagram;this.box&&t.remove(this.box);try{t.currentCursor="wait",t.O("ChangingSelection",t.selection),this.selectInRect(this.computeBoxBounds()),t.O("ChangedSelection",t.selection)}finally{t.currentCursor=""}}this.stopTool()}computeBoxBounds(){const t=this.diagram;return new Rect(t.firstInput.documentPoint,t.lastInput.documentPoint)}findInRect(t){return this.diagram.findPartsIn(t,this.isPartialInclusion)}selectInRect(t){const i=this.diagram,e=i.lastInput,s=this.findInRect(t);if(U.zo?e.meta:e.control)if(e.shift){const n=s.iterator;for(;n.next();){const o=n.value;o.isSelected&&(o.isSelected=!1)}}else{const n=s.iterator;for(;n.next();){const o=n.value;o.isSelected=!o.isSelected}}else if(e.shift){const n=s.iterator;for(;n.next();){const o=n.value;o.isSelected||(o.isSelected=!0)}}else{const n=new List,o=i.selection.iterator;for(;o.next();){const h=o.value;s.has(h)||n.add(h)}const r=n.iterator;for(;r.next();){const h=r.value;h.isSelected=!1}const l=s.iterator;for(;l.next();){const h=l.value;h.isSelected||(h.isSelected=!0)}}}get delay(){return this.pa}set delay(t){U.i(t,"number",DragSelectingTool,"delay"),this.pa=t}get isPartialInclusion(){return this.zM}set isPartialInclusion(t){U.i(t,"boolean",DragSelectingTool,"isPartialInclusion"),this.zM=t}get box(){return this.th}set box(t){t!==null&&(U.s(t,Part,DragSelectingTool,"box"),t.Ut()),this.th=t}}class HTMLInfo{i1;e1;XM;YM;constructor(t){this.i1=null,this.e1=null,this.XM=null,this.YM=null,t&&Object.assign(this,t)}get mainElement(){return this.XM}set mainElement(t){t!==null&&U.s(t,HTMLElement,HTMLInfo,"mainElement"),this.XM=t}get show(){return this.i1}set show(t){this.i1!==t&&(t!==null&&U.C(t,HTMLInfo,"show"),this.i1=t)}get hide(){return this.e1}set hide(t){this.e1!==t&&(t!==null&&U.C(t,HTMLInfo,"hide"),this.e1=t)}get valueFunction(){return this.YM}set valueFunction(t){this.YM=t}}class ContextMenuButtonInfo{wi;s1;nf;constructor(t,i,e){this.wi=t,this.s1=i,this.nf=e}}class ContextMenuTool extends Tool{KM;o1;UM;GM;l1;h1;o0;constructor(t){super(),this.name="ContextMenu",this.KM=null,this.o1=null,this.UM=null,this.GM=new Point,this.l1=null,this.o0=!1;const i=this;this.h1=()=>i.stopTool(),t&&Object.assign(this,t)}lO(){const t=new HTMLInfo;t.show=(r,l,h)=>h.showDefaultContextMenu(),t.hide=(r,l)=>l.hideDefaultContextMenu(),ContextMenuTool.td=t;const i=this;this.h1=()=>i.stopTool();const e=U.Re("div"),s=U.Re("div");e.style.cssText="top: 0px;z-index:10002;position: fixed;display: none;text-align: center;left: 25%;width: 50%;background-color: #F5F5F5;padding: 16px;border: 16px solid #444;border-radius: 10px;margin-top: 10px",s.style.cssText="z-index:10001;position: fixed;display: none;top: 0;left: 0;width: 100%;height: 100%;background-color: black;opacity: 0.8;";const n=U.Re("style");root.document.getElementsByTagName("head")[0].appendChild(n),n.sheet.insertRule(".goCXul { list-style: none; }",0),n.sheet.insertRule(".goCXli {font:700 1.5em Helvetica, Arial, sans-serif;position: relative;min-width: 60px; }",0),n.sheet.insertRule(".goCXa {color: #444;display: inline-block;padding: 4px;text-decoration: none;margin: 2px;border: 1px solid gray;border-radius: 10px; }",0);const o=this.diagram;o!==null&&(o.Gt(e,"contextmenu",ContextMenuTool.Sa,!1),o.Gt(e,"selectstart",ContextMenuTool.Sa,!1),o.Gt(s,"contextmenu",ContextMenuTool.Sa,!1)),e.className="goCXforeground",s.className="goCXbackground",root.document.body&&(root.document.body.appendChild(e),root.document.body.appendChild(s)),ContextMenuTool.r0=e,ContextMenuTool.l0=s,ContextMenuTool.qM=!0}static td=null;static qM=!1;static l0;static r0;static Sa(t){return t.preventDefault(),!1}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return this.isBeyondDragSize()||!t.lastInput.right||t.lastInput.clickCount>1?!1:!!(t.lastInput.isTouchEvent&&this.defaultTouchContextMenu!==null||this.findObjectWithContextMenu()!==null)}doStart(){const t=this.diagram;this.GM.set(t.firstInput.documentPoint)}doStop(){this.hideContextMenu(),this.currentObject=null,this.o0=!1}findObjectWithContextMenu(t){t===void 0&&(t=null);const i=this.diagram,e=i.lastInput;let s=null;if(t instanceof Diagram||(t instanceof GraphObject?s=t:s=i.findObjectAt(e.documentPoint,null,n=>!n.layer?.isTemporary)),s!==null){let n=s;for(;n!==null;){if(n.contextMenu!==null)return n;n=n.panel}if(i.lastInput.isTouchEvent&&this.defaultTouchContextMenu)return s.part}else if(i.contextMenu!==null)return i;return null}doActivate(){}doMouseDown(){if(super.doMouseDown(),this.isActive&&this.currentContextMenu instanceof Adornment){const t=this.diagram.toolManager.findTool("Action");t!==null&&t.canStart()&&(t.doActivate(),t.doMouseDown(),t.doDeactivate())}this.diagram.toolManager.mouseDownTools.has(this)&&this.doContextClick()}doMouseUp(){if(this.isActive&&this.currentContextMenu instanceof Adornment){const t=this.diagram.toolManager.findTool("Action");t!==null&&t.canStart()&&(t.doActivate(),t.doCancel(),t.doDeactivate())}this.doContextClick()}doContextClick(){const t=this.diagram;if(!this.isActive)this.canStart()&&(this.openMenu(!0),this.isActive||this.stopTool());else{const i=this.currentContextMenu;if(i===null)return;let e=null;i instanceof HTMLInfo||(e=t.findObjectAt(t.lastInput.documentPoint,null,null),e!==null&&e.isContainedBy(i)&&this.standardMouseClick(null,null)),this.maybeStopTool(e)}}maybeStopTool(t){this.stopTool(),this.canStart()&&(this.diagram.currentTool=this,this.doMouseUp())}openMenu(t,i){if(i===void 0&&(i=null),this.o0)return;this.o0=!0;let e=!1;if(i instanceof Diagram){const s=this.diagram.lastInput;s.targetObject=null,e=this.YT(null,s,this.diagram)}else t&&this.standardMouseSelect(),e=this.standardMouseClick();if(this.o0=!1,!e){this.isActive=!0;const s=ContextMenuTool.td;if(i===null&&(i=this.findObjectWithContextMenu()),i!==null){const n=i.contextMenu;n!==null?(this.currentObject=i instanceof GraphObject?i:null,this.showContextMenu(n,this.currentObject)):s!==null&&this.showContextMenu(s,this.currentObject)}else s!==null&&this.showContextMenu(s,null);this.currentContextMenu instanceof Adornment&&!this.currentContextMenu.visible&&this.stopTool()}}doMouseMove(){const t=this.diagram.toolManager.findTool("Action");t!==null&&t.doMouseMove(),this.isActive&&this.diagram.toolManager.doMouseMove()}showContextMenu(t,i){Debug&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("showContextMenu:contextMenu must be an Adornment or HTMLInfo."),i!==null&&U.s(i,GraphObject,ContextMenuTool,"showContextMenu:obj");const e=this.diagram;if(t!==this.currentContextMenu&&this.hideContextMenu(),t instanceof Adornment){const s=t;s.layerName="Tool",s.selectable=!1,s.scale=1/e.scale,s.category=this.name,s.hasPlaceholder()&&(s.placeholder.scale=e.scale);const n=s.diagram;n!==null&&n!==e&&n.remove(s),e.add(s),i!==null?s.adornedObject=i:s.data=e.model,s.ensureBounds(),this.positionContextMenu(s,i)}else t instanceof HTMLInfo&&t.show!==null&&t.show(i,e,this);this.currentContextMenu=t}positionContextMenu(t,i){if(t.hasPlaceholder())return;const e=t,s=this.diagram,n=s.lastInput.documentPoint.copy(),o=e.measuredBounds,r=s.viewportBounds;s.lastInput.isTouchEvent&&(n.x-=o.width),n.x+o.width>r.right&&(n.x-=o.width+5/s.scale),n.x<r.x&&(n.x=r.x),n.y+o.height>r.bottom&&(n.y-=o.height+5/s.scale),n.y<r.y&&(n.y=r.y),e.position=n}hideContextMenu(){const t=this.diagram,i=this.currentContextMenu;i!==null&&(i instanceof Adornment?(t.remove(i),this.o1!==null&&this.o1.removeAdornment(i.category),i.data=null,i.adornedObject=null):i instanceof HTMLInfo&&(i.hide!==null?i.hide(t,this):i.mainElement!==null&&(i.mainElement.style.display="none")),this.currentContextMenu=null,this.standardMouseOver())}hO(){const t=this,i=new List;return i.add(new ContextMenuButtonInfo("Copy",e=>e.commandHandler.copySelection(),e=>e.commandHandler.canCopySelection())),i.add(new ContextMenuButtonInfo("Cut",e=>e.commandHandler.cutSelection(),e=>e.commandHandler.canCutSelection())),i.add(new ContextMenuButtonInfo("Delete",e=>e.commandHandler.deleteSelection(),e=>e.commandHandler.canDeleteSelection())),i.add(new ContextMenuButtonInfo("Paste",e=>e.commandHandler.pasteSelection(t.mouseDownPoint),e=>e.commandHandler.canPasteSelection(t.mouseDownPoint))),i.add(new ContextMenuButtonInfo("Select All",e=>e.commandHandler.selectAll(),e=>e.commandHandler.canSelectAll())),i.add(new ContextMenuButtonInfo("Undo",e=>e.commandHandler.undo(),e=>e.commandHandler.canUndo())),i.add(new ContextMenuButtonInfo("Redo",e=>e.commandHandler.redo(),e=>e.commandHandler.canRedo())),i.add(new ContextMenuButtonInfo("Scroll To Part",e=>e.commandHandler.scrollToPart(),e=>e.commandHandler.canScrollToPart())),i.add(new ContextMenuButtonInfo("Zoom To Fit",e=>e.commandHandler.zoomToFit(),e=>e.commandHandler.canZoomToFit())),i.add(new ContextMenuButtonInfo("Reset Zoom",e=>e.commandHandler.resetZoom(),e=>e.commandHandler.canResetZoom())),i.add(new ContextMenuButtonInfo("Group Selection",e=>e.commandHandler.groupSelection(),e=>e.commandHandler.canGroupSelection())),i.add(new ContextMenuButtonInfo("Ungroup Selection",e=>e.commandHandler.ungroupSelection(),e=>e.commandHandler.canUngroupSelection())),i.add(new ContextMenuButtonInfo("Edit Text",e=>e.commandHandler.editTextBlock(),e=>e.commandHandler.canEditTextBlock())),i}showDefaultContextMenu(){const t=this.diagram;this.l1===null&&(this.l1=this.hO()),ContextMenuTool.r0.innerHTML="",ContextMenuTool.l0.addEventListener("pointerdown",this.h1,!1);const i=this,e=U.Re("ul");e.className="goCXul",ContextMenuTool.r0.appendChild(e),e.innerHTML="";const s=this.l1.iterator;for(;s.next();){const n=s.value,o=n.s1,r=n.nf;if(!U.at(o)||U.at(r)&&!r(t))continue;const l=U.Re("li");l.className="goCXli";const h=U.Re("a");h.className="goCXa",h.href="#",h.s1=o,h.addEventListener("pointerdown",function(a){return this.s1(t),i.stopTool(),a.preventDefault(),!1},!1),h.textContent=n.wi,l.appendChild(h),e.appendChild(l)}ContextMenuTool.r0.style.display="block",ContextMenuTool.l0.style.display="block"}hideDefaultContextMenu(){if(this.currentContextMenu===null||this.currentContextMenu!==ContextMenuTool.td)return;ContextMenuTool.r0.style.display="none",ContextMenuTool.l0.style.display="none";const t=this.diagram;t!==null&&t.Bi(ContextMenuTool.l0,"pointerdown",this.h1,!1),this.currentContextMenu=null}doMouseWheel(){this.standardMouseWheel()}get currentContextMenu(){return this.KM}set currentContextMenu(t){Debug&&t!==null&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("ContextMenuTool.currentContextMenu must be an Adornment or HTMLInfo."),this.KM=t,this.o1=t instanceof Adornment?t.adornedPart:null}get defaultTouchContextMenu(){return ContextMenuTool.qM===!1&&ContextMenuTool.td===null&&Diagram.isUsingDOM()&&this.lO(),ContextMenuTool.td}set defaultTouchContextMenu(t){Debug&&t!==null&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("ContextMenuTool.defaultTouchContextMenu must be an Adornment or HTMLInfo."),t===null&&(ContextMenuTool.qM=!0),ContextMenuTool.td=t}get currentObject(){return this.UM}set currentObject(t){t!==null&&U.s(t,GraphObject,ContextMenuTool,"currentObject"),this.UM=t}get mouseDownPoint(){return this.GM}}var TextEditingAccept=(w=>(w[w.LostFocus=1]="LostFocus",w[w.MouseDown=2]="MouseDown",w[w.Tab=3]="Tab",w[w.Enter=4]="Enter",w))(TextEditingAccept||{}),TextEditingStarting=(w=>(w[w.SingleClick=1]="SingleClick",w[w.SingleClickSelected=2]="SingleClickSelected",w[w.DoubleClick=3]="DoubleClick",w))(TextEditingStarting||{}),TextEditingState=(w=>(w[w.None=1]="None",w[w.Active=2]="Active",w[w.Editing=3]="Editing",w[w.Validating=4]="Validating",w[w.Invalid=5]="Invalid",w[w.Validated=6]="Validated",w))(TextEditingState||{});class TextEditingTool extends Tool{Xe;HM;vM;ih;Jt;WM;jM;JM;a1;c1;constructor(t){super(),this.name="TextEditing",this.Xe=new TextBlock,this.HM=null,this.vM=2,this.ih=null,this.Jt=1,this.WM=1,this.jM=!0,this.JM=null,this.a1=new HTMLInfo,this.c1=null,this.aO(this.a1),t&&Object.assign(this,t)}static LostFocus=1;static MouseDown=2;static Tab=3;static Enter=4;static SingleClick=1;static SingleClickSelected=2;static DoubleClick=3;static StateNone=1;static StateActive=2;static StateEditing=3;static StateValidating=4;static StateInvalid=5;static StateValidated=6;aO(t){if(!Diagram.isUsingDOM())return;const i=U.Re("textarea");this.c1=i;const e=this;i.addEventListener("input",function(s){if(e.textBlock===null)return;const n=e.measureTemporaryTextBlock(this.value),o=this.textScale;this.style.width=20+Math.max(e.textBlock.measuredBounds.width,n.measuredBounds.width)*o+"px",this.rows=Math.max(e.textBlock.lineCount,n.lineCount)},!1),i.addEventListener("keydown",function(s){if(s.isComposing||e.textBlock===null)return;const n=s.key;if(n==="Enter"){e.textBlock.isMultiline===!1&&s.preventDefault(),e.acceptText(4);return}else if(n==="Tab"){e.acceptText(3),s.preventDefault();return}else n==="Escape"&&(e.doCancel(),e.diagram!==null&&e.diagram.doFocus())},!1),i.addEventListener("focus",function(s){e.cO(s)},!1),i.addEventListener("blur",function(s){e.fO(s)},!1),t.valueFunction=()=>i.value,t.mainElement=i,t.show=(s,n,o)=>{if(!(s instanceof TextBlock)||!n||!n.div||!(o instanceof TextEditingTool))return;if(o.state===5){i.style.border="3px solid red",i.focus();return}const r=s.getDocumentPoint(Spot.Center),l=n.position,h=n.scale;let a=s.getDocumentScale()*h;a<o.minimumEditorScale&&(a=o.minimumEditorScale);const c=s.naturalBounds.width*a+6,f=s.naturalBounds.height*a+2,u=(r.x-l.x)*h,d=(r.y-l.y)*h,m=s.verticalAlignment,p=(s.lineHeight+s.spacingAbove+s.spacingBelow)*s.lineCount*a,y=.5*f-.5*p,x=m.y*f-m.y*p+m.offsetY-y-p/2;i.value=s.text,n.div.style.font=s.font;const b=1;i.style.position="absolute",i.style.zIndex="100",i.style.font="inherit",i.style.fontSize=a*100+"%",i.style.lineHeight="normal",i.style.width=c+"px",i.style.left=(u-c/2|0)-b+"px",i.style.top=(d+x|0)-b+"px",i.style.textAlign=s.textAlign,i.style.margin="0",i.style.padding=b+"px",i.style.border="0",i.style.outline="none",i.style.whiteSpace="pre-wrap",i.style.overflow="hidden",i.rows=s.lineCount,i.textScale=a,i.className="goTXarea",n.div.appendChild(i),i.focus(),o.selectsTextOnActivate&&(i.select(),i.setSelectionRange(0,9999))},t.hide=(s,n)=>{s.div&&s.div.removeChild(i)}}get textBlock(){return this.HM}set textBlock(t){t!==null&&U.s(t,TextBlock,TextEditingTool,"textBlock"),this.HM=t}get currentTextEditor(){return this.JM}set currentTextEditor(t){this.JM=t}get defaultTextEditor(){return this.a1}set defaultTextEditor(t){Debug&&!(t instanceof HTMLInfo)&&U.n("TextEditingTool.defaultTextEditor must be an HTMLInfo."),this.a1=t}get starting(){return this.vM}set starting(t){U.j(t,TextEditingStarting,"TextEditingStarting"),this.vM=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(t===null||t.isReadOnly||TextEditingTool.of&&TextEditingTool.of!==this&&(TextEditingTool.of.acceptText(2),TextEditingTool.of&&TextEditingTool.of!==this)||!this.canStartButton()||this.isBeyondDragSize())return!1;const i=t.lastInput.documentPoint,e=t.findObjectAt(i);if(e===null||!(e instanceof TextBlock)||!e.editable||e.part===null||!e.part.canEdit())return!1;const s=e.part;return!(s===null||this.starting===2&&!s.isSelected||this.starting===3&&t.lastInput.clickCount<2)}doStart(){TextEditingTool.of=this,this.textBlock!==null&&this.doActivate()}doActivate(){if(this.isActive)return;const t=this.diagram;if(t===null)return;let i=this.textBlock;if(i===null&&(i=t.findObjectAt(t.lastInput.documentPoint)),i===null||!(i instanceof TextBlock)||(this.textBlock=i,i.part===null))return;t.animationManager.stopAnimation(),this.isActive=!0,this.Jt=2;let s=this.defaultTextEditor;i.textEditor!==null&&(s=i.textEditor),this.Xe=this.textBlock.copy();const n=new Rect(this.textBlock.getDocumentPoint(Spot.TopLeft),this.textBlock.getDocumentPoint(Spot.BottomRight));t.scrollToRect(n),s!==null&&s.show!==null&&s.show(i,t,this),this.currentTextEditor=s}doCancel(){this.stopTool()}doMouseUp(){this.canStart()&&this.doActivate()}doMouseDown(){this.isActive&&this.acceptText(2)}acceptText(t){switch(t){case 2:this.Jt===6?this.currentTextEditor instanceof HTMLElement&&this.currentTextEditor.focus():(this.Jt===2||this.Jt===5||this.Jt===3)&&(this.Jt=4,this.aL());break;case 1:case 4:case 3:if(t===4&&this.textBlock!==null&&this.textBlock.isMultiline===!0)return;(this.Jt===2||this.Jt===5||this.Jt===3)&&(this.Jt=4,this.aL());break}}aL(){const t=this.textBlock,i=this.diagram,e=this.currentTextEditor;if(t!==null&&e!==null){const s=t.text;let n="";if(e.valueFunction!==null&&(n=e.valueFunction()),!this.isValidText(t,s,n)){this.Jt=5,this.doError(s,n);return}this.startTransaction(this.name),this.Jt=6,this.transactionResult=this.name,t.text=n,this.doSuccess(s,n),i!==null&&i.O("TextEdited",t,s),this.stopTransaction(),this.stopTool(),i!==null&&i.doFocus()}}doError(t,i){const e=this.textBlock;if(e===null)return;e.errorFunction!==null&&e.errorFunction(this,t,i);const s=this.currentTextEditor;s!==null&&s.show!==null&&s.show(e,this.diagram,this)}doSuccess(t,i){const e=this.textBlock;e!==null&&e.textEdited!==null&&e.textEdited(e,t,i)}doDeactivate(){const t=this.diagram;if(t!==null){if(this.Jt=1,this.currentTextEditor!==null){const i=this.currentTextEditor;i!==null&&i.hide!==null&&i.hide(t,this)}this.textBlock=null,this.isActive=!1}}doStop(){TextEditingTool.of=null}cO(t){if(this.currentTextEditor===null||this.state===1)return;const i=this.c1;this.Jt===2&&(this.Jt=3),U.at(i.select)&&this.selectsTextOnActivate&&(i.select(),i.setSelectionRange(0,9999))}fO(t){if(this.currentTextEditor===null||this.state===1)return;const i=this.c1;U.at(i.focus)&&i.focus(),U.at(i.select)&&this.selectsTextOnActivate&&(i.select(),i.setSelectionRange(0,9999))}isValidText(t,i,e){U.s(t,TextBlock,TextEditingTool,"isValidText:textblock");const s=this.textValidation;if(s!==null&&!s(t,i,e))return!1;const n=t.textValidation;return!(n!==null&&!n(t,i,e))}get textValidation(){return this.ih}set textValidation(t){t!==null&&U.C(t,TextEditingTool,"textValidation"),this.ih=t}get minimumEditorScale(){return this.WM}set minimumEditorScale(t){t!==null&&U.i(t,"number",TextEditingTool,"minimumEditorScale"),this.WM=t}get selectsTextOnActivate(){return this.jM}set selectsTextOnActivate(t){t!==null&&U.i(t,"boolean",TextEditingTool,"selectsTextOnActivate"),this.jM=t}get state(){return this.Jt}set state(t){this.Jt!==t&&(U.j(t,TextEditingState,"TextEditingState"),this.Jt=t)}measureTemporaryTextBlock(t){const i=this.Xe;return i.text=t,this.textBlock!==null&&i.yt(this.textBlock.eh,1/0),i}static of=null}var AnimationStyle=(w=>(w[w.Default=1]="Default",w[w.AnimateLocations=2]="AnimateLocations",w[w.None=3]="None",w))(AnimationStyle||{});class AnimationManager{c;Vi;Wi;Kr;lo;Go;$M;ZM;h0;f1;Li;rf;Ln;a0;ka;u1;c0;d1;lf;Zu;f0;constructor(t){this.c=Diagram.Qm(),this.Vi=!1,this.h0=!1,this.f1=!1,this.Li=!1,this.rf=!1,this.d1=!0,this.lf=1,this.Zu=!1,this.Wi=!0,this.Kr=!1,this.Go=600,this.$M=!1,this.ZM=!1,this.lo=new GSet,this.Ln=new Animation,this.a0=new Animation,this.Ln.Is=this,this.ka=new GSet,this.u1=new GSet,this.c0=new GSet,this.f0=new GSet,t&&Object.assign(this,t)}qo(t){this.c=t}fV(){return this.c}canStart(t){return!0}nh(t){return!this.Wi||!this.canStart(t)?!1:(this.lo.add(t),this.defaultAnimation.isAnimating&&this.stopAnimation(),this.c.zi(),this.Li=!0,!0)}getBundleAnimation(){return this.a0}QM(){if(!this.Wi||(this.a0.Pe.count>0&&this.a0.start(),!this.Li))return;const t=this.Ln,i=this.c,e=this.lo.has("Model");if(e&&(this.rf=!0,this.lf===1?(t.isViewportUnconstrained=!0,t.Pe.clear(),t.add(i,"position",i.position.copy().offset(0,-200),i.position),t.add(i,"opacity",0,1)):this.lf===3&&t.Pe.clear(),this.lf===2&&i.g1.equals(i.wt)?this.d1=!0:this.d1=!1,i.O("InitialAnimationStarting",this)),e&&!this.Kr||t.Pe.count===0){this.lo.clear(),this.Li=!1,t.Pe.clear(),t.m1(i),this.rf=!1,i.L();return}this.lo.clear(),i.Ur=!1;const s=t.Pe.get(i);i.autoScale!==1&&s!==null&&(delete s.gi.scale,delete s.Os.scale);const n=this;root.requestAnimationFrame(()=>{n.Li===!1||t.Vi||(i._M(),n.Li=!1,t.start(),t.Vi&&(n.ed(),i.invalidateDocumentBounds(),t.cL(0),i.Or(!0),n.sd(),i.O("AnimationStarting",n)))})}t2(){return this.lo.has("Trigger")&&this.lo.count===1}fL(t,i,e,s){this.isTicking||this.t2()||t instanceof Link&&(t.fromNode!==null||t.toNode!==null)||this.Ln.add(t,"position",i,e,s)}p1(t){return this.Ln.p1(t)}i2(t){return this.Ln.i2(t)}uO(t){const i=this.ka,e=this;function s(){if(e.c0.count>0&&(i.addAll(e.c0),e.c0.clear(),e.Vi=!0),e.Vi===!1||i.count===0){e.f1=!1;return}e.u1.addAll(i);const n=e.u1.iterator;for(;n.next();){const o=n.value;o.Vi!==!1&&(o.dO()?o.uL(!1):o.hf=!0)}if(e.u1.clear(),e.Vi===!1){root.requestAnimationFrame(s);return}e.ed(),e.c.Or(),e.sd(),root.requestAnimationFrame(s)}this.Vi?this.dL(t):(this.Vi=!0,this.f1?this.dL(t):(this.f1=!0,i.add(t),root.requestAnimationFrame(()=>s())))}dL(t){this.c0.add(t)}gO(){const t=this.ka.iterator;for(;t.next();)t.value.hf=!1}ed(){if(this.h0)return;const t=this.c;this.$M=t.skipsUndoManager,this.ZM=t.Me,t.skipsUndoManager=!0,t.Me=!0,this.h0=!0}sd(){const t=this.c;t.skipsUndoManager=this.$M,t.Me=this.ZM,this.h0=!1}stopAnimation(t){const i=this.Ln;if(this.Li===!0&&(this.Li=!1,this.rf=!1,this.lo.clear(),i.mO()&&this.c.requestUpdate()),!this.Vi){i.Pe.clear(),i.m1(this.c);return}if(i.nd(!0),i.m1(null),t===!0){const e=this.ka.toArray();for(let s=0;s<e.length;s++)e[s].nd(!0)}}nd(t){this.ka.delete(t),this.ka.count===0&&(this.Vi=!1,this.c.requestUpdate()),t===this.defaultAnimation&&this.c.O("AnimationFinished",this)}af(t,i){this.Li&&(!this.lo.has("Expand Tree")&&!this.lo.has("Expand SubGraph")||(this.Ln.af(t,i),this.gL(t)))}cf(t,i){this.Li&&(!this.lo.has("Collapse Tree")&&!this.lo.has("Collapse SubGraph")||(this.Ln.cf(t,i),this.Ln.e2(i,"position",i.position,i.position),this.gL(t)))}mL(t,i){!this.Li||t.equals(i)||this.t2()||(this.c.ga||(t=i.copy()),this.Ln.e2(this.c,"position",t,i))}pL(t,i){this.Li&&(this.t2()||this.Ln.add(this.c,"scale",t,i))}s2(t,i){t.is&&(t.Gr=i,this.f0.add(t))}gL(t){const i=t.findLinksConnected();for(;i.next();){const e=i.value;e.is&&(e.Gr=e.points.copy(),this.f0.add(e))}}get isEnabled(){return this.Wi}set isEnabled(t){U.i(t,"boolean",AnimationManager,"isEnabled"),this.Wi=t,t&&this.ka.each(i=>{!i.isAnimating&&i.runCount===1/0&&i.start()})}get duration(){return this.Go}set duration(t){U.i(t,"number",AnimationManager,"duration"),t<1&&U.q(t,">= 1",AnimationManager,"duration"),this.Go=t}get isAnimating(){return this.Vi}get isTicking(){return this.h0}get isInitial(){return this.Kr}set isInitial(t){U.i(t,"boolean",AnimationManager,"isInitial"),this.Kr=t}get defaultAnimation(){return this.Ln}get activeAnimations(){return this.ka}get initialAnimationStyle(){return this.lf}set initialAnimationStyle(t){Debug&&U.j(t,AnimationStyle,"AnimationStyle"),this.lf=t}static w1=new GMap;static defineAnimationEffect(t,i){AnimationManager.w1.set(t,i)}static o2(t,i,e,s,n){t===null&&(t=[0,0,0,0]),i===null&&(i=[0,0,0,0]);let o=t[0],r=t[1];const l=t[2],h=t[3];let a=i[0],c=i[1];const f=i[2],u=i[3];l===0||l===100?(o=a,r=c):(f===0||f===100)&&(a=o,c=r),Math.abs(a-o)>180&&(a>o?o+=360:a+=360);const d=n(e,o,a-o,s)%360,m=n(e,r,c-r,s),g=n(e,l,f-l,s),p=n(e,h,u-h,s);return"hsla("+d+", "+m+"%, "+g+"%, "+p+")"}static Default=1;static AnimateLocations=2;static None=3}{const w=AnimationManager.w1,t=(i,e,s,n,o,r)=>{i.position=new Point(n(o,e.x,s.x-e.x,r),n(o,e.y,s.y-e.y,r))};w.set("position:diagram",t),w.set("position",t),w.set("position:part",(i,e,s,n,o,r)=>{o<r?i.sf(n(o,e.x,s.x-e.x,r),n(o,e.y,s.y-e.y,r),!1):i.position=new Point(n(o,e.x,s.x-e.x,r),n(o,e.y,s.y-e.y,r))}),w.set("location",(i,e,s,n,o,r)=>{o<r?i.sf(n(o,e.x,s.x-e.x,r),n(o,e.y,s.y-e.y,r),!0):i.location=new Point(n(o,e.x,s.x-e.x,r),n(o,e.y,s.y-e.y,r))}),w.set("position:placeholder",(i,e,s,n,o,r)=>{o<r?i.sf(n(o,e.x,s.x-e.x,r),n(o,e.y,s.y-e.y,r),!1):i.position=new Point(n(o,e.x,s.x-e.x,r),n(o,e.y,s.y-e.y,r))}),w.set("position:nodeCollapse",(i,e,s,n,o,r)=>{const l=i.actualBounds,h=s.actualBounds,a=h.x+h.width/2-l.width/2,c=h.y+h.height/2-l.height/2;o<r?i.sf(n(o,e.x,a-e.x,r),n(o,e.y,c-e.y,r),!1):i.position=new Point(n(o,e.x,a-e.x,r),n(o,e.y,c-e.y,r))}),w.set("desiredSize",(i,e,s,n,o,r)=>{i.desiredSize=new Size(n(o,e.width,s.width-e.width,r),n(o,e.height,s.height-e.height,r))}),w.set("width",(i,e,s,n,o,r)=>{i.width=n(o,e,s-e,r)}),w.set("height",(i,e,s,n,o,r)=>{i.height=n(o,e,s-e,r)}),w.set("fill",(i,e,s,n,o,r)=>{i.fill=AnimationManager.o2(e,s,o,r,n)}),w.set("stroke",(i,e,s,n,o,r)=>{i.stroke=AnimationManager.o2(e,s,o,r,n)}),w.set("strokeWidth",(i,e,s,n,o,r)=>{i.strokeWidth=n(o,e,s-e,r)}),w.set("strokeDashOffset",(i,e,s,n,o,r)=>{i.strokeDashOffset=n(o,e,s-e,r)}),w.set("background",(i,e,s,n,o,r)=>{i.background=AnimationManager.o2(e,s,o,r,n)}),w.set("opacity",(i,e,s,n,o,r)=>{i.opacity=n(o,e,s-e,r)}),w.set("scale",(i,e,s,n,o,r)=>{i.scale=n(o,e,s-e,r)}),w.set("angle",(i,e,s,n,o,r)=>{i.angle=n(o,e,s-e,r)})}class Animation{b1;u0;Vi;od;Go;Es;yL;ff;Pe;S1;gi;ho;rd;uf;k1;P1;hf;l2;M1;Is;c;h2;a2;c2;constructor(t){this.c=null,this.Is=null,this.l2=null,this.M1=null,this.h2=!1,this.Vi=!1,this.hf=!1,this.gi=0,this.ho=0,this.b1=Animation.EaseInOutQuad,this.u0=Animation.EaseInOutQuad,this.rd=!1,this.uf=!1,this.k1=1,this.P1=0,this.Go=NaN,this.Es=NaN,this.a2=0,this.od=null,this.yL=Point.kn,this.Pe=new GMap,this.S1=new GMap,this.ff=new GSet,this.c2=1,t&&Object.assign(this,t)}suspend(){this.hf=!0}advanceTo(t,i){i&&(this.hf=!1),this.rd&&t>=this.Es&&(this.uf=!0,t=t-this.Es),this.a2=t,this.uL(!0),this.Is.ed(),this.c.Or(),this.Is.sd(),this.c.redraw()}m1(t){if(this.S1.clear(),this.uf=!1,this.P1=0,this.Es=NaN,this.ff.count>0&&this.ff.clear(),t!==null){const i=t.links;for(;i.next();)i.value.Gr=null}}mO(){return this.Pe.count>0}start(){if(this.Pe.count===0)return this;if(this.Vi)return this;let t=this.c;const i=this.Pe.iterator;for(;i.next();){const s=i.key;t===null&&(s instanceof Diagram?t=s:s instanceof GraphObject&&(t=s.diagram))}if(t!==null)this.c=t,this.Is=t.animationManager;else return this;const e=this.Is;return e.isEnabled===!1?this:(this.Es=isNaN(this.Go)?e.duration:this.Go,this.u0=this.b1,e.rf&&e.lf===1&&this===e.defaultAnimation&&(this.u0=Animation.EaseOutExpo,this.Es=isNaN(this.Go)?e.duration===600?900:e.duration:this.Go),this.c2=t.scrollMode,this.isViewportUnconstrained&&(t.Pa=2),e.ed(),this.ff.each(s=>{s.data=null,t.add(s)}),e.sd(),this.Vi=!0,this.gi=+new Date,this.ho=this.gi+this.Es,e.uO(this),this)}addTemporaryPart(t,i){return t.ze()?(Debug&&(i===void 0&&U.n("addTemporaryPart: Required Diagram argument missing"),t.diagram===i&&U.n("addTemporaryPart: Part already in Diagram, did you mean to pass in a copy?"),this.c!==null&&this.c!==i&&U.n("addTemporaryPart: A different Diagram is already associated with this Animation: "+this.c.toString())),this.ff.add(t),this.c=i,this):this}add(t,i,e,s,n){if(this.c===null&&(t instanceof Diagram?this.c=t:t instanceof GraphObject&&t.diagram!==null&&(this.c=t.diagram)),t instanceof Part){if(!t.isAnimated)return this;i==="position"&&(i="position:part")}return this.e2(t,i,e,s,n),this}e2(t,i,e,s,n){const o=this.Pe;let r,l,h;if(t instanceof Diagram&&i==="position"&&(i="position:diagram"),(i==="fill"||i==="stroke"||i==="background")&&(Brush.Ho(e),Brush.f2(),e=[Brush.ji.n0,Brush.ji.n1,Brush.ji.n2,Brush.ji.n3],Brush.Ho(s),Brush.f2(),s=[Brush.ji.n0,Brush.ji.n1,Brush.ji.n2,Brush.ji.n3]),o.has(t))r=o.get(t),l=r.gi,h=r.Os,l[i]===void 0&&(l[i]=this.ld(e)),h[i]=this.ld(s);else{if(i==="position"&&e.equalsApprox(s))return;l={},h={},l[i]=this.ld(e),h[i]=this.ld(s),r=new AnimationState(l,h,n),o.set(t,r)}const a=l[i];a instanceof Point&&!a.isReal()&&a.f(this.yL),n&&i.indexOf("position:")===0&&t instanceof Part?r.C1.location=this.ld(t.location):n&&(r.C1[i]=this.ld(e))}ld(t){return t instanceof Point||t instanceof Size?t.copy():t}pO(t){const i=this.Pe;if(i.has(t)){const e=i.get(t);e.N1=!0}}p1(t){if(!this.Vi)return!1;const i=this.Pe.get(t);return i!==null&&i.N1}i2(t){if(!this.Vi)return!1;const i=this.Pe.get(t);return i!==null&&!!(i.gi.position||i.gi["position:part"]||i.gi.location)}dO(){if(this.ff.count>0)return!0;const t=this.Pe.iterator;for(;t.next();){const i=t.key;if(i instanceof GraphObject&&i.diagram!==null||i instanceof Diagram)return!0}return!1}uL(t){if(this.hf&&!t)return;const i=this.Is;if(this.Vi===!1)return;const e=+new Date;let s=e>this.ho?this.Es:e-this.gi;t&&(s=this.a2,s<this.Es?(this.gi=+new Date-s,this.ho=this.gi+this.Es):s=this.Es),i.ed(),this.cL(s),this.c.Or(!0),i.sd(),e>this.ho&&(this.rd&&!this.uf?(this.gi=+new Date,this.ho=this.gi+this.Es,this.uf=!0):this.nd(!1))}cL(t){const i=this.Es,e=this.Pe.iterator,s=this.uf;for(;e.next();){const n=e.key;if(n instanceof GraphObject&&n.diagram===null)continue;const o=e.value,r=s?o.Os:o.gi,l=s?o.gi:o.Os,h=AnimationManager.w1;for(const a in l)(a==="position"||a==="position:part")&&(l["position:placeholder"]||l["position:nodeCollapse"])||h.get(a)!==null&&h.get(a)(n,r[a],l[a],this.u0,t,i,this)}}stop(){return this.Vi?(this.nd(!0),this):this}nd(t){if(this.M1!==null&&this.M1.yO(this.l2),!this.Vi)return;const i=this.c,e=this.Is;e.rf=!1,this.Vi=!1,this.hf=!1,e.ed();const s=this.Pe,n=this.ff.iterator;for(;n.next();)i.remove(n.value);const o=this.rd,r=s.iterator,l=AnimationManager.w1;for(;r.next();){const a=r.key,c=r.value,f=o?c.Os:c.gi,u=o?c.gi:c.Os,d=c.C1;for(const m in u)if(l.get(m)!==null){let g=m;c.A1&&(g==="position:nodeCollapse"||g==="position:placeholder")&&(g="position"),l.get(g)(a,f[m],d[m]!==void 0?d[m]:c.A1?f[m]:u[m],this.u0,this.Es,this.Es,this)}c.A1&&d.location!==void 0&&a instanceof Part&&(a.location=d.location),c.N1&&a instanceof Part&&a.Ji(!1)}this.P1++;const h=!t&&this.k1>this.P1;if(!h&&(this===e.a0||this===e.defaultAnimation)&&this.Pe.clear(),i.T1.clear(),i.invalidateDocumentBounds(),i.L(),i.Or(!0),e.defaultAnimation===this){const a=e.f0.iterator;for(;a.next();)a.value.wO();e.f0.clear()}if(i.Or(!0),this.isViewportUnconstrained&&(i.scrollMode=this.c2),e.sd(),h){this.uf=!1,this.start();return}this.m1(null),i.wL(),e.nd(this),this.od&&this.od(this),i.requestUpdate()}af(t,i){const e=i.actualBounds;let s=null;if(i instanceof Group&&(s=i.placeholder),s!==null&&s.visible){const n=s.getDocumentPoint(Spot.TopLeft),o=s.padding;n.x+=o.left,n.y+=o.top,this.add(t,"position",n,t.position,!1)}else this.add(t,"position",new Point(e.x+e.width/2,e.y+e.height/2),t.position,!1);this.add(t,"scale",.01,t.scale,!1),t instanceof Group&&this.xO(t,i)}xO(t,i){const e=t.memberParts;for(;e.next();){const s=e.value;s instanceof Node&&this.af(s,i)}}cf(t,i){if(!t.isVisible())return;let e=null;if(i instanceof Group&&(e=i.placeholder),e!==null&&e.visible){const s=e.getDocumentPoint(Spot.TopLeft),n=e.padding;s.x+=n.left,s.y+=n.top,this.add(t,"position:placeholder",t.position,s,!0)}else this.add(t,"position:nodeCollapse",t.position,i,!0);this.add(t,"scale",t.scale,.01,!0),this.pO(t),t instanceof Group&&this.bO(t,i)}bO(t,i){const e=t.memberParts;for(;e.next();){const s=e.value;s instanceof Node&&this.cf(s,i)}}get duration(){return this.Go}set duration(t){U.i(t,"number",Animation,"duration"),t<1&&U.q(t,">= 1",Animation,"duration"),this.Go=t}get reversible(){return this.rd}set reversible(t){this.rd=t}get runCount(){return this.k1}set runCount(t){t>0?this.k1=t:U.n("Animation.runCount value must be a positive integer.")}get finished(){return this.od}set finished(t){this.od!==t&&(t!==null&&U.C(t,Animation,"finished"),this.od=t)}get easing(){return this.b1}set easing(t){this.b1=t}get isViewportUnconstrained(){return this.h2}set isViewportUnconstrained(t){this.h2=t}get isAnimating(){return this.Vi}getTemporaryState(t){let i=this.S1.get(t);return i===null&&(i={},this.S1.set(t,i)),i}static EaseLinear=(t,i,e,s)=>e*t/s+i;static EaseInOutQuad=(t,i,e,s)=>(t/=s/2,t<1?e/2*t*t+i:-e/2*(--t*(t-2)-1)+i);static EaseInQuad=(t,i,e,s)=>e*(t/=s)*t+i;static EaseOutQuad=(t,i,e,s)=>-e*(t/=s)*(t-2)+i;static EaseInExpo=(t,i,e,s)=>t===0?i:e*Math.pow(2,10*(t/s-1))+i;static EaseOutExpo=(t,i,e,s)=>t===s?i+e:e*(-Math.pow(2,-10*t/s)+1)+i}class AnimationState{gi;Os;C1;A1;N1;constructor(t,i,e){this.gi=t,this.Os=i,this.C1={},this.A1=e,this.N1=!1}}var TriggerStart=(w=>(w[w.Default=1]="Default",w[w.Immediate=2]="Immediate",w[w.Bundled=3]="Bundled",w))(TriggerStart||{});class AnimationTrigger{Ve;Nn;hd;df;constructor(t,i,e){e&&Debug&&U.j(e,TriggerStart,"TriggerStart"),this.Ve=null,this.Nn=t,this.hd=e||1,this.df=null,i!==void 0&&(this.df=i,e===void 0&&(this.hd=2))}copy(){const t=new AnimationTrigger(this.Nn);t.hd=this.hd;const i=this.df;if(i!==null){const e={};i.duration!==void 0&&(e.duration=i.duration),i.finished!==void 0&&(e.finished=i.finished),i.easing!==void 0&&(e.easing=i.easing),t.df=e}return t}get propertyName(){return this.Nn}set propertyName(t){this.Nn=t}get animationSettings(){return this.df}set animationSettings(t){this.df=t}SO(t){const i=this.df;i!==null&&(i.duration&&(t.duration=i.duration),i.finished&&(t.finished=i.finished),i.easing&&(t.easing=i.easing))}get startCondition(){return this.hd}set startCondition(t){Debug&&U.j(t,TriggerStart,"TriggerStart"),this.hd=t}static Default=1;static Immediate=2;static Bundled=3}class Layer{c;Nt;ri;qr;oh;lh;hh;ah;ch;fh;uh;dh;gh;mh;ph;yh;nf;wh;L1;d0;ad;qt;Hr;u2;d2;Ma;cd;constructor(t){GSet.se(this),this.c=null,this.qt=new List,this.Ma=new Set,this.cd=[],this.Hr=new Quadtree(-1e3,-1e3,2e3,2e3,1/0),this.u2=!1,this.d2=[],this.Nt="",this.ri=1,this.qr=!1,this.oh=!0,this.lh=!0,this.hh=!0,this.ah=!0,this.ch=!0,this.fh=!0,this.uh=!0,this.dh=!0,this.gh=!0,this.mh=!0,this.ph=!0,this.yh=!0,this.nf=!0,this.wh=!0,this.L1=!0,this.d0=!1,this.ad=[],t&&Object.assign(this,t)}kO(){const t=this.qt.h;for(let i=0;i<t.length;i++)t[i].g2(null),t[i].vr=-1;this.qt.clear(),this.ad.length=0,this.Hr.clear(),this.d2.length=0}qo(t){this.c=t}toString(t){t===void 0&&(t=0);const i='Layer "'+this.name+'"';if(t<=0)return i;let e=0,s=0,n=0,o=0,r=0;const l=this.qt.iterator;for(;l.next();){const a=l.value;a instanceof Group?n++:a instanceof Node?s++:a instanceof Link?o++:a instanceof Adornment?r++:e++}let h="";if(e>0&&(h+=e+" Parts "),s>0&&(h+=s+" Nodes "),n>0&&(h+=n+" Groups "),o>0&&(h+=o+" Links "),r>0&&(h+=r+" Adornments "),t>1){const a=this.qt.iterator;for(;a.next();){const c=a.value;h+=`
    `+c.toString();const f=c.data;f!==null&&GSet.Cs(f)&&(h+=" #"+GSet.Cs(f)),c instanceof Node?h+=" "+U.toString(f):c instanceof Link&&(h+=" "+U.toString(c.fromNode)+" "+U.toString(c.toNode))}}return i+" "+this.qt.count+": "+h}g0(t,i,e,s){const n=this.d2;return n.length=0,this.Hr.findInArray(t,i,e,s,n),n.sort((o,r)=>o.vr-r.vr)}findObjectAt(t,i,e){if(i===void 0&&(i=null),e===void 0&&(e=null),this.wh===!1||this.qt.length===0)return null;Debug&&!t.isReal()&&U.n("findObjectAt: Point must have a real value, not: "+t.toString());const s=this.g0(t.x,t.y,0,0),n=Point.a(),o=s.length;for(let r=o;r--;){const l=s[r];if(!l.isVisible())continue;n.f(t),n.Ie(l.nn);let h=l.xL(n,i,e);if(h!==null&&(i!==null&&(h=i(h)),h!==null&&(e===null||e(h))))return Point.o(n),h}return Point.o(n),null}findObjectsAt(t,i,e,s){if(i===void 0&&(i=null),e===void 0&&(e=null),!(s instanceof List)&&!(s instanceof GSet)&&(s=new GSet),this.wh===!1)return s;Debug&&!t.isReal()&&U.n("findObjectsAt: Point must have a real value, not: "+t.toString());const n=Point.a(),o=this.g0(t.x,t.y,0,0),r=o.length;for(let l=r;l--;){const h=o[l];if(!h.isVisible())continue;n.f(t),n.Ie(h.nn);let a=h;h.bL(n,i,e,s)&&(i!==null&&(a=i(a)),a!==null&&(e===null||e(a))&&s.add(a))}return Point.o(n),s}findObjectsIn(t,i,e,s,n){if(i===void 0&&(i=null),e===void 0&&(e=null),s===void 0&&(s=!1),!(n instanceof List)&&!(n instanceof GSet)&&(n=new GSet),this.wh===!1)return n;Debug&&!t.isReal()&&U.n("findObjectsIn: Rect must have a real value, not: "+t.toString());let o=!1;this.diagram!==null&&this.diagram.viewportBounds.containsRect(t)&&(o=!0);const r=this.g0(t.x,t.y,t.width,t.height),l=r.length;for(let h=l;h--;){const a=r[h];if(o===!0&&a.tf()===!1||!a.isVisible())continue;let c=a;a.m0(t,i,e,s,n)&&(i!==null&&(c=i(c)),c!==null&&(e===null||e(c))&&n.add(c))}return n}GP(t,i,e,s,n,o,r){if(this.wh===!1)return n;const l=this.g0(t.x,t.y,t.width,t.height),h=l.length;for(let a=h;a--;){const c=l[a];if(r===!0&&c.tf()===!1||!o(c)||!c.isVisible())continue;let f=c;c.m0(t,i,e,s,n)&&(i!==null&&(f=i(f)),f!==null&&(e===null||e(f))&&n.add(f))}return n}findObjectsNear(t,i,e,s,n,o){if(e===void 0&&(e=null),s===void 0&&(s=null),n===void 0&&(n=!0),n!==!1&&n!==!0&&((n instanceof List||n instanceof GSet)&&(o=n),n=!0),!(o instanceof List)&&!(o instanceof GSet)&&(o=new GSet),this.wh===!1)return o;Debug&&!t.isReal()&&U.n("findObjectsNear: Point must have a real value, not: "+t.toString());let r=!1;this.diagram!==null&&this.diagram.viewportBounds.containsPoint(t)&&(r=!0);const l=Point.a(),h=Point.a(),a=this.g0(t.x,t.y,0,0),c=a.length;for(let f=c;f--;){const u=a[f];if(r===!0&&u.tf()===!1||!u.isVisible())continue;l.f(t),l.Ie(u.nn),h.e(t.x+i,t.y),h.Ie(u.nn);let d=u;u.SL(l,h,e,s,n,o)&&(e!==null&&(d=e(d)),d!==null&&(s===null||s(d))&&o.add(d))}return Point.o(l),Point.o(h),o}m2(){return this.qt.h}Dn(t,i){if(!this.visible)return;const e=this.qt.h,s=e.length;if(s===0){this.cd.length=0;return}const n=U.ct(),o=U.ct();for(let a=0;a<s;a++)e[a].vr=a;this.Ma.clear();const r=this.Hr.findIn(i.x,i.y,i.width,i.height,this.Ma),l=this.cd;l.length=0;for(const a of r){const c=a.actualBounds;a.isVisible()&&c.$k(i,10)&&(l.push(a),n.push(a))}l.sort((a,c)=>a.vr-c.vr);const h=this.Ma;for(const a of h)!r.has(a)&&a.adornments!==null&&a.adornments.count>0&&o.push(a);for(let a=0;a<n.length;a++){const c=n[a];c.p2();const f=c.adornments;for(;f.next();){const u=f.value;u.yt(1/0,1/0),u.Ht();const d=u.layer;d!==null&&u.isVisible()&&u.actualBounds.$k(i,10)&&d.cd.indexOf(u)<0&&(d.Ma.add(u),d.cd.push(u))}}for(let a=0;a<o.length;a++)o[a].p2();U.nt(n),U.nt(o)}w2(t){this.Hr.bounds.containsRect(t)||this.Hr.resize(t)}fd(t){let i=1;return this.ri!==1&&(i=t.globalAlpha,t.globalAlpha=i*this.ri),i}kL(t,i){for(let e=0;e<i;e++)t[e].gf()}$i(t,i,e){if(!this.visible||this.ri===0||(e===void 0&&(e=!0),!e&&this.isTemporary))return;const s=this.cd,n=s.length;if(n===0)return;t.qr&&this.kL(s,n);const o=this.fd(t),r=this.ad;r.length=0;const l=i.scale,h=Rect.a();for(let a=0;a<n;a++){const c=s[a];this.p0(t,c,i,r,l,h,!0)}Rect.o(h),t.qr&&this.kL(s,n),t.globalAlpha=o}uV(t,i,e){if(!this.visible||this.ri===0)return;const s=this.qt.h,n=s.length;if(n===0)return;const o=this.fd(t),r=this.ad;r.length=0;const l=i.scale,h=Rect.a();for(let a=0;a<n;a++){const c=s[a];e.has(c)||this.p0(t,c,i,r,l,h,!0)}Rect.o(h),t.globalAlpha=o}PO(t,i,e,s){if(!this.visible||this.ri===0||!s&&this.isTemporary)return;const n=this.qt.h,o=n.length;if(o===0)return;const r=this.fd(t),l=this.ad;l.length=0;const h=i.scale,a=Rect.a();for(let c=0;c<o;c++){const f=n[c];e.has(f)&&this.p0(t,f,i,l,h,a,!1)}Rect.o(a),t.globalAlpha=r}MO(t,i,e,s,n){if(!this.visible||this.opacity===0)return;const o=this.diagram.grid.part;if(!s&&this.isTemporary){if(n&&o.layer===this){const r=this.fd(t);o.$i(t,e),t.globalAlpha=r}}else{const r=this.fd(t),l=e.scale,h=Rect.a(),a=this.qt.h,c=a.length;for(let f=0;f<c;f++){const u=a[f];!n&&u===o||this.p0(t,u,e,null,l,h,!1)}Rect.o(h),t.globalAlpha=r}}dV(t,i,e){if(!this.visible||this.ri===0)return;const s=this.fd(t),n=this.ad;n.length=0;const o=i.scale,r=Rect.a(),l=this.qt.h,h=l.length,a=e.length;for(let c=0;c<h;c++){const f=l[c],u=f.Ca(f.actualBounds);this.CO(u,e,a,o)&&this.p0(t,f,i,n,o,r,!0)}Rect.o(r),t.globalAlpha=s}p0(t,i,e,s,n,o,r){if(r&&!i.tf()){t.removePartFromView(i);return}if(s!==null&&i instanceof Link&&(i.isOrthogonal&&s.push(i),i.is===!1)){t.removePartFromView(i);return}let l=!1,h=i.containingGroup;for(;h!==null;)l?h.mi!==null&&o.intersectRect(h.mi):h.mi!==null&&(l=!0,o.f(h.mi)),h=h.containingGroup;const a=i.actualBounds;let c=!1;if(l&&i.isVisible()){if(!o.intersectsRect(a)){t.removePartFromView(i);return}c=!o.containsRect(a)}c&&(t.save(),t instanceof SVGContext?t.partClipRect=o.copy():(t.beginPath(),t.rect(o.x,o.y,o.width,o.height),t.clip())),a.width*n>e.y0||a.height*n>e.y0?i.$i(t,e):this.NO(t,i,e),c&&(t.restore(),t.clearContextCache(!0))}NO(t,i,e){if(t instanceof SVGContext){i.$i(t,e);return}const s=i.actualBounds,n=i.naturalBounds;if(s.width===0||s.height===0||isNaN(s.x)||isNaN(s.y)||!i.isVisible())return;const o=i.D;if(i.background===null){i.Fn(t,"rgba(0,0,0,0.3)",!0,!1,n,s),t.fillRect(s.x,s.y,s.width,s.height);return}if(t.transform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),i.Fn(t,i.background,!0,!1,n,s),t.fillRect(0,0,n.width/2,n.height/2),!o._k()){const r=1/(o.m11*o.m22-o.m12*o.m21);t.transform(o.m22*r,-o.m12*r,-o.m21*r,o.m11*r,r*(o.m21*o.dy-o.m22*o.dx),r*(o.m12*o.dx-o.m11*o.dy))}}CO(t,i,e,s){const n=2/s,o=4/s;for(let r=0;r<e;r++){const l=i[r];if(!(l.width===0||l.height===0)&&t.intersects(l.x-n,l.y-n,l.width+o,l.height+o))return!0}return!1}t(t,i,e,s,n){const o=this.diagram;o!==null&&o.raiseChangedEvent(2,t,this,i,e,s,n)}Na(t,i,e){const s=this.qt;if(i.g2(this),t>=s.count)t=s.count;else if(s.elt(t)===i)return-1;s.insertAt(t,i),i.vr=t,i.w0(e),i.actualBounds.isReal()&&this.Hr.set(i,i.actualBounds.copy());const n=this.diagram;return n!==null&&(e?n.L():n.Na(i)),this.D1(t,i),t}ue(t,i,e){if(!e&&i.layer!==this&&i.layer!==null)return i.layer.ue(t,i,e);const s=this.qt;if(t<0||t>=s.length){if(t=s.indexOf(i),t<0)return-1}else if(s.elt(t)!==i&&(t=s.indexOf(i),t<0))return-1;i.x0(e),s.removeAt(t),i.vr=-1,this.Hr.delete(i,!0),this.u2=!0;const n=this.diagram;return n!==null&&(e?n.L():n.ue(i)),i.g2(null),t}D1(t,i){t=this.AO(t,i),i instanceof Group&&this.TO(t,i),i.svg!==null&&i.svg.remove()}AO(t,i){const e=i.zOrder;if(isNaN(e))return t;const s=this.qt,n=s.count;if(n<=1)return t;if(t<0&&(t=s.indexOf(i)),t<0)return-1;let o=t-1,r=NaN;for(;o>=0&&(r=s.elt(o).zOrder,!!isNaN(r));)o--;let l=t+1,h=NaN;for(;l<n&&(h=s.elt(l).zOrder,!!isNaN(h));)l++;if(!isNaN(r)&&r>e)for(;;){if(o===-1||r<=e)return o++,o===t?t:(s.removeAt(t),s.insertAt(o,i),o);for(r=NaN;--o>=0&&(r=s.elt(o).zOrder,!!isNaN(r)););}else if(!isNaN(h)&&h<e)for(;;){if(l===n||h>=e)return l--,l===t?t:(s.removeAt(t),s.insertAt(l,i),l);for(h=NaN;++l<n&&(h=s.elt(l).zOrder,!!isNaN(h)););}return t}TO(t,i){if(i===null||!isNaN(i.zOrder))return;this.LO(t,i);const e=i.containingGroup;e!==null&&this.D1(-1,e)}LO(t,i){if(i.memberParts.count===0)return;let e=-1;const s=this.qt.h,n=s.length;for(let o=0;o<n;o++){const r=s[o];if(r===i&&(t=o,e>=0)||e<0&&r.containingGroup===i&&(e=o,t>=0))break}if(!(e<0)&&e<t){const o=this.qt;o.removeAt(t),o.insertAt(e,i);for(let r=e;r<=t;r++)s[r].vr=r}}get parts(){return this.qt.iterator}get partsBackwards(){return this.qt.iteratorBackwards}get diagram(){return this.c}get name(){return this.Nt}set name(t){U.i(t,"string",Layer,"name");const i=this.Nt;if(i!==t){const e=this.diagram;if(e!==null){i===""&&U.n("Cannot rename default Layer to: "+t);const n=e.layers;for(;n.next();)n.value.name===t&&U.n("Layer.name is already present in this diagram: "+t)}this.Nt=t,this.t("name",i,t);const s=this.qt.iterator;for(;s.next();){const n=s.value;n.layerName=this.Nt}}}get opacity(){return this.ri}set opacity(t){const i=this.ri;if(i!==t){U.i(t,"number",Layer,"opacity"),(t<0||t>1)&&U.q(t,"0 <= value <= 1",Layer,"opacity"),this.ri=t;const e=this.diagram;e!==null&&e.L(),this.t("opacity",i,t)}}get isViewportAligned(){return this.d0}set isViewportAligned(t){const i=this.d0;i!==t&&(this.d0=t,this.diagram&&(this.PL(),this.diagram.L()),this.t("isViewportAligned",i,t),t&&(this.isInDocumentBounds=!1))}PL(){if(!this.d0)return;const t=this.diagram;if(t===null)return;const i=this.qt.h,e=i.length,s=t.At,n=t.Tt;for(let o=0;o<e;o++){const r=i[o],l=r.naturalBounds.width,h=r.naturalBounds.height;let a=r.alignment;(a.isDefault()||!a.isSpot())&&(a=Spot.BottomRight);let c=r.alignmentFocus;c.isDefault()&&(c=new Spot(a.x,a.y));const f=a.x*s+a.offsetX-(c.x*l+c.offsetX),u=a.y*n+a.offsetY-(c.y*h+c.offsetY),d=Point.V(f,u);t.DO(d),r.sf(d.x,d.y,!0),Point.o(d),r.lt=1/t.scale}}get isTemporary(){return this.qr}set isTemporary(t){const i=this.qr;i!==t&&(U.i(t,"boolean",Layer,"isTemporary"),this.qr=t,this.t("isTemporary",i,t))}get visible(){return this.nf}set visible(t){const i=this.nf;if(i!==t){U.i(t,"boolean",Layer,"visible"),this.nf=t;const e=this.qt.iterator;for(;e.next();)e.value.Ji(t);const s=this.diagram;s!==null&&s.L(),this.t("visible",i,t)}}get pickable(){return this.wh}set pickable(t){const i=this.wh;i!==t&&(U.i(t,"boolean",Layer,"pickable"),this.wh=t,this.t("pickable",i,t))}get isInDocumentBounds(){return this.L1}set isInDocumentBounds(t){const i=this.L1;i!==t&&(this.L1=t,this.diagram!==null&&this.diagram.invalidateDocumentBounds(),this.t("isInDocumentBounds",i,t))}get allowCopy(){return this.oh}set allowCopy(t){const i=this.oh;i!==t&&(U.i(t,"boolean",Layer,"allowCopy"),this.oh=t,this.t("allowCopy",i,t))}get allowDelete(){return this.lh}set allowDelete(t){const i=this.lh;i!==t&&(U.i(t,"boolean",Layer,"allowDelete"),this.lh=t,this.t("allowDelete",i,t))}get allowTextEdit(){return this.hh}set allowTextEdit(t){const i=this.hh;i!==t&&(U.i(t,"boolean",Layer,"allowTextEdit"),this.hh=t,this.t("allowTextEdit",i,t))}get allowGroup(){return this.ah}set allowGroup(t){const i=this.ah;i!==t&&(U.i(t,"boolean",Layer,"allowGroup"),this.ah=t,this.t("allowGroup",i,t))}get allowUngroup(){return this.ch}set allowUngroup(t){const i=this.ch;i!==t&&(U.i(t,"boolean",Layer,"allowUngroup"),this.ch=t,this.t("allowUngroup",i,t))}get allowLink(){return this.fh}set allowLink(t){const i=this.fh;i!==t&&(U.i(t,"boolean",Layer,"allowLink"),this.fh=t,this.t("allowLink",i,t))}get allowRelink(){return this.uh}set allowRelink(t){const i=this.uh;i!==t&&(U.i(t,"boolean",Layer,"allowRelink"),this.uh=t,this.t("allowRelink",i,t))}get allowMove(){return this.dh}set allowMove(t){const i=this.dh;i!==t&&(U.i(t,"boolean",Layer,"allowMove"),this.dh=t,this.t("allowMove",i,t))}get allowReshape(){return this.gh}set allowReshape(t){const i=this.gh;i!==t&&(U.i(t,"boolean",Layer,"allowReshape"),this.gh=t,this.t("allowReshape",i,t))}get allowResize(){return this.mh}set allowResize(t){const i=this.mh;i!==t&&(U.i(t,"boolean",Layer,"allowResize"),this.mh=t,this.t("allowResize",i,t))}get allowRotate(){return this.ph}set allowRotate(t){const i=this.ph;i!==t&&(U.i(t,"boolean",Layer,"allowRotate"),this.ph=t,this.t("allowRotate",i,t))}get allowSelect(){return this.yh}set allowSelect(t){const i=this.yh;i!==t&&(U.i(t,"boolean",Layer,"allowSelect"),this.yh=t,this.t("allowSelect",i,t))}}var AutoScale=(w=>(w[w.None=1]="None",w[w.Uniform=2]="Uniform",w[w.UniformToFill=3]="UniformToFill",w))(AutoScale||{}),CycleMode=(w=>(w[w.All=1]="All",w[w.NotDirected=2]="NotDirected",w[w.NotDirectedFast=3]="NotDirectedFast",w[w.NotUndirected=4]="NotUndirected",w[w.DestinationTree=5]="DestinationTree",w[w.SourceTree=6]="SourceTree",w))(CycleMode||{}),ScrollMode=(w=>(w[w.Document=1]="Document",w[w.Infinite=2]="Infinite",w))(ScrollMode||{}),CollapsePolicy=(w=>(w[w.TreeParent=1]="TreeParent",w[w.AllParents=2]="AllParents",w[w.AnyParents=3]="AnyParents",w))(CollapsePolicy||{});class Diagram{Is;$t;b2;F1;R1;Wr;ud;I1;O1;E1;B1;V1;z1;Aa;Pa;X1;Y1;K1;xh;mf;jr;b0;U1;G1;dd;Rn;Jr;Ta;vo;S0;pf;k0;yf;gd;$r;ao;S2;k2;q1;H1;P2;v1;M2;C2;N2;W1;P0;Zr;Qr;_r;tl;il;el;j1;sl;J1;nl;ol;rl;ll;$1;A2;Wo;T2;Z1;Q1;L2;Ei;D2;wf;F2;Ds;jo;Wi;_1;oh;lh;tb;ib;hh;ah;ch;eb;fh;uh;dh;gh;mh;ph;yh;sb;nb;R2;md;pd;ob;rb;lb;hb;M0;ab;cb;fb;li;ML;ub;CL;yd;In;co;de;fo;NL;bh;I2;O2;C0;db;wd;N0;gb;hl;Sh;La;E2;B2;A0;pb;yb;ms;xf;T0;xd;Jo;bf;L0;al;Da;V2;D0;_t;D;es;Ur;Zi;Bs;z2;kh;cl;Jl;fl;Fa;bd;X2;Sd;Ra;kd;Et;Ph;wt;lt;Pd;At;Tt;ht;Sf;Ux;wb;Ia;Md;xb;bb;F0;Qi;y0;R0;Y2;K2;AL;U2;I0;Sb;Oa;Mh;Ea;Ba;Va;za;kb;Sa;ei;Dt;kf;uP;dP;Jc;ri;static Pb=null;static TL=new GMap;static G2;static q2=null;$u;Mb;Cb;Cd;Nb;Ab;O0;E0;g1;H2;v2;Pf;B0;V0;constructor(t,i){if(Diagram.ux||(Diagram.tP(),Diagram.ux=!0),GSet.se(this),Diagram.LL(this),this._t=!0,this.Dt=null,this.At=0,this.Tt=0,this.ht=null,Diagram.isUsingDOM()){const s=this,n=()=>{s.Bi(root.document,"DOMContentLoaded",n,!1),s.setRTL()};root.document.body!==null?this.setRTL():s.Gt(root.document,"DOMContentLoaded",n,!1)}this.Sf=null,Diagram.W2("Model",PartManager);const e=this;return this.D2=s=>e.partManager.doModelDataChanged(s),this.wf=s=>e.partManager.doModelChanged(s),this.xb=null,this.bb=null,this.DL(),this.model=Model.j2(),this.themeManager=new ThemeManager,this.Wo=!0,this.FL(),this.layout=new Layout,this.Wo=!1,this.Sb=null,this.Oa=null,this.Mh=null,this.Ea=null,this.Ba=null,this.Va=null,this.za=null,this.kb=()=>{},this.Sa=null,this.xd=!1,this.kf=new DiagramHelper(this),t!==void 0&&(typeof t=="string"||root.Element&&t instanceof Element?this.J2(t):i=t),i&&this.setProperties(i),this._t=!1,this.requestUpdate(),this}JI(){return this.ht!==null}get renderer(){return this.bf}set renderer(t){if(this instanceof Overview)return;t===""&&(t="default");const i=t.toLowerCase(),e=this.bf;if(i===e)return;this.bf=i;let s=null;if(i==="default"||i==="canvas"){s=this.Jo.get("svg"),s!==null&&s.St.remove(),this.ht&&(this.ei=this.ht.pi,this.ei.clearContextCache(!0));const n=this.Et.length;for(let o=0;o<n;o++)this.Et.h[o].parts.each(l=>{l.svg!==null&&l.svg.parentNode!==null&&l.svg.remove()})}else i==="svg"?(this.Jo.has("svg")?s=this.Jo.get("svg"):(s=new SVGSurface(this,root.document),this.addRenderer("svg",s)),this.div!==null&&(s.St.role="img",this.div.appendChild(s.St)),this.ht&&(this.ei=s.pi,this.ht.pi.setTransform(this.Qi,0,0,this.Qi,0,0),this.ht.pi.clearRect(0,0,this.At,this.Tt))):i==="debug"&&(this.Jo.has("SVG")||(s=new SVGSurface(this,root.document),this.addRenderer("SVG",s),s.St.style.backgroundColor="whitesmoke",this.div!==null&&this.div.after(s.St)));this._t||this.redraw()}DL(){if(this.Pf=new List,this.setupRouters(),this.Is=new AnimationManager,this.Is.qo(this),this.$t=17,this.b2=!1,this.F1=!1,this.Pd=!1,this.R1="default",this.Et=new List,this.Jo){const t=this.Jo.get("svg");t!==null&&t.St.remove(),this.ht&&(this.ei=this.ht.pi,this.ei.clearContextCache(!0))}this.Jo=new GMap,this.bf="default",this.resetRenderingHints(),this.FO(),this.ri=1,this.wt=new Point(NaN,NaN).S(),this.g1=new Point(NaN,NaN),this.lt=1,this.D0=1,this.I1=new Point(NaN,NaN).S(),this.O1=NaN,this.E1=1e-4,this.B1=100,this.D=new Transform,this.V1=new Point(NaN,NaN).S(),this.z1=new Rect(NaN,NaN,NaN,NaN).S(),this.Aa=new Margin(0,0,0,0).Ct(),this.Pa=1,this.X1=!1,this.Y1=null,this.K1=null,this.xh=1,this.mf=Spot.Default,this.jr=1,this.b0=Spot.Default,this.U1=Spot.None,this.G1=Spot.None,this.es=!0,this.dd=!1,this.Rn=new Set,this.Jr=new GSet,this.Ta=new GSet,this.vo=!1,this.Ph=new GMap,this.Sd=!0,this.S0=250,this.pf=-1,this.k0=new Margin(16,16,16,16).Ct(),this.Ur=!1,this.yf=!1,this.gd=!0,this.L0=new InputEvent,this.L0.diagram=this,this.al=new InputEvent,this.al.diagram=this,this.Da=new InputEvent,this.Da.diagram=this,this.$r=null,this.ao=null,this.Ux=!1,this.RO(),this.fl=new GSet,this.q1=!0,this.H1=1,this.P2=!1,this.v1=1,this.W1="auto",this.P0="auto",this.Zr=null,this.Qr=null,this._r=null,this.tl=null,this.il=null,this.el=null,this.j1=null,this.sl=null,this.J1=!1,this.nl=null,this.ol=null,this.rl=null,this.ll=null,this.$1=!1,this.wb={},this.Ia=[null,null],this.Wo=!1,this.T2=!1,this.Z1=!1,this.Q1=!1,this.L2=!0,this.Bs=!1,this.Ra=!1,this.F2=!0,this.Ds=-2,this.kh=new GMap,this.kd=new List,this.jo=!1,this.Wi=!0,this._1=!0,this.oh=!0,this.lh=!0,this.tb=!1,this.ib=!0,this.hh=!0,this.ah=!0,this.ch=!0,this.eb=!0,this.fh=!0,this.uh=!0,this.dh=!0,this.gh=!0,this.mh=!0,this.ph=!0,this.yh=!0,this.sb=!0,this.nb=!0,this.R2=!1,this.Md=!1,this.md=!0,this.pd=!0,this.ob=!0,this.rb=!0,this.lb=16,this.hb=16,this.M0=!1,this.ab=!1,this.cb=0,this.fb=0,this.li=new Margin(5).Ct(),this.ML=new GSet().S(),this.ub=999999999,this.CL=new GSet().S(),this.Fa=!0,this.yd=!0,this.bd=!0,this.In=!1,this.co=!1,this.cl=!0,this.Jl=!1,this.fo=!1,this.NL=new GSet,this.X2=new GSet,this.bh=null,this.I2=new Size(Link.RL,Link.IL),this.O2=999,this.C0=!1,this.uP=1,this.dP=0,this.Zi={scale:1,position:new Point,bounds:new Rect,canvasSize:new Size,newCanvasSize:new Size,isScroll:!1},this.Zi.canvasSize=this.Zi.canvasSize,this.Zi.newCanvasSize=this.Zi.newCanvasSize,this.Zi.isScroll=!1,this.db=new Rect(NaN,NaN,NaN,NaN).S(),this.wd=new Size(NaN,NaN).S(),this.N0=new Rect(NaN,NaN,NaN,NaN).S(),this.gb=!1,this.B0=null,this.V0=null,this.IO(),this.ms=null,this.xf=!1,this.Jc=null,this.partManager=new PartManager,this.toolManager=new ToolManager,this.toolManager.initializeStandardTools(),this.defaultTool=this.toolManager,this.currentTool=this.defaultTool,this.Cb=null,this.Cd=new DraggingOptions,this.Nb=null,this.Ab=null,this.Mb=!1,this.$u=!1,this.commandHandler=new CommandHandler,this.O0=null,this.E0=Point.Pn,this.H2=!1,this.Qi=1,this.y0=1,this.R0=1,this.Y2=0,this.K2=new Point,this.AL=500,this.U2=-1,this.T0=new Point,this.I0=!1}static OL=root.document!==void 0;static isUsingDOM(){return Diagram.OL}static setDocument(t){root.document=t}static useDOM(t){Diagram.OL=t?root.document!==void 0:!1}static ss=new WeakMap;clear(){this.animationManager.stopAnimation(),this.model.clear(),Diagram.EL(),this.BL(!1),this.kd.clear(),this.VL(),this.bh=null,this.invalidateDocumentBounds(),this.ensureBounds(),this.L()}BL(t){this.animationManager.stopAnimation(!0),this.clearSelection(),this.clearHighlighteds();const i=this.skipsUndoManager,e=this.Ei!==null&&this.Ei!==void 0;e&&(this.skipsUndoManager=!0);let s=null;this.ms!==null&&(s=this.ms.part,s!==null&&this.remove(s));const n=[],o=this.Et.length;if(t){for(let r=0;r<o;r++){const h=this.Et.h[r].parts;for(;h.next();){const a=h.value;a!==s&&a.data===null&&n.push(a)}}for(let r=0;r<n.length;r++){const l=n[r];this.remove(l)}}for(let r=0;r<o;r++)this.Et.h[r].kO();return this.partManager.clear(),this.Rn.clear(),this.Jr.clear(),this.Ta.clear(),this.Ph.clear(),this.fl.clear(),this.Jc=null,this.kd.clear(),this.VL(),U.Wk=[],s!==null&&(this.add(s),this.partManager.parts.delete(s)),e&&(this.skipsUndoManager=i),n}static z0=null;static Tb="";static EL(){Diagram.z0=null,Diagram.Tb=""}static gV(){return null}reset(){this.clear(),this._t=!0,this.DL(),this.themeManager=new ThemeManager,this.Ch(),this.Wo=!0,this.FL(),this.layout=new Layout,this.Wo=!1,this.model=Model.j2(),this.model.undoManager=new UndoManager,this.xd=!1,this._t=!1,this.L()}IO(){this.hl=new GMap,this.E2=new Node().add(new TextBlock({stroke:"black",font:"10pt sans-serif"}).bind("text","",U.toString).theme("stroke","text").theme("font","normal")),this.hl.set("",this.E2),this.hl.set("Comment",new Node().add(new TextBlock({stroke:"brown",font:"10pt sans-serif"}).bind("text","",U.toString).theme("stroke","comment").theme("font","normal"))),this.hl.set("LinkLabel",new Node({selectable:!1,avoidable:!1}).add(new Shape("Ellipse",{fill:"black",stroke:null,desiredSize:new Size(3,3).Ct()}).theme("fill","link"))),this.La=new GMap,this.z2=new Group(Panel.Vertical,{selectionObjectName:"GROUPPANEL"}).add(new TextBlock({stroke:"black",font:"bold 12pt sans-serif"}).bind("text","",U.toString).theme("stroke","text").theme("font","bold"),new Panel(Panel.Auto,{name:"GROUPPPANEL"}).add(new Shape({fill:"rgba(128,128,128,0.2)",stroke:"black",strokeWidth:1}).theme("fill","group").theme("stroke","outline").theme("strokeWidth","group"),new Placeholder({padding:5}).theme("padding","group"))),this.La.set("",this.z2),this.Sh=new GMap,this.B2=new Link().add(new Shape({isPanelMain:!0,stroke:"black"}).theme("stroke","link"),new Shape({toArrow:"Standard",fill:"black",stroke:null,strokeWidth:0}).theme("toArrow").theme("fill","link")),this.Sh.set("",this.B2),this.Sh.set("Comment",new Link().add(new Shape({isPanelMain:!0,stroke:"brown"}).theme("stroke","comment"))),this.A0=new Adornment(Panel.Auto).add(new Shape({fill:null,stroke:"dodgerblue",strokeWidth:3}).theme("stroke","selection").theme("strokeWidth","selection"),new Placeholder({margin:1.5}).theme("margin","selection","numbers",null,t=>t?new Margin(t/2):1.5)).freezeBindings(),this.pb=this.A0,this.yb=new Adornment(Panel.Link).add(new Shape({isPanelMain:!0,fill:null,stroke:"dodgerblue",strokeWidth:3}).theme("stroke","selection").theme("strokeWidth","selection")).freezeBindings()}setRTL(t){let i=t===void 0?this.div:t;i===null&&(i=root.document.body);const e=U.Re("div");e.dir="rtl",e.style.cssText="font-size: 14px; width: 1px; height: 1px; position: absolute; top: -1000px; overflow: scroll;",e.textContent="A",i.appendChild(e);let s="reverse";e.scrollLeft>0?s="default":(e.scrollLeft=1,e.scrollLeft===0&&(s="negative")),i.removeChild(e),this.R1=s}setScrollWidth(t){let i=t===void 0?this.div:t;i===null&&(i=root.document.body);let e=0;if(Diagram.isUsingDOM()){let s=Diagram.q2,n=Diagram.G2;s===null&&(Diagram.q2=U.Re("p"),s=Diagram.q2,s.style.width="100%",s.style.height="200px",s.style.boxSizing="content-box",Diagram.G2=U.Re("div"),n=Diagram.G2,n.style.position="absolute",n.style.visibility="hidden",n.style.width="200px",n.style.height="150px",n.style.boxSizing="content-box",n.appendChild(s)),n.style.overflow="hidden",i.appendChild(n);const o=s.offsetWidth;n.style.overflow="scroll";let r=s.offsetWidth;o===r&&(r=n.clientWidth),i.removeChild(n),e=o-r,this.F1=o>0&&e===0&&!U.zo,e===0&&!U.zo&&(e=11)}return e}yi(t){t in AutoScale?this.autoScale=t:U.Pr(this,t)}toString(t){t===void 0&&(t=0);let i="";this.div&&this.div.id&&(i=this.div.id);let e='Diagram "'+i+'"';if(t<=0)return e;const s=this.Et.iterator;for(;s.next();){const n=s.value;e+=`
  `+n.toString(t-1)}return e}static LL(t){Diagram.Pb=t}static Qm(){return Diagram.Pb}static fromDiv(t){let i=t;if(typeof t=="string"&&(i=root.document.getElementById(t)),i instanceof HTMLDivElement){const e=Diagram.ss.get(i);if(e)return e}return null}get div(){return this.Dt}set div(t){if(t!==null&&U.s(t,HTMLDivElement,Diagram,"div"),this.Dt!==t){const i=this.Dt;if(i!==null){if(Diagram.ss.delete(i),i.goDiagram=void 0,i.go=void 0,i.innerHTML="",this.ht!==null){const s=this.ht.St;this.Bi(s,"pointermove",this.Ea,!1),this.Bi(s,"pointerdown",this.Mh,!1),this.Bi(s,"pointerup",this.Ba,!1),this.Bi(s,"pointerout",this.Va,!1),this.Bi(s,"pointercancel",this.za,!1),this.ht.dispose()}this.Sf&&(this.Sf.disconnect(),this.Sf=null);const e=this.toolManager;e!==null&&(e.mouseDownTools.each(s=>s.cancelWaitAfter()),e.mouseMoveTools.each(s=>s.cancelWaitAfter()),e.mouseUpTools.each(s=>s.cancelWaitAfter())),e.cancelWaitAfter(),this.currentTool.doCancel(),this.ht=null,this.Bi(root,"resize",this.Sb,!1),this.Bi(root,"wheel",this.Oa,!0),Diagram.Qm()===this&&Diagram.LL(null)}else this.Mh===null&&(this.fo=!1);if(this.Dt=null,t!==null){const e=Diagram.ss.get(t);e&&(e.div=null),this.J2(t),this.kb(),this.themeManager&&this.themeManager.OO()}else this.themeManager&&this.themeManager.EO()}}setupRouters(){this.Pf.push(new AvoidsNodesRouter)}J2(t){const i=this;if(!Diagram.isUsingDOM())return;t==null&&U.n("Diagram setup requires an argument DIV."),i.Dt!==null&&U.n("Diagram has already completed setup."),typeof t=="string"?i.Dt=root.document.getElementById(t):t instanceof HTMLDivElement?i.Dt=t:U.n("No DIV or DIV id supplied: "+t),i.Dt===null&&U.n("Invalid DIV id; could not get element with id: "+t);const e=Diagram.ss.get(i.Dt);if(e&&e!==this&&U.n("Invalid div id; div already has a Diagram associated with it."),!i.Sf&&root.ResizeObserver){const c=root.ResizeObserver,f=U.vk(()=>i.requestUpdate(),250,!1);i.Sf=new c(()=>f()),i.Sf.observe(i.Dt)}root.getComputedStyle(i.Dt,null).position==="static"&&(i.Dt.style.position="relative");let s=5;const n="rgba(2"+s+"5, 255, 255, 0)";s--,i.Dt.style["-webkit-tap-highlight-color"]=n,i.Dt.innerHTML="",Diagram.ss.set(i.Dt,i),i.Dt.goDiagram=i,i.Dt.go=root.go;const o=new CanvasSurface(i);o.style!==void 0&&(o.style.position="absolute",o.style.top="0px",o.style.left="0px",root.getComputedStyle(i.Dt,null).getPropertyValue("direction")==="rtl"&&(i.Pd=!0),o.style.zIndex="2",o.style.userSelect="none",o.style.MozUserSelect="none",o.style.touchAction="none",this.toolManager.gestureBehavior===3&&(o.style.touchAction="pinch-zoom"),o.style.letterSpacing="normal !important",o.style.wordSpacing="normal !important",o.style.lang="unknown"),o.St.setAttribute("role","application"),i.ht=o,i.ei=o.pi;const r=i.ei;i.Qi=i.computePixelRatio(),i.viewSize.isReal()||(i.At=i.Dt.clientWidth||1,i.Tt=i.Dt.clientHeight||1),i.zL(i.At,i.Tt);const l=i;i.Dt.insertBefore(o.St,i.Dt.firstChild);const h=new CanvasSurface(null);if(h.width=1,h.height=1,Diagram.isUsingDOM()){const c=U.Re("div"),f=U.Re("div");c.style.position="absolute",c.style.overflow="auto",c.style.width=i.At+"px",c.style.height=i.Tt+"px",c.style.zIndex="1",f.style.position="absolute",f.style.width="1px",f.style.height="1px",i.Dt.appendChild(c),c.appendChild(f),c.onscroll=Diagram.BO,c.addEventListener("pointerdown",Diagram.VO),c.c=i,c.zO=!0,c.XO=!0,i.xb=c,i.bb=f}i.kb=U.vk(()=>{i.L()},300,!1),i.Sb=U.vk(()=>{i._M()},250,!1),i.Sa=c=>(c.preventDefault(),!1),i.Oa=c=>{if(!l.isEnabled)return;const f=l.Nd(c,!0);f.bubbles=!0;let u=0,d=0;f.delta=0,c.deltaX!==void 0?(c.deltaX!==0&&(u=c.deltaX>0?1:-1),c.deltaY!==0&&(d=c.deltaY>0?1:-1),f.delta=Math.abs(c.deltaX)>Math.abs(c.deltaY)?-u:-d):c.wheelDeltaX!==void 0?(c.wheelDeltaX!==0&&(u=c.wheelDeltaX>0?-1:1),c.wheelDeltaY!==0&&(d=c.wheelDeltaY>0?-1:1),f.delta=Math.abs(c.wheelDeltaX)>Math.abs(c.wheelDeltaY)?-u:-d):c.wheelDelta!==void 0&&c.wheelDelta!==0&&(f.delta=c.wheelDelta>0?1:-1),l.doMouseWheel(),l.Xa(f,c)},i.Mh=c=>{if(!l.isEnabled)return;i.Md=!0;const f=l.wb;f[c.pointerId]===void 0&&(f[c.pointerId]=c);const u=l.Ia;let d=!1;if(u[0]!==null&&(u[0].pointerId===c.pointerId||u[0].pointerType!==c.pointerType))u[0]=c;else if(u[1]!==null&&u[1].pointerId===c.pointerId)u[1]=c,d=!0;else if(u[0]===null)u[0]=c;else if(u[1]===null)u[1]=c,d=!0;else{c.preventDefault();return}const m=c.pointerType==="touch"||c.pointerType==="pen";m&&(l.Ux=!1,l.I0=!0);const g=l.YO(c,c,d),p=l.K2,y=m?25:10;if(g.button===l.U2&&c.timeStamp-l.Y2<l.AL&&!(Math.abs(p.x-c.screenX)>y||Math.abs(p.y-c.screenY)>y)?l.R0++:l.R0=1,g.clickCount=l.R0,l.Y2=c.timeStamp,l.U2=g.button,l.K2.setTo(c.screenX,c.screenY),l.doMouseDown(),c.button===1){c.preventDefault();return}l.Xa(g,c)},i.Ea=c=>{if(!l.isEnabled)return;i.Md=!0;const f=l.Ia;if(f[0]!==null&&(f[0].pointerId===c.pointerId||f[0].pointerType!==c.pointerType))f[0]=c;else if(f[1]!==null&&f[1].pointerId===c.pointerId){f[1]=c;return}else if(f[0]===null)f[0]=c;else return;if(f[0].pointerId!==c.pointerId)return;const u=l.KO(c,c,f[1]!==null);l.doMouseMove(),l.Xa(u,c)},i.Ba=c=>{if(!l.isEnabled)return;i.Md=!0;const f=c.pointerType==="touch"||c.pointerType==="pen",u=l.wb;if(f&&l.Ux){delete u[c.pointerId],c.preventDefault();return}const d=l.Ia;if(d[0]!==null&&(d[0].pointerId===c.pointerId||d[0].pointerType!==c.pointerType))d[0]=null;else if(d[1]!==null&&d[1].pointerId===c.pointerId){d[1]=null;return}else return;const m=l.$2(c,!1,!0,!1,!0,!1);let g=root.document.elementFromPoint(c.clientX,c.clientY)||null;g!==null&&g.shadowRoot&&(g=g.shadowRoot.elementFromPoint(c.clientX,c.clientY)||null),g!==null&&g.c instanceof Diagram&&g.c!==l&&g.c.X0(c,m),g===null&&(g=c.target),l.X0(c,m),m.clickCount=l.R0,m.targetDiagram=l.Lb(c,g),m.targetObject=null,l.doMouseUp(),l.Xa(m,c),f&&(l.I0=!1)},i.Va=c=>{if(!l.isEnabled)return;i.Md=!1;const f=l.wb;f[c.pointerId]&&delete f[c.pointerId];const u=l.Ia;if(u[0]!==null&&u[0].pointerId===c.pointerId&&(u[0]=null),u[1]!==null&&u[1].pointerId===c.pointerId&&(u[1]=null),c.pointerType==="touch"||c.pointerType==="pen")return;const d=l.currentTool;d.cancelWaitAfter(),d.standardMouseOver()},i.za=c=>{const f=l.Ia;f[0]!==null&&f[0].pointerId===c.pointerId?(f[0]=null,l.I0=!1):f[1]!==null&&f[1].pointerId===c.pointerId&&(f[1]=null)};const a=r;if(i.F0=a.B[U.Si("7eba17a4ca3b1a8346")][U.Si("78a118b7")](a.B,Diagram.Ya,s,s),r.clearContextCache(!0),i.UO(),this.bf==="svg"){const c=this.Jo.get("svg");this.Dt&&this.Dt.appendChild(c.St),this.ei=c.pi}}addEventListener(t,i,e,s){t.addEventListener(i,e,{capture:s,passive:!1})}Gt(t,i,e,s){t.addEventListener(i,e,{capture:s,passive:!1})}removeEventListener(t,i,e,s){t.removeEventListener(i,e,{capture:s})}Bi(t,i,e,s){t.removeEventListener(i,e,{capture:s})}UO(){const t=this;let i=this.ht.St;i instanceof HTMLCanvasElement||(i=t.div),this.Gt(i,"pointerdown",t.Mh,!1),this.Gt(i,"pointermove",t.Ea,!1),this.Gt(i,"pointerup",t.Ba,!1),this.Gt(i,"pointerout",t.Va,!1),this.Gt(i,"pointercancel",t.za,!1),this.Gt(i,"pointerenter",t.GO,!1),this.Gt(i,"pointerleave",t.qO,!1),this.Gt(i,"wheel",t.Oa,!1),this.Gt(i,"keydown",t.HO,!1),this.Gt(i,"keyup",t.vO,!1),this.Gt(i,"blur",t.WO,!1),this.Gt(i,"focus",t.jO,!1),this.Gt(i,"selectstart",e=>(e.preventDefault(),!1),!1),this.Gt(i,"contextmenu",e=>(e.preventDefault(),!1),!1),this.Gt(root,"resize",t.Sb,!1)}computePixelRatio(){return root.devicePixelRatio||1}doMouseDown(){this.currentTool.doMouseDown()}doMouseMove(){this.currentTool.doMouseMove()}doMouseUp(){this.currentTool.doMouseUp()}doMouseWheel(){this.currentTool.doMouseWheel()}doKeyDown(){const t=this.commandHandler;if(!this.toggleKeyboardControl()){if((t.isFocusEnabled||t.isVirtualPointerEnabled)&&t.doVirtualFocusKeyDown()){const i=this.lastInput;i.bubbles=!1;const e=i.event;e&&(e.stopPropagation&&e.stopPropagation(),e.cancelable!==!1&&e.preventDefault());return}this.currentTool.doKeyDown()}}toggleKeyboardControl(){const t=this.lastInput,i=t.commandKey;if((t.control||t.meta)&&t.alt&&(i==="Enter"||i==="NumpadEnter")){const e=this.commandHandler,s=e.isFocusEnabled||e.isVirtualPointerEnabled;return e.isFocusEnabled=!s,e.isVirtualPointerEnabled=!s,e.focus=e.findFirstFocus(),this.O("FocusOrVirtualPointerEnabledChanged"),!0}return!1}doKeyUp(){const t=this.commandHandler;if((t.isFocusEnabled||t.isVirtualPointerEnabled)&&t.doVirtualFocusKeyUp()){const i=this.lastInput;i.bubbles=!1;const e=i.event;e&&(e.stopPropagation&&e.stopPropagation(),e.cancelable!==!1&&e.preventDefault());return}this.currentTool.doKeyUp()}Ad(t,i){if(i)for(const e in i)e!=="sourceDiagram"&&(t[e]=i[e])}emitMouseDown(t,i,e,s){e===void 0&&(e=0);let n=this;if(s&&s.sourceDiagram&&(n=s.sourceDiagram,!(n instanceof Diagram)))return this;if(!n.isEnabled)return this;const o=new InputEvent;return o.diagram=n,o.documentPoint=new Point(t,i),o.viewPoint=n.transformDocToView(o.documentPoint),o.timestamp=e,o.down=!0,this.Ad(o,s),n.lastInput=o,n.firstInput=o.copy(),n.doMouseDown(),this}emitMouseMove(t,i,e,s){e===void 0&&(e=0);let n=this;if(s&&s.sourceDiagram&&(n=s.sourceDiagram,!(n instanceof Diagram)))return this;if(!n.isEnabled)return this;const o=new InputEvent;return o.diagram=n,o.documentPoint=new Point(t,i),o.viewPoint=n.transformDocToView(o.documentPoint),o.timestamp=e,this.Ad(o,s),n.lastInput=o,n.doMouseMove(),this}emitMouseUp(t,i,e,s){e===void 0&&(e=0);let n=this;if(s&&s.sourceDiagram&&(n=s.sourceDiagram,!(n instanceof Diagram)))return this;if(!n.isEnabled)return this;const o=new InputEvent;return o.diagram=n,o.documentPoint=new Point(t,i),o.viewPoint=n.transformDocToView(o.documentPoint),o.timestamp=e,o.up=!0,n.firstInput.documentPoint.equals(o.documentPoint)&&(o.clickCount=1),this.Ad(o,s),n.lastInput=o,n.doMouseUp(),this}emitMouseWheel(t,i,e){i===void 0&&(i=0);const s=this;if(!s.isEnabled)return this;const n=new InputEvent;return n.diagram=s,n.documentPoint=s.lastInput.documentPoint,n.viewPoint=s.lastInput.viewPoint,n.delta=t,n.timestamp=i,this.Ad(n,e),s.lastInput=n,s.doMouseWheel(),this}emitKeyDown(t,i,e){i===void 0&&(i=0);const s=this;if(!s.isEnabled)return this;const n=new InputEvent;return n.diagram=s,n.documentPoint=s.lastInput.documentPoint,n.viewPoint=s.lastInput.viewPoint,typeof t=="string"?n.key=t:typeof t=="number"&&(n.key=String.fromCharCode(t)),n.timestamp=i,n.down=!0,this.Ad(n,e),s.lastInput=n,s.doKeyDown(),this}emitKeyUp(t,i,e){i===void 0&&(i=0);const s=this;if(!s.isEnabled)return this;const n=new InputEvent;return n.diagram=s,n.documentPoint=s.lastInput.documentPoint,n.viewPoint=s.lastInput.viewPoint,typeof t=="string"?n.key=t:typeof t=="number"&&(n.key=String.fromCharCode(t)),n.timestamp=i,n.up=!0,this.Ad(n,e),s.lastInput=n,s.doKeyUp(),this}doFocus(){this.focus()}focus(){if(this.ht)if(this.scrollsPageOnFocus)this.ht.focus();else{const t=root.scrollX,i=root.scrollY;this.ht.focus(),root.scrollTo(t,i)}}jO(t){const i=Diagram.ss.get(this);i&&i.O("GainedFocus")}WO(t){const i=Diagram.ss.get(this);i&&i.O("LostFocus")}_M(){if(this.ht===null)return;const i=this.Dt;if(i===null||i.clientWidth===0||i.clientHeight===0)return;this.b2||(this.$t=this.setScrollWidth(),this.b2=!0);const e=this.co?this.$t:0,s=this.In?this.$t:0,n=this.Qi;if(this.Qi=this.computePixelRatio(),this.Qi!==n&&(this.dd=!0,this.requestUpdate()),i.clientWidth!==this.At+e||i.clientHeight!==this.Tt+s){this.Ka(),this.es=!0;const o=this.layout;o!==null&&o.isViewportSized&&this.autoScale===1&&(this.yf=!0,o.w()),this.Bs||this.requestUpdate()}}FL(){let t=0,i=new Layer;i.name="Grid",i.allowSelect=!1,i.pickable=!1,i.isTemporary=!0,i.isInDocumentBounds=!1,this.ul(i,t++),i=new Layer,i.name="ViewportBackground",i.isViewportAligned=!0,i.isTemporary=!0,i.isInDocumentBounds=!1,this.ul(i,t++),i=new Layer,i.name="Background",this.ul(i,t++),i=new Layer,i.name="",this.ul(i,t++),i=new Layer,i.name="Foreground",this.ul(i,t++),i=new Layer,i.name="ViewportForeground",i.isViewportAligned=!0,i.isTemporary=!0,i.isInDocumentBounds=!1,this.ul(i,t++),i=new Layer,i.name="Adornment",i.isTemporary=!0,i.isInDocumentBounds=!1,this.ul(i,t++),i=new Layer,i.name="Tool",i.isTemporary=!0,i.isInDocumentBounds=!0,this.ul(i,t++)}XL(){const t=new Panel(Panel.Grid,{name:"GRID"}).add(new Shape("LineH",{stroke:"lightgray",strokeWidth:.5,interval:1}).theme("stroke","gridMinor"),new Shape("LineV",{stroke:"lightgray",strokeWidth:.5,interval:1}).theme("stroke","gridMinor"),new Shape("LineH",{stroke:"gray",strokeWidth:.5,interval:5}).theme("stroke","gridMajor"),new Shape("LineV",{stroke:"gray",strokeWidth:.5,interval:5}).theme("stroke","gridMajor"),new Shape("LineH",{stroke:"gray",strokeWidth:1,interval:10}).theme("stroke","gridMajor"),new Shape("LineV",{stroke:"gray",strokeWidth:1,interval:10}).theme("stroke","gridMajor")),i=new Part({layerName:"Grid",zOrder:0,isInDocumentBounds:!1,isAnimated:!1,pickable:!1,locationObjectName:"GRID"}).add(t);return this.add(i),this.partManager.parts.delete(i),t.visible=!1,t}static BO(){const t=Diagram.ss.get(this.parentElement||this);if(t){if(t.ab){t.ab=!1;return}if(!t.isEnabled){t.YL();return}t.diagramScroll(this)}}static VO(t){if(!this.c.isEnabled){this.c.updateScroll();return}this.c.cb=t.target.scrollTop,this.c.fb=t.target.scrollLeft}diagramScroll(t){if(this.ht===null)return;const i=this.xb,e=this.bb;this.M0=!0;let s=this.documentBounds,n=this.viewportBounds;const o=this.Aa;let r=s.x-o.left,l=s.y-o.top;const h=s.width+o.left+o.right,a=s.height+o.top+o.bottom;let c=s.right+o.right,f=s.bottom+o.bottom,u=n.x,d=n.y;const m=n.width,g=n.height;let p=n.right,y=n.bottom;const x=this.scale;let b,S=t.scrollLeft;if(this.Pd)switch(this.R1){case"negative":S=S+t.scrollWidth-t.clientWidth;break;case"reverse":S=t.scrollWidth-S-t.clientWidth;break}const k=S;if(m<h||g<a){b=Point.V(this.position.x,this.position.y),this.allowHorizontalScroll&&this.fb!==k&&(b.x=k/x+r,this.fb=k),this.allowVerticalScroll&&this.cb!==t.scrollTop&&(b.y=t.scrollTop/x+l,this.cb=t.scrollTop),this.position=b,Point.o(b),this.M0=!1,this.yd=!1;return}if(b=Point.a(),t.zO&&this.allowHorizontalScroll&&(r<u&&(this.position=b.e(k+r,this.position.y)),c>p)){const P=i.scrollWidth-i.clientWidth;this.position=b.e(-P+k-this.At/x+c,this.position.y)}if(t.XO&&this.allowVerticalScroll&&(l<d&&(this.position=b.e(this.position.x,t.scrollTop+l)),f>y)){const P=i.scrollHeight-i.clientHeight;this.position=b.e(this.position.x,-P+t.scrollTop-this.Tt/x+f)}Point.o(b),this.Vs(),this.M0=!1,this.yd=!1,s=this.documentBounds,n=this.viewportBounds,c=s.right,p=n.right,f=s.bottom,y=n.bottom,r=s.x,u=n.x,l=s.y,d=n.y,m>=h&&r>=u&&c<=p&&(e.style.width="1px"),g>=a&&l>=d&&f<=y&&(e.style.height="1px")}computeBounds(t){return t===void 0&&(t=new Rect),this.zi(),this.KL(t)}KL(t){if(this.fixedBounds.isReal())return t.f(this.fixedBounds),t.addMargin(this.li),t;let i=!0;const e=this.Et.h,s=e.length;for(let n=0;n<s;n++){const o=e[n];if(!o.visible||!o.isInDocumentBounds)continue;const r=o.qt.h,l=r.length;for(let h=0;h<l;h++){const a=r[h];if(!a.isInDocumentBounds||!a.isVisible())continue;const c=a.actualBounds;c.isReal()&&(i?(i=!1,t.f(c)):t.unionRect(c))}}return i&&t.e(0,0,0,0),t.addMargin(this.li),t}computePartsBounds(t,i){i===void 0&&(i=!1);let e;if(Array.isArray(t))for(let s=0;s<t.length;s++){const n=t[s];!i&&n instanceof Link||(n.ensureBounds(),e===void 0?e=n.actualBounds.copy():e.unionRect(n.actualBounds))}else{const s=t.iterator;for(;s.next();){const n=s.value;!i&&n instanceof Link||(n.ensureBounds(),e===void 0?e=n.actualBounds.copy():e.unionRect(n.actualBounds))}}return e===void 0?new Rect(NaN,NaN,0,0):e}on(t){if(!t&&!this.fo||this._t||this.ht===null||!this.documentBounds.isReal())return;if(this._t=!0,t){const f=this.initialPosition;if(f.isReal()){this._t=!1,this.position=f;return}let u=this.initialDocumentSpot,d=this.initialViewportSpot;u.isNoSpot()&&(u=Spot.TopLeft),d.isNoSpot()&&(d=Spot.TopLeft);const m=Point.a();m.setRectSpot(this.documentBounds,u);const g=this.viewportBounds,p=Rect.V(0,0,g.width,g.height),y=Point.a();y.setRectSpot(p,d),y.e(m.x-y.x,m.y-y.y),this._t=!1,this.position=y,Rect.o(p),Point.o(y)}let i=this.xh;t&&this.jr!==1&&(i=this.jr);const e=i!==1?this.Td(i):this.scale,s=this.wt.x,n=this.wt.y,o=this.At/e,r=this.Tt/e;let l=this.mf;const h=this.b0;if(t&&!l.isSpot()&&(h.isSpot()||h.isDefault())){const f=this.initialDocumentSpot.isSpot()&&this.initialViewportSpot.isSpot();l=h.isDefault()&&!f?Spot.Center:h}this.Z2(this.documentBounds,o,r,l,t);const a=this.scale;this.scale=e,this._t=!1;const c=this.viewportBounds;c.equalsApproxTo(s,n,o,r)||this.onViewportBoundsChanged(new Rect(s,n,o,r),c,a,!1)}Td(t){const i=this.D0;if(this.ht===null)return i;if(t===1)return this.scale;this.ensureBounds();const e=this.documentBounds;if(!e.isReal())return i;const s=e.width,n=e.height,o=this.At+(this.co?this.$t:0),r=this.Tt+(this.In?this.$t:0);let l=o/s,h=r/n;const a=this.Aa,c=a.left+a.right!==0,f=a.top+a.bottom!==0;(c||f)&&(h===l?(h=(r-this.$t)/n,l=(o-this.$t)/s):h>l?h=(r-this.$t)/n:l=(o-this.$t)/s);let u=0;return t===2?u=Math.min(h,l):t===3&&(h>l?u=(r-this.$t)/n:u=(o-this.$t)/s),u>i&&(u=i),u<this.minScale&&(u=this.minScale),u>this.maxScale&&(u=this.maxScale),u}zoomToFit(){const t=this.Pa;this.Pa=1,this.scale=this.Td(2),this.alignDocument(Spot.Center,Spot.Center),t!==1&&(this.on(!1),this.Z2(this.documentBounds,this.At/this.lt,this.Tt/this.lt,this.mf,!1)),this.Pa=t}zoomToRect(t,i){i===void 0&&(i=2);const e=t.width,s=t.height;if(e===0||s===0||isNaN(e)&&isNaN(s))return;let n=1;if(i===2||i===3)if(isNaN(e))n=this.viewportBounds.height*this.scale/s;else if(isNaN(s))n=this.viewportBounds.width*this.scale/e;else{const o=this.At,r=this.Tt;i===3?r/s>o/e?n=(r-(this.In?this.$t:0))/s:n=(o-(this.co?this.$t:0))/e:n=Math.min(r/s,o/e)}this.scale=n,this.position=new Point(t.x,t.y)}get JO(){return this._t}set JO(t){this._t=t}alignDocument(t,i){this.ensureBounds();const e=this.documentBounds,s=this.viewportBounds;this.position=new Point(e.x+(t.x*e.width+t.offsetX)-(i.x*s.width-i.offsetX),e.y+(t.y*e.height+t.offsetY)-(i.y*s.height-i.offsetY))}focusObject(t){if(t instanceof GraphObject){this.O0=t;const i=Point.a();this.E0=this.transformDocToView(t.getDocumentPoint(Spot.TopLeft,i)),Point.o(i)}else this.O0=null,this.E0=Point.Pn}Z2(t,i,e,s,n){const o=Point.V(this.wt.x,this.wt.y);let r=o.x,l=o.y;if(this.O0!==null){let h=Point.a();h=this.O0.getDocumentPoint(Spot.TopLeft,h),r=h.x-this.E0.x/this.scale,l=h.y-this.E0.y/this.scale,s=Spot.None,Point.o(h)}if(n||this.scrollMode===1){s.isSpot()&&(i>t.width&&(r=t.x+(s.x*t.width+s.offsetX)-(s.x*i-s.offsetX)),e>t.height&&(l=t.y+(s.y*t.height+s.offsetY)-(s.y*e-s.offsetY)));const h=this.Aa,a=i-t.width;if(i<t.width+h.left+h.right){let f=r+i/2;f=Math.min(f,t.right+Math.max(a,h.right)-i/2),f=Math.max(f,t.left-Math.max(a,h.left)+i/2),r=f-i/2}else r>t.left?r=t.left:r<t.right-i&&(r=t.right-i);const c=e-t.height;if(e<t.height+h.top+h.bottom){let f=l+e/2;f=Math.min(f,t.bottom+Math.max(c,h.bottom)-e/2),f=Math.max(f,t.top-Math.max(c,h.top)+e/2),l=f-e/2}else l>t.top?l=t.top:l<t.bottom-e&&(l=t.bottom-e)}if(o.x=isFinite(r)?r:-this.li.left,o.y=isFinite(l)?l:-this.li.top,this.positionComputation!==null){const h=this.positionComputation(this,o);o.x=h.x,o.y=h.y}this.Is.mL(this.wt,o),this.wt.e(o.x,o.y),this.Y0(),this.Ch(),this.Q2(),Point.o(o)}findPartAt(t,i){if(i===void 0&&(i=!0),i){const e=this.YP(t,s=>s.part,s=>s.canSelect());if(e instanceof Part)return e}else{const e=this.YP(t,s=>s.part);if(e instanceof Part)return e}return null}findObjectAt(t,i,e){i===void 0&&(i=null),e===void 0&&(e=null),this.zi();const s=this.Et.iteratorBackwards;for(;s.next();){const n=s.value;if(!n.visible)continue;const o=n.findObjectAt(t,i,e);if(o!==null)return o}return null}YP(t,i,e){i===void 0&&(i=null),e===void 0&&(e=null),this.zi();const s=this.Et.iteratorBackwards;for(;s.next();){const n=s.value;if(!n.visible||n.isTemporary)continue;const o=n.findObjectAt(t,i,e);if(o!==null)return o}return null}findPartsAt(t,i,e){return i===void 0&&(i=!0),this.$O(t,s=>s.part,i?s=>s instanceof Part&&s.canSelect():null,e)}$O(t,i,e,s){i===void 0&&(i=null),e===void 0&&(e=null),!(s instanceof List)&&!(s instanceof GSet)&&(s=new GSet),this.zi();const n=this.Et.iteratorBackwards;for(;n.next();){const o=n.value;!o.visible||o.isTemporary||o.parts.count===0||o.findObjectsAt(t,i,e,s)}return s}findObjectsAt(t,i,e,s){i===void 0&&(i=null),e===void 0&&(e=null),!(s instanceof List)&&!(s instanceof GSet)&&(s=new GSet),this.zi();const n=this.Et.iteratorBackwards;for(;n.next();){const o=n.value;!o.visible||o.parts.count===0||o.findObjectsAt(t,i,e,s)}return s}findPartsIn(t,i,e,s){return i===void 0&&(i=!1),e===void 0&&(e=!0),this.ZO(t,null,n=>n instanceof Part&&(!e||n.canSelect()),i,s)}findObjectsIn(t,i,e,s,n){i===void 0&&(i=null),e===void 0&&(e=null),s===void 0&&(s=!1),!(n instanceof List)&&!(n instanceof GSet)&&(n=new GSet),this.zi();const o=this.Et.iteratorBackwards;for(;o.next();){const r=o.value;!r.visible||r.parts.count===0||r.findObjectsIn(t,i,e,s,n)}return n}GP(t,i,e,s,n,o){const r=new GSet;this.zi();const l=this.Et.iteratorBackwards;for(;l.next();){const h=l.value;!h.visible||h.parts.count===0||h.GP(t,i,e,s,r,n,o)}return r}ZO(t,i,e,s,n){i===void 0&&(i=null),e===void 0&&(e=null),s===void 0&&(s=!1),!(n instanceof List)&&!(n instanceof GSet)&&(n=new GSet),this.zi();const o=this.Et.iteratorBackwards;for(;o.next();){const r=o.value;!r.visible||r.isTemporary||r.parts.count===0||r.findObjectsIn(t,i,e,s,n)}return n}findPartsNear(t,i,e,s,n){return e===void 0&&(e=!0),s===void 0&&(s=!0),this.QO(t,i,null,o=>o instanceof Part&&(!s||o.canSelect()),e,n)}findObjectsNear(t,i,e,s,n,o){e===void 0&&(e=null),s===void 0&&(s=null),n===void 0&&(n=!0),n!==!1&&n!==!0&&((n instanceof List||n instanceof GSet)&&(o=n),n=!0),!(o instanceof List)&&!(o instanceof GSet)&&(o=new GSet),this.zi();const r=this.Et.iteratorBackwards;for(;r.next();){const l=r.value;l.visible&&l.findObjectsNear(t,i,e,s,n,o)}return o}QO(t,i,e,s,n,o){e===void 0&&(e=null),s===void 0&&(s=null),n===void 0&&(n=!0),n!==!1&&n!==!0&&((n instanceof List||n instanceof GSet)&&(o=n),n=!0),!(o instanceof List)&&!(o instanceof GSet)&&(o=new GSet),this.zi();const r=this.Et.iteratorBackwards;for(;r.next();){const l=r.value;!l.visible||l.isTemporary||l.findObjectsNear(t,i,e,s,n,o)}return o}acceptEvent(t){return this.Nd(t,t instanceof MouseEvent)}Nd(t,i){const e=this.al;this.al=this.Da,this.Da=e,e.diagram=this,e.event=t,i?this.X0(t,e):(e.viewPoint=this.al.viewPoint,e.documentPoint=this.al.documentPoint);let s=0;const n=t;return n.ctrlKey&&(s+=1),n.altKey&&(s+=2),n.shiftKey&&(s+=4),n.metaKey&&(s+=8),e.modifiers=s,e.button=n.button,n.buttons!==void 0&&(e.buttons=n.buttons),U.zo&&n.button===0&&n.ctrlKey&&(e.button=2),e.down=!1,e.up=!1,e.clickCount=1,e.delta=0,e.handled=!1,e.bubbles=!1,e.timestamp=t.timeStamp,e.isMultiTouch=!1,e.targetDiagram=this.Lb(t,t.target),e.targetObject=null,e}Lb(t,i){if(i===null)return null;const e=Diagram.ss.get(i);if(e)return e;let s=t.path;if(!s&&U.at(t.composedPath)&&(s=t.composedPath()),s&&s[0]){const n=Diagram.ss.get(s[0]);if(n)return n}return null}YO(t,i,e){const s=this.$2(t,!0,!1,!1,!0,e);return this.X0(i,s),s.targetDiagram=this.Lb(t,t.target),s.targetObject=null,e||s.clone(this.L0),s}KO(t,i,e){const s=this.$2(t,!1,!1,!1,!1,e);let n=root.document.elementFromPoint(i.clientX,i.clientY)||null;n!==null&&n.shadowRoot&&(n=n.shadowRoot.elementFromPoint(i.clientX,i.clientY)||null);let o=this,r=t;if(n){const l=this.Lb(t,n);l&&(r=i,o=l)}return s.targetDiagram=o,this.X0(r,s),s.targetObject=null,s}$2(t,i,e,s,n,o){const r=this.al;this.al=this.Da,this.Da=r,r.diagram=this,r.clickCount=1,r.delta=0;let l=0;return t.ctrlKey&&(l+=1),t.altKey&&(l+=2),t.shiftKey&&(l+=4),t.metaKey&&(l+=8),r.modifiers=l,r.event=t,r.timestamp=t.timeStamp,r.button=e?this.firstInput.button:t.button,r.buttons=t.buttons,U.zo&&t.button===0&&t.ctrlKey&&(r.button=2),r.down=i,r.up=e,r.handled=s,r.bubbles=n,r.isMultiTouch=o,r}Xa(t,i){return t.bubbles?(Debug&&Debug.handleMessages&&U.et("NOT handled "+i.type+" "+t.toString()),!0):(Debug&&Debug.handleMessages&&U.et("handled "+i.type+" "+this.currentTool.name+" "+t.toString()),i.stopPropagation!==void 0&&i.stopPropagation(),i.cancelable!==!1&&i.preventDefault(),i.cancelBubble=!0,!1)}HO(t){const i=Diagram.ss.get(this);if(!i||!i.isEnabled)return!1;const e=i.Nd(t,!1);return e.key=t.key,e.code=t.code,e.down=!0,i.doKeyDown(),i.Xa(e,t)}vO(t){const i=Diagram.ss.get(this);if(!i||!i.isEnabled)return!1;const e=i.Nd(t,!1);return e.key=t.key,e.code=t.code,e.up=!0,i.doKeyUp(),i.Xa(e,t)}GO(t){const i=Diagram.ss.get(this);if(!i||!i.isEnabled)return!1;const e=i.Nd(t,!0);return i.mouseEnter!==null&&i.mouseEnter(e),i.currentTool.standardMouseOver(),i.Xa(e,t)}qO(t){const i=Diagram.ss.get(this);if(!i||!i.isEnabled)return!1;const e=i.Nd(t,!0);return i.mouseLeave!==null&&i.mouseLeave(e),i.Xa(e,t)}getMouse(t){const i=this.ht;if(i===null)return new Point(0,0);const e=i.getBoundingClientRect(),s=(t.clientX-e.left)*(this.At/e.width),n=(t.clientY-e.top)*(this.Tt/e.height);return new Point(s,n).Ie(this.D)}X0(t,i){const e=this.ht;let s=0,n=0;if(e!==null){const r=e.getBoundingClientRect();s=(t.clientX-r.left)*(this.At/r.width),n=(t.clientY-r.top)*(this.Tt/r.height)}i.viewPoint.e(s,n);const o=Point.V(s,n);this.D.Oe(o),i.documentPoint.f(o),Point.o(o)}IT(t,i,e){let s;if(this.Ia[0]===null)return;s=this.Ia[i];const n=this.ht;if(n!==null){const o=n.getBoundingClientRect();e.e((s.clientX-o.left)*(this.At/o.width),(s.clientY-o.top)*(this.Tt/o.height))}}invalidateDocumentBounds(){this.Fa||(this.Fa=!0,this.requestUpdate(!1))}_O(){this.Bs||this.zi(),this.ensureBounds()}redraw(){this._t||this.Bs||(this.L(),this.maybeUpdate())}isUpdateRequested(){return this.Ur}delayInitialization(t){t===void 0&&(t=null);const i=this.animationManager,e=i.isEnabled;i.stopAnimation(),i.isEnabled=!1,this.Or(),this.fo=!1,this.g1=new Point(NaN,NaN),i.isEnabled=e,this.Bs=!0;const s=this;t!==null&&U.Sn(()=>{s.Bs=!1,i.nh("Model"),t(s)},1)}requestUpdate(t){if(t===void 0&&(t=!1),this.Ur===!0||this._t||t===!1&&this.Bs)return;this.Ur=!0;const i=this;root.requestAnimationFrame(()=>{i.Ur&&i.maybeUpdate()})}maybeUpdate(){this.gd&&!this.Ur||(this.gd&&(this.gd=!1),this.Or())}_2(t,i){!this.yd||this._t||this.animationManager.defaultAnimation.isAnimating||this.YL()||(t&&this.zi(),i&&this.on(!1))}Or(t){if(this.Bs||(this.Ur=!1,this.Dt===null&&!this.wd.isReal()))return;this.Bs=!0;const i=this.animationManager,e=this.kd;if(!i.isAnimating&&e.length!==0){const c=e.h,f=c.length;for(let u=0;u<f;u++){const d=c[u];d.Ce(!1),d.g()}e.clear()}const s=this.X2;s.count>0&&(s.each(c=>c.tC()),s.clear());let n=!1,o=!1;i.defaultAnimation.isAnimating&&(o=!0,n=this.skipsUndoManager,this.skipsUndoManager=!0),i.Li||this._M(),t||this._2(!1,!0);const r=!this.undoManager.isUndoingRedoing&&(this.Jl||this.Pf.count!==0&&this.Jr.size!==0),l=!this.fo||this.cl;this.zi(!0);let h=!1;(l||r)&&(this.fo?this.iC(!this.yf,r):(this.startTransaction("Initial Layout"),i.isEnabled===!1&&i.stopAnimation(),this.iC(!1,r)),h=l),this.yf=!1,this.Jl=!1,this.zi(),this.Z1||this._O(),t||this._2(!0,!1);let a=!1;if(h){const c=Rect.a();c.f(this.viewportBounds),this.fo||(this.fo=!0,a=!0,this.skipsUndoManager||(this.undoManager.Yx=!0),this.undoManager.Kx=!0,this.tE()),this.iE(),this.zi(!1),t||this._2(!0,!0),Rect.o(c)}else if(i.rf&&i.d1){if(this.jr!==1)this.scale=this.Td(this.jr);else if(this.xh!==1)this.scale=this.Td(this.xh);else{const c=this.initialScale;isFinite(c)&&c>0&&(this.scale=c)}this.on(!0)}h&&a&&this.commitTransaction("Initial Layout"),this.ms!==null&&(this.ms.visible&&!this.xf&&(this.eC(),this.xf=!0),!this.ms.visible&&this.xf&&(this.xf=!1)),t||this.$i(this.ei),o&&(this.skipsUndoManager=n),this.Bs=!1}get ga(){return this.fo}tE(){if(this.jr!==1)this.scale=this.Td(this.jr);else if(this.xh!==1)this.scale=this.Td(this.xh);else{const i=this.initialScale;isFinite(i)&&i>0&&(this.scale=i)}this.on(!0);const t=this.Et.h;this.Dn(t,t.length,this,this.viewportBounds);for(let i=0;i<t.length;i++){const e=t[i];e.name===""&&e.Hr.reinitialize()}this.O("InitialLayoutCompleted"),this.g1.f(this.wt),this.Ld()}iE(){this.O("LayoutCompleted")}K0(t){this.Rn.add(t)}addInvalidRoute(t){this.vo?this.Ta.add(t):this.Jr.add(t)}zi(t){if(this.Rn.size===0||!this.Bs&&this.animationManager.isTicking)return;this.Bs||(this.Jl=!0);let i=!1;for(const e of this.Rn){const s=e.layer;if(s!==null&&s.isViewportAligned){i=!0;break}}if(t){this.UL(this.Rn),i&&this.Q2();return}for(let e=0;e<23&&this.Rn.size!==0;e++){const s=new Set(this.Rn);this.Rn.clear(),this.tC(s,this.Rn),Debug&&e===22&&U.et("failure to validate parts")}this.nodes.each(e=>{e instanceof Group&&e.GL(!1)}),i&&this.Q2()}UL(t,i){for(const e of t)!e.ze()||e instanceof Group||(e.dl()?(e.yt(1/0,1/0),e.Ht()):i&&i.add(e));for(const e of t)if(e instanceof Group){if(!e.isVisible())continue;this.Db(e)}}tC(t,i){this.UL(t,i);for(const e of t){if(!(e instanceof Link))continue;const s=e;s.isVisible()&&(s.dl()?(s.yt(1/0,1/0),s.Ht()):i.add(s))}for(const e of t)e instanceof Adornment&&e.isVisible()&&(e.dl()?(e.yt(1/0,1/0),e.Ht()):i.add(e))}Dd(t){const i=t instanceof Diagram,e=i?t.links:t.memberParts,s=this.Rn;if(i)this.zi(!0);else{for(;e.next();){const n=e.value;s.has(n)&&(!n.ze()||n instanceof Group||n.dl()&&(n.yt(1/0,1/0),n.Ht()))}for(e.reset();e.next();){const n=e.value;if(s.has(n)&&n instanceof Group){if(!n.isVisible())continue;this.Db(n)}}e.reset()}for(;e.next();){const n=e.value;n instanceof Link&&s.has(n)&&n.isVisible()&&n.dl()&&(n.yt(1/0,1/0),n.Ht())}}Db(t){const i=U.ct(),e=U.ct(),s=t.memberParts;for(;s.next();){const o=s.value;o.isVisible()&&(o instanceof Group?(o.$o()||o.ps()||o.Nh())&&this.Db(o):o instanceof Link?o.fromNode===t||o.toNode===t?e.push(o):i.push(o):(o.yt(1/0,1/0),o.Ht()))}let n=i.length;for(let o=0;o<n;o++){const r=i[o];r.yt(1/0,1/0),r.Ht()}U.nt(i),t.yt(1/0,1/0),t.Ht(),n=e.length;for(let o=0;o<n;o++){const r=e[o];r.yt(1/0,1/0),r.Ht()}U.nt(e)}Dn(t,i,e,s){if(!(!this.bd&&!this.animationManager.isAnimating)){for(let n=0;n<i;n++)t[n].Dn(e,s);this.zi()}}$i(t){if(this.Dt===null)return;this.ht===null&&U.n("No canvas specified"),this.bf==="svg"?this.eE(t):this.sE(t)}sE(t){const i=this.animationManager;if(i.Li||i.isAnimating&&!i.isTicking||(this.U0(),this.Dt&&this.Dt.style.opacity==="0"))return;const e=t!==this.ei,s=this.Et.h,n=s.length,o=this;if(this.Dn(s,n,o,o.viewportBounds),e)t.clearContextCache(!0),this.Vs();else if(!this.es&&!i.isAnimating)return;const r=this.D,l=this.Qi;t.setTransform(l,0,0,l,0,0),t.clearRect(0,0,this.At,this.Tt),this.ri!==1&&(t.globalAlpha=this.ri),this.sC(t);for(let a=0;a<n;a++)t.setTransform(l,0,0,l,0,0),t.transform(r.m11,r.m12,r.m21,r.m22,r.dx,r.dy),t.commitTransform(),s[a].$i(t,o);let h=!1;this.kf?this.kf.Ya(this,t)&&(h=this.F0()):h=!0,h&&(Transform.prototype.Oe=Transform.prototype.Vu),e?(this.ei.clearContextCache(!0),this.Vs()):(this.bd=!1,this.es=!1),this.ri!==1&&(t.globalAlpha=1)}nE(t,i){const e=this.D,s=this.Qi;i.setTransform(s,0,0,s,0,0),i.transform(e.m11,e.m12,e.m21,e.m22,e.dx,e.dy),i.commitTransform();const n=this.viewportBounds,o=n.position,r=new Point(n.right,n.bottom);if(i.fillStyle="red",i.fillRect(o.x-15,o.y-15,30,30),i.fillStyle="blue",i.fillRect(r.x-15,r.y-15,30,30),t.isLeaf){i.strokeStyle="rgba(255,125,212,0.55)",i.lineWidth=3,i.beginPath();const l=t.bounds;i.rect(l.x,l.y,l.width,l.height),i.stroke()}else for(let l=0;l<t.subTrees.length;l++)this.nE(t.subTrees[l],i);i.clearContextCache(!0)}eE(t){if(this.Dt===null)return;const i=this.animationManager;if(i.Li||i.isAnimating&&!i.isTicking)return;this.U0();const e=this.At,s=this.Tt;t.surface.resize(e,s,e,s);const o=this.Et.h,r=o.length,l=this;if(this.Dn(o,r,l,l.viewportBounds),!this.es&&!i.isAnimating)return;const h=this.D;t.lastDrawnPart=null,t.setDiagramPosScale(h.m11,h.m12,h.m21,h.m22,h.dx,h.dy),this.ri!==1&&(t.globalAlpha=this.ri),this.sC(t);const a=this.Qi,c=this.ht.pi;c.setTransform(a,0,0,a,0,0),c.clearRect(0,0,this.At,this.Tt);for(let u=0;u<r;u++)o[u].$i(t,l);let f=!1;this.kf?this.kf.Ya(this,c)&&(f=this.F0()):f=!0,f&&(Transform.prototype.Oe=Transform.prototype.Vu),this.bd=!1,this.es=!1}Fb(t,i,e,s,n,o,r,l,h){o===void 0&&(o=null),r===void 0&&(r=null),l===void 0&&(l=!1),h===void 0&&(h=!1),this.U0(),t.clearContextCache(!0),this.Vs(),this.Ra=!0;const a=this.lt;this.lt=s;const c=this,f=this.Et.h,u=f.length;try{const d=new Rect(n.x,n.y,e.width/s,e.height/s),m=d.copy();m.addMargin(i),this.eC(m),this.zi(),this.Dn(f,u,c,d),t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,e.width,e.height),r!==null&&r!==""&&(t.fillStyle=r,t.fillBackground(0,0,e.width,e.height));const g=Transform.a();g.Hi(),g.Zs(i.left,i.top),g.lt(s),(n.x!==0||n.y!==0)&&g.Zs(-n.x,-n.y),t.setTransform(g.m11,g.m12,g.m21,g.m22,g.dx,g.dy),t.commitTransform(),t instanceof SVGContext&&t.setDiagramPosScale(g.m11,g.m12,g.m21,g.m22,g.dx,g.dy),Transform.o(g),this.sC(t),t.globalAlpha=this.ri;const p=this.findLayer("Grid");if(o){const y=new GSet,x=o.iterator;for(x.reset();x.next();){const b=x.value;b instanceof Part&&(!h&&b.layer===p||(b.gf(),y.add(b)))}for(let b=0;b<u;b++)f[b].PO(t,c,y,l);y.each(b=>b.gf())}else for(let y=0;y<u;y++){const x=f[y];x===p?h&&x.$i(t,c,!0):x.$i(t,c,l)}this.Ra=!1,this.kf&&this.ei&&this.kf.Ya(this,this.ei)&&this.F0()}finally{this.lt=a,t.clearContextCache(!0),this.Vs(),this.Dn(f,u,c,c.viewportBounds),this.Ld(),this.ei instanceof SVGContext&&(this.ei.diagramGroup.replaceChildren(),this.redraw())}}getRenderingHint(t){return this.Wr[t]}setRenderingHint(t,i){t==="minDrawingLength"&&(this.y0=i),this.Wr[t]=i,this.redraw()}resetRenderingHints(){this.Wr=new PropertyCollection,this.Wr.drawShadows=!0,this.Wr.textGreeking=!0,this.Wr.viewportOptimizations=!U.zo,this.Wr.temporaryPixelRatio=!0,this.Wr.pictureRatioOptimization=!0,this.Wr.minDrawingLength=1,this.y0=1}sC(t){const i=this.Wr;if(i===null)return;if(i.imageSmoothingEnabled!==void 0){const s=!!i.imageSmoothingEnabled;t.setImageSmoothingEnabled(s)}const e=i.defaultFont;e!=null&&(t.font=e)}getInputOption(t){return this.ud[t]}setInputOption(t,i){this.ud[t]=i}FO(){this.ud=new PropertyCollection,this.ud.extraTouchArea=10,this.ud.extraTouchThreshold=10,this.ud.hasGestureZoom=!0}set(t){if(!t)return this;if(Debug)for(const i in t)(i.startsWith("_")||i.indexOf(".")!==-1)&&U.n("Property with underscore or period passed to Diagram.set. Did you mean to use Diagram.assign?");return Object.assign(this,t),this}attach(t){return this.setProperties(t)}setProperties(t){return Diagram.G0(this,t),this}static G0(t,i){if(!i)return;const e=t instanceof Panel,s=t instanceof Diagram;for(const n in i){n===""&&U.n("Setting properties requires non-empty property names");let o=t,r=n;if(e||s){const h=n.indexOf(".");if(h>0){const a=n.substring(0,h);e?o=t.findObject(a):(o=t[a],o==null&&(o=t.toolManager[a])),U.st(o)?r=n.substring(h+1):U.n("Unable to find object named: "+a+" in "+t.toString()+" when trying to set property: "+n)}}if(r[0]!=="_"&&!U.fx(o,r))if(s&&r==="ModelChanged"){t.addModelChangedListener(i[r]);continue}else if(s&&r==="Changed"){t.addChangedListener(i[r]);continue}else if(s&&U.fx(t.toolManager,r))o=t.toolManager;else if(s&&t.qL(r)){t.addDiagramListener(r,i[r]);continue}else if(t instanceof Model&&r==="Changed"){t.addChangedListener(i[r]);continue}else U.n('Trying to set undefined property "'+r+'" on object: '+o.toString());const l=i[n];o[r]=l,r[0]==="_"&&o instanceof GraphObject&&o.addCopyProperty(r)}}wL(){if(this.Ph.count!==0&&!(this.undoManager.transactionLevel>1)){for(;this.Ph.count>0;){const t=this.Ph;this.Ph=new GMap;const i=t.iterator;for(;i.next();){const e=i.key;e.invalidateOtherJumpOvers(i.value),e.ge()}}this.L()}}L(t){if(t===void 0)this.es=!0,this.requestUpdate();else{const i=this.viewportBounds;t.isReal()&&i.intersectsRect(t)&&(this.es=!0,this.requestUpdate())}this.O("InvalidateDraw")}invalidateViewport(t,i){if(this.es!==!0){if(this.es=!0,this.bf==="svg"){this.maybeUpdate();return}this.maybeUpdate()}}Ka(){this.yd=!0}Vs(){this.bd=!0}U0(){this.dd!==!1&&(this.dd=!1,this.zL(this.At,this.Tt))}zL(t,i){this.Ch();const e=this.Qi,s=t*e,n=i*e;this.ht.resize(s,n,t,i)&&(this.es=!0,this.ei.clearContextCache(!0))}YL(){const t=this.ht;if(t===null||this.wd.isReal())return!0;const i=this.At,e=this.Tt,s=this.Dt;let n=!1,o=this.co?this.$t:0,r=this.In?this.$t:0,l=s.clientWidth||i+o,h=s.clientHeight||e+r;const a=this.viewportBounds,c=a.x,f=a.y,u=a.width,d=a.height;if((l!==i+o||h!==e+r)&&(this.co=!1,this.In=!1,o=0,r=0,this.At=l,this.Tt=h,this.dd=!0,n=!0,this.Ch()),!this.fo||!this.viewportBounds.isReal())return!0;const m=this.xb,g=this.bb;if(this.yd=!1,!n&&!this.co&&!this.In&&!this.md&&!this.pd)return!0;const p=this.documentBounds;let y=0,x=0,b=0,S=0;const k=a.width,P=a.height,A=this.Aa;this.contentAlignment.isSpot()?(p.width>k&&(y=A.left,x=A.right),p.height>P&&(b=A.top,S=A.bottom)):(y=A.left,x=A.right,b=A.top,S=A.bottom);const N=p.width+y+x,M=p.height+b+S,C=this.scale,T=C;let L=N>l/C,D=M>h/C;if(!n&&!this.co&&!this.In&&!L&&!D)return!0;const F=p.x-y,R=a.x,I=p.right+x;let O=a.right+o;const X=p.y-b,Y=a.y,B=p.bottom+S;let K=a.bottom+r,z="1px",H="1px",v=1,j=1;this.scrollMode===1&&(L||D)&&(L&&this.hasHorizontalScrollbar&&this.allowHorizontalScroll&&(v=1,F+1<R&&(v=Math.max((R-F)*C+this.At,v)),I>O+1&&(v=Math.max((I-O)*C+this.At,v)),k+o+1<N&&(v=Math.max((N-k)*C+this.At,v)),z=v.toString()+"px"),D&&this.hasVerticalScrollbar&&this.allowVerticalScroll&&(j=1,X+1<Y&&(j=Math.max((Y-X)*C+this.Tt,j)),B>K+1&&(j=Math.max((B-K)*C+this.Tt,j)),P+r+1<M&&(j=Math.max((M-P)*C+this.Tt,j)),H=j.toString()+"px"));let $=z!=="1px",q=H!=="1px";if(!($&&q)&&($||q)){L=!(N<k+o),D=!(M<P+r),q&&(O-=this.$t),$&&(K-=this.$t),L&&this.hasHorizontalScrollbar&&this.allowHorizontalScroll&&(v=1,F+1<R&&(v=Math.max((R-F)*C+this.At,v)),I>O+1&&(v=Math.max((I-O)*C+this.At,v)),k+1<N&&(v=Math.max((N-k)*C+this.At,v)),z=v.toString()+"px"),$=z!=="1px";let V=this.Tt;$!==this.In&&(V=$?this.Tt-this.$t:this.Tt+this.$t),D&&this.hasVerticalScrollbar&&this.allowVerticalScroll&&(j=1,X+1<Y&&(j=Math.max((Y-X)*C+V,j)),B>K+1&&(j=Math.max((B-K)*C+V,j)),P+1<M&&(j=Math.max((M-P)*C+V,j)),H=j.toString()+"px"),q=H!=="1px"}if(this.M0&&!($!==this.In||q!==this.co))return(i!==this.At||e!==this.Tt)&&this.maybeUpdate(),!1;$!==this.In&&(z==="1px"?this.Tt=this.Tt+this.$t:this.Tt=Math.max(this.Tt-this.$t,1),n=!0);const Q=this.F1&&q?this.$t:0,J=this.F1&&$?this.$t:0;if(this.In=$,g.style.width=$&&Q>0?v+Q+"px":z,q!==this.co&&(H==="1px"?this.At=this.At+this.$t:this.At=Math.max(this.At-this.$t,1),n=!0,this.Pd)){const V=Point.a();q?(t.style.left=this.$t+"px",this.position=V.e(this.wt.x+this.$t/this.scale,this.wt.y)):(t.style.left="0px",this.position=V.e(this.wt.x-this.$t/this.scale,this.wt.y)),Point.o(V)}n&&this.Ch(),this.co=q,g.style.height=q&&J>0?j+J+"px":H,this.ab=!0,n&&(this.dd=!0);let tt=m.scrollLeft;if(this.hasHorizontalScrollbar&&this.allowHorizontalScroll&&(k+1<N?tt=(this.position.x-F)*C:F+1<R?tt=m.scrollWidth-m.clientWidth:I>O+1&&(tt=this.position.x*C)),this.Pd)switch(this.R1){case"negative":tt=-(m.scrollWidth-tt-m.clientWidth);break;case"reverse":tt=m.scrollWidth-tt-m.clientWidth;break}if(m.scrollLeft=tt,this.hasVerticalScrollbar&&this.allowVerticalScroll&&(P+1<M?m.scrollTop=(this.position.y-X)*C:X+1<Y?m.scrollTop=m.scrollHeight-m.clientHeight:B>K+1&&(m.scrollTop=this.position.y*C)),l=this.At,h=this.Tt,m.style.width=l+(this.co?this.$t:0)+"px",m.style.height=h+(this.In?this.$t:0)+"px",i!==l||e!==h||this.animationManager.Li){const V=Rect.V(c,f,u,d);return this.onViewportBoundsChanged(V,this.viewportBounds,T,n),Rect.o(V),!1}return!0}add(t){U.s(t,Part,Diagram,"add:part");const i=t.diagram;if(i===this)return this;i!==null&&U.n("Cannot add part "+t.toString()+" to "+this.toString()+". It is already a part of "+i.toString());let e=this.findLayer(t.layerName);if(e===null&&(e=this.findLayer("")),e===null&&U.n('Cannot add a Part when unable find a Layer named "'+t.layerName+'" and there is no default Layer'),t.layer===e)return this;const s=e.Na(99999999,t,t.diagram===this);s>=0&&this.raiseChangedEvent(3,"parts",e,null,t,null,s),e.isTemporary||this.invalidateDocumentBounds(),t.invalidateLayout(1);const n=t.layerChanged;return n!==null&&n(t,null,e),this}Na(t){this.partManager.Na(t);const i=this;Diagram.isUsingDOM()&&t.On(s=>i.HL(s)),t.data||t.Zo(),t.hasPlaceholder()&&t.g(),t.data!==null&&t.On(s=>i.partManager.nC(s,null)),(t.ps()===!0||t.Nh()===!0)&&this.K0(t),t.vL(!0,this),this.Vs(),t instanceof Node&&t.canAvoid()&&this.Fd(t),t.WL()?(t.actualBounds.isReal()&&this.L(t.Ca(t.actualBounds)),this.invalidateDocumentBounds()):t.isVisible()&&t.actualBounds.isReal()&&this.L(t.Ca(t.actualBounds)),this.jL(t),this.B0!==null&&this.B0(this,t),this.requestUpdate()}ue(t){t.clearAdornments(),this.partManager.ue(t);const i=this;t.data!==null&&t.On(s=>i.partManager.oC(s,i)),this.Rn.delete(t),t instanceof Link?this.Jr.delete(t):t instanceof Node&&t.canAvoid()&&this.Fd(t),t.WL()?(t.actualBounds.isReal()&&this.L(t.Ca(t.actualBounds)),this.invalidateDocumentBounds()):t.isVisible()&&t.actualBounds.isReal()&&this.L(t.Ca(t.actualBounds)),this.V0!==null&&this.V0(this,t),this.requestUpdate()}remove(t){return U.s(t,Part,Diagram,"remove:part"),this.rC(t,!0),this}rC(t,i){const e=t.layer;if(e===null||e.diagram!==this)return;t.isSelected=!1,t.isHighlighted=!1,t.invalidateLayout(2),i&&t.Mf();const s=e.ue(-1,t,!1);s>=0&&this.raiseChangedEvent(4,"parts",e,t,null,s,null);const n=t.layerChanged;n!==null&&n(t,e,null)}removeParts(t,i){if(i===void 0&&(i=!1),Array.isArray(t)){const e=t.length;for(let s=0;s<e;s++){const n=t[s];i&&!n.canDelete()||this.remove(n)}}else{const e=new GSet;e.addAll(t);const s=e.iterator;for(;s.next();){const n=s.value;i&&!n.canDelete()||this.remove(n)}}return this}copyParts(t,i,e){return e===void 0&&(e=!1),this.partManager.copyParts(t,i,e)}moveParts(t,i,e,s){if(e===void 0&&(e=!1),s===void 0&&(s=this.q0()),U.s(i,Point,Diagram,"moveParts:offset"),this.toolManager===null)return;const o=new GMap;if(t!==null)if(Array.isArray(t))for(let r=0;r<t.length;r++)this.gl(o,t[r],e,s);else{const r=t.iterator;for(;r.next();)this.gl(o,r.value,e,s)}else{let r=this.parts;for(;r.next();){const l=r.value;this.gl(o,l,e,s)}for(r=this.nodes;r.next();){const l=r.value;this.gl(o,l,e,s)}for(r=this.links;r.next();){const l=r.value;this.gl(o,l,e,s)}}this.qx(o,i,s,e)}gl(t,i,e,s,n){if(!t.has(i)&&(n===void 0&&(n=!1),!(e&&!n&&!i.canMove()&&!i.canCopy())))if(s===void 0&&(s=this.q0()),i instanceof Node){if(t.set(i,this.sn(s,i,i.location)),i instanceof Group&&(i.hasPlaceholder()||s.dragsMembers)){const r=i.memberParts;for(;r.next();){const l=r.value;this.gl(t,l,e,s,s.groupsAlwaysMove)}}const o=i.linksConnected;for(;o.next();){const r=o.value;if(t.has(r))continue;const l=r.fromNode,h=r.toNode;l!==null&&t.has(l)&&h!==null&&t.has(h)&&this.gl(t,r,e,s)}if(s.dragsTree){const r=i.findTreeChildrenNodes();for(;r.next();){const l=r.value;this.gl(t,l,e,s)}}}else if(i instanceof Link){t.set(i,this.sn(s,i));const o=i.labelNodes;for(;o.next();){const r=o.value;this.gl(t,r,e,s)}}else i instanceof Adornment||t.set(i,this.sn(s,i,i.location))}qx(t,i,e,s){if(t===null||(U.s(t,GMap,Diagram,"moveParts:parts"),t.count===0))return;const n=Point.a(),o=Point.a();o.f(i),isNaN(o.x)&&(o.x=0),isNaN(o.y)&&(o.y=0);const r=this.Mb;r||this.WT(t);const l=U.ct(),h=U.ct(),a=t.iterator;let c=Point.a();for(;a.next();){const g=a.key,p=a.value;if(g.ze()){const y=this.JL(g,t);if(y!==null)l.push(new DraggingNodeInfoPair(g,p,y));else if(!s||g.canMove()){const x=p.point;n.f(x),this.computeMove(g,n.add(o),e,c),g.location=c,p.shifted===void 0&&(p.shifted=new Point),p.shifted.f(c.subtract(x))}}else a.key instanceof Link&&h.push(new KeyValuePair(a.key,a.value))}Point.o(c);const f=l.length;for(let g=0;g<f;g++){const p=l[g],y=p.$L.point;n.f(y),p.Rb.shifted===void 0&&(p.Rb.shifted=new Point),p.Ye.location=n.add(p.Rb.shifted)}const u=Point.a(),d=Point.a(),m=h.length;for(let g=0;g<m;g++){const p=h[g],y=p.key;if(y instanceof Link){if(y.suspendsRouting){y.Gr=null;const x=y.fromNode,b=y.toNode;if(this.draggedLink!==null&&e.dragsLink){const S=p.value.point;if(y.dragComputation===null){t.set(y,this.sn(e,y,o));const k=o.x-S.x,P=o.y-S.y;y.Ir(k,P)}else{const k=Point.V(0,0),P=y.getPoint(0);P&&P.isReal()&&k.f(P),c=Point.a().f(k).add(o);let A=c;e.isGridSnapEnabled&&(e.isGridSnapRealtime||this.lastInput.up)&&(A=Point.a(),this.VM(y,c,A,e)),c.f(y.dragComputation(y,c,A)).subtract(k),t.set(y,this.sn(e,y,c));const N=c.x-S.x,M=c.y-S.y;y.Ir(N,M),Point.o(k),Point.o(c),A!==c&&Point.o(A)}}else{if(x!==null){u.f(x.location);const S=t.get(x);S!==null&&u.subtract(S.point)}if(b!==null){d.f(b.location);const S=t.get(b);S!==null&&d.subtract(S.point)}if(x!==null&&b!==null){const S=p.value.point;if(u.equalsApprox(d)||y.computeAdjusting()!==0){const k=n;k.f(u),k.subtract(S),t.set(y,this.sn(e,y,u)),y.Ir(k.x,k.y)}else y.suspendsRouting=!1,y.oi()}else{const S=p.value.point;let k;x!==null?k=u:b!==null?k=d:k=o,t.set(y,this.sn(e,y,k));const P=k.x-S.x,A=k.y-S.y;y.Ir(P,A)}}}else if(y.fromNode===null||y.toNode===null){const x=p.value.point;t.set(y,this.sn(e,y,o));const b=o.x-x.x,S=o.y-x.y;y.Ir(b,S)}}}Point.o(n),Point.o(o),Point.o(u),Point.o(d),U.nt(l),U.nt(h),r||(this.zi(),this.BP(t))}computeMove(t,i,e,s){if(s===void 0&&(s=new Point),s.f(i),t===null)return s;let n=i;const o=e.isGridSnapEnabled;o&&(e.isGridSnapRealtime||this.lastInput.up)&&(n=Point.a(),this.VM(t,i,n,e));const r=t.dragComputation!==null?t.dragComputation(t,i,n):n,l=t.minLocation;let h=l.x;isNaN(h)&&(h=o?Math.round(t.location.x*1e3)/1e3:t.location.x);let a=l.y;isNaN(a)&&(a=o?Math.round(t.location.y*1e3)/1e3:t.location.y);const c=t.maxLocation;let f=c.x;isNaN(f)&&(f=o?Math.round(t.location.x*1e3)/1e3:t.location.x);let u=c.y;return isNaN(u)&&(u=o?Math.round(t.location.y*1e3)/1e3:t.location.y),s.e(Math.max(h,Math.min(r.x,f)),Math.max(a,Math.min(r.y,u))),n!==i&&Point.o(n),s}jL(t){const i=t.layer;t.actualBounds.isReal()&&i!==null&&(i.Hr.move(t,t.actualBounds.copy(),!0),i.u2=!0)}w2(t){const i=this.Et.h;for(let e=0;e<i.length;e++)i[e].w2(t)}q0(){const t=this.toolManager.findTool("Dragging");return t instanceof DraggingTool?t.dragOptions:this.Cd}VM(t,i,e,s){if(s===void 0&&(s=this.q0()),e.f(i),t===null)return e;const n=this.grid,o=s.gridSnapCellSize;let r=o.width,l=o.height;const h=s.gridSnapOrigin;let a=h.x,c=h.y;const f=s.gridSnapCellSpot;if(n!==null){const d=n.gridCellSize;isNaN(r)&&(r=d.width),isNaN(l)&&(l=d.height);const m=n.gridOrigin;isNaN(a)&&(a=m.x),isNaN(c)&&(c=m.y)}const u=Point.V(0,0);return u.setSpot(0,0,r,l,f),G.xm(i.x,i.y,a+u.x,c+u.y,r,l,e),Point.o(u),e}WT(t){if(t===null)return;this.Mb=!0;const i=t.iterator;for(;i.next();){const e=i.key;e instanceof Link&&(e.suspendsRouting=!0)}}BP(t){if(t===null)return;const i=t.iterator;for(;i.next();){const e=i.key;e instanceof Link&&(e.suspendsRouting=!1,e.ZL()&&e.oi())}this.Mb=!1}get draggedLink(){return this.Cb}set draggedLink(t){this.Cb!==t&&(this.Cb=t,t!==null&&(this.Nb=t.fromPort,this.Ab=t.toPort))}get KP(){return this.Nb}set KP(t){this.Nb=t}get UP(){return this.Ab}set UP(t){this.Ab=t}JL(t,i){const e=t.containingGroup;if(e!==null){let s=this.JL(e,i);if(s!==null||(s=i.get(e),s!==null))return s}return null}sn(t,i,e){if(e===void 0)return new DraggingInfo(Point.kn);let s=t.isGridSnapEnabled;return!t.groupsSnapMembers&&i.containingGroup!==null&&(s=!1),s?new DraggingInfo(new Point(Math.round(e.x*1e3)/1e3,Math.round(e.y*1e3)/1e3)):new DraggingInfo(e.copy())}lC(t,i){if(U.s(t,Layer,Diagram,"addLayer:layer"),t.diagram!==null&&t.diagram!==this&&U.n("Cannot share a Layer with another Diagram: "+t.toString()+" of "+t.diagram.toString()),i===null?t.diagram!==null&&U.n("Cannot add an existing Layer to this Diagram again: "+t.toString()):(U.s(i,Layer,Diagram,"addLayer:existingLayer"),i.diagram!==this&&U.n("Existing Layer must be in this Diagram: "+i.toString()+" not in "+i.diagram.toString()),t===i&&U.n("Cannot move a Layer before or after itself: "+t.toString())),t.diagram===this)return;const e=t.name,s=this.Et,n=s.count;for(let o=0;o<n;o++)s.elt(o).name===e&&U.n("Cannot add Layer with the name '"+e+"'; a Layer with the same name is already present in this Diagram.")}addLayer(t){this.lC(t,null),t.qo(this);const i=this.Et;let e=i.count-1;if(!t.isTemporary)for(;e>=0&&i.elt(e).isTemporary;)e--;return i.insertAt(e+1,t),this.Ei!==null&&this.raiseChangedEvent(3,"layers",this,null,t,null,e+1),this.L(),this.invalidateDocumentBounds(),this}addLayerBefore(t,i){this.lC(t,i),t.qo(this);const e=this.Et,s=e.indexOf(t);s>=0&&(e.delete(t),this.Ei!==null&&this.raiseChangedEvent(4,"layers",this,t,null,s,null));const n=e.count;let o;for(o=0;o<n;o++)if(e.elt(o)===i){e.insertAt(o,t);break}return this.Ei!==null&&this.raiseChangedEvent(3,"layers",this,null,t,null,o),this.L(),s<0&&this.invalidateDocumentBounds(),this}addLayerAfter(t,i){this.lC(t,i),t.qo(this);const e=this.Et,s=e.indexOf(t);s>=0&&(e.delete(t),this.Ei!==null&&this.raiseChangedEvent(4,"layers",this,t,null,s,null));const n=e.count;let o;for(o=0;o<n;o++)if(e.elt(o)===i){e.insertAt(o+1,t);break}return this.Ei!==null&&this.raiseChangedEvent(3,"layers",this,null,t,null,o+1),this.L(),s<0&&this.invalidateDocumentBounds(),this}ul(t,i){t.qo(this),this.Et.insertAt(i,t)}QL(t){this.Et.removeAt(t)}removeLayer(t){if(U.s(t,Layer,Diagram,"removeLayer:layer"),t.diagram!==this&&U.n("Cannot remove a Layer from another Diagram: "+t+" of "+t.diagram),t.name==="")return this;const i=this.Et,e=i.indexOf(t);if(i.delete(t)){const n=t.qt.copy().iterator;for(;n.next();){const o=n.value,r=o.layerName;r!==t.name?o.layerName=r:o.layerName=""}this.Ei!==null&&this.raiseChangedEvent(4,"layers",this,t,null,e,null),this.L(),this.invalidateDocumentBounds()}return this}findLayer(t){const i=this.layers;for(;i.next();){const e=i.value;if(e.name===t)return e}return null}findRouter(t){for(const i of this.Pf)if(i.name===t)return i;return null}addModelChangedListener(t){return U.C(t,Diagram,"addModelChangedListener:listener"),this.ao===null&&(this.ao=new List),this.ao.add(t),this.model&&this.model.addChangedListener(t),this}removeModelChangedListener(t){return U.C(t,Diagram,"removeModelChangedListener:listener"),this.ao!==null&&(this.ao.delete(t),this.ao.count===0&&(this.ao=null)),this.model.removeChangedListener(t),this}addChangedListener(t){return U.C(t,Diagram,"addChangedListener:listener"),this.$r===null&&(this.$r=new List),this.$r.add(t),this}removeChangedListener(t){return U.C(t,Diagram,"removeChangedListener:listener"),this.$r!==null&&(this.$r.delete(t),this.$r.count===0&&(this.$r=null)),this}hC(t){if(!this.skipsUndoManager&&!this.model.skipsUndoManager&&this.model.undoManager.handleChanged(t),t.change!==1&&(this.isModified=!0),this.$r!==null){const i=this.$r,e=i.length;for(let s=0;s<e;s++)i.elt(s)(t)}}raiseChangedEvent(t,i,e,s,n,o,r){o===void 0&&(o=null),r===void 0&&(r=null);const l=new ChangedEvent;l.diagram=this,l.change=t,l.propertyName=i,l.object=e,l.oldValue=s,l.oldParam=o,l.newValue=n,l.newParam=r,this.hC(l)}raiseChanged(t,i,e,s,n){this.raiseChangedEvent(2,t,this,i,e,s,n)}t(t,i,e,s,n){this.raiseChangedEvent(2,t,this,i,e,s,n)}get partAdded(){return this.B0}set partAdded(t){this.partAdded!==t&&(this.B0=t)}get partRemoved(){return this.V0}set partRemoved(t){this.partRemoved!==t&&(this.V0=t)}get animationManager(){return this.Is}get undoManager(){return this.Ei.undoManager}get skipsUndoManager(){return this.Wo}set skipsUndoManager(t){U.i(t,"boolean",Diagram,"skipsUndoManager"),this.Wo=t,this.Ei.skipsUndoManager=t}get delaysLayout(){return this.Q1}set delaysLayout(t){this.Q1=t}ET(t,i){if(t===null||t.diagram!==this)return;const e=this.Me;try{this.Me=!0;const s=t.change;if(s===2){const n=t.object,o=t.propertyName,r=t.getValue(i);if(t.diagram.model.ft(n,o,r),n instanceof GraphObject){const l=n.part;l!==null&&(l.invalidateAdornments(),l instanceof Link&&(l.fromNode?.ne(l.fromPort),l.toNode?.ne(l.toPort)))}this.isModified=!0}else if(s===3){const n=t.object,o=t.newParam,r=t.newValue;if(n instanceof Panel)if(typeof o=="number"&&r instanceof GraphObject){i?n.ue(o):n.insertAt(o,r);const l=n.part;l!==null&&l.invalidateAdornments()}else typeof o=="number"&&r instanceof RowColumnDefinition&&(r.isRow?n._L(o,i?void 0:r):n.tD(o,i?void 0:r));else if(n instanceof Layer){const l=t.oldParam===!0;typeof o=="number"&&r instanceof Part&&(i?(l||(r.isSelected=!1,r.isHighlighted=!1,r.invalidateAdornments()),n.ue(l?o:-1,r,l)):n.Na(o,r,l))}else n instanceof Diagram?typeof o=="number"&&r instanceof Layer&&(i?this.QL(o):this.ul(r,o)):U.n("unknown ChangeType.Insert object: "+t.toString());this.isModified=!0}else if(s===4){const n=t.object,o=t.oldParam,r=t.oldValue;if(n instanceof Panel)typeof o=="number"&&r instanceof GraphObject?i?n.insertAt(o,r):n.ue(o):typeof o=="number"&&r instanceof RowColumnDefinition&&(r.isRow?n._L(o,i?r:void 0):n.tD(o,i?r:void 0));else if(n instanceof Layer){const l=t.newParam===!0;typeof o=="number"&&r instanceof Part&&(i?n.qt.indexOf(r)<0&&n.Na(o,r,l):(l||(r.isSelected=!1,r.isHighlighted=!1,r.invalidateAdornments()),n.ue(l?o:-1,r,l)))}else n instanceof Diagram?typeof o=="number"&&r instanceof Layer&&(i?this.ul(r,o):this.QL(o)):U.n("unknown ChangeType.Remove object: "+t.toString());this.isModified=!0}else s===1||U.n("unknown ChangedEvent: "+t.toString())}finally{this.Me=e}}startTransaction(t){return this.undoManager.startTransaction(t)}commitTransaction(t){return this.undoManager.commitTransaction(t)}rollbackTransaction(){return this.undoManager.rollbackTransaction()}commit(t,i){let e=i;e===void 0&&(e="");const s=this.skipsUndoManager,n=this.model.skipsUndoManager;e===null&&(this.skipsUndoManager=!0,e=""),this.undoManager.startTransaction(e);let o=!1;try{t(this),o=!0}finally{o?this.undoManager.commitTransaction(e):this.undoManager.rollbackTransaction(),this.skipsUndoManager=s,this.model.skipsUndoManager=n}}updateAllTargetBindings(t){this.partManager.updateAllTargetBindings(t)}updateAllThemeBindings(){if(this.partManager.updateAllThemeBindings(),this.ms!==null){const t=this.ms.part;t!==null&&t.Zo()}}setDivBackground(t){this.div&&(this.div.style.backgroundColor=t)}updateAllRelationshipsFromData(){this.partManager.updateAllRelationshipsFromData()}Y0(){const t=this.D,i=this.lt,e=this.wt;t.Hi(),i!==1&&t.lt(i),(e.x!==0||e.y!==0)&&t.Zs(-e.x,-e.y)}iD(t,i){const e=this.animationManager;if(this._t||this.Bs){this.lt=i,this.Ch(),this.L(),this.Ka(),e.pL(t,this.lt),this.Y0();return}if(this.ht===null){this.lt=i,this.Y0();return}this._t=!0;const n=this.viewportBounds.copy(),o=this.At,r=this.Tt;let l=this.zoomPoint.x,h=this.zoomPoint.y;const a=this.contentAlignment;isNaN(l)&&(a.isSide()?a.includesSide(Spot.LeftSide)?l=0:a.includesSide(Spot.RightSide)&&(l=o-1):a.isSpot()?l=a.x*(o-1):l=o/2),isNaN(h)&&(a.isSide()?a.includesSide(Spot.TopSide)?h=0:a.includesSide(Spot.BottomSide)&&(h=r-1):a.isSpot()?h=a.y*(r-1):h=r/2),this.scaleComputation!==null&&!this.animationManager.defaultAnimation.isAnimating&&(i=this.scaleComputation(this,i)),i<this.minScale&&(i=this.minScale),i>this.maxScale&&(i=this.maxScale);const c=Point.V(this.wt.x+l/t-l/i,this.wt.y+h/t-h/i);this.position=c,Point.o(c),this.lt=i,this.Y0(),this.Ch(),this._t=!1,this.onViewportBoundsChanged(n,this.viewportBounds,t,!1),this.on(!1),e.pL(t,this.lt),this.L()}Q2(){const t=this.Et.h;for(let i=0;i<t.length;i++)t[i].PL()}onViewportBoundsChanged(t,i,e,s){if(t.equals(i))return;s===void 0&&(s=!1),s||this.Ka(),this.Vs();const n=this.layout;n!==null&&n.isViewportSized&&this.autoScale===1&&(t.width!==i.width||t.height!==i.height)&&n.w();const o=this.currentTool;this.Md===!0&&o instanceof ToolManager&&!this.animationManager.isTicking&&(this.lastInput.documentPoint=this.transformViewToDoc(this.lastInput.viewPoint),o.HT(this)),this._t||this.invalidateViewport(t,i),this.Ld();const r=this.Et.h;this.Dn(r,r.length,this,this.viewportBounds),this.Zi.scale=e,this.Zi.position.x=t.x,this.Zi.position.y=t.y,this.Zi.bounds.f(t),this.Zi.canvasSize.width=Math.round(t.width*e),this.Zi.canvasSize.height=Math.round(t.height*e),this.Zi.newCanvasSize.width=this.At,this.Zi.newCanvasSize.height=this.Tt,this.Zi.isScroll=s,this.O("ViewportBoundsChanged",this.Zi,t),this.isVirtualized&&this.links.each(l=>{l.isAvoiding&&l.actualBounds.intersectsRect(i)&&l.oi()})}Ld(){this.xf=!1,this.L()}eC(t){const i=this.ms;if(i===null||!i.visible)return;const e=i.part;if(e===null||e.layer===null)return;const s=t!==void 0?t:this.db;if(!s.isReal())return;const n=s.width,o=s.height;if(i.scale=1,i.angle=0,e.layer.isViewportAligned)i.width=n*this.scale,i.height=o*this.scale,e.alignment=Spot.TopLeft;else{i.Di===null&&(i.Di=new GridPanelSettings);const r=i.Di.Cf;if(!r.isReal())return;i.width=n+r.width*2,i.height=o+r.height*2,this.Vs();const l=Point.a();G.xm(s.x,s.y,0,0,r.width,r.height,l),l.offset(-r.width,-r.height),e.location=l,Point.o(l)}e.ensureBounds()}clearSelection(t){t===void 0&&(t=!1);const i=this.selection;if(i.count===0)return;t||this.O("ChangingSelection",i);const e=i.toArray(),s=e.length;for(let n=0;n<s;n++){const o=e[n];o.isSelected=!1}i.si(),i.clear(),i.S(),t||this.O("ChangedSelection",i)}select(t){t!==null&&(U.s(t,Part,Diagram,"select:part"),t.diagram===this&&(!t.isSelected||this.selection.count>1)&&(this.O("ChangingSelection",this.selection),this.clearSelection(!0),t.isSelected=!0,this.O("ChangedSelection",this.selection)))}selectCollection(t){if(this.O("ChangingSelection",this.selection),this.clearSelection(!0),Array.isArray(t)){const i=t.length;for(let e=0;e<i;e++){const s=t[e];s instanceof Part||U.n("Diagram.selectCollection given something that is not a Part: "+s),s.isSelected=!0}}else{const i=t.iterator;for(;i.next();){const e=i.value;e instanceof Part||U.n("Diagram.selectCollection given something that is not a Part: "+e),e.isSelected=!0}}this.O("ChangedSelection",this.selection)}clearHighlighteds(){const t=this.highlighteds;if(t.count>0){const i=t.toArray(),e=i.length;for(let s=0;s<e;s++){const n=i[s];n.isHighlighted=!1}t.si(),t.clear(),t.S()}}highlight(t){t!==null&&t.diagram===this&&(U.s(t,Part,Diagram,"highlight:part"),(!t.isHighlighted||this.highlighteds.count>1)&&(this.clearHighlighteds(),t.isHighlighted=!0))}highlightCollection(t){const i=new GSet().addAll(t),s=this.highlighteds.copy().removeAll(i).iterator;for(;s.next();){const o=s.value;o.isHighlighted=!1}const n=i.iterator;for(;n.next();){const o=n.value;o instanceof Part||U.n("Diagram.highlightCollection given something that is not a Part: "+o),o.isHighlighted=!0}}scroll(t,i,e){e===void 0&&(e=1);const s=i==="up"||i==="down";let n=0;const o=Point.a();if(t==="pixel")n=e;else if(t==="line")n=e*(s?this.scrollVerticalLineChange:this.scrollHorizontalLineChange);else if(t==="page"){let l=s?this.viewportBounds.height:this.viewportBounds.width;if(l*=this.scale,l!==0){const h=Math.max(l-(s?this.scrollVerticalLineChange:this.scrollHorizontalLineChange),0);n=e*h}}else if(t==="document"){const l=this.documentBounds,h=this.viewportBounds;i==="up"?this.position=o.e(h.x,l.y):i==="left"?this.position=o.e(l.x,h.y):i==="down"?this.position=o.e(h.x,l.bottom-h.height):i==="right"&&(this.position=o.e(l.right-h.width,h.y)),Point.o(o);return}else U.n("scrolling unit must be 'pixel', 'line', 'page', or 'document', not: "+t);n/=this.scale;const r=this.position;i==="up"?this.position=o.e(r.x,r.y-n):i==="down"?this.position=o.e(r.x,r.y+n):i==="left"?this.position=o.e(r.x-n,r.y):i==="right"?this.position=o.e(r.x+n,r.y):U.n("scrolling direction must be 'up', 'down', 'left', or 'right', not: "+i),Point.o(o)}scrollToRect(t){const i=this.viewportBounds;if(i.containsRect(t))return;const e=t.center;e.x-=i.width/2,e.y-=i.height/2,this.position=e}centerRect(t){const i=this.viewportBounds,e=t.center;e.x-=i.width/2,e.y-=i.height/2,this.position=e}transformDocToView(t,i){return i===void 0?t.copy().D(this.D):i.set(t).D(this.D)}transformViewToDoc(t,i){return i===void 0?t.copy().Ie(this.D):i.set(t).Ie(this.D)}DO(t){return t.Ie(this.D)}static None=1;static Uniform=2;static UniformToFill=3;static CycleAll=1;static CycleNotDirected=2;static CycleNotDirectedFast=3;static CycleNotUndirected=4;static CycleDestinationTree=5;static CycleSourceTree=6;static DocumentScroll=1;static InfiniteScroll=2;static TreeParentCollapsed=1;static AllParentsCollapsed=2;static AnyParentsCollapsed=3;get opacity(){return this.ri}set opacity(t){const i=this.ri;i!==t&&(U.i(t,"number",Diagram,"opacity"),(t<0||t>1)&&U.q(t,"0 <= value <= 1",Diagram,"opacity"),this.ri=t,this.t("opacity",i,t),this.L())}get validCycle(){return this.v1}set validCycle(t){const i=this.v1;i!==t&&(U.j(t,CycleMode,"CycleMode"),this.v1=t,this.t("validCycle",i,t))}get layers(){return this.Et.iterator}get isModelReadOnly(){const t=this.Ei;return t===null?!1:t.isReadOnly}set isModelReadOnly(t){const i=this.Ei;i!==null&&(i.isReadOnly=t)}get isReadOnly(){return this.jo}set isReadOnly(t){const i=this.jo;i!==t&&(U.i(t,"boolean",Diagram,"isReadOnly"),this.jo=t,this.t("isReadOnly",i,t))}get isEnabled(){return this.Wi}set isEnabled(t){const i=this.Wi;i!==t&&(U.i(t,"boolean",Diagram,"isEnabled"),this.Wi=t,this.t("isEnabled",i,t))}get allowClipboard(){return this._1}set allowClipboard(t){const i=this._1;i!==t&&(U.i(t,"boolean",Diagram,"allowClipboard"),this._1=t,this.t("allowClipboard",i,t))}get allowCopy(){return this.oh}set allowCopy(t){const i=this.oh;i!==t&&(U.i(t,"boolean",Diagram,"allowCopy"),this.oh=t,this.t("allowCopy",i,t))}get allowDelete(){return this.lh}set allowDelete(t){const i=this.lh;i!==t&&(U.i(t,"boolean",Diagram,"allowDelete"),this.lh=t,this.t("allowDelete",i,t))}get allowDragOut(){return this.tb}set allowDragOut(t){const i=this.tb;i!==t&&(U.i(t,"boolean",Diagram,"allowDragOut"),this.tb=t,this.t("allowDragOut",i,t))}get allowDrop(){return this.ib}set allowDrop(t){const i=this.ib;i!==t&&(U.i(t,"boolean",Diagram,"allowDrop"),this.ib=t,this.t("allowDrop",i,t))}get allowTextEdit(){return this.hh}set allowTextEdit(t){const i=this.hh;i!==t&&(U.i(t,"boolean",Diagram,"allowTextEdit"),this.hh=t,this.t("allowTextEdit",i,t))}get allowGroup(){return this.ah}set allowGroup(t){const i=this.ah;i!==t&&(U.i(t,"boolean",Diagram,"allowGroup"),this.ah=t,this.t("allowGroup",i,t))}get allowUngroup(){return this.ch}set allowUngroup(t){const i=this.ch;i!==t&&(U.i(t,"boolean",Diagram,"allowUngroup"),this.ch=t,this.t("allowUngroup",i,t))}get allowInsert(){return this.eb}set allowInsert(t){const i=this.eb;i!==t&&(U.i(t,"boolean",Diagram,"allowInsert"),this.eb=t,this.t("allowInsert",i,t))}get allowLink(){return this.fh}set allowLink(t){const i=this.fh;i!==t&&(U.i(t,"boolean",Diagram,"allowLink"),this.fh=t,this.t("allowLink",i,t))}get allowRelink(){return this.uh}set allowRelink(t){const i=this.uh;i!==t&&(U.i(t,"boolean",Diagram,"allowRelink"),this.uh=t,this.t("allowRelink",i,t))}get allowMove(){return this.dh}set allowMove(t){const i=this.dh;i!==t&&(U.i(t,"boolean",Diagram,"allowMove"),this.dh=t,this.t("allowMove",i,t))}get allowReshape(){return this.gh}set allowReshape(t){const i=this.gh;i!==t&&(U.i(t,"boolean",Diagram,"allowReshape"),this.gh=t,this.t("allowReshape",i,t))}get allowResize(){return this.mh}set allowResize(t){const i=this.mh;i!==t&&(U.i(t,"boolean",Diagram,"allowResize"),this.mh=t,this.t("allowResize",i,t))}get allowRotate(){return this.ph}set allowRotate(t){const i=this.ph;i!==t&&(U.i(t,"boolean",Diagram,"allowRotate"),this.ph=t,this.t("allowRotate",i,t))}get allowSelect(){return this.yh}set allowSelect(t){const i=this.yh;i!==t&&(U.i(t,"boolean",Diagram,"allowSelect"),this.yh=t,this.t("allowSelect",i,t))}get allowUndo(){return this.sb}set allowUndo(t){const i=this.sb;i!==t&&(U.i(t,"boolean",Diagram,"allowUndo"),this.sb=t,this.t("allowUndo",i,t))}get allowZoom(){return this.nb}set allowZoom(t){const i=this.nb;i!==t&&(U.i(t,"boolean",Diagram,"allowZoom"),this.nb=t,this.t("allowZoom",i,t))}get hasVerticalScrollbar(){return this.pd}set hasVerticalScrollbar(t){const i=this.pd;i!==t&&(U.i(t,"boolean",Diagram,"hasVerticalScrollbar"),this.pd=t,this.Ka(),this.L(),this.t("hasVerticalScrollbar",i,t),this.on(!1))}get hasHorizontalScrollbar(){return this.md}set hasHorizontalScrollbar(t){const i=this.md;i!==t&&(U.i(t,"boolean",Diagram,"hasHorizontalScrollbar"),this.md=t,this.Ka(),this.L(),this.t("hasHorizontalScrollbar",i,t),this.on(!1))}get allowHorizontalScroll(){return this.ob}set allowHorizontalScroll(t){const i=this.ob;i!==t&&(U.i(t,"boolean",Diagram,"allowHorizontalScroll"),this.ob=t,this.t("allowHorizontalScroll",i,t),this.on(!1))}get allowVerticalScroll(){return this.rb}set allowVerticalScroll(t){const i=this.rb;i!==t&&(U.i(t,"boolean",Diagram,"allowVerticalScroll"),this.rb=t,this.t("allowVerticalScroll",i,t),this.on(!1))}get scrollHorizontalLineChange(){return this.lb}set scrollHorizontalLineChange(t){const i=this.lb;i!==t&&(U.i(t,"number",Diagram,"scrollHorizontalLineChange"),t<0&&U.q(t,">= 0",Diagram,"scrollHorizontalLineChange"),this.lb=t,this.t("scrollHorizontalLineChange",i,t))}get scrollVerticalLineChange(){return this.hb}set scrollVerticalLineChange(t){const i=this.hb;i!==t&&(U.i(t,"number",Diagram,"scrollVerticalLineChange"),t<0&&U.q(t,">= 0",Diagram,"scrollVerticalLineChange"),this.hb=t,this.t("scrollVerticalLineChange",i,t))}get lastInput(){return this.Da}set lastInput(t){Debug&&U.s(t,InputEvent,Diagram,"lastInput"),this.Da=t}get previousInput(){return this.al}set previousInput(t){Debug&&U.s(t,InputEvent,Diagram,"previousInput"),this.al=t}get firstInput(){return this.L0}set firstInput(t){Debug&&U.s(t,InputEvent,Diagram,"firstInput"),this.L0=t}get currentCursor(){return this.W1}set currentCursor(t){if(t===""&&(t=this.P0),this.W1!==t){U.i(t,"string",Diagram,"currentCursor");const e=this.ht,s=this.Dt;if(e===null||s===null)return;this.W1=t;const n=e.style.cursor;e.style.cursor=t,s.style.cursor=t,e.style.cursor===n&&(e.style.cursor="-webkit-"+t,s.style.cursor="-webkit-"+t,e.style.cursor===n&&(e.style.cursor="-moz-"+t,s.style.cursor="-moz-"+t,e.style.cursor===n&&(e.style.cursor=t,s.style.cursor=t)))}}get defaultCursor(){return this.P0}set defaultCursor(t){t===""&&(t="auto");const i=this.P0;i!==t&&(U.i(t,"string",Diagram,"defaultCursor"),this.P0=t,this.t("defaultCursor",i,t))}get click(){return this.Zr}set click(t){const i=this.Zr;i!==t&&(t!==null&&U.C(t,Diagram,"click"),this.Zr=t,this.t("click",i,t))}get doubleClick(){return this.Qr}set doubleClick(t){const i=this.Qr;i!==t&&(t!==null&&U.C(t,Diagram,"doubleClick"),this.Qr=t,this.t("doubleClick",i,t))}get contextClick(){return this._r}set contextClick(t){const i=this._r;i!==t&&(t!==null&&U.C(t,Diagram,"contextClick"),this._r=t,this.t("contextClick",i,t))}get mouseOver(){return this.tl}set mouseOver(t){const i=this.tl;i!==t&&(t!==null&&U.C(t,Diagram,"mouseOver"),this.tl=t,this.t("mouseOver",i,t))}get mouseHover(){return this.il}set mouseHover(t){const i=this.il;i!==t&&(t!==null&&U.C(t,Diagram,"mouseHover"),this.il=t,this.t("mouseHover",i,t))}get mouseHold(){return this.el}set mouseHold(t){const i=this.el;i!==t&&(t!==null&&U.C(t,Diagram,"mouseHold"),this.el=t,this.t("mouseHold",i,t))}get mouseDragOver(){return this.j1}set mouseDragOver(t){const i=this.j1;i!==t&&(t!==null&&U.C(t,Diagram,"mouseDragOver"),this.j1=t,this.t("mouseDragOver",i,t))}get mouseDrop(){return this.sl}set mouseDrop(t){const i=this.sl;i!==t&&(Debug&&t!==null&&U.C(t,Diagram,"mouseDrop"),this.sl=t,this.t("mouseDrop",i,t))}get handlesDragDropForTopLevelParts(){return this.J1}set handlesDragDropForTopLevelParts(t){const i=this.J1;i!==t&&(U.i(t,"boolean",Diagram,"handlesDragDropForTopLevelParts"),this.J1=t,this.t("handlesDragDropForTopLevelParts",i,t))}get mouseEnter(){return this.nl}set mouseEnter(t){const i=this.nl;i!==t&&(t!==null&&U.C(t,Diagram,"mouseEnter"),this.nl=t,this.t("mouseEnter",i,t))}get mouseLeave(){return this.ol}set mouseLeave(t){const i=this.ol;i!==t&&(t!==null&&U.C(t,Diagram,"mouseLeave"),this.ol=t,this.t("mouseLeave",i,t))}get toolTip(){return this.rl}set toolTip(t){const i=this.rl;i!==t&&(Debug&&t!==null&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("Diagram.toolTip must be an Adornment or HTMLInfo."),this.rl=t,this.t("toolTip",i,t))}get contextMenu(){return this.ll}set contextMenu(t){const i=this.ll;i!==t&&(Debug&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("Diagram.contextMenu must be an Adornment or HTMLInfo."),this.ll=t,this.t("contextMenu",i,t))}get commandHandler(){return this.A2}set commandHandler(t){const i=this.A2;i!==t&&(U.s(t,CommandHandler,Diagram,"commandHandler"),i&&i.doStop(),this.A2=t,t.qo(this),t.doStart())}get toolManager(){return this.M2}set toolManager(t){this.M2!==t&&(U.s(t,ToolManager,Diagram,"toolManager"),this.M2=t,t.diagram=this)}get defaultTool(){return this.C2}set defaultTool(t){const i=this.C2;i!==t&&(U.s(t,Tool,Diagram,"defaultTool"),this.C2=t,t.diagram=this,this.currentTool===i&&(this.currentTool=t))}get currentTool(){return this.N2}set currentTool(t){const i=this.N2;i&&(i.isActive&&i.doDeactivate(),i.cancelWaitAfter(),i.doStop()),t===null&&(t=this.defaultTool),t!==null&&(U.s(t,Tool,Diagram,"currentTool"),this.N2=t,t.diagram=this,t.doStart())}get selection(){return this.ML}get maxSelectionCount(){return this.ub}set maxSelectionCount(t){const i=this.ub;if(i!==t)if(U.i(t,"number",Diagram,"maxSelectionCount"),t>=0&&!isNaN(t)){if(this.ub=t,this.t("maxSelectionCount",i,t),!this.undoManager.isUndoingRedoing){const e=this.selection.count-t;if(e>0){this.O("ChangingSelection",this.selection);const s=this.selection.toArray();for(let n=0;n<e;n++)s[n].isSelected=!1;this.O("ChangedSelection",this.selection)}}}else U.q(t,">= 0",Diagram,"maxSelectionCount")}get nodeSelectionAdornmentTemplate(){return this.A0}set nodeSelectionAdornmentTemplate(t){const i=this.A0;i!==t&&(U.s(t,Adornment,Diagram,"nodeSelectionAdornmentTemplate"),this.A0=t.Ut(),this.t("nodeSelectionAdornmentTemplate",i,t))}get groupSelectionAdornmentTemplate(){return this.pb}set groupSelectionAdornmentTemplate(t){const i=this.pb;i!==t&&(U.s(t,Adornment,Diagram,"groupSelectionAdornmentTemplate"),this.pb=t.Ut(),this.t("groupSelectionAdornmentTemplate",i,t))}get linkSelectionAdornmentTemplate(){return this.yb}set linkSelectionAdornmentTemplate(t){const i=this.yb;i!==t&&(U.s(t,Adornment,Diagram,"linkSelectionAdornmentTemplate"),this.yb=t.Ut(),this.t("linkSelectionAdornmentTemplate",i,t))}get highlighteds(){return this.CL}get isModified(){const t=this.undoManager;return t.isEnabled?t.currentTransaction!==null?!0:this.xd&&this.Ds!==t.historyIndex:this.xd}set isModified(t){if(this.xd!==t){U.i(t,"boolean",Diagram,"isModified"),this.xd=t;const e=this.undoManager;!t&&e.isEnabled&&(this.Ds=e.historyIndex),t||this.eD()}}eD(){const t=this.isModified;this.F2!==t&&(this.F2=t,this.O("Modified"))}get model(){return this.Ei}set model(t){const i=this.Ei;if(i!==t){U.s(t,Model,Diagram,"model"),this.currentTool.doCancel(),i&&i.undoManager!==t.undoManager&&i.undoManager.isInTransaction&&U.n("Do not replace a Diagram.model while a transaction is in progress.");const e=this.BL(!0);this.fo=!1,this.gd=!0,this.Ds=-2,this.Ur=!1;const s=this._t;this._t=!0,this.animationManager.nh("Model"),i&&(this.ao!==null&&this.ao.each(n=>i.removeChangedListener(n)),i.removeChangedListener(this.wf)),this.Ei=t,this.partManager=this.oE(this.Ei.type),this.initializePartManager(this.partManager);for(let n=0;n<e.length;n++)this.add(e[n]);t.addChangedListener(this.D2),this.partManager.aC(),t.removeChangedListener(this.D2),t.addChangedListener(this.wf),this.ao!==null&&this.ao.each(n=>t.addChangedListener(n)),this._t=s,this.invalidateDocumentBounds(),this._t||this.L(),i&&t.undoManager.copyProperties(i.undoManager)}}get themeManager(){return this.v2}set themeManager(t){const i=this.v2;i!==t&&(U.s(t,ThemeManager,Model,"themeManager"),i&&i.removeDiagram(this),this.v2=t,t!==null&&t.addDiagram(this))}initializePartManager(t){}static W2(t,i){Diagram.TL.set(t,i)}static get licenseKey(){return Diagram.cC.last()}static set licenseKey(t){Diagram.cC.add(t.replace(/\s/g,""))}static get version(){return Diagram.rE}static cC=new List;static rE="4.0.4";oE(t){const i=Diagram.TL.get(t);return i!==null?new i:new PartManager}get v(){return this.L2}set v(t){this.L2=t}get T1(){return this.NL}lE(t){if(t.model!==this.model)return;const i=t.change,e=t.propertyName;if(i===1&&e[0]==="S"){if(e==="StartingFirstTransaction"){const s=this,n=this.toolManager;n.mouseDownTools.each(o=>o.diagram=s),n.mouseMoveTools.each(o=>o.diagram=s),n.mouseUpTools.each(o=>o.diagram=s),this.routers.each(o=>o.diagram=s),!this.Bs&&!this.fo&&(this.yf=!0,this.gd&&(this.Ur=!0))}else if(e==="StartingUndo"||e==="StartingRedo"){const s=this.animationManager;this.skipsUndoManager||(s.defaultAnimation.isAnimating&&s.stopAnimation(),s.getBundleAnimation().isAnimating&&s.getBundleAnimation().stop()),this.O("ChangingSelection",this.selection)}else if(e==="StartedTransaction"){const s=this.animationManager;s.defaultAnimation.isAnimating&&!this.skipsUndoManager&&s.stopAnimation()}return}if(this.v){this.v=!1;try{if(t.modelChange===""&&i===1){(e==="FinishedUndo"||e==="FinishedRedo")&&(this.O("ChangedSelection",this.selection),this.zi());const s=this.animationManager;e==="RolledBackTransaction"&&s.stopAnimation(),this.wL(),this.yf=!0,this.maybeUpdate(),(this.undoManager.transactionLevel===0||this.undoManager.transactionLevel===1)&&s.QM(),e==="CommittedTransaction"&&this.undoManager.isJustDiscarded&&(this.Ds=Math.min(this.Ds,this.undoManager.historyIndex-1)),(e==="CommittedTransaction"||e==="RolledBackTransaction")&&this.undoManager.Kx&&U.Sn(()=>{this.isModified=!1},1);const n=t.isTransactionFinished;if(n&&(this.eD(),this.T1.clear(),this.animationManager.gO()),!this.$1&&n&&this.lastInput.targetDiagram){this.$1=!0;const o=this;U.Sn(()=>{o.currentTool.standardMouseOver(),o.$1=!1},10)}}}finally{this.v=!0}}}get Me(){return this.T2}set Me(t){this.T2=t}get Ju(){return this.Z1}set Ju(t){this.Z1=t}HL(t){const i=t.E.h;for(const e of i)e instanceof Picture&&this.fC(e)}fC(t){const i=t.element;if(i===null||!root.HTMLImageElement||!(i instanceof HTMLImageElement)||(i.Ke instanceof GSet&&i.Ke.add(this),t.hE(),!i.H0))return;const e=i.getAttribute("src")||"",s=this.kh.get(e);if(s===null){Picture.sD(t,i);const n=[];n.push(t),this.kh.set(e,n)}else{for(let n=0;n<s.length;n++)if(s[n]===t)return;s.push(t)}}aE(t){const i=t.E.h,e=i.length;for(let s=0;s<e;s++)this.uC(i[s])}uC(t){if(!(t instanceof Picture))return;const i=t.element;if(i===null||!root.HTMLImageElement||!(i instanceof HTMLImageElement)||!i.H0)return;const e=i.getAttribute("src")||"",s=this.kh.get(e);if(s!==null){for(let n=0;n<s.length;n++)if(s[n]===t){s.splice(n,1),s.length===0&&(this.kh.delete(e),i.Ke instanceof GSet&&i.Ke.delete(this),(!(i.Ke instanceof GSet)||i.Ke.count===0)&&Picture.cE(i));return}}}VL(){Picture.clearCache(),this.kh.clear()}rebuildParts(){this.partManager.rebuildParts()}cf(t,i){this.Is.cf(t,i)}af(t,i){this.Is.af(t,i)}findPartForKey(t){return this.partManager.findPartForKey(t)}findNodeForKey(t){return this.partManager.findNodeForKey(t)}findLinkForKey(t){return this.partManager.findLinkForKey(t)}findPartForData(t){return this.partManager.findPartForData(t)}findNodeForData(t){return this.partManager.findNodeForData(t)}findLinkForData(t){return this.partManager.findLinkForData(t)}findNodesByExample(...t){return this.partManager.findNodesByExample(...t)}findLinksByExample(...t){return this.partManager.findLinksByExample(...t)}get nodeTemplate(){return this.hl.get("")}set nodeTemplate(t){const i=this.hl.get("");i!==t&&(U.s(t,Part,Diagram,"nodeTemplate"),this.hl.set("",t),this.t("nodeTemplate",i,t),this.undoManager.isUndoingRedoing||this.rebuildParts())}get nodeTemplateMap(){return this.hl}set nodeTemplateMap(t){const i=this.hl;i!==t&&(U.s(t,GMap,Diagram,"nodeTemplateMap"),this.hl=t,this.t("nodeTemplateMap",i,t),this.undoManager.isUndoingRedoing||this.rebuildParts())}get groupTemplate(){return this.La.get("")}set groupTemplate(t){const i=this.La.get("");i!==t&&(U.s(t,Group,Diagram,"groupTemplate"),this.La.set("",t),this.t("groupTemplate",i,t),this.undoManager.isUndoingRedoing||this.rebuildParts())}get groupTemplateMap(){return this.La}set groupTemplateMap(t){const i=this.La;i!==t&&(U.s(t,GMap,Diagram,"groupTemplateMap"),this.La=t,this.t("groupTemplateMap",i,t),this.undoManager.isUndoingRedoing||this.rebuildParts())}get linkTemplate(){return this.Sh.get("")}set linkTemplate(t){const i=this.Sh.get("");i!==t&&(U.s(t,Link,Diagram,"linkTemplate"),this.Sh.set("",t),this.t("linkTemplate",i,t),this.undoManager.isUndoingRedoing||this.rebuildParts())}get linkTemplateMap(){return this.Sh}set linkTemplateMap(t){const i=this.Sh;i!==t&&(U.s(t,GMap,Diagram,"linkTemplateMap"),this.Sh=t,this.t("linkTemplateMap",i,t),this.undoManager.isUndoingRedoing||this.rebuildParts())}get isMouseCaptured(){return this.R2}set isMouseCaptured(t){const i=this.ht;if(i===null)return;const e=i.St;e instanceof SVGElement||(t?(this.lastInput.bubbles=!1,this.Bi(e,"pointermove",this.Ea,!1),this.Bi(e,"pointerdown",this.Mh,!1),this.Bi(e,"pointerup",this.Ba,!1),this.Bi(e,"pointerout",this.Va,!1),this.Bi(e,"pointercancel",this.za,!1),this.Gt(root,"pointermove",this.Ea,!0),this.Gt(root,"pointerdown",this.Mh,!0),this.Gt(root,"pointerup",this.Ba,!0),this.Gt(root,"pointerout",this.Va,!0),this.Gt(root,"pointercancel",this.za,!0),this.Bi(e,"wheel",this.Oa,!1),this.Gt(root,"wheel",this.Oa,!0),this.Gt(root,"selectstart",this.Sa,!1)):(this.Bi(root,"pointermove",this.Ea,!0),this.Bi(root,"pointerdown",this.Mh,!0),this.Bi(root,"pointerup",this.Ba,!0),this.Bi(root,"pointerout",this.Va,!0),this.Bi(root,"pointercancel",this.za,!0),this.Gt(e,"pointermove",this.Ea,!1),this.Gt(e,"pointerdown",this.Mh,!1),this.Gt(e,"pointerup",this.Ba,!1),this.Gt(e,"pointerout",this.Va,!1),this.Gt(e,"pointercancel",this.za,!1),this.Bi(root,"wheel",this.Oa,!0),this.Bi(root,"selectstart",this.Sa,!1),this.Gt(e,"wheel",this.Oa,!1)),this.R2=t)}get position(){return this.wt}set position(t){if(this.wt.equals(t))return;const i=Point.a().f(this.wt),e=this.viewportBounds.copy();if(this.wt.f(t),this.animationManager.mL(i,this.wt),!this._t&&!(this.ht===null&&!this.wd.isReal())){this._t=!0;const s=this.scale,n=this.At/s,o=this.Tt/s;this.Z2(this.N0,n,o,this.mf,!1),this._t=!1}else this.Ch(),this.Y0();if(!this._t){const s=this.viewportBounds;this.onViewportBoundsChanged(e,s,this.lt,!1)}Point.o(i)}get initialPosition(){return this.I1}set initialPosition(t){this.I1.equals(t)||(U.s(t,Point,Diagram,"initialPosition"),this.I1=t.T())}get initialScale(){return this.O1}set initialScale(t){this.O1!==t&&(U.i(t,"number",Diagram,"initialScale"),this.O1=t)}get grid(){return this.ms===null&&(this.ms=this.XL()),this.ms}set grid(t){let i=this.ms;if(i!==t){i===null&&(this.ms=this.XL(),i=this.ms),U.s(t,Panel,Diagram,"grid"),t.type!==Panel.Grid&&U.n("Diagram.grid must be a Panel of type Panel.Grid");const e=i.panel;e!==null&&e.remove(i),this.ms=t,t.name="GRID",e!==null&&e.add(t),this.xf=!1,this.L(),this.t("grid",i,t)}}get viewportBounds(){return this.db}Ch(){const t=this.db,i=this.wt,e=this.lt;t.e(i.x,i.y,Math.max(this.At,0)/e,Math.max(this.Tt,0)/e),this.Vs()}get viewSize(){return this.wd}set viewSize(t){const i=this.viewSize;if(!i.equals(t)){U.s(t,Size,Diagram,"viewSize"),t=t.T(),this.wd=t;let e=0,s=0;t.isReal()?(e=t.width,s=t.height):this.Dt!==null&&(e=this.Dt.clientWidth||1,s=this.Dt.clientHeight||1),this.At=e,this.Tt=s,this.Ch(),this.invalidateDocumentBounds(),this.t("viewSize",i,t),this.L()}}get fixedBounds(){return this.z1}set fixedBounds(t){const i=this.z1;i.equals(t)||(U.s(t,Rect,Diagram,"fixedBounds"),(Debug&&t.width===1/0||t.width===-1/0||t.height===1/0||t.height===-1/0)&&U.n("fixedBounds width/height must not be Infinity"),t=t.T(),this.z1=t,this.invalidateDocumentBounds(),this.t("fixedBounds",i,t))}get scrollMargin(){return this.Aa}set scrollMargin(t){typeof t=="number"?t=new Margin(t):U.s(t,Margin,Diagram,"scrollMargin");const i=this.Aa;i.equals(t)||(t=t.T(),this.Aa=t,this.t("scrollMargin",i,t),this.kb())}get scrollMode(){return this.Pa}set scrollMode(t){const i=this.Pa;i!==t&&(U.j(t,ScrollMode,"ScrollMode"),this.Pa=t,t===1&&this.on(!1),this.t("scrollMode",i,t),this.Ka(),this.L())}get scrollsPageOnFocus(){return this.X1}set scrollsPageOnFocus(t){const i=this.X1;i!==t&&(U.i(t,"boolean",Diagram,"scrollsPageOnFocus"),this.X1=t,this.t("scrollsPageOnFocus",i,t))}get positionComputation(){return this.Y1}set positionComputation(t){const i=this.Y1;i!==t&&(t!==null&&U.C(t,Diagram,"positionComputation"),this.Y1=t,this.on(!1),this.t("positionComputation",i,t))}get scaleComputation(){return this.K1}set scaleComputation(t){const i=this.K1;i!==t&&(t!==null&&U.C(t,Diagram,"scaleComputation"),this.K1=t,this.iD(this.scale,this.scale),this.t("scaleComputation",i,t))}get documentBounds(){return this.N0}nD(t){this.Fa=!1;let i=this.N0;i.equals(t)||(i=i.copy(),this.N0.f(t),this.on(!1),this.w2(t),this.O("DocumentBoundsChanged",void 0,i),this.Ka(),this.L())}ensureBounds(){if(this.Fa){const t=Rect.a();this.nD(this.computeBounds(t)),Rect.o(t)}}get isVirtualized(){return this.gb}set isVirtualized(t){const i=this.gb;i!==t&&(U.i(t,"boolean",Diagram,"isVirtualized"),this.gb=t,this.t("isVirtualized",i,t))}get scale(){return this.lt}set scale(t){const i=this.lt;U.r(t,Diagram,"scale"),i!==t&&this.iD(i,t)}get defaultScale(){return this.D0}set defaultScale(t){Debug&&U.r(t,Diagram,"defaultScale"),Debug&&!(t>0)&&U.n("defaultScale must be larger than zero, not: "+t),this.D0=t}get autoScale(){return this.xh}set autoScale(t){const i=this.xh;i!==t&&(U.j(t,AutoScale,"AutoScale"),this.xh=t,this.t("autoScale",i,t),t!==1&&this.on(!1))}get initialAutoScale(){return this.jr}set initialAutoScale(t){const i=this.jr;i!==t&&(U.j(t,AutoScale,"AutoScale"),this.jr=t,this.t("initialAutoScale",i,t))}get initialViewportSpot(){return this.G1}set initialViewportSpot(t){const i=this.G1;i!==t&&(U.s(t,Spot,Diagram,"initialViewportSpot"),t.isSpot()||U.n("initialViewportSpot must be a specific Spot: "+t),this.G1=t,this.t("initialViewportSpot",i,t))}get initialDocumentSpot(){return this.U1}set initialDocumentSpot(t){const i=this.U1;i!==t&&(U.s(t,Spot,Diagram,"initialDocumentSpot"),t.isSpot()||U.n("initialViewportSpot must be a specific Spot: "+t),this.U1=t,this.t("initialDocumentSpot",i,t))}get minScale(){return this.E1}set minScale(t){U.r(t,Diagram,"minScale");const i=this.E1;i!==t&&(t>0?(this.E1=t,this.t("minScale",i,t),t>this.scale&&(this.scale=t)):U.q(t,"> 0",Diagram,"minScale"))}get maxScale(){return this.B1}set maxScale(t){U.r(t,Diagram,"maxScale");const i=this.B1;i!==t&&(t>0?(this.B1=t,this.t("maxScale",i,t),t<this.scale&&(this.scale=t)):U.q(t,"> 0",Diagram,"maxScale"))}get zoomPoint(){return this.V1}set zoomPoint(t){this.V1.equals(t)||(U.s(t,Point,Diagram,"zoomPoint"),t=t.T(),this.V1=t)}get contentAlignment(){return this.mf}set contentAlignment(t){const i=this.mf;i.equals(t)||(U.s(t,Spot,Diagram,"contentAlignment"),t=t.T(),this.mf=t,this.t("contentAlignment",i,t),this.on(!1))}get initialContentAlignment(){return this.b0}set initialContentAlignment(t){const i=this.b0;i.equals(t)||(U.s(t,Spot,Diagram,"initialContentAlignment"),t=t.T(),this.b0=t,this.t("initialContentAlignment",i,t))}get padding(){return this.li}set padding(t){typeof t=="number"?t=new Margin(t):U.s(t,Margin,Diagram,"padding");const i=this.li;i.equals(t)||(t=t.T(),this.li=t,this.invalidateDocumentBounds(),this.t("padding",i,t))}get partManager(){return this.V2}set partManager(t){const i=this.V2;i!==t&&(U.s(t,PartManager,Diagram,"partManager"),t.diagram!==null&&U.n("Cannot share PartManagers between Diagrams: "+t.toString()),i&&i.qo(null),this.V2=t,t.qo(this))}get nodes(){return this.partManager.nodes.iterator}get links(){return this.partManager.links.iterator}get parts(){return this.partManager.parts.iterator}findTopLevelNodesAndLinks(){const t=new GSet,i=this.nodes;for(;i.next();){const s=i.value;s.isTopLevel&&t.add(s)}const e=this.links;for(;e.next();){const s=e.value;s.isTopLevel&&t.add(s)}return t.iterator}findTopLevelGroups(){return this.fl.iterator}get routers(){return this.Pf}doLinkRouting(t){this.vo=!0;const i=this.Pf.h;for(let e=0;e<i.length;e++)i[e].canRoute(t)&&i[e].routeLinks(this.Jr,t);this.vo=!1}get layout(){return this.de}set layout(t){const i=this.de;i!==t&&(U.s(t,Layout,Diagram,"layout"),this.de=t,t.diagram=this,t.group=null,this.cl=!0,this.t("layout",i,t),this.requestUpdate())}layoutDiagram(t){this.zi(),t&&this.Ib(!0),this.Bs?this.iC(!1,this.Jl||this.Pf.count!==0&&this.Rn.size!==0):(this.yf=!0,this.Or())}Ib(t){const i=this.fl.iterator;for(;i.next();)this.oD(i.value,t);this.layout&&(t?this.layout.isValidLayout=!1:this.layout.w())}oD(t,i){if(t===null)return;const e=t.Ua.iterator;for(;e.next();){const s=e.value;this.oD(s,i)}t.layout!==null&&(i?t.layout.isValidLayout=!1:t.layout.w())}iC(t,i){if(this.Q1)return;const e=this.v;this.v=!0;const s="Layout",n=this.undoManager.transactionLevel,o=this.layout,r=this.animationManager;try{n===0&&(this.undoManager.Wl=!0,this.startTransaction(s)),n<=1&&!r.defaultAnimation.isAnimating&&!r.Li&&(t||r.nh(s)),this.cl=!1;let l=this.fl.iterator;for(;l.next();)this.Dd(l.value),this.rD(l.value,t,n,i);let h=!1;if(o.isValidLayout||(!t||o.isRealtime||o.isRealtime===null||n===0?(o.doLayout(this),this.Dd(this),h=!0,o.isValidLayout=!0):this.cl=!0),h||this.Dd(this),this.doLinkRouting(this),this.Jr.clear(),this.Ta.size!==0){for(let a=0;a<23&&this.Ta.size!==0;a++){for(l=this.fl.iterator;l.next();)this.lD(l.value);const c=this.Jr;this.Jr=this.Ta,this.Ta=c,this.Dd(this),this.doLinkRouting(this)}this.Jr.clear(),this.Ta.clear()}}finally{const l=this.undoManager.Wl;n===0&&(this.commitTransaction(s),this.undoManager.Wl=!1),l&&(n===0||n===1)&&r.QM(),this.cl&&(this.cl=!o.isValidLayout),this.v=e}}rD(t,i,e,s){const n=t.Ua.iterator;for(;n.next();)this.rD(n.value,i,e,s);const o=t.layout;o!==null&&!o.isValidLayout?!i||o.isRealtime||e===0?(t.Ga=!t.location.isReal(),o.doLayout(t),t.invalidateLayout(32),this.Db(t),this.Dd(t),this.doLinkRouting(t),o.isValidLayout=!0):(this.doLinkRouting(t),this.cl=!0):s&&this.doLinkRouting(t)}lD(t){const i=t.Ua.iterator;for(;i.next();)this.lD(i.value);this.Dd(t),this.doLinkRouting(t)}get isTreePathToChildren(){return this.q1}set isTreePathToChildren(t){const i=this.q1;if(i!==t&&(U.i(t,"boolean",Diagram,"isTreePathToChildren"),this.q1=t,this.t("isTreePathToChildren",i,t),!this.undoManager.isUndoingRedoing)){const e=this.nodes;for(;e.next();)e.value.v0()}}findTreeRoots(){const t=new List,i=this.nodes;for(;i.next();){const e=i.value;e.isTopLevel&&e.findTreeParentLink()===null&&t.add(e)}return t.iterator}get treeCollapsePolicy(){return this.H1}set treeCollapsePolicy(t){const i=this.H1;i!==t&&(t!==1&&t!==2&&t!==3&&U.n("Unknown Diagram.treeCollapsePolicy: "+t),this.H1=t,this.t("treeCollapsePolicy",i,t))}get isCollapsingExpanding(){return this.P2}set isCollapsingExpanding(t){this.P2=t}RO(){const t=new GMap,i=new GMap;function e(s){const n=s.toLowerCase(),o=new List;t.set(s,o),t.set(n,o),i.set(s,s),i.set(n,s)}e("InitialAnimationStarting"),e("AnimationStarting"),e("AnimationFinished"),e("BackgroundSingleClicked"),e("BackgroundDoubleClicked"),e("BackgroundContextClicked"),e("ClipboardChanged"),e("ClipboardPasted"),e("DocumentBoundsChanged"),e("ExternalObjectsDropped"),e("FocusOrVirtualPointerEnabledChanged"),e("GainedFocus"),e("InitialLayoutCompleted"),e("LayoutCompleted"),e("LinkDrawn"),e("LinkRelinked"),e("LinkReshaped"),e("LostFocus"),e("Modified"),e("ObjectSingleClicked"),e("ObjectDoubleClicked"),e("ObjectContextClicked"),e("PartCreated"),e("PartResized"),e("PartRotated"),e("SelectionMoved"),e("SelectionCopied"),e("SelectionDeleting"),e("SelectionDeleted"),e("SelectionGrouped"),e("SelectionUngrouped"),e("ChangingSelection"),e("ChangedSelection"),e("SubGraphCollapsed"),e("SubGraphExpanded"),e("TextEdited"),e("ThemeChanged"),e("TreeCollapsed"),e("TreeExpanded"),e("ViewportBoundsChanged"),e("InvalidateDraw"),this.S2=t,this.k2=i}qL(t){const i=this.k2.get(t);return i!==null?i:this.k2.get(t.toLowerCase())}dC(t){let i=this.S2.get(t);if(i!==null)return i;const e=t.toLowerCase();if(i=this.S2.get(e),i!==null)return i;U.n("Unknown DiagramEvent name: "+t)}addDiagramListener(t,i){U.i(t,"string",Diagram,"addDiagramListener:name"),U.C(i,Diagram,"addDiagramListener:listener");const e=this.dC(t);return e!==null&&e.add(i),this}removeDiagramListener(t,i){U.i(t,"string",Diagram,"removeDiagramListener:name"),U.C(i,Diagram,"addDiagramListener:listener");const e=this.dC(t);return e!==null&&e.delete(i),this}raiseDiagramEvent(t,i,e){this.O(t,i,e)}O(t,i,e){Debug&&U.i(t,"string",Diagram,"raiseDiagramEvent:name");const s=this.dC(t),n=new DiagramEvent;n.diagram=this;const o=this.qL(t);o!==null&&(n.name=o),i!==void 0&&(n.subject=i),e!==void 0&&(n.parameter=e);const r=s.length;if(r===1)s.elt(0)(n);else if(r!==0){const l=s.toArray();for(let h=0;h<r;h++){const a=l[h];a(n)}}}isUnoccupied(t,i){return this.getPositions(!1,null,i||null).isUnoccupied(t.x,t.y,t.width,t.height)}computeOccupiedArea(t){return this.isVirtualized?this.viewportBounds.copy():this.Fa?this.KL(t):t.f(this.documentBounds)}getPositions(t,i,e){let s=this.bh;s===null&&(this.bh=s=new PositionArray(this.avoidanceCellSize));let n=i;if(s.Qo||s.qa!==n||s.gC!==e){if(s.mC=Math.max(s.Nf+1,Math.floor(this.avoidanceLimit/this.avoidanceCellSize.width)),s.pC=Math.max(s.Nf+1,Math.floor(this.avoidanceLimit/this.avoidanceCellSize.height)),n!==null&&(n=this.hD(n)),n===null){const o=Rect.a();this.computeOccupiedArea(o),o.inflate(100,100),s.Ob(o);const r=this.nodes;for(;r.next();){const l=r.value,h=l.layer;h===null||!h.visible||h.isTemporary||this.yC(l,e,o)}Rect.o(o)}else{if(n.memberParts.count>0){const l=this.computePartsBounds(n.memberParts,!1);l.inflate(20,20),s.Ob(l)}const o=Rect.a(),r=n.memberParts;for(;r.next();){const l=r.value;l instanceof Node&&this.yC(l,e,o)}Rect.o(o)}s.qa=n,s.gC=e,s.Qo=!1}else t&&s.aD();return s}get avoidanceCellSize(){return this.I2}set avoidanceCellSize(t){this.bh=null,this.I2=new Size(Math.max(1,t.width),Math.max(1,t.height))}get avoidanceLimit(){return this.O2}set avoidanceLimit(t){this.O2=Math.max(1,t)}hD(t){return t.canAvoid()?t:t.containingGroup!==null?this.hD(t.containingGroup):null}yC(t,i,e){if(t===i||!t.isVisible())return;const s=t.canAvoid();if(s){const n=t.getAvoidableRect(e);this.bh.fE(n.x,n.y,n.width,n.height)}if(t instanceof Group&&(!s||t.avoidableMembers)){const n=t.memberParts;for(;n.next();){const o=n.value;o instanceof Node&&this.yC(o,i,e)}}}Fd(t){this.bh!==null&&!this.bh.Qo&&(t===void 0||t.canAvoid())&&(this.bh.Qo=!0)}get autoScrollInterval(){return this.S0}set autoScrollInterval(t){const i=this.S0;U.r(t,Diagram,"autoScrollInterval"),i!==t&&(this.S0=t,this.t("autoScrollInterval",i,t))}get autoScrollRegion(){return this.k0}set autoScrollRegion(t){typeof t=="number"?t=new Margin(t):U.s(t,Margin,Diagram,"autoScrollRegion");const i=this.k0;i.equals(t)||(t=t.T(),this.k0=t,this.invalidateDocumentBounds(),this.t("autoScrollRegion",i,t))}doAutoScroll(t){this.T0.f(t);const i=Point.a();this.computeAutoScrollPosition(this.T0,i).equalsApprox(this.position)?this.stopAutoScroll():this.cD(),Point.o(i)}cD(){if(this.pf!==-1)return;const t=this.S0,i=this;this.pf=U.Sn(()=>{if(i.pf===-1||(i.stopAutoScroll(),i.lastInput.event===null))return;const s=Point.a(),n=i.computeAutoScrollPosition(i.T0,s);if(!n.equalsApprox(i.position)){i.position=n,i.lastInput.documentPoint=i.transformViewToDoc(i.T0),i.doMouseMove(),i.Fa=!0;const o=Rect.a();i.computeBounds(o),o.unionRect(i.documentBounds),i.nD(o),Rect.o(o),i.es=!0,i.maybeUpdate(),i.cD()}Point.o(s)},t)}stopAutoScroll(){this.pf!==-1&&(U.Vc(this.pf),this.pf=-1)}computeAutoScrollPosition(t,i){let e=this.position;i===void 0&&(i=new Point),i.f(e);const s=this.k0;if(s.top<=0&&s.left<=0&&s.right<=0&&s.bottom<=0)return i;const n=this.viewportBounds,o=this.scale,r=Rect.V(0,0,n.width*o,n.height*o),l=Point.V(0,0);if(t.x>=r.x&&t.x<r.x+s.left&&this.allowHorizontalScroll){let h=Math.max(this.scrollHorizontalLineChange,1);h=h|0,l.x-=h,t.x<r.x+s.left/2&&(l.x-=h),t.x<r.x+s.left/4&&(l.x-=4*h)}else if(t.x<=r.x+r.width&&t.x>r.x+r.width-s.right&&this.allowHorizontalScroll){let h=Math.max(this.scrollHorizontalLineChange,1);h=h|0,l.x+=h,t.x>r.x+r.width-s.right/2&&(l.x+=h),t.x>r.x+r.width-s.right/4&&(l.x+=4*h)}if(t.y>=r.y&&t.y<r.y+s.top&&this.allowVerticalScroll){let h=Math.max(this.scrollVerticalLineChange,1);h=h|0,l.y-=h,t.y<r.y+s.top/2&&(l.y-=h),t.y<r.y+s.top/4&&(l.y-=4*h)}else if(t.y<=r.y+r.height&&t.y>r.y+r.height-s.bottom&&this.allowVerticalScroll){let h=Math.max(this.scrollVerticalLineChange,1);h=h|0,l.y+=h,t.y>r.y+r.height-s.bottom/2&&(l.y+=h),t.y>r.y+r.height-s.bottom/4&&(l.y+=4*h)}return l.equalsApprox(Point.kn)||(i.x=e.x+l.x/o,i.y=e.y+l.y/o),Rect.o(r),Point.o(l),i}makeSvg(t){this.Jo.has("SVG")||this.addRenderer("SVG",new SVGSurface(this,root.document));const i=new SVGSurface(this,root.document,!0);t===void 0&&(t={});const e=this;function s(n,o){const r=e.fD(n,"SVG",i),l=r!==null?r.svg:null,h=n.svgFinished;return l&&h&&h(l),U.at(o)?(o(l),null):l}return this.uD(s,t)}makeSVG(t){return this.makeSvg(t)}addRenderer(t,i){this.Jo.set(t,i)}removeRenderer(t){this.Jo.delete(t)}cacheGroupExternalLinks(t){this.H2=t,t||this.nodes.each(i=>{i instanceof Group&&(i.W0=null)})}uD(t,i){const e=i.callback;let s=!0;const o=this.kh.iterator;for(;o.next();)if(!o.value[0].En){s=!1;break}if(!U.at(e)||s)return t(i,e,this);const r=this;function l(){const c=+new Date;for(s=!0,o.reset();o.next();)if(!o.value[0].En){s=!1;break}if(s||c-a>h){t(i,e,r);return}root.requestAnimationFrame(l)}const h=i.callbackTimeout||300,a=+new Date;return root.requestAnimationFrame(()=>l()),null}makeImage(t){return Diagram.isUsingDOM()?(t===void 0&&(t={}),t.returnType="Image",this.makeImageData(t)):null}makeImageData(t){return t===void 0&&(t={}),this.uD(this.uE,t)}static img="image";uE(t,i,e){const s=e.fD(t,"canvas",null);if(s===null)return null;const n=s.B.canvas;let o=null;if(n!==null){let r=t.returnType;switch(r===void 0?r="string":r=r.toLowerCase(),r){case Diagram.img+"data":o=s.getImageData(0,0,n.width,n.height);break;case Diagram.img:const h=(t.document||document).createElement("img");h.src=n.toDataURL(t.type,t.details),o=h;break;case"blob":{const a=n;return U.at(i)||(o="",U.n('Error: Diagram.makeImageData called with "returnType: toBlob", but no required "callback" function property defined.')),U.at(a.toBlob)?(a.toBlob(i,t.type,t.details),"toBlob"):(i(null),null)}default:o=n.toDataURL(t.type,t.details)}}return U.at(i)?(i(o),null):o}static dD=!1;fD(t,i,e){this.animationManager.stopAnimation(),this.maybeUpdate(),U.st(t)||U.n("properties argument must be an Object.");let s=!1,n=t.size||null,o=t.scale||null;t.scale!==void 0&&isNaN(t.scale)&&(o="NaN");let r=t.maxSize;t.maxSize===void 0&&(s=!0,i==="SVG"?r=new Size(1/0,1/0):r=new Size(4e3,4e3));const l=t.position||null;let h=t.parts||null;Array.isArray(h)&&(h=new List(h));let a=t.padding===void 0?1:t.padding;const c=t.background||null;let f=t.omitTemporary;f===void 0&&(f=!0);const u=t.document||root.document,d=t.elementFinished||null;let m=t.showTemporary;m===void 0&&(m=!f);let g=t.showGrid;g===void 0&&(g=m),n!==null&&isNaN(n.width)&&isNaN(n.height)&&(n=null),typeof a=="number"?a=new Margin(a):a instanceof Margin||U.n("MakeImage padding must be a Margin or a number."),a.left=Math.max(a.left,0),a.right=Math.max(a.right,0),a.top=Math.max(a.top,0),a.bottom=Math.max(a.bottom,0),this.ei&&this.ei.clearContextCache(!0);const p=new CanvasSurface(null,u,void 0,!0),y=p.pi;if(!(n||o||h||l))return p.width=this.At+Math.ceil(a.left+a.right),p.height=this.Tt+Math.ceil(a.top+a.bottom),i==="SVG"?e===null?null:(e.resize(p.width,p.height,p.width,p.height),e.pl=u,e.Rd=d,this.Fb(e.pi,a,new Size(p.width,p.height),this.lt,this.wt,h,c,m,g),e.pi):(this.Sd=!1,this.Fb(y,a,new Size(p.width,p.height),this.lt,this.wt,h,c,m,g),this.Sd=!0,p.pi);const x=this.D0,b=this.documentBounds.copy();if(b.subtractMargin(this.li),m){const T=this.Et.h,L=T.length;for(let D=0;D<L;D++){const F=T[D];if(!F.visible||!F.isTemporary)continue;const R=F.qt.h,I=R.length;for(let O=0;O<I;O++){const X=R[O];if(!X.isInDocumentBounds||!X.isVisible())continue;const Y=X.actualBounds;Y.isReal()&&b.unionRect(Y)}}}let S=new Point(b.x,b.y);if(h!==null){const T=new Rect(0,0,0,0);let L=!0;const D=h.iterator;for(D.reset();D.next();){const F=D.value;if(!(F instanceof Part))continue;const R=F.layer;if(R!==null&&!R.visible||R!==null&&!m&&R.isTemporary||!F.isVisible())continue;const I=F.actualBounds;I.isReal()&&(L?(L=!1,T.f(I)):T.unionRect(I))}b.width=T.width,b.height=T.height,S.x=T.x,S.y=T.y}l!==null&&l.isReal()&&(S=l,o||(o=x));let k=0,P=0;a!==null&&(k=a.left+a.right,P=a.top+a.bottom);let A=0,N=0;n!==null&&(A=n.width,N=n.height,isFinite(A)&&(A=Math.max(0,A-k)),isFinite(N)&&(N=Math.max(0,N-P)));let M=0,C=0;if(n!==null&&o!==null?(o==="NaN"&&(o=x),n.isReal()?(M=A,C=N):isNaN(N)?(M=A,C=b.height*o):(M=b.width*o,C=N)):n!==null?n.isReal()?(o=Math.min(A/b.width,N/b.height),M=A,C=N):isNaN(N)?(o=A/b.width,M=A,C=b.height*o):(o=N/b.height,M=b.width*o,C=N):o!==null?o==="NaN"&&r.isReal()?(o=Math.min((r.width-k)/b.width,(r.height-P)/b.height),o>x?(o=x,M=b.width,C=b.height):(M=r.width,C=r.height)):(M=b.width*o,C=b.height*o):(o=x,M=b.width,C=b.height),a!==null?(M+=k,C+=P):a=new Margin(0),r!==null){let T=r.width,L=r.height;i!=="SVG"&&s&&!Diagram.dD&&Debug&&(M>T||C>L)&&(U.et("Diagram.makeImage(data): Diagram width or height is larger than the default max size. ("+Math.ceil(M)+"x"+Math.ceil(C)+" vs 4000x4000) Consider increasing the max size."),Diagram.dD=!0),isNaN(T)&&(T=4e3),isNaN(L)&&(L=4e3),isFinite(T)&&(M=Math.min(M,T)),isFinite(L)&&(C=Math.min(C,L))}return p.width=Math.ceil(M),p.height=Math.ceil(C),i==="SVG"?e===null?null:(e.resize(p.width,p.height,p.width,p.height),e.pl=u,e.Rd=d,this.Fb(e.pi,a,new Size(Math.ceil(M),Math.ceil(C)),o,S,h,c,m,g),e.pi):(this.Sd=!1,this.Fb(y,a,new Size(Math.ceil(M),Math.ceil(C)),o,S,h,c,m,g),this.Sd=!0,p.pi)}static Ya=null;static wC="5da73c80a36255d4038e4972187c3cae51fd22";static dE="5da73c80a36255d403aa5c72106c30b35bb2006b9cd041b259";static gE="5da73c80a36255d403a5507d596a32b755f73e6196d443e1691241";static gD="7da71ca0ad381e9003c35c3a544732a84cfa3b6d90d15ce16f0e42b1ab582b40";static ux=!1;static tP=()=>{if(Diagram.wC[5]===void 0&&(Transform.prototype.Oe=Transform.prototype.Vu),!Diagram.isUsingDOM())return;const t=U.Re("canvas");t.width=350;const i=t.getContext("2d"),e=U.Si("7ca11abfd022028846"),s="7ca11abfd7330390",n=[Diagram.wC,U.ux+"4ae6247590da4bb21c324ba3a84e385776",Transform.tP+"fb236cdfda5de14c134ba1a95a2d4c7cc6f93c1387",G.za];i.scale(2,2);const o=8;for(let r=1;r<5;r++)i[U.Si(s)](U.Si(n[r-1]),o,r*15);i[e]=U.Si("39f046ebb36e4b");for(let r=1;r<5;r++)i[U.Si(s)](U.Si(n[r-1]),o,r*15);(n.length!==4||n[0][0]!=="5"||n[3][0]!=="7")&&(Transform.prototype.Oe=Transform.prototype.Vu),Diagram.Ya=t};static mE=(t,i)=>{if(Diagram.wC[5]===void 0&&(Transform.prototype.Oe=Transform.prototype.Vu),!Diagram.isUsingDOM())return;const e=U.Re("canvas");e.width=350;const s=e.getContext("2d"),n=U.Si("7ca11abfd022028846"),o="7ca11abfd7330390",r=[t,i],l=5;s.scale(2,2);for(let h=1;h<3;h++)s[U.Si(o)](U.Si(r[h-1]),l,h*11);s[n]=U.Si("39f046ebb36e4b");for(let h=1;h<3;h++)s[U.Si(o)](U.Si(r[h-1]),l,h*11);(r.length!==2||r[0][0]!=="5")&&(Transform.prototype.Oe=Transform.prototype.Vu),Diagram.Ya=e}}class DiagramHelper{mD;pD;xC;Ne;constructor(t){if(this.mD=null,this.pD="63ad05bbe23a1786468a4c741b6d2",this.xC="@onz",this.pD===this._tk){this.xC=!0,this.Ne=this.xC;return}this.Ne=null}pE(t,i){let e="f";const s=U.Si("6aa904b6ed22");let n=root[U.Si("76a715b2f73f148a")][U.Si("72ba13b5")]||"";if(n.includes(U.Si("7baa19a6f76c0896408f5070")))try{if(root[s]&&root[s]!==root){const h=root[s][U.Si("76a715b2f73f148a")][U.Si("72ba13b5")];h&&(n=h)}}catch{}const o=U.Si;if(this.Ne=!0,!Diagram.isUsingDOM())return;let r=Diagram[o("76a115b6ed251eaf4692")];if(!r){const h=n[o("76ad18b4f73e")];for(let c=n[o("73a612b6fb191d")](o("35e7"))+2;c<h;c++)e+=n[c];const a=e[o("73a612b6fb191d")](o("7da71ca0ad381e90"));this.Ne=!(a>=0&&a<e[o("73a612b6fb191d")](o("35")));return}const l=Diagram.cC.iterator;for(;l.next();){r=l.value;const h=o(r).split(o("39e9")),a=h.length===7?1:0;if(h.length===1){const C=r.toLowerCase().replace(/-/g,"");let T=null;if(C.includes(o("7bab17b7e63b1287"))?T=[Diagram.dE,Diagram.gD]:C.includes(o("74a718b0ec3b16815188567218"))&&(T=[Diagram.gE,Diagram.gD]),T!==null){if(Diagram.mE(T[0],T[1]),!t.ht)return;t.F0=t.ht.pi.B[U.Si("7eba17a4ca3b1a8346")][U.Si("78a118b7")](t.ht.pi.B,Diagram.Ya,4,4)}}if(h.length<6)return;const c=o(h[1+a]).split(".");if(h[4+a]!=="7da71ca0")return;const f=o(U[o("6cae19")]).split(".");if(!(c[0]>f[0]||c[0]===f[0]&&c[1]>=f[1]))continue;const u="73a612b6fb191d",d=root[o("74a900bae4370f8b51")][o("6fbb13a1c2311e8a57")].toLowerCase(),m=d[o(u)](o("3aad1ab6e022098b4dc4")),g=o(h[2+a]);if(m>-1){const C=d[o(u)](g.toLowerCase()+"/");if(this.Ne=!(C>-1&&C<m),!this.Ne)return}const p=n[o("76ad18b4f73e")];for(let C=n[o(u)](o("35e7"))+2;C<p;C++)e+=n[C];let y=e[o(u)](g);if(y<0&&g!==o("7da71ca0ad381e90")&&(y=e[o(u)](o("76a715b2ef3e149757"))),y<0&&(y=e[o(u)](o("76a715b2ef3e149757"))),y<0&&(y=e[o(u)](o("2bfa41fdb3784bca12"))),y<0&&(y=n[o(u)](o("7baa19a6f76c1988428554"))),y<0&&(y=n[o(u)](o("7ea902b2b9221e9c57c45767196566"))),this.Ne=!(y>=0&&y<e[o(u)](o("35"))||e[o(u)](o("35"))===-1),!this.Ne||n[o(u)](o("7fb002b6ed25128b4da25b2e"))&&(this.Ne=!(n[o(u)](g)>-1),!this.Ne))return;const x=root[U.Si("76a715b2f73f148a")][U.Si("69ad17a1e03e")],b=x[o(u)](o("7fb002b6ed25128b4da25b2e"));if(b>-1&&(this.Ne=!(x[o(u)](g)>b),!this.Ne))return;const S=g;if(S[0]!=="#")continue;const k=U.Re("div");let P=h[0+a].replace(/[A-Za-z]/g,"");for(;P.length<4;)P+="9";const A=P;P=P.substring(P.length-4);const N=parseInt(f[0]),M=parseInt(f[1]);if(N>3||N===3&&M>=1){const C=parseInt(A)%40+30,T=parseInt(S.substring(1,5),16);if(Link.yD===C+T){this.Ne=!1;return}}else{let C="";const T=["gsh","gsf"],L=["Header","Background","Display","Feedback"];if(C+=T[parseInt(P.substring(0,1),10)%2],C+=L[parseInt(P.substring(0,1),10)%4],k[o("79a417a0f0181a8946")]=C,root.document[o("78a712aa")]){root.document[o("78a712aa")][o("7bb806b6ed32388c4a875b")](k);const D=root.getComputedStyle(k).getPropertyValue(o("78a704b7e62456904c9b12701b6532a8")),F=root.getComputedStyle(k).getPropertyValue(o("75b817b0ea2202"));if(root.document[o("78a712aa")][o("68ad1bbcf533388c4a875b")](k),!D)continue;const R=root[o("77a902b0eb1b1e804a8a")],I="0."+parseInt(A,10)%100;if(F===I||D.indexOf(parseInt(S[1]+S[2],16).toString())!==-1&&D.indexOf(parseInt(S[3]+S[4],16).toString())!==-1){this.Ne=!1;return}else if(R&&R(o("32ae19a1e0331fc94084537c067a67fa59f1386b89d006")).matches){C="."+C;for(let O=0;O<root.document.styleSheets.length;O++){const X=root.document.styleSheets[O].rules||root.document.styleSheets[O].cssRules;for(const Y in X)if(C===X[Y].selectorText){this.Ne=!1;return}}}}else this.Ne=null,i&&(this.Ne=!1)}}}Ya(t,i){return i.setTransform(t.Qi/2,0,0,t.Qi/2,0,0),i.commitTransform(),this.Ne===null&&this.pE(t,!0),0<this.Ne&&this!==this.mD}}class DraggingInfo{bC;SC;constructor(t){this.bC=t===void 0?new Point:t,this.SC=new Point}get point(){return this.bC}set point(t){this.bC=t}get shifted(){return this.SC}set shifted(t){this.SC=t}}class DraggingNodeInfoPair{Ye;$L;Rb;constructor(t,i,e){this.Ye=t,this.$L=i,this.Rb=e}}class DraggingOptions{isGridSnapEnabled;isGridSnapRealtime;gridSnapCellSize;gridSnapCellSpot;gridSnapOrigin;dragsLink;dragsTree;groupsSnapMembers;groupsAlwaysMove;dragsMembers;constructor(t){this.Hi(),t&&Object.assign(this,t)}Hi(){this.isGridSnapEnabled=!1,this.isGridSnapRealtime=!0,this.gridSnapCellSize=new Size(NaN,NaN).S(),this.gridSnapCellSpot=Spot.TopLeft,this.gridSnapOrigin=new Point(NaN,NaN).S(),this.dragsLink=!1,this.dragsTree=!1,this.groupsSnapMembers=!1,this.groupsAlwaysMove=!0,this.dragsMembers=!0}}class Palette extends Diagram{constructor(t,i){let e;return t===void 0||typeof t=="string"||root.Element&&t instanceof Element?e=t:U.st(t)&&(i=t),super(e),this.wD(),i&&this.setProperties(i),this}wD(){this.allowDragOut=!0,this.allowMove=!1,this.isReadOnly=!0,this.contentAlignment=Spot.TopCenter,this.layout=new GridLayout}setupRouters(){}reset(){super.reset(),this.wD()}}class Overview extends Diagram{Eb;Bb;Vb;zb;j0;Af;th;kC;PC;Xb;MC;constructor(t,i){let e;return t===void 0||typeof t=="string"||root.Element&&t instanceof Element?e=t:U.st(t)&&(i=t),super(e),this.animationManager.isEnabled=!1,this._t=!0,this.Eb=null,this.md=!1,this.pd=!1,this.Bb=!0,this.Vb=!0,this.zb=0,this.j0=!1,this.Af=null,this.setRenderingHint("drawShadows",!1),this.th=new Part({selectable:!0,selectionAdorned:!1,selectionObjectName:"BOXSHAPE",locationObjectName:"BOXSHAPE",resizeObjectName:"BOXSHAPE",cursor:"move"}).add(new Shape({name:"BOXSHAPE",fill:"transparent",stroke:"magenta",strokeWidth:2}).theme("stroke","overviewBox")).Ut(),this.allowCopy=!1,this.allowDelete=!1,this.allowDrop=!1,this.allowSelect=!0,this.autoScrollRegion=new Margin(0,0,0,0),this.wt.e(0,0),this.toolManager.ni("Dragging",new OverviewDraggingTool,this.toolManager.mouseMoveTools),this.click=()=>{const s=this.observed;if(s===null)return;const n=s.viewportBounds,o=this.lastInput.documentPoint;s.position=new Point(o.x-n.width/2,o.y-n.height/2)},this.kC=s=>{this.invalidateDocumentBounds(),this.J0()},this.PC=s=>{this.observed!==null&&(this.invalidateDocumentBounds(),this.L())},this.Xb=s=>{this.updateDelay<1?this.L():this.j0||(this.j0=!0,U.Sn(()=>this.redraw(),this.updateDelay))},this.MC=s=>{this.observed!==null&&this.J0()},this.autoScale=2,this._t=!1,i&&this.setProperties(i),this}setupRouters(){}computePixelRatio(){return 1}redraw(){this.j0&&this.updateDelay>=1&&(this.j0=!1,this.yE()),super.redraw()}$i(){if(this.Dt===null&&U.n("No div specified"),this.ht===null&&U.n("No canvas specified"),this.ht instanceof SVGSurface||(this.box.p2(),!this.es))return;const t=this.observed;if(t===null||t.animationManager.defaultAnimation.isAnimating||!t.ga)return;this.U0();const i=this.ht,e=this.ei;if(e.clearContextCache(!0),e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,i.width,i.height),this.updateDelay<1)this.xD();else if(this.Af!==null){e.drawImage(this.Af.St,0,0);const o=this.D;e.scale(this.Qi,this.Qi),e.transform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),e.commitTransform()}const s=this.Et.h,n=s.length;for(let o=0;o<n;o++)s[o].$i(e,this);this.bd=!1,this.es=!1}yE(){const t=this.ht,i=this.ei;if(!(t===null||i===null)){if(this.U0(),this.Af===null){const e=new CanvasSurface(null);e.width=t.width,e.height=t.height,this.Af=e}try{this.ht=this.Af,this.ei=this.ht.pi,this.ei.clearContextCache(!0),this.ei.setTransform(1,0,0,1,0,0),this.ei.clearRect(0,0,this.ht.width,this.ht.height),this.xD()}finally{this.ht=t,this.ei=i}}}xD(){const t=this.observed;if(t===null)return;const i=this.drawsTemporaryLayers,e=this.drawsGrid&&i,s=t.grid;if(e&&s!==null&&s.visible&&!(isNaN(s.width)||isNaN(s.height))){const c=Rect.a().f(this.viewportBounds).unionRect(t.viewportBounds);t.eC(c),Rect.o(c),t.zi()}const n=this.D,o=this.ei;o.scale(this.Qi,this.Qi),o.transform(n.m11,n.m12,n.m21,n.m22,n.dx,n.dy),o.commitTransform();const r=this.viewportBounds,l=t.Et.h,h=l.length,a=this.Et.h;this.Dn(a,a.length,this,this.viewportBounds);for(let c=0;c<h;c++)l[c].MO(o,r,this,i,e)}get observed(){return this.Eb}set observed(t){const i=this.Eb;if(t!==null&&U.s(t,Diagram,Overview,"observed"),t instanceof Overview&&U.n("Overview.observed Diagram may not be an Overview itself: "+t),i!==t){if(i!==null&&this.wE(i),this.Eb=t,t!==null&&this.xE(t),this.invalidateDocumentBounds(),t===null){this.Af=null;const e=this.ht,s=this.ei;e&&s&&(s.setTransform(1,0,0,1,0,0),s.clearRect(0,0,e.width,e.height))}else this.Xb(null),this.J0(),this.L();this.t("observed",i,t)}}get box(){return this.th}set box(t){const i=this.th;i!==t&&(U.s(t,Part,Overview,"box"),t.Ut(),this.th=t,this.remove(i),this.add(this.th),this.J0(),this.t("box",i,t))}get drawsTemporaryLayers(){return this.Bb}set drawsTemporaryLayers(t){this.Bb!==t&&(this.Bb=t,this.redraw())}get drawsGrid(){return this.Vb}set drawsGrid(t){this.Vb!==t&&(this.Vb=t,this.redraw())}get updateDelay(){return this.zb}set updateDelay(t){t<0&&(t=0),this.zb!==t&&(this.zb=t)}xE(t){t!==null&&(t.addDiagramListener("ViewportBoundsChanged",this.kC),t.addDiagramListener("DocumentBoundsChanged",this.PC),t.addDiagramListener("InvalidateDraw",this.Xb),t.addDiagramListener("AnimationFinished",this.MC),this.add(this.box))}wE(t){t!==null&&(this.remove(this.box),t.removeDiagramListener("ViewportBoundsChanged",this.kC),t.removeDiagramListener("DocumentBoundsChanged",this.PC),t.removeDiagramListener("InvalidateDraw",this.Xb),t.removeDiagramListener("AnimationFinished",this.MC))}J0(){const t=this.box,i=this.observed;if(i===null)return;this.es=!0;const e=i.viewportBounds,s=t.selectionObject,n=Size.a();n.e(e.width,e.height),s.desiredSize=n,Size.o(n);const o=2/this.scale;s instanceof Shape&&(s.strokeWidth=o),t.location=new Point(e.x-o/2,e.y-o/2),t.isSelected=!0}computeBounds(){const t=this.observed;if(t===null)return Rect.bm;const i=t.documentBounds.copy();return i.unionRect(t.viewportBounds),i}invalidateViewport(t,i){this.es!==!0&&(this.es=!0,this.requestUpdate())}onViewportBoundsChanged(t,i,e,s){this._t||(this.Vs(),this.L(),this.Ka(),this.invalidateDocumentBounds(),this.J0(),this.Zi.scale=e,this.Zi.position.x=t.x,this.Zi.position.y=t.y,this.Zi.bounds.f(t),this.Zi.isScroll=s,this.O("ViewportBoundsChanged",this.Zi,t))}}class OverviewDraggingTool extends DraggingTool{Ah;constructor(){super(),this.Ah=Point.Pn}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(t===null||!t.allowMove||!t.allowSelect)return!1;const i=t.observed;if(i===null)return!1;const e=t.lastInput;if(!e.left||t.currentTool!==this&&(!this.isBeyondDragSize()||e.isTouchEvent&&e.timestamp-t.firstInput.timestamp<this.delay))return!1;if(this.findDraggablePart()===null){const n=i.viewportBounds;this.Ah=new Point(n.width/2,n.height/2);const o=t.firstInput.documentPoint;i.position=new Point(o.x-this.Ah.x,o.y-this.Ah.y)}return!0}doActivate(){this.Ah=Point.Pn,super.doActivate()}doUpdateCursor(t){const i=this.diagram,e=i.box;e!==null&&e.cursor&&(i.currentCursor=e.cursor)}moveParts(t,i,e){e===void 0&&(e=!1);const s=this.diagram,n=s.observed;if(n===null)return;const o=s.box;if(o===null)return;if(!this.Ah.isReal()){const l=s.firstInput.documentPoint,h=o.location;this.Ah=new Point(l.x-h.x,l.y-h.y)}const r=s.lastInput.documentPoint;n.position=new Point(r.x-this.Ah.x,r.y-this.Ah.y)}}class CommandHandler{c;Yb="go._clipboard";Kb="go._clipboardFormat";CC;NC;AC;TC;LC;DC;FC;RC;IC;Th;OC;Ub;Gb;qb;Hb;EC;_o;BC;VC;$0;zC;vb;XC;Wb;YC;KC;Id;Z0;Q0;UC;wf;GC;qC;HC;vC;WC;Od;jC;Ue;Ls;jb;_0;static Ed=["Ctrl","Shft","Alt","Meta"];static bD=CommandHandler.JC(230,40,15);static bE=CommandHandler.JC(270,40,15);static SE=CommandHandler.JC(310,40,15);constructor(t){GSet.se(this),this.c=Diagram.Qm(),this.CC=!0,this.NC=!0,this.AC=!0,this.TC=!1,this.LC=!1,this.DC=!1,this.FC=!1,this.RC="memory",this.IC=null,this.Th=null,this.OC=1.05,this.Ub=NaN,this.Gb=Point.Pn,this.qb=NaN,this.Hb=Rect.bm,this.EC=!1,this._o=null,this.BC=200,this.VC=!1,this.$0=new Adornment("Auto",{layerName:"Tool",pickable:!1,selectable:!1}).add(new Panel("Spot").add(new Shape({name:"SHAPE",fill:null,stroke:"lime",strokeWidth:4}).bindObject("stroke","adornedPart",i=>i.isSelected?"darkcyan":"lime"),new Shape({name:"SHAPE2",stretch:2,fill:null,stroke:"magenta",strokeWidth:4,strokeDashArray:[4,4]})),new Placeholder({padding:4})),this.zC=null,this.vb="",this.XC="",this.Wb=U.zo,this.YC=!1,this.KC=!1,this.Id=new Part({layerName:"Tool",isInDocumentBounds:!1,locationObjectName:"CIRCLE",locationSpot:Spot.Center,pickable:!1,selectable:!1}).add(new Shape("Circle",{isGeometryPositioned:!0,width:30,height:30,fill:null,stroke:"darkcyan",strokeWidth:6,visible:!1}).bind("visible","down"),new Shape({isGeometryPositioned:!0,geometryString:"M15 0L15 30",stroke:"magenta"}),new Shape({isGeometryPositioned:!0,geometryString:"M0 15L30 15",stroke:"magenta"}),new Shape("Circle",{name:"CIRCLE",isGeometryPositioned:!0,width:20,height:20,fill:null,stroke:"magenta",position:new Point(5,5)}),new Shape({isGeometryPositioned:!0,geometry:CommandHandler.bD,fill:null,stroke:"cyan",strokeWidth:4}).bind("geometry","button",CommandHandler.kE),new TextBlock({position:new Point(12,0),font:"bold 10pt sans-serif"}).bind("text","clickCount",i=>i>1?i.toString():""),new TextBlock({position:new Point(0,16)}).bind("text","modifiers",CommandHandler.PE)).freezeBindings(),this.Z0=10,this.Q0=1,this.UC=null,this.wf=i=>this.ME(i),this.GC=i=>this.CE(i),this.qC=i=>this.NE(i),this.HC=i=>this.AE(i),this.vC=null,this.WC="distance",this.Od=null,this.jC=0,this.Ue={},this.Ls=null,this.jb=!1,this._0=null,this.$C(),this.Id.data=this.Ue,t&&Object.assign(this,t)}toString(){return"CommandHandler"}get diagram(){return this.c}qo(t){this.c=t}doStart(){const t=this.c;t&&(t.addModelChangedListener(this.wf),t.addDiagramListener("ViewportBoundsChanged",this.GC),t.addDiagramListener("GainedFocus",this.qC),t.addDiagramListener("LostFocus",this.HC))}doStop(){const t=this.c;t&&(t.removeDiagramListener("ViewportBoundsChanged",this.GC),t.removeDiagramListener("GainedFocus",this.qC),t.removeDiagramListener("LostFocus",this.HC),t.removeModelChangedListener(this.wf))}doKeyDown(){const t=this.c,i=t.lastInput,e=i.control||i.meta,s=i.shift,n=i.alt,o=i.commandKey;e&&(o==="Insert"||o==="c")?this.canCopySelection()&&this.copySelection():e&&o==="x"||s&&o==="Delete"?this.canCutSelection()&&this.cutSelection():e&&o==="v"||s&&o==="Insert"?this.canPasteSelection()&&this.pasteSelection():e&&o==="y"||e&&s&&o==="z"||n&&s&&o==="Backspace"?this.canRedo()&&this.redo():e&&o==="z"||n&&o==="Backspace"?this.canUndo()&&this.undo():o==="Delete"||o==="Backspace"?this.canDeleteSelection()&&this.deleteSelection():e&&o==="a"?this.canSelectAll()&&this.selectAll():o==="Escape"?this.canStopCommand()&&this.stopCommand():this.SD.indexOf(o)>=0?this.TE(o,e,s):o==="PageUp"?s&&t.allowHorizontalScroll?t.scroll("page","left"):t.allowVerticalScroll&&t.scroll("page","up"):o==="PageDown"?s&&t.allowHorizontalScroll?t.scroll("page","right"):t.allowVerticalScroll&&t.scroll("page","down"):o==="Home"?e&&t.allowVerticalScroll?t.scroll("document","up"):!e&&t.allowHorizontalScroll&&t.scroll("document","left"):o==="End"?e&&t.allowVerticalScroll?t.scroll("document","down"):!e&&t.allowHorizontalScroll&&t.scroll("document","right"):o==="Space"?this.canScrollToPart()&&this.scrollToPart():o==="Minus"||o==="NumpadSubtract"?this.canDecreaseZoom()&&this.decreaseZoom():o==="Equal"||o==="NumpadAdd"?this.canIncreaseZoom()&&this.increaseZoom():e&&o==="Digit0"?this.canResetZoom()&&this.resetZoom():s&&o==="z"?this.canZoomToFit()&&this.zoomToFit():e&&!s&&o==="g"?this.canGroupSelection()&&this.groupSelection():e&&s&&o==="g"?this.canUngroupSelection()&&this.ungroupSelection():o==="F2"?this.canEditTextBlock()&&this.editTextBlock():o==="ContextMenu"||s&&o==="F10"||e&&s&&o==="Backslash"?this.canShowContextMenu()&&this.showContextMenu():i.bubbles=!0}doKeyUp(){const i=this.c.lastInput;i.bubbles=!0}stopCommand(){const t=this.c,i=t.currentTool;if(i instanceof ToolManager){if(i.currentToolTip!==null){i.hideToolTip();return}t.allowSelect&&t.clearSelection()}i!==null&&i.doCancel()}canStopCommand(){return!0}selectAll(){const t=this.c;t.L();try{t.currentCursor="wait",t.O("ChangingSelection",t.selection);const i=t.parts;for(;i.next();){const n=i.value;n.canSelect()&&!n.layer.isTemporary&&(n.isSelected=!0)}const e=t.nodes;for(;e.next();){const n=e.value;n.canSelect()&&!n.layer.isTemporary&&(n.isSelected=!0)}const s=t.links;for(;s.next();){const n=s.value;n.canSelect()&&!n.layer.isTemporary&&(n.isSelected=!0)}}finally{t.O("ChangedSelection",t.selection),t.currentCursor=""}}canSelectAll(){return this.c.allowSelect}deleteSelection(){const t=this.c;try{t.currentCursor="wait",t.O("ChangingSelection",t.selection),t.startTransaction("Delete"),t.O("SelectionDeleting",t.selection);const i=new GSet,e=t.selection.iterator;for(;e.next();){const s=e.value;Part.Lh(i,s,!0,this.deletesTree?1/0:0,this.deletesConnectedLinks?null:!1,n=>n&&n.canDelete())}t.removeParts(i,!0),t.O("SelectionDeleted",i)}finally{t.commitTransaction("Delete"),t.O("ChangedSelection",t.selection),t.currentCursor=""}}canDeleteSelection(){const t=this.c;return!(t.isReadOnly||t.isModelReadOnly||!t.allowDelete||t.selection.count===0)}copySelection(){const t=this.c;{const i=new GSet,e=t.selection.iterator;for(;e.next();){const s=e.value;Part.Lh(i,s,!0,this.copiesTree?1/0:0,this.copiesConnectedLinks,n=>n&&n.canCopy())}this.copyToClipboard(i)}}canCopySelection(){const t=this.c;return!(!t.allowCopy||!t.allowClipboard||t.selection.count===0)}cutSelection(){this.copySelection(),this.deleteSelection()}canCutSelection(){const t=this.c;return!(t.isReadOnly||t.isModelReadOnly||!t.allowCopy||!t.allowDelete||!t.allowClipboard||t.selection.count===0)}copyToClipboard(t){const i=this.c,e=this.storageLocation==="systemClipboard";if(e||this.storageLocation!=="memory")try{if(t===null)if(e&&root.navigator.clipboard)root.navigator.clipboard.writeText("");else{const n=root[this.storageLocation];if(!n)return;n.setItem(this.Yb,""),n.setItem(this.Kb,"")}else{const n=new Diagram;n.isTreePathToChildren=i.isTreePathToChildren,n.toolManager.draggingTool.dragsLink=i.toolManager.draggingTool.dragsLink,n.model=i.model.copy();const o=i.copyParts(t,n,!1);if(this.Zc(o),e&&root.navigator.clipboard)root.navigator.clipboard.writeText(n.model.toJson());else{const r=root[this.storageLocation];if(!r)return;r.setItem(this.Yb,n.model.toJson()),r.setItem(this.Kb,n.model.dataFormat)}}i.O("ClipboardChanged",t);return}catch{return}let s=null;if(t===null)Diagram.EL();else{let n=null;try{n=i.copyParts(t,null,!0),this.Zc(n)}finally{s=new List,n!==null&&s.addAll(n.iteratorValues),Diagram.z0=s,Diagram.Tb=i.model.dataFormat}}i.O("ClipboardChanged",s)}Zc(t){const i=this.diagram.model;this.copiesParentKey&&i.Hx()?t.each(e=>{const s=e.key,n=e.value;if(s instanceof Node&&n instanceof Node&&s.data&&n.data){const o=i.getParentKeyForNodeData(s.data),r=this.diagram.findNodeForKey(o);r!==null&&!t.has(r)&&i.setParentKeyForNodeData(n.data,o)}}):this.copiesGroupKey&&i.Dh()&&t.each(e=>{const s=e.key,n=e.value;if(!(s instanceof Link)&&!(n instanceof Link)&&s.data&&n.data){const o=i.getGroupForData(s.data),r=this.diagram.findNodeForKey(o);r!==null&&!t.has(r)&&i.setGroupForData(n.data,o)}})}pasteFromClipboard(){const t=this.c;if(this.storageLocation!=="memory"){const n=new GSet;try{const o=root[this.storageLocation];if(!o)return n;const r=o.getItem(this.Yb),l=o.getItem(this.Kb);if(r===null||r===""||l!==t.model.dataFormat)return n;{const h=new Diagram;h.model=Model.fromJson(r);const a=new GSet;a.addAll(h.parts).addAll(h.nodes).addAll(h.links);const c=t.copyParts(a,t,!1);return this.Zc(c),new GSet().addAll(c.iteratorValues)}}catch{return n}}const i=new GSet,e=Diagram.z0;if(e===null||Diagram.Tb!==t.model.dataFormat)return i;let s=null;try{s=t.copyParts(e,t,!1),this.Zc(s)}finally{if(s!==null){const n=s.iterator;for(;n.next();){const o=n.value,r=n.key;o.location.isReal()||(r.location.isReal()?o.location=r.location:!o.position.isReal()&&r.position.isReal()&&(o.position=r.position)),i.add(o)}}}return i}async pasteSelectionAsync(t){const i=this.c;if(root.navigator.clipboard===void 0){U.et('Cannot paste with storageLocation "clipboard", window.isSecureContext may be false.');return}try{i.currentCursor="wait",i.O("ChangingSelection",i.selection),i.startTransaction("Paste");let e=null;const s=await root.navigator.clipboard.readText();try{const o=s;if(!(o===null||o==="")){const r=new Diagram;r.model=Model.fromJson(o);const l=new GSet;l.addAll(r.parts).addAll(r.nodes).addAll(r.links);const h=i.copyParts(l,i,!1);this.Zc(h),e=new GSet().addAll(h.iteratorValues)}}catch{}if(e===null)return;e.count>0&&i.clearSelection(!0);const n=e.iterator;for(;n.next();){const o=n.value;o.isSelected=!0}if(t){const o=i.computePartsBounds(i.selection);if(o.isReal()){const r=this.computeEffectiveCollection(i.selection,i.Cd);i.qx(r,new Point(t.x-o.centerX,t.y-o.centerY),i.Cd,!1)}}i.O("ClipboardPasted",e)}finally{i.commitTransaction("Paste"),i.O("ChangedSelection",i.selection),i.currentCursor=""}}pasteSelection(t){if(this.storageLocation==="systemClipboard"){this.pasteSelectionAsync(t);return}const i=this.c;try{i.currentCursor="wait",i.O("ChangingSelection",i.selection),i.startTransaction("Paste");const e=this.pasteFromClipboard();e.count>0&&i.clearSelection(!0);const s=e.iterator;for(;s.next();){const n=s.value;n.isSelected=!0}if(t){const n=i.computePartsBounds(i.selection);if(n.isReal()){const o=this.computeEffectiveCollection(i.selection,i.Cd);i.qx(o,new Point(t.x-n.centerX,t.y-n.centerY),i.Cd,!1)}}i.O("ClipboardPasted",e)}finally{i.commitTransaction("Paste"),i.O("ChangedSelection",i.selection),i.currentCursor=""}}canPasteSelection(t){const i=this.c;if(i.isReadOnly||i.isModelReadOnly||!i.allowInsert||!i.allowClipboard)return!1;if(this.storageLocation==="systemClipboard")return!0;if(this.storageLocation!=="memory")try{const e=root[this.storageLocation];if(!e)return!1;const s=e.getItem(this.Yb),n=e.getItem(this.Kb);return!(s===null||s===""||n!==i.model.dataFormat)}catch{return!1}return!(Diagram.z0===null||Diagram.z0.count===0||Diagram.Tb!==i.model.dataFormat)}undo(){this.c.undoManager.undo()}canUndo(){const t=this.c;return t.isReadOnly||t.isModelReadOnly?!1:t.allowUndo&&t.undoManager.canUndo()}redo(){this.c.undoManager.redo()}canRedo(){const t=this.c;return t.isReadOnly||t.isModelReadOnly?!1:t.allowUndo&&t.undoManager.canRedo()}decreaseZoom(t){t===void 0&&(t=1/this.zoomFactor),U.r(t,CommandHandler,"decreaseZoom:factor");const i=this.c;if(i.autoScale!==1)return;const e=i.scale*t;e<i.minScale||e>i.maxScale||(i.scale=e)}canDecreaseZoom(t){t===void 0&&(t=1/this.zoomFactor),U.r(t,CommandHandler,"canDecreaseZoom:factor");const i=this.c;if(i.autoScale!==1)return!1;const e=i.scale*t;return e<i.minScale||e>i.maxScale?!1:i.allowZoom}increaseZoom(t){t===void 0&&(t=this.zoomFactor),U.r(t,CommandHandler,"increaseZoom:factor");const i=this.c;if(i.autoScale!==1)return;const e=i.scale*t;e<i.minScale||e>i.maxScale||(i.scale=e)}canIncreaseZoom(t){t===void 0&&(t=this.zoomFactor),U.r(t,CommandHandler,"canIncreaseZoom:factor");const i=this.c;if(i.autoScale!==1)return!1;const e=i.scale*t;return e<i.minScale||e>i.maxScale?!1:i.allowZoom}resetZoom(t){t===void 0&&(t=this.defaultScale),U.r(t,CommandHandler,"resetZoom:newscale");const i=this.c;t<i.minScale||t>i.maxScale||(i.scale=t)}canResetZoom(t){t===void 0&&(t=this.defaultScale),U.r(t,CommandHandler,"canResetZoom:newscale");const i=this.c;return t<i.minScale||t>i.maxScale?!1:i.allowZoom}zoomToFit(t){const i=this.c,e=i.animationManager;e.stopAnimation(),i.redraw();const s=i.position.copy(),n=i.scale;if(e.nh("Zoom To Fit"),!t&&this.isZoomToFitRestoreEnabled&&n===this.qb&&!isNaN(this.Ub)&&this.Gb.isReal()&&i.documentBounds.equals(this.Hb))i.scale=this.Ub,i.position=this.Gb,this.qb=NaN,this.Hb=Rect.bm;else{if(this.Ub=n,this.Gb=s,t){const o=t.copy();if(o.width>0&&o.height>0){const r=i.viewportBounds,l=r.width*n,h=r.height*n,a=Math.min(l/o.width,h/o.height),c=l/a,f=h/a;o.width<c&&(o.x-=(c-o.width)/2),o.height<f&&(o.y-=(f-o.height)/2)}i.zoomToRect(o,2)}else i.zoomToFit();this.qb=i.scale,this.Hb=i.documentBounds.copy()}e.QM()}canZoomToFit(t){return this.c.allowZoom}TE(t,i,e){const s=this.c;t==="ArrowUp"?s.allowVerticalScroll&&(i?s.scroll("pixel","up"):s.scroll("line","up")):t==="ArrowDown"?s.allowVerticalScroll&&(i?s.scroll("pixel","down"):s.scroll("line","down")):t==="ArrowLeft"?s.allowHorizontalScroll&&(i?s.scroll("pixel","left"):s.scroll("line","left")):t==="ArrowRight"&&s.allowHorizontalScroll&&(i?s.scroll("pixel","right"):s.scroll("line","right"))}scrollToPart(t){t===void 0&&(t=null),t!==null&&U.s(t,Part,CommandHandler,"part");const i=this.c;if(i.ensureBounds(),t===null){try{this._o!==null&&(this._o.next()?t=this._o.value:this._o=null)}catch{this._o=null}t===null&&(i.highlighteds.count>0?this._o=i.highlighteds.iterator:i.selection.count>0&&(this._o=i.selection.iterator),this._o!==null&&this._o.next()&&(t=this._o.value))}if(t!==null){const e=i.animationManager;e.nh("Scroll To Part");const s=this.scrollToPartPause;if(s>0){const n=this.Tf(t,[t]);if(n.length===1)i.startTransaction(),i.centerRect(t.actualBounds),i.commitTransaction("Scroll To Part");else{const o=()=>{i.startTransaction();let l=n.pop();for(;n.length>0&&l instanceof Node&&l.isTreeExpanded&&(!(l instanceof Group)||l.isSubGraphExpanded);)l=n.pop();n.length>0?(l instanceof Part&&i.scrollToRect(l.actualBounds),l instanceof Node&&!l.isTreeExpanded&&(l.isTreeExpanded=!0),l instanceof Group&&!l.isSubGraphExpanded&&(l.isSubGraphExpanded=!0)):(l instanceof Part&&i.centerRect(l.actualBounds),i.removeDiagramListener("LayoutCompleted",r)),i.commitTransaction("Scroll To Part")},r=()=>{U.Sn(o,(e.isEnabled?e.duration:0)+s)};i.addDiagramListener("LayoutCompleted",r),o()}}else{const n=i.position.copy();i.centerRect(t.actualBounds),n.equalsApprox(i.position)&&e.stopAnimation()}}}Tf(t,i){if(t.isVisible())return i;if(t instanceof Adornment){const e=t.adornedPart;e!==null&&this.Tf(e,i)}else if(t instanceof Link){const e=t.fromNode;e!==null&&this.Tf(e,i);const s=t.toNode;s!==null&&this.Tf(s,i)}else{if(t instanceof Node){const s=t.labeledLink;s!==null&&this.Tf(s,i);const n=t.findTreeParentNode();n!==null&&(!n.isTreeExpanded&&!n.wasTreeExpanded&&i.push(n),this.Tf(n,i))}const e=t.containingGroup;e!==null&&(!e.isSubGraphExpanded&&!e.wasSubGraphExpanded&&i.push(e),this.Tf(e,i))}return i}canScrollToPart(t){if(t===void 0&&(t=null),t!==null&&!(t instanceof Part))return!1;const i=this.c;return i.selection.count===0&&i.highlighteds.count===0?!1:i.allowHorizontalScroll&&i.allowVerticalScroll}collapseTree(t){t===void 0&&(t=null);const i=this.c,e="Collapse Tree";try{i.startTransaction(e),i.animationManager.nh(e);const n=new List;if(t!==null&&t.isTreeExpanded)t.collapseTree(),n.add(t);else if(t===null){const o=i.selection.iterator;for(;o.next();){const r=o.value;r instanceof Node&&r.isTreeExpanded&&(r.collapseTree(),n.add(r))}}i.O("TreeCollapsed",n)}finally{i.commitTransaction(e)}}canCollapseTree(t){t===void 0&&(t=null);const i=this.c;if(i.isReadOnly)return!1;if(t!==null){if(!(t instanceof Node)||!t.isTreeExpanded)return!1;if(t.findTreeChildrenLinks().count>0)return!0}else{const e=i.selection.iterator;for(;e.next();){const s=e.value;if(s instanceof Node){if(!s.isTreeExpanded)continue;if(s.findTreeChildrenLinks().count>0)return!0}}}return!1}expandTree(t){t===void 0&&(t=null);const i=this.c,e="Expand Tree";try{i.startTransaction(e),i.animationManager.nh(e);const n=new List;if(t!==null&&!t.isTreeExpanded)t.expandTree(),n.add(t);else if(t===null){const o=i.selection.iterator;for(;o.next();){const r=o.value;r instanceof Node&&(r.isTreeExpanded||(r.expandTree(),n.add(r)))}}i.O("TreeExpanded",n)}finally{i.commitTransaction(e)}}canExpandTree(t){t===void 0&&(t=null);const i=this.c;if(i.isReadOnly)return!1;if(t!==null){if(!(t instanceof Node)||t.isTreeExpanded)return!1;if(t.findTreeChildrenLinks().count>0)return!0}else{const e=i.selection.iterator;for(;e.next();){const s=e.value;if(s instanceof Node){if(s.isTreeExpanded)continue;if(s.findTreeChildrenLinks().count>0)return!0}}}return!1}groupSelection(){const t=this.c,i=t.model;if(!i.Dh())return;const e=this.archetypeGroupData;if(e===null)return;let s=null;try{t.currentCursor="wait",t.O("ChangingSelection",t.selection),t.startTransaction("Group");const n=new List,o=t.selection.iterator;for(;o.next();){const a=o.value;a.ze()&&a.canGroup()&&n.add(a)}const r=new List,l=n.iterator;for(;l.next();){const a=l.value;let c=!1;const f=n.iterator;for(;f.next();){const u=f.value;if(a.isMemberOf(u)){c=!0;break}}c||r.add(a)}const h=r.first();if(h!==null){let a=h.containingGroup;if(a!==null)for(;a!==null;){let c=!1;const f=r.iterator;for(;f.next();)if(!f.value.isMemberOf(a)){c=!0;break}if(c)a=a.containingGroup;else break}if(e instanceof Group)e.Ut(),s=e.copy(),s!==null&&t.add(s);else if(i.isGroupForData(e)){const c=i.copyNodeData(e);i.addNodeData(c),s=t.findNodeForData(c)}if(s!==null){a!==null&&this.isValidMember(a,s)&&(s.containingGroup=a);const c=r.iterator;for(;c.next();){const f=c.value;this.isValidMember(s,f)&&(f.containingGroup=s)}t.clearSelection(!0),s.isSelected=!0}}t.O("SelectionGrouped",s)}finally{t.commitTransaction("Group"),t.O("ChangedSelection",t.selection),t.currentCursor=""}}canGroupSelection(){const t=this.c;if(t.isReadOnly||t.isModelReadOnly||!t.allowInsert||!t.allowGroup||!t.model.Dh()||this.archetypeGroupData===null)return!1;const e=t.selection.iterator;for(;e.next();){const s=e.value;if(s.ze()&&s.canGroup())return!0}return!1}ZC(t){const i=U.ct();if(Array.isArray(t))t.forEach(n=>{n instanceof Link||n instanceof Part&&i.push(n)});else{const n=t.iterator;for(;n.next();){const o=n.value;o instanceof Link||o instanceof Part&&i.push(o)}}const e=new GSet,s=i.length;for(let n=0;n<s;n++){const o=i[n];let r=!0;for(let l=0;l<s;l++)if(o.isMemberOf(i[l])){r=!1;break}r&&e.add(o)}return U.nt(i),e}isValidMember(t,i){if(i===null||t===i||i instanceof Link)return!1;let e;return t!==null&&(t===i||t.isMemberOf(i)||(e=t.memberValidation,e!==null&&!e(t,i))||t.data===null&&i.data!==null||t.data!==null&&i.data===null)?!1:(e=this.memberValidation,e!==null?e(t,i):!0)}ungroupSelection(t){t===void 0&&(t=null);const i=this.c,e=i.model;if(e.Dh())try{i.currentCursor="wait",i.O("ChangingSelection",i.selection),i.startTransaction("Ungroup");const s=new List;if(t!==null)s.add(t);else{const o=i.selection.iterator;for(;o.next();){const r=o.value;r instanceof Group&&r.canUngroup()&&s.add(r)}}const n=new List;if(s.count>0){i.clearSelection(!0);const o=s.iterator;for(;o.next();){const r=o.value;r.expandSubGraph();const l=r.containingGroup,h=l!==null&&l.data!==null?e.getKeyForNodeData(l.data):void 0;n.addAll(r.memberParts);const a=n.iterator;for(;a.next();){const c=a.value;if(c.isSelected=!0,c instanceof Link)continue;const f=c.data;f!==null?e.setGroupForData(f,h):c.containingGroup=l}i.remove(r)}}i.O("SelectionUngrouped",s,n)}finally{i.commitTransaction("Ungroup"),i.O("ChangedSelection",i.selection),i.currentCursor=""}}canUngroupSelection(t){t===void 0&&(t=null);const i=this.c;if(i.isReadOnly||i.isModelReadOnly||!i.allowDelete||!i.allowUngroup||!i.model.Dh())return!1;if(t!==null){if(!(t instanceof Group))return!1;if(t.canUngroup())return!0}else{const s=i.selection.iterator;for(;s.next();){const n=s.value;if(n instanceof Group&&n.canUngroup())return!0}}return!1}addTopLevelParts(t,i){const e=this.ZC(t);let s=!0;const n=e.iterator;for(;n.next();){const o=n.value;o.containingGroup!==null&&(!i||this.isValidMember(null,o)?o.containingGroup=null:s=!1)}return s}collapseSubGraph(t){t===void 0&&(t=null);const i=this.c,e="Collapse SubGraph";try{i.startTransaction(e),i.animationManager.nh(e);const n=new List;if(t!==null&&t.isSubGraphExpanded)t.collapseSubGraph(),n.add(t);else if(t===null){const o=i.selection.iterator;for(;o.next();){const r=o.value;r instanceof Group&&r.isSubGraphExpanded&&(r.collapseSubGraph(),n.add(r))}}i.O("SubGraphCollapsed",n)}finally{i.commitTransaction(e)}}canCollapseSubGraph(t){t===void 0&&(t=null);const i=this.c;if(i.isReadOnly)return!1;if(t!==null)return!(!(t instanceof Group)||!t.isSubGraphExpanded);{const e=i.selection.iterator;for(;e.next();){const s=e.value;if(s instanceof Group&&s.isSubGraphExpanded)return!0}}return!1}expandSubGraph(t){t===void 0&&(t=null);const i=this.c,e="Expand SubGraph",s=new List;try{if(i.startTransaction(e),i.animationManager.nh(e),t!==null&&!t.isSubGraphExpanded)t.expandSubGraph(),s.add(t);else if(t===null){const o=i.selection.iterator;for(;o.next();){const r=o.value;r instanceof Group&&(r.isSubGraphExpanded||(r.expandSubGraph(),s.add(r)))}}i.O("SubGraphExpanded",s)}finally{for(const n of s)this.kD(i,n);t&&this.kD(i,t),i.commitTransaction(e)}}kD(t,i){for(const e of i.memberParts)e instanceof Node&&t.af(e,i)}canExpandSubGraph(t){t===void 0&&(t=null);const i=this.c;if(i.isReadOnly)return!1;if(t!==null)return!(!(t instanceof Group)||t.isSubGraphExpanded);{const e=i.selection.iterator;for(;e.next();){const s=e.value;if(s instanceof Group&&!s.isSubGraphExpanded)return!0}}return!1}editTextBlock(t){t===void 0&&(t=null),t!==null&&U.s(t,TextBlock,CommandHandler,"editTextBlock");const i=this.c,e=i.toolManager.findTool("TextEditing");if(e!==null){if(t===null){let s=null;const n=i.selection.iterator;for(;n.next();){const o=n.value;if(o.canEdit()){s=o;break}}if(s===null)return;t=s.findInVisualTree(o=>o instanceof TextBlock&&o.editable)}t!==null&&(i.currentTool=null,e.textBlock=t,i.currentTool=e)}}canEditTextBlock(t){t===void 0&&(t=null);const i=this.c;if(i.isReadOnly||i.isModelReadOnly||!i.allowTextEdit||i.toolManager.findTool("TextEditing")===null)return!1;if(t!==null){if(!(t instanceof TextBlock))return!1;const e=t.part;if(e!==null&&e.canEdit())return!0}else{const e=i.selection.iterator;for(;e.next();){const s=e.value;if(s.canEdit()&&(t=s.findInVisualTree(n=>n instanceof TextBlock&&n.editable),t!==null))return!0}}return!1}showContextMenu(t){const i=this.c,e=i.toolManager.findTool("ContextMenu");if(e===null)return;t===void 0&&(t=null),t===null&&(i.selection.count>0?t=i.selection.first():t=i);const s=e.findObjectWithContextMenu(t);if(s!==null){const n=i.lastInput;let o;if(s instanceof GraphObject?o=s.getDocumentPoint(Spot.Center):i.viewportBounds.containsPoint(n.documentPoint)?o=Point.Pn:o=i.viewportBounds.center,o.isReal()){const r=new InputEvent;r.diagram=i,r.viewPoint=i.transformDocToView(o),r.documentPoint=o,r.button=2,r.up=!0,i.lastInput=r}i.currentTool=e,e.openMenu(!1,s)}}canShowContextMenu(t){const i=this.c,e=i.toolManager.findTool("ContextMenu");return!(e===null||(t===void 0&&(t=null),t===null&&(i.selection.count>0?t=i.selection.first():t=i),e.findObjectWithContextMenu(t)===null))}downloadSvg(t){const i=this.c,e={scale:1,background:i.div?i.div.style.backgroundColor:"white",name:this.LE("svg")};t&&Object.assign(e,t);const s=i.makeSvg(e);if(s!==null){const n=new XMLSerializer().serializeToString(s);this.DE(e.name,"image/svg+xml",n)}}downloadSVG(t){this.downloadSvg(t)}canDownloadSvg(t){return this.c!==null}DE(t,i,e){let s=null,n=null;try{const o=new Blob([e],{type:i});s=root.URL.createObjectURL(o),n=U.Re("a"),n.style.display="none",n.href=s,n.download=t,root.document.body.appendChild(n),requestAnimationFrame(()=>{try{n!==null&&n.click()}finally{s!==null&&root.URL.revokeObjectURL(s),n!==null&&root.document.body.removeChild(n)}})}catch{s!==null&&root.URL.revokeObjectURL(s),n!==null&&root.document.body.removeChild(n)}}LE(t){const i="."+t;let e=this.diagram.model.name;return e?e.endsWith(i)&&(e=e.substring(0,e.length-i.length)):e="diagram",e+=i,e}get copiesClipboardData(){return this.CC}set copiesClipboardData(t){this.CC=!!t}get copiesConnectedLinks(){return this.NC}set copiesConnectedLinks(t){this.NC=!!t}get deletesConnectedLinks(){return this.AC}set deletesConnectedLinks(t){this.AC=!!t}get copiesTree(){return this.TC}set copiesTree(t){this.TC=!!t}get deletesTree(){return this.LC}set deletesTree(t){this.LC=!!t}get copiesParentKey(){return this.DC}set copiesParentKey(t){this.DC=!!t}get copiesGroupKey(){return this.FC}set copiesGroupKey(t){this.FC=!!t}get storageLocation(){return this.RC}set storageLocation(t){t||(t="memory"),t!=="memory"&&t!=="sessionStorage"&&t!=="localStorage"&&t!=="systemClipboard"&&U.n("Invalid new value for CommandHandler.storageLocation: "+t),this.RC=t}get archetypeGroupData(){return this.IC}set archetypeGroupData(t){t!==null&&U.Xo(t,CommandHandler,"archetypeGroupData");const i=this.c;if(Debug&&t!==null&&i){const e=i.model;e.Dh()&&!(t instanceof Group)&&!e.isGroupForData(t)&&U.n("CommandHandler.archetypeGroupData must be either a Group or a data object for which GraphLinksModel.isGroupForNodeData is true: "+t)}this.IC=t}get memberValidation(){return this.Th}set memberValidation(t){t!==null&&U.C(t,CommandHandler,"memberValidation"),this.Th=t}get defaultScale(){return this.diagram.defaultScale}set defaultScale(t){this.diagram.defaultScale=t}get zoomFactor(){return this.OC}set zoomFactor(t){U.r(t,CommandHandler,"zoomFactor"),t>1||U.n("zoomFactor must be larger than 1.0, not: "+t),this.OC=t}get isZoomToFitRestoreEnabled(){return this.EC}set isZoomToFitRestoreEnabled(t){this.EC=!!t}get scrollToPartPause(){return this.BC}set scrollToPartPause(t){this.BC=t}computeEffectiveCollection(t,i){const e=this.c,s=e.toolManager.findTool("Dragging"),n=e.currentTool===s;i===void 0&&(i=e.q0());const o=new GMap;if(t===null)return o;let r=t.iterator;for(;r.next();){const l=r.value;e.gl(o,l,n,i)}if(e.draggedLink!==null&&i.dragsLink)return o;for(r=t.iterator;r.next();){const l=r.value;if(l instanceof Link){const h=l.fromNode;if(h!==null&&!o.has(h))o.delete(l);else{const a=l.toNode;a!==null&&!o.has(a)&&o.delete(l)}}}return o}static getModifierNames(){return CommandHandler.Ed}static setModifierNames(t){CommandHandler.Ed=t}static PE(t){let i="";return t&1&&(i+=CommandHandler.Ed[0]||""),t&4&&(i+=CommandHandler.Ed[1]||""),t&2&&(i+=CommandHandler.Ed[2]||""),t&8&&(i+=CommandHandler.Ed[3]||""),i}static kE(t){return t===1?CommandHandler.bE:t===2?CommandHandler.SE:CommandHandler.bD}static JC(t,i,e){var s=new Point(e,0).rotate(t-i/2),n=new Geometry().add(new PathFigure(-e,-e)).add(new PathFigure(e,e)).add(new PathFigure(s.x,s.y).add(new PathSegment(5,t-i/2,i,0,0,e,e)));return n.offset(e,e),n}ME(t){t.isTransactionFinished&&this.updateFocusBox()}CE(t){if(t.subject.scale===this.diagram.scale)return;const i=4/this.diagram.scale,e=this.focusBox.findObject("SHAPE");e!==null&&(e.strokeWidth=i);const s=this.focusBox.findObject("SHAPE2");s!==null&&(s.strokeWidth=i,s.strokeDashArray=[i,i]);const n=this.focusBox.placeholder;n!==null&&(n.padding=i)}NE(t){this.focus===null?U.Sn(()=>{this.focus=this.findFirstFocus()},500):this.onFocusChanged(this.focus,this.focus)}AE(t){this.isVirtualPointerShown=!1}get isFocusEnabled(){return this.VC}set isFocusEnabled(t){t=!!t;const i=this.isFocusEnabled;t!==i&&(t||(this.isVirtualPointerShown=!1,this.vC=this.focus,this.focus=null),this.VC=t,t&&(this.focus=this.vC,this.updateFocusBox()))}get focusBox(){return this.$0}set focusBox(t){if(!(t instanceof Adornment))return;const i=this.$0;if(t!==i&&(this.$0=t,i.adornedObject!==null)){const e=i.adornedPart;e!==null&&e.removeAdornment("Focus"),t.adornedObject=i.adornedObject,e!==null&&e.addAdornment("Focus",t)}}get focus(){return this.$0.adornedObject}set focus(t){const i=this.focus;if(t!==i){const e=this.c;if(!e||!this.isFocusEnabled||t!==null&&t.diagram!==e)return;e.currentTool instanceof ContextMenuTool||this.cancelVirtualPointer();const s=this.focusBox.adornedPart;s&&s.removeAdornment("Focus"),t===null?(this.Od=null,this.virtualPointerLocation=e.viewportBounds.center,this.focusBox.adornedObject=null):(this.virtualPointerLocation=t.getDocumentPoint(Spot.Center),this.focusBox.adornedObject=t,this.updateFocusBox()),this.onFocusChanged(i,t)}}onFocusChanged(t,i){const e=this.c;if(e&&(this.focusChanged!==null?this.focusChanged(t,i,this):this.FE(this.describe(t,i)),i!==null&&i.part!==null)){const s=i.getDocumentBounds();e.viewportBounds.containsRect(s)||(i instanceof Part?e.commandHandler.scrollToPart(i):e.scrollToRect(s))}}get focusChanged(){return this.zC}set focusChanged(t){t!==null&&U.C(t,CommandHandler,"focusChanged"),this.zC=t}get liveElementId(){return this.vb||this.XC}set liveElementId(t){const i=this.vb;t!==i&&(this.vb=t,this.QC())}QC(){const t=this.diagram;if(!t||!Diagram.isUsingDOM())return;const i=t.ht?.St;if(!i)return;const e=this.liveElementId,s=root.document.getElementById(e);this.isUsingAriaLive?(i.removeAttribute("aria-labelledby"),s&&s.setAttribute("aria-live","polite")):(e&&i.setAttribute("aria-labelledby",e),s&&s.removeAttribute("aria-live"))}get isUsingAriaLive(){return this.Wb}set isUsingAriaLive(t){const i=this.Wb;t!==i&&(this.Wb=t,this.QC())}FE(t){const i=this.diagram;if(!i||!Diagram.isUsingDOM()||!i.div)return;let e=this.liveElementId;if(!e){const n=U.Re("span"),o=n.style;for(o.opacity="0",o.position="absolute",o.right="-9999px",o.bottom="-9999px",o.width="0px",o.height="0px",o.overflow="hidden",o.border="0",e=(i.div.id||"diagram")+"_aria";root.document.getElementById(e);)e+=Math.floor(U.wm()*10);n.id=e,this.XC=e,i.div.appendChild(n),this.QC()}const s=root.document.getElementById(e);s&&(s.textContent=t)}describe(t,i){let e="";i instanceof Node?i instanceof Group?e="Group":e="Node":i instanceof Link?e="Link":i instanceof Part?e="Part":i&&(i.click?e="button":i instanceof TextBlock&&i.editable&&(e="editable"),i.portId!==null&&(e&&(e+=" "),e+="port",i.portId&&(e+=" "+i.portId)));const s=this._C(i);s&&(e+=" "+s);const n=i;if(t&&n instanceof Link&&n.fromNode&&n.toNode){if(t instanceof Node&&t.part===n.fromNode||t instanceof Link&&t.fromNode===n.fromNode){e+=" to "+this._C(n.toNode,!0);const o=n.toPort?.portId;o&&(e+=" port "+o)}else if(t instanceof Node&&t.part===n.toNode||t instanceof Link&&t.toNode===n.toNode){e+=" from "+this._C(n.fromNode,!0);const o=n.fromPort?.portId;o&&(e+=" port "+o)}}return e}_C(t,i){if(i===void 0&&(i=!1),!t)return"";if(t instanceof TextBlock&&t.text)return t.text;if(t instanceof Panel){let e="";return t instanceof Part&&t.text&&(e=t.text),i&&e||t.walkVisualTreeFrom(t,(s,n)=>{n.isVisibleObject()&&n instanceof TextBlock&&n.text&&(!i||!e)&&e!==n.text&&(e+=" "+n.text)}),e}return""}updateFocusBox(){const t=this.focus;if(t===null)return;if(t.diagram!==null&&(t instanceof Part?t.isVisible():t.isVisibleObject()&&t.part?.isVisible()))this.focusBox.adornedObject=t,t.part?.addAdornment("Focus",this.focusBox);else{let e=null;if(t instanceof Part||(e=t.part),e instanceof Part&&e.isVisible())this.focus=e;else{if(e instanceof Node&&!e.isVisible()){const s=e.findTreeParentNode();if(s!==null)e=s;else{const n=e.labeledLink;n!==null&&(e=n)}}for(;e instanceof Part&&!e.isVisible();)e=e.containingGroup;e instanceof Part&&e.isVisible()?this.focus=e:this.focus=null}}}findFirstFocus(){const t=this.c;if(t===null||!t.isEnabled)return null;if(this.focus!==null)return this.focus;if(this.isFocusEnabled)if(t.selection.count>0)this.focus=t.selection.first();else{const i=this.PD(t.isTreePathToChildren).first();if(i!==null)return i}return null}get isVirtualPointerEnabled(){return this.YC}set isVirtualPointerEnabled(t){t=!!t;const i=this.isVirtualPointerEnabled;if(t!==i&&(this.YC=t,t)){const e=this._0;e&&(this._0=null,e.commandHandler.Ls=null,e.commandHandler.cancelVirtualPointer())}}get isVirtualPointerShown(){return this.KC}set isVirtualPointerShown(t){t=!!t;const i=this.isVirtualPointerShown;if(t!==i){const e=this.c;if(!e||!this.isVirtualPointerEnabled)return;this.KC=t;const s=this.focus;t?this.virtualPointerBox.diagram===null&&(this.virtualPointerLocation.isReal()||(s!==null?this.virtualPointerLocation=s.getDocumentPoint(Spot.Center):this.virtualPointerLocation=e.viewportBounds.center),e.add(this.virtualPointerBox),this.Fh()):this.virtualPointerBox.diagram!==null&&(e.remove(this.virtualPointerBox),this.Fh())}}cancelVirtualPointer(){const t=this.c;t&&(this.$C(),this.isVirtualPointerShown=!1,t.currentTool.doCancel(),this.isVirtualPointerDown=!1,this.tN())}tN(){const t=this.Ls;if(t!==null){this.Ls=null;const i=t.commandHandler;i.Ls=null,i._0=null,i.isVirtualPointerShown=!1,i.isVirtualPointerDown=!1,i.$C(),this.jb&&(i.isVirtualPointerEnabled=!1),this.jb=!1}}$C(){this.Ue.button=0,this.Ue.modifiers=0,this.Ue.clickCount=1,this.Ue.down=!1,this.Fh()}Fh(){this.virtualPointerChanged!==null&&this.virtualPointerChanged(this.virtualPointerBox,this),this.updateVirtualPointer()}updateVirtualPointer(){const t=this.virtualPointerBox.diagram;t&&(this.virtualPointerBox.scale=1/t.scale),this.virtualPointerBox.updateTargetBindings()}get virtualPointerBox(){return this.Id}set virtualPointerBox(t){if(!(t instanceof Part))return;const i=this.Id;t!==i&&(i!==null&&(t.location=i.location,i.diagram!==null&&i.diagram.remove(i)),this.Id=t,this.isVirtualPointerShown&&this.diagram&&(this.diagram.add(t),t.data=i.data),this.Fh())}get virtualPointerChanged(){return this.UC}set virtualPointerChanged(t){t!==null&&U.C(t,CommandHandler,"virtualPointerChanged"),this.UC=t}get virtualPointerLocation(){return this.virtualPointerBox.location}set virtualPointerLocation(t){this.virtualPointerLocation.equals(t)||this.MD(t.x,t.y)}get isVirtualPointerDown(){return this.virtualPointerBox.data?this.virtualPointerBox.data.down:!1}set isVirtualPointerDown(t){t=!!t;const i=this.isVirtualPointerDown;if(t!==i){const e=this.c;if(!e||!this.isVirtualPointerEnabled||(this.virtualPointerBox.data===null&&(this.Id.data=this.Ue),this.virtualPointerBox.data.down=t,this.Fh(),!this.isVirtualPointerShown))return;const s=e.lastInput,n=new InputEvent;n.diagram=e,this.CD(n,t),t?n.down=!0:n.up=!0,n.clickCount=1,n.button=this.Ue.button,n.modifiers=this.Ue.modifiers,t&&(e.firstInput=n.copy()),this.Bd(n,!0),t||this.Ue.clickCount===2&&(n.clickCount=2,n.down=!0,n.up=!1,this.Bd(n,!0),n.down=!1,n.up=!0,this.Bd(n,!0),this.ND(1)),e.lastInput=s}}get virtualPointerShiftMove(){return this.Z0}set virtualPointerShiftMove(t){this.Z0=t}get virtualPointerControlMove(){return this.Q0}set virtualPointerControlMove(t){this.Q0=t}tp(t,i){this.MD(this.virtualPointerLocation.x+t,this.virtualPointerLocation.y+i)}MD(t,i){this.virtualPointerBox.moveTo(t,i,!0);const e=this.c;if(!e||!this.isVirtualPointerEnabled||!this.isVirtualPointerShown)return;e.ensureBounds();const s=e.lastInput,n=new InputEvent;n.diagram=e,this.CD(n,this.isVirtualPointerDown),n.button=this.Ue.button,n.modifiers=this.Ue.modifiers,this.Bd(n,!0),e.lastInput=s,this.isVirtualPointerDown&&(e.remove(this.virtualPointerBox),e.add(this.virtualPointerBox)),this.Fh()}CD(t,i){const e=this.c;if(e){if(t.targetDiagram=e,t.documentPoint=this.virtualPointerLocation,e.allowDragOut){const s=e.div.getBoundingClientRect(),n=e.transformDocToView(this.virtualPointerLocation),o=s.x+n.x,r=s.y+n.y;let l=root.document.elementFromPoint(o,r)||null;l instanceof HTMLCanvasElement&&(l=l.parentElement),l!==null&&l.shadowRoot&&(l=l.shadowRoot.elementFromPoint(o,r)||null,l instanceof HTMLCanvasElement&&(l=l.parentElement));let h=null;if(l instanceof HTMLElement&&(h=Diagram.ss.get(l))&&h!==e&&h.div){const a=h.div.getBoundingClientRect(),c=new Point(n.x-(a.x-s.x),n.y-(a.y-s.y));this.Ls!==null&&this.Ls!==h&&this.tN(),t.targetDiagram=h,t.viewPoint=c,t.documentPoint=h.transformViewToDoc(c),t.viewPoint=h.transformDocToView(t.documentPoint),this.Ls=h;const f=h.commandHandler;this.jb=!f.isVirtualPointerEnabled,f.isVirtualPointerEnabled=!0,f.isVirtualPointerDown=i,f.virtualPointerLocation=t.documentPoint,f.isVirtualPointerShown=!0,f._0=e;return}}this.Ls!==null&&this.tN(),t.viewPoint=e.transformDocToView(t.documentPoint)}}Bd(t,i){this.doVirtualPointerEvent(t,i)}doVirtualPointerEvent(t,i){const e=this.c;e&&(t.timestamp=Date.now(),e.lastInput=t,i&&(t.up?e.doMouseUp():t.down?e.doMouseDown():e.doMouseMove()),this.onVirtualPointerEvent(t,i))}onVirtualPointerEvent(t,i){const e=this.c;e&&(t.up?this.isVirtualPointerDown&&!e.viewportBounds.containsPoint(this.virtualPointerLocation)&&(this.virtualPointerLocation=this.focus instanceof GraphObject?this.focus.getDocumentPoint(Spot.Center):e.viewportBounds.center):t.down)}doVirtualFocusKeyDown(){const t=this.c;if(!t)return!1;const i=t.lastInput,e=i.commandKey;if(this.isVirtualPointerEnabled&&(e==="ShiftLeft"||e==="ShiftRight"))return this.isVirtualPointerShown=!0,!0;if(this.SD.indexOf(e)>=0)if(i.shift&&this.isVirtualPointerShown){const s=this.Jb(e),n=i.control||i.meta?this.Q0:this.Z0;s===270?this.tp(0,-n):s===90?this.tp(0,n):s===180?this.tp(-n,0):this.tp(n,0)}else this.RE();else if(i.shift&&this.isVirtualPointerShown&&(e==="Numpad1"||e==="Numpad2"||e==="Numpad3"||e==="Numpad4"||e==="Numpad6"||e==="Numpad7"||e==="Numpad8"||e==="Numpad9")){const s=i.control||i.meta?this.Q0:this.Z0;let n=0;e==="Numpad1"||e==="Numpad4"||e==="Numpad7"?n=-s:(e==="Numpad3"||e==="Numpad6"||e==="Numpad9")&&(n=s);let o=0;e==="Numpad7"||e==="Numpad8"||e==="Numpad9"?o=-s:(e==="Numpad1"||e==="Numpad2"||e==="Numpad3")&&(o=s),this.tp(n,o)}else if(e==="Enter"||e==="NumpadEnter"||e==="Numpad5")i.shift&&this.isVirtualPointerShown?this.isVirtualPointerDown=!this.isVirtualPointerDown:this.IE();else if(e==="Escape")this.OE();else if(e==="Space")this.EE();else if(e==="ContextMenu"||i.shift&&e==="F10"||(i.control||i.meta)&&i.shift&&e==="Backslash")this.BE();else if(i.shift&&e==="c")this.$b(1);else if(i.shift&&e==="a")this.$b(2);else if(i.shift&&e==="KeyS")this.$b(4);else if(i.shift&&e==="KeyM")this.$b(8);else if(i.shift&&e==="Digit1")this.Zb(0);else if(i.shift&&e==="Digit2")this.Zb(1);else if(i.shift&&e==="Digit3")this.Zb(2);else if(i.shift&&e==="Numpad0"){const s=this.Ue.button;this.Zb(s===2?0:2)}else if(i.shift&&(e==="KeyD"||e==="NumpadDecimal")){const s=this.Ue.clickCount;this.ND(s===2?1:2)}else if(i.shift&&e==="KeyF"){const s=this.nextFocusFormula;this.nextFocusFormula=s==="distance"?"linear":"distance"}else if(i.shift&&e==="y")this.isUsingAriaLive=!this.isUsingAriaLive;else return!1;return!0}doVirtualFocusKeyUp(){const t=this.c;if(!t)return!1;const e=t.lastInput.commandKey;return this.isVirtualPointerEnabled&&(e==="ShiftLeft"||e==="ShiftRight")&&(this.isVirtualPointerShown=!1),!0}Jb(t){switch(t){case"ArrowDown":return 90;case"ArrowLeft":return 180;case"ArrowUp":return 270;default:return 0}}SD=["ArrowRight","ArrowDown","ArrowLeft","ArrowUp"];$b(t){const i=this.Ue.modifiers;this.Ue.modifiers=i&t?i&~t:i|t,this.Fh()}ND(t){this.Ue.clickCount=t,this.Fh()}Zb(t){this.Ue.button=t,this.Fh()}RE(){const t=this.c;if(!t)return;const i=t.lastInput,e=this.focus;if(e===null){const s=this.PD(t.isTreePathToChildren).first();s!==null&&(this.focus=s)}else if(e instanceof Link)this.VE(e);else if(e instanceof Node)this.zE(e);else{e instanceof Part&&(this.Od=null);const s=this.Jb(i.commandKey);s===270?this.focus=this.findNextFocus(270):s===90?this.focus=this.findNextFocus(90):s===180?this.focus=this.findNextFocus(180):this.focus=this.findNextFocus(0)}}VE(t){const i=this.c;if(!i)return;const e=i.lastInput,s=this.Jb(e.commandKey);let n=null;const o=this.Od;if(o!==null){const r=this.jC;if(s===r)n=t.getOtherNode(o);else if(s===G.qi(r+180))n=o;else{let l=r===0||r===180?90:0,h=r===0||r===180?270:180;if(s===l){const a=this.iN(o,r,!0),c=a.indexOf(t);c>=0&&c<a.count-1&&(this.focus=a.elt(c+1))}else if(s===h){const a=this.iN(o,r,!0),c=a.indexOf(t);c>0&&(this.focus=a.elt(c-1))}}}else{const r=t.fromNode,l=t.toNode;if(!r||!l)return;s===270?n=r.location.y<l.location.y?r:l:s==90?n=r.location.y>l.location.y?r:l:s===180?n=r.location.x<l.location.x?r:l:n=r.location.x>l.location.x?r:l}for(;n!==null&&!n.isVisible();)n=n.containingGroup;n!==null&&(this.focus=n)}zE(t){const i=this.c;if(!i)return;const e=i.lastInput,s=this.Jb(e.commandKey);if(e.control||e.meta){const n=this.iN(t,s,!0).first();n&&(this.Od=t,this.jC=s,this.focus=n)}else this.Od=null,this.focus=this.findNextFocus(s)}iN(t,i,e){if(t===null)return new List;const s=t.actualBounds;if(!s.isReal())return new List;const n=new Set;(t instanceof Group?t.findExternalLinksConnected():t.findLinksConnected()).each(l=>{if(!l.isVisible())return;let h=null;if(l.fromNode===t?h=l.toNode:l.toNode===t?h=l.fromNode:t instanceof Group&&(l.fromNode?.isMemberOf(t)?h=l.toNode:l.toNode?.isMemberOf(t)&&(h=l.fromNode)),h===null||h.isMemberOf(t))return;for(;h!==null&&!h.isVisible();)h=h.containingGroup;if(h===null)return;const a=h.location;if(a.isReal()&&!(i===270&&(h!==t?a.y>=s.top:l.midPoint.y>=s.top))){{if(i===90&&(h!==t?a.y<=s.bottom:l.midPoint.y<=s.bottom))return;if(i===180&&(h!==t?a.x>=s.left:l.midPoint.x>=s.left))return;if(i===0&&(h!==t?a.x<=s.right:l.midPoint.x<=s.right))return}e&&l.actualBounds.isReal()?n.add(l):n.add(h)}});const r=new List(n);return i===90||i===270?r.sort((l,h)=>l.actualBounds.centerX-h.actualBounds.centerX):r.sort((l,h)=>l.actualBounds.centerY-h.actualBounds.centerY),r}findNextFocus(t){t=G.qi(t);const i=this.focus,e=i instanceof Node?i.location:i.getDocumentPoint(Spot.Center);let s=1/0,n=i;const o=(r,l,h,a)=>{if(this.nextFocusFormula==="linear"){let c=1/0;t===0&&h>e.x||t===180&&h<e.x?c=Math.abs(h-e.x):(t===90&&a>e.y||t===270&&a<e.y)&&(c=Math.abs(a-e.y)),c<s&&(s=c,n=r)}else{if(t===0&&(l.right<e.x||(l.centerX-e.x)**2>s))return;if(t===90&&(l.bottom<e.y||(l.centerY-e.y)**2>s))return;if(t===180&&(l.x>e.x||(e.x-l.centerX)**2>s))return;if(t===270&&(l.y>e.y||(e.y-l.centerY)**2>s))return;const c=e.direction(h,a),f=G.II(t,c);if(t===90||t===270?f<=45:f<45){const u=e.distanceSquared(h,a);u<s&&(s=u,n=r)}}};if(i instanceof Part&&i.diagram!==null){const r=i.containingGroup;r!==null?r.memberParts.each(l=>{l===i||l instanceof Link||!l.isVisible()||o(l,l.actualBounds,l.location.x,l.location.y)}):(i.diagram.nodes.each(l=>{l===i||!l.isTopLevel||!l.isVisible()||o(l,l.actualBounds,l.location.x,l.location.y)}),i.diagram.parts.each(l=>{l===i||!l.isTopLevel||!l.isVisible()||o(l,l.actualBounds,l.location.x,l.location.y)}))}else if(i.part!==null){const r=new Rect;this.eN(i.part).each(l=>{l!==i&&(l.getDocumentBounds(r),o(l,r,r.centerX,r.centerY))})}return n}get nextFocusFormula(){return this.WC}set nextFocusFormula(t){this.WC=t}IE(){const t=this.c;if(!t)return;const i=t.currentTool;if(i instanceof ContextMenuTool){const n=i.currentObject;this.Qb(this.focus),i.maybeStopTool(this.focus),t.currentTool instanceof ContextMenuTool||(this.focus=n);return}const e=this.focus,s=t.lastInput;if(e===null)s.control||s.meta?this.Qb(null):this.focus=this.findFirstFocus();else if(e instanceof Part)if(s.control||s.meta)this.Qb(e);else{const n=this.eN(e);if(n.count>0)this.focus=n.first();else if(e instanceof Link&&e.isLabeledLink){const o=e.labelNodes.first();o!==null&&o.isVisible()&&(this.focus=o)}else if(e instanceof Group&&e.isSubGraphExpanded){const o=e.memberParts.first();o!==null&&o.isVisible()&&(this.focus=o)}}else this.Qb(e)}PD(t){const i=new List,e=this.c;if(!e)return i;let s=0;for(;i.count===0&&s<e.nodes.count;){const n=e.nodes;for(;n.next();){const o=n.value;o.isTopLevel&&o.isVisible()&&(t?o.findNodesInto():o.findNodesOutOf()).count===s&&i.add(o)}s++}return i}eN(t){return t instanceof Part?this.On(t,new List):new List}On(t,i){return!(t instanceof Part)&&t.isVisibleObject()&&t.isEnabledObject()&&(t.contextMenu||t.click||t instanceof TextBlock&&t.editable||t.part instanceof Node&&t.portId!==null&&(t.portId!==""||t.part.ports.count>1)||t.toolTip)&&i.add(t),t instanceof Panel&&t.elements.each(e=>this.On(e,i)),i}Qb(t){const i=this.c;if(!i)return;const e=i.lastInput,s=t instanceof GraphObject?t:i;if(s.click){const n=new InputEvent;n.diagram=i,n.documentPoint=t instanceof GraphObject?t.getDocumentPoint(Spot.Center):i.viewportBounds.center,n.viewPoint=i.transformDocToView(n.documentPoint),n.button=0,n.clickCount=1,n.targetObject=t,this.Bd(n,!1),s instanceof GraphObject?s.click(n,s):s.click(n),i.lastInput=e}else s instanceof TextBlock&&s.editable?this.editTextBlock(s):this.AD(t)}OE(){const t=this.c;if(!t)return;const i=t.currentTool;if(i instanceof ToolManager&&i.currentToolTip!==null){i.hideToolTip();return}else if(i instanceof ContextMenuTool){const e=i.currentObject;i.doKeyDown(),this.focus=e;return}if(this.focus instanceof Part){const e=this.focus;e instanceof Node&&e.labeledLink!==null?this.focus=e.labeledLink:e.containingGroup!==null?this.focus=e.containingGroup:this.focus=null}else if(this.focus instanceof GraphObject){const e=this.focus.part;if(e instanceof Link&&e.isLabeledLink){const s=e.labelNodes.first();if(s!==null&&s.isVisible()){this.focus=s;return}}else if(e instanceof Group&&e.isSubGraphExpanded){const s=e.memberParts.first();if(s!==null&&s.isVisible()){this.focus=s;return}}this.focus=e}else this.cancelVirtualPointer(),this.stopCommand()}EE(){const t=this.c;if(!t)return;if(t.lastInput.shift&&this.isVirtualPointerShown){const e=t.findPartAt(this.virtualPointerLocation);e!==null&&(e===this.focus?this.TD():this.focus=e)}else this.TD()}TD(){const t=this.c;if(!t)return;const i=t.lastInput,e=this.focus;if(e instanceof Part){let s=e.part;if(i.control||i.meta){for(t.raiseDiagramEvent("ChangingSelection",t.selection);s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&(s.isSelected=!s.isSelected),t.raiseDiagramEvent("ChangedSelection",t.selection)}else if(i.shift){if(s!==null&&!s.isSelected){for(t.raiseDiagramEvent("ChangingSelection",t.selection);s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&(s.isSelected=!0),t.raiseDiagramEvent("ChangedSelection",t.selection)}}else if(s!==null&&!s.isSelected){for(;s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&t.select(s)}}this.AD(e),this.onFocusChanged(e,e)}AD(t){const i=this.c;if(!i)return;i.toolManager.hideToolTip();const e=i.lastInput;let s=t instanceof GraphObject?t:i;for(;s instanceof GraphObject&&!s.toolTip;)s=s.panel;if(s&&s.toolTip){const n=new InputEvent;n.diagram=i,n.documentPoint=t!==null?t.getDocumentPoint(Spot.Center):i.viewportBounds.center,n.viewPoint=i.transformDocToView(n.documentPoint),n.targetObject=t,this.Bd(n,!1),i.toolManager.showToolTip(s.toolTip,t),i.lastInput=e}}BE(){const t=this.c;if(!t)return;const i=this.focus;if(this.canShowContextMenu(i)){this.showContextMenu(i);const e=t.toolManager.contextMenuTool.currentContextMenu;if(e instanceof Adornment){const s=this.eN(e);s.count>0&&(this.focus=s.first())}}}}var Stretch=(w=>(w[w.None=0]="None",w[w.Default=1]="Default",w[w.Vertical=4]="Vertical",w[w.Horizontal=5]="Horizontal",w[w.Fill=2]="Fill",w))(Stretch||{}),Orientation=(w=>(w[w.None=0]="None",w[w.Along=21]="Along",w[w.Plus90=22]="Plus90",w[w.Minus90=23]="Minus90",w[w.Opposite=24]="Opposite",w[w.Upright=25]="Upright",w[w.Plus90Upright=26]="Plus90Upright",w[w.Minus90Upright=27]="Minus90Upright",w[w.Upright45=28]="Upright45",w))(Orientation||{}),Flip=(w=>(w[w.None=0]="None",w[w.Vertical=1]="Vertical",w[w.Horizontal=2]="Horizontal",w[w.Both=3]="Both",w))(Flip||{});class GraphObject{l;ip;ep;Rh;k;uo;xt;wt;me;ri;sp;rn;Ft;ys;yl;Ih;Fi;Ha;lt;jt;wl;Xi;_i;Vd;xi;zd;Kt;mi;xl;_b;Oh;Lf;constructor(){GSet.se(this),this.l=30723,this.ri=1,this.sp="",this.rn=null,this.Ft=null,this.wt=new Point(NaN,NaN).S(),this.ys=Size.wx,this.yl=new Transform,this.Ih=new Transform,this.Fi=null,this.Ha=1,this.lt=1,this.jt=0,this.wl=Margin.Sm,this.me=new Rect(NaN,NaN,NaN,NaN).S(),this.Xi=new Rect(NaN,NaN,NaN,NaN).S(),this._i=new Rect(0,0,NaN,NaN).S(),this.Vd=null,this.ip=null,this.xt=null,this.xi=Spot.Default,this.zd=Spot.Default,this.ep=0,this.Rh=0,this.Kt=null,this.k=null,this.uo=null,this.mi=null,this._b=null,this.Oh=null,this.xl=null,this.Lf=null}cloneProtected(t){t.l=(this.l|2048|4096)&-32769,t.ri=this.ri,t.sp=this.sp,t.Ft=this.Ft,t.wt.f(this.wt),t.ys=this.ys.T(),this.Fi!==null?t.Fi=this.Fi.copy():t.Fi=null,t.lt=this.lt,t.jt=this.jt,t.wl=this.wl.T(),t.me.f(this.me),t.Xi.f(this.Xi),t._i.f(this._i),t.ip=this.ip,this.xt!==null&&(t.xt=this.xt.copy()),t.xi=this.xi.T(),t.zd=this.zd.T(),t.ep=this.ep,t.Rh=this.Rh,this.Kt!==null&&(t.Kt=this.Kt.copy()),this.k!==null&&(this.k.ki?t.k=this.k:t.k=this.k.copy()),this.uo!==null&&(t.uo=this.uo.slice()),this.mi!==null&&(t.mi=this.mi.copy())}addCopyProperty(t){let i=this.uo;if(!Array.isArray(i))i=[],this.uo=i;else for(let e=0;e<i.length;e++)if(i[e]===t)return;i.push(t)}tr(t){t.Vd=null,t.xl=null,t.g()}clone(){const t=new this.constructor;return this.cloneProtected(t),this.LD(t),t}LD(t){if(this.uo!==null)for(let i=0;i<this.uo.length;i++){const e=this.uo[i];t[e]=this[e]}}XE(){if(this.uo!==null)for(let t=0;t<this.uo.length;t++){const i=this.uo[t];delete this[i]}}copy(){return this.clone()}mM(){const t=this.Yi;if(t!==null){this.Yi=null;for(const i of t)i.Xd()&&(i.isToData?this.themeData(i.targetProperty,i.sourceProperty,i.themeSource,i.converter,i.themeConverter):i.isToObject?this.themeObject(i.targetProperty,i.sourceProperty,i.themeSource,i.converter,i.themeConverter,i.sourceName):i.isToModel?this.themeModel(i.targetProperty,i.sourceProperty,i.themeSource,i.converter,i.themeConverter):this.theme(i.targetProperty,i.sourceProperty,i.themeSource,i.converter,i.themeConverter))}return this}yi(t){t in Orientation?this.segmentOrientation=t:t in Stretch?this.stretch=t:U.Pr(this,t)}toString(){return U.to(this.constructor)+"#"+GSet.Cs(this)}static None=0;static Default=1;static Fill=2;static Vertical;static Horizontal;static Uniform=6;static UniformToFill=7;static FlipVertical=1;static FlipHorizontal=2;static FlipBoth=3;Eh(){this.k!==null&&(this.k.ki=!0)}Zt(){return this.k===null?this.k=new GraphObjectTemplateSettings:this.k.ki&&(this.k=this.k.copy()),this.k}ns(){if(this.xt===null){const t=new LinkSettings;t.va=Spot.None,t.Wa=Spot.None,t.ja=10,t.Ja=10,t.$a=0,t.Za=0,this.xt=t}return this.xt}raiseChangedEvent(t,i,e,s,n,o,r){const l=this.part;if(l!==null){l.Df(t,i,e,s,n,o,r),e===this&&t===2&&this.Ff()&&this.Qa(l,i);const h=this.diagram;if(this.zs!==null&&h!==null&&h.ga&&!h.undoManager.isUndoingRedoing&&!h.animationManager.Zu){const a=this.zs.get(i);if(a!==null&&h.animationManager.isEnabled&&!h.animationManager.isTicking){this.Lf===null&&(this.Lf=new GMap);let c=h.undoManager.transactionLevel===0;if(a.startCondition===2?c=!0:a.startCondition===3&&(c=!1),c){const f=new Animation;a.SO(f);const u=this.Lf.get(a);u!==null&&u.stop(),this.Lf.set(a,f),f.M1=this,f.l2=a,f.add(this,i,s,n),f.start()}else h.animationManager.getBundleAnimation().add(this,i,s,n)}}if(this instanceof Panel&&e===l&&l.sN()&&l.data!==null){const a=this.E.h,c=a.length;for(let f=0;f<c;f++){const u=a[f];u instanceof Panel&&u.On(d=>{d.data!==null&&d.sN()&&d.updateTargetBindings(i)})}}}}yO(t){this.Lf&&this.Lf.delete(t)}Zo(){if(this.diagram===null)return;if(this.findBindingPanel()===null&&this.Yi!==null){const i=this.diagram.model,e=this.Yi.iterator;for(;e.next();){const s=e.value;if(!s.isToTheme)continue;let n=null;const o=s.sourceName;s.isToObject&&(n=this.DD(o));let r=this;const l=s.targetId;l!==-1&&(r=this.np(l),r===null)||(o==="/"?n=r.part:o==="."?n=r:o===".."&&(n=r.panel),s.updateTarget(r,n,void 0,i))}}}Qa(t,i){const e=this.findBindingPanel();if(e!==null){const s=t.diagram,n=this.Yi.iterator;for(;n.next();){const o=n.value;let r=null;if(o.isToObject){if(r=o.FD(e,this),r===null)continue;o.updateSource(this,r,i,null)}else if(o.isToModel)s!==null&&!s.Me&&o.updateSource(this,s.model.modelData,i,e);else if(!o.isToTheme){const l=e.data;if(l===null)continue;s!==null&&!s.Me&&o.updateSource(this,l,i,e)}if(r===this){const l=o.targetId,h=e.np(l);h!==null&&o.updateTarget(h,r,i,s?.model)}}}}np(t){return this.go===t?this:null}DD(t){let i;return t===""?i=this:t==="/"?i=this:t==="."?i=this:t===".."?i=this:(i=this.part.findObject(t),i===null&&Debug&&U.et("Binding error: missing GraphObject named "+t+" in "+this.part.toString())),i}get go(){return this.k!==null?this.k.go:-1}set go(t){this.go!==t&&(this.k===null&&(this.k=new GraphObjectTemplateSettings),this.k.go=t)}get Yi(){return this.k!==null?this.k.Yi:null}set Yi(t){this.Yi!==t&&(this.k===null&&(this.k=new GraphObjectTemplateSettings),this.k.Yi=t)}get mo(){return this.k!==null?this.k.mo:null}set mo(t){this.mo!==t&&(this.k===null&&(this.k=new GraphObjectTemplateSettings),this.k.mo=t)}raiseChanged(t,i,e){this.raiseChangedEvent(2,t,this,i,e)}t(t,i,e){this.raiseChangedEvent(2,t,this,i,e)}po(t,i,e,s){const n=this.me;if(n.e(t,i,e,s),this.lt!==1||this.jt!==0){this.Fi===null&&(this.Fi=new Transform);const o=this.Fi;o.Hi(),this.op(o,t,i,e,s),o.km(n)}}RD(t,i,e){return this.pickable===!1?!1:(e.Xc(this.D),i?this.intersectsRect(t,e):this.containedInRect(t,e))}ID(t,i,e){if(this.pickable===!1)return!1;const s=this.naturalBounds,n=t.distanceSquaredPoint(i);return e?Point.distanceLineSegmentSquared(t.x,t.y,0,0,0,s.height)<=n||Point.distanceLineSegmentSquared(t.x,t.y,0,s.height,s.width,s.height)<=n||Point.distanceLineSegmentSquared(t.x,t.y,s.width,s.height,s.width,0)<=n||Point.distanceLineSegmentSquared(t.x,t.y,s.width,0,0,0)<=n:t.distanceSquared(0,0)<=n&&t.distanceSquared(0,s.height)<=n&&t.distanceSquared(s.width,0)<=n&&t.distanceSquared(s.width,s.height)<=n}Bn(){return!0}containsPoint(t){Debug&&U.s(t,Point,GraphObject,"containsPoint:p");const i=Point.a();i.f(t),this.D.Pt(i);const e=this.actualBounds;if(!e.isReal())return Point.o(i),!1;const s=this.diagram;if(s!==null&&s.I0){const o=s.getInputOption("extraTouchThreshold"),r=s.getInputOption("extraTouchArea"),l=r/2,h=this.naturalBounds,a=this.getDocumentScale()*s.scale,c=1/a;if(h.width*a<o&&h.height*a<o){const f=Rect.contains(e.x-l*c,e.y-l*c,e.width+r*c,e.height+r*c,i.x,i.y);return Point.o(i),f}}let n=!1;return(this instanceof Adornment||this instanceof Shape?Rect.contains(e.x-5,e.y-5,e.width+10,e.height+10,i.x,i.y):e.containsPoint(i))&&(this.mi&&!this.mi.containsPoint(i)?n=!1:this.Ft!==null&&this._i.containsPoint(t)?n=!0:n=this.Bh(t)),Point.o(i),n}Bh(t){const i=this.naturalBounds;return Rect.contains(0,0,i.width,i.height,t.x,t.y)}containsRect(t){if(this.angle===0)return this.actualBounds.containsRect(t);const i=this.naturalBounds,e=Rect.V(0,0,i.width,i.height),s=this.D;let n=!1;const o=Point.V(t.x,t.y);return e.containsPoint(s.Oe(o))&&(o.e(t.x,t.bottom),e.containsPoint(s.Oe(o))&&(o.e(t.right,t.bottom),e.containsPoint(s.Oe(o))&&(o.e(t.right,t.y),e.containsPoint(s.Oe(o))&&(n=!0)))),Point.o(o),Rect.o(e),n}containedInRect(t,i){if(Debug&&U.s(t,Rect,GraphObject,"containedInRect:r"),i===void 0)return t.containsRect(this.actualBounds);const e=this.naturalBounds,s=i;let n=!1;const o=Point.V(0,0);return t.containsPoint(s.Pt(o))&&(o.e(0,e.height),t.containsPoint(s.Pt(o))&&(o.e(e.width,e.height),t.containsPoint(s.Pt(o))&&(o.e(e.width,0),t.containsPoint(s.Pt(o))&&(n=!0)))),Point.o(o),n}intersectsRect(t,i){if(Debug&&U.s(t,Rect,GraphObject,"intersectsRect:r"),i===void 0&&(i=this.D,this.angle===0))return t.intersectsRect(this.actualBounds);const e=this.naturalBounds,s=i,n=Point.V(0,0),o=Point.V(0,e.height),r=Point.V(e.width,e.height),l=Point.V(e.width,0);let h=!1;if(t.containsPoint(s.Pt(n))||t.containsPoint(s.Pt(o))||t.containsPoint(s.Pt(r))||t.containsPoint(s.Pt(l)))h=!0;else{const a=Rect.V(0,0,e.width,e.height),c=Point.V(t.x,t.y);a.containsPoint(s.Oe(c))?h=!0:(c.e(t.x,t.bottom),a.containsPoint(s.Oe(c))?h=!0:(c.e(t.right,t.bottom),a.containsPoint(s.Oe(c))?h=!0:(c.e(t.right,t.y),a.containsPoint(s.Oe(c))&&(h=!0)))),Point.o(c),Rect.o(a),h||(G.Tx(t,n,o)||G.Tx(t,o,r)||G.Tx(t,r,l)||G.Tx(t,l,n))&&(h=!0)}return Point.o(n),Point.o(o),Point.o(r),Point.o(l),h}getDocumentPoint(t,i){if(i===void 0&&(i=new Point),t instanceof Spot){const e=t;Debug&&e.isNoSpot()&&U.n("getDocumentPoint:s Spot must be specific: "+e.toString());const s=this.naturalBounds;return i.e(e.x*s.width+e.offsetX,e.y*s.height+e.offsetY),this.nn.Pt(i),i}else return i.set(t),this.nn.Pt(i),i}getDocumentBounds(t){t===void 0&&(t=new Rect);const i=this.naturalBounds,e=this.nn,s=Point.V(0,0).D(e);return t.e(s.x,s.y,0,0),s.e(i.width,0).D(e),t.ui(s.x,s.y,0,0),s.e(i.width,i.height).D(e),t.ui(s.x,s.y,0,0),s.e(0,i.height).D(e),t.ui(s.x,s.y,0,0),Point.o(s),t}getDocumentAngle(){return this.nn.LI()}getDocumentScale(){if(this.rp()===!1)return this.Ha;const t=this.lt;return this.panel!==null?t*this.panel.getDocumentScale():t}getLocalPoint(t,i){return i===void 0&&(i=new Point),i.f(t),this.nn.Oe(i),i}getNearestIntersectionPoint(t,i,e){return this.Rf(t.x,t.y,i.x,i.y,e)}Rf(t,i,e,s,n){const o=this.D,r=1/(o.m11*o.m22-o.m12*o.m21),l=o.m22*r,h=-o.m12*r,a=-o.m21*r,c=o.m11*r,f=r*(o.m21*o.dy-o.m22*o.dx),u=r*(o.m12*o.dx-o.m11*o.dy),d=t*l+i*a+f,m=t*h+i*c+u,g=e*l+s*a+f,p=e*h+s*c+u;n.e(0,0);const y=this.naturalBounds,x=G.Ul(0,0,y.width,y.height,d,m,g,p,n);return n.D(o),x}yt(t,i,e,s){if(this.$o()===!1)return;const n=this.wl,o=n.right+n.left,r=n.top+n.bottom;t=Math.max(t-o,0),i=Math.max(i-r,0),e=e||0,s=s||0,e=Math.max(e-o,0),s=Math.max(s-r,0);const l=this.angle;let h=0;const a=this.desiredSize,c=this.lp();l===90||l===270?(t=isFinite(a.height)?a.height+c:t,i=isFinite(a.width)?a.width+c:i):(t=isFinite(a.width)?a.width+c:t,i=isFinite(a.height)?a.height+c:i);let f=e||0,u=s||0;const d=this instanceof Panel;switch(this.ln(!0)){case 0:f=0,u=0,d&&(t=1/0,i=1/0);break;case 2:isFinite(t)&&t>e&&(f=t),isFinite(i)&&i>s&&(u=i);break;case 5:isFinite(t)&&t>e&&(f=t),u=0,d&&(i=1/0);break;case 4:isFinite(i)&&i>s&&(u=i),f=0,d&&(t=1/0);break}const g=this.maxSize,p=this.minSize;f>g.width&&p.width<g.width&&(f=g.width),u>g.height&&p.height<g.height&&(u=g.height),e=Math.max(f,p.width),s=Math.max(u,p.height),g.width<e&&(e=Math.min(p.width,e)),g.height<s&&(s=Math.min(p.height,s)),t=Math.min(g.width,t),i=Math.min(g.height,i),t=Math.max(e,t),i=Math.max(s,i),(l===90||l===270)&&(h=t,t=i,i=h,h=e,e=s,s=h),this.me.si(),this.Yd(t,i,e,s),this.me.S(),this.me.isReal()||U.n("Non-real measuredBounds has been set. Object "+this+", measuredBounds: "+this.me.toString()),this.Ce(!1)}Yd(t,i,e,s){}hn(){return!1}Ht(t,i,e,s,n){this.If();const o=Rect.a();o.f(this.Xi),this.Xi.si(),this.ps()===!1?this.Xi.e(t,i,e,s):this.Vh(t,i,e,s),this.Xi.S(),n===void 0?this.mi=null:this.mi=n;let r=!1;if(n!==void 0)r=!0;else{let l=this.panel;if(l!==null&&l.bl()&&(l=l.panel),l!==null){const h=l._i,a=this.measuredBounds,c=i+a.height,f=t+a.width;if(r=!(0<=t+.05&&f<=h.width+.05&&0<=i+.05&&c<=h.height+.05),this instanceof TextBlock){const u=this.naturalBounds;(this.hp>u.height||this.Pi>u.width)&&(r=!0)}}}r?this.l|=256:this.l&=-257,this.Xi.isReal()||U.n("Non-real actualBounds has been set. Object "+this+", actualBounds: "+this.Xi.toString()),this.Kd(o,this.Xi),this.yo(!1),Rect.o(o)}Vh(t,i,e,s){}commonArrange(t,i,e,s){if(this.Xi.e(t,i,e,s),this.desiredSize.isReal())return;const n=this.me,o=this.wl,r=o.right+o.left,l=o.top+o.bottom,h=n.width+r,a=n.height+l;e+=r,s+=l;let c=this.ln(!0);switch(h===e&&a===s&&(c=0),c){case 0:(h>e||a>s)&&(this.Ce(!0),this.yt(h>e?e:h,a>s?s:a,0,0));break;case 2:this.Ce(!0),this.yt(e,s,0,0);break;case 5:this.Ce(!0),this.yt(e,a,0,0);break;case 4:this.Ce(!0),this.yt(h,s,0,0);break}}Kd(t,i){const e=this.part;e!==null&&e.diagram!==null&&((e.selectionObject===this||e.resizeObject===this||e.rotateObject===this)&&e.nN(!0),this.L(),!t.equalsApproxClose(i)&&(e.zh(),this.ap(e)))}ap(t){this.portId!==null&&(t.nN(!0),t instanceof Node&&t.invalidateConnectedLinks(void 0,this))}get shadowVisible(){return this.k!==null?this.k.cp:null}set shadowVisible(t){const i=this.shadowVisible;i!==t&&(Debug&&t!==null&&U.i(t,"boolean",GraphObject,"shadowVisible"),this.Zt().cp=t,this.os(!0),this.L(),this.t("shadowVisible",i,t))}YE(t,i){const e=this.naturalBounds,s=this.Ih,n=s.m11,o=s.m21,r=s.dx,l=s.m12,h=s.m22,a=s.dy;let c=0,f=0,u=c,d=f;c=u*n+d*o+r,f=u*l+d*h+a;let m=c,g=f,p=0,y=0;u=e.width+i,d=0,c=u*n+d*o+r,f=u*l+d*h+a;let x=Math.min(m,c),b=Math.min(g,f);p=Math.max(m+p,c)-x,y=Math.max(g+y,f)-b,m=x,g=b,u=e.width+i,d=e.height+i,c=u*n+d*o+r,f=u*l+d*h+a,x=Math.min(m,c),b=Math.min(g,f),p=Math.max(m+p,c)-x,y=Math.max(g+y,f)-b,m=x,g=b,u=0,d=e.height+i,c=u*n+d*o+r,f=u*l+d*h+a,x=Math.min(m,c),b=Math.min(g,f),p=Math.max(m+p,c)-x,y=Math.max(g+y,f)-b,m=x,g=b;const S=t.viewportBounds,k=S.x,P=S.y,A=S.width,N=S.height;return m>A+k||k>p+m||g>N+P||P>y+g}$i(t,i){if(this.KE(t,i)||!this.visible)return;const e=this.opacity;if(e===0)return;let s=1;e!==1&&(s=t.globalAlpha,t.globalAlpha=s*e);let n="";this.filter!==""&&(n=t.filter,t.filter=this.filter);const o=this.D,r=this.panel;this.rp()===!0&&this.tS();const l=this.part;let h=!1,a=0;if(l&&i.getRenderingHint("drawShadows")&&(h=l.isShadowed,h)){const g=l.shadowOffset;a=Math.max(g.y,g.x)*i.scale*i.Qi}const c=this instanceof Panel&&this.bl(),f=this.Xi;if(c&&(this.OD(h,t,!1,r),this.UE(t,i),this.ED(h,t,!1,r),this.BD(h,t,!1)),c||!c&&(f.width===0||f.height===0||isNaN(f.x)||isNaN(f.y))){e!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n);return}const u=this.hn();if(!i.Ra&&u&&this.YE(i,a)){e!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n);return}let d=(this.l&256)!==0;if(t.clipInsteadOfFill&&(d=!1),this instanceof TextBlock&&(t.font=this.font),d){const g=r.Bn()?r.naturalBounds:r.actualBounds;let p=Math.max(f.x,g.x),y=Math.max(f.y,g.y),x=Math.min(f.right,g.right)-p,b=Math.min(f.bottom,g.bottom)-y;const S=this.mi;if(S!==null&&(p=S.x,y=S.y,x=S.width,b=S.height),p>f.width+f.x||f.x>g.width+g.x){e!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n);return}t.save(),t.beginPath(),t.rect(p,y,x,b),t.clip()}if(u){if(!this.isVisible()){e!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n);return}if(h){const g=this.shadowOffset;t.shadowsSet(g.x*i.scale*this.scale*i.Qi,g.y*i.scale*this.scale*i.Qi,this.shadowBlur),t.shadowsOn(),t.shadowColor=this.shadowColor}}const m=this.naturalBounds;if(t.transform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.OD(h,t,u,r),this.Ft!==null&&(t.commitTransform(),this.iS(t,m,f)),this.ED(h,t,u,r),this.Xh(t,i),this.BD(h,t,u),d&&(t.restore(),t.clearContextCache(this instanceof Panel)),!o._k()){const g=1/(o.m11*o.m22-o.m12*o.m21);t.transform(o.m22*g,-o.m12*g,-o.m21*g,o.m11*g,g*(o.m21*o.dy-o.m22*o.dx),g*(o.m12*o.dx-o.m11*o.dy))}e!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n)}OD(t,i,e,s){t&&this.shadowVisible===!0?i.shadowsOn():t&&this.shadowVisible===!1&&i.shadowsOff(),t&&this.eS(s)&&this.shadowVisible===null&&i.shadowsOff()}ED(t,i,e,s){t&&(this.Ft!==null||this.eS(s))?(this.sS(!0),this.shadowVisible===null&&i.shadowsOff()):this.sS(!1)}BD(t,i,e){t&&(this.oN()===!0||this.shadowVisible===!1)&&i.shadowsOn(),e&&t&&i.shadowsOff()}GE(t,i,e){const s=this.part;let n=!1;s&&t.getRenderingHint("drawShadows")&&(n=s.isShadowed),i.clipInsteadOfFill&&(n=!1),this.hn()&&n&&i.shadowsOn(),n&&this.shadowVisible===!0?i.shadowsOn():n&&this.shadowVisible===!1&&i.shadowsOff();const o=this.panel;if(n&&this.eS(o)&&this.shadowVisible===null&&i.shadowsOff(),i.Sl){const r=t.computePixelRatio(),l=`drop-shadow(${i.shadowOffsetX/r}px ${i.shadowOffsetY/r}px ${i.shadowBlur/r/2}px ${i.shadowColor})`;this.background!==null&&e.Ft.setAttributeNS(null,"filter",l)}return n&&(this.Ft!==null||this.eS(o))?(this.sS(!0),this.shadowVisible===null&&i.shadowsOff()):this.sS(!1),n}qE(t,i,e,s){if(e.Sl){const n=i.computePixelRatio(),o=`drop-shadow(${e.shadowOffsetX/n}px ${e.shadowOffsetY/n}px ${e.shadowBlur/n/2}px ${e.shadowColor})`;this.rN(t,o)}s&&(this.oN()===!0||this.shadowVisible===!1)&&e.shadowsOn(),this.hn()&&e.shadowsOff()}eS(t){return t===null?!1:(t.bl()&&(t=t.panel),t.oN()||(t.type===Panel.Auto||t.type===Panel.Spot)&&t.findMainElement()!==this)}rN(t,i){}iS(t,i,e){const s=this.lp(),n=i.x,o=i.y,r=i.width+s,l=i.height+s;this.Fn(t,this.Ft,!0,!1,i,e),this.Ft instanceof Brush&&this.Ft.type===3?(t.beginPath(),t.rect(n-s/2,o-s/2,r,l),t.fillContext(this.Ft,!1,null)):t.fillRect(n-s/2,o-s/2,r,l)}VD(t,i){let e=t.lN(this);const s=t.Oh!==null?t.Oh:t.svg;if(s!==null&&e!==-1){for(;e!==0&&!t.elt(e-1).isVisibleObject();)e--;if(e===0)this.HE(t,i,s);else{const n=t.elt(e-1).svg;n!==null?n.after(i):s.appendChild(i)}}}HE(t,i,e){if(t.type===Panel.Table){const s=e.getElementsByClassName("gojs-ts"),n=s.length!==0?s[0]:null;n!==null&&n.after(i)}else e.Ft?e.Ft.after(i):e.prepend(i)}KE(t,i){if(!(t instanceof SVGContext))return!1;if(!this.visible||this.opacity===0)return this.svg!==null&&this.svg.parentNode!==null&&this.svg.remove(),!0;const e=this.Xi;if(this.hn()&&(!this.isVisible()||e.width===0||e.height===0||isNaN(e.x)||isNaN(e.y)))return this.svg!==null&&this.svg.parentNode!==null&&this.svg.remove(),!0;t.setCurrentTransform(1,0,0,1,0,0);const s=this.panel,n=this.Ud(t);if(this.Of(t,i,n)){const m=this.svg;return this.zD(m),m.parentElement!==null?(this.hn()&&(t.lastDrawnPart=this.svg),!0):(this.hn()?(t.lastDrawnPart!==null?t.lastDrawnPart.after(m):t.diagramGroup.prepend(m),t.lastDrawnPart=this.svg):s&&this.VD(s,m),!0)}if(this.os(!1),this.hn()&&this.isShadowed){const m=this.shadowOffset;t.shadowsSet(m.x*i.scale*this.scale*i.Qi,m.y*i.scale*this.scale*i.Qi,this.shadowBlur),t.shadowsOn(),t.shadowColor=this.shadowColor}this instanceof TextBlock&&(t.font=this.font),t.currentElement=null;const o=this.D,r=this instanceof Panel,l=this instanceof Panel?this.bl():!1,h=this.svg;if(this.rp()===!0&&this.tS(),t.outerGroup=!1,n)if(t.outerGroup=!0,r&&l)t.newGroup(1,0,0,1,0,0),this.svg=t.lastCreatedElement;else if(r&&this.isClipping){const m=this.findMainElement();let g=0,p=0;m!==null&&(g=m.actualBounds.x,p=m.actualBounds.y),t.newGroup(o.m11,o.m12,o.m21,o.m22,o.dx+g,o.dy+p),this.svg=t.lastCreatedElement,m!==null&&t.createOrUpdateClipGroup(this,m.actualBounds),t.currentElement=t.lastCreatedElement}else r?(t.newGroup(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.svg=t.lastCreatedElement):t.newGroup(1,0,0,1,0,0);const a=this.naturalBounds;r||t.setCurrentTransform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.background!==null&&(r?(l&&t.setCurrentTransform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.iS(t,a,e),l&&t.setCurrentTransform(1,0,0,1,0,0)):(t.setCurrentTransform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.iS(t,a,e)),t.currentElement.Ft=t.lastCreatedElement,t.currentElement.prepend(t.lastCreatedElement));const c=this.GE(i,t,t.currentElement);this.Xh(t,i),r&&t.endGroup(),t.outerGroup&&t.endGroup();const f=t.surface.Rd,u=r?this.svg:t.currentElement;if(h!==null&&h.parentNode!==null&&u!==h&&(this.panel===null||h.parentNode===this.panel.svg)){const m=this.svg.getAttribute("filter");return m!==null&&u.setAttribute("filter",m),this.filter!==""&&u.setAttributeNS(null,"filter",this.filter),h.replaceWith(u),this.svg=u,u!==null&&this.fp(t,s,e,u),!0}if(this.svg=u,f!==null&&u===null&&t.dummyGroup(),u===null)return!0;this.fp(t,s,e,u),this.qE(u,i,t,c);const d=this.hn()?this.opacity*t.globalAlpha:this.opacity;if(d!==1&&u.setAttributeNS(null,"opacity",d.toString()),this.filter!==""&&u.setAttributeNS(null,"filter",this.filter),this.hn()){if(h!==null&&u!==h&&h.parentNode===t.diagramGroup){const m=h.getAttribute("filter");m!==null&&u.setAttribute("filter",m),h.replaceWith(u)}else t.lastDrawnPart?t.lastDrawnPart.after(u):t.diagramGroup.prepend(u);t.lastDrawnPart=u}else s!==null&&this.VD(s,u);return f!==null&&f(this,u),this.zD(u),!0}zD(t){const i=this,e=t.dataset;i instanceof GraphObject&&(i.portId!==null&&(e.portId=i.portId),i instanceof Panel&&(isNaN(i.itemIndex)||(e.itemIndex=i.itemIndex.toString()),i instanceof Part&&(e.className=U.to(i),i.key!==void 0&&(e.key=i.key.toString()),i.containingGroup!==null&&(e.group=i.containingGroup.key.toString()),i instanceof Link&&(i.fromNode!==null&&i.fromNode.key!==void 0&&(e.fromKey=i.fromNode.key.toString()),i.fromPortId!==""&&(e.fromPortId=i.fromPortId),i.toNode!==null&&i.toNode.key!==void 0&&(e.toKey=i.toNode.key.toString()),i.toPortId!==""&&(e.toPortId=i.toPortId)))))}fp(t,i,e,s){let n=(this.l&256)!==0;if(t.clipInsteadOfFill&&(n=!1),!n){s.removeAttributeNS(null,"clip-path");return}const o=i.Bn()?i.naturalBounds:i.actualBounds;let r=Math.max(e.x,o.x),l=Math.max(e.y,o.y),h=Math.min(e.right,o.right)-r,a=Math.min(e.bottom,o.bottom)-l;const c=this.mi;c!==null&&(r=c.x,l=c.y,h=c.width,a=c.height);const f=Rect.V(r,l,Math.max(h,0),Math.max(a,0));if(this instanceof Panel){const u=Transform.a();u.set(this.D),u.Cx(),u.km(f),Transform.o(u)}s.setAttributeNS(null,"clip-path",`path('      M ${f.x},${f.y}       L ${f.width+f.x} ${f.y}       L ${f.width+f.x} ${f.height+f.y}       L ${f.x} ${f.height+f.y} z') view-box`),Rect.o(f)}vE(){if(this.svg===null)return;const t=this.svg.innerHTML.match(/url\(#((CLIP|GRAD).+?)\)/g),i=this.svg.ownerDocument;if(t!==null)for(const e of t){const s=i.getElementById(e.split("#")[1].slice(0,-1));s!==null&&s.remove()}this.svg.remove()}UE(t,i){const e=this.Xi,s=this._i,n=this.Ft;n!==null&&t.commitTransform(),n!==null&&(this.Fn(t,n,!0,!1,s,e),n instanceof Brush&&n.type===3?(t.beginPath(),t.rect(e.x,e.y,e.width,e.height),t.fillContext(n,!1,null)):t.fillRect(e.x,e.y,e.width,e.height)),this.Xh(t,i)}Xh(t,i){}Ef(){this.os(!0)}Of(t,i,e){const s=this.svg;if(this.WE()){if(this.Ef(),this.os(!1),s===null)return!1;const c=s.getAttribute("clip-path");if(c!==null&&c.includes("url")){const u=t.svg.getElementById(c.split("#")[1].slice(0,-1));u!==null&&u.remove()}return s.getAttribute("filter")&&s.removeAttribute("filter"),!1}if(s===null)return!1;if(!this.visible)return s.remove(),!1;if(s.nodeName!=="g"&&e||s.nodeName==="g"&&!e)return!1;const n=this.D,o="matrix("+n.m11+", "+n.m12+", "+n.m21+", "+n.m22+", "+n.dx+", "+n.dy+")",r=this instanceof Panel,l=r?this.bl():!1;if(!(r&&l))if(this instanceof Picture){const c=this.nS;t.setCurrentTransform(n.m11,n.m12,n.m21,n.m22,n.dx,n.dy),c!==null&&t.amendImageTransform(c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7]),e?s.lastElementChild.setAttributeNS(null,"transform",t.getCurrentTransform()):s.setAttributeNS(null,"transform",t.getCurrentTransform())}else if(e&&!r)if(this instanceof Shape){const c=s.getElementsByTagName("path");for(let f=0;f<c.length;f++)c[f].setAttributeNS(null,"transform",o)}else if(this instanceof TextBlock){const c=s.getElementsByTagName("text"),f=typeof this.stroke=="string"?this.stroke:null;for(let u=0;u<c.length;u++)c[u].setAttributeNS(null,"transform",o),f&&c[u].setAttributeNS(null,"fill",f)}else(s.lastElementChild||s).setAttributeNS(null,"transform",o);else if(r&&this.isClipping&&this.Oh){const c=this.findMainElement(),f=c!==null?c.actualBounds.x:0,u=c!==null?c.actualBounds.y:0;this.Oh.setAttributeNS(null,"transform","matrix(1,0,0,1,"+-f+", "+-u+")"),s.setAttributeNS(null,"transform","matrix("+n.m11+", "+n.m12+", "+n.m21+", "+n.m22+", "+(n.dx+f)+", "+(n.dy+u)+")")}else s.setAttributeNS(null,"transform",o);const h=this.hn()?this.opacity*t.globalAlpha:this.opacity;h===1?s.removeAttribute("opacity"):s.setAttributeNS(null,"opacity",h.toString()),t.setCurrentTransform(1,0,0,1,0,0);const a=this.Oh?this.Oh:this._b;if(this.background!==null||a.Ft!==void 0){const c=a.Ft;if(this.background===null)t.removeOldGradient(this,a.Ft,"fill"),a.Ft.remove(),a.Ft=void 0;else{if((l||e&&!(this instanceof Panel))&&t.setCurrentTransform(n.m11,n.m12,n.m21,n.m22,n.dx,n.dy),this.iS(t,this.naturalBounds,this.actualBounds),a.Ft){t.removeOldGradient(this,a.Ft,"fill");const f=a.Ft.getAttribute("filter");f!==null&&t.lastCreatedElement.setAttribute("filter",f),a.Ft.replaceWith(t.lastCreatedElement)}else a.prepend(t.lastCreatedElement);a.Ft=t.lastCreatedElement}c&&t.removeOldGradient(this,c,"fill")}return this.fp(t,this.panel,this.actualBounds,s),!0}Ud(t){if(this.background!==null)return!0;let i=(this.l&256)!==0;return t.clipInsteadOfFill&&(i=!1),!!i}static mV(t,i,e,s,n,o,r){let l=.001;const h=o.length;t.moveTo(i,e);let a=s-i;const c=n-e;a===0&&(a=.001);const f=c/a;let u=Math.sqrt(a*a+c*c),d=0,m=!0;l=o[d%h];let g=r!==0;for(;u>=.1;){if(g){for(l=o[d++%h],l-=r;l<0;)l+=o[d++%h],m=!m;g=!1}else l=o[d++%h];l>u&&(l=u);let p=Math.sqrt(l*l/(1+f*f));a<0&&(p=-p),i+=p,e+=f*p,m?t.lineTo(i,e):t.moveTo(i,e),u-=l,m=!m}}Fn(t,i,e,s,n,o){let r=1,l=1;if(typeof i=="string"){e?t.fillStyle=i:t.strokeStyle=i;return}else if(i.type===1){e?t.fillStyle=i.color:t.strokeStyle=i.color;return}let h;const a=this.lp();r=n.width,l=n.height,s?(r=o.width,l=o.height):e||(r+=a,l+=a);const c=t instanceof CanvasSurfaceContext;if(c&&i.Vn&&(i.type===4||i.Bf===r&&i.oS===l))h=i.Vn;else{let f=0,u=0,d=0,m=0,g=0,p=0,y=0,x=0;if(s?(y=o.x,x=o.y):e||(y-=a/2,x-=a/2),f=i.start.x*r+i.start.offsetX+y,u=i.start.y*l+i.start.offsetY+x,d=i.end.x*r+i.end.offsetX+y,m=i.end.y*l+i.end.offsetY+x,i.type===2)h=t.createLinearGradient(f,u,d,m);else if(i.type===3)p=isNaN(i.endRadius)?Math.max(r,l)/2:i.endRadius,isNaN(i.startRadius)?(g=0,p=Math.max(r,l)/2):g=i.startRadius,h=t.createRadialGradient(f,u,g,d,m,p);else if(i.type===4)try{h=t.createPattern(i.pattern,"repeat")}catch{h=null}else U.Ii(i.type,"Brush type");if(i.type!==4){const b=i.colorStops;if(b!==null){const S=b.iterator;for(;S.next();)h.addColorStop(S.key,S.value)}}if(c&&(i.Vn=h,h!==null&&(i.Bf=r,i.oS=l),h===null&&i.type===4&&i.Bf!==-1)){i.Bf=-1;const b=this.diagram;b!==null&&i.Bf===-1&&U.Sn(()=>{b.redraw()},600)}}e?t.fillStyle=h:t.strokeStyle=h}isContainedBy(t){return t instanceof Panel?this.jE(this,t):!1}jE(t,i){if(t===i||i===null)return!1;let e=t.panel;for(;e!==null;){if(e===i)return!0;e=e.panel}return!1}isVisibleObject(){if(!this.visible)return!1;const t=this.panel;return t!==null?t.isVisibleObject():!0}isEnabledObject(){let t=this instanceof Panel?this:this.panel;for(;t!==null&&t.isEnabled;)t=t.panel;return t===null}get enabledChanged(){return this.k!==null?this.k.dp:null}set enabledChanged(t){const i=this.enabledChanged;i!==t&&(t!==null&&U.C(t,GraphObject,"enabledChanged"),this.Zt().dp=t,this.t("enabledChanged",i,t))}tS(){if(this.rS()===!0){const t=this.yl;if(t.Hi(),!this.Xi.isReal()||!this.me.isReal()){this.Gd(!1),this.Yh(!1);return}if(t.Zs(this.Xi.x-this.me.x,this.Xi.y-this.me.y),this.scale!==1||this.angle!==0){const i=this.naturalBounds;this.op(t,i.x,i.y,i.width,i.height)}this.Gd(!1),this.Yh(!0)}if(this.rp()===!0){const t=this.panel;if(t===null)this.Ih.set(this.yl),this.Ha=this.scale;else if(t.nn!==null){const i=this.Ih;i.Hi(),t.Bn()?i.Xc(t.Ih):t.panel!==null&&i.Xc(t.panel.Ih),i.Xc(this.yl),this.Ha=this.scale*t.Ha}this.Yh(!1)}}op(t,i,e,s,n){if(this.lt!==1&&t.lt(this.lt),this.jt===0)return;const o=Point.a();o.setSpot(i,e,s,n,Spot.Center),t.Ns(this.jt,o.x,o.y),Point.o(o)}g(t){if(this.$o())return;t===void 0&&(t=!1),this.Ce(!0),this.yo(!0);const i=this.panel;i!==null&&!t&&i.g()}Vf(){this.$o()||(this.Ce(!0),this.yo(!0))}zf(t){if(this.ps())return;const i=this.panel;!t&&i!==null&&i.g(),this.yo(!0)}If(){this.rS()===!1&&(this.Gd(!0),this.Yh(!0))}hN(){this.Yh(!0)}L(){const t=this.part;t!==null&&t.L()}ln(t){const i=this.stretch,e=this.panel;if(e===null)return this.ir(i===1?0:i,t);if(e.type===Panel.Table)return this.gp(e.getRowDefinition(this.row),e.getColumnDefinition(this.column),t);if(e.type===Panel.Auto&&e.findMainElement()===this)return this.ir(2,t);if(i===1){if(e.type===Panel.Spot&&e.findMainElement()===this)return this.ir(2,t);const s=e.defaultStretch;return s===1?this.ir(0,t):this.ir(s,t)}return this.ir(i,t)}gp(t,i,e){const s=this.stretch;if(s!==1)return this.ir(s,e);let n=null,o=null;switch(t.stretch){case 1:case 5:break;case 4:o=!0;break;case 2:o=!0;break}switch(i.stretch){case 1:case 4:break;case 5:n=!0;break;case 2:n=!0;break}const r=this.panel.defaultStretch;return n===null&&(n=r===5||r===2),o===null&&(o=r===4||r===2),n===!0&&o===!0?this.ir(2,e):n===!0?this.ir(5,e):o===!0?this.ir(4,e):this.ir(0,e)}ir(t,i){if(i)return t;if(t===0)return 0;const e=this.desiredSize;if(e.isReal())return 0;const s=!isNaN(e.width),n=!isNaN(e.height),o=this.angle;if(s)if(o!==90&&o!==270){if(t===5)return 0;if(t===2)return 4}else{if(t===4)return 0;if(t===2)return 5}if(n)if(o!==90&&o!==270){if(t===4)return 0;if(t===2)return 5}else{if(t===5)return 0;if(t===2)return 4}return t}get segmentOrientation(){return this.Kt!==null?this.Kt.mp:0}set segmentOrientation(t){const i=this.segmentOrientation;i!==t&&(Debug&&U.j(t,Orientation,"Orientation"),this.Kt===null&&(this.Kt=new LinkElementSettings),this.Kt.mp=t,this.g(),this.t("segmentOrientation",i,t),t===0&&(this.angle=0))}JE(){this.segmentOrientation=21}get segmentIndex(){return this.Kt!==null?this.Kt.pp:-1/0}set segmentIndex(t){Debug&&U.i(t,"number",GraphObject,"segmentIndex"),t=Math.round(t);const i=this.segmentIndex;i!==t&&(this.Kt===null&&(this.Kt=new LinkElementSettings),this.Kt.pp=t,this.g(),this.t("segmentIndex",i,t))}get segmentFraction(){return this.Kt!==null?this.Kt.yp:0}set segmentFraction(t){Debug&&U.r(t,GraphObject,"segmentFraction"),t<0?t=0:t>1&&(t=1);const i=this.segmentFraction;i!==t&&(this.Kt===null&&(this.Kt=new LinkElementSettings),this.Kt.yp=t,this.g(),this.t("segmentFraction",i,t))}get segmentOffset(){return this.Kt!==null?this.Kt.wp:Point.kn}set segmentOffset(t){const i=this.segmentOffset;i.equals(t)||(Debug&&U.s(t,Point,GraphObject,"segmentOffset"),t=t.T(),this.Kt===null&&(this.Kt=new LinkElementSettings),this.Kt.wp=t,this.g(),this.t("segmentOffset",i,t))}get stretch(){return this.k!==null?this.k.wo:1}set stretch(t){const i=this.stretch;i!==t&&(Debug&&U.j(t,Stretch,"Stretch"),this.Zt().wo=t,this.g(),this.t("stretch",i,t))}get name(){return this.k!==null?this.k.Nt:""}set name(t){const i=this.name;i!==t&&(Debug&&U.i(t,"string",GraphObject,"name"),this.Zt().Nt=t,this.part!==null&&this.part.xp(),this.t("name",i,t))}get opacity(){return this.ri}set opacity(t){Debug&&U.r(t,GraphObject,"opacity"),t<0?t=0:t>1&&(t=1);const i=this.opacity;if(i!==t){this.ri=t,this.t("opacity",i,t);const e=this.diagram,s=this.part;e!==null&&s!==null&&e.L(s.Ca(s.actualBounds))}}get filter(){return this.sp}set filter(t){const i=this.filter;if(i!==t){Debug&&U.i(t,"string",GraphObject,"filter"),this.sp=t,this.os(!0),this.t("filter",i,t);const e=this.diagram,s=this.part;e!==null&&s!==null&&e.L(s.Ca(s.actualBounds))}}get visible(){return(this.l&1)!==0}set visible(t){const i=(this.l&1)!==0;if(i!==t){Debug&&U.i(t,"boolean",GraphObject,"visible"),this.l=this.l^1,this.Ef(),this.t("visible",i,t);const e=this.panel;e!==null?e.g():this.hn()&&this.Ji(t),this.L(),this.XD()}}get pickable(){return(this.l&2)!==0}set pickable(t){const i=(this.l&2)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"pickable"),this.l=this.l^2,this.t("pickable",i,t))}get fromLinkableDuplicates(){return(this.l&4)!==0}set fromLinkableDuplicates(t){const i=(this.l&4)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"fromLinkableDuplicates"),this.l=this.l^4,this.t("fromLinkableDuplicates",i,t))}get fromLinkableSelfNode(){return(this.l&8)!==0}set fromLinkableSelfNode(t){const i=(this.l&8)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"fromLinkableSelfNode"),this.l=this.l^8,this.t("fromLinkableSelfNode",i,t))}get toLinkableDuplicates(){return(this.l&16)!==0}set toLinkableDuplicates(t){const i=(this.l&16)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"toLinkableDuplicates"),this.l=this.l^16,this.t("toLinkableDuplicates",i,t))}get toLinkableSelfNode(){return(this.l&32)!==0}set toLinkableSelfNode(t){const i=(this.l&32)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"toLinkableSelfNode"),this.l=this.l^32,this.t("toLinkableSelfNode",i,t))}get isPanelMain(){return(this.l&64)!==0}set isPanelMain(t){const i=(this.l&64)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"isPanelMain"),this.l=this.l^64,this.g(),this.t("isPanelMain",i,t))}get isActionable(){return(this.l&128)!==0}set isActionable(t){const i=(this.l&128)!==0;i!==t&&(Debug&&U.i(t,"boolean",GraphObject,"isActionable"),this.l=this.l^128,this.t("isActionable",i,t))}get background(){return this.Ft}set background(t){const i=this.background;i!==t&&(t!==null&&Brush.qd(t,"GraphObject.background"),t instanceof Brush&&t.S(),this.Ft=t,this.L(),this.t("background",i,t))}oN(){return(this.l&512)!==0}sS(t){t?this.l|=512:this.l&=-513}Ff(){return(this.l&1024)!==0}aN(t){t?this.l|=1024:this.l&=-1025}rS(){return(this.l&2048)!==0}Gd(t){t?this.l|=2048:this.l&=-2049}rp(){return(this.l&4096)!==0}Yh(t){t?this.l|=4096:this.l&=-4097}$o(){return(this.l&8192)!==0}Ce(t){t?this.l|=8192:this.l&=-8193}ps(){return(this.l&16384)!==0}yo(t){t?this.l|=16384:this.l&=-16385}WE(){return(this.l&32768)!==0}os(t){t?this.l|=32768:this.l&=-32769}get part(){if(this.hn())return this;if(this.xl!==null)return this.xl;let t=this;for(t=t.panel;t;){if(t instanceof Part)return this.xl=t,t;t=t.panel}return null}get svg(){return this._b}set svg(t){this._b=t}gf(){this.svg=null}get panel(){return this.rn}_a(t){this.rn=t,this.svg!==null&&this.svg.remove()}get layer(){const t=this.part;return t!==null?t.layer:null}get diagram(){const t=this.part;return t!==null?t.diagram:null}get position(){return this.wt}set position(t){Debug&&U.s(t,Point,GraphObject,"position");const i=t.x,e=t.y,s=this.position,n=s.x,o=s.y;n!==i&&(!isNaN(n)||!isNaN(i))||o!==e&&(!isNaN(o)||!isNaN(e))?(t=t.copy(),this.cN(t,n,o)&&this.t("position",new Point(n,o),t.copy())):this.fN()}fN(){}cN(t,i,e){return this.wt=t,this.zf(),!0}sf(t,i,e){this.wt.x===t&&this.wt.y===i||(this.wt.e(t,i),this.If())}get actualBounds(){return this.Xi}get scale(){return this.lt}set scale(t){const i=this.scale;i!==t&&(Debug&&U.r(t,GraphObject,"scale"),t<=0&&U.n("GraphObject.scale for "+this+" must be greater than zero, not: "+t),this.lt=t,this.g(),this.t("scale",i,t))}get angle(){return this.jt}set angle(t){const i=this.angle;if(i!==t){if(Debug&&U.r(t,GraphObject,"angle"),t=t%360,t<0&&(t+=360),i===t)return;this.jt=t,this.XD(),this.g(),this.t("angle",i,t)}}get desiredSize(){return this.ys}set desiredSize(t){Debug&&U.s(t,Size,GraphObject,"desiredSize");const i=t.width,e=t.height,s=this.desiredSize,n=s.width,o=s.height;if((n!==i&&(!isNaN(n)||!isNaN(i))||o!==e&&(!isNaN(o)||!isNaN(e)))&&(t=t.T(),this.ys=t,this.g(),this instanceof Shape&&this.ge(),this.t("desiredSize",s,t),this.Ff())){const r=this.part;r!==null&&(this.Qa(r,"width"),this.Qa(r,"height"))}}get width(){return this.ys.width}set width(t){const i=this.ys.width;if(i!==t&&(!isNaN(i)||!isNaN(t))){Debug&&U.i(t,"number",GraphObject,"width");const e=this.ys,s=new Size(t,this.ys.height).S();if(this.ys=s,this.g(),this instanceof Shape&&this.ge(),this.t("desiredSize",e,s),this.Ff()){const n=this.part;n!==null&&this.Qa(n,"width")}}}get height(){return this.ys.height}set height(t){const i=this.ys.height;if(i!==t&&(!isNaN(i)||!isNaN(t))){Debug&&U.i(t,"number",GraphObject,"height");const e=this.ys,s=new Size(this.ys.width,t).S();if(this.ys=s,this.g(),this instanceof Shape&&this.ge(),this.t("desiredSize",e,s),this.Ff()){const n=this.part;n!==null&&this.Qa(n,"height")}}}get minSize(){return this.k!==null?this.k.Vr:Size.ua}set minSize(t){const i=this.minSize;i.equals(t)||(Debug&&U.s(t,Size,GraphObject,"minSize"),t=t.copy(),isNaN(t.width)&&(t.width=0),isNaN(t.height)&&(t.height=0),t.S(),this.Zt().Vr=t,this.g(),this.t("minSize",i,t))}get maxSize(){return this.k!==null?this.k.zr:Size.yx}set maxSize(t){const i=this.maxSize;i.equals(t)||(Debug&&U.s(t,Size,GraphObject,"maxSize"),t=t.copy(),isNaN(t.width)&&(t.width=1/0),isNaN(t.height)&&(t.height=1/0),t.S(),this.Zt().zr=t,this.g(),this.t("maxSize",i,t))}get measuredBounds(){return this.me}get naturalBounds(){return this._i}lp(){return 0}get margin(){return this.wl}set margin(t){typeof t=="number"?t=new Margin(t):Debug&&U.s(t,Margin,GraphObject,"margin");const i=this.wl;i.equals(t)||(t=t.T(),this.wl=t,this.g(),this.t("margin",i,t))}get D(){return this.rS()===!0&&this.tS(),this.yl}get nn(){return this.rp()===!0&&this.tS(),this.Ih}trigger(t,i,e){let s=null;return typeof t=="string"?s=new AnimationTrigger(t,i,e):s=t,s.Ve=this,this.zs===null&&(this.zs=new GMap),this.zs.set(s.propertyName,s),this}get zs(){return this.k!==null?this.k.zs:null}set zs(t){this.zs!==t&&(this.Zt().zs=t)}get Br(){return this.k!==null?this.k.Br:0}set Br(t){this.Br!==t&&(this.Zt().Br=t)}get alignment(){return this.xi}set alignment(t){const i=this.alignment;i.equals(t)||(Debug&&U.s(t,Spot,GraphObject,"alignment"),t.isNoSpot()&&!t.isDefault()&&U.n("GraphObject.alignment for "+this+" must be a real Spot or Spot.Default, not: "+t),t=t.T(),this.xi=t,this.zf(),this.t("alignment",i,t))}get column(){return this.Rh}set column(t){Debug&&U.r(t,GraphObject,"column"),t=Math.round(t);const i=this.column;i!==t&&(t<0&&U.q(t,">= 0",GraphObject,"column"),this.Rh=t,this.g(),this.t("column",i,t),this.svg!==null&&this.svg.remove())}get columnSpan(){return this.k!==null?this.k.bp:1}set columnSpan(t){Debug&&U.i(t,"number",GraphObject,"columnSpan"),t=Math.round(t);const i=this.columnSpan;i!==t&&(t<1&&U.q(t,">= 1",GraphObject,"columnSpan"),this.Zt().bp=t,this.g(),this.t("columnSpan",i,t))}get row(){return this.ep}set row(t){Debug&&U.r(t,GraphObject,"row"),t=Math.round(t);const i=this.row;i!==t&&(t<0&&U.q(t,">= 0",GraphObject,"row"),this.ep=t,this.g(),this.t("row",i,t),this.svg!==null&&this.svg.remove())}get rowSpan(){return this.k!==null?this.k.Sp:1}set rowSpan(t){Debug&&U.i(t,"number",GraphObject,"rowSpan"),t=Math.round(t);const i=this.rowSpan;i!==t&&(t<1&&U.q(t,">= 1",GraphObject,"rowSpan"),this.Zt().Sp=t,this.g(),this.t("rowSpan",i,t))}get spanAllocation(){return this.k!==null?this.k.kp:null}set spanAllocation(t){const i=this.spanAllocation;i!==t&&(t!==null&&U.C(t,GraphObject,"spanAllocation"),this.Zt().kp=t,this.g(),this.t("spanAllocation",i,t))}get alignmentFocus(){return this.zd}set alignmentFocus(t){const i=this.alignmentFocus;i.equals(t)||(Debug&&U.s(t,Spot,GraphObject,"alignmentFocus"),Debug&&t.isNoSpot()&&!t.isDefault()&&!(t.isNone()&&this instanceof Node)&&U.n("GraphObject.alignmentFocus must be a real Spot or Spot.Default, not: "+t),t=t.T(),this.zd=t,this.g(),this.t("alignmentFocus",i,t))}get portId(){return this.ip}set portId(t){const i=this.portId;if(i!==t){Debug&&t!==null&&U.i(t,"string",GraphObject,"portId");const e=this.part;e!==null&&!(e instanceof Node)&&U.n("Cannot set portID on a Link: "+t);const s=e;i!==null&&s!==null&&s.uN(this),this.ip=t,t!==null&&s!==null&&(s.zn=!0,s.YD(this)),this.t("portId",i,t)}}tc(){const t=this.part;if(t instanceof Node&&(this.portId!==null||this===t.port)){const i=t.diagram;i!==null&&!i.undoManager.isUndoingRedoing&&t.invalidateConnectedLinks(void 0,this)}}XD(){const t=this.diagram;t===null||t.undoManager.isUndoingRedoing||(this instanceof Panel?this instanceof Node?this.invalidateConnectedLinks():this.walkVisualTreeFrom(this,i=>{i.tc()}):this.tc())}get toSpot(){return this.xt!==null?this.xt.Wa:Spot.None}set toSpot(t){const i=this.toSpot;i.equals(t)||(Debug&&U.s(t,Spot,GraphObject,"toSpot"),t=t.T(),this.ns().Wa=t,this.t("toSpot",i,t),this.tc())}get toEndSegmentLength(){return this.xt!==null?this.xt.Ja:10}set toEndSegmentLength(t){const i=this.toEndSegmentLength;i!==t&&(Debug&&U.i(t,"number",GraphObject,"toEndSegmentLength"),t<0&&U.q(t,">= 0",GraphObject,"toEndSegmentLength"),this.ns().Ja=t,this.t("toEndSegmentLength",i,t),this.tc())}get toShortLength(){return this.xt!==null?this.xt.Za:0}set toShortLength(t){const i=this.toShortLength;i!==t&&(Debug&&U.i(t,"number",GraphObject,"toShortLength"),this.ns().Za=t,this.t("toShortLength",i,t),this.tc())}get toLinkable(){return this.xt!==null?this.xt.Pp:null}set toLinkable(t){const i=this.toLinkable;i!==t&&(Debug&&t!==null&&U.i(t,"boolean",GraphObject,"toLinkable"),this.ns().Pp=t,this.t("toLinkable",i,t))}get toMaxLinks(){return this.xt!==null?this.xt.Mp:1/0}set toMaxLinks(t){const i=this.toMaxLinks;i!==t&&(Debug&&U.i(t,"number",GraphObject,"toMaxLinks"),t<0&&U.q(t,">= 0",GraphObject,"toMaxLinks"),this.ns().Mp=t,this.t("toMaxLinks",i,t))}get fromSpot(){return this.xt!==null?this.xt.va:Spot.None}set fromSpot(t){const i=this.fromSpot;i.equals(t)||(Debug&&U.s(t,Spot,GraphObject,"fromSpot"),t=t.T(),this.ns().va=t,this.t("fromSpot",i,t),this.tc())}get fromEndSegmentLength(){return this.xt!==null?this.xt.ja:10}set fromEndSegmentLength(t){const i=this.fromEndSegmentLength;i!==t&&(Debug&&U.i(t,"number",GraphObject,"fromEndSegmentLength"),t<0&&U.q(t,">= 0",GraphObject,"fromEndSegmentLength"),this.ns().ja=t,this.t("fromEndSegmentLength",i,t),this.tc())}get fromShortLength(){return this.xt!==null?this.xt.$a:0}set fromShortLength(t){const i=this.fromShortLength;i!==t&&(Debug&&U.i(t,"number",GraphObject,"fromShortLength"),this.ns().$a=t,this.t("fromShortLength",i,t),this.tc())}get fromLinkable(){return this.xt!==null?this.xt.Cp:null}set fromLinkable(t){const i=this.fromLinkable;i!==t&&(Debug&&t!==null&&U.i(t,"boolean",GraphObject,"fromLinkable"),this.ns().Cp=t,this.t("fromLinkable",i,t))}get fromMaxLinks(){return this.xt!==null?this.xt.Np:1/0}set fromMaxLinks(t){const i=this.fromMaxLinks;i!==t&&(Debug&&U.i(t,"number",GraphObject,"fromMaxLinks"),t<0&&U.q(t,">= 0",GraphObject,"fromMaxLinks"),this.ns().Np=t,this.t("fromMaxLinks",i,t))}get cursor(){return this.k!==null?this.k.Zl:""}set cursor(t){const i=this.cursor;i!==t&&(U.i(t,"string",GraphObject,"cursor"),this.Zt().Zl=t,this.t("cursor",i,t))}get click(){return this.k!==null?this.k.Zr:null}set click(t){const i=this.click;i!==t&&(t!==null&&U.C(t,GraphObject,"click"),this.Zt().Zr=t,this.t("click",i,t))}get doubleClick(){return this.k!==null?this.k.Qr:null}set doubleClick(t){const i=this.doubleClick;i!==t&&(t!==null&&U.C(t,GraphObject,"doubleClick"),this.Zt().Qr=t,this.t("doubleClick",i,t))}get contextClick(){return this.k!==null?this.k._r:null}set contextClick(t){const i=this.contextClick;i!==t&&(t!==null&&U.C(t,GraphObject,"contextClick"),this.Zt()._r=t,this.t("contextClick",i,t))}get mouseEnter(){return this.k!==null?this.k.nl:null}set mouseEnter(t){const i=this.mouseEnter;i!==t&&(t!==null&&U.C(t,GraphObject,"mouseEnter"),this.Zt().nl=t,this.t("mouseEnter",i,t))}get mouseLeave(){return this.k!==null?this.k.ol:null}set mouseLeave(t){const i=this.mouseLeave;i!==t&&(t!==null&&U.C(t,GraphObject,"mouseLeave"),this.Zt().ol=t,this.t("mouseLeave",i,t))}get mouseOver(){return this.k!==null?this.k.tl:null}set mouseOver(t){const i=this.mouseOver;i!==t&&(t!==null&&U.C(t,GraphObject,"mouseOver"),this.Zt().tl=t,this.t("mouseOver",i,t))}get mouseHover(){return this.k!==null?this.k.il:null}set mouseHover(t){const i=this.mouseHover;i!==t&&(t!==null&&U.C(t,GraphObject,"mouseHover"),this.Zt().il=t,this.t("mouseHover",i,t))}get mouseHold(){return this.k!==null?this.k.el:null}set mouseHold(t){const i=this.mouseHold;i!==t&&(t!==null&&U.C(t,GraphObject,"mouseHold"),this.Zt().el=t,this.t("mouseHold",i,t))}get mouseDragEnter(){return this.k!==null?this.k.Ap:null}set mouseDragEnter(t){const i=this.mouseDragEnter;i!==t&&(t!==null&&U.C(t,GraphObject,"mouseDragEnter"),this.Zt().Ap=t,this.t("mouseDragEnter",i,t))}get mouseDragLeave(){return this.k!==null?this.k.Tp:null}set mouseDragLeave(t){const i=this.mouseDragLeave;i!==t&&(t!==null&&U.C(t,GraphObject,"mouseDragLeave"),this.Zt().Tp=t,this.t("mouseDragLeave",i,t))}get mouseDrop(){return this.k!==null?this.k.sl:null}set mouseDrop(t){const i=this.mouseDrop;i!==t&&(t!==null&&U.C(t,GraphObject,"mouseDrop"),this.Zt().sl=t,this.t("mouseDrop",i,t))}get actionDown(){return this.k!==null?this.k.Lp:null}set actionDown(t){const i=this.actionDown;i!==t&&(t!==null&&U.C(t,GraphObject,"actionDown"),this.Zt().Lp=t,this.t("actionDown",i,t))}get actionMove(){return this.k!==null?this.k.Dp:null}set actionMove(t){const i=this.actionMove;i!==t&&(t!==null&&U.C(t,GraphObject,"actionMove"),this.Zt().Dp=t,this.t("actionMove",i,t))}get actionUp(){return this.k!==null?this.k.Fp:null}set actionUp(t){const i=this.actionUp;i!==t&&(t!==null&&U.C(t,GraphObject,"actionUp"),this.Zt().Fp=t,this.t("actionUp",i,t))}get actionCancel(){return this.k!==null?this.k.Rp:null}set actionCancel(t){const i=this.actionCancel;i!==t&&(t!==null&&U.C(t,GraphObject,"actionCancel"),this.Zt().Rp=t,this.t("actionCancel",i,t))}get toolTip(){return this.k!==null?this.k.rl:null}set toolTip(t){const i=this.toolTip;i!==t&&(Debug&&t!==null&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("GraphObject.toolTip must be an Adornment or HTMLInfo."),this.Zt().rl=t,this.t("toolTip",i,t))}get contextMenu(){return this.k!==null?this.k.ll:null}set contextMenu(t){const i=this.contextMenu;i!==t&&(Debug&&!(t instanceof Adornment||t instanceof HTMLInfo)&&U.n("GraphObject.contextMenu must be an Adornment or HTMLInfo."),this.Zt().ll=t,this.t("contextMenu",i,t))}findBindingPanel(){let t=this instanceof Panel?this:this.panel;for(;t!==null;){if(t.dN())return t;t=t.panel}return null}bind(t,i,e,s){return s!==void 0&&(GraphObject.lS||(GraphObject.lS=!0,U.et(`Warning: the fourth argument to GraphObject.bind has been deprecated -- use bindTwoWay instead.
. `+s))),this.Xf(t,i,e,s),this}static lS=!1;bindTwoWay(t,i,e,s){return this.Xf(t,i,e,s).makeTwoWay(),this}bindModel(t,i,e,s){return this.Xf(t,i,e,s).ofModel(),this}bindObject(t,i,e,s,n){return this.Xf(t,i,e,s).ofObject(n),this}theme(t,i,e,s,n){return this.Kh(t,i,e,s,n),this}themeData(t,i,e,s,n){return this.Kh(t,i,e,s,n).ofData(),this}themeObject(t,i,e,s,n,o){return this.Kh(t,i,e,s,n).ofObject(o),this}themeModel(t,i,e,s,n){return this.Kh(t,i,e,s,n).ofModel(),this}Xf(t,i,e,s){let n=null;return typeof t=="string"?n=new Binding(t,i,e,s):n=t,this.Ip(n),n}Kh(t,i,e,s,n){let o=null;return typeof t=="string"?o=new ThemeBinding(t,i,e,s,n):o=t,this.Ip(o),o}Ip(t){t.Ve=this;const i=this.findBindingPanel();i!==null&&i.KD()&&U.n("Cannot add a Binding to a template that has already been copied: "+t),this.Yi===null&&(this.Yi=new List),this.Yi.add(t)}set(t){if(!t)return this;if(Debug)for(const i in t)(i.startsWith("_")||i.indexOf(".")!==-1)&&U.n("Property with underscore or period passed to GraphObject.set. Did you mean to use GraphObject.attach?");return Object.assign(this,t),this}attach(t){return GraphObject.gN(this,t),this}apply(t,...i){return t.apply(this,[this,...i]),this}setProperties(t){return Diagram.G0(this,t),this}static make(t,...i){let e=arguments,s=null,n=null;if(U.at(t))n=t;else if(typeof t=="string"){const r=GraphObject.hS.get(t);U.at(r)?(e=Array.prototype.slice.call(e),s=r(e),U.st(s)||U.n('GraphObject.make invoked object builder "'+t+'", but it did not return an Object')):n=root.go[t]}s===null&&((n==null||!n.constructor)&&U.n("GraphObject.make requires a class function or GoJS class name or name of an object builder, not: "+t),s=new n);let o=1;if(s instanceof Diagram&&e.length>1){const r=s,l=e[1];(typeof l=="string"||l instanceof HTMLDivElement)&&(r.J2(l),o++)}for(let r=o;r<e.length;r++){const l=e[r];l===void 0?U.n("Undefined value at argument "+r+" for object being constructed by GraphObject.make: "+s):s&&GraphObject.gN(s,l)}return s}static gN(t,i){if(typeof i=="number")GraphObject.$E(t,i);else if(typeof i=="string")GraphObject.ZE(t,i);else if(i instanceof GraphObject)t instanceof Panel||U.n("A GraphObject can only be added to a Panel, not to: "+t),t.add(i);else if(i instanceof RowColumnDefinition){let e=null;i.isRow&&U.at(t.getRowDefinition)?e=t.getRowDefinition(i.index):!i.isRow&&U.at(t.getColumnDefinition)&&(e=t.getColumnDefinition(i.index)),e instanceof RowColumnDefinition?e.aS(i):U.n("A RowColumnDefinition can only be added to an object that implements getRowDefinition/getColumnDefinition, not to: "+t)}else if(i instanceof PanelLayout){const e=t;e.type=i}else if(i instanceof Binding)t instanceof GraphObject||t instanceof RowColumnDefinition?t.bind(i):U.n("A Binding can only be applied to a GraphObject or RowColumnDefinition, not to: "+t);else if(i instanceof AnimationTrigger)t instanceof GraphObject?t.trigger(i):U.n("An AnimationTrigger can only be applied to a GraphObject, not to: "+t);else if(i instanceof PathFigure)t instanceof Geometry&&t.type===4?t.figures.add(i):U.n("A PathFigure can only be added to a Path Geometry, not to: "+t);else if(i instanceof PathSegment)t instanceof PathFigure?t.segments.add(i):U.n("A PathSegment can only be added to a PathFigure, not to: "+t);else if(i instanceof Layout)t instanceof Diagram||t instanceof Group?t.layout=i:U.n("A Layout can only be assigned to a Diagram or a Group, not to: "+t);else if(Array.isArray(i))for(let e=0;e<i.length;e++){const s=i[e];GraphObject.gN(t,s)}else U.st(i)?GraphObject.QE(t,i):U.n('Unknown initializer "'+i+'" for object being constructed by GraphObject.make: '+t)}static ZE(t,i){if(t instanceof TextBlock)t.text=i;else if(t instanceof Shape)t.figure=i;else if(t instanceof Picture)t.source=i;else if(t instanceof Panel){const e=PanelLayout.rs.get(i);e!==null?t.type=e:Debug&&U.n("Unknown Panel type as an argument to GraphObject.make: "+i+". If building from source, you may need to call Panel.definePanelLayout.")}else if(t instanceof Brush){const e=U.fa(BrushType,i);e!==null?t.type=e:U.n("Unknown Brush type as an argument to GraphObject.make: "+i)}else if(t instanceof Geometry){const e=U.fa(GeometryType,i);e!==null?t.type=e:Debug&&U.n("Unknown Geometry type as an argument to GraphObject.make: "+i)}else if(t instanceof PathSegment){const e=U.fa(SegmentType,i);e!==null?t.type=e:Debug&&U.n("Unknown PathSegment type as an argument to GraphObject.make: "+i)}else Debug&&U.n("Unable to use a string as an argument to GraphObject.make: "+i)}static $E(t,i){U.at(t.yi)?t.yi(i):U.Pr(t,i)}static QE(t,i){if(t instanceof Brush){const e=new PropertyCollection;for(const s in i){const n=parseFloat(s);isNaN(n)?e[s]=i[s]:t.addColorStop(n,i[s])}Diagram.G0(t,e)}else if(t instanceof RowColumnDefinition){if(i.row!==void 0){const s=i.row;(s==null||s===1/0||isNaN(s)||s<0)&&U.n("Must specify non-negative integer row for RowColumnDefinition "+i+", not: "+s),t.isRow=!0,t.index=s}else if(i.column!==void 0){const s=i.column;(s==null||s===1/0||isNaN(s)||s<0)&&U.n("Must specify non-negative integer column for RowColumnDefinition "+i+", not: "+s),t.isRow=!1,t.index=s}const e=new PropertyCollection;for(const s in i)s==="row"||s==="column"||(e[s]=i[s]);Diagram.G0(t,e)}else Diagram.G0(t,i)}static build(t,i,...e){const s=GraphObject.hS.get(t);if(U.at(s)){const n=s([t].concat(e));if(n instanceof GraphObject)return i&&n.setProperties(i),n}U.n('GraphObject.build invoked object builder "'+t+'", but it did not return an Object')}static defineBuilder(t,i){U.i(t,"string",GraphObject,"defineBuilder:name"),U.C(i,GraphObject,"defineBuilder:func");const e=t.toLowerCase();Debug&&(t===""||e==="none"||t===e)&&U.n("Shape.defineFigureGenerator name must not be empty or None or all-lower-case: "+t),GraphObject.hS.set(t,i)}static isBuilderDefined(t){return GraphObject.hS.has(t)}static takeBuilderArgument(t,i,e){e===void 0&&(e=null);const s=t[1];return(U.at(e)?e(s):typeof s=="string")?(t.splice(1,1),s):(i===void 0&&U.n("no "+(U.at(e)?"satisfactory":"string")+" argument for GraphObject builder "+t[0]),i)}static hS=new GMap}GraphObject.Vertical=4,GraphObject.Horizontal=5,GraphObject.defineBuilder("Button",w=>{const t="#f5f5f5",i="#737373",e="#d4d4d4",s="#737373",n="#a3a3a3",o=2.76142374915397,r=2.761423749153969,l=new Panel(Panel.Auto,{isActionable:!0,enabledChanged:(h,a)=>{if(h instanceof Panel){const c=h.findObject("ButtonBorder");if(c!==null)if(h._buttonFillNormal===void 0&&(h._buttonFillNormal=c.fill),a){let f=null;h.layer!==null&&h.diagram!==null&&h.isVisibleObject()&&(f=h.layer.findObjectAt(h.diagram.lastInput.documentPoint)),f===h||f!==null&&f.isContainedBy(h)?c.fill=h._buttonFillOver:c.fill=h._buttonFillNormal}else c.fill=h._buttonFillDisabled}},cursor:"pointer"}).attach({_buttonFillNormal:void 0,_buttonStrokeNormal:void 0,_buttonFillOver:e,_buttonStrokeOver:s,_buttonFillDisabled:n}).add(new Shape("RoundedRectangle",{name:"ButtonBorder",spot1:new Spot(0,0,o,r),spot2:new Spot(1,1,-o,-r),parameter1:2,fill:t,stroke:i}));return l.mouseEnter=(h,a,c)=>{if(!a.isEnabledObject()||!(a instanceof Panel))return;const f=a.findObject("ButtonBorder");f instanceof Shape&&(a._buttonFillNormal===void 0&&(a._buttonFillNormal=f.fill),f.fill=a._buttonFillOver,a._buttonStrokeNormal===void 0&&(a._buttonStrokeNormal=f.stroke),f.stroke=a._buttonStrokeOver)},l.mouseLeave=(h,a,c)=>{if(!a.isEnabledObject()||!(a instanceof Panel))return;const f=a.findObject("ButtonBorder");f instanceof Shape&&(a._buttonFillNormal!==void 0&&(f.fill=a._buttonFillNormal),a._buttonStrokeNormal!==void 0&&(f.stroke=a._buttonStrokeNormal))},l}),GraphObject.defineBuilder("TreeExpanderButton",w=>{const t=GraphObject.build("Button");return t.attach({_treeExpandedFigure:"MinusLine",_treeCollapsedFigure:"PlusLine",visible:!1}),t.add(new Shape("MinusLine",{name:"ButtonIcon",stroke:"#0a0a0a",strokeWidth:2,desiredSize:Size.Bu}).bindObject("figure","isTreeExpanded",(i,e)=>{const s=e.panel;return i?s._treeExpandedFigure:s._treeCollapsedFigure})),t.bindObject("visible","isTreeLeaf",i=>!i),t.click=(i,e)=>{let s=e.part;if(s instanceof Adornment&&(s=s.adornedPart),!(s instanceof Node))return;const n=s.diagram;if(n===null)return;const o=n.commandHandler;if(s.isTreeExpanded){if(!o.canCollapseTree(s))return}else if(!o.canExpandTree(s))return;i.handled=!0,s.isTreeExpanded?o.collapseTree(s):o.expandTree(s)},t}),GraphObject.defineBuilder("SubGraphExpanderButton",w=>{const t=GraphObject.build("Button");return t.attach({_subGraphExpandedFigure:"MinusLine",_subGraphCollapsedFigure:"PlusLine"}),t.add(new Shape("MinusLine",{name:"ButtonIcon",stroke:"#0a0a0a",strokeWidth:2,desiredSize:Size.Bu}).bindObject("figure","isSubGraphExpanded",(i,e)=>{const s=e.panel;return i?s._subGraphExpandedFigure:s._subGraphCollapsedFigure})),t.click=(i,e)=>{let s=e.part;if(s instanceof Adornment&&(s=s.adornedPart),!(s instanceof Group))return;const n=s.diagram;if(n===null)return;const o=n.commandHandler;if(s.isSubGraphExpanded){if(!o.canCollapseSubGraph(s))return}else if(!o.canExpandSubGraph(s))return;i.handled=!0,s.isSubGraphExpanded?o.collapseSubGraph(s):o.expandSubGraph(s)},t}),GraphObject.defineBuilder("ToolTip",w=>new Adornment(Panel.Auto,{isShadowed:!0,shadowColor:"rgba(0, 0, 0, .4)",shadowOffset:new Point(0,2),mouseOver:(t,i)=>{const e=t.diagram.toolManager;e.extendToolTip(e.toolTipDuration)}}).add(new Shape("RoundedRectangle",{name:"Border",parameter1:1,fill:"#f5f5f5",strokeWidth:0,spot1:new Spot(0,0,4,6),spot2:new Spot(1,1,-4,-4)}))),GraphObject.defineBuilder("ContextMenu",w=>new Adornment(Panel.Vertical,{background:"#f5f5f5",isShadowed:!0,shadowColor:"rgba(0, 0, 0, .4)",shadowOffset:new Point(0,2)}).bindObject("background","",t=>t.adornedPart!==null&&t.hasPlaceholder()?null:"#f5f5f5")),GraphObject.defineBuilder("ContextMenuButton",w=>{const t=GraphObject.build("Button");t.stretch=5;const i=t.findObject("ButtonBorder");return i instanceof Shape&&(i.figure="Rectangle",i.strokeWidth=0,i.spot1=new Spot(0,0,4,6),i.spot2=new Spot(1,1,-4,-4)),t}),GraphObject.defineBuilder("PanelExpanderButton",w=>{const t=GraphObject.takeBuilderArgument(w,"COLLAPSIBLE"),i=GraphObject.build("Button");i.attach({_buttonExpandedFigure:"M0 0 M0 6 L4 2 8 6 M8 8",_buttonCollapsedFigure:"M0 0 M0 2 L4 6 8 2 M8 8","ButtonBorder.fill":"rgba(0, 0, 0, 0)",_buttonFillNormal:"rgba(0, 0, 0, 0)","ButtonBorder.stroke":null,_buttonStrokeNormal:null,_buttonFillOver:"rgba(0, 0, 0, .2)",_buttonStrokeOver:null}),i.add(new Shape({name:"ButtonIcon",strokeWidth:2}).bindObject("geometryString","visible",s=>s?i._buttonExpandedFigure:i._buttonCollapsedFigure,void 0,t));const e=i.findObject("ButtonBorder");return e instanceof Shape&&(e.stroke=null,e.fill="rgba(0, 0, 0, 0)"),i.click=(s,n)=>{if(!(n instanceof Panel))return;const o=n.diagram;if(o===null||o.isReadOnly)return;let r=n.findBindingPanel();if(r===null&&(r=n.part),r!==null){const l=r.findObject(t);l!==null&&(s.handled=!0,o.startTransaction("Collapse/Expand Panel"),l.visible=!l.visible,o.commitTransaction("Collapse/Expand Panel"))}},i}),GraphObject.defineBuilder("CheckBoxButton",w=>{const t=GraphObject.takeBuilderArgument(w),i=GraphObject.build("Button",{desiredSize:new Size(14,14)});i.attach({"ButtonBorder.spot1":new Spot(0,0,1,1),"ButtonBorder.spot2":new Spot(1,1,-1,-1)});const e=new Shape({name:"ButtonIcon",geometryString:"M0 0 M0 8.85 L4.9 13.75 16.2 2.45 M16.2 16.2",strokeWidth:2,stretch:2,geometryStretch:6,visible:!1});return t!==""&&e.bindTwoWay("visible",t),i.add(e),i.click=(s,n)=>{if(!(n instanceof Panel))return;const o=s.diagram;if(o===null||o.isReadOnly||t!==""&&o.model.isReadOnly)return;s.handled=!0;const r=n.findObject("ButtonIcon");o.startTransaction("checkbox"),r!==null&&(r.visible=!r.visible),U.at(n._doClick)&&n._doClick(s,n),o.commitTransaction("checkbox")},i}),GraphObject.defineBuilder("CheckBox",w=>{const t=GraphObject.takeBuilderArgument(w),i=GraphObject.build("CheckBoxButton",{name:"Button",isActionable:!1,margin:new Margin(0,1,0,0)},t),e=new Panel("Horizontal",{isActionable:!0,cursor:i.cursor,margin:new Margin(1),mouseEnter:i.mouseEnter,mouseLeave:i.mouseLeave,click:i.click}).attach({_buttonFillNormal:i._buttonFillNormal,_buttonStrokeNormal:i._buttonStrokeNormal,_buttonFillOver:i._buttonFillOver,_buttonStrokeOver:i._buttonStrokeOver,_buttonFillDisabled:i._buttonFillDisabled,_buttonClick:i.click});return e.add(i),i.mouseEnter=null,i.mouseLeave=null,i.click=null,e}),GraphObject.defineBuilder("AutoRepeatButton",w=>{const t=GraphObject.takeBuilderArgument(w,50,r=>typeof r=="number"),i=GraphObject.takeBuilderArgument(w,500,r=>typeof r=="number");function e(r,l){n(r,l),l.click&&(l.Hd=U.Sn(()=>s(r,l),i))}function s(r,l){l.Hd&&U.Vc(l.Hd),l.click&&(l.Hd=U.Sn(()=>{l.click&&(l.click(r,l),s(r,l))},t))}function n(r,l){l.Hd&&(U.Vc(l.Hd),l.Hd=void 0)}const o=GraphObject.build("Button");return o.actionDown=(r,l)=>e(r,l),o.actionUp=(r,l)=>n(r,l),o.actionCancel=(r,l)=>n(r,l),o}),GraphObject.defineBuilder("ToggleSwitch",function(w){const t=GraphObject.takeBuilderArgument(w);t||U.n("ToggleSwitch must be data-bound to a property name, not: "+t);const i=GraphObject.takeBuilderArgument(w,!1,a=>typeof a=="boolean"),e="gray",s="transparent",n="white",h=new Panel("Auto",{width:i?15:28,height:i?28:15}).attach({_buttonFillOff:e,_buttonBorderOff:s,_buttonIconFillOff:n,_buttonFillOn:"green",_buttonBorderOn:"transparent",_buttonIconFillOn:"white"}).add(new Shape("Capsule",{name:"ButtonBorder",fill:e,stroke:s,strokeWidth:1}).bind("fill",t,(a,c)=>a?c.panel._buttonFillOn:c.panel._buttonFillOff).bind("stroke",t,(a,c)=>a?c.panel._buttonBorderOn:c.panel._buttonBorderOff)).add(new Shape("Circle",{name:"ButtonIcon",width:11,height:11,fill:n,stroke:null,alignment:i?Spot.Bottom:Spot.Left}).bind("fill",t,(a,c)=>a?c.panel._buttonIconFillOn:c.panel._buttonIconFillOff).bind("alignment",t,a=>a?i?Spot.Top:Spot.Right:i?Spot.Bottom:Spot.Left));return h.click=function(a,c){if(!c.isEnabledObject())return;const f=a.diagram;if(f===null||f.isReadOnly||t!==""&&f.model.isReadOnly)return;a.handled=!0;const u=c.findBindingPanel();u!==null&&(f.startTransaction("toggle switch"),f.model.set(u.data,t,!u.data[t]),typeof c._doClick=="function"&&c._doClick(a,c),f.commitTransaction("toggle switch"))},h}),GraphObject.defineBuilder("Toggle",function(w){const t=GraphObject.takeBuilderArgument(w),i=GraphObject.build("ToggleSwitch",{name:"Button"},t),e=new Panel("Horizontal",{cursor:i.cursor,margin:1,mouseEnter:i.mouseEnter,mouseLeave:i.mouseLeave,click:i.click}).attach({_buttonClick:i.click}).add(i);return i.mouseEnter=null,i.mouseLeave=null,i.click=null,e});class GraphObjectTemplateSettings{ki;Nt;go;Yi;mo;Xs;Zl;Zr;Qr;_r;nl;ol;tl;il;el;Ap;Tp;sl;Lp;Dp;Fp;Rp;rl;ll;dp;kp;zs;Vr;zr;wo;Sp;bp;Br;cp;Op;Ep;constructor(){this.ki=!1,this.Nt="",this.go=-1,this.Yi=null,this.mo=null,this.Xs=null,this.Zl="",this.Zr=null,this.Qr=null,this._r=null,this.nl=null,this.ol=null,this.tl=null,this.il=null,this.el=null,this.Ap=null,this.Tp=null,this.sl=null,this.Lp=null,this.Dp=null,this.Fp=null,this.Rp=null,this.rl=null,this.ll=null,this.dp=null,this.kp=null,this.zs=null,this.Vr=Size.ua,this.zr=Size.yx,this.wo=1,this.Sp=1,this.bp=1,this.Br=0,this.cp=null,this.Op=null,this.Ep="category"}copy(){const t=new GraphObjectTemplateSettings;return t.Nt=this.Nt,t.go=this.go,t.Yi=this.Yi,t.Xs=this.Xs,t.Zl=this.Zl,t.Zr=this.Zr,t.Qr=this.Qr,t._r=this._r,t.nl=this.nl,t.ol=this.ol,t.tl=this.tl,t.il=this.il,t.el=this.el,t.Ap=this.Ap,t.Tp=this.Tp,t.sl=this.sl,t.Lp=this.Lp,t.Dp=this.Dp,t.Fp=this.Fp,t.Rp=this.Rp,t.rl=this.rl,t.ll=this.ll,t.dp=this.dp,t.kp=this.kp,t.zs=this.zs,t.Vr=this.Vr.T(),t.zr=this.zr.T(),t.wo=this.wo,t.Sp=this.Sp,t.bp=this.bp,t.Br=this.Br,t.cp=this.cp,t.Op=this.Op,t.Ep=this.Ep,t}}class STransform{m;constructor(){this.m=[1,0,0,1,0,0]}copy(){const t=new STransform;return t.m[0]=this.m[0],t.m[1]=this.m[1],t.m[2]=this.m[2],t.m[3]=this.m[3],t.m[4]=this.m[4],t.m[5]=this.m[5],t}translate(t,i){this.m[4]+=this.m[0]*t+this.m[2]*i,this.m[5]+=this.m[1]*t+this.m[3]*i}scale(t,i){this.m[0]*=t,this.m[1]*=t,this.m[2]*=i,this.m[3]*=i}rotate(t,i,e){if(t=G.qi(t),t===0)return;this.translate(i,e);let s=0,n=0;if(t===90)s=0,n=1;else if(t===180)s=-1,n=0;else if(t===270)s=0,n=-1;else{const a=t*Math.PI/180;s=Math.cos(a),n=Math.sin(a)}const o=this.m[0]*s+this.m[2]*n,r=this.m[1]*s+this.m[3]*n,l=this.m[0]*-n+this.m[2]*s,h=this.m[1]*-n+this.m[3]*s;this.m[0]=o,this.m[1]=r,this.m[2]=l,this.m[3]=h,this.translate(-i,-e)}}class SGradient{type;x1;y1;r1;x2;y2;r2;colors;pattern;constructor(t){this.type=t,this.x1=0,this.y1=0,this.r1=0,this.x2=0,this.y2=0,this.r2=0,this.colors=[],this.pattern=null}addColorStop(t,i){this.colors.push({offset:t,color:i})}}class SVGSurface{St;pi;pl;Rd;mN;constructor(t,i,e){const s=i===void 0?root.document:i;this.pl=s,this.mN="http://www.w3.org/2000/svg";const n="http://www.w3.org/2000/xmlns/";s!==void 0&&(this.St=this.makeElement("svg",{width:"1px",height:"1px",viewBox:"0 0 1 1"}),this.style.display="block",this.style.letterSpacing="normal",this.style.wordSpacing="normal",e||(this.style.position="absolute"),this.St.setAttributeNS(n,"xmlns",this.mN),this.St.setAttributeNS(n,"xmlns:xlink","http://www.w3.org/1999/xlink")),this.Rd=null,this.pi=new SVGContext(this,e)}resize(t,i,e,s){return this.width!==t||this.height!==i?(this.width=t,this.height=i,this.style.width=e+"px",this.style.height=s+"px",this.St.setAttributeNS(null,"width",e+"px"),this.St.setAttributeNS(null,"height",s+"px"),this.St.setAttributeNS(null,"viewBox","0 0 "+e+" "+s),this.pi.pN.firstElementChild.setAttributeNS(null,"width",e+"px"),this.pi.pN.firstElementChild.setAttributeNS(null,"height",s+"px"),!0):!1}makeElement(t,i,e){const s=this.pl.createElementNS(this.mN,t);if(U.st(i))for(const n in i)s.setAttributeNS(n==="href"?"http://www.w3.org/1999/xlink":"",n,i[n]);return e!==void 0&&(s.textContent=e),s}getBoundingClientRect(){return this.St.getBoundingClientRect()}focus(){this.St.focus({focusVisible:!1})}get width(){return parseInt(this.St.getAttribute("width")||"1")}set width(t){this.St.setAttribute("width",t+"px")}get height(){return parseInt(this.St.getAttribute("height")||"1")}set height(t){this.St.setAttribute("height",t+"px")}dispose(){this.pl=null}get style(){return this.St.style}}class SVGContext{Yf;Kf;Xn;Ki;ls;fillStyle;font;globalAlpha;lineCap;lineDashOffset;lineJoin;lineWidth;miterLimit;shadowBlur;shadowColor;shadowOffsetX;shadowOffsetY;strokeStyle;textAlign;imageSmoothingEnabled;clipInsteadOfFill;lastCreatedElement;Uf;Gf;surface;svg;pN;UD;cS;er;Uh;ic;currentElement;clipPathGroup;diagramGroup;lastDrawnPart;currentPath;outerGroup;pathAttributes;Sl;qr;filter;letterSpacing;wordSpacing;partClipRect;constructor(t,i){if(this.surface=t,this.svg=t.St,this.Uf=[],this.Gf=[],this.fillStyle="#000000",this.font="10px sans-serif",this.globalAlpha=1,this.lineCap="butt",this.lineDashOffset=0,this.lineJoin="miter",this.lineWidth=1,this.miterLimit=10,this.shadowBlur=0,this.shadowColor="rgba(0, 0, 0, 0)",this.shadowOffsetX=0,this.shadowOffsetY=0,this.Sl=!1,this.strokeStyle="#000000",this.textAlign="start",this.clipInsteadOfFill=!1,this.Yf=0,this.Kf=0,this.Xn=0,this.lastCreatedElement=null,this.currentElement=null,this.Ki=[],this.pathAttributes={},this.cS=!1,this.er=null,this.Uh=0,this.UD={},this.qr=!!i,this.filter="",this.partClipRect=null,this.ls=new STransform,this.letterSpacing="0px",this.wordSpacing="0px",t.pl===null||t.pl===void 0)return;this.clipPathGroup=this.newGroup2(),this.diagramGroup=this.newGroup2("gojs-diagram"),this.lastDrawnPart=null,this.currentPath=null;const e=GSet.gx++,s=this.makeElement("clipPath",{id:"mainClip"+e}),n={x:0,y:0,width:t.width,height:t.height};s.appendChild(this.makeElement("rect",n)),this.pN=s,this.svg.appendChild(this.clipPathGroup),this.clipPathGroup.appendChild(this.diagramGroup),this.svg.appendChild(s),this.clipPathGroup.setAttributeNS(null,"clip-path","url(#mainClip"+e+")")}setDiagramPosScale(t,i,e,s,n,o){this.diagramGroup===void 0?this.newGroup(t,i,e,s,n,o):this.diagramGroup.setAttribute("transform","matrix("+t+", "+i+", "+e+", "+s+", "+n+", "+o+")")}resetInnerSVG(){this.diagramGroup!==null&&(this.diagramGroup.innerHTML="")}arc(t,i,e,s,n,o,r,l){const h=2*Math.PI,a=1e-6,c=h-a,f=e*Math.cos(s),u=e*Math.sin(s),d=t+f,m=i+u,g=o?0:1;let p=o?s-n:n-s;(Math.abs(r-d)>a||Math.abs(l-m)>a)&&this.Ki.push(["L",d,+m]),p<0&&(p=p%h+h),p>c?(this.Ki.push(["A",e,e,0,1,g,t-f,i-u]),this.Ki.push(["A",e,e,0,1,g,d,m])):p>a&&this.Ki.push(["A",e,e,0,+(p>=Math.PI),g,t+e*Math.cos(n),i+e*Math.sin(n)])}beginPath(){this.Ki=[],this.pathAttributes={stroke:"none",fill:"none"}}endPath(t){this._E(this.Ki,this.ls,t||0)}bezierCurveTo(t,i,e,s,n,o){this.Ki.push(["C",t,i,e,s,n,o])}clearRect(t,i,e,s){}clip(){this.pathAttributes.clipPath=!0}closePath(){this.Ki.push(["z"])}createLinearGradient(t,i,e,s){const n=new SGradient("linear");return n.x1=t,n.y1=i,n.x2=e,n.y2=s,n}createPattern(t,i){let e="";t instanceof HTMLCanvasElement&&(e=t.toDataURL()),t instanceof HTMLImageElement&&(e=t.getAttribute("src"));const s=this.UD;if(s[e])return"url(#"+s[e]+")";const n="PATTERN"+GSet.gx++,o={width:t.width,height:t.height,id:n,patternUnits:"userSpaceOnUse"},r={x:0,y:0,width:t.width,height:t.height,href:e},l=this.makeElement("pattern",o);return l.appendChild(this.makeElement(Diagram.img,r)),this.svg.appendChild(l),s[e]=n,"url(#"+n+")"}createRadialGradient(t,i,e,s,n,o){const r=new SGradient("radial");return r.x1=t,r.y1=i,r.r1=e,r.x2=s,r.y2=n,r.r2=o,r}amendImageTransform(t,i,e,s,n,o,r,l){const h=r/e,a=l/s;(n!==0||o!==0)&&this.ls.translate(n,o),(h!==1||a!==1)&&this.ls.scale(h,a),(t!==0||i!==0)&&this.ls.translate(-t,-i)}drawImage(t,i,e,s,n,o,r,l,h){let a="",c=t.width,f=t.height;typeof t.toDataURL=="function"?t.toDataURL():(a=t.getAttribute("src"),c=t.naturalWidth,f=t.naturalHeight),s===void 0&&(o=i,r=e,l=s=c,h=n=f),s=s||0,n=n||0,o=o||0,r=r||0,l=l||0,h=h||0,this.amendImageTransform(i,e,s,n,o,r,l,h);const u={x:0,y:0,width:c||s,height:f||n,href:a};!G.H(s,l)||!G.H(n,h)?u.preserveAspectRatio="none":a.toLowerCase().indexOf(".svg")===-1&&a.toLowerCase().indexOf("data:image/svg")===-1&&(u.preserveAspectRatio="xMidYMid slice"),(i!==0||e!==0||s!==c||n!==f)&&(s+=i,n+=e,u["clip-path"]=`path('M ${i},${e} L ${s} ${e} L ${s} ${n} L ${i} ${n} z')`),this.processCommon(Diagram.img,u,this.ls),this.vd(Diagram.img,u)}fill(t,i){t&&(this.pathAttributes["fill-rule"]="evenodd"),this.setFill(this.pathAttributes)}fillContext(t,i,e){this.clipInsteadOfFill?this.clip():this.fill(i,e)}createOrUpdateClipGroup(t,i){const e=this.newGroup(1,0,0,1,-i.x,-i.y);e.setAttributeNS(null,"class","spotClip"),t.Oh=e}fillRect(t,i,e,s){this.addRect("fill",[t,i,e,s],this.ls)}fillBackground(t,i,e,s){const n={x:t,y:i,width:e,height:s};this.processCommon("fill",n,this.ls),this.setFill(n),this.svg.prepend(this.makeElement("rect",n))}fillText(t,i,e){this.addText("fill",[t,i,e],this.ls)}lineTo(t,i){this.Ki.push(["L",t,i])}moveTo(t,i){this.Ki.push(["M",t,i])}quadraticCurveTo(t,i,e,s){this.Ki.push(["Q",t,i,e,s])}rect(t,i,e,s){this.Ki.push(["M",t,i],["L",t+e,i],["L",t+e,i+s],["L",t,i+s],["z"])}ellipse(t,i,e,s,n,o,r){this.moveTo(t,i-s),this.bezierCurveTo(t+G.eo*e,i-s,t+e,i-G.eo*s,t+e,i),this.bezierCurveTo(t+e,i+G.eo*s,t+G.eo*e,i+s,t,i+s),this.bezierCurveTo(t-G.eo*e,i+s,t-e,i+G.eo*s,t-e,i),this.bezierCurveTo(t-e,i-G.eo*s,t-G.eo*e,i-s,t,i-s),this.closePath()}restore(){this.ls=this.Uf.pop(),this.Ki=this.Uf.pop();const t=this.Uf.pop();this.fillStyle=t.fillStyle,this.font=t.font,this.globalAlpha=t.globalAlpha,this.lineCap=t.lineCap,this.lineDashOffset=t.lineDashOffset,this.lineJoin=t.lineJoin,this.lineWidth=t.lineWidth,this.miterLimit=t.miterLimit,this.shadowBlur=t.shadowBlur,this.shadowColor=t.shadowColor,this.shadowOffsetX=t.shadowOffsetX,this.shadowOffsetY=t.shadowOffsetY,this.strokeStyle=t.strokeStyle,this.textAlign=t.textAlign,this.partClipRect=t.partClipRect,this.letterSpacing=t.letterSpacing,this.wordSpacing=t.wordSpacing}save(){const t={fillStyle:this.fillStyle,font:this.font,globalAlpha:this.globalAlpha,lineCap:this.lineCap,lineDashOffset:this.lineDashOffset,lineJoin:this.lineJoin,lineWidth:this.lineWidth,miterLimit:this.miterLimit,shadowBlur:this.shadowBlur,shadowColor:this.shadowColor,shadowOffsetX:this.shadowOffsetX,shadowOffsetY:this.shadowOffsetY,strokeStyle:this.strokeStyle,textAlign:this.textAlign,partClipRect:this.partClipRect};this.Uf.push(t);const i=[];for(let e=0;e<this.Ki.length;e++)i.push(this.Ki[e]);this.Uf.push(i),this.Uf.push(this.ls.copy())}setTransform(t,i,e,s,n,o){t===1&&i===0&&e===0&&s===1&&n===0&&o===0||this.newGroup(t,i,e,s,n,o)}setCurrentTransform(t,i,e,s,n,o){this.ls.m=[t,i,e,s,n,o]}getCurrentTransform(){const t=this.ls.m;return"matrix("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+")"}scale(t,i){this.ls.scale(t,i)}translate(t,i){this.ls.translate(t,i)}transform(t,i,e,s,n,o){}commitTransform(){}stroke(){this.setStroke(this.pathAttributes)}strokeContext(){this.clipInsteadOfFill||this.stroke()}strokeRect(t,i,e,s){this.addRect("stroke",[t,i,e,s],this.ls)}makeElement(t,i,e){return this.surface.makeElement(t,i,e)}vd(t,i,e){const s=this.makeElement(t,i,e);return this.currentElement!==null?this.currentElement.appendChild(s):this.currentElement=s,this.lastCreatedElement=s,s}processCommon(t,i,e){if(t==="fill"?this.setFill(i):t==="stroke"&&this.setStroke(i),e!==null){const s=e.m;i.transform="matrix("+s[0]+", "+s[1]+", "+s[2]+", "+s[3]+", "+s[4]+", "+s[5]+")"}}setFill(t){if(this.fillStyle instanceof SGradient){t.fill=this.addGradient(this.fillStyle,"fill");return}if(/^rgba\(/.test(this.fillStyle)){const e=/^\s*rgba\s*\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\)\s*$/i.exec(this.fillStyle);t.fill="rgb("+e[1]+","+e[2]+","+e[3]+")",t["fill-opacity"]=e[4]}else t.fill=this.fillStyle}setFillOrStrokeInPlace(t,i){const e=i?"fill":"stroke";if(this.fillStyle instanceof SGradient){t.setAttributeNS(null,"fill",this.addGradient(this.fillStyle,e));return}if(/^rgba\(/.test(this.fillStyle)){const n=/^\s*rgba\s*\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\)\s*$/i.exec(this.fillStyle);t.setAttributeNS(null,e,"rgb("+n[1]+","+n[2]+","+n[3]+")"),t.setAttributeNS(null,e+"-opacity",n[4])}else t.setAttributeNS(null,e,this.fillStyle)}setStroke(t){if(this.strokeStyle instanceof SGradient)t.stroke=this.addGradient(this.strokeStyle,"stroke");else if(/^rgba\(/.test(this.strokeStyle)){const e=/^\s*rgba\s*\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\)\s*$/i.exec(this.strokeStyle);t.stroke="rgb("+e[1]+","+e[2]+","+e[3]+")",t["stroke-opacity"]=e[4]}else t.stroke=this.strokeStyle;t["stroke-width"]=this.lineWidth,t["stroke-linecap"]=this.lineCap,t["stroke-linejoin"]=this.lineJoin,t["stroke-miterlimit"]=this.miterLimit,this.cS&&(t["stroke-dasharray"]=this.er.toString(),t["stroke-dashoffset"]=this.Uh)}addGradient(t,i){let e="";const s=this.currentPath!==null?this.currentPath.getAttribute(i):null;if(s!==null&&s.indexOf("GRAD")!==-1){e=s.split("#")[1].slice(0,-1);const l=this.svg.getElementById(e);l!==null&&l.remove()}else e="GRAD"+GSet.gx++;let n;if(t.type==="linear"){const l={x1:t.x1,x2:t.x2,y1:t.y1,y2:t.y2,id:e,gradientUnits:"userSpaceOnUse"};n=this.makeElement("linearGradient",l)}else if(t.type==="radial"){const l={x1:t.x1,x2:t.x2,y1:t.y1,y2:t.y2,r1:t.r1,r2:t.r2,id:e};n=this.makeElement("radialGradient",l)}else U.n("invalid gradient");const o=t.colors.sort((l,h)=>l.offset>h.offset?1:-1),r=o.length;for(let l=0;l<r;l++){const h=o[l],a=h.color;n.appendChild(this.makeElement("stop",{offset:h.offset,"stop-color":a}))}return this.svg.appendChild(n),"url(#"+e+")"}addRect(t,i,e){const s={x:i[0],y:i[1],width:i[2],height:i[3]};this.processCommon(t,s,e),this.vd("rect",s)}addText(t,i,e){let s=this.textAlign;s==="left"?s="start":s==="right"?s="end":s==="center"&&(s="middle");const n={x:i[1],y:i[2],style:"font: "+this.font,"text-anchor":s};n["letter-spacing"]=this.letterSpacing,n["word-spacing"]=this.wordSpacing,this.processCommon(t,n,e),this.vd("text",n,i[0])}_E(t,i,e){const s=this.t3(t),n=this.pathAttributes;if(n.clipPath){this.Gf.length>1&&this.Gf[this.Gf.length-2].setAttributeNS(null,"clip-path",'path("'+s+'") view-box');return}if(n.d=s,this.processCommon("",n,i),this.currentPath!==null){const r=this.currentPath;if(r.nodeName!=="g")for(const l in n)l!=="transform"&&r.setAttributeNS(null,l,n[l]);else{const l=r.getElementsByTagName("path");for(const h in n)h!=="transform"&&l[e].setAttributeNS(null,h,n[h])}}else this.vd("path",n)}t3(t){const i=[];for(let e=0;e<t.length;e++){const s=t[e].slice(),n=[s.shift()];if(n[0]==="A")n.push(s.shift()+","+s.shift(),s.shift(),s.shift()+","+s.shift(),s.shift()+","+s.shift());else for(;s.length;)n.push(s.shift()+","+s.shift());i.push(n.join(" "))}return i.join(" ")}newGroup(t,i,e,s,n,o){const r=new STransform;r.m=[t,i,e,s,n,o];const l={};this.processCommon("g",l,r);const h=this.vd("g",l);return this.Gf.push(h),h}newGroup2(t){const i={};t&&(i.class=t);const e=this.vd("g",i);return this.Gf.push(e),e}endGroup(){return this.Gf.pop()}dummyGroup(){return this.newGroup2(),this.endGroup()}shadowsSet(t,i,e){this.Yf=t,this.Kf=i,this.Xn=e}shadowsOff(){this.Sl=!1,this.shadowOffsetX=0,this.shadowOffsetY=0,this.shadowBlur=0}shadowsOn(){this.Sl=!0,this.shadowOffsetX=this.Yf,this.shadowOffsetY=this.Kf,this.shadowBlur=this.Xn}enableDash(t,i){this.cS=!0,this.er=t,this.Uh=i}disableDash(){this.cS=!1}clearContextCache(t){}setImageSmoothingEnabled(t){}rotate(t){this.ls.rotate(t*57.2958,0,0)}getImageData(t,i,e,s){return null}measureText(t){return null}removeOldGradient(t,i,e){const s=i.getAttribute(e);if(s===null)return;const n=s.split("#");if(n.length===1)return;const o=this.svg.getElementById(n[1].slice(0,-1));if(o!==null){const r=new RegExp(o.id,"g");this.svg.innerHTML.match(r).length===1&&o.remove()}}removePartFromView(t){t.svg!==null&&t.svg.parentNode===this.diagramGroup&&t.svg.remove()}}class CanvasSurface{St;pi;pl;Rd;constructor(t,i,e,s){const n=i===void 0?root.document:i;this.pl=n,this.Rd=null;const o=n.createElement("canvas");o.tabIndex=0,this.St=o,this.pi=new CanvasSurfaceContext(o,e,s),t&&Diagram.ss.set(o,t)}resize(t,i,e,s){return this.width!==t||this.height!==i?(this.width=t,this.height=i,this.style.width=e+"px",this.style.height=s+"px",!0):!1}toDataURL(t,i){return this.St.toDataURL(t,i)}getBoundingClientRect(){return this.St.getBoundingClientRect()}focus(){this.St.focus({focusVisible:!1})}get width(){return this.St.width}set width(t){this.St.width=t}get height(){return this.St.height}set height(t){this.St.height=t}dispose(){Diagram.ss.delete(this.St),this.pl=null}get style(){return this.St.style}}class CanvasSurfaceContext{B;fS;uS;dS;clipInsteadOfFill;Yf;Kf;Xn;ic;Sl;qr;constructor(t,i,e){t.getContext||U.n("Browser does not support HTML Canvas Element"),this.B=t.getContext("2d",i),this.fS="",this.uS="",this.dS="",this.clipInsteadOfFill=!1,this.Yf=0,this.Kf=0,this.Xn=0,this.Sl=!1,this.ic=new Transform,this.qr=!!e}createOrUpdateClipGroup(t,i){}setImageSmoothingEnabled(t){this.B.imageSmoothingEnabled=t}get fillStyle(){return this.B.fillStyle}set fillStyle(t){this.dS!==t&&(this.B.fillStyle=t,this.dS=t)}get font(){return this.B.font}set font(t){this.fS!==t&&(this.B.font=t,this.fS=t)}get globalAlpha(){return this.B.globalAlpha}set globalAlpha(t){this.B.globalAlpha=t}get lineCap(){return this.B.lineCap}set lineCap(t){this.B.lineCap=t}get lineDashOffset(){return this.B.lineDashOffset}set lineDashOffset(t){this.B.lineDashOffset=t}get lineJoin(){return this.B.lineJoin}set lineJoin(t){this.B.lineJoin=t}get lineWidth(){return this.B.lineWidth}set lineWidth(t){this.B.lineWidth=t}get miterLimit(){return this.B.miterLimit}set miterLimit(t){this.B.miterLimit=t}get shadowBlur(){return this.B.shadowBlur}set shadowBlur(t){this.B.shadowBlur=t}get shadowColor(){return this.B.shadowColor}set shadowColor(t){this.B.shadowColor=t}get shadowOffsetX(){return this.B.shadowOffsetX}set shadowOffsetX(t){this.B.shadowOffsetX=t}get shadowOffsetY(){return this.B.shadowOffsetY}set shadowOffsetY(t){this.B.shadowOffsetY=t}get strokeStyle(){return this.B.strokeStyle}set strokeStyle(t){this.uS!==t&&(this.B.strokeStyle=t,this.uS=t)}get textAlign(){return this.B.textAlign}set textAlign(t){this.B.textAlign=t}get imageSmoothingEnabled(){return this.B.imageSmoothingEnabled}set imageSmoothingEnabled(t){this.B.imageSmoothingEnabled=t}get filter(){return this.B.filter}set filter(t){t===""?this.B.filter="none":this.B.filter=t}get letterSpacing(){return this.B.letterSpacing}set letterSpacing(t){this.B.letterSpacing=t}get wordSpacing(){return this.B.wordSpacing}set wordSpacing(t){this.B.wordSpacing=t}arc(t,i,e,s,n,o,r,l){this.B.arc(t,i,e,s,n,o)}beginPath(){this.B.beginPath()}endPath(){}bezierCurveTo(t,i,e,s,n,o){this.B.bezierCurveTo(t,i,e,s,n,o)}clearRect(t,i,e,s){this.commitTransform(),this.B.clearRect(t,i,e,s)}clip(t){t?this.B.clip(t):this.B.clip()}closePath(){this.B.closePath()}createLinearGradient(t,i,e,s){return this.B.createLinearGradient(t,i,e,s)}createPattern(t,i){return this.B.createPattern(t,i)}createRadialGradient(t,i,e,s,n,o){return this.B.createRadialGradient(t,i,e,s,n,o)}drawImage(t,i,e,s,n,o,r,l,h){s===void 0?this.B.drawImage(t,i,e):this.B.drawImage(t,i,e,s,n,o,r,l,h)}fill(t,i){i?this.B.fill(i,t?"evenodd":"nonzero"):this.B.fill(t?"evenodd":"nonzero")}fillRect(t,i,e,s){this.B.fillRect(t,i,e,s)}fillBackground(t,i,e,s){this.B.fillRect(t,i,e,s)}fillText(t,i,e){this.B.fillText(t,i,e)}getImageData(t,i,e,s){return this.B.getImageData(t,i,e,s)}lineTo(t,i){this.B.lineTo(t,i)}measureText(t){return this.B.measureText(t)}moveTo(t,i){this.B.moveTo(t,i)}quadraticCurveTo(t,i,e,s){this.B.quadraticCurveTo(t,i,e,s)}rect(t,i,e,s){this.B.rect(t,i,e,s)}ellipse(t,i,e,s,n,o,r){this.B.ellipse(t,i,e,s,n,o,r)}restore(){this.B.restore()}save(){this.commitTransform(),this.B.save()}rotate(t){this.ic.Ns(t*57.2958,0,0)}setTransform(t,i,e,s,n,o){this.ic.setTo(t,i,e,s,n,o)}scale(t,i){this.ic.lt(t,i)}translate(t,i){this.ic.Zs(t,i)}stroke(t){t?this.B.stroke(t):this.B.stroke()}transform(t,i,e,s,n,o){if(t===1&&i===0&&e===0&&s===1&&n===0&&o===0)return;const r=this.ic,l=r.m11*t+r.m21*i,h=r.m12*t+r.m22*i,a=r.m11*e+r.m21*s,c=r.m12*e+r.m22*s;r.dx=r.m11*n+r.m21*o+r.dx,r.dy=r.m12*n+r.m22*o+r.dy,r.m11=l,r.m12=h,r.m21=a,r.m22=c}commitTransform(){const t=this.ic;this.B.setTransform(t.m11,t.m12,t.m21,t.m22,t.dx,t.dy)}fillContext(t,i,e){this.radialFill(t,i,e)||this.fillOrClip(i,e)}radialFill(t,i,e){if(!(t instanceof Brush)||t.type!==3)return!1;const s=t.Bf,n=t.oS;return n>s?(this.scale(s/n,1),this.translate((n-s)/2,0)):s>n&&(this.scale(1,n/s),this.translate(0,(s-n)/2)),this.fillOrClip(i,e),n>s?(this.translate(-(n-s)/2,0),this.scale(1/(s/n),1)):s>n&&(this.translate(0,-(s-n)/2),this.scale(1,1/(n/s))),!0}strokeContext(){this.clipInsteadOfFill||this.stroke()}fillOrClip(t,i){this.clipInsteadOfFill?this.clip(i):this.fill(t,i)}shadowsSet(t,i,e){this.Yf=t,this.Kf=i,this.Xn=e}shadowsOff(){this.Sl=!1,this.shadowOffsetX=0,this.shadowOffsetY=0,this.shadowBlur=0}shadowsOn(){this.Sl=!0,this.shadowOffsetX=this.Yf,this.shadowOffsetY=this.Kf,this.shadowBlur=this.Xn}enableDash(t,i){const e=this.B;e.setLineDash!==void 0&&(e.setLineDash(t),e.lineDashOffset=i)}disableDash(){const t=this.B;t.setLineDash!==void 0&&(t.setLineDash(CanvasSurfaceContext.EmptyArray),t.lineDashOffset=0)}clearContextCache(t){t&&(this.fS=""),this.uS="",this.dS=""}removePartFromView(t){}static EmptyArray=Object.freeze([])}var BrushType=(w=>(w[w.Solid=1]="Solid",w[w.Linear=2]="Linear",w[w.Radial=3]="Radial",w[w.Pattern=4]="Pattern",w))(BrushType||{}),ColorSpace=(w=>(w[w.Lab=1]="Lab",w[w.HSL=2]="HSL",w[w.Oklch=3]="Oklch",w))(ColorSpace||{});class ColorNumbers{n0;n1;n2;n3;constructor(){this.n0=0,this.n1=0,this.n2=0,this.n3=0}}class Brush{p;it;ec;gi;Os;Bp;Vp;sr;zp;Vn;Bf;oS;constructor(t,i){if(GSet.se(this),this.p=!1,t===void 0)this.it=1,this.ec="black";else if(typeof t=="string"){const s=U.fa(BrushType,t);s!==null?(this.it=s,this.ec="black"):(this.it=1,Debug&&!Brush.isValidColor(t)&&U.n('Color "'+t+'" is not a valid color string for Brush constructor'),this.ec=t)}else Object.keys(BrushType).hasOwnProperty(t)?(Debug&&U.j(t,BrushType,"BrushType"),this.it=t,this.ec="black"):typeof t=="object"&&(this.it=1,i=t);const e=this.it;if(e===2?(this.gi=Spot.TopCenter,this.Os=Spot.BottomCenter):e===3?(this.gi=Spot.Center,this.Os=Spot.Center):(this.gi=Spot.None,this.Os=Spot.None),this.Bp=0,this.Vp=NaN,this.sr=null,this.zp=null,this.Vn=null,this.Bf=0,this.oS=0,i){const s={};for(const n in i)isFinite(parseFloat(n))?this.addColorStop(parseFloat(n),i[n]):s[n]=i[n];Object.assign(this,s)}}copy(){const t=new Brush;return t.it=this.it,t.ec=this.ec,t.gi=this.gi.T(),t.Os=this.Os.T(),t.Bp=this.Bp,t.Vp=this.Vp,this.sr!==null&&(t.sr=this.sr.copy()),t.zp=this.zp,t}S(){return this.p=!0,this.sr!==null&&this.sr.S(),this}yi(t){t in BrushType?this.type=t:U.Pr(this,t)}toString(){let t="Brush(";if(this.type===1)t+=this.color;else if(this.type===2?t+="Linear ":this.type===3?t+="Radial ":this.type===4?t+="Pattern ":t+="(unknown) ",t+=this.start+" "+this.end,this.colorStops!==null){const i=this.colorStops.iterator;for(;i.next();){const e=i.key,s=i.value;t+=" "+e+":"+s}}return t+=")",t}addColorStop(t,i){return this.p&&U.F(this),(typeof t!="number"||!isFinite(t)||t>1||t<0)&&U.q(t,"0 <= loc <= 1",Brush,"addColorStop:loc"),U.i(i,"string",Brush,"addColorStop:color"),Debug&&!Brush.isValidColor(i)&&U.n('Color "'+i+'" is not a valid color string for Brush.addColorStop'),this.sr===null&&(this.sr=new GMap),this.sr.set(t,i),this.it===1&&(this.type=2),this.Vn=null,this}get type(){return this.it}set type(t){this.p&&U.F(this,t),Debug&&U.j(t,BrushType,"BrushType"),this.it=t,this.start.isNoSpot()&&(t===2?this.start=Spot.TopCenter:t===3&&(this.start=Spot.Center)),this.end.isNoSpot()&&(t===2?this.end=Spot.BottomCenter:t===3&&(this.end=Spot.Center)),this.Vn=null}get color(){return this.ec}set color(t){this.p&&U.F(this,t),Debug&&!Brush.isValidColor(t)&&U.n('Color "'+t+'" is not a valid color string for Brush.color'),this.ec=t,this.Vn=null}get start(){return this.gi}set start(t){this.p&&U.F(this,t),Debug&&U.s(t,Spot,Brush,"start"),this.gi=t.T(),this.Vn=null}get end(){return this.Os}set end(t){this.p&&U.F(this,t),Debug&&U.s(t,Spot,Brush,"end"),this.Os=t.T(),this.Vn=null}get startRadius(){return this.Bp}set startRadius(t){this.p&&U.F(this,t),Debug&&U.r(t,Brush,"startRadius"),t<0&&U.q(t,">= zero",Brush,"startRadius"),this.Bp=t,this.Vn=null}get endRadius(){return this.Vp}set endRadius(t){this.p&&U.F(this,t),Debug&&U.r(t,Brush,"endRadius"),t<0&&U.q(t,">= zero",Brush,"endRadius"),this.Vp=t,this.Vn=null}get colorStops(){return this.sr}set colorStops(t){this.p&&U.F(this,t),Debug&&U.s(t,GMap,Brush,"colorStops"),this.sr=t,this.Vn=null}get pattern(){return this.zp}set pattern(t){this.p&&U.F(this,t),this.zp=t,this.Vn=null}static randomColor(t,i){t===void 0&&(t=128),Debug&&(U.r(t,Brush,"randomColor:min"),(t<0||t>255)&&U.q(t,"0 <= min <= 255",Brush,"randomColor:min")),i===void 0&&(i=Math.max(t,255)),Debug&&(U.r(i,Brush,"randomColor:max"),(i<t||i>255)&&U.q(i,"min <= max <= 255",Brush,"randomColor:max"));const e=Math.abs(i-t);let s=Math.floor(t+U.wm()*e).toString(16),n=Math.floor(t+U.wm()*e).toString(16),o=Math.floor(t+U.wm()*e).toString(16);return s.length<2&&(s="0"+s),n.length<2&&(n="0"+n),o.length<2&&(o="0"+o),"#"+s+n+o}static isValidColor(t){return root.CSS?root.CSS.supports("color",t):!0}static lighten(t){return Brush.lightenBy(t)}lightenBy(t,i){this.p&&U.F(this);const e=t===void 0||typeof t!="number"?.2:t,s=i===void 0?3:i;if(this.type===1)Brush.Ho(this.color),this.color=Brush.Wd(e,s);else if((this.type===2||this.type===3)&&this.colorStops!==null){const n=this.colorStops.iterator;for(;n.next();)Brush.Ho(n.value),this.addColorStop(n.key,Brush.Wd(e,s))}return this}static lightenBy(t,i,e){const s=i===void 0||typeof i!="number"?.2:i,n=e===void 0?3:e;return Brush.Ho(t),Brush.Wd(s,n)}static darken(t){return Brush.darkenBy(t)}darkenBy(t,i){this.p&&U.F(this);const e=t===void 0||typeof t!="number"?.2:t,s=i===void 0?3:i;if(this.type===1)Brush.Ho(this.color),this.color=Brush.Wd(-e,s);else if((this.type===2||this.type===3)&&this.colorStops!==null){const n=this.colorStops.iterator;for(;n.next();)Brush.Ho(n.value),this.addColorStop(n.key,Brush.Wd(-e,s))}return this}static darkenBy(t,i,e){const s=i===void 0||typeof i!="number"?.2:i,n=e===void 0?3:e;return Brush.Ho(t),Brush.Wd(-s,n)}static mix(t,i,e){Brush.Ho(t);const s=Brush.W.n0,n=Brush.W.n1,o=Brush.W.n2,r=Brush.W.n3;Brush.Ho(i),e===void 0&&(e=.5);const l=Math.round((Brush.W.n0-s)*e+s),h=Math.round((Brush.W.n1-n)*e+n),a=Math.round((Brush.W.n2-o)*e+o),c=Math.round((Brush.W.n3-r)*e+r);return`rgba(${l}, ${h}, ${a}, ${c})`}isDark(){if(this.type===1)return Brush.isDark(this.color);if((this.type===2||this.type===3)&&this.colorStops!==null){const t=this.colorStops;if(this.type===3){const l=t.first();return l?Brush.isDark(l.value):!1}if(t.get(.5)!==null)return Brush.isDark(t.get(.5));if(t.count===2){const l=t.toArray();return Brush.isDark(Brush.mix(l[0].value,l[1].value))}const i=t.iterator;let e=-1,s=-1,n=1,o=1;for(;i.next();){const l=i.key,h=Math.abs(.5-i.key);n>o&&h<n?(e=l,n=h):o>=n&&h<o&&(s=l,o=h)}if(e>s){let l=e;e=s,s=l,l=n,n=o,o=l}const r=s-e;return Brush.isDark(Brush.mix(t.get(e),t.get(s),1-o/r))}return!1}static isDark(t){return t?t instanceof Brush?t.isDark():(Brush.Ho(t),(299*Brush.W.n0+587*Brush.W.n1+114*Brush.W.n2)/1e3<128):!1}static Wd(t,i){switch(i){case 1:return Brush.i3(),Brush.xo.n0=Math.min(100,Math.max(0,Brush.xo.n0+100*t)),Brush.e3(),"rgba("+Brush.W.n0+", "+Brush.W.n1+", "+Brush.W.n2+", "+Brush.W.n3+")";case 2:return Brush.f2(),Brush.ji.n2=Math.min(100,Math.max(0,Brush.ji.n2+100*t)),"hsla("+Brush.ji.n0+", "+Brush.ji.n1+"%, "+Brush.ji.n2+"%, "+Brush.ji.n3+")";case 3:return Brush.s3(),Brush.bo.n0=Math.min(100,Math.max(0,Brush.bo.n0+100*t)),Brush.o3(),"rgba("+Brush.W.n0+", "+Brush.W.n1+", "+Brush.W.n2+", "+Brush.W.n3+")";default:U.n("Unknown color space: "+i)}}static Ho(t){Brush.Xp===!1&&(Brush.Xp=!0,Brush.ws=Diagram.isUsingDOM()?new CanvasSurface(null,void 0,{willReadFrequently:!0}).pi:null);const i=Brush.ws;if(i===null)return;i.clearRect(0,0,1,1),i.fillStyle="#000000";const e=i.fillStyle;if(i.fillStyle=t,i.fillStyle!==e){i.fillRect(0,0,1,1);const s=i.getImageData(0,0,1,1).data;Brush.W.n0=s[0],Brush.W.n1=s[1],Brush.W.n2=s[2],Brush.W.n3=s[3]/255}else{i.fillStyle="#FFFFFF";const s=i.fillStyle;i.fillStyle=t,i.fillStyle===s&&Debug&&U.n('Color "'+t+'" is not a valid color string for RGBA color conversion'),Brush.W.n0=0,Brush.W.n1=0,Brush.W.n2=0,Brush.W.n3=1}}static f2(){const t=Brush.W.n0/255,i=Brush.W.n1/255,e=Brush.W.n2/255,s=Math.max(t,i,e),n=Math.min(t,i,e),o=s-n;let r,l;const h=(s+n)/2;if(o===0)r=l=0;else{switch(s){case t:r=(i-e)/o%6;break;case i:r=(e-t)/o+2;break;case e:r=(t-i)/o+4;break;default:r=0;break}r*=60,r<0&&(r+=360),l=o/(1-Math.abs(2*h-1))}Brush.ji.n0=Math.round(r),Brush.ji.n1=Math.round(l*100),Brush.ji.n2=Math.round(h*100),Brush.ji.n3=Brush.W.n3}static pV(){const t=Brush.ji.n0,i=Brush.ji.n1/100,e=Brush.ji.n2/100;let s,n,o;const r=(1-Math.abs(2*e-1))*i,l=t/60,h=r*(1-Math.abs(l%2-1));l>=0&&l<1?(s=r,n=h,o=0):l>=1&&l<2?(s=h,n=r,o=0):l>=2&&l<3?(s=0,n=r,o=h):l>=3&&l<4?(s=0,n=h,o=r):l>=4&&l<5?(s=h,n=0,o=r):(s=r,n=0,o=h);const a=e-.5*r;s+=a,n+=a,o+=a,Brush.W.n0=Math.round(s*255),Brush.W.n1=Math.round(n*255),Brush.W.n2=Math.round(o*255),Brush.W.n3=Brush.ji.n3}static i3(){Brush.GD(),Brush.r3()}static e3(){Brush.l3(),Brush.qD()}static yN(t){return t/=255,t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}static wN(t){return t<=.0031308?t*12.92:1.055*Math.pow(t,1/2.4)-.055}static GD(){const t=Brush.yN(Brush.W.n0),i=Brush.yN(Brush.W.n1),e=Brush.yN(Brush.W.n2);Brush.Bt.n0=.4124564*t+.3575761*i+.1804375*e,Brush.Bt.n1=.2126729*t+.7151522*i+.072175*e,Brush.Bt.n2=.0193339*t+.119192*i+.9503041*e,Brush.Bt.n3=Brush.W.n3}static qD(){const t=3.2404542*Brush.Bt.n0+-1.5371385*Brush.Bt.n1+-.4985314*Brush.Bt.n2,i=-.969266*Brush.Bt.n0+1.8760108*Brush.Bt.n1+.041556*Brush.Bt.n2,e=.0556434*Brush.Bt.n0+-.2040259*Brush.Bt.n1+1.0572252*Brush.Bt.n2;Brush.W.n0=Brush.wN(t)*255,Brush.W.n1=Brush.wN(i)*255,Brush.W.n2=Brush.wN(e)*255,Brush.W.n3=Brush.Bt.n3,Brush.W.n0=Math.round(Brush.W.n0),Brush.W.n0>255?Brush.W.n0=255:Brush.W.n0<0&&(Brush.W.n0=0),Brush.W.n1=Math.round(Brush.W.n1),Brush.W.n1>255?Brush.W.n1=255:Brush.W.n1<0&&(Brush.W.n1=0),Brush.W.n2=Math.round(Brush.W.n2),Brush.W.n2>255?Brush.W.n2=255:Brush.W.n2<0&&(Brush.W.n2=0)}static xN=216/24389;static gS=24389/27;static jd=[95.047,100,108.883];static bN(t){return t>Brush.xN?Math.pow(t,1/3):(Brush.gS*t+16)/116}static r3(){const t=Brush.bN(Brush.Bt.n0*100/Brush.jd[0]),i=Brush.bN(Brush.Bt.n1*100/Brush.jd[1]),e=Brush.bN(Brush.Bt.n2*100/Brush.jd[2]);Brush.xo.n0=116*i-16,Brush.xo.n1=500*(t-i),Brush.xo.n2=200*(i-e),Brush.xo.n3=Brush.Bt.n3}static HD(t){const i=t*t*t;return i>Brush.xN?i:(116*t-16)/Brush.gS}static l3(){const t=(Brush.xo.n0+16)/116,i=Brush.xo.n1/500+t,e=t-Brush.xo.n2/200;Brush.Bt.n0=Brush.jd[0]/100*Brush.HD(i),Brush.Bt.n1=Brush.jd[1]/100*(Brush.xo.n0>Brush.gS*Brush.xN?Math.pow(t,3):Brush.xo.n0/Brush.gS),Brush.Bt.n2=Brush.jd[2]/100*Brush.HD(e),Brush.Bt.n3=Brush.xo.n3}static h3(){let t=.8190224*Brush.Bt.n0+.3619062*Brush.Bt.n1+-.1288737*Brush.Bt.n2,i=.03298366*Brush.Bt.n0+.9292868*Brush.Bt.n1+.03614466*Brush.Bt.n2,e=.04817719*Brush.Bt.n0+.2642395*Brush.Bt.n1+.6335478*Brush.Bt.n2;t=Math.cbrt(t),i=Math.cbrt(i),e=Math.cbrt(e),Brush.bi.n0=.2104542*t+.7936177*i+-.004072046*e,Brush.bi.n1=1.977998*t+-2.428592*i+.4505937*e,Brush.bi.n2=.02590403*t+.7827717*i+-.8086757*e,Brush.bi.n3=Brush.Bt.n3,Brush.bi.n0*=100}static a3(){Brush.bi.n0/=100;let t=.9999999*Brush.bi.n0+.3963377*Brush.bi.n1+.2158037*Brush.bi.n2,i=1.000000009*Brush.bi.n0+-.1055613*Brush.bi.n1+-.06385417*Brush.bi.n2,e=1.00000005*Brush.bi.n0+-.08948418*Brush.bi.n1+-1.291485*Brush.bi.n2;t=t**3,i=i**3,e=e**3,Brush.Bt.n0=1.2268798*t+-.5578149*i+.281391*e,Brush.Bt.n1=-.04057576*t+1.112286*i+-.07171106*e,Brush.Bt.n2=-.07637294*t+-.4214933*i+1.586924*e,Brush.Bt.n3=Brush.bi.n3}static c3(){const t=Math.atan2(Brush.bi.n2,Brush.bi.n1)*180/Math.PI;Brush.bo.n0=Brush.bi.n0,Brush.bo.n1=Math.sqrt(Brush.bi.n1**2+Brush.bi.n2**2),Brush.bo.n2=t>=0?t:t+360,Brush.bo.n3=Brush.bi.n3}static f3(){Brush.bi.n0=Brush.bo.n0,Brush.bi.n1=Brush.bo.n1*Math.cos(Brush.bo.n2*Math.PI/180),Brush.bi.n2=Brush.bo.n1*Math.sin(Brush.bo.n2*Math.PI/180),Brush.bi.n3=Brush.bo.n3}static s3(){Brush.GD(),Brush.h3(),Brush.c3()}static o3(){Brush.f3(),Brush.a3(),Brush.qD()}static qd(t,i){typeof t=="string"?Debug&&!Brush.isValidColor(t)&&U.n('Color "'+t+'" is not a valid color string for '+i):t instanceof Brush||U.n("Value for "+i+" must be a color string or a Brush, not "+t)}static Solid=1;static Linear=2;static Radial=3;static Pattern=4;static Lab=1;static HSL=2;static ws=null;static Xp=!1;static W=new ColorNumbers;static ji=new ColorNumbers;static Bt=new ColorNumbers;static xo=new ColorNumbers;static bi=new ColorNumbers;static bo=new ColorNumbers}class PanelLayout{Nt="Base";static rs=new GMap;static Yn(t,i){i.name=t,PanelLayout.rs.set(t,i)}get name(){return this.Nt}set name(t){this.Nt=t}constructor(){}measure(t,i,e,s,n,o,r){}measureElement(t,i,e,s,n){t.yt(i,e,s,n)}arrange(t,i,e){}arrangeElement(t,i,e,s,n,o){t.Ht(i,e,s,n,o)}remeasureObject(t){t.Vf()}$i(t,i,e){}}class PanelLayoutPosition extends PanelLayout{constructor(){super()}measure(t,i,e,s,n,o,r){const l=s.length,h=t.nr();for(let a=0;a<l;a++){const c=s[a];if(!c.visible&&c!==h)continue;const f=c.margin,u=f.right+f.left,d=f.top+f.bottom;c.yt(i,e,o,r);const m=c.measuredBounds,g=Math.max(m.width+u,0),p=Math.max(m.height+d,0);let y=c.position.x,x=c.position.y;if(isFinite(y)||(y=0),isFinite(x)||(x=0),c instanceof Shape&&c.isGeometryPositioned){const b=c.strokeWidth/2;y-=b,x-=b}n.ui(y,x,g,p)}}arrange(t,i,e){const s=i.length,n=t.padding,o=e.x-n.left,r=e.y-n.top;for(let l=0;l<s;l++){const h=i[l],a=h.measuredBounds,c=h.margin,f=h.position.x,u=h.position.y;let d=isNaN(f)?-o:f-o,m=isNaN(u)?-r:u-r;if(h instanceof Shape&&h.isGeometryPositioned){const g=h.strokeWidth/2;d-=g,m-=g}h.visible&&h.Ht(d+c.left,m+c.top,a.width,a.height)}}}PanelLayout.Yn("Position",new PanelLayoutPosition);class PanelLayoutHorizontal extends PanelLayout{constructor(){super()}measure(t,i,e,s,n,o,r){const l=s.length,h=U.ct(),a=t.nr();for(let f=0;f<l;f++){const u=s[f];if(!u.visible&&u!==a)continue;const d=u.ln(!1);if(d!==0&&d!==5){h.push(u);continue}u.yt(1/0,e,0,r);const m=u.margin,g=u.measuredBounds,p=Math.max(g.width+m.right+m.left,0),y=Math.max(g.height+m.top+m.bottom,0);n.io(n.width+p,Math.max(n.height,y))}const c=h.length;t.desiredSize.height?e=Math.min(t.desiredSize.height,t.maxSize.height):n.height!==0&&(e=Math.min(n.height,t.maxSize.height));for(let f=0;f<c;f++){const u=h[f];if(!u.visible&&u!==a)continue;const d=u.margin,m=d.right+d.left,g=d.top+d.bottom;u.yt(1/0,e,0,r);const p=u.measuredBounds,y=Math.max(p.width+m,0),x=Math.max(p.height+g,0);n.width+=y,n.height=Math.max(n.height,x)}U.nt(h)}arrange(t,i,e){const s=i.length,n=t.padding,o=n.top,r=t.isOpposite;let l=r?e.width:n.left;for(let h=0;h<s;h++){const a=o,c=i[h];if(!c.visible)continue;const f=c.measuredBounds,u=c.margin,d=u.top+u.bottom,m=o+n.bottom;let g=f.height;const p=c.ln(!1);(isNaN(c.desiredSize.height)&&p===2||p===4)&&(g=Math.max(e.height-d-m,0));const y=g+d+m;let x=c.alignment;x.isDefault()&&(x=t.defaultAlignment),x.isSpot()||(x=Spot.Center),r&&(l-=f.width+u.left+u.right),c.Ht(l+x.offsetX+u.left,a+x.offsetY+u.top+(e.height*x.y-y*x.y),f.width,g),r||(l+=f.width+u.left+u.right)}}}PanelLayout.Yn("Horizontal",new PanelLayoutHorizontal);class PanelLayoutVertical extends PanelLayout{constructor(){super()}measure(t,i,e,s,n,o,r){const l=s.length,h=U.ct(),a=t.nr();for(let f=0;f<l;f++){const u=s[f];if(!u.visible&&u!==a)continue;const d=u.ln(!1);if(d!==0&&d!==4){h.push(u);continue}u.yt(i,1/0,o,0);const m=u.margin,g=u.measuredBounds,p=Math.max(g.width+m.right+m.left,0),y=Math.max(g.height+m.top+m.bottom,0);n.io(Math.max(n.width,p),n.height+y)}const c=h.length;t.desiredSize.width?i=Math.min(t.desiredSize.width,t.maxSize.width):n.width!==0&&(i=Math.min(n.width,t.maxSize.width));for(let f=0;f<c;f++){const u=h[f];if(!u.visible&&u!==a)continue;const d=u.margin,m=d.right+d.left,g=d.top+d.bottom;u.yt(i,1/0,o,0);const p=u.measuredBounds,y=Math.max(p.width+m,0),x=Math.max(p.height+g,0);n.width=Math.max(n.width,y),n.height+=x}U.nt(h)}arrange(t,i,e){const s=i.length,n=t.padding,o=n.left,r=t.isOpposite;let l=r?e.height:n.top;for(let h=0;h<s;h++){const a=o,c=i[h];if(!c.visible)continue;const f=c.measuredBounds,u=c.margin,d=u.left+u.right,m=o+n.right;let g=f.width;const p=c.ln(!1);(isNaN(c.desiredSize.width)&&p===2||p===5)&&(g=Math.max(e.width-d-m,0));const y=g+d+m;let x=c.alignment;x.isDefault()&&(x=t.defaultAlignment),x.isSpot()||(x=Spot.Center),r&&(l-=f.height+u.bottom+u.top),c.Ht(a+x.offsetX+u.left+(e.width*x.x-y*x.x),l+x.offsetY+u.top,g,f.height),r||(l+=f.height+u.bottom+u.top)}}}PanelLayout.Yn("Vertical",new PanelLayoutVertical);class PanelLayoutSpot extends PanelLayout{constructor(){super()}static vD=!1;measure(t,i,e,s,n,o,r){const l=s.length;if(l===0)return;const h=t.findMainElement();let a=h.margin,c=0,f=0;const u=a.right+a.left,d=a.top+a.bottom;h.yt(i,e,o,r);let m=h.measuredBounds,g=m.width,p=m.height,y=Math.max(g+u,0),x=Math.max(p+d,0);const b=t.isClipping;b&&h.lp()!==0&&!PanelLayoutSpot.vD&&(PanelLayoutSpot.vD=!0,U.et("Main Shape for Spot Panel with isClipping = true must have a zero strokeWidth: "+t.toString()));const S=Rect.V(-a.left,-a.top,y,x);let k=Rect.V(0,0,g,p);this.SN(h,k,!0),g=k.width,p=k.height;let P=!0;const A=t.nr();let N;for(let M=0;M<l;M++){const C=s[M];let T=i,L=e;if(C===h||!C.visible&&C!==A)continue;a=C.margin;let D=a.left,F=a.top;switch(c=a.right+a.left,f=a.top+a.bottom,N=C.ln(!1),N){case 2:T=g,L=p,c=0,f=0,D=0,F=0;break;case 5:T=g,c=0,D=0;break;case 4:L=p,f=0,F=0;break}C.yt(T,L,0,0),m=C.measuredBounds,y=Math.max(m.width+c,0),x=Math.max(m.height+f,0);let R=C.alignment;R.isDefault()&&(R=t.defaultAlignment),R.isSpot()||(R=Spot.Center);let I=C.alignmentFocus;I.isDefault()&&(I=Spot.Center);let O=null;C instanceof Panel&&C.So!==""&&(O=C.findObject(C.So),O===C&&(O=null));let X=k.x-D,Y=k.y-F;if(O!==null){C.Ht(0,0,m.width,m.height);const B=O.actualBounds,K=Point.V(B.x+(I.x*B.width-I.offsetX),B.y+(I.y*B.height-I.offsetY));for(O=O.panel;O!==null&&O!==C;)O.D.Pt(K),O=O.panel;X+=R.x*g+R.offsetX-K.x,Y+=R.y*p+R.offsetY-K.y,Point.o(K)}else X+=R.x*g+R.offsetX-(I.x*m.width+I.offsetX),Y+=R.y*p+R.offsetY-(I.y*m.height+I.offsetY);P?(P=!1,n.e(X,Y,y,x)):n.ui(X,Y,y,x)}switch(P?n.f(S):b?n.intersect(k.x,k.y,k.width,k.height):n.ui(S.x,S.y,S.width,S.height),Rect.o(S),Rect.o(k),N=h.stretch,N===1&&(N=h.ln(!1)),N){case 0:return;case 2:if(!isFinite(i)&&!isFinite(e))return;break;case 5:if(!isFinite(i))return;break;case 4:if(!isFinite(e))return;break}m=h.measuredBounds,g=m.width,p=m.height,y=Math.max(g+u,0),x=Math.max(p+d,0),a=h.margin,k=Rect.V(-a.left,-a.top,y,x),this.SN(h,k,!0),g=k.width,p=k.height;for(let M=0;M<l;M++){const C=s[M];if(C===h||!C.visible&&C!==A)continue;a=C.margin,c=a.right+a.left,f=a.top+a.bottom,m=C.measuredBounds,y=Math.max(m.width+c,0),x=Math.max(m.height+f,0);let T=C.alignment;T.isDefault()&&(T=t.defaultAlignment),T.isSpot()||(T=Spot.Center);let L=C.alignmentFocus;L.isDefault()&&(L=Spot.Center),P?(P=!1,n.e(T.x*g+T.offsetX-(L.x*m.width+L.offsetX)-a.left,T.y*p+T.offsetY-(L.y*m.height+L.offsetY)-a.top,y,x)):n.ui(T.x*g+T.offsetX-(L.x*m.width+L.offsetX)-a.left,T.y*p+T.offsetY-(L.y*m.height+L.offsetY)-a.top,y,x)}P?n.f(S):b?n.intersect(k.x,k.y,k.width,k.height):n.ui(S.x,S.y,S.width,S.height),Rect.o(k)}arrange(t,i,e){const s=i.length;if(s===0)return;const n=t.findMainElement(),o=n.measuredBounds,r=o.width,l=o.height,h=t.padding,a=h.left,c=h.top;let f=a-e.x,u=c-e.y;n.Ht(f,u,r,l);const d=Rect.V(0,0,r,l);this.SN(n,d,!1);for(let m=0;m<s;m++){const g=i[m];if(g===n)continue;const p=g.measuredBounds,y=p.width,x=p.height;let b=g.alignment;b.isDefault()&&(b=t.defaultAlignment),b.isSpot()||(b=Spot.Center);let S=g.alignmentFocus;S.isDefault()&&(S=Spot.Center);let k=null;if(g instanceof Panel&&g.So!==""&&(k=g.findObject(g.So),k===g&&(k=null)),k!==null){const P=k.actualBounds,A=Point.V(P.x+(S.x*P.width-S.offsetX),P.y+(S.y*P.height-S.offsetY));for(k=k.panel;k!==null&&k!==g;)k.D.Pt(A),k=k.panel;f=b.x*d.width+b.offsetX-A.x,u=b.y*d.height+b.offsetY-A.y,Point.o(A)}else f=b.x*d.width+b.offsetX-(S.x*y+S.offsetX),u=b.y*d.height+b.offsetY-(S.y*x+S.offsetY);f+=d.x-e.x,u+=d.y-e.y,g.visible&&g.Ht(a+f,c+u,y,x)}Rect.o(d)}SN(t,i,e){let s=null;if(t instanceof Panel&&t.So!==""&&(s=t.findObject(t.So),s===t&&(s=null)),s!==null)for(e&&t.Ht(0,0,i.width,i.height),i.f(s.actualBounds),s=s.panel;s!==null&&s!==t;)s.D.km(i),s=s.panel}}PanelLayout.Yn("Spot",new PanelLayoutSpot);class PanelLayoutAuto extends PanelLayout{constructor(){super()}measure(t,i,e,s,n,o,r){const l=s.length;if(l===0)return;const h=t.findMainElement();let a=h.margin,c=i,f=e;const u=a.right+a.left,d=a.top+a.bottom;h.yt(i,e,o,r);let m=h.measuredBounds,g=0,p=null;h instanceof Shape&&(p=h,g=p.strokeWidth*p.scale);let y=Math.max(m.width+u,0),x=Math.max(m.height+d,0),b=t.kN(h);const S=b.x*y+b.offsetX,k=b.y*x+b.offsetY;let P=t.PN(h);const A=P.x*y+P.offsetX,N=P.y*x+P.offsetY;isFinite(i)&&(c=Math.max(Math.abs(S-A)-g,0)),isFinite(e)&&(f=Math.max(Math.abs(k-N)-g,0));let M=0,C=0;o>0&&(M=Math.max(Math.abs(b.x*o+b.offsetX-(P.x*o+P.offsetX))-g,0)),r>0&&(C=Math.max(Math.abs(b.y*r+b.offsetY-(P.y*r+P.offsetY))-g,0));const T=Size.a();T.e(0,0);const L=t.nr();for(let I=0;I<l;I++){const O=s[I];if(O===h||!O.visible&&O!==L)continue;a=O.margin;const X=a.right+a.left,Y=a.top+a.bottom;O.yt(c,f,M,C),m=O.measuredBounds,y=Math.max(m.width+X,0),x=Math.max(m.height+Y,0),T.e(Math.max(y,T.width),Math.max(x,T.height))}if(l===1){m=h.measuredBounds,n.width=y,n.height=x,Size.o(T);return}b=t.kN(h),P=t.PN(h);let D=0,F=0;P.x!==b.x&&P.y!==b.y&&(D=T.width/Math.abs(P.x-b.x),F=T.height/Math.abs(P.y-b.y)),Size.o(T),g=0,p!==null&&(g=p.strokeWidth*p.scale,p.yM()===6&&(D=F=Math.max(D,F))),D+=Math.abs(b.offsetX)+Math.abs(P.offsetX)+g,F+=Math.abs(b.offsetY)+Math.abs(P.offsetY)+g;let R=h.stretch;switch(R===1&&(R=h.ln(!1)),R){case 0:o=0,r=0;break;case 2:isFinite(i)&&(D=i),isFinite(e)&&(F=e);break;case 5:isFinite(i)&&(D=i),r=0;break;case 4:o=0,isFinite(e)&&(F=e);break}h.Vf(),h.yt(D,F,o,r),n.width=h.measuredBounds.width+u,n.height=h.measuredBounds.height+d}arrange(t,i,e){const s=i.length;if(s===0)return;const n=t.findMainElement(),o=n.measuredBounds,r=Rect.a();r.e(0,0,1,1);let l=n.margin;const h=l.left,a=l.top,c=t.padding,f=c.left,u=c.top;let d=h,m=a,g=o.width,p=o.height;n.Ht(f+d,u+m,g,p);const y=t.kN(n),x=t.PN(n),b=0+y.x*o.width+y.offsetX,S=0+y.y*o.height+y.offsetY,k=0+x.x*o.width+x.offsetX,P=0+x.y*o.height+x.offsetY;r.x=b,r.y=S,r.ui(k,P,0,0),r.x+=h+f,r.y+=a+u;for(let A=0;A<s;A++){const N=i[A];if(N===n)continue;const M=N.measuredBounds;l=N.margin;const C=Math.max(M.width+l.right+l.left,0),T=Math.max(M.height+l.top+l.bottom,0);let L=N.alignment;L.isDefault()&&(L=t.defaultAlignment),L.isSpot()||(L=Spot.Center),d=r.width*L.x+L.offsetX-C*L.x+l.left+r.x,m=r.height*L.y+L.offsetY-T*L.y+l.top+r.y,g=r.width,p=r.height,N.visible&&(Rect.contains(r.x,r.y,r.width,r.height,d,m,M.width,M.height)?N.Ht(d,m,M.width,M.height):N.Ht(d,m,M.width,M.height,new Rect(r.x,r.y,r.width,r.height)))}Rect.o(r)}}PanelLayout.Yn("Auto",new PanelLayoutAuto);class PanelLayoutTable extends PanelLayout{constructor(){super(),this.name="Table"}measure(t,i,e,s,n,o,r){let l=s.length;const h=U.ct(),a=U.ct();for(let V=0;V<l;V++){const E=s[V],W=E instanceof Panel?E:null;if(W!==null&&W.bl()&&E.visible){Debug&&(W.desiredSize.isReal()&&U.n(W.toString()+" TableRow/TableColumn Panels cannot set a desiredSize: "+W.desiredSize.toString()),W.minSize.equals(Size.ua)||U.n(W.toString()+" TableRow/TableColumn Panels cannot set a minSize: "+W.minSize.toString()),W.maxSize.equals(Size.yx)||U.n(W.toString()+" TableRow/TableColumn Panels cannot set a maxSize: "+W.maxSize.toString())),a.push(W);const Z=W.E.h,ot=Z.length;for(let it=0;it<ot;it++){const et=Z[it];W.type===Panel.TableRow?et.row=E.row:W.type===Panel.TableColumn&&(et.column=E.column),h.push(et)}}else h.push(E)}l=h.length,l===0&&(t.getRowDefinition(0),t.getColumnDefinition(0));const c=[];for(let V=0;V<l;V++){const E=h[V];E.visible&&(E.Ce(!0),E.yo(!0),c[E.row]||(c[E.row]=[]),c[E.row][E.column]||(c[E.row][E.column]=[]),c[E.row][E.column].push(E))}U.nt(h);const f=U.ct(),u=U.ct(),d=U.ct(),m={count:0},g={count:0};let p=i,y=e;const x=t.Ge,b=t.qe;let S;l=x.length;for(let V=0;V<l;V++)S=x[V],S!==void 0&&(S.actual=0,S.Mi=0);l=b.length;for(let V=0;V<l;V++)S=b[V],S!==void 0&&(S.actual=0,S.Mi=0);let k=c.length,P=0;for(let V=0;V<k;V++)c[V]&&(P=Math.max(P,c[V].length));const A=Math.min(t.topIndex,k-1),N=Math.min(t.leftIndex,P-1);let M=0,C;k=c.length;const T=t.nr();for(let V=0;V<k;V++){if(!c[V])continue;P=c[V].length;const E=t.getRowDefinition(V);E.actual=0,E.Mi=0;for(let W=0;W<P;W++){if(!c[V][W])continue;const Z=t.getColumnDefinition(W);f[W]===void 0&&(Z.actual=0,Z.Mi=0,f[W]=!0);const ot=c[V][W],it=ot.length;for(let et=0;et<it;et++){const nt=ot[et];if(!nt.visible&&nt!==T)continue;const dt=nt.rowSpan>1,at=nt.columnSpan>1;(dt||at)&&!(V<A)&&!(W<N)&&u.push(nt);const ct=nt.margin,rt=ct.right+ct.left,ht=ct.top+ct.bottom;C=nt.gp(E,Z,!1);const ft=nt.desiredSize,_=!isNaN(ft.width),st=!isNaN(ft.height);if(C!==0&&!(_&&st)&&!(V<A)&&!(W<N)&&(!at&&m[W]===void 0&&(C===2||C===5)&&(m[W]=-1,m.count++),!dt&&g[V]===void 0&&(C===2||C===4)&&(g[V]=-1,g.count++),!dt&&!at&&d.push(nt)),nt.yt(1/0,1/0,0,0),V<A||W<N)continue;const ut=nt.measuredBounds,gt=Math.max(ut.width+rt,0),mt=Math.max(ut.height+ht,0);if(nt.rowSpan===1&&(C===0||C===5)){S=t.getRowDefinition(V);const pt=S.computeEffectiveSpacing(),yt=S.Z===0;M=Math.max(mt-S.actual,0),M+(yt?pt:0)>y&&(M=Math.max(y-pt,0)),S.Mi=S.Mi+M,S.actual=S.Z+M,y=Math.max(y-(M+(yt?pt:0)),0)}if(nt.columnSpan===1&&(C===0||C===4)){S=t.getColumnDefinition(W);const pt=S.computeEffectiveSpacing(),yt=S.Z===0;M=Math.max(gt-S.actual,0),M+(yt?pt:0)>p&&(M=Math.max(p-pt,0)),S.Mi=S.Mi+M,S.actual=S.Z+M,p=Math.max(p-(M+(yt?pt:0)),0)}(dt||at)&&nt.Vf()}}}U.nt(f);let L=0,D=0;l=t.columnCount;for(let V=0;V<l;V++){const E=b[V];E!==void 0&&(L+=isNaN(E.Ae)?E.Mi:E.Ae,E.Mi!==0&&(L+=E.computeEffectiveSpacing()))}l=t.rowCount;for(let V=0;V<l;V++){const E=x[V];E!==void 0&&(D+=isNaN(E.Ae)?E.Mi:E.Ae,E.Mi!==0&&(D+=E.computeEffectiveSpacing()))}p=Math.max(i-L,0),y=Math.max(e-D,0);let F=y,R=p;l=d.length;for(let V=0;V<l;V++){const E=d[V],W=t.getRowDefinition(E.row),Z=t.getColumnDefinition(E.column),ot=E.measuredBounds,it=E.margin,et=it.right+it.left,nt=it.top+it.bottom;Z.Mi===0&&m[E.column]!==void 0?m[E.column]=Math.max(ot.width+et,m[E.column]):m[E.column]=null,W.Mi===0&&g[E.row]!==void 0?g[E.row]=Math.max(ot.height+nt,g[E.row]):g[E.row]=null}let I=0,O=0,X;for(X in g)X!=="count"&&(I+=g[X]);for(X in m)X!=="count"&&(O+=m[X]);const Y=Size.a();for(let V=0;V<l;V++){const E=d[V];if(!E.visible&&E!==T)continue;const W=t.getRowDefinition(E.row),Z=t.getColumnDefinition(E.column);let ot=0;isFinite(Z.width)?ot=Z.width:(isFinite(p)&&m[E.column]!==null?O===0?ot=Z.actual+p:ot=m[E.column]/O*R:m[E.column]!==null?ot=p:ot=Z.actual||p,ot=Math.max(0,ot-Z.computeEffectiveSpacing()));let it=0;switch(isFinite(W.height)?it=W.height:(isFinite(y)&&g[E.row]!==null?I===0?it=W.actual+y:it=g[E.row]/I*F:g[E.row]!==null?it=y:it=W.actual||y,it=Math.max(0,it-W.computeEffectiveSpacing())),Y.e(Math.max(Z.minimum,Math.min(ot,Z.maximum)),Math.max(W.minimum,Math.min(it,W.maximum))),C=E.gp(W,Z,!1),C){case 5:Y.height=Math.max(Y.height,W.actual+y);break;case 4:Y.width=Math.max(Y.width,Z.actual+p);break}const et=E.margin,nt=et.right+et.left,dt=et.top+et.bottom;E.Vf();let at=Z.minimum,ct=W.minimum;const rt=E.measuredBounds;rt.width===0&&m[E.column]!==null&&(at=Math.max(at,m[E.column])),rt.height===0&&g[E.row]!==null&&(ct=Math.max(at,g[E.row])),E.yt(Y.width,Y.height,at,ct);const ht=E.measuredBounds;let ft=Math.max(ht.width+nt,0),_=Math.max(ht.height+dt,0);isFinite(p)&&(ft=Math.min(ft,Y.width)),isFinite(y)&&(_=Math.min(_,Y.height));let st=0;st=W.actual,W.actual=Math.max(W.actual,_),W.Mi=Math.max(W.Mi,_),M=W.actual-st,y=Math.max(y-M,0),g[E.row]===null&&(F=Math.max(F-M,0)),st=Z.actual,Z.actual=Math.max(Z.actual,ft),Z.Mi=Math.max(Z.Mi,ft),M=Z.actual-st,p=Math.max(p-M,0),m[E.column]===null&&(R=Math.max(R-M,0))}U.nt(d);const B=Size.a(),K=U.ct(),z=U.ct();if(l=u.length,l!==0)for(let V=0;V<k;V++){if(!c[V])continue;P=c[V].length;const E=t.getRowDefinition(V);K[V]=E.actual;for(let W=0;W<P;W++){if(!c[V][W])continue;const Z=t.getColumnDefinition(W);z[W]=Z.actual}}for(let V=0;V<l;V++){const E=u[V];if(!E.visible&&E!==T)continue;const W=t.getRowDefinition(E.row),Z=t.getColumnDefinition(E.column);switch(Y.e(Math.max(Z.minimum,Math.min(i,Z.maximum)),Math.max(W.minimum,Math.min(e,W.maximum))),C=E.gp(W,Z,!1),C){case 2:z[Z.index]!==0&&(Y.width=Math.min(Y.width,z[Z.index])),K[W.index]!==0&&(Y.height=Math.min(Y.height,K[W.index]));break;case 5:z[Z.index]!==0&&(Y.width=Math.min(Y.width,z[Z.index]));break;case 4:K[W.index]!==0&&(Y.height=Math.min(Y.height,K[W.index]));break}if(C===2||C===4){let _=0;for(let st=0;st<t.rowCount;st++){if(st>=E.row&&st<E.row+E.rowSpan)continue;const lt=t.Ge[st];lt!==void 0&&(_+=K[st]||0,lt.Mi!==0&&(_+=lt.computeEffectiveSpacing()))}Y.height=Math.max(Y.height-_,0)}if(C===2||C===5){let _=0;for(let st=0;st<t.columnCount;st++){if(st>=E.column&&st<E.column+E.columnSpan)continue;const lt=t.qe[st];lt!==void 0&&(_+=z[st]||0,lt.Mi!==0&&(_+=lt.computeEffectiveSpacing()))}Y.width=Math.max(Y.width-_,0)}isFinite(Z.width)&&(Y.width=Z.width),isFinite(W.height)&&(Y.height=W.height),B.e(0,0);let ot=Z.minimum,it=W.minimum;for(let _=1;_<E.rowSpan&&!(E.row+_>=t.rowCount);_++){if(S=t.getRowDefinition(E.row+_),M=0,C===2||C===4){if(S.Z===0)continue;M=Math.max(S.minimum,S.Z===0?S.maximum:Math.min(S.Z,S.maximum))}else M=Math.max(S.minimum,isNaN(S.Ae)?S.maximum:Math.min(S.Ae,S.maximum));B.height+=M,it+=S.minimum}for(let _=1;_<E.columnSpan&&!(E.column+_>=t.columnCount);_++){if(S=t.getColumnDefinition(E.column+_),M=0,C===2||C===5){if(S.Z===0)continue;M=Math.max(S.minimum,S.Z===0?S.maximum:Math.min(S.Z,S.maximum))}else M=Math.max(S.minimum,isNaN(S.Ae)?S.maximum:Math.min(S.Ae,S.maximum));B.width+=M,ot+=S.minimum}Y.width+=B.width,Y.height+=B.height;const et=E.margin,nt=et.right+et.left,dt=et.top+et.bottom;E.yt(Y.width,Y.height,ot,it);const at=E.measuredBounds,ct=Math.max(at.width+nt,0),rt=Math.max(at.height+dt,0);let ht=0;for(let _=0;_<E.rowSpan&&!(E.row+_>=t.rowCount);_++)S=t.getRowDefinition(E.row+_),ht+=S.total||0;if(ht<rt){let _=rt-ht;const st=rt-ht;if(E.spanAllocation!==null){const lt=E.spanAllocation;for(let ut=0;ut<E.rowSpan&&!(_<=0||E.row+ut>=t.rowCount);ut++){S=t.getRowDefinition(E.row+ut);const gt=S.Z||0,mt=lt(E,S,st);Debug&&typeof mt!="number"&&U.n(E+" spanAllocation does not return a number: "+mt),S.actual=Math.min(S.maximum,gt+mt),S.Z!==gt&&(_-=S.Z-gt)}}for(;_>0&&S!==void 0;){const lt=S.Z||0;if(isNaN(S.height)&&S.maximum>lt&&(S.actual=Math.min(S.maximum,lt+_),S.Z!==lt&&(_-=S.Z-lt)),S.index===0)break;S=t.getRowDefinition(S.index-1)}}let ft=0;for(let _=0;_<E.columnSpan&&!(E.column+_>=t.columnCount);_++)S=t.getColumnDefinition(E.column+_),ft+=S.total||0;if(ft<ct){let _=ct-ft;const st=ct-ft;if(E.spanAllocation!==null){const lt=E.spanAllocation;for(let ut=0;ut<E.columnSpan&&!(_<=0||E.column+ut>=t.columnCount);ut++){S=t.getColumnDefinition(E.column+ut);const gt=S.Z||0,mt=lt(E,S,st);Debug&&typeof mt!="number"&&U.n(E+" spanAllocation does not return a number: "+mt),S.actual=Math.min(S.maximum,gt+mt),S.Z!==gt&&(_-=S.Z-gt)}}for(;_>0&&S!==void 0;){const lt=S.Z||0;if(isNaN(S.width)&&S.maximum>lt&&(S.actual=Math.min(S.maximum,lt+_),S.Z!==lt&&(_-=S.Z-lt)),S.index===0)break;S=t.getColumnDefinition(S.index-1)}}}U.nt(u),Size.o(B),Size.o(Y),K!==void 0&&U.nt(K),z!==void 0&&U.nt(z);let H=0,v=0;const j=t.desiredSize,$=t.maxSize;C=t.ln(!0),L=0,D=0;let q=0,Q=0;l=t.columnCount;for(let V=0;V<l;V++)if(b[V]!==void 0){if(S=t.getColumnDefinition(V),isFinite(S.width)){q+=S.width,q+=S.computeEffectiveSpacing();continue}else if(S.mS()===2){q+=S.Z,q+=S.computeEffectiveSpacing();continue}S.Z!==0&&(L+=S.Z,L+=S.computeEffectiveSpacing())}isFinite(j.width)?H=Math.min(j.width,$.width):C!==0&&isFinite(i)?H=i:H=L,H=Math.max(H,isFinite(i)?Math.min(o,i):o),H=Math.max(H-q,0);const J=L===0?1:Math.max(H/L,1);for(let V=0;V<l;V++)b[V]!==void 0&&(S=t.getColumnDefinition(V),!isFinite(S.width)&&S.mS()!==2&&(S.actual=S.Z*J),S.position=n.width,S.Z!==0&&(n.width+=S.Z,n.width+=S.computeEffectiveSpacing()));l=t.rowCount;for(let V=0;V<l;V++)if(x[V]!==void 0){if(S=t.getRowDefinition(V),isFinite(S.height)){Q+=S.height,Q+=S.computeEffectiveSpacing();continue}else if(S.mS()===2){Q+=S.Z,Q+=S.computeEffectiveSpacing();continue}S.Z!==0&&(D+=S.Z,D+=S.computeEffectiveSpacing())}isFinite(j.height)?v=Math.min(j.height,$.height):C!==0&&isFinite(e)?v=e:v=D,v=Math.max(v,isFinite(e)?Math.min(r,e):r),v=Math.max(v-Q,0);const tt=D===0?1:Math.max(v/D,1);for(let V=0;V<l;V++)x[V]!==void 0&&(S=t.getRowDefinition(V),!isFinite(S.height)&&S.mS()!==2&&(S.actual=S.Z*tt),S.position=n.height,S.Z!==0&&(n.height+=S.Z,n.height+=S.computeEffectiveSpacing()));l=a.length;for(let V=0;V<l;V++){const E=a[V];let W=0,Z=0;E.type===Panel.TableRow?(W=n.width,S=t.getRowDefinition(E.row),Z=S.actual):(S=t.getColumnDefinition(E.column),W=S.actual,Z=n.height),E.measuredBounds.e(0,0,W,Z),E.Ce(!1)}U.nt(a),t.Gh=c}arrange(t,i,e){const s=i.length,n=t.padding,o=n.left,r=n.top,l=t.Gh;if(l===null)return;let h=0,a=0;const c=l.length;let f=0;for(let N=0;N<c;N++)l[N]&&(f=Math.max(f,l[N].length));const u=t.Ge,d=t.qe;let m=0,g=0,p=Math.min(t.topIndex,c-1);if(u.length>0){for(;p!==c&&(u[p]===void 0||u[p].Z===0);)p++;p=Math.max(Math.min(p,c-1),0),m=-u[p].position}let y=Math.min(t.leftIndex,f-1);if(d.length>0){for(;y!==f&&(d[y]===void 0||d[y].Z===0);)y++;y=Math.max(Math.min(y,f-1),0),g=-d[y].position}let x=0,b=0;for(;x!==c&&u[x]===void 0;)x++;for(;b!==c&&d[b]===void 0;)b++;const S=t.part;let k=t.getRowDefinition(x),P=t.getColumnDefinition(b);for(let N=0;N<i.length;N++){const M=i[N];if(!(M instanceof Panel&&M.visible&&M.bl()))continue;M.type===Panel.TableRow?(k=t.getRowDefinition(M.row),P=t.getColumnDefinition(b)):(k=t.getRowDefinition(x),P=t.getColumnDefinition(M.column)),a=k.position+m+r,k.Z!==0&&(a+=k.computeEffectiveSpacingTop(Math.max(x,p))),h=P.position+g+o,P.Z!==0&&(h+=P.computeEffectiveSpacingTop(Math.max(b,y)));const C=M.measuredBounds;M.If(),M.actualBounds.si();const T=M.actualBounds,L=Rect.V(T.x,T.y,T.width,T.height);if(T.x=M.type===Panel.TableRow?o:h,T.y=M.type===Panel.TableColumn?r:a,T.width=C.width,T.height=C.height,M.actualBounds.S(),M.yo(!1),L.equalsApproxClose(T)){Rect.o(L);continue}S!==null&&(S.zh(),M.ap(S)),Rect.o(L)}const A=Size.a();for(let N=0;N<c;N++){if(!l[N])continue;f=l[N].length;const M=t.getRowDefinition(N);a=M.position+m+r,M.Z!==0&&(a+=M.computeEffectiveSpacingTop(Math.max(x,p)));for(let C=0;C<f;C++){if(!l[N][C])continue;const T=t.getColumnDefinition(C);h=T.position+g+o,T.Z!==0&&(h+=T.computeEffectiveSpacingTop(Math.max(b,y)));const L=l[N][C],D=L.length;for(let F=0;F<D;F++){const R=L[F],I=R.measuredBounds;A.e(0,0);for(let rt=1;rt<R.rowSpan&&!(N+rt>=t.rowCount);rt++){const ht=t.getRowDefinition(N+rt);ht.Z!==0&&(A.height+=ht.total)}for(let rt=1;rt<R.columnSpan&&!(C+rt>=t.columnCount);rt++){const ht=t.getColumnDefinition(C+rt);ht.Z!==0&&(A.width+=ht.total)}const O=T.Z+A.width,X=M.Z+A.height;let Y=h,B=a;const K=O,z=X,H=h,v=a;let j=O,$=X;h+O>e.width&&(j=Math.max(e.width-h,0)),a+X>e.height&&($=Math.max(e.height-a,0));let q=R.alignment,Q=0,J=0,tt=0,V=0;if(q.isDefault()){q=t.defaultAlignment,q.isSpot()||(q=Spot.Center),Q=q.x,J=q.y,tt=q.offsetX,V=q.offsetY;const rt=T.alignment,ht=M.alignment;rt.isSpot()&&(Q=rt.x,tt=rt.offsetX),ht.isSpot()&&(J=ht.y,V=ht.offsetY)}else Q=q.x,J=q.y,tt=q.offsetX,V=q.offsetY;(isNaN(Q)||isNaN(J))&&(Q=.5,J=.5,tt=0,V=0);let E=I.width,W=I.height;const Z=R.margin,ot=Z.left+Z.right,it=Z.top+Z.bottom,et=R.gp(M,T,!1);isNaN(R.desiredSize.width)&&(et===2||et===5)&&(E=Math.max(O-ot,0)),isNaN(R.desiredSize.height)&&(et===2||et===4)&&(W=Math.max(X-it,0));const nt=R.maxSize,dt=R.minSize;E=Math.min(nt.width,E),W=Math.min(nt.height,W),E=Math.max(dt.width,E),W=Math.max(dt.height,W);const at=E+ot,ct=W+it;Y+=K*Q-at*Q+tt+Z.left,B+=z*J-ct*J+V+Z.top,R.visible&&(Rect.contains(H,v,j,$,Y,B,I.width,I.height)?R.Ht(Y,B,E,W):R.Ht(Y,B,E,W,new Rect(H,v,j,$)))}}}Size.o(A);for(let N=0;N<s;N++){const M=i[N],C=M instanceof Panel?M:null;if(C!==null&&C.bl()){const T=M.actualBounds;M.naturalBounds.si(),M.naturalBounds.e(0,0,T.width,T.height),M.naturalBounds.S()}}}}PanelLayout.Yn("Table",new PanelLayoutTable);class PanelLayoutTableRow extends PanelLayout{constructor(){super()}measure(t,i,e,s,n,o,r){}arrange(t,i,e){}}PanelLayout.Yn("TableRow",new PanelLayoutTableRow);class PanelLayoutTableColumn extends PanelLayout{constructor(){super()}measure(t,i,e,s,n,o,r){}arrange(t,i,e){}}PanelLayout.Yn("TableColumn",new PanelLayoutTableColumn);class PanelLayoutViewbox extends PanelLayout{constructor(){super()}measure(t,i,e,s,n,o,r){s.length!==1&&U.n("Viewbox Panel must contain exactly one GraphObject.");const h=s[0];h.lt=1,h.Vf(),h.yt(1/0,1/0,o,r);let a=h.measuredBounds;const c=h.margin,f=c.right+c.left,u=c.top+c.bottom;if(isFinite(i)||isFinite(e)){const d=h.scale,m=a.width,g=a.height,p=Math.max(i-f,0),y=Math.max(e-u,0);let x=1;t.viewboxStretch===6?(m!==0&&g!==0&&(x=Math.min(p/m,y/g)),x===0&&(x=1e-4),h.lt*=x):(m!==0&&g!==0&&(x=Math.max(p/m,y/g)),x===0&&(x=1e-4),h.lt*=x),d!==h.scale&&(h.Ce(!0),h.yt(1/0,1/0,o,r))}a=h.measuredBounds,n.width=isFinite(i)?i:Math.max(a.width+f,0),n.height=isFinite(e)?e:Math.max(a.height+u,0)}arrange(t,i,e){const s=i[0],n=s.measuredBounds,o=s.margin,r=o.right+o.left,l=o.top+o.bottom,h=Math.max(n.width+r,0),a=Math.max(n.height+l,0);let c=s.alignment;c.isDefault()&&(c=t.defaultAlignment),c.isSpot()||(c=Spot.Center),s.Ht(e.width*c.x-h*c.x+c.offsetX,e.height*c.y-a*c.y+c.offsetY,n.width,n.height)}}PanelLayout.Yn("Viewbox",new PanelLayoutViewbox);class PanelLayoutGrid extends PanelLayout{constructor(){super()}measure(t,i,e,s,n,o,r){t.Di===null&&(t.Di=new GridPanelSettings),this.u3(t),this.d3(t)}arrange(t,i,e){}$i(t,i,e){const s=t.naturalBounds;i.save(),i.beginPath(),i.rect(0,0,s.width,s.height),i.clip(),i.endPath(),this.g3(t,i,e),i.restore(),i.clearContextCache(!1)}g3(t,i,e){let s=t.getDocumentScale()*e.scale;s<=0&&(s=1);const n=t.gridCellSize,o=n.width,r=n.height,l=t.naturalBounds,h=t.actualBounds,a=l.width,c=l.height,f=Math.ceil(a/o),u=Math.ceil(c/r),d=t.gridOrigin,m=d.x,g=d.y,p=t.Di.Yp,y=t.E.h,x=y.length;for(let b=0;b<x;b++){const S=y[b];if(!S.visible)continue;const k=S.interval||1,P=Math.abs(k);if(o*P*s<2)continue;let A=S.segmentIndex;(!isFinite(A)||isNaN(A))&&(A=0),A<0&&(A=P-Math.min(-A,P)),A=Math.round(A%P);const N=S.opacity;let M=1;if(N!==1){if(N===0)continue;M=i.globalAlpha,i.globalAlpha=M*N}const C=p[b];let T=!1;const L=S.strokeDashArray;if(L!==null&&(T=!0,i.enableDash(L,S.strokeDashOffset)),S.stroke!==null&&S.strokeWidth>0&&(S.figure==="LineV"||S.figure==="LineH")){if(i.lineWidth=S.strokeWidth,t.Fn(i,S.stroke,!1,!1,l,h),i.beginPath(),S.figure==="LineV"){const D=Math.floor((m-o)/o);for(let F=D;F<=D+f;F++){const R=F*o+m;0<=R&&R<=a&&this.pS(F,k,A,C)&&(i.moveTo(R,0),i.lineTo(R,c))}}else if(S.figure==="LineH"){const D=Math.floor((g-r)/r);for(let F=D;F<=D+u;F++){const R=F*r+g;0<=R&&R<=c&&this.pS(F,k,A,C)&&(i.moveTo(0,R),i.lineTo(a,R))}}i.stroke(),i.endPath()}else if(S.fill!==null){if(t.Fn(i,S.fill,!0,!1,l,h),S.figure==="BarV"){let D=S.width;isNaN(D)&&(D=o);const F=Math.floor((m-o)/o);for(let R=F;R<=F+f;R++){const I=R*o+m;0<=I+D&&I<=a&&this.pS(R,k,A,C)&&i.fillRect(I,0,D,c)}}else if(S.figure==="BarH"){let D=S.height;isNaN(D)&&(D=r);const F=Math.floor((g-r)/r);for(let R=F;R<=F+u;R++){const I=R*r+g;0<=I+D&&I<=c&&this.pS(R,k,A,C)&&i.fillRect(0,I,a,D)}}}T&&i.disableDash(),N!==1&&(i.globalAlpha=M)}}pS(t,i,e,s){if(i<0)return t%i===e;if(t%i!==e)return!1;const n=s.length;for(let o=0;o<n;o++){const r=s[o];if(t%r===e)return!1}return!0}d3(t){const i=[],e=t.E.h,s=e.length;for(let n=0;n<s;n++){const o=e[n],r=[];if(i.push(r),!o.visible)continue;const l=o.interval;if(l<0)continue;const h=o.figure,a=this.MN(h);for(let c=0;c<s;c++){if(c===n)continue;const f=e[c];if(!f.visible)continue;const u=f.figure;if(this.MN(u)!==a)continue;const d=f.interval;d>l&&r.push(d)}}t.Di.Yp=i}MN(t){return t==="LineV"||t==="BarV"}u3(t){let i=1,e=1;const s=t.E.h,n=s.length;for(let l=0;l<n;l++){const h=s[l],a=Math.abs(h.interval);a<2||(this.MN(h.figure)?e=e*a/G.CT(e,a):i=i*a/G.CT(i,a))}const o=t.gridCellSize,r=t.Di;r.Cf.isReal()?r.Cf.e(e*o.width,i*o.height):r.Cf=new Size(e*o.width,i*o.height)}}PanelLayout.Yn("Grid",new PanelLayoutGrid);class PanelLayoutLink extends PanelLayout{constructor(){super()}measure(t,i,e,s,n,o,r){const l=s.length;if(!(t instanceof Adornment||t instanceof Link))return;let h=null,a=null;if(t instanceof Link&&(h=t),t instanceof Adornment&&(a=t,h=a.adornedPart,t.qf===null&&(t.qf=[])),!(h instanceof Link))return;const c=h;if(l===0){t.naturalBounds.io(0,0),t.measuredBounds.e(0,0,0,0);return}const f=t instanceof Adornment?null:h.path,u=h.routeBounds,d=t.or;d.e(0,0,u.width,u.height);const m=c.points,g=h.pointsCount;a!==null?a.CN():h!==null&&h.CN();const p=u.width,y=u.height,x=t.qf;if(x.length=0,f!==null){this.measureLinkPath(t,p,y,f);const P=f.measuredBounds;d.unionRect(P),x.push(P)}const b=Transform.a(),S=Point.a(),k=Point.a();for(let P=0;P<l;P++){const A=s[P];if(A===f)continue;let N=A.measuredBounds;if(A.isPanelMain&&A instanceof Shape){this.measureLinkPath(t,p,y,A),N=A.measuredBounds,d.unionRect(N),x.push(N);continue}if(g<2){A.yt(1/0,1/0,0,0),N=A.measuredBounds,d.unionRect(N),x.push(N);continue}const M=A.segmentIndex,C=A.segmentFraction;let T=A.alignmentFocus;T.isNoSpot()&&(T=Spot.Center);const L=A.segmentOrientation,D=A.segmentOffset;let F=0,R=0,I=0,O=0;if(isNaN(M)){const q=c.bt,Q=U.ct();q.getPointAndAngleAlongPath(C,Q);const J=Point.V(Q[0],Q[1]);O=Q[2],L!==0&&(I=c.computeAngle(A,L,O),A.jt=I,A.Ce(!0),A.yo(!0)),F=J.x,R=J.y,Point.o(J),U.nt(Q)}else if(M<-g||M>=g){const q=Point.a();c.NN(q),O=c.midAngle,L!==0&&(I=c.computeAngle(A,L,O),A.jt=I,A.Ce(!0),A.yo(!0)),F=q.x-u.x,R=q.y-u.y,Point.o(q)}else{let q,Q,J=0;if(M>=0?(q=m.elt(M),Q=M<g-1?m.elt(M+1):q):(J=g+M,q=m.elt(J),Q=J>0?m.elt(J-1):q),q.equalsApprox(Q)){let tt,V;M>=0?(tt=M>0?m.elt(M-1):q,V=M<g-2?m.elt(M+2):Q):(tt=J<g-1?m.elt(J+1):q,V=J>1?m.elt(J-2):Q);const E=tt.distanceSquaredPoint(q),W=Q.distanceSquaredPoint(V);E>W+10?O=M>=0?tt.directionPoint(q):q.directionPoint(tt):W>E+10?O=M>=0?Q.directionPoint(V):V.directionPoint(Q):O=M>=0?tt.directionPoint(V):V.directionPoint(tt)}else O=M>=0?q.directionPoint(Q):Q.directionPoint(q);L!==0&&(I=c.computeAngle(A,L,O),A.jt=I,A.Ce(!0),A.yo(!0)),F=q.x+(Q.x-q.x)*C-u.x,R=q.y+(Q.y-q.y)*C-u.y}A.yt(1/0,1/0,0,0),N=A.measuredBounds;const X=A.naturalBounds;let Y=0;A instanceof Shape&&(Y=A.strokeWidth);const B=X.width+Y,K=X.height+Y;b.Hi(),b.Zs(-N.x,-N.y),b.lt(A.scale,A.scale),b.Ns(L===0?A.angle:O,B/2,K/2),(L===22||L===26)&&b.Ns(90,B/2,K/2),(L===23||L===27)&&b.Ns(-90,B/2,K/2),L===28&&(O>45&&O<135||O>225&&O<315)&&b.Ns(-O,B/2,K/2);const z=new Rect(0,0,B,K);S.setRectSpot(z,T),b.Pt(S);const H=-S.x+Y/2*A.scale,v=-S.y+Y/2*A.scale;k.f(D);const j=isNaN(D.x),$=isNaN(D.y);if(j||$){const q=B/2+Link.yS,Q=K/2+Link.yS,J=O>=45&&O<=135,tt=O>=225&&O<=315;L===0&&(J||tt)?(k.x=$?q:D.y,k.y=j?Q:D.x,J?M>=0||isNaN(M)&&C<.5||j&&(k.y=-Q):tt&&((M>=0||isNaN(M)&&C<.5)&&j&&(k.y=-Q),$&&(k.x=-q))):(j&&(M>=0||isNaN(M)&&C<.5?k.x=q:k.x=-q),$&&(k.y=-Q),k.rotate(O))}else k.rotate(O);F+=k.x,R+=k.y,z.e(F+H,R+v,N.width,N.height),x.push(z),d.unionRect(z)}if(h!==null){const P=h.labelNodes;for(;P.next();)P.value.yt(1/0,1/0)}t.or=d,t.position.e(u.x+d.x,u.y+d.y),n.io(d.width||0,d.height||0),Transform.o(b),Point.o(S),Point.o(k)}arrange(t,i,e){const s=i.length;if(!(t instanceof Adornment||t instanceof Link))return;let n=t,o=null;t instanceof Adornment&&(o=t,n=o.adornedPart);const r=t,l=t instanceof Adornment?null:n.path,h=t.qf;if(h.length!==0){let u=0;if(l!==null&&u<h.length){const d=h[u];u++,l.Ht(d.x-r.or.x,d.y-r.or.y,d.width,d.height)}for(let d=0;d<s;d++){const m=i[d];if(m!==l&&u<h.length){const g=h[u];u++,m.Ht(g.x-r.or.x,g.y-r.or.y,g.width,g.height)}}}const a=n.points,c=a.count;if(c>=2&&r instanceof Link){const u=r.labelNodes;for(;u.next();){const d=u.value;r.m3(d,c,a)}}const f=t.WD(Point.a());t.location.e(t.position.x+f.x,t.position.y+f.y),Point.o(f)}measureLinkPath(t,i,e,s){if(s.$o()===!1)return;let n=s.strokeWidth;if(n===0&&t instanceof Adornment&&t.type===Panel.Link&&t.adornedObject instanceof Shape&&(n=t.adornedObject.strokeWidth),n=n*s.lt,t instanceof Link&&t.bt!==null){const o=t.geometry.bounds;s.po(o.x-n/2,o.y-n/2,o.width+n,o.height+n)}else if(t instanceof Adornment&&t.adornedPart.bt!==null){const o=t.adornedPart.bt.bounds;s.po(o.x-n/2,o.y-n/2,o.width+n,o.height+n)}else s.po(-(n/2),-(n/2),i+n,e+n);s.p3(),s.Ce(!1)}}PanelLayout.Yn("Link",new PanelLayoutLink);class PanelLayoutGraduated extends PanelLayout{constructor(){super()}measure(t,i,e,s,n,o,r){const l=t.findMainElement();if(!(l instanceof Shape))return;t.hs=[];const h=l.margin,a=h.right+h.left,c=h.top+h.bottom;l.yt(i,e,o,r);const f=l.measuredBounds,u=f.width,d=f.height,m=Math.max(u+a,0),g=Math.max(d+c,0),p=new Rect(-h.left,-h.top,m,g);t.hs.push(p),n.f(p),this.determineGraduatedMarks(t,l);const y=t.Ys;if(y===null)return;const x=s.length;for(let b=0;b<x;b++){const S=s[b],k=y[b];!S.visible||S===l||k.length===0||(S instanceof Shape?this.measureGraduatedTicks(t,S,k,n):S instanceof TextBlock&&this.measureGraduatedLabels(t,S,k,n),S.Ce(!1))}}arrange(t,i,e){if(t.hs===null)return;const s=t.findMainElement(),n=t.Ys;if(n===null)return;const o=t.hs;let r=0,l=o[r];r++,s!==null&&s.Ht(l.x-e.x,l.y-e.y,l.width,l.height);const h=i.length;for(let a=0;a<h;a++){const c=i[a],f=n[a];!c.visible||c===s||f.length===0||(l=o[r],r++,c.Ht(l.x-e.x,l.y-e.y,l.width,l.height))}t.hs=null}measureGraduatedTicks(t,i,e,s){let n=i.alignmentFocus;n.isNoSpot()&&(n=Spot.TopCenter);const o=i.angle;i.jt=0,i.yt(1/0,1/0,0,0),i.jt=o;const r=i.measuredBounds,l=r.width,h=r.height,a=Rect.V(0,0,l,h),c=Point.a();c.setRectSpot(a,n),Rect.o(a);const f=-c.x,u=-c.y,d=new Rect,m=e.length;for(let g=0;g<m;g++){const p=e[g],y=p.pt.x,x=p.pt.y,b=p.angle;for(let S=0;S<4;S++){switch(S){case 0:c.e(f,u);break;case 1:c.e(f+l,u);break;case 2:c.e(f,u+h);break;case 3:c.e(f+l,u+h);break}c.rotate(b+i.angle),c.offset(y,x),g===0&&S===0?d.e(c.x,c.y,0,0):d.unionPoint(c),c.offset(-y,-x),c.rotate(-b-i.angle)}}Point.o(c),t.hs!==null&&t.hs.push(d),s.ui(d.x,d.y,d.width,d.height)}measureGraduatedLabels(t,i,e,s){t.Xe===null&&(t.Xe=new TextBlock);const n=t.Xe;this.jD(i,n);let o=i.alignmentFocus;o.isNoSpot()&&(o=Spot.TopCenter);const r=i.segmentOrientation,l=i.segmentOffset,h=new Rect;let a=0,c=0,f=0,u=0,d=0;const m=e.length;for(let g=0;g<m;g++){const p=e[g];a=p.pt.x,c=p.pt.y,f=p.angle,u=i.angle,d=i.angle,r!==0&&(r===21||r===25?d=f+i.angle:d=f,u=Link.computeAngle(r,d)),n.jt=u,n.text=p.text||"",n.yt(1/0,1/0,0,0);const y=n.measuredBounds,x=n.naturalBounds,b=x.width,S=x.height,k=Transform.a();k.Hi(),k.Zs(-y.x,-y.y),k.lt(n.scale,n.scale),k.Ns(d,b/2,S/2),(r===22||r===26)&&k.Ns(90,b/2,S/2),(r===23||r===27)&&k.Ns(-90,b/2,S/2),r===28&&(f>45&&f<135||f>225&&f<315)&&k.Ns(-f,b/2,S/2);const P=Rect.V(0,0,b,S),A=Point.a();A.setRectSpot(P,o),k.Pt(A);const N=-A.x,M=-A.y,C=Point.a();C.f(l),isNaN(C.x)&&(C.x=b/2+3),isNaN(C.y)&&(C.y=-(S/2+3)),C.rotate(f),a+=C.x+N,c+=C.y+M;const T=new Rect(a,c,y.width,y.height),L=new Rect(y.x,y.y,y.width,y.height),D=new Rect(x.x,x.y,x.width,x.height);p.labelAngle=u,p.lineCount=n.lineCount,p.lines=n.getMetrics(),p.actualBounds=T,p.measuredBounds=L,p.naturalBounds=D,g===0?h.f(T):h.unionRect(T),Point.o(C),Point.o(A),Rect.o(P),Transform.o(k)}t.hs!==null&&t.hs.push(h),s.ui(h.x,h.y,h.width,h.height)}determineGraduatedMarks(t,i){const e=i.geometry,s=i.strokeWidth,n=e.flattenedSegments,o=e.flattenedLengths,r=e.flattenedTotalLength,l=n.length;let h=0,a=0;const c=U.ct();for(let x=0;x<l;x++){const b=n[x],S=[];h=0,a=0;const k=b.length;for(let P=0;P<k;P+=2){const A=b[P],N=b[P+1];if(P===0){h=A,a=N;continue}let M=Math.atan2(N-a,A-h)*180/Math.PI;M<0&&(M+=360),S.push(M),h=A,a=N}c.push(S)}const f=this.y3(t),u=t.E.h,d=u.length;let m=0,g=0,p=r;t.Ys=[];let y;for(let x=0;x<d;x++){const b=u[x];if(y=[],!b.visible||b===i){t.Ys.push(y);continue}const S=Math.abs(b.interval),k=t.graduatedTickUnit;if(k*S*r/t.graduatedRange<2&&b.graduatedSkip===null){t.Ys.push(y);continue}let P=o[0][0],A=0,N=0;g=r*b.graduatedStart-1e-4,p=r*b.graduatedEnd+1e-4;const M=k*S;let C=t.graduatedTickBase;if(C<t.graduatedMin){let F=(t.graduatedMin-C)/M;F=F%1===0?F:Math.floor(F+1),C+=F*M}else if(C>t.graduatedMin+M){const F=Math.floor((C-t.graduatedMin)/M);C-=F*M}const T=f[x],L=C,D=t.graduatedMax*1e-6;for(let F=1;C<=t.graduatedMax+D;F++){if(this.w3(t,C-t.graduatedTickBase,T)&&(C>t.graduatedMax&&(C=t.graduatedMax),(b.graduatedSkip===null||b instanceof TextBlock&&!b.graduatedSkip(C,b)||b instanceof Shape&&!b.graduatedSkip(C,b))&&(m=(C-t.graduatedMin)*r/t.graduatedRange,m>r&&(m=r),g<=m&&m<=p))){let R=c[A][N],I=o[A][N];for(;A<o.length;){for(;m>P&&N<o[A].length-1;)N++,R=c[A][N],I=o[A][N],P+=I;if(m<=P)break;A++,N=0,R=c[A][N],I=o[A][N],P+=I}const O=n[A],X=O[N*2],Y=O[N*2+1],B=O[N*2+2],K=O[N*2+3],z=(m-(P-I))/I,H=new Point(X+(B-X)*z+s/2-e.bounds.x,Y+(K-Y)*z+s/2-e.bounds.y);if(H.scale(i.scale,i.scale),R=this.x3(R,z,O,c[A],N),b instanceof TextBlock){let v="";b.graduatedFunction!==null?(v=b.graduatedFunction(C,b),v=v!=null?v.toString():""):v=(+C.toFixed(2)).toString(),v!==""&&y.push({pt:H,angle:R,text:v})}else y.push({pt:H,angle:R})}C=L+F*M}t.Ys.push(y)}U.nt(c)}x3(t,i,e,s,n){if(i<.5005&&i>.4995)return t;let o=t;if(i<.5?n>0?o=s[n-1]:G.H(e[0],e[e.length-2])&&G.H(e[1],e[e.length-1])&&(o=s[s.length-1]):i>.5&&(n+1<s.length?o=s[n+1]:G.H(e[0],e[e.length-2])&&G.H(e[1],e[e.length-1])&&(o=s[0])),t!==o){let r=Math.abs(t-o);if(r>180&&(t<o?t+=360:o+=360,r=Math.abs(t-o)),i<5e-4||i>.9995)return(t+o)/2%360;if(r<10){const l=1-Math.abs(.5-i);return(t*l+o*(1-l))%360}}return t}y3(t){if(t.xs===null){const i=[],e=t.E.h,s=e.length;for(let n=0;n<s;n++){const o=e[n],r=[];if(i.push(r),!o.visible)continue;const l=o.interval;if(!(l<0))for(let h=0;h<s;h++){if(h===n)continue;const a=e[h];if(!a.visible||o.constructor!==a.constructor)continue;const c=a.interval;c>l&&r.push(c)}}t.xs=i}return t.xs}w3(t,i,e){const s=e.length;for(let n=0;n<s;n++){const o=e[n]*t.graduatedTickUnit,r=i%o,l=t.graduatedTickUnit*1e-6;if(r<l&&r>-l)return!1}return!0}$i(t,i,e){const s=e.Ra;e.Ra=!0;const n=t.naturalBounds,o=n.width,r=n.height,l=i instanceof SVGContext;i.save(),i.beginPath(),i.rect(-1,-1,o+1,r+1),i.clip(),i.endPath();const h=t.findMainElement();h.$i(i,e);let a=t.getDocumentScale()*e.scale;a<=0&&(a=1);const c=h.actualBounds,f=t.E.h,u=t.Ys,d=f.length;for(let m=0;m<d;m++){const g=f[m],p=u[m],y=p.length;if(!(!g.visible||g===h||p.length===0)){if(g instanceof Shape){if(t.graduatedTickUnit*g.interval*h.geometry.flattenedTotalLength/t.graduatedRange*a<2&&g.graduatedSkip===null)continue;const x=g.measuredBounds,b=g.strokeWidth*g.scale;let S=g.alignmentFocus;S.isNoSpot()&&(S=Spot.TopCenter);for(let k=0;k<y;k++){const P=p[k].pt,A=p[k].angle;this.b3(g,P,c,A,x,b,S),g.$i(i,e),l&&(t.svg.appendChild(g.svg),g.svg=null),g.yl.Hi()}}else if(g instanceof TextBlock){t.Xe===null&&(t.Xe=new TextBlock);const x=t.Xe;this.jD(g,x),x.AN=!0;for(let b=0;b<y;b++){const S=p[b];if(S.actualBounds&&S.measuredBounds&&S.naturalBounds){x.S3(S);const k=S.actualBounds;x.Ht(k.x,k.y,k.width,k.height),this.k3(x,c,k,S.measuredBounds,S.naturalBounds),x.xl=g.part,x.rn=g.panel,x.$i(i,e),x.rn=null,x.xl=null,l&&(t.svg.appendChild(x.svg),x.svg=null)}}}}}e.Ra=s,i.restore(),i.clearContextCache(!0)}b3(t,i,e,s,n,o,r){const l=t.yl;l.Hi(),l.Zs(i.x+e.x,i.y+e.y),l.Ns(s+t.angle,0,0),l.Zs(-n.width*r.x+r.offsetX+o/2,-n.height*r.y+r.offsetY+o/2),l.lt(t.scale,t.scale),t.Gd(!1),t.Ih.set(t.yl),t.Ha=t.scale,t.Yh(!1)}k3(t,i,e,s,n){const o=t.yl;o.Hi(),o.Zs(e.x+i.x,e.y+i.y),o.Zs(-s.x,-s.y),t.op(o,n.x,n.y,n.width,n.height),t.Gd(!1),t.Ih.set(t.yl),t.Ha=t.scale,t.Yh(!1)}jD(t,i){i.P3(t)}}PanelLayout.Yn("Graduated",new PanelLayoutGraduated);var ViewboxStretch=(w=>(w[w.Uniform=6]="Uniform",w[w.UniformToFill=7]="UniformToFill",w))(ViewboxStretch||{});class Panel extends GraphObject{it;E;li;Jd;ro;rr;So;or;TN;z;$d;ut;Di;hi;Zd;qh;an;constructor(t,i){if(super(),t===void 0)this.it=Panel.Position;else if(typeof t=="string"){const e=PanelLayout.rs.get(t);e!==null?this.it=e:U.n("PanelLayout not loaded: "+t)}else t instanceof PanelLayout?this.it=t:(this.it=Panel.Position,t&&(i=t));this.l|=4194304|(this.it===Panel.Grid?1048576:0),this.E=new List,this.li=Margin.Sm,this.Jd=Spot.Default,this.ro=1,this.rr=null,this.So="",this.or=new Rect(NaN,NaN,NaN,NaN),this.TN=null,this.z=null,this.$d=6,this.Di=null,this.ut=null,this.hi=null,this.Zd=NaN,this.qh=null,this.an=null,i&&Object.assign(this,i)}cloneProtected(t){super.cloneProtected(t),t.it=this.it,t.li=this.li.T(),t.Jd=this.Jd.T(),t.ro=this.ro,t.So=this.So,t.or.f(this.or),this.z!==null&&(t.z=this.z.copy(t)),t.$d=this.$d,this.ut!==null&&(t.ut=this.ut.copy()),this.Di!==null&&(t.Di=this.Di.copy()),t.hi=this.hi,t.Zd=this.Zd,t.qh=this.qh}tr(t){super.tr(t),t.E=this.E;const i=t.E.h,e=i.length;for(let s=0;s<e;s++){const n=i[s];n.rn=t}t.rr=null}copy(){const t=super.copy(),i=this.E.h,e=i.length;for(let s=0;s<e;s++){const o=i[s].copy();t.M3(o)}return t}toString(){return"Panel("+this.type.name+")#"+GSet.Cs(this)}get type(){return this.it}set type(t){let i;if(typeof t=="string"){const s=PanelLayout.rs.get(t);s!==null?i=s:U.n("PanelLayout not loaded: "+t)}else Debug&&U.s(t,PanelLayout,"PanelLayout"),i=t;const e=this.it;e!==i&&(this.it=i,this.Hf=this.it===Panel.Grid,this.g(),this.t("type",e,i))}get elements(){return this.E.iterator}get naturalBounds(){return this._i}get padding(){return this.li}set padding(t){typeof t=="number"?(t<0&&U.q(t,">= 0",Panel,"padding"),t=new Margin(t)):(U.s(t,Margin,Panel,"padding"),t.left<0&&U.q(t.left,">= 0",Panel,"padding:value.left"),t.right<0&&U.q(t.right,">= 0",Panel,"padding:value.right"),t.top<0&&U.q(t.top,">= 0",Panel,"padding:value.top"),t.bottom<0&&U.q(t.bottom,">= 0",Panel,"padding:value.bottom"));const i=this.li;i.equals(t)||(t=t.T(),this.li=t,this.g(),this.t("padding",i,t))}get defaultAlignment(){return this.Jd}set defaultAlignment(t){const i=this.Jd;i.equals(t)||(Debug&&U.s(t,Spot,Panel,"defaultAlignment"),t=t.T(),this.Jd=t,this.g(),this.t("defaultAlignment",i,t))}get defaultStretch(){return this.ro}set defaultStretch(t){const i=this.ro;i!==t&&(Debug&&U.j(t,Stretch,"Stretch"),this.ro=t,this.g(),this.t("defaultStretch",i,t))}get defaultSeparatorPadding(){return this.z!==null?this.z.Kp:Margin.Sm}set defaultSeparatorPadding(t){typeof t=="number"?t=new Margin(t):Debug&&U.s(t,Margin,Panel,"defaultSeparatorPadding");const i=this.defaultSeparatorPadding;i.equals(t)||(t=t.T(),this.z===null&&(this.z=new TablePanelSettings),this.z.Kp=t,this.g(),this.t("defaultSeparatorPadding",i,t))}get defaultRowSeparatorStroke(){return this.z!==null?this.z.Up:null}set defaultRowSeparatorStroke(t){const i=this.defaultRowSeparatorStroke;i!==t&&(t===null||typeof t=="string"||t instanceof Brush)&&(t instanceof Brush&&t.S(),this.z===null&&(this.z=new TablePanelSettings),this.z.Up=t,this.L(),this.t("defaultRowSeparatorStroke",i,t))}get defaultRowSeparatorStrokeWidth(){return this.z!==null?this.z.Gp:1}set defaultRowSeparatorStrokeWidth(t){const i=this.defaultRowSeparatorStrokeWidth;i!==t&&isFinite(t)&&t>=0&&(this.z===null&&(this.z=new TablePanelSettings),this.z.Gp=t,this.g(),this.t("defaultRowSeparatorStrokeWidth",i,t))}get defaultRowSeparatorDashArray(){return this.z!==null?this.z.qp:null}set defaultRowSeparatorDashArray(t){const i=this.defaultRowSeparatorDashArray;if(i!==t){if(t!==null&&!Array.isArray(t)&&U.Ii(t,"Array",Panel,"defaultRowSeparatorDashArray:value"),t!==null){const e=t.length;let s=0;for(let n=0;n<e;n++){const o=t[n];(typeof o!="number"||!(o>=0)||!isFinite(o))&&U.n("defaultRowSeparatorDashArray value "+o+" at index "+n+" must be a positive number or zero."),s+=o}if(s===0){if(i===null)return;t=null}}this.z===null&&(this.z=new TablePanelSettings),this.z.qp=t,this.L(),this.t("defaultRowSeparatorDashArray",i,t)}}get defaultColumnSeparatorStroke(){return this.z!==null?this.z.Hp:null}set defaultColumnSeparatorStroke(t){const i=this.defaultColumnSeparatorStroke;i!==t&&(t===null||typeof t=="string"||t instanceof Brush)&&(t instanceof Brush&&t.S(),this.z===null&&(this.z=new TablePanelSettings),this.z.Hp=t,this.L(),this.t("defaultColumnSeparatorStroke",i,t))}get defaultColumnSeparatorStrokeWidth(){return this.z!==null?this.z.vp:1}set defaultColumnSeparatorStrokeWidth(t){const i=this.defaultColumnSeparatorStrokeWidth;i!==t&&isFinite(t)&&t>=0&&(this.z===null&&(this.z=new TablePanelSettings),this.z.vp=t,this.g(),this.t("defaultColumnSeparatorStrokeWidth",i,t))}get defaultColumnSeparatorDashArray(){return this.z!==null?this.z.Wp:null}set defaultColumnSeparatorDashArray(t){const i=this.defaultColumnSeparatorDashArray;if(i!==t){if(t!==null&&!Array.isArray(t)&&U.Ii(t,"Array",Panel,"defaultColumnSeparatorDashArray:value"),t!==null){const e=t.length;let s=0;for(let n=0;n<e;n++){const o=t[n];(typeof o!="number"||!(o>=0)||!isFinite(o))&&U.n("defaultColumnSeparatorDashArray value "+o+" at index "+n+" must be a positive number or zero."),s+=o}if(s===0){if(i===null)return;t=null}}this.z===null&&(this.z=new TablePanelSettings),this.z.Wp=t,this.L(),this.t("defaultColumnSeparatorDashArray",i,t)}}get Gh(){return this.z!==null?this.z.Gh:null}set Gh(t){this.z===null&&(this.z=new TablePanelSettings),this.z.Gh=t}get viewboxStretch(){return this.$d}set viewboxStretch(t){const i=this.$d;i!==t&&(Debug&&U.j(t,ViewboxStretch,"ViewboxStretch"),this.$d=t,this.g(),this.t("viewboxStretch",i,t))}get gridCellSize(){return this.Di!==null?this.Di.Qd:Size.mT}set gridCellSize(t){this.Di===null&&(this.Di=new GridPanelSettings);const i=this.Di.Qd;if(!i.equals(t)){(!t.isReal()||t.width===0||t.height===0)&&U.n("Invalid Panel.gridCellSize: "+t),this.Di.Qd=t.T();const e=this.diagram;e!==null&&this===e.grid&&e.Ld(),this.L(),this.t("gridCellSize",i,t)}}get gridOrigin(){return this.Di!==null?this.Di._d:Point.kn}set gridOrigin(t){this.Di===null&&(this.Di=new GridPanelSettings);const i=this.Di._d;if(!i.equals(t)){t.isReal()||U.n("Invalid Panel.gridOrigin: "+t),this.Di._d=t.T();const e=this.diagram;e!==null&&this===e.grid&&e.Ld(),this.L(),this.t("gridOrigin",i,t)}}get graduatedMin(){return this.ut!==null?this.ut.jp:0}set graduatedMin(t){const i=this.graduatedMin;if(i!==t&&(Debug&&U.r(t,Panel,"graduatedMin"),this.ut===null&&(this.ut=new GradPanelSettings),this.ut.jp=t,this.g(),this.t("graduatedMin",i,t),this.Ff())){const e=this.part;e!==null&&this.Qa(e,"graduatedRange")}}get graduatedMax(){return this.ut!==null?this.ut.Jp:100}set graduatedMax(t){const i=this.graduatedMax;if(i!==t&&(Debug&&U.r(t,Panel,"graduatedMax"),this.ut===null&&(this.ut=new GradPanelSettings),this.ut.Jp=t,this.g(),this.t("graduatedMax",i,t),this.Ff())){const e=this.part;e!==null&&this.Qa(e,"graduatedRange")}}get graduatedRange(){return this.graduatedMax-this.graduatedMin}get graduatedTickUnit(){return this.ut!==null?this.ut.$p:10}set graduatedTickUnit(t){const i=this.graduatedTickUnit;i!==t&&t>0&&(Debug&&U.r(t,Panel,"graduatedTickUnit"),this.ut===null&&(this.ut=new GradPanelSettings),this.ut.$p=t,this.g(),this.t("graduatedTickUnit",i,t))}get graduatedTickBase(){return this.ut!==null?this.ut.Zp:0}set graduatedTickBase(t){const i=this.graduatedTickBase;i!==t&&(Debug&&U.r(t,Panel,"graduatedTickBase"),this.ut===null&&(this.ut=new GradPanelSettings),this.ut.Zp=t,this.g(),this.t("graduatedTickBase",i,t))}get Ys(){return this.ut!==null?this.ut.Ys:null}set Ys(t){this.ut!==null?this.ut.Ys=t:t!==null&&(this.ut=new GradPanelSettings,this.ut.Ys=t)}get hs(){return this.ut!==null?this.ut.hs:null}set hs(t){this.ut!==null?this.ut.hs=t:t!==null&&(this.ut=new GradPanelSettings,this.ut.hs=t)}get xs(){return this.ut!==null?this.ut.xs:null}set xs(t){this.ut!==null?this.ut.xs=t:t!==null&&(this.ut=new GradPanelSettings,this.ut.xs=t)}get Xe(){return this.ut!==null?this.ut.Xe:null}set Xe(t){this.ut!==null?this.ut.Xe=t:t!==null&&(this.ut=new GradPanelSettings,this.ut.Xe=t)}ap(t){super.ap(t);const i=this.E.h,e=i.length;for(let s=0;s<e;s++)i[s].ap(t)}Xh(t,i){if(this.it===Panel.Grid){t.commitTransform(),this.it.$i(this,t,i);return}if(this.it===Panel.Graduated){t.commitTransform(),this.it.$i(this,t,i);return}if(this.it===Panel.Table)if(t.commitTransform(),t instanceof SVGContext){const r=t.currentElement;t.currentElement=t.newGroup2("gojs-ts"),this.LN(t,i),t.endGroup(),t.currentElement=r}else this.LN(t,i);const e=this.isClipping&&this.it===Panel.Spot;e&&t.save();const s=this.findMainElement(),n=this.E.h,o=n.length;for(let r=0;r<o;r++){const l=n[r];e&&l===s&&(t.clipInsteadOfFill=!0),l.$i(t,i),e&&l===s&&(t.clipInsteadOfFill=!1)}e&&(t.restore(),t.clearContextCache(!0))}LN(t,i){t.lineCap="butt";const e=this.rowCount>0?this.Ge:null,s=this.columnCount>0?this.qe:null;e!==null&&this.wS(t,i,!0,e,!0),s!==null&&this.wS(t,i,!1,s,!0),e!==null&&this.JD(t,!0,e),s!==null&&this.JD(t,!1,s),e!==null&&this.wS(t,i,!0,e,!1),s!==null&&this.wS(t,i,!1,s,!1)}JD(t,i,e){const s=e.length,n=this.actualBounds,o=this.naturalBounds;let r=!0;for(let l=0;l<s;l++){const h=e[l];if(h===void 0||h.actual===0)continue;if(r){r=!1;continue}if(i){if(h.position>o.height)continue}else if(h.position>o.width)continue;let a=h.separatorStrokeWidth;isNaN(a)&&(a=i?this.defaultRowSeparatorStrokeWidth:this.defaultColumnSeparatorStrokeWidth);let c=h.separatorStroke;if(c===null&&(c=i?this.defaultRowSeparatorStroke:this.defaultColumnSeparatorStroke),a===0||c===null)continue;this.Fn(t,c,!1,!1,o,n);let f=!1,u=h.separatorDashArray;u===null&&(u=i?this.defaultRowSeparatorDashArray:this.defaultColumnSeparatorDashArray),u!==null&&(f=!0,t.enableDash(u,0)),t.beginPath();const d=h.position+a;i?d>o.height&&(a-=d-o.height):d>o.width&&(a-=d-o.width);let m=h.position+a/2;t.lineWidth=a;const g=this.li;if(i){m+=g.top;const p=g.left,y=o.width-g.right;t.moveTo(p,m),t.lineTo(y,m)}else{m+=g.left;const p=g.top,y=o.height-g.bottom;t.moveTo(m,p),t.lineTo(m,y)}t.stroke(),t.endPath(),f&&t.disableDash()}}wS(t,i,e,s,n){const o=s.length,r=this.actualBounds,l=this.naturalBounds,h=this.$D(!0),a=this.$D(!1);for(let c=0;c<o;c++){const f=s[c];if(f===void 0||f.background===null||f.coversSeparators===n||f.actual===0)continue;const u=e?r.height:r.width;if(f.position>u)continue;let d=f.computeEffectiveSpacing(),m=f.separatorStrokeWidth;isNaN(m)&&(m=e?this.defaultRowSeparatorStrokeWidth:this.defaultColumnSeparatorStrokeWidth);let g=f.separatorStroke;g===null&&(g=e?this.defaultRowSeparatorStroke:this.defaultColumnSeparatorStroke),(g===null||f.index===(e?h:a))&&(m=0),d-=m;const p=f.position+m;let y=d+f.actual;if(p+y>u&&(y=u-p),y<=0)continue;const x=this.li;this.Fn(t,f.background,!0,!1,l,r),e?t.fillRect(x.left,p+x.top,r.width-(x.left+x.right),y):t.fillRect(p+x.left,x.top,y,r.height-(x.top+x.bottom))}}$D(t){const i=t?this.rowCount:this.columnCount;for(let e=0;e<i;e++){const s=t?this.Ge[e]:this.qe[e];if(s!==void 0)return s.index}return 0}Ef(){const t=this.E.h,i=t.length;for(let e=0;e<i;e++)t[e].Ef();this.os(!0)}Of(t,i,e){const s=this.svg;if(s===null)return!1;if(this.type===Panel.Table){const r=s.getElementsByClassName("gojs-ts"),l=r.length!==0?r[0]:null;l!==null&&(l.innerHTML=""),t.currentElement=l,this.LN(t,i),t.currentElement=null}else{if(this.it===Panel.Grid)return s.innerHTML="",s.remove(),!1;if(this.it===Panel.Graduated)return s.innerHTML="",s.remove(),!1;if(this.it===Panel.Spot&&this.isClipping)return s.innerHTML="",s.remove(),this.Oh=null,this.Ef(),!1}if(!super.Of(t,i,e))return!1;const n=this.E.h,o=n.length;for(let r=0;r<o;r++)n[r].$i(t,i);return!0}Ud(t){return!0}fp(t,i,e,s){if(!this.isClipping){if(this.hn()&&t.partClipRect!==null){const n=t.partClipRect,o=this.E.h;let r=0,l=0;for(let h=0;h<o.length;h++){if(!o[h].isVisibleObject())continue;const a=o[h].actualBounds;r=h===0?a.x:Math.min(a.x,r),l=h===0?a.y:Math.min(a.y,l)}s.setAttributeNS(null,"clip-path",`path('M ${n.x-e.x-r},${n.y-e.y-l} l ${n.width} 0 l 0 ${n.height} l -${n.width} 0 z')`);return}super.fp(t,i,e,s)}}Rf(t,i,e,s,n){const o=this.Bn(),r=this.D,l=1/(r.m11*r.m22-r.m12*r.m21);let h=r.m22*l,a=-r.m12*l,c=-r.m21*l,f=r.m11*l,u=l*(r.m21*r.dy-r.m22*r.dx),d=l*(r.m12*r.dx-r.m11*r.dy);if(this.background!==null){const m=t*h+i*c+u,g=t*a+i*f+d,p=e*h+s*c+u,y=e*a+s*f+d;n.e(0,0);const x=this.naturalBounds,b=G.Ul(0,0,x.width,x.height,m,g,p,y,n);return n.D(r),b}else{o||(h=1,a=0,c=0,f=1,u=0,d=0);const m=t*h+i*c+u,g=t*a+i*f+d,p=e*h+s*c+u,y=e*a+s*f+d;n.e(p,y);let x=(p-m)**2+(y-g)**2,b=!1;const S=this.E.h,k=S.length,P=Point.a();let A=null,N=1/0,M=null;const C=this.isClipping&&this.it===Panel.Spot;C&&(M=Point.a(),A=this.findMainElement(),b=A.Rf(m,g,p,y,M),b&&(N=(m-M.x)**2+(g-M.y)**2));for(let T=0;T<k;T++){const L=S[T];if(!L.visible||L===A||!L.Rf(m,g,p,y,P))continue;b=!0;const D=(m-P.x)**2+(g-P.y)**2;D<x&&(x=D,n.set(P))}return C&&(N>x&&n.set(M),Point.o(M)),Point.o(P),o&&n.D(r),b}}gf(){const t=this.E.h,i=t.length;for(let e=0;e<i;e++)t[e].gf();super.gf()}g(t){if(this.$o())return;super.g(t);let i=null;(this.it===Panel.Auto||this.it===Panel.Link)&&(i=this.findMainElement());const e=this.E.h,s=e.length;for(let n=0;n<s;n++){const o=e[n];if((o===i||o.isPanelMain)&&o.g(!0),o.desiredSize.isReal()||!o.visible)continue;const r=o.ln(!1);!(o instanceof Placeholder)&&!(o instanceof Panel)&&!(o instanceof TextBlock)&&r===0||o.g(!0)}}Vf(){if(this.$o())return;this.Ce(!0),this.yo(!0);const t=this.E.h,i=t.length;for(let e=0;e<i;e++)t[e].Vf()}If(){if(this.rS()===!1){this.Gd(!0),this.Yh(!0);const t=this.E.h,i=t.length;for(let e=0;e<i;e++)t[e].hN()}}hN(){this.Yh(!0);const t=this.E.h,i=t.length;for(let e=0;e<i;e++)t[e].hN()}Yd(t,i,e,s){const n=this.or;n.e(0,0,0,0);const o=this.desiredSize,r=this.minSize;e===void 0&&(e=r.width,s=r.height),e=Math.max(e,r.width),s=Math.max(s,r.height);const l=this.maxSize;isNaN(o.width)||(t=Math.min(o.width,l.width)),isNaN(o.height)||(i=Math.min(o.height,l.height)),t=Math.max(e,t),i=Math.max(s,i);const h=this.li;t=Math.max(t-h.left-h.right,0),i=Math.max(i-h.top-h.bottom,0);const a=this.E.h;this.it.measure(this,t,i,a,n,e,s);let c=n.width+h.left+h.right,f=n.height+h.top+h.bottom;isFinite(o.width)&&(c=o.width),isFinite(o.height)&&(f=o.height),c=Math.min(l.width,c),f=Math.min(l.height,f),c=Math.max(r.width,c),f=Math.max(r.height,f),c=Math.max(e,c),f=Math.max(s,f),n.io(c,f),this.naturalBounds.io(c,f),this.po(0,0,c,f)}findMainElement(){if(this.rr!==null)return this.rr;const t=this.E.h,i=t.length;if(i===0)return null;for(let e=0;e<i;e++){const s=t[e];if(s.isPanelMain===!0)return this.rr=s,s}return this.rr=t[0],this.rr}nr(){return this.part!==null?this.part.locationObject:null}get panelLayoutState(){return this.TN}set panelLayoutState(t){this.TN=t}Vh(t,i,e,s){const n=this.E.h;if(this.actualBounds.e(t,i,e,s),!this.desiredSize.isReal()){let o=this.ln(!0);const r=this.measuredBounds,l=r.width,h=r.height,a=this.wl,c=a.left+a.right,f=a.top+a.bottom;switch(l===e&&h===s&&(o=0),o){case 0:(l>e||h>s)&&(this.g(),this.yt(l>e?e:l,h>s?s:h,0,0));break;case 2:this.g(!0),this.yt(e+c,s+f,0,0);break;case 5:this.g(!0),this.yt(e+c,h+f,0,0);break;case 4:this.g(!0),this.yt(l+c,s+f,0,0);break}}this.it.arrange(this,n,this.or)}Bh(t){const i=this.naturalBounds,e=this.nr();if(Rect.contains(0,0,i.width,i.height,t.x,t.y)){const s=this.E.h,n=s.length,o=Point.V(0,0);for(let r=n;r--;){const l=s[r];if(!(!l.visible&&l!==e)&&(o.set(t).Ie(l.D),l.containsPoint(o)))return Point.o(o),!0}return Point.o(o),this.Ft!==null}return!1}np(t){if(this.go===t)return this;const i=this.E.h,e=i.length;for(let s=0;s<e;s++){const o=i[s].np(t);if(o!==null)return o}return null}walkVisualTreeFrom(t,i){if(i(this,t),t instanceof Panel){const e=t.E.h,s=e.length;for(let n=0;n<s;n++)this.walkVisualTreeFrom(e[n],i)}}On(t){this.ZD(this,t)}ZD(t,i){i(t);const e=t.E.h,s=e.length;for(let n=0;n<s;n++){const o=e[n];o instanceof Panel&&this.ZD(o,i)}}C3(t){this.QD(this,t)}QD(t,i){if(i(t),t instanceof Panel){const e=t.E.h,s=e.length;for(let n=0;n<s;n++)this.QD(e[n],i)}}findInVisualTree(t){return this._D(this,t)}_D(t,i){if(i(t))return t;if(t instanceof Panel){const e=t.E.h,s=e.length;for(let n=0;n<s;n++){const o=this._D(e[n],i);if(o!==null)return o}}return null}findObject(t){if(this.name===t)return this;const i=this.E.h;let e=i.length;this.qh!==null&&(e=this.Qp());for(let s=0;s<e;s++){const n=i[s];if(n instanceof Panel){const o=n.findObject(t);if(o!==null)return o}if(n.name===t)return n}return null}tF(){const t=this.E.h,i=t.length;let e=0;for(let s=0;s<i;s++){const n=t[s];n instanceof Panel?e=Math.max(e,n.tF()):n instanceof Shape&&(e=Math.max(e,n.N3()))}return e}Bn(){return!(this.type===Panel.TableRow||this.type===Panel.TableColumn)}bl(){return this.type===Panel.TableRow||this.type===Panel.TableColumn}xL(t,i,e){if(this.pickable===!1||(i===void 0&&(i=null),e===void 0&&(e=null),this.ps()))return null;const s=this.naturalBounds,n=1/this.getDocumentScale(),o=this.Bn(),r=o?t:Point.V(t.x,t.y).Ie(this.D),l=this.diagram;let h=10,a=5;if(l!==null&&(h=l.getInputOption("extraTouchArea"),a=h/2),Rect.contains(-(a*n),-(a*n),s.width+h*n,s.height+h*n,r.x,r.y)){if(!this.Hf){const f=this.E.h,u=f.length,d=Point.a(),m=this.isClipping&&this.it===Panel.Spot,g=m?this.findMainElement():null;if(m&&g&&(g.Bn()?d.set(t).Ie(g.D):d.set(t),!g.containsPoint(d)))return Point.o(d),o||Point.o(r),null;const p=this.nr();for(let y=u;y--;){const x=f[y];if(!x.visible&&x!==p||(x.Bn()?d.set(t).Ie(x.D):d.set(t),m&&x===g))continue;let b=null;if(x instanceof Panel?b=x.xL(d,i,e):x.pickable===!0&&x.containsPoint(d)&&(b=x),b!==null&&(i!==null&&(b=i(b)),b!==null&&(e===null||e(b))))return Point.o(d),o||Point.o(r),b}Point.o(d)}if(this.background===null)return o||Point.o(r),null;const c=Rect.contains(0,0,s.width,s.height,r.x,r.y)?this:null;return o||Point.o(r),c}return o||Point.o(r),null}bL(t,i,e,s){if(this.pickable===!1)return!1;i===void 0&&(i=null),e===void 0&&(e=null);const n=this.naturalBounds,o=this.Bn(),r=o?t:Point.V(t.x,t.y).Ie(this.D),l=this.bl(),h=Rect.contains(0,0,n.width,n.height,r.x,r.y);if(l||h){if(!this.Hf){const a=this.E.h,c=a.length,f=Point.a(),u=this.nr();for(let d=c;d--;){const m=a[d];if(!m.visible&&m!==u)continue;m.Bn()?f.set(t).Ie(m.D):f.set(t);let g=m;const p=m instanceof Panel?m:null;if(p!==null?p.bL(f,i,e,s):g.containsPoint(f)){if(g.pickable===!1)continue;i!==null&&(g=i(g)),g!==null&&(e===null||e(g))&&s.add(g)}}Point.o(f)}return o||Point.o(r),h&&this.background!==null}return o||Point.o(r),!1}m0(t,i,e,s,n,o){if(this.pickable===!1)return!1;i===void 0&&(i=null),e===void 0&&(e=null);let r=o;if(r===void 0&&(r=Transform.a(),r.Hi()),r.Xc(this.D),this.containedInRect(t,r))return this.DN(i,e,n),o===void 0&&Transform.o(r),!0;if(this.intersectsRect(t,r)){if(!this.Hf){const l=this.nr(),h=this.E.h,a=h.length;for(let c=a;c--;){const f=h[c];if(!f.visible&&f!==l)continue;const u=f.actualBounds,d=this.naturalBounds;if(u.x>d.width||u.y>d.height||u.x+u.width<0||u.y+u.height<0)continue;let m=f;const g=f instanceof Panel?f:null,p=Transform.a();p.set(r),(g!==null?g.m0(t,i,e,s,n,p):m.RD(t,s,p))&&(i!==null&&(m=i(m)),m!==null&&(e===null||e(m))&&n.add(m)),Transform.o(p)}}return o===void 0&&Transform.o(r),s}return o===void 0&&Transform.o(r),!1}DN(t,i,e){const s=this.E.h,n=s.length;for(let o=n;o--;){const r=s[o];if(!r.visible)continue;const l=r.actualBounds,h=this.naturalBounds;if(l.x>h.width||l.y>h.height||l.x+l.width<0||l.y+l.height<0)continue;r instanceof Panel&&r.DN(t,i,e);let a=r;t!==null&&(a=t(a)),a!==null&&(i===null||i(a))&&e.add(a)}}SL(t,i,e,s,n,o){if(this.pickable===!1)return!1;e===void 0&&(e=null),s===void 0&&(s=null);const r=this.naturalBounds,l=this.Bn(),h=l?t:Point.V(t.x,t.y).Ie(this.D),a=l?i:Point.V(i.x,i.y).Ie(this.D),c=h.distanceSquaredPoint(a),f=h.x>0&&h.x<r.width&&h.y>0&&h.y<r.height||Point.distanceLineSegmentSquared(h.x,h.y,0,0,0,r.height)<=c||Point.distanceLineSegmentSquared(h.x,h.y,0,r.height,r.width,r.height)<=c||Point.distanceLineSegmentSquared(h.x,h.y,r.width,r.height,r.width,0)<=c||Point.distanceLineSegmentSquared(h.x,h.y,r.width,0,0,0)<=c,u=h.distanceSquared(0,0)<=c&&h.distanceSquared(0,r.height)<=c&&h.distanceSquared(r.width,0)<=c&&h.distanceSquared(r.width,r.height)<=c;if(l||(Point.o(h),Point.o(a)),f){if(!this.Hf){const d=Point.a(),m=Point.a(),g=this.nr(),p=this.E.h,y=p.length;for(let x=y;x--;){const b=p[x];if(!b.visible&&b!==g)continue;const S=b.actualBounds,k=this.naturalBounds;if(l&&(S.x>k.width||S.y>k.height||S.x+S.width<0||S.y+S.height<0))continue;if(b.Bn()){const N=b.D;d.set(t).Ie(N),m.set(i).Ie(N)}else d.set(t),m.set(i);let P=b;const A=b instanceof Panel?b:null;(A!==null?A.SL(d,m,e,s,n,o):P.ID(d,m,n))&&(e!==null&&(P=e(P)),P!==null&&(s===null||s(P))&&o.add(P))}Point.o(d),Point.o(m)}return n?f:u}return!1}kN(t){let i=null;if(t instanceof Shape){i=t.spot1,i===Spot.Default&&(i=null);const e=t.geometry;e!==null&&i===null&&(i=e.spot1)}return i===null&&(i=Spot.TopLeft),i}PN(t){let i=null;if(t instanceof Shape){i=t.spot2,i===Spot.Default&&(i=null);const e=t.geometry;e!==null&&i===null&&(i=e.spot2)}return i===null&&(i=Spot.BottomRight),i}add(...t){for(let i=0;i<t.length;i++)this.insertAt(this.E.count,t[i]);return this}elt(t){return this.E.elt(t)}insertAt(t,i){Debug&&U.s(i,GraphObject,Panel,"insertAt"),i instanceof Part&&U.n("Cannot add a Part to a Panel: "+i+"; use a Panel instead"),(this===i||this.isContainedBy(i))&&(this===i&&U.n("Cannot make a Panel contain itself: "+this.toString()),U.n("Cannot make a Panel indirectly contain itself: "+this.toString()+" already contains "+i.toString()));const e=i.panel;if(e!==null&&e!==this&&U.n("Cannot add a GraphObject that already belongs to another Panel to this Panel: "+i.toString()+", already contained by "+e.toString()+", cannot be shared by this Panel: "+this.toString()),this.it===Panel.Grid&&!(i instanceof Shape)&&U.n("Can only add Shapes to a Grid Panel, not: "+i),this.it===Panel.Graduated&&!(i instanceof Shape||i instanceof TextBlock)&&U.n("Can only add Shapes or TextBlocks to a Graduated Panel, not: "+i),i._a(this),i.xl=null,this.itemArray!==null){const r=i.data;U.st(r)&&(this.an===null&&(this.an=new GMap),this.an.set(r,i))}const s=this.E;let n=-1;if(e===this){const r=this.lN(i);if(r!==-1){if(r===t)return this;if(r+1>=s.count&&t>=s.count)return this;s.removeAt(r),n=r}else U.n("element "+i.toString()+" has panel "+e.toString()+" but is not contained by it.")}(t<0||t>s.count)&&(t=s.count),s.insertAt(t,i),(t===0||i.isPanelMain)&&(this.rr=null),this.$o()||this.g(),i.g(!1),i.portId!==null?this.zn=!0:i instanceof Panel&&i.zn===!0&&(this.zn=!0),this.xs=null,this.isEnabledObject()||this.xS(i,!1);const o=this.part;if(o!==null){o.xp(),o.vf(),this.zn&&o instanceof Node&&(o.zn=!0),o.zn&&o instanceof Node&&(o.pe=null);const r=this.diagram;if(r!==null&&r.undoManager.isUndoingRedoing)return this;n!==-1&&o.raiseChangedEvent(4,"elements",this,i,null,n,null),o.raiseChangedEvent(3,"elements",this,null,i,null,t)}return this}get zn(){return(this.l&8388608)!==0}set zn(t){(this.l&8388608)!==0!==t&&(this.l=this.l^8388608)}sN(){return(this.l&16777216)!==0}FN(t){t?this.l|=16777216:this.l&=-16777217}M3(t){t._a(this),t.xl=null;const i=this.E,e=i.count;i.insertAt(e,t);const s=this.part;if(s!==null){s.xp(),t.portId!==null&&s instanceof Node&&(s.zn=!0);const n=this.diagram;if(n!==null&&n.undoManager.isUndoingRedoing)return;s.raiseChangedEvent(3,"elements",this,null,t,null,e)}}lN(t){const i=this.E.h,e=i.length;let s=-1;for(let n=0;n<e;n++)if(i[n]===t){s=n;break}return s}remove(t){Debug&&U.s(t,GraphObject,Panel,"remove:element");const i=this.lN(t);return i!==-1&&this.ue(i,!0),this}removeAt(t){return Debug&&U.r(t,Panel,"removeAt:idx"),t>=0&&this.ue(t,!0),this}ue(t,i){const e=this.E,s=e.elt(t);if(s.xl=null,s._a(null),this.an!==null){const o=s.data;U.st(o)&&this.an.delete(o)}e.removeAt(t),this.Ce(!1),this.g(),this.rr===s&&(this.rr=null),this.xs=null;const n=this.part;if(n!==null){n.xp(),n.vf(),n.invalidateAdornments(),n instanceof Node&&(s instanceof Panel?s.walkVisualTreeFrom(s,(r,l)=>n.uN(l,i)):n.uN(s,i));const o=this.diagram;if(o!==null&&o.undoManager.isUndoingRedoing)return;n.raiseChangedEvent(4,"elements",this,s,null,t,null)}}get Ge(){return this.z===null&&(this.z=new TablePanelSettings),this.z.Ge}get rowCount(){return this.z===null?0:this.Ge.length}getRowDefinition(t){Debug&&U.r(t,Panel,"getRowDefinition:idx"),t<0&&U.q(t,">= 0",Panel,"getRowDefinition:idx"),t=Math.round(t);const i=this.Ge;if(i[t]===void 0){const e=new RowColumnDefinition;e._a(this),e.isRow=!0,e.index=t,i[t]=e,this.raiseChangedEvent(3,"rowdefs",this,null,e,null,t)}return i[t]}removeRowDefinition(t){if(Debug&&U.r(t,Panel,"removeRowDefinition:idx"),t<0&&U.q(t,">= 0",Panel,"removeRowDefinition:idx"),this.rowCount===0)return;t=Math.round(t);const i=this.Ge,e=i[t];if(e){i[t]=void 0;let s=i.length-1;for(;s>=0&&i[s--]===void 0;)i.length--;this.raiseChangedEvent(4,"rowdefs",this,e,null,t,null),this.g()}}_L(t,i){const e=this.Ge;if(!(t<0)){if(e[t]=i instanceof RowColumnDefinition?i:void 0,!i){let s=e.length-1;for(;s>=0&&e[s--]===void 0;)e.length--}this.g()}}get qe(){return this.z===null&&(this.z=new TablePanelSettings),this.z.qe}get columnCount(){return this.z===null?0:this.qe.length}getColumnDefinition(t){Debug&&U.r(t,Panel,"getColumnDefinition:idx"),t<0&&U.q(t,">= 0",Panel,"getColumnDefinition:idx"),t=Math.round(t);const i=this.qe;if(i[t]===void 0){const e=new RowColumnDefinition;e._a(this),e.isRow=!1,e.index=t,i[t]=e,this.raiseChangedEvent(3,"coldefs",this,null,e,null,t)}return i[t]}removeColumnDefinition(t){if(Debug&&U.r(t,Panel,"removeColumnDefinition:idx"),t<0&&U.q(t,">= 0",Panel,"removeColumnDefinition:idx"),this.columnCount===0)return;t=Math.round(t);const i=this.qe,e=i[t];if(e){i[t]=void 0;let s=i.length-1;for(;s>=0&&i[s--]===void 0;)i.length--;this.raiseChangedEvent(4,"coldefs",this,e,null,t,null),this.g()}}tD(t,i){const e=this.qe;if(!(t<0)){if(e[t]=i instanceof RowColumnDefinition?i:void 0,!i){let s=e.length-1;for(;s>=0&&e[s--]===void 0;)e.length--}this.g()}}addRowColumnDefinition(t){let i=null;return t.isRow?i=this.getRowDefinition(t.index):t.isRow||(i=this.getColumnDefinition(t.index)),i&&i.aS(t),this}addRowDefinition(t,i){const e=this.getRowDefinition(t);return e&&e.aS(new RowColumnDefinition(i)),this}addColumnDefinition(t,i){const e=this.getColumnDefinition(t);return e&&e.aS(new RowColumnDefinition(i)),this}get rowSizing(){return this.z!==null?this.z._p:3}set rowSizing(t){const i=this.rowSizing;i!==t&&(Debug&&t!==3&&t!==2&&U.n("Panel.rowSizing must be ProportionalExtra or None, not: "+t),this.z===null&&(this.z=new TablePanelSettings),this.z._p=t,this.g(),this.t("rowSizing",i,t))}get columnSizing(){return this.z!==null?this.z.ty:3}set columnSizing(t){const i=this.columnSizing;i!==t&&(Debug&&t!==3&&t!==2&&U.n("Panel.columnSizing must be ProportionalExtra or None, not: "+t),this.z===null&&(this.z=new TablePanelSettings),this.z.ty=t,this.g(),this.t("columnSizing",i,t))}get topIndex(){return this.z!==null?this.z.iy:0}set topIndex(t){const i=this.topIndex;i!==t&&((!isFinite(t)||t<0)&&U.n("Panel.topIndex must be greater than zero and a real number, not: "+t),this.z===null&&(this.z=new TablePanelSettings),this.z.iy=t,this.g(),this.t("topIndex",i,t))}get leftIndex(){return this.z!==null?this.z.ey:0}set leftIndex(t){const i=this.leftIndex;i!==t&&((!isFinite(t)||t<0)&&U.n("Panel.leftIndex must be greater than zero and a real number, not: "+t),this.z===null&&(this.z=new TablePanelSettings),this.z.ey=t,this.g(),this.t("leftIndex",i,t))}findRowForLocalY(t){if(t<0||this.type!==Panel.Table||this.rowCount===0)return-1;let i=0;const e=this.Ge,s=e.length;let n=this.topIndex;for(;n<s;n++){const o=e[n];if(o!==void 0&&(i+=o.total,t<i))return n}return n}findColumnForLocalX(t){if(t<0||this.type!==Panel.Table||this.columnCount===0)return-1;let i=0;const e=this.qe,s=e.length;let n=this.leftIndex;for(;n<s;n++){const o=e[n];if(o!==void 0&&(i+=o.total,t<i))return n}return n}graduatedPointForValue(t,i){if(i===void 0&&(i=new Point(NaN,NaN)),this.type!==Panel.Graduated)return i.e(NaN,NaN),i;t=Math.min(Math.max(t,this.graduatedMin),this.graduatedMax);const e=this.findMainElement();return e.geometry.getPointAlongPath((t-this.graduatedMin)/this.graduatedRange,i),e.D.Pt(i)}graduatedValueForPoint(t){if(this.type!==Panel.Graduated)return NaN;const i=this.findMainElement();return i.D.Oe(t),i.geometry.getFractionForPoint(t)*this.graduatedRange+this.graduatedMin}get data(){return this.hi}set data(t){const i=this.hi;if(i!==t){const e=this instanceof Part&&!(this instanceof Adornment);e&&U.i(t,"object",Panel,"data"),this.Ut(),this.hi=t;const s=this.diagram;if(s!==null)if(e){s.partManager.A3(this,i,t);let n=this.adornments;for(;n.next();){const o=n.value,r=o.adornedObject;if(r!==null){const l=r.findBindingPanel();l!==null&&(o.data=l.data)}}}else{const n=this.panel;n!==null&&n.an!==null&&(i!==null&&n.an.delete(i),t!==null&&n.an.set(t,this))}if(this.t("data",i,t),s!==null&&s.undoManager.isUndoingRedoing)return;t!==null&&this.updateTargetBindings()}}get itemIndex(){return this.Zd}set itemIndex(t){const i=this.Zd;i!==t&&(Debug&&U.i(t,"number",Panel,"itemIndex"),this.Zd=t,this.t("itemIndex",i,t))}get Xs(){return this.k!==null?this.k.Xs:null}set Xs(t){this.Yi!==t&&(this.k===null&&(this.k=new GraphObjectTemplateSettings),this.k.Xs=t)}dN(){return this.Xs!==null}KD(){const t=this.Xs;return t!==null&&t.p}freezeBindings(){return this.Ut()}Ut(){let t=this.Xs;if(t===null)this.data!==null&&U.n("Template cannot have .data be non-null: "+this),this.Xs=t=new List;else if(t.p)return this;const i=new List;this.FN(!1),this.walkVisualTreeFrom(this,(n,o)=>{o.Eh();const r=o.Yi;if(r!==null){o.aN(!1);const l=r.iterator;for(;l.next();){const h=l.value;h.mode===2&&o.aN(!0);const a=h.sourceName;if(h.isToObject){a==="/"&&n.FN(!0);const c=h.FD(n,o);c!==null&&(i.add(c),c.mo===null&&(c.mo=new List),c.mo.add(h))}t.add(h)}}if(o instanceof Panel&&o.type===Panel.Table){if(o.rowCount>0){const l=o.Ge,h=l.length;for(let a=0;a<h;a++){const c=l[a];if(c!==void 0&&c.Ks!==null){const f=c.Ks.iterator;for(;f.next();){const u=f.value;u.Ve=c,u.tg=2,u.Wf=c.index,t.add(u)}}}}if(o.columnCount>0){const l=o.qe,h=l.length;for(let a=0;a<h;a++){const c=l[a];if(c!==void 0&&c.Ks!==null){const f=c.Ks.iterator;for(;f.next();){const u=f.value;u.Ve=c,u.tg=1,u.Wf=c.index,t.add(u)}}}}}});const e=i.iterator;for(;e.next();){const n=e.value;if(n.mo!==null){n.aN(!0);const o=n.mo.iterator;for(;o.next();){const r=o.value;n.Yi===null&&(n.Yi=new List),n.Yi.add(r)}}n.mo=null}let s=t.iterator;for(;s.next();){const n=s.value;let o=n.Ve;if(o!==null){n.Ve=null;const r=n.targetProperty,l=r.indexOf(".");if(l>0&&o instanceof Panel){const h=r.substring(0,l),a=r.substring(l+1),c=o.findObject(h);c!==null?(o=c,n.targetProperty=a):(U.et('Warning: unable to find GraphObject named "'+h+'" for Binding: '+n.toString()),o=null)}if(o instanceof RowColumnDefinition){const h=GSet.Cs(o.panel);n.targetId=h===void 0?-1:h,o.panel.go=n.targetId}else if(o instanceof GraphObject){const h=GSet.Cs(o);n.targetId=h===void 0?-1:h,o.go=n.targetId}else U.n("Unknown type of binding target: "+o);n.check(o)}}return t.S(),this instanceof Part&&(this.ze()&&this.ensureBounds(),Debug&&!Panel.iF&&this.walkVisualTreeFrom(this,(n,o)=>{if(o instanceof Panel&&(o.type===Panel.Auto||o.type===Panel.Spot||o.type===Panel.Graduated)&&o.elements.count<=1&&!(o instanceof Part)){let r=!1;if(o.elements.count===1&&(r=o.itemArray!==null,!r)){for(s=t.iterator;s.next();)if(s.value.targetProperty==="itemArray"){r=!0;break}}r||(U.et("Auto, Spot, or Graduated Panel should not have zero or one elements: "+o.toString()+" in "+n.toString()),Panel.iF=!0)}})),this}static iF=!1;copyTemplate(t){t===void 0&&(t=!1);const i=this.copy();return i.C3(e=>{e instanceof Panel&&(e.Xs=null,e.hi=null);const s=e.Yi;s!==null&&(e.Yi=null,s.each(o=>e.bind(o.copy())));const n=e.zs;n!==null&&(e.zs=null,n.each(o=>e.trigger(o.value.copy())))}),t&&i.Ut(),i}updateTargetBindings(t){const i=this.Xs;if(i===null)return;t===void 0&&(t="");const e=this.diagram?.model,s=i.iterator;for(;s.next();){const n=s.value,o=this.RN(n,t);if(o===null)continue;const{data:r,elt:l}=o;n.isToTheme&&this.diagram===null||l!==void 0&&n.updateTarget(l,r,void 0,e)}}T3(t){if(t===""){this.updateTargetBindings(t);return}const i=this.Xs;if(i===null)return;const e=this.diagram?.model,s=i.iterator;for(;s.next();){const n=s.value;if(n.isToData&&n.sourceProperty!==""||n.isToModel&&n.sourceProperty!==t)continue;const o=this.RN(n,"");if(o===null)continue;const{data:r,elt:l}=o;l!==void 0&&n.updateTarget(l,r,void 0,e)}}Zo(){if(this.diagram!==null)if(this.dN()){const t=this.diagram.model,i=this.Xs.iterator;for(;i.next();){const e=i.value;if(!e.isToTheme)continue;const s=this.RN(e);if(s===null)continue;const{data:n,elt:o}=s;o!==void 0&&e.updateTarget(o,n,void 0,t)}}else{const t=this.E.h,i=t.length;for(let e=0;e<i;e++)t[e].Zo()}}RN(t,i=""){const e=t.sourceProperty;if(i!==""&&e!==""&&e!==i)return null;const s=t.targetProperty;if(t.converter===null&&s==="")return null;let o=this.data;const r=t.sourceName;if(t.isToObject){if(o=this.DD(r),o===null)return null}else if(t.isToModel){const c=this.diagram;if(c===null)return null;o=c.model.modelData}let l=this;const h=t.targetId;if(h!==-1){if(l=this.np(h),l===null)return null}else t.Ve!==null&&(l=t.Ve);r==="/"?o=l.part:r==="."?o=l:r===".."&&(o=l.panel);const a=t.tg;if(a!==0){if(!(l instanceof Panel))return null;a===1?l=l.getColumnDefinition(t.Wf):a===2&&(l=l.getRowDefinition(t.Wf))}return{data:o,elt:l}}get itemArray(){return this.qh}set itemArray(t){Debug&&t!==null&&!Array.isArray(t)&&U.n("Panel.itemArray must be an Array-like object or null, not: "+t);const i=this.qh;if(i!==t||t!==null&&this.L3(t)){const e=this.diagram;if(i!==t&&(e!==null&&i!==null&&e.partManager.oC(this,e),this.qh=t,e!==null&&t!==null&&e.partManager.nC(this,e)),this.t("itemArray",i,t),e!==null&&e.undoManager.isUndoingRedoing)return;this.eF(i,t)}}findItemPanelForData(t){return t==null||this.an===null?null:(U.Xo(t,Panel,"findItemPanelForData"),this.an.get(t))}L3(t){const i=this.E.h,e=i.length,s=t.length;let n=0,o=null;for(;n<e&&(o=i[n],!(o instanceof Panel)||o.data===null);)n++,o=i[n];if(e-n!==s)return!0;if(o===null)return s>0;let r=0;for(;n<e&&r<s;){if(o=i[n],!(o instanceof Panel)||o.data!==t[r])return!0;n++,r++}return!1}Qp(){if(this.type===Panel.Spot||this.type===Panel.Auto)return Math.min(this.E.length,1);if(this.type===Panel.Link){const t=this.E,i=t.length;let e=0;for(;e<i;e++){const s=t.elt(e);if(!(s instanceof Shape)||!s.isPanelMain)return e}return e}if(this.type===Panel.Table&&this.E.length>0){const i=this.E.elt(0);if(i.isPanelMain&&i instanceof Panel&&i.bl())return 1}return 0}rebuildItemElements(){const t=this.Qp();for(;this.E.length>t;)this.ue(this.E.length-1,!1);this.eF(null,this.itemArray)}eF(t,i){const e=this.Qp(),s=i;if(s===null||s.length===0){for(;this.E.length>e;)this.ue(this.E.length-1,!1);return}if(this.E.length<=e){const n=s.length;for(let o=0;o<n;o++)this.bS(s[o],o,!0)}else{let n=e;for(let r=0;r<s.length;r++,n++){const l=s[r],h=n<this.E.length?this.E.elt(n):null;if(h instanceof Panel){if(h.data!==l){const a=this.IN(h.data,r),c=this.IN(l,r);let f=c!==a;if(!f){const u=this.ON(h.data,r,a);f=this.ON(l,r,c)!==u}f?(this.ue(n,!1),this.bS(l,r,!1)):h.data=l}}else this.bS(l,r,!1)}for(;n<this.E.length;)this.ue(n,!1);this.rr=null,this.EN(e,0),this.$o()||this.g(),this.xs=null,this.isEnabledObject()||this.xS(this,!1);const o=this.part;o!==null&&(o.xp(),o.vf(),this.zn&&o instanceof Node&&(o.zn=!0),o.zn&&o instanceof Node&&(o.pe=null))}}bS(t,i,e){if(t==null||i<0)return;const s=this.IN(t,i),n=this.ON(t,i,s);if(n!==null){n.Ut();const o=n.copy();if(o.sN()){const l=this.findBindingPanel();l!==null&&l.FN(!0)}U.st(t)&&(this.an===null&&(this.an=new GMap),this.an.set(t,o));const r=i+this.Qp();this.insertAt(r,o),e&&(o.hi=t,this.EN(r,i),o.hi=null),o.data=t}}D3(t){if(t<0)return;const i=t+this.Qp();this.ue(i,!0),this.EN(i,t)}EN(t,i){const e=this.E;let s=t,n=i;for(;s<e.length;){const o=e.elt(s);o instanceof Panel&&o.F3(s,n),s++,n++}}F3(t,i){this.type===Panel.TableRow?this.row=t:this.type===Panel.TableColumn&&(this.column=t),this.itemIndex=i}get itemTemplate(){const t=this.itemTemplateMap;if(t!==null){const i=t.get("");if(i)return i}return Panel.sF()}set itemTemplate(t){const i=this.itemTemplate;if(i!==t){U.s(t,Panel,Panel,"itemTemplate"),(t instanceof Part||t.isPanelMain)&&U.n("Panel.itemTemplate must not be a Part or be Panel.isPanelMain: "+t),this.itemTemplateMap===null&&(this.itemTemplateMap=new GMap),this.itemTemplateMap.set("",t),this.t("itemTemplate",i,t);const e=this.diagram;if(e!==null&&e.undoManager.isUndoingRedoing)return;this.rebuildItemElements()}}get itemTemplateMap(){return this.k!==null?this.k.Op:null}set itemTemplateMap(t){const i=this.itemTemplateMap;if(i!==t){U.s(t,GMap,Panel,"itemTemplateMap");const e=t.iterator;for(;e.next();){const n=e.value;Debug&&(n instanceof Part||n.isPanelMain)&&U.n("Template in Panel.itemTemplateMap must not be a Part or be Panel.isPanelMain: "+n)}this.Zt().Op=t,this.t("itemTemplateMap",i,t);const s=this.diagram;if(s!==null&&s.undoManager.isUndoingRedoing)return;this.rebuildItemElements()}}get itemCategoryProperty(){return this.k!==null?this.k.Ep:"category"}set itemCategoryProperty(t){const i=this.itemCategoryProperty;i!==t&&(typeof t!="string"&&!U.at(t)&&U.Ii(t,"string or function",Panel,"itemCategoryProperty"),this.Zt().Ep=t,this.t("itemCategoryProperty",i,t))}IN(t,i){if(t===null)return"";const e=this.itemCategoryProperty;let s="";if(U.at(e))s=e(t);else if(typeof e=="string"&&U.st(t)){if(e==="")return"";const n=this.diagram,o=n!==null?n.model:null;o?s=o.Rt(t,e):s=Model.Rt(t,e)}else return"";if(s===void 0)return"";if(typeof s=="string")return s;U.n("Panel.getCategoryForItemData found a non-string category for "+t+": "+s)}static nF=!1;static BN;static sF(){return Panel.BN||(Panel.BN=new Panel().add(new TextBlock().bind("text","",U.toString).theme("stroke","text"))),Panel.BN}ON(t,i,e){let s=null;const n=this.itemTemplateMap;return n!==null&&(s=n.get(e),s===null&&(s=n.get(""))),s===null&&(Panel.nF||(Panel.nF=!0,U.et('No item template Panel found for category "'+e+'" on '+this),U.et("  Using default item template.")),s=Panel.sF()),s}get Hf(){return(this.l&1048576)!==0}set Hf(t){const i=(this.l&1048576)!==0;i!==t&&(U.i(t,"boolean",Panel,"isAtomic"),this.l=this.l^1048576,this.t("isAtomic",i,t))}get isClipping(){return(this.l&2097152)!==0}set isClipping(t){const i=(this.l&2097152)!==0;i!==t&&(this.Ef(),Debug&&(U.i(t,"boolean",Panel,"isClipping"),t&&this.type!==Panel.Spot&&!(this instanceof Group)&&U.et("Warning: Panel.isClipping set on non-Spot Panel: "+this.toString())),this.l=this.l^2097152,this instanceof Group&&(this.mi=null),this.g(),this.t("isClipping",i,t))}get isOpposite(){return(this.l&33554432)!==0}set isOpposite(t){const i=(this.l&33554432)!==0;i!==t&&(Debug&&U.i(t,"boolean",Panel,"isOpposite"),this.l=this.l^33554432,this.g(),this.t("isOpposite",i,t))}get isEnabled(){return(this.l&4194304)!==0}set isEnabled(t){const i=(this.l&4194304)!==0;if(i!==t){Debug&&U.i(t,"boolean",Panel,"isEnabled");const e=this.panel===null||this.panel.isEnabledObject();this.l=this.l^4194304,this.t("isEnabled",i,t);const s=this.diagram;if(s!==null&&s.undoManager.isUndoingRedoing)return;e&&this.xS(this,t)}}xS(t,i){const e=t.enabledChanged;if(e!==null&&e(t,i),t instanceof Panel){const s=t.E.h,n=s.length;for(let o=0;o<n;o++){const r=s[o];i&&r instanceof Panel&&!r.isEnabled||this.xS(r,i)}}}get alignmentFocusName(){return this.So}set alignmentFocusName(t){const i=this.So;i!==t&&(Debug&&U.i(t,"string",Panel,"alignmentFocusName"),this.So=t,this.g(),this.t("alignmentFocusName",i,t))}static definePanelLayout(t,i){PanelLayout.Yn(t,i)}static isLayoutDefined(t){return PanelLayout.rs.has(t)}static Position=PanelLayout.rs.get("Position");static Horizontal=PanelLayout.rs.get("Horizontal");static Vertical=PanelLayout.rs.get("Vertical");static Spot=PanelLayout.rs.get("Spot");static Auto=PanelLayout.rs.get("Auto");static Table=PanelLayout.rs.get("Table");static Viewbox=PanelLayout.rs.get("Viewbox");static TableRow=PanelLayout.rs.get("TableRow");static TableColumn=PanelLayout.rs.get("TableColumn");static Link=PanelLayout.rs.get("Link");static Grid=PanelLayout.rs.get("Grid");static Graduated=PanelLayout.rs.get("Graduated")}Panel.definePanelLayout=Panel.definePanelLayout;class GradPanelSettings{jp;Jp;$p;Zp;Ys;hs;xs;Xe;constructor(){this.jp=0,this.Jp=100,this.$p=10,this.Zp=0,this.Ys=null,this.hs=null,this.xs=null,this.Xe=null}copy(){const t=new GradPanelSettings;return t.jp=this.jp,t.Jp=this.Jp,t.$p=this.$p,t.Zp=this.Zp,t.Ys=this.Ys,t.hs=this.hs,t.xs=this.xs,t.Xe=this.Xe,t}}class GridPanelSettings{Qd;_d;Cf;Yp;constructor(){this.Qd=Size.mT,this._d=Point.kn,this.Cf=Size.wx,this.Yp=[]}copy(){const t=new GridPanelSettings;return t.Qd=this.Qd.copy(),t._d=this._d.copy(),t.Cf=this.Cf.copy(),t.Yp=this.Yp,t}}class TablePanelSettings{Ge;qe;_p;ty;iy;ey;Kp;Gp;Up;qp;vp;Hp;Wp;Gh;constructor(){this.Ge=[],this.qe=[],this._p=3,this.ty=3,this.iy=0,this.ey=0,this.Kp=Margin.Sm,this.Gp=1,this.Up=null,this.qp=null,this.vp=1,this.Hp=null,this.Wp=null,this.Gh=null}copy(t){const i=new TablePanelSettings,e=this.Ge,s=e.length,n=i.Ge;for(let h=0;h<s;h++){const a=e[h];if(a===void 0)continue;const c=a.copy();c._a(t),n[h]=c}const o=this.qe,r=o.length,l=i.qe;for(let h=0;h<r;h++){const a=o[h];if(a===void 0)continue;const c=a.copy();c._a(t),l[h]=c}return i._p=this._p,i.ty=this.ty,i.iy=this.iy,i.ey=this.ey,i.Kp=this.Kp.T(),i.Gp=this.Gp,i.Up=this.Up,i.qp=this.qp,i.vp=this.vp,i.Hp=this.Hp,i.Wp=this.Wp,i.Gh=this.Gh,i}}var Sizing=(w=>(w[w.Default=1]="Default",w[w.None=2]="None",w[w.ProportionalExtra=3]="ProportionalExtra",w))(Sizing||{});class RowColumnDefinition{rn;ny;Vt;sc;nc;xi;wt;ig;wo;kl;eg;sg;oc;Ft;ng;Ks;Z;Mi;Ae;constructor(t){GSet.se(this),this.rn=null,this.ny=!0,this.Vt=0,this.Ae=NaN,this.sc=0,this.nc=1/0,this.xi=Spot.Default,this.Z=0,this.Mi=0,this.wt=0,this.Ks=null,this.ig=1,this.wo=1,this.kl=null,this.eg=null,this.sg=NaN,this.oc=null,this.Ft=null,this.ng=!1,t&&(Object.assign(this,t),t.column!==void 0?(this.isRow=!1,this.index=t.column):t.row!==void 0&&(this.isRow=!0,this.index=t.row))}copy(){const t=new RowColumnDefinition;return t.ny=this.ny,t.Vt=this.Vt,t.Ae=this.Ae,t.sc=this.sc,t.nc=this.nc,t.xi=this.xi,t.Z=this.Z,t.Mi=this.Mi,t.wt=this.wt,t.wo=this.wo,t.ig=this.ig,this.kl===null?t.kl=null:t.kl=this.kl.T(),t.eg=this.eg,t.sg=this.sg,t.oc=null,this.oc!==null&&(t.separatorDashArray=this.oc.slice()),t.Ft=this.Ft,t.ng=this.ng,t.Ks=this.Ks,t}aS(t){t.isRow?t.height!==void 0&&(this.height=t.height):t.width!==void 0&&(this.width=t.width),t.minimum!==void 0&&(this.minimum=t.minimum),t.maximum!==void 0&&(this.maximum=t.maximum),t.alignment!==void 0&&(this.alignment=t.alignment),t.stretch!==void 0&&(this.stretch=t.stretch),t.sizing!==void 0&&(this.sizing=t.sizing),t.separatorPadding!==void 0&&(this.separatorPadding=t.separatorPadding),t.separatorStroke!==void 0&&(this.separatorStroke=t.separatorStroke),t.separatorStrokeWidth!==void 0&&(this.separatorStrokeWidth=t.separatorStrokeWidth),t.separatorDashArray!==void 0&&(this.oc=t.separatorDashArray),t.background!==void 0&&(this.background=t.background),t.coversSeparators!==void 0&&(this.coversSeparators=t.coversSeparators),t.Ks!==void 0&&(this.Ks=t.Ks)}yi(t){t in Sizing?this.sizing=t:U.Pr(this,t)}toString(){return"RowColumnDefinition "+(this.isRow?"(Row ":"(Column ")+this.index+") #"+GSet.Cs(this)}static Default=1;static None=2;static ProportionalExtra=3;_a(t){this.rn=t}computeEffectiveSpacingTop(t){let i=0;const e=this.rn;if(this.index!==t){let n=this.separatorStroke;n===null&&e!==null&&(n=this.isRow?e.defaultRowSeparatorStroke:e.defaultColumnSeparatorStroke),n!==null&&(i=this.separatorStrokeWidth,isNaN(i)&&(e!==null?i=this.isRow?e.defaultRowSeparatorStrokeWidth:e.defaultColumnSeparatorStrokeWidth:i=0))}let s=this.kl;if(s===null)if(e!==null)s=e.defaultSeparatorPadding;else return i;return i+(this.isRow?s.top:s.left)}computeEffectiveSpacing(){let t=0;const i=this.rn;let e=0;const s=this.isRow;if(i!==null&&i.type===Panel.Table){const o=s?i.Ge.length:i.qe.length;for(let r=0;r<o;r++){const l=s?i.Ge[r]:i.qe[r];if(l!==void 0&&l.Z!==0){e=l.index;break}}}if(this.index!==e){let o=this.separatorStroke;o===null&&i!==null&&(o=s?i.defaultRowSeparatorStroke:i.defaultColumnSeparatorStroke),o!==null&&(t=this.separatorStrokeWidth,isNaN(t)&&(i!==null?t=s?i.defaultRowSeparatorStrokeWidth:i.defaultColumnSeparatorStrokeWidth:t=0))}let n=this.kl;if(n===null)if(i!==null)n=i.defaultSeparatorPadding;else return t;return t+(this.isRow?n.top+n.bottom:n.left+n.right)}t(t,i,e,s,n){const o=this.rn;if(o!==null&&(o.raiseChangedEvent(2,t,this,i,e,s,n),this.Ks!==null)){const r=o.diagram;if(r!==null&&!r.Me){const l=o.findBindingPanel();if(l!==null){const h=l.data;if(h!==null){const a=this.Ks.iterator;for(;a.next();)a.value.updateSource(this,h,t,l)}}}}}get panel(){return this.rn}get isRow(){return this.ny}set isRow(t){this.ny=t}get index(){return this.Vt}set index(t){this.Vt=t}get height(){return this.Ae}set height(t){const i=this.Ae;i!==t&&(Debug&&U.i(t,"number",RowColumnDefinition,"height"),t<0&&U.q(t,">= 0",RowColumnDefinition,"height"),this.Ae=t,this.actual=this.Z,this.panel!==null&&this.panel.g(),this.t("height",i,t))}get width(){return this.Ae}set width(t){const i=this.Ae;i!==t&&(Debug&&U.i(t,"number",RowColumnDefinition,"width"),t<0&&U.q(t,">= 0",RowColumnDefinition,"width"),this.Ae=t,this.actual=this.Z,this.panel!==null&&this.panel.g(),this.t("width",i,t))}get minimum(){return this.sc}set minimum(t){const i=this.sc;i!==t&&(Debug&&U.i(t,"number",RowColumnDefinition,"minimum"),(t<0||!isFinite(t))&&U.q(t,">= 0",RowColumnDefinition,"minimum"),this.sc=t,this.actual=this.Z,this.panel!==null&&this.panel.g(),this.t("minimum",i,t))}get maximum(){return this.nc}set maximum(t){const i=this.nc;i!==t&&(Debug&&U.i(t,"number",RowColumnDefinition,"maximum"),t<0&&U.q(t,">= 0",RowColumnDefinition,"maximum"),this.nc=t,this.actual=this.Z,this.panel!==null&&this.panel.g(),this.t("maximum",i,t))}get alignment(){return this.xi}set alignment(t){const i=this.xi;i.equals(t)||(Debug&&U.s(t,Spot,RowColumnDefinition,"alignment"),this.xi=t.T(),this.panel!==null&&this.panel.g(),this.t("alignment",i,t))}get stretch(){return this.wo}set stretch(t){const i=this.wo;i!==t&&(this.wo=t,this.panel!==null&&this.panel.g(),this.t("stretch",i,t))}get separatorPadding(){return this.kl}set separatorPadding(t){typeof t=="number"?t=new Margin(t):t!==null&&Debug&&U.s(t,Margin,RowColumnDefinition,"separatorPadding");const i=this.kl;(t===null||i===null||!i.equals(t))&&(t!==null&&(t=t.T()),this.kl=t,this.panel!==null&&this.panel.g(),this.t("separatorPadding",i,t))}get separatorStroke(){return this.eg}set separatorStroke(t){const i=this.eg;i!==t&&(t!==null&&Brush.qd(t,"RowColumnDefinition.separatorStroke"),t instanceof Brush&&t.S(),this.eg=t,this.panel!==null&&this.panel.g(),this.t("separatorStroke",i,t))}get separatorStrokeWidth(){return this.sg}set separatorStrokeWidth(t){const i=this.sg;i!==t&&(this.sg=t,this.panel!==null&&this.panel.g(),this.t("separatorStrokeWidth",i,t))}get separatorDashArray(){return this.oc}set separatorDashArray(t){const i=this.oc;if(i!==t){if(t!==null&&!Array.isArray(t)&&U.Ii(t,"Array",RowColumnDefinition,"separatorDashArray:value"),t!==null){const e=t.length;let s=0;for(let n=0;n<e;n++){const o=t[n];(typeof o!="number"||!(o>=0)||!isFinite(o))&&U.n("separatorDashArray value "+o+" at index "+n+" must be a positive number or zero."),s+=o}if(s===0){if(i===null)return;t=null}}this.oc=t,this.panel!==null&&this.panel.L(),this.t("separatorDashArray",i,t)}}get background(){return this.Ft}set background(t){const i=this.Ft;i!==t&&(t!==null&&Brush.qd(t,"RowColumnDefinition.background"),t instanceof Brush&&t.S(),this.Ft=t,this.panel!==null&&this.panel.L(),this.t("background",i,t))}get coversSeparators(){return this.ng}set coversSeparators(t){const i=this.ng;i!==t&&(U.i(t,"boolean",RowColumnDefinition,"coversSeparators"),this.ng=t,this.panel!==null&&this.panel.L(),this.t("coversSeparators",i,t))}get sizing(){return this.ig}set sizing(t){const i=this.ig;i!==t&&(Debug&&U.j(t,Sizing,"Sizing"),this.ig=t,this.panel!==null&&this.panel.g(),this.t("sizing",i,t))}mS(){if(this.sizing===1){const t=this.rn;return t===null?2:this.isRow?t.rowSizing:t.columnSizing}return this.sizing}get actual(){return this.Z}set actual(t){isNaN(this.Ae)?this.Z=Math.max(Math.min(this.nc,t),this.sc):this.Z=Math.max(Math.min(this.nc,this.Ae),this.sc)}get measured(){return this.Mi}set measured(t){this.Mi=t}get total(){return this.Z+this.computeEffectiveSpacing()}get position(){return this.wt}set position(t){this.wt=t}bind(t,i,e,s){return s!==void 0&&(GraphObject.lS||(GraphObject.lS=!0,U.et(`Warning: the fourth argument to RowColumnDefinition.bind has been deprecated -- use bindTwoWay instead.
. `+s))),this.Xf(t,i,e,s),this}bindTwoWay(t,i,e,s){const n=this.Xf(t,i,e,s);return s===void 0&&n.makeTwoWay(),this}theme(t,i,e,s,n){return this.Kh(t,i,e,s,n),this}themeData(t,i,e,s,n){return this.Kh(t,i,e,s,n).ofData(),this}themeObject(t,i,e,s,n,o){return this.Kh(t,i,e,s,n).ofObject(o),this}themeModel(t,i,e,s,n){return this.Kh(t,i,e,s,n).ofModel(),this}Xf(t,i,e,s){let n;return typeof t=="string"?n=new Binding(t,i,e,s):n=t,this.Ip(n),n}Kh(t,i,e,s,n){let o;return typeof t=="string"?o=new ThemeBinding(t,i,e,s,n):o=t,this.Ip(o),o}Ip(t){t.Ve=this;const i=this.panel;if(i!==null){const e=i.findBindingPanel();e!==null&&e.KD()&&U.n("Cannot add a Binding to a RowColumnDefinition that is already frozen: "+t+" on "+i)}this.Ks===null&&(this.Ks=new List),this.Ks.add(t)}}class Shape extends GraphObject{bt;cn;og;rc;oe;lr;er;Qt;rg;lg;J;constructor(t,i){super(),this.bt=null,this.cn=null,this.og="None",this.rc="black",this.oe="black",this.lr=1,this.er=null,this.Qt=null,this.rg=NaN,this.lg=NaN,this.J=null,typeof t=="string"?this.figure=t:t&&Object.assign(this,t),i&&Object.assign(this,i)}cloneProtected(t){super.cloneProtected(t),t.bt=this.bt,t.cn=this.cn,t.og=this.og,t.rc=this.rc,t.oe=this.oe,t.lr=this.lr,this.er!==null&&(t.er=this.er.slice()),this.Qt!==null&&(this.Qt.ki?t.Qt=this.Qt:t.Qt=this.Qt.copy()),t.rg=this.rg,t.lg=this.lg,this.J!==null&&(t.J=this.J.copy())}lc(){return this.Qt===null?this.Qt=new ShapeTemplateSettings:this.Qt.ki&&(this.Qt=this.Qt.copy()),this.Qt}Eh(){super.Eh(),this.Qt!==null&&(this.Qt.ki=!0)}yi(t){t in GeometryStretch?this.geometryStretch=t:super.yi(t)}toString(){return"Shape("+(this.figure!=="None"?this.figure:this.toArrow!=="None"?this.toArrow:this.fromArrow)+")#"+GSet.Cs(this)}R3(t,i){const e=this.pathPattern;if(e===null)return;e.yt(1/0,1/0);const s=e.measuredBounds;e.Ht(0,0,s.width,s.height);const n=this.geometry;if(n===null)return;t.save(),t.beginPath();const o=U.ct();if(n.type===1)o.push(n.startX),o.push(n.startY),o.push(n.endX),o.push(n.endY),this.hg(t,i,o,e);else if(n.type===4){const r=n.figures.iterator;for(;r.next();){const l=r.value;o.length=0,o.push(l.startX),o.push(l.startY);let h=l.startX,a=l.startY,c=h,f=a;const u=l.segments.h,d=u.length;for(let m=0;m<d;m++){const g=u[m];switch(g.type){case 1:this.hg(t,i,o,e),o.length=0,o.push(g.endX),o.push(g.endY),h=g.endX,a=g.endY,c=h,f=a;break;case 2:o.push(g.endX),o.push(g.endY),h=g.endX,a=g.endY;break;case 3:G.so(h,a,g.point1X,g.point1Y,g.point2X,g.point2Y,g.endX,g.endY,.5,o),h=g.endX,a=g.endY;break;case 4:G.Pm(h,a,g.point1X,g.point1Y,g.endX,g.endY,.5,o),h=g.endX,a=g.endY;break;case 5:{const p=g.Ko(l),y=p.length;if(y===0){o.push(g.centerX),o.push(g.centerY),h=g.centerX,a=g.centerY;break}for(let x=0;x<y;x++){const b=p[x];G.so(h,a,b[2],b[3],b[4],b[5],b[6],b[7],.5,o),h=b[6],a=b[7]}break}case 6:{const p=g.da(l,h,a),y=p.length;if(y===0){o.push(g.endX),o.push(g.endY),h=g.endX,a=g.endY;break}for(let x=0;x<y;x++){const b=p[x];G.so(h,a,b[2],b[3],b[4],b[5],b[6],b[7],.5,o),h=b[6],a=b[7]}break}default:U.n("Segment not of valid type: "+g.type)}g.isClosed&&(o.push(c),o.push(f),this.hg(t,i,o,e))}this.hg(t,i,o,e)}}else if(n.type===2)o.push(n.startX),o.push(n.startY),o.push(n.endX),o.push(n.startY),o.push(n.endX),o.push(n.endY),o.push(n.startX),o.push(n.endY),o.push(n.startX),o.push(n.startY),this.hg(t,i,o,e);else if(n.type===3){const r=new PathFigure;r.startX=n.endX,r.startY=(n.startY+n.endY)/2;const l=new PathSegment(5);l.startAngle=0,l.sweepAngle=360,l.centerX=(n.startX+n.endX)/2,l.centerY=(n.startY+n.endY)/2,l.radiusX=Math.abs(n.startX-n.endX)/2,l.radiusY=Math.abs(n.startY-n.endY)/2,r.add(l);const h=l.Ko(r),a=h.length;if(a===0)o.push(l.centerX),o.push(l.centerY);else{let c=r.startX,f=r.startY;for(let u=0;u<a;u++){const d=h[u];G.so(c,f,d[2],d[3],d[4],d[5],d[6],d[7],.5,o),c=d[6],f=d[7]}}this.hg(t,i,o,e)}U.nt(o),t.restore(),t.clearContextCache(!1)}I3(t){let i=t.measuredBounds.width;return t instanceof Shape&&(i-=t.strokeWidth),i<1&&(i=1),i}hg(t,i,e,s){const n=e.length;if(n<4)return;const o=s.measuredBounds,r=Math.max(1,o.width),l=o.height;let h=e[0],a=e[1],c=0,f=0,u=0,d=0,m=0,g=0,p=0,y=0;const x=U.ct();for(let C=2;C<n;C+=2)c=e[C],f=e[C+1],u=c-h,d=f-a,u===0&&(u=.001),m=d/u,g=Math.atan2(d,u),p=Math.sqrt(u*u+d*d),x.push([u,g,m,p]),y+=p,h=c,a=f;h=e[0],a=e[1];const b=this.I3(s);let S=b;const k=r/2;let P=k!==0,A=0,N=x[A];u=N[0],g=N[1],m=N[2],p=N[3];let M=0;for(;y>=.1;){if(M===0&&(P?(S=b,S-=k,y-=k,P=!1):S=b,S===0&&(S=1)),S>y){S=y,U.nt(x);return}S>p?(M=S-p,S=p):M=0;let C=Math.sqrt(S*S/(1+m*m));if(u<0&&(C=-C),h+=C,a+=m*C,t.translate(h,a),t.rotate(g),t.translate(-(r/2),-(l/2)),M===0&&s.Xh(t,i),t.translate(r/2,l/2),t.rotate(-g),t.translate(-h,-a),y-=S,p-=S,M!==0){if(A++,A===x.length){U.nt(x);return}N=x[A],u=N[0],g=N[1],m=N[2],p=N[3],S=M}}U.nt(x)}Xh(t,i){const e=t instanceof SVGContext;let s=this.oe;const n=this.rc;if(s===null&&n===null)return;const o=this.bt;if(o===null)return;t.commitTransform();const r=this.actualBounds,l=this.naturalBounds;n!==null&&this.Fn(t,n,!0,!1,l,r);const h=this.part;let a=this.lr;s!==null&&a===0&&h!==null&&(this.isPanelMain||h.findMainElement()===this)&&(a=h.O3()),a===0&&(s=null),s!==null&&a!==0&&(this.Fn(t,s,!1,!1,l,r),t.lineWidth=a,t.lineJoin=this.strokeJoin,t.lineCap=this.strokeCap,t.miterLimit=this.strokeMiterLimit);let c=!1;h&&i.getRenderingHint("drawShadows")&&(c=h.isShadowed),t.Sl===!1&&(c=!1);let f=!0;s!==null&&(n===null||n==="transparent")&&(f=!1);let u=!1;const d=this.strokeDashArray;if(d!==null&&(u=!0,t.enableDash(d,this.strokeDashOffset)),o.type===1)t.beginPath(),t.moveTo(o.startX,o.startY),t.lineTo(o.endX,o.endY),s!==null&&t.strokeContext(),t.endPath();else if(o.type===2){const m=o.startX,g=o.startY,p=o.endX,y=o.endY,x=Math.min(m,p),b=Math.min(g,y),S=Math.abs(p-m),k=Math.abs(y-g);t.beginPath(),t.rect(x,b,S,k),n!==null&&t.fillContext(n,!1,null),s!==null&&(f&&c&&t.shadowsOff(),t.strokeContext(),f&&c&&t.shadowsOn()),t.endPath()}else if(o.type===3){const m=o.startX,g=o.startY,p=o.endX,y=o.endY,x=Math.abs(p-m)/2,b=Math.abs(y-g)/2,S=Math.min(m,p)+x,k=Math.min(g,y)+b;t.beginPath(),t.ellipse(S,k,x,b,0,0,Math.PI*2),n!==null&&t.fillContext(n,!1,null),s!==null&&(f&&c&&t.shadowsOff(),t.strokeContext(),f&&c&&t.shadowsOn()),t.endPath()}else if(o.type===4){const m=o.figures,g=m.length;for(let p=0;p<g;p++){const y=m.h[p];e?(t.beginPath(),this.oF(t,y)):y.ts===null&&(y.ts=new Path2D,this.oF(y.ts,y));const x=y.isFilled;c?y.isShadowed?(x===!0&&n!=="transparent"&&n!==null&&t.fillContext(n,y.isEvenOdd,y.ts),s!==null&&(x&&f&&t.shadowsOff(),t.stroke(y.ts),x&&f&&t.shadowsOn())):(t.shadowsOff(),x&&n!=="transparent"&&n!==null&&t.fillContext(n,y.isEvenOdd,y.ts),s!==null&&t.stroke(y.ts),t.shadowsOn()):(x&&n!==null&&t.fillContext(n,y.isEvenOdd,y.ts),s!==null&&t.stroke(y.ts)),t.endPath(p)}}u&&t.disableDash(),this.R3(t,i)}oF(t,i){t.moveTo(i.startX,i.startY);const e=i.segments.h,s=e.length;let n=null;for(let o=0;o<s;o++){const r=e[o];switch(r.type){case 1:t.moveTo(r.endX,r.endY);break;case 2:t.lineTo(r.endX,r.endY);break;case 3:t.bezierCurveTo(r.point1X,r.point1Y,r.point2X,r.point2Y,r.endX,r.endY);break;case 4:t.quadraticCurveTo(r.point1X,r.point1Y,r.endX,r.endY);break;case 5:if(r.radiusX===r.radiusY){const l=n!==null?n.endX:i.startX,h=n!==null?n.endY:i.startY,a=Math.PI/180;t.arc(r.point1X,r.point1Y,r.radiusX,r.startAngle*a,(r.startAngle+r.sweepAngle)*a,r.sweepAngle<0,l,h)}else{const l=r.Ko(i),h=l.length;if(h===0){t.lineTo(r.centerX,r.centerY);break}for(let a=0;a<h;a++){const c=l[a];a===0&&t.lineTo(c[0],c[1]),t.bezierCurveTo(c[2],c[3],c[4],c[5],c[6],c[7])}}break;case 6:{let l=0,h=0,a;if(n!==null&&n.type===5){a=n.Ko(i);const f=a.length;if(f===0){t.lineTo(r.endX,r.endY);break}const u=a[f-1]||null;u!==null&&(l=u[6],h=u[7])}else l=n!==null?n.endX:i.startX,h=n!==null?n.endY:i.startY;a=r.da(i,l,h);const c=a.length;if(c===0){t.lineTo(r.endX,r.endY);break}for(let f=0;f<c;f++){const u=a[f];t.bezierCurveTo(u[2],u[3],u[4],u[5],u[6],u[7])}break}}r.isClosed&&t.closePath(),n=r}}Of(t,i,e){if(!super.Of(t,i,e)||this.oe===null&&this.rc===null||this.bt===null||this.pathPattern!==null)return!1;const s=this.svg.getElementsByTagName("path");return this.geometry.figures.length!==s.length?!1:(t.currentPath=this.svg,this.Xh(t,i),t.currentPath=null,!0)}Ud(t){return this.geometry!==null&&this.geometry.figures.length>1||this.pathPattern!==null?!0:super.Ud(t)}rN(t,i){if(t.nodeName!=="g")t.setAttributeNS(null,"filter",i);else{const e=t.getElementsByTagName("path");for(let s=0;s<e.length;s++)e[s].setAttributeNS(null,"filter",i)}}getDocumentPoint(t,i){if(i===void 0&&(i=new Point),t instanceof Spot){const e=t;e.isNoSpot()&&U.n("getDocumentPoint Spot must be a real, specific Spot, not: "+e.toString());const s=this.naturalBounds,n=this.strokeWidth;return i.e(e.x*(s.width+n)-n/2+s.x+e.offsetX,e.y*(s.height+n)-n/2+s.y+e.offsetY),this.nn.Pt(i),i}else return i.set(t),this.nn.Pt(i),i}getDocumentBounds(t){t===void 0&&(t=new Rect);const i=this.naturalBounds,e=this.nn,s=Rect.V(i.x,i.y,i.width,i.height),n=this.strokeWidth;s.inflate(n/2,n/2);const o=Point.V(s.x,s.y).D(e);return t.e(o.x,o.y,0,0),o.e(s.right,s.y).D(e),t.ui(o.x,o.y,0,0),o.e(s.right,s.bottom).D(e),t.ui(o.x,o.y,0,0),o.e(s.x,s.bottom).D(e),t.ui(o.x,o.y,0,0),Rect.o(s),Point.o(o),t}Bh(t,i){const e=this.geometry;if(e===null||this.fill===null&&this.stroke===null)return!1;const s=e.bounds;let n=this.strokeWidth/2;e.type===1&&!i&&(n+=2);const o=Rect.a();if(o.f(s),o.inflate(n+2,n+2),!o.containsPoint(t))return Rect.o(o),!1;const r=n+1e-4;if(e.type===1){if(this.stroke===null)return!1;const l=(e.startX-e.endX)*(t.x-e.endX)+(e.startY-e.endY)*(t.y-e.endY),h=(e.endX-e.startX)*(t.x-e.startX)+(e.endY-e.startY)*(t.y-e.startY);return l<0||h<0?!1:(Rect.o(o),G.vi(e.startX,e.startY,e.endX,e.endY,n,t.x,t.y))}else if(e.type===2){const l=e.startX,h=e.startY,a=e.endX,c=e.endY;if(o.x=Math.min(l,a),o.y=Math.min(h,c),o.width=Math.abs(a-l),o.height=Math.abs(c-h),this.fill===null){if(o.inflate(-r,-r),o.containsPoint(t))return Rect.o(o),!1;o.inflate(r,r)}this.stroke!==null&&o.inflate(n,n);const f=o.containsPoint(t);return Rect.o(o),f}else if(e.type===3){const l=e.startX,h=e.startY,a=e.endX,c=e.endY;let f=Math.min(l,a),u=Math.min(h,c);const d=Math.abs(a-l),m=Math.abs(c-h);let g=d/2,p=m/2;if(f=t.x-(f+g),u=t.y-(u+p),this.fill===null){if(g-=r,p-=r,g<=0||p<=0)return Rect.o(o),!1;if(f*f/(g*g)+u*u/(p*p)<=1)return Rect.o(o),!1;g+=r,p+=r}return this.stroke!==null&&(g+=r,p+=r),Rect.o(o),g<=0||p<=0?!1:f*f/(g*g)+u*u/(p*p)<=1}else{if(e.type===4)return Rect.o(o),this.fill===null?e.FT(t.x,t.y,n):e.nP(t,n,this.strokeWidth>1,i);U.n("Unknown Geometry type: "+e.type)}}Yd(t,i,e,s){const n=this.desiredSize,o=this.lr;t=Math.max(t,0),i=Math.max(i,0);let r;if(this.cn!==null)r=this.geometry.bounds;else{const g=this.figure;let p=Shape.VN[g];if(p===void 0){let y=G.Mn[g];typeof y=="string"&&(y=G.Mn[y]),U.at(y)?(p=y(null,100,100),Shape.VN[g]=p):U.n("Unsupported Figure: "+g)}r=p.bounds}let l=r.width,h=r.height,a=r.width,c=r.height;switch(this.ln(!0)){case 0:e=0,s=0;break;case 2:a=Math.max(t-o,0),c=Math.max(i-o,0);break;case 5:a=Math.max(t-o,0),s=0;break;case 4:e=0,c=Math.max(i-o,0);break}isFinite(n.width)&&(a=n.width),isFinite(n.height)&&(c=n.height);const u=this.maxSize,d=this.minSize;e=Math.max(e-o,d.width),s=Math.max(s-o,d.height),a=Math.min(u.width,a),c=Math.min(u.height,c),a=isFinite(a)?Math.max(e,a):Math.max(l,e),c=isFinite(c)?Math.max(s,c):Math.max(h,s);const m=this.yM();switch(m){case 0:break;case 2:l=a,h=c;break;case 6:{let g=Math.min(a/l,c/h);isFinite(g)||(g=1),l=l*g,h=h*g;break}default:U.n(m+" is not a valid geometryStretch.")}if(this.cn!==null){l===0&&(l=.001),h===0&&(h=.001);const g=this.cn.qI(l,h);Debug&&g.S(),this.bt=g}else(this.bt===null||!G.H(this.bt.Kc,t-o)||!G.H(this.bt.Uc,i-o))&&(this.bt=Shape.E3(this,l,h));r=this.bt.bounds,t===1/0||i===1/0?this.po(r.x-o/2,r.y-o/2,t===0&&l===0?0:r.width+o,i===0&&h===0?0:r.height+o):this.po(-(o/2),-(o/2),a+o,c+o),n.isReal()?(a=n.width,c=n.height,a=Math.min(u.width,a),c=Math.min(u.height,c),a=Math.max(d.width,a),c=Math.max(d.height,c),this._i.e(0,0,a,c)):this._i.f(r)}yM(){const t=this.geometryStretch;return this.cn!==null?t===1?2:t:t===1?Shape.VN[this.figure].defaultStretch:t}Vh(t,i,e,s){this.commonArrange(t,i,e,s)}getNearestIntersectionPoint(t,i,e){return this.Rf(t.x,t.y,i.x,i.y,e)}Rf(t,i,e,s,n){const o=this.D,r=1/(o.m11*o.m22-o.m12*o.m21),l=o.m22*r,h=-o.m12*r,a=-o.m21*r,c=o.m11*r,f=r*(o.m21*o.dy-o.m22*o.dx),u=r*(o.m12*o.dx-o.m11*o.dy),d=t*l+i*a+f,m=t*h+i*c+u,g=e*l+s*a+f,p=e*h+s*c+u,y=this.lr/2;let x=this.bt;x===null&&(this.yt(1/0,1/0),x=this.bt);const b=x.bounds;let S=!1;if(x.type===1)if(this.strokeWidth<=1.5)S=G.Ts(x.startX,x.startY,x.endX,x.endY,d,m,g,p,n);else{let k=0,P=0;if(x.startX===x.endX)k=y,P=0;else{const T=(x.endY-x.startY)/(x.endX-x.startX);P=y/Math.sqrt(1+T*T),k=P*T}const A=U.ct();let N=new Point;G.Ts(x.startX+k,x.startY+P,x.endX+k,x.endY+P,d,m,g,p,N)&&A.push(N),N=new Point,G.Ts(x.startX-k,x.startY-P,x.endX-k,x.endY-P,d,m,g,p,N)&&A.push(N),N=new Point,G.Ts(x.startX+k,x.startY+P,x.startX-k,x.startY-P,d,m,g,p,N)&&A.push(N),N=new Point,G.Ts(x.endX+k,x.endY+P,x.endX-k,x.endY-P,d,m,g,p,N)&&A.push(N);const M=A.length;if(M===0)return U.nt(A),!1;S=!0;let C=1/0;for(let T=0;T<M;T++){const L=A[T],D=(L.x-d)**2+(L.y-m)**2;D<C&&(C=D,n.x=L.x,n.y=L.y)}U.nt(A)}else if(x.type===2)S=G.Ul(b.x-y,b.y-y,b.x+b.width+y,b.y+b.height+y,d,m,g,p,n);else if(x.type===3){const k=Rect.V(b.x,b.y,b.width,b.height).inflate(y,y);S=this.B3(k,d,m,g,p,n),Rect.o(k)}else if(x.type===4){let k=0,P=0,A=0,N=0;const M=Point.a();let C=g-d,T=p-m,L=C*C+T*T,D=d,F=m;if(L>0&&b.contains(D,F)&&(M.x=D,M.y=F,this.containsPoint(M)))for(C!==0&&Math.abs(C)<.5?(T*=.5/C,C=.5):T!==0&&Math.abs(T)<.5&&(C*=.5/T,T=.5),D-=C,F-=T;b.contains(D,F);)D-=C,F-=T;const R=.6;n.x=g,n.y=p;for(let Y=0;Y<x.figures.count;Y++){const B=x.figures.h[Y],K=B.isFilled?D:d,z=B.isFilled?F:m,H=B.segments;k=B.startX,P=B.startY;let v=k,j=P;for(let $=0;$<H.count;$++){const q=H.h[$],Q=q.type;A=q.endX,N=q.endY;let J=!1;switch(Q){case 1:v=A,j=N;break;case 2:J=this.SS(k,P,A,N,K,z,g,p,M);break;case 3:{J=G.Mm(k,P,q.point1X,q.point1Y,q.point2X,q.point2Y,A,N,K,z,g,p,R,M);break}case 4:{J=G.Mm(k,P,k+2/3*(q.point1X-k),P+2/3*(q.point1Y-P),A+2/3*(q.point1X-A),N+2/3*(q.point1Y-N),A,N,K,z,g,p,R,M);break}case 5:case 6:{const tt=q.type===5?q.Ko(B):q.da(B,k,P),V=tt.length;if(V===0){J=this.SS(k,P,q.type===5?q.centerX:q.endX,q.type===5?q.centerY:q.endY,K,z,g,p,M);break}let E=null;for(let W=0;W<V;W++){if(E=tt[W],W===0&&this.SS(k,P,E[0],E[1],K,z,g,p,M)){const Z=this.kS(K,z,M,L,n);Z<L&&(L=Z,S=!0)}if(G.Mm(E[0],E[1],E[2],E[3],E[4],E[5],E[6],E[7],K,z,g,p,R,M)){const Z=this.kS(K,z,M,L,n);Z<L&&(L=Z,S=!0)}}A=E[6],N=E[7];break}default:U.n("Unknown Segment type: "+Q)}if(k=A,P=N,J){const tt=this.kS(K,z,M,L,n);tt<L&&(L=tt,S=!0)}if(q.isClosed&&(A=v,N=j,this.SS(k,P,A,N,K,z,g,p,M))){const tt=this.kS(K,z,M,L,n);tt<L&&(L=tt,S=!0)}}}let I=e-t,O=s-i;const X=Math.sqrt(I*I+O*O);X!==0&&(I/=X,O/=X),n.x-=I*y,n.y-=O*y,Point.o(M)}else U.n("Unknown Geometry type: "+x.type);return S?(this.D.Pt(n),!0):!1}kS(t,i,e,s,n){const o=e.x-t,r=e.y-i,l=o*o+r*r;return l<s?(n.x=e.x,n.y=e.y,l):s}SS(t,i,e,s,n,o,r,l,h){if(G.H(t,e)&&G.H(i,s)||G.H(n,r)&&G.H(o,l))return!1;let a=!1;const c=(n-r)*(i-s)-(o-l)*(t-e);if(c===0)return!1;if(h.x=((n*l-o*r)*(t-e)-(n-r)*(t*s-i*e))/c,h.y=((n*l-o*r)*(i-s)-(o-l)*(t*s-i*e))/c,(t>e?t-e:e-t)<(i>s?i-s:s-i)){const f=i<s?i:s,u=i<s?s:i;(h.y>f||G.H(h.y,f))&&(h.y<u||G.H(h.y,u))&&(a=!0)}else{const f=t<e?t:e,u=t<e?e:t;(h.x>f||G.H(h.x,f))&&(h.x<u||G.H(h.x,u))&&(a=!0)}return a}V3(t,i,e){return this.pickable===!1?!1:(e.Xc(this.D),i?this.z3(t,e):this.containedInRect(t,e))}containedInRect(t,i){if(i===void 0)return t.containsRect(this.actualBounds);let e=this.bt;e===null&&(this.yt(1/0,1/0),e=this.bt);const s=e.bounds,n=this.strokeWidth/2;let o=!1;const r=Point.a();return r.e(s.x-n,s.y-n),t.containsPoint(i.Pt(r))&&(r.e(s.x-n,s.bottom+n),t.containsPoint(i.Pt(r))&&(r.e(s.right+n,s.bottom+n),t.containsPoint(i.Pt(r))&&(r.e(s.right+n,s.y-n),t.containsPoint(i.Pt(r))&&(o=!0)))),Point.o(r),o}intersectsRect(t,i){if(this.containedInRect(t,i)||i===void 0&&(i=this.D,t.containsRect(this.actualBounds)))return!0;const e=Transform.a();e.set(i),e.Cx();const s=t.left,n=t.right,o=t.top,r=t.bottom,l=Point.a();if(l.e(s,o),e.Pt(l),this.Bh(l,!0))return Point.o(l),!0;if(l.e(n,o),e.Pt(l),this.Bh(l,!0))return Point.o(l),!0;if(l.e(s,r),e.Pt(l),this.Bh(l,!0))return Point.o(l),!0;if(l.e(n,r),e.Pt(l),this.Bh(l,!0))return Point.o(l),!0;const h=Point.a(),a=Point.a();e.set(i),e.bT(this.D),e.Cx(),h.x=n,h.y=o,h.D(e),l.x=s,l.y=o,l.D(e);let c=!1;return this.hc(l,h,a)?c=!0:(l.x=n,l.y=r,l.D(e),this.hc(l,h,a)?c=!0:(h.x=s,h.y=r,h.D(e),this.hc(l,h,a)?c=!0:(l.x=s,l.y=o,l.D(e),this.hc(l,h,a)&&(c=!0)))),Point.o(l),Transform.o(e),Point.o(h),Point.o(a),c}hc(t,i,e){if(!this.getNearestIntersectionPoint(t,i,e))return!1;const s=t.x,n=t.y,o=i.x,r=i.y,l=e.x,h=e.y;if(s===o){let a=0,c=0;return n<r?(a=n,c=r):(a=r,c=n),h>=a&&h<=c}else{let a=0,c=0;return s<o?(a=s,c=o):(a=o,c=s),l>=a&&l<=c}}z3(t,i){if(this.containedInRect(t,i)||i===void 0&&(i=this.D,t.containsRect(this.actualBounds)))return!0;const e=t.left,s=t.right,n=t.top,o=t.bottom,r=Point.a(),l=Point.a(),h=Point.a(),a=Transform.a();a.set(i),a.bT(this.D),a.Cx(),l.x=s,l.y=n,l.D(a),r.x=e,r.y=n,r.D(a);let c=!1;return this.hc(r,l,h)?c=!0:(r.x=s,r.y=o,r.D(a),this.hc(r,l,h)?c=!0:(l.x=e,l.y=o,l.D(a),this.hc(r,l,h)?c=!0:(r.x=e,r.y=n,r.D(a),this.hc(r,l,h)&&(c=!0)))),Transform.o(a),Point.o(r),Point.o(l),Point.o(h),c}ID(t,i,e){if(e&&this.fill!==null&&this.Bh(t,!0))return!0;let s=t.distanceSquaredPoint(i);const n=s;this.strokeWidth>1.5&&(s=this.strokeWidth/2+Math.sqrt(s),s*=s);let o=this.bt;if(o===null&&(this.yt(1/0,1/0),o=this.bt,o===null))return!1;if(!e){const f=o.bounds,u=f.x,d=f.y,m=f.x+f.width,g=f.y+f.height;if(Point.distanceSquared(t.x,t.y,u,d)<=s&&Point.distanceSquared(t.x,t.y,m,d)<=s&&Point.distanceSquared(t.x,t.y,u,g)<=s&&Point.distanceSquared(t.x,t.y,m,g)<=s)return!0}function r(f,u){const d=f.length;for(let m=0;m<d;m+=2)if(u.distanceSquared(f[m],f[m+1])>s)return!0;return!1}const l=o.startX,h=o.startY,a=o.endX,c=o.endY;if(o.type===1){const f=Point.distanceLineSegmentSquared(t.x,t.y,l,h,a,c),u=(a-l)*(t.x-l)+(c-h)*(t.y-h),d=(l-a)*(t.x-a)+(h-c)*(t.y-c),m=u>=0&&d>=0?s:n;return f<=m}else if(o.type===2){let f=!1;return e&&(f=Point.distanceLineSegmentSquared(t.x,t.y,l,h,l,c)<=s||Point.distanceLineSegmentSquared(t.x,t.y,l,h,a,h)<=s||Point.distanceLineSegmentSquared(t.x,t.y,a,h,a,c)<=s||Point.distanceLineSegmentSquared(t.x,t.y,l,c,a,c)<=s),f}else if(o.type===3){const f=(l+a)/2,u=(h+c)/2,d=t.x-f,m=t.y-u,g=Math.abs(a-l)/2,p=Math.abs(c-h)/2;if(g===0||p===0)return Point.distanceLineSegmentSquared(t.x,t.y,l,h,a,c)<=s;if(e){const y=G.EI(g,p,d,m);return y*y<=s}else return!(Point.distanceSquared(d,m,-g,0)>=s||Point.distanceSquared(d,m,0,-p)>=s||Point.distanceSquared(d,m,0,p)>=s||Point.distanceSquared(d,m,g,0)>=s)}else if(o.type===4){const f=o.bounds,u=f.x,d=f.y,m=f.x+f.width,g=f.y+f.height;if((t.x>m||t.x<u||t.y>g||t.y<d)&&Point.distanceLineSegmentSquared(t.x,t.y,u,d,u,g)>s&&Point.distanceLineSegmentSquared(t.x,t.y,u,d,m,d)>s&&Point.distanceLineSegmentSquared(t.x,t.y,m,g,u,g)>s&&Point.distanceLineSegmentSquared(t.x,t.y,m,g,m,d)>s)return!1;const p=Math.sqrt(s);if(e){if(this.fill===null?o.FT(t.x,t.y,p):o.nP(t,p,!0,!1))return!0}else{const y=o.figures;for(let x=0;x<y.count;x++){const b=y.h[x];let S=b.startX,k=b.startY;if(t.distanceSquared(S,k)>s)return!1;const P=b.segments.h,A=P.length;for(let N=0;N<A;N++){const M=P[N];switch(M.type){case 1:case 2:if(S=M.endX,k=M.endY,t.distanceSquared(S,k)>s)return!1;break;case 3:{const C=U.ct();G.so(S,k,M.point1X,M.point1Y,M.point2X,M.point2Y,M.endX,M.endY,.8,C);const T=r(C,t);if(U.nt(C),T||(S=M.endX,k=M.endY,t.distanceSquared(S,k)>s))return!1;break}case 4:{const C=U.ct();G.Pm(S,k,M.point1X,M.point1Y,M.endX,M.endY,.8,C);const T=r(C,t);if(U.nt(C),T||(S=M.endX,k=M.endY,t.distanceSquared(S,k)>s))return!1;break}case 5:case 6:{const C=M.type===5?M.Ko(b):M.da(b,S,k),T=C.length;if(T===0){if(S=M.type===5?M.centerX:M.endX,k=M.type===5?M.centerY:M.endY,t.distanceSquared(S,k)>s)return!1;break}let L=null;const D=U.ct();for(let F=0;F<T;F++)if(L=C[F],D.length=0,G.so(L[0],L[1],L[2],L[3],L[4],L[5],L[6],L[7],.8,D),r(D,t))return U.nt(D),!1;U.nt(D),L!==null&&(S=L[6],k=L[7]);break}default:U.n("Unknown Segment type: "+M.type)}}}return!0}}return!1}B3(t,i,e,s,n,o){if(t.width===0)return G.Ts(t.x,t.y,t.x,t.y+t.height,i,e,s,n,o);if(t.height===0)return G.Ts(t.x,t.y,t.x+t.width,t.y,i,e,s,n,o);{const r=t.width/2,l=t.height/2,h=t.x+r,a=t.y+l;let c=9999;if(i!==s&&(c=(e-n)/(i-s)),Math.abs(c)<9999){const f=e-a-c*(i-h);if(r*r*(c*c)+l*l-f*f<0)return o.x=NaN,o.y=NaN,!1;const u=Math.sqrt(r*r*(c*c)+l*l-f*f),d=(-(r*r*c*f)+r*l*u)/(l*l+r*r*(c*c))+h,m=(-(r*r*c*f)-r*l*u)/(l*l+r*r*(c*c))+h,g=c*(d-h)+f+a,p=c*(m-h)+f+a,y=(i-d)**2+(e-g)**2,x=(i-m)**2+(e-p)**2;y<x?(o.x=d,o.y=g):(o.x=m,o.y=p)}else{const f=l*l,u=r*r,d=i-h,m=f-f/u*(d*d);if(m<0)return o.x=NaN,o.y=NaN,!1;const g=Math.sqrt(m),p=a+g,y=a-g,x=Math.abs(p-e),b=Math.abs(y-e);x<b?(o.x=i,o.y=p):(o.x=i,o.y=y)}return!0}}N3(){return this.lr/2*this.strokeMiterLimit*this.getDocumentScale()}get geometry(){return this.bt!==null?this.bt:this.cn}set geometry(t){const i=this.bt,e=this.cn;if(i===t)return;t!==null?(Debug&&U.s(t,Geometry,Shape,"geometry"),this.bt=t.S(),this.cn=this.bt):(this.bt=null,this.cn=null);const s=this.part;if(s!==null&&s.vf(),this.g(),this.t("geometry",i||e,t),this.Ff()){const n=this.part;n!==null&&this.Qa(n,"geometryString")}}get geometryString(){return this.geometry===null?"":this.geometry.toString()}set geometryString(t){const i=Geometry.parse(t),e=i.normalize();this.geometry=i;const s=Point.V(-e.x,-e.y);this.position=s,Point.o(s)}get isGeometryPositioned(){return(this.l&1048576)!==0}set isGeometryPositioned(t){const i=(this.l&1048576)!==0;i!==t&&(Debug&&U.i(t,"boolean",Shape,"isGeometryPositioned"),this.l=this.l^1048576,this.g(),this.t("isGeometryPositioned",i,t))}ge(){this.bt=null}get fill(){return this.rc}set fill(t){const i=this.rc;i!==t&&(t!==null&&Brush.qd(t,"Shape.fill"),t instanceof Brush&&t.S(),this.rc=t,this.L(),this.t("fill",i,t))}get stroke(){return this.oe}set stroke(t){const i=this.oe;i!==t&&(t!==null&&Brush.qd(t,"Shape.stroke"),t instanceof Brush&&t.S(),this.oe=t,this.L(),this.t("stroke",i,t))}get strokeWidth(){return this.lr}set strokeWidth(t){const i=this.lr;if(i!==t)if(Debug&&U.r(t,Shape,"strokeWidth"),t>=0){this.lr=t,this.g();const e=this.part;e!==null&&e.vf(),this.t("strokeWidth",i,t)}else U.q(t,"value >= 0",Shape,"strokeWidth:value")}lp(){return this.lr}get strokeCap(){return this.Qt!==null?this.Qt.ly:"butt"}set strokeCap(t){const i=this.strokeCap;i!==t&&(typeof t=="string"&&(t==="butt"||t==="round"||t==="square")?(this.lc().ly=t,this.L(),this.t("strokeCap",i,t)):U.q(t,'"butt", "round", or "square"',Shape,"strokeCap"))}get strokeJoin(){return this.Qt!==null?this.Qt.hy:"miter"}set strokeJoin(t){const i=this.strokeJoin;i!==t&&(typeof t=="string"&&(t==="miter"||t==="bevel"||t==="round")?(this.lc().hy=t,this.L(),this.t("strokeJoin",i,t)):U.q(t,'"miter", "bevel", or "round"',Shape,"strokeJoin"))}get strokeMiterLimit(){return this.Qt!==null?this.Qt.cy:10}set strokeMiterLimit(t){const i=this.strokeMiterLimit;if(i!==t)if(Debug&&U.r(t,Shape,"strokeMiterLimit"),t>=1){this.lc().cy=t,this.L();const e=this.part;e!==null&&e.vf(),this.t("strokeMiterLimit",i,t)}else Debug&&U.q(t,"value >= 1",Shape,"strokeWidth:value")}get strokeDashArray(){return this.er}set strokeDashArray(t){const i=this.er;if(i!==t){if(t!==null&&!Array.isArray(t)&&U.Ii(t,"Array",Shape,"strokeDashArray:value"),t!==null){const e=t.length;let s=0;for(let n=0;n<e;n++){const o=t[n];(Debug&&typeof o!="number"||!(o>=0)||!isFinite(o))&&U.n("strokeDashArray:value "+o+" at index "+n+" must be a positive number or zero."),s+=o}if(s===0){if(i===null)return;t=null}}this.er=t,this.L(),this.t("strokeDashArray",i,t)}}get strokeDashOffset(){return this.Qt!==null?this.Qt.Uh:0}set strokeDashOffset(t){const i=this.strokeDashOffset;i!==t&&(Debug&&U.r(t,Shape,"strokeDashOffset"),t>=0&&(this.lc().Uh=t,this.L(),this.t("strokeDashOffset",i,t)))}get figure(){return this.og}set figure(t){const i=this.og;if(i!==t){Debug&&U.i(t,"string",Shape,"figure");let e=G.Mn[t];if(U.at(e)?e=t:(e=G.Mn[t.toLowerCase()],(!e||typeof e=="function")&&U.n("Unknown Shape.figure: "+t)),i!==e){const s=this.part;s!==null&&s.vf(),this.og=e,this.cn=null,this.ge(),this.g(),this.t("figure",i,e)}}}get toArrow(){return this.Kt!==null?this.Kt.fy:"None"}set toArrow(t){const i=this.toArrow;if(t===!0?t="Standard":t===!1&&(t=""),i!==t){Debug&&U.i(t,"string",Shape,"toArrow");const e=Shape.rF(t);e===null?U.n("Unknown Shape.toArrow: "+t):i!==e&&(this.Kt===null&&(this.Kt=new LinkElementSettings),this.Kt.fy=e,this.cn=null,this.ge(),this.g(),this.lF(e),this.t("toArrow",i,e))}}get fromArrow(){return this.Kt!==null?this.Kt.uy:"None"}set fromArrow(t){const i=this.fromArrow;if(t===!0?t="Standard":t===!1&&(t=""),i!==t){Debug&&U.i(t,"string",Shape,"fromArrow");const e=Shape.rF(t);e===null?U.n("Unknown Shape.fromArrow: "+t):i!==e&&(this.Kt===null&&(this.Kt=new LinkElementSettings),this.Kt.uy=e,this.cn=null,this.ge(),this.g(),this.lF(e),this.t("fromArrow",i,e))}}lF(t){const i=this.diagram;i!==null&&i.undoManager.isUndoingRedoing||(this.JE(),this.toArrow!=="None"?(this.segmentIndex=-1,this.alignmentFocus=Spot.Right):this.fromArrow!=="None"&&(this.segmentIndex=0,this.alignmentFocus=Spot.Left))}get spot1(){return this.Qt!==null?this.Qt.no:Spot.Default}set spot1(t){const i=this.spot1;i.equals(t)||(Debug&&U.s(t,Spot,Shape,"spot1"),t=t.T(),this.lc().no=t,this.g(),this.t("spot1",i,t))}get spot2(){return this.Qt!==null?this.Qt.oo:Spot.Default}set spot2(t){const i=this.spot2;i.equals(t)||(Debug&&U.s(t,Spot,Shape,"spot2"),t=t.T(),this.lc().oo=t,this.g(),this.t("spot2",i,t))}get parameter1(){return this.rg}set parameter1(t){const i=this.rg;i!==t&&(this.rg=t,this.ge(),this.g(),this.t("parameter1",i,t))}get parameter2(){return this.lg}set parameter2(t){const i=this.lg;i!==t&&(this.lg=t,this.ge(),this.g(),this.t("parameter2",i,t))}get naturalBounds(){return this._i}p3(){const t=this.desiredSize;if(!t.isReal()&&this.bt!==null){const i=this.bt.bounds;this._i.f(i)}else this._i.e(0,0,t.width,t.height)}get pathPattern(){return this.Qt!==null?this.Qt.gy:null}set pathPattern(t){const i=this.pathPattern;i!==t&&(Debug&&t!==null&&U.s(t,GraphObject,Shape,"pathPattern"),this.lc().gy=t,this.L(),this.t("pathPattern",i,t))}get geometryStretch(){return this.Qt!==null?this.Qt.my:1}set geometryStretch(t){const i=this.geometryStretch;i!==t&&(U.j(t,GeometryStretch,"GeometryStretch"),this.lc().my=t,this.g(),this.t("geometryStretch",i,t))}get interval(){return this.J!==null?this.J.jf:1}set interval(t){const i=this.interval;if(Debug&&U.r(t,Shape,"interval"),t=Math.round(t),i!==t&&t!==0&&isFinite(t)){this.J===null&&(this.J=new GradElementSettings),this.J.jf=t;const e=this.panel;if(e!==null){e.xs=null,e.g();const s=this.diagram;s!==null&&e===s.grid&&s.Ld()}this.t("interval",i,t)}}get graduatedStart(){return this.J!==null?this.J.Jf:0}set graduatedStart(t){const i=this.graduatedStart;Debug&&U.r(t,Shape,"graduatedStart"),i!==t&&(t<0?t=0:t>1&&(t=1),this.J===null&&(this.J=new GradElementSettings),this.J.Jf=t,this.g(),this.t("graduatedStart",i,t))}get graduatedEnd(){return this.J!==null?this.J.$f:1}set graduatedEnd(t){const i=this.graduatedEnd;Debug&&U.r(t,Shape,"graduatedEnd"),i!==t&&(t<0?t=0:t>1&&(t=1),this.J===null&&(this.J=new GradElementSettings),this.J.$f=t,this.g(),this.t("graduatedEnd",i,t))}get graduatedSkip(){return this.J!==null?this.J.Zf:null}set graduatedSkip(t){const i=this.graduatedSkip;i!==t&&(t!==null&&U.C(t,Shape,"graduatedSkip"),this.J===null&&(this.J=new GradElementSettings),this.J.Zf=t,this.g(),this.t("graduatedSkip",i,t))}polygonContainsRect(t){const i=this;if(!i.part||!i.part.actualBounds.containsRect(t))return!1;const e=i.geometry;if(!e)return!1;const s=t.x,n=t.y,o=t.width,r=t.height,l=Point.a();if(l.x=s,l.y=n,i.getLocalPoint(l,l),!e.containsPoint(l)||o>0&&r>0&&(l.x=s+o,l.y=n+r,i.getLocalPoint(l,l),!e.containsPoint(l))||o>0&&(l.x=s+o,l.y=n,i.getLocalPoint(l,l),!e.containsPoint(l))||r>0&&(l.x=s,l.y=n+r,i.getLocalPoint(l,l),!e.containsPoint(l))||e.type===1)return!1;if(e.type===4){const h=e.figures.iterator;for(;h.next();){const a=h.value;if(!a.isFilled)continue;l.x=a.startX,l.y=a.startY,i.getDocumentPoint(l,l);let c=l.x,f=l.y,u=c,d=f,m=c,g=f;const p=a.segments.iterator;for(;p.next();){const y=p.value;if(l.x=y.endX,l.y=y.endY,i.getDocumentPoint(l,l),m=l.x,g=l.y,y.type===1)c=m,f=g;else if(y.type!==5&&(Rect.intersectsLineSegment(s,n,o,r,u,d,m,g)||y.isClosed&&Rect.intersectsLineSegment(s,n,o,r,m,g,c,f)))return!1;u=m,d=g}}}return Point.o(l),!0}static E3(t,i,e){let n=null;if(t.toArrow!=="None")n=Shape.Kn[t.toArrow];else if(t.fromArrow!=="None")n=Shape.Kn[t.fromArrow];else{let o=G.Mn[t.figure];typeof o=="string"&&(o=G.Mn[o]),o===void 0&&U.n("Unknown Shape.figure: "+t.figure),n=o(t,i,e),n.Kc=i,n.Uc=e}if(n===null){const o=G.Mn.Rectangle;U.at(o)&&(n=o(t,i,e))}return Debug&&(n.bounds.width>i+1e-5||n.bounds.height>e+1e-5)&&U.n('Geometry made with figure "'+t.figure+'" has bounds '+n.bounds.toString()+" that are too large for the given size ("+i+","+e+"). See documentation for Shape.defineFigureGenerator."),n}static getFigureGenerators(){const t=new GMap;for(const i in G.Mn){if(i===i.toLowerCase())continue;const e=G.Mn[i];t.set(i,e)}return t.S(),t}static defineFigureGenerator(t,i){U.i(t,"string",Shape,"defineFigureGenerator:name"),typeof i=="string"?Debug&&(i===""||!G.Mn[i])&&U.n("Shape.defineFigureGenerator synonym must not be empty or None or not a defined figure name: "+i):U.C(i,Shape,"defineFigureGenerator:func");const e=t.toLowerCase();Debug&&(t===""||t===e)&&U.n("Shape.defineFigureGenerator name must not be empty or all-lower-case: "+t);const s=G.Mn;s[t]=i,s[e]=t}static isFigureDefined(t){return t in G.Mn}static getArrowheadGeometries(){const t=new GMap;for(const i in G.Nm)if(Shape.Kn[i]===void 0){const e=Geometry.parse(G.Nm[i],!1);Shape.Kn[i]=e;const s=i.toLowerCase();s!==i&&(Shape.Kn[s]=i)}for(const i in Shape.Kn){if(i===i.toLowerCase())continue;const e=Shape.Kn[i];e instanceof Geometry&&t.set(i,e)}return t.S(),t}static defineArrowheadGeometry(t,i){U.i(t,"string",Shape,"defineArrowheadGeometry:name");let e=null;typeof i=="string"?(U.i(i,"string",Shape,"defineArrowheadGeometry:pathstr"),e=Geometry.parse(i,!1)):(U.s(i,Geometry,Shape,"defineArrowheadGeometry:pathstr"),e=i);const s=t.toLowerCase();(Debug&&t===""||s==="none"||t===s)&&U.n("Shape.defineArrowheadGeometry name must not be empty or None or all-lower-case: "+t);const n=Shape.Kn;n[t]=e,n[s]=t}static isArrowheadDefined(t){return Shape.Kn.has(t)}static Kn=new PropertyCollection;static VN=new PropertyCollection;static rF(t){let i=Shape.Kn[t];if(i===void 0){const e=t.toLowerCase();if(e==="none")return"None";if(i=Shape.Kn[e],i===void 0){let s=null;for(const n in G.Nm)if(n.toLowerCase()===e){s=n;break}if(s!==null){const n=Geometry.parse(G.Nm[s],!1);return Shape.Kn[s]=n,e!==s&&(Shape.Kn[e]=s),s}}}return typeof i=="string"?i:i instanceof Geometry?t:null}}class ShapeTemplateSettings{ki;ly;hy;cy;Uh;gy;my;no;oo;constructor(){this.ki=!1,this.ly="butt",this.hy="miter",this.cy=10,this.Uh=0,this.gy=null,this.my=1,this.no=Spot.Default,this.oo=Spot.Default}copy(){const t=new ShapeTemplateSettings;return t.ly=this.ly,t.hy=this.hy,t.cy=this.cy,t.Uh=this.Uh,t.gy=this.gy,t.my=this.my,t.no=this.no.T(),t.oo=this.oo.T(),t}}var Wrap=(w=>(w[w.None=0]="None",w[w.Fit=1]="Fit",w[w.DesiredSize=2]="DesiredSize",w[w.BreakAll=3]="BreakAll",w))(Wrap||{}),TextOverflow=(w=>(w[w.Clip=0]="Clip",w[w.Ellipsis=1]="Ellipsis",w))(TextOverflow||{}),TextFormat=(w=>(w[w.Trim=0]="Trim",w[w.None=1]="None",w))(TextFormat||{});class TextBlock extends GraphObject{wi;oe;Un;Te;Pi;hp;ag;J;rt;eh;ko;Gn;He;Ci;qn;constructor(t,i){return super(),TextBlock.Xp===!1&&(TextBlock.Xp=!0,TextBlock.ws=Diagram.isUsingDOM()?new CanvasSurface(null).pi:null),this.l|=2097152,this.wi="",this.oe="black",this.Un="13px sans-serif",this.Te=0,this.Pi=0,this.hp=0,this.ag=null,this.J=null,this.rt=null,this.eh=0,this.ko=null,this.Gn=0,this.He=null,this.Ci=null,this.qn=null,typeof t=="string"?this.text=t:t&&Object.assign(this,t),i&&Object.assign(this,i),this}cloneProtected(t){super.cloneProtected(t),t.wi=this.wi,t.oe=this.oe,t.Un=this.Un,t.Te=this.Te,t.Pi=this.Pi,t.hp=this.hp,t.ag=this.ag,this.J!==null&&(t.J=this.J.copy()),this.rt!==null&&(this.rt.ki?t.rt=this.rt:t.rt=this.rt.copy()),t.eh=this.eh,t.ko=this.ko,t.Gn=this.Gn,t.He=this.He,t.Ci=this.Ci,t.qn=this.qn}Us(){return this.rt===null?this.rt=new TextBlockTemplateSettings:this.rt.ki&&(this.rt=this.rt.copy()),this.rt}Eh(){super.Eh(),this.rt!==null&&(this.rt.ki=!0)}P3(t){this.l=t.l|2048|4096,this.ri=t.opacity,this.Ft=t.background,this.ys=t.desiredSize.T(),this.minSize=t.minSize.T(),this.maxSize=t.maxSize.T(),t.Fi!==null?this.Fi=t.Fi.copy():this.Fi=null,this.lt=t.scale,this.jt=t.angle,this.stretch=t.stretch,this.wl=t.margin.T(),this.xi=t.alignment.T(),this.zd=t.alignmentFocus.T(),this.segmentFraction=t.segmentFraction,this.segmentOffset=t.segmentOffset.T(),this.segmentOrientation=t.segmentOrientation,t.mi!==null&&(this.mi=t.mi.copy()),this.shadowVisible=t.shadowVisible,this.wi=t.wi,this.oe=t.oe,this.Un=t.Un,this.J!==null&&(this.J=t.J.copy()),t.rt!==null&&(t.rt.ki?this.rt=t.rt:this.rt=t.rt.copy()),this.eh=t.eh}S3(t){if(this.wi=t.text||"",this.jt=t.labelAngle||0,this.Te=t.lineCount||0,this.X3(t.lines),t.naturalBounds&&(this._i=t.naturalBounds),t.actualBounds){const i=t.actualBounds;this.Ht(i.x,i.y,i.width,i.height)}}yi(t){t in Wrap?this.wrap=t:super.yi(t)}toString(){return this.wi.length>22?'TextBlock("'+this.wi.substring(0,20)+'"...)':'TextBlock("'+this.wi+'")'}static getEllipsis(){return TextBlock.yy}static setEllipsis(t){TextBlock.yy=t,TextBlock.PS=new PropertyCollection,TextBlock.zN=0}static getBaseline(){return TextBlock.MS}static setBaseline(t){TextBlock.MS=t}static MS=null;static getUnderline(){return TextBlock.CS}static setUnderline(t){TextBlock.CS=t}static CS=null;static None=0;static WrapFit=1;static WrapDesiredSize=2;static WrapBreakAll=3;static OverflowClip=0;static OverflowEllipsis=1;static FormatTrim=0;static FormatNone=1;g(){super.g(),this.os(!0)}get font(){return this.Un}set font(t){const i=this.Un;i!==t&&(Debug&&(U.i(t,"string",TextBlock,"font"),TextBlock.isValidFont(t)||U.n('Not a valid font: "'+t+'"')),this.Un=t,this.ko=null,this.g(),this.t("font",i,t))}static isValidFont(t){return root.CSS?root.CSS.supports("font",t):!0}get text(){return this.wi}set text(t){const i=this.wi;t!=null?t=t.toString():t="",i!==t&&(this.wi=t,this.g(),this.t("text",i,t))}get textAlign(){return this.rt!==null?this.rt.wy:"start"}set textAlign(t){const i=this.textAlign;i!==t&&(Debug&&U.i(t,"string",TextBlock,"textAlign"),t==="start"||t==="end"||t==="left"||t==="right"||t==="center"?(this.Us().wy=t,this.L(),this.t("textAlign",i,t)):Debug&&U.q(t,'"start", "end", "left", "right", or "center"',TextBlock,"textAlign"))}get flip(){return this.rt!==null?this.rt.Po:0}set flip(t){const i=this.flip;i!==t&&(U.j(t,Flip,"Flip"),this.Us().Po=t,this.L(),this.t("flip",i,t))}get verticalAlignment(){return this.rt!==null?this.rt.Pl:Spot.Top}set verticalAlignment(t){const i=this.verticalAlignment;i.equals(t)||(Debug&&(U.s(t,Spot,TextBlock,"verticalAlignment"),t.isNoSpot()&&U.n("TextBlock.verticalAlignment for "+this+" must be a real Spot, not:"+t)),t=t.T(),this.Us().Pl=t,this.zf(),this.t("verticalAlignment",i,t))}get naturalBounds(){if(!this._i.isReal()){const t=Size.a();this.XN(this.wi,999999,t);let i=t.width;Size.o(t);let e=this.hF(i);const s=this.desiredSize;isNaN(s.width)||(i=s.width),isNaN(s.height)||(e=s.height),this._i.io(i,e)}return this._i}get isMultiline(){return(this.l&2097152)!==0}set isMultiline(t){const i=(this.l&2097152)!==0;i!==t&&(Debug&&U.i(t,"boolean",TextBlock,"isMultiline"),this.l=this.l^2097152,this.g(),this.t("isMultiline",i,t))}get isUnderline(){return(this.l&4194304)!==0}set isUnderline(t){const i=(this.l&4194304)!==0;i!==t&&(Debug&&U.i(t,"boolean",TextBlock,"isUnderline"),this.l=this.l^4194304,this.os(!0),this.L(),this.t("isUnderline",i,t))}get isStrikethrough(){return(this.l&8388608)!==0}set isStrikethrough(t){const i=(this.l&8388608)!==0;i!==t&&(Debug&&U.i(t,"boolean",TextBlock,"isStrikethrough"),this.l=this.l^8388608,this.os(!0),this.L(),this.t("isStrikethrough",i,t))}get wrap(){return this.rt!==null?this.rt.xy:2}set wrap(t){const i=this.wrap;i!==t&&(Debug&&U.j(t,Wrap,"Wrap"),this.Us().xy=t,this.g(),this.t("wrap",i,t))}get overflow(){return this.rt!==null?this.rt.Sy:0}set overflow(t){const i=this.overflow;i!==t&&(Debug&&U.j(t,TextOverflow,"Overflow"),this.Us().Sy=t,this.g(),this.t("overflow",i,t))}get isOverflowed(){return(this.l&16777216)!==0}YN(t){t?this.l|=16777216:this.l&=-16777217}get stroke(){return this.oe}set stroke(t){const i=this.oe;i!==t&&(t!==null&&Brush.qd(t,"TextBlock.stroke"),t instanceof Brush&&t.S(),this.oe=t,typeof t!="string"&&this.Ef(),this.L(),this.t("stroke",i,t))}get lineCount(){return this.Te}get lineHeight(){return this.ky()}get editable(){return(this.l&1048576)!==0}set editable(t){const i=(this.l&1048576)!==0;i!==t&&(Debug&&U.i(t,"boolean",TextBlock,"editable"),this.l=this.l^1048576,this.t("editable",i,t))}get AN(){return(this.l&33554432)!==0}set AN(t){this.l=this.l^33554432}get textEditor(){return this.rt!==null?this.rt.Py:null}set textEditor(t){const i=this.textEditor;i!==t&&(Debug&&!(t instanceof HTMLInfo)&&U.n("TextBlock.textEditor must be an HTMLInfo."),this.Us().Py=t,this.t("textEditor",i,t))}get errorFunction(){return this.rt!==null?this.rt.bs:null}set errorFunction(t){const i=this.errorFunction;i!==t&&(t!==null&&U.C(t,TextBlock,"errorFunction"),this.Us().bs=t,this.t("errorFunction",i,t))}get interval(){return this.J!==null?this.J.jf:1}set interval(t){const i=this.interval;if(Debug&&U.r(t,TextBlock,"interval"),t=Math.round(t),i!==t&&t!==0&&isFinite(t)){this.J===null&&(this.J=new GradElementSettings),this.J.jf=t,this.g();const e=this.panel;e!==null&&(e.xs=null),this.t("interval",i,t)}}get graduatedStart(){return this.J!==null?this.J.Jf:0}set graduatedStart(t){const i=this.graduatedStart;Debug&&U.r(t,TextBlock,"graduatedStart"),i!==t&&(t<0?t=0:t>1&&(t=1),this.J===null&&(this.J=new GradElementSettings),this.J.Jf=t,this.g(),this.t("graduatedStart",i,t))}get graduatedEnd(){return this.J!==null?this.J.$f:1}set graduatedEnd(t){const i=this.graduatedEnd;Debug&&U.r(t,TextBlock,"graduatedEnd"),i!==t&&(t<0?t=0:t>1&&(t=1),this.J===null&&(this.J=new GradElementSettings),this.J.$f=t,this.g(),this.t("graduatedEnd",i,t))}get graduatedFunction(){return this.J!==null?this.J.My:null}set graduatedFunction(t){const i=this.graduatedFunction;i!==t&&(t!==null&&U.C(t,TextBlock,"graduatedFunction"),this.J===null&&(this.J=new GradElementSettings),this.J.My=t,this.g(),this.t("graduatedFunction",i,t))}get graduatedSkip(){return this.J!==null?this.J.Zf:null}set graduatedSkip(t){const i=this.graduatedSkip;i!==t&&(t!==null&&U.C(t,TextBlock,"graduatedSkip"),this.J===null&&(this.J=new GradElementSettings),this.J.Zf=t,this.g(),this.t("graduatedSkip",i,t))}Xh(t,i){if(this.oe===null||this.wi.length===0||this.Un===null)return;const e=this.naturalBounds,s=this.actualBounds,n=e.width,o=e.height,r=this.ky();let l=t.textAlign=this.textAlign;const h=i.Pd;l==="start"?l=h?"right":"left":l==="end"&&(l=h?"left":"right");const a=this.isUnderline,c=this.isStrikethrough;this.Fn(t,this.oe,!0,!1,e,s),(a||c)&&this.Fn(t,this.oe,!1,!1,e,s);const f=0;let u=0;const d=n;let m=!1;i.ei===t&&!(i.ei instanceof SVGContext)&&!this.AN&&i.getRenderingHint("textGreeking")===!0&&r*this.Ha*i.scale<3&&(m=!0);const g=this.spacingAbove,p=this.spacingBelow;switch(this.flip){case 0:break;case 2:t.translate(n,0),t.scale(-1,1);break;case 1:t.translate(0,o),t.scale(1,-1);break;case 3:t.translate(n,o),t.scale(-1,-1);break}t.commitTransform();const y=this.Te,b=(g+r+p)*y;if(o>b){const S=this.verticalAlignment;u=S.y*o-S.y*b+S.offsetY}if(TextBlock.NS&&(t.letterSpacing=this.letterSpacing,t.wordSpacing=this.wordSpacing),y===1&&this.qn!==null){let S=this.Pi;S>d&&(S=d),u+=g,this.aF(this.qn,t,f,u,d,r,S,m,l,a,c)}else if(this.He!==null&&this.Ci!==null)for(let S=0;S<y;S++){let k=this.He[S];k>d&&(k=d),u+=g,this.aF(this.Ci[S],t,f,u,d,r,k,m,l,a,c),u+=r+p}switch(this.flip){case 0:break;case 2:t.scale(-1,1),t.translate(-n,0);break;case 1:t.scale(1,-1),t.translate(0,-o);break;case 3:t.scale(-1,-1),t.translate(-n,-o);break}}aF(t,i,e,s,n,o,r,l,h,a,c){let f=0;if(l){h==="left"?f=0:h==="right"?f=n-r:h==="center"&&(f=(n-r)/2);const m=i.globalAlpha;i.globalAlpha=m/2,i.fillRect(e+f,s+o/4,r,o/2),i.globalAlpha=m;return}h==="left"?f=0:h==="right"?f=n:h==="center"&&(f=n/2);const u=TextBlock.MS!==null?TextBlock.MS(this,o):o*.75;i.fillText(t,e+f,s+u);let d=o/20|0;if(d===0&&(d=1),h==="right"?f-=r:h==="center"&&(f-=r/2),a){const m=TextBlock.CS!==null?TextBlock.CS(this,o):o*.8;this.cF(e+f,s+m,e+f+r,s+m,d,i),i instanceof SVGContext&&i.lastCreatedElement.classList.add("gojs-td")}if(c){let m=s+o-o/2.2|0;d%2!==0&&(m+=.5),this.cF(e+f,m,e+f+r,m,d,i),i instanceof SVGContext&&i.lastCreatedElement.classList.add("gojs-td")}}cF(t,i,e,s,n,o){o.beginPath(),o.lineWidth=n,o.moveTo(t,i),o.lineTo(e,s),o.stroke(),o.endPath()}Of(t,i,e){if(!super.Of(t,i,e))return!1;if(this.Fn(t,this.oe,!0,!1,this.naturalBounds,this.actualBounds),e){if(this.svg.getElementsByTagName("text").length===0)return!0;const n=this.svg.getElementsByClassName("gojs-td");for(let o=0;o<n.length;o++)t.setFillOrStrokeInPlace(n[o],!1)}else this.Y3(this.svg,this.Ci?this.Ci[0]:this.text,t);return!0}Y3(t,i,e){t.innerHTML=i,e.setFillOrStrokeInPlace(t,!0)}Ud(t){return this.lineCount>1||this.isUnderline||this.isStrikethrough?!0:super.Ud(t)}rN(t,i){if(t.nodeName!=="g")t.setAttributeNS(null,"filter",i);else{const e=t.getElementsByTagName("text");for(let s=0;s<e.length;s++)e[s].setAttributeNS(null,"filter",i)}}K3(){this.Gn=0,this.Pi=0,this.ko=null,this.He=null,this.Ci=null,this.qn=null}Yd(t,i,e,s){const n=this.Te;this.eh=t,this.YN(!1);const o=this.Un;TextBlock.ws!==null&&(TextBlock.fF!==o&&(TextBlock.ws.font=o,TextBlock.fF=o),TextBlock.NS&&(TextBlock.ws.letterSpacing=this.letterSpacing,TextBlock.ws.wordSpacing=this.wordSpacing)),this.K3();let r=0,l=0;isNaN(this.desiredSize.width)?(r=this.U3(),r=Math.min(r,t/this.scale)):r=this.desiredSize.width,this.panel!==null&&(r=Math.min(r,this.panel.maxSize.width)),l=this.hF(r),isNaN(this.desiredSize.height)?l=Math.min(l,i/this.scale):l=this.desiredSize.height,this.G3(t,l),(this.wrap===1||isNaN(this.desiredSize.width))&&(r=isNaN(t)?this.Pi:Math.min(t,this.Pi)),r=Math.max(e,r),l=Math.max(s,l),this._i.io(r,l),this.po(0,0,r,l),this.svg!==null&&n!==this.Te&&this.os(!0)}Vh(t,i,e,s){this.commonArrange(t,i,e,s)}Hn(t,i){this.qn===null?(this.qn=t,this.Pi=i):((this.Ci===null||this.He===null)&&(this.Ci=[],this.He=[],this.Ci.push(this.qn),this.He.push(this.Pi)),this.Ci.push(t),this.He.push(i),this.Ci.length>this.maxLines&&(this.l|=16777216))}XN(t,i,e){const s=this.formatting===0;s&&(t=t.trim());let n=0,o=0,r=0;const l=this.Un,h=this.spacingAbove+this.spacingBelow,a=Math.max(0,this.ky()+h),c=this.overflow===1?this.uF(l):0;if(this.Te>=this.maxLines){e!==void 0&&e.e(0,a);return}let f=t;if(this.wrap===0){if(this.Gn=1,o=this.getStringWidth(t),c===0||o<=i){this.Pi=Math.max(this.Pi,o),this.Hn(t,this.Pi),e!==void 0&&e.e(o,a);return}let d=this.cg(f);f=f.substring(d.length);let m=this.cg(f);for(o=this.getStringWidth(d+m),r=0;m.length>0&&o<=i;){d+=m,f=f.substring(m.length),m=this.cg(f),r=o;let g=d+m;s&&(g=g.trim()),o=this.getStringWidth(g)}for(s&&(m=m.trim()),d+=m,i=Math.max(1,i-c);this.getStringWidth(d)>i&&d.length>1;)d=d.substring(0,d.length-1);this.YN(!0),d+=TextBlock.yy,r=this.getStringWidth(d),this.Pi=r,this.Hn(d,r),e!==void 0&&e.e(r,a);return}let u=0;for(f.length===0&&(u=1,this.Hn(f,0));f.length>0;){let d=this.cg(f);for(f=f.substring(d.length);this.getStringWidth(d)>i;){let p=1;for(o=this.getStringWidth(d.substring(0,p)),r=0;o<=i;)p++,r=o,o=this.getStringWidth(d.substring(0,p));let y=0;p===1?(y=o,n=Math.max(n,o)):(y=r,n=Math.max(n,r)),p--,p<1&&(p=1);const x=d.substring(0,p);if(this.Hn(x,y),u++,d=d.substring(p),this.Te+u>this.maxLines)break}let m=this.cg(f);for(o=this.getStringWidth(d+m),r=0;m.length>0&&o<=i;){d+=m,f=f.substring(m.length),m=this.cg(f),r=o;let p=d+m;s&&(p=p.trim()),o=this.getStringWidth(p)}if(s&&(d=d.trim()),d==="")continue;d[d.length-1]==="\xAD"&&(d=d.substring(0,d.length-1)+"\u2010");let g=0;if(m.length===0?(g=o,n=Math.max(n,o)):(r=this.getStringWidth(d),g=r,n=Math.max(n,r)),this.Hn(d,g),u++,this.Te+u>this.maxLines)break}this.Gn=Math.min(this.maxLines-this.Te,u),this.Pi=Math.max(this.Pi,n),e!==void 0&&e.e(this.Pi,a*this.Gn)}G3(t,i){if(this.Pi===0||this.He===null||this.Ci===null||this.overflow!==1)return;const e=this.Un,s=this.overflow===1?this.uF(e):0,n=this.spacingAbove+this.spacingBelow,o=Math.max(0,this.ky()+n),r=Math.min(this.maxLines-1,Math.max(Math.floor(i/o+.01)-1,0));if(r+1>=this.Ci.length)return;this.YN(!0);let l=this.Ci[r];const h=Math.max(1,t-s);for(;this.getStringWidth(l)>h&&l.length>1;)l=l.substring(0,l.length-1);l+=TextBlock.yy;const a=this.getStringWidth(l);this.Ci[r]=l,this.Ci=this.Ci.slice(0,r+1),this.He[r]=a,this.He=this.He.slice(0,r+1),this.Gn=this.Ci.length,this.Pi=Math.max(this.Pi,a),this.Te=this.Gn,this.Te===1&&(this.qn=this.Ci[0])}cg(t){if(this.wrap===3)return t.substring(0,1);let i=t.length,e=0;const s=TextBlock.q3;for(;e<i&&!s.test(t.charAt(e));)e++;for(this.formatting===1&&(i=Math.min(i,e+1));e<i&&s.test(t.charAt(e));)e++;return e>=t.length?t:t.substring(0,e)}getStringWidth(t){return TextBlock.ws===null?t.length*8:TextBlock.ws.measureText(t).width}ky(){if(this.ko!==null)return this.ko;const t=this.Un;let i=0;if(TextBlock.ws===null)return i=16,this.ko=i,i;if(TextBlock.KN[t]!==void 0&&TextBlock.dF<5e3)i=TextBlock.KN[t];else{TextBlock.ws.letterSpacing="0px";const e=TextBlock.ws.measureText("M");TextBlock.ws.letterSpacing=this.letterSpacing,i=e.width*1.3,TextBlock.KN[t]=i,TextBlock.dF++}return this.ko=i,i}uF(t){if(TextBlock.ws===null)return 6;let i=0;return TextBlock.PS[t]!==void 0&&TextBlock.zN<5e3?i=TextBlock.PS[t]:(i=TextBlock.ws.measureText(TextBlock.yy).width,TextBlock.PS[t]=i,TextBlock.zN++),i}AS(t,i){return t.indexOf(`
`,i)}hF(t){let i=this.wi.replace(/\r\n/g,`
`).replace(/\r/g,`
`);const e=this.spacingAbove+this.spacingBelow,s=Math.max(0,this.ky()+e);if(i.length===0)return this.Pi=0,this.Te=1,s;if(!this.isMultiline){const h=this.AS(i,0);h>=0&&(i=i.substring(0,h))}let n=0;this.Te=0;let o=0,r=-1,l=!1;for(;!l;){if(r=this.AS(i,o),r===-1&&(r=i.length,l=!0),o<=r){const h=i.substring(o,r);if(this.wrap!==0){this.Gn=0;const a=Size.a();this.XN(h,t,a),n+=a.height,Size.o(a),this.Te+=this.Gn}else this.XN(h,t),n+=s,this.Te++;this.Te===this.maxLines&&(l=!0)}o=r+1}return this.hp=n,n}U3(){let t=this.wi.replace(/\r\n/g,`
`).replace(/\r/g,`
`);if(t.length===0)return 8;if(this.isMultiline){let i=0,e=0,s=!1;for(;!s;){let n=this.AS(t,e);n===-1&&(n=t.length,s=!0);let o=t.substring(e,n);this.formatting===0&&(o=o.trim()),i=Math.max(i,this.getStringWidth(o)),e=n+1}return i}else{const i=this.AS(t,0);return i>=0&&(t=t.substring(0,i)),this.getStringWidth(t)}}get textValidation(){return this.rt!==null?this.rt.ih:null}set textValidation(t){const i=this.textValidation;i!==t&&(t!==null&&U.C(t,TextBlock,"textValidation"),this.Us().ih=t,this.t("textValidation",i,t))}get textEdited(){return this.rt!==null?this.rt.Cy:null}set textEdited(t){const i=this.textEdited;i!==t&&(t!==null&&U.C(t,TextBlock,"textEdited"),this.Us().Cy=t,this.t("textEdited",i,t))}get spacingAbove(){return this.rt!==null?this.rt.Ny:0}set spacingAbove(t){const i=this.spacingAbove;i!==t&&(Debug&&U.i(t,"number",TextBlock,"spacingAbove"),this.Us().Ny=t,this.g(),this.t("spacingAbove",i,t))}get spacingBelow(){return this.rt!==null?this.rt.Ay:0}set spacingBelow(t){const i=this.spacingBelow;i!==t&&(Debug&&U.i(t,"number",TextBlock,"spacingBelow"),this.Us().Ay=t,this.g(),this.t("spacingBelow",i,t))}get letterSpacing(){return this.rt!==null?this.rt.Ty:"0px"}set letterSpacing(t){const i=this.letterSpacing;i!==t&&(TextBlock.NS=!0,Debug&&U.i(t,"string",TextBlock,"letterSpacing"),this.Us().Ty=t,this.g(),this.t("letterSpacing",i,t))}get wordSpacing(){return this.rt!==null?this.rt.Ly:"0px"}set wordSpacing(t){const i=this.wordSpacing;i!==t&&(TextBlock.NS=!0,Debug&&U.i(t,"string",TextBlock,"wordSpacing"),this.Us().Ly=t,this.g(),this.t("wordSpacing",i,t))}get formatting(){return this.rt!==null?this.rt.Dy:0}set formatting(t){const i=this.formatting;i!==t&&(U.j(t,TextFormat,"formatting"),this.Us().Dy=t,this.g(),this.t("formatting",i,t))}get maxLines(){return this.rt!==null?this.rt.Fy:1/0}set maxLines(t){const i=this.maxLines;i!==t&&(Debug&&U.i(t,"number",TextBlock,"maxLines"),t=Math.floor(t),t<=0&&U.q(t,"> 0",TextBlock,"maxLines"),this.Us().Fy=t,this.g(),this.t("maxLines",i,t))}getMetrics(){return[this.Pi,this.eh,this.ko,this.Gn,this.He,this.Ci,this.qn||""]}X3(t){t!==void 0&&(this.Pi=t[0],this.eh=t[1],this.ko=t[2],this.Gn=t[3],this.He=t[4],this.Ci=t[5],this.qn=t[6])}get metrics(){return{arrSize:this.He!==null?this.He:[this.Pi],arrText:this.Ci!==null?this.Ci:[this.qn],maxLineWidth:this.Pi,fontHeight:this.ko}}get choices(){return this.ag}set choices(t){const i=this.ag;i!==t&&(Debug&&t!==null&&!Array.isArray(t)&&U.Ii(t,"Array",TextBlock,"choices:value"),this.ag=t,this.t("choices",i,t))}static q3=new RegExp("[ \u200B\xAD]");static KN=new PropertyCollection;static dF=0;static PS=new PropertyCollection;static zN=0;static yy="...";static fF="";static ws=null;static Xp=!1;static NS=!1}class TextBlockTemplateSettings{ki;bs;Po;Dy;Fy;Sy;Ny;Ay;wy;Cy;Py;ih;Pl;xy;Ty;Ly;constructor(){this.ki=!1,this.bs=null,this.Po=0,this.Dy=0,this.Fy=1/0,this.Sy=0,this.Ny=0,this.Ay=0,this.wy="start",this.Cy=null,this.Py=null,this.ih=null,this.Pl=Spot.Top,this.xy=2,this.Ty="0px",this.Ly="0px"}copy(){const t=new TextBlockTemplateSettings;return t.bs=this.bs,t.Po=this.Po,t.Dy=this.Dy,t.Fy=this.Fy,t.Sy=this.Sy,t.Ny=this.Ny,t.Ay=this.Ay,t.wy=this.wy,t.Cy=this.Cy,t.Py=this.Py,t.ih=this.ih,t.Pl=this.Pl,t.xy=this.xy,t.Ty=this.Ty,t.Ly=this.Ly,t}}class GradElementSettings{jf;Jf;$f;My;Zf;constructor(){this.jf=1,this.Jf=0,this.$f=1,this.My=null,this.Zf=null}copy(){const t=new GradElementSettings;return t.jf=this.jf,t.Jf=this.Jf,t.$f=this.$f,t.My=this.My,t.Zf=this.Zf,t}}var ImageStretch=(w=>(w[w.None=0]="None",w[w.Fill=2]="Fill",w[w.Uniform=6]="Uniform",w[w.UniformToFill=7]="UniformToFill",w))(ImageStretch||{});class Picture extends GraphObject{Ml;fn;Cl;Qf;bs;Nl;_f;Po;tu;iu;nS;constructor(t,i){super(),this.l|=2097152,this.Ml=null,this.fn="",this.Cl=Rect.TI,this.Qf=2,this.bs=null,this.Nl=null,this._f=Spot.Center,this.Po=0,this.tu=null,this.iu=null,this.nS=null,typeof t=="string"?this.source=t:t&&Object.assign(this,t),i&&Object.assign(this,i)}cloneProtected(t){super.cloneProtected(t),t.fn=this.fn,t.element=this.Ml,t.Cl=this.Cl.T(),t.Qf=this.Qf,t.Po=this.Po,t.bs=this.bs,t.Nl=this.Nl,t._f=this._f.T(),t.iu=this.iu}yi(t){t in ImageStretch?this.imageStretch=t:super.yi(t)}toString(){return"Picture("+this.source+")#"+GSet.Cs(this)}get eu(){return(this.l&1048576)!==0}set eu(t){this.eu!==t&&(this.l=this.l^1048576)}get ac(){return(this.l&2097152)!==0}set ac(t){this.ac!==t&&(this.l=this.l^2097152)}get En(){return(this.l&4194304)!==0}set En(t){this.En!==t&&(this.l=this.l^4194304)}static clearCache(t){t===void 0&&(t=""),U.i(t,"string",Picture,"clearCache:url"),t!==""?Picture.Ry[t]&&(delete Picture.Ry[t],Picture.TS--):(Picture.Ry=new PropertyCollection,Picture.TS=0)}static sD(t,i){i.gF||(i.LS=e=>{Picture.H3(i,e),t.desiredSize.isReal()||(t.Ce(!1),t.g())},i.DS=e=>Picture.v3(i,e),i.addEventListener("load",i.LS),i.addEventListener("error",i.DS),i.gF=!0)}static cE(t){t.LS&&t.removeEventListener("load",t.LS),t.DS&&t.removeEventListener("error",t.DS),delete t.LS,delete t.DS,t.gF=!1}get element(){return this.Ml}set element(t){const i=this.Ml;if(this.os(!0),i!==t){const e=Diagram.isUsingDOM();let s=!1;e&&(this.eu=t instanceof HTMLCanvasElement,s=t instanceof HTMLImageElement,t!==null&&!(s||t instanceof HTMLVideoElement||this.eu)&&U.n("Picture.element must be an instance of Image, Canvas, or Video, not: "+t));const n=this.diagram;n!==null&&n.uC(this),this.Ml=t,t!==null&&s&&t.Ke===void 0&&(t.Ke=new GSet),n!==null&&s&&n.fC(this),this.t("element",i,t),this.L()}}hE(){const t=this.Ml;if(t===null)return;const i=this.desiredSize.isReal();(this.eu||t.complete===!0)&&(t.H0&&(t.Iy instanceof Event&&this.bs!==null?this.bs(this,t.Iy):t.En===!0&&!t.Iy&&this.Nl!==null&&t.UN&&this.Nl(this,t.UN)),t.En=!0),t.En&&i&&this.diagram!==null&&this.diagram.kd.add(this)}W3(){if(this.Ml===null){this.tu=!1;return}const t=new CanvasSurface(null).pi;try{t.drawImage(this.Ml,0,0)}catch(i){Debug&&this.ac&&U.et(i.toString()),this.ac=!1}try{t.getImageData(0,0,1,1).data[3]&&(this.tu=!1),this.tu=!1}catch{this.tu=!0}}get source(){return this.fn}set source(t){const i=this.fn;if(i!==t){this.os(!0),U.i(t,"string",Picture,"source"),this.fn=t;let e=Picture.Ry,s=null;if(e[t]!==void 0)s=e[t];else if(t!==""){Picture.TS>30&&(Picture.clearCache(),e=Picture.Ry),s=U.Re("img"),s.H0=!0,Picture.sD(this,s);const n=this.iu;n!==null&&(s.crossOrigin=n(this)),s.src=t,e[t]=s,Picture.TS++}this.element=s,s!==null&&s.__goCache===void 0&&(s.__goCache=new PictureCacheArray),this.g(),this.L(),this.t("source",i,t)}}static H3(t,i){t.En=!0,t.Iy=!1;let e;const s=t.Ke.copy();if(s==null)return;const n=s.iterator;for(;n.next();){const o=n.value;o.L();const r=t.getAttribute("src")||"",l=o.kh.get(r);if(l===null)continue;const h=l.length;for(let a=0;a<h;a++)e=l[a],e.desiredSize.isReal()||o.kd.add(e),e.os(!0),o.requestUpdate(),t.H0&&(t.UN===void 0&&(t.UN=i),e.Nl!==null&&e.Nl(e,i))}t.Ke.clear()}static v3(t,i){t.Iy=i;let e;const s=t.Ke.copy();if(s==null)return;const n=s.iterator;for(;n.next();){const o=n.value,r=t.getAttribute("src")||"",l=o.kh.get(r);if(l===null)continue;const h=l.length,a=U.ct();for(let c=0;c<h;c++)a.push(l[c]);if(t.H0)for(let c=0;c<h;c++)e=a[c],e.bs!==null&&e.bs(e,i);U.nt(a)}t.Ke.clear()}reloadSource(){if(this.source==="")return;Picture.clearCache(this.source);const t=this.source;this.source="",this.source=t}redraw(){this.L(),this.os(!0)}get sourceCrossOrigin(){return this.iu}set sourceCrossOrigin(t){if(this.iu!==t){t!==null&&U.C(t,Picture,"sourceCrossOrigin"),this.iu=t;const e=this.element;if(e!==null){const s=e.getAttribute("src");e.crossOrigin!==void 0&&(t===null&&typeof s=="string"?e.crossOrigin=null:t!==null&&(e.crossOrigin=t(this)),s&&(e.src=s))}}}get sourceRect(){return this.Cl}set sourceRect(t){const i=this.Cl;i.equals(t)||(U.s(t,Rect,Picture,"sourceRect"),t=t.T(),this.Cl=t,this.g(),this.t("sourceRect",i,t))}get imageStretch(){return this.Qf}set imageStretch(t){const i=this.Qf;i!==t&&(U.j(t,ImageStretch,"ImageStretch"),this.Qf=t,this.L(),this.t("imageStretch",i,t))}get flip(){return this.Po}set flip(t){const i=this.Po;i!==t&&(U.j(t,Flip,"Flip"),this.Po=t,this.L(),this.t("flip",i,t))}get imageAlignment(){return this._f}set imageAlignment(t){U.s(t,Spot,Picture,"imageAlignment");const i=this._f;i.equals(t)||(t=t.T(),this._f=t,this.L(),this.t("imageAlignment",i,t))}get errorFunction(){return this.bs}set errorFunction(t){const i=this.bs;i!==t&&(t!==null&&U.C(t,Picture,"errorFunction"),this.bs=t,this.t("errorFunction",i,t))}get successFunction(){return this.Nl}set successFunction(t){const i=this.Nl;i!==t&&(t!==null&&U.C(t,Picture,"successFunction"),this.Nl=t,this.t("successFunction",i,t))}Xh(t,i){const e=this.Ml;if(e===null)return;const s=e.getAttribute("src"),n=Diagram.isUsingDOM();if(n&&e instanceof HTMLImageElement&&(s===null||s==="")||e.Iy instanceof Event&&t instanceof CanvasSurfaceContext)return;const o=t instanceof SVGContext,r=this.naturalBounds;let l=0,h=0;const a=this.eu;let c=a?+e.width:e.naturalWidth,f=a?+e.height:e.naturalHeight;if(c===void 0&&e.videoWidth&&(c=e.videoWidth),f===void 0&&e.videoHeight&&(f=e.videoHeight),n){if(c===0||f===0)return}else c=this.width,f=this.height;const u=c,d=f;this.sourceRect.isReal()&&(l=this.Cl.x,h=this.Cl.y,c=this.Cl.width,f=this.Cl.height);let m=c,g=f;const p=this.Qf,y=this._f;switch(p){case 0:if(this.sourceRect.isReal())break;m>=r.width&&(l=l+y.offsetX+(m*y.x-r.width*y.x)),g>=r.height&&(h=h+y.offsetY+(g*y.y-r.height*y.y)),c=Math.min(r.width,m),f=Math.min(r.height,g);break;case 2:m=r.width,g=r.height;break;case 6:case 7:let D=0;p===6?(D=Math.min(r.height/g,r.width/m),m*=D,g*=D):p===7&&(D=Math.max(r.height/g,r.width/m),m*=D,g*=D,m>=r.width&&(l=(l+y.offsetX+(m*y.x-r.width*y.x)/m)*c),g>=r.height&&(h=(h+y.offsetY+(g*y.y-r.height*y.y)/g)*f),c*=1/(m/r.width),f*=1/(g/r.height),m=r.width,g=r.height);break}const x=c*f,b=this.getDocumentScale()*i.scale,S=m*b,k=g*b,P=S*k,A=x/P,N=e.__goCache;let M=null;const C=Picture.j3;if(!o){if(e.En&&N!==void 0&&u<8e3&&d<8e3&&P>4&&A>C*C){N.vt===null&&(N.mF(4,u,d,e),N.mF(16,u,d,e));const D=N.vt,F=D.length;for(let R=0;R<F&&D[R].fg*D[R].fg<A;R++)M=D[R]}if(!i.Sd&&(this.tu===null&&this.W3(),this.tu))return}const T=m<r.width?y.offsetX+(r.width*y.x-m*y.x):0,L=g<r.height?y.offsetY+(r.height*y.y-g*y.y):0;switch(this.flip){case 0:break;case 2:t.translate(Math.min(r.width,m),0),t.scale(-1,1);break;case 1:t.translate(0,Math.min(r.height,g)),t.scale(1,-1);break;case 3:t.translate(Math.min(r.width,m),Math.min(r.height,g)),t.scale(-1,-1);break}if(t.commitTransform(),i.getRenderingHint("pictureRatioOptimization")&&!i.Ra&&N!==void 0&&M!==null&&M.fg!==1){t.save();const D=M.fg;try{t.drawImage(M.fn,l/D,h/D,Math.min(M.fn.width,c/D),Math.min(M.fn.height,f/D),T,L,Math.min(r.width,m),Math.min(r.height,g)),t instanceof SVGContext&&(this.nS=[l/D,h/D,Math.min(M.fn.width,c/D),Math.min(M.fn.height,f/D),T,L,Math.min(r.width,m),Math.min(r.height,g)])}catch(F){Debug&&this.ac&&U.et(F.toString()),this.ac=!1}t.restore()}else try{t.drawImage(e,l,h,c,f,T,L,Math.min(r.width,m),Math.min(r.height,g)),t instanceof SVGContext&&(this.nS=[l,h,c,f,T,L,Math.min(r.width,m),Math.min(r.height,g)])}catch(D){Debug&&this.ac&&U.et(D.toString()),this.ac=!1}switch(this.flip){case 0:break;case 2:t.scale(-1,1),t.translate(-Math.min(r.width,m),0);break;case 1:t.scale(1,-1),t.translate(0,-Math.min(r.height,g));break;case 3:t.scale(-1,-1),t.translate(-Math.min(r.width,m),-Math.min(r.height,g));break}}get naturalBounds(){return this._i}Yd(t,i,e,s){const n=this.desiredSize,o=this.ln(!0),r=this.Ml,l=this.eu;let h=0,a=0;(l||!this.En&&r&&r.complete)&&(this.En=!0),r===null?(isFinite(n.width)||(t=e),isFinite(n.height)||(i=s)):(h=l?+r.width:r.naturalWidth,a=l?+r.height:r.naturalHeight),!isFinite(n.width)&&o!==2&&o!==5?r!==null&&this.En!==!1&&(this.sourceRect.isReal()?t=this.sourceRect.width:t=h):(isFinite(t)||(this.sourceRect.isReal()?t=this.sourceRect.width:r!==null&&(t=h)),e=0),!isFinite(n.height)&&o!==2&&o!==4?r!==null&&this.En!==!1&&(this.sourceRect.isReal()?i=this.sourceRect.height:i=a):(isFinite(i)||(this.sourceRect.isReal()?i=this.sourceRect.height:r!==null&&(i=a)),s=0),isFinite(n.width)&&(t=n.width),isFinite(n.height)&&(i=n.height);const c=this.maxSize,f=this.minSize;e=Math.max(e||0,f.width),s=Math.max(s||0,f.height),t=Math.min(c.width,t),i=Math.min(c.height,i),t=Math.max(e,t),i=Math.max(s,i),r!==null&&!r.complete&&(isFinite(t)||(t=0),isFinite(i)||(i=0)),this._i.io(t,i),this.po(0,0,t,i)}Vh(t,i,e,s){this.commonArrange(t,i,e,s)}static Ry=new PropertyCollection;static TS=0;static j3=4}class PictureCacheArray{vt;constructor(){this.vt=null}mF(t,i,e,s){this.vt===null&&(this.vt=[]);const n=new CanvasSurface(null),o=n.pi,r=1/t;if(n.width=i/t,n.height=e/t,n.width===0||n.height===0)return;const l=new PictureCacheInstance(n.St,t);let h=s,a=1;if(this.vt.length>0){const c=this.vt[this.vt.length-1];h=c.fn,a=c.fg}o.setTransform(r*a,0,0,r*a,0,0),o.commitTransform(),o.drawImage(h,0,0),this.vt.push(l)}}class PictureCacheInstance{fn;fg;constructor(t,i){this.fn=t,this.fg=i}}class GeoStream{Oi;Fm;constructor(){this.Fm=new Geometry,this.Oi=null}Hi(t){t!==null?(this.Fm=t,t.figures.clear()):this.Fm=new Geometry,this.Oi=null}Gu(t,i,e,s,n,o){if(s!==void 0&&s===!0){const r=new PathSegment(1);r.endX=t,r.endY=i,this.Oi.segments.add(r)}else this.Oi=new PathFigure,this.Oi.startX=t,this.Oi.startY=i,this.Oi.isFilled=e,this.Oi.isEvenOdd=o||!1,this.Fm.figures.add(this.Oi);n!==void 0&&(this.Oi.isShadowed=n)}YI(){const t=this.Oi.segments.length;t>0&&this.Oi.segments.elt(t-1).close()}KI(){this.Oi.segments.length>0&&(this.Oi.isFilled=!0)}UI(t){this.Oi.isShadowed=t}yV(t){this.Oi.isEvenOdd=t}VI(t,i,e){e===void 0&&(e=!1);const s=new PathSegment(1);s.endX=t,s.endY=i,e&&s.close(),this.Oi.segments.add(s)}_s(t,i,e){e===void 0&&(e=!1);const s=new PathSegment(2);s.endX=t,s.endY=i,e&&s.close(),this.Oi.segments.add(s)}Dr(t,i,e,s,n,o,r){r===void 0&&(r=!1);const l=new PathSegment(3);l.point1X=t,l.point1Y=i,l.point2X=e,l.point2Y=s,l.endX=n,l.endY=o,r&&l.close(),this.Oi.segments.add(l)}qu(t,i,e,s,n){n===void 0&&(n=!1);const o=new PathSegment(4);o.point1X=t,o.point1Y=i,o.endX=e,o.endY=s,n&&o.close(),this.Oi.segments.add(o)}zI(t,i,e,s,n,o,r){o===void 0&&(o=0),r===void 0&&(r=!1);const l=new PathSegment(5);l.startAngle=t,l.sweepAngle=i,l.centerX=e,l.centerY=s,l.radiusX=n,o!==0?l.radiusY=o:l.radiusY=n,r&&l.close(),this.Oi.segments.add(l)}XI(t,i,e,s,n,o,r,l){l===void 0&&(l=!1);const h=new PathSegment(6,o,r,t,i,e,s,n);l&&h.close(),this.Oi.segments.add(h)}static GN=null;static AT(t){const i=GeoStream.GN;if(i!==null)return GeoStream.GN=null,i.Hi(t),i;{const e=new GeoStream;return e.Hi(t),e}}static TT(t){GeoStream.GN=t}}{const w=function(n,o){const r=n.toLowerCase(),l=G.Mn;l[n]=o,l[r]=n};w("Rectangle",(n,o,r)=>{const l="r"+o+","+r;let h=G.Tr[l];return h!==void 0||(h=new Geometry(2),h.endX=o,h.endY=r,G.Lr<G.Am&&(G.Tr[l]=h,G.Lr++)),h}),w("Square",(n,o,r)=>{const l="s"+o+","+r;let h=G.Tr[l];return h!==void 0||(h=new Geometry(2),h.endX=o,h.endY=r,h.defaultStretch=6,G.Lr<G.Am&&(G.Tr[l]=h,G.Lr++)),h});const t=(n,o,r,l,h)=>{(isNaN(l)||l<0)&&(l=5),isNaN(h)&&(h=15);const a="rr"+o+","+r+","+l+","+h;let c=G.Tr[a];if(c!==void 0)return c;let f=l;(h&1)===1?(f=Math.min(f,(h&2)===2?o/3:o),f=Math.min(f,(h&8)===8?r/3:r)):f=0;const u=new PathFigure(f,0,!0);c=new Geometry().add(u);const d=Spot.TopLeft.copy(),m=Spot.BottomRight.copy();if((h&2)===2){let g=l;g=Math.min(g,(h&1)===1?o/3:o),g=Math.min(g,(h&4)===4?r/3:r);const p=g*G.eo;u.add(new PathSegment(2,o-g,0)).add(new PathSegment(3,o,g,o-p,0,o,p)),d.offsetY=p,m.offsetX=-p}else u.add(new PathSegment(2,o,0));if((h&4)===4){let g=l;g=Math.min(g,(h&8)===8?o/3:o),g=Math.min(g,(h&2)===2?r/3:r);const p=g*G.eo;u.add(new PathSegment(2,o,r-g)).add(new PathSegment(3,o-g,r,o,r-p,o-p,r)),m.offsetX=-p,m.offsetY=-p}else u.add(new PathSegment(2,o,r));if((h&8)===8){let g=l;g=Math.min(g,(h&4)===4?o/3:o),g=Math.min(g,(h&1)===1?r/3:r);const p=g*G.eo;u.add(new PathSegment(2,g,r)).add(new PathSegment(3,0,r-g,p,r,0,r-p)),d.offsetX=p,m.offsetY=-p}else u.add(new PathSegment(2,0,r));if((h&1)===1){const g=f*G.eo;u.add(new PathSegment(2,0,f)).add(new PathSegment(3,f,0,0,g,g,0).close()),d.offsetX=g,d.offsetY=g}else u.add(new PathSegment(2,0,0).close());return c.spot1=d,c.spot2=m,G.Lr<G.Am&&(G.Tr[a]=c,G.Lr++),c};w("RoundedRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN,h=n?n.parameter2:NaN;return t(n,o,r,l,h)}),w("Border","RoundedRectangle"),w("RoundedTopRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN;return t(n,o,r,l,3)}),w("RoundedBottomRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN;return t(n,o,r,l,12)}),w("RoundedLeftRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN;return t(n,o,r,l,9)}),w("RoundedRightRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN;return t(n,o,r,l,6)}),w("Ellipse",(n,o,r)=>{const l="e"+o+","+r;let h=G.Tr[l];return h!==void 0||(h=new Geometry(3),h.endX=o,h.endY=r,h.spot1=Spot.Zk,h.spot2=Spot.Qk,G.Lr<G.Am&&(G.Tr[l]=h,G.Lr++)),h}),w("Circle",(n,o,r)=>{const l="c"+o+","+r;let h=G.Tr[l];return h!==void 0||(h=new Geometry(3),h.endX=o,h.endY=r,h.spot1=Spot.Zk,h.spot2=Spot.Qk,h.defaultStretch=6,G.Lr<G.Am&&(G.Tr[l]=h,G.Lr++)),h}),w("TriangleRight",(n,o,r)=>new Geometry().add(new PathFigure(0,0).add(new PathSegment(2,o,.5*r)).add(new PathSegment(2,0,r).close())).setSpots(0,.25,.5,.75)),w("TriangleDown",(n,o,r)=>new Geometry().add(new PathFigure(0,0).add(new PathSegment(2,o,0)).add(new PathSegment(2,.5*o,r).close())).setSpots(.25,0,.75,.5)),w("TriangleLeft",(n,o,r)=>new Geometry().add(new PathFigure(o,r).add(new PathSegment(2,0,.5*r)).add(new PathSegment(2,o,0).close())).setSpots(.5,.25,1,.75)),w("TriangleUp",(n,o,r)=>new Geometry().add(new PathFigure(o,r).add(new PathSegment(2,0,r)).add(new PathSegment(2,.5*o,0).close())).setSpots(.25,.5,.75,1)),w("Triangle","TriangleUp"),w("Diamond",(n,o,r)=>new Geometry().add(new PathFigure(.5*o,0).add(new PathSegment(2,0,.5*r)).add(new PathSegment(2,.5*o,r)).add(new PathSegment(2,o,.5*r).close())).setSpots(.25,.25,.75,.75)),w("LineH",(n,o,r)=>{const l=new Geometry(1);return l.startX=0,l.startY=r/2,l.endX=o,l.endY=r/2,l}),w("LineV",(n,o,r)=>{const l=new Geometry(1);return l.startX=o/2,l.startY=0,l.endX=o/2,l.endY=r,l}),w("None","Rectangle"),w("BarH","Rectangle"),w("BarV","Rectangle"),w("MinusLine","LineH"),w("PlusLine",(n,o,r)=>new Geometry().add(new PathFigure(0,r/2,!1).add(new PathSegment(2,o,r/2)).add(new PathSegment(1,o/2,0)).add(new PathSegment(2,o/2,r)))),w("XLine",(n,o,r)=>new Geometry().add(new PathFigure(0,r,!1).add(new PathSegment(2,o,0)).add(new PathSegment(1,0,0)).add(new PathSegment(2,o,r)))),w("LineRight",(n,o,r)=>new Geometry().add(new PathFigure(.25*o,0,!1).add(new PathSegment(2,.75*o,.5*r)).add(new PathSegment(2,.25*o,r)))),w("LineDown",(n,o,r)=>new Geometry().add(new PathFigure(0,.25*r,!1).add(new PathSegment(2,.5*o,.75*r)).add(new PathSegment(2,o,.25*r)))),w("LineLeft",(n,o,r)=>new Geometry().add(new PathFigure(.75*o,0,!1).add(new PathSegment(2,.25*o,.5*r)).add(new PathSegment(2,.75*o,r)))),w("LineUp",(n,o,r)=>new Geometry().add(new PathFigure(0,.75*r,!1).add(new PathSegment(2,.5*o,.25*r)).add(new PathSegment(2,o,.75*r)))),w("Capsule",(n,o,r)=>{const l=new Geometry;if(o<r){const h=o/2,a=new PathFigure(0,h,!0);l.add(a),a.add(new PathSegment(5,180,180,h,h,h,h)),a.add(new PathSegment(2,o,r-h)),a.add(new PathSegment(5,0,180,h,r-h,h,h)),a.add(new PathSegment(2,0,h));const c=isFinite(n.parameter1)?n.parameter1:o*.156;return l.setSpots(0,0,1,1,0,c,0,-c),l}else if(o>r){const h=r/2,a=new PathFigure(h,0,!0);l.add(a),a.add(new PathSegment(2,o-h,0)),a.add(new PathSegment(5,270,180,o-h,h,h,h)),a.add(new PathSegment(2,h,r)),a.add(new PathSegment(5,90,180,h,h,h,h));const c=isFinite(n.parameter1)?n.parameter1:r*.156;return l.setSpots(0,0,1,1,c,0,-c,0),l}else return l.type=3,l.endX=o,l.endY=r,l.spot1=Spot.Zk,l.spot2=Spot.Qk,l});const i=(n,o)=>new PathFigure(n,o,!1,!1),e=(n,o,r)=>n.add(new PathSegment(2,o,r)),s=(n,o,r)=>n.add(new PathSegment(1,o,r));w("Borders",(n,o,r)=>{let l=n?n.parameter1:NaN;isNaN(l)?l=10:l=l&15;const h=new Geometry;let a;return l===10?(a=i(o,0),e(a,o,r),s(a,0,r),e(a,0,0)):l===5?(a=i(0,0),e(a,o,0),s(a,o,r),e(a,0,r)):l===1?(a=i(0,0),e(a,o,0),s(a,o,r)):l===2?(a=i(o,0),e(a,o,r)):l===4?(a=i(o,r),e(a,0,r)):l===8?(a=i(0,r),e(a,0,0),s(a,o,r)):l===3?(a=i(0,0),e(a,o,0),e(a,o,r)):l===6?(a=i(o,0),e(a,o,r),e(a,0,r)):l===12?(a=i(o,r),e(a,0,r),e(a,0,0)):l===9?(a=i(0,r),e(a,0,0),e(a,o,0)):l===7?(a=i(0,0),e(a,o,0),e(a,o,r),e(a,0,r)):l===14?(a=i(o,0),e(a,o,r),e(a,0,r),e(a,0,0)):l===13?(a=i(o,r),e(a,0,r),e(a,0,0),e(a,o,0)):l===11?(a=i(0,r),e(a,0,0),e(a,o,0),e(a,o,r)):l===15?(a=i(0,0),e(a,o,0),e(a,o,r),e(a,0,r),a.add(new PathSegment(2,0,0).close())):(a=i(0,0),s(a,o,r)),h.add(a),h})}G.Nm={"":"",Standard:"F1 m 0,0 l 8,4 -8,4 2,-4 z",Backward:"F1 m 8,0 l -2,4 2,4 -8,-4 z",Triangle:"F1 m 0,0 l 8,4.62 -8,4.62 z",BackwardTriangle:"F1 m 8,4 l 0,4 -8,-4 8,-4 0,4 z",Boomerang:"F1 m 0,0 l 8,4 -8,4 4,-4 -4,-4 z",BackwardBoomerang:"F1 m 8,0 l -8,4 8,4 -4,-4 4,-4 z",SidewaysV:"m 0,0 l 8,4 -8,4 0,-1 6,-3 -6,-3 0,-1 z",BackwardV:"m 8,0 l -8,4 8,4 0,-1 -6,-3 6,-3 0,-1 z",OpenTriangle:"m 0,0 l 8,4 -8,4",BackwardOpenTriangle:"m 8,0 l -8,4 8,4",OpenTriangleLine:"m 0,0 l 8,4 -8,4 m 8.5,0 l 0,-8",BackwardOpenTriangleLine:"m 8,0 l  -8,4 8,4 m -8.5,0 l 0,-8",OpenTriangleTop:"m 0,0 l 8,4 m 0,4",BackwardOpenTriangleTop:"m 8,0 l -8,4 m 0,4",OpenTriangleBottom:"m 0,8 l 8,-4",BackwardOpenTriangleBottom:"m 0,4 l 8,4",HalfTriangleTop:"F1 m 0,0 l 0,4 8,0 z m 0,8",BackwardHalfTriangleTop:"F1 m 8,0 l 0,4 -8,0 z m 0,8",HalfTriangleBottom:"F1 m 0,4 l 0,4 8,-4 z",BackwardHalfTriangleBottom:"F1 m 8,4 l 0,4 -8,-4 z",ForwardSemiCircle:"m 4,0 b 270 180 0 4 4",BackwardSemiCircle:"m 4,8 b 90 180 0 -4 4",Feather:"m 0,0 l 3,4 -3,4",BackwardFeather:"m 3,0 l -3,4 3,4",DoubleFeathers:"m 0,0 l 3,4 -3,4 m 3,-8 l 3,4 -3,4",BackwardDoubleFeathers:"m 3,0 l -3,4 3,4 m 3,-8 l -3,4 3,4",TripleFeathers:"m 0,0 l 3,4 -3,4 m 3,-8 l 3,4 -3,4 m 3,-8 l 3,4 -3,4",BackwardTripleFeathers:"m 3,0 l -3,4 3,4 m 3,-8 l -3,4 3,4 m 3,-8 l -3,4 3,4",ForwardSlash:"m 0,8 l 5,-8",BackSlash:"m 0,0 l 5,8",DoubleForwardSlash:"m 0,8 l 4,-8 m -2,8 l 4,-8",DoubleBackSlash:"m 0,0 l 4,8 m -2,-8 l 4,8",TripleForwardSlash:"m 0,8 l 4,-8 m -2,8 l 4,-8 m -2,8 l 4,-8",TripleBackSlash:"m 0,0 l 4,8 m -2,-8 l 4,8 m -2,-8 l 4,8",Fork:"m 0,4 l 8,0 m -8,0 l 8,-4 m -8,4 l 8,4",BackwardFork:"m 8,4 l -8,0 m 8,0 l -8,-4 m 8,4 l -8,4",LineFork:"m 0,0 l 0,8 m 0,-4 l 8,0 m -8,0 l 8,-4 m -8,4 l 8,4",BackwardLineFork:"m 8,4 l -8,0 m 8,0 l -8,-4 m 8,4 l -8,4 m 8,-8 l 0,8",CircleFork:"F1 m 6,4 b 0 360 -3 0 3 z m 0,0 l 6,0 m -6,0 l 6,-4 m -6,4 l 6,4",BackwardCircleFork:"F1 m 0,4 l 6,0 m -6,-4 l 6,4 m -6,4 l 6,-4 m 6,0 b 0 360 -3 0 3",CircleLineFork:"F1 m 6,4 b 0 360 -3 0 3 z m 1,-4 l 0,8 m 0,-4 l 6,0 m -6,0 l 6,-4 m -6,4 l 6,4",BackwardCircleLineFork:"F1 m 0,4 l 6,0 m -6,-4 l 6,4 m -6,4 l 6,-4 m 0,-4 l 0,8 m 7,-4 b 0 360 -3 0 3",Circle:"F1 m 8,4 b 0 360 -4 0 4 z",Block:"F1 m 0,0 l 0,8 8,0 0,-8 z",StretchedDiamond:"F1 m 0,3 l 5,-3 5,3 -5,3 -5,-3 z",Diamond:"F1 m 0,4 l 4,-4 4,4 -4,4 -4,-4 z",Chevron:"F1 m 0,0 l 5,0 3,4 -3,4 -5,0 3,-4 -3,-4 z",StretchedChevron:"F1 m 0,0 l 8,0 3,4 -3,4 -8,0 3,-4 -3,-4 z",NormalArrow:"F1 m 0,2 l 4,0 0,-2 4,4 -4,4 0,-2 -4,0 z",X:"m 0,0 l 8,8 m 0,-8 l -8,8",TailedNormalArrow:"F1 m 0,0 l 2,0 1,2 3,0 0,-2 2,4 -2,4 0,-2 -3,0 -1,2 -2,0 1,-4 -1,-4 z",DoubleTriangle:"F1 m 0,0 l 4,4 -4,4 0,-8 z  m 4,0 l 4,4 -4,4 0,-8 z",BigEndArrow:"F1 m 0,0 l 5,2 0,-2 3,4 -3,4 0,-2 -5,2 0,-8 z",ConcaveTailArrow:"F1 m 0,2 h 4 v -2 l 4,4 -4,4 v -2 h -4 l 2,-2 -2,-2 z",RoundedTriangle:"F1 m 0,1 a 1,1 0 0 1 1,-1 l 7,3 a 0.5,1 0 0 1 0,2 l -7,3 a 1,1 0 0 1 -1,-1 l 0,-6 z",SimpleArrow:"F1 m 1,2 l -1,-2 2,0 1,2 -1,2 -2,0 1,-2 5,0 0,-2 2,2 -2,2 0,-2 z",AccelerationArrow:"F1 m 0,0 l 0,8 0.2,0 0,-8 -0.2,0 z m 2,0 l 0,8 1,0 0,-8 -1,0 z m 3,0 l 2,0 2,4 -2,4 -2,0 0,-8 z",BoxArrow:"F1 m 0,0 l 4,0 0,2 2,0 0,-2 2,4 -2,4 0,-2 -2,0 0,2 -4,0 0,-8 z",TriangleLine:"F1 m 8,4 l -8,-4 0,8 8,-4 z m 0.5,4 l 0,-8",CircleEndedArrow:"F1 m 10,4 l -2,-3 0,2 -2,0 0,2 2,0 0,2 2,-3 z m -4,0 b 0 360 -3 0 3 z",DynamicWidthArrow:"F1 m 0,3 l 2,0 2,-1 2,-2 2,4 -2,4 -2,-2 -2,-1 -2,0 0,-2 z",EquilibriumArrow:"m 0,3 l 8,0 -3,-3 m 3,5 l -8,0 3,3",FastForward:"F1 m 0,0 l 3.5,4 0,-4 3.5,4 0,-4 1,0 0,8 -1,0 0,-4 -3.5,4 0,-4 -3.5,4 0,-8 z",Kite:"F1 m 0,4 l 2,-4 6,4 -6,4 -2,-4 z",HalfArrowTop:"F1 m 0,0 l 4,4 4,0 -8,-4 z m 0,8",HalfArrowBottom:"F1 m 0,8 l 4,-4 4,0 -8,4 z",OpposingDirectionDoubleArrow:"F1 m 0,4 l 2,-4 0,2 4,0 0,-2 2,4 -2,4 0,-2 -4,0 0,2 -2,-4 z",PartialDoubleTriangle:"F1 m 0,0 4,3 0,-3 4,4 -4,4 0,-3 -4,3 0,-8 z",LineCircle:"F1 m 0,0 l 0,8 m 7 -4 b 0 360 -3 0 3 z",DoubleLineCircle:"F1 m 0,0 l 0,8 m 2,-8 l 0,8 m 7 -4 b 0 360 -3 0 3 z",TripleLineCircle:"F1 m 0,0 l 0,8 m 2,-8 l 0,8 m 2,-8 l 0,8 m 7 -4 b 0 360 -3 0 3 z",CircleLine:"F1 m 6 4 b 0 360 -3 0 3 z m 1,-4 l 0,8",DiamondCircle:"F1 m 8,4 l -4,4 -4,-4 4,-4 4,4 m 8,0 b 0 360 -4 0 4 z",PlusCircle:"F1 m 8,4 b 0 360 -4 0 4 l -8 0 z m -4 -4 l 0 8",OpenRightTriangleTop:"m 8,0 l 0,4 -8,0 m 0,4",OpenRightTriangleBottom:"m 8,8 l 0,-4 -8,0",Line:"m 0,0 l 0,8",DoubleLine:"m 0,0 l 0,8 m 2,0 l 0,-8",TripleLine:"m 0,0 l 0,8 m 2,0 l 0,-8 m 2,0 l 0,8",PentagonArrow:"F1 m 8,4 l -4,-4 -4,0 0,8 4,0 4,-4 z"};var LayoutConditions=(w=>(w[w.None=0]="None",w[w.Added=1]="Added",w[w.Removed=2]="Removed",w[w.Shown=4]="Shown",w[w.Hidden=8]="Hidden",w[w.NodeSized=16]="NodeSized",w[w.GroupLayout=32]="GroupLayout",w[w.NodeReplaced=64]="NodeReplaced",w[w.Standard=127]="Standard",w[w.All=16777215]="All",w))(LayoutConditions||{});class Part extends Panel{N;hr;$;Al;Tl;ar;wi;Ll;Hh;un;cr;ug;vr;pF;Oy;Ey;constructor(t,i){let e;typeof t=="string"||t instanceof PanelLayout?e=t:t&&(i=t),super(e),this.N=2408959,this.hr="",this.$=null,this.Al="",this.Tl=null,this.ar=null,this.wi="",this.Ll=null,this.Hh=null,this.un=new Point(NaN,NaN).S(),this.cr=null,this.ug=NaN,this.vr=-1,this.pF=new Rect,this.Oy=null,this.Ey=NaN,i&&Object.assign(this,i)}cloneProtected(t){super.cloneProtected(t),t.N=this.N&-4097|16384|32768,t.hr=this.hr,this.$!==null&&(this.$.ki?t.$=this.$:t.$=this.$.copy()),t.Al=this.Al,t.ar=null,t.wi=this.wi,t.un.f(this.un),t.ug=this.ug}tr(t){super.tr(t),t.zh(),t.Tl=null,t.cr=null,t.Oy=null}toString(){let t=U.to(this.constructor)+"#"+GSet.Cs(this);return this.data!==null&&(t+="("+U.toString(this.data)+")"),t}static LayoutNone=0;static LayoutAdded=1;static LayoutRemoved=2;static LayoutShown=4;static LayoutHidden=8;static LayoutNodeSized=16;static LayoutGroupLayout=32;static LayoutNodeReplaced=64;static LayoutStandard=127;static LayoutAll=16777215;re(){return this.$===null?this.$=new PartTemplateSettings:this.$.ki&&(this.$=this.$.copy()),this.$}Eh(){super.Eh(),this.$!==null&&(this.$.ki=!0)}Df(t,i,e,s,n,o,r){const l=this.diagram;l!==null&&(t===3&&i==="elements"?n instanceof Panel?n.On(h=>{l.partManager.nC(h,l)}):n instanceof Picture&&l.fC(n):t===4&&i==="elements"&&(n instanceof Panel?n.On(h=>l.partManager.oC(h,l)):n instanceof Picture&&l.uC(n)),l.raiseChangedEvent(t,i,e,s,n,o,r))}updateTargetBindings(t){if(super.updateTargetBindings(t),this.data===null)return;const i=this.E.h,e=i.length;for(let n=0;n<e;n++){const o=i[n];o instanceof Panel&&o.On(r=>{r.data!==null&&r.T3(t)})}const s=this.adornments;for(;s.next();)s.value.updateTargetBindings(t)}Zo(){if(super.Zo(),this.dN()){const i=this.E.h,e=i.length;for(let s=0;s<e;s++){const n=i[s];n instanceof Panel&&n.On(o=>o.Zo())}}const t=this.adornments;for(;t.next();)t.value.Zo()}updateRelationshipsFromData(){this.data!==null&&this.diagram?.partManager.updateRelationshipsFromData(this)}get key(){const t=this.diagram;if(t!==null)return t.model.getKeyForNodeData(this.data)}get adornments(){return this.ar===null?EmptyIterator.instance:this.ar.iteratorValues}findAdornment(t){Debug&&U.i(t,"string",Part,"findAdornment:category");const i=this.ar;return i===null?null:i.get(t)}addAdornment(t,i){if(i===null)return;Debug&&(U.i(t,"string",Part,"addAdornment:category"),U.s(i,Adornment,Part,"addAdornment:ad"));let e=null,s=this.ar;if(s!==null&&(e=s.get(t)),e!==i){if(e!==null){const o=e.diagram;o!==null&&o.remove(e)}s===null&&(s=new GMap,this.ar=s),i.hr!==t&&(i.category=t),s.set(t,i);const n=this.diagram;if(n!==null){n.add(i);const o=i.adornedObject;if(o!==null){const r=o.findBindingPanel();r!==null&&(i.data=r.data)}}}}removeAdornment(t){Debug&&U.i(t,"string",Part,"removeAdornment:category");const i=this.ar;if(i===null)return;const e=i.get(t);if(e!==null){const s=e.diagram;s!==null&&(s.remove(e),e.data=null)}i.delete(t),i.count===0&&(this.ar=null)}clearAdornments(){const t=this.ar;if(t===null)return;const i=U.ct(),e=t.iterator;for(;e.next();){const n=e.key;i.push(n)}const s=i.length;for(let n=0;n<s;n++)this.removeAdornment(i[n]);U.nt(i)}updateAdornments(){const t=this.diagram;if(t===null)return;this.J3(t),this.$3(t);let i=this.adornments;for(;i.next();){const e=i.value;e.g(),e.hasPlaceholder()&&e.placeholder.g()}for(i=this.adornments;i.next();)i.value.updateTargetBindings()}invalidateAdornments(){const t=this.diagram;t!==null&&(t.Vs(),this.yF()!==!0&&this.wF(!0))}p2(){this.yF()!==!1&&(this.updateAdornments(),this.wF(!1))}J3(t){const i="Selection";if(this.isSelected&&this.selectionAdorned){const e=this.selectionObject;if(e!==null&&this.actualBounds.isReal()&&this.isVisible()&&e.isVisibleObject()&&e.actualBounds.isReal()){let s=this.findAdornment(i);if(s===null){let n=this.selectionAdornmentTemplate;n===null&&(this.Yr()?n=t.linkSelectionAdornmentTemplate:this instanceof Group?n=t.groupSelectionAdornmentTemplate:n=t.nodeSelectionAdornmentTemplate),s=n.copy(),s!==null&&(this.Yr()&&this.selectionObject===this.path&&(s.type=Panel.Link),s.adornedObject=e)}if(s!==null){s.type===Panel.Link&&s.g(),this.addAdornment(i,s);return}}}this.removeAdornment(i)}$3(t){const i=this;t.toolManager.mouseDownTools.each(e=>{e.isEnabled&&e.updateAdornments(i)}),t.toolManager.updateAdornments(i)}g2(t){this.Ll=t,t===null&&this.vE()}get layer(){return this.Ll}get diagram(){const t=this.Ll;return t==null?null:t.diagram}get layerName(){return this.Al}set layerName(t){const i=this.Al;if(i===t)return;Debug&&U.i(t,"string",Part,"layerName");let e=this.diagram;if(e!==null&&(e.findLayer(t)===null||e.partManager.addsToTemporaryLayer))return;this.Al=t,e!==null&&e.invalidateDocumentBounds(),this.t("layerName",i,t);const s=this.layer;if(s===null||s.name===t||(e=s.diagram,e===null))return;const n=e.findLayer(t);if(n===null||n===s)return;let o=s.ue(-1,this,!0);o>=0&&e.raiseChangedEvent(4,"parts",s,this,null,o,!0),o=n.Na(99999999,this,!0),s.visible!==n.visible&&this.Ji(n.visible),o>=0&&e.raiseChangedEvent(3,"parts",n,null,this,!0,o);const r=this.layerChanged;if(r===null)return;const l=e.v;e.v=!0,r(this,s,n),e.v=l}get layerChanged(){return this.$!==null?this.$.By:null}set layerChanged(t){const i=this.layerChanged;i!==t&&(t!==null&&U.C(t,Part,"layerChanged"),this.re().By=t,this.t("layerChanged",i,t))}get zOrder(){return this.ug}set zOrder(t){const i=this.ug;if(i===t)return;Debug&&U.i(t,"number",Part,"zOrder"),this.ug=t;const e=this.layer;e!==null&&e.D1(-1,this),this.t("zOrder",i,t);const s=this.diagram;s!==null&&(s.Vs(),s.L())}Z3(){const t=this.layer;t!==null&&t.D1(-1,this)}FS(){if(this.Nh()!==!1)return;this.qN(!0),this.If();const t=this.diagram;t!==null&&(t.K0(this),t.requestUpdate())}xF(){if(this.N|=2097152,this.Nh()===!1)return;const t=this.position,i=this.location;(!i.isReal()||!t.isReal())&&this.bF(t,i);const e=this.Xi,s=Rect.a().f(e);e.si(),e.x=t.x,e.y=t.y,e.S(),this.Kd(s,e),Rect.o(s),this.qN(!1),this.If()}po(t,i,e,s){const n=this.me;n.e(t,i,e,s),this.Fi===null&&(this.Fi=new Transform);const o=this.Fi;o.Hi(),this.op(o,t,i,e,s),this.Fi=o,o._k()||o.km(n)}op(t,i,e,s,n){if(this.lt!==1&&t.lt(this.lt),this.jt===0)return;let o=Spot.Center;this.locationSpot.isSpot()&&(o=this.locationSpot);const r=Point.a();if(this.locationObject!==this){const l=this.locationObject,h=l.naturalBounds;r.setSpot(h.x,h.y,h.width,h.height,o),l.Fi!==null&&l.Fi.Pt(r),r.offset(-l.measuredBounds.x,-l.measuredBounds.y);let a=l.panel;for(;a!==null&&a!==this;)a.Fi!==null&&a.Fi.Pt(r),r.offset(-a.measuredBounds.x,-a.measuredBounds.y),a=a.panel}else r.setSpot(i,e,s,n,o);t.Ns(this.jt,r.x,r.y),Point.o(r)}get locationObject(){if(this.cr===null)if(this instanceof Adornment&&this.type!==Panel.Link&&this.hasPlaceholder())this.cr=this.placeholder;else{const t=this.locationObjectName;if(t!==""){const i=this.findObject(t);i!==null?this.cr=i:this.cr=this}else this.cr=this}return this.cr?.visible?this.cr:this}get minLocation(){return this.$!==null?this.$.Vy:Point.fT}set minLocation(t){const i=this.minLocation;i.equals(t)||(Debug&&U.s(t,Point,Part,"minLocation"),t=t.T(),this.re().Vy=t,this.t("minLocation",i,t))}get maxLocation(){return this.$!==null?this.$.zy:Point.uT}set maxLocation(t){const i=this.maxLocation;i.equals(t)||(Debug&&U.s(t,Point,Part,"maxLocation"),t=t.T(),this.re().zy=t,this.t("maxLocation",i,t))}get locationObjectName(){return this.$!==null?this.$.Xy:""}set locationObjectName(t){const i=this.locationObjectName;i!==t&&(Debug&&U.i(t,"string",Part,"locationObjectName"),this.re().Xy=t,this.cr=null,this.g(),this.t("locationObjectName",i,t))}get locationSpot(){return this.$!==null?this.$.Yy:Spot.TopLeft}set locationSpot(t){const i=this.locationSpot;i.equals(t)||(Debug&&(U.s(t,Spot,Part,"locationSpot"),t.isSpot()||U.n("Part.locationSpot must be a specific Spot value, not: "+t)),t=t.T(),this.re().Yy=t,this.g(),this.t("locationSpot",i,t))}move(t,i){i===!0?this.location=t:this.position=t}moveTo(t,i,e){const s=Point.V(t,i);this.move(s,e),Point.o(s)}isVisible(){if(!this.visible)return!1;const t=this.layer;if(t!==null){if(!t.visible)return!1;const e=t.diagram;if(e!==null&&e.animationManager.p1(this))return!0}const i=this.containingGroup;return!(i!==null&&(!i.isSubGraphExpanded||!i.isVisible()))}Ji(t){const i=this.diagram;t?(this.invalidateLayout(4),this.invalidateAdornments(),i!==null&&i.K0(this)):(this.invalidateLayout(8),this.clearAdornments()),this.zh(),i!==null&&(i.invalidateDocumentBounds(),this instanceof Node&&this.canAvoid()&&i.Fd(this),i.L())}findObject(t){if(this.name===t)return this;let i=this.Oy;if(i===null&&(this.Oy=i=new GMap),i.get(t)!==null)return i.get(t);const e=super.findObject(t);return e!==null?(i.set(t,e),e):(i.set(t,null),null)}xp(){this.Oy=null}getRelativePoint(t,i,e){e===void 0&&(e=new Point);const s=i.isNoSpot()?Spot.Center:i,n=t.naturalBounds;if(e.e(n.width*s.x+s.offsetX,n.height*s.y+s.offsetY),t===null||t===this)return e;t.D.Pt(e);let o=t.panel;for(;o!==null&&o!==this;)o.D.Pt(e),o=o.panel;return this.Fi!==null&&this.Fi.Pt(e),e.offset(-this.me.x,-this.me.y),e}getDocumentBounds(t){return t===void 0&&(t=new Rect),t.f(this.actualBounds)}ensureBounds(){this.yt(1/0,1/0),this.Ht()}WD(t){const i=this.locationSpot,e=this.locationObject;let s=e.naturalBounds;s.isReal()||(s=Rect.bm);const n=e instanceof Shape?e.strokeWidth:0;if(t.setSpot(0,0,s.width+n,s.height+n,i),e!==this){t.offset(-n/2,-n/2),e.D.Pt(t);let o=e.panel;for(;o!==null&&o!==this;)o.D.Pt(t),o=o.panel}return this.Fi!==null&&this.Fi.Pt(t),t.offset(-this.me.x,-this.me.y),t}Ca(t,i){const e=i===void 0?this.pF:i,s=this.Q3(),n=s*2;if(!this.isShadowed)return e.e(t.x-1-s,t.y-1-s,t.width+2+n,t.height+2+n),e;let o=t.x,r=t.y,l=t.width,h=t.height;const a=this.shadowBlur,c=this.shadowOffset;return l+=a,h+=a,o-=a/2,r-=a/2,c.x>0?l+=c.x:(o+=c.x,l-=c.x),c.y>0?h+=c.y:(r+=c.y,h-=c.y),e.e(o-1,r-1,l+2,h+2),e}O3(){return this.type===Panel.Link&&this instanceof Adornment&&this.category==="Selection"&&this.adornedObject instanceof Shape&&this.adornedPart.findMainElement()===this.adornedObject?this.adornedObject.strokeWidth:0}Q3(){return isNaN(this.Ey)&&(this.Ey=this.tF()),this.Ey}vf(){this.Ey=NaN}Ht(){if(this.ps()===!1){this.xF();return}this.yo(!1);const t=this.Xi,i=Rect.a();i.f(t);const e=this.tf();this.Vh(0,0,this.me.width,this.me.height);const s=this.position;this.bF(s,this.location),t.si(),t.x=s.x,t.y=s.y,t.S(),this.Kd(i,t),i.equals(t)?this.Dn(e):this.ze()&&(!G.u(i.width,t.width)||!G.u(i.height,t.height))&&i.isReal()&&this.invalidateLayout(16),Rect.o(i),this.qN(!1)}Kd(t,i){const e=this.diagram;if(e===null)return;let s=!1;if(e.Fa===!1&&t.isReal()){const n=Rect.a();n.f(e.documentBounds),n.subtractMargin(e.padding),t.x>n.x&&t.y>n.y&&t.right<n.right&&t.bottom<n.bottom&&i.x>n.x&&i.y>n.y&&i.right<n.right&&i.bottom<n.bottom&&(s=!0),Rect.o(n)}e.jL(this),(this._3()===!0||!t.equals(i))&&this.vL(s,e),e.L(),!(!t.isReal()&&!i.isReal()||t.equalsApproxClose(i))&&(this instanceof Node&&!e.undoManager.isUndoingRedoing&&this.invalidateConnectedLinks(),this.zh())}get location(){return this.un}set location(t){Debug&&U.s(t,Point,Part,"location");const i=t.x,e=t.y,s=this.un;(s.x!==i&&(!isNaN(s.x)||!isNaN(i))||s.y!==e&&(!isNaN(s.y)||!isNaN(e)))&&(t=t.copy(),this.t4(t,s)&&this.t("location",s,t.copy()))}t4(t,i){if(this.Yr())return!1;if(this.un=t,this.N|=2097152,this.ps()===!1){this.FS();const e=this.wt;if(e.isReal()){const s=this.diagram;if(s===null||s.animationManager.isTicking||!s.undoManager.isUndoingRedoing){const n=e.copy();e.e(e.x+(t.x-i.x),e.y+(t.y-i.y)),this.SF(s,e,n.x,n.y),this.t("position",n,e.copy())}}}return!0}cN(t,i,e){if(this.Yr()||!t.isReal())return!1;const s=this.diagram;if(s!==null&&this.SF(s,t,i,e),this.wt=t,this.N&=-2097153,this.un.isReal()&&(s===null||s.animationManager.isTicking||!s.undoManager.isUndoingRedoing)){const n=this.un;this.un=new Point(n.x+(t.x-i),n.y+(t.y-e)).S(),this.t("location",n,this.un.copy())}return this.Nh()===!1&&this.ps()===!1&&(this.FS(),this.xF()),!0}SF(t,i,e,s){if(t===null||this instanceof Adornment)return;const n=t.animationManager;n.Li&&n.fL(this,new Point(e,s),i,!1)}sf(t,i,e){const s=this.un,n=this.wt;if(e){if(s.x===t&&s.y===i)return;this.Nh()||this.ps()?n.e(NaN,NaN):n.e(n.x+t-s.x,n.y+i-s.y),s.e(t,i)}else{if(n.x===t&&n.y===i)return;s.e(s.x+t-n.x,s.y+i-n.y),n.e(t,i)}this.FS()}fN(){this.N&=-2097153,this.FS()}bF(t,i){const e=this.WD(Point.a()),s=this.diagram,n=i.isReal(),o=t.isReal();n&&o?(this.N&2097152)!==0?this.kF(t,i,s,e):this.PF(t,i,s,e):n?this.kF(t,i,s,e):o&&this.PF(t,i,s,e),this.N|=2097152,Point.o(e),this.If()}kF(t,i,e,s){const n=t.x,o=t.y;if(t.e(i.x-s.x,i.y-s.y),e!==null){const r=e.animationManager,l=r.defaultAnimation.isAnimating;!l&&r.Li&&!(this instanceof Adornment)&&r.fL(this,new Point(n,o),t,!1),!l&&!(t.x===n&&t.y===o)&&this.t("position",new Point(n,o),t.copy())}}PF(t,i,e,s){const n=i.copy();i.e(t.x+s.x,t.y+s.y),!i.equals(n)&&e!==null&&this.t("location",n,i.copy())}vL(t,i){this.nN(!1),this instanceof Node&&i.Fd(this),!this.layer.isTemporary&&!t&&i.invalidateDocumentBounds();const e=this.Xi,s=i.viewportBounds;s.isReal()?this.tf()?(e.$k(s,10)?i.Vs():this.Dn(!1),this.updateAdornments()):this.isVisible()&&e.intersectsRect(s)?(this.Dn(!0),i.Vs(),this.updateAdornments()):this.invalidateAdornments():i.Vs()}dl(){return!0}ze(){return!0}Yr(){return!1}hn(){return!0}hasPlaceholder(){return!1}get category(){return this.hr}set category(t){const i=this.hr;if(i===t)return;this.svg!==null&&(this.svg.remove(),this.os(!0)),Debug&&U.i(t,"string",Part,"category");const e=this.diagram,s=this.data;let n=null;if(e!==null&&s!==null&&!(this instanceof Adornment)){const o=e.model.undoManager;o.isEnabled&&!o.isUndoingRedoing&&(n=this.clone(),n.E.addAll(this.E))}if(this.hr=t,this.t("category",i,t),e!==null&&s!==null&&!(this instanceof Adornment)){const o=e.model;if(o.undoManager.isUndoingRedoing)return;if(this.Yr()){e.partManager.setLinkCategoryForData(s,t);const r=e.partManager.findLinkTemplateForCategory(t);if(r!==null){r.Ut();const l=r.copy();l!==null&&this.HN(l,i,t)}}else{o!==null&&o.setCategoryForNodeData(s,t);const r=e.partManager.findTemplateForNodeData(s,t);if(r!==null){r.Ut();const l=r.copy();if(l!==null&&!(l instanceof Link)){const h=this.location.copy();this.HN(l,i,t),this.location.isReal()||(this.location=h)}}}if(n!==null){const r=this.clone();r.E.addAll(this.E),this.t("self",n,r)}}else if(this instanceof Adornment){const o=this.adornedPart;if(o!==null){const r=o.ar;r!==null&&r.delete(i),o.addAdornment(this.category,this)}}}get self(){return this}set self(t){this.HN(t,this.category,t.category)}static MF=!1;HN(t,i,e){t.constructor!==this.constructor&&(Part.MF||(Part.MF=!0,U.et('Should not change the class of the Part when changing category from "'+i+'" to "'+e+'"'),U.et("  Old class: "+U.to(this.constructor)+", new class: "+U.to(t.constructor)+", part: "+this.toString()))),this.clearAdornments();const s=this.data,n=this.layerName,o=this.isSelected,r=this.isHighlighted;let l=!0,h=!0,a=!1;this instanceof Node&&(l=this.isTreeLeaf,h=this.isTreeExpanded,a=this.wasTreeExpanded),this.XE(),t.tr(this),t.LD(this),t.cloneProtected(this),this.hr=e,this.svg!==null&&(this.svg.remove(),this.gf(),this.os(!0)),this.g(),this.L();const c=this.diagram;let f=!0;c!==null&&(f=c.skipsUndoManager,c.skipsUndoManager=!0),this.hi=s,this.N=o?this.N|4096:this.N&-4097,this.N=r?this.N|524288:this.N&-524289,this instanceof Node&&(this.Y=l?this.Y|4:this.Y&-5,this.Y=h?this.Y|1:this.Y&-2,this.Y=a?this.Y|2:this.Y&-3),s!==null&&this.updateTargetBindings();const u=this.layerName;u!==n&&(this.Al=n,this.layerName=u),c!==null&&(c.skipsUndoManager=f),this.ze()&&this.invalidateLayout(64)}canCopy(){if(!this.copyable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowCopy)return!1;const i=t.diagram;return i===null?!0:!!i.allowCopy}canDelete(){if(!this.deletable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowDelete)return!1;const i=t.diagram;return i===null?!0:!!i.allowDelete}canEdit(){if(!this.textEditable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowTextEdit)return!1;const i=t.diagram;return i===null?!0:!!i.allowTextEdit}canGroup(){if(!this.groupable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowGroup)return!1;const i=t.diagram;return i===null?!0:!!i.allowGroup}canMove(){if(!this.movable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowMove)return!1;const i=t.diagram;return i===null?!0:!!i.allowMove}canReshape(){if(!this.reshapable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowReshape)return!1;const i=t.diagram;return i===null?!0:!!i.allowReshape}canResize(){if(!this.resizable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowResize)return!1;const i=t.diagram;return i===null?!0:!!i.allowResize}canRotate(){if(!this.rotatable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowRotate)return!1;const i=t.diagram;return i===null?!0:!!i.allowRotate}canSelect(){if(!this.selectable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowSelect)return!1;const i=t.diagram;return i===null?!0:!!i.allowSelect}get copyable(){return(this.N&1)!==0}set copyable(t){const i=(this.N&1)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"copyable"),this.N=this.N^1,this.t("copyable",i,t))}get deletable(){return(this.N&2)!==0}set deletable(t){const i=(this.N&2)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"deletable"),this.N=this.N^2,this.t("deletable",i,t))}get textEditable(){return(this.N&4)!==0}set textEditable(t){const i=(this.N&4)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"textEditable"),this.N=this.N^4,this.t("textEditable",i,t),this.invalidateAdornments())}get groupable(){return(this.N&8)!==0}set groupable(t){const i=(this.N&8)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"groupable"),this.N=this.N^8,this.t("groupable",i,t))}get movable(){return(this.N&16)!==0}set movable(t){const i=(this.N&16)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"movable"),this.N=this.N^16,this.t("movable",i,t))}get selectionAdorned(){return(this.N&32)!==0}set selectionAdorned(t){const i=(this.N&32)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"selectionAdorned"),this.N=this.N^32,this.t("selectionAdorned",i,t),this.invalidateAdornments())}get isInDocumentBounds(){return(this.N&64)!==0}set isInDocumentBounds(t){const i=(this.N&64)!==0;if(i!==t){Debug&&U.i(t,"boolean",Part,"isInDocumentBounds"),this.N=this.N^64;const e=this.diagram;e!==null&&e.invalidateDocumentBounds(),this.t("isInDocumentBounds",i,t)}}get isLayoutPositioned(){return(this.N&128)!==0}set isLayoutPositioned(t){const i=(this.N&128)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"isLayoutPositioned"),this.N=this.N^128,this.t("isLayoutPositioned",i,t),this.invalidateLayout(t?4:8))}get selectable(){return(this.N&256)!==0}set selectable(t){const i=(this.N&256)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"selectable"),this.N=this.N^256,this.t("selectable",i,t),this.invalidateAdornments())}get reshapable(){return(this.N&512)!==0}set reshapable(t){const i=(this.N&512)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"reshapable"),this.N=this.N^512,this.t("reshapable",i,t),this.invalidateAdornments())}get resizable(){return(this.N&1024)!==0}set resizable(t){const i=(this.N&1024)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"resizable"),this.N=this.N^1024,this.t("resizable",i,t),this.invalidateAdornments())}get rotatable(){return(this.N&2048)!==0}set rotatable(t){const i=(this.N&2048)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"rotatable"),this.N=this.N^2048,this.t("rotatable",i,t),this.invalidateAdornments())}get isSelected(){return(this.N&4096)!==0}set isSelected(t){const i=(this.N&4096)!==0;if(i!==t){Debug&&U.i(t,"boolean",Part,"isSelected");const e=this.diagram;if(t){if(!this.canSelect())return;if(e!==null){const o=e.maxSelectionCount;if(e.selection.count>=o)return}}this.N=this.N^4096;let s=!1;if(e!==null){s=e.skipsUndoManager,e.skipsUndoManager=!0;const o=e.selection;o.si(),t?o.add(this):o.delete(this),o.S()}this.t("isSelected",i,t),this.invalidateAdornments();const n=this.selectionChanged;n!==null&&n(this),e!==null&&(e.requestUpdate(),e.skipsUndoManager=s)}}get isHighlighted(){return(this.N&524288)!==0}set isHighlighted(t){const i=(this.N&524288)!==0;if(i!==t){Debug&&U.i(t,"boolean",Part,"isHighlighted"),this.N=this.N^524288;const e=this.diagram;if(e!==null){const n=e.highlighteds;n.si(),t?n.add(this):n.delete(this),n.S()}this.t("isHighlighted",i,t),this.L();const s=this.highlightedChanged;s!==null&&s(this)}}get isShadowed(){return(this.N&8192)!==0}set isShadowed(t){const i=(this.N&8192)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"isShadowed"),this.N=this.N^8192,this.os(!0),this.t("isShadowed",i,t),this.L())}yF(){return(this.N&16384)!==0}wF(t){t?this.N|=16384:this.N&=-16385}Nh(){return(this.N&32768)!==0}qN(t){t?this.N|=32768:this.N&=-32769}_3(){return(this.N&65536)!==0}nN(t){t?this.N|=65536:this.N&=-65537}tf(){return this.layer===null?!1:this.layer.Ma.has(this)}Dn(t){this.layer!==null&&(t?this.layer.Ma.add(this):this.layer.Ma.delete(this))}CF(){return(this.N&1048576)!==0}RS(t){t?this.N|=1048576:this.N&=-1048577}get isAnimated(){return(this.N&262144)!==0}set isAnimated(t){const i=(this.N&262144)!==0;i!==t&&(Debug&&U.i(t,"boolean",Part,"isAnimated"),this.N=this.N^262144,this.t("isAnimated",i,t))}get highlightedChanged(){return this.$!==null?this.$.Ky:null}set highlightedChanged(t){const i=this.highlightedChanged;i!==t&&(t!==null&&U.C(t,Part,"highlightedChanged"),this.re().Ky=t,this.t("highlightedChanged",i,t))}get selectionObjectName(){return this.$!==null?this.$.Uy:""}set selectionObjectName(t){const i=this.selectionObjectName;i!==t&&(Debug&&U.i(t,"string",Part,"selectionObjectName"),this.re().Uy=t,this.Tl=null,this.t("selectionObjectName",i,t))}get selectionAdornmentTemplate(){return this.$!==null?this.$.Gy:null}set selectionAdornmentTemplate(t){const i=this.selectionAdornmentTemplate;i!==t&&(t!==null&&(U.s(t,Adornment,Part,"selectionAdornmentTemplate"),t.Ut()),this.re().Gy=t,this.t("selectionAdornmentTemplate",i,t))}get selectionObject(){if(this.Tl===null){const t=this.selectionObjectName;if(t!==null&&t!==""){const i=this.findObject(t);i!==null?this.Tl=i:this.Tl=this}else if(this instanceof Link){const i=this.path;i!==null?this.Tl=i:this.Tl=this}else this.Tl=this}return this.Tl}get selectionChanged(){return this.$!==null?this.$.qy:null}set selectionChanged(t){const i=this.selectionChanged;i!==t&&(t!==null&&U.C(t,Part,"selectionChanged"),this.re().qy=t,this.t("selectionChanged",i,t))}get resizeAdornmentTemplate(){return this.$!==null?this.$.Hy:null}set resizeAdornmentTemplate(t){const i=this.resizeAdornmentTemplate;i!==t&&(Debug&&U.s(t,Adornment,Part,"resizeAdornmentTemplate"),this.re().Hy=t!==null?t.Ut():null,this.t("resizeAdornmentTemplate",i,t))}get resizeObjectName(){return this.$!==null?this.$.vy:""}set resizeObjectName(t){const i=this.resizeObjectName;i!==t&&(Debug&&U.i(t,"string",Part,"resizeObjectName"),this.re().vy=t,this.t("resizeObjectName",i,t))}get resizeObject(){const t=this.resizeObjectName;if(t!==""){const i=this.findObject(t);if(i!==null)return i}return this}get resizeCellSize(){return this.$!==null?this.$.Wy:Size.wx}set resizeCellSize(t){const i=this.resizeCellSize;i.equals(t)||(Debug&&U.s(t,Size,Part,"resizeCellSize"),t=t.T(),this.re().Wy=t,this.t("resizeCellSize",i,t))}get rotateAdornmentTemplate(){return this.$!==null?this.$.jy:null}set rotateAdornmentTemplate(t){const i=this.rotateAdornmentTemplate;i!==t&&(Debug&&U.s(t,Adornment,Part,"rotateAdornmentTemplate"),this.re().jy=t!==null?t.Ut():null,this.t("rotateAdornmentTemplate",i,t))}get rotateObjectName(){return this.$!==null?this.$.Jy:""}set rotateObjectName(t){const i=this.rotateObjectName;i!==t&&(Debug&&U.i(t,"string",Part,"rotateObjectName"),this.re().Jy=t,this.t("rotateObjectName",i,t))}get rotateObject(){const t=this.rotateObjectName;if(t!==""){const i=this.findObject(t);if(i!==null)return i}return this}get rotationSpot(){return this.$!==null?this.$.$y:Spot.Default}set rotationSpot(t){const i=this.rotationSpot;i.equals(t)||(Debug&&(U.s(t,Spot,Part,"rotationSpot"),t!==Spot.Default&&!t.isSpot()&&U.n("Part.rotationSpot must be a specific Spot value or Spot.Default, not: "+t)),t=t.T(),this.re().$y=t,this.t("rotationSpot",i,t))}get text(){return this.wi}set text(t){const i=this.wi;i!==t&&(Debug&&U.i(t,"string",Part,"text"),this.wi=t,this.t("text",i,t))}get containingGroup(){return this.Hh}set containingGroup(t){if(this.ze()){const i=this.Hh;if(i!==t){Debug&&t!==null&&U.s(t,Group,Part,"containingGroup"),t!==null&&(this===t||t.isMemberOf(this))&&(this===t&&U.n("Cannot make a Group a member of itself: "+this.toString()),U.n("Cannot make a Group indirectly contain itself: "+this.toString()+" already contains "+t.toString())),this.invalidateLayout(2);const e=this.diagram;if(i!==null?i.vN(this):this instanceof Group&&e!==null&&e.fl.delete(this),this.Hh=t,t!==null?t.WN(this):this instanceof Group&&e!==null&&e.fl.add(this),this.invalidateLayout(1),e!==null&&e.v){const n=this.data,o=e.model;if(n!==null&&o.Dh()){const r=t!==null?t.data:null;o.setGroupForData(n,o.getKeyForNodeData(r))}}const s=this.containingGroupChanged;if(s!==null){let n=!0;e!==null&&(n=e.v,e.v=!0),s(this,i,t),e!==null&&(e.v=n)}if(this instanceof Group){const n=new GSet;Part.Lh(n,this,!0,0,!0);const o=n.iterator;for(;o.next();){const r=o.value;if(r instanceof Node){const l=r.linksConnected;for(;l.next();)l.value.dg()}}}if(this instanceof Node){const n=this.linksConnected;for(;n.next();)n.value.dg();const o=this.labeledLink;o!==null&&o.dg()}this.t("containingGroup",i,t),t!==null&&t.Z3()}}else U.n("cannot set the Part.containingGroup of a Link or Adornment")}zh(){const t=this.containingGroup;t!==null&&(t.hasPlaceholder()&&t.placeholder.g(),t.g(),t.invalidateConnectedLinks())}L(){const t=this.diagram;t!==null&&!this.ps()&&!this.Nh()&&this.isVisible()&&this.Xi.isReal()&&t.L(this.Ca(this.Xi))}g(){if(this.$o())return;super.g();const t=this.diagram;t!==null&&(t.K0(this),this instanceof Node&&this.labeledLink!==null&&this.labeledLink.zf(),t.requestUpdate(!0))}zf(t){if(this.ps())return;const i=this.diagram;i!==null&&(i.K0(this),this instanceof Node&&this.invalidateConnectedLinks(),i.requestUpdate()),this.yo(!0)}w0(t){if(!t){const i=this.Hh;i!==null&&i.WN(this)}}x0(t){if(!t){const i=this.Hh;i!==null&&i.vN(this)}}Mf(){const t=this.data;if(t!==null){const i=this.diagram;if(i!==null){const e=i.model;e!==null&&e.removeNodeData(t)}}}get containingGroupChanged(){return this.$!==null?this.$.Zy:null}set containingGroupChanged(t){const i=this.containingGroupChanged;i!==t&&(t!==null&&U.C(t,Part,"containingGroupChanged"),this.re().Zy=t,this.t("containingGroupChanged",i,t))}findSubGraphLevel(){return this.jN(this)}jN(t){const i=t.containingGroup;if(i!==null)return 1+this.jN(i);if(t instanceof Node){const e=t.labeledLink;if(e!==null)return this.jN(e)}return 0}findTopLevelPart(){return this.JN(this)}JN(t){const i=t.containingGroup;if(i!==null)return this.JN(i);if(t instanceof Node){const e=t.labeledLink;if(e!==null)return this.JN(e)}return t}get isTopLevel(){return!(this.containingGroup!==null||this instanceof Node&&this.labeledLink!==null)}isMemberOf(t){return t instanceof Group?this.$N(this,t):!1}$N(t,i){if(t===i||i===null)return!1;const e=t.containingGroup;if(e!==null&&(e===i||this.$N(e,i)))return!0;if(t instanceof Node){const s=t.labeledLink;if(s!==null)return this.$N(s,i)}return!1}findCommonContainingGroup(t){if(t===null)return null;if(Debug&&U.s(t,Part,Part,"findCommonContainingGroup:other"),this===t)return this.containingGroup;let i=this;for(;i!==null;){if(i instanceof Group&&i.RS(!0),i instanceof Node){const s=i.labeledLink;s!==null&&(i=s)}i=i.containingGroup}let e=null;for(i=t;i!==null;){if(i.CF()){e=i;break}if(i instanceof Node){const s=i.labeledLink;s!==null&&(i=s)}i=i.containingGroup}for(i=this;i!==null;){if(i instanceof Group&&i.RS(!1),i instanceof Node){const s=i.labeledLink;s!==null&&(i=s)}i=i.containingGroup}return e}get layoutConditions(){return this.$!==null?this.$.Qy:127}set layoutConditions(t){const i=this.layoutConditions;i!==t&&(Debug&&U.i(t,"number",Part,"layoutConditions"),this.re().Qy=t,this.t("layoutConditions",i,t))}canLayout(){if(!this.isLayoutPositioned||!this.isVisible())return!1;const t=this.layer;return!(t!==null&&t.isTemporary||this instanceof Node&&this.isLinkLabel)}i4(t){if(!this.isLayoutPositioned||(t&this.layoutConditions)===0)return!1;const i=this.layer;if(i!==null&&i.isTemporary||this instanceof Node&&this.isLinkLabel)return!1;const e=this.diagram;return!(e!==null&&e.undoManager.isUndoingRedoing)}invalidateLayout(t){if(t===void 0&&(t=16777215),!this.i4(t))return;const i=this.Hh;if(i!==null){const e=i.layout;e!==null?e.w():i.invalidateLayout(t)}else{const e=this.diagram;if(e!==null){const s=e.layout;s!==null&&s.w()}}}WL(){if(!this.isVisible())return!1;const t=this.layer;return!(t!==null&&t.isTemporary)}static Lh(t,i,e,s,n,o){if(o===void 0&&(o=null),!t.has(i)&&!(o!==null&&!o(i))&&!(i instanceof Adornment)){if(t.add(i),i instanceof Node){if(e&&i instanceof Group){const r=i.memberParts;for(;r.next();){const l=r.value;Part.Lh(t,l,e,s,n,o)}}if(n!==!1){const r=i.linksConnected;for(;r.next();){const l=r.value;if(t.has(l))continue;const h=l.fromNode,a=l.toNode,c=h===null||t.has(h),f=a===null||t.has(a);(n?c&&f:c||f)&&Part.Lh(t,l,e,s,n,o)}}if(s>1){const r=i.findTreeChildrenNodes();for(;r.next();){const l=r.value;Part.Lh(t,l,e,s-1,n,o)}}}else if(i instanceof Link){const r=i.labelNodes;for(;r.next();){const l=r.value;Part.Lh(t,l,e,s,n,o)}}}}get dragComputation(){return this.$!==null?this.$._y:null}set dragComputation(t){const i=this.dragComputation;i!==t&&(t!==null&&U.C(t,Part,"dragComputation"),this.re()._y=t,this.t("dragComputation",i,t))}get shadowOffset(){return this.$!==null?this.$.tw:Point.dT}set shadowOffset(t){const i=this.shadowOffset;i.equals(t)||(Debug&&U.s(t,Point,Part,"shadowOffset"),t=t.T(),this.re().tw=t,this.L(),this.t("shadowOffset",i,t))}get shadowColor(){return this.$!==null?this.$.iw:"gray"}set shadowColor(t){const i=this.shadowColor;i!==t&&(Debug&&U.i(t,"string",Part,"shadowColor"),this.re().iw=t,this.L(),this.t("shadowColor",i,t))}get shadowBlur(){return this.$!==null?this.$.Xn:4}set shadowBlur(t){const i=this.shadowBlur;i!==t&&(Debug&&U.i(t,"number",Part,"shadowBlur"),this.re().Xn=t,this.L(),this.t("shadowBlur",i,t))}}class PartTemplateSettings{ki;By;Zy;Gy;Uy;qy;Ky;Hy;vy;Wy;jy;Jy;$y;Xy;Yy;Vy;zy;_y;Qy;tw;iw;Xn;constructor(){this.ki=!1,this.By=null,this.Zy=null,this.Gy=null,this.Uy="",this.qy=null,this.Ky=null,this.Hy=null,this.vy="",this.Wy=Size.wx,this.jy=null,this.Jy="",this.$y=Spot.Default,this.Xy="",this.Yy=Spot.TopLeft,this.Vy=Point.fT,this.zy=Point.uT,this._y=null,this.Qy=127,this.tw=Point.dT,this.iw="gray",this.Xn=4}copy(){const t=new PartTemplateSettings;return t.By=this.By,t.Zy=this.Zy,t.Gy=this.Gy,t.Uy=this.Uy,t.qy=this.qy,t.Ky=this.Ky,t.Hy=this.Hy,t.vy=this.vy,t.Wy=this.Wy.T(),t.jy=this.jy,t.Jy=this.Jy,t.$y=this.$y.T(),t.Xy=this.Xy,t.Yy=this.Yy.T(),t.Vy=this.Vy.T(),t.zy=this.zy.T(),t._y=this._y,t.Qy=this.Qy,t.tw=this.tw.T(),t.iw=this.iw,t.Xn=this.Xn,t}}class Adornment extends Part{Rs;It;uM;dM;qf;constructor(t,i){let e;typeof t=="string"||t instanceof PanelLayout?e=t:t&&(i=t),super(e),this.N&=-257,this.Al="Adornment",this.Rs=null,this.uM=0,this.dM=!1,this.It=null,this.qf=null,i&&Object.assign(this,i)}toString(){const t=this.adornedPart;return"Adornment("+this.category+")"+(t!==null?t.toString():"")}updateRelationshipsFromData(){}CN(){const t=this.adornedObject;if(!(t instanceof Shape))return;const i=t.part;if(!(i instanceof Link))return;const e=i.path;if(e===null)return;const s=e.geometry,n=this.E.h,o=n.length;for(let r=0;r<o;r++){const l=n[r];l.isPanelMain&&l instanceof Shape&&(l.bt=s)}}hasPlaceholder(){return this.It!==null&&this.It.isVisibleObject()}get placeholder(){return this.It}get adornedObject(){return this.Rs}set adornedObject(t){Debug&&t!==null&&U.s(t,GraphObject,Part,"adornedObject:value");const i=this.adornedPart;let e=null;t!==null&&(e=t.part),i!==null&&(t===null||i!==e)&&i.removeAdornment(this.category),this.Rs=t,e!==null&&e.addAdornment(this.category,this)}get adornedPart(){const t=this.Rs;return t!==null?t.part:null}dl(){const t=this.Rs;if(t===null)return!0;const i=t.part;return i===null||!i.ps()}ze(){return!1}get containingGroup(){return null}Df(t,i,e,s,n,o,r){if(t===3&&i==="elements"){if(n instanceof Placeholder)this.It===null?this.It=n:Debug&&this.It!==n&&U.n("Cannot insert a second Placeholder into the visual tree of an Adornment.");else if(n instanceof Panel){const l=n.findInVisualTree(h=>h instanceof Placeholder);l instanceof Placeholder&&(this.It===null?this.It=l:Debug&&this.It!==l&&U.n("Cannot insert a second Placeholder into the visual tree of an Adornment."))}}else t===4&&i==="elements"&&this.It!==null&&(s===this.It?this.It=null:s instanceof Panel&&this.It.isContainedBy(s)&&(this.It=null));super.Df(t,i,e,s,n,o,r)}updateAdornments(){}Mf(){}}var PortSpreading=(w=>(w[w.None=0]="None",w[w.Evenly=1]="Evenly",w[w.Packed=2]="Packed",w))(PortSpreading||{});class Node extends Part{Y;zt;su;Dl;vh;pe;ai;constructor(t,i){let e;typeof t=="string"||t instanceof PanelLayout?e=t:t&&(i=t),super(e),this.Y=13,this.zt=null,this.ai=new List,this.su=null,this.Dl=null,this.pe=null,this.vh=!1,i&&Object.assign(this,i)}cloneProtected(t){super.cloneProtected(t),t.Y=this.Y,this.zt!==null&&(this.zt.ki?t.zt=this.zt:t.zt=this.zt.copy())}tr(t){super.tr(t),t.invalidateConnectedLinks(),t.Dl=this.Dl,t.pe=null}static SpreadingNone=0;static SpreadingEvenly=1;static SpreadingPacked=2;Fl(){return this.zt===null?this.zt=new NodeTemplateSettings:this.zt.ki&&(this.zt=this.zt.copy()),this.zt}Eh(){super.Eh(),this.zt!==null&&(this.zt.ki=!0)}NF(t){t!==null&&(this.Dl===null&&(this.Dl=new GSet),this.Dl.add(t))}AF(t){t!==null&&this.Dl!==null&&this.Dl.delete(t)}TF(t,i,e){if(t===null||this.Dl===null)return null;const s=this.Dl.iterator;for(;s.next();){const n=s.value;if(n.ew===this&&n.IS===t&&n.ZN===i&&n.QN===e||n.ew===t&&n.IS===this&&n.ZN===e&&n.QN===i)return n}return null}invalidateLinkBundle(t,i,e){i==null&&(i=""),e==null&&(e="");const s=this.TF(t,i,e);s!==null&&s.gg()}Df(t,i,e,s,n,o,r){t===3&&i==="elements"?this.pe=null:t===4&&i==="elements"&&(this.pe=null),super.Df(t,i,e,s,n,o,r)}invalidateConnectedLinks(t,i){const e=this.linksConnected;for(;e.next();){const s=e.value;t&&t.has(s)||i&&s.fromPort!==i&&s.toPort!==i||(this.ne(s.fromPort),this.ne(s.toPort),s.oi())}}ne(t){if(t===null)return;const i=t.Vd;i!==null&&i.gg();const e=t.part,s=e.containingGroup;s!==null&&!e.isVisible()&&s.ne(s.port)}dl(){return!0}get portSpreading(){return this.zt!==null?this.zt.nw:1}set portSpreading(t){const i=this.portSpreading;if(i!==t){Debug&&t!==0&&t!==1&&t!==2&&U.n("Node.portSpreading can only be set to PortSpreading.None, PortSpreading.Evenly, or PortSpreading.Packed, not: "+t),this.Fl().nw=t,this.t("portSpreading",i,t);const e=this.diagram;if(e!==null&&e.undoManager.isUndoingRedoing)return;this.invalidateConnectedLinks()}}get avoidable(){return(this.Y&8)!==0}set avoidable(t){const i=(this.Y&8)!==0;if(i!==t){Debug&&U.i(t,"boolean",Node,"avoidable"),this.Y=this.Y^8;const e=this.diagram;e!==null&&e.Fd(this),this.t("avoidable",i,t)}}get avoidableMargin(){return this.zt!==null?this.zt.ow:Margin.xT}set avoidableMargin(t){typeof t=="number"?t=new Margin(t):U.s(t,Margin,Node,"avoidableMargin");const i=this.avoidableMargin;if(!i.equals(t)){t=t.T(),this.Fl().ow=t;const e=this.diagram;e!==null&&e.Fd(this),this.t("avoidableMargin",i,t)}}canAvoid(){return this.avoidable&&!this.isLinkLabel}getAvoidableRect(t){return t.set(this.actualBounds),t.addMargin(this.avoidableMargin),t}findVisibleNode(){let t=this;for(;t!==null&&!t.isVisible();)t=t.containingGroup;return t}isVisible(){if(!super.isVisible())return!1;let t=!0,i=1;const e=this.diagram;if(e!==null){if(e.animationManager.p1(this))return!0;t=e.isTreePathToChildren,i=e.treeCollapsePolicy}if(i===1){const n=this.findTreeParentNode();if(n!==null&&!n.isTreeExpanded)return!1}else if(i===2){const n=t?this.findLinksInto():this.findLinksOutOf();let o=!1,r=!1;for(;n.next();){const l=n.value;if(l.isTreeLink){o=!0;const h=t?l.fromNode:l.toNode;if(h&&h.isTreeExpanded){r=!0;break}}}if(o&&!r)return!1}else if(i===3){const n=t?this.findLinksInto():this.findLinksOutOf();let o=!1,r=!1;for(;n.next();){const l=n.value;if(l.isTreeLink){o=!0;const h=t?l.fromNode:l.toNode;if(h&&!h.isTreeExpanded){r=!0;break}}}if(o&&r)return!1}const s=this.labeledLink;return s!==null?s.isVisible():!0}Ji(t){super.Ji(t);const i=this.linksConnected;for(;i.next();){const e=i.value;if(t&&this.containingGroup!==null){const s=e.getOtherNode(this);s!==null&&!s.isMemberOf(this.containingGroup)&&e.oi()}e.Ji(t)}}get linksConnected(){return this.ai.iterator}findExternalTreeLinksConnected(){const t=new GSet,i=new GSet;return this.LF(this,t,i),i.iterator}LF(t,i,e){if(t===null||i.has(t))return;i.add(t);let s=!0;const n=this.diagram;n!==null&&(s=n.isTreePathToChildren),t.linksConnected.each(o=>{o.isTreeLink?(s?o.fromNode===t:o.toNode===t)&&this.LF(s?o.toNode:o.fromNode,i,e):e.add(o)})}findLinksConnected(t){if(t===void 0&&(t=null),t===null)return this.ai.iterator;Debug&&U.i(t,"string",Node,"findLinksConnected:pid");const i=new ListIterator(this.ai),e=this;return i.predicate=s=>s.fromNode===e&&s.fromPortId===t||s.toNode===e&&s.toPortId===t,i}findLinksOutOf(t){t===void 0&&(t=null),Debug&&t!==null&&U.i(t,"string",Node,"findLinksOutOf:pid");const i=new ListIterator(this.ai),e=this;return i.predicate=s=>s.fromNode!==e?!1:t===null?!0:s.fromPortId===t,i}findLinksInto(t){t===void 0&&(t=null),Debug&&t!==null&&U.i(t,"string",Node,"findLinksInto:pid");const i=new ListIterator(this.ai),e=this;return i.predicate=s=>s.toNode!==e?!1:t===null?!0:s.toPortId===t,i}findNodesConnected(t){t===void 0&&(t=null),Debug&&t!==null&&U.i(t,"string",Node,"findNodesConnected:pid");let i=null,e=null;const s=this.ai.iterator;for(;s.next();){const n=s.value;if(n.fromNode===this){if(t===null||n.fromPortId===t){const o=n.toNode;i!==null?i.add(o):e!==null&&e!==o?(i=new GSet,i.add(e),i.add(o)):e=o}}else if(n.toNode===this&&(t===null||n.toPortId===t)){const o=n.fromNode;i!==null?i.add(o):e!==null&&e!==o?(i=new GSet,i.add(e),i.add(o)):e=o}}return i!==null?i.iterator:e!==null?new SingletonIterator(e):EmptyIterator.instance}findNodesOutOf(t){t===void 0&&(t=null),Debug&&t!==null&&U.i(t,"string",Node,"findNodesOutOf:pid");let i=null,e=null;const s=this.ai.iterator;for(;s.next();){const n=s.value;if(n.fromNode===this&&(t===null||n.fromPortId===t)){const o=n.toNode;i!==null?i.add(o):e!==null&&e!==o?(i=new GSet,i.add(e),i.add(o)):e=o}}return i!==null?i.iterator:e!==null?new SingletonIterator(e):EmptyIterator.instance}findNodesInto(t){t===void 0&&(t=null),Debug&&t!==null&&U.i(t,"string",Node,"findNodesInto:pid");let i=null,e=null;const s=this.ai.iterator;for(;s.next();){const n=s.value;if(n.toNode===this&&(t===null||n.toPortId===t)){const o=n.fromNode;i!==null?i.add(o):e!==null&&e!==o?(i=new GSet,i.add(e),i.add(o)):e=o}}return i!==null?i.iterator:e!==null?new SingletonIterator(e):EmptyIterator.instance}findLinksBetween(t,i,e){i===void 0&&(i=null),e===void 0&&(e=null),Debug&&(U.s(t,Node,Node,"findLinksBetween:othernode"),i!==null&&U.i(i,"string",Node,"findLinksBetween:pid"),e!==null&&U.i(e,"string",Node,"findLinksBetween:otherpid"));const s=new ListIterator(this.ai),n=this;return s.predicate=o=>o.fromNode===n&&o.toNode===t&&(i===null||o.fromPortId===i)&&(e===null||o.toPortId===e)||o.fromNode===t&&o.toNode===n&&(e===null||o.fromPortId===e)&&(i===null||o.toPortId===i),s}findLinksTo(t,i,e){i===void 0&&(i=null),e===void 0&&(e=null),Debug&&(U.s(t,Node,Node,"findLinksTo:othernode"),i!==null&&U.i(i,"string",Node,"findLinksTo:pid"),e!==null&&U.i(e,"string",Node,"findLinksTo:otherpid"));const s=new ListIterator(this.ai),n=this;return s.predicate=o=>!(o.fromNode!==n||o.toNode!==t||i!==null&&o.fromPortId!==i||e!==null&&o.toPortId!==e),s}findSuccessorParts(t){return t===void 0&&(t=new GSet),this.DF(this,t),t.delete(this),t}DF(t,i){t!==null&&(i.has(t)||(i.add(t),t.findLinksOutOf().each(e=>{if(i.has(e))return;i.add(e);const s=e.toNode;s!==null&&this.DF(s,i)})))}findPredecessorParts(t){return t===void 0&&(t=new GSet),this.FF(this,t),t.delete(this),t}FF(t,i){t!==null&&(i.has(t)||(i.add(t),t.findLinksInto().each(e=>{if(i.has(e))return;i.add(e);const s=e.fromNode;s!==null&&this.FF(s,i)})))}get linkConnected(){return this.zt!==null?this.zt.lw:null}set linkConnected(t){const i=this.linkConnected;i!==t&&(t!==null&&U.C(t,Node,"linkConnected"),this.Fl().lw=t,this.t("linkConnected",i,t))}get linkDisconnected(){return this.zt!==null?this.zt.hw:null}set linkDisconnected(t){const i=this.linkDisconnected;i!==t&&(t!==null&&U.C(t,Node,"linkDisconnected"),this.Fl().hw=t,this.t("linkDisconnected",i,t))}get linkValidation(){return this.zt!==null?this.zt.Ql:null}set linkValidation(t){const i=this.linkValidation;i!==t&&(t!==null&&U.C(t,Node,"linkValidation"),this.Fl().Ql=t,this.t("linkValidation",i,t))}OS(t,i){this.ne(i);const e=this.ai.has(t);if(e||this.ai.add(t),!e||t.fromNode===t.toNode){const s=this.linkConnected;if(s!==null){let n=!0;const o=this.diagram;o!==null&&(n=o.v,o.v=!0),s(this,t,i),o!==null&&(o.v=n)}}if(!e){if(!t.isTreeLink)return;const s=t.fromNode,n=t.toNode;if(s!==null&&n!==null&&s!==n){let o=!0;const r=this.diagram;r!==null&&(o=r.isTreePathToChildren);const l=o?n:s,h=o?s:n;if(l.vh||(l.vh=h),h.isTreeLeaf){if(r!==null&&r.undoManager.isUndoingRedoing)return;o?s===h&&(h.isTreeLeaf=!1):n===h&&(h.isTreeLeaf=!1)}}}}ES(t,i){this.ne(i);const e=this.ai.delete(t);let s=null;if(e||t.toNode===t.fromNode){const n=this.linkDisconnected;if(s=this.diagram,n!==null){let o=!0;s!==null&&(o=s.v,s.v=!0),n(this,t,i),s!==null&&(s.v=o)}}if(e){if(!t.isTreeLink)return;let n=!0;s!==null&&(n=s.isTreePathToChildren);const o=n?t.toNode:t.fromNode,r=n?t.fromNode:t.toNode;if(o!==null&&(o.vh=!1),r!==null&&!r.isTreeLeaf)if(r.ai.count===0){if(r.vh=null,s!==null&&s.undoManager.isUndoingRedoing)return;r.isTreeLeaf=!0}else r.v0()}}v0(){if(this.vh=!1,this.ai.count===0)return;let t=!0;const i=this.diagram;if(i!==null&&i.undoManager.isUndoingRedoing)return;i!==null&&(t=i.isTreePathToChildren);const e=this.ai.iterator;for(;e.next();){const s=e.value;if(s.isTreeLink){if(t){if(s.fromNode===this){this.isTreeLeaf=!1;return}}else if(s.toNode===this){this.isTreeLeaf=!1;return}}}this.isTreeLeaf=!0}updateRelationshipsFromData(){const t=this.diagram;t!==null&&t.partManager.updateRelationshipsFromData(this)}w0(t){if(super.w0(t),!t){this.v0();const i=this.su;i!==null&&i.RF(this)}}x0(t){if(super.x0(t),!t){const i=this.su;i!==null&&i.IF(this)}}Mf(){if(this.ai.count>0){const t=this.diagram;if(t!==null){const i=t.commandHandler!==null?t.commandHandler.deletesConnectedLinks:!0,s=this.ai.copy().iterator;for(;s.next();){const n=s.value;i?t.remove(n):(n.fromNode===this&&(n.fromNode=null),n.toNode===this&&(n.toNode=null))}}}this.labeledLink=null,super.Mf()}get isLinkLabel(){return this.su!==null}get labeledLink(){return this.su}set labeledLink(t){const i=this.su;if(i!==t){Debug&&t!==null&&U.s(t,Link,Node,"labeledLink");const e=this.diagram,s=this.data;if(i!==null){if(i.IF(this),e!==null&&s!==null&&!e.undoManager.isUndoingRedoing){const n=i.data,o=e.model;if(n!==null&&o.cc()){const r=o.getKeyForNodeData(s);r!==void 0&&o.removeLabelKeyForLinkData(n,r)}}this.containingGroup=null}if(this.su=t,t!==null){if(t.RF(this),e!==null&&s!==null&&!e.undoManager.isUndoingRedoing){const n=t.data,o=e.model;if(n!==null&&o.cc()){const r=o.getKeyForNodeData(s);r!==void 0&&o.addLabelKeyForLinkData(n,r)}}this.containingGroup=t.containingGroup}this.zf(),this.t("labeledLink",i,t)}}findVisiblePort(t){let i=t;for(;i!==null&&(!i.actualBounds.isReal()||!i.isVisibleObject());)i=i.panel;return i===null?this.port:i}findPort(t){if(Debug&&U.i(t,"string",Node,"findPort:pid"),this.pe===null){if(t===""&&this.zn===!1)return this;this.OF()}let i=this.pe.get(t);return i!==null||t!==""&&(i=this.pe.get(""),i!==null)?i:this}get port(){return this.findPort("")}get ports(){return this.pe===null&&this.OF(),this.pe.iteratorValues}OF(){this.pe===null?this.pe=new GMap:this.pe.clear(),this.walkVisualTreeFrom(this,(t,i)=>t.YD(i)),this.pe.count===0&&this.pe.set("",this)}YD(t){const i=t.portId;i!==null&&this.pe!==null&&this.pe.set(i,t)}uN(t,i){const e=t.portId;if(e!==null){this.pe!==null&&this.pe.delete(e);const s=this.diagram;if(s!==null&&i){let n=null;const o=this.findLinksConnected(e);for(;o.next();){const r=o.value;n===null&&(n=U.ct()),n.push(r)}if(n!==null){for(let r=0;r<n.length;r++){const l=n[r];s.remove(l)}U.nt(n)}}}}isInTreeOf(t){if(t===null||t===this)return!1;let i=!0;const e=this.diagram;e!==null&&(i=e.isTreePathToChildren);let s=this;const n=t;let o;if(i)for(;s!==n;){o=null;const r=s.ai.iterator;for(;r.next();){const l=r.value;if(l.isTreeLink&&(o=l.fromNode,o!==s&&o!==this))break}if(o===this||o===null||o===s)return!1;s=o}else for(;s!==n;){o=null;const r=s.ai.iterator;for(;r.next();){const l=r.value;if(l.isTreeLink&&(o=l.toNode,o!==s&&o!==this))break}if(o===this||o===null||o===s)return!1;s=o}return!0}findTreeRoot(){let t=!0;const i=this.diagram;i!==null&&(t=i.isTreePathToChildren);let e=this,s;if(t)for(;;){s=null;const n=e.ai.iterator;for(;n.next();){const o=n.value;if(o.isTreeLink&&(s=o.fromNode,s!==e&&s!==this))break}if(s===this)return this;if(s===null||s===e)return e;e=s}else for(;;){s=null;const n=e.ai.iterator;for(;n.next();){const o=n.value;if(o.isTreeLink&&(s=o.toNode,s!==e&&s!==this))break}if(s===this)return this;if(s===null||s===e)return e;e=s}}findCommonTreeParent(t){if(t===null)return null;if(Debug&&U.s(t,Node,Node,"findCommonTreeParent:other"),this===t)return this;let i=this;for(;i!==null;)i.RS(!0),i=i.findTreeParentNode();let e=null;for(i=t;i!==null;){if(i.CF()){e=i;break}i=i.findTreeParentNode()}for(i=this;i!==null;)i.RS(!1),i=i.findTreeParentNode();return e}findTreeParentLink(){let t=!0;const i=this.diagram;i!==null&&(t=i.isTreePathToChildren);const e=this.ai.iterator;if(t)for(;e.next();){const s=e.value;if(s.isTreeLink&&s.fromNode!==this)return s}else for(;e.next();){const s=e.value;if(s.isTreeLink&&s.toNode!==this)return s}return null}findTreeParentNode(){const t=this.vh;if(t===null)return null;if(t instanceof Node)return t;const i=this.diagram,e=i!==null?i.isTreePathToChildren:!0,s=this.ai.iterator;for(;s.next();){const n=s.value;if(!n.isTreeLink)continue;const o=e?n.fromNode:n.toNode;if(o!==this)return this.vh=o,o}return this.vh=null,null}findTreeParentChain(t){function i(e,s){s.add(e);const n=e.findTreeParentLink();if(n!==null){s.add(n);const o=e.findTreeParentNode();if(o===null)return;i(o,s)}}return t===void 0&&(t=new GSet),i(this,t),t}findTreeLevel(){return this.e4(this)}e4(t){let i=0,e=t.findTreeParentNode();for(;e!==null&&e!==t;)e=e.findTreeParentNode(),i++;return i}findTreeChildrenLinks(){let t=!0;const i=this.diagram;i!==null&&(t=i.isTreePathToChildren);const e=new ListIterator(this.ai),s=this;return t?e.predicate=n=>!(!n.isTreeLink||n.fromNode!==s):e.predicate=n=>!(!n.isTreeLink||n.toNode!==s),e}findTreeChildrenNodes(){let t=!0;const i=this.diagram;i!==null&&(t=i.isTreePathToChildren);let e=null,s=null;const n=this.ai.iterator;if(t)for(;n.next();){const o=n.value;if(o.isTreeLink&&o.fromNode===this){const r=o.toNode;e!==null?e.add(r):s!==null&&s!==r?(e=new List,e.add(s),e.add(r)):s=r}}else for(;n.next();){const o=n.value;if(o.isTreeLink&&o.toNode===this){const r=o.fromNode;e!==null?e.add(r):s!==null&&s!==r?(e=new List,e.add(s),e.add(r)):s=r}}return e!==null?e.iterator:s!==null?new SingletonIterator(s):EmptyIterator.instance}findTreeParts(t,i){return t===void 0&&(t=1/0),U.i(t,"number",Node,"findTreeParts:level"),i===void 0&&(i=new GSet),Part.Lh(i,this,!1,t,!0),i}collapseTree(t){t===void 0&&(t=1),U.r(t,Node,"collapseTree:level"),t<1&&(t=1);const i=this.diagram;if(i===null||i.isCollapsingExpanding)return;i.isCollapsingExpanding=!0;const e=new GSet;e.add(this),this.EF(e,i.isTreePathToChildren,t,i,this,i.treeCollapsePolicy===1),i.isCollapsingExpanding=!1}EF(t,i,e,s,n,o){if(e>1){const r=i?this.findLinksOutOf():this.findLinksInto();for(;r.next();){const l=r.value;if(!l.isTreeLink)continue;const h=l.getOtherNode(this);h!==null&&h!==this&&!t.has(h)&&(t.add(h),h.EF(t,i,e-1,s,n,o))}}else this.BF(t,i,s,n,o)}BF(t,i,e,s,n){const o=s===this?!0:this.isTreeExpanded,r=i?this.findLinksOutOf():this.findLinksInto();for(;r.next();){const l=r.value;if(!l.isTreeLink)continue;const h=l.getOtherNode(this);if(h!==null&&h!==this){const a=t.has(h);if(a||t.add(h),o){const c=i?h.findNodesInto():h.findNodesOutOf(),f=this;c.all(u=>u===f||!u.isTreeExpanded)&&e.cf(h,s),h.zh(),h.Ji(!1)}h.isTreeExpanded&&(h.wasTreeExpanded=h.isTreeExpanded,a||h.BF(t,i,e,s,n))}}this.isTreeExpanded=!1}expandTree(t){t===void 0&&(t=2),U.r(t,Node,"expandTree:level"),t<2&&(t=2);const i=this.diagram;if(i===null||i.isCollapsingExpanding)return;i.isCollapsingExpanding=!0;const e=new GSet;e.add(this),this.VF(e,i.isTreePathToChildren,t,i,this,i.treeCollapsePolicy===1),i.isCollapsingExpanding=!1}VF(t,i,e,s,n,o){const r=n===this?!1:this.isTreeExpanded,l=i?this.findLinksOutOf():this.findLinksInto();for(;l.next();){const h=l.value;if(!h.isTreeLink)continue;r||h.is||h.oi();const a=h.getOtherNode(this);if(a!==null&&a!==this&&!t.has(a)){if(t.add(a),!r){a.Ji(!0),a.zh();const c=i?a.findNodesInto():a.findNodesOutOf(),f=this;c.all(u=>u===f||!u.isTreeExpanded)&&s.af(a,n)}(e>2||a.wasTreeExpanded)&&(a.wasTreeExpanded=!1,a.VF(t,i,e-1,s,n,o))}}this.isTreeExpanded=!0}get isTreeExpanded(){return(this.Y&1)!==0}set isTreeExpanded(t){const i=(this.Y&1)!==0;if(i!==t){Debug&&U.i(t,"boolean",Node,"isTreeExpanded"),this.Y=this.Y^1;const e=this.diagram;this.t("isTreeExpanded",i,t);const s=this.treeExpandedChanged;if(s!==null){let n=!0;e!==null&&(n=e.v,e.v=!0),s(this),e!==null&&(e.v=n)}if(e!==null&&e.undoManager.isUndoingRedoing){this.Ji(t);return}t?this.expandTree():this.collapseTree()}}get wasTreeExpanded(){return(this.Y&2)!==0}set wasTreeExpanded(t){const i=(this.Y&2)!==0;i!==t&&(Debug&&U.i(t,"boolean",Node,"wasTreeExpanded"),this.Y=this.Y^2,this.t("wasTreeExpanded",i,t))}get treeExpandedChanged(){return this.zt!==null?this.zt.aw:null}set treeExpandedChanged(t){const i=this.treeExpandedChanged;i!==t&&(t!==null&&U.C(t,Node,"treeExpandedChanged"),this.Fl().aw=t,this.t("treeExpandedChanged",i,t))}get isTreeLeaf(){return(this.Y&4)!==0}set isTreeLeaf(t){const i=(this.Y&4)!==0;i!==t&&(Debug&&U.i(t,"boolean",Node,"isTreeLeaf"),this.Y=this.Y^4,this.t("isTreeLeaf",i,t))}get isTreeRoot(){return this.findTreeParentLink()===null}}class NodeTemplateSettings{ki;lw;hw;Ql;aw;ow;nw;cw;fw;Th;uw;constructor(){this.ki=!1,this.lw=null,this.hw=null,this.Ql=null,this.aw=null,this.ow=Margin.xT,this.nw=1,this.cw=null,this.fw=null,this.Th=null,this.uw=null}copy(){const t=new NodeTemplateSettings;return t.lw=this.lw,t.hw=this.hw,t.Ql=this.Ql,t.aw=this.aw,t.ow=this.ow.T(),t.nw=this.nw,t.cw=this.cw,t.fw=this.fw,t.Th=this.Th,t.uw=this.uw,t}}var LinkAdjusting=(w=>(w[w.None=0]="None",w[w.End=17]="End",w[w.Scale=18]="Scale",w[w.Stretch=19]="Stretch",w))(LinkAdjusting||{}),Routing=(w=>(w[w.Normal=1]="Normal",w[w.Orthogonal=2]="Orthogonal",w[w.AvoidsNodes=6]="AvoidsNodes",w[w.AvoidsNodesStraight=7]="AvoidsNodesStraight",w))(Routing||{}),Curve=(w=>(w[w.None=0]="None",w[w.Bezier=9]="Bezier",w[w.JumpGap=10]="JumpGap",w[w.JumpOver=11]="JumpOver",w))(Curve||{});class Link extends Part{Lt;Mo;Co;mg;No;Ao;pg;nu;yg;wg;xg;fc;bg;dn;Ri;ve;Gr;uc;fr;_N;tA;BS;iA;eA;dc;VS;bt;ur;static gc=null;static mc=null;qf;sA;nA;constructor(t){super(Panel.Link),this.Lt=8,this.Mo=null,this.Co="",this.mg=null,this.No=null,this.Ao="",this.pg=null,this.nu=0,this.yg=0,this.wg=0,this.xg=NaN,this.fc=1,this.bg=.5,this.dn=null,this.Ri=new List().S(),this.ve=null,this.Gr=null,this.uc=new Rect,this.bt=new Geometry,this.fr=null,this.ur=null,this._N=Point.Pn,this.tA=Point.Pn,this.sA=0,this.nA=0,this.BS=new Point,this.iA=null,this.eA=null,this.dc=null,this.VS=NaN,this.xt=null,this.qf=[],t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.Lt=this.Lt&-113,t.Co=this.Co,t.mg=this.mg,t.Ao=this.Ao,t.pg=this.pg,t.nu=this.nu,t.yg=this.yg,t.wg=this.wg,t.xg=this.xg,t.fc=this.fc,t.bg=this.bg,this.xt!==null&&(t.xt=this.xt.copy())}tr(t){super.tr(t),this.Co=t.Co,this.Ao=t.Ao,t.ve=null,t.oi(),t.ur=this.ur;const i=t.fromPort;i!==null&&t.fromNode.ne(i);const e=t.toPort;e!==null&&t.toNode.ne(e)}yi(t){t in Routing||t in Curve||t in LinkAdjusting?Link.oA(t)?this.routing=t:t===9||t===10||t===11?this.curve=t:t===17||t===18||t===19?this.adjusting=t:t===1||t===0||U.n("Unknown Link enum value for a Link property: "+t):super.yi(t)}static Normal=1;static Orthogonal=2;static AvoidsNodes=6;static AvoidsNodesStraight=7;static None=0;static Bezier=9;static JumpGap=10;static JumpOver=11;static End=17;static Scale=18;static Stretch=19;static OrientAlong=21;static OrientPlus90=22;static OrientMinus90=23;static OrientOpposite=24;static OrientUpright=25;static OrientPlus90Upright=26;static OrientMinus90Upright=27;static OrientUpright45=28;static zF=8;static XF=16;static Wh=8;static yS=3;static YF=3;static KF=1.333;static rA=1;static lA=0;static UF=10;static ou=9999;static GF=30;static qF=30;static hA=10;static HF=10;static vF=14;static WF=30;static jF=14;static RL=8;static IL=8;static JF=11;static setRoutingParameter(t,i){switch(t){case 1:Link.zF=i;break;case 2:Link.XF=i;break;case 3:Link.Wh=i;break;case 4:Link.yS=i;break;case 5:Link.YF=i;break;case 6:Link.KF=i;break;case 7:Link.rA=i;break;case 8:Link.lA=i;break;case 9:Link.UF=i;break;case 10:Link.ou=i;break;case 11:Link.GF=i;break;case 12:Link.qF=i;break;case 13:Link.hA=i;break;case 14:Link.HF=i;break;case 15:Link.vF=i;break;case 16:Link.WF=i;break;case 17:Link.jF=i;break;case 18:Link.RL=i;break;case 19:Link.IL=i;break;case 20:Link.JF=i;break}t>29&&t<71&&(Link.yD=t+parseInt(i.toString().slice(0,-1)))}static yD;ns(){return this.xt===null&&(this.xt=new LinkSettings),this.xt}m3(t,i,e){const s=t.segmentIndex,n=t.segmentFraction;let o=t.alignmentFocus;const r=t.segmentOrientation,l=t.segmentOffset;let h=0,a=0,c=0,f=0;if(isNaN(s)){const N=this.bt,M=U.ct();N.getPointAndAngleAlongPath(n,M);const C=Point.V(M[0],M[1]);if(f=M[2],C.add(this.getPoint(0)),N.type===1)C.offset(-N.startX,-N.startY);else{const T=N.figures.first();C.offset(-T.startX,-T.startY)}r!==0&&(c=this.computeAngle(t,r,f),t.angle=c),h=C.x,a=C.y,Point.o(C),U.nt(M)}else if(s<-i||s>=i){const N=Point.a();this.NN(N),f=this.midAngle,r!==0&&(c=this.computeAngle(t,r,f),t.angle=c),h=N.x,a=N.y,Point.o(N)}else{let N,M,C=0;if(s>=0?(N=e.h[s],M=s<i-1?e.h[s+1]:N):(C=i+s,N=e.h[C],M=C>0?e.h[C-1]:N),N.equalsApprox(M)){let T,L;s>=0?(T=s>0?e.h[s-1]:N,L=s<i-2?e.h[s+2]:M):(T=C<i-1?e.h[C+1]:N,L=C>1?e.h[C-2]:M);const D=T.distanceSquaredPoint(N),F=M.distanceSquaredPoint(L);D>F+10?f=s>=0?T.directionPoint(N):N.directionPoint(T):F>D+10?f=s>=0?M.directionPoint(L):L.directionPoint(M):f=s>=0?T.directionPoint(L):L.directionPoint(T)}else f=s>=0?N.directionPoint(M):M.directionPoint(N);r!==0&&(c=this.computeAngle(t,r,f),t.angle=c),h=N.x+(M.x-N.x)*n,a=N.y+(M.y-N.y)*n}if(o.isNone()){t.moveTo(h,a,!0);return}else o.isNoSpot()&&(o=Spot.Center);const u=Transform.a();u.Hi(),u.lt(t.scale,t.scale),u.Ns(t.angle,0,0);const d=t.naturalBounds,m=Rect.V(0,0,d.width,d.height),g=Point.a();g.setRectSpot(m,o),u.Pt(g);let p=-g.x,y=-g.y;const x=d.width,b=d.height,S=Point.Qe(l),k=isNaN(l.x),P=isNaN(l.y);if(k||P){const N=x/2+Link.yS,M=b/2+Link.YF,C=f>=45&&f<=135,T=f>=225&&f<=315;r===0&&(C||T)?(S.x=P?N:l.y,S.y=k?M:l.x,C?s>=0||isNaN(s)&&n<.5||k&&(S.y=-M):T&&((s>=0||isNaN(s)&&n<.5)&&k&&(S.y=-M),P&&(S.x=-N))):(k&&(s>=0||isNaN(s)&&n<.5?S.x=N:S.x=-N),P&&(S.y=-M),S.rotate(f))}else S.rotate(f);h+=S.x,a+=S.y,u.km(m),p+=m.x,y+=m.y;const A=Point.V(h+p,a+y);t.move(A),Point.o(A),Point.o(S),Point.o(g),Rect.o(m),Transform.o(u)}dl(){let t=this.fromNode;if(t!==null){const e=t.findVisibleNode();if(e!==null&&(t=e),t.ps()||t.Nh())return!1}let i=this.toNode;if(i!==null){const e=i.findVisibleNode();if(e!==null&&(i=e),i.ps()||i.Nh())return!1}return!0}cN(t,i,e){return!1}fN(){}ze(){return!1}computeAngle(t,i,e){return Link.computeAngle(i,e)}static computeAngle(t,i){let e=0;switch(t){default:case 0:e=0;break;case 21:e=i;break;case 22:e=i+90;break;case 23:e=i-90;break;case 24:e=i+180;break;case 25:e=G.qi(i),e>90&&e<270&&(e-=180);break;case 26:e=G.qi(i+90),e>90&&e<270&&(e-=180);break;case 27:e=G.qi(i-90),e>90&&e<270&&(e-=180);break;case 28:if(e=G.qi(i),e>45&&e<135||e>225&&e<315)return 0;e>90&&e<270&&(e-=180);break}return G.qi(e)}get fromNode(){return this.Mo}set fromNode(t){const i=this.Mo;if(i!==t){Debug&&t!==null&&U.s(t,Node,Link,"fromNode");const e=this.fromPort;i!==null&&(this.No!==i&&i.ES(this,e),this.dw(),this.invalidateLayout(2)),this.Mo=t,t!==null&&this.Ji(t.isVisible()),this.fr=null,this.oi();const s=this.diagram;s!==null&&s.v&&s.partManager.setFromNodeForLink(this,t,i);const n=this.fromPort,o=this.fromPortChanged;if(o!==null){let r=!0;s!==null&&(r=s.v,s.v=!0),o(this,e,n),s!==null&&(s.v=r)}t!==null&&(this.No!==t&&t.OS(this,n),this.gw(),this.invalidateLayout(1)),this.t("fromNode",i,t),this.dg()}}get fromPortId(){return this.Co}set fromPortId(t){const i=this.Co;if(i!==t){Debug&&U.i(t,"string",Link,"fromPortId");const e=this.fromPort;e!==null&&this.fromNode?.ne(e),this.dw(),this.Co=t;const s=this.fromPort;s!==null&&this.fromNode?.ne(s);const n=this.diagram;if(n!==null){const o=this.data,r=n.model;o!==null&&r.cc()&&r.setFromPortIdForLinkData(o,t)}if(e!==s){this.fr=null,this.oi();const o=this.fromPortChanged;if(o!==null){let r=!0;n!==null&&(r=n.v,n.v=!0),o(this,e,s),n!==null&&(n.v=r)}}this.gw(),this.t("fromPortId",i,t)}}get fromPort(){const t=this.Mo;if(t===null)return null;const i=this.Co;return t.findPort(i)}get fromPortChanged(){return this.mg}set fromPortChanged(t){const i=this.mg;i!==t&&(t!==null&&U.C(t,Link,"fromPortChanged"),this.mg=t,this.t("fromPortChanged",i,t))}get toNode(){return this.No}set toNode(t){const i=this.No;if(i!==t){Debug&&t!==null&&U.s(t,Node,Link,"toNode");const e=this.toPort;i!==null&&(this.Mo!==i&&i.ES(this,e),this.dw(),this.invalidateLayout(2)),this.No=t,t!==null&&this.Ji(t.isVisible()),this.fr=null,this.oi();const s=this.diagram;s!==null&&s.v&&s.partManager.setToNodeForLink(this,t,i);const n=this.toPort,o=this.toPortChanged;if(o!==null){let r=!0;s!==null&&(r=s.v,s.v=!0),o(this,e,n),s!==null&&(s.v=r)}t!==null&&(this.Mo!==t&&t.OS(this,n),this.gw(),this.invalidateLayout(1)),this.t("toNode",i,t),this.dg()}}get toPortId(){return this.Ao}set toPortId(t){const i=this.Ao;if(i!==t){Debug&&U.i(t,"string",Link,"toPortId");const e=this.toPort;e!==null&&this.toNode?.ne(e),this.dw(),this.Ao=t;const s=this.toPort;s!==null&&this.toNode?.ne(s);const n=this.diagram;if(n!==null){const o=this.data,r=n.model;o!==null&&r.cc()&&r.setToPortIdForLinkData(o,t)}if(e!==s){this.fr=null,this.oi();const o=this.toPortChanged;if(o!==null){let r=!0;n!==null&&(r=n.v,n.v=!0),o(this,e,s),n!==null&&(n.v=r)}}this.gw(),this.t("toPortId",i,t)}}get toPort(){const t=this.No;if(t===null)return null;const i=this.Ao;return t.findPort(i)}get toPortChanged(){return this.pg}set toPortChanged(t){const i=this.pg;i!==t&&(t!==null&&U.C(t,Link,"toPortChanged"),this.pg=t,this.t("toPortChanged",i,t))}get fromSpot(){return this.xt!==null?this.xt.va:Spot.Default}set fromSpot(t){const i=this.fromSpot;if(!i.equals(t)){if(Debug&&U.s(t,Spot,Link,"fromSpot"),t=t.T(),this.ns().va=t,this.t("fromSpot",i,t),i.isSide()||t.isSide()){const e=this.fromNode;e!==null&&e.ne(this.fromPort)}this.oi()}}get fromEndSegmentLength(){return this.xt!==null?this.xt.ja:NaN}set fromEndSegmentLength(t){const i=this.fromEndSegmentLength;if(i!==t){if(Debug&&U.i(t,"number",Link,"fromEndSegmentLength"),t<0&&U.q(t,">= 0",Link,"fromEndSegmentLength"),this.ns().ja=t,this.t("fromEndSegmentLength",i,t),this.computeSpot(!0,this.fromPort).isSide()){const e=this.fromNode;e!==null&&e.ne(this.fromPort)}this.oi()}}get fromShortLength(){return this.xt!==null?this.xt.$a:NaN}set fromShortLength(t){const i=this.fromShortLength;i!==t&&(Debug&&U.i(t,"number",Link,"fromShortLength"),this.ns().$a=t,this.ge(),this.t("fromShortLength",i,t))}get toSpot(){return this.xt!==null?this.xt.Wa:Spot.Default}set toSpot(t){const i=this.toSpot;if(!i.equals(t)){if(Debug&&U.s(t,Spot,Link,"toSpot"),t=t.T(),this.ns().Wa=t,this.t("toSpot",i,t),i.isSide()||t.isSide()){const e=this.toNode;e!==null&&e.ne(this.toPort)}this.oi()}}get toEndSegmentLength(){return this.xt!==null?this.xt.Ja:NaN}set toEndSegmentLength(t){const i=this.toEndSegmentLength;if(i!==t){if(Debug&&U.i(t,"number",Link,"toEndSegmentLength"),t<0&&U.q(t,">= 0",Link,"toEndSegmentLength"),this.ns().Ja=t,this.t("toEndSegmentLength",i,t),this.computeSpot(!1,this.toPort).isSide()){const e=this.toNode;e!==null&&e.ne(this.toPort)}this.oi()}}get toShortLength(){return this.xt!==null?this.xt.Za:NaN}set toShortLength(t){const i=this.toShortLength;i!==t&&(Debug&&U.i(t,"number",Link,"toShortLength"),this.ns().Za=t,this.ge(),this.t("toShortLength",i,t))}dg(){const t=this.fromNode,i=this.toNode;let e=null;if(t!==null?i!==null?e=t.findCommonContainingGroup(i):e=t.containingGroup:i!==null?e=i.containingGroup:e=null,this.s4(e),this.isLabeledLink){const s=this.labelNodes;for(;s.next();){const n=s.value;n.containingGroup=e}}}s4(t){const i=this.Hh;if(i!==t){i!==null&&i.vN(this),this.Hh=t,t!==null&&t.WN(this);const e=this.containingGroupChanged;if(e!==null){let s=!0;const n=this.diagram;n!==null&&(s=n.v,n.v=!0),e(this,i,t),n!==null&&(n.v=s)}this.is&&(this.iA===i||this.eA===i)&&this.oi()}}zh(){const t=this.containingGroup;t!==null&&this.fromNode!==t&&this.toNode!==t&&t.computesBoundsIncludingLinks&&super.zh()}getOtherNode(t){Debug&&U.s(t,Node,Link,"getOtherNode:node");const i=this.fromNode;return t===i?this.toNode:i}getOtherPort(t){Debug&&U.s(t,GraphObject,Link,"getOtherPort:port");const i=this.fromPort;return t===i?this.toPort:i}get isLabeledLink(){return this.dn===null?!1:this.dn.count>0}get labelNodes(){return this.dn===null?EmptyIterator.instance:this.dn.iterator}RF(t){this.dn===null&&(this.dn=new GSet),this.dn.add(t),this.g()}IF(t){this.dn!==null&&(this.dn.delete(t),this.g())}w0(t){if(super.w0(t),this.pc()&&this.invalidateOtherJumpOvers(this.actualBounds),!t){const i=this.Mo;let e=null;i!==null&&(e=this.fromPort,i.OS(this,e));const s=this.No;let n=null;s!==null&&(n=this.toPort,(s!==i||n!==e)&&s.OS(this,n)),this.gw()}}x0(t){if(super.x0(t),this.pc()&&this.invalidateOtherJumpOvers(this.actualBounds),!t){const i=this.Mo;let e=null;i!==null&&(e=this.fromPort,i.ES(this,e));const s=this.No;let n=null;s!==null&&(n=this.toPort,(s!==i||n!==e)&&s.ES(this,n)),this.dw()}}Mf(){if(this.is=!0,this.dn!==null){const i=this.diagram;if(i!==null){const s=this.dn.copy().iterator;for(;s.next();){const n=s.value;i.remove(n)}}}if(this.data!==null){const i=this.diagram;i!==null&&i.partManager.aA(this)}}updateRelationshipsFromData(){if(this.data===null)return;const i=this.diagram;i!==null&&i.partManager.updateRelationshipsFromData(this)}move(t,i){const e=i?this.location:this.position;let s=e.x;isNaN(s)&&(s=0);let n=e.y;isNaN(n)&&(n=0);const o=t.x-s,r=t.y-n;if(i===!0)super.move(t,!1);else{const h=Point.V(e.x+o,e.y+r);super.move(h,!1),Point.o(h)}this.Ir(o,r);const l=this.labelNodes;for(;l.next();){const h=l.value,a=h.position;h.moveTo(a.x+o,a.y+r)}}get relinkableFrom(){return(this.Lt&1)!==0}set relinkableFrom(t){const i=(this.Lt&1)!==0;i!==t&&(Debug&&U.i(t,"boolean",Link,"relinkableFrom"),this.Lt=this.Lt^1,this.t("relinkableFrom",i,t),this.invalidateAdornments())}get relinkableTo(){return(this.Lt&2)!==0}set relinkableTo(t){const i=(this.Lt&2)!==0;i!==t&&(Debug&&U.i(t,"boolean",Link,"relinkableTo"),this.Lt=this.Lt^2,this.t("relinkableTo",i,t),this.invalidateAdornments())}canRelinkFrom(){if(!this.relinkableFrom)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowRelink)return!1;const i=t.diagram;return!(i!==null&&!i.allowRelink)}canRelinkTo(){if(!this.relinkableTo)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowRelink)return!1;const i=t.diagram;return!(i!==null&&!i.allowRelink)}get resegmentable(){return(this.Lt&4)!==0}set resegmentable(t){const i=(this.Lt&4)!==0;i!==t&&(Debug&&U.i(t,"boolean",Link,"resegmentable"),this.Lt=this.Lt^4,this.t("resegmentable",i,t),this.invalidateAdornments())}get isTreeLink(){return(this.Lt&8)!==0}set isTreeLink(t){const i=(this.Lt&8)!==0;i!==t&&(Debug&&U.i(t,"boolean",Link,"isTreeLink"),this.Lt=this.Lt^8,this.t("isTreeLink",i,t),this.fromNode!==null&&this.fromNode.v0(),this.toNode!==null&&this.toNode.v0())}get path(){const t=this.findMainElement();return t instanceof Shape?t:null}get routeBounds(){return this.updateRoute(),this.uc}cA(){const t=this.uc;let i=1/0,e=1/0;const s=this.pointsCount;if(s===0)t.e(NaN,NaN,0,0);else if(s===1){const n=this.getPoint(0);i=Math.min(n.x,i),e=Math.min(n.y,e),t.e(n.x,n.y,0,0)}else if(s===2){const n=this.getPoint(0),o=this.getPoint(1);i=Math.min(n.x,o.x),e=Math.min(n.y,o.y),t.e(n.x,n.y,0,0),t.unionPoint(o)}else if(this.computeCurve()===9&&s>=3&&!this.isOrthogonal){let n=this.getPoint(0);if(i=n.x,e=n.y,t.e(i,e,0,0),s===3){const o=this.getPoint(1);i=Math.min(o.x,i),e=Math.min(o.y,e);const r=this.getPoint(2);i=Math.min(r.x,i),e=Math.min(r.y,e),G.Yu(n.x,n.y,o.x,o.y,o.x,o.y,r.x,r.y,.5,t)}else for(let o=3;o<s;o+=3){const r=this.getPoint(o-2);o+3>=s&&(o=s-1);const l=this.getPoint(o-1),h=this.getPoint(o);G.Yu(n.x,n.y,r.x,r.y,l.x,l.y,h.x,h.y,.5,t),i=Math.min(h.x,i),e=Math.min(h.y,e),n=h}}else{const n=this.getPoint(0),o=this.getPoint(1);i=Math.min(n.x,o.x),e=Math.min(n.y,o.y),t.e(n.x,n.y,0,0),t.unionPoint(o);for(let r=2;r<s;r++){const l=this.getPoint(r);i=Math.min(l.x,i),e=Math.min(l.y,e),t.unionPoint(l)}}this.BS.e(i-t.x,e-t.y)}get midPoint(){return this.NN(new Point)}NN(t){return this.updateRoute(),this.computeMidPoint(t)}computeMidPoint(t){const i=this.pointsCount;if(i===0)return t.f(Point.Pn),t;if(i===1)return t.f(this.getPoint(0)),t;if(i===2){const a=this.getPoint(0),c=this.getPoint(1);return t.e((a.x+c.x)/2,(a.y+c.y)/2),t}if(this.isOrthogonal&&(this.computeCorner()>=15||this.computeCurve()===9)){this.bt.getPointAlongPath(.5,t),t.add(this.getPoint(0));const a=this.bt.figures.first();return t.offset(-a.startX,-a.startY),t}if(this.computeCurve()===9){if(i===3){const f=this.getPoint(0),u=this.getPoint(1),d=this.getPoint(2);return G.PT(f.x,f.y,u.x,u.y,u.x,u.y,d.x,d.y,t),t}const a=(i-1)/3|0,c=(a/2|0)*3;if(a%2===1){const f=this.getPoint(c),u=this.getPoint(c+1),d=this.getPoint(c+2),m=this.getPoint(c+3);return G.PT(f.x,f.y,u.x,u.y,d.x,d.y,m.x,m.y,t),t}else return t.f(this.getPoint(c)),t}const e=this.flattenedLengths,s=this.flattenedTotalLength;let n=0,o=0,r=0;for(;n<s/2&&o<i&&(r=e[o],!(n+r>s/2));)n+=r,o++;const l=this.getPoint(o),h=this.getPoint(o+1);if(Math.abs(l.x-h.x)<1)l.y>h.y?t.e(l.x,l.y-(s/2-n)):t.e(l.x,l.y+(s/2-n));else if(Math.abs(l.y-h.y)<1)l.x>h.x?t.e(l.x-(s/2-n),l.y):t.e(l.x+(s/2-n),l.y);else{const a=(s/2-n)/r,c=a*(h.x-l.x),f=a*(h.y-l.y);t.e(l.x+c,l.y+f)}return t}get midAngle(){return this.updateRoute(),this.computeMidAngle()}computeMidAngle(){const t=this.pointsCount;if(t<2)return NaN;if(t===2){const h=this.getPoint(0),a=this.getPoint(1);return h.directionPoint(a)}if(this.isOrthogonal&&(this.computeCorner()>=15||this.computeCurve()===9))return this.bt.getAngleAlongPath(.5);if(this.computeCurve()===9&&t>=4){const h=(t-1)/3|0;let a=(h/2|0)*3;if(h%2===1){a=Math.floor(a);const c=this.getPoint(a),f=this.getPoint(a+1),u=this.getPoint(a+2),d=this.getPoint(a+3);return G.RI(c.x,c.y,f.x,f.y,u.x,u.y,d.x,d.y)}else if(a>0&&a+1<t){const c=this.getPoint(a-1),f=this.getPoint(a+1);return c.directionPoint(f)}}const i=this.flattenedLengths,e=this.flattenedTotalLength;let s=0,n=0,o=0;for(;s<e/2&&n<t&&(o=i[n],!(s+o>e/2));)s+=o,n++;const r=this.getPoint(n),l=this.getPoint(n+1);if(Math.abs(r.x-l.x)<.5&&Math.abs(r.y-l.y)<Link.rA){if(n>0&&n<t-2){const h=this.getPoint(n-1),a=this.getPoint(n+2);return h.x<a.x?0:h.x>a.x?180:h.y<a.y?90:270}}else if(Math.abs(r.y-l.y)<.5&&Math.abs(r.x-l.x)<Link.rA&&n>0&&n<t-2){const h=this.getPoint(n-1),a=this.getPoint(n+2);return h.y<a.y?90:h.y>a.y?270:h.x<a.x?0:180}return r.directionPoint(l)}get flattenedLengths(){return this.dc!==null?this.dc:(this.is||this.zS(),this.n4())}get flattenedTotalLength(){let t=this.VS;if(isNaN(t)){const i=this.flattenedLengths,e=i.length;t=0;for(let s=0;s<e;s++)t+=i[s];this.VS=t}return t}n4(){this.dc===null?this.dc=[]:this.dc.length=0;const t=this.dc,i=this.pointsCount;for(let e=0;e<i-1;e++){let s=0;const n=this.getPoint(e),o=this.getPoint(e+1);G.H(n.x,o.x)?(s=o.y-n.y,s<0&&(s=-s),t.push(s)):G.H(n.y,o.y)?(s=o.x-n.x,s<0&&(s=-s),t.push(s)):(s=Math.sqrt(n.distanceSquaredPoint(o)),t.push(s))}return t}get points(){return this.Ri}set points(t){const i=this.Ri;if(i===t)return;let e=null;if(Array.isArray(t))e=this.convertPointsArrayToList(t);else if(t instanceof List){e=t.copy();const n=e.iterator;for(;n.next();)n.value.S()}else U.n("Link.points value is not an instance of List or Array: "+t);if(e===null)return;e.S(),this.Ri=e,this.ge(),this.zS();const s=this.diagram;s!==null&&(!s.ga&&!s.undoManager.isUndoingRedoing&&s.T1.add(this),s.animationManager.Li&&s.animationManager.s2(this,e)),this.t("points",i,e)}convertPointsArrayToList(t){let i=null,e=t.length%2===0;if(e){for(let s=0;s<t.length;s++)if(typeof t[s]!="number"||isNaN(t[s])){e=!1;break}}if(e){i=new List;for(let s=0;s<t.length/2;s++)i.add(new Point(t[s*2],t[s*2+1]).S())}else{let s=!0;for(let n=0;n<t.length;n++){const o=t[n];if(!U.st(o)||typeof o.x!="number"||isNaN(o.x)||typeof o.y!="number"||isNaN(o.y)){s=!1;break}}if(s){i=new List;for(let n=0;n<t.length;n++){const o=t[n];i.add(new Point(o.x,o.y).S())}}else Debug&&U.n("Link.points array must contain only an even number of numbers or objects with x and y properties, not: "+t)}return i}get pointsCount(){return this.Ri.count}getPoint(t){return this.Ri.h[t]}setPoint(t,i){Debug&&(U.s(i,Point,Link,"setPoint"),i.isReal()||U.n("Link.setPoint called with a Point that does not have real numbers: "+i.toString())),Debug&&this.ve===null&&U.n("Call Link.startRoute before modifying the points of the route."),this.Ri.setElt(t,i)}setPointAt(t,i,e){Debug&&(U.r(i,Link,"setPointAt:x"),U.r(e,Link,"setPointAt:y")),Debug&&this.ve===null&&U.n("Call Link.startRoute before modifying the points of the route."),this.Ri.setElt(t,new Point(i,e))}insertPoint(t,i){Debug&&(U.s(i,Point,Link,"insertPoint"),i.isReal()||U.n("Link.insertPoint called with a Point that does not have real numbers: "+i.toString())),Debug&&this.ve===null&&U.n("Call Link.startRoute before modifying the points of the route."),this.Ri.insertAt(t,i)}insertPointAt(t,i,e){Debug&&(U.r(i,Link,"insertPointAt:x"),U.r(e,Link,"insertPointAt:y")),Debug&&this.ve===null&&U.n("Call Link.startRoute before modifying the points of the route."),this.Ri.insertAt(t,new Point(i,e))}addPoint(t){Debug&&(U.s(t,Point,Link,"addPoint"),t.isReal()||U.n("Link.addPoint called with a Point that does not have real numbers: "+t.toString())),Debug&&this.ve===null&&U.n("Call Link.startRoute before modifying the points of the route."),this.Ri.add(t)}addPointAt(t,i){Debug&&(U.r(t,Link,"insertPointAt:x"),U.r(i,Link,"insertPointAt:y")),Debug&&this.ve===null&&U.n("Call Link.startRoute before modifying the points of the route."),this.Ri.add(new Point(t,i))}removePoint(t){Debug&&this.ve===null&&U.n("Call Link.startRoute before modifying the points of the route."),this.Ri.removeAt(t)}clearPoints(){Debug&&this.ve===null&&U.n("Call Link.startRoute before modifying the points of the route."),this.Ri.clear()}Ir(t,i){if(t===0&&i===0)return;if(this.pointsCount===0){this.defaultFromPoint.isReal()&&this.defaultFromPoint.offset(t,i),this.defaultToPoint.isReal()&&this.defaultToPoint.offset(t,i);return}const e=this.is,s=new List,n=this.Ri.iterator;for(;n.next();){const l=n.value;s.add(new Point(l.x+t,l.y+i).S())}s.S();const o=this.Ri;this.Ri=s;const r=this.diagram;isNaN(t)||isNaN(i)||r!==null&&r.animationManager.Li?this.g():(this.un.e(this.un.x+t,this.un.y+i),this.wt.e(this.wt.x+t,this.wt.y+i),this.zf()),e?this.zS():(this.defaultFromPoint.isReal()&&(this.defaultFromPoint=this.getPoint(0)),this.defaultToPoint.isReal()&&(this.defaultToPoint=this.getPoint(this.pointsCount-1))),r!==null&&r.animationManager.Li&&r.animationManager.s2(this,s),this.t("points",o,s)}startRoute(){this.ve===null&&(this.ve=this.Ri,this.Ri=this.Ri.copy())}commitRoute(){if(this.ve===null)return;const t=this.ve,i=this.Ri;this.ve=null;const e=this.diagram;e!==null&&e.animationManager.Li&&e.animationManager.s2(this,i),this.ge(),this.zS(),this.t("points",t,i)}rollbackRoute(){this.ve!==null&&(this.Ri=this.ve,this.ve=null,this.cA())}wO(){this.Gr!==null&&(this.points=this.Gr,this.Gr=null)}zS(){if(this.Ri.count===0){this.is=!1;return}this.is=!0,this.cA(),this.dc=null,this.VS=NaN,this.defaultFromPoint=this.getPoint(0),this.defaultToPoint=this.getPoint(this.pointsCount-1),this.XS(!1)}invalidateRoute(){this.oi()}oi(){if(this.suspendsRouting)return;const t=this.path;if(t===null)return;const i=this.diagram;if(i){if(i.T1.has(this)||i.undoManager.isUndoingRedoing)return;const e=i.animationManager;if(e.isTicking&&!e.isAnimating)return;this.Gr!==null&&!e.isTicking&&(this.Gr=null)}this.is=!1,this.g(),t.g()}get is(){return(this.Lt&16)!==0}set is(t){(this.Lt&16)!==0!==t&&(this.Lt=this.Lt^16)}get suspendsRouting(){return(this.Lt&32)!==0}set suspendsRouting(t){(this.Lt&32)!==0!==t&&(this.Lt=this.Lt^32)}get mw(){return(this.Lt&64)!==0}set mw(t){(this.Lt&64)!==0!==t&&(this.Lt=this.Lt^64)}get fA(){return(this.Lt&512)!==0}set fA(t){(this.Lt&512)!==0!==t&&(this.Lt=this.Lt^512)}get defaultFromPoint(){return this._N}set defaultFromPoint(t){this._N=t&&t.isReal()?t.copy():Point.Pn}get defaultToPoint(){return this.tA}set defaultToPoint(t){this.tA=t&&t.isReal()?t.copy():Point.Pn}updateRoute(){if(this.is||this.mw)return;let t=!0;try{this.mw=!0,this.startRoute(),t=this.computePoints()}catch{this.mw=!1,this.rollbackRoute()}finally{this.mw=!1,t?this.commitRoute():this.rollbackRoute()}}computePoints(){const t=this.diagram;if(t===null)return!1;let i=this.fromNode,e=null;if(i===null?(Link.gc||(Link.gc=new Node,Link.gc.desiredSize=Size.ua,Link.gc.ensureBounds()),this.defaultFromPoint.isReal()&&(Link.gc.location=this.defaultFromPoint,Link.gc.ensureBounds(),i=Link.gc,e=Link.gc)):e=this.fromPort,e!==null&&!i.isVisible()){const m=i.findVisibleNode();m!==null&&m!==i?(i=m,e=m.port):i=m}if(this.iA=i,i===null||!i.location.isReal()||e===null||(e=i.findVisiblePort(e),e===null))return!1;let s=this.toNode,n=null;if(s===null?(Link.mc||(Link.mc=new Node,Link.mc.desiredSize=Size.ua,Link.mc.ensureBounds()),this.defaultToPoint.isReal()&&(Link.mc.location=this.defaultToPoint,Link.mc.ensureBounds(),s=Link.mc,n=Link.mc)):n=this.toPort,n!==null&&!s.isVisible()){const m=s.findVisibleNode();m!==null&&m!==s?(s=m,n=m.port):s=m}if(this.eA=s,s===null||!s.location.isReal()||n===null||(n=s.findVisiblePort(n),n===null))return!1;const o=this.pointsCount,r=this.computeSpot(!0,e),l=this.computeSpot(!1,n),h=this.Rl(r),a=this.Rl(l),c=e===n&&e!==null,f=this.isOrthogonal;let u=this.curve===9;c&&!f?(u=!0,this.fr=!0):this.fr=!1;const d=this.computeAdjusting()===0||c;if(!f&&!c&&h&&a){let m=!1;if(!d&&o>=3){let g=this.getLinkPoint(i,e,r,!0,!1,s,n),p=this.getLinkPoint(s,n,l,!1,!1,i,e);m=this.adjustPoints(0,g,o-1,p),m&&(g=this.getLinkPoint(i,e,r,!0,!1,s,n),p=this.getLinkPoint(s,n,l,!1,!1,i,e),this.adjustPoints(0,g,o-1,p))}m||(this.clearPoints(),u?this.o4(i,e,r,s,n,l):this.r4(i,e,r,s,n,l))}else{const m=c?this.computeCurviness():0;d&&(f&&this.isAvoiding||c)&&this.clearPoints();const g=this.getLinkPoint(i,e,r,!0,f,s,n),p=this.getLinkPoint(s,n,l,!1,f,i,e);let y=0,x=0,b=0;if(f||!h||c){b=this.getLinkDirection(i,e,g,r,!0,f,s,n);let M=this.computeEndSegmentLength(i,e,r,!0,b);if(c&&(h||r.equals(l)||!f&&r.x+l.x===1&&r.y+l.y===1)&&(b-=f?90:Link.GF,m<0&&(b-=180)),b=G.qi(b),c&&(M+=Math.abs(m)*(f?1:2)),b===0?y=M:b===90?x=M:b===180?y=-M:b===270?x=-M:(y=M*Math.cos(b*Math.PI/180),x=M*Math.sin(b*Math.PI/180)),r.isNoSpot()&&c){const C=e.getDocumentPoint(Spot.Center,Point.a()),T=Point.V(C.x+y*Link.ou,C.y+x*Link.ou);this.getLinkPointFromPoint(i,e,C,T,!0,g),Point.o(C),Point.o(T)}}let S=0,k=0,P=0;if(f||!a||c){P=this.getLinkDirection(s,n,p,l,!1,f,i,e);let M=this.computeEndSegmentLength(s,n,l,!1,P);if(c&&(a||r.equals(l)||!f&&r.x+l.x===1&&r.y+l.y===1)&&(P+=f?0:Link.qF,m<0&&(P+=180)),P=G.qi(P),c&&(M+=Math.abs(m)*(f?1:2)),P===0?S=M:P===90?k=M:P===180?S=-M:P===270?k=-M:(S=M*Math.cos(P*Math.PI/180),k=M*Math.sin(P*Math.PI/180)),l.isNoSpot()&&c){const C=n.getDocumentPoint(Spot.Center,Point.a()),T=Point.V(C.x+S*Link.ou,C.y+k*Link.ou);this.getLinkPointFromPoint(s,n,C,T,!1,p),Point.o(C),Point.o(T)}}let A=g;(f||!h||c)&&(A=new Point(g.x+y,g.y+x));let N=p;(f||!a||c)&&(N=new Point(p.x+S,p.y+k)),!d&&!f&&h&&o>3&&this.adjustPoints(0,g,o-2,N)?this.setPoint(o-1,p):!d&&!f&&a&&o>3&&this.adjustPoints(1,A,o-1,p)?this.setPoint(0,g):!d&&(f?o>=6:o>4)&&this.adjustPoints(1,A,o-2,N)?(this.setPoint(0,g),this.setPoint(o-1,p)):(this.clearPoints(),this.addPoint(g),(f||!h||c)&&this.addPoint(A),f&&this.addOrthoPoints(A,b,N,P,i,s),(f||!a||c)&&this.addPoint(N),this.addPoint(p))}return t.addInvalidRoute(this),!0}uA(t,i){return Math.abs(i.x-t.x)>Math.abs(i.y-t.y)?(i.x>=t.x?i.x=t.x+9e9:i.x=t.x-9e9,i.y=t.y):(i.y>=t.y?i.y=t.y+9e9:i.y=t.y-9e9,i.x=t.x),i}getLinkPointFromPoint(t,i,e,s,n,o){if(o===void 0&&(o=new Point),t===null||i===null)return o.f(e),o;if(!t.isVisible()){const u=t.findVisibleNode();u!==null&&u!==t&&(t=u,i=t.port)}let r=0,l=0,h=0,a=0,c=null,f=i.panel;if(f!==null&&!f.Bn()&&(f=f.panel),f===null)r=s.x,l=s.y,h=e.x,a=e.y;else{c=f.nn;const u=1/(c.m11*c.m22-c.m12*c.m21),d=c.m22*u,m=-c.m12*u,g=-c.m21*u,p=c.m11*u,y=u*(c.m21*c.dy-c.m22*c.dx),x=u*(c.m12*c.dx-c.m11*c.dy);r=s.x*d+s.y*g+y,l=s.x*m+s.y*p+x,h=e.x*d+e.y*g+y,a=e.x*m+e.y*p+x}return i.Rf(r,l,h,a,o),c!==null&&o.D(c),o}l4(t,i){const e=t.Vd;return e!==null?e.$F(i):null}YS(t){if(t===null)return null;let i=t.Vd;return i===null&&(i=new Knot(t.part,t),t.Vd=i),i.$F(this)}getLinkPoint(t,i,e,s,n,o,r,l){if(l===void 0&&(l=new Point),e.isSpot()&&!this.Rl(e))return i.getDocumentPoint(e,l),l;if(e.isSide()){const c=this.YS(i);if(c!==null){const f=c.yc;if(l.f(f),n&&this.routing===7){const u=this.YS(r);if(u!==null&&c.ru<u.ru){const d=Point.a(),m=Point.a(),g=Rect.a();i.getDocumentPoint(Spot.TopLeft,d),i.getDocumentPoint(Spot.BottomRight,m);const p=d.x,y=d.y,x=m.x,b=m.y;g.x=Math.min(p,x),g.y=Math.min(y,b),g.width=Math.abs(p-x),g.height=Math.abs(y-b);const S=this.computeSpot(!s,r),k=this.getLinkPoint(o,r,S,!s,n,t,i,m);(e.includesSide(Spot.LeftSide)||e.includesSide(Spot.RightSide))&&k.y>=g.y&&k.y<=g.y+g.height?l.y=k.y:(e.includesSide(Spot.TopSide)||e.includesSide(Spot.BottomSide))&&k.x>=g.x&&k.x<=g.x+g.width&&(l.x=k.x),Rect.o(g),Point.o(d),Point.o(m)}}return l}}const h=i.getDocumentPoint(this.Sg(e,s),Point.a()),a=Point.a();if(this.pointsCount>(n?6:2))a.f(s?this.getPoint(1):this.getPoint(this.pointsCount-2)),n&&this.uA(h,a);else if(t?.isMemberOf(o)||o?.isMemberOf(t)){const c=i.getDocumentBounds(Rect.a()),f=r.getDocumentBounds(Rect.a());c.isReal()&&f.isReal()?f.containsRect(c)?(a.f(h),this.dA(f,h.x,h.y,0,this.computeSpot(r===this.toPort,r),a)):c.containsRect(f)?(r.getDocumentPoint(Spot.Center,a),this.dA(c,a.x,a.y,0,this.computeSpot(i===this.toPort,i),a)):this.gA(r,h,s,n,a):this.gA(r,h,s,n,a),Rect.o(c),Rect.o(f)}else this.gA(r,h,s,n,a);return this.getLinkPointFromPoint(t,i,h,a,s,l),Point.o(a),Point.o(h),l}gA(t,i,e,s,n){const o=this.computeSpot(!e,t);t.getDocumentPoint(this.Sg(o,!e),n),s&&this.uA(i,n)}getLinkDirection(t,i,e,s,n,o,r,l){let h=this.h4(t,i,e,s,n,o,r,l);if(t&&r){const c=Rect.a(),f=Rect.a();if(s.isNone()&&t.isMemberOf(r)&&i&&l){if(i.getDocumentBounds(c),l.getDocumentBounds(f),c.isReal()&&f.isReal()&&f.containsRect(c)){const u=this.computeSpot(l===this.toPort,l);u.equals(Spot.Left)||u.equals(Spot.LeftSide)?h=180:u.equals(Spot.Right)||u.equals(Spot.RightSide)?h=0:u.equals(Spot.Top)||u.equals(Spot.TopSide)?h=270:u.equals(Spot.Bottom)||u.equals(Spot.BottomSide)?h=90:h=G.qi(h+180)}}else r?.isMemberOf(t)&&i&&l&&(i.getDocumentBounds(c),l.getDocumentBounds(f),c.isReal()&&f.isReal()&&c.containsRect(f)&&(h=G.qi(h+180)));Rect.o(c),Rect.o(f)}if(this.Rl(s)||i===null)return h;const a=i.getDocumentAngle();return a===0?h:(45<=a&&a<135?h+=90:135<=a&&a<225?h+=180:225<=a&&a<315&&(h+=270),G.qi(h))}h4(t,i,e,s,n,o,r,l){if(s.isSpot())return G.Sx(null,s.x,s.y);if(s.isSide()){const f=this.YS(i);if(f!==null)switch(f.ye){case 1:return 270;case 8:return 90;case 2:return 180;default:return 0}else return s.includesSide(Spot.TopSide)?270:s.includesSide(Spot.BottomSide)?90:s.includesSide(Spot.LeftSide)?180:0}if(i===null||l===null)return 0;const h=i.getDocumentPoint(Spot.Center,Point.a()),a=Point.a();this.pointsCount>(o?6:2)?o?(a.f(n?this.getPoint(1):this.getPoint(this.pointsCount-2)),this.uA(h,a)):a.f(e):l.getDocumentPoint(Spot.Center,a);let c=0;return Math.abs(a.x-h.x)>Math.abs(a.y-h.y)?a.x>=h.x?c=0:c=180:a.y>=h.y?c=90:c=270,Point.o(a),Point.o(h),c}computeEndSegmentLength(t,i,e,s,n){if(i!==null&&e.isSide()){const r=this.YS(i);if(r!==null)return r.KS}let o=NaN;if(s?o=this.fromEndSegmentLength:o=this.toEndSegmentLength,i!==null&&isNaN(o))if(n===void 0&&(n=NaN),Link.lA>0&&this.computeCurve()===9&&!isNaN(n)&&e.isSpot()){const r=this.getOtherPort(i);if(r){const l=Point.a(),h=Point.a(),a=i.getDocumentPoint(e,l),c=r.getDocumentPoint(e.opposite(),h),f=n>=315||n<=45||n>=135&&n<=225;let u=Math.abs(f?a.x-c.x:a.y-c.y)/Link.lA;return u=Math.max(u,Link.hA),Point.o(l),Point.o(h),u}}else s?o=i.fromEndSegmentLength:o=i.toEndSegmentLength;return isNaN(o)&&(o=Link.hA),o}computeSpot(t,i){return i===void 0&&(i=null),t?this.a4(i||this.fromPort):this.c4(i||this.toPort)}a4(t){if(t===null)return Spot.Center;let i=this.fromSpot;return i.isDefault()&&(i=t.fromSpot),i===Spot.Default?Spot.None:i}c4(t){if(t===null)return Spot.Center;let i=this.toSpot;return i.isDefault()&&(i=t.toSpot),i===Spot.Default?Spot.None:i}Rl(t){return t===Spot.None||t.x===.5&&t.y===.5}Sg(t,i){return t.x===.5&&t.y===.5?t:Spot.Center}computeOtherPoint(t,i,e,s,n){if(n===void 0&&(n=new Point),this.computeAdjusting()!==0&&this.pointsCount>4)return this.getPoint(Math.floor(this.pointsCount/2));{const o=this.l4(i,this);if(o!==null)return n.f(o.yc),n;if(t instanceof Group){let r=this.fromNode,l=this.fromPort;(s===!1||s===void 0&&l===i)&&(r=this.toNode,l=this.toPort);const h=Rect.a(),a=Rect.a();if(l&&r?.isMemberOf(t)){const c=e===void 0?this.computeSpot(s===void 0?l===i:s,i):e;if(i.getDocumentBounds(h),l.getDocumentBounds(a),h.isReal()&&a.isReal()&&h.containsRect(a)){const f=l.getDocumentPoint(Spot.Center,n);return this.dA(h,f.x,f.y,0,c,f),Rect.o(h),Rect.o(a),f}}Rect.o(h),Rect.o(a)}return i.getDocumentPoint(Spot.Center,n)}}computeShortLength(t){if(t){let i=this.fromShortLength;if(isNaN(i)){const e=this.fromPort;e!==null&&(i=e.fromShortLength)}return isNaN(i)?0:i}else{let i=this.toShortLength;if(isNaN(i)){const e=this.toPort;e!==null&&(i=e.toShortLength)}return isNaN(i)?0:i}}m0(t,i,e,s,n,o){if(this.pickable===!1)return!1;i===void 0&&(i=null),e===void 0&&(e=null);let r;if(o===void 0?(r=Transform.a(),r.Hi()):r=o,r.Xc(this.D),this.containedInRect(t,r))return this.DN(i,e,n),o===void 0&&Transform.o(r),!0;if(this.intersectsRect(t,r)){let l=!1;if(!this.Hf){const h=this.E.h,a=h.length;for(let c=a;c--;){const f=h[c];if(!f.visible&&f!==this.locationObject)continue;const u=f.actualBounds,d=this.naturalBounds;if(u.x>d.width||u.y>d.height||u.x+u.width<0||u.y+u.height<0)continue;const m=f,g=Transform.a();if(g.set(r),m instanceof Panel?l=m.m0(t,i,e,s,n,g):this.path===m?m instanceof Shape&&(l=m.V3(t,s,g)):l=m.RD(t,s,g),l){let p=m;i!==null&&(p=i(m)),p&&(e===null||e(p))&&n.add(p)}Transform.o(g)}}return o===void 0&&Transform.o(r),l||this.background!==null}return o===void 0&&Transform.o(r),!1}get isOrthogonal(){return(this.fc&2)===2}static oA(t){return(t&2)===2}get isAvoiding(){return(this.fc&4)===4}computeCurve(){if(this.fr===null){const t=this.fromPort,i=t!==null&&t===this.toPort,e=this.isOrthogonal;this.fr=i&&!e}return this.fr?9:this.curve}computeCorner(){if(this.curve===9)return 0;let t=this.corner;return(isNaN(t)||t<0)&&(t=Link.HF),t}findMidLabel(){const t=this.path,i=this.E.h,e=i.length;for(let n=0;n<e;n++){const o=i[n];if(!(o===t||o.isPanelMain)&&(o.segmentIndex===-1/0||isNaN(o.segmentIndex)))return o}const s=this.labelNodes;for(;s.next();){const n=s.value;if(n.segmentIndex===-1/0||isNaN(n.segmentIndex))return n}return null}computeSpacing(){if(!this.isVisible())return 0;let t=Link.vF;t=Math.max(t,this.computeThickness());const i=this.fromPort,e=this.toPort;if(i!==null&&e!==null){const s=this.findMidLabel();if(s!==null){const n=s.naturalBounds,o=s.margin,r=isNaN(n.width)?Link.WF:n.width*s.scale+o.left+o.right,l=isNaN(n.height)?Link.jF:n.height*s.scale+o.top+o.bottom,h=s.segmentOrientation;if(h===21||h===25||h===24)t=Math.max(t,l);else if(h===23||h===27||h===22||h===26)t=Math.max(t,r);else{const c=i.getDocumentPoint(Spot.Center).directionPoint(e.getDocumentPoint(Spot.Center))/180*Math.PI;t=Math.max(t,Math.abs(Math.sin(c)*r)+Math.abs(Math.cos(c)*l)+1)}this.curve===9&&(t*=Link.KF)}}return t}arrangeBundledLinks(t,i){if(i)for(let e=0;e<t.length;e++){const s=t[e];s.computeAdjusting()===0&&s.oi()}}computeCurviness(){let t=this.curviness;if(isNaN(t)){t=Link.XF;const i=this.ur;if(i!==null){const e=U.ct();let s=0;const n=i.gn;for(let r=0;r<n.length;r++){const h=n[r].computeSpacing();e.push(h),s+=h}let o=-s/2;for(let r=0;r<n.length;r++){if(n[r]===this){t=o+e[r]/2;break}o+=e[r]}i.ew===this.fromNode&&(t=-t),U.nt(e)}}return t}computeThickness(){if(!this.isVisible())return 0;const t=this.path;return t!==null?Math.max(t.strokeWidth,1):1}hasCurviness(){return!isNaN(this.curviness)||this.ur!==null}r4(t,i,e,s,n,o){let r=this.getLinkPoint(t,i,e,!0,!1,s,n),l=this.getLinkPoint(s,n,o,!1,!1,t,i);if(this.ZF(t,i,e,r,s,n,o,l),this.addPoint(r),this.addPoint(l),this.hasCurviness()){const h=l.x-r.x,a=l.y-r.y,c=this.computeCurviness(),f=c,u=r.x+h/2,d=r.y+a/2;let m=u,g=d;if(G.u(a,0))h>0?g-=f:g+=f;else{const p=-h/a;let y=Math.sqrt(f*f/(p*p+1));c<0&&(y=-y),m=(a<0?-1:1)*y+u,g=p*(m-u)+d}this.insertPointAt(1,m,g)}}ZF(t,i,e,s,n,o,r,l){const h=o.getDocumentBounds(Rect.a()),a=i.getDocumentBounds(Rect.a());if(a.intersectsRect(h)){const c=Point.a();if(h.containsRect(a)){if(o.containsPoint(o.getLocalPoint(s,c))){const f=Point.a();i.getDocumentPoint(this.Sg(e,!0),f),l.f(f),this.mA(h,f.x,f.y,Link.ou,l),this.getLinkPointFromPoint(n,o,h.containsPoint(f)?f:s,l,!1,l),this.getLinkPointFromPoint(t,i,f,l,!0,s),Point.o(f)}}else if(a.containsRect(h)){if(i.containsPoint(i.getLocalPoint(l,c))){const f=Point.a();o.getDocumentPoint(this.Sg(r,!1),f),s.f(f),this.mA(a,f.x,f.y,Link.ou,s),this.getLinkPointFromPoint(t,i,a.containsPoint(f)?f:l,s,!0,s),this.getLinkPointFromPoint(n,o,f,s,!1,l),Point.o(f)}}else{const f=Point.a();i.getDocumentPoint(this.Sg(e,!0),f);const u=Point.a();o.getDocumentPoint(this.Sg(r,!1),u);const d=o.containsPoint(o.getLocalPoint(f,c)),m=i.containsPoint(i.getLocalPoint(u,c));if(d||m)s.f(f),l.f(u);else if(o.containsPoint(o.getLocalPoint(s,c))||i.containsPoint(i.getLocalPoint(l,c))){const g=s.x,p=s.y;s.x=l.x,s.y=l.y,l.x=g,l.y=p}Point.o(f),Point.o(u)}Point.o(c)}Rect.o(h),Rect.o(a)}dA(t,i,e,s,n,o){let r=-1;return n.equals(Spot.Left)||n.equals(Spot.LeftSide)?r=180:n.equals(Spot.Right)||n.equals(Spot.RightSide)?r=0:n.equals(Spot.Top)||n.equals(Spot.TopSide)?r=270:(n.equals(Spot.Bottom)||n.equals(Spot.BottomSide))&&(r=90),r===-1?this.mA(t,i,e,0,o):this.QF(t,i,e,0,r,o)}mA(t,i,e,s,n){const o=G.Sx(t,i,e);return this.QF(t,i,e,s,o,n)}QF(t,i,e,s,n,o){return n===0?o.x=t.right+s:n===90?o.y=t.bottom+s:n===180?o.x=t.x-s:n===270?o.y=t.y-s:n===45?(o.x=t.right+s,o.y=t.bottom+s):n===135?(o.x=t.x-s,o.y=t.bottom+s):n===225?(o.x=t.x-s,o.y=t.y-s):n===315&&(o.x=t.right+s,o.y=t.y-s),o}o4(t,i,e,s,n,o){let r=this.getLinkPoint(t,i,e,!0,!1,s,n),l=this.getLinkPoint(s,n,o,!1,!1,t,i);this.ZF(t,i,e,r,s,n,o,l),this.addPoint(r),this.addPoint(l);const h=l.x-r.x,a=l.y-r.y,c=this.computeCurviness();let f=0,u=0,d=r.x+h/3,m=r.y+a/3,g=d,p=m;G.u(a,0)?h>0?p-=c:p+=c:(f=-h/a,u=Math.sqrt(c*c/(f*f+1)),c<0&&(u=-u),g=(a<0?-1:1)*u+d,p=f*(g-d)+m),d=r.x+2*h/3,m=r.y+2*a/3;let y=d,x=m;G.u(a,0)?h>0?x-=c:x+=c:(y=(a<0?-1:1)*u+d,x=f*(y-d)+m),this.insertPointAt(1,g,p),this.insertPointAt(2,y,x),this.setPoint(0,this.getLinkPoint(t,i,e,!0,!1,s,n)),this.setPoint(3,this.getLinkPoint(s,n,o,!1,!1,t,i))}adjustPoints(t,i,e,s){let n=this.computeAdjusting();if(this.isOrthogonal){if(n===18)return!1;n===19&&(n=17)}switch(n){case 18:return this.f4(t,i,e,s);case 19:return this.u4(t,i,e,s);case 17:return this.d4(t,i,e,s);default:return!1}}f4(t,i,e,s){const n=this.getPoint(t),o=this.getPoint(e);if(n.equalsApprox(i)&&o.equalsApprox(s))return!0;const r=n.x,l=n.y,h=o.x,a=o.y;let c=h-r,f=a-l;const u=Math.sqrt(c*c+f*f);if(G.H(u,0))return!0;let d=0;G.H(c,0)?f<0?d=-Math.PI/2:d=Math.PI/2:(d=Math.atan(f/Math.abs(c)),c<0&&(d=Math.PI-d));const m=i.x,g=i.y,p=s.x,y=s.y,x=p-m,b=y-g,S=Math.sqrt(x*x+b*b);let k=0;G.H(x,0)?b<0?k=-Math.PI/2:k=Math.PI/2:(k=Math.atan(b/Math.abs(x)),x<0&&(k=Math.PI-k));const P=S/u,A=k-d;this.setPoint(t,i);for(let N=t+1;N<e;N++){const M=this.getPoint(N);c=M.x-r,f=M.y-l;const C=Math.sqrt(c*c+f*f);if(G.H(C,0))continue;let T=0;G.H(c,0)?f<0?T=-Math.PI/2:T=Math.PI/2:(T=Math.atan(f/Math.abs(c)),c<0&&(T=Math.PI-T));const L=T+A,D=C*P,F=m+D*Math.cos(L),R=g+D*Math.sin(L);this.setPointAt(N,F,R)}return this.setPoint(e,s),!0}u4(t,i,e,s){const n=this.getPoint(t),o=this.getPoint(e);if(n.equalsApprox(i)&&o.equalsApprox(s))return!0;const r=n.x,l=n.y,h=o.x,a=o.y,c=(h-r)**2+(a-l)**2,f=i.x,u=i.y,d=s.x,m=s.y;let g=0,p=1;d-f!==0?(g=(m-u)/(d-f),p=Math.sqrt(1+1/(g*g))):g=9e9,this.setPoint(t,i);for(let y=t+1;y<e;y++){const x=this.getPoint(y),b=x.x,S=x.y;let k=.5;c!==0&&(k=((r-b)*(r-h)+(l-S)*(l-a))/c);const P=r+k*(h-r),A=l+k*(a-l);let N=Math.sqrt((b-P)**2+(S-A)**2);S<g*(b-P)+A&&(N=-N),g>0&&(N=-N);const M=f+k*(d-f),C=u+k*(m-u);if(g!==0){const T=M+N/p,L=C-(T-M)/g;this.setPointAt(y,T,L)}else this.setPointAt(y,M,C+N)}return this.setPoint(e,s),!0}d4(t,i,e,s){if(this.isOrthogonal){let n=this.getPoint(t),o=this.getPoint(t+1),r=this.getPoint(t+2),l=o.x,h=o.y;const a=l,c=h;G.u(n.y,o.y)?G.u(o.x,r.x)?h=i.y:G.u(o.y,r.y)&&(l=i.x):G.u(n.x,o.x)&&(G.u(o.y,r.y)?l=i.x:G.u(o.x,r.x)&&(h=i.y)),this.setPointAt(t+1,l,h),n=this.getPoint(e),o=this.getPoint(e-1),r=this.getPoint(e-2);let f=o.x,u=o.y;const d=f,m=u;if(G.u(n.y,o.y)?G.u(o.x,r.x)?u=s.y:G.u(o.y,r.y)&&(f=s.x):G.u(n.x,o.x)&&(G.u(o.y,r.y)?f=s.x:G.u(o.x,r.x)&&(u=s.y)),this.setPointAt(e-1,f,u),this.ZL())return this.setPointAt(t+1,a,c),this.setPointAt(e-1,d,m),!1}return this.setPoint(t,i),this.setPoint(e,s),!0}addOrthoPoints(t,i,e,s,n,o){i=G.qi(i),s=G.qi(s);const c=s;i>=315||i<45?i=0:45<=i&&i<135?i=90:135<=i&&i<225?i=180:i=270,s>=315||s<45?s=0:45<=s&&s<135?s=90:135<=s&&s<225?s=180:s=270;const f=t,u=e,d=Rect.Qe(n.actualBounds),m=Rect.Qe(o.actualBounds);d.inflate(Link.Wh,Link.Wh),m.inflate(Link.Wh,Link.Wh),d.unionPoint(t),m.unionPoint(e);const g=Point.a(),p=Point.a();if(i===0)if(u.x>f.x||s===270&&u.y<f.y&&m.right>f.x||s===90&&u.y>f.y&&m.right>f.x)g.e(u.x,f.y),p.e(u.x,(f.y+u.y)/2),s===180?(g.x=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!1),p.x=g.x,p.y=u.y):s===270&&u.y<f.y||s===90&&u.y>f.y?(f.x<m.left?g.x=this.computeMidOrthoPosition(f.x,f.y,m.left,u.y,!1):f.x<m.right&&(s===270&&f.y<m.top||s===90&&f.y>m.bottom)?g.x=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!1):g.x=m.right,p.x=g.x,p.y=u.y):s===0&&f.x<m.left&&f.y>m.top&&f.y<m.bottom&&(g.x=f.x,f.y<u.y?g.y=Math.min(u.y,m.top):g.y=Math.max(u.y,m.bottom),p.y=g.y);else{if(g.e(f.x,u.y),p.e((f.x+u.x)/2,u.y),s===180||s===90&&u.y<d.top||s===270&&u.y>d.bottom){const y=m.containsPoint(f)||d.containsPoint(u);if(s===180&&y)g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!0);else if(u.y<f.y&&(s===180||s===90)){const x=y?Math.min(u.y,m.bottom):Math.max(u.y,m.bottom);g.y=this.computeMidOrthoPosition(f.x,d.top,u.x,x,!0)}else if(u.y>f.y&&(s===180||s===270)){const x=y?Math.max(u.y,m.top):Math.min(u.y,m.top);g.y=this.computeMidOrthoPosition(f.x,d.bottom,u.x,x,!0)}p.x=u.x,p.y=g.y}g.y>d.top&&g.y<d.bottom&&(u.x>=d.left&&u.x<=f.x||f.x<=m.right&&f.x>=u.x?(s===90||s===270)&&(g.e(Math.max((f.x+u.x)/2,f.x),f.y),p.e(g.x,u.y)):(s===270||(s===0||s===180)&&u.y<f.y?g.y=Math.min(u.y,s===0?d.top:Math.min(d.top,m.top)):g.y=Math.max(u.y,s===0?d.bottom:Math.max(d.bottom,m.bottom)),p.x=u.x,p.y=g.y))}else if(i===180)if(u.x<f.x||s===270&&u.y<f.y&&m.left<f.x||s===90&&u.y>f.y&&m.left<f.x)g.e(u.x,f.y),p.e(u.x,(f.y+u.y)/2),s===0?(g.x=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!1),p.x=g.x,p.y=u.y):s===270&&u.y<f.y||s===90&&u.y>f.y?(f.x>m.right?g.x=this.computeMidOrthoPosition(f.x,f.y,m.right,u.y,!1):f.x>m.left&&(s===270&&f.y<m.top||s===90&&f.y>m.bottom)?g.x=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!1):g.x=m.left,p.x=g.x,p.y=u.y):s===180&&f.x>m.right&&f.y>m.top&&f.y<m.bottom&&(g.x=f.x,f.y<u.y?g.y=Math.min(u.y,m.top):g.y=Math.max(u.y,m.bottom),p.y=g.y);else{if(g.e(f.x,u.y),p.e((f.x+u.x)/2,u.y),s===0||s===90&&u.y<d.top||s===270&&u.y>d.bottom){const y=m.containsPoint(f)||d.containsPoint(u);if(s===0&&y)g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!0);else if(u.y<f.y&&(s===0||s===90)){const x=y?Math.min(u.y,m.bottom):Math.max(u.y,m.bottom);g.y=this.computeMidOrthoPosition(f.x,d.top,u.x,x,!0)}else if(u.y>f.y&&(s===0||s===270)){const x=y?Math.max(u.y,m.top):Math.min(u.y,m.top);g.y=this.computeMidOrthoPosition(f.x,d.bottom,u.x,x,!0)}p.x=u.x,p.y=g.y}g.y>d.top&&g.y<d.bottom&&(u.x<=d.right&&u.x>=f.x||f.x>=m.left&&f.x<=u.x?(s===90||s===270)&&(g.e(Math.min((f.x+u.x)/2,f.x),f.y),p.e(g.x,u.y)):(s===270||(s===0||s===180)&&u.y<f.y?g.y=Math.min(u.y,s===180?d.top:Math.min(d.top,m.top)):g.y=Math.max(u.y,s===180?d.bottom:Math.max(d.bottom,m.bottom)),p.x=u.x,p.y=g.y))}else if(i===90)if(u.y>f.y||s===180&&u.x<f.x&&m.bottom>f.y||s===0&&u.x>f.x&&m.bottom>f.y)g.e(f.x,u.y),p.e((f.x+u.x)/2,u.y),s===270?(g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!0),p.x=u.x,p.y=g.y):s===180&&u.x<f.x||s===0&&u.x>f.x?(f.y<m.top?g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,m.top,!0):f.y<m.bottom&&(s===180&&f.x<m.left||s===0&&f.x>m.right)?g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!0):g.y=m.bottom,p.x=u.x,p.y=g.y):s===90&&f.y<m.top&&f.x>m.left&&f.x<m.right&&(f.x<u.x?g.x=Math.min(u.x,m.left):g.x=Math.max(u.x,m.right),g.y=f.y,p.x=g.x);else{if(g.e(u.x,f.y),p.e(u.x,(f.y+u.y)/2),s===270||s===0&&u.x<d.left||s===180&&u.x>d.right){const y=m.containsPoint(f)||d.containsPoint(u);if(s===270&&y)g.x=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!1);else if(u.x<f.x&&(s===270||s===0)){const x=y?Math.min(u.x,m.right):Math.max(u.x,m.right);g.x=this.computeMidOrthoPosition(d.left,f.y,x,u.y,!1)}else if(u.x>f.x&&(s===270||s===180)){const x=y?Math.max(u.x,m.left):Math.min(u.x,m.left);g.x=this.computeMidOrthoPosition(d.right,f.y,x,u.y,!1)}p.x=g.x,p.y=u.y}g.x>d.left&&g.x<d.right&&(u.y>=d.top&&u.y<=f.y||f.y<=m.bottom&&f.y>=u.y?(s===0||s===180)&&(g.e(f.x,Math.max((f.y+u.y)/2,f.y)),p.e(u.x,g.y)):(s===180||(s===90||s===270)&&u.x<f.x?g.x=Math.min(u.x,s===90?d.left:Math.min(d.left,m.left)):g.x=Math.max(u.x,s===90?d.right:Math.max(d.right,m.right)),p.x=g.x,p.y=u.y))}else if(u.y<f.y||s===180&&u.x<f.x&&m.top<f.y||s===0&&u.x>f.x&&m.top<f.y)g.e(f.x,u.y),p.e((f.x+u.x)/2,u.y),s===90?(g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!0),p.x=u.x,p.y=g.y):s===180&&u.x<f.x||s===0&&u.x>=f.x?(f.y>m.bottom?g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,m.bottom,!0):f.y>m.top&&(s===180&&f.x<m.left||s===0&&f.x>m.right)?g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!0):g.y=m.top,p.x=u.x,p.y=g.y):s===270&&f.y>m.bottom&&f.x>m.left&&f.x<m.right&&(f.x<u.x?g.x=Math.min(u.x,m.left):g.x=Math.max(u.x,m.right),g.y=f.y,p.x=g.x);else{if(g.e(u.x,f.y),p.e(u.x,(f.y+u.y)/2),s===90||s===0&&u.x<d.left||s===180&&u.x>d.right){const y=m.containsPoint(f)||d.containsPoint(u);if(s===90&&y)g.x=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!1);else if(u.x<f.x&&(s===90||s===0)){const x=y?Math.min(u.x,m.right):Math.max(u.x,m.right);g.x=this.computeMidOrthoPosition(d.left,f.y,x,u.y,!1)}else if(u.x>f.x&&(s===90||s===180)){const x=y?Math.max(u.x,m.left):Math.min(u.x,m.left);g.x=this.computeMidOrthoPosition(d.right,f.y,x,u.y,!1)}p.x=g.x,p.y=u.y}g.x>d.left&&g.x<d.right&&(u.y<=d.bottom&&u.y>=f.y||f.y>=m.top&&f.y<=u.y?(s===0||s===180)&&(g.e(f.x,Math.min((f.y+u.y)/2,f.y)),p.e(u.x,g.y)):(s===180||(s===90||s===270)&&u.x<f.x?g.x=Math.min(u.x,s===270?d.left:Math.min(d.left,m.left)):g.x=Math.max(u.x,s===270?d.right:Math.max(d.right,m.right)),p.x=g.x,p.y=u.y))}this.fA=s!==c,this.sA=i,this.nA=s,this.addPoint(g.copy()),this.addPoint(p.copy()),Point.o(g),Point.o(p),Rect.o(d),Rect.o(m)}computeMidOrthoPosition(t,i,e,s,n){let o=0;return this.hasCurviness()&&!this.computeSpot(!0,this.fromPort).isSide()&&!this.computeSpot(!1,this.toPort).isSide()&&(o=this.computeCurviness()),n?(i+s)/2+o:(t+e)/2+o}ZL(){if(this.diagram===null||!this.isAvoiding||this.diagram.animationManager.isTicking)return!1;const t=this.points.h,i=t.length;if(i<4)return!1;const e=this.diagram.getPositions(!1,this.containingGroup,null);for(let s=1;s<i-2;s++){const n=t[s],o=t[s+1];if(!e.isUnoccupied(Math.min(n.x,o.x),Math.min(n.y,o.y),Math.abs(n.x-o.x),Math.abs(n.y-o.y)))return!0}return!1}findClosestSegment(t){Debug&&U.s(t,Point,Link,"findClosestSegment:p");const i=t.x,e=t.y;let s=this.getPoint(0),n=this.getPoint(1),o=Point.distanceLineSegmentSquared(i,e,s.x,s.y,n.x,n.y),r=0;for(let l=1;l<this.pointsCount-1;l++){s=this.getPoint(l+1);const h=Point.distanceLineSegmentSquared(i,e,n.x,n.y,s.x,s.y);n=s,h<o&&(r=l,o=h)}return r}invalidateGeometry(){this.ge()}ge(){this.jh&&(this.jh=!1,this.g())}get jh(){return(this.Lt&128)!==0}set jh(t){(this.Lt&128)!==0!==t&&(this.Lt=this.Lt^128)}get geometry(){if(!this.jh){if(this.updateRoute(),this.pointsCount<2)return this.jh=!0,this.bt;this.bt=this.makeGeometry(),this.jh=!0}return this.bt}CN(){if(this.is===!1)return;const t=this.findMainElement();if(this.jh&&(t===null||t.geometry!==null))return;this.pointsCount>=2&&(this.bt=this.makeGeometry()),this.jh=!0;const i=this.path;if(i===null)return;i.bt=this.bt;const e=this.E.h,s=e.length;for(let n=0;n<s;n++){const o=e[n];o!==i&&o.isPanelMain&&o instanceof Shape&&(o.bt=this.bt)}}g4(t){return this.pc()&&t.Ph.has(this)&&(this.uc.width!==0||this.uc.height!==0)&&(t.animationManager.isAnimating||t.currentTool!==t.toolManager)}makeGeometry(){const t=this.bt,i=this.pointsCount;let e=!1;const s=this.diagram;s!==null&&this.g4(s)&&(e=!0);let n=0,o=0,r=Point.Qe(this.getPoint(0));const l=Point.Qe(r),h=this.Ri.h,a=this.computeCurve();if(a===9&&i>=3&&!G.H(this.smoothness,0))if(i===3){let c=this.getPoint(1);n=Math.min(r.x,c.x),o=Math.min(r.y,c.y),c=this.getPoint(2),n=Math.min(n,c.x),o=Math.min(o,c.y)}else if(this.isOrthogonal){for(let c=0;c<i;c++){const f=h[c];l.x=Math.min(f.x,l.x),l.y=Math.min(f.y,l.y)}n=l.x,o=l.y}else{for(let c=3;c<i;c+=3){c+3>=i&&(c=i-1);const f=this.getPoint(c);l.x=Math.min(f.x,l.x),l.y=Math.min(f.y,l.y)}n=l.x,o=l.y}else{for(let c=0;c<i;c++){const f=h[c];l.x=Math.min(f.x,l.x),l.y=Math.min(f.y,l.y)}n=l.x,o=l.y}if(n-=this.BS.x,o-=this.BS.y,r.x-=n,r.y-=o,this.computeShortLength(!0)!==0&&(r=this.wc(r,!0,l)),i===2&&!this.pc()){let c=Point.Qe(this.getPoint(1));return c.x-=n,c.y-=o,this.computeShortLength(!1)!==0&&(c=this.wc(c,!1,l)),t.type=1,t.startX=r.x,t.startY=r.y,t.endX=c.x,t.endY=c.y,Point.o(c),Point.o(r),Point.o(l),t}else{t.type=4;const c=GeoStream.AT(t);if(c.Gu(r.x,r.y,!1,!1),a===9&&i>=3&&!G.H(this.smoothness,0))if(i===3){const f=this.getPoint(1),u=f.x-n,d=f.y-o,m=Point.Qe(this.getPoint(2));m.x-=n,m.y-=o,this.computeShortLength(!1)!==0&&this.wc(m,!1,l),c.Dr(u,d,u,d,m.x,m.y),Point.o(m)}else if(this.isOrthogonal){const f=Point.V(n,o),u=Point.Qe(this.getPoint(1)),d=Point.V(n,o),m=Point.V(n,o);let g=this.getPoint(0),p;const y=this.smoothness/3;for(let k=1;k<this.pointsCount-1;k++){p=this.getPoint(k);const P=g,A=p,N=this.getPoint(this.pA(p,k,!1));G.H(P.x,A.x)&&G.H(A.x,N.x)||G.H(P.y,A.y)&&G.H(A.y,N.y)||(this.m4(P,A,N,y,d,m),(k===1||k===2&&G.H(g.x,this.getPoint(0).x)&&G.H(g.y,this.getPoint(0).y))&&(u.x=(g.x+p.x)*.5,u.y=(g.y+p.y)*.5),c.Dr(u.x-n,u.y-o,d.x-n,d.y-o,p.x-n,p.y-o),f.f(d),u.f(m),g=p)}let x=g.x,b=g.y;const S=Point.Qe(this.getPoint(this.pointsCount-1));this.computeShortLength(!1)!==0&&this.wc(S,!1,Point.kn),x=.5*(x+S.x),b=.5*(b+S.y),c.Dr(m.x-n,m.y-o,x-n,b-o,S.x-n,S.y-o),Point.o(S),Point.o(f),Point.o(u),Point.o(d),Point.o(m)}else for(let f=3;f<i;f+=3){const u=this.getPoint(f-2);f+3>=i&&(f=i-1);const d=this.getPoint(f-1),m=Point.Qe(this.getPoint(f));f===i-1&&this.computeShortLength(!1)!==0&&this.wc(m,!1,Point.kn),c.Dr(u.x-n,u.y-o,d.x-n,d.y-o,m.x-n,m.y-o),Point.o(m)}else if(this.isOrthogonal||i===2){const f=Point.Qe(this.getPoint(0)),u=Point.a(),d=Point.Qe(f),m=this.computeCorner();let g=1,p=0;for(;g<i;){if(g=this.pA(f,g,g>1),u.f(this.getPoint(g)),g>=i-1){if(!f.equals(u))this.computeShortLength(!1)!==0&&this.wc(u,!1,Point.kn),this.Hn(c,-n,-o,f,u,e);else if(p===0)for(g=1;g<i;)d.f(f),u.f(this.getPoint(g++)),this.Hn(c,-n,-o,f,u,e),f.f(u);break}p=this.pA(u,g+1,g<i-3);const y=this.getPoint(p);this.p4(c,-n,-o,f,u,y,f,d,m,e),d.f(u),g=p}Point.o(f),Point.o(u),Point.o(d)}else{const f=this.computeCorner();if(i>2&&f>=.5){const u=Point.Qe(h[i-1]);this.computeShortLength(!1)!==0&&this.wc(u,!1,Point.kn),r.x+=n,r.y+=o;for(let d=1;d<i;d++){const m=d===1?r:h[d-1],g=d===i-1?u:h[d],p=Math.sqrt(m.distanceSquaredPoint(g)),y=f/p;if(y<.5){if(d>1){const x=m.x+(g.x-m.x)*y,b=m.y+(g.y-m.y)*y;c.qu(m.x-n,m.y-o,x-n,b-o)}c._s(g.x+(m.x-g.x)*y-n,g.y+(m.y-g.y)*y-o)}else d>1&&c.qu(m.x-n,m.y-o,(m.x+g.x)/2-n,(m.y+g.y)/2-o);d===i-1&&c._s(u.x-n,u.y-o)}Point.o(u)}else if(i>=2){const u=Point.Qe(h[i-1]);this.computeShortLength(!1)!==0&&this.wc(u,!1,Point.kn);for(let d=1;d<i-1;d++)c._s(h[d].x-n,h[d].y-o);c._s(u.x-n,u.y-o),Point.o(u)}}return GeoStream.TT(c),Point.o(r),Point.o(l),t}}US(t,i,e,s){let n=e-t;if(isNaN(n)||n===1/0||n===-1/0)return NaN;n<0&&(n=-n);let o=s-i;return isNaN(o)||o===1/0||o===-1/0?NaN:(o<0&&(o=-o),G.H(n,0)?o:G.H(o,0)?n:Math.sqrt(n*n+o*o))}m4(t,i,e,s,n,o){isNaN(s)&&(s=this.smoothness/3);const r=t.x,l=t.y,h=i.x,a=i.y,c=e.x,f=e.y,u=s*this.US(r,l,h,a),d=s*this.US(h,a,c,f);if(G.H(l,a)&&G.H(h,c)&&(h>r?f>a?(n.x=h-u,n.y=a-u,o.x=h+d,o.y=a+d):(n.x=h-u,n.y=a+u,o.x=h+d,o.y=a-d):f>a?(n.x=h+u,n.y=a-u,o.x=h-d,o.y=a+d):(n.x=h+u,n.y=a+u,o.x=h-d,o.y=a-d)),G.H(r,h)&&G.H(a,f)&&(a>l?c>h?(n.x=h-u,n.y=a-u,o.x=h+d,o.y=a+d):(n.x=h+u,n.y=a-u,o.x=h-d,o.y=a+d):c>h?(n.x=h-u,n.y=a+u,o.x=h+d,o.y=a-d):(n.x=h+u,n.y=a+u,o.x=h-d,o.y=a-d)),G.H(r,h)&&G.H(h,c)||G.H(l,a)&&G.H(a,f)){const m=.5*(r+c),g=.5*(l+f);n.x=m,n.y=g,o.x=m,o.y=g}}wc(t,i,e){const s=this.pointsCount;if(s<2)return t;if(i){const n=this.getPoint(1),o=n.x-e.x,r=n.y-e.y,l=this.US(t.x,t.y,o,r);if(l===0)return t;const h=s===2?l*.5:l;let a=this.computeShortLength(!0);a>h&&(a=h);const c=a*(o-t.x)/l,f=a*(r-t.y)/l;t.x+=c,t.y+=f}else{const n=this.getPoint(s-2),o=n.x-e.x,r=n.y-e.y,l=this.US(t.x,t.y,o,r);if(l===0)return t;const h=s===2?l*.5:l;let a=this.computeShortLength(!1);a>h&&(a=h);const c=a*(t.x-o)/l,f=a*(t.y-r)/l;t.x-=c,t.y-=f}return t}pA(t,i,e){const s=this.pointsCount;let n=t;for(;G.H(t.x,n.x)&&G.H(t.y,n.y);){if(i>=s)return s-1;n=this.getPoint(i++)}if(!G.H(t.x,n.x)&&!G.H(t.y,n.y))return i-1;let o=n;for(;G.H(t.x,n.x)&&G.H(n.x,o.x)&&(!e||(t.y>=n.y?n.y>=o.y:n.y<=o.y))||G.H(t.y,n.y)&&G.H(n.y,o.y)&&(!e||(t.x>=n.x?n.x>=o.x:n.x<=o.x));){if(i>=s)return s-1;o=this.getPoint(i++)}return i-2}p4(t,i,e,s,n,o,r,l,h,a){if(G.u(s.y,n.y)&&G.u(n.x,o.x)){let c=Math.min(h,Math.abs(n.x-l.x)/2);const f=Math.min(c,Math.abs(o.y-n.y)/2);if(c=f,G.u(c,0)){this.Hn(t,i,e,s,n,a),r.f(n);return}let u=n.x;const d=n.y,m=u;let g=d;n.x>s.x?(u=n.x-c,o.y>n.y?g=n.y+f:g=n.y-f):(u=n.x+c,o.y>n.y?g=n.y+f:g=n.y-f);const p=Point.V(u,d);this.Hn(t,i,e,s,p,a),Point.o(p),t.qu(n.x+i,n.y+e,m+i,g+e),r.e(m,g)}else if(G.u(s.x,n.x)&&G.u(n.y,o.y)){let c=Math.min(h,Math.abs(n.y-l.y)/2);const f=Math.min(c,Math.abs(o.x-n.x)/2);if(c=f,G.u(f,0)){this.Hn(t,i,e,s,n,a),r.f(n);return}const u=n.x;let d=n.y,m=u;const g=d;n.y>s.y?(d=n.y-c,o.x>n.x?m=n.x+f:m=n.x-f):(d=n.y+c,o.x>n.x?m=n.x+f:m=n.x-f);const p=Point.V(u,d);this.Hn(t,i,e,s,p,a),Point.o(p),t.qu(n.x+i,n.y+e,m+i,g+e),r.e(m,g)}else this.Hn(t,i,e,s,n,a),r.f(n)}Hn(t,i,e,s,n,o){if(o||!this.pc())t._s(n.x+i,n.y+e);else{const r=Link.UF,l=r/2,h=[];let a=0;this.isVisible()&&(a=this.y4(s,n,h));let c=s.x,f=s.y;if(a>0){if(G.u(s.y,n.y))if(s.x<n.x){let u=0;for(;u<a;){const d=Math.max(s.x,Math.min(h[u++]-l,n.x-r));t._s(d+i,n.y+e),c=d+i,f=n.y+e;let m=Math.min(d+r,n.x);for(;u<a;){const x=h[u];if(x<m+r)u++,m=Math.min(x+l,n.x);else break}const g=n.y-r+e,p=m+i,y=n.y+e;this.curve===10?t.Gu(p,y,!1,!1):t.Dr(c,g,p,g,p,y),c=p,f=y}}else{let u=a-1;for(;u>=0;){const d=Math.min(s.x,Math.max(h[u--]+l,n.x+r));t._s(d+i,n.y+e),c=d+i,f=n.y+e;let m=Math.max(d-r,n.x);for(;u>=0;){const x=h[u];if(x>m-r)u--,m=Math.max(x-l,n.x);else break}const g=n.y-r+e,p=m+i,y=n.y+e;this.curve===10?t.Gu(p,y,!1,!1):t.Dr(c,g,p,g,p,y),c=p,f=y}}else if(G.u(s.x,n.x))if(s.y<n.y){let u=0;for(;u<a;){const d=Math.max(s.y,Math.min(h[u++]-l,n.y-r));t._s(n.x+i,d+e),c=n.x+i,f=d+e;let m=Math.min(d+r,n.y);for(;u<a;){const x=h[u];if(x<m+r)u++,m=Math.min(x+l,n.y);else break}const g=n.x-r+i,p=n.x+i,y=m+e;this.curve===10?t.Gu(p,y,!1,!1):t.Dr(g,f,g,y,p,y),c=p,f=y}}else{let u=a-1;for(;u>=0;){const d=Math.min(s.y,Math.max(h[u--]+l,n.y+r));t._s(n.x+i,d+e),c=n.x+i,f=d+e;let m=Math.max(d-r,n.y);for(;u>=0;){const x=h[u];if(x>m-r)u--,m=Math.max(x-l,n.y);else break}const g=n.x-r+i,p=n.x+i,y=m+e;this.curve===10?t.Gu(p,y,!1,!1):t.Dr(g,f,g,y,p,y),c=p,f=y}}}t._s(n.x+i,n.y+e)}}y4(t,i,e){const s=this.diagram;if(s===null||t.equals(i))return 0;const n=s.layers;for(;n.next();){const o=n.value;if(o!==null&&o.visible){const r=o.m2(),l=r.length;for(let h=0;h<l;h++){const a=r[h];if(!(a instanceof Link))continue;if(a===this)return e.length>0&&e.sort((u,d)=>u-d),e.length;if(!a.isVisible()||!a.pc())continue;const c=a.routeBounds;if(!c.isReal()||!this.routeBounds.intersectsRect(c)||this.usesSamePort(a))continue;const f=a.path;f!==null&&f.isVisibleObject()&&this.w4(t,i,e,a)}}}return e.length>0&&e.sort((o,r)=>o-r),e.length}w4(t,i,e,s){const n=G.u(t.y,i.y),o=s.pointsCount;let r=s.getPoint(0);const l=Point.a();for(let h=1;h<o;h++){const a=s.getPoint(h);if(h<o-1){const c=s.getPoint(h+1);if(r.y===a.y&&a.y===c.y){if(a.x>r.x&&c.x>=a.x||a.x<r.x&&c.x<=a.x)continue}else if(r.x===a.x&&a.x===c.x&&(a.y>r.y&&c.y>=a.y||a.y<r.y&&c.y<=a.y))continue}this.x4(t,i,r,a,l)&&(n?e.push(l.x):e.push(l.y)),r=a}Point.o(l)}x4(t,i,e,s,n){const o=t.x,r=t.y,l=i.x,h=i.y,a=e.x,c=e.y,f=s.x,u=s.y;if(G.u(o,l)){if(!G.u(r,h)&&G.u(c,u)&&Math.min(r,h)<c&&Math.max(r,h)>c&&Math.min(a,f)<o&&Math.max(a,f)>o&&!G.u(a,f))return n.x=o,n.y=c,!0}else if(G.u(r,h)&&G.u(a,f)&&Math.min(o,l)<a&&Math.max(o,l)>a&&Math.min(c,u)<r&&Math.max(c,u)>r&&!G.u(c,u))return n.x=a,n.y=r,!0;return n.x=0,n.y=0,!1}get firstPickIndex(){return this.pointsCount<=2?0:this.isOrthogonal||!this.Rl(this.computeSpot(!0))?1:0}get lastPickIndex(){const t=this.pointsCount;return t===0?0:t<=2?t-1:this.isOrthogonal||!this.Rl(this.computeSpot(!1))?t-2:t-1}pc(){const t=this.curve;return t===11||t===10}XS(t){if(t||this.pc()){const i=this.diagram;i!==null&&!i.animationManager.isTicking&&!i.Ph.has(this)&&(this.uc.width!==0||this.uc.height!==0)&&i.Ph.set(this,this.uc.copy())}}invalidateOtherJumpOvers(t){const i=this.layer;if(i===null||!i.visible||i.isTemporary)return;const e=i.diagram;if(e===null||e.animationManager.isTicking)return;let s=!1;const n=e.layers;for(;n.next();){const o=n.value;if(o.visible){if(o===i){s=!0;let r=!1;const l=o.m2(),h=l.length;for(let a=0;a<h;a++){const c=l[a];c instanceof Link&&(c===this?r=!0:r&&this._F(c,t))}}else if(s){const r=o.m2(),l=r.length;for(let h=0;h<l;h++){const a=r[h];a instanceof Link&&this._F(a,t)}}}}}_F(t,i){if(t===null||!t.jh||!t.is||!t.pc())return;const e=t.routeBounds;e.isReal()&&(!this.routeBounds.intersectsRect(e)&&!i.intersectsRect(e)||this.usesSamePort(t)||t.ge())}usesSamePort(t){const i=this.pointsCount,e=t.pointsCount;if(i>0&&e>0){const s=this.getPoint(0),n=t.getPoint(0);if(s.equalsApprox(n))return!0;const o=this.getPoint(i-1),r=t.getPoint(e-1);if(o.equalsApprox(r)||s.equalsApprox(r)||o.equalsApprox(n))return!0}else if(this.fromNode===t.fromNode||this.toNode===t.toNode||this.fromNode===t.toNode||this.toNode===t.fromNode)return!0;return!1}isVisible(){if(!super.isVisible())return!1;const t=this.containingGroup;let i=!0;const e=this.diagram;e!==null&&(i=e.isTreePathToChildren);const s=this.fromNode;if(s!==null){if(this.isTreeLink&&i&&!s.isTreeExpanded)return!1;if(s===t)return!0;let o=s;for(;o!==null;){if(o.labeledLink===this)return!0;o=o.containingGroup}const r=s.findVisibleNode();if(r===null||r===t)return!1}const n=this.toNode;if(n!==null){if(this.isTreeLink&&!i&&!n.isTreeExpanded)return!1;if(n===t)return!0;let o=n;for(;o!==null;){if(o.labeledLink===this)return!0;o=o.containingGroup}const r=n.findVisibleNode();if(r===null||r===t)return!1}return!0}Ji(t){if(super.Ji(t),t&&this.XS(!1),this.ur!==null&&this.ur.gg(),this.dn!==null){const e=this.dn.iterator;for(;e.next();)e.value.Ji(t)}}get adjusting(){return this.nu}set adjusting(t){const i=this.nu;i!==t&&(Debug&&t!==0&&t!==17&&t!==18&&t!==19&&U.n("Link.adjusting can only be set to None, End, Scale, or Stretch, not: "+t),this.nu=t,this.t("adjusting",i,t))}computeAdjusting(){return this.isAvoiding&&this.diagram!==null&&this.diagram.animationManager.defaultAnimation.isAnimating?17:this.nu}get corner(){return this.yg}set corner(t){const i=this.yg;i!==t&&(Debug&&U.i(t,"number",Link,"corner"),this.yg=t,this.ge(),this.t("corner",i,t))}get curve(){return this.wg}set curve(t){const i=this.wg;i!==t&&(Debug&&t!==0&&t!==9&&t!==10&&t!==11&&U.n("Link.curve can only be set to None, Bezier, JumpGap, or JumpOver, not: "+t),this.wg=t,(i===9||t===9)&&this.cA(),this.oi(),this.ge(),this.XS(i===10||i===11||t===10||t===11),this.t("curve",i,t))}get curviness(){return this.xg}set curviness(t){const i=this.xg;i!==t&&(Debug&&U.i(t,"number",Link,"curviness"),this.xg=t,this.oi(),this.ge(),this.t("curviness",i,t))}get routing(){return this.fc}set routing(t){const i=this.fc;i!==t&&(Debug&&t!==1&&t!==2&&t!==6&&t!==7&&U.n("Link.routing can only be set to Normal, Orthogonal, AvoidsNodes, not: "+t),this.fc=t,this.isAvoiding&&this.diagram!==null&&(this.diagram.C0=!0),this.fr=null,this.oi(),this.XS(Link.oA(i)||Link.oA(t)),this.t("routing",i,t))}get smoothness(){return this.bg}set smoothness(t){const i=this.bg;i!==t&&(Debug&&U.i(t,"number",Link,"smoothness"),this.bg=t,this.ge(),this.t("smoothness",i,t))}gw(){const t=this.Mo;if(t===null)return;const i=this.No;if(i===null||!isNaN(this.curviness))return;const e=this.Co,s=this.Ao;let n=null,o=null;const r=t.ai.h,l=r.length;for(let h=0;h<l;h++){const a=r[h];!(a.Mo===t&&a.Co===e&&a.No===i&&a.Ao===s)&&!(a.Mo===i&&a.Co===s&&a.No===t&&a.Ao===e)||(o===null?o=a:(n===null&&(n=[],n.push(o)),n.push(a)))}if(n!==null){let h=t.TF(i,e,s);h===null&&(h=new LinkBundle(t,e,i,s),t.NF(h),i.NF(h)),h.gn=n;for(let a=0;a<n.length;a++){const c=n[a];c.ur=h}h.gg()}}dw(){const t=this.ur;if(t!==null){if(!isNaN(this.curviness))return;this.ur=null;const i=t.gn.indexOf(this);i>=0&&(t.gn.splice(i,1),t.gg())}}Yr(){return!0}get key(){const t=this.diagram;if(!(t===null||!t.model.cc()))return t.model.getKeyForLinkData(this.data)}}class LinkBundle{Qo;en;ew;ZN;IS;QN;gn;constructor(t,i,e,s){GSet.se(this),this.Qo=!1,this.en=!1,this.ew=t,this.ZN=i,this.IS=e,this.QN=s,this.gn=[]}gg(){if(!this.Qo){const t=this.gn;if(t.length>0){const i=t[0].diagram;i!==null&&(i.X2.add(this),this.en=i.undoManager.isUndoingRedoing)}}this.Qo=!0}tC(){if(this.Qo){this.Qo=!1;const t=this.gn;if(t.length>0){const i=t[0],e=i.diagram,s=e===null||e.ga&&!this.en;this.en=!1,i.arrangeBundledLinks(t,s),t.length===1&&(i.ur=null,t.length=0)}t.length===0&&(this.ew.AF(this),this.IS.AF(this))}}}class PositionArray{we;xe;xc;bc;Ni;Ai;vt;Jh;$h;qa;gC;Qo;pw;Nf;mC;pC;constructor(t){GSet.se(this),this.qa=null,this.gC=null,this.Qo=!0,this.pw=!1,this.we=1,this.xe=1,this.xc=-1,this.bc=-1,this.Ni=t.width,this.Ai=t.height,this.vt=[],this.Jh=0,this.$h=0,this.Nf=Link.JF,this.mC=this.Nf*2,this.pC=this.Nf*2}static mn=0;static Sc=1;static kg=999999;static yA=PositionArray.kg+1;static wA=PositionArray.kg+2;Ob(t){if(t.width<=0||t.height<=0)return;const i=t.x,e=t.y,s=t.x+t.width,n=t.y+t.height;this.we=Math.floor((i-this.Ni)/this.Ni)*this.Ni,this.xe=Math.floor((e-this.Ai)/this.Ai)*this.Ai,this.xc=Math.ceil((s+2*this.Ni)/this.Ni)*this.Ni,this.bc=Math.ceil((n+2*this.Ai)/this.Ai)*this.Ai;const o=1+(Math.ceil((this.xc-this.we)/this.Ni)|0),r=1+(Math.ceil((this.bc-this.xe)/this.Ai)|0);if(this.vt.length===0||this.Jh<o-1||this.$h<r-1){const l=[];for(let h=0;h<=o;h++)l[h]=new Uint32Array(r);this.vt=l,this.Jh=o-1,this.$h=r-1}this.b4(PositionArray.yA)}get bounds(){return new Rect(this.we,this.xe,this.xc-this.we,this.bc-this.xe)}get cellWidth(){return this.Ni}set cellWidth(t){t>0&&t!==this.Ni&&(this.Ni=t,this.Ob(this.bounds))}get cellHeight(){return this.Ai}set cellHeight(t){t>0&&t!==this.Ai&&(this.Ai=t,this.Ob(this.bounds))}Pg(t,i){return this.we<=t&&t<=this.xc&&this.xe<=i&&i<=this.bc}To(t,i){if(!this.Pg(t,i))return PositionArray.yA;t-=this.we,t/=this.Ni,i-=this.xe,i/=this.Ai;const e=t|0,s=i|0;return this.vt[e][s]}fE(t,i,e,s){if(!this.Pg(t,i))return;const n=(t-this.we)/this.Ni|0,o=(i-this.xe)/this.Ai|0,r=(t+e-this.we)/this.Ni|0,l=(i+s-this.xe)/this.Ai|0,h=Math.min(r,this.Jh),a=Math.min(l,this.$h);for(let c=n;c<=h;c++){const f=this.vt[c];if(f.fill)f.fill(PositionArray.mn,o,a+1);else for(let u=o;u<=a;u++)f[u]=PositionArray.mn}}b4(t){for(let i=0;i<=this.Jh;i++){const e=this.vt[i];if(e.fill)e.fill(t);else for(let s=0;s<=this.$h;s++)e[s]=t}}aD(){for(let t=0;t<=this.Jh;t++){const i=this.vt[t];for(let e=0;e<=this.$h;e++)i[e]>=PositionArray.Sc&&(i[e]=PositionArray.yA)}}S4(t,i){return this.To(t,i)===PositionArray.mn}isUnoccupied(t,i,e,s){if(t>this.xc||t+e<this.we||i>this.bc||i+s<this.xe)return!0;let n=(t-this.we)/this.Ni|0,o=(i-this.xe)/this.Ai|0,r=Math.max(0,e)/this.Ni+1|0,l=Math.max(0,s)/this.Ai+1|0;if(n<0&&(r+=n,n=0),o<0&&(l+=o,o=0),r<0||l<0)return!0;const h=Math.min(n+r-1,this.Jh)|0,a=Math.min(o+l-1,this.$h)|0;for(let c=n;c<=h;c++){const f=this.vt[c];for(let u=o;u<=a;u++)if(f[u]===PositionArray.mn)return!1}return!0}maxAvoidsLinksSpaceH(t,i,e,s){if(t>this.xc||i<this.we||e>this.bc||e<this.xe)return 0;const n=(t-this.we)/this.Ni|0,o=(i-this.we)/this.Ni|0,r=(e-this.xe)/this.Ai|0,l=s/this.Ai+1|0;let h;for(h=0;h<l/2;h++){let a=!1;for(let c=n;c<=o;c++)if(this.vt[c][r+h]===PositionArray.mn||this.vt[c][r-h]===PositionArray.mn){a=!0;break}if(a)return Math.max(0,(2*h-1)*this.Ai)}return s}maxAvoidsLinksSpaceV(t,i,e,s){if(t>this.bc||i<this.xe||e>this.xc||e<this.we)return 0;const n=(t-this.xe)/this.Ai|0,o=(i-this.xe)/this.Ai|0,r=(e-this.we)/this.Ni|0,l=s/this.Ni+1|0;let h;for(h=0;h<l/2;h++){let a=!1;for(let c=n;c<=o;c++)if(this.vt[r+h][c]===PositionArray.mn||this.vt[r-h][c]===PositionArray.mn){a=!0;break}if(a)return Math.max(0,(2*h-1)*this.Ni)}return s}k4(t,i,e,s,n,o,r,l){t=t|0,i=i|0;let h=this.vt[t][i];if(h>=PositionArray.Sc&&h<PositionArray.kg)for(s?i+=e:t+=e,h+=1;n<=t&&t<=o&&r<=i&&i<=l;){const a=this.vt[t][i];if(h>=a)break;this.vt[t][i]=h,h+=1,s?i+=e:t+=e}return s?i:t}Lo(t,i,e,s,n,o,r,l){if(t<n||t>o||i<r||i>l)return;const h=this.k4(t,i,e,s,n,o,r,l);if(s)if(e>0)for(let a=i+e;a<h;a+=e)this.Lo(t,a,1,!s,n,o,r,l),this.Lo(t,a,-1,!s,n,o,r,l);else for(let a=i+e;a>h;a+=e)this.Lo(t,a,1,!s,n,o,r,l),this.Lo(t,a,-1,!s,n,o,r,l);else if(e>0)for(let a=t+e;a<h;a+=e)this.Lo(a,i,1,!s,n,o,r,l),this.Lo(a,i,-1,!s,n,o,r,l);else for(let a=t+e;a>h;a+=e)this.Lo(a,i,1,!s,n,o,r,l),this.Lo(a,i,-1,!s,n,o,r,l)}GS(t,i,e,s,n,o,r,l,h,a){let c=t|0,f=i|0,u=PositionArray.mn,d=PositionArray.Sc;for(this.vt[c][f]=d;u===PositionArray.mn&&c>r&&c<l&&f>h&&f<a;)d+=1,this.vt[c][f]=d,o?f+=n:c+=n,u=this.vt[c][f];return o?f:c}qS(t,i,e,s,n,o,r,l,h,a){let c=e|0,f=s|0,u=PositionArray.mn;const d=PositionArray.kg;for(this.vt[c][f]=d;u===PositionArray.mn&&c>r&&c<l&&f>h&&f<a;)this.vt[c][f]=d,o?f+=n:c+=n,u=this.vt[c][f]}tR(t,i,e,s,n,o){this.pw=!1;let r=t.x,l=t.y;if(!this.Pg(r,l))return;r-=this.we,r/=this.Ni,l-=this.xe,l/=this.Ai;let h=e.x,a=e.y;if(!this.Pg(h,a))return;if(h-=this.we,h/=this.Ni,a-=this.xe,a/=this.Ai,Math.abs(r-h)<=1&&Math.abs(l-a)<=1){this.pw=!0;return}let c=n.x,f=n.y,u=n.x+n.width,d=n.y+n.height;c-=this.we,c/=this.Ni,f-=this.xe,f/=this.Ai,u-=this.we,u/=this.Ni,d-=this.xe,d/=this.Ai;const m=Math.max(0,Math.min(this.Jh,c|0)),g=Math.min(this.Jh,Math.max(0,u|0)),p=Math.max(0,Math.min(this.$h,f|0)),y=Math.min(this.$h,Math.max(0,d|0)),x=0,b=90,S=270,k=this.vt,P=r|0,A=l|0,N=h|0,M=a|0,C=i===x||i===b?1:-1,T=i===b||i===S;k[P][A]===PositionArray.mn?(this.GS(P,A,N,M,C,T,m,g,p,y),this.GS(P,A,N,M,1,!T,m,g,p,y),this.GS(P,A,N,M,-1,!T,m,g,p,y)):this.GS(P,A,N,M,C,T,P,A,P,A),k[N][M]===PositionArray.mn?(this.qS(P,A,N,M,s===x||s===b?1:-1,s===b||s===S,m,g,p,y),this.qS(P,A,N,M,1,!(s===b||s===S),m,g,p,y),this.qS(P,A,N,M,-1,!(s===b||s===S),m,g,p,y)):this.qS(P,A,N,M,C,T,N,M,N,M);const L=U.ct();if(o&&this.iR(N,M,s,P,A,L)){(L[0]!==N||L[1]!==M)&&(L.unshift(M),L.unshift(N)),(L[L.length-2]!==P||L[L.length-1]!==A)&&(L.push(P),L.push(A));let D=PositionArray.Sc,F=L[L.length-2],R=L[L.length-1];k[F][R]=D++;for(let I=L.length-4;I>=0;I-=2){F=L[I+2],R=L[I+3];const O=L[I],X=L[I+1];for(;O>F?F++:O<F?F--:X>R?R++:X<R&&R--,k[F][R]=D++,!(F===O&&R===X););}}else this.Lo(P,A,1,!1,m,g,p,y),this.Lo(P,A,-1,!1,m,g,p,y),this.Lo(P,A,1,!0,m,g,p,y),this.Lo(P,A,-1,!0,m,g,p,y);U.nt(L)}iR(t,i,e,s,n,o){const c=this.vt;let f=t,u=i;for(;;){if(f===s&&u===n)return!0;let d=f,m=u;if(e===0)if(d<s)d++;else break;else if(e===90)if(m<n)m++;else break;else if(e===180)if(d>s)d--;else break;else if(m>n)m--;else break;const g=c[d][m];if(g===0||g===PositionArray.wA)break;f=d,u=m}for(;;){let d=e,m=f,g=u;e===0?g<n?(d=90,g++):g>n&&(d=270,g--):e===90?m<s?(d=0,m++):m>s&&(d=180,m--):e===180?g<n?(d=90,g++):g>n&&(d=270,g--):m<s?(d=0,m++):m>s&&(d=180,m--);const p=c[m][g];if(d!==e&&p!==0&&p!==PositionArray.wA){if(o.push(f),o.push(u),this.iR(f,u,d,s,n,o))return!0;o.pop(),o.pop()}if(c[f][u]=PositionArray.wA,e===0){if(f===t)return!1;f--}else if(e===90){if(u===i)return!1;u--}else if(e===180){if(f===t)return!1;f++}else{if(u===i)return!1;u++}}}}class Knot{Ye;Gs;We;Mg;constructor(t,i){GSet.se(this),this.Ye=t,this.Gs=i,this.We=[],this.Mg=!1}toString(){const t=this.We;let i=this.Ye.toString()+" "+t.length.toString()+":";for(let e=0;e<t.length;e++){const s=t[e];s!==null&&(i+=`
  `+s.toString())}return i}P4(t,i,e,s){const n=i.offsetY;switch(n){case 8:return 90;case 2:return 180;case 1:return 270;case 4:return 0}let o=e;switch(n){case 9:return o>180?270:90;case 6:return o>90&&o<=270?180:0}const r=Math.atan2(t.height,t.width)*180/Math.PI;switch(n){case 3:return o>r&&o<=180+r?180:270;case 5:return o>180-r&&o<=360-r?270:0;case 12:return o>r&&o<=180+r?90:0;case 10:return o>180-r&&o<=360-r?180:90;case 7:return o>90&&o<=180+r?180:o>180+r&&o<=360-r?270:0;case 13:return o>180&&o<=360-r?270:o>r&&o<=180?90:0;case 14:return o>r&&o<=180-r?90:o>180-r&&o<=270?180:0;case 11:return o>180-r&&o<=180+r?180:o>180+r?270:90}return s&&n!==15&&(o-=15,o<0&&(o+=360)),o>r&&o<180-r?90:o>=180-r&&o<=180+r?180:o>180+r&&o<360-r?270:0}gg(){this.We.length=0}$F(t){let i=this.We;i.length===0&&(this.M4(),i=this.We);for(let e=0;e<i.length;e++){const s=i[e];if(s!==null&&s.as===t)return s}return null}M4(){if(!this.Mg){const t=this.Mg;this.Mg=!0;let i,e=null;const s=this.Ye,n=s instanceof Group?s:null;if(n!==null&&!n.isSubGraphExpanded){if(!n.actualBounds.isReal())return this.Mg=t,this.We;e=n,i=e.findExternalLinksConnected()}else s.isTreeExpanded?i=s.findLinksConnected(this.Gs.portId):i=s.findExternalTreeLinksConnected();this.We.length=0;let o=0;const r=this.Gs.getDocumentPoint(Spot.TopLeft,Point.a()),l=this.Gs.getDocumentPoint(Spot.BottomRight,Point.a()),h=Rect.V(r.x,r.y,0,0);h.unionPoint(l),Point.o(r),Point.o(l);const a=Point.V(h.x+h.width/2,h.y+h.height/2),c=this.Gs.getDocumentAngle(),f=i.iterator;for(;f.next();){const g=f.value;if(!g.isVisible())continue;const p=g.fromPort,y=g.toPort;if(p===y)continue;if(e!==null&&this.Gs===e.port){if(p?.part===e&&p!==this.Gs||y?.part===e&&y!==this.Gs)continue}else if(p!==this.Gs&&y!==this.Gs)continue;const x=p===this.Gs||e!==null&&g.fromNode!==null&&g.fromNode.isMemberOf(e),b=g.computeSpot(x,this.Gs);if(!b.isSide())continue;let S;if(x?S=y:S=p,S===null)continue;let k=S.part;if(k===null)continue;const P=k.findVisibleNode();P!==null&&P!==k&&(k=P,S=k.port);const A=g.computeOtherPoint(k,S);let N=a.directionPoint(A);c!==0&&(N=G.qi(N-c));const M=this.P4(h,b,N,g.isOrthogonal);let C=0;M===0?(C=4,N>180&&(N-=360)):M===90?(C=8,N>270&&(N-=360)):M===180?C=2:(C=1,N<90&&(N+=360));let T=this.We[o];T===void 0?(T=new LinkInfo(g,N,C),this.We[o]=T):(T.as=g,T.jt=N,T.ye=C),T.HS.f(A),o++}Point.o(a),this.C4();const u=this.We.length;let d=-1,m=0;for(o=0;o<u;o++){const g=this.We[o];g!==void 0&&(g.ye!==d&&(d=g.ye,m=0),g.Cg=m,m++)}for(d=-1,m=0,o=u-1;o>=0;o--){const g=this.We[o];g!==void 0&&(g.ye!==d&&(d=g.ye,m=g.Cg+1),g.ru=m)}this.N4(this.We),this.A4(this.We),this.Mg=t,Rect.o(h)}return this.We}T4(t,i){return t===i?0:t===null?-1:i===null?1:t.ye<i.ye?-1:t.ye>i.ye?1:t.jt<i.jt?-1:t.jt>i.jt?1:0}C4(){this.We.sort(Knot.prototype.T4)}N4(t){const i=this.Gs,e=this.Ye.portSpreading,s=Point.a(),n=Point.a(),o=Point.a(),r=Point.a();i.getDocumentPoint(Spot.TopLeft,s),i.getDocumentPoint(Spot.TopRight,n),i.getDocumentPoint(Spot.BottomRight,o),i.getDocumentPoint(Spot.BottomLeft,r);let l=0,h=0,a=0,c=0;if(e===2)for(let x=0;x<t.length;x++){const b=t[x];if(b===null)continue;const S=b.as.computeThickness();switch(b.ye){case 8:a+=S;break;case 2:c+=S;break;case 1:l+=S;break;default:case 4:h+=S;break}}let f=0,u=0,d=1,m=n,g=o,p=0,y=0;for(let x=0;x<t.length;x++){const b=t[x];if(b===null)continue;if(f!==b.ye){switch(f=b.ye,f){case 8:m=o,g=r;break;case 2:m=r,g=s;break;case 1:m=s,g=n;break;default:case 4:m=n,g=o;break}switch(p=g.x-m.x,y=g.y-m.y,f){case 8:a>Math.abs(p)?(d=Math.abs(p)/a,a=Math.abs(p)):d=1;break;case 2:c>Math.abs(y)?(d=Math.abs(y)/c,c=Math.abs(y)):d=1;break;case 1:l>Math.abs(p)?(d=Math.abs(p)/l,l=Math.abs(p)):d=1;break;default:case 4:h>Math.abs(y)?(d=Math.abs(y)/h,h=Math.abs(y)):d=1;break}u=0}const S=b.yc;if(e===2){let k=b.as.computeThickness();switch(k*=d,S.f(m),f){case 8:S.x=m.x+p/2+a/2-u-k/2;break;case 2:S.y=m.y+y/2+c/2-u-k/2;break;case 1:S.x=m.x+p/2-l/2+u+k/2;break;default:case 4:S.y=m.y+y/2-h/2+u+k/2;break}u+=k}else{let k=.5;e===1&&(k=(b.Cg+1)/(b.ru+1)),S.x=m.x+p*k,S.y=m.y+y*k}}Point.o(s),Point.o(n),Point.o(o),Point.o(r)}A4(t){for(let i=0;i<t.length;i++){const e=t[i];e!==null&&(e.KS=this.L4(e,i))}}L4(t,i){const e=t.as,s=e.fromPort===this.Gs;let n=0;switch(t.ye){case 1:n=270;break;case 2:n=180;break;case 4:n=0;break;case 8:n=90;break}const o=e.computeEndSegmentLength(this.Ye,this.Gs,Spot.None,s,n);let r=t.Cg;if(r<0)return o;const l=t.ru;if(l<=1||!e.isOrthogonal)return o;const a=t.HS,c=t.yc,f=t.ye===2||t.ye===8;f&&(r=l-1-r);const u=Link.zF,d=t.ye===2||t.ye===4,m=r<=0?c:this.We[f?i+1:i-1].yc,g=r>=l-1?c:this.We[f?i-1:i+1].yc;return(d?a.y>=m.y&&a.y<=g.y:a.x>=m.x&&a.x<=g.x)?o:(d?a.y<c.y:a.x<c.x)?o+r*u:o+(l-1-r)*u}}class LinkInfo{as;jt;ye;HS;Cg;ru;yc;KS;constructor(t,i,e){this.as=t,this.jt=i,this.ye=e,this.HS=new Point,this.Cg=0,this.ru=0,this.yc=new Point,this.KS=0}toString(){return this.as.toString()+" "+this.jt.toString()+" "+this.ye.toString()+":"+this.Cg.toString()+"/"+this.ru.toString()+" "+this.yc.toString()+" "+this.KS.toString()+" "+this.HS.toString()}}class LinkSettings{va;Wa;ja;Ja;$a;Za;Cp;Pp;Np;Mp;constructor(){this.va=Spot.Default,this.Wa=Spot.Default,this.ja=NaN,this.Ja=NaN,this.$a=NaN,this.Za=NaN,this.Cp=null,this.Pp=null,this.Np=1/0,this.Mp=1/0}copy(){const t=new LinkSettings;return t.va=this.va.T(),t.Wa=this.Wa.T(),t.ja=this.ja,t.Ja=this.Ja,t.$a=this.$a,t.Za=this.Za,t.Cp=this.Cp,t.Pp=this.Pp,t.Np=this.Np,t.Mp=this.Mp,t}}class LinkElementSettings{pp;yp;wp;mp;fy;uy;constructor(){this.pp=-1/0,this.yp=0,this.wp=Point.kn,this.mp=0,this.fy="None",this.uy="None"}copy(){const t=new LinkElementSettings;return t.pp=this.pp,t.yp=this.yp,t.wp=this.wp.T(),t.mp=this.mp,t.fy=this.fy,t.uy=this.uy,t}}class Group extends Node{Ng;It;Ua;W0;mi;de;constructor(t,i){let e;typeof t=="string"||t instanceof PanelLayout?e=t:t&&(i=t),super(e),this.Y=this.Y|4608,this.Ng=new GSet,this.It=null,this.de=new Layout,this.de.group=this,this.Ua=new GSet,this.W0=null,this.mi=null,i&&Object.assign(this,i)}cloneProtected(t){super.cloneProtected(t),this.Y=this.Y&-32769;const i=t.findInVisualTree(e=>e instanceof Placeholder);i instanceof Placeholder?t.It=i:t.It=null,this.de!==null?(t.de=this.de.copy(),t.de.group=t):(t.de!==null&&(t.de.group=null),t.de=null),this.mi!==null&&(t.mi=this.mi.copy())}tr(t){super.tr(t);const i=t.findSubGraphParts(),e=t.memberParts;for(;e.next();){const s=e.value;if(s.g(),s.invalidateLayout(8),s.clearAdornments(),s instanceof Node)s.invalidateConnectedLinks(i);else if(s instanceof Link){const n=s.labelNodes;for(;n.next();)n.value.invalidateConnectedLinks(i)}}}Df(t,i,e,s,n,o,r){if(t===3&&i==="elements"){if(n instanceof Placeholder)this.It===null?this.It=n:this.It!==n&&U.n("Cannot insert a second Placeholder into the visual tree of a Group.");else if(n instanceof Panel){const l=n.findInVisualTree(h=>h instanceof Placeholder);l instanceof Placeholder&&(this.It===null?this.It=l:this.It!==l&&U.n("Cannot insert a second Placeholder into the visual tree of a Group."))}}else t===4&&i==="elements"&&this.It!==null&&(s===this.It?this.It=null:s instanceof Panel&&this.It.isContainedBy(s)&&(this.It=null));super.Df(t,i,e,s,n,o,r)}Kd(t,i){if(super.Kd(t,i),this.isClipping&&this.type!==Panel.Spot&&this.isSubGraphExpanded){let e=this.resizeObject;e instanceof Panel&&(e=e.findMainElement()),this.mi===null&&(this.mi=new Rect),e.getDocumentBounds(this.mi),e instanceof Shape&&this.mi.inflate(-e.strokeWidth,-e.strokeWidth)}}Vh(t,i,e,s){this.hasPlaceholder()&&(this.cr=this.placeholder),super.Vh(t,i,e,s)}ensureBounds(){this.isSubGraphExpanded&&this.memberParts.each(i=>{i.ensureBounds()}),super.ensureBounds()}dl(){if(!super.dl())return!1;const t=this.memberParts;for(;t.next();){const i=t.value;if(i instanceof Node){if(!i.isVisible())continue;if(i.ps())return!1}else if(i instanceof Link){if(!i.isVisible())continue;if(i.ps()&&i.fromNode!==this&&i.toNode!==this)return!1}}return!0}hasPlaceholder(){return this.It!==null&&this.It.isVisibleObject()&&this.isSubGraphExpanded}get placeholder(){return this.It}get computesBoundsAfterDrag(){return(this.Y&2048)!==0}set computesBoundsAfterDrag(t){const i=(this.Y&2048)!==0;i!==t&&(Debug&&U.i(t,"boolean",Group,"computesBoundsAfterDrag"),this.Y=this.Y^2048,this.t("computesBoundsAfterDrag",i,t))}get computesBoundsIncludingLinks(){return(this.Y&4096)!==0}set computesBoundsIncludingLinks(t){const i=(this.Y&4096)!==0;i!==t&&(Debug&&U.i(t,"boolean",Group,"computesBoundsIncludingLinks"),this.Y=this.Y^4096,this.t("computesBoundsIncludingLinks",i,t))}get computesBoundsIncludingLocation(){return(this.Y&8192)!==0}set computesBoundsIncludingLocation(t){const i=(this.Y&8192)!==0;i!==t&&(Debug&&U.i(t,"boolean",Group,"computesBoundsIncludingLocation"),this.Y=this.Y^8192,this.t("computesBoundsIncludingLocation",i,t))}get handlesDragDropForMembers(){return(this.Y&16384)!==0}set handlesDragDropForMembers(t){const i=(this.Y&16384)!==0;i!==t&&(Debug&&U.i(t,"boolean",Group,"handlesDragDropForMembers"),this.Y=this.Y^16384,this.t("handlesDragDropForMembers",i,t))}get avoidableMembers(){return(this.Y&131072)!==0}set avoidableMembers(t){const i=(this.Y&131072)!==0;i!==t&&(Debug&&U.i(t,"boolean",Group,"avoidableMembers"),this.Y=this.Y^131072,this.t("avoidableMembers",i,t))}get memberParts(){return this.Ng.iterator}WN(t){if(this.Ng.add(t)){t instanceof Group&&this.Ua.add(t);const e=this.memberAdded;if(e!==null){let s=!0;const n=this.diagram;n!==null&&(s=n.v,n.v=!0),e(this,t),n!==null&&(n.v=s)}(!this.isVisible()||!this.isSubGraphExpanded)&&t.Ji(!1)}if(t instanceof Link&&!this.computesBoundsIncludingLinks)return;let i=this.It;i===null&&(i=this),i.g()}vN(t){if(this.Ng.delete(t)){t instanceof Group&&this.Ua.delete(t);const e=this.memberRemoved;if(e!==null){let s=!0;const n=this.diagram;n!==null&&(s=n.v,n.v=!0),e(this,t),n!==null&&(n.v=s)}(!this.isVisible()||!this.isSubGraphExpanded)&&t.Ji(!0)}if(t instanceof Link&&!this.computesBoundsIncludingLinks)return;let i=this.It;i===null&&(i=this),i.g()}Mf(){if(this.Ng.count>0){const t=this.diagram;if(t!==null){const e=this.Ng.copy().iterator;for(;e.next();){const s=e.value;t.remove(s)}}}super.Mf()}get layout(){return this.de}set layout(t){const i=this.de;if(i!==t){t!==null&&(U.s(t,Layout,Group,"layout"),t.diagram!==null&&t.diagram.layout===t&&U.n("A layout cannot be both the Diagram.layout and a Group.layout: "+t)),i!==null&&(i.diagram=null,i.group=null),this.de=t;const e=this.diagram;t!==null&&(t.diagram=e,t.group=this),e!==null&&(e.cl=!0),this.t("layout",i,t),e!==null&&e.requestUpdate()}}get memberAdded(){return this.zt!==null?this.zt.cw:null}set memberAdded(t){const i=this.memberAdded;i!==t&&(t!==null&&U.C(t,Group,"memberAdded"),this.Fl().cw=t,this.t("memberAdded",i,t))}get memberRemoved(){return this.zt!==null?this.zt.fw:null}set memberRemoved(t){const i=this.memberRemoved;i!==t&&(t!==null&&U.C(t,Group,"memberRemoved"),this.Fl().fw=t,this.t("memberRemoved",i,t))}get memberValidation(){return this.zt!==null?this.zt.Th:null}set memberValidation(t){const i=this.memberValidation;i!==t&&(t!==null&&U.C(t,Group,"memberValidation"),this.Fl().Th=t,this.t("memberValidation",i,t))}canAddMembers(t){const i=this.diagram;if(i===null)return!1;const e=i.commandHandler,n=e.ZC(t).iterator;for(;n.next();){const o=n.value;if(!e.isValidMember(this,o))return!1}return!0}addMembers(t,i){const e=this.diagram;if(e===null)return!1;const s=e.commandHandler,n=s.ZC(t);let o=!0;const r=n.iterator;for(;r.next();){const l=r.value;!i||s.isValidMember(this,l)?l.containingGroup=this:o=!1}return o}get ungroupable(){return(this.Y&256)!==0}set ungroupable(t){const i=(this.Y&256)!==0;i!==t&&(Debug&&U.i(t,"boolean",Group,"ungroupable"),this.Y=this.Y^256,this.t("ungroupable",i,t))}canUngroup(){if(!this.ungroupable)return!1;const t=this.layer;if(t===null||!t.allowUngroup)return!1;const i=t.diagram;return!(i!==null&&!i.allowUngroup)}invalidateConnectedLinks(t){const i=this.D4();if(super.invalidateConnectedLinks(t),i)return;this.GL(!0);const e=this.findExternalLinksConnected();for(;e.next();){const s=e.value;if(t!==void 0&&t.has(s))continue;const n=s.fromNode;if(n!==null&&n!==this&&n.isMemberOf(this)&&!n.isVisible())n.ne(s.fromPort),n.ne(s.toPort),s.oi();else{const o=s.toNode;o!==null&&o!==this&&o.isMemberOf(this)&&!o.isVisible()&&(o.ne(s.fromPort),o.ne(s.toPort),s.oi())}}}findExternalLinksConnected(){const t=this.diagram!==null&&this.diagram.H2;if(t&&this.W0!==null)return this.W0.iterator;const i=this.findSubGraphParts();i.add(this);const e=new GSet,s=i.iterator;for(;s.next();){const n=s.value;if(!(n instanceof Node))continue;const o=n.linksConnected;for(;o.next();){const r=o.value;i.has(r)||e.add(r)}}return t&&(this.W0=e),e.iterator}findExternalNodesConnected(){const t=this.findSubGraphParts();t.add(this);const i=new GSet,e=t.iterator;for(;e.next();){const s=e.value;if(!(s instanceof Node))continue;const n=s.linksConnected;for(;n.next();){const o=n.value,r=o.fromNode;r!==null&&(!t.has(r)||r===this)&&i.add(r);const l=o.toNode;l!==null&&(!t.has(l)||l===this)&&i.add(l)}}return i.iterator}wV(){function t(e,s){e!==null&&(s.add(e),t(e.containingGroup,s))}const i=new GSet;return t(this,i),i}findSubGraphParts(){const t=new GSet;return Part.Lh(t,this,!0,0,!0),t.delete(this),t}Ji(t){super.Ji(t);const i=this.memberParts;for(;i.next();)i.value.Ji(t)}collapseSubGraph(){const t=this.diagram;if(t===null||t.isCollapsingExpanding)return;t.isCollapsingExpanding=!0;const i=this.findSubGraphParts();this.eR(i,t,this),t.isCollapsingExpanding=!1}eR(t,i,e){const s=this.memberParts;for(;s.next();){const n=s.value;if(n.Ji(!1),n instanceof Group&&n.isSubGraphExpanded&&(n.wasSubGraphExpanded=n.isSubGraphExpanded,n.eR(t,i,e)),n instanceof Node)n.invalidateConnectedLinks(t),i.cf(n,e);else if(n instanceof Link){const o=n.labelNodes;for(;o.next();)o.value.invalidateConnectedLinks(t)}}this.isSubGraphExpanded=!1}expandSubGraph(){const t=this.diagram;if(t===null||t.isCollapsingExpanding)return;t.isCollapsingExpanding=!0;const i=this.findSubGraphParts();this.sR(i,t,this),t.isCollapsingExpanding=!1}sR(t,i,e){const s=this.memberParts;for(;s.next();){const n=s.value;if(n.Ji(!0),n instanceof Group&&n.wasSubGraphExpanded&&(n.wasSubGraphExpanded=!1,n.sR(t,i,e)),n instanceof Node)n.invalidateConnectedLinks(t);else if(n instanceof Link){const o=n.labelNodes;for(;o.next();)o.value.invalidateConnectedLinks(t)}}this.isSubGraphExpanded=!0}get isSubGraphExpanded(){return(this.Y&512)!==0}set isSubGraphExpanded(t){const i=(this.Y&512)!==0;if(i!==t){Debug&&U.i(t,"boolean",Group,"isSubGraphExpanded"),this.Y=this.Y^512;const e=this.diagram;this.t("isSubGraphExpanded",i,t);const s=this.subGraphExpandedChanged;if(s!==null){let n=!0;e!==null&&(n=e.v,e.v=!0),s(this),e!==null&&(e.v=n)}if(e!==null&&e.undoManager.isUndoingRedoing){this.It!==null&&this.It.g(),this.memberParts.each(n=>n.updateAdornments());return}t?this.expandSubGraph():this.collapseSubGraph()}}get wasSubGraphExpanded(){return(this.Y&1024)!==0}set wasSubGraphExpanded(t){const i=(this.Y&1024)!==0;i!==t&&(Debug&&U.i(t,"boolean",Group,"wasSubGraphExpanded"),this.Y=this.Y^1024,this.t("wasSubGraphExpanded",i,t))}get subGraphExpandedChanged(){return this.zt!==null?this.zt.uw:null}set subGraphExpandedChanged(t){const i=this.subGraphExpandedChanged;i!==t&&(t!==null&&U.C(t,Group,"subGraphExpandedChanged"),this.Fl().uw=t,this.t("subGraphExpandedChanged",i,t))}move(t,i){i===void 0&&(i=!1);const e=i?this.location:this.position,s=e.x,n=e.y,o=t.x,r=t.y;if((s===o||isNaN(s)&&isNaN(o))&&(n===r||isNaN(n)&&isNaN(r)))return;const l=o-(isNaN(s)?0:s),h=r-(isNaN(n)?0:n),a=Point.a();super.move(t,i);const c=new GSet,u=this.findSubGraphParts().iterator;for(;u.next();){const d=u.value;d instanceof Link&&(d.suspendsRouting&&c.add(d),!(!d.is&&(d.fromNode===this||d.toNode===this))&&(d.suspendsRouting=!0))}for(u.reset();u.next();){const d=u.value;if(d.Yr()||d instanceof Node&&d.isLinkLabel)continue;const m=d.position,g=d.location;m.isReal()?(a.x=m.x+l,a.y=m.y+h,d.position=a):g.isReal()&&(a.x=g.x+l,a.y=g.y+h,d.location=a)}for(u.reset();u.next();){const d=u.value;if(!(d instanceof Link)||(d.suspendsRouting=c.has(d),!d.is&&(d.fromNode===this||d.toNode===this)))continue;const m=d.position;a.x=m.x+l,a.y=m.y+h,a.isReal()?d.move(a):d.oi()}Point.o(a)}D4(){return(this.Y&65536)!==0}GL(t){(this.Y&65536)!==0!==t&&(this.Y=this.Y^65536)}get Ga(){return(this.Y&32768)!==0}set Ga(t){(this.Y&32768)!==0!==t&&(this.Y=this.Y^32768)}}class Placeholder extends GraphObject{li;Ag;constructor(t){super(),this.li=Margin.Sm,this.Ag=new Rect(NaN,NaN,NaN,NaN),t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.li=this.li.T(),t.Ag=this.Ag.copy()}Bh(t){if(this.background===null)return!1;const i=this.naturalBounds;return Rect.contains(0,0,i.width,i.height,t.x,t.y)}Yd(t,i,e,s){const n=this.part;if((n===null||!(n instanceof Group)&&!(n instanceof Adornment))&&U.n("Placeholder is not inside a Group or Adornment."),n instanceof Group){const o=this.computeBorder(this.Ag),r=this.minSize,l=isFinite(r.width)?Math.max(r.width,o.width):o.width,h=isFinite(r.height)?Math.max(r.height,o.height):o.height,a=this._i;a.io(l||0,h||0),this.po(0,0,a.width,a.height);const c=n.memberParts;let f=!1;for(;c.next();)if(c.value.isVisible()){f=!0;break}const u=n.diagram;if(f&&u!==null&&!u.animationManager.i2(n)&&!isNaN(o.x)&&!isNaN(o.y)){const d=Point.a();d.setRectSpot(o,n.locationSpot),n.location=d,Point.o(d)}}else{const o=n,r=this._i,l=this.li,h=l.left+l.right,a=l.top+l.bottom,c=o.adornedObject,f=c.getDocumentAngle();o.angle=f;let u=0;c instanceof Shape&&(u=c.strokeWidth);const d=c.getDocumentScale(),m=c.naturalBounds,g=(m.width+u)*d,p=(m.height+u)*d;if(o.type!==Panel.Link){const y=o.category==="Selection"?Spot.TopLeft:o.locationSpot,x=c.getDocumentPoint(y,Point.a());o.location=x,Point.o(x)}if(!isNaN(g)&&!isNaN(p))r.io(g+h||0,p+a||0),this.po(-l.left,-l.top,r.width,r.height);else{const y=c.getDocumentPoint(Spot.TopLeft,Point.a()),x=Rect.V(y.x,y.y,0,0);x.unionPoint(c.getDocumentPoint(Spot.BottomRight,y)),x.unionPoint(c.getDocumentPoint(Spot.TopRight,y)),x.unionPoint(c.getDocumentPoint(Spot.BottomLeft,y)),r.io(x.width+h||0,x.height+a||0),this.po(-l.left,-l.top,r.width,r.height),Point.o(y),Rect.o(x)}}}Vh(t,i,e,s){this.actualBounds.e(t,i,e,s)}computeBorder(t){const i=this.part,e=i.diagram;if(e===null||e.animationManager.isAnimating)return t;if(i instanceof Group&&!i.layer.isTemporary&&i.computesBoundsAfterDrag&&this.Ag.isReal()){const r=e.toolManager.findTool("Dragging");if(r===e.currentTool&&r.sO(i,this.Ag,t))return t}const s=Rect.a(),n=this.computeMemberBounds(s),o=this.li;return i instanceof Group&&!i.isSubGraphExpanded?t.e(n.x-o.left,n.y-o.top,0,0):t.e(n.x-o.left,n.y-o.top,Math.max(n.width+o.left+o.right,0),Math.max(n.height+o.top+o.bottom,0)),Rect.o(s),i instanceof Group&&i.computesBoundsIncludingLocation&&i.location.isReal()&&t.unionPoint(i.location),t}computeMemberBounds(t){if(!(this.part instanceof Group))return t.e(0,0,0,0),t;const i=this.part;let e=1/0,s=1/0,n=-1/0,o=-1/0;const r=i.memberParts;for(;r.next();){const l=r.value;if(!l.isVisible()||l instanceof Link&&(!i.computesBoundsIncludingLinks||l.$o()||l.fromNode===i||l.toNode===i))continue;const h=l.actualBounds;h.left<e&&(e=h.left),h.top<s&&(s=h.top),h.right>n&&(n=h.right),h.bottom>o&&(o=h.bottom)}if(!isFinite(e)||!isFinite(s)){const l=i.location;t.e(l.x,l.y,0,0)}else t.e(e,s,n-e,o-s);return t}get padding(){return this.li}set padding(t){typeof t=="number"?t=new Margin(t):U.s(t,Margin,Placeholder,"padding");const i=this.li;i.equals(t)||(t=t.T(),this.li=t,this.t("padding",i,t),this.g())}}class Layout{c;qa;Tg;Kr;Lg;Dg;vo;Il;Fg;Rg;Do;constructor(t){GSet.se(this),this.c=null,this.qa=null,this.Tg=!0,this.Kr=!0,this.Lg=!1,this.Dg=new Point(0,0),this.vo=!0,this.Il=null,this.Fg=null,this.Rg=!1,this.Do=null,t&&Object.assign(this,t)}cloneProtected(t){t.Tg=this.Tg,t.Kr=this.Kr,t.Lg=this.Lg,t.Dg.f(this.Dg),t.vo=this.vo,t.Il=this.Il,t.Fg=this.Fg,t.Rg=!0}copy(){const t=new this.constructor;return this.cloneProtected(t),t}yi(t){U.Pr(this,t)}toString(){let t=U.to(this.constructor);return t+="(",this.group!==null&&(t+=" in "+this.group),this.diagram!==null&&(t+=" for "+this.diagram),t+=")",t}get diagram(){return this.c}set diagram(t){Debug&&t!==null&&U.s(t,Diagram,Layout,"diagram"),this.c=t}get group(){return this.qa}set group(t){this.qa!==t&&(Debug&&t!==null&&U.s(t,Group,Layout,"group"),this.qa=t,t!==null&&(this.c=t.diagram))}get isOngoing(){return this.Tg}set isOngoing(t){this.Tg!==t&&(U.i(t,"boolean",Layout,"isOngoing"),this.Tg=t)}get isInitial(){return this.Kr}set isInitial(t){U.i(t,"boolean",Layout,"isInitial"),this.Kr=t,t||(this.Rg=!0)}get isViewportSized(){return this.Lg}set isViewportSized(t){this.Lg!==t&&(U.i(t,"boolean",Layout,"isViewportSized"),this.Lg=t,t&&this.w())}get isRouting(){return this.vo}set isRouting(t){this.vo!==t&&(U.i(t,"boolean",Layout,"isRouting"),this.vo=t)}get isRealtime(){return this.Il}set isRealtime(t){this.Il!==t&&(t!==null&&U.i(t,"boolean",Layout,"isRealtime"),this.Il=t)}get isValidLayout(){return this.Rg}set isValidLayout(t){if(this.Rg!==t&&(U.i(t,"boolean",Layout,"isValidLayout"),this.Rg=t,!t)){const i=this.diagram;i!==null&&(i.cl=!0)}}invalidateLayout(){if(!this.isValidLayout)return;const t=this.diagram;if(t===null||t.undoManager.isUndoingRedoing)return;const i=t.animationManager;i.isTicking||(i.defaultAnimation.isAnimating&&i.stopAnimation(),(this.isOngoing&&t.ga||this.isInitial&&!t.ga)&&(this.isValidLayout=!1,t.requestUpdate()))}w(){this.invalidateLayout()}get network(){return this.Do}set network(t){this.Do!==t&&(Debug&&t!==null&&U.s(t,LayoutNetwork,Layout,"network"),this.Do=t,t!==null&&(t.layout=this))}createNetwork(){return new LayoutNetwork(this)}makeNetwork(t){const i=this.createNetwork();return t instanceof Diagram?(i.addParts(t.nodes,!0),i.addParts(t.links,!0)):t instanceof Group?i.addParts(t.memberParts):i.addParts(t.iterator),i}updateParts(){this.isValidLayout=!0;let t=this.diagram;if(t===null&&this.network!==null){const i=this.network.vertexes.iterator;for(;i.next();){const s=i.value.node;if(s!==null&&(t=s.diagram,t!==null))break}}try{t!==null&&t.startTransaction("Layout"),this.commitLayout()}finally{t!==null&&t.commitTransaction("Layout")}}commitLayout(){if(this.network===null)return;const t=this.network.vertexes.iterator;for(;t.next();)t.value.commit();if(this.isRouting){const i=this.network.edges.iterator;for(;i.next();)i.value.commit()}}doLayout(t){Debug&&t===null&&U.n("Layout.doLayout(collection) argument must not be null but a Diagram, a Group, or an Iterable of Parts");const i=new GSet;if(t instanceof Diagram?(this.Zh(i,t.nodes,!0,this.Ga,!0,!1,!0),this.Zh(i,t.parts,!0,this.Ga,!0,!1,!0)):t instanceof Group?this.Zh(i,t.memberParts,!1,this.Ga,!0,!1,!0):i.addAll(t.iterator),i.count>0){const s=this.diagram;s!==null&&s.startTransaction("Layout"),this.doMinimalNoNetworkLayout(i),s!==null&&s.commitTransaction("Layout")}this.isValidLayout=!0}doMinimalNoNetworkLayout(t){const i=t.count,e=Math.ceil(Math.sqrt(i));this.arrangementOrigin=this.initialOrigin(this.arrangementOrigin);const s=this.arrangementOrigin.x,n=this.arrangementOrigin.y;let o=s,r=n,l=0,h=0;const a=t.iterator;for(;a.next();){const c=a.value;c.ensureBounds();const f=c.measuredBounds,u=f.width,d=f.height;c.moveTo(o,r),c instanceof Group&&(c.Ga=!1),o+=Math.max(u,50)+20,h=Math.max(h,Math.max(d,50)),l>=e-1?(l=0,o=s,r+=h+20,h=0):l++}}Ga(t){return!!(!t.location.isReal()&&!t.position.isReal()||t instanceof Group&&t.Ga)}Zh(t,i,e,s,n,o,r){const l=i.iterator;for(;l.next();){const h=l.value;if(!(e&&!h.isTopLevel)&&!(s!==null&&!s(h))&&h.canLayout())if(n&&h instanceof Node){if(h.isLinkLabel)continue;h instanceof Group&&h.layout===null?this.Zh(t,h.memberParts,!1,s,n,o,r):(h.ensureBounds(),t.add(h))}else o&&h instanceof Link?t.add(h):r&&h.ze()&&!(h instanceof Node)&&(h.ensureBounds(),t.add(h))}}getLayoutBounds(t,i){const e=this.boundsComputation;return e!==null?(i||(i=new Rect),e(t,this,i)):!i&&t.margin.equalTo(0,0,0,0)?t.actualBounds:(i||(i=new Rect),i.set(t.actualBounds),i.addMargin(t.margin),i)}get boundsComputation(){return this.Fg}set boundsComputation(t){this.Fg!==t&&(t!==null&&U.C(t,Layout,"boundsComputation"),this.Fg=t,this.w())}collectParts(t){const i=new GSet;return t instanceof Diagram?(this.Zh(i,t.nodes,!0,null,!0,!0,!0),this.Zh(i,t.links,!0,null,!0,!0,!0),this.Zh(i,t.parts,!0,null,!0,!0,!0)):t instanceof Group?this.Zh(i,t.memberParts,!1,null,!0,!0,!0):this.Zh(i,t.iterator,!1,null,!0,!0,!0),i}get arrangementOrigin(){return this.Dg}set arrangementOrigin(t){Debug&&U.s(t,Point,Layout,"arrangementOrigin"),this.Dg.equals(t)||(this.Dg.f(t),this.w())}initialOrigin(t){const i=this.group;if(i!==null)if(i.hasPlaceholder()){const e=i.placeholder,s=e.getDocumentPoint(Spot.TopLeft);(isNaN(s.x)||isNaN(s.y))&&s.set(t);const n=e.padding;return s.x+=n.left,s.y+=n.top,s}else{const e=i.position.copy();return(isNaN(e.x)||isNaN(e.y))&&e.set(t),e}return t}}class LayoutNetwork{de;Fo;vn;yw;ww;constructor(t){GSet.se(this),Debug&&!t&&U.n("LayoutNetwork constructor requires non-null Layout argument"),this.de=t,this.Fo=new GSet,this.vn=new GSet,this.yw=new GMap,this.ww=new GMap}clear(){if(this.Fo){const t=this.Fo.iterator;for(;t.next();)t.value.clear()}if(this.vn){const t=this.vn.iterator;for(;t.next();)t.value.clear()}this.Fo=new GSet,this.vn=new GSet,this.yw=new GMap,this.ww=new GMap}toString(t){t===void 0&&(t=0);let i="LayoutNetwork"+(this.layout!==null?"("+this.layout.toString()+")":"");if(t<=0)return i;if(i+=" vertexes: "+this.Fo.count+" edges: "+this.vn.count,t>1){const e=this.Fo.iterator;for(;e.next();){const n=e.value;i+=`
    `+n.toString(t-1)}const s=this.vn.iterator;for(;s.next();){const n=s.value;i+=`
    `+n.toString(t-1)}}return i}get layout(){return this.de}set layout(t){t!==null&&(this.de=t)}get vertexes(){return this.Fo}get edges(){return this.vn}createVertex(){return new LayoutVertex(this)}createEdge(){return new LayoutEdge(this)}addParts(t,i,e){if(t===null)return;i===void 0&&(i=!1),U.i(i,"boolean",LayoutNetwork,"addParts:toplevelonly"),e===void 0&&(e=null),e===null&&(e=n=>{if(n instanceof Node)return!n.isLinkLabel;if(n instanceof Link){const o=n.fromNode;if(o===null||o.isLinkLabel)return!1;const r=n.toNode;return!(r===null||r.isLinkLabel)}return!1});const s=t.iterator;for(;s.next();){const n=s.value;if(n instanceof Node&&!(i&&!n.isTopLevel)&&n.canLayout()&&e(n))if(n instanceof Group&&n.layout===null)this.addParts(n.memberParts,!1);else{if(this.findVertex(n)!==null)continue;const o=this.createVertex();o.node=n,this.addVertex(o)}}for(s.reset();s.next();){const n=s.value;if(!(n instanceof Link)||i&&!n.isTopLevel||!n.canLayout()||!e(n)||this.findEdge(n)!==null)continue;const o=n.fromNode,r=n.toNode;if(o===null||r===null||o===r)continue;const l=this.findGroupVertex(o),h=this.findGroupVertex(r);this.linkVertexes(l,h,n)}}findGroupVertex(t){const i=t.findVisibleNode();if(i===null)return null;let e=this.findVertex(i);if(e!==null)return e;let s=i.containingGroup;for(;s!==null;){if(e=this.findVertex(s),e!==null)return e;s=s.containingGroup}return null}addVertex(t){Debug&&U.s(t,LayoutVertex,LayoutNetwork,"addVertex:vertex"),this.Fo.add(t);const i=t.node;i!==null&&this.yw.set(i,t),t.network=this}addNode(t){Debug&&U.s(t,Node,LayoutNetwork,"addNode:node");let i=this.findVertex(t);return i===null&&(i=this.createVertex(),i.node=t,this.addVertex(i)),i}deleteVertex(t){if(Debug&&U.s(t,LayoutVertex,LayoutNetwork,"deleteVertex:vertex"),this.nR(t)){let i=t.dr;for(let e=i.count-1;e>=0;e--){const s=i.elt(e);this.deleteEdge(s)}i=t.gr;for(let e=i.count-1;e>=0;e--){const s=i.elt(e);this.deleteEdge(s)}}}nR(t){const i=this.Fo.delete(t);if(i){const e=t.node;e!==null&&this.yw.delete(e)}return i}deleteNode(t){Debug&&U.s(t,Node,LayoutNetwork,"deleteNode:node");const i=this.findVertex(t);i!==null&&this.deleteVertex(i)}findVertex(t){return Debug&&U.s(t,Node,LayoutNetwork,"findVertex:node"),this.yw.get(t)}addEdge(t){Debug&&U.s(t,LayoutEdge,LayoutNetwork,"addEdge:edge"),this.xA(t);const i=t.toVertex;i!==null&&i.addSourceEdge(t);const e=t.fromVertex;e!==null&&e.addDestinationEdge(t)}xA(t){this.vn.add(t);const i=t.link;i!==null&&this.findEdge(i)===null&&this.ww.set(i,t),t.network=this}addLink(t){Debug&&U.s(t,Link,LayoutNetwork,"addLink:link");const i=t.fromNode,e=t.toNode;let s=this.findEdge(t);return s===null?(s=this.createEdge(),s.link=t,i!==null&&(s.fromVertex=this.addNode(i)),e!==null&&(s.toVertex=this.addNode(e)),this.addEdge(s)):(i!==null?s.fromVertex=this.addNode(i):s.fromVertex=null,e!==null?s.toVertex=this.addNode(e):s.toVertex=null),s}deleteEdge(t){Debug&&U.s(t,LayoutEdge,LayoutNetwork,"deleteEdge:edge");const i=t.toVertex;i!==null&&i.deleteSourceEdge(t);const e=t.fromVertex;e!==null&&e.deleteDestinationEdge(t),this.bA(t)}bA(t){const i=this.vn.delete(t);if(i){const e=t.link;e!==null&&this.ww.delete(e)}return i}deleteLink(t){Debug&&U.s(t,Link,LayoutNetwork,"deleteLink:link");const i=this.findEdge(t);i!==null&&this.deleteEdge(i)}findEdge(t){return Debug&&U.s(t,Link,LayoutNetwork,"findEdge:link"),this.ww.get(t)}linkVertexes(t,i,e){if(t===null||i===null)return null;if(Debug&&(U.s(t,LayoutVertex,LayoutNetwork,"linkVertexes:fromVertex"),U.s(i,LayoutVertex,LayoutNetwork,"linkVertexes:toVertex"),e!==null&&U.s(e,Link,LayoutNetwork,"linkVertexes:link")),t.network===this&&i.network===this){const s=this.createEdge();return s.link=e,s.fromVertex=t,s.toVertex=i,this.addEdge(s),s}return null}reverseEdge(t){Debug&&U.s(t,LayoutEdge,LayoutNetwork,"reverseEdge:edge");const i=t.fromVertex,e=t.toVertex;i===null||e===null||(i.deleteDestinationEdge(t),e.deleteSourceEdge(t),t.reverseEdge(),i.addSourceEdge(t),e.addDestinationEdge(t))}deleteSelfEdges(){const t=U.ct(),i=this.vn.iterator;for(;i.next();){const s=i.value;s.fromVertex===s.toVertex&&t.push(s)}const e=t.length;for(let s=0;s<e;s++)this.deleteEdge(t[s]);U.nt(t)}deleteArtificialVertexes(){const t=U.ct(),i=this.Fo.iterator;for(;i.next();){const o=i.value;o.node===null&&o.data===null&&t.push(o)}let e=t.length;for(let o=0;o<e;o++)this.deleteVertex(t[o]);const s=U.ct(),n=this.vn.iterator;for(;n.next();){const o=n.value;o.link===null&&o.data===null&&s.push(o)}e=s.length;for(let o=0;o<e;o++)this.deleteEdge(s[o]);U.nt(t),U.nt(s)}deleteUselessEdges(){const t=U.ct(),i=this.vn.iterator;for(;i.next();){const s=i.value;(s.fromVertex===null||s.toVertex===null)&&t.push(s)}const e=t.length;for(let s=0;s<e;s++)this.deleteEdge(t[s]);U.nt(t)}isSingleton(t){return!(t.dr.count>0||t.gr.count>0)}splitIntoSubNetworks(t){t===void 0&&(t=!0),t&&(this.deleteArtificialVertexes(),this.deleteUselessEdges(),this.deleteSelfEdges());const i=new List;let e=!0;for(;e;){e=!1;const s=this.Fo.iterator;for(;s.next();){const n=s.value;if(this.isSingleton(n))continue;const o=this.layout.createNetwork();i.add(o),this.F4(o,n),e=!0;break}}return i.sort((s,n)=>s===null||n===null||s===n?0:n.vertexes.count-s.vertexes.count),i}F4(t,i){const e=[];for(e.push(i);e.length>0;){const s=e.pop();if(s.network===t)continue;this.nR(s),t.addVertex(s);let n=s.sourceEdges;for(;n.next();){const o=n.value;o.network!==t&&(this.bA(o),t.xA(o),o.fromVertex&&e.push(o.fromVertex))}for(n=s.destinationEdges;n.next();){const o=n.value;o.network!==t&&(this.bA(o),t.xA(o),o.toVertex&&e.push(o.toVertex))}}}findAllParts(){const t=new GSet,i=this.Fo.iterator;for(;i.next();){const s=i.value;s.node&&t.add(s.node)}const e=this.vn.iterator;for(;e.next();){const s=e.value;s.link&&t.add(s.link)}return t}}const _smartComparerRegex=/([+-]?[.]?\d+(?:\.\d*)?(?:e[+-]?\d+)?)/;class LayoutVertex{Do;hi;Ye;ii;cs;dr;gr;constructor(t){GSet.se(this),Debug&&!t&&U.n("LayoutVertex constructor requires non-null LayoutNetwork argument"),this.Do=t,this.ii=new Rect(0,0,10,10),this.cs=new Point(5,5),this.hi=null,this.Ye=null,this.dr=new List,this.gr=new List}clear(){this.hi=null,this.Ye=null,this.dr=new List,this.gr=new List}toString(t){t===void 0&&(t=0);let i="LayoutVertex#"+GSet.Cs(this);if(t>0&&(i+=this.node!==null?"("+this.node.toString()+")":"",t>1)){let e="",s=!0,n=this.dr.iterator;for(;n.next();){const r=n.value;s?s=!1:e+=",",e+=r.toString(0)}let o="";for(s=!0,n=this.gr.iterator;n.next();){const r=n.value;s?s=!1:o+=",",o+=r.toString(0)}i+=" sources: "+e+" destinations: "+o}return i}get Ro(){return this.dr.aT}get pr(){return this.gr.aT}get data(){return this.hi}set data(t){if(this.hi=t,t!==null&&t.bounds){const i=t.bounds,e=i.x,s=i.y,n=i.width,o=i.height;this.cs.e(n/2,o/2),this.ii.e(e,s,n,o)}}get node(){return this.Ye}set node(t){if(this.Ye!==t){if(Debug&&t!==null&&U.s(t,Node,LayoutVertex,"node"),this.Ye=t,t===null)return;t.ensureBounds();const i=this.network.layout,e=Rect.a(),s=i.getLayoutBounds(t,e);let n=s.x,o=s.y;const r=s.width,l=s.height;if(isNaN(n)&&(n=0),isNaN(o)&&(o=0),this.ii.e(n,o,r,l),Rect.o(e),!(t instanceof Group)){const h=t.locationObject.getDocumentPoint(Spot.Center);if(h.isReal()){this.cs.e(h.x-n,h.y-o);return}}this.cs.e(r/2,l/2)}}get bounds(){return this.ii}set bounds(t){this.ii.equals(t)||(Debug&&U.s(t,Rect,LayoutVertex,"bounds"),this.ii.f(t))}get focus(){return this.cs}set focus(t){this.cs.equals(t)||(Debug&&U.s(t,Point,LayoutVertex,"focus"),this.cs.f(t))}get centerX(){return this.ii.x+this.cs.x}set centerX(t){const i=this.ii;i.x+this.cs.x!==t&&(Debug&&U.r(t,LayoutVertex,"centerX"),i.x=t-this.cs.x)}get centerY(){return this.ii.y+this.cs.y}set centerY(t){const i=this.ii;i.y+this.cs.y!==t&&(Debug&&U.r(t,LayoutVertex,"centerY"),i.y=t-this.cs.y)}get focusX(){return this.cs.x}set focusX(t){const i=this.cs;i.x!==t&&(i.x=t)}get focusY(){return this.cs.y}set focusY(t){const i=this.cs;i.y!==t&&(i.y=t)}get x(){return this.ii.x}set x(t){const i=this.ii;i.x!==t&&(i.x=t)}get y(){return this.ii.y}set y(t){const i=this.ii;i.y!==t&&(i.y=t)}get width(){return this.ii.width}set width(t){const i=this.ii;i.width!==t&&(i.width=t)}get height(){return this.ii.height}set height(t){const i=this.ii;i.height!==t&&(i.height=t)}commit(){const t=this.hi;if(t!==null){const e=this.bounds,s=t.bounds;U.st(s)?(s.x=e.x,s.y=e.y,s.width=e.width,s.height=e.height):t.bounds=e.copy();return}const i=this.node;if(i!==null){const e=this.bounds;if(!(i instanceof Group)){const s=Rect.a();i.ensureBounds();const n=this.network.layout.getLayoutBounds(i,s),o=i.locationObject.getDocumentPoint(Spot.Center);if(n.isReal()&&o.isReal()){i.moveTo(e.x+this.focusX-(o.x-n.x)+i.margin.left,e.y+this.focusY-(o.y-n.y+i.margin.top)),Rect.o(s);return}Rect.o(s)}i.moveTo(e.x+i.margin.left,e.y+i.margin.top)}}addSourceEdge(t){t!==null&&(Debug&&U.s(t,LayoutEdge,LayoutVertex,"addSourceEdge:edge"),this.dr.has(t)||this.dr.add(t))}deleteSourceEdge(t){t!==null&&(Debug&&U.s(t,LayoutEdge,LayoutVertex,"deleteSourceEdge:edge"),this.dr.delete(t))}addDestinationEdge(t){t!==null&&(Debug&&U.s(t,LayoutEdge,LayoutVertex,"addDestinationEdge:edge"),this.gr.has(t)||this.gr.add(t))}deleteDestinationEdge(t){t!==null&&(Debug&&U.s(t,LayoutEdge,LayoutVertex,"deleteDestinationEdge:edge"),this.gr.delete(t))}get network(){return this.Do}set network(t){Debug&&U.s(t,LayoutNetwork,LayoutVertex,"network"),this.Do=t}get sourceVertexes(){const t=new GSet,i=this.sourceEdges;for(;i.next();){const e=i.value;e.fromVertex&&t.add(e.fromVertex)}return t.iterator}get destinationVertexes(){const t=new GSet,i=this.destinationEdges;for(;i.next();){const e=i.value;e.toVertex&&t.add(e.toVertex)}return t.iterator}get vertexes(){const t=new GSet;let i=this.sourceEdges;for(;i.next();){const e=i.value;e.fromVertex&&t.add(e.fromVertex)}for(i=this.destinationEdges;i.next();){const e=i.value;e.toVertex&&t.add(e.toVertex)}return t.iterator}get sourceEdges(){return this.dr.iterator}get destinationEdges(){return this.gr.iterator}get edges(){const t=new List;let i=this.sourceEdges;for(;i.next();){const e=i.value;t.add(e)}for(i=this.destinationEdges;i.next();){const e=i.value;t.add(e)}return t.iterator}get edgesCount(){return this.dr.count+this.gr.count}static standardComparer(t,i){Debug&&U.s(t,LayoutVertex,LayoutVertex,"standardComparer:m"),Debug&&U.s(i,LayoutVertex,LayoutVertex,"standardComparer:n");const e=t.Ye,s=i.Ye;if(e)if(s){const n=e.text,o=s.text;return n<o?-1:n>o?1:0}else return 1;else return s!==null?-1:0}static smartComparer(t,i){if(Debug&&U.s(t,LayoutVertex,LayoutVertex,"smartComparer:m"),Debug&&U.s(i,LayoutVertex,LayoutVertex,"smartComparer:n"),t!==null)if(i!==null){const e=t.Ye,s=i.Ye;if(e!==null)if(s!==null){const n=e.text.toLocaleLowerCase(),o=s.text.toLocaleLowerCase(),r=n.split(_smartComparerRegex),l=o.split(_smartComparerRegex);let h=0;for(;h<r.length;h++)if(l[h]!==""&&l[h]!==void 0){const a=parseFloat(r[h]),c=parseFloat(l[h]);if(isNaN(a))if(isNaN(c)){if(r[h].localeCompare(l[h])!==0)return r[h].localeCompare(l[h]);continue}else return 1;else{if(isNaN(c))return-1;if(a-c!==0)return a-c;continue}}else{if(r[h]==="")continue;return 1}return l[h]!==""&&l[h]!==void 0?-1:0}else return 1;else return s!==null?-1:0}else return 1;else return i!==null?-1:0}}class LayoutEdge{Do;hi;as;fs;us;constructor(t){GSet.se(this),Debug&&!t&&U.n("LayoutEdge constructor requires non-null LayoutNetwork argument"),this.Do=t,this.hi=null,this.as=null,this.fs=null,this.us=null}clear(){this.hi=null,this.as=null,this.fs=null,this.us=null}toString(t){t===void 0&&(t=0);let i="LayoutEdge#"+GSet.Cs(this);return t>0&&(i+=this.as!==null?"("+this.as.toString()+")":"",t>1&&(i+=" "+(this.fs?this.fs.toString():"null")+" --> "+(this.us?this.us.toString():"null"))),i}reverseEdge(){const t=this.fs;this.fs=this.us,this.us=t}commit(){}getOtherVertex(t){return Debug&&U.s(t,LayoutVertex,LayoutEdge,"getOtherVertex:v"),this.us===t?this.fs:this.fs===t?this.us:null}get network(){return this.Do}set network(t){Debug&&U.s(t,LayoutNetwork,LayoutEdge,"network"),this.Do=t}get data(){return this.hi}set data(t){this.hi!==t&&(Debug&&t!==null&&U.Xo(t,LayoutEdge,"data"),this.hi=t)}get link(){return this.as}set link(t){this.as!==t&&(Debug&&t!==null&&U.s(t,Link,LayoutEdge,"link"),this.as=t)}get fromVertex(){return this.fs}set fromVertex(t){this.fs!==t&&(Debug&&t!==null&&U.s(t,LayoutVertex,LayoutEdge,"fromVertex"),this.fs=t)}get toVertex(){return this.us}set toVertex(t){this.us!==t&&(Debug&&t!==null&&U.s(t,LayoutVertex,LayoutEdge,"toVertex"),this.us=t)}}var GridAlignment=(w=>(w[w.Position=0]="Position",w[w.Location=1]="Location",w))(GridAlignment||{}),GridArrangement=(w=>(w[w.LeftToRight=10]="LeftToRight",w[w.RightToLeft=11]="RightToLeft",w))(GridArrangement||{}),GridSorting=(w=>(w[w.Forwards=20]="Forwards",w[w.Reverse=21]="Reverse",w[w.Ascending=22]="Ascending",w[w.Descending=23]="Descending",w))(GridSorting||{});class GridLayout extends Layout{Ig;Og;Uo;Wn;xi;te;Le;De;constructor(t){super(),this.isViewportSized=!0,this.Ig=NaN,this.Og=NaN,this.Uo=new Size(NaN,NaN).S(),this.Wn=new Size(10,10).S(),this.xi=1,this.te=10,this.Le=22,this.De=GridLayout.standardComparer,t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.Ig=this.Ig,t.Og=this.Og,t.Uo.f(this.Uo),t.Wn.f(this.Wn),t.xi=this.xi,t.te=this.te,t.Le=this.Le,t.De=this.De}yi(t){t in GridSorting?this.sorting=t:t in GridArrangement?this.arrangement=t:t in GridAlignment?this.alignment=t:super.yi(t)}doLayout(t){Debug&&t===null&&U.n("Layout.doLayout(collection) argument must not be null but a Diagram, a Group, or an Iterable of Parts"),this.arrangementOrigin=this.initialOrigin(this.arrangementOrigin);const i=this.collectParts(t),e=this.diagram,n=i.copy().iterator;for(;n.next();){const m=n.value;if(m.Yr()&&(m.fromNode!==null||m.toNode!==null)){i.delete(m);continue}if(m.ensureBounds(),m instanceof Group){const g=m.memberParts;for(;g.next();){const p=g.value;i.delete(p)}}}const o=i.toArray();if(o.length===0)return;switch(this.sorting){case 20:break;case 21:o.reverse();break;case 22:o.sort(this.comparer);break;case 23:o.sort(this.comparer),o.reverse();break}let r=this.wrappingColumn;isNaN(r)&&(r=0);let l=this.wrappingWidth;if(isNaN(l)&&e!==null){const m=e.viewportBounds,g=e.padding;l=Math.max(m.width-g.left-g.right,0)}else l=Math.max(this.wrappingWidth,0);r<=0&&l<=0&&(r=1);let h=this.spacing.width;isFinite(h)||(h=0);let a=this.spacing.height;isFinite(a)||(a=0),e!==null&&e.startTransaction("Layout");const c=[];switch(this.alignment){case 0:this.R4(o,l,r,h,a,c);break;case 1:this.I4(o,l,r,h,a,c);break}let f=0,u=0,d=0;for(let m=0;m<c.length;m++){const g=c[m];f=Math.min(f,g.x),u=Math.min(u,g.y),d=Math.max(d,g.x+g.width)}this.arrangement===11?this.commitLayers(c,new Point(f+h/2-(d+f),u-a/2)):this.commitLayers(c,new Point(f-h/2,u-a/2)),e!==null&&e.commitTransaction("Layout"),this.isValidLayout=!0}R4(t,i,e,s,n,o){const r=Rect.a();let l=Math.max(this.cellSize.width,1);if(!isFinite(l)){l=0;for(let p=0;p<t.length;p++){const y=t[p],x=this.getLayoutBounds(y,r);l=Math.max(l,x.width)}}l+=s,l=Math.max(l,1);let h=Math.max(this.cellSize.height,1);if(!isFinite(h)){h=0;for(let p=0;p<t.length;p++){const y=t[p],x=this.getLayoutBounds(y,r);h=Math.max(h,x.height)}}h+=n,h=Math.max(h,1);const a=this.arrangement,c=this.arrangementOrigin.x,f=this.arrangementOrigin.y;let u=c,d=f,m=0,g=0;for(let p=0;p<t.length;p++){const y=t[p],x=this.getLayoutBounds(y,r),b=Math.ceil((x.width+s)/l),S=Math.ceil((x.height+n)/h),k=b*l,P=S*h;let A=0;a===11?A=Math.abs(u-x.width):A=u+x.width,(e>0&&m>e-1||i>0&&m>0&&A-c>i)&&(o.push(new Rect(0,d,i+s,g)),m=0,u=c,d+=g,g=0),g=Math.max(g,P);let N=0;a===11?N=-x.width:N=0,y.moveTo(u+N+y.margin.left,d+y.margin.top),a===11?u-=k:u+=k,m++}o.push(new Rect(0,d,i+s,g)),Rect.o(r)}I4(t,i,e,s,n,o){const r=Rect.a();let l=Math.max(this.cellSize.width,1),h=0,a=0,c=0;const f=Point.a();for(let N=0;N<t.length;N++){const M=t[N],C=this.getLayoutBounds(M,r),T=M.getRelativePoint(M.locationObject,M.locationSpot,f);h=Math.max(h,T.x),a=Math.max(a,C.width-T.x),c=Math.max(c,T.y)}const u=this.arrangement;u===11?h+=s:a+=s,isFinite(l)?l=Math.max(l+s,1):l=Math.max(h+a,1);const d=this.arrangementOrigin.x,m=this.arrangementOrigin.y;let g=d,p=m,y=0;i>=h&&(i-=h);let x=0,b=0;const S=Math.max(this.cellSize.height,1);c=0;let k=0,P=!0;const A=Point.a();for(let N=0;N<t.length;N++){const M=t[N],C=this.getLayoutBounds(M,r),T=M.getRelativePoint(M.locationObject,M.locationSpot,f);if(y>0)if(u===11){let D=(g-d-(C.width-T.x))/l;G.H(Math.round(D),D)?D=Math.round(D):D=Math.floor(D),g=D*l+d}else{let D=(g-d+T.x)/l;G.H(Math.round(D),D)?D=Math.round(D):D=Math.ceil(D),g=D*l+d}else u===11?x=g+T.x+C.width:x=g-T.x;let L=0;if(u===11?L=-(g+T.x)+x:L=g+C.width-T.x-x,e>0&&y>e-1||i>0&&y>0&&L>i){o.push(new Rect(0,P?p-c:p,i+s,k+c+n));for(let D=0;D<y&&N!==y;D++){const F=t[N-y+D],R=F.getRelativePoint(F.locationObject,F.locationSpot,A);F.moveTo(F.position.x,F.position.y+c-R.y)}k+=n,P?p+=k:p+=k+c,c=0,k=0,y=0,g=d,P=!1}g===d&&(u===11?b=Math.max(b,C.width-T.x):b=Math.min(b,-T.x)),c=Math.max(c,T.y),k=Math.max(k,C.height-T.y),isFinite(S)&&(k=Math.max(k,Math.max(C.height,S)-T.y)),P?M.moveTo(g-T.x,p-T.y):M.moveTo(g-T.x,p),u===11?g-=T.x+s:g+=C.width-T.x+s,y++}if(o.push(new Rect(0,p,i+s,(P?k:k+c)+n)),t.length!==y)for(let N=0;N<y;N++){const M=t[t.length-y+N],C=M.getRelativePoint(M.locationObject,M.locationSpot,f);M.moveTo(M.position.x,M.position.y+c-C.y)}if(Point.o(f),Point.o(A),u===11)for(let N=0;N<o.length;N++){const M=o[N];M.width+=b,M.x-=b}else for(let N=0;N<o.length;N++){const M=o[N];M.x>b&&(M.width+=M.x-b,M.x=b)}Rect.o(r)}commitLayers(t,i){}get wrappingWidth(){return this.Ig}set wrappingWidth(t){this.Ig!==t&&(U.i(t,"number",GridLayout,"wrappingWidth"),(t>0||isNaN(t))&&(this.Ig=t,this.isViewportSized=isNaN(t),this.w()))}get wrappingColumn(){return this.Og}set wrappingColumn(t){this.Og!==t&&(U.i(t,"number",GridLayout,"wrappingColumn"),(t>0||isNaN(t))&&(this.Og=t,this.w()))}get cellSize(){return this.Uo}set cellSize(t){U.s(t,Size,GridLayout,"cellSize"),this.Uo.equals(t)||(this.Uo.f(t),this.w())}get spacing(){return this.Wn}set spacing(t){U.s(t,Size,GridLayout,"spacing"),this.Wn.equals(t)||(this.Wn.f(t),this.w())}get alignment(){return this.xi}set alignment(t){this.xi!==t&&(U.j(t,GridAlignment,"GridAlignment"),(t===1||t===0)&&(this.xi=t,this.w()))}get arrangement(){return this.te}set arrangement(t){this.te!==t&&(U.j(t,GridArrangement,"GridArrangement"),(t===10||t===11)&&(this.te=t,this.w()))}get sorting(){return this.Le}set sorting(t){this.Le!==t&&(U.j(t,GridSorting,"GridSorting"),(t===20||t===21||t===22||t===23)&&(this.Le=t,this.w()))}get comparer(){return this.De}set comparer(t){this.De!==t&&(U.C(t,GridLayout,"comparer"),this.De=t,this.w())}static standardComparer(t,i){Debug&&U.s(t,Part,GridLayout,"standardComparer:a"),Debug&&U.s(i,Part,GridLayout,"standardComparer:b");const e=t.text,s=i.text;return e<s?-1:e>s?1:0}static smartComparer(t,i){if(Debug&&U.s(t,Part,GridLayout,"standardComparer:a"),Debug&&U.s(i,Part,GridLayout,"standardComparer:b"),t!==null)if(i!==null){const e=t.text.toLocaleLowerCase(),s=i.text.toLocaleLowerCase(),n=e.split(/([+-]?[.]?\d+(?:\.\d*)?(?:e[+-]?\d+)?)/),o=s.split(/([+-]?[.]?\d+(?:\.\d*)?(?:e[+-]?\d+)?)/);let r=0;for(;r<n.length;r++)if(o[r]!==""&&o[r]!==void 0){const l=parseFloat(n[r]),h=parseFloat(o[r]);if(isNaN(l))if(isNaN(h)){if(n[r].localeCompare(o[r])!==0)return n[r].localeCompare(o[r]);continue}else return 1;else{if(isNaN(h))return-1;if(l-h!==0)return l-h;continue}}else{if(n[r]==="")continue;return 1}return o[r]!==""&&o[r]!==void 0?-1:0}else return 1;else return i!==null?-1:0}static Position=0;static Location=1;static LeftToRight=10;static RightToLeft=11;static Forward=20;static Reverse=21;static Ascending=22;static Descending=23}class PartManager{Eg;gn;qt;Io;Bg;Vg;c;SA;constructor(){this.Eg=new GSet,this.gn=new GSet,this.qt=new GSet,this.Io=new GMap,this.Bg=new GMap,this.Vg=new GMap,this.c=null,this.SA=!1}clear(){this.Eg.clear(),this.gn.clear(),this.qt.clear(),this.Io.clear(),this.Bg.clear(),this.Vg.clear()}qo(t){this.c=t}Na(t){if(t instanceof Node){if(this.Eg.add(t),t instanceof Group){const e=t.containingGroup;e===null?this.diagram.fl.add(t):e.Ua.add(t);const s=t.layout;s!==null&&(s.diagram=this.diagram)}}else t instanceof Link?(this.gn.add(t),t.isAvoiding&&(this.diagram.C0=!0)):t instanceof Adornment||this.qt.add(t);const i=t.data;i!==null&&(t instanceof Adornment||(t instanceof Link?this.oR(i,t):this.Io.set(i,t)))}ue(t){if(t.clearAdornments(),t instanceof Node){if(this.Eg.delete(t),t instanceof Group){const e=t.containingGroup;e===null?this.diagram.fl.delete(t):e.Ua.delete(t);const s=t.layout;s!==null&&(s.diagram=null)}}else t instanceof Link?this.gn.delete(t):t instanceof Adornment||this.qt.delete(t);const i=t.data;i!==null&&(t instanceof Adornment||(t instanceof Link?this.rR(i,t):this.Io.delete(i)))}oR(t,i){this.Bg.set(t,i)}rR(t,i){this.Bg.delete(t)}rebuildParts(){const t=this.diagram;if(t===null)return;const i=t.nodeTemplateMap.iterator;for(;i.next();){const u=i.value,d=i.key;(!u.ze()||u instanceof Group)&&U.n(`Invalid node template in Diagram.nodeTemplateMap: template for "${d}" must be a Node or a simple Part, not a Group or Link: ${u}`)}const e=t.groupTemplateMap.iterator;for(;e.next();){const u=e.value,d=e.key;u instanceof Group||U.n(`Invalid group template in Diagram.groupTemplateMap: template for "${d}" must be a Group, not a normal Node or Link: ${u}`)}const s=t.linkTemplateMap.iterator;for(;s.next();){const u=s.value,d=s.key;u instanceof Link||U.n(`Invalid link template in Diagram.linkTemplateMap: template for "${d}" must be a Link, not a normal Node or simple Part: ${u}`)}const n=U.ct(),o=t.selection.iterator;for(;o.next();){const d=o.value.data;d&&n.push(d)}const r=U.ct(),l=t.highlighteds.iterator;for(;l.next();){const d=l.value.data;d&&r.push(d)}const h=U.ct(),a=this.nodes.iterator;for(;a.next();){const u=a.value;u.data!==null&&(h.push(u.data),h.push(u.location))}const c=this.links.iterator;for(;c.next();){const u=c.value;u.data!==null&&(h.push(u.data),h.push(u.location))}const f=this.parts.iterator;for(;f.next();){const u=f.value;u.data!==null&&(h.push(u.data),h.push(u.location))}this.lR(),this.aC();for(let u=0;u<n.length;u++){const d=this.findPartForData(n[u]);d!==null&&(d.isSelected=!0)}for(let u=0;u<r.length;u++){const d=this.findPartForData(r[u]);d!==null&&(d.isHighlighted=!0)}for(let u=0;u<h.length;u+=2){const d=this.findPartForData(h[u]);d!==null&&(d.location=h[u+1])}U.nt(n),U.nt(r),U.nt(h)}aC(){const t=this.diagram.model;this.xw(t.nodeDataArray)}xw(t,i){const e=this.diagram.model;t.forEach(s=>{e.containsNodeData(s)&&this.hR(s,!1)}),t.forEach(s=>{e.containsNodeData(s)&&this.vS(s)}),i!==!1&&this.diagram.Ib(!1)}hR(t,i){if(t==null||this.diagram.undoManager.isUndoingRedoing||this.Io.has(t))return null;i===void 0&&(i=!0);const e=this.O4(t);return e!==null&&i&&this.vS(t),e}O4(t){if(t==null||this.diagram.undoManager.isUndoingRedoing||this.Io.has(t))return null;const i=this.E4(t),e=this.findTemplateForNodeData(t,i);if(e!==null){e.Ut();const s=e.copy();if(s!==null){const n=this.diagram.Me;return this.diagram.Me=!0,s.hr=i,s.hi=t,this.addsToTemporaryLayer&&(s.Al="Tool"),this.diagram.add(s),s.hi=null,s.data=t,this.diagram.Me=n,s}}return null}insertLink(t,i,e,s){return null}vS(t){}E4(t){return this.diagram.model.getCategoryForNodeData(t)}static aR=!1;static cR=!1;findTemplateForNodeData(t,i){const e=this.diagram,s=e.model,n=s.Dh()&&s.isGroupForData(t);let o=null;return n?(o=e.groupTemplateMap.get(i),o===null&&(o=e.groupTemplateMap.get(""),o===null&&(PartManager.cR||(PartManager.cR=!0,U.et('No Group template found for category "'+i+'"'),U.et("  Using default group template")),o=e.z2))):(o=e.nodeTemplateMap.get(i),o===null&&(o=e.nodeTemplateMap.get(""),o===null&&(PartManager.aR||(PartManager.aR=!0,U.et('No Node template found for category "'+i+'"'),U.et("  Using default node template")),o=e.E2))),o}getLinkCategoryForData(t){return""}setLinkCategoryForData(t,i){}setFromNodeForLink(t,i,e){}setToNodeForLink(t,i,e){}static fR=!1;findLinkTemplateForCategory(t){const i=this.diagram;let e=i.linkTemplateMap.get(t);return e===null&&(e=i.linkTemplateMap.get(""),e===null&&(PartManager.fR||(PartManager.fR=!0,U.et('No Link template found for category "'+t+'"'),U.et("  Using default link template")),e=i.B2)),e}A3(t,i,e){t instanceof Link?(i!==null&&this.rR(i,t),e!==null&&this.oR(e,t)):t instanceof Part&&(i!==null&&this.Io.delete(i),e!==null&&this.Io.set(e,t))}lR(){const t=this.diagram.model;this.kA(t.nodeDataArray)}kA(t){t.forEach(i=>{this.WS(i)})}WS(t){const i=this.findPartForData(t);i!==null&&(this.diagram.rC(i,!1),this.PA(i))}PA(t){}aA(t){}findPartForKey(t){if(t==null)return null;const e=this.diagram.model.findNodeDataForKey(t);return e!==null?this.Io.get(e):null}findNodeForKey(t){if(t==null)return null;const e=this.diagram.model.findNodeDataForKey(t);if(e===null)return null;const s=this.Io.get(e);return s instanceof Node?s:null}findLinkForKey(t){return null}findPartForData(t){if(t===null)return null;let i=this.Io.get(t);return i!==null||(i=this.Bg.get(t)),i}findNodeForData(t){if(t===null)return null;const i=this.Io.get(t);return i instanceof Node?i:null}findLinkForData(t,i){return t===null?null:this.Bg.get(t)}findNodesByExample(...t){const i=new GSet,e=this.Eg.iterator;for(;e.next();){const s=e.value,n=s.data;if(n!==null)for(let o=0;o<arguments.length;o++){const r=arguments[o];if(U.st(r)&&this.MA(n,r)){i.add(s);break}}}return i.iterator}findLinksByExample(...t){const i=new GSet,e=this.gn.iterator;for(;e.next();){const s=e.value,n=s.data;if(n!==null)for(let o=0;o<arguments.length;o++){const r=arguments[o];if(U.st(r)&&this.MA(n,r)){i.add(s);break}}}return i.iterator}MA(t,i){for(const e in i){const s=t[e],n=i[e];if(Array.isArray(n)){if(!Array.isArray(s))return!1;const o=s,r=n;if(o.length<r.length)return!1;for(let l=0;l<o.length;l++){const h=o[l],a=r[l];if(a!==void 0&&!this.uR(h,a))return!1}}else if(!this.uR(s,n))return!1}return!0}uR(t,i){if(U.at(i)){if(!i(t))return!1}else if(i instanceof RegExp){if(!t||!i.test(t.toString()))return!1}else if(U.st(t)&&U.st(i)){if(!this.MA(t,i))return!1}else if(t!==i)return!1;return!0}doModelDataChanged(t){if(t.model===this.diagram.model&&this.diagram.v){this.diagram.v=!1;try{const i=t.change;t.modelChange===""&&t.object!==null&&i===2&&this.bw(t.object,t.propertyName)}finally{this.diagram.v=!0}}}doModelChanged(t){const i=this.diagram;if(!i||t.model!==i.model)return;const e=t.change;if(i.lE(t),!!i.v){i.v=!1;try{const s=t.modelChange;if(s!=="")if(e===2){if(s==="nodeCategory"){const n=t.object;if(n!==null){const o=this.findPartForData(n),r=t.newValue;o!==null&&typeof r=="string"&&(o.category=r)}}else if(s==="nodeDataArray"){const n=t.oldValue;this.kA(n);const o=t.newValue;this.xw(o)}i.isModified=!0}else if(e===3){const n=t.newValue;s==="nodeDataArray"&&U.st(n)&&this.hR(n),i.isModified=!0}else if(e===4){const n=t.oldValue;s==="nodeDataArray"&&U.st(n)&&this.WS(n),i.isModified=!0}else e===1&&(s==="SourceChanged"?t.object!==null?this.bw(t.object,t.propertyName):(this.updateAllRelationshipsFromData(),this.updateAllTargetBindings()):s==="ModelDisplaced"&&this.rebuildParts());else if(e===2){const n=t.propertyName,o=t.object,r=i.model;o===r?(n==="nodeKeyProperty"||n==="nodeCategoryProperty")&&(i.undoManager.isUndoingRedoing||this.rebuildParts()):o!==null&&this.bw(o,n),i.isModified=!0}else(e===3||e===4)&&(this.B4(t,i.model),i.isModified=!0)}finally{i.v=!0}}}updateAllTargetBindings(t){t===void 0&&(t="");let i=this.parts.iterator;for(;i.next();)i.value.updateTargetBindings(t);for(i=this.nodes.iterator;i.next();)i.value.updateTargetBindings(t);for(i=this.links.iterator;i.next();)i.value.updateTargetBindings(t)}updateAllThemeBindings(){let t=this.parts.iterator;for(;t.next();)t.value.Zo();for(t=this.nodes.iterator;t.next();)t.value.Zo();for(t=this.links.iterator;t.next();)t.value.Zo()}updateAllRelationshipsFromData(){const t=this.diagram.model,i=new GSet,e=t.nodeDataArray;for(let o=0;o<e.length;o++){const r=e[o];i.add(r)}const s=[];this.nodes.each(o=>{o.data!==null&&!i.has(o.data)&&s.push(o.data)}),this.parts.each(o=>{o.data!==null&&!i.has(o.data)&&s.push(o.data)}),s.forEach(o=>t.dR(o,!1));for(let o=0;o<e.length;o++){const r=e[o];this.findPartForData(r)===null&&t.gR(r,!1)}this.mR();let n=this.parts.iterator;for(;n.next();)n.value.updateRelationshipsFromData();for(n=this.nodes.iterator;n.next();)n.value.updateRelationshipsFromData();for(n=this.links.iterator;n.next();)n.value.updateRelationshipsFromData()}mR(){}updateRelationshipsFromData(t){}bw(t,i){if(typeof i=="string"){const e=this.findPartForData(t);if(e!==null)e.updateTargetBindings(i);else{const s=this.V4(t);if(s!==null&&s.length>0){for(let o=0;o<s.length;o++)s[o].updateTargetBindings(i);const n=s[0].part;if(n!==null){const o=n.adornments;for(;o.next();)o.value.updateTargetBindings(i)}U.nt(s)}}t===this.diagram.model.modelData&&this.updateAllTargetBindings(i)}}V4(t){let i=null;const e=this.Vg.iterator;for(;e.next();){const s=e.value;for(let n=0;n<s.length;n++){const r=s[n].findItemPanelForData(t);r!==null&&(i===null&&(i=U.ct()),i.push(r))}if(i!==null)break}return i}CA(t){return this.Vg.get(t)}B4(t,i){const e=t.object;if(!Array.isArray(e))return;const s=t.change===3,n=s?t.newParam:t.oldParam,o=s?t.newValue:t.oldValue,r=this.CA(e);if(Array.isArray(r))for(let l=0;l<r.length;l++){const h=r[l];s?h.bS(o,n,!0):h.D3(n)}}nC(t,i){i!==null&&t.On(s=>i.HL(s));const e=t.qh;if(Array.isArray(e)){const s=this.CA(e);if(s===null)this.Vg.set(e,[t]);else{for(let n=0;n<s.length;n++)if(s[n]===t)return;s.push(t)}}}oC(t,i){t.On(s=>i.aE(s));const e=t.qh;if(Array.isArray(e)){const s=this.CA(e);if(s!==null){for(let n=0;n<s.length;n++)if(s[n]===t){s.splice(n,1),s.length===0&&this.Vg.delete(e);return}}}}copyParts(t,i,e){e===void 0&&(e=!1);const s=new GMap;if(Array.isArray(t))for(let n=0;n<t.length;n++)this.jS(t[n],i,s,e);else{const n=t.iterator;for(;n.next();)this.jS(n.value,i,s,e)}if(i!==null){const n=i.model,o=i.q0().dragsLink,r=new GSet,l=new GMap,h=s.iterator;for(;h.next();){const a=h.value;if(a instanceof Link)!o&&(a.fromNode===null||a.toNode===null)&&r.add(a);else if(a instanceof Node&&a.data!==null){if(n.Hx()){const c=a,f=h.key,u=f.findTreeParentNode();if(u!==null){const d=s.get(u);if(d!==null){n.setParentKeyForNodeData(c.data,n.getKeyForNodeData(d.data));const m=i.findLinkForData(c.data),g=f.findTreeParentLink();g!==null&&m!==null&&l.set(g,m)}}}else if(n.pR()){const c=a,f=h.key,u=n.isRelatedKeysPathTo?f.findNodesOutOf():f.findNodesInto();for(;u.next();){const d=u.value,m=s.get(d);if(m!==null){n.addRelatedKeyForNodeData(c.data,m.key);const g=i.partManager.findLinkForData(c.data,m.key),p=this.findLinkForData(f.data,d.key);p!==null&&g!==null&&l.set(p,g)}else n.removeRelatedKeyForNodeData(c.data,d.key)}}}}if(r.count>0&&i.removeParts(r,!1),l.count>0){const a=l.iterator;for(;a.next();){const c=a.key,f=a.value;s.set(c,f)}}}if(i!==null&&this.diagram!==null){const n=i.model,o=n.afterCopyFunction;if(o!==null){const r=new GMap;s.each(h=>{h.key.data!==null&&r.set(h.key.data,h.value.data)});const l=this.diagram.model;o(r,n,l)}}return s}jS(t,i,e,s){if(t===null||s&&!t.canCopy())return null;if(e.has(t))return e.get(t);const n=this.NA(t,i);if(!(n instanceof Part))return null;if(n.isSelected=!1,n.isHighlighted=!1,e.set(t,n),t instanceof Node){const o=t.linksConnected;for(;o.next();){const r=o.value;if(r.fromNode===t){const l=e.get(r);l!==null&&(l.fromNode=n)}if(r.toNode===t){const l=e.get(r);l!==null&&(l.toNode=n)}}if(t instanceof Group&&n instanceof Group){const r=t.memberParts;for(;r.next();){const l=r.value,h=this.jS(l,i,e,s);h instanceof Link||h!==null&&(h.containingGroup=n)}}}else if(t instanceof Link&&n instanceof Link){const o=t.fromNode;if(o!==null){const h=e.get(o);h!==null&&(n.fromNode=h)}const r=t.toNode;if(r!==null){const h=e.get(r);h!==null&&(n.toNode=h)}const l=t.labelNodes;for(;l.next();){const h=l.value,a=this.jS(h,i,e,s);a!==null&&a instanceof Node&&(a.labeledLink=n)}}return n}NA(t,i){let e=null;const s=t.data;if(s!==null&&i!==null){const n=i.model;if(!(t instanceof Link)){const o=n.copyNodeData(s);n.addNodeData(o),e=i.findPartForData(o)}}else if(t.Ut(),e=t.copy(),e!==null){const n=this.diagram;if(i!==null)i.add(e);else if(s!==null&&n!==null&&n.commandHandler!==null&&n.commandHandler.copiesClipboardData){const o=n.model;let r=null;e instanceof Link||(r=o.copyNodeData(s)),e.data=r}}return e}get nodes(){return this.Eg}get links(){return this.gn}get parts(){return this.qt}get diagram(){return this.c}get addsToTemporaryLayer(){return this.SA}set addsToTemporaryLayer(t){this.SA=t}}class GraphLinksPartManager extends PartManager{aC(){const t=this.diagram.model;this.xw(t.nodeDataArray),this.yR(t.linkDataArray)}xw(t){super.xw(t,!1);const i=this.links.iterator;for(;i.next();)i.value.dg();this.diagram.Ib(!1)}yR(t){for(let i=0;i<t.length;i++)this.wR(t[i]);this.diagram.Ib(!1)}wR(t){if(t==null||this.diagram.undoManager.isUndoingRedoing||this.findLinkForData(t))return null;const i=this.getLinkCategoryForData(t),e=this.findLinkTemplateForCategory(i);if(e!==null){e.Ut();const s=e.copy();if(s!==null){const n=this.diagram.Me;this.diagram.Me=!0,s.hr=i,s.hi=t;const o=this.diagram.model,r=o.JS(t,!0);r!==""&&(s.fromPortId=r);const l=o.je(t,!0);if(l!==void 0){const f=this.findNodeForKey(l);f instanceof Node&&(s.fromNode=f)}const h=o.JS(t,!1);h!==""&&(s.toPortId=h);const a=o.je(t,!1);if(a!==void 0){const f=this.findNodeForKey(a);f instanceof Node&&(s.toNode=f)}const c=o.getLabelKeysForLinkData(t);return Array.isArray(c)&&c.forEach(f=>{const u=this.findNodeForKey(f);u!==null&&(u.labeledLink=s)}),this.addsToTemporaryLayer&&(s.Al="Tool"),this.diagram.add(s),s.hi=null,s.data=t,this.diagram.Me=n,s}}return null}lR(){const t=this.diagram.model;this.xR(t.linkDataArray),this.kA(t.nodeDataArray)}xR(t){t.forEach(i=>{this.WS(i)})}getLinkCategoryForData(t){return this.diagram.model.getCategoryForLinkData(t)}setLinkCategoryForData(t,i){return this.diagram.model.setCategoryForLinkData(t,i)}setFromNodeForLink(t,i,e){const s=this.diagram.model,n=i!==null?i.data:null;s.setFromKeyForLinkData(t.data,s.getKeyForNodeData(n))}setToNodeForLink(t,i,e){const s=this.diagram.model,n=i!==null?i.data:null;s.setToKeyForLinkData(t.data,s.getKeyForNodeData(n))}aA(t){this.diagram.model.removeLinkData(t.data)}findPartForKey(t){const i=super.findPartForKey(t);if(i===null){const s=this.diagram.model.findLinkDataForKey(t);if(s!==null)return this.findLinkForData(s)}return i}findLinkForKey(t){if(t==null)return null;const e=this.diagram.model.findLinkDataForKey(t);return e!==null?this.findLinkForData(e):null}doModelChanged(t){if(super.doModelChanged(t),!this.diagram)return;const i=this.diagram;if(t.model!==i.model)return;const e=t.change;if(i.v){i.v=!1;try{const s=t.modelChange;if(s!==""){if(e===2){if(s==="linkFromKey"){const n=t.object,o=this.findLinkForData(n);if(o!==null){const r=t.newValue,l=this.findNodeForKey(r);o.fromNode=l}}else if(s==="linkToKey"){const n=t.object,o=this.findLinkForData(n);if(o!==null){const r=t.newValue,l=this.findNodeForKey(r);o.toNode=l}}else if(s==="linkFromPortId"){const n=t.object,o=this.findLinkForData(n);if(o!==null){const r=t.newValue;typeof r=="string"&&(o.fromPortId=r)}}else if(s==="linkToPortId"){const n=t.object,o=this.findLinkForData(n);if(o!==null){const r=t.newValue;typeof r=="string"&&(o.toPortId=r)}}else if(s==="nodeGroupKey"){const n=t.object,o=this.findPartForData(n);if(o!==null){const r=t.newValue;if(r!==void 0){const l=this.findNodeForKey(r);l instanceof Group?o.containingGroup=l:o.containingGroup=null}else o.containingGroup=null}}else if(s==="linkLabelKeys"){const n=t.object,o=this.findLinkForData(n);if(o!==null){const r=t.oldValue,l=t.newValue;Array.isArray(r)&&r.forEach(h=>{if(l.indexOf(h)>=0)return;const a=this.findNodeForKey(h);a!==null&&(a.labeledLink=null)}),Array.isArray(l)&&l.forEach(h=>{const a=this.findNodeForKey(h);a!==null&&(a.labeledLink=o)})}}else if(s==="linkCategory"){const n=t.object,o=this.findLinkForData(n),r=t.newValue;o!==null&&typeof r=="string"&&(o.category=r)}else if(s==="linkDataArray"){const n=t.oldValue;this.xR(n);const o=t.newValue;this.yR(o)}i.isModified=!0}else if(e===3){const n=t.newValue;if(s==="linkDataArray"&&U.st(n))this.wR(n);else if(s==="linkLabelKeys"&&t.model.isKeyType(n)){const o=t.object,r=this.findLinkForData(o),l=this.findNodeForKey(n);r!==null&&l!==null&&(l.labeledLink=r)}i.isModified=!0}else if(e===4){const n=t.oldValue;if(s==="linkDataArray"&&U.st(n))this.WS(n);else if(s==="linkLabelKeys"&&t.model.isKeyType(n)){const o=this.findNodeForKey(n);o!==null&&(o.labeledLink=null)}i.isModified=!0}}else if(e===2){const n=t.propertyName,o=t.object,r=i.model;o===r&&(n==="linkFromKeyProperty"||n==="linkToKeyProperty"||n==="linkFromPortIdProperty"||n==="linkToPortIdProperty"||n==="linkLabelKeysProperty"||n==="nodeIsGroupProperty"||n==="nodeGroupKeyProperty"||n==="linkCategoryProperty")&&(i.undoManager.isUndoingRedoing||this.rebuildParts()),i.isModified=!0}}finally{i.v=!0}}}mR(){const t=this.diagram.model,i=new Set,e=t.linkDataArray;e.forEach(n=>{i.add(n)});const s=[];this.links.each(n=>{n.data!==null&&!i.has(n.data)&&s.push(n.data)}),s.forEach(n=>{t.bR(n,!1)}),e.forEach(n=>{this.findLinkForData(n)===null&&t.SR(n,!1)})}updateRelationshipsFromData(t){const i=t.data;if(i===null)return;const e=t.diagram;if(e===null)return;const s=e.model;if(t instanceof Link){let n=s.je(i,!0),o=e.findNodeForKey(n);t.fromNode=o,n=s.je(i,!1),o=e.findNodeForKey(n),t.toNode=o;const r=s.getLabelKeysForLinkData(i);if(r.length>0||t.labelNodes.count>0){if(r.length===1&&t.labelNodes.count===1){const f=r[0],u=t.labelNodes.first();if(u!==null&&s.getKeyForNodeData(u.data)===f)return}const l=new GSet().addAll(r),h=new GSet;t.labelNodes.each(f=>{if(f.data!==null){const u=s.getKeyForNodeData(f.data);u!==void 0&&h.add(u)}});const a=h.copy();a.removeAll(l);const c=l.copy();if(c.removeAll(h),a.count>0||c.count>0){const f=t;a.each(u=>{const d=e.findNodeForKey(u);d!==null&&d.labeledLink===f&&(d.labeledLink=null)}),c.each(u=>{const d=e.findNodeForKey(u);d!==null&&d.labeledLink!==f&&(d.labeledLink=f)})}}}else if(!(t instanceof Adornment)){const n=s.getGroupKeyForNodeData(i),o=e.findPartForKey(n);(o===null||o instanceof Group)&&(t.containingGroup=o)}}vS(t){const i=this.diagram.model,e=i.getKeyForNodeData(t);if(e!==void 0){const s=i.Sw(e),n=this.findPartForData(t);if(s!==null&&n!==null){const r=s.iterator;for(;r.next();){const l=r.value;if(i.containsNodeData(l)){if(n instanceof Group&&i.getGroupKeyForNodeData(l)===e){const h=this.findPartForData(l);h!==null&&(h.containingGroup=n)}}else{const h=this.findLinkForData(l);if(h!==null&&n instanceof Node){i.je(l,!0)===e&&(h.fromNode=n),i.je(l,!1)===e&&(h.toNode=n);const a=i.getLabelKeysForLinkData(l);Array.isArray(a)&&a.some(c=>c===e?(n.labeledLink=h,!0):!1)}}}i.pn(e)}const o=i.getGroupKeyForNodeData(t);if(o!==void 0){const r=this.findNodeForKey(o);n!==null&&r instanceof Group&&(n.containingGroup=r)}}}PA(t){const i=this.diagram.model;if(t instanceof Node){const e=i.getKeyForNodeData(t.data);if(e!==void 0){const s=t.linksConnected;for(;s.next();){const n=s.value;i.yn(e,n.data)}if(t.isLinkLabel){const n=t.labeledLink;n!==null&&i.yn(e,n.data)}if(t instanceof Group){const n=t.memberParts;for(;n.next();){const r=n.value.data;i.containsNodeData(r)&&i.yn(e,r)}}}}}NA(t,i){let e=super.NA(t,i);if(t instanceof Link){const s=t.data;if(s!==null&&i!==null){const n=i.model,o=n.copyLinkData(s);n.addLinkData(o),e=i.findLinkForData(o)}else if(e!==null){const n=this.diagram;if(s!==null&&n!==null&&n.commandHandler!==null&&n.commandHandler.copiesClipboardData){const r=n.model.copyLinkData(s);e.data=r}}}return e}insertLink(t,i,e,s){const n=this.diagram,o=n.model,r=n.toolManager.findTool("Linking");let l="";t!==null&&(i===null&&(i=t),l=i.portId,l===null&&(l=""));let h="";e!==null&&(s===null&&(s=e),h=s.portId,h===null&&(h=""));const a=r.archetypeLinkData;if(a instanceof Link){a.Ut();const c=a.copy();if(c!==null){c.fromNode=t,c.fromPortId=l,c.toNode=e,c.toPortId=h,n.add(c);const f=r.archetypeLabelNodeData;if(f instanceof Node){f.Ut();const u=f.copy();u!==null&&(u.labeledLink=c,n.add(u))}return c}}else if(a!==null){const c=o.copyLinkData(a);if(U.st(c)){t!==null&&o.zg(c,o.getKeyForNodeData(t.data),!0),o.Xg(c,l,!0),e!==null&&o.zg(c,o.getKeyForNodeData(e.data),!1),o.Xg(c,h,!1),o.addLinkData(c);const f=r.archetypeLabelNodeData;if(f!==null&&!(f instanceof Node)){const d=o.copyNodeData(f);o.addNodeData(d);const m=o.getKeyForNodeData(d);m!==void 0&&o.addLabelKeyForLinkData(c,m)}return n.findLinkForData(c)}}return null}}class TreePartManager extends PartManager{Qh=null;$S(t,i){if(t===null||i===null||i.findTreeParentLink()!==null)return;const e=this.diagram.toolManager.findTool("Linking");let s=t,n=i;if(this.diagram.isTreePathToChildren){if(e!==null&&e.Qu(s,n,null,!0))return}else if(s=i,n=t,e!==null&&e.Qu(s,n,null,!0))return;const o=this.getLinkCategoryForData(i.data),r=this.findLinkTemplateForCategory(o);if(r!==null){r.Ut();const l=r.copy();if(l!==null){const h=this.diagram.Me;this.diagram.Me=!0,l.hr=o,l.hi=i.data,l.fromNode=s,l.toNode=n,this.diagram.add(l),l.hi=null,l.data=i.data,this.diagram.Me=h}}}getLinkCategoryForData(t){return this.diagram.model.getParentLinkCategoryForNodeData(t)}setLinkCategoryForData(t,i){this.diagram.model.setParentLinkCategoryForNodeData(t,i)}setFromNodeForLink(t,i,e){const s=this.diagram.model;e===void 0&&(e=null);const n=i!==null?i.data:null;if(this.diagram.isTreePathToChildren)s.setParentKeyForNodeData(t.data,s.getKeyForNodeData(n));else{const o=this.Qh;this.Qh=t,e!==null&&s.setParentKeyForNodeData(e.data,void 0);const r=t.toNode!==null?t.toNode.data:null;s.setParentKeyForNodeData(n,s.getKeyForNodeData(r)),this.Qh=o}}setToNodeForLink(t,i,e){const s=this.diagram.model;e===void 0&&(e=null);const n=i!==null?i.data:null;if(this.diagram.isTreePathToChildren){const o=this.Qh;this.Qh=t,e!==null&&s.setParentKeyForNodeData(e.data,void 0);const r=t.fromNode!==null?t.fromNode.data:null;s.setParentKeyForNodeData(n,s.getKeyForNodeData(r)),this.Qh=o}else s.setParentKeyForNodeData(t.data,s.getKeyForNodeData(n))}aA(t){this.diagram.model.setParentKeyForNodeData(t.data,void 0)}findLinkForKey(t){if(t==null)return null;const e=this.diagram.model.findNodeDataForKey(t);return e!==null?this.findLinkForData(e):null}doModelChanged(t){if(super.doModelChanged(t),!this.diagram)return;const i=this.diagram;if(t.model!==i.model)return;const e=t.change;if(i.v){i.v=!1;try{const s=t.modelChange;if(s!==""){if(e===2){if(s==="nodeParentKey"){const n=t.object,o=n?this.findNodeForData(n):null,r=t.newValue,l=this.findNodeForKey(r);if(n&&this.Qh!==null)l!==null&&(this.Qh.data=n,this.Qh.category=this.getLinkCategoryForData(n));else if(o!==null){const h=o.findTreeParentLink();h!==null?l===null?i.remove(h):i.isTreePathToChildren?h.fromNode=l:h.toNode=l:this.$S(l,o)}}else if(s==="parentLinkCategory"){const n=t.object,o=n?this.findNodeForData(n):null,r=t.newValue;if(o!==null&&typeof r=="string"){const l=o.findTreeParentLink();l!==null&&(l.category=r)}}i.isModified=!0}}else e===2&&(t.object===i.model&&t.propertyName==="nodeParentKeyProperty"&&(i.undoManager.isUndoingRedoing||this.rebuildParts()),i.isModified=!0)}finally{i.v=!0}}}updateRelationshipsFromData(t){const i=t.data;if(i===null)return;const e=t.diagram;if(e===null)return;const s=e.model;if(t instanceof Node){const n=s.getParentKeyForNodeData(i),o=e.findNodeForKey(n),r=t.findTreeParentNode();if(o!==r){const l=t.findTreeParentLink();o!==null?l!==null?e.isTreePathToChildren?l.fromNode=o:l.toNode=o:this.$S(o,t):l!==null&&e.rC(l,!1)}}}bw(t,i){if(super.bw(t,i),typeof i=="string"&&this.findPartForData(t)!==null){const s=this.findLinkForData(t);s!==null&&s.updateTargetBindings(i)}}vS(t){const i=this.diagram.model,e=i.getKeyForNodeData(t);if(e!==void 0){const s=i.Sw(e),n=this.findPartForData(t);if(s!==null&&n!==null){const r=s.iterator;for(;r.next();){const l=r.value;if(i.containsNodeData(l)&&n instanceof Node&&i.getParentKeyForNodeData(l)===e){const h=this.findNodeForData(l);this.$S(n,h)}}i.pn(e)}const o=i.getParentKeyForNodeData(t);if(o!==void 0&&n instanceof Node){const r=this.findNodeForKey(o);this.$S(r,n)}}}PA(t){const i=this.diagram.model;if(t instanceof Node){const e=i.getKeyForNodeData(t.data),s=this.findLinkForData(t.data);if(s!==null){s.isSelected=!1,s.isHighlighted=!1;const r=s.layer;if(r!==null){const l=r.ue(-1,s,!1);l>=0&&this.diagram.raiseChangedEvent(4,"parts",r,s,null,l,null);const h=s.layerChanged;h!==null&&h(s,r,null)}}const n=this.diagram.isTreePathToChildren,o=t.linksConnected;for(;o.next();){const r=o.value,l=n?r.toNode:r.fromNode;if(l!==null){const h=l.data;i.containsNodeData(h)&&i.yn(e,h)}}}}insertLink(t,i,e,s){const n=this.diagram.model;let o=t,r=e;if(this.diagram.isTreePathToChildren||(o=e,r=t),o!==null&&r!==null){const l=o.data,h=r.data;return n.setParentKeyForNodeData(h,n.getKeyForNodeData(l)),r.findTreeParentLink()}return null}}var BindingMode=(w=>(w[w.OneWay=1]="OneWay",w[w.TwoWay=2]="TwoWay",w))(BindingMode||{});class Binding{l;AA;kc;lu;_h;hu;au;cu;ZS;Ve;tg;Wf;constructor(t,i,e,s){GSet.se(this),t===void 0?t="":U.i(t,"string",Binding,"constructor:targetprop"),i===void 0?i=t:U.i(i,"string",Binding,"constructor:sourceprop"),e===void 0?e=null:e!==null&&U.C(e,Binding,"constructor:conv"),this.AA=-1,this.Ve=null,this.kc=t,this.tg=0,this.Wf=0,this.lu=null,this._h=i,this.hu=e,s===void 0?(this.au=1,this.cu=null):(this.au=2,this.cu=s),this.ZS=new GSet,this.l=2}copy(){const t=new this.constructor;return this.cloneProtected(t),t}cloneProtected(t){t.kc=this.kc,t.tg=this.tg,t.Wf=this.Wf,t.lu=this.lu,t._h=this._h,t.hu=this.hu,t.au=this.au,t.cu=this.cu,t.l=this.l&-2}static OneWay=1;static TwoWay=2;static parseEnum(t,i){return U.C(t,Binding,"parseEnum:ctor"),e=>{let s=parseInt(e);return isNaN(s)&&(s=U.fa(t,e),s===null)?i:s}}yi(t){t in BindingMode?this.mode=t:U.Pr(this,t)}static toString(t){return U.toString(t)}toString(){return"Binding("+this.targetProperty+":"+this.sourceProperty+(this.targetId!==-1?" "+this.targetId:"")+" "+BindingMode[this.mode]+")"}S(){return this.l=this.l|1,this}get targetId(){return this.AA}set targetId(t){this.p&&U.F(this),this.AA=t}get targetProperty(){return this.kc}set targetProperty(t){this.p&&U.F(this),U.i(t,"string",Binding,"targetProperty"),this.kc=t}get sourceProperty(){return this._h}set sourceProperty(t){this.p&&U.F(this),U.i(t,"string",Binding,"sourceProperty"),this._h=t}get p(){return(this.l&1)!==0}get isToData(){return(this.l&2)!==0}get isToObject(){return(this.l&4)!==0}get isToModel(){return(this.l&8)!==0}get isToTheme(){return(this.l&16)!==0}get TA(){return this.isToTheme&&!(this.isToData||this.isToObject||this.isToModel)}Xd(){return!1}get sourceName(){return this.lu}set sourceName(t){this.p&&U.F(this),t!==null&&U.i(t,"string",Binding,"sourceName"),this.lu=t,t!==null?this.l=this.l&-3|4:this.l=this.l|2}get converter(){return this.hu}set converter(t){this.p&&U.F(this),t!==null&&U.C(t,Binding,"converter"),this.hu=t}get backConverter(){return this.cu}set backConverter(t){this.p&&U.F(this),t!==null&&U.C(t,Binding,"backConverter"),this.cu=t}get mode(){return this.au}set mode(t){this.p&&U.F(this),this.isToTheme&&t===2&&U.n("Theme Bindings cannot be TwoWay."),U.j(t,BindingMode,"BindingMode"),this.au=t}makeTwoWay(t){return this.isToTheme&&U.n("Theme Bindings cannot be TwoWay."),this.mode=2,t&&(U.C(t,Binding,"makeTwoWay"),this.backConverter=t),this}ofObject(t){return this.p&&U.F(this),t===void 0&&(t=""),Debug&&U.i(t,"string",Binding,"ofObject:srcname"),this.sourceName=t,this}ofModel(){return this.p&&U.F(this),this.l=this.l&-3&-5|8,this.lu=null,this}FD(t,i){const e=this.sourceName;let s=null;return e===null||e===""?s=t:e==="/"?s=i.part:e==="."?s=i:e===".."?s=i.panel:s=t.findObject(e),s}check(t){const i=this.kc,e=this._h,s=this.hu;(this.Xd()&&s===null&&this.ta===null&&i===""||s===null&&i==="")&&U.et("Binding error: target property is the empty string: "+this.toString()),this.Xd()&&this.TA&&e===""&&s===null&&this.ta===null&&U.et("Binding error: theme bindings require a source property when not using a converter: "+this.toString()),t&&typeof i=="string"&&(!U.at(["setAttribute"])&&i.length>0&&i[0]!=="_"&&!U.fx(t,i)?U.et("Binding error: undefined target property: "+i+" on "+t.toString()):i==="name"&&t instanceof GraphObject&&U.et("Binding error: cannot modify GraphObject.name on "+t.toString()))}updateTarget(t,i,e,s){const n=this._h;if(e!==void 0&&n!==""&&n!==e||this.isToTheme&&t.diagram===null)return;const o=this.kc,r=this.hu;let l=i;if(n!==""&&!this.TA&&(l=Model.Rt(i,n)),l!==void 0)if(r===null){if(o!==""){if(this.Xd()){const h=t.diagram?.themeManager;if(l=this.kR(h,l,t,o),l===void 0)return}s?s.ft(t,o,l):(i instanceof GraphObject||i instanceof RowColumnDefinition)&&Model.ft(t,o,l)}}else try{if(o!==""){let h=r(l,t);if(Debug&&h===void 0&&U.et('Binding warning: conversion function returned undefined when setting target property "'+o+'" on '+t.toString()+", function is: "+r),this.Xd()){const a=t.diagram?.themeManager;if(h=this.kR(a,h,t,o),h===void 0)return}s?s.ft(t,o,h):(i instanceof GraphObject||i instanceof RowColumnDefinition)&&Model.ft(t,o,h)}else r(l,t)}catch(h){Debug&&U.et("Binding error: "+h.toString()+' setting target property "'+o+'" on '+t.toString()+" with conversion function: "+r)}}updateSource(t,i,e,s){if(this.au!==2)return;const n=this.kc;if(e!==void 0&&n!==e)return;const o=this._h,r=this.cu,l=s!==null?s.diagram:null,h=l!==null?l.model:null;let a=t;if(n!==""&&(a=Model.Rt(t,n)),a!==void 0&&!this.ZS.has(t))try{if(this.ZS.add(t),r===null){if(o!=="")h!==null?(Debug&&h.nodeKeyProperty===o&&h.containsNodeData(i)&&U.et("Binding error: cannot have TwoWay Binding on node data key property: "+this.toString()),h.set(i,o,a)):(i instanceof GraphObject||i instanceof RowColumnDefinition)&&(i[o]=a);else if(h!==null&&s!==null&&s.itemIndex>=0&&s.panel!==null&&Array.isArray(s.panel.itemArray)){const c=s.itemIndex,f=s.panel.itemArray;h.removeArrayItem(f,c),h.insertArrayItem(f,c,a)}}else try{if(o!==""){const c=r(a,i,h);h!==null?(Debug&&(h.nodeKeyProperty===o&&h.containsNodeData(i)&&U.et("Binding error: cannot have TwoWay Binding on node data key property: "+this.toString()),c===void 0&&U.et(`Binding warning: conversion function returned undefined when setting source property "${o}" on ${i.toString()}, function is: ${r}`)),h.set(i,o,c)):(i instanceof GraphObject||i instanceof RowColumnDefinition)&&(i[o]=c)}else{const c=r(a,i,h);if(c!==void 0&&h!==null&&s!==null&&s.itemIndex>=0&&s.panel!==null&&Array.isArray(s.panel.itemArray)){const f=s.itemIndex,u=s.panel.itemArray;h.removeArrayItem(u,f),h.insertArrayItem(u,f,c)}}}catch(c){Debug&&U.et("Binding error: "+c.toString()+' setting source property "'+o+'" on '+i.toString()+" with conversion function: "+r)}}finally{this.ZS.delete(t)}}}class ThemeBinding extends Binding{kw;ta;Pc;constructor(t,i,e,s,n){super(t,i,s),e==null&&(e=""),n===void 0&&(n=null),this.kw=e,this.ta=n,this.Pc=null,this.l=16}cloneProtected(t){super.cloneProtected(t),t.kw=this.kw,t.ta=this.ta,t.Pc=this.Pc}Xd(){return!0}get themeSource(){return this.kw}set themeSource(t){this.p&&U.F(this),t!==null&&U.i(t,"string",ThemeBinding,"themeSource"),this.kw=t,this.Pc=null,t!==null?this.l=this.l|16:this.l=this.l&-17}get themeConverter(){return this.ta}set themeConverter(t){this.p&&U.F(this),t!==null&&U.C(t,ThemeBinding,"themeConverter"),this.ta=t}ofData(){return this.p&&U.F(this),this.l=this.l|2,this.lu=null,this}kR(t,i,e,s){if(!t||(this.TA&&(i=this._h),!i&&i!==0))return;let n=this.themeSource;this.Pc!==null?n=this.Pc:typeof n=="string"&&n.includes(".")&&(this.Pc=n.split("."),n=this.Pc);let o=t.findValue(i,n,s);if(o===void 0&&U.et(`Theme warning: ${i} could not be found when setting target property ${s}.`),t.readsCssVariables&&typeof o=="string"&&o.startsWith("var(")){const r=o.match(this.z4);r&&(o=getComputedStyle(root.document.documentElement).getPropertyValue(r[1]))}return U.at(this.ta)&&(o=this.ta(o,e)),o}z4=/var\((.*)\)/}class Model{Nt;Yg;jo;LA;Fe;Ti;ia;fu;uu;Kg;Ug;Gg;qg;Pw;Mc;yr;Mw;Wo;QS;constructor(t,i){if(GSet.se(this),this.Nt="",this.Yg="",this.jo=!1,this.LA={},this.Fe=[],this.Ti=new GMap,this.ia="key",this.fu=null,this.uu=null,this.Kg=!1,this.Ug=!1,this.Gg=!1,this.qg=null,this.Pw=100,this.Mc="category",this.yr=new GMap,this.Mw=[],this.Wo=!1,this.QS=null,this.undoManager=new UndoManager,t!==void 0&&(Array.isArray(t)?this.nodeDataArray=t:i=t),i){Object.assign(this,i);const e=i.Changed;e&&(delete this.Changed,this.addChangedListener(e))}}cloneProtected(t){t.Nt=this.Nt,t.Yg=this.Yg,t.jo=this.jo,t.ia=this.ia,t.fu=this.fu,t.uu=this.uu,t.Kg=this.Kg,t.Ug=this.Ug,t.Gg=this.Gg,t.qg=this.qg,t.Pw=this.Pw,t.Mc=this.Mc}copy(){const t=new this.constructor;return this.cloneProtected(t),t}clear(){this.Fe=[],this.Ti.clear(),this.yr.clear(),this.undoManager.clear()}toString(t){if(t===void 0&&(t=0),t>1)return this.toJson();{let i=(this.name!==""?this.name:"")+" Model";if(t>0){i+=`
 node data:`;const e=this.nodeDataArray,s=e.length;for(let n=0;n<s;n++){const o=e[n];i+=" "+this.getKeyForNodeData(o)+":"+U.toString(o)}}return i}}toIncrementalData(t){U.s(t,ChangedEvent,Model,"toIncrementalData:e"),t.change!==1&&U.n("Model.toIncrementalData argument is not a Transaction ChangedEvent:"+t.toString());const i=t.object;if(!t.isTransactionFinished||!(i instanceof Transaction))return null;const e=this.PR(i);return this.DA(i,t.propertyName==="FinishedUndo",e)}DA(t,i,e){const s=this;let n=!1;const o=new GSet,r=new GSet,l=new GSet;t.changes.each(u=>{if(u.model===s){if(u.modelChange==="nodeDataArray")u.change===3?o.add(u.newValue):u.change===4&&l.add(u.oldValue);else if(s.containsNodeData(u.object))u.object!==null&&r.add(u.object);else if(u.change===2&&(s.modelData===u.object||u.propertyName==="modelData"))n=!0;else if(u.object!==null)if(e.has(u.object)){const d=e.get(u.object);d&&d.each(m=>{s.containsNodeData(m)&&r.add(m)})}else{if(u.object instanceof Model||s.cc()&&s.containsLinkData(u.object))return;s.MR(u.object).each(m=>{r.add(m)})}}});const h=new GSet;o.each(u=>{const d=s.getKeyForNodeData(u);d!==void 0&&h.add(d),i||r.add(u)});const a=new GSet;l.each(u=>{const d=s.getKeyForNodeData(u);d!==void 0&&a.add(d),i&&r.add(u)});const c=s.cloneDeep(r.toArray());let f=null;return n&&(f===null&&(f={}),f.modelData=this.cloneDeep(this.modelData)),h.count>0&&(f===null&&(f={}),i?f.removedNodeKeys=h.toArray():f.insertedNodeKeys=h.toArray()),c.length>0&&(f===null&&(f={}),f.modifiedNodeData=c),a.count>0&&(f===null&&(f={}),i?f.insertedNodeKeys=a.toArray():f.removedNodeKeys=a.toArray()),f}cloneDeep(t){return this.Hg(t,!0)}Hg(t,i,e,s){if(!U.st(t))return t;e||(e=new GMap);const n=e.get(t);if(n)return n;let o;if(Array.isArray(t)){o=[],e.set(t,o);for(let r=0;r<t.length;r++){const l=t[r];o.push(this.Hg(l,!1,e,s))}}else if(t instanceof Point||t instanceof Size||t instanceof Rect||t instanceof Margin||t instanceof Spot)o=t.copy(),e.set(t,o);else{if(t instanceof Brush||t instanceof Geometry)return t;if(t instanceof List)o=new List().addAll(this.Hg(t.toArray(),!1,e,s)),e.set(t,o);else if(t instanceof GSet)o=new GSet().addAll(this.Hg(t.toArray(),!1,e,s)),e.set(t,o);else if(t instanceof GMap)o=new GMap().addAll(this.Hg(t.toArray(),!1,e,s)),e.set(t,o);else if(t instanceof Date)o=new Date(t),e.set(t,o);else if(t instanceof RegExp)o=new RegExp(t),e.set(t,o),o.lastIndex=t.lastIndex;else if(Model.FA(null,"",t))o=t;else if(U.at(t.copy))o=t.copy(),e.set(t,o);else{o={},e.set(t,o);for(const r in t){if(r==="__gohashid")continue;const l=t[r];o[r]=this.Hg(l,!1,e,s)}}}return o}quote(t){return JSON.stringify(t).replace(/[\u007F-\uFFFF]/g,e=>{const s="0000"+e.charCodeAt(0).toString(16);return"\\u"+s.substring(s.length-4)})}vg(){let t="";return this.name!==""&&(t+=`,
  "name": `+this.quote(this.name)),this.dataFormat!==""&&(t+=`,
  "dataFormat": `+this.quote(this.dataFormat)),this.isReadOnly&&(t+=`,
  "isReadOnly": `+this.isReadOnly),this.nodeKeyProperty!=="key"&&typeof this.nodeKeyProperty=="string"&&(t+=`,
  "nodeKeyProperty": `+this.quote(this.nodeKeyProperty)),this.copiesArrays&&(t+=`,
  "copiesArrays": true`),this.copiesArrayObjects&&(t+=`,
  "copiesArrayObjects": true`),this.copiesKey&&(t+=`,
  "copiesKey": true`),this.pointsDigits!==100&&(t+=`,
  "pointsDigits": `+this.pointsDigits.toString()),this.nodeCategoryProperty!=="category"&&typeof this.nodeCategoryProperty=="string"&&(t+=`,
  "nodeCategoryProperty": `+this.quote(this.nodeCategoryProperty)),t}Cw(t){t.name&&(this.name=t.name),t.dataFormat&&(this.dataFormat=t.dataFormat),t.isReadOnly&&(this.isReadOnly=!0),t.nodeKeyProperty&&(this.nodeKeyProperty=t.nodeKeyProperty),t.copiesArrays&&(this.copiesArrays=!0),t.copiesArrayObjects&&(this.copiesArrayObjects=!0),t.copiesKey!==void 0&&(this.copiesKey=t.copiesKey),t.pointsDigits!==void 0&&(this.pointsDigits=parseInt(t.pointsDigits)),t.nodeCategoryProperty&&(this.nodeCategoryProperty=t.nodeCategoryProperty)}CR(){const t=this.modelData;return`,
  "modelData": `+this.NR(t)}AR(t){const i=t.modelData;U.st(i)&&(this.replaceJsonObjects(i),this.modelData=i)}RA(){const t=this.modelData;let i=!1;for(const s in t)if(!this._S(t,s,t[s])){i=!0;break}let e="";return i&&(e=this.CR()),e+`,
  "nodeDataArray": `+this.ea(this.nodeDataArray,!0)}IA(t){this.AR(t);const i=t.nodeDataArray;Array.isArray(i)&&(this.replaceJsonObjects(i),this.nodeDataArray=i)}OA(t,i,e){if(t===i)return!0;if(typeof t!=typeof i||U.at(t)||U.at(i))return!1;if(Array.isArray(t)&&Array.isArray(i)){if(e.get(t)===i)return!0;if(e.set(t,i),t.length!==i.length)return!1;for(let s=0;s<t.length;s++)if(!this.OA(t[s],i[s],e))return!1;return!0}else if(U.st(t)&&U.st(i)){if(e.get(t)===i)return!0;e.set(t,i);for(const s in t){const n=t[s];if(this._S(t,s,n))continue;const o=i[s];if(o===void 0||!this.OA(n,o,e))return!1}for(const s in i){const n=i[s];if(this._S(i,s,n))continue;const o=t[s];if(o===void 0||!this.OA(o,n,e))return!1}return!0}return!1}static TR=`,
  "insertedNodeKeys": `;static X4=`,
  "modifiedNodeData": `;static LR=`,
  "removedNodeKeys": `;PR(t){let i=new GMap;const e=(s,n)=>{const o=n.part;if(!o)return;const r=o.data;if(s===r)return;let l=i.get(s);l===null?(l=new GSet,l.add(r),i.set(s,l)):l.add(r)};return t.changes.each(s=>{if(s.diagram!==null){const n=s.change;if(n===2){if(s.object!==null){const o=s.object.panel;if(o){const r=o.data;r&&e(r,o)}}}else if(n===3||n===4){const o=s.object,r=o.itemArray;r&&e(r,o)}}}),i}MR(t){const i=new GSet;for(let e=0;e<this.nodeDataArray.length;e++){const s=this.nodeDataArray[e];this.tk(t,s,s,i)}return i}tk(t,i,e,s){if(Array.isArray(i))for(let n=0;n<i.length;n++){const o=i[n];if(o===t)return s.add(e),!0;if(this.tk(t,o,e,s))return!0}else if(U.st(i)&&Object.getPrototypeOf(i)===Object.prototype)for(const n in i){const o=i[n];if(o===t)return s.add(e),!0;if(this.tk(t,o,e,s))return!0}return!1}EA(t,i,e){const s=this;let n=!1;const o=new GSet,r=new GSet,l=new GSet;t.changes.each(f=>{if(f.model===s){if(f.modelChange==="nodeDataArray")f.change===3?o.add(f.newValue):f.change===4&&l.add(f.oldValue);else if(s.containsNodeData(f.object))f.object!==null&&r.add(f.object);else if(f.change===2&&(s.modelData===f.object||f.propertyName==="modelData"))n=!0;else if(f.object!==null)if(e.has(f.object)){const u=e.get(f.object);u&&u.each(d=>{s.containsNodeData(d)&&r.add(d)})}else{if(f.object instanceof Model||s.cc()&&s.containsLinkData(f.object))return;s.MR(f.object).each(d=>{r.add(d)})}}});const h=new GSet;o.each(f=>{const u=s.getKeyForNodeData(f);u!==void 0&&h.add(u),i||r.add(f)});const a=new GSet;l.each(f=>{const u=s.getKeyForNodeData(f);u!==void 0&&a.add(u),i&&r.add(f)});let c="";return n&&(c+=this.CR()),h.count>0&&(c+=(i?Model.LR:Model.TR)+this.ea(h.toArray(),!0)),r.count>0&&(c+=Model.X4+this.ea(r.toArray(),!0)),a.count>0&&(c+=(i?Model.TR:Model.LR)+this.ea(a.toArray(),!0)),c}Nw(t){(t.name!==void 0&&t.name!==this.name||t.dataFormat!==void 0&&t.dataFormat!==this.dataFormat||t.isReadOnly!==void 0&&t.isReadOnly!==this.isReadOnly||t.nodeKeyProperty!==void 0&&t.nodeKeyProperty!==this.nodeKeyProperty||t.copiesArrays!==void 0&&t.copiesArrays!==this.copiesArrays||t.copiesArrayObjects!==void 0&&t.copiesArrayObjects!==this.copiesArrayObjects||t.copiesKey!==void 0&&t.copiesKey!==this.copiesKey||t.nodeCategoryProperty!==void 0&&t.nodeCategoryProperty!==this.nodeCategoryProperty)&&U.n("applyIncrementalJson cannot change Model properties"),this.AR(t);const i=t.insertedNodeKeys,e=t.modifiedNodeData,s=new GMap;if(Array.isArray(e))for(let o=0;o<e.length;o++){const r=e[o],l=this.getKeyForNodeData(r);l!=null&&s.set(l,r)}if(Array.isArray(i)){const o=i.length;for(let r=0;r<o;r++){const l=i[r];let h=this.findNodeDataForKey(l);if(h===null){const a=s.get(l);h=a||this.copyNodeData({}),h!==null&&(this.setKeyForNodeData(h,l),this.addNodeData(h))}}}if(Array.isArray(e)){const o=e.length;for(let r=0;r<o;r++){const l=e[r],h=this.getKeyForNodeData(l),a=this.findNodeDataForKey(h);if(a!==null){for(const c in l)c==="__gohashid"||c===this.nodeKeyProperty||(this.OP()||this.pR())&&c===this.nodeIsGroupProperty||this.set(a,c,l[c]);this.Wg(l,a)}}}const n=t.removedNodeKeys;if(Array.isArray(n)){const o=n.length;for(let r=0;r<o;r++){const l=n[r],h=this.findNodeDataForKey(l);h!==null&&this.removeNodeData(h)}}}toIncrementalJson(t,i){U.s(t,ChangedEvent,Model,"toIncrementalJson:e"),t.change!==1&&U.n("Model.toIncrementalJson argument is not a Transaction ChangedEvent:"+t.toString());const e=t.object;if(!t.isTransactionFinished||!(e instanceof Transaction))return'{ "incremental": 0 }';i===void 0&&(i=U.to(this));const s=this.PR(e),n=this.EA(e,t.propertyName==="FinishedUndo",s);return'{ "class": '+this.quote(i)+', "incremental": 1'+this.vg()+n+"}"}toIncrementalJSON(t,i){return this.toIncrementalJson(t,i)}toJson(t){return t===void 0&&(t=U.to(this)),'{ "class": '+this.quote(t)+this.vg()+this.RA()+"}"}toJSON(t){return this.toJson(t)}applyIncrementalJson(t){let i=null;if(typeof t=="string")try{i=root.JSON.parse(t)}catch(s){Debug&&U.et("JSON.parse error: "+s.toString())}else U.st(t)?i=t:U.n("Unable to modify a Model from: "+t);const e=i.incremental;typeof e!="number"&&U.n("Unable to apply non-incremental changes to Model: "+t),e!==0&&(this.startTransaction("applyIncrementalJson"),this.Nw(i),this.commitTransaction("applyIncrementalJson"))}applyIncrementalJSON(t){return this.applyIncrementalJson(t)}static fromJson(t,i){i===void 0&&(i=null),i!==null&&U.s(i,Model,Model,"fromJson:model");let e=null;if(typeof t=="string")try{e=root.JSON.parse(t)}catch(s){Debug&&U.et("JSON.parse error: "+s.toString())}else U.st(t)?e=t:U.n("Unable to construct a Model from: "+t);if(i===null){const s=Model.Y4(e);s===null||s instanceof Model?i=s:U.n("Unable to construct a Model of declared class: "+e.class)}return i===null&&(i=Model.DR()),i.Cw(e),i.IA(e),i}static fromJSON(t,i){return this.fromJson(t,i)}static DR(){return Debug&&U.n("Unable to construct a Model. Provided JSON requires GraphLinksModel, which is not loaded."),new Model}static Y4(t){let i=null,e=t.class;if(typeof e=="string")try{let s=null;e.indexOf("go.")===0?s=Model.BA(e.substring(3)):(s=Model.BA(e),s===null&&(s=root[e])),U.at(s)&&(i=new s)}catch{}return i}replaceJsonObjects(t){if(Array.isArray(t)){const i=t.length;for(let e=0;e<i;e++){const s=t[e];U.st(s)&&this.FR(t,e,this.replaceJsonObjects(s))}}else if(U.st(t)){for(const i in t){const e=t[i];if(U.st(e)){const s=this.replaceJsonObjects(e);t[i]=s,this.replaceJsonPropertyValue(t,i,s)}}return this.K4(t)}return t}replaceJsonPropertyValue(t,i,e){if(i==="points"&&Array.isArray(e)){let s=e.length%2===0;for(let n=0;n<e.length;n++)if(typeof e[n]!="number"){s=!1;break}if(s){const n=new List;for(let o=0;o<e.length/2;o++)n.add(new Point(e[o*2],e[o*2+1]));t[i]=n}}}writeJsonValue(t){return t===void 0?"undefined":t===null?"null":t===!0?"true":t===!1?"false":typeof t=="string"?this.quote(t):typeof t=="number"?t===1/0?"9e9999":t===-1/0?"-9e9999":isNaN(t)?'{"class":"NaN"}':t.toString():t instanceof Boolean?this.writeJsonValue(t.valueOf()):t instanceof String?this.writeJsonValue(t.valueOf()):t instanceof Number?this.writeJsonValue(t.valueOf()):t instanceof Date?'{"class":"Date", "value":"'+t.toJSON()+'"}':Array.isArray(t)?this.ea(t):U.st(t)?this.NR(t):U.at(t)?"null":'"'+t.toString()+'"'}ea(t,i){i===void 0&&(i=!1);const e=t.length;if(e<=0)return"[]";const s=new StringBuilder;s.add("["),i&&e>1&&s.add(`
`);for(let n=0;n<e;n++){const o=t[n];o!==void 0&&(n>0&&(s.add(","),i&&s.add(`
`)),s.add(this.writeJsonValue(o)))}return i&&e>1&&s.add(`
`),s.add("]"),s.toString()}_S(t,i,e){return!!(e===void 0||i==="__gohashid"||i[0]==="_"||U.at(e))}ie(t){return isNaN(t)?"NaN":t===1/0?"9e9999":t===-1/0?"-9e9999":t}NR(t){const i=t;if(i instanceof Point)t={class:"go.Point",x:this.ie(i.x),y:this.ie(i.y)};else if(i instanceof Size)t={class:"go.Size",width:this.ie(i.width),height:this.ie(i.height)};else if(i instanceof Rect)t={class:"go.Rect",x:this.ie(i.x),y:this.ie(i.y),width:this.ie(i.width),height:this.ie(i.height)};else if(i instanceof Margin)t={class:"go.Margin",top:this.ie(i.top),right:this.ie(i.right),bottom:this.ie(i.bottom),left:this.ie(i.left)};else if(i instanceof Spot)i.isSpot()?t={class:"go.Spot",x:this.ie(i.x),y:this.ie(i.y),offsetX:this.ie(i.offsetX),offsetY:this.ie(i.offsetY)}:t={class:"go.Spot",enum:i.toString()};else if(i instanceof Brush){if(t={class:"go.Brush",type:BrushType[i.type]},i.type===1?t.color=i.color:(i.type===2||i.type===3)&&(t.start=i.start,t.end=i.end,i.type===3&&(i.startRadius!==0&&(t.startRadius=this.ie(i.startRadius)),isNaN(i.endRadius)||(t.endRadius=this.ie(i.endRadius)))),i.colorStops!==null){const n={},o=i.colorStops.iterator;for(;o.next();){const r=o.key,l=o.value;n[r]=l}t.colorStops=n}}else if(i instanceof Geometry)t={class:"go.Geometry",type:GeometryType[i.type]},i.startX!==0&&(t.startX=this.ie(i.startX)),i.startY!==0&&(t.startY=this.ie(i.startY)),i.endX!==0&&(t.endX=this.ie(i.endX)),i.endY!==0&&(t.endY=this.ie(i.endY)),i.spot1.equals(Spot.TopLeft)||(t.spot1=i.spot1),i.spot2.equals(Spot.BottomRight)||(t.spot2=i.spot2),i.type===4&&(t.path=Geometry.stringify(i));else if(Model.FA(null,"",i))return"{}";let e="{",s=!0;for(const n in t){const o=this.Rt(t,n);this._S(t,n,o)||(s?s=!1:e+=",",e+=this.quote(n)+":"+this.writeJsonPropertyValue(n,o))}return e+="}",e}writeJsonPropertyValue(t,i){if(t==="points"&&i instanceof List){const e=i;let s="[";const n=e.iterator;for(;n.next();){const o=n.value;s.length>1&&(s+=","),s+=this.RR(o.x),s+=",",s+=this.RR(o.y)}return s+="]",s}else return this.writeJsonValue(i)}RR(t){if(t===1/0)return"9e9999";if(t===-1/0)return"-9e9999";if(isNaN(t))return"0";const i=this.pointsDigits;return i>16?t.toString():t.toFixed(i)}get pointsDigits(){return this.Pw}set pointsDigits(t){t<0?t=0:t>100&&(t=100),this.Pw=t}ee(t){return typeof t=="number"?t:t==="NaN"?NaN:t==="9e9999"?1/0:t==="-9e9999"?-1/0:parseFloat(t)}K4(t){if(!U.st(t))return t;let i=t.class||"";if(typeof i!="string"||i==="")return t;if(i==="NaN")return NaN;if(i==="Date")return new Date(t.value);if(i.indexOf("go.")!==0)return t;i=i.substring(3);let e=t;if(i==="Point")e=new Point(this.ee(t.x),this.ee(t.y));else if(i==="Size")e=new Size(this.ee(t.width),this.ee(t.height));else if(i==="Rect")e=new Rect(this.ee(t.x),this.ee(t.y),this.ee(t.width),this.ee(t.height));else if(i==="Margin")e=new Margin(this.ee(t.top),this.ee(t.right),this.ee(t.bottom),this.ee(t.left));else if(i==="Spot")typeof t.enum=="string"?e=Spot.parse(t.enum):e=new Spot(this.ee(t.x),this.ee(t.y),this.ee(t.offsetX),this.ee(t.offsetY));else if(i==="Brush"){const s=new Brush;s.type=U.fa(BrushType,t.type)??1,typeof t.color=="string"&&(s.color=t.color),t.start instanceof Spot&&(s.start=t.start),t.end instanceof Spot&&(s.end=t.end),typeof t.startRadius=="number"&&(s.startRadius=this.ee(t.startRadius)),typeof t.endRadius=="number"&&(s.endRadius=this.ee(t.endRadius));const n=t.colorStops;if(U.st(n))for(const o in n){const r=parseFloat(o);s.addColorStop(r,n[o])}e=s}else if(i==="Geometry"){let s=null;typeof t.path=="string"?s=Geometry.parse(t.path):s=new Geometry,s.type=U.fa(GeometryType,t.type)??1,typeof t.startX=="number"&&(s.startX=this.ee(t.startX)),typeof t.startY=="number"&&(s.startY=this.ee(t.startY)),typeof t.endX=="number"&&(s.endX=this.ee(t.endX)),typeof t.endY=="number"&&(s.endY=this.ee(t.endY)),t.spot1 instanceof Spot&&(s.spot1=t.spot1),t.spot2 instanceof Spot&&(s.spot2=t.spot2),e=s}else if(i==="EnumValue"){let s=t.classType;s.indexOf("go.")===0&&(s=s.substring(3));const n=Model.BA(s);U.at(n)&&(e=U.fa(n,t.name))}return e}get name(){return this.Nt}set name(t){const i=this.Nt;i!==t&&(U.i(t,"string",Model,"name"),this.Nt=t,this.t("name",i,t))}get dataFormat(){return this.Yg}set dataFormat(t){const i=this.Yg;i!==t&&(U.i(t,"string",Model,"dataFormat"),this.Yg=t,this.t("dataFormat",i,t))}get isReadOnly(){return this.jo}set isReadOnly(t){const i=this.jo;i!==t&&(U.i(t,"boolean",Model,"isReadOnly"),this.jo=t,this.t("isReadOnly",i,t))}get modelData(){return this.LA}set modelData(t){const i=this.modelData;i!==t&&(U.Xo(t,Model,"modelData"),this.containsNodeData(t)&&U.n("Model.modelData Object must not be used by the rest of the model: "+t),this.LA=t,this.t("modelData",i,t),this.updateTargetBindings(t))}addChangedListener(t){return U.C(t,Model,"addChangedListener:listener"),this.Mw.push(t),this}removeChangedListener(t){U.C(t,Model,"removeChangedListener:listener");const i=this.Mw.indexOf(t);i>=0&&this.Mw.splice(i,1)}hC(t){this.skipsUndoManager||this.undoManager.handleChanged(t),this.IR(t)}IR(t){this.Mw.forEach(i=>i(t))}jI(t){this.IR(t)}raiseChangedEvent(t,i,e,s,n,o,r){this.Xt("",t,i,e,s,n,o,r)}raiseChanged(t,i,e,s,n){this.Xt("",2,t,this,i,e,s,n)}t(t,i,e,s,n){this.Xt("",2,t,this,i,e,s,n)}raiseDataChanged(t,i,e,s,n,o){this.Xt("",2,i,t,e,s,n,o)}Xt(t,i,e,s,n,o,r,l){r===void 0&&(r=null),l===void 0&&(l=null);const h=new ChangedEvent;h.model=this,h.change=i,h.modelChange=t,h.propertyName=e,h.object=s,h.oldValue=n,h.oldParam=r,h.newValue=o,h.newParam=l,this.hC(h)}get undoManager(){return this.QS}set undoManager(t){const i=this.QS;i!==t&&(U.s(t,UndoManager,Model,"undoManager"),i&&i.removeModel(this),this.QS=t,t.addModel(this))}get skipsUndoManager(){return this.Wo}set skipsUndoManager(t){U.i(t,"boolean",Model,"skipsUndoManager"),this.Wo=t}changeState(t,i){if(t!==null&&t.model===this)if(t.change===2){const e=t.object,s=t.propertyName,n=t.getValue(i);if(e!==null&&s===this.nodeKeyProperty&&this.containsNodeData(e)){const o=t.getValue(!i);o!==void 0&&this.Ti.delete(o),n!==void 0&&this.Ti.set(n,e)}this.ft(e,s,n)}else if(t.change===3){const e=t.newParam;if(t.modelChange==="nodeDataArray"){const s=t.newValue;if(U.st(s)&&typeof e=="number"){const n=this.getKeyForNodeData(s);i?(this.Fe[e]===s&&this.Oo(this.Fe,e),n!==void 0&&this.Ti.delete(n)):(this.Fe[e]!==s&&this.wr(this.Fe,e,s),n!==void 0&&this.Ti.set(n,s))}}else if(t.modelChange===""){let s=t.object;if(s&&!Array.isArray(s)&&t.propertyName&&(s=this.Rt(s,t.propertyName)),Array.isArray(s)&&typeof e=="number"){const n=t.newValue;i?this.Oo(s,e):this.wr(s,e,n)}}else U.n("unknown ChangeType.Insert modelChange: "+t.toString())}else if(t.change===4){const e=t.oldParam;if(t.modelChange==="nodeDataArray"){const s=t.oldValue;if(U.st(s)&&typeof e=="number"){const n=this.getKeyForNodeData(s);i?(this.Fe[e]!==s&&this.wr(this.Fe,e,s),n!==void 0&&this.Ti.set(n,s)):(this.Fe[e]===s&&this.Oo(this.Fe,e),n!==void 0&&this.Ti.delete(n))}}else if(t.modelChange===""){let s=t.object;if(s&&!Array.isArray(s)&&t.propertyName&&(s=this.Rt(s,t.propertyName)),Array.isArray(s)&&typeof e=="number"){const n=t.oldValue;i?this.wr(s,e,n):this.Oo(s,e)}}else U.n("unknown ChangeType.Remove modelChange: "+t.toString())}else t.change===1||U.n("unknown ChangedEvent: "+t.toString())}startTransaction(t){return this.undoManager.startTransaction(t)}commitTransaction(t){return this.undoManager.commitTransaction(t)}rollbackTransaction(){return this.undoManager.rollbackTransaction()}commit(t,i){let e=i;e===void 0&&(e="");const s=this.skipsUndoManager;e===null&&(this.skipsUndoManager=!0,e=""),this.undoManager.startTransaction(e);let n=!1;try{t(this),n=!0}finally{n?this.undoManager.commitTransaction(e):this.undoManager.rollbackTransaction(),this.skipsUndoManager=s}}updateTargetBindings(t,i){i===void 0&&(i=""),this.Xt("SourceChanged",1,i,t,null,null)}get nodeKeyProperty(){return this.ia}set nodeKeyProperty(t){const i=this.ia;i!==t&&(this.jn(t,Model,"nodeKeyProperty"),t===""&&U.n("Model.nodeKeyProperty may not be the empty string"),this.Ti.count>0&&U.n("Cannot set Model.nodeKeyProperty when there is existing node data"),this.ia=t,this.t("nodeKeyProperty",i,t))}jn(t,i,e){typeof t!="string"&&!U.at(t)&&U.Ii(t,"string or function",i,e)}getKeyForNodeData(t){if(t===null)return;const i=this.ia;if(i==="")return;const e=this.Rt(t,i);if(e!==void 0){if(this.isKeyType(e))return e;U.n("Key value for node data "+t+" is not a number or a string: "+e)}}setKeyForNodeData(t,i){if((i==null||!this.isKeyType(i))&&U.Ii(i,"number or string",Model,"setKeyForNodeData:key"),t===null)return;const e=this.ia;if(e==="")return;if(!this.containsNodeData(t)){this.ft(t,e,i);return}const s=this.Rt(t,e);if(s!==i){if(this.findNodeDataForKey(i)!==null)return;this.ft(t,e,i),s!==void 0&&this.Ti.delete(s),this.Ti.set(i,t),this.Xt("nodeKey",2,e,t,s,i),typeof e=="string"&&this.updateTargetBindings(t,e),this.Aw(s,i)}}get makeUniqueKeyFunction(){return this.fu}set makeUniqueKeyFunction(t){const i=this.fu;i!==t&&(t!==null&&U.C(t,Model,"makeUniqueKeyFunction"),this.fu=t,this.t("makeUniqueKeyFunction",i,t))}isKeyType(t){return typeof t=="number"||typeof t=="string"}containsNodeData(t){if(t===null)return!1;const i=this.getKeyForNodeData(t);return i===void 0?!1:this.Ti.get(i)===t}findNodeDataForKey(t){return t===null&&U.n("Model.findNodeDataForKey:key must not be null"),t===void 0||!this.isKeyType(t)?null:this.Ti.get(t)}get nodeDataArray(){return this.Fe}set nodeDataArray(t){const i=this.Fe;if(i!==t){this.Tw(t,Model,"nodeDataArray"),this.Ti.clear(),this.VA();const e=t.length;for(let o=0;o<e;o++){const r=t[o];U.st(r)||U.n("Model.nodeDataArray must only contain Objects, not: "+r),r===this.modelData&&U.n("nodeDataArray Objects must not be the shared Model.modelData")}this.Fe=t;const s=new List;for(let o=0;o<e;o++){const r=t[o],l=this.getKeyForNodeData(r);l===void 0||this.Ti.get(l)!==null?s.add(r):this.Ti.set(l,r)}const n=s.iterator;for(;n.next();){const o=n.value;this.makeNodeDataKeyUnique(o);const r=this.getKeyForNodeData(o);r!==void 0&&this.Ti.set(r,o)}this.Xt("nodeDataArray",2,"nodeDataArray",this,i,t);for(let o=0;o<e;o++){const r=t[o];this.jg(r),this.Jg(r)}}}ik(t){return t===void 0?!1:this.Ti.has(t)}makeNodeDataKeyUnique(t){if(t===null)return;const i=this.ia;if(i==="")return;let e=this.getKeyForNodeData(t);if(e!==void 0&&!this.ik(e))return;const s=this.fu;if(s!==null&&(e=s(this,t),e!=null&&!this.ik(e))){this.ft(t,i,e);return}if(typeof e=="string"){let n=2;for(;this.ik(e+n);)n++;this.ft(t,i,e+n)}else if(e===void 0||typeof e=="number"){let n=-this.Ti.count-1;for(;this.ik(n);)n--;this.ft(t,i,n)}else Debug&&U.n("Model.getKeyForNodeData returned something other than a string or a number: "+e)}addNodeData(t){t!==null&&(t===this.modelData&&U.n("Model.addNodeData cannot add the shared Model.modelData Object"),this.containsNodeData(t)||this.gR(t,!0))}gR(t,i){let e=this.getKeyForNodeData(t);if(e===void 0)this.makeNodeDataKeyUnique(t),e=this.getKeyForNodeData(t);else{if(this.Ti.get(e)===t)return;this.makeNodeDataKeyUnique(t),e=this.getKeyForNodeData(t)}e===void 0&&U.n("Model.makeNodeDataKeyUnique failed on "+t+".  Data not added to Model."),this.Ti.set(e,t);let s=null;i&&(s=this.Fe.length,this.wr(this.Fe,s,t)),this.Xt("nodeDataArray",3,"nodeDataArray",this,null,t,null,s),this.jg(t),this.Jg(t)}addNodeDataCollection(t){if(Array.isArray(t)){const i=t.length;for(let e=0;e<i;e++)this.addNodeData(t[e])}else{const i=t.iterator;for(;i.next();){const e=i.value;this.addNodeData(e)}}}removeNodeData(t){t!==null&&this.dR(t,!0)}dR(t,i){const e=this.getKeyForNodeData(t);e!==void 0&&this.Ti.delete(e);let s=null;if(i){if(s=this.Fe.indexOf(t),s<0)return;this.Oo(this.Fe,s)}this.Xt("nodeDataArray",4,"nodeDataArray",this,t,null,s,null),this.Lw(t)}removeNodeDataCollection(t){if(Array.isArray(t)){const i=t.length;for(let e=0;e<i;e++)this.removeNodeData(t[e])}else{const i=t.iterator;for(;i.next();){const e=i.value;this.removeNodeData(e)}}}mergeNodeDataArray(t){if(t===this.nodeDataArray||!Array.isArray(t))return;const i=new GSet;i.addAll(this.Ti.iteratorKeys);const e=new GSet,s=t.length;for(let o=0;o<s;o++){const r=t[o],l=this.getKeyForNodeData(r);if(l!==void 0){e.add(l);const h=this.findNodeDataForKey(l);if(h===r)continue;if(h!==null)this.assignAllDataProperties(h,r),this.Wg(r,h);else{const a=this.cloneDeep(r);this.setKeyForNodeData(a,l),this.addNodeData(a)}}else{const h=this.cloneDeep(r);this.addNodeData(h);const a=this.getKeyForNodeData(h);a!==void 0&&e.add(a)}}const n=i.iterator;for(;n.next();){const o=n.value;if(!e.has(o)){const r=this.findNodeDataForKey(o);r&&this.removeNodeData(r)}}}Aw(t,i){if(i===void 0)return;const e=this.Sw(t);e instanceof GSet&&this.yr.set(i,e)}VA(){}jg(t){}Jg(t){}Lw(t){}yn(t,i){if(t===void 0)return;let e=this.yr.get(t);e===null&&(e=new GSet,this.yr.set(t,e)),e.add(i)}pn(t,i){if(t===void 0)return;const e=this.yr.get(t);e instanceof GSet&&(i==null?this.yr.delete(t):(e.delete(i),e.count===0&&this.yr.delete(t)))}Sw(t){if(t===void 0)return null;const i=this.yr.get(t);return i instanceof GSet?i:null}xV(t){t===void 0?this.yr.clear():this.yr.delete(t)}get copyNodeDataFunction(){return this.uu}set copyNodeDataFunction(t){const i=this.uu;i!==t&&(t!==null&&U.C(t,Model,"copyNodeDataFunction"),this.uu=t,this.t("copyNodeDataFunction",i,t))}get copiesArrays(){return this.Kg}set copiesArrays(t){const i=this.Kg;i!==t&&(t!==null&&U.i(t,"boolean",Model,"copiesArrays"),this.Kg=t,this.t("copiesArrays",i,t))}get copiesArrayObjects(){return this.Ug}set copiesArrayObjects(t){const i=this.Ug;i!==t&&(t!==null&&U.i(t,"boolean",Model,"copiesArrayObjects"),this.Ug=t,this.t("copiesArrayObjects",i,t))}get copiesKey(){return this.Gg}set copiesKey(t){const i=this.Gg;i!==t&&(t!==null&&U.i(t,"boolean",Model,"copiesKey"),this.Gg=t,this.t("copiesKey",i,t))}copyNodeData(t){let i;const e=this.uu;return e!==null?i=e(t,this):i=this.ek(t,!0),i}ek(t,i){if(U.st(t))if(Array.isArray(t))if(this.copiesArrays){const e=t,s=[];for(let n=0;n<e.length;n++){const o=e[n],r=this.ek(o,this.copiesArrayObjects);s.push(r)}return s}else return t;else{if(t instanceof Point||t instanceof Size||t instanceof Rect||t instanceof Margin||t instanceof Spot)return t.copy();if(i){const e=t,s=e.constructor,n=s?new s:{},o=!this.copiesKey&&typeof this.nodeKeyProperty=="string"?this.nodeKeyProperty:null;for(const r in e){if(r==="__gohashid"){n.__gohashid=void 0;continue}if(r===o){n[o]=void 0;continue}const l=this.Rt(e,r);if(!U.st(l))n[r]=l;else if(Model.FA(e,r,l))this.ft(n,r,l);else{const h=this.ek(l,!1);this.ft(n,r,h)}}return n}else return t}else return t}get afterCopyFunction(){return this.qg}set afterCopyFunction(t){const i=this.qg;i!==t&&(t!==null&&U.C(t,Model,"afterCopyFunction"),this.qg=t,this.t("afterCopyFunction",i,t))}static FA(t,i,e){const s=U.to(e);return e instanceof Model||e instanceof UndoManager||e instanceof Transaction||e instanceof ChangedEvent||e instanceof GraphObject||e instanceof RowColumnDefinition||e instanceof Diagram||e instanceof EventTarget||s==="Layer"||s==="RowColumnDefinition"||s.indexOf("Animation")>=0||s.indexOf("Tool")>=0||s.indexOf("CommandHandler")>=0||s.indexOf("Layout")>=0?(Debug&&i[0]!=="_"&&(t&&i&&U.et('Warning: found GraphObject or Diagram or HTML DOM reference when copying model data on property "'+i+'" of data object: '+t.toString()),U.et(`  
Model data should not have any references to a Diagram or any part of a diagram, such as: `+e.toString())),!0):!1}static OR=!1;set(t,i,e){if(Debug&&(U.Xo(t,Model,"set:data"),U.i(i,"string",Model,"set:propname"),i===""&&U.n("Model.set: property name must not be an empty string when setting "+t+" to "+e)),this.containsNodeData(t)){if(i===this.nodeKeyProperty){this.setKeyForNodeData(t,e);return}else if(i===this.nodeCategoryProperty){this.setCategoryForNodeData(t,e);return}}else!Model.OR&&t instanceof GraphObject&&(Model.OR=!0,U.et('Model.set is modifying a GraphObject, "'+t.toString()+'"'),U.et("  Is that really your intent?"));const s=this.Rt(t,i);s!==e&&(this.ft(t,i,e),this.raiseDataChanged(t,i,s,e))}setDataProperty(t,i,e){this.set(t,i,e)}assignAllDataProperties(t,i){if(!i)return;const e=this.containsNodeData(t);for(const s in i)s!=="__gohashid"&&(e&&s===this.nodeKeyProperty||this.set(t,s,i[s]))}addArrayItem(t,i){this.insertArrayItem(t,-1,i)}insertArrayItem(t,i,e){Debug&&(this.Tw(t,Model,"insertArrayItem:arr"),U.r(i,Model,"insertArrayItem:idx"),t===this.Fe&&U.n("Model.insertArrayItem or Model.addArrayItem should not be called on the Model.nodeDataArray")),i<0&&(i=t.length),t=this.wr(t,i,e),this.Xt("",3,"",t,null,e,null,i)}removeArrayItem(t,i){i===void 0&&(i=-1),Debug&&(this.Tw(t,Model,"removeArrayItem:arr"),U.r(i,Model,"removeArrayItem:idx")),t===this.Fe&&U.n("Model.removeArrayItem should not be called on the Model.nodeDataArray"),i===-1&&(i=t.length-1);const e=t[i];t=this.Oo(t,i),this.Xt("",4,"",t,e,null,i,null)}get nodeCategoryProperty(){return this.Mc}set nodeCategoryProperty(t){const i=this.Mc;i!==t&&(this.jn(t,Model,"nodeCategoryProperty"),this.Mc=t,this.t("nodeCategoryProperty",i,t))}getCategoryForNodeData(t){if(t===null)return"";const i=this.Mc;if(i==="")return"";const e=this.Rt(t,i);if(e===void 0)return"";if(typeof e=="string")return e;U.n("getCategoryForNodeData found a non-string category for "+t+": "+e)}setCategoryForNodeData(t,i){if(U.i(i,"string",Model,"setCategoryForNodeData:cat"),t===null)return;const e=this.Mc;if(e==="")return;if(!this.containsNodeData(t)){this.ft(t,e,i);return}let s=this.Rt(t,e);s===void 0&&(s=""),s!==i&&(this.ft(t,e,i),this.Xt("nodeCategory",2,e,t,s,i))}Wg(t,i){this.setCategoryForNodeData(i,this.getCategoryForNodeData(t))}get type(){return"Model"}Hx(){return!1}OP(){return!1}pR(){return!1}cc(){return!1}vx(){return!1}Dh(){return!1}static j2(){return new Model}Rt(t,i){return Model.Rt(t,i)}static Rt(t,i){if(!t||!i)return null;let e;try{U.at(i)?e=i(t):U.at(t.getAttribute)?(e=t.getAttribute(i),e===null&&(e=void 0)):e=t[i]}catch(s){Debug&&U.et("property get error: "+s.toString())}return e}ft(t,i,e){Model.ft(t,i,e)}static ft(t,i,e){if(!(!t||!i)){try{U.at(i)?i(t,e):U.at(t.setAttribute)?t.setAttribute(i,e):t[i]=e}catch(s){Debug&&U.et("property set error: "+s.toString())}return t}}Tw(t,i,e){Array.isArray(t)||U.Ii(t,"Array",i,e)}FR(t,i,e){return t[i]=e,t}wr(t,i,e){return i>=t.length?t.push(e):t.splice(i,0,e),t}Oo(t,i){return i>=t.length?t.pop():t.splice(i,1),t}static BA(t){return Model.zA[t]?Model.zA[t]:root.go!==void 0&&root.go[t]?root.go[t]:null}static Ol(t,i){Model.zA[i]=t}static zA={}}Model.fromJSON=Model.fromJson=Model.fromJson,Model.Ol(Brush,"Brush"),Model.Ol(Geometry,"Geometry"),Model.Ol(Margin,"Margin"),Model.Ol(Point,"Point"),Model.Ol(Rect,"Rect"),Model.Ol(Size,"Size"),Model.Ol(Spot,"Spot"),Model.Ol(Model,"Model");class GraphLinksModel extends Model{qs;xr;Ui;sa;du;gu;_l;Eo;Bo;Cc;Nc;Ac;wn;mu;El;constructor(t,i,e){if(super(),this.qs=[],this.xr=new GSet,this.Ui=new GMap,this.sa="",this.du=null,this.gu=null,this._l=null,this.Eo="from",this.Bo="to",this.Cc="",this.Nc="",this.Ac="category",this.wn="",this.mu="isGroup",this.El="group",i!==void 0&&(this.linkDataArray=i),t!==void 0&&(Array.isArray(t)?this.nodeDataArray=t:e=t),e){Object.assign(this,e);const s=e.Changed;s&&(delete this.Changed,this.addChangedListener(s))}}cloneProtected(t){super.cloneProtected(t),t.sa=this.sa,t.du=this.du,t.gu=this.gu,t.Eo=this.Eo,t.Bo=this.Bo,t.Cc=this.Cc,t.Nc=this.Nc,t.Ac=this.Ac,t.wn=this.wn,t.mu=this.mu,t.El=this.El}copy(){const t=new this.constructor;return this.cloneProtected(t),t}clear(){this.qs=[],this.Ui.clear(),this.xr.clear(),super.clear()}toString(t){if(t===void 0&&(t=0),t>=2)return this.toJson();{let i=(this.name!==""?this.name:"")+" GraphLinksModel";if(t>0){i+=`
 node data:`;let e=this.nodeDataArray,s=e.length,n=0;for(n=0;n<s;n++){const r=e[n];i+=" "+this.getKeyForNodeData(r)+":"+Binding.toString(r)}i+=`
 link data:`;const o=this.linkDataArray;for(s=o.length,n=0;n<s;n++){const r=o[n];i+=" "+this.je(r,!0)+"-->"+this.je(r,!1)}}return i}}DA(t,i,e){if(this.linkKeyProperty===""){const f=this.skipsUndoManager;this.skipsUndoManager=!0,this.linkKeyProperty="key",this.skipsUndoManager=f}let s=super.DA(t,i,e);const n=this,o=new GSet,r=new GSet,l=new GSet;t.changes.each(f=>{if(f.model===n){if(f.modelChange==="linkDataArray")f.change===3?o.add(f.newValue):f.change===4&&l.add(f.oldValue);else if(n.containsLinkData(f.object))f.object!==null&&r.add(f.object);else if(f.object!==null)if(f.object!==null&&e.has(f.object)){const u=e.get(f.object);u&&u.each(d=>{n.containsLinkData(d)&&r.add(d)})}else{if(f.object instanceof Model||n.containsNodeData(f.object))return;n.ER(f.object).each(d=>r.add(d))}}});const h=new GSet;o.each(f=>{const u=n.getKeyForLinkData(f);u!==void 0&&h.add(u),i||r.add(f)});const a=new GSet;l.each(f=>{const u=n.getKeyForLinkData(f);u!==void 0&&a.add(u),i&&r.add(f)});const c=n.cloneDeep(r.toArray());return h.count>0&&(s===null&&(s={}),i?s.removedLinkKeys=h.toArray():s.insertedLinkKeys=h.toArray()),c.length>0&&(s===null&&(s={}),s.modifiedLinkData=c),a.count>0&&(s===null&&(s={}),i?s.insertedLinkKeys=a.toArray():s.removedLinkKeys=a.toArray()),s}vg(){const t=super.vg();let i="";return this.linkCategoryProperty!=="category"&&typeof this.linkCategoryProperty=="string"&&(i+=`,
  "linkCategoryProperty": `+this.quote(this.linkCategoryProperty)),this.linkKeyProperty!==""&&typeof this.linkKeyProperty=="string"&&(i+=`,
  "linkKeyProperty": `+this.quote(this.linkKeyProperty)),this.linkFromKeyProperty!=="from"&&typeof this.linkFromKeyProperty=="string"&&(i+=`,
  "linkFromKeyProperty": `+this.quote(this.linkFromKeyProperty)),this.linkToKeyProperty!=="to"&&typeof this.linkToKeyProperty=="string"&&(i+=`,
  "linkToKeyProperty": `+this.quote(this.linkToKeyProperty)),this.linkFromPortIdProperty!==""&&typeof this.linkFromPortIdProperty=="string"&&(i+=`,
  "linkFromPortIdProperty": `+this.quote(this.linkFromPortIdProperty)),this.linkToPortIdProperty!==""&&typeof this.linkToPortIdProperty=="string"&&(i+=`,
  "linkToPortIdProperty": `+this.quote(this.linkToPortIdProperty)),this.linkLabelKeysProperty!==""&&typeof this.linkLabelKeysProperty=="string"&&(i+=`,
  "linkLabelKeysProperty": `+this.quote(this.linkLabelKeysProperty)),this.nodeIsGroupProperty!=="isGroup"&&typeof this.nodeIsGroupProperty=="string"&&(i+=`,
  "nodeIsGroupProperty": `+this.quote(this.nodeIsGroupProperty)),this.nodeGroupKeyProperty!=="group"&&typeof this.nodeGroupKeyProperty=="string"&&(i+=`,
  "nodeGroupKeyProperty": `+this.quote(this.nodeGroupKeyProperty)),t+i}Cw(t){super.Cw(t),t.linkKeyProperty&&(this.linkKeyProperty=t.linkKeyProperty),t.linkFromKeyProperty&&(this.linkFromKeyProperty=t.linkFromKeyProperty),t.linkToKeyProperty&&(this.linkToKeyProperty=t.linkToKeyProperty),t.linkFromPortIdProperty&&(this.linkFromPortIdProperty=t.linkFromPortIdProperty),t.linkToPortIdProperty&&(this.linkToPortIdProperty=t.linkToPortIdProperty),t.linkCategoryProperty&&(this.linkCategoryProperty=t.linkCategoryProperty),t.linkLabelKeysProperty&&(this.linkLabelKeysProperty=t.linkLabelKeysProperty),t.nodeIsGroupProperty&&(this.nodeIsGroupProperty=t.nodeIsGroupProperty),t.nodeGroupKeyProperty&&(this.nodeGroupKeyProperty=t.nodeGroupKeyProperty)}RA(){const t=super.RA(),i=`,
  "linkDataArray": `+this.ea(this.linkDataArray,!0);return t+i}IA(t){super.IA(t);const i=t.linkDataArray;Array.isArray(i)&&(this.replaceJsonObjects(i),this.linkDataArray=i)}BR=`,
  "insertedLinkKeys": `;U4=`,
  "modifiedLinkData": `;VR=`,
  "removedLinkKeys": `;ER(t){const i=new GSet;for(let e=0;e<this.linkDataArray.length;e++){const s=this.linkDataArray[e];this.tk(t,s,s,i)}return i}EA(t,i,e){if(this.linkKeyProperty===""){const f=this.skipsUndoManager;this.skipsUndoManager=!0,this.linkKeyProperty="key",this.skipsUndoManager=f}const s=super.EA(t,i,e),n=this,o=new GSet,r=new GSet,l=new GSet;t.changes.each(f=>{if(f.model===n){if(f.modelChange==="linkDataArray")f.change===3?o.add(f.newValue):f.change===4&&l.add(f.oldValue);else if(n.containsLinkData(f.object))f.object!==null&&r.add(f.object);else if(f.object!==null)if(f.object!==null&&e.has(f.object)){const u=e.get(f.object);u&&u.each(d=>{n.containsLinkData(d)&&r.add(d)})}else{if(f.object instanceof Model||n.containsNodeData(f.object))return;n.ER(f.object).each(d=>r.add(d))}}});const h=new GSet;o.each(f=>{const u=n.getKeyForLinkData(f);u!==void 0&&h.add(u),i||r.add(f)});const a=new GSet;l.each(f=>{const u=n.getKeyForLinkData(f);u!==void 0&&a.add(u),i&&r.add(f)});let c=s;return h.count>0&&(c+=(i?this.VR:this.BR)+this.ea(h.toArray(),!0)),r.count>0&&(c+=this.U4+this.ea(r.toArray(),!0)),a.count>0&&(c+=(i?this.BR:this.VR)+this.ea(a.toArray(),!0)),c}Nw(t){(t.linkCategoryProperty!==void 0&&t.linkCategoryProperty!==this.linkCategoryProperty||t.linkKeyProperty!==void 0&&t.linkKeyProperty!==this.linkKeyProperty||t.linkFromKeyProperty!==void 0&&t.linkFromKeyProperty!==this.linkFromKeyProperty||t.linkToKeyProperty!==void 0&&t.linkToKeyProperty!==this.linkToKeyProperty||t.linkFromPortIdProperty!==void 0&&t.linkFromPortIdProperty!==this.linkFromPortIdProperty||t.linkToPortIdProperty!==void 0&&t.linkToPortIdProperty!==this.linkToPortIdProperty||t.linkLabelKeysProperty!==void 0&&t.linkLabelKeysProperty!==this.linkLabelKeysProperty||t.nodeIsGroupProperty!==void 0&&t.nodeIsGroupProperty!==this.nodeIsGroupProperty||t.nodeGroupKeyProperty!==void 0&&t.nodeGroupKeyProperty!==this.nodeGroupKeyProperty)&&U.n("applyIncrementalJson cannot change Model properties"),super.Nw(t);const i=t.insertedLinkKeys;if(Array.isArray(i)){const n=i.length;for(let o=0;o<n;o++){const r=i[o];let l=this.findLinkDataForKey(r);l===null&&(l=this.copyLinkData({}),this.setKeyForLinkData(l,r),this.addLinkData(l))}}const e=t.modifiedLinkData;if(Array.isArray(e)){const n=e.length;for(let o=0;o<n;o++){const r=e[o],l=this.getKeyForLinkData(r),h=this.findLinkDataForKey(l);if(h!==null){for(const a in r)a==="__gohashid"||a===this.linkKeyProperty||this.set(h,a,r[a]);this.zR(r,h)}}}const s=t.removedLinkKeys;if(Array.isArray(s)){const n=s.length;for(let o=0;o<n;o++){const r=s[o],l=this.findLinkDataForKey(r);l!==null&&this.removeLinkData(l)}}}changeState(t,i){if(!(t===null||t.model!==this)){if(t.change===2){const e=t.object,s=t.propertyName;if(e!==null&&s===this.linkKeyProperty&&this.containsLinkData(e)){const n=t.getValue(i),o=t.getValue(!i);o!==void 0&&this.Ui.delete(o),n!==void 0&&this.Ui.set(n,e),this.ft(e,s,n);return}}else if(t.change===3){let e=t.newParam;if(t.modelChange==="linkDataArray"){const s=t.newValue;if(U.st(s)&&typeof e=="number"){const n=this.getKeyForLinkData(s);i?(this.xr.delete(s),this.qs[e]===s&&this.Oo(this.linkDataArray,e),n!==void 0&&this.Ui.delete(n)):(this.xr.add(s),this.qs[e]!==s&&this.wr(this.qs,e,s),n!==void 0&&this.Ui.set(n,s))}return}else if(t.modelChange==="linkLabelKeys"){const s=t.object,n=s!==null?this.getLabelKeysForLinkData(s):null;Array.isArray(n)&&typeof e=="number"&&(i?(e=n.indexOf(t.newValue),e>=0&&this.Oo(n,e)):n.indexOf(t.newValue)<0&&this.wr(n,e,t.newValue));return}}else if(t.change===4){let e=t.oldParam;if(t.modelChange==="linkDataArray"){const s=t.oldValue;if(U.st(s)&&typeof e=="number"){const n=this.getKeyForLinkData(s);i?(this.xr.add(s),this.qs[e]!==s&&this.wr(this.qs,e,s),n!==void 0&&this.Ui.set(n,s)):(this.xr.delete(s),this.qs[e]===s&&this.Oo(this.linkDataArray,e),n!==void 0&&this.Ui.delete(n))}return}else if(t.modelChange==="linkLabelKeys"){const s=t.object,n=s!==null?this.getLabelKeysForLinkData(s):null;Array.isArray(n)&&typeof e=="number"&&(i?n.indexOf(t.oldValue)<0&&this.wr(n,e,t.oldValue):(e=n.indexOf(t.oldValue),e>=0&&this.Oo(n,e)));return}}super.changeState(t,i)}}get archetypeNodeData(){return this._l}set archetypeNodeData(t){const i=this._l;i!==t&&(t!==null&&U.Xo(t,GraphLinksModel,"archetypeNodeData"),this._l=t,this.t("archetypeNodeData",i,t))}XA(t){if(t===void 0)return;const i=this._l;if(i!==null){let e=this.findNodeDataForKey(t);e===null&&(e=this.copyNodeData(i),this.ft(e,this.nodeKeyProperty,t),this.addNodeData(e))}return t}get linkFromKeyProperty(){return this.Eo}set linkFromKeyProperty(t){const i=this.Eo;i!==t&&(this.jn(t,GraphLinksModel,"linkFromKeyProperty"),this.Eo=t,this.t("linkFromKeyProperty",i,t))}getFromKeyForLinkData(t){return this.je(t,!0)}setFromKeyForLinkData(t,i){this.zg(t,i,!0)}get linkToKeyProperty(){return this.Bo}set linkToKeyProperty(t){const i=this.Bo;i!==t&&(this.jn(t,GraphLinksModel,"linkToKeyProperty"),this.Bo=t,this.t("linkToKeyProperty",i,t))}getToKeyForLinkData(t){return this.je(t,!1)}setToKeyForLinkData(t,i){this.zg(t,i,!1)}je(t,i){if(t===null)return;const e=i?this.Eo:this.Bo;if(e==="")return;const s=this.Rt(t,e);if(s!==void 0){if(this.isKeyType(s))return s;U.n((i?"FromKey":"ToKey")+" value for link data "+t+" is not a number or a string: "+s)}}zg(t,i,e){if(i===null&&(i=void 0),i!==void 0&&!this.isKeyType(i)&&U.Ii(i,"number or string",GraphLinksModel,e?"setFromKeyForLinkData:key":"setToKeyForLinkData:key"),t===null)return;const s=e?this.Eo:this.Bo;if(s==="")return;if(i=this.XA(i),!this.containsLinkData(t)){this.ft(t,s,i);return}const n=this.Rt(t,s);n!==i&&(this.pn(n,t),this.ft(t,s,i),this.findNodeDataForKey(i)===null&&this.yn(i,t),this.Xt(e?"linkFromKey":"linkToKey",2,s,t,n,i),typeof s=="string"&&this.updateTargetBindings(t,s))}get linkFromPortIdProperty(){return this.Cc}set linkFromPortIdProperty(t){const i=this.Cc;i!==t&&(this.jn(t,GraphLinksModel,"linkFromPortIdProperty"),Debug&&(t===this.linkFromKeyProperty||t===this.linkToKeyProperty)&&U.n("linkFromPortIdProperty name must not be the same as the GraphLinksModel.linkFromKeyProperty or linkToKeyProperty: "+t),this.Cc=t,this.t("linkFromPortIdProperty",i,t))}getFromPortIdForLinkData(t){return this.JS(t,!0)}setFromPortIdForLinkData(t,i){this.Xg(t,i,!0)}get linkToPortIdProperty(){return this.Nc}set linkToPortIdProperty(t){const i=this.Nc;i!==t&&(this.jn(t,GraphLinksModel,"linkToPortIdProperty"),Debug&&(t===this.linkFromKeyProperty||t===this.linkToKeyProperty)&&U.n("linkFromPortIdProperty name must not be the same as the GraphLinksModel.linkFromKeyProperty or linkToKeyProperty: "+t),this.Nc=t,this.t("linkToPortIdProperty",i,t))}getToPortIdForLinkData(t){return this.JS(t,!1)}setToPortIdForLinkData(t,i){this.Xg(t,i,!1)}JS(t,i){if(t===null)return"";const e=i?this.Cc:this.Nc;if(e==="")return"";const s=this.Rt(t,e);return s===void 0?"":s}Xg(t,i,e){if(U.i(i,"string",GraphLinksModel,e?"setFromPortIdForLinkData:portname":"setToPortIdForLinkData:portname"),t===null)return;const s=e?this.Cc:this.Nc;if(s==="")return;if(!this.containsLinkData(t)){this.ft(t,s,i);return}let n=this.Rt(t,s);n===void 0&&(n=""),n!==i&&(this.ft(t,s,i),this.Xt(e?"linkFromPortId":"linkToPortId",2,s,t,n,i),typeof s=="string"&&this.updateTargetBindings(t,s))}get linkLabelKeysProperty(){return this.wn}set linkLabelKeysProperty(t){const i=this.wn;i!==t&&(this.jn(t,GraphLinksModel,"linkLabelKeysProperty"),this.wn=t,this.t("linkLabelKeysProperty",i,t))}getLabelKeysForLinkData(t){if(t===null)return GraphLinksModel.EmptyArray;const i=this.wn;if(i==="")return GraphLinksModel.EmptyArray;const e=this.Rt(t,i);return e===void 0?GraphLinksModel.EmptyArray:e}setLabelKeysForLinkData(t,i){if(this.Tw(i,GraphLinksModel,"setLabelKeysForLinkData:arr"),t===null)return;const e=this.wn;if(e==="")return;if(!this.containsLinkData(t)){this.ft(t,e,i);return}let s=this.Rt(t,e);if(s===void 0&&(s=GraphLinksModel.EmptyArray),s!==i){if(Array.isArray(s)){const o=s.length;for(let r=0;r<o;r++){const l=s[r];this.pn(l,t)}}this.ft(t,e,i);const n=i.length;for(let o=0;o<n;o++){const r=i[o];this.findNodeDataForKey(r)===null&&this.yn(r,t)}this.Xt("linkLabelKeys",2,e,t,s,i),typeof e=="string"&&this.updateTargetBindings(t,e)}}addLabelKeyForLinkData(t,i){if(i==null||(this.isKeyType(i)||U.Ii(i,"number or string",GraphLinksModel,"addLabelKeyForLinkData:key"),t===null))return;const e=this.wn;if(e==="")return;const s=this.Rt(t,e);if(s===void 0){const n=[];n.push(i),this.setLabelKeysForLinkData(t,n)}else if(Array.isArray(s)){let n=s.indexOf(i);if(n>=0)return;n=s.length,s.push(i),this.containsLinkData(t)&&(this.findNodeDataForKey(i)===null&&this.yn(i,t),this.Xt("linkLabelKeys",3,e,t,null,i,null,n))}else U.n(e+" property is not an Array; cannot addLabelKeyForLinkData: "+t)}removeLabelKeyForLinkData(t,i){if(i==null||(this.isKeyType(i)||U.Ii(i,"number or string",GraphLinksModel,"removeLabelKeyForLinkData:key"),t===null))return;const e=this.wn;if(e==="")return;const s=this.Rt(t,e);if(Array.isArray(s)){const n=s.indexOf(i);if(n<0)return;this.Oo(s,n),this.containsLinkData(t)&&(this.pn(i,t),this.Xt("linkLabelKeys",4,e,t,i,null,n,null))}else s!==void 0&&U.n(e+" property is not an Array; cannot removeLabelKeyforLinkData: "+t)}get linkDataArray(){return this.qs}set linkDataArray(t){const i=this.qs;if(i!==t){this.Tw(t,GraphLinksModel,"linkDataArray"),this.Ui.clear();const e=t.length;for(let n=0;n<e;n++){const o=t[n];U.st(o)||U.n("GraphLinksModel.linkDataArray must only contain Objects, not: "+o)}if(this.qs=t,this.linkKeyProperty!==""){const n=new List;for(let r=0;r<e;r++){const l=t[r],h=this.getKeyForLinkData(l);h===void 0||this.Ui.get(h)!==null?n.add(l):this.Ui.set(h,l)}const o=n.iterator;for(;o.next();){const r=o.value;this.makeLinkDataKeyUnique(r);const l=this.getKeyForLinkData(r);l!==void 0&&this.Ui.set(l,r)}}const s=new GSet;for(let n=0;n<e;n++){const o=t[n];s.add(o)}this.xr=s,this.Xt("linkDataArray",2,"linkDataArray",this,i,t);for(let n=0;n<e;n++){const o=t[n];this.YA(o)}}}get linkKeyProperty(){return this.sa}set linkKeyProperty(t){const i=this.sa;if(i!==t){this.jn(t,GraphLinksModel,"linkKeyProperty"),this.sa=t,this.Ui.clear();const e=this.linkDataArray.length;for(let s=0;s<e;s++){const n=this.linkDataArray[s];let o=this.getKeyForLinkData(n);o===void 0&&(this.makeLinkDataKeyUnique(n),o=this.getKeyForLinkData(n)),o!==void 0&&this.Ui.set(o,n)}this.t("linkKeyProperty",i,t)}}getKeyForLinkData(t){if(t===null)return;const i=this.sa;if(i==="")return;const e=this.Rt(t,i);if(e!==void 0){if(this.isKeyType(e))return e;U.n("Key value for link data "+t+" is not a number or a string: "+e)}}setKeyForLinkData(t,i){if((i==null||!this.isKeyType(i))&&U.Ii(i,"number or string",GraphLinksModel,"setKeyForLinkData:key"),t===null)return;const e=this.sa;if(e==="")return;if(!this.containsLinkData(t)){this.ft(t,e,i);return}const s=this.Rt(t,e);if(s!==i){if(this.findLinkDataForKey(i)!==null)return;this.ft(t,e,i),s!==void 0&&this.Ui.delete(s),this.Ui.set(i,t),this.Xt("linkKey",2,e,t,s,i),typeof e=="string"&&this.updateTargetBindings(t,e)}}get makeUniqueLinkKeyFunction(){return this.du}set makeUniqueLinkKeyFunction(t){const i=this.du;i!==t&&(t!==null&&U.C(t,GraphLinksModel,"makeUniqueLinkKeyFunction"),this.du=t,this.t("makeUniqueLinkKeyFunction",i,t))}findLinkDataForKey(t){return t===null&&U.n("GraphLinksModel.findLinkDataForKey:key must not be null"),t===void 0||!this.isKeyType(t)?null:this.Ui.get(t)}sk(t){return t===void 0?!1:this.Ui.has(t)}makeLinkDataKeyUnique(t){if(t===null)return;const i=this.sa;if(i==="")return;let e=this.getKeyForLinkData(t);if(e!==void 0&&!this.sk(e))return;const s=this.du;if(s!==null&&(e=s(this,t),e!=null&&!this.sk(e))){this.ft(t,i,e);return}if(typeof e=="string"){let n=2;for(;this.sk(e+n);)n++;this.ft(t,i,e+n)}else if(e===void 0||typeof e=="number"){let n=-this.Ui.count-1;for(;this.sk(n);)n--;this.ft(t,i,n)}else Debug&&U.n("GraphLinksModel.getKeyForLinkData returned something other than a string or a number: "+e)}containsLinkData(t){return t===null?!1:this.xr.has(t)}addLinkData(t){t!==null&&(this.containsLinkData(t)||this.SR(t,!0))}SR(t,i){if(this.linkKeyProperty!==""){let s=this.getKeyForLinkData(t);if(s===void 0)this.makeLinkDataKeyUnique(t),s=this.getKeyForLinkData(t);else{if(this.Ui.get(s)===t)return;this.makeLinkDataKeyUnique(t),s=this.getKeyForLinkData(t)}s===void 0&&U.n("GraphLinksModel.makeLinkDataKeyUnique failed on "+t+". Data not added to model."),this.Ui.set(s,t)}this.xr.add(t);let e=null;i&&(e=this.qs.length,this.wr(this.qs,e,t)),this.Xt("linkDataArray",3,"linkDataArray",this,null,t,null,e),this.YA(t)}addLinkDataCollection(t){if(Array.isArray(t)){const i=t.length;for(let e=0;e<i;e++)this.addLinkData(t[e])}else{const i=t.iterator;for(;i.next();){const e=i.value;this.addLinkData(e)}}}removeLinkData(t){t!==null&&this.bR(t,!0)}bR(t,i){this.xr.delete(t);const e=this.getKeyForLinkData(t);e!==void 0&&this.Ui.delete(e);let s=null;if(i){if(s=this.qs.indexOf(t),s<0)return;this.Oo(this.qs,s)}this.Xt("linkDataArray",4,"linkDataArray",this,t,null,s,null),this.G4(t)}removeLinkDataCollection(t){if(Array.isArray(t)){const i=t.length;for(let e=0;e<i;e++)this.removeLinkData(t[e])}else{const i=t.iterator;for(;i.next();){const e=i.value;this.removeLinkData(e)}}}mergeLinkDataArray(t){if(this.linkKeyProperty===""&&U.n("GraphLinksModel.linkKeyProperty must not be an empty string for .mergeLinkDataArray() to succeed."),t===this.linkDataArray||!Array.isArray(t))return;const i=new GSet;i.addAll(this.Ui.iteratorKeys);const e=new GSet,s=t.length;for(let o=0;o<s;o++){const r=t[o],l=this.getKeyForLinkData(r);if(l!==void 0){e.add(l);const h=this.findLinkDataForKey(l);if(h===r)continue;if(h!==null)this.assignAllDataProperties(h,r),this.zR(r,h);else{const a=this.cloneDeep(r);this.setKeyForLinkData(a,l),this.addLinkData(a)}}else{const h=this.cloneDeep(r);this.addLinkData(h);const a=this.getKeyForLinkData(h);a!==void 0&&e.add(a)}}const n=i.iterator;for(;n.next();){const o=n.value;if(!e.has(o)){const r=this.findLinkDataForKey(o);r&&this.removeLinkData(r)}}}YA(t){let i=this.je(t,!0);i=this.XA(i),this.findNodeDataForKey(i)===null&&this.yn(i,t),i=this.je(t,!1),i=this.XA(i),this.findNodeDataForKey(i)===null&&this.yn(i,t);const e=this.getLabelKeysForLinkData(t);if(Array.isArray(e)){const s=e.length;for(let n=0;n<s;n++)i=e[n],this.findNodeDataForKey(i)===null&&this.yn(i,t)}}G4(t){let i=this.je(t,!0);this.pn(i,t),i=this.je(t,!1),this.pn(i,t);const e=this.getLabelKeysForLinkData(t);if(Array.isArray(e)){const s=e.length;for(let n=0;n<s;n++)i=e[n],this.pn(i,t)}}get copyLinkDataFunction(){return this.gu}set copyLinkDataFunction(t){const i=this.gu;i!==t&&(t!==null&&U.C(t,GraphLinksModel,"copyLinkDataFunction"),this.gu=t,this.t("copyLinkDataFunction",i,t))}copyLinkData(t){let i;const e=this.gu;return e!==null?i=e(t,this):i=this.ek(t,!0),U.st(i)&&(this.Eo!==""&&this.ft(i,this.Eo,void 0),this.Bo!==""&&this.ft(i,this.Bo,void 0),this.wn!==""&&this.ft(i,this.wn,[])),i}get nodeIsGroupProperty(){return this.mu}set nodeIsGroupProperty(t){const i=this.mu;i!==t&&(this.jn(t,GraphLinksModel,"nodeIsGroupProperty"),this.mu=t,this.t("nodeIsGroupProperty",i,t))}isGroupForNodeData(t){if(t===null)return!1;const i=this.mu;return i===""?!1:!!this.Rt(t,i)}isGroupForData(t){return this.isGroupForNodeData(t)}get nodeGroupKeyProperty(){return this.El}set nodeGroupKeyProperty(t){const i=this.El;i!==t&&(this.jn(t,GraphLinksModel,"nodeGroupKeyProperty"),this.El=t,this.t("nodeGroupKeyProperty",i,t))}getGroupKeyForNodeData(t){if(t===null)return;const i=this.El;if(i==="")return;const e=this.Rt(t,i);if(e!==void 0){if(this.isKeyType(e))return e;U.n("GroupKey value for node data "+t+" is not a number or a string: "+e)}}getGroupForData(t){return this.getGroupKeyForNodeData(t)}setGroupKeyForNodeData(t,i){if(i===null&&(i=void 0),i!==void 0&&!this.isKeyType(i)&&U.Ii(i,"number or string",GraphLinksModel,"setGroupKeyForNodeData:key"),t===null)return;const e=this.El;if(e==="")return;if(!this.containsNodeData(t)){this.ft(t,e,i);return}const s=this.Rt(t,e);s!==i&&(this.pn(s,t),this.ft(t,e,i),this.findNodeDataForKey(i)===null&&this.yn(i,t),this.Xt("nodeGroupKey",2,e,t,s,i),typeof e=="string"&&this.updateTargetBindings(t,e))}setGroupForData(t,i){this.setGroupKeyForNodeData(t,i)}copyNodeData(t){const i=super.copyNodeData(t);return this.setGroupKeyForNodeData(i,void 0),i}set(t,i,e){if(Debug&&(U.Xo(t,GraphLinksModel,"set:data"),U.i(i,"string",GraphLinksModel,"set:propname"),i===""&&U.n("GraphLinksModel.set: property name must not be an empty string when setting "+t+" to "+e)),this.containsNodeData(t))if(i===this.nodeKeyProperty){this.setKeyForNodeData(t,e);return}else if(i===this.nodeCategoryProperty){this.setCategoryForNodeData(t,e);return}else if(i===this.nodeGroupKeyProperty){this.setGroupKeyForNodeData(t,e);return}else Debug&&i===this.nodeIsGroupProperty&&U.n("GraphLinksModel.set: property name must not be the nodeIsGroupProperty: "+i);else if(this.containsLinkData(t)){if(i===this.linkFromKeyProperty){this.zg(t,e,!0);return}else if(i===this.linkToKeyProperty){this.zg(t,e,!1);return}else if(i===this.linkFromPortIdProperty){this.Xg(t,e,!0);return}else if(i===this.linkToPortIdProperty){this.Xg(t,e,!1);return}else if(i===this.linkKeyProperty){this.setKeyForLinkData(t,e);return}else if(i===this.linkCategoryProperty){this.setCategoryForLinkData(t,e);return}else if(i===this.linkLabelKeysProperty){this.setLabelKeysForLinkData(t,e);return}}const s=this.Rt(t,i);s!==e&&(this.ft(t,i,e),this.raiseDataChanged(t,i,s,e))}assignAllDataProperties(t,i){if(!i)return;const e=this.containsNodeData(t),s=this.containsLinkData(t);for(const n in i)if(n!=="__gohashid"&&!(e&&n===this.nodeKeyProperty)){{if(e&&n===this.nodeIsGroupProperty&&this.Rt(t,n)===i[n])continue;if(s&&n===this.linkKeyProperty)continue}this.set(t,n,i[n])}}Aw(t,i){super.Aw(t,i);const e=this.Ti.iterator;for(;e.next();){const n=e.value;this.KA(n,t,i)}const s=this.xr.iterator;for(;s.next();){const n=s.value;this.q4(n,t,i)}}KA(t,i,e){if(this.getGroupKeyForNodeData(t)===i){const n=this.El;this.ft(t,n,e),this.Xt("nodeGroupKey",2,n,t,i,e),typeof n=="string"&&this.updateTargetBindings(t,n)}}q4(t,i,e){if(this.je(t,!0)===i){const r=this.Eo;this.ft(t,r,e),this.Xt("linkFromKey",2,r,t,i,e),typeof r=="string"&&this.updateTargetBindings(t,r)}if(this.je(t,!1)===i){const r=this.Bo;this.ft(t,r,e),this.Xt("linkToKey",2,r,t,i,e),typeof r=="string"&&this.updateTargetBindings(t,r)}const o=this.getLabelKeysForLinkData(t);if(Array.isArray(o)){const r=o.length,l=this.wn;for(let h=0;h<r;h++)o[h]===i&&(this.FR(o,h,e),this.Xt("linkLabelKeys",3,l,t,i,e,h,h))}}VA(){super.VA();const t=this.linkDataArray,i=t.length;for(let e=0;e<i;e++){const s=t[e];this.YA(s)}}jg(t){super.jg(t);const i=this.getKeyForNodeData(t),e=this.Sw(i);if(e!==null){const s=U.ct(),n=e.iterator;for(;n.next();){const o=n.value;if(this.containsNodeData(o)){if(this.getGroupKeyForNodeData(o)===i){const l=this.El;this.Xt("nodeGroupKey",2,l,o,i,i),typeof l=="string"&&this.updateTargetBindings(o,l),s.push(o)}}else{if(this.je(o,!0)===i){const a=this.Eo;this.Xt("linkFromKey",2,a,o,i,i),typeof a=="string"&&this.updateTargetBindings(o,a),s.push(o)}if(this.je(o,!1)===i){const a=this.Bo;this.Xt("linkToKey",2,a,o,i,i),typeof a=="string"&&this.updateTargetBindings(o,a),s.push(o)}const h=this.getLabelKeysForLinkData(o);if(Array.isArray(h)){const a=h.length,c=this.wn;for(let f=0;f<a;f++)h[f]===i&&(this.Xt("linkLabelKeys",3,c,o,i,i,f,f),s.push(o))}}}for(let o=0;o<s.length;o++)this.pn(i,s[o]);U.nt(s)}}Jg(t){super.Jg(t);const i=this.getGroupKeyForNodeData(t);this.findNodeDataForKey(i)===null&&this.yn(i,t)}Lw(t){super.Lw(t);const i=this.getGroupKeyForNodeData(t);this.pn(i,t)}get linkCategoryProperty(){return this.Ac}set linkCategoryProperty(t){const i=this.Ac;i!==t&&(this.jn(t,GraphLinksModel,"linkCategoryProperty"),this.Ac=t,this.t("linkCategoryProperty",i,t))}getCategoryForLinkData(t){if(t===null)return"";const i=this.Ac;if(i==="")return"";const e=this.Rt(t,i);if(e===void 0)return"";if(typeof e=="string")return e;U.n("getCategoryForLinkData found a non-string category for "+t+": "+e)}getLinkCategoryForData(t){return this.getCategoryForLinkData(t)}setCategoryForLinkData(t,i){if(U.i(i,"string",GraphLinksModel,"setCategoryForLinkData:cat"),t===null)return;const e=this.Ac;if(e==="")return;if(!this.containsLinkData(t)){this.ft(t,e,i);return}let s=this.Rt(t,e);s===void 0&&(s=""),s!==i&&(this.ft(t,e,i),this.Xt("linkCategory",2,e,t,s,i),typeof e=="string"&&this.updateTargetBindings(t,e))}setLinkCategoryForData(t,i){this.setCategoryForLinkData(t,i)}Wg(t,i){super.Wg(t,i),this.setGroupKeyForNodeData(i,this.getGroupKeyForNodeData(t))}zR(t,i){this.setCategoryForLinkData(i,this.getCategoryForLinkData(t)),this.setFromKeyForLinkData(i,this.getFromKeyForLinkData(t)),this.setToKeyForLinkData(i,this.getToKeyForLinkData(t)),this.setLabelKeysForLinkData(i,this.getLabelKeysForLinkData(t)),this.setFromPortIdForLinkData(i,this.getFromPortIdForLinkData(t)),this.setToPortIdForLinkData(i,this.getToPortIdForLinkData(t))}get type(){return"GraphLinksModel"}OP(){return!0}cc(){return!0}vx(){return!0}Dh(){return!0}static EmptyArray=Object.freeze([])}Model.Ol(GraphLinksModel,"GraphLinksModel"),Model.DR=()=>new GraphLinksModel,Model.j2=()=>new GraphLinksModel;class TreeModel extends Model{Bl;Tc;constructor(t,i){if(super(),this.Bl="parent",this.Tc="parentLinkCategory",t!==void 0&&(Array.isArray(t)?this.nodeDataArray=t:i=t),i){Object.assign(this,i);const e=i.Changed;e&&(delete this.Changed,this.addChangedListener(e))}}cloneProtected(t){super.cloneProtected(t),t.Bl=this.Bl,t.Tc=this.Tc}copy(){const t=new this.constructor;return this.cloneProtected(t),t}toString(t){if(t===void 0&&(t=0),t>=2)return this.toJson();{let i=(this.name!==""?this.name:"")+" TreeModel";if(t>0){i+=`
 node data:`;const e=this.nodeDataArray,s=e.length;for(let n=0;n<s;n++){const o=e[n];i+=" "+this.getKeyForNodeData(o)+":"+Binding.toString(o)}}return i}}vg(){const t=super.vg();let i="";return this.nodeParentKeyProperty!=="parent"&&typeof this.nodeParentKeyProperty=="string"&&(i+=`,
  "nodeParentKeyProperty": `+this.quote(this.nodeParentKeyProperty)),t+i}Cw(t){super.Cw(t),t.nodeParentKeyProperty&&(this.nodeParentKeyProperty=t.nodeParentKeyProperty)}Nw(t){t.nodeParentKeyProperty!==void 0&&t.nodeParentKeyProperty!==this.nodeParentKeyProperty&&U.n("applyIncrementalJson cannot change Model properties"),super.Nw(t)}maybeEnsureLinkReference(t){return t}get nodeParentKeyProperty(){return this.Bl}set nodeParentKeyProperty(t){const i=this.Bl;i!==t&&(this.jn(t,TreeModel,"nodeParentKeyProperty"),this.Bl=t,this.t("nodeParentKeyProperty",i,t))}getParentKeyForNodeData(t){if(t===null)return;const i=this.Bl;if(i==="")return;const e=this.Rt(t,i);if(e!==void 0){if(this.isKeyType(e))return e;U.n("ParentKey value for node data "+t+" is not a number or a string: "+e)}}setParentKeyForNodeData(t,i){if(i===null&&(i=void 0),i!==void 0&&!this.isKeyType(i)&&U.Ii(i,"number or string",TreeModel,"setParentKeyForNodeData:key"),t===null)return;const e=this.Bl;if(e==="")return;if(i=this.maybeEnsureLinkReference(i),!this.containsNodeData(t)){this.ft(t,e,i);return}const s=this.Rt(t,e);s!==i&&(this.pn(s,t),this.ft(t,e,i),this.findNodeDataForKey(i)===null&&this.yn(i,t),this.Xt("nodeParentKey",2,e,t,s,i),typeof e=="string"&&this.updateTargetBindings(t,e))}get parentLinkCategoryProperty(){return this.Tc}set parentLinkCategoryProperty(t){const i=this.Tc;i!==t&&(this.jn(t,TreeModel,"parentLinkCategoryProperty"),this.Tc=t,this.t("parentLinkCategoryProperty",i,t))}get linkCategoryProperty(){return this.parentLinkCategoryProperty}set linkCategoryProperty(t){this.parentLinkCategoryProperty=t}getParentLinkCategoryForNodeData(t){if(t===null)return"";const i=this.Tc;if(i==="")return"";const e=this.Rt(t,i);if(e===void 0)return"";if(typeof e=="string")return e;U.n("getParentLinkCategoryForNodeData found a non-string category for "+t+": "+e)}getLinkCategoryForData(t){return this.getParentLinkCategoryForNodeData(t)}setParentLinkCategoryForNodeData(t,i){if(U.i(i,"string",TreeModel,"setParentLinkCategoryForNodeData:cat"),t===null)return;const e=this.Tc;if(e==="")return;if(!this.containsNodeData(t)){this.ft(t,e,i);return}let s=this.Rt(t,e);s===void 0&&(s=""),s!==i&&(this.ft(t,e,i),this.Xt("parentLinkCategory",2,e,t,s,i),typeof e=="string"&&this.updateTargetBindings(t,e))}setLinkCategoryForData(t,i){this.setParentLinkCategoryForNodeData(t,i)}copyNodeData(t){const i=super.copyNodeData(t);return this.setParentKeyForNodeData(i,void 0),i}set(t,i,e){if(Debug&&(U.Xo(t,TreeModel,"set:data"),U.i(i,"string",TreeModel,"set:propname"),i===""&&U.n("TreeModel.set: property name must not be an empty string when setting "+t+" to "+e)),this.containsNodeData(t)){if(i===this.nodeKeyProperty){this.setKeyForNodeData(t,e);return}else if(i===this.nodeCategoryProperty){this.setCategoryForNodeData(t,e);return}else if(i===this.nodeParentKeyProperty){this.setParentKeyForNodeData(t,e);return}else if(i===this.parentLinkCategoryProperty){this.setParentLinkCategoryForNodeData(t,e);return}}const s=this.Rt(t,i);s!==e&&(this.ft(t,i,e),this.raiseDataChanged(t,i,s,e))}Aw(t,i){super.Aw(t,i);const e=this.Ti.iterator;for(;e.next();){const s=e.value;this.KA(s,t,i)}}KA(t,i,e){if(this.getParentKeyForNodeData(t)===i){const n=this.Bl;this.ft(t,n,e),this.Xt("nodeParentKey",2,n,t,i,e),typeof n=="string"&&this.updateTargetBindings(t,n)}}jg(t){super.jg(t);const i=this.getKeyForNodeData(t),e=this.Sw(i);if(e!==null){const s=U.ct(),n=e.iterator;for(;n.next();){const o=n.value;if(this.containsNodeData(o)&&this.getParentKeyForNodeData(o)===i){const l=this.Bl;this.Xt("nodeParentKey",2,l,o,i,i),typeof l=="string"&&this.updateTargetBindings(o,l),s.push(o)}}for(let o=0;o<s.length;o++)this.pn(i,s[o]);U.nt(s)}}Jg(t){super.Jg(t);let i=this.getParentKeyForNodeData(t);i=this.maybeEnsureLinkReference(i),this.findNodeDataForKey(i)===null&&this.yn(i,t)}Lw(t){super.Lw(t);const i=this.getParentKeyForNodeData(t);this.pn(i,t)}Wg(t,i){super.Wg(t,i),this.setParentLinkCategoryForNodeData(i,this.getParentLinkCategoryForNodeData(t)),this.setParentKeyForNodeData(i,this.getParentKeyForNodeData(t))}get type(){return"TreeModel"}Hx(){return!0}vx(){return!0}}Model.Ol(TreeModel,"TreeModel");var CircularArrangement=(w=>(w[w.ConstantSpacing=0]="ConstantSpacing",w[w.ConstantDistance=1]="ConstantDistance",w[w.ConstantAngle=2]="ConstantAngle",w[w.Packed=3]="Packed",w))(CircularArrangement||{}),CircularDirection=(w=>(w[w.Clockwise=10]="Clockwise",w[w.Counterclockwise=11]="Counterclockwise",w[w.BidirectionalLeft=12]="BidirectionalLeft",w[w.BidirectionalRight=13]="BidirectionalRight",w))(CircularDirection||{}),CircularSorting=(w=>(w[w.Forwards=20]="Forwards",w[w.Reverse=21]="Reverse",w[w.Ascending=22]="Ascending",w[w.Descending=23]="Descending",w[w.Optimized=24]="Optimized",w))(CircularSorting||{}),CircularNodeDiameterFormula=(w=>(w[w.Pythagorean=30]="Pythagorean",w[w.Circular=31]="Circular",w))(CircularNodeDiameterFormula||{});class CircularLayout extends Layout{be;pu;nk;$g;ok;na;UA;GA;qA;Hs;Dw;Fw;Lc;Rw;XR;Zg;Qg;_g;yu;te;P;Le;De;Wn;tm;constructor(t){super(),this.be=0,this.pu=0,this.nk=0,this.$g=360,this.ok=0,this.na=0,this.UA=new Point,this.GA=30,this.qA=0,this.Hs=0,this.Dw=0,this.Fw=new VertexArrangement,this.Lc=0,this.Rw=0,this.XR=600,this.Zg=NaN,this.Qg=1,this._g=0,this.yu=360,this.te=0,this.P=10,this.Le=24,this.De=LayoutVertex.standardComparer,this.Wn=6,this.tm=30,t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.Zg=this.Zg,t.Qg=this.Qg,t._g=this._g,t.yu=this.yu,t.te=this.te,t.P=this.P,t.Le=this.Le,t.De=this.De,t.Wn=this.Wn,t.tm=this.tm}yi(t){t in CircularSorting?this.sorting=t:t in CircularDirection?this.direction=t:t in CircularArrangement?this.arrangement=t:t in CircularNodeDiameterFormula?this.nodeDiameterFormula=t:super.yi(t)}createNetwork(){return new CircularNetwork(this)}H4(t,i,e){t=this.v4(t);let s=this.ok,n=this.GA,o=this.be,r=this.pu,l=this.nk,h=this.$g,a=this.na,c=this.qA,f=this.Hs,u=this.Dw;if(s=this.arrangement,n=this.nodeDiameterFormula,o=this.radius,(!isFinite(o)||o<=0)&&(o=NaN),r=this.aspectRatio,(!isFinite(r)||r<=0)&&(r=1),l=this.startAngle,isFinite(l)||(l=0),h=this.sweepAngle,(!isFinite(h)||h>360||h<1)&&(h=360),a=this.spacing,isFinite(a)||(a=NaN),s===3&&n===31?s=0:s===3&&n!==31&&(n=31,s=this.arrangement),(this.direction===12||this.direction===13)&&this.sorting!==24){for(let g=0;!(g>=t.length||(i.add(t.elt(g)),g+1>=t.length));g+=2)e.add(t.elt(g+1));this.direction===12?(this.arrangement===3&&i.reverse(),t=new List,t.addAll(i),t.addAll(e)):(this.arrangement===3&&e.reverse(),t=new List,t.addAll(e),t.addAll(i))}const d=t.length;c=0;let m=0;for(let g=0;g<t.length;g++){const p=l+h*m*(this.direction===10?1:-1)/d;let y=t.elt(g).diameter;isNaN(y)&&(y=t.elt(g).oa(p)),h<360&&(g===0||g===t.length-1)&&(y/=2),c+=y,m++}if(isNaN(o)||s===3){if(isNaN(a)&&(a=6),s!==0&&s!==3){let g=-1/0;for(let p=0;p<d;p++){const y=t.elt(p),x=t.elt(p===d-1?0:p+1);isNaN(y.diameter)&&y.oa(0),isNaN(x.diameter)&&x.oa(0),g=Math.max(g,(y.diameter+x.diameter)/2)}if(u=g+a,s===2){const p=2*Math.PI/d,y=(g+a)/p;r>1?(o=y,f=o*r):(f=y,o=f)}else o=this.rk(u*(h>=360?d:d-1),r,l*Math.PI/180,h*Math.PI/180)}else o=this.rk(c+(h>=360?d:d-1)*(s!==3?a:a*1.6),r,l*Math.PI/180,h*Math.PI/180);f=o*r}else{f=o*r;const g=this.HA(o,f,l*Math.PI/180,h*Math.PI/180);if(isNaN(a))s===0&&(a=(g-c)/(h>=360?d:d-1));else if(s===0){const p=(g-c)/(h>=360?d:d-1);p<a?(o=this.rk(c+a*(h>=360?d:d-1),r,l*Math.PI/180,h*Math.PI/180),f=o*r):a=p}else{let p=-1/0;for(let b=0;b<d;b++){const S=t.elt(b),k=t.elt(b===d-1?0:b+1);isNaN(S.diameter)&&S.oa(0),isNaN(k.diameter)&&k.oa(0),p=Math.max(p,(S.diameter+k.diameter)/2)}const y=p+a,x=this.rk(y*(h>=360?d:d-1),r,l*Math.PI/180,h*Math.PI/180);x>o?(o=x,f=o*r,u=y):u=g/(h>=360?d:d-1)}}return this.ok=s,this.GA=n,this.be=o,this.pu=r,this.nk=l,this.$g=h,this.na=a,this.qA=c,this.Hs=f,this.Dw=u,t}doLayout(t){Debug&&t===null&&U.n("Layout.doLayout(collection) argument must not be null but a Diagram, a Group, or an Iterable of Parts"),this.network===null&&(this.network=this.makeNetwork(t)),this.arrangementOrigin=this.initialOrigin(this.arrangementOrigin);const i=this.network.vertexes;if(i.count<=1){if(i.count===1){const u=i.first();u.centerX=0,u.centerY=0}this.updateParts(),this.network=null,this.isValidLayout=!0;return}let e=new List;e.addAll(i.iterator);const s=new List,n=new List;e=this.H4(e,s,n);const o=this.ok,r=this.be,l=this.nk,h=this.$g,a=this.na,c=this.Hs,f=this.Dw;if((this.direction===12||this.direction===13)&&o===3)this.YR(e,h,l-h/2,10);else if(this.direction===12||this.direction===13){let u=0;switch(o){case 1:u=this.lk(r,c,l,f)*180/Math.PI;break;case 0:{let d=0,m=0;const g=s.first();g!==null&&(d=g.oa(Math.PI/2));const p=n.first();p!==null&&(m=p.oa(Math.PI/2)),u=this.lk(r,c,l,a+(d+m)/2)*180/Math.PI;break}case 2:u=h/e.length;break}if(this.direction===12){switch(o){case 1:this.Iw(s,h/2,l,11);break;case 0:this.Ow(s,h/2,l,11);break;case 2:this.Ew(s,h/2,l,11);break}switch(o){case 1:this.Iw(n,h/2,l+u,10);break;case 0:this.Ow(n,h/2,l+u,10);break;case 2:this.Ew(n,h/2,l+u,10);break}}else{switch(o){case 1:this.Iw(n,h/2,l,11);break;case 0:this.Ow(n,h/2,l,11);break;case 2:this.Ew(n,h/2,l,11);break}switch(o){case 1:this.Iw(s,h/2,l+u,10);break;case 0:this.Ow(s,h/2,l+u,10);break;case 2:this.Ew(s,h/2,l+u,10);break}}}else switch(o){case 1:this.Iw(e,h,l,this.direction);break;case 0:this.Ow(e,h,l,this.direction);break;case 2:this.Ew(e,h,l,this.direction);break;case 3:this.YR(e,h,l,this.direction);break}this.updateParts(),this.network=null,this.isValidLayout=!0}Ew(t,i,e,s){const n=this.$g,o=this.be,r=this.Hs,l=e*Math.PI/180,h=i*Math.PI/180,a=t.length;for(let c=0;c<a;c++){const f=l+(s===10?c*h/(n>=360?a:a-1):-(c*h)/a),u=t.elt(c),d=o*Math.tan(f)/r,m=Math.sqrt((o*o+r*r*d*d)/(1+d*d));u.centerX=m*Math.cos(f),u.centerY=m*Math.sin(f),u.actualAngle=f*180/Math.PI}}Ow(t,i,e,s){const n=this.be,o=this.Hs,r=this.na;let l=e*Math.PI/180;const h=t.length;for(let a=0;a<h;a++){const c=t.elt(a),f=t.elt(a===h-1?0:a+1),u=n*Math.cos(l),d=o*Math.sin(l);c.centerX=u,c.centerY=d,c.actualAngle=l*180/Math.PI,isNaN(c.diameter)&&c.oa(0),isNaN(f.diameter)&&f.oa(0);const m=(c.diameter+f.diameter)/2,g=this.lk(n,o,s===10?l:-l,m+r);l+=s===10?g:-g}}Iw(t,i,e,s){const n=this.be,o=this.Hs,r=this.Dw;let l=e*Math.PI/180;const h=t.length;for(let a=0;a<h;a++){const c=t.elt(a);c.centerX=n*Math.cos(l),c.centerY=o*Math.sin(l),c.actualAngle=l*180/Math.PI;const f=this.lk(n,o,s===10?l:-l,r);l+=s===10?f:-f}}YR(t,i,e,s){let n=this.Rw;const o=this.$g;if(this.Lc=0,this.Fw=new VertexArrangement,i<360){for(n=e+(s===10?o:-o);n<0;)n+=360;n%=360,n>180&&(n-=360),n*=Math.PI/180,this.Rw=n,this.KR(t,i,e,s)}else this.UR(t,i,e,s);this.Fw.commit(t)}UR(t,i,e,s){const n=this.be,o=this.Hs,r=this.na,l=this.pu;let h=n*Math.cos(e*Math.PI/180),a=o*Math.sin(e*Math.PI/180);const c=t.toArray();if(c.length===3){c[0].centerX=n,c[0].centerY=0,c[1].centerX=c[0].centerX-c[0].width/2-c[1].width/2-r,c[1].y=c[0].y,c[2].centerX=(c[0].centerX+c[1].centerX)/2,c[2].y=c[0].y-c[2].height-r;return}else if(c.length===4){c[0].centerX=n,c[0].centerY=0,c[2].centerX=-c[0].centerX,c[2].centerY=c[0].centerY,c[1].centerX=0,c[1].y=Math.min(c[0].y,c[2].y)-c[1].height-r,c[3].centerX=0,c[3].y=Math.max(c[0].y+c[0].height+r,c[2].y+c[2].height+r);return}const f=Point.a();for(let S=0;S<c.length&&(c[S].centerX=h,c[S].centerY=a,!(S>=c.length-1));S++)this.GR(h,a,c,S,s,f)||this.qR(h,a,c,S,s,f),h=f.x,a=f.y;if(Point.o(f),this.Lc++,this.Lc>23)return;const u=c[0].centerX,d=c[0].centerY,m=c[c.length-1].centerX,g=c[c.length-1].centerY;let p=Math.abs(u-m)-((c[0].width+c[c.length-1].width)/2+r);const y=Math.abs(d-g)-((c[0].height+c[c.length-1].height)/2+r);let x=0;if(Math.abs(y)<1){const S=Math.abs(u-m),k=(c[0].width+c[c.length-1].width)/2;S<k&&(x=0),p=S-k}else y>0?x=y:Math.abs(p)<1?x=0:x=p;let b=!1;Math.abs(m)>Math.abs(g)?b=m>0!=d>g:b=g>0!=u<m,b=s===10?b:!b,b&&(x=-Math.abs(x),x=Math.min(x,-c[c.length-1].width),x=Math.min(x,-c[c.length-1].height)),this.Fw.W4(x,c),Math.abs(x)>1&&(this.Lc<8?this.be-=x/(2*Math.PI):c.length<5&&x>10?this.be/=2:this.be-=x>0?1.7:-2.3,this.Hs=this.be*l,this.UR(t,i,e,s))}KR(t,i,e,s){const n=this.be,o=this.Hs,r=this.pu;let l=n*Math.cos(e*Math.PI/180),h=o*Math.sin(e*Math.PI/180);const a=Point.a(),c=t.toArray();for(let m=0;m<c.length&&(c[m].centerX=l,c[m].centerY=h,!(m>=c.length-1));m++)this.GR(l,h,c,m,s,a)||this.qR(l,h,c,m,s,a),l=a.x,h=a.y;if(Point.o(a),this.Lc++,this.Lc>23)return;const f=Math.atan2(h,l);let u=s===10?this.Rw-f:f-this.Rw;u=Math.abs(u)<Math.abs(u-2*Math.PI)?u:u-2*Math.PI;const d=u*(n+o)/2;this.Fw.j4(d,c),Math.abs(d)>1&&(this.Lc<8?this.be-=d/(2*Math.PI):this.be-=d>0?1.7:-2.3,this.Hs=this.be*r,this.KR(t,i,e,s))}GR(t,i,e,s,n,o){const r=this.na,l=this.be,h=this.Hs;let a=0,c=0;const f=(e[s].width+e[s+1].width)/2+r;let u=!1;if(i>=0!=(n===10)){if(a=t+f,a>l){if(a=t-f,a<-l)return o.x=a,o.y=c,!1;u=!0}}else if(a=t-f,a<-l){if(a=t+f,a>l)return o.x=a,o.y=c,!1;u=!0}return c=Math.sqrt(1-Math.min(1,a*a/(l*l)))*h,i<0!==u&&(c=-c),Math.abs(i-c)>(e[s].height+e[s+1].height)/2?(o.x=a,o.y=c,!1):(o.x=a,o.y=c,!0)}qR(t,i,e,s,n,o){const r=this.na,l=this.be,h=this.Hs;let a=0,c=0;const f=(e[s].height+e[s+1].height)/2+r;let u=!1;if(t>=0!=(n===10)){if(c=i-f,c<-h){if(c=i+f,c>h)return o.x=a,o.y=c,!1;u=!0}}else if(c=i+f,c>h){if(c=i-f,c<-h)return o.x=a,o.y=c,!1;u=!0}return a=Math.sqrt(1-Math.min(1,c*c/(h*h)))*l,t<0!==u&&(a=-a),Math.abs(t-a)>(e[s].width+e[s+1].width)/2?(o.x=a,o.y=c,!1):(o.x=a,o.y=c,!0)}commitLayout(){this.commitNodes(),this.isRouting&&this.commitLinks()}commitNodes(){const t=this.group!==null&&this.group.hasPlaceholder(),i=t?this.group.location.copy():null;let e=this.actualCenter;if(t?e=new Point(0,0):(e.x=this.arrangementOrigin.x+this.be,e.y=this.arrangementOrigin.y+this.Hs),this.network!==null){const s=this.network.vertexes.iterator;for(;s.next();){const n=s.value;n.x+=e.x,n.y+=e.y,n.commit()}}if(t&&this.group&&i){this.group.ensureBounds();const s=this.group.position.copy(),n=this.group.location.copy(),o=i.subtract(n.subtract(s));this.group.move(o),this.UA=o.subtract(s)}}commitLinks(){if(this.network!==null){const t=this.network.edges.iterator;for(;t.next();)t.value.commit()}}HA(t,i,e,s){const n=this.XR;if(Math.abs(this.pu-1)<.001)return e!==void 0&&s!==void 0?s*t:2*Math.PI*t;const o=t>i?Math.sqrt(t*t-i*i)/t:Math.sqrt(i*i-t*t)/i;let r=0,l=0;e!==void 0&&s!==void 0?l=s/(n+1):l=Math.PI/(2*(n+1));let h=0;for(let a=0;a<=n;a++){e!==void 0&&s!==void 0?h=e+a*s/n:h=a*Math.PI/(2*n);const c=Math.sin(h);r+=Math.sqrt(1-o*o*c*c)*l}return e!==void 0&&s!==void 0?(t>i?t:i)*r:4*(t>i?t:i)*r}rk(t,i,e,s){let n=0;return e!==void 0&&s!==void 0?n=this.HA(1,i,e,s):n=this.HA(1,i),t/n}lk(t,i,e,s){if(Math.abs(this.pu-1)<.001)return s/t;const n=t>i?Math.sqrt(t*t-i*i)/t:Math.sqrt(i*i-t*t)/i;let o=0;const r=2*Math.PI/(this.network.vertexes.count*700);t>i&&(e+=Math.PI/2);for(let l=0;;l++){const h=e+l*r,a=Math.sin(h);if(o+=(t>i?t:i)*Math.sqrt(1-n*n*a*a)*r,o>=s)return l*r}}v4(t){switch(this.sorting){case 20:break;case 21:t.reverse();break;case 22:t.sort(this.comparer);break;case 23:t.sort(this.comparer),t.reverse();break;case 24:return this.J4(this.$4(t));default:U.n("Invalid sorting type.")}return t}$4(t){const i=[];for(let s=0;s<t.length;s++)i.push(0);const e=new List;for(let s=0;s<t.length;s++){let n=-1,o=-1;if(s===0)for(let c=0;c<t.length;c++){const u=t.elt(c).edgesCount;u>n&&(n=u,o=c)}else for(let c=0;c<t.length;c++){const f=i[c];f>n&&(n=f,o=c)}e.add(t.elt(o)),i[o]=-1;const r=t.elt(o);let l=0;const h=r.sourceEdges;for(;h.next();){const f=h.value.fromVertex;l=t.indexOf(f),!(l<0)&&i[l]>=0&&i[l]++}const a=r.destinationEdges;for(;a.next();){const f=a.value.toVertex;l=t.indexOf(f),!(l<0)&&i[l]>=0&&i[l]++}}return e}J4(t){const i=[];for(let f=0;f<t.length;f++){const u=t.elt(f);i[f]=[];let d=0;const m=u.destinationEdges;for(;m.next();){const p=m.value.toVertex;d=t.indexOf(p),d!==f&&i[f].indexOf(d)<0&&i[f].push(d)}const g=u.sourceEdges;for(;g.next();){const p=g.value.fromVertex;d=t.indexOf(p),d!==f&&i[f].indexOf(d)<0&&i[f].push(d)}}const e=[];for(let f=0;f<i.length;f++)e[f]=0;const s=[],n=[],o=[],r=[],l=new List;let h=0;for(let f=0;f<i.length;f++){const u=i[f].length;if(u===1){r.push(f);continue}if(u===0){l.add(t.elt(f));continue}if(h===0){s.push(f),h++;continue}let d=1/0,m=1/0,g=-1;const p=[];for(let y=0;y<s.length;y++)i[s[y]].indexOf(s[y===s.length-1?0:y+1])<0&&p.push(y===s.length-1?0:y+1);if(p.length===0)for(let y=0;y<s.length;y++)p.push(y);for(let y=0;y<p.length;y++){const x=p[y],b=this.Z4(i[f],n,o,e,x,s);let S=0;for(let k=0;k<i[f].length;k++){const P=i[f][k],A=s.indexOf(P);if(A>=0){const N=Math.abs(x-(A>=x?A+1:A));S+=N<s.length+1-N?N:s.length+1-N}}for(let k=0;k<n.length;k++){let P=e[n[k]],A=e[o[k]];if(P>=x&&P++,A>=x&&A++,P>A){const N=A;A=P,P=N}A-P<(s.length+2)/2==(P<x&&x<=A)&&S++}(b<d||b===d&&S<m)&&(d=b,m=S,g=x)}s.splice(g,0,f);for(let y=0;y<s.length;y++)e[s[y]]=y;for(let y=0;y<i[f].length;y++){const x=i[f][y];s.indexOf(x)>=0&&(n.push(f),o.push(x))}h++}let a=!1;const c=s.length;for(;;){a=!0;for(let f=0;f<r.length;f++){const u=r[f],d=i[u][0],m=s.indexOf(d);if(m>=0){let g=0;for(let p=0;p<i[d].length;p++){const y=i[d][p],x=s.indexOf(y);if(x<0||x===m)continue;const b=x>m?x-m:m-x,S=c-b;g+=x<m!=b>S?1:-1}s.splice(g<0?m:m+1,0,u),r.splice(f,1),f--}else a=!1}if(a)break;s.push(r[0]),r.splice(0,1)}for(let f=0;f<s.length;f++){const u=s[f];l.add(t.elt(u))}return l}Z4(t,i,e,s,n,o){let r=0;for(let l=0;l<i.length;l++){const h=i[l],a=e[l],c=s[h],f=s[a];let u=0,d=0;if(c<f?(u=c,d=f):(u=f,d=c),u<n&&n<=d)for(let m=0;m<t.length;m++){const g=t[m];o.indexOf(g)<0||u<s[g]&&s[g]<d||u===s[g]||d===s[g]||r++}else for(let m=0;m<t.length;m++){const g=t[m];o.indexOf(g)<0||!(u<s[g]&&s[g]<d)||u===s[g]||d===s[g]||r++}}return r}get radius(){return this.Zg}set radius(t){this.Zg!==t&&(U.i(t,"number",CircularLayout,"radius"),(t>0||isNaN(t))&&(this.Zg=t,this.w()))}get aspectRatio(){return this.Qg}set aspectRatio(t){this.Qg!==t&&(U.i(t,"number",CircularLayout,"aspectRatio"),t>0&&(this.Qg=t,this.w()))}get startAngle(){return this._g}set startAngle(t){this._g!==t&&(U.i(t,"number",CircularLayout,"startAngle"),this._g=t,this.w())}get sweepAngle(){return this.yu}set sweepAngle(t){this.yu!==t&&(U.i(t,"number",CircularLayout,"sweepAngle"),t>0&&t<=360?this.yu=t:this.yu=360,this.w())}get arrangement(){return this.te}set arrangement(t){this.te!==t&&(U.j(t,CircularArrangement,"CircularArrangement"),(t===3||t===0||t===1||t===2)&&(this.te=t,this.w()))}get direction(){return this.P}set direction(t){this.P!==t&&(U.j(t,CircularDirection,"CircularDirection"),(t===10||t===11||t===12||t===13)&&(this.P=t,this.w()))}get sorting(){return this.Le}set sorting(t){this.Le!==t&&(U.j(t,CircularSorting,"CircularSorting"),this.Le=t,this.w())}get comparer(){return this.De}set comparer(t){this.De!==t&&(U.C(t,CircularLayout,"comparer"),this.De=t,this.w())}get spacing(){return this.Wn}set spacing(t){this.Wn!==t&&(U.i(t,"number",CircularLayout,"spacing"),this.Wn=t,this.w())}get nodeDiameterFormula(){return this.tm}set nodeDiameterFormula(t){this.tm!==t&&(U.j(t,CircularNodeDiameterFormula,"CircularNodeDiameterFormula"),(t===30||t===31)&&(this.tm=t,this.w()))}get actualXRadius(){return this.be}get actualYRadius(){return this.Hs}get actualSpacing(){return this.na}get actualCenter(){return this.UA}static ConstantSpacing=0;static ConstantDistance=1;static ConstantAngle=2;static Packed=3;static Clockwise=10;static Counterclockwise=11;static BidirectionalLeft=12;static BidirectionalRight=13;static Forwards=20;static Reverse=21;static Ascending=22;static Descending=23;static Optimized=24;static Pythagorean=30;static Circular=31}class VertexArrangement{wu;Dc;xu;constructor(){this.wu=-1/0,this.Dc=null,this.xu=null}W4(t,i){if(t>0&&this.wu<0||Math.abs(t)<Math.abs(this.wu)&&!(t<0&&this.wu>0)){this.wu=t,this.Dc=[],this.xu=[];for(let e=0;e<i.length;e++)this.Dc[e]=i[e].bounds.x,this.xu[e]=i[e].bounds.y}}j4(t,i){if(Math.abs(t)<Math.abs(this.wu)){this.wu=t,this.Dc=[],this.xu=[];for(let e=0;e<i.length;e++)this.Dc[e]=i[e].bounds.x,this.xu[e]=i[e].bounds.y}}commit(t){if(!(this.Dc===null||this.xu===null))for(let i=0;i<this.Dc.length;i++){const e=t.elt(i);e.x=this.Dc[i],e.y=this.xu[i]}}}class CircularNetwork extends LayoutNetwork{constructor(t){super(t)}createVertex(){return new CircularVertex(this)}createEdge(){return new CircularEdge(this)}}class CircularVertex extends LayoutVertex{Vo;hk;constructor(t){super(t),this.Vo=NaN,this.hk=NaN}oa(t){const i=this.network;if(i===null)return NaN;const e=i.layout;if(e===null)return NaN;if(e.arrangement===3){if(e.nodeDiameterFormula===31)return this.Vo=Math.max(this.width,this.height),this.Vo;{const s=Math.abs(Math.sin(t)),n=Math.abs(Math.cos(t));return s===0?this.width:n===0?this.height:(this.Vo=Math.min(this.height/s,this.width/n),this.Vo)}}else return e.nodeDiameterFormula===31?(this.Vo=Math.max(this.width,this.height),this.Vo):(this.Vo=Math.sqrt(this.width*this.width+this.height*this.height),this.Vo)}get diameter(){return this.Vo}set diameter(t){this.Vo!==t&&(U.i(t,"number",CircularVertex,"diameter"),this.Vo=t)}get actualAngle(){return this.hk}set actualAngle(t){this.hk!==t&&(U.i(t,"number",CircularVertex,"actualAngle"),this.hk=t)}}class CircularEdge extends LayoutEdge{constructor(t){super(t)}}class ForceDirectedLayout extends Layout{Fc;ra;vs;im;Jn;Je;em;sm;nm;om;rm;lm;bu;Rc;Su;ku;hm;am;Pu;Ic;br;Vl;Bw;constructor(t){super(),this.Fc=0,this.ra=0,this.vs=new Size(100,100).S(),this.im=!1,this.Jn=!0,this.Je=!1,this.em=100,this.sm=300,this.nm=1,this.om=1/0,this.rm=1/0,this.lm={random:()=>U.wm()},this.bu=.05,this.Rc=50,this.Su=150,this.ku=0,this.hm=10,this.am=5,this.Pu=NaN,this.Ic=10,this.br=null,this.Vl=new Point(0,0),this.Bw=1.5,t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.vs.f(this.vs),t.im=this.im,t.Jn=this.Jn,t.Je=this.Je,t.em=this.em,t.sm=this.sm,t.nm=this.nm,t.om=this.om,t.rm=this.rm,t.lm=this.lm,t.bu=this.bu,t.Rc=this.Rc,t.Su=this.Su,t.ku=this.ku,t.hm=this.hm,t.am=this.am,t.Pu=this.Pu,t.Ic=this.Ic}createNetwork(){return new ForceDirectedNetwork(this)}doLayout(t){Debug&&t===null&&U.n("Layout.doLayout(collection) argument must not be null but a Diagram, a Group, or an Iterable of Parts"),this.network=this.makeNetwork(t);let i=this.network.vertexes.iterator;const e=this.maxIterations;if(this.network.vertexes.count>0){for(this.network.deleteSelfEdges(),i=this.network.vertexes.iterator;i.next();){const o=i.value;o.charge=this.electricalCharge(o),o.mass=this.gravitationalMass(o)}const s=this.network.edges.iterator;for(;s.next();){const o=s.value;o.stiffness=this.springStiffness(o),o.length=this.springLength(o)}if(this.vA(),this.ra=0,this.needsPrelayout()){const o=this.network,r=o.splitIntoSubNetworks(!1);let l=r.iterator;for(;l.next();){const h=l.value;this.doConnectedSubnetLayout(h)}for(l=r.iterator,this.Q4(l,o),l=r.iterator;l.next();){const h=l.value,a=h.vertexes.iterator;for(;a.next();){const f=a.value;o.addVertex(f)}const c=h.edges.iterator;for(;c.next();){const f=c.value;o.addEdge(f)}}}else this.HR(this.network,this.maxIterations);this.updateParts()}this.maxIterations=e,this.isValidLayout=!0}needsPrelayout(){if(this.network===null||this.network.vertexes.count<3)return!1;let t=0,i=0;const e=this.network.vertexes.first()?.bounds,s=this.network.vertexes.iterator;for(;s.next();){const n=s.value,o=n.bounds;if(isNaN(n.x)||isNaN(n.y)||e&&o.intersectsRect(e)&&(t++,t>2))return!0;if(i>10)return!1;i++}return!1}doConnectedSubnetLayout(t){let i=t.vertexes.iterator;for(;i.next();){const l=i.value;l.hierarchicalVertexes.add(l)}let e=t,s=this.Pu;if(isNaN(s)&&(s=t.edges.count/t.vertexes.count),s<t.vertexes.count)for(;e.vertexes.count>Math.max(100,Math.sqrt(s*t.vertexes.count));)e=this.coarsenNetwork(e);let n=0;i=e.vertexes.iterator;let o=this.randomNumberGenerator;for(o===null&&(this.randomNumberGenerator=o=new RandomNumberGenerator(0));i.next();){i.value.idInCluster=n++;const l=10*(o.random()-.5),h=10*(o.random()-.5);this.isFixed(i.value)||(i.value.x=l,i.value.y=h);const a=i.value.hierarchicalVertexes.iterator;for(;a.next();)this.isFixed(a.value)||(a.value.x=l,a.value.y=h)}const r=this.computePairwiseDistances(e);this._4(e,r,this.maxPrelayoutIterations,t.vertexes.count),this.HR(t,this.maxIterations)}computePairwiseDistances(t){const i=t.vertexes.count,e=new Array(i);for(let r=0;r<i;r++)e[r]=new Array(i).fill(-1),e[r][r]=0;const s=t.vertexes.iterator;let n=new Map,o=[];for(;s.next();){const r=s.value;o.length=0,o.push(r),n.clear(),n.set(r.idInCluster,0);let l=0;for(;l<o.length;){const h=o[l++],a=h.vertexes.iterator;for(;a.next();){const c=a.value;n.has(c.idInCluster)||(n.set(c.idInCluster,(n.get(h.idInCluster)??0)+1),o.push(c))}}for(let h=0;h<i;h++){const a=Math.min(e[r.idInCluster][h],e[h][r.idInCluster]),c=n.get(h)??0;(a<0||c<a)&&(e[r.idInCluster][h]=c,e[h][r.idInCluster]=c)}}return e}coarsenNetwork(t){const i=this.createNetwork(),e=new Map;let s=0,n=t.vertexes.iterator;for(;n.next();)n.value.idInCluster=s++;for(n=t.vertexes.iterator;n.next();){const r=n.value;if(e.has(r.idInCluster))continue;let l=Number.MAX_SAFE_INTEGER,h=null;const a=r.vertexes.iterator;for(;a.next();){const f=a.value;e.has(f.idInCluster)||f.hierarchicalVertexes.length<l&&(l=f.hierarchicalVertexes.length,h=f)}const c=i.createVertex();c.hierarchicalVertexes.addAll(r.hierarchicalVertexes),h!=null&&c.hierarchicalVertexes.addAll(h.hierarchicalVertexes),e.set(r.idInCluster,c),h!=null&&e.set(h.idInCluster,c),i.addVertex(c)}const o=t.edges.iterator;for(;o.next();){const r=o.value,l=e.get(r.fromVertex.idInCluster),h=e.get(r.toVertex.idInCluster);if(l===h)continue;const a=i.createEdge();a.fromVertex=l||null,a.toVertex=h||null,i.addEdge(a)}return i}Dx(t,i){let e=!0;const s=t.vertexes.iterator;for(;s.next();){const n=s.value;e?(e=!1,i.set(n.bounds)):i.unionRect(n.bounds)}return i}Q4(t,i){Debug&&U.s(i,ForceDirectedNetwork,ForceDirectedLayout,"arrangeConnectedGraphs:singletons");const e=this.arrangementSpacing,s=t.count;let n=!0,o=0,r=0;const l=U.ct();for(let f=0;f<s+i.vertexes.count+2;f++)l[f]=null;let h=0;t.reset();const a=Rect.a();let c;for(;t.next();){const f=t.value;if(this.Dx(f,a),n)n=!1,o=a.x+a.width/2,r=a.y+a.height/2,l[0]=new Point(a.x+a.width+e.width,a.y),l[1]=new Point(a.x,a.y+a.height+e.height),h=2;else{const u=this.vR(l,h,o,r,a.width,a.height,e),d=l[u];if(d){const m=new Point(d.x+a.width+e.width,d.y),g=new Point(d.x,d.y+a.height+e.height);u+1<h&&l.splice(u+1,0,null),l[u]=m,l[u+1]=g,h++;const p=d.x-a.x,y=d.y-a.y;for(c=f.vertexes.iterator;c.next();){const x=c.value;this.isFixed(x)||(x.centerX+=p,x.centerY+=y)}}}}for(Rect.o(a),c=i.vertexes.iterator;c.next();){const f=c.value,u=f.bounds;if(h<2){o=u.x+u.width/2,r=u.y+u.height/2,l[0]=new Point(u.x+u.width+e.width,u.y),l[1]=new Point(u.x,u.y+u.height+e.height),h=2;continue}const d=this.vR(l,h,o,r,u.width,u.height,e),m=l[d];if(m){const g=new Point(m.x+u.width+e.width,m.y),p=new Point(m.x,m.y+u.height+e.height);d+1<h&&l.splice(d+1,0,null),l[d]=g,l[d+1]=p,h++,this.isFixed(f)||(f.centerX=m.x+f.width/2,f.centerY=m.y+f.height/2)}}U.nt(l)}vR(t,i,e,s,n,o,r){let l=9e19,h=-1;t:for(let a=0;a<i;a++){const c=t[a];if(c!==null){const f=c.x-e,u=c.y-s,d=f*f+u*u;if(d<l){for(let m=a-1;m>=0;m--)if(t[m]!==null&&t[m].y>c.y&&t[m].x-c.x<n+r.width)continue t;for(let m=a+1;m<i;m++)if(t[m]!==null&&t[m].x>c.x&&t[m].y-c.y<o+r.height)continue t;h=a,l=d}}}return h}vA(){if(this.network===null||!this.comments)return;const t=this.network.vertexes.iterator;for(;t.next();){const i=t.value;this.addComments(i)}}addComments(t){if(this.network===null)return;const i=t.node;if(i!==null){const e=i.findNodesConnected();for(;e.next();){const s=e.value;if(s.category!=="Comment"||!s.isVisible())continue;let n=this.network.findVertex(s);n===null&&(n=this.network.addNode(s)),n.charge=this.defaultCommentElectricalCharge;let o=null;const r=n.destinationEdges;for(;r.next();){const l=r.value;if(l.toVertex===t){o=l;break}}if(o===null){const l=n.sourceEdges;for(;l.next();){const h=l.value;if(h.fromVertex===t){o=h;break}}}o===null&&(o=this.network.linkVertexes(t,n,null)),o.length=this.defaultCommentSpringLength}}}WR(t,i){const e=t.bounds,s=e.x,n=e.y,o=e.width,r=e.height,l=i.bounds,h=l.x,a=l.y,c=l.width,f=l.height;if(s+o<h)if(n>a+f){const u=s+o-h,d=n-a-f;return Math.sqrt(u*u+d*d)}else if(n+r<a){const u=s+o-h,d=n+r-a;return Math.sqrt(u*u+d*d)}else return h-(s+o);else if(s>h+c)if(n>a+f){const u=s-h-c,d=n-a-f;return Math.sqrt(u*u+d*d)}else if(n+r<a){const u=s-h-c,d=n+r-a;return Math.sqrt(u*u+d*d)}else return s-(h+c);else return n>a+f?n-(a+f):n+r<a?a-(n+r):.1}tB(t){const i=t.vertexes;if(i.size===0){this.br=null;return}let e=1/0,s=1/0,n=-1/0,o=-1/0;i.each(d=>{const m=d.bounds,g=d.focus,p=m.x+g.x,y=m.y+g.y;p<e&&(e=p),p>n&&(n=p),y<s&&(s=y),y>o&&(o=y)});const r=n-e,l=o-s,h=Math.max(r,l,1)*1.01,a=(e+n)/2,c=(s+o)/2,f=a-h/2,u=c-h/2;this.br===null?this.br=new Quadtree(f,u,h,h,1,50):(this.br.clear(),this.br.bounds.e(f,u,h,h)),i.each(d=>{const m=d.bounds,g=d.focus,p=m.x+g.x,y=m.y+g.y;d.WA.e(p,y,0,0),this.br&&this.br.set(d,d.WA)}),this.br.computeAggregates(ForceDirectedLayout.iB,ForceDirectedLayout.eB)}static iB(t,i){let e=0,s=0,n=0;for(const[l,h]of t){const a=2*l.charge;e+=a,s+=h.x*a,n+=h.y*a}let o=e===0?i.x+i.width/2:s/e,r=e===0?i.y+i.height/2:n/e;return[e,o,r]}static eB(t,i){let e=0,s=0,n=0;for(const l of t){const h=l[0]||0,a=l[1]||0,c=l[2]||0;e+=h,s+=a*h,n+=c*h}let o=e===0?i.x+i.width/2:s/e,r=e===0?i.y+i.height/2:n/e;return[e,o,r]}jR(t,i,e,s){const n=s.aggregates;if(n===null||n.length<3)return;const o=n[0];if(o===0)return;const r=n[1],l=n[2],h=i-r,a=e-l,c=h*h+a*a,f=this.infinityDistance;if(c>f*f)return;const u=s.bounds.width,d=this.Bw;if(!s.isLeaf&&u*u<c*d*d){if(c>1){const g=Math.sqrt(c),x=2*t.charge*o/c;this.Vl.x+=x*h/g,this.Vl.y+=x*a/g}}else if(s.isLeaf)for(const[g,p]of s.objects){if(g===t||!this.shouldInteract(t,g))continue;const y=p.x,x=p.y,b=i-y,S=e-x,k=b*b+S*S;if(k>1){const P=Math.sqrt(k),A=2*t.charge,N=2*g.charge,M=A*N/k;this.Vl.x+=M*b/P,this.Vl.y+=M*S/P}else{let P=this.randomNumberGenerator;P===null&&(this.randomNumberGenerator=P=new RandomNumberGenerator(0));const A=P.random(),N=P.random(),M=2*t.charge,C=2*g.charge;this.Vl.x+=M*C*(A-.5),this.Vl.y+=M*C*(N-.5)}}else for(let g=0;g<s.subTrees.length;g++)this.jR(t,i,e,s.subTrees[g])}HR(t,i){const e=this.ra+i,s=t.vertexes.count;for(this.Fc=this.Rc*Math.sqrt(s);this.ra<e&&(this.ra++,this.tB(t),!!this.sB(t));)this.Fc*=.985}sB(t){const i=t.vertexes;if(i.size<=0)return!1;const e=i.first();if(!e)return!1;e.forceX=0,e.forceY=0;let s=e.centerX,n=s,o=e.centerY,r=o;i.each(f=>{f.forceX=0,f.forceY=0;const u=f.centerX,d=f.centerY;s=Math.min(s,u),n=Math.max(n,u),o=Math.min(o,d),r=Math.max(r,d)});let l=0,h=0;i.each(f=>{const u=f.bounds,d=f.focus,m=u.x+d.x,g=u.y+d.y;l=f.charge*this.electricalFieldX(m,g),h=f.charge*this.electricalFieldY(m,g),l+=f.mass*this.gravitationalFieldX(m,g),h+=f.mass*this.gravitationalFieldY(m,g),f.forceX+=l,f.forceY+=h,this.br!==null&&(this.Vl.e(0,0),this.jR(f,m,g,this.br),f.forceX+=this.Vl.x,f.forceY+=this.Vl.y)});const a=t.edges.iterator;for(;a.next();){const f=a.value,u=f.fromVertex,d=f.toVertex,m=u.bounds,g=u.focus,p=m.x+g.x,y=m.y+g.y,x=d.bounds,b=d.focus,S=x.x+b.x,k=x.y+b.y,P=this.WR(u,d);if(P>1){let N=.1*f.stiffness*(P-f.length);l=N*.5*(u.width+d.height)*(p-S)/P,h=N*.5*(u.width+d.height)*(y-k)/P}u.forceX-=l,u.forceY-=h,d.forceX+=l,d.forceY+=h}let c=0;return i.each(f=>{this.isFixed(f)?this.moveFixedVertex(f):c=Math.max(c,this.moveVertex(f)||0)}),c>this.epsilonDistance*this.epsilonDistance}_4(t,i,e,s){Debug&&U.r(e,ForceDirectedLayout,"performIterations:num");const n=this.ra+e,o=Math.sqrt(s);this.Fc=this.Ic*t.vertexes.count;const r=t.vertexes.toArray();let l=0,h=0,a=0;for(;this.ra<n;){this.ra++,h=l,l=0;for(let c=0;c<r.length;c++){r[c].forceX=0,r[c].forceY=0;for(let u=0;u<r.length;u++){if(c===u)continue;const d=this.WR(r[c],r[u]),m=i[r[c].idInCluster][r[u].idInCluster],g=(d-this.Ic*o*m)/d;r[c].forceX+=g*(r[u].x-r[c].x),r[c].forceY+=g*(r[u].y-r[c].y)}const f=Math.sqrt(r[c].forceX*r[c].forceX+r[c].forceY*r[c].forceY);if(f>0){r[c].forceX=this.Fc*r[c].forceX/f,r[c].forceY=this.Fc*r[c].forceY/f,this.isFixed(r[c])||(r[c].x+=r[c].forceX,r[c].y+=r[c].forceY);const u=r[c].hierarchicalVertexes.iterator;for(;u.next();){const d=u.value;this.isFixed(d)||(d.centerX+=r[c].forceX,d.centerY+=r[c].forceY)}}l+=f*f}if(l>=h){if(a++,a>=5)break}else a=0;this.Fc*=.95}}moveVertex(t){let i=t.forceX,e=t.forceY;const s=i*i+e*e,n=Math.min(this.Fc,this.moveLimit),o=Math.max(n,this.epsilonDistance),r=o*o;if(s>r){const l=o/Math.sqrt(s);i*=l,e*=l}return t.centerX+=i,t.centerY+=e,i*i+e*e}shouldInteract(t,i){return!0}moveFixedVertex(t){}commitLayout(){this.Vw(),this.commitNodes(),this.isRouting&&this.commitLinks()}Vw(){if(this.network===null||!this.setsPortSpots)return;const t=this.network.edges.iterator;for(;t.next();){const e=t.value.link;e!==null&&(e.fromSpot=Spot.Default,e.toSpot=Spot.Default)}}commitNodes(){if(!this.network)return;let t=0,i=0;if(this.arrangesToOrigin){const n=Rect.a();this.Dx(this.network,n);const o=this.arrangementOrigin;t=o.x-n.x,i=o.y-n.y,Rect.o(n)}const e=Rect.a(),s=this.network.vertexes.iterator;for(;s.next();){const n=s.value;(t!==0||i!==0)&&(e.f(n.bounds),e.x+=t,e.y+=i,n.bounds=e),n.commit()}Rect.o(e)}commitLinks(){if(!this.network)return;const t=this.network.edges.iterator;for(;t.next();)t.value.commit()}springStiffness(t){const i=t.stiffness;return isNaN(i)?this.bu:i}springLength(t){const i=t.length;return isNaN(i)?this.Rc:i}electricalCharge(t){const i=t.charge;return isNaN(i)?this.Su:i}electricalFieldX(t,i){return 0}electricalFieldY(t,i){return 0}gravitationalMass(t){const i=t.mass;return isNaN(i)?this.ku:i}gravitationalFieldX(t,i){return 0}gravitationalFieldY(t,i){return 0}isFixed(t){return t.isFixed}get currentIteration(){return this.ra}get arrangementSpacing(){return this.vs}set arrangementSpacing(t){U.s(t,Size,ForceDirectedLayout,"arrangementSpacing"),this.vs.equals(t)||(this.vs.f(t),this.w())}get arrangesToOrigin(){return this.im}set arrangesToOrigin(t){this.im!==t&&(U.i(t,"boolean",ForceDirectedLayout,"arrangesToOrigin"),this.im=t,this.w())}get setsPortSpots(){return this.Jn}set setsPortSpots(t){this.Jn!==t&&(U.i(t,"boolean",ForceDirectedLayout,"setsPortSpots"),this.Jn=t,this.w())}get comments(){return this.Je}set comments(t){this.Je!==t&&(U.i(t,"boolean",ForceDirectedLayout,"comments"),this.Je=t,this.w())}get maxPrelayoutIterations(){return this.em}set maxPrelayoutIterations(t){this.em!==t&&(U.i(t,"number",ForceDirectedLayout,"maxPrelayoutIterations"),t>=0&&(this.em=t,this.w()))}get maxIterations(){return this.sm}set maxIterations(t){this.sm!==t&&(U.i(t,"number",ForceDirectedLayout,"maxIterations"),t>=0&&(this.sm=t,this.w()))}get epsilonDistance(){return this.nm}set epsilonDistance(t){this.nm!==t&&(U.i(t,"number",ForceDirectedLayout,"epsilonDistance"),t>0&&(this.nm=t,this.w()))}get infinityDistance(){return this.om}set infinityDistance(t){this.om!==t&&(U.i(t,"number",ForceDirectedLayout,"infinityDistance"),t>1&&(this.om=t,this.w()))}get moveLimit(){return this.rm}set moveLimit(t){this.rm!==t&&t>=0&&(U.i(t,"number",ForceDirectedLayout,"moveLimit"),this.rm=t,this.w())}get randomNumberGenerator(){return this.lm}set randomNumberGenerator(t){this.lm!==t&&(t!==null&&!U.at(t.random)&&U.n('ForceDirectedLayout.randomNumberGenerator must have a "random()" function on it: '+t),this.lm=t)}get defaultSpringStiffness(){return this.bu}set defaultSpringStiffness(t){this.bu!==t&&(U.i(t,"number",ForceDirectedLayout,"defaultSpringStiffness"),this.bu=t,this.w())}get defaultSpringLength(){return this.Rc}set defaultSpringLength(t){this.Rc!==t&&(U.i(t,"number",ForceDirectedLayout,"defaultSpringLength"),this.Rc=t,this.w())}get defaultElectricalCharge(){return this.Su}set defaultElectricalCharge(t){this.Su!==t&&(U.i(t,"number",ForceDirectedLayout,"defaultElectricalCharge"),this.Su=t,this.w())}get defaultGravitationalMass(){return this.ku}set defaultGravitationalMass(t){this.ku!==t&&(U.i(t,"number",ForceDirectedLayout,"defaultGravitationalMass"),this.ku=t,this.w())}get defaultCommentSpringLength(){return this.hm}set defaultCommentSpringLength(t){this.hm!==t&&(U.i(t,"number",ForceDirectedLayout,"defaultCommentSpringLength"),this.hm=t,this.w())}get defaultCommentElectricalCharge(){return this.am}set defaultCommentElectricalCharge(t){this.am!==t&&(U.i(t,"number",ForceDirectedLayout,"defaultCommentElectricalCharge"),this.am=t,this.w())}get prelayoutQuality(){return this.Pu}set prelayoutQuality(t){this.Pu!==t&&(U.i(t,"number",ForceDirectedLayout,"prelayoutQuality"),this.Pu=t,this.w())}get prelayoutSpread(){return this.Ic}set prelayoutSpread(t){this.Ic!==t&&(U.i(t,"number",ForceDirectedLayout,"prelayoutSpread"),this.Ic=t,this.w())}get theta(){return this.Bw}set theta(t){this.Bw!==t&&(U.i(t,"number",ForceDirectedLayout,"theta"),this.Bw=t,this.w())}}class ForceDirectedNetwork extends LayoutNetwork{constructor(t){super(t)}createVertex(){return new ForceDirectedVertex(this)}createEdge(){return new ForceDirectedEdge(this)}}class ForceDirectedVertex extends LayoutVertex{ak;ck;fk;uk;dk;hierarchicalVertexes;idInCluster;WA;constructor(t){super(t),this.ak=!1,this.ck=NaN,this.fk=NaN,this.uk=0,this.dk=0,this.hierarchicalVertexes=new List,this.idInCluster=-1,this.WA=new Rect(0,0,0,0)}get isFixed(){return this.ak}set isFixed(t){this.ak!==t&&(U.i(t,"boolean",ForceDirectedVertex,"isFixed"),this.ak=t)}get charge(){return this.ck}set charge(t){this.ck!==t&&(U.i(t,"number",ForceDirectedVertex,"charge"),this.ck=t)}get mass(){return this.fk}set mass(t){this.fk!==t&&(U.i(t,"number",ForceDirectedVertex,"mass"),this.fk=t)}get forceX(){return this.uk}set forceX(t){this.uk!==t&&(U.i(t,"number",ForceDirectedVertex,"forceX"),this.uk=t)}get forceY(){return this.dk}set forceY(t){this.dk!==t&&(U.i(t,"number",ForceDirectedVertex,"forceY"),this.dk=t)}}class ForceDirectedEdge extends LayoutEdge{gk;mk;constructor(t){super(t),this.gk=NaN,this.mk=NaN}get stiffness(){return this.gk}set stiffness(t){this.gk!==t&&(U.i(t,"number",ForceDirectedEdge,"stiffness"),this.gk=t)}get length(){return this.mk}set length(t){this.mk!==t&&(U.i(t,"number",ForceDirectedEdge,"length"),this.mk=t)}}class RandomNumberGenerator{I;R;Q;M;A;seed;constructor(t){t===void 0&&(t=42),this.seed=t,this.A=48271,this.M=2147483647,this.Q=this.M/this.A,this.R=this.M%this.A,this.I=1/this.M,this.random()}random(){const t=this.seed/this.Q,i=this.seed%this.Q,e=this.A*i-this.R*t;return e>0?this.seed=e:this.seed=e+this.M,this.seed*this.I}}var LayeredDigraphCycleRemove=(w=>(w[w.DepthFirst=0]="DepthFirst",w[w.Greedy=1]="Greedy",w[w.FromLayers=2]="FromLayers",w))(LayeredDigraphCycleRemove||{}),LayeredDigraphLayering=(w=>(w[w.OptimalLinkLength=10]="OptimalLinkLength",w[w.LongestPathSink=11]="LongestPathSink",w[w.LongestPathSource=12]="LongestPathSource",w))(LayeredDigraphLayering||{}),LayeredDigraphInit=(w=>(w[w.DepthFirstOut=20]="DepthFirstOut",w[w.DepthFirstIn=21]="DepthFirstIn",w[w.Naive=22]="Naive",w))(LayeredDigraphInit||{}),LayeredDigraphAggressive=(w=>(w[w.None=30]="None",w[w.Less=31]="Less",w[w.More=32]="More",w))(LayeredDigraphAggressive||{}),LayeredDigraphPack=(w=>(w[w.None=0]="None",w[w.Expand=1]="Expand",w[w.Straighten=2]="Straighten",w[w.Median=4]="Median",w[w.MaybeExpand=8]="MaybeExpand",w[w.All=15]="All",w))(LayeredDigraphPack||{}),LayeredDigraphAlign=(w=>(w[w.None=0]="None",w[w.UpperLeft=1]="UpperLeft",w[w.UpperRight=2]="UpperRight",w[w.LowerLeft=4]="LowerLeft",w[w.LowerRight=8]="LowerRight",w[w.All=15]="All",w))(LayeredDigraphAlign||{});class LayeredDigraphLayout extends Layout{Ws;le;P;Mu;Cu;Nu;Oc;Au;Sr;Tu;Jn;ot;zw;Wt;cm;js;ci;Js;Ss;ks;Yt;fm;um;pk;xn;Lu;kr;$n;Zn;jA;la;constructor(t){super(),this.Ws=25,this.le=25,this.P=0,this.Mu=0,this.Cu=10,this.Nu=20,this.Oc=4,this.Au=31,this.Sr=15,this.Tu=10,this.Jn=!0,this.ot=-1,this.zw=-1,this.Wt=-1,this.cm=0,this.js=0,this.ci=new Int16Array(0),this.Js=new Float32Array(0),this.Ss=new Float32Array(0),this.ks=new Float32Array(0),this.Yt=new Float32Array(0),this.fm=0,this.um=new Int16Array(0),this.pk=new Int16Array(0),this.xn=0,this.Lu=null,this.kr=new Point,this.$n=[],this.$n.length=100,this.Zn=15,this.jA=0,this.la=!0,t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.Ws=this.Ws,t.le=this.le,t.P=this.P,t.Mu=this.Mu,t.Cu=this.Cu,t.Nu=this.Nu,t.Oc=this.Oc,t.Au=this.Au,t.Sr=this.Sr,t.Tu=this.Tu,t.Jn=this.Jn,t.Zn=this.Zn,t.la=this.la}yi(t){t in LayeredDigraphAggressive?this.aggressiveOption=t:t in LayeredDigraphCycleRemove?this.cycleRemoveOption=t:t in LayeredDigraphInit?this.initializeOption=t:t in LayeredDigraphLayering?this.layeringOption=t:super.yi(t)}createNetwork(){return new LayeredDigraphNetwork(this)}doLayout(t){Debug&&t===null&&U.n("Layout.doLayout(collection) argument must not be null but a Diagram, a Group, or an Iterable of Parts"),this.network===null&&(this.network=this.makeNetwork(t)),this.arrangementOrigin=this.initialOrigin(this.arrangementOrigin),this.nB(),this.network.vertexes.count>0&&(this.network.deleteSelfEdges(),this.cycleRemoveOption!==2&&this.removeCycles(),this.oB(),this.cycleRemoveOption===2&&this.removeCycles(),this.rB(),this.lB(),this.hB(),this.reduceCrossings(),this.straightenAndPack(),this.updateParts()),this.network=null,this.isValidLayout=!0}linkMinLength(t){return 1}linkLengthWeight(t){return 1}linkStraightenWeight(t){const i=t.fromVertex.node||t.fromVertex.data,e=t.toVertex.node||t.toVertex.data;return i===null&&e===null?8:i===null||e===null?4:1}nodeMinLayerSpace(t,i){return t.node===null&&t.data===null?0:this.P===90||this.P===270?i?t.focus.y+10:t.bounds.height-t.focus.y+10:i?t.focus.x+10:t.bounds.width-t.focus.x+10}nodeMinColumnSpace(t,i){if(t.node===null&&t.data===null)return 0;const e=i?t.yk:t.wk;if(e!==null)return e;const s=this.P;return s===90||s===270?i?t.yk=t.focus.x/this.le+1|0:t.wk=(t.bounds.width-t.focus.x)/this.le+1|0:i?t.yk=t.focus.y/this.le+1|0:t.wk=(t.bounds.height-t.focus.y)/this.le+1|0}he(){const t=this.network.vertexes.count;this.um.length<t*2&&(this.um=new Int16Array(t*2));let i=0;const e=this.network.vertexes.iterator;for(;e.next();){const s=e.value;this.um[i]=s.column,i++,this.um[i]=s.index,i++}return this.um}ds(t){let i=0;const e=this.network.vertexes.iterator;for(;e.next();){const s=e.value;s.column=t[i],i++,s.index=t[i],i++}}JR(t,i){Debug&&(U.r(t,LayeredDigraphLayout,"crossingMatrix:unfixedLayer"),U.r(i,LayeredDigraphLayout,"crossingMatrix:direction"));const e=this.ha(t),s=this.ci[t];this.pk.length<s*s&&(this.pk=new Int16Array(s*s));const n=this.pk;for(let o=0;o<s;o++){let r=0;const l=e[o],h=l.near;let a=0;h!==null&&h!==l&&h.layer===l.layer&&(r+=Math.max(0,Math.abs(h.index-l.index)-1));let c,f=0,u,d=0,m=0,g=0,p,y=0,x,b=0,S=0,k=0,P;if(i>=0){for(c=e[o].Ro,f=0;f<c.length;f++)if(u=c[f],u.valid&&u.fromVertex.layer!==t)for(d=u.fromVertex.index,m=u.portToPos,g=u.portFromPos,y=f+1;y<c.length;y++)x=c[y],x.valid&&x.fromVertex.layer!==t&&(b=x.fromVertex.index,S=x.portToPos,k=x.portFromPos,m<S&&(d>b||d===b&&g>k)&&r++,S<m&&(b>d||b===d&&k>g)&&r++)}if(i<=0){for(c=e[o].pr,f=0;f<c.length;f++)if(u=c[f],u.valid&&u.toVertex.layer!==t)for(d=u.toVertex.index,m=u.portToPos,g=u.portFromPos,y=f+1;y<c.length;y++)x=c[y],x.valid&&x.toVertex.layer!==t&&(b=x.toVertex.index,S=x.portToPos,k=x.portFromPos,g<k&&(d>b||d===b&&m>S)&&r++,k<g&&(b>d||b===d&&S>m)&&r++)}for(n[o*s+o]=r,a=o+1;a<s;a++){let A=0,N=0;if(i>=0){for(p=e[o].Ro,P=e[a].Ro,f=0;f<p.length;f++)if(u=p[f],u.valid&&u.fromVertex.layer!==t)for(d=u.fromVertex.index,m=u.portToPos,g=u.portFromPos,y=0;y<P.length;y++)x=P[y],x.valid&&x.fromVertex.layer!==t&&(b=x.fromVertex.index,S=x.portToPos,k=x.portFromPos,(d<b||d===b&&g<k)&&N++,(b<d||b===d&&k<g)&&A++)}if(i<=0){for(p=e[o].pr,P=e[a].pr,f=0;f<p.length;f++)if(u=p[f],u.valid&&u.toVertex.layer!==t)for(d=u.toVertex.index,m=u.portToPos,g=u.portFromPos,y=0;y<P.length;y++)x=P[y],x.valid&&x.toVertex.layer!==t&&(b=x.toVertex.index,S=x.portToPos,k=x.portFromPos,(d<b||d===b&&m<S)&&N++,(b<d||b===d&&S<m)&&A++)}n[o*s+a]=A,n[a*s+o]=N}}return this.aa(t,e),n}countCrossings(){let t=0;for(let i=0;i<=this.ot;i++){const e=this.JR(i,1),s=this.ci[i];for(let n=0;n<s;n++)for(let o=n;o<s;o++)t+=e[n*s+o]}return t}aB(t,i,e){const s=this.ha(t),n=this.ci[t];let o=0;for(let r=0;r<n;r++){let l=null;i<=0&&(l=s[r].Ro);let h=null;i>=0&&(h=s[r].pr);let a,c=0,f=0;if(l!==null)for(let u=0;u<l.length;u++)a=l[u],a.valid&&a.fromVertex.layer!==t&&(c=a.fromVertex.column+a.portFromColOffset,f=a.toVertex.column+a.portToColOffset,e?o+=Math.abs(c-f)*this.linkStraightenWeight(a):o+=Math.abs(c-f));if(h!==null)for(let u=0;u<h.length;u++)a=h[u],a.valid&&a.toVertex.layer!==t&&(c=a.fromVertex.column+a.portFromColOffset,f=a.toVertex.column+a.portToColOffset,e?o+=(Math.abs(c-f)+1)*this.linkStraightenWeight(a):o+=Math.abs(c-f))}return this.aa(t,s),o}xk(t){let i=0;for(let e=0;e<=this.ot;e++)i+=this.aB(e,1,t);return i}Xw(){let t=1/0;this.Wt=-1;const i=this.network.vertexes.iterator;for(;i.next();){const e=i.value;t=Math.min(t,e.column-this.nodeMinColumnSpace(e,!0)),this.Wt=Math.max(this.Wt,e.column+this.nodeMinColumnSpace(e,!1))}for(i.reset();i.next();){const e=i.value;e.column-=t}this.Wt-=t}Yw(t,i){Debug&&(U.r(t,LayeredDigraphLayout,"barycenters:unfixedLayer"),U.r(i,LayeredDigraphLayout,"barycenters:direction"));const e=this.ha(t),s=this.ci[t],n=new Float32Array(s);for(let o=0;o<s;o++){const r=e[o];let l=null;i<=0&&(l=r.Ro);let h=null;i>=0&&(h=r.pr);let a=0,c=0;const f=r.near;f!==null&&f.layer===r.layer&&(a+=f.column-1,c++);let u;if(l!==null)for(let d=0;d<l.length;d++){u=l[d];const m=u.fromVertex;u.valid&&!u.rev&&m.layer!==t&&(a+=m.column,c++)}if(h!==null)for(let d=0;d<h.length;d++){u=h[d];const m=u.toVertex;u.valid&&!u.rev&&m.layer!==t&&(a+=m.column,c++)}c===0?n[o]=-1:n[o]=a/c}return this.aa(t,e),n}$R(t,i){Debug&&(U.r(t,LayeredDigraphLayout,"medians:unfixedLayer"),U.r(i,LayeredDigraphLayout,"medians:direction"));const e=this.ha(t),s=this.ci[t],n=new Int16Array(s);for(let o=0;o<s;o++){const r=e[o];let l=null;i<=0&&(l=r.Ro);let h=null;i>=0&&(h=r.pr);let a=0;const c=[],f=r.near;f!==null&&f.layer===r.layer&&(c[a]=f.column-1,a++);let u;if(l!==null)for(let d=0;d<l.length;d++){u=l[d];const m=u.fromVertex;u.valid&&!u.rev&&m.layer!==t&&(c[a]=m.column+u.portFromColOffset,a++)}if(h!==null)for(let d=0;d<h.length;d++){u=h[d];const m=u.toVertex;u.valid&&!u.rev&&m.layer!==t&&(c[a]=m.column+u.portToColOffset,a++)}if(a===0)n[o]=-1;else{c.sort((m,g)=>m-g);const d=a>>1;(a&1)!==0?n[o]=c[d]:n[o]=c[d-1]+c[d]>>1}}return this.aa(t,e),n}Kw(t,i,e,s,n){if(t.component===e){t.component=i;let o=0,r=0;if(s){const l=t.destinationEdges;for(;l.next();){const h=l.value,a=h.toVertex;o=t.layer-a.layer,r=this.linkMinLength(h),o===r&&this.Kw(a,i,e,s,n)}}if(n){const l=t.sourceEdges;for(;l.next();){const h=l.value,a=h.fromVertex;o=a.layer-t.layer,r=this.linkMinLength(h),o===r&&this.Kw(a,i,e,s,n)}}}}JA(t,i,e,s,n){if(t.component===e){if(t.component=i,s){const o=t.destinationEdges;for(;o.next();){const l=o.value.toVertex;this.JA(l,i,e,s,n)}}if(n){const o=t.sourceEdges;for(;o.next();){const l=o.value.fromVertex;this.JA(l,i,e,s,n)}}}}removeCycles(){const t=this.network.edges.iterator;for(;t.next();){const i=t.value;i.rev=!1}switch(this.Mu){default:case 1:this.cB();break;case 0:this.fB();break;case 2:this.uB();break}}uB(){const t=this.network,i=t.vertexes.iterator;let e=1/0;for(;i.next();){const s=i.value;e=Math.min(e,s.layer)}if(e<1/0){if(e<0)for(i.reset();i.next();){const r=i.value;r.layer-=e}const s=[];for(i.reset();i.next();){const r=i.value,l=s[r.layer];l===void 0?s[r.layer]=[r]:l.push(r)}let n=0;for(let r=0;r<s.length;r++){const l=s[r];if(!l||l.length===0)n++;else if(r>0)for(let h=0;h<l.length;h++){const a=l[h];a.layer-=n}}const o=t.edges.iterator;for(;o.next();){const r=o.value,l=r.fromVertex,h=r.toVertex;l.layer<h.layer&&(t.reverseEdge(r),r.rev=!0)}}}cB(){const t=this.network;let i=0,e=t.vertexes.count-1;const s=[];s.length=e+1;const n=t.vertexes.iterator;for(;n.next();){const r=n.value;r.ae=!0}for(;this.dB(t)!==null;){let r;for(r=this.ZR(t);r!==null;)s[e]=r,e--,r.ae=!1,r=this.ZR(t);for(r=this.QR(t);r!==null;)s[i]=r,i++,r.ae=!1,r=this.QR(t);r=this.gB(t),r!==null&&(s[i]=r,i++,r.ae=!1)}for(let r=0;r<t.vertexes.count;r++)s[r].index=r;const o=t.edges.iterator;for(;o.next();){const r=o.value,l=r.fromVertex,h=r.toVertex;l.index>h.index&&(t.reverseEdge(r),r.rev=!0)}}dB(t){const i=t.vertexes.iterator;for(;i.next();){const e=i.value;if(e.ae)return e}return null}ZR(t){const i=t.vertexes.iterator;for(;i.next();){const e=i.value;if(e.ae){let s=!0;const n=e.destinationEdges;for(;n.next();)if(n.value.toVertex.ae){s=!1;break}if(s)return e}}return null}QR(t){const i=t.vertexes.iterator;for(;i.next();){const e=i.value;if(e.ae){let s=!0;const n=e.sourceEdges;for(;n.next();)if(n.value.fromVertex.ae){s=!1;break}if(s)return e}}return null}gB(t){let i=null,e=0;const s=this.network.vertexes.iterator;for(;s.next();){const n=s.value;if(n.ae){let o=0;const r=n.destinationEdges;for(;r.next();)r.value.toVertex.ae&&o++;let l=0;const h=n.sourceEdges;for(;h.next();)h.value.fromVertex.ae&&l++;(i===null||e<o-l)&&(i=n,e=o-l)}}return i}fB(){const t=this.network.vertexes.iterator;for(;t.next();){const e=t.value;e.Du=-1,e.ho=-1}const i=this.network.edges.iterator;for(;i.next();){const e=i.value;e.forest=!1}for(this.fm=0,t.reset();t.next();){const e=t.value;e.sourceEdges.count===0&&this.$A(e)}for(t.reset();t.next();){const e=t.value;e.Du===-1&&this.$A(e)}for(i.reset();i.next();){const e=i.value;if(!e.forest){const s=e.fromVertex,n=s.Du,o=s.ho,r=e.toVertex,l=r.Du,h=r.ho;l<n&&o<h&&(this.network.reverseEdge(e),e.rev=!0)}}}$A(t){t.Du=this.fm,this.fm++;const i=t.destinationEdges;for(;i.next();){const e=i.value,s=e.toVertex;s.Du===-1&&(e.forest=!0,this.$A(s))}t.ho=this.fm,this.fm++}oB(){const t=this.network.vertexes.iterator;for(;t.next();){const s=t.value;s.layer=-1}for(this.ot=-1,this.assignLayers(),t.reset();t.next();){const s=t.value;this.ot=Math.max(this.ot,s.layer)}this.ot>=9999&&U.n("LayeredDigraphLayout, too many layers: "+this.ot);const i=this.direction==0||this.direction==180,e=[];for(const s=this.network.vertexes.iterator;s.next();){const n=s.value;if(n.node===null||n.centered)continue;const o=n.layer;let r=e[o];r===void 0&&(r=0);const l=i?n.width:n.height;l>r&&(e[o]=l)}for(const s=this.network.vertexes.iterator;s.next();){const n=s.value;if(n.node===null||n.centered)continue;const o=e[n.layer];i?(n.focusX=o/2,n.focusY=n.focus.y,n.width=o):(n.focusX=n.focus.x,n.focusY=o/2,n.height=o)}}assignLayers(){switch(this.Cu){case 11:this._R();break;case 12:this.mB();break;default:case 10:this.pB();break}}_R(){const t=this.network.vertexes.iterator;for(;t.next();){const i=t.value,e=this.tI(i);this.ot=Math.max(e,this.ot)}}tI(t){let i=0;if(t.layer===-1){const e=t.destinationEdges;for(;e.next();){const s=e.value,n=s.toVertex,o=this.linkMinLength(s);i=Math.max(i,this.tI(n)+o)}t.layer=i}else i=t.layer;return i}mB(){let t=0;const i=this.network.vertexes.iterator;for(;i.next();){const e=i.value;t=this.iI(e),this.ot=Math.max(t,this.ot)}for(i.reset();i.next();){const e=i.value;e.layer=this.ot-e.layer}}iI(t){let i=0;if(t.layer===-1){const e=t.sourceEdges;for(;e.next();){const s=e.value,n=s.fromVertex,o=this.linkMinLength(s);i=Math.max(i,this.iI(n)+o)}t.layer=i}else i=t.layer;return i}pB(){this._R();const t=this.network.vertexes.iterator;for(;t.next();){const e=t.value;e.ae=!1}for(t.reset();t.next();){const e=t.value;e.sourceEdges.count===0&&this.eI(e)}let i=1/0;for(t.reset();t.next();){const e=t.value;i=Math.min(i,e.layer)}for(this.ot=-1,t.reset();t.next();){const e=t.value;e.layer-=i,this.ot=Math.max(this.ot,e.layer)}}eI(t){if(!t.ae){t.ae=!0;const i=t.destinationEdges;for(;i.next();){const s=i.value.toVertex;this.eI(s)}this.yB(t),this.wB(t)}}yB(t){const i=this.network.vertexes.iterator;for(;i.next();){const r=i.value;r.component=-1}const e=0,s=1,n=t.Ro;let o=n.length;for(let r=0;r<o;r++){const l=n[r],h=l.fromVertex,a=l.toVertex,c=this.linkMinLength(l);h.layer-a.layer>c&&this.Kw(h,e,-1,!0,!1)}for(this.Kw(t,s,-1,!0,!0);t.component!==e;){let r=0,l=1/0,h=0,a=null;const c=this.network.vertexes.iterator;for(;c.next();){const f=c.value;if(f.component===s){let u=0,d=!1;const m=f.Ro;o=m.length;for(let p=0;p<o;p++){const y=m[p],x=y.fromVertex;if(u+=this.linkLengthWeight(y),x.component!==s){r+=this.linkLengthWeight(y);const b=x.layer-f.layer,S=this.linkMinLength(y);l=Math.min(l,b-S)}}const g=f.pr;o=g.length;for(let p=0;p<o;p++){const y=g[p],x=y.toVertex;u-=this.linkLengthWeight(y),x.component!==s?r-=this.linkLengthWeight(y):d=!0}(a===null||u<h)&&!d&&(a=f,h=u)}}if(r>0){for(i.reset();i.next();){const f=i.value;f.component===s&&(f.layer+=l)}t.component=e}else a.component=e}}wB(t){const i=this.network.vertexes.iterator;for(;i.next();){const n=i.value;n.component=-1}const e=0,s=1;for(this.Kw(t,s,-1,!0,!1);t.component!==e;){let n=0,o=1/0,r=0,l=null;const h=this.network.vertexes.iterator;for(;h.next();){const a=h.value;if(a.component===s){let c=0,f=!1;const u=a.Ro;let d=u.length;for(let g=0;g<d;g++){const p=u[g],y=p.fromVertex;c+=this.linkLengthWeight(p),y.component!==s?n+=this.linkLengthWeight(p):f=!0}const m=a.pr;d=m.length;for(let g=0;g<d;g++){const p=m[g],y=p.toVertex;if(c-=this.linkLengthWeight(p),y.component!==s){n-=this.linkLengthWeight(p);const x=a.layer-y.layer,b=this.linkMinLength(p);o=Math.min(o,x-b)}}(l===null||c>r)&&!f&&(l=a,r=c)}}if(n<0){for(i.reset();i.next();){const a=i.value;a.component===s&&(a.layer-=o)}t.component=e}else l.component=e}}rB(){const t=this.network,i=[],e=t.edges.iterator;for(;e.next();){const s=e.value;s.valid=!1,i.push(s)}for(let s=0;s<i.length;s++){const n=i[s];let o=n.fromVertex;const r=n.toVertex;if(n.valid||(o.node===null&&o.data===null||r.node===null&&r.data===null)&&o.layer===r.layer)continue;let l=0,h=0,a=0,c=0;if(n.link!==null){const k=n.link;if(k===null)continue;const P=o.node,A=r.node;if(P===null||A===null)continue;let N=k.fromNode,M=k.toNode,C=k.fromPort;for(;C!==null&&!C.isVisibleObject();)C=C.panel;let T=k.toPort;for(;T!==null&&!T.isVisibleObject();)T=T.panel;if(n.rev){const X=N,Y=C;N=M,C=T,M=X,T=Y}const L=o.focus,D=r.focus,F=n.rev?r.bounds:o.bounds,R=Point.a();P!==N?F.isReal()&&N.isVisible()?N.actualBounds.isReal()?(N.getRelativePoint(C,Spot.Center,R),R.x+=N.actualBounds.x-F.x,R.y+=N.actualBounds.y-F.y):(N.getRelativePoint(C,Spot.Center,R),R.isReal()||R.f(L)):R.f(L):F.isReal()?(N.getRelativePoint(C,Spot.Center,R),R.isReal()||R.f(L)):R.f(L);const I=n.rev?o.bounds:r.bounds,O=Point.a();A!==M?I.isReal()&&M.isVisible()?M.actualBounds.isReal()?(M.getRelativePoint(T,Spot.Center,O),O.x+=M.actualBounds.x-I.x,O.y+=M.actualBounds.y-I.y):(M.getRelativePoint(T,Spot.Center,O),O.isReal()||O.f(D)):O.f(D):I.isReal()?(M.getRelativePoint(T,Spot.Center,O),O.isReal()||O.f(D)):O.f(D),this.P===90||this.P===270?(l=Math.round((R.x-L.x)/this.le),a=R.x,h=Math.round((O.x-D.x)/this.le),c=O.x):(l=Math.round((R.y-L.y)/this.le),a=R.y,h=Math.round((O.y-D.y)/this.le),c=O.y),Point.o(R),Point.o(O),n.portFromColOffset=l,n.portFromPos=a,n.portToColOffset=h,n.portToPos=c}else n.portFromColOffset=0,n.portFromPos=0,n.portToColOffset=0,n.portToPos=0;let f=o.layer;const u=r.layer,d=this.xB(n),m=d===1||d===3,g=d===2||d===3;let p,y,x=null,b;g&&(x=this.bB(o,r),b=1,y=t.createVertex(),y.node=null,y.bk=1,y.layer=f,y.near=o,t.addVertex(y),p=t.linkVertexes(o,y,n.link),p.valid=!1,p.rev=n.rev,p.portFromColOffset=l,p.portToColOffset=0,p.portFromPos=a,p.portToPos=0,o=y);let S=1;if(m&&S--,f-u>S&&f>0){for(n.valid=!1,y=t.createVertex(),y.node=null,y.bk=2,y.layer=f-1,x&&b<x.length&&y.layer===x[b].layer&&(y.near=x[b++]),t.addVertex(y),p=t.linkVertexes(o,y,n.link),p.valid=!0,p.rev=n.rev,p.portFromColOffset=g?0:l,p.portToColOffset=0,p.portFromPos=g?0:a,p.portToPos=0,o=y,f--;f-u>S&&f>0;)y=t.createVertex(),y.node=null,y.bk=3,y.layer=f-1,x&&b<x.length&&y.layer===x[b].layer&&(y.near=x[b++]),t.addVertex(y),p=t.linkVertexes(o,y,n.link),p.valid=!0,p.rev=n.rev,p.portFromColOffset=0,p.portToColOffset=0,p.portFromPos=0,p.portToPos=0,o=y,f--;p=t.linkVertexes(y,r,n.link),p.valid=!m,m&&(y.near=r),p.rev=n.rev,p.portFromColOffset=0,p.portToColOffset=h,p.portFromPos=0,p.portToPos=c}else n.valid=!0}}xB(t){let i=0;const e=t.link;if(e!==null){const s=e.fromPort,n=e.toPort;if(s!==null&&n!==null){const o=e.fromNode,r=e.toNode;if(o!==null&&r!==null){const l=this.Sk(!0),h=this.Sk(!1),a=this.setsPortSpots?l:e.computeSpot(!0,s),c=this.setsPortSpots?h:e.computeSpot(!1,n),f=e.isOrthogonal;if(a.isSide()&&a.includesSide(h)&&c.isSide()&&c.includesSide(l))return 0;const u=e.getLinkPoint(o,s,a,!0,f,r,n,Point.a()),d=e.getLinkDirection(o,s,u,a,!0,f,r,n);Point.o(u),(!a.isNone()&&d===this.sI(t,!0)||this.setsPortSpots&&o!==null&&o.ports.count===1&&t.rev)&&(i+=1);const m=e.getLinkPoint(r,n,c,!1,f,o,s,Point.a()),g=e.getLinkDirection(r,n,m,c,!1,f,o,s);Point.o(m),(!c.isNone()&&g===this.sI(t,!1)||this.setsPortSpots&&r!==null&&r.ports.count===1&&t.rev)&&(i+=2)}}}return i}sI(t,i){return this.P===90?i&&!t.rev||!i&&t.rev?270:90:this.P===180?i&&!t.rev||!i&&t.rev?0:180:this.P===270?i&&!t.rev||!i&&t.rev?90:270:i&&!t.rev||!i&&t.rev?180:0}bB(t,i){const e=[];return e.push(i),this.nI(t,e)?e.reverse():[]}nI(t,i){const e=i[i.length-1].sourceEdges.iterator;for(;e.next();){const s=e.value;if(s.rev||!s.valid)continue;const n=s.fromVertex;if(i.push(n),n===t||this.nI(t,i))return!0;i.pop()}return!1}lB(){this.ci.length!==this.ot+1&&(this.ci=new Int16Array(this.ot+1));const t=this.ci;for(let e=0;e<=this.ot;e++)t[e]=0;const i=this.network.vertexes.iterator;for(;i.next();){const e=i.value;e.index=-1}this.initializeIndices(),this.zw=-1,this.cm=0,this.js=0;for(let e=0;e<=this.ot;e++)t[e]>t[this.js]&&(this.zw=t[e]-1,this.js=e),t[e]<t[this.cm]&&(this.cm=e);this.Lu=[];for(let e=0;e<t.length;e++)this.Lu[e]=[];for(i.reset();i.next();){const e=i.value,s=e.layer,n=this.Lu[s];n[e.index]=e}}initializeIndices(){switch(this.Nu){default:case 22:this.SB();break;case 20:this.kB();break;case 21:this.PB();break}}SB(){let t=null;const i=this.network.vertexes.iterator;for(;i.next();){const e=i.value;if(e.near&&(t===null&&(t=new Map),e.layer===e.near.layer)){const s=t.get(e.near)||[];s.push(e),t.set(e.near,s)}}for(i.reset();i.next();){const e=i.value;if(e.near)continue;const s=e.layer;if(e.index=this.ci[s],this.ci[s]++,!t)continue;const n=t.get(e);Array.isArray(n)&&n.forEach(o=>{o.index=this.ci[s],this.ci[s]++})}}kB(){let t=null;const i=this.network.vertexes.iterator;for(;i.next();){const e=i.value;if(e.near&&(t===null&&(t=new Map),e.layer===e.near.layer)){const s=t.get(e.near)||[];s.push(e),t.set(e.near,s)}}for(let e=this.ot;e>=0;e--)for(i.reset();i.next();){const s=i.value;s.layer===e&&s.index===-1&&this.oI(s,t)}}oI(t,i){if(t.near)return;const e=t.layer;if(t.index=this.ci[e],this.ci[e]++,i){const o=i.get(t);Array.isArray(o)&&o.forEach(r=>{r.index=this.ci[e],this.ci[e]++})}const s=t.pr;let n=!0;for(;n;){n=!1;for(let o=0;o<s.length-1;o++){const r=s[o],l=s[o+1];r.portFromColOffset>l.portFromColOffset&&(n=!0,s[o]=l,s[o+1]=r)}}for(let o=0;o<s.length;o++){const r=s[o];if(r.valid){const l=r.toVertex;l.index===-1&&this.oI(l,i)}}}PB(){let t=null;const i=this.network.vertexes.iterator;for(;i.next();){const e=i.value;if(e.near&&(t===null&&(t=new Map),e.layer===e.near.layer)){const s=t.get(e.near)||[];s.push(e),t.set(e.near,s)}}for(let e=0;e<=this.ot;e++)for(i.reset();i.next();){const s=i.value;s.layer===e&&s.index===-1&&this.rI(s,t)}}rI(t,i){if(t.near)return;const e=t.layer;if(t.index=this.ci[e],this.ci[e]++,i){const h=i.get(t);Array.isArray(h)&&h.forEach(a=>{a.index=this.ci[e],this.ci[e]++})}const s=t.Ro;let n=!0,o=0;for(;n;)for(n=!1,o=0;o<s.length-1;o++){const h=s[o],a=s[o+1];h.portToColOffset>a.portToColOffset&&(n=!0,s[o]=a,s[o+1]=h)}let r,l;for(o=0;o<s.length;o++)l=s[o],l.valid&&(r=l.fromVertex,r.index===-1&&this.rI(r,i))}hB(){this.Wt=-1;for(let t=0;t<=this.ot;t++){const i=this.ha(t);let e=0;const s=this.ci[t];for(let n=0;n<s;n++){const o=i[n];e+=this.nodeMinColumnSpace(o,!0),o.column=e,e+=1,e+=this.nodeMinColumnSpace(o,!1)}this.Wt=Math.max(this.Wt,e-1),this.aa(t,i)}}reduceCrossings(){let t=this.countCrossings(),i=this.he(),e=0,s=0,n=0;for(e=0;e<this.Oc;e++){for(s=0;s<=this.ot;s++)this.kk(s,1),this.Ps(s,1,!1,1);for(n=this.countCrossings(),n<t&&(t=n,i=this.he()),s=this.ot;s>=0;s--)this.kk(s,-1),this.Ps(s,-1,!1,-1);n=this.countCrossings(),n<t&&(t=n,i=this.he())}for(this.ds(i),e=0;e<this.Oc;e++){for(s=0;s<=this.ot;s++)this.kk(s,0),this.Ps(s,0,!1,0);for(n=this.countCrossings(),n<t&&(t=n,i=this.he()),s=this.ot;s>=0;s--)this.kk(s,0),this.Ps(s,0,!1,0);n=this.countCrossings(),n<t&&(t=n,i=this.he())}this.ds(i);let o=!1,r=0,l=0,h=0,a=0;switch(this.Au){case 30:break;case 32:for(h=t+1;(a=this.countCrossings())<h;)for(h=a,r=this.ot;r>=0;r--)for(l=0;l<=r;l++){for(o=!0;o;)for(o=!1,s=r;s>=l;s--)o=this.Ps(s,-1,!1,-1)||o;for(n=this.countCrossings(),n>=t?this.ds(i):(t=n,i=this.he()),o=!0;o;)for(o=!1,s=r;s>=l;s--)o=this.Ps(s,1,!1,1)||o;for(n=this.countCrossings(),n>=t?this.ds(i):(t=n,i=this.he()),o=!0;o;)for(o=!1,s=l;s<=r;s++)o=this.Ps(s,1,!1,1)||o;for(n>=t?this.ds(i):(t=n,i=this.he()),o=!0;o;)for(o=!1,s=l;s<=r;s++)o=this.Ps(s,-1,!1,-1)||o;for(n>=t?this.ds(i):(t=n,i=this.he()),o=!0;o;)for(o=!1,s=r;s>=l;s--)o=this.Ps(s,0,!1,0)||o;for(n>=t?this.ds(i):(t=n,i=this.he()),o=!0;o;)for(o=!1,s=l;s<=r;s++)o=this.Ps(s,0,!1,0)||o;n>=t?this.ds(i):(t=n,i=this.he())}break;default:case 31:for(r=this.ot,l=0,h=t+1;(a=this.countCrossings())<h;){for(h=a,o=!0;o;)for(o=!1,s=r;s>=l;s--)o=this.Ps(s,-1,!1,-1)||o;for(n=this.countCrossings(),n>=t?this.ds(i):(t=n,i=this.he()),o=!0;o;)for(o=!1,s=r;s>=l;s--)o=this.Ps(s,1,!1,1)||o;for(n=this.countCrossings(),n>=t?this.ds(i):(t=n,i=this.he()),o=!0;o;)for(o=!1,s=l;s<=r;s++)o=this.Ps(s,1,!1,1)||o;for(n>=t?this.ds(i):(t=n,i=this.he()),o=!0;o;)for(o=!1,s=l;s<=r;s++)o=this.Ps(s,-1,!1,-1)||o;for(n>=t?this.ds(i):(t=n,i=this.he()),o=!0;o;)for(o=!1,s=r;s>=l;s--)o=this.Ps(s,0,!1,0)||o;for(n>=t?this.ds(i):(t=n,i=this.he()),o=!0;o;)for(o=!1,s=l;s<=r;s++)o=this.Ps(s,0,!1,0)||o;n>=t?this.ds(i):(t=n,i=this.he())}break}this.ds(i)}kk(t,i){Debug&&(U.r(t,LayeredDigraphLayout,"medianBarycenterCrossingReduction:unfixedLayer"),U.r(i,LayeredDigraphLayout,"medianBarycenterCrossingReduction:direction"));let e=0,s=!1;const n=this.ha(t),o=this.ci[t],r=this.$R(t,i),l=this.Yw(t,i);for(e=0;e<o;e++)l[e]===-1&&(l[e]=n[e].column),r[e]===-1&&(r[e]=n[e].column);let h=!0,a;for(;h;)for(h=!1,e=0;e<o-1;e++)if(r[e+1]<r[e]||r[e+1]===r[e]&&l[e+1]<l[e]){s=!0,h=!0;const f=r[e];r[e]=r[e+1],r[e+1]=f;const u=l[e];l[e]=l[e+1],l[e+1]=u,a=n[e],n[e]=n[e+1],n[e+1]=a}let c=0;for(e=0;e<o;e++)a=n[e],a.index=e,c+=this.nodeMinColumnSpace(a,!0),a.column=c,c+=1,c+=this.nodeMinColumnSpace(a,!1);return this.aa(t,n),s}Ps(t,i,e,s){const n=this.ha(t),o=this.ci[t],r=this.JR(t,i);let l=0,h;if(!e||s>0)for(h=new Float32Array(o),l=0;l<o;l++)h[l]=-1;else h=this.Yw(t,-1);let a;if(!e||s<0)for(a=new Float32Array(o),l=0;l<o;l++)a[l]=-1;else a=this.Yw(t,1);let c=!1,f=!0;for(;f;)for(f=!1,l=0;l<o-1;l++){const u=r[n[l].index*o+n[l+1].index],d=r[n[l+1].index*o+n[l].index];let m=0,g=0;const p=n[l].column,y=n[l+1].column,x=this.nodeMinColumnSpace(n[l],!0),b=this.nodeMinColumnSpace(n[l],!1),S=this.nodeMinColumnSpace(n[l+1],!0),k=this.nodeMinColumnSpace(n[l+1],!1),P=p-x+S,A=y-b+k;let N=0,M=0,C=0,T=0,L=0,D=0,F=0,R,I=0,O,X=0;const Y=n[l].sourceEdges.iterator;if(e&&s<=0)for(;Y.next();){const J=Y.value;R=J.fromVertex,J.valid&&R.layer!==t&&(C=this.linkStraightenWeight(J),T=J.portFromColOffset,L=J.portToColOffset,D=R.column,N+=(Math.abs(p+L-(D+T))+1)*C,M+=(Math.abs(A+L-(D+T))+1)*C)}for(Y.reset();Y.next();){const J=Y.value;if(R=J.fromVertex,J.valid&&R.layer===t){for(I=0;I<n.length&&n[I]!==R;)I++;I<l&&(m+=2*(l-I),g+=2*(l+1-I)),I===l+1&&(m+=1),I>l+1&&(m+=4*(I-l),g+=4*(I-(l+1)))}}const B=n[l].destinationEdges.iterator;if(e&&s>=0)for(;B.next();){const J=B.value;O=J.toVertex,J.valid&&O.layer!==t&&(C=this.linkStraightenWeight(J),T=J.portFromColOffset,L=J.portToColOffset,F=O.column,N+=(Math.abs(p+T-(F+L))+1)*C,M+=(Math.abs(A+T-(F+L))+1)*C)}for(B.reset();B.next();){const J=B.value;if(O=J.toVertex,J.valid&&O.layer===t){for(X=0;X<n.length&&n[X]!==O;)X++;X===l+1&&(g+=1)}}const K=n[l+1].sourceEdges.iterator;if(e&&s<=0)for(;K.next();){const J=K.value;R=J.fromVertex,J.valid&&R.layer!==t&&(C=this.linkStraightenWeight(J),T=J.portFromColOffset,L=J.portToColOffset,D=R.column,N+=(Math.abs(y+L-(D+T))+1)*C,M+=(Math.abs(P+L-(D+T))+1)*C)}for(K.reset();K.next();){const J=K.value;if(R=J.fromVertex,J.valid&&R.layer===t){for(I=0;I<n.length&&n[I]!==R;)I++;I<l&&(m+=2*(l+1-I),g+=2*(l-I)),I===l&&(g+=1),I>l+1&&(m+=4*(I-(l+1)),g+=4*(I-l))}}const z=n[l+1].destinationEdges.iterator;if(e&&s>=0)for(;z.next();){const J=z.value;O=J.toVertex,J.valid&&O.layer!==t&&(C=this.linkStraightenWeight(J),T=J.portFromColOffset,L=J.portToColOffset,F=O.column,N+=(Math.abs(y+T-(F+L))+1)*C,M+=(Math.abs(P+T-(F+L))+1)*C)}for(z.reset();z.next();){const J=z.value;if(O=J.toVertex,J.valid&&O.layer===t){for(X=0;X<n.length&&n[X]!==O;)X++;X===l&&(m+=1)}}let H=0,v=0;const j=h[n[l].index],$=a[n[l].index],q=h[n[l+1].index],Q=a[n[l+1].index];if(j!==-1&&(H+=Math.abs(j-p),v+=Math.abs(j-A)),$!==-1&&(H+=Math.abs($-p),v+=Math.abs($-A)),q!==-1&&(H+=Math.abs(q-y),v+=Math.abs(q-P)),Q!==-1&&(H+=Math.abs(Q-y),v+=Math.abs(Q-P)),g<m-.5||g===m&&d<u-.5||g===m&&d===u&&M<N-.5||g===m&&d===u&&M===N&&v<H-.5){c=!0,f=!0,n[l].column=A,n[l+1].column=P;const J=n[l];n[l]=n[l+1],n[l+1]=J}}for(l=0;l<o;l++)n[l].index=l;return this.aa(t,n),c}straightenAndPack(){if(this.Zn!==0){this.MB();return}let t=0,i=!1,e=(this.Sr&1)!==0;const s=(this.Sr&8)!==0;if(this.network.edges.count>1e3&&s&&(e=!1),e){const n=[];let o=0;for(o=0;o<=this.ot;o++)n[o]=0;let r=0;const l=this.network.vertexes.iterator;for(;l.next();){const a=l.value;t=a.layer,r=a.column;const c=this.nodeMinColumnSpace(a,!1);n[t]=Math.max(n[t],r+c)}const h=8;for(l.reset();l.next();){const a=l.value;t=a.layer,r=a.column,a.column=((this.Wt-n[t])*h>>1)+r*h}this.Wt*=h}if((this.Sr&2)!==0){i=!0;let n=0;for(;i&&n<this.Tu;){for(i=!1,t=this.js+1;t<=this.ot;t++)i=this.dm(t,1)||i;for(t=this.js-1;t>=0;t--)i=this.dm(t,-1)||i;i=this.dm(this.js,0)||i,n++}}if((this.Sr&4)!==0){for(t=this.js+1;t<=this.ot;t++)this.ZA(t,1);for(t=this.js-1;t>=0;t--)this.ZA(t,-1);this.ZA(this.js,0)}if(e&&(this.lI(-1),this.lI(1)),(this.Sr&2)!==0){i=!0;let n=0;for(;i&&n<this.Tu;){for(i=!1,i=this.dm(this.js,0)||i,t=this.js+1;t<=this.ot;t++)i=this.dm(t,0)||i;for(t=this.js-1;t>=0;t--)i=this.dm(t,0)||i;n++}}}dm(t,i){Debug&&(U.r(t,LayeredDigraphLayout,"bendStraighten:unfixedLayer"),U.r(i,LayeredDigraphLayout,"bendStraighten:direction"));let e=!1;for(;this.CB(t,i);)e=!0;return e}CB(t,i){Debug&&(U.r(t,LayeredDigraphLayout,"shiftbendStraighten:unfixedLayer"),U.r(i,LayeredDigraphLayout,"shiftbendStraighten:direction"));let e=0;const s=this.ha(t),n=this.ci[t],o=this.Yw(t,-1);if(i>0)for(e=0;e<n;e++)o[e]=-1;const r=this.Yw(t,1);if(i<0)for(e=0;e<n;e++)r[e]=-1;let l=!1,h=!0;for(;h;)for(h=!1,e=0;e<n;e++){const a=s[e].column,c=this.nodeMinColumnSpace(s[e],!0),f=this.nodeMinColumnSpace(s[e],!1);let u=0;e-1<0||a-s[e-1].column-1>c+this.nodeMinColumnSpace(s[e-1],!1)?u=a-1:u=a;let d=0;e+1>=n||s[e+1].column-a-1>f+this.nodeMinColumnSpace(s[e+1],!0)?d=a+1:d=a;let m=0,g=0,p=0,y=0,x=0,b=0;if(i<=0){const M=s[e].sourceEdges.iterator;for(;M.next();){const C=M.value,T=C.fromVertex;if(C.valid&&T.layer!==t){y=this.linkStraightenWeight(C),x=C.portFromColOffset,b=C.portToColOffset;const L=T.column;m+=(Math.abs(a+b-(L+x))+1)*y,g+=(Math.abs(u+b-(L+x))+1)*y,p+=(Math.abs(d+b-(L+x))+1)*y}}}if(i>=0){const M=s[e].destinationEdges.iterator;for(;M.next();){const C=M.value,T=C.toVertex;if(C.valid&&T.layer!==t){y=this.linkStraightenWeight(C),x=C.portFromColOffset,b=C.portToColOffset;const L=T.column;m+=(Math.abs(a+x-(L+b))+1)*y,g+=(Math.abs(u+x-(L+b))+1)*y,p+=(Math.abs(d+x-(L+b))+1)*y}}}let S=0,k=0,P=0;const A=o[s[e].index],N=r[s[e].index];A!==-1&&(S+=Math.abs(A-a),k+=Math.abs(A-u),P+=Math.abs(A-d)),N!==-1&&(S+=Math.abs(N-a),k+=Math.abs(N-u),P+=Math.abs(N-d)),g<m||g===m&&k<S?(l=!0,h=!0,s[e].column=u):(p<m||p===m&&P<S)&&(l=!0,h=!0,s[e].column=d)}return this.aa(t,s),this.Xw(),l}ZA(t,i){Debug&&(U.r(t,LayeredDigraphLayout,"medianStraighten:unfixedLayer"),U.r(i,LayeredDigraphLayout,"medianStraighten:direction"));let e=0;const s=this.ha(t),n=this.ci[t],o=this.$R(t,i),r=new Int16Array(o);let l=!1,h=!0;for(;h;)for(h=!1,e=0;e<n;e++){const a=s[e].column,c=this.nodeMinColumnSpace(s[e],!0),f=this.nodeMinColumnSpace(s[e],!1);let u=0,d=0,m=0,g=0,p=0;r[e]===-1?e===0&&e===n-1?u=a:e===0?(d=s[e+1].column,d-a===f+this.nodeMinColumnSpace(s[e+1],!0)?u=a-1:u=a):e===n-1?(m=s[e-1].column,a-m===c+this.nodeMinColumnSpace(s[e-1],!1)?u=a+1:u=a):(m=s[e-1].column,p=m+this.nodeMinColumnSpace(s[e-1],!1)+c+1,d=s[e+1].column,g=d-this.nodeMinColumnSpace(s[e+1],!0)-f-1,u=(p+g)/2|0):e===0&&e===n-1?u=r[e]:e===0?(d=s[e+1].column,g=d-this.nodeMinColumnSpace(s[e+1],!0)-f-1,u=Math.min(r[e],g)):e===n-1?(m=s[e-1].column,p=m+this.nodeMinColumnSpace(s[e-1],!1)+c+1,u=Math.max(r[e],p)):(m=s[e-1].column,p=m+this.nodeMinColumnSpace(s[e-1],!1)+c+1,d=s[e+1].column,g=d-this.nodeMinColumnSpace(s[e+1],!0)-f-1,p<r[e]&&r[e]<g?u=r[e]:p>=r[e]?u=p:g<=r[e]&&(u=g)),u!==a&&(l=!0,h=!0,s[e].column=u)}return this.aa(t,s),this.Xw(),l}NB(){for(let t=0;t<=this.Wt;t++)for(;this.AB(t,1););this.Xw()}AB(t,i){Debug&&(U.r(t,LayeredDigraphLayout,"packAux:column"),U.r(i,LayeredDigraphLayout,"packAux:direction"));let e=!0;const s=this.network.vertexes.iterator;for(;s.next();){const o=s.value,r=this.nodeMinColumnSpace(o,!0),l=this.nodeMinColumnSpace(o,!1);if(o.column-r<=t&&o.column+l>=t){e=!1;break}}let n=!1;if(e){if(i>0)for(s.reset();s.next();){const o=s.value;o.column>t&&(o.column-=1,n=!0)}if(i<0)for(s.reset();s.next();){const o=s.value;o.column<t&&(o.column+=1,n=!0)}}return n}TB(){this.NB();for(let t=0;t<this.Wt;t++)for(;this.LB(t,1););this.Xw()}LB(t,i){Debug&&(U.r(t,LayeredDigraphLayout,"tightPackAux:column"),U.r(i,LayeredDigraphLayout,"tightPackAux:direction"));let e=t;i>0&&(e=t+1),i<0&&(e=t-1);let s=0;const n=[],o=[];for(s=0;s<=this.ot;s++)n[s]=!1,o[s]=!1;const r=this.network.vertexes.iterator;for(;r.next();){const a=r.value,c=a.column-this.nodeMinColumnSpace(a,!0),f=a.column+this.nodeMinColumnSpace(a,!1);c<=t&&f>=t&&(n[a.layer]=!0),c<=e&&f>=e&&(o[a.layer]=!0)}let l=!0,h=!1;for(s=0;s<=this.ot;s++)l=l&&!(n[s]&&o[s]);if(l){if(i>0)for(r.reset();r.next();){const a=r.value;a.column>t&&(a.column-=1,h=!0)}if(i<0)for(r.reset();r.next();){const a=r.value;a.column<t&&(a.column+=1,h=!0)}}return h}lI(t){Debug&&U.r(t,LayeredDigraphLayout,"componentPack:direction"),this.TB();let i=0,e,s=0,n=0,o=0;if(t>0)for(i=0;i<=this.Wt;i++)for(e=this.he(),s=this.xk(!0),n=s+1;s<n;)n=s,this.hI(i,1),o=this.xk(!0),o>s?this.ds(e):o<s&&(s=o,e=this.he());if(t<0)for(i=this.Wt;i>=0;i--)for(e=this.he(),s=this.xk(!0),n=s+1;s<n;)n=s,this.hI(i,-1),o=this.xk(!0),o>s?this.ds(e):o<s&&(s=o,e=this.he());this.Xw()}hI(t,i){this.xn=0;const e=this.network.vertexes.iterator;for(;e.next();){const c=e.value;c.component=-1}if(i>0)for(e.reset();e.next();){const c=e.value;c.column-this.nodeMinColumnSpace(c,!0)<=t&&(c.component=this.xn)}if(i<0)for(e.reset();e.next();){const c=e.value;c.column+this.nodeMinColumnSpace(c,!1)>=t&&(c.component=this.xn)}for(this.xn++,e.reset();e.next();){const c=e.value;c.component===-1&&(this.JA(c,this.xn,-1,!0,!0),this.xn++)}let s=0;const n=[];for(s=0;s<this.xn*this.xn;s++)n[s]=!1;const o=[];for(s=0;s<(this.ot+1)*(this.Wt+1);s++)o[s]=-1;for(e.reset();e.next();){const c=e.value,f=c.layer,u=Math.max(0,c.column-this.nodeMinColumnSpace(c,!0)),d=Math.min(this.Wt,c.column+this.nodeMinColumnSpace(c,!1));for(let m=u;m<=d;m++)o[f*(this.Wt+1)+m]=c.component}for(let c=0;c<=this.ot;c++){if(i>0)for(let f=0;f<this.Wt;f++)o[c*(this.Wt+1)+f]!==-1&&o[c*(this.Wt+1)+f+1]!==-1&&o[c*(this.Wt+1)+f]!==o[c*(this.Wt+1)+f+1]&&(n[o[c*(this.Wt+1)+f]*this.xn+o[c*(this.Wt+1)+f+1]]=!0);if(i<0)for(let f=this.Wt;f>0;f--)o[c*(this.Wt+1)+f]!==-1&&o[c*(this.Wt+1)+f-1]!==-1&&o[c*(this.Wt+1)+f]!==o[c*(this.Wt+1)+f-1]&&(n[o[c*(this.Wt+1)+f]*this.xn+o[c*(this.Wt+1)+f-1]]=!0)}const r=[];for(s=0;s<this.xn;s++)r[s]=!0;const l=[];l.push(0);let h=0;for(;l.length!==0;)if(h=l[l.length-1],l.pop(),r[h])for(r[h]=!1,s=0;s<this.xn;s++)n[h*this.xn+s]&&l.splice(0,0,s);let a=!1;if(i>0)for(e.reset();e.next();){const c=e.value;r[c.component]&&(c.column-=1,a=!0)}if(i<0)for(e.reset();e.next();){const c=e.value;r[c.component]&&(c.column+=1,a=!0)}return a}MB(){const t=U.ct(),i=this.Lu.length;for(let u=0;u<=i;u++)t[u]=[];const e=this.network.vertexes.iterator;for(;e.next();){const u=e.value,d=i-u.layer,m=t[d];m[u.index]=u}const s=new GSet;this.DB(t,s);let n=null,o=null,r=null,l=null;const h=(this.Zn&1)!==0,a=(this.Zn&2)!==0,c=(this.Zn&4)!==0,f=(this.Zn&8)!==0;h&&(this.Pl(t,s,!0),n=this.Pk(t,!0,!1)),t.reverse(),c&&(this.Pl(t,s,!1),r=this.Pk(t,!1,!1));for(const u of t)u.reverse();f&&(this.Pl(t,s,!1),l=this.Pk(t,!1,!0)),t.reverse(),a&&(this.Pl(t,s,!0),o=this.Pk(t,!0,!0)),U.nt(t),this.FB(n,o,r,l),this.network.vertexes.each(u=>{const d=u,m=U.ct();h&&m.push(n.get(d)),a&&m.push(o.get(d)),c&&m.push(r.get(d)),f&&m.push(l.get(d)),m.sort((b,S)=>b-S);const g=m.length,p=Math.floor((g-1)/2),y=Math.ceil((g-1)/2),x=(m[p]+m[y])/2;U.nt(m),d.Se=x})}DB(t,i){const e=t.length;for(let s=1;s<e-1;s++){let n=0,o=0;const r=t[s],l=t[s+1];for(let h=0;o<l.length;h++){const a=l[h],c=this.RB(a);if(h===l.length-1||c){let f=r.length-1;for(c&&(f=a.getProperSourceVertexes()[0].index);o<=h;){const d=l[o].getProperSourceEdges();for(const m of d){const p=m.fromVertex.index;(p<n||p>f)&&i.add(m)}o++}n=f}}}}RB(t){if(t.node===null){const i=t.getProperSourceVertexes();if(i.length>0)return i[0].node===null}return!1}Pl(t,i,e){this.IB(t);for(const s of t){let n=-1;for(const o of s){const r=e?o.getProperSourceVertexes():o.getProperDestinationVertexes(),l=r.length;if(l>0){r.sort((a,c)=>a.ca-c.ca);const h=(l-1)/2;for(let a=Math.floor(h),c=Math.ceil(h);a<=c;a++)if(o.Qn===o){const f=r[a];let u;e?u=f.getDestinationEdge(o):u=o.getDestinationEdge(f),!i.has(u)&&n<f.ca&&(f.Qn=o,o.Ec=f.Ec,o.Qn=f.Ec,n=f.ca)}}}}}IB(t){for(let i=0;i<t.length;i++){const e=t[i];for(let s=0;s<e.length;s++){const n=e[s];n.Ec=n,n.Qn=n,n.aI=i,n.ca=s}}}Pk(t,i,e){const s=this.P===90||this.P===270;for(const o of t)for(const r of o)r.gs=r,r.Fu=1/0,r.Se=NaN,r._n=0;this.OB(t,i,e);for(const o of t)for(const r of o)r.Ec===r&&this.cI(r,t);for(let o=0;o<t.length;o++){if(t[o].length<=0)continue;const r=t[o][0];if(r.gs===r){r.gs.Fu===1/0&&(r.gs.Fu=0);let l=o,h=0,a;do{for(a=t[l][h];a.Qn!==a.Ec;)if(a=a.Qn,l++,a.ca>0){const c=this.fI(a,t),f=s?c.width:c.height,u=a.gs.Fu+a.Se+a._n-(c.Se+c._n+f+this.columnSpacing);c.gs.Fu=Math.min(c.gs.Fu,u)}h=a.ca+1}while(l<t.length&&h<t[l].length&&a.gs===t[l][h].gs)}}const n=new GMap;for(const o of t)for(const r of o){r.Se=r.Se+r.gs.Fu+r._n;const l=s?r.width:r.height;n.set(r,e?-r.Se-l:r.Se)}return n}OB(t,i,e){const s=this.P===90||this.P===270;for(const n of t)for(const o of n)if(o.Ec===o){let r=0,l=o;for(;l.Qn!==o;){const h=l.Qn,a=s?l.width:l.height,c=s?h.width:h.height;let f,u,d,m;i?(d=l.getDestinationEdge(h),f=d.portFromPos,u=d.portToPos,d.link!==null&&(l.node&&l.node!==d.link.fromNode&&(f=s?l.focusX:l.focusY),h.node&&h.node!==d.link.toNode&&(u=s?h.focusX:h.focusY)),e?m=l._n+(a-f)-(c-u):m=l._n+f-u):(d=h.getDestinationEdge(l),f=d.portToPos,u=d.portFromPos,d.link!==null&&(l.node&&l.node!==d.link.toNode&&(f=s?l.focusX:l.focusY),h.node&&h.node!==d.link.fromNode&&(u=s?h.focusX:h.focusY)),e?m=l._n+(a-f)-(c-u):m=l._n+f-u),h._n=m,r=Math.min(r,m),l=l.Qn}l=o;do l._n=l._n-r,l=l.Qn;while(l!==o)}}cI(t,i){if(!isNaN(t.Se))return;t.Se=0;let e=t;do{if(e.ca>0){const s=this.fI(e,i),n=s.Ec;this.cI(n,i),t.gs===t&&(t.gs=n.gs);const o=this.P===90||this.P===270?s.width:s.height;if(t.gs===n.gs){const r=n.Se+s._n+o-e._n+this.columnSpacing;t.Se=Math.max(t.Se,r)}}e=e.Qn}while(e!==t);for(;e.Qn!==t;)e=e.Qn,e.Se=t.Se,e.gs=t.gs}fI(t,i){const e=t.aI,s=t.ca;return s<1&&U.n("Could not determine previous vertex in layer"),i[e][s-1]}FB(...t){let i=-1;const e=U.ct(),s=U.ct();let n=1/0;for(let o=0;o<4;o++){if(!t[o])continue;const r=this.EB(t[o],e,s,o);r<n&&(i=o,n=r)}for(let o=0;o<4;o++){const r=t[o];if(!r)continue;const l=o===0||o===2?e[i]-e[o]:s[i]-s[o];l!==0&&r.each(h=>{r.set(h.key,h.value+l)})}U.nt(e),U.nt(s)}EB(t,i,e,s){if(!t||t.count===0)return i[s]=0,e[s]=0,1/0;let n=1/0,o=-1/0;return t.each(r=>{const l=r.key,h=r.value,a=this.P===90||this.P===270?l.width:l.height;h<n&&(n=h),h+a>o&&(o=h+a)}),i[s]=n,e[s]=o,o-n}commitLayout(){this.Vw(),this.commitNodes(),this.QA(),this.isRouting&&this.commitLinks()}Vw(){if(!this.setsPortSpots)return;const t=this.Sk(!0),i=this.Sk(!1),e=this.network.edges.iterator;for(;e.next();){const n=e.value.link;n!==null&&(n.fromSpot=t,n.toSpot=i)}}Sk(t){return this.P===270?t?Spot.MiddleTop:Spot.MiddleBottom:this.P===90?t?Spot.MiddleBottom:Spot.MiddleTop:this.P===180?t?Spot.MiddleLeft:Spot.MiddleRight:t?Spot.MiddleRight:Spot.MiddleLeft}commitNodes(){this.Js.length!==this.ot+1&&(this.Js=new Float32Array(this.ot+1)),this.Ss.length!==this.ot+1&&(this.Ss=new Float32Array(this.ot+1)),this.ks.length!==this.ot+1&&(this.ks=new Float32Array(this.ot+1)),this.Yt.length!==this.ot+1&&(this.Yt=new Float32Array(this.ot+1));for(let d=0;d<=this.ot;d++)this.Js[d]=0,this.Ss[d]=0,this.ks[d]=0,this.Yt[d]=0;const t=this.network.vertexes.iterator;for(;t.next();){const d=t.value,m=d.layer;this.Js[m]=Math.max(this.Js[m],this.nodeMinLayerSpace(d,!0)),this.Ss[m]=Math.max(this.Ss[m],this.nodeMinLayerSpace(d,!1))}let i=0;const e=this.Ws;for(let d=0;d<=this.ot;d++){let m=e;this.Js[d]+this.Ss[d]<=0&&(m=0),d>0&&(i+=m/2),this.P===90||this.P===0?(i+=this.Ss[d],this.ks[d]=i,i+=this.Js[d]):(i+=this.Js[d],this.ks[d]=i,i+=this.Ss[d]),d<this.ot&&(i+=m/2),this.Yt[d]=i}const s=i,n=this.arrangementOrigin;for(let d=0;d<=this.ot;d++)this.P===270?this.ks[d]=n.y+this.ks[d]:this.P===90?(this.ks[d]=n.y+s-this.ks[d],this.Yt[d]=s-this.Yt[d]):this.P===180?this.ks[d]=n.x+this.ks[d]:(this.ks[d]=n.x+s-this.ks[d],this.Yt[d]=s-this.Yt[d]);const o=this.Zn!==0;t.reset();const r=this.P===270||this.P===90;let l=1/0,h=1/0,a=1/0,c=-1/0;for(;t.next();){const d=t.value,m=d.layer,g=d.column|0;let p=0,y=0;r?(p=n.x+this.le*g,y=this.ks[m]):(p=this.ks[m],y=n.y+this.le*g),d.centerX=p,d.centerY=y,o&&isFinite(d.Se)&&(r?d.node?d.x=n.x+d.Se:d.centerX=n.x+d.Se:d.node?d.y=n.y+d.Se:d.centerY=n.y+d.Se),l=Math.min(d.x,l),h=Math.min(d.y,h),r?(a=l,c=Math.max(c,d.bounds.right)):(a=h,c=Math.max(c,d.bounds.bottom))}this.jA=c-a;const f=n.x-l,u=n.y-h;for(this.kr=new Point(o&&r?0:f,o&&!r?0:u),t.reset();t.next();){const d=t.value;d.x+=f,d.y+=u,d.commit()}}QA(){let t=0;const i=this.Ws;for(let n=0;n<=this.ot;n++)t+=this.Js[n],t+=this.Ss[n];t+=this.ot*i;const e=[],s=this.Zn!==0?this.jA:this.le*this.Wt;for(let n=this.maxLayer;n>=0;n--)this.P===270?n===0?e.push(new Rect(0,0,s,Math.abs(this.Yt[0]))):e.push(new Rect(0,this.Yt[n-1],s,Math.abs(this.Yt[n-1]-this.Yt[n]))):this.P===90?n===0?e.push(new Rect(0,this.Yt[0],s,Math.abs(this.Yt[0]-t))):e.push(new Rect(0,this.Yt[n],s,Math.abs(this.Yt[n-1]-this.Yt[n]))):this.P===180?n===0?e.push(new Rect(0,0,Math.abs(this.Yt[0]),s)):e.push(new Rect(this.Yt[n-1],0,Math.abs(this.Yt[n-1]-this.Yt[n]),s)):n===0?e.push(new Rect(this.Yt[0],0,Math.abs(this.Yt[0]-t),s)):e.push(new Rect(this.Yt[n],0,Math.abs(this.Yt[n-1]-this.Yt[n]),s));this.commitLayers(e,this.kr)}commitLayers(t,i){}commitLinks(){const t=this.network.edges.iterator;let i=null;for(;t.next();)i=t.value.link,i!==null&&i.pointsCount>0&&(i.startRoute(),i.clearPoints(),i.commitRoute());for(t.reset();t.next();)i=t.value.link,i!==null&&i.updateRoute();for(t.reset();t.next();){const e=t.value;if(i=e.link,i===null||i.pointsCount===0)continue;i.startRoute();const s=i;let n=s.fromNode,o=s.toNode,r=s.fromPort,l=s.toPort;if(n!==null){const C=n.findVisibleNode();C!==null&&C!==n&&(n=C,r=C.port)}if(o!==null){const C=o.findVisibleNode();C!==null&&C!==o&&(o=C,l=C.port)}const h=i.computeSpot(!0,r),a=i.computeSpot(!1,l);let c=e.fromVertex,f=e.toVertex;if(e.valid){if(i.curve===9&&i.pointsCount===4)if(c.column===f.column&&this.alignOption===0){const C=i.getLinkPoint(n,r,h,!0,!1,o,l),T=i.getLinkPoint(o,l,a,!1,!1,n,r);C.isReal()||C.set(n.actualBounds.center),T.isReal()||T.set(o.actualBounds.center),i.clearPoints(),i.addPointAt(C.x,C.y),i.addPointAt((2*C.x+T.x)/3,(2*C.y+T.y)/3),i.addPointAt((C.x+2*T.x)/3,(C.y+2*T.y)/3),i.addPointAt(T.x,T.y)}else{let C=!1,T=!1;if(r!==null&&i.Rl(h)&&(C=!0),l!==null&&i.Rl(a)&&(T=!0),C||T){let L=null;C&&(L=i.getLinkPointFromPoint(n,r,r.getDocumentPoint(Spot.Center),i.getPoint(3),!0),L.isReal()||L.set(n.actualBounds.center),i.setPointAt(0,L.x,L.y));let D=null;if(T&&(D=i.getLinkPointFromPoint(o,l,l.getDocumentPoint(Spot.Center),i.getPoint(0),!1),D.isReal()||D.set(o.actualBounds.center),i.setPointAt(3,D.x,D.y)),L){const F=i.getPoint(2);i.setPointAt(1,(L.x*2+F.x)/3,(L.y*2+F.y)/3)}if(D){const F=i.getPoint(1);i.setPointAt(2,(D.x*2+F.x)/3,(D.y*2+F.y)/3)}}}i.commitRoute();continue}if(c.layer===f.layer){i.commitRoute();continue}let u=!1,d=!1;const m=this.Ws;let g=0,p=i.firstPickIndex+1;if(i.isOrthogonal)d=!0,g=i.pointsCount,g>4&&i.points.removeRange(2,g-3);else if(i.curve===9)u=!0,g=i.pointsCount,g>4&&i.points.removeRange(2,g-3),g===4&&(p=2);else{g=i.pointsCount;const C=h===Spot.None,T=a===Spot.None;g>2&&C&&T?i.points.removeRange(1,g-2):g>3&&C&&!T?i.points.removeRange(1,g-3):g>3&&!C&&T?i.points.removeRange(2,g-2):g>4&&!C&&!T&&i.points.removeRange(2,g-3)}let y,x,b=0,S=0,k=0,P=0,A=0,N=0,M=0;if(e.rev){let C=0;for(;f!==null&&c!==f;){y=null,x=null;const T=f.sourceEdges.iterator;for(;T.next();){const L=T.value;if(L.link===e.link&&(y=L.fromVertex,x=L.toVertex,y.node===null))break}if(y===null)break;if(y!==c)if(b=i.getPoint(p-1).x,S=i.getPoint(p-1).y,k=y.centerX,P=y.centerY,d)this.P===180||this.P===0?p===i.firstPickIndex+1?(i.insertPointAt(p++,b,S),i.insertPointAt(p++,b,P)):(x!==null?x.centerY:S)!==P&&(A=this.Yt[y.layer-1]+this.kr.x,i.insertPointAt(p++,A,S),i.insertPointAt(p++,A,P)):p===i.firstPickIndex+1?(i.insertPointAt(p++,b,S),i.insertPointAt(p++,k,S)):(x!==null?x.centerX:b)!==k&&(A=this.Yt[y.layer-1]+this.kr.y,i.insertPointAt(p++,b,A),i.insertPointAt(p++,k,A));else if(p===i.firstPickIndex+1)if(N=Math.max(10,this.Js[f.layer]),M=Math.max(10,this.Ss[f.layer]),u)this.P===180?k<=f.bounds.x?(C=f.bounds.x,i.insertPointAt(p++,C-N,P),i.insertPointAt(p++,C,P),i.insertPointAt(p++,C+M,P)):(i.insertPointAt(p++,k-N,P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k+M,P)):this.P===90?P>=f.bounds.bottom?(C=f.bounds.y+f.bounds.height,i.insertPointAt(p++,k,C+M),i.insertPointAt(p++,k,C),i.insertPointAt(p++,k,C-N)):(i.insertPointAt(p++,k,P+M),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,P-N)):this.P===270?P<=f.bounds.y?(C=f.bounds.y,i.insertPointAt(p++,k,C-N),i.insertPointAt(p++,k,C),i.insertPointAt(p++,k,C+M)):(i.insertPointAt(p++,k,P-N),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,P+M)):this.P===0&&(k>=f.bounds.right?(C=f.bounds.x+f.bounds.width,i.insertPointAt(p++,C+M,P),i.insertPointAt(p++,C,P),i.insertPointAt(p++,C-N,P)):(i.insertPointAt(p++,k+M,P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k-N,P)));else{i.insertPointAt(p++,b,S);let L=0;this.P===180||this.P===0?((this.P===180?k>=f.bounds.right:k<=f.bounds.x)&&(L=(this.P===0?-N:M)/2),i.insertPointAt(p++,b+L,P)):((this.P===270?P>=f.bounds.bottom:P<=f.bounds.y)&&(L=(this.P===90?-N:M)/2),i.insertPointAt(p++,k,S+L)),i.insertPointAt(p++,k,P)}else N=Math.max(10,this.Js[y.layer]),M=Math.max(10,this.Ss[y.layer]),u?this.P===180?(i.insertPointAt(p++,k-N-Math.max(10,m),P),i.insertPointAt(p++,Math.min(k-N+m/2,k),P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,Math.max(k+M-m/2,k),P),i.insertPointAt(p++,k+M+m,P)):this.P===90?(i.insertPointAt(p++,k,P+M+Math.max(10,m)),i.insertPointAt(p++,k,Math.max(P+M-m/2,P)),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,Math.min(P-N+m/2,P)),i.insertPointAt(p++,k,P-N-m)):this.P===270?(i.insertPointAt(p++,k,P-N-Math.max(10,m)),i.insertPointAt(p++,k,Math.min(P-N+m/2,P)),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,Math.max(P+M-m/2,P)),i.insertPointAt(p++,k,P+M+m)):(i.insertPointAt(p++,k+M+Math.max(10,m),P),i.insertPointAt(p++,Math.max(k+M-m/2,k),P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,Math.min(k-N+m/2,k),P),i.insertPointAt(p++,k-N-m,P)):(this.P===180||this.P===90||this.P,i.insertPointAt(p++,k,P));f=y}if(l===null||h!==Spot.None||d)if(b=i.getPoint(p-1).x,S=i.getPoint(p-1).y,k=i.getPoint(p).x,P=i.getPoint(p).y,d){const T=this.Ss[c.layer];let L=0;this.P===180||this.P===0?(L=S,L>=c.bounds.y&&L<=c.bounds.bottom&&(this.P===180?k>=c.bounds.x:k<=c.bounds.right)&&(C=c.centerX+(this.P===180?-T:T),L<c.bounds.y+c.bounds.height/2?L=c.bounds.y-this.le/2:L=c.bounds.bottom+this.le/2,i.insertPointAt(p++,C,S),i.insertPointAt(p++,C,L)),i.insertPointAt(p++,k,L),i.insertPointAt(p++,k,P)):(L=b,L>=c.bounds.x&&L<=c.bounds.right&&(this.P===270?P>=c.bounds.y:P<=c.bounds.bottom)&&(C=c.centerY+(this.P===270?-T:T),L<c.bounds.x+c.bounds.width/2?L=c.bounds.x-this.le/2:L=c.bounds.right+this.le/2,i.insertPointAt(p++,b,C),i.insertPointAt(p++,L,C)),i.insertPointAt(p++,L,P),i.insertPointAt(p++,k,P))}else if(u)N=Math.max(10,this.Js[c.layer]),M=Math.max(10,this.Ss[c.layer]),this.P===180&&k>=c.bounds.x?(C=c.bounds.x+c.bounds.width,i.setPointAt(p-2,C,S),i.setPointAt(p-1,C+M,S)):this.P===90&&P<=c.bounds.bottom?(C=c.bounds.y,i.setPointAt(p-2,b,C),i.setPointAt(p-1,b,C-N)):this.P===270&&P>=c.bounds.y?(C=c.bounds.y+c.bounds.height,i.setPointAt(p-2,b,C),i.setPointAt(p-1,b,C+M)):this.P===0&&k<=c.bounds.right&&(C=c.bounds.x,i.setPointAt(p-2,C,S),i.setPointAt(p-1,C-N,S));else{N=Math.max(10,this.Js[c.layer]),M=Math.max(10,this.Ss[c.layer]);let T=0;this.P===180||this.P===0?((this.P===180?k<=c.bounds.x:k>=c.bounds.right)&&(T=(this.P===0?M:-N)/2),i.insertPointAt(p++,k+T,S)):((this.P===270?P<=c.bounds.y:P>=c.bounds.bottom)&&(T=(this.P===90?M:-N)/2),i.insertPointAt(p++,b,P+T)),i.insertPointAt(p++,k,P)}}else{for(;c!==null&&c!==f;){y=null,x=null;const C=c.destinationEdges.iterator;for(;C.next();){const T=C.value;if(T.link===e.link&&(y=T.toVertex,x=T.fromVertex,x.node!==null&&(x=null),y.node===null))break}if(y===null)break;y!==f&&(b=i.getPoint(p-1).x,S=i.getPoint(p-1).y,k=y.centerX,P=y.centerY,d?this.P===180||this.P===0?(x!==null?x.centerY:S)!==P&&(A=this.Yt[y.layer]+this.kr.x,p===i.firstPickIndex+1&&(this.P===0?A=Math.max(A,b):A=Math.min(A,b)),i.insertPointAt(p++,A,S),i.insertPointAt(p++,A,P)):(x!==null?x.centerX:b)!==k&&(A=this.Yt[y.layer]+this.kr.y,p===i.firstPickIndex+1&&(this.P===90?A=Math.max(A,S):A=Math.min(A,S)),i.insertPointAt(p++,b,A),i.insertPointAt(p++,k,A)):(N=Math.max(10,this.Js[y.layer]),M=Math.max(10,this.Ss[y.layer]),u?this.P===180?(i.insertPointAt(p++,k+M+Math.max(10,m),P),i.insertPointAt(p++,Math.max(k+M-m/2,k),P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,Math.min(k-N+m/2,k),P),i.insertPointAt(p++,k-N-m,P)):this.P===90?(i.insertPointAt(p++,k,P-N-Math.max(10,m)),i.insertPointAt(p++,k,Math.min(P-N+m/2,P)),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,Math.max(P+M-m/2,P)),i.insertPointAt(p++,k,P+M+m)):this.P===270?(i.insertPointAt(p++,k,P+M+Math.max(10,m)),i.insertPointAt(p++,k,Math.max(P+M-m/2,P)),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,Math.min(P-N+m/2,P)),i.insertPointAt(p++,k,P-N-m)):(i.insertPointAt(p++,k-N-Math.max(10,m),P),i.insertPointAt(p++,Math.min(k-N+m/2,k),P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,k,P),i.insertPointAt(p++,Math.max(k+M-m/2,k),P),i.insertPointAt(p++,k+M+m,P)):this.P===180?(i.insertPointAt(p++,k+M,P),i.insertPointAt(p++,k-N,P)):this.P===90?(i.insertPointAt(p++,k,P-N),i.insertPointAt(p++,k,P+M)):this.P===270?(i.insertPointAt(p++,k,P+M),i.insertPointAt(p++,k,P-N)):(i.insertPointAt(p++,k-N,P),i.insertPointAt(p++,k+M,P)))),c=y}d&&(b=i.getPoint(p-1).x,S=i.getPoint(p-1).y,k=i.getPoint(p).x,P=i.getPoint(p).y,this.P===180||this.P===0?S!==P&&(this.P===0?A=Math.min(Math.max((k+b)/2,this.Yt[f.layer]+this.kr.x),k):A=Math.max(Math.min((k+b)/2,this.Yt[f.layer]+this.kr.x),k),i.insertPointAt(p++,A,S),i.insertPointAt(p++,A,P)):b!==k&&(this.P===90?A=Math.min(Math.max((P+S)/2,this.Yt[f.layer]+this.kr.y),P):A=Math.max(Math.min((P+S)/2,this.Yt[f.layer]+this.kr.y),P),i.insertPointAt(p++,b,A),i.insertPointAt(p++,k,A)))}if(s!==null&&u&&i.pointsCount>=4){if(n!==null&&r!==null&&s.Rl(h)){const C=r.getDocumentPoint(Spot.Center);C.isReal()||C.setTo(n.actualBounds.centerX,n.actualBounds.centerY);const T=i.getPoint(3),L=i.getPoint(2);this.direction===90||this.direction===270?(i.setPointAt(1,T.x,(L.y+T.y)/2),i.setPointAt(2,T.x,(L.y+T.y)/2)):(i.setPointAt(1,(L.x+T.x)/2,T.y),i.setPointAt(2,(L.x+T.x)/2,T.y));const D=i.getLinkPointFromPoint(n,r,C,i.getPoint(1),!0);i.setPointAt(0,D.x,D.y)}if(o!==null&&l!==null&&s.Rl(a)){const C=l.getDocumentPoint(Spot.Center);C.isReal()||C.setTo(o.actualBounds.centerX,o.actualBounds.centerY);const T=i.getPoint(i.pointsCount-4),L=i.getLinkPointFromPoint(o,l,C,T,!1),D=i.getPoint(i.pointsCount-3);this.direction===90||this.direction===270?(i.setPointAt(i.pointsCount-2,T.x,(D.y+L.y)/2),i.setPointAt(i.pointsCount-3,T.x,(D.y+L.y)/2)):(i.setPointAt(i.pointsCount-2,(D.x+L.x)/2,T.y),i.setPointAt(i.pointsCount-3,(D.x+L.x)/2,T.y));const F=i.getLinkPointFromPoint(o,l,C,i.getPoint(i.pointsCount-2),!1);i.setPointAt(i.pointsCount-1,F.x,F.y)}}i.commitRoute(),e.commit()}}nB(){this.zw=-1,this.cm=0,this.js=0,this.Lu=null;for(let t=0;t<this.$n.length;t++)this.$n[t]=null}ha(t){let i;const e=this.ci[t];if(e>=this.$n.length){const n=[];for(let o=0;o<this.$n.length;o++)n[o]=this.$n[o];this.$n=n}this.$n[e]===void 0||this.$n[e]===null?i=[]:(i=this.$n[e],this.$n[e]=null);const s=this.Lu[t];for(let n=0;n<s.length;n++){const o=s[n];i[o.index]=o}return i}aa(t,i){this.$n[this.ci[t]]=i}get layerSpacing(){return this.Ws}set layerSpacing(t){this.Ws!==t&&(U.i(t,"number",LayeredDigraphLayout,"layerSpacing"),t>=0&&(this.Ws=t,this.w()))}get columnSpacing(){return this.le}set columnSpacing(t){this.le!==t&&(U.i(t,"number",LayeredDigraphLayout,"columnSpacing"),t>0&&(this.le=t,this.w()))}get direction(){return this.P}set direction(t){this.P!==t&&(U.i(t,"number",LayeredDigraphLayout,"direction"),t===0||t===90||t===180||t===270?(this.P=t,this.w()):U.n("LayeredDigraphLayout.direction must be 0, 90, 180, or 270"))}get cycleRemoveOption(){return this.Mu}set cycleRemoveOption(t){this.Mu!==t&&(U.j(t,LayeredDigraphCycleRemove,"LayeredDigraphCycleRemove"),(t===1||t===0||t===2)&&(this.Mu=t,this.w()))}get layeringOption(){return this.Cu}set layeringOption(t){this.Cu!==t&&(U.j(t,LayeredDigraphLayering,"LayeredDigraphLayering"),(t===10||t===11||t===12)&&(this.Cu=t,this.w()))}get initializeOption(){return this.Nu}set initializeOption(t){this.Nu!==t&&(U.j(t,LayeredDigraphInit,"LayeredDigraphInit"),(t===20||t===21||t===22)&&(this.Nu=t,this.w()))}get iterations(){return this.Oc}set iterations(t){this.Oc!==t&&(U.r(t,LayeredDigraphNetwork,"iterations"),t>=0&&(this.Oc=t,this.w()))}get aggressiveOption(){return this.Au}set aggressiveOption(t){this.Au!==t&&(U.j(t,LayeredDigraphAggressive,"LayeredDigraphAggressive"),(t===30||t===31||t===32)&&(this.Au=t,this.w()))}get packOption(){return this.Sr}set packOption(t){this.Sr!==t&&(U.i(t,"number",LayeredDigraphLayout,"packOption"),t>=0&&t<8&&(this.Sr=t,this.w()))}get packIterations(){return this.Tu}set packIterations(t){this.Tu=t}get alignOption(){return this.Zn}set alignOption(t){this.Zn!==t&&(U.i(t,"number",LayeredDigraphLayout,"align"),t>=0&&t<16&&(this.Zn=t,this.w()))}get centered(){return this.la}set centered(t){this.centered!==t&&(U.i(t,"boolean",LayeredDigraphLayout,"centered"),this.la=t,this.w())}get setsPortSpots(){return this.Jn}set setsPortSpots(t){this.Jn!==t&&(U.i(t,"boolean",LayeredDigraphLayout,"setsPortSpots"),this.Jn=t,this.w())}get maxLayer(){return this.ot}get maxIndex(){return this.zw}get maxColumn(){return this.Wt}get minIndexLayer(){return this.cm}get maxIndexLayer(){return this.js}static CycleDepthFirst=0;static CycleGreedy=1;static CycleFromLayers=2;static LayerOptimalLinkLength=10;static LayerLongestPathSink=11;static LayerLongestPathSource=12;static InitDepthFirstOut=20;static InitDepthFirstIn=21;static InitNaive=22;static AggressiveNone=30;static AggressiveLess=31;static AggressiveMore=32;static PackNone=0;static PackExpand=1;static PackStraighten=2;static PackMedian=4;static PackAll=15;static AlignNone=0;static AlignUpperLeft=1;static AlignUpperRight=2;static AlignLowerLeft=4;static AlignLowerRight=8;static AlignAll=15}class SegInfo{Ll;BB;Pb;VB;zB;Vt;as;XB;constructor(){this.Ll=0,this.BB=0,this.Pb=0,this.VB=0,this.zB=0,this.Vt=0,this.as=null,this.XB=0}}class LayeredDigraphNetwork extends LayoutNetwork{constructor(t){super(t)}createVertex(){const t=new LayeredDigraphVertex(this);return t.centered=this.layout.centered,t}createEdge(){return new LayeredDigraphEdge(this)}}class LayeredDigraphVertex extends LayoutVertex{Ll;Rh;Vt;Mk;Ck;la;ae;Du;ho;bk;yk;wk;Ec;Qn;aI;ca;gs;Fu;Se;_n;Uw=null;Gw=null;qw=null;Hw=null;constructor(t){super(t),this.Ll=-1,this.Rh=-1,this.Vt=-1,this.Mk=NaN,this.Ck=null,this.la=!0,this.ae=!1,this.Du=NaN,this.ho=NaN,this.bk=0,this.yk=null,this.wk=null}static uI(t,i){return t.index-i.index}getProperSourceEdges(){if(!this.qw){const t=[];for(const i of this.Ro){const e=i;e.valid&&t.push(e)}this.qw=t}return this.qw}getProperDestinationEdges(){if(!this.Hw){const t=[];for(const i of this.pr){const e=i;e.valid&&t.push(e)}this.Hw=t}return this.Hw}getDestinationEdge(t){const i=this.getProperDestinationEdges();for(const e of i)if(e.toVertex===t)return e;U.n("Unable to find destination edge to given vertex")}getProperSourceVertexes(){if(!this.Uw){const t=[];for(const i of this.Ro){const e=i;!e.valid||e.fromVertex.layer<=e.toVertex.layer||t.push(e.fromVertex)}t.sort(LayeredDigraphVertex.uI),this.Uw=t}return this.Uw}getProperDestinationVertexes(){if(!this.Gw){const t=[];for(const i of this.pr){const e=i;!e.valid||e.fromVertex.layer<=e.toVertex.layer||t.push(e.toVertex)}t.sort(LayeredDigraphVertex.uI),this.Gw=t}return this.Gw}addSourceEdge(t){super.addSourceEdge(t),this.Uw=null,this.qw=null}deleteSourceEdge(t){super.deleteSourceEdge(t),this.Uw=null,this.qw=null}addDestinationEdge(t){super.addDestinationEdge(t),this.Gw=null,this.Hw=null}deleteDestinationEdge(t){super.deleteDestinationEdge(t),this.Gw=null,this.Hw=null}commit(){if(this.centered)super.commit();else{const t=this.node;if(t!==null){const i=this.network.layout;if(!i)return;i.direction===180||i.direction===270?t.moveTo(this.bounds.right-t.actualBounds.width,this.bounds.bottom-t.actualBounds.height):t.moveTo(this.bounds.x,this.bounds.y)}}}get layer(){return this.Ll}set layer(t){this.Ll=t}get column(){return this.Rh}set column(t){this.Rh=t}get index(){return this.Vt}set index(t){this.Vt=t}get component(){return this.Mk}set component(t){this.Mk!==t&&(U.i(t,"number",LayeredDigraphVertex,"component"),this.Mk=t)}get near(){return this.Ck}set near(t){this.Ck!==t&&(Debug&&t!==null&&U.s(t,LayeredDigraphVertex,LayeredDigraphVertex,"near"),this.Ck=t)}get centered(){return this.la}set centered(t){this.la=t}}class LayeredDigraphEdge extends LayoutEdge{ae;Nk;Ak;Tk;Lk;Dk;Fk;constructor(t){super(t),this.ae=!1,this.Nk=!1,this.Ak=!1,this.Tk=NaN,this.Lk=NaN,this.Dk=0,this.Fk=0}get fromVertex(){return this.fs}set fromVertex(t){this.fs!==t&&(Debug&&t!==null&&U.s(t,LayeredDigraphVertex,LayeredDigraphEdge,"fromVertex"),this.fs=t)}get toVertex(){return this.us}set toVertex(t){this.us!==t&&(Debug&&t!==null&&U.s(t,LayeredDigraphVertex,LayeredDigraphEdge,"toVertex"),this.us=t)}get valid(){return this.ae}set valid(t){this.ae!==t&&(U.i(t,"boolean",LayeredDigraphEdge,"valid"),this.ae=t)}get rev(){return this.Nk}set rev(t){this.Nk!==t&&(U.i(t,"boolean",LayeredDigraphEdge,"rev"),this.Nk=t)}get forest(){return this.Ak}set forest(t){this.Ak!==t&&(U.i(t,"boolean",LayeredDigraphEdge,"forest"),this.Ak=t)}get portFromPos(){return this.Tk}set portFromPos(t){this.Tk!==t&&(U.i(t,"number",LayeredDigraphEdge,"portFromPos"),this.Tk=t)}get portToPos(){return this.Lk}set portToPos(t){this.Lk!==t&&(U.i(t,"number",LayeredDigraphEdge,"portToPos"),this.Lk=t)}get portFromColOffset(){return this.Dk}set portFromColOffset(t){this.Dk!==t&&(U.i(t,"number",LayeredDigraphEdge,"portFromColOffset"),this.Dk=t)}get portToColOffset(){return this.Fk}set portToColOffset(t){this.Fk!==t&&(U.i(t,"number",LayeredDigraphEdge,"portToColOffset"),this.Fk=t)}}var TreePath=(w=>(w[w.Default=0]="Default",w[w.Destination=1]="Destination",w[w.Source=2]="Source",w))(TreePath||{}),TreeSorting=(w=>(w[w.Forwards=10]="Forwards",w[w.Reverse=11]="Reverse",w[w.Ascending=12]="Ascending",w[w.Descending=13]="Descending",w))(TreeSorting||{}),TreeAlignment=(w=>(w[w.CenterSubtrees=20]="CenterSubtrees",w[w.CenterChildren=21]="CenterChildren",w[w.Start=22]="Start",w[w.End=23]="End",w[w.Bus=24]="Bus",w[w.BusBranching=25]="BusBranching",w[w.TopLeftBus=26]="TopLeftBus",w[w.BottomRightBus=27]="BottomRightBus",w[w.Custom=28]="Custom",w))(TreeAlignment||{}),TreeCompaction=(w=>(w[w.None=30]="None",w[w.Block=31]="Block",w))(TreeCompaction||{}),TreeStyle=(w=>(w[w.Layered=40]="Layered",w[w.LastParents=41]="LastParents",w[w.Alternating=42]="Alternating",w[w.RootOnly=43]="RootOnly",w))(TreeStyle||{}),TreeArrangement=(w=>(w[w.Vertical=50]="Vertical",w[w.Horizontal=51]="Horizontal",w[w.FixedRoots=52]="FixedRoots",w))(TreeArrangement||{}),TreeLayerStyle=(w=>(w[w.Individual=60]="Individual",w[w.Siblings=61]="Siblings",w[w.Uniform=62]="Uniform",w))(TreeLayerStyle||{});class TreeLayout extends Layout{Gi;Ki;Ru;gm;_A;Je;te;vs;U;G;Rk;Ms;constructor(t){super(),this.Gi=new GSet,this.Ki=0,this.Ms=1,this.Ru=40,this.gm=60,this._A=[],this.Je=!0,this.te=50,this.vs=new Size(10,10).S();const i=new TreeNetwork(this);this.U=new TreeVertex(i),this.G=new TreeVertex(i),this.Rk=[],t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.Ki=this.Ki,t.Ru=this.Ru,t.gm=this.gm,t.Je=this.Je,t.te=this.te,t.vs.f(this.vs),t.U.copyInheritedPropertiesFrom(this.U),t.G.copyInheritedPropertiesFrom(this.G)}yi(t){t in TreeAlignment?this.alignment=t:t in TreeArrangement?this.arrangement=t:t in TreeCompaction?this.compaction=t:t in TreePath?this.path=t:t in TreeSorting?this.sorting=t:t in TreeStyle?this.treeStyle=t:super.yi(t)}createNetwork(){return new TreeNetwork(this)}makeNetwork(t){const i=this.createNetwork(),e=(s=>{if(s instanceof Node)return!s.isLinkLabel&&s.category!=="Comment";if(s instanceof Link){const n=s.fromNode;if(n===null||n.isLinkLabel||n.category==="Comment")return!1;const o=s.toNode;return!(o===null||o.isLinkLabel||o.category==="Comment")}return!1});return t instanceof Diagram?(i.addParts(t.nodes,!0,e),i.addParts(t.links,!0,e)):t instanceof Group?i.addParts(t.memberParts,!1,e):i.addParts(t.iterator,!1,e),i}doLayout(t){Debug&&t===null&&U.n("Layout.doLayout(collection) argument must not be null but a Diagram, a Group, or an Iterable of Parts"),this.network===null&&(this.network=this.makeNetwork(t)),this.arrangement!==52&&(this.arrangementOrigin=this.initialOrigin(this.arrangementOrigin));let i=this.diagram;i===null&&t instanceof Diagram&&(i=t),this.path===0&&i!==null?this.Ms=i.isTreePathToChildren?1:2:this.Ms=this.path===0?1:this.path,this.network.vertexes.count>0&&(this.YB(),this.KB(),this.UB(),this.GB(),this.vA(),this.qB(),this.arrangeTrees(),this.updateParts()),this.network=null,this.Gi=new GSet,this.isValidLayout=!0}YB(){if(this.network===null)return;this.network.deleteSelfEdges();const t=this.network.vertexes.iterator;for(;t.next();){const n=t.value;n.initialized=!1,n.level=0,n.parent=null,n.children=[]}if(this.Gi.count>0){const n=new GSet,o=this.Gi.iterator;for(;o.next();){const r=o.value;if(r instanceof Node){const l=this.network.findVertex(r);l!==null&&n.add(l)}else r instanceof TreeVertex&&n.add(r)}this.Gi=n}this.Gi.count===0&&this.findRoots();const i=this.Gi.copy().iterator;for(;i.next();){const n=i.value;n.initialized||(n.initialized=!0,this.tT(n))}let e=this.network.vertexes,s=null;for(;s=this.HB(e),s.count>0;){const n=this.dI(s);n!==null&&(this.Gi.add(n),n.initialized=!0,this.tT(n)),e=s}}HB(t){const i=new GSet,e=t.iterator;for(;e.next();){const s=e.value;s.initialized||i.add(s)}return i}findRoots(){if(this.network===null)return;const t=this.network.vertexes,i=t.iterator;for(;i.next();){const e=i.value;switch(this.Ms){case 1:e.sourceEdges.count===0&&this.Gi.add(e);break;case 2:e.destinationEdges.count===0&&this.Gi.add(e);break;default:U.n("Unhandled path value "+this.Ms.toString())}}if(this.Gi.count===0){const e=this.dI(t);e!==null&&this.Gi.add(e)}}dI(t){let i=999999,e=null;const s=t.iterator;for(;s.next();){const n=s.value;switch(this.Ms){case 1:n.sourceEdges.count<i&&(i=n.sourceEdges.count,e=n);break;case 2:n.destinationEdges.count<i&&(i=n.destinationEdges.count,e=n);break;default:U.n("Unhandled path value "+this.Ms.toString())}}return e}tT(t){if(t===null)return;switch(Debug&&U.s(t,TreeVertex,TreeLayout,"walkTree:v"),this.Ms){case 1:if(t.destinationEdges.count>0){const s=new List,n=t.destinationVertexes;for(;n.next();){const o=n.value;this.gI(t,o)&&s.add(o)}s.count>0&&(t.children=s.toArray())}break;case 2:if(t.sourceEdges.count>0){const s=new List,n=t.sourceVertexes;for(;n.next();){const o=n.value;this.gI(t,o)&&s.add(o)}s.count>0&&(t.children=s.toArray())}break;default:U.n("Unhandled path value"+this.Ms.toString())}const i=t.children,e=i.length;for(let s=0;s<e;s++){const n=i[s];n.initialized=!0,n.level=t.level+1,n.parent=t,this.Gi.delete(n)}for(let s=0;s<e;s++){const n=i[s];this.tT(n)}}gI(t,i){return Debug&&U.s(t,TreeVertex,TreeLayout,"walkOK:v"),Debug&&U.s(i,TreeVertex,TreeLayout,"walkOK:c"),i.initialized?this.vB(i,t)||i.level>t.level?!1:(this.WB(i.parent,i),!0):!0}vB(t,i){if(i===null)return!1;Debug&&U.s(t,TreeVertex,TreeLayout,"isAncestor:a"),Debug&&U.s(i,TreeVertex,TreeLayout,"isAncestor:b");let e=i.parent;for(;e!==null&&e!==t;)e=e.parent;return e===t}WB(t,i){if(t===null||i===null)return;Debug&&U.s(t,TreeVertex,TreeLayout,"removeChild:p"),Debug&&U.s(i,TreeVertex,TreeLayout,"removeChild:c");const e=t.children;let s=0;for(let n=0;n<e.length;n++)e[n]===i&&s++;if(s>0){const n=new Array(e.length-s);let o=0;for(let r=0;r<e.length;r++)e[r]!==i&&(n[o++]=e[r]);t.children=n}}KB(){const t=this.Gi.iterator;for(;t.next();){const i=t.value;i instanceof TreeVertex&&this.mI(i)}}mI(t){if(t===null)return;Debug&&U.s(t,TreeVertex,TreeLayout,"initializeTree:v"),this.initializeTreeVertexValues(t),t.alignment===25&&this.sortTreeVertexChildren(t);let i=0,e=t.childrenCount,s=0;const n=t.children,o=n.length;for(let r=0;r<o;r++){const l=n[r];this.mI(l),i+=l.descendantCount+1,e=Math.max(e,l.maxChildrenCount),s=Math.max(s,l.maxGenerationCount)}t.descendantCount=i,t.maxChildrenCount=e,t.maxGenerationCount=e>0?s+1:0}jB(t){switch(Debug&&U.s(t,TreeVertex,TreeLayout,"mom:v"),this.Ru){default:case 40:return t.parent!==null?t.parent:this.U;case 43:return t.parent===null?this.U:t.parent.parent===null?this.G:t.parent;case 42:return t.parent!==null?t.parent.parent!==null?t.parent.parent:this.G:this.U;case 41:{let i=!0;if(t.childrenCount===0)i=!1;else{const e=t.children,s=e.length;for(let n=0;n<s;n++)if(e[n].childrenCount>0){i=!1;break}}return i&&t.parent!==null?this.G:t.parent!==null?t.parent:this.U}}}initializeTreeVertexValues(t){Debug&&U.s(t,TreeVertex,TreeLayout,"initializeTreeVertexValues:v");const i=this.jB(t);if(t.copyInheritedPropertiesFrom(i),t.parent!==null&&t.parent.alignment===25){let e=t.angle;const s=t.parent.children;let n=0;for(;n<s.length&&t!==s[n];)n++;n%2===0?n!==s.length-1&&(e===90?e=180:e===180?e=270:e===270?e=180:e=270):e===90?e=0:e===180?e=90:e===270?e=0:e=90,t.angle=e}t.initialized=!0}UB(){const t=this.Gi.iterator;for(;t.next();){const i=t.value;i instanceof TreeVertex&&this.pI(i)}}pI(t){if(t===null)return;Debug&&U.s(t,TreeVertex,TreeLayout,"assignTree:v"),this.assignTreeVertexValues(t);const i=t.children,e=i.length;for(let s=0;s<e;s++){const n=i[s];this.pI(n)}}assignTreeVertexValues(t){}GB(){const t=this.Gi.iterator;for(;t.next();){const i=t.value;i instanceof TreeVertex&&this.yI(i)}}yI(t){if(t===null)return;Debug&&U.s(t,TreeVertex,TreeLayout,"sortTree:v"),t.alignment!==25&&this.sortTreeVertexChildren(t);const i=t.children,e=i.length;for(let s=0;s<e;s++){const n=i[s];this.yI(n)}}sortTreeVertexChildren(t){switch(Debug&&U.s(t,TreeVertex,TreeLayout,"sortTreeVertexChildren:v"),t.sorting){default:case 10:break;case 11:t.children.reverse();break;case 12:t.children.sort(t.comparer);break;case 13:t.children.sort(t.comparer),t.children.reverse();break}}vA(){if(!this.comments||this.network===null)return;const t=this.network.vertexes.iterator;for(;t.next();){const i=t.value;this.addComments(i)}}addComments(t){Debug&&U.s(t,TreeVertex,TreeLayout,"addComments:v");const i=t.angle,e=t.parent;let s=0,n=21,o=!1;e!==null&&(s=e.angle,n=e.alignment,o=this.isBusAlignment(n));const r=i===90||i===270,l=s===90||s===270,h=t.childrenCount===0;let a=0,c=0,f=0;const u=t.commentSpacing;if(t.node!==null){const d=t.node.findNodesConnected();for(;d.next();){const m=d.value;if(m.category!=="Comment"||!m.canLayout())continue;t.comments===null&&(t.comments=[]),t.comments.push(m),m.ensureBounds();const g=m.measuredBounds;r&&!h||!o&&!l&&h||o&&l&&h?(a=Math.max(a,g.width),c+=g.height+Math.abs(f)):(a+=g.width+Math.abs(f),c=Math.max(c,g.height)),f=u}}if(t.comments!==null){r&&!h||!o&&!l&&h||o&&l&&h?(a+=Math.abs(t.commentMargin),c=Math.max(0,c-t.height)):(c+=Math.abs(t.commentMargin),a=Math.max(0,a-t.width));const d=Rect.V(0,0,t.bounds.width+a,t.bounds.height+c);t.bounds=d,Rect.o(d)}}isBusAlignment(t){return t===24||t===25||t===26||t===27}vw(t){return t===24||t===25}iT(t){Debug&&U.s(t,TreeVertex,TreeLayout,"isLeftSideBus:v");const i=t.parent;if(i!==null){const e=i.alignment;if(this.isBusAlignment(e))if(this.vw(e)){const s=i.children;let n=0;for(;n<s.length&&t!==s[n];)n++;return n%2===0}else return e===26}return!1}layoutComments(t){if(Debug&&U.s(t,TreeVertex,TreeLayout,"layoutComments:v"),t.comments!==null){const e=t.node.measuredBounds,s=t.parent,n=t.angle;let o=0,r=21,l=!1;s!==null&&(o=s.angle,r=s.alignment,l=this.isBusAlignment(r));const h=n===90||n===270,a=o===90||o===270,c=t.childrenCount===0,f=this.iT(t);let u=0;const d=t.comments,m=d.length,g=Point.a();for(let y=0;y<m;y++){const x=d[y],b=x.measuredBounds;if(h&&!c||!l&&!a&&c||l&&a&&c){if(o>135&&!l||a&&f)if(t.commentMargin>=0){g.e(t.bounds.x-t.commentMargin-b.width,t.bounds.y+u),x.move(g);const S=x.findLinksInto();for(;S.next();){const k=S.value;k.fromSpot=Spot.MiddleLeft,k.toSpot=Spot.MiddleRight}}else{g.e(t.bounds.x+t.focus.x*2-t.commentMargin,t.bounds.y+u),x.move(g);const S=x.findLinksInto();for(;S.next();){const k=S.value;k.fromSpot=Spot.MiddleRight,k.toSpot=Spot.MiddleLeft}}else if(t.commentMargin>=0){g.e(t.bounds.x+t.focus.x*2+t.commentMargin,t.bounds.y+u),x.move(g);const S=x.findLinksInto();for(;S.next();){const k=S.value;k.fromSpot=Spot.MiddleRight,k.toSpot=Spot.MiddleLeft}}else{g.e(t.bounds.x+t.commentMargin-b.width,t.bounds.y+u),x.move(g);const S=x.findLinksInto();for(;S.next();){const k=S.value;k.fromSpot=Spot.MiddleLeft,k.toSpot=Spot.MiddleRight}}t.commentSpacing>=0?u+=b.height+t.commentSpacing:u+=t.commentSpacing-b.height}else{if(o>135&&!l||!a&&f)if(t.commentMargin>=0){g.e(t.bounds.x+u,t.bounds.y-t.commentMargin-b.height),x.move(g);const S=x.findLinksInto();for(;S.next();){const k=S.value;k.fromSpot=Spot.MiddleTop,k.toSpot=Spot.MiddleBottom}}else{g.e(t.bounds.x+u,t.bounds.y+t.focus.y*2-t.commentMargin),x.move(g);const S=x.findLinksInto();for(;S.next();){const k=S.value;k.fromSpot=Spot.MiddleBottom,k.toSpot=Spot.MiddleTop}}else if(t.commentMargin>=0){g.e(t.bounds.x+u,t.bounds.y+t.focus.y*2+t.commentMargin),x.move(g);const S=x.findLinksInto();for(;S.next();){const k=S.value;k.fromSpot=Spot.MiddleBottom,k.toSpot=Spot.MiddleTop}}else{g.e(t.bounds.x+u,t.bounds.y+t.commentMargin-b.height),x.move(g);const S=x.findLinksInto();for(;S.next();){const k=S.value;k.fromSpot=Spot.MiddleTop,k.toSpot=Spot.MiddleBottom}}t.commentSpacing>=0?u+=b.width+t.commentSpacing:u+=t.commentSpacing-b.width}}Point.o(g);const p=u-t.commentSpacing-(h?e.height:e.width);if(this.Ms===1){const y=t.destinationEdges;for(;y.next();){const b=y.value.link;b!==null&&!b.isAvoiding&&(b.fromEndSegmentLength=p>0?p:NaN)}}else{const y=t.sourceEdges;for(;y.next();){const b=y.value.link;b!==null&&!b.isAvoiding&&(b.toEndSegmentLength=p>0?p:NaN)}}}}qB(){if(this.network===null)return;if(this.layerStyle===62){const i=[];let e=this.network.vertexes.iterator;for(;e.next();){const s=e.value;let n=s.parent;n===null&&(n=s);const o=n.angle===0||n.angle===180;let r=i[s.level];r===void 0&&(r=0),i[s.level]=Math.max(r,o?s.width:s.height)}for(let s=0;s<i.length;s++)i[s]===void 0&&(i[s]=0);for(this._A=i,e=this.network.vertexes.iterator;e.next();){const s=e.value;let n=s.parent;n===null&&(n=s),n.angle===0||n.angle===180?(n.angle===180&&(s.focusX+=i[s.level]-s.width),s.width=i[s.level]):(n.angle===270&&(s.focusY+=i[s.level]-s.height),s.height=i[s.level])}}else if(this.layerStyle===61){const i=this.network.vertexes.iterator;for(;i.next();){const e=i.value,s=e.angle===0||e.angle===180;let n=-1;for(let o=0;o<e.children.length;o++){const r=e.children[o];n=Math.max(n,s?r.width:r.height)}if(n>=0)for(let o=0;o<e.children.length;o++){const r=e.children[o];s?(e.angle===180&&(r.focusX+=n-r.width),r.width=n):(e.angle===270&&(r.focusY+=n-r.height),r.height=n)}}}const t=this.Gi.iterator;for(;t.next();){const i=t.value;i instanceof TreeVertex&&this.layoutTree(i)}}layoutTree(t){if(t===null)return;Debug&&U.s(t,TreeVertex,TreeLayout,"layoutTree:v");const i=t.children,e=i.length;for(let s=0;s<e;s++){const n=i[s];this.layoutTree(n)}switch(t.compaction){case 30:this.wI(t);break;default:case 31:t.alignment===25?this.wI(t):this.JB(t);break}}wI(t){if(Debug&&U.s(t,TreeVertex,TreeLayout,"layoutTreeNone:v"),t.childrenCount===0){let R=!1,I=0,O=21;t.parent!==null&&(I=t.parent.angle,O=t.parent.alignment,R=this.isBusAlignment(O));const X=this.iT(t);t.K.e(0,0),t.kt.e(t.width,t.height),t.parent!==null&&t.comments!==null&&((I===180||I===270)&&!R||X)?I===180&&!R||(I===90||I===270)&&X?t.gt.e(t.width-t.focus.x*2,0):t.gt.e(0,t.height-t.focus.y*2):t.gt.e(0,0);return}const i=this.orthoAngle(t),e=i===90||i===270;let s=0;const n=t.children,o=n.length;for(let R=0;R<o;R++){const I=n[R];s=Math.max(s,e?I.kt.width:I.kt.height)}const r=t.alignment,l=r===22,h=r===23,a=this.isBusAlignment(r),c=Math.max(0,t.breadthLimit),f=this.computeLayerSpacing(t),u=t.nodeSpacing,d=this.computeNodeIndent(t),m=l||h?0:d/2,g=t.rowSpacing;let p=0;(l||h)&&(p=Math.max(0,t.rowIndent));const y=t.width,x=t.height;let b=0,S=0,k=0,P=0,A=0,N=0,M=0,C=0,T=0,L=0;if(a&&!this.vw(r)&&i>135&&n.reverse(),this.vw(r))if(o>1)for(let R=0;R<o;R++){const I=n[R],O=I.kt;R%2===0&&R!==o-1?T=Math.max(T,(e?O.width:O.height)+this.computeBusNodeSpacing(I)-u):R%2!==0&&(L=Math.max(L,(e?O.width:O.height)+this.computeBusNodeSpacing(I)-u))}else o===1&&(T=e?n[0].kt.width:n[0].kt.height);if(a)switch(r){case 24:case 25:const R=Rect.a();i<135?this.xI(t,n,T,L,b,S,R):this.bI(t,n,T,L,b,S,R),T=R.x,b=R.width,S=R.height,Rect.o(R);break;case 26:for(let I=0;I<o;I++){const O=n[I],X=O.kt,Y=M===0?0:g;e?(O.K.e(s-X.width,A+Y),b=Math.max(b,X.width),S=Math.max(S,A+Y+X.height),A+=Y+X.height):(O.K.e(P+Y,s-X.height),b=Math.max(b,P+Y+X.width),S=Math.max(S,X.height),P+=Y+X.width),M++}break;case 27:for(let I=0;I<o;I++){const O=n[I],X=O.kt,Y=M===0?0:g;e?(O.K.e(u/2+t.focus.x,A+Y),b=Math.max(b,X.width),S=Math.max(S,A+Y+X.height),A+=Y+X.height):(O.K.e(P+Y,u/2+t.focus.y),b=Math.max(b,P+Y+X.width),S=Math.max(S,X.height),P+=Y+X.width),M++}break}else for(let R=0;R<o;R++){const I=n[R],O=I.kt;if(e){c>0&&M>0&&P+u+O.width>c&&(P<s&&this.Bc(t,r,s-P,0,C,R-1),N++,M=0,C=R,k=S,P=0,A=i>135?-S-g:S+g);const X=M===0?m:u;this.Ik(I,0,A),I.K.e(P+X,A),b=Math.max(b,P+X+O.width),S=Math.max(S,k+(N===0?0:g)+O.height),P+=X+O.width}else{c>0&&M>0&&A+u+O.height>c&&(A<s&&this.Bc(t,r,0,s-A,C,R-1),N++,M=0,C=R,k=b,A=0,P=i>135?-b-g:b+g);const X=M===0?m:u;this.Ik(I,P,0),I.K.e(P,A+X),S=Math.max(S,A+X+O.height),b=Math.max(b,k+(N===0?0:g)+O.width),A+=X+O.height}M++}N>0&&(e?(S+=Math.max(0,f),P<b&&this.Bc(t,r,b-P,0,C,o-1),p>0&&(h||this.Iu(t,p,0,0,o-1),b+=p)):(b+=Math.max(0,f),A<S&&this.Bc(t,r,0,S-A,C,o-1),p>0&&(h||this.Iu(t,0,p,0,o-1),S+=p)));let D=0,F=0;switch(r){case 20:e?D+=b/2-t.focus.x-d/2:F+=S/2-t.focus.y-d/2;break;default:case 21:if(N>0)e?D+=b/2-t.focus.x-d/2:F+=S/2-t.focus.y-d/2;else{const I=o;if(e){const O=n[0].K.x+n[0].gt.x,X=n[I-1].K.x+n[I-1].gt.x+n[I-1].focus.x*2;D+=O+(X-O)/2-t.focus.x-d/2}else{const O=n[0].K.y+n[0].gt.y,X=n[I-1].K.y+n[I-1].gt.y+n[I-1].focus.y*2;F+=O+(X-O)/2-t.focus.y-d/2}}break;case 22:e?(D-=d,b+=d):(F-=d,S+=d);break;case 23:e?(D+=b-t.width+d,b+=d):(F+=S-t.height+d,S+=d);break;case 24:case 25:e?o>1?D+=T+u/2-t.focus.x:D+=n[0].focus.x-t.focus.x+n[0].gt.x:o>1?F+=T+u/2-t.focus.y:F+=n[0].focus.y-t.focus.y+n[0].gt.y;break;case 26:e?D+=b+u/2-t.focus.x:F+=S+u/2-t.focus.y;break;case 27:break;case 28:const R=this.customAlignment(t,D,F,b,S);D=R[0],F=R[1],b=R[2],S=R[3];break}for(let R=0;R<o;R++){const I=n[R];e?I.K.e(I.K.x+I.gt.x-D,I.K.y+(i>135?(a?-S:-I.kt.height)+I.gt.y-f:x+f+I.gt.y)):I.K.e(I.K.x+(i>135?(a?-b:-I.kt.width)+I.gt.x-f:y+f+I.gt.x),I.K.y+I.gt.y-F)}e?(b=this.eT(t,b,D),D<0&&(D=0),i>135&&(F+=S+f),S=Math.max(Math.max(S,x),S+x+f)):(i>135&&(D+=b+f),b=Math.max(Math.max(b,y),b+y+f),S=this.sT(t,S,F),F<0&&(F=0)),t.gt.e(D,F),t.kt.e(b,S)}customAlignment(t,i,e,s,n){return[i,e,s,n]}xI(t,i,e,s,n,o,r){Debug&&U.s(t,TreeVertex,TreeLayout,"layoutBusChildrenPosDir:v");const l=i.length;if(l===0)return r.e(e,0,n,o),r;if(l===1){const y=i[0];return n=y.kt.width,o=y.kt.height,r.e(e,0,n,o),r}const h=t.nodeSpacing,a=t.rowSpacing,f=this.orthoAngle(t)===90;let u=0,d=0,m=0;for(let y=0;y<l;y++){if(y%2!==0||l>1&&y===l-1)continue;const x=i[y],b=x.kt,S=u===0?0:a;if(f){const k=this.computeBusNodeSpacing(x)-h;x.K.e(e-(b.width+k),m+S),n=Math.max(n,b.width+k),o=Math.max(o,m+S+b.height),m+=S+b.height}else{const k=this.computeBusNodeSpacing(x)-h;x.K.e(d+S,e-(b.height+k)),o=Math.max(o,b.height+k),n=Math.max(n,d+S+b.width),d+=S+b.width}u++}u=0;const g=d,p=m;f?(d=e+h,m=0):(d=0,m=e+h);for(let y=0;y<l;y++){if(y%2===0)continue;const x=i[y],b=x.kt,S=u===0?0:a;if(f){const k=this.computeBusNodeSpacing(x)-h;x.K.e(d+k,m+S),n=Math.max(n,d+b.width+k),o=Math.max(o,m+S+b.height),m+=S+b.height}else{const k=this.computeBusNodeSpacing(x)-h;x.K.e(d+S,m+k),n=Math.max(n,d+S+b.width),o=Math.max(o,m+b.height+k),d+=S+b.width}u++}if(l>1&&l%2===1){const y=i[l-1],x=y.kt,b=this.computeBusLastRowSpacing(y,f?Math.max(Math.abs(p),Math.abs(m)):Math.max(Math.abs(g),Math.abs(d)));if(f){y.K.e(e+h/2-y.focus.x-y.gt.x,o+b);const S=e+h/2-y.focus.x-y.gt.x;n=Math.max(n,S+x.width),S<0&&(n-=S),o=Math.max(o,Math.max(p,m)+b+x.height),y.K.x<0&&(e=this.Ok(t,y.K.x,!1,e,h))}else{y.K.e(n+b,e+h/2-y.focus.y-y.gt.y),n=Math.max(n,Math.max(g,d)+b+x.width);const S=e+h/2-y.focus.y-y.gt.y;o=Math.max(o,S+x.height),S<0&&(o-=S),y.K.y<0&&(e=this.Ok(t,y.K.y,!0,e,h))}}return r.e(e,0,n,o),r}bI(t,i,e,s,n,o,r){Debug&&U.s(t,TreeVertex,TreeLayout,"layoutBusChildrenNegDir:v");const l=i.length;if(l===0)return r.e(e,0,n,o),r;if(l===1){const y=i[0];return n=y.kt.width,o=y.kt.height,r.e(e,0,n,o),r}const h=t.nodeSpacing,a=t.rowSpacing,f=this.orthoAngle(t)===270;let u=0,d=0,m=0;for(let y=0;y<l;y++){if(y%2!==0||l>1&&y===l-1)continue;const x=i[y],b=x.kt,S=u===0?0:a;if(f){const k=this.computeBusNodeSpacing(x)-h;m-=S+b.height,x.K.e(e-(b.width+k),m),n=Math.max(n,b.width+k),o=Math.max(o,Math.abs(m))}else{const k=this.computeBusNodeSpacing(x)-h;d-=S+b.width,x.K.e(d,e-(b.height+k)),o=Math.max(o,b.height+k),n=Math.max(n,Math.abs(d))}u++}u=0;const g=d,p=m;f?(d=e+h,m=0):(d=0,m=e+h);for(let y=0;y<l;y++){if(y%2===0)continue;const x=i[y],b=x.kt,S=u===0?0:a;if(f){const k=this.computeBusNodeSpacing(x)-h;m-=S+b.height,x.K.e(d+k,m),n=Math.max(n,d+b.width+k),o=Math.max(o,Math.abs(m))}else{const k=this.computeBusNodeSpacing(x)-h;d-=S+b.width,x.K.e(d,m+k),o=Math.max(o,m+b.height+k),n=Math.max(n,Math.abs(d))}u++}if(l>1&&l%2===1){const y=i[l-1],x=y.kt,b=this.computeBusLastRowSpacing(y,f?Math.max(Math.abs(p),Math.abs(m)):Math.max(Math.abs(g),Math.abs(d)));if(f){y.K.e(e+h/2-y.focus.x-y.gt.x,-o-x.height-b);const S=e+h/2-y.focus.x-y.gt.x;n=Math.max(n,S+x.width),S<0&&(n-=S),o=Math.max(o,Math.abs(Math.min(p,m))+b+x.height),y.K.x<0&&(e=this.Ok(t,y.K.x,!1,e,h))}else{y.K.e(-n-x.width-b,e+h/2-y.focus.y-y.gt.y),n=Math.max(n,Math.abs(Math.min(g,d))+b+x.width);const S=e+h/2-y.focus.y-y.gt.y;o=Math.max(o,S+x.height),S<0&&(o-=S),y.K.y<0&&(e=this.Ok(t,y.K.y,!0,e,h))}}for(let y=0;y<l;y++){const x=i[y];f?x.K.e(x.K.x,x.K.y+o):x.K.e(x.K.x+n,x.K.y)}return r.e(e,0,n,o),r}computeBusNodeSpacing(t){return Debug&&U.s(t,TreeVertex,TreeLayout,"fixRelativePostions:child"),t.parent===null?0:t.parent.nodeSpacing}computeBusLastRowSpacing(t,i){return Debug&&U.s(t,TreeVertex,TreeLayout,"fixRelativePostions:lastchild"),t.parent===null?0:t.parent.rowSpacing}Ok(t,i,e,s,n){Debug&&U.s(t,TreeVertex,TreeLayout,"fixRelativePostions:v");const o=t.children,r=o.length;for(let h=0;h<r;h++)e?o[h].K.e(o[h].K.x,o[h].K.y-i):o[h].K.e(o[h].K.x-i,o[h].K.y);const l=o[r-1];return Math.max(s,e?l.gt.y+l.focus.y-n/2:l.gt.x+l.focus.x-n/2)}eT(t,i,e){switch(Debug&&U.s(t,TreeVertex,TreeLayout,"calculateSubwidth:v"),t.alignment){case 21:case 20:let s=i;return e+t.width>s&&(s=e+t.width),e<0&&(s-=e),s;case 22:return t.width>i?t.width:i;case 23:return t.focus.x*2>i?t.width:i+t.width-t.focus.x*2;case 24:case 25:const n=Math.min(0,e),o=Math.max(i,e+t.width);return Math.max(t.width,o-n);case 26:return t.width-t.focus.x+t.nodeSpacing/2+i;case 27:return Math.max(t.width,t.focus.x+t.nodeSpacing/2+i);default:return i}}sT(t,i,e){switch(Debug&&U.s(t,TreeVertex,TreeLayout,"calculateSubheight:v"),t.alignment){case 21:case 20:let s=i;return e+t.height>s&&(s=e+t.height),e<0&&(s-=e),s;case 22:return t.height>i?t.height:i;case 23:return t.focus.y*2>i?t.height:i+t.height-t.focus.y*2;case 24:case 25:const n=Math.min(0,e),o=Math.max(i,e+t.height);return Math.max(t.height,o-n);case 26:return t.height-t.focus.y+t.nodeSpacing/2+i;case 27:return Math.max(t.height,t.focus.y+t.nodeSpacing/2+i);default:return i}}nT(t,i,e){switch(Debug&&U.j(t,TreeAlignment,"TreeAlignment"),t){case 20:i/=2,e/=2;break;case 21:i/=2,e/=2;break;case 22:i=0,e=0;break;case 23:break;default:U.n("Unhandled alignment value "+t.toString())}return new Point(i,e)}Bc(t,i,e,s,n,o){Debug&&U.s(t,TreeVertex,TreeLayout,"shiftRelPosAlign:v"),Debug&&U.j(i,TreeAlignment,"TreeAlignment");const r=this.nT(i,e,s);this.Iu(t,r.x,r.y,n,o)}Iu(t,i,e,s,n){if(Debug&&U.s(t,TreeVertex,TreeLayout,"shiftRelPos:v"),i===0&&e===0)return;const o=t.children;for(let r=s;r<=n;r++){const h=o[r].K;h.x+=i,h.y+=e}}Ik(t,i,e){Debug&&(U.s(t,TreeVertex,TreeLayout,"recordMidPoints:v"),U.i(i,"number",TreeLayout,"recordMidPoints:x"),U.i(e,"number",TreeLayout,"recordMidPoints:y"));const s=t.parent;switch(this.Ms){case 1:{const n=t.sourceEdges;for(;n.next();){const o=n.value;o.fromVertex===s&&o.relativePoint.e(i,e)}break}case 2:{const n=t.destinationEdges;for(;n.next();){const o=n.value;o.toVertex===s&&o.relativePoint.e(i,e)}break}default:U.n("Unhandled path value "+this.Ms.toString())}}JB(t){if(Debug&&U.s(t,TreeVertex,TreeLayout,"layoutTreeBlock:v"),t.childrenCount===0){const z=t.parent;let H=!1,v=0,j=21;z!==null&&(v=z.angle,j=z.alignment,H=this.isBusAlignment(j));const $=this.iT(t);t.K.e(0,0),t.kt.e(t.width,t.height),t.parent!==null&&t.comments!==null&&((v===180||v===270)&&!H||$)?v===180&&!H||(v===90||v===270)&&$?t.gt.e(t.width-t.focus.x*2,0):t.gt.e(0,t.height-t.focus.y*2):t.gt.e(0,0),t.mm=null,t.pm=null;return}const i=this.orthoAngle(t),e=i===90||i===270;let s=0;const n=t.children,o=n.length;for(let z=0;z<o;z++){const H=n[z];s=Math.max(s,e?H.kt.width:H.kt.height)}const r=t.alignment,l=r===22,h=r===23,a=this.isBusAlignment(r),c=Math.max(0,t.breadthLimit),f=this.computeLayerSpacing(t),u=t.nodeSpacing,d=this.computeNodeIndent(t),m=t.rowSpacing;let g=0;(l||h)&&(g=Math.max(0,t.rowIndent));const p=t.width,y=t.height;let x=0,b=0,S=0,k=null,P=null,A=0,N=0,M=0,C=0,T=0,L=0,D=0,F=0,R=0;if(a&&!this.vw(r)&&i>135&&n.reverse(),this.vw(r))if(o>1)for(let z=0;z<o;z++)z%2===0&&z!==o-1?F=Math.max(F,e?n[z].kt.width:n[z].kt.height):z%2!==0&&(R=Math.max(R,e?n[z].kt.width:n[z].kt.height));else o===1&&(F=e?n[0].kt.width:n[0].kt.height);if(a){switch(r){case 24:const z=Rect.a();i<135?this.xI(t,n,F,R,x,b,z):this.bI(t,n,F,R,x,b,z),F=z.x,x=z.width,b=z.height,Rect.o(z);break;case 26:for(let H=0;H<o;H++){const v=n[H],j=v.kt,$=L===0?0:m;e?(v.K.e(s-j.width,C+$),x=Math.max(x,j.width),b=Math.max(b,C+$+j.height),C+=$+j.height):(v.K.e(M+$,s-j.height),x=Math.max(x,M+$+j.width),b=Math.max(b,j.height),M+=$+j.width),L++}break;case 27:for(let H=0;H<o;H++){const v=n[H],j=v.kt,$=L===0?0:m;e?(v.K.e(u/2+t.focus.x,C+$),x=Math.max(x,j.width),b=Math.max(b,C+$+j.height),C+=$+j.height):(v.K.e(M+$,u/2+t.focus.y),x=Math.max(x,M+$+j.width),b=Math.max(b,j.height),M+=$+j.width),L++}break}k=this.ke(2),P=this.ke(2),e?(k[0].e(0,0),k[1].e(0,b),P[0].e(x,0),P[1].e(x,b)):(k[0].e(0,0),k[1].e(x,0),P[0].e(0,b),P[1].e(x,b))}else for(let z=0;z<o;z++){const H=n[z],v=H.kt;if(e){c>0&&L>0&&M+u+v.width>c&&(M<s&&this.Bc(t,r,s-M,0,D,z-1),T++,L=0,D=z,S=b,M=0,C=i>135?-b-m:b+m),this.Ik(H,0,C);let j=0;if(L===0)k=H.mm,P=H.pm,A=v.width,N=v.height,(k===null||P===null||i!==this.orthoAngle(H))&&(k=this.ke(2),P=this.ke(2),k[0].e(0,0),k[1].e(0,N),P[0].e(A,0),P[1].e(A,N));else{const $=U.ct(),q=Rect.a();this.SI(t,H,k,P,A,N,$,q),j=q.x,k=$[0],P=$[1],A=q.width,N=q.height,U.nt($),M<v.width&&j<0&&(this.Iu(t,-j,0,D,z-1),this.Ek(k,-j,0),this.Ek(P,-j,0),j=0),Rect.o(q)}H.K.e(j,C),x=Math.max(x,A),b=Math.max(b,S+(T===0?0:m)+v.height),M=A}else{c>0&&L>0&&C+u+v.height>c&&(C<s&&this.Bc(t,r,0,s-C,D,z-1),T++,L=0,D=z,S=x,C=0,M=i>135?-x-m:x+m),this.Ik(H,M,0);let j=0;if(L===0)k=H.mm,P=H.pm,A=v.width,N=v.height,(k===null||P===null||i!==this.orthoAngle(H))&&(k=this.ke(2),P=this.ke(2),k[0].e(0,0),k[1].e(A,0),P[0].e(0,N),P[1].e(A,N));else{const $=U.ct(),q=Rect.a();this.SI(t,H,k,P,A,N,$,q),j=q.x,k=$[0],P=$[1],A=q.width,N=q.height,U.nt($),C<v.height&&j<0&&(this.Iu(t,0,-j,D,z-1),this.Ek(k,0,-j),this.Ek(P,0,-j),j=0),Rect.o(q)}H.K.e(M,j),b=Math.max(b,N),x=Math.max(x,S+(T===0?0:m)+v.width),C=N}L++}T>0&&(e?(b+=Math.max(0,f),M<x&&this.Bc(t,r,x-M,0,D,o-1),g>0&&(h||this.Iu(t,g,0,0,o-1),x+=g)):(x+=Math.max(0,f),C<b&&this.Bc(t,r,0,b-C,D,o-1),g>0&&(h||this.Iu(t,0,g,0,o-1),b+=g)));let I=0,O=0;switch(r){case 20:e?I+=x/2-t.focus.x-d/2:O+=b/2-t.focus.y-d/2;break;default:case 21:if(T>0)e?I+=x/2-t.focus.x-d/2:O+=b/2-t.focus.y-d/2;else{const H=o;if(e){const v=n[0].K.x+n[0].gt.x,j=n[H-1].K.x+n[H-1].gt.x+n[H-1].focus.x*2;I+=v+(j-v)/2-t.focus.x-d/2}else{const v=n[0].K.y+n[0].gt.y,j=n[H-1].K.y+n[H-1].gt.y+n[H-1].focus.y*2;O+=v+(j-v)/2-t.focus.y-d/2}}break;case 22:e?(I-=d,x+=d):(O-=d,b+=d);break;case 23:e?(I+=x-t.width+d,x+=d):(O+=b-t.height+d,b+=d);break;case 24:e?o>1?I+=F+u/2-t.focus.x:I+=n[0].focus.x-t.focus.x+n[0].gt.x:o>1?O+=F+u/2-t.focus.y:O+=n[0].focus.y-t.focus.y+n[0].gt.y;break;case 26:e?I+=x+u/2-t.focus.x:O+=b+u/2-t.focus.y;break;case 27:break;case 28:const z=this.customAlignment(t,I,O,x,b);I=z[0],O=z[1],x=z[2],b=z[3];break}for(let z=0;z<o;z++){const H=n[z];e?H.K.e(H.K.x+H.gt.x-I,H.K.y+(i>135?(a?-b:-H.kt.height)+H.gt.y-f:y+f+H.gt.y)):H.K.e(H.K.x+(i>135?(a?-x:-H.kt.width)+H.gt.x-f:p+f+H.gt.x),H.K.y+H.gt.y-O)}let X=0,Y=0;if(a)e?(x=this.eT(t,x,I),I<0&&(I=0),i>135&&(O+=b+f),b+=y+f,r===27&&(X+=u/2+t.focus.x),Y+=y+f):(i>135&&(I+=x+f),x+=p+f,b=this.sT(t,b,O),O<0&&(O=0),r===27&&(Y+=u/2+t.focus.y),X+=p+f);else if(e){if(t.comments===null){if(p>x){const z=this.nT(r,p-x,0);X=z.x,Y=z.y,x=p,I=0}}else x=this.eT(t,x,I);I<0&&(X-=I,I=0),i>135&&(O+=b+f),b=Math.max(Math.max(b,y),b+y+f),Y+=y+f}else{if(i>135&&(I+=x+f),x=Math.max(Math.max(x,p),x+p+f),t.comments===null){if(y>b){const z=this.nT(r,0,y-b);X=z.x,Y=z.y,b=y,O=0}}else b=this.sT(t,b,O);O<0&&(Y-=O,O=0),X+=p+f}let B,K;if(T>0)B=this.ke(4),K=this.ke(4),e?(B[2].e(0,y+f),B[3].e(B[2].x,b),K[2].e(x,B[2].y),K[3].e(K[2].x,B[3].y)):(B[2].e(p+f,0),B[3].e(x,B[2].y),K[2].e(B[2].x,b),K[3].e(B[3].x,K[2].y));else{B=this.ke(k.length+2),K=this.ke(P.length+2);for(let z=0;z<k.length;z++){const H=k[z];B[z+2].e(H.x+X,H.y+Y)}for(let z=0;z<P.length;z++){const H=P[z];K[z+2].e(H.x+X,H.y+Y)}}e?(B[0].e(I,0),B[1].e(B[0].x,y),B[2].y<B[1].y&&(B[2].x>B[0].x?B[2].f(B[1]):B[1].f(B[2])),B[3].y<B[2].y&&(B[3].x>B[0].x?B[3].f(B[2]):B[2].f(B[3])),K[0].e(I+p,0),K[1].e(K[0].x,y),K[2].y<K[1].y&&(K[2].x<K[0].x?K[2].f(K[1]):K[1].f(K[2])),K[3].y<K[2].y&&(K[3].x<K[0].x?K[3].f(K[2]):K[2].f(K[3])),B[2].y-=f/2,K[2].y-=f/2):(B[0].e(0,O),B[1].e(p,B[0].y),B[2].x<B[1].x&&(B[2].y>B[0].y?B[2].f(B[1]):B[1].f(B[2])),B[3].x<B[2].x&&(B[3].y>B[0].y?B[3].f(B[2]):B[2].f(B[3])),K[0].e(0,O+y),K[1].e(p,K[0].y),K[2].x<K[1].x&&(K[2].y<K[0].y?K[2].f(K[1]):K[1].f(K[2])),K[3].x<K[2].x&&(K[3].y<K[0].y?K[3].f(K[2]):K[2].f(K[3])),B[2].x-=f/2,K[2].x-=f/2),this.bn(k),this.bn(P),t.mm=B,t.pm=K,t.gt.e(I,O),t.kt.e(x,b)}Ek(t,i,e){for(let s=0;s<t.length;s++){const n=t[s];n.x+=i,n.y+=e}}SI(t,i,e,s,n,o,r,l){Debug&&U.s(t,TreeVertex,TreeLayout,"mergeFringes:parent"),Debug&&U.s(i,TreeVertex,TreeLayout,"mergeFringes:child");const h=this.orthoAngle(t),a=h===90||h===270,c=t.nodeSpacing,f=e,u=s,d=n,m=o;let g=i.mm,p=i.pm;const y=i.kt,x=a?Math.max(m,y.height):Math.max(d,y.width);if((g===null||h!==this.orthoAngle(i))&&(g=this.ke(2),p=this.ke(2),a?(g[0].e(0,0),g[1].e(0,y.height),p[0].e(y.width,0),p[1].e(p[0].x,g[1].y)):(g[0].e(0,0),g[1].e(y.width,0),p[0].e(0,y.height),p[1].e(g[1].x,p[0].y))),a){const b=d;let S=b-this.$B(u,g,b);return S+=c,e=this.ZB(f,g,S),s=this.QB(u,p,S),n=Math.max(0,S)+y.width,o=x,this.bn(f),this.bn(g),this.bn(u),this.bn(p),r[0]=e,r[1]=s,l.e(S,0,n,o),l}else{const b=m;let S=b-this._B(u,g,b);return S+=c,e=this.tV(f,g,S),s=this.iV(u,p,S),n=x,o=Math.max(0,S)+y.height,this.bn(f),this.bn(g),this.bn(u),this.bn(p),r[0]=e,r[1]=s,l.e(S,0,n,o),l}}tV(t,i,e){if(t===null||t.length<2||i===null||i.length<2)return null;const s=this.ke(t.length+i.length);let n=0,o=0,r=0;for(;o<i.length&&i[o].x<t[0].x;){const a=i[o++];s[r++].e(a.x,a.y+e)}for(;n<t.length;){const a=t[n++];s[r++].e(a.x,a.y)}const l=t[t.length-1].x;for(;o<i.length&&i[o].x<=l;)o++;for(;o<i.length&&i[o].x>l;){const a=i[o++];s[r++].e(a.x,a.y+e)}const h=this.ke(r);for(n=0;n<r;n++)h[n].f(s[n]);return this.bn(s),h}ZB(t,i,e){if(t===null||t.length<2||i===null||i.length<2)return null;const s=this.ke(t.length+i.length);let n=0,o=0,r=0;for(;o<i.length&&i[o].y<t[0].y;){const a=i[o++];s[r++].e(a.x+e,a.y)}for(;n<t.length;){const a=t[n++];s[r++].e(a.x,a.y)}const l=t[t.length-1].y;for(;o<i.length&&i[o].y<=l;)o++;for(;o<i.length&&i[o].y>l;){const a=i[o++];s[r++].e(a.x+e,a.y)}const h=this.ke(r);for(n=0;n<r;n++)h[n].f(s[n]);return this.bn(s),h}iV(t,i,e){if(t===null||t.length<2||i===null||i.length<2)return null;const s=this.ke(t.length+i.length);let n=0,o=0,r=0;for(;n<t.length&&t[n].x<i[0].x;){const a=t[n++];s[r++].e(a.x,a.y)}for(;o<i.length;){const a=i[o++];s[r++].e(a.x,a.y+e)}const l=i[i.length-1].x;for(;n<t.length&&t[n].x<=l;)n++;for(;n<t.length&&t[n].x>l;){const a=t[n++];s[r++].e(a.x,a.y)}const h=this.ke(r);for(n=0;n<r;n++)h[n].f(s[n]);return this.bn(s),h}QB(t,i,e){if(t===null||t.length<2||i===null||i.length<2)return null;const s=this.ke(t.length+i.length);let n=0,o=0,r=0;for(;n<t.length&&t[n].y<i[0].y;){const a=t[n++];s[r++].e(a.x,a.y)}for(;o<i.length;){const a=i[o++];s[r++].e(a.x+e,a.y)}const l=i[i.length-1].y;for(;n<t.length&&t[n].y<=l;)n++;for(;n<t.length&&t[n].y>l;){const a=t[n++];s[r++].e(a.x,a.y)}const h=this.ke(r);for(n=0;n<r;n++)h[n].f(s[n]);return this.bn(s),h}_B(t,i,e){let s=9999999;if(t===null||t.length<2||i===null||i.length<2)return s;let n=0,o=0;for(;n<t.length&&o<i.length;){const r=t[n],l=i[o],h=l.x;let a=l.y;a+=e;let c=r;n+1<t.length&&(c=t[n+1]);let f=l,u=f.x,d=f.y;o+1<i.length&&(f=i[o+1],u=f.x,d=f.y,d+=e);let m=s;r.x===h?m=a-r.y:r.x>h&&r.x<u?m=a+(r.x-h)/(u-h)*(d-a)-r.y:h>r.x&&h<c.x&&(m=a-(r.y+(h-r.x)/(c.x-r.x)*(c.y-r.y))),m<s&&(s=m),c.x<=r.x?n++:u<=h?o++:(c.x<=u&&n++,u<=c.x&&o++)}return s}$B(t,i,e){let s=9999999;if(t===null||t.length<2||i===null||i.length<2)return s;let n=0,o=0;for(;n<t.length&&o<i.length;){const r=t[n],l=i[o];let h=l.x;const a=l.y;h+=e;let c=r;n+1<t.length&&(c=t[n+1]);let f=l,u=f.x,d=f.y;o+1<i.length&&(f=i[o+1],u=f.x,d=f.y,u+=e);let m=s;r.y===a?m=h-r.x:r.y>a&&r.y<d?m=h+(r.y-a)/(d-a)*(u-h)-r.x:a>r.y&&a<c.y&&(m=h-(r.x+(a-r.y)/(c.y-r.y)*(c.x-r.x))),m<s&&(s=m),c.y<=r.y?n++:d<=a?o++:(c.y<=d&&n++,d<=c.y&&o++)}return s}ke(t){const i=this.Rk[t];if(i!==void 0){const s=i.pop();if(s!==void 0)return s}const e=[];for(let s=0;s<t;s++)e[s]=new Point;return e}bn(t){if(!t)return;const i=t.length;let e=this.Rk[i];e===void 0&&(e=[],this.Rk[i]=e),e.push(t)}arrangeTrees(){if(this.te===52){const t=this.Gi.iterator;for(;t.next();){const i=t.value;if(!(i instanceof TreeVertex))continue;const e=i.node;if(e===null)continue;const s=e.position;let n=s.x,o=s.y;isFinite(n)||(n=0),isFinite(o)||(o=0),this.oT(i,n,o)}}else{const t=[],i=this.Gi.iterator;for(;i.next();){const o=i.value;o instanceof TreeVertex&&t.push(o)}switch(this.sorting){default:case 10:break;case 11:t.reverse();break;case 12:t.sort(this.comparer);break;case 13:t.sort(this.comparer),t.reverse();break}const e=this.arrangementOrigin;let s=e.x,n=e.y;for(let o=0;o<t.length;o++){const r=t[o];switch(this.oT(r,s+r.gt.x,n+r.gt.y),this.te){case 50:n+=r.kt.height+this.vs.height;break;default:case 51:s+=r.kt.width+this.vs.width;break}}}}oT(t,i,e){if(t===null)return;Debug&&U.s(t,TreeVertex,TreeLayout,"assignAbsolutePositions:v"),t.x=i,t.y=e;const s=t.children,n=s.length;for(let o=0;o<n;o++){const r=s[o];this.oT(r,i+r.K.x,e+r.K.y)}}commitLayout(){this.Vw(),this.commitNodes(),this.QA(),this.isRouting&&this.commitLinks()}commitNodes(){if(this.network===null)return;const t=this.network.vertexes.iterator;for(;t.next();)t.value.commit();for(t.reset();t.next();){const i=t.value;this.layoutComments(i)}}QA(){if(this.network===null||this.layerStyle!==62)return;const t=this._A,i=[];let e;const s=this.network.vertexes.iterator;for(;s.next();){const h=s.value;e===void 0?e=h.bounds.copy():e.unionRect(h.bounds);let a=i[h.level];a===void 0?a=this.computeLayerSpacing(h):a=Math.max(a,this.computeLayerSpacing(h)),i[h.level]=a}if(!e)return;for(let h=0;h<i.length;h++)i[h]===void 0&&(i[h]=0);let n;this.angle===90||this.angle===270?(e.inflate(this.nodeSpacing/2,this.layerSpacing),n=new Point(-this.nodeSpacing/2,-this.layerSpacing/2)):(e.inflate(this.layerSpacing,this.nodeSpacing/2),n=new Point(-this.layerSpacing/2,-this.nodeSpacing/2));const o=[],r=this.angle===90||this.angle===270?e.width:e.height;let l=0;if(this.angle===180||this.angle===270)for(let h=0;h<t.length;h++)l+=t[h]+i[h];for(let h=0;h<t.length;h++){const a=t[h]+i[h];this.angle===270?(l-=a,o.push(new Rect(0,l,r,a))):this.angle===90?(o.push(new Rect(0,l,r,a)),l+=a):this.angle===180?(l-=a,o.push(new Rect(l,0,a,r))):(o.push(new Rect(l,0,a,r)),l+=a)}this.commitLayers(o,n)}commitLayers(t,i){}commitLinks(){if(this.network===null)return;const t=this.network.edges.iterator;for(;t.next();)t.value.commit()}Vw(){const t=this.Gi.iterator;for(;t.next();){const i=t.value;i instanceof TreeVertex&&this.kI(i)}}kI(t){if(t===null)return;Debug&&U.s(t,TreeVertex,TreeLayout,"setPortSpotsTree:v"),this.setPortSpots(t);const i=t.children,e=i.length;for(let s=0;s<e;s++){const n=i[s];this.kI(n)}}setPortSpots(t){Debug&&U.s(t,TreeVertex,TreeLayout,"setPortSpots:v");const i=t.alignment;if(this.isBusAlignment(i))this.eV(t,i);else{const e=this.orthoAngle(t);if(this.Ms===1){const s=t.destinationEdges;for(;s.next();){const o=s.value.link;if(o!==null){if(t.setsPortSpot)if(t.portSpot.isDefault())switch(e){case 0:o.fromSpot=Spot.MiddleRight;break;case 90:o.fromSpot=Spot.MiddleBottom;break;case 180:o.fromSpot=Spot.MiddleLeft;break;default:o.fromSpot=Spot.MiddleTop;break}else o.fromSpot=t.portSpot;if(t.setsChildPortSpot)if(t.childPortSpot.isDefault())switch(e){case 0:o.toSpot=Spot.MiddleLeft;break;case 90:o.toSpot=Spot.MiddleTop;break;case 180:o.toSpot=Spot.MiddleRight;break;default:o.toSpot=Spot.MiddleBottom;break}else o.toSpot=t.childPortSpot}}}else{const s=t.sourceEdges;for(;s.next();){const o=s.value.link;if(o!==null){if(t.setsPortSpot)if(t.portSpot.isDefault())switch(e){case 0:o.toSpot=Spot.MiddleRight;break;case 90:o.toSpot=Spot.MiddleBottom;break;case 180:o.toSpot=Spot.MiddleLeft;break;default:o.toSpot=Spot.MiddleTop;break}else o.toSpot=t.portSpot;if(t.setsChildPortSpot)if(t.childPortSpot.isDefault())switch(e){case 0:o.fromSpot=Spot.MiddleLeft;break;case 90:o.fromSpot=Spot.MiddleTop;break;case 180:o.fromSpot=Spot.MiddleRight;break;default:o.fromSpot=Spot.MiddleBottom;break}else o.fromSpot=t.childPortSpot}}}}}eV(t,i){Debug&&U.s(t,TreeVertex,TreeLayout,"setPortSpotsBus:v"),Debug&&U.j(i,TreeAlignment,"TreeAlignment");const e=this.Ms===1,s=this.orthoAngle(t);let n;switch(s){case 0:n=Spot.MiddleRight;break;case 90:n=Spot.MiddleBottom;break;case 180:n=Spot.MiddleLeft;break;default:n=Spot.MiddleTop;break}const o=t.children,r=o.length;switch(i){case 24:case 25:{for(let l=0;l<r;l++){const h=o[l],a=(e?h.sourceEdges:h.destinationEdges).first();if(a===null)continue;const c=a.link;if(c!==null){let f=s===90||s===270?Spot.MiddleLeft:Spot.MiddleTop;if(r===1||l===r-1&&r%2===1)switch(s){case 0:f=Spot.MiddleLeft;break;case 90:f=Spot.MiddleTop;break;case 180:f=Spot.MiddleRight;break;default:f=Spot.MiddleBottom;break}else l%2===0&&(f=s===90||s===270?Spot.MiddleRight:Spot.MiddleBottom);e?(t.setsPortSpot&&(c.fromSpot=n),t.setsChildPortSpot&&(c.toSpot=f)):(t.setsPortSpot&&(c.fromSpot=f),t.setsChildPortSpot&&(c.toSpot=n))}}break}case 26:{const l=s===90||s===270?Spot.MiddleRight:Spot.MiddleBottom,h=e?t.destinationEdges:t.sourceEdges;for(;h.next();){const c=h.value.link;c!==null&&(e?(t.setsPortSpot&&(c.fromSpot=n),t.setsChildPortSpot&&(c.toSpot=l)):(t.setsPortSpot&&(c.fromSpot=l),t.setsChildPortSpot&&(c.toSpot=n)))}break}case 27:{const l=s===90||s===270?Spot.MiddleLeft:Spot.MiddleTop,h=e?t.destinationEdges:t.sourceEdges;for(;h.next();){const c=h.value.link;c!==null&&(e?(t.setsPortSpot&&(c.fromSpot=n),t.setsChildPortSpot&&(c.toSpot=l)):(t.setsPortSpot&&(c.fromSpot=l),t.setsChildPortSpot&&(c.toSpot=n)))}break}}}orthoAngle(t){const i=t.angle;return i<=45?0:i<=135?90:i<=225?180:i<=315?270:0}computeLayerSpacing(t){Debug&&U.s(t,TreeVertex,TreeLayout,"computeLayerSpacing:v");const i=this.orthoAngle(t),e=i===90||i===270;let s=t.layerSpacing;if(t.layerSpacingParentOverlap>0){const n=Math.min(1,t.layerSpacingParentOverlap);s-=e?t.height*n:t.width*n}return s<(e?-t.height:-t.width)&&(s=e?-t.height:-t.width),s}computeNodeIndent(t){Debug&&U.s(t,TreeVertex,TreeLayout,"computeNodeIndent:v");const i=this.orthoAngle(t),e=i===90||i===270;let s=t.nodeIndent;if(t.nodeIndentPastParent>0){const n=Math.min(1,t.nodeIndentPastParent);s+=e?t.width*n:t.height*n}return s=Math.max(0,s),s}get roots(){return this.Gi}set roots(t){this.Gi!==t&&(U.s(t,GSet,TreeLayout,"roots"),this.Gi=t,this.w())}get path(){return this.Ki}set path(t){this.Ki!==t&&(U.j(t,TreePath,"TreePath"),this.Ki=t,this.w())}get treeStyle(){return this.Ru}set treeStyle(t){this.Ru!==t&&(U.j(t,TreeStyle,"TreeStyle"),(t===40||t===42||t===41||t===43)&&(this.Ru=t,this.w()))}get layerStyle(){return this.gm}set layerStyle(t){this.gm!==t&&(U.j(t,TreeLayerStyle,"TreeLayerStyle"),(t===60||t===61||t===62)&&(this.gm=t,this.w()))}get comments(){return this.Je}set comments(t){this.Je!==t&&(U.i(t,"boolean",TreeLayout,"comments"),this.Je=t,this.w())}get arrangement(){return this.te}set arrangement(t){this.te!==t&&(U.j(t,TreeArrangement,"TreeArrangement"),(t===50||t===51||t===52)&&(this.te=t,this.w()))}get arrangementSpacing(){return this.vs}set arrangementSpacing(t){U.s(t,Size,TreeLayout,"arrangementSpacing"),this.vs.equals(t)||(this.vs.f(t),this.w())}get rootDefaults(){return this.U}set rootDefaults(t){this.U!==t&&(U.s(t,TreeVertex,TreeLayout,"rootDefaults"),this.U=t,this.w())}get alternateDefaults(){return this.G}set alternateDefaults(t){this.G!==t&&(U.s(t,TreeVertex,TreeLayout,"alternateDefaults"),this.G=t,this.w())}get sorting(){return this.U.sorting}set sorting(t){this.U.sorting!==t&&(U.j(t,TreeSorting,"TreeSorting"),this.U.sorting=t,this.w())}get comparer(){return this.U.comparer}set comparer(t){this.U.comparer!==t&&(U.C(t,TreeLayout,"comparer"),this.U.comparer=t,this.w())}get angle(){return this.U.angle}set angle(t){this.U.angle!==t&&(U.i(t,"number",TreeLayout,"angle"),t===0||t===90||t===180||t===270?(this.U.angle=t,this.w()):U.n("TreeLayout.angle must be 0, 90, 180, or 270"))}get alignment(){return this.U.alignment}set alignment(t){this.U.alignment!==t&&(U.j(t,TreeAlignment,"TreeAlignment"),this.U.alignment=t,this.w())}get nodeIndent(){return this.U.nodeIndent}set nodeIndent(t){this.U.nodeIndent!==t&&(U.i(t,"number",TreeLayout,"nodeIndent"),t>=0&&(this.U.nodeIndent=t,this.w()))}get nodeIndentPastParent(){return this.U.nodeIndentPastParent}set nodeIndentPastParent(t){this.U.nodeIndentPastParent!==t&&(U.i(t,"number",TreeLayout,"nodeIndentPastParent"),t>=0&&t<=1&&(this.U.nodeIndentPastParent=t,this.w()))}get nodeSpacing(){return this.U.nodeSpacing}set nodeSpacing(t){this.U.nodeSpacing!==t&&(U.i(t,"number",TreeLayout,"nodeSpacing"),this.U.nodeSpacing=t,this.w())}get layerSpacing(){return this.U.layerSpacing}set layerSpacing(t){this.U.layerSpacing!==t&&(U.i(t,"number",TreeLayout,"layerSpacing"),this.U.layerSpacing=t,this.w())}get layerSpacingParentOverlap(){return this.U.layerSpacingParentOverlap}set layerSpacingParentOverlap(t){this.U.layerSpacingParentOverlap!==t&&(U.i(t,"number",TreeLayout,"layerSpacingParentOverlap"),t>=0&&t<=1&&(this.U.layerSpacingParentOverlap=t,this.w()))}get compaction(){return this.U.compaction}set compaction(t){this.U.compaction!==t&&(U.j(t,TreeCompaction,"TreeCompaction"),(t===30||t===31)&&(this.U.compaction=t,this.w()))}get breadthLimit(){return this.U.breadthLimit}set breadthLimit(t){this.U.breadthLimit!==t&&(U.i(t,"number",TreeLayout,"breadthLimit"),t>=0&&(this.U.breadthLimit=t,this.w()))}get rowSpacing(){return this.U.rowSpacing}set rowSpacing(t){this.U.rowSpacing!==t&&(U.i(t,"number",TreeLayout,"rowSpacing"),this.U.rowSpacing=t,this.w())}get rowIndent(){return this.U.rowIndent}set rowIndent(t){this.U.rowIndent!==t&&(U.i(t,"number",TreeLayout,"rowIndent"),t>=0&&(this.U.rowIndent=t,this.w()))}get commentSpacing(){return this.U.commentSpacing}set commentSpacing(t){this.U.commentSpacing!==t&&(U.i(t,"number",TreeLayout,"commentSpacing"),this.U.commentSpacing=t,this.w())}get commentMargin(){return this.U.commentMargin}set commentMargin(t){this.U.commentMargin!==t&&(U.i(t,"number",TreeLayout,"commentMargin"),this.U.commentMargin=t,this.w())}get setsPortSpot(){return this.U.setsPortSpot}set setsPortSpot(t){this.U.setsPortSpot!==t&&(U.i(t,"boolean",TreeLayout,"setsPortSpot"),this.U.setsPortSpot=t,this.w())}get portSpot(){return this.U.portSpot}set portSpot(t){U.s(t,Spot,TreeLayout,"portSpot"),this.U.portSpot.equals(t)||(this.U.portSpot=t,this.w())}get setsChildPortSpot(){return this.U.setsChildPortSpot}set setsChildPortSpot(t){this.U.setsChildPortSpot!==t&&(U.i(t,"boolean",TreeLayout,"setsChildPortSpot"),this.U.setsChildPortSpot=t,this.w())}get childPortSpot(){return this.U.childPortSpot}set childPortSpot(t){U.s(t,Spot,TreeLayout,"childPortSpot"),this.U.childPortSpot.equals(t)||(this.U.childPortSpot=t,this.w())}get alternateSorting(){return this.G.sorting}set alternateSorting(t){this.G.sorting!==t&&(U.j(t,TreeSorting,"TreeSorting"),this.G.sorting=t,this.w())}get alternateComparer(){return this.G.comparer}set alternateComparer(t){this.G.comparer!==t&&(U.C(t,TreeLayout,"alternateComparer"),this.G.comparer=t,this.w())}get alternateAngle(){return this.G.angle}set alternateAngle(t){this.G.angle!==t&&(U.i(t,"number",TreeLayout,"alternateAngle"),(t===0||t===90||t===180||t===270)&&(this.G.angle=t,this.w()))}get alternateAlignment(){return this.G.alignment}set alternateAlignment(t){this.G.alignment!==t&&(U.j(t,TreeAlignment,"TreeAlignment"),this.G.alignment=t,this.w())}get alternateNodeIndent(){return this.G.nodeIndent}set alternateNodeIndent(t){this.G.nodeIndent!==t&&(U.i(t,"number",TreeLayout,"alternateNodeIndent"),t>=0&&(this.G.nodeIndent=t,this.w()))}get alternateNodeIndentPastParent(){return this.G.nodeIndentPastParent}set alternateNodeIndentPastParent(t){this.G.nodeIndentPastParent!==t&&(U.i(t,"number",TreeLayout,"alternateNodeIndentPastParent"),t>=0&&t<=1&&(this.G.nodeIndentPastParent=t,this.w()))}get alternateNodeSpacing(){return this.G.nodeSpacing}set alternateNodeSpacing(t){this.G.nodeSpacing!==t&&(U.i(t,"number",TreeLayout,"alternateNodeSpacing"),this.G.nodeSpacing=t,this.w())}get alternateLayerSpacing(){return this.G.layerSpacing}set alternateLayerSpacing(t){this.G.layerSpacing!==t&&(U.i(t,"number",TreeLayout,"alternateLayerSpacing"),this.G.layerSpacing=t,this.w())}get alternateLayerSpacingParentOverlap(){return this.G.layerSpacingParentOverlap}set alternateLayerSpacingParentOverlap(t){this.G.layerSpacingParentOverlap!==t&&(U.i(t,"number",TreeLayout,"alternateLayerSpacingParentOverlap"),t>=0&&t<=1&&(this.G.layerSpacingParentOverlap=t,this.w()))}get alternateCompaction(){return this.G.compaction}set alternateCompaction(t){this.G.compaction!==t&&(U.j(t,TreeCompaction,"TreeCompaction"),(t===30||t===31)&&(this.G.compaction=t,this.w()))}get alternateBreadthLimit(){return this.G.breadthLimit}set alternateBreadthLimit(t){this.G.breadthLimit!==t&&(U.i(t,"number",TreeLayout,"alternateBreadthLimit"),t>=0&&(this.G.breadthLimit=t,this.w()))}get alternateRowSpacing(){return this.G.rowSpacing}set alternateRowSpacing(t){this.G.rowSpacing!==t&&(U.i(t,"number",TreeLayout,"alternateRowSpacing"),this.G.rowSpacing=t,this.w())}get alternateRowIndent(){return this.G.rowIndent}set alternateRowIndent(t){this.G.rowIndent!==t&&(U.i(t,"number",TreeLayout,"alternateRowIndent"),t>=0&&(this.G.rowIndent=t,this.w()))}get alternateCommentSpacing(){return this.G.commentSpacing}set alternateCommentSpacing(t){this.G.commentSpacing!==t&&(U.i(t,"number",TreeLayout,"alternateCommentSpacing"),this.G.commentSpacing=t,this.w())}get alternateCommentMargin(){return this.G.commentMargin}set alternateCommentMargin(t){this.G.commentMargin!==t&&(U.i(t,"number",TreeLayout,"alternateCommentMargin"),this.G.commentMargin=t,this.w())}get alternateSetsPortSpot(){return this.G.setsPortSpot}set alternateSetsPortSpot(t){this.G.setsPortSpot!==t&&(U.i(t,"boolean",TreeLayout,"alternateSetsPortSpot"),this.G.setsPortSpot=t,this.w())}get alternatePortSpot(){return this.G.portSpot}set alternatePortSpot(t){U.s(t,Spot,TreeLayout,"alternatePortSpot"),this.G.portSpot.equals(t)||(this.G.portSpot=t,this.w())}get alternateSetsChildPortSpot(){return this.G.setsChildPortSpot}set alternateSetsChildPortSpot(t){this.G.setsChildPortSpot!==t&&(U.i(t,"boolean",TreeLayout,"alternateSetsChildPortSpot"),this.G.setsChildPortSpot=t,this.w())}get alternateChildPortSpot(){return this.G.childPortSpot}set alternateChildPortSpot(t){U.s(t,Spot,TreeLayout,"alternateChildPortSpot"),this.G.childPortSpot.equals(t)||(this.G.childPortSpot=t,this.w())}static PathDefault=0;static PathDestination=1;static PathSource=2;static SortingForwards=10;static SortingReverse=11;static SortingAscending=12;static SortingDescending=13;static AlignmentCenterSubtrees=20;static AlignmentCenterChildren=21;static AlignmentStart=22;static AlignmentEnd=23;static AlignmentBus=24;static AlignmentBusBranching=25;static AlignmentTopLeftBus=26;static AlignmentBottomRightBus=27;static CompactionNone=30;static CompactionBlock=31;static StyleLayered=40;static StyleLastParents=41;static StyleAlternating=42;static StyleRootOnly=43;static ArrangementVertical=50;static ArrangementHorizontal=51;static ArrangementFixedRoots=52;static LayerIndividual=60;static LayerSiblings=61;static LayerUniform=62}class TreeNetwork extends LayoutNetwork{constructor(t){super(t)}createVertex(){return new TreeVertex(this)}createEdge(){return new TreeEdge(this)}}class TreeVertex extends LayoutVertex{K;kt;gt;Bk;Vk;zk;Ar;Xk;Yk;Kk;Je;mm;pm;Le;De;jt;xi;Ww;jw;Jw;Ws;$w;Zw;Qw;_w;tx;ix;ex;nx;lx;hx;cx;constructor(t){super(t),this.Bk=!1,this.Vk=null,this.zk=[],this.Ar=0,this.Xk=0,this.Yk=0,this.Kk=0,this.Je=null,this.K=new Point(0,0),this.kt=new Size(0,0),this.gt=new Point(0,0),this.mm=null,this.pm=null,this.Le=10,this.De=LayoutVertex.standardComparer,this.jt=0,this.xi=21,this.Ww=0,this.jw=0,this.Jw=20,this.Ws=50,this.$w=0,this.Zw=31,this.Qw=0,this._w=25,this.tx=10,this.ix=10,this.ex=20,this.nx=!0,this.lx=Spot.Default,this.hx=!0,this.cx=Spot.Default}copyInheritedPropertiesFrom(t){t!==null&&(this.Le=t.sorting,this.De=t.comparer,this.jt=t.angle,this.xi=t.alignment,this.Ww=t.nodeIndent,this.jw=t.nodeIndentPastParent,this.Jw=t.nodeSpacing,this.Ws=t.layerSpacing,this.$w=t.layerSpacingParentOverlap,this.Zw=t.compaction,this.Qw=t.breadthLimit,this._w=t.rowSpacing,this.tx=t.rowIndent,this.ix=t.commentSpacing,this.ex=t.commentMargin,this.nx=t.setsPortSpot,this.lx=t.portSpot,this.hx=t.setsChildPortSpot,this.cx=t.childPortSpot)}get initialized(){return this.Bk}set initialized(t){this.Bk!==t&&(U.i(t,"boolean",TreeVertex,"initialized"),this.Bk=t)}get parent(){return this.Vk}set parent(t){this.Vk!==t&&(Debug&&t!==null&&U.s(t,TreeVertex,TreeVertex,"parent"),this.Vk=t)}get children(){return this.zk}set children(t){if(this.zk!==t){if(t!==null&&!Array.isArray(t)&&U.Ii(t,"Array",TreeVertex,"children:value"),t!==null){const i=t.length;for(let e=0;e<i;e++){const s=t[e];Debug&&U.s(s,TreeVertex,TreeVertex,"children")}}this.zk=t}}get level(){return this.Ar}set level(t){this.Ar!==t&&(U.i(t,"number",TreeVertex,"level"),this.Ar=t)}get descendantCount(){return this.Xk}set descendantCount(t){this.Xk!==t&&(U.i(t,"number",TreeVertex,"descendantCount"),this.Xk=t)}get maxChildrenCount(){return this.Yk}set maxChildrenCount(t){this.Yk!==t&&(U.i(t,"number",TreeVertex,"maxChildrenCount"),this.Yk=t)}get maxGenerationCount(){return this.Kk}set maxGenerationCount(t){this.Kk!==t&&(U.i(t,"number",TreeVertex,"maxGenerationCount"),this.Kk=t)}get comments(){return this.Je}set comments(t){if(this.Je!==t){if(t!==null&&!Array.isArray(t)&&U.Ii(t,"Array",TreeVertex,"comments:value"),t!==null){const i=t.length;for(let e=0;e<i;e++){const s=t[e];Debug&&U.s(s,Node,TreeVertex,"comments")}}this.Je=t}}get sorting(){return this.Le}set sorting(t){this.Le!==t&&(U.j(t,TreeSorting,"TreeSorting"),this.Le=t)}get comparer(){return this.De}set comparer(t){this.De!==t&&(U.C(t,TreeVertex,"comparer"),this.De=t)}get angle(){return this.jt}set angle(t){this.jt!==t&&(U.i(t,"number",TreeVertex,"angle"),this.jt=t)}get alignment(){return this.xi}set alignment(t){this.xi!==t&&(U.j(t,TreeAlignment,"TreeAlignment"),this.xi=t)}get nodeIndent(){return this.Ww}set nodeIndent(t){this.Ww!==t&&(U.i(t,"number",TreeVertex,"nodeIndent"),this.Ww=t)}get nodeIndentPastParent(){return this.jw}set nodeIndentPastParent(t){this.jw!==t&&(U.i(t,"number",TreeVertex,"nodeIndentPastParent"),this.jw=t)}get nodeSpacing(){return this.Jw}set nodeSpacing(t){this.Jw!==t&&(U.i(t,"number",TreeVertex,"nodeSpacing"),this.Jw=t)}get layerSpacing(){return this.Ws}set layerSpacing(t){this.Ws!==t&&(U.i(t,"number",TreeVertex,"layerSpacing"),this.Ws=t)}get layerSpacingParentOverlap(){return this.$w}set layerSpacingParentOverlap(t){this.$w!==t&&(U.i(t,"number",TreeVertex,"layerSpacingParentOverlap"),this.$w=t)}get compaction(){return this.Zw}set compaction(t){this.Zw!==t&&(U.j(t,TreeCompaction,"TreeCompaction"),this.Zw=t)}get breadthLimit(){return this.Qw}set breadthLimit(t){this.Qw!==t&&(U.i(t,"number",TreeVertex,"breadthLimit"),this.Qw=t)}get rowSpacing(){return this._w}set rowSpacing(t){this._w!==t&&(U.i(t,"number",TreeVertex,"rowSpacing"),this._w=t)}get rowIndent(){return this.tx}set rowIndent(t){this.tx!==t&&(U.i(t,"number",TreeVertex,"rowIndent"),this.tx=t)}get commentSpacing(){return this.ix}set commentSpacing(t){this.ix!==t&&(U.i(t,"number",TreeVertex,"commentSpacing"),this.ix=t)}get commentMargin(){return this.ex}set commentMargin(t){this.ex!==t&&(U.i(t,"number",TreeVertex,"commentMargin"),this.ex=t)}get setsPortSpot(){return this.nx}set setsPortSpot(t){this.nx!==t&&(U.i(t,"boolean",TreeVertex,"setsPortSpot"),this.nx=t)}get portSpot(){return this.lx}set portSpot(t){U.s(t,Spot,TreeVertex,"portSpot"),this.lx.equals(t)||(this.lx=t)}get setsChildPortSpot(){return this.hx}set setsChildPortSpot(t){this.hx!==t&&(U.i(t,"boolean",TreeVertex,"setsChildPortSpot"),this.hx=t)}get childPortSpot(){return this.cx}set childPortSpot(t){U.s(t,Spot,TreeVertex,"childPortSpot"),this.cx.equals(t)||(this.cx=t)}get childrenCount(){return this.children.length}get relativePosition(){return this.K}set relativePosition(t){this.K.set(t)}get subtreeSize(){return this.kt}set subtreeSize(t){this.kt.set(t)}get subtreeOffset(){return this.gt}set subtreeOffset(t){this.gt.set(t)}}class TreeEdge extends LayoutEdge{Uk;constructor(t){super(t),this.Uk=new Point(0,0)}commit(){const t=this.link;if(t===null||t.isAvoiding)return;const i=this.network.layout;let e=null,s=null;switch(i.Ms){case 1:e=this.fromVertex,s=this.toVertex;break;case 2:e=this.toVertex,s=this.fromVertex;break;default:U.n("Unhandled path value "+i.Ms.toString())}if(e===null||s===null)return;const n=this.Uk;if(n.x===0&&n.y===0){this.sV(e,s);return}const o=e.bounds,r=i.orthoAngle(e),l=i.computeLayerSpacing(e),h=e.rowSpacing;t.updateRoute();const a=t.curve===9,c=t.isOrthogonal;let f=0,u,d;if(t.startRoute(),c||a){for(f=2;t.pointsCount>4;)t.removePoint(2);u=t.getPoint(1),d=t.getPoint(2)}else{for(f=1;t.pointsCount>3;)t.removePoint(1);u=t.getPoint(0),d=t.getPoint(t.pointsCount-1)}const m=t.getPoint(t.pointsCount-1);let g=0;r===0?(e.alignment===23?(g=o.bottom+n.y,n.y===0&&u.y>m.y+e.rowIndent&&(g=Math.min(g,Math.max(u.y,g-i.computeNodeIndent(e))))):e.alignment===22?(g=o.top+n.y,n.y===0&&u.y<m.y-e.rowIndent&&(g=Math.max(g,Math.min(u.y,g+i.computeNodeIndent(e))))):g=o.y+o.height/2+n.y,a?(t.insertPointAt(f,u.x,g),f++,t.insertPointAt(f,o.right+l,g),f++,t.insertPointAt(f,o.right+l+(n.x-h)/3,g),f++,t.insertPointAt(f,o.right+l+(n.x-h)*2/3,g),f++,t.insertPointAt(f,o.right+l+(n.x-h),g),f++,t.insertPointAt(f,d.x,g),f++):(c&&(t.insertPointAt(f,o.right+l/2,u.y),f++),t.insertPointAt(f,o.right+l/2,g),f++,t.insertPointAt(f,o.right+l+n.x-(c?h/2:h),g),f++,c&&(t.insertPointAt(f,t.getPoint(f-1).x,d.y),f++))):r===90?(e.alignment===23?(g=o.right+n.x,n.x===0&&u.x>m.x+e.rowIndent&&(g=Math.min(g,Math.max(u.x,g-i.computeNodeIndent(e))))):e.alignment===22?(g=o.left+n.x,n.x===0&&u.x<m.x-e.rowIndent&&(g=Math.max(g,Math.min(u.x,g+i.computeNodeIndent(e))))):g=o.x+o.width/2+n.x,a?(t.insertPointAt(f,g,u.y),f++,t.insertPointAt(f,g,o.bottom+l),f++,t.insertPointAt(f,g,o.bottom+l+(n.y-h)/3),f++,t.insertPointAt(f,g,o.bottom+l+(n.y-h)*2/3),f++,t.insertPointAt(f,g,o.bottom+l+(n.y-h)),f++,t.insertPointAt(f,g,d.y),f++):(c&&(t.insertPointAt(f,u.x,o.bottom+l/2),f++),t.insertPointAt(f,g,o.bottom+l/2),f++,t.insertPointAt(f,g,o.bottom+l+n.y-(c?h/2:h)),f++,c&&(t.insertPointAt(f,d.x,t.getPoint(f-1).y),f++))):r===180?(e.alignment===23?(g=o.bottom+n.y,n.y===0&&u.y>m.y+e.rowIndent&&(g=Math.min(g,Math.max(u.y,g-i.computeNodeIndent(e))))):e.alignment===22?(g=o.top+n.y,n.y===0&&u.y<m.y-e.rowIndent&&(g=Math.max(g,Math.min(u.y,g+i.computeNodeIndent(e))))):g=o.y+o.height/2+n.y,a?(t.insertPointAt(f,u.x,g),f++,t.insertPointAt(f,o.left-l,g),f++,t.insertPointAt(f,o.left-l+(n.x+h)/3,g),f++,t.insertPointAt(f,o.left-l+(n.x+h)*2/3,g),f++,t.insertPointAt(f,o.left-l+(n.x+h),g),f++,t.insertPointAt(f,d.x,g),f++):(c&&(t.insertPointAt(f,o.left-l/2,u.y),f++),t.insertPointAt(f,o.left-l/2,g),f++,t.insertPointAt(f,o.left-l+n.x+(c?h/2:h),g),f++,c&&(t.insertPointAt(f,t.getPoint(f-1).x,d.y),f++))):r===270?(e.alignment===23?(g=o.right+n.x,n.x===0&&u.x>m.x+e.rowIndent&&(g=Math.min(g,Math.max(u.x,g-i.computeNodeIndent(e))))):e.alignment===22?(g=o.left+n.x,n.x===0&&u.x<m.x-e.rowIndent&&(g=Math.max(g,Math.min(u.x,g+i.computeNodeIndent(e))))):g=o.x+o.width/2+n.x,a?(t.insertPointAt(f,g,u.y),f++,t.insertPointAt(f,g,o.top-l),f++,t.insertPointAt(f,g,o.top-l+(n.y+h)/3),f++,t.insertPointAt(f,g,o.top-l+(n.y+h)*2/3),f++,t.insertPointAt(f,g,o.top-l+(n.y+h)),f++,t.insertPointAt(f,g,d.y),f++):(c&&(t.insertPointAt(f,u.x,o.top-l/2),f++),t.insertPointAt(f,g,o.top-l/2),f++,t.insertPointAt(f,g,o.top-l+n.y+(c?h/2:h)),f++,c&&(t.insertPointAt(f,d.x,t.getPoint(f-1).y),f++))):U.n("Invalid angle "+r),t.commitRoute()}sV(t,i){Debug&&U.s(t,TreeVertex,TreeEdge,"adjustRouteForAngleChange:parent"),Debug&&U.s(i,TreeVertex,TreeEdge,"adjustRouteForAngleChange:child");const e=this.link;if(e===null)return;const s=this.network.layout,n=s.orthoAngle(t),o=s.orthoAngle(i);if(n===o)return;const r=s.computeLayerSpacing(t),l=t.bounds,h=i.bounds;if(n===0&&h.left-l.right<r+1||n===90&&h.top-l.bottom<r+1||n===180&&l.left-h.right<r+1||n===270&&l.top-h.bottom<r+1)return;e.updateRoute();const a=e.curve===9,c=e.isOrthogonal,f=this.fromVertex,u=s.isBusAlignment(f.alignment);if(e.startRoute(),n===0){const d=l.right+r/2;if(a){if(e.pointsCount===4){const m=e.getPoint(3).y;e.setPointAt(1,d-20,e.getPoint(1).y),e.insertPointAt(2,d-20,m),e.insertPointAt(3,d,m),e.insertPointAt(4,d+20,m),e.setPointAt(5,e.getPoint(5).x,m)}}else c?u?e.setPointAt(3,e.getPoint(2).x,e.getPoint(4).y):e.pointsCount===6&&(e.setPointAt(2,d,e.getPoint(2).y),e.setPointAt(3,d,e.getPoint(3).y)):e.pointsCount===4?e.insertPointAt(2,d,e.getPoint(2).y):e.pointsCount===3?e.setPointAt(1,d,e.getPoint(2).y):e.pointsCount===2&&e.insertPointAt(1,d,e.getPoint(1).y)}else if(n===90){const d=l.bottom+r/2;if(a){if(e.pointsCount===4){const m=e.getPoint(3).x;e.setPointAt(1,e.getPoint(1).x,d-20),e.insertPointAt(2,m,d-20),e.insertPointAt(3,m,d),e.insertPointAt(4,m,d+20),e.setPointAt(5,m,e.getPoint(5).y)}}else c?u?e.setPointAt(3,e.getPoint(2).x,e.getPoint(4).y):e.pointsCount===6&&(e.setPointAt(2,e.getPoint(2).x,d),e.setPointAt(3,e.getPoint(3).x,d)):e.pointsCount===4?e.insertPointAt(2,e.getPoint(2).x,d):e.pointsCount===3?e.setPointAt(1,e.getPoint(2).x,d):e.pointsCount===2&&e.insertPointAt(1,e.getPoint(1).x,d)}else if(n===180){const d=l.left-r/2;if(a){if(e.pointsCount===4){const m=e.getPoint(3).y;e.setPointAt(1,d+20,e.getPoint(1).y),e.insertPointAt(2,d+20,m),e.insertPointAt(3,d,m),e.insertPointAt(4,d-20,m),e.setPointAt(5,e.getPoint(5).x,m)}}else c?u?e.setPointAt(3,e.getPoint(2).x,e.getPoint(4).y):e.pointsCount===6&&(e.setPointAt(2,d,e.getPoint(2).y),e.setPointAt(3,d,e.getPoint(3).y)):e.pointsCount===4?e.insertPointAt(2,d,e.getPoint(2).y):e.pointsCount===3?e.setPointAt(1,d,e.getPoint(2).y):e.pointsCount===2&&e.insertPointAt(1,d,e.getPoint(1).y)}else if(n===270){const d=l.top-r/2;if(a){if(e.pointsCount===4){const m=e.getPoint(3).x;e.setPointAt(1,e.getPoint(1).x,d+20),e.insertPointAt(2,m,d+20),e.insertPointAt(3,m,d),e.insertPointAt(4,m,d-20),e.setPointAt(5,m,e.getPoint(5).y)}}else c?u?e.setPointAt(3,e.getPoint(2).x,e.getPoint(4).y):e.pointsCount===6&&(e.setPointAt(2,e.getPoint(2).x,d),e.setPointAt(3,e.getPoint(3).x,d)):e.pointsCount===4?e.insertPointAt(2,e.getPoint(2).x,d):e.pointsCount===3?e.setPointAt(1,e.getPoint(2).x,d):e.pointsCount===2&&e.insertPointAt(1,e.getPoint(1).x,d)}e.commitRoute()}get fromVertex(){return this.fs}set fromVertex(t){this.fs!==t&&(Debug&&t!==null&&U.s(t,TreeVertex,TreeEdge,"fromVertex"),this.fs=t)}get toVertex(){return this.us}set toVertex(t){this.us!==t&&(Debug&&t!==null&&U.s(t,TreeVertex,TreeEdge,"toVertex"),this.us=t)}get relativePoint(){return this.Uk}set relativePoint(t){this.Uk.set(t)}}class Themes{constructor(){}static Light={colors:{text:"#0a0a0a",comment:"#ca8a04",link:"#0a0a0a",group:"#a3a3a344",outline:"#a3a3a3",selection:"#0ea5e9",div:"#fff",gridMinor:"#e5e5e5",gridMajor:"#a3a3a3",overviewBox:"#c026d3",tempLink:"#2563eb",tempPort:"#c026d3",adornmentFill:"#0ea5e9",adornmentStroke:"#1e40af",dragSelect:"#c026d3"},fonts:{normal:"10pt sans-serif",bold:"bold 12pt sans-serif"},numbers:{group:1,selection:3},margins:{group:new Margin(5)},arrowheads:{toArrow:"Standard"}};static Dark={colors:{text:"#f5f5f5",comment:"#facc15",link:"#f5f5f5",group:"#a3a3a388",outline:"#a3a3a3",selection:"#38bdf8",div:"#171717",gridMinor:"#262626",gridMajor:"#404040",overviewBox:"#e879f9",tempLink:"#60a5fa",tempPort:"#e879f9",adornmentFill:"#38bdf8",adornmentStroke:"#2563eb",dragSelect:"#e879f9"},fonts:{normal:"10pt sans-serif",bold:"bold 12pt sans-serif"},numbers:{group:1,selection:3},margins:{group:new Margin(5)},arrowheads:{toArrow:"Standard"}}}class ThemeManager{Ke=new Set;Ou=new GMap;Gk="light";qk="light";Hk=!1;rT=!0;ym="light";MI=t=>{const i=t.matches?"dark":"light";i!==this.ym&&(this.ym=i,this.qk==="system"&&this.updateDiagrams())};constructor(t){t&&Object.assign(this,t),t?.themeMap||(this.Ou.set("light",{colors:{...Themes.Light.colors},fonts:{...Themes.Light.fonts},numbers:{...Themes.Light.numbers},margins:{...Themes.Light.margins},arrowheads:{...Themes.Light.arrowheads}}),this.Ou.set("dark",{colors:{...Themes.Dark.colors},fonts:{...Themes.Dark.fonts},numbers:{...Themes.Dark.numbers},margins:{...Themes.Dark.margins},arrowheads:{...Themes.Dark.arrowheads}})),root.matchMedia&&(this.ym=root.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")}get themeMap(){return this.Ou}set themeMap(t){this.Ou!==t&&(this.Ou=t,this.updateDiagrams())}get defaultTheme(){return this.Gk}set defaultTheme(t){this.Gk!==t&&(U.i(t,"string",ThemeManager,"defaultTheme"),this.Gk=t,this.updateDiagrams())}get currentTheme(){return this.qk}set currentTheme(t){this.qk!==t&&(U.i(t,"string",ThemeManager,"currentTheme"),this.qk=t,this.updateDiagrams())}get changesDivBackground(){return this.Hk}set changesDivBackground(t){if(this.Hk!==t&&(this.Hk=t,t))for(const e of this.Ke)e.setDivBackground(this.findValue("div","","fill")),e.O("ThemeChanged",this)}get readsCssVariables(){return this.rT}set readsCssVariables(t){this.rT!==t&&(this.rT=t,this.updateDiagrams())}get preferredColorScheme(){return this.ym}addDiagram(t){return this.Ke.add(t),this.lT(t),this}removeDiagram(t){return this.Ke.delete(t),this.lT(t),this}OO(){this.Ke.size===0&&root.matchMedia&&root.matchMedia("(prefers-color-scheme: dark)")?.addEventListener("change",this.MI)}EO(){this.Ke.size===0&&root.matchMedia&&root.matchMedia("(prefers-color-scheme: dark)")?.removeEventListener("change",this.MI)}set(t,i){t===""&&(t=this.Gk),t==="system"&&(t=this.ym);let e=this.Ou.get(t);return e?e=this.CI(e,i):e=i,this.Ou.set(t,e),this.updateDiagrams(),this}findValue(t,i,e){return this.getValue(this.findTheme(this.currentTheme),t,i,e)||this.getValue(this.findTheme(this.defaultTheme),t,i,e)}getValue(t,i,e,s){if(!t)return;e==null&&(e="");let n=t;const o=l=>{if(n===void 0||l==="")return;if(typeof l=="number"||!(Array.isArray(l)||l.includes(".")))return n[l];const h=Array.isArray(l)?l:l.split(".");for(let a=0;a<h.length;a++){const c=h[a];if(c!==""&&(n=n[c],n===void 0))return}return n},r=()=>{if(!(e!==""&&(n=o(e),n===void 0)))return Array.isArray(n)&&typeof i=="number"?n=n[i%n.length]:n=o(i),n};if(n=r(),n===void 0&&typeof s=="string"&&s.length>0){let l=t.targetPropertyMap?.get(s);if(l?n=t[l]:(l=ThemeManager.nV.get(s),n=l?t[l]:t.colors),n=r(),n!==void 0)return n}return n}findTheme(t){return this.themeMap.get(t==="system"?this.ym:t)}updateDiagrams(){for(const t of this.Ke)this.lT(t)}lT(t){const i=t.skipsUndoManager;t.skipsUndoManager=!0,t.updateAllThemeBindings(),this.Hk&&t.setDivBackground(this.findValue("div","","fill")),t.skipsUndoManager=i,t.O("ThemeChanged",this)}CI(t,i){for(const e in i)if(U.fx(i,e))try{i[e]?.constructor===Object?t[e]=this.CI(t[e]??{},i[e]):t[e]=i[e]}catch{delete t[e]}return t}static nV=new Map([["background","colors"],["defaultColumnSeparatorStroke","colors"],["defaultRowSeparatorStroke","colors"],["shadowColor","colors"],["fill","colors"],["stroke","colors"],["font","fonts"],["angle","numbers"],["fromEndSegmentLength","numbers"],["fromShortLength","numbers"],["height","numbers"],["opacity","numbers"],["scale","numbers"],["toEndSegmentLength","numbers"],["toShortLength","numbers"],["width","numbers"],["defaultColumnSeparatorStrokeWidth","numbers"],["defaultRowSeparatorStrokeWidth","numbers"],["shadowBlur","numbers"],["corner","numbers"],["curviness","numbers"],["smoothness","numbers"],["parameter1","numbers"],["parameter2","numbers"],["strokeWidth","numbers"],["strokeDashOffset","numbers"],["maxLines","numbers"],["spacingAbove","numbers"],["spacingBelow","numbers"],["position","points"],["shadowOffset","points"],["desiredSize","sizes"],["maxSize","sizes"],["minSize","sizes"],["margin","margins"],["defaultSeparatorPadding","margins"],["padding","margins"],["alignment","spots"],["alignmentFocus","spots"],["fromSpot","spots"],["toSpot","spots"],["defaultAlignment","spots"],["spot1","spots"],["spot2","spots"],["verticalAlignment","spots"],["imageAlignment","spots"],["fromArrow","arrowheads"],["toArrow","arrowheads"]])}class Router{Nt;c;Wi;Il;constructor(){this.c=Diagram.Qm(),this.Nt="",this.Wi=!0,this.Il=!0}get name(){return this.Nt}set name(t){this.Nt=t}get isEnabled(){return this.Wi}set isEnabled(t){this.Wi=t}get isRealtime(){return this.Il}set isRealtime(t){this.Il=t}get diagram(){return this.c}set diagram(t){this.c!==t&&(this.c=t,t.Jl=!0,t.requestUpdate())}invalidateRouter(){this.c!==null&&(this.c.Jl=!0,this.c.requestUpdate())}canRoute(t){if(!this.isEnabled)return!1;const i=this.diagram;return!(i&&(!this.isRealtime&&i.$u||i.animationManager.isTicking))}isRoutable(t,i){return!0}routeLinks(t,i){}toString(){return this.name!==""?this.name+" Router":U.to(this.constructor)}}class AvoidsNodesRouter extends Router{constructor(t){super(),this.name="AvoidsNodes",t&&Object.assign(this,t)}canRoute(t){return(t instanceof Diagram?t.C0:t.diagram?.C0)?super.canRoute(t):!1}isRoutable(t,i){return!(!t.isAvoiding||t.containingGroup!==(i instanceof Group?i:null)||t.toNode===null||t.fromNode===null||t.pointsCount<4)}routeLinks(t,i){const e=i instanceof Diagram?null:i,s=t.iterator,n=this.diagram.getPositions(!0,e,null);for(;s.next();){const o=s.value;if(!this.isRoutable(o,i))continue;o.startRoute();const r=o.pointsCount,l=o.getPoint(1),h=o.getPoint(r-2),a=o.fromNode.actualBounds.copy();a.inflate(Link.Wh,Link.Wh),a.unionPoint(o.getPoint(0));const c=o.toNode.actualBounds.copy();c.inflate(Link.Wh,Link.Wh),c.unionPoint(o.getPoint(r-1)),this.oV(o,a,c,n)&&this.rV(o,l,o.sA,h,o.nA,a,c,n),o.commitRoute()}}oV(t,i,e,s){const n=t.diagram,o=t.pointsCount;if(n===null||!t.fromNode||!t.toNode||t.fromNode===t.toNode||!t.layer||t.layer.isTemporary||i.containsPoint(t.getPoint(o-1))&&!t.toNode.isMemberOf(t.fromNode)||e.containsPoint(t.getPoint(0))&&!t.fromNode.isMemberOf(t.toNode)||!t.isOrthogonal)return!1;if(t.segmentIndex===17)return!0;const r=t.getPoint(1),l=t.getPoint(o-2),h=t.getPoint(2);if(!s.isUnoccupied(Math.min(r.x,h.x),Math.min(r.y,h.y),Math.abs(r.x-h.x),Math.abs(r.y-h.y)))return!0;for(let c=2;c<o-3;c++){const f=t.getPoint(c),u=t.getPoint(c+1);if(!s.isUnoccupied(Math.min(f.x,u.x),Math.min(f.y,u.y),Math.abs(f.x-u.x),Math.abs(f.y-u.y)))return!0}const a=t.getPoint(o-3);return!s.isUnoccupied(Math.min(a.x,l.x),Math.min(a.y,l.y),Math.abs(a.x-l.x),Math.abs(a.y-l.y))}rV(t,i,e,s,n,o,r,l){const h=t.diagram;if(h===null)return;const a=i,c=s;let f=Point.Pn,u=Point.Pn;if(h.isVirtualized){const g=l.bounds.copy(),p=t.getPoint(2),y=t.getPoint(t.pointsCount-3);g.inflate(-l.cellWidth,-l.cellHeight);const x=Point.a();l.Pg(i.x,i.y)||(G.Ul(g.x,g.y,g.x+g.width,g.y+g.height,i.x,i.y,p.x,p.y,x)?(f=i=x.copy(),e=x.directionPoint(p)):G.Ul(g.x,g.y,g.x+g.width,g.y+g.height,p.x,p.y,y.x,y.y,x)?(f=i=x.copy(),e=x.directionPoint(y)):G.Ul(g.x,g.y,g.x+g.width,g.y+g.height,y.x,y.y,s.x,s.y,x)&&(f=i=x.copy(),e=x.directionPoint(s))),l.Pg(s.x,s.y)||(G.Ul(g.x,g.y,g.x+g.width,g.y+g.height,s.x,s.y,y.x,y.y,x)?(u=s=x.copy(),n=y.directionPoint(x)):G.Ul(g.x,g.y,g.x+g.width,g.y+g.height,y.x,y.y,p.x,p.y,x)?(u=s=x.copy(),n=p.directionPoint(x)):G.Ul(g.x,g.y,g.x+g.width,g.y+g.height,p.x,p.y,i.x,i.y,x)&&(u=s=x.copy(),n=i.directionPoint(x))),Point.o(x)}const d=o.copy().unionRect(r);d.inflate(l.cellWidth*l.Nf,l.cellHeight*l.Nf),l.tR(i,e,s,n,d,!0);let m=l.To(s.x,s.y);if(!l.pw&&m>=PositionArray.kg&&(l.aD(),d.inflate(l.cellWidth*l.mC,l.cellHeight*l.pC),l.tR(i,e,s,n,d,!1),m=l.To(s.x,s.y)),!l.pw&&m<PositionArray.kg&&!l.S4(s.x,s.y)){t.points.removeRange(2,t.pointsCount-3),this.hT(t,l,s.x,s.y,n,!0);const g=0,p=90,y=180,x=270,b=t.getPoint(2);if(t.pointsCount<4)e===g||e===y?(b.x=i.x,b.y=s.y):(b.x=s.x,b.y=i.y),t.setPointAt(2,b.x,b.y),t.insertPointAt(3,b.x,b.y);else{const S=t.getPoint(3);if(e===g||e===y)if(G.u(b.x,S.x)){const k=e===g?Math.max(b.x,i.x):Math.min(b.x,i.x);t.setPointAt(2,k,i.y),t.setPointAt(3,k,S.y)}else G.u(b.y,S.y)?(Math.abs(i.y-b.y)<=l.cellHeight/2&&(t.setPointAt(2,b.x,i.y),t.setPointAt(3,S.x,i.y)),t.insertPointAt(2,b.x,i.y)):t.setPointAt(2,i.x,b.y);else if(e===p||e===x)if(G.u(b.y,S.y)){const k=e===p?Math.max(b.y,i.y):Math.min(b.y,i.y);t.setPointAt(2,i.x,k),t.setPointAt(3,S.x,k)}else G.u(b.x,S.x)?(Math.abs(i.x-b.x)<=l.cellWidth/2&&(t.setPointAt(2,i.x,b.y),t.setPointAt(3,i.x,S.y)),t.insertPointAt(2,i.x,b.y)):t.setPointAt(2,b.x,i.y)}if(f.isReal()){const S=t.getPoint(1),k=t.getPoint(2);S.x!==k.x&&S.y!==k.y?e===g||e===y?t.insertPointAt(2,S.x,k.y):t.insertPointAt(2,k.x,S.y):e===g||e===y?t.insertPointAt(2,a.x,f.y):t.insertPointAt(2,f.x,a.y)}u.isReal()&&(n===g||n===y?t.insertPointAt(t.pointsCount-2,c.x,u.y):t.insertPointAt(t.pointsCount-2,u.x,c.y))}}hT(t,i,e,s,n,o){const c=i.cellWidth,f=i.cellHeight;let u=i.To(e,s),d=e,m=s,g=d,p=m;for(n===0?g+=c:n===90?p+=f:n===180?g-=c:p-=f,t.fA&&u>PositionArray.Sc&&i.To(g,p)!==u-1&&(i.To(d-c,m)===u-1?(n=180,g=d-c,p=m):i.To(d+c,m)===u-1?(n=0,g=d+c,p=m):i.To(d,m-f)===u-1?(n=270,g=d,p=m-f):i.To(d,m+f)===u-1&&(n=90,g=d,p=m+f));u>PositionArray.Sc&&i.To(g,p)===u-1;)d=g,m=p,n===0?g+=c:n===90?p+=f:n===180?g-=c:p-=f,u-=1;if(o?u>PositionArray.Sc&&(n===180||n===0?d=Math.floor(d/c)*c+c/2:(n===90||n===270)&&(m=Math.floor(m/f)*f+f/2)):(d=Math.floor(d/c)*c+c/2,m=Math.floor(m/f)*f+f/2),u>PositionArray.Sc){let y=n,x=d,b=m;if(n===0?(y=90,b+=f):n===90?(y=180,x-=c):n===180?(y=270,b-=f):n===270&&(y=0,x+=c),i.To(x,b)===u-1)this.hT(t,i,x,b,y,!1);else{let k=d,P=m;n===0?(y=270,P-=f):n===90?(y=0,k+=c):n===180?(y=90,P+=f):n===270&&(y=180,k-=c),i.To(k,P)===u-1&&this.hT(t,i,k,P,y,!1)}}t.insertPointAt(t.pointsCount-2,d,m)}}ToolManager.prototype.initializeStandardTools=function(){return this.ni("Action",new ActionTool,this.mouseDownTools),this.ni("Relinking",new RelinkingTool,this.mouseDownTools),this.ni("LinkReshaping",new LinkReshapingTool,this.mouseDownTools),this.ni("Rotating",new RotatingTool,this.mouseDownTools),this.ni("Resizing",new ResizingTool,this.mouseDownTools),this.ni("Linking",new LinkingTool,this.mouseMoveTools),this.ni("Dragging",new DraggingTool,this.mouseMoveTools),this.ni("DragSelecting",new DragSelectingTool,this.mouseMoveTools),this.ni("Panning",new PanningTool,this.mouseMoveTools),this.ni("ContextMenu",new ContextMenuTool,this.mouseUpTools),this.ni("TextEditing",new TextEditingTool,this.mouseUpTools),this.ni("ClickCreating",new ClickCreatingTool,this.mouseUpTools),this.ni("ClickSelecting",new ClickSelectingTool,this.mouseUpTools),this},Diagram.W2("GraphLinksModel",GraphLinksPartManager),Diagram.W2("TreeModel",TreePartManager);const oldGo=root.go,go={get version(){return Diagram.version},Group,List,Set:GSet,Map:GMap,Point,Size,Rect,Margin,Spot,Quadtree,Geometry,PathFigure,PathSegment,InputEvent,DiagramEvent,ChangedEvent,Model,GraphLinksModel,TreeModel,Binding,ThemeBinding,Transaction,UndoManager,CommandHandler,Tool,DraggingTool,DraggingInfo,DraggingOptions,LinkingBaseTool,LinkingTool,RelinkingTool,LinkReshapingTool,ResizingTool,RotatingTool,ClickSelectingTool,ActionTool,ClickCreatingTool,HTMLInfo,ContextMenuTool,DragSelectingTool,PanningTool,TextEditingTool,ToolManager,Animation,AnimationManager,AnimationTrigger,Layer,Diagram,Palette,Overview,Brush,GraphObject,Panel,RowColumnDefinition,Shape,TextBlock,Picture,Part,Adornment,Node,Link,Placeholder,Layout,LayoutNetwork,LayoutVertex,LayoutEdge,GridLayout,PanelLayout,CircularLayout,CircularNetwork,CircularVertex,CircularEdge,ForceDirectedLayout,ForceDirectedNetwork,ForceDirectedVertex,ForceDirectedEdge,LayeredDigraphLayout,LayeredDigraphNetwork,LayeredDigraphVertex,LayeredDigraphEdge,TreeLayout,TreeNetwork,TreeVertex,TreeEdge,Themes,ThemeManager,Router,AnimationStyle,AutoScale,CycleMode,Flip,TextFormat,ImageStretch,LayoutConditions,LinkAdjusting,Curve,Routing,Orientation,TextOverflow,PortSpreading,ScrollMode,CollapsePolicy,Sizing,TriggerStart,Stretch,ViewboxStretch,Wrap,BrushType,ColorSpace,GeometryStretch,GeometryType,SegmentType,BindingMode,ChangeType,CircularArrangement,CircularDirection,CircularNodeDiameterFormula,CircularSorting,GridAlignment,GridArrangement,GridSorting,LayeredDigraphAggressive,LayeredDigraphAlign,LayeredDigraphCycleRemove,LayeredDigraphInit,LayeredDigraphLayering,LayeredDigraphPack,TreeAlignment,TreeArrangement,TreeCompaction,TreeLayerStyle,TreePath,TreeSorting,TreeStyle,GestureMode,LinkingDirection,ReshapingBehavior,TextEditingAccept,TextEditingStarting,TextEditingState,WheelMode,Figures,Arrowheads,PanelTypes,ToolNames,Builders,LayerNames};for(const w in go){const t=go[w];U.at(t)&&t!==TextFormat&&(t.className=w)}U.st(oldGo)&&oldGo.version&&U.et("WARNING: a `go` object on the root object is already defined.  "+("Debug"in oldGo?"debug ":"")+"version: "+oldGo.version+", replaced with version: "+go.version),Diagram.prototype.go=go,root.go=go,go.Debug=Debug,Debug.attachReadonlyWarnings(go);
})();


        export default (typeof global !== "undefined") ? global.go : self.go;
  export const go = (typeof global !== "undefined") ? global.go : self.go;
  export const Group = go.Group;
  export const List = go.List;
  const GSet = go.Set;
  export { GSet as Set };
  const GMap = go.Map;
  export { GMap as Map };
  export const Point = go.Point;
  export const Size = go.Size;
  export const Rect = go.Rect;
  export const Margin = go.Margin;
  export const Spot = go.Spot;
  export const Quadtree = go.Quadtree;
  export const Geometry = go.Geometry;
  export const PathFigure = go.PathFigure;
  export const PathSegment = go.PathSegment;
  export const InputEvent = go.InputEvent;
  export const DiagramEvent = go.DiagramEvent;
  export const ChangedEvent = go.ChangedEvent;
  export const Model = go.Model;
  export const GraphLinksModel = go.GraphLinksModel;
  export const TreeModel = go.TreeModel;
  export const Binding = go.Binding;
  export const ThemeBinding = go.ThemeBinding;
  export const Transaction = go.Transaction;
  export const UndoManager = go.UndoManager;
  export const CommandHandler = go.CommandHandler;
  export const Tool = go.Tool;
  export const DraggingTool = go.DraggingTool;
  export const DraggingInfo = go.DraggingInfo;
  export const DraggingOptions = go.DraggingOptions;
  export const LinkingBaseTool = go.LinkingBaseTool;
  export const LinkingTool = go.LinkingTool;
  export const RelinkingTool = go.RelinkingTool;
  export const LinkReshapingTool = go.LinkReshapingTool;
  export const ResizingTool = go.ResizingTool;
  export const RotatingTool = go.RotatingTool;
  export const ClickSelectingTool = go.ClickSelectingTool;
  export const ActionTool = go.ActionTool;
  export const ClickCreatingTool = go.ClickCreatingTool;
  export const HTMLInfo = go.HTMLInfo;
  export const ContextMenuTool = go.ContextMenuTool;
  export const DragSelectingTool = go.DragSelectingTool;
  export const PanningTool = go.PanningTool;
  export const TextEditingTool = go.TextEditingTool;
  export const ToolManager = go.ToolManager;
  export const Animation = go.Animation;
  export const AnimationManager = go.AnimationManager;
  export const AnimationTrigger = go.AnimationTrigger;
  export const Layer = go.Layer;
  export const Diagram = go.Diagram;
  export const Palette = go.Palette;
  export const Overview = go.Overview;
  export const Brush = go.Brush;
  export const GraphObject = go.GraphObject;
  export const Panel = go.Panel;
  export const RowColumnDefinition = go.RowColumnDefinition;
  export const Shape = go.Shape;
  export const TextBlock = go.TextBlock;
  export const Picture = go.Picture;
  export const Part = go.Part;
  export const Adornment = go.Adornment;
  export const Node = go.Node;
  export const Link = go.Link;
  export const Placeholder = go.Placeholder;
  export const Layout = go.Layout;
  export const LayoutNetwork = go.LayoutNetwork;
  export const LayoutVertex = go.LayoutVertex;
  export const LayoutEdge = go.LayoutEdge;
  export const GridLayout = go.GridLayout;
  export const PanelLayout = go.PanelLayout;
  export const CircularLayout = go.CircularLayout;
  export const CircularNetwork = go.CircularNetwork;
  export const CircularVertex = go.CircularVertex;
  export const CircularEdge = go.CircularEdge;
  export const ForceDirectedLayout = go.ForceDirectedLayout;
  export const ForceDirectedNetwork = go.ForceDirectedNetwork;
  export const ForceDirectedVertex = go.ForceDirectedVertex;
  export const ForceDirectedEdge = go.ForceDirectedEdge;
  export const LayeredDigraphLayout = go.LayeredDigraphLayout;
  export const LayeredDigraphNetwork = go.LayeredDigraphNetwork;
  export const LayeredDigraphVertex = go.LayeredDigraphVertex;
  export const LayeredDigraphEdge = go.LayeredDigraphEdge;
  export const TreeLayout = go.TreeLayout;
  export const TreeNetwork = go.TreeNetwork;
  export const TreeVertex = go.TreeVertex;
  export const TreeEdge = go.TreeEdge;
  export const Themes = go.Themes;
  export const ThemeManager = go.ThemeManager;
  export const Router = go.Router;
  export const version = go.version;

  export const AnimationStyle = go.AnimationStyle;
  export const AutoScale = go.AutoScale;
  export const Curve = go.Curve;
  export const CycleMode = go.CycleMode;
  export const Flip = go.Flip;
  export const ImageStretch = go.ImageStretch;
  export const LayoutConditions = go.LayoutConditions;
  export const LinkAdjusting = go.LinkAdjusting;
  export const Orientation = go.Orientation;
  export const PortSpreading = go.PortSpreading;
  export const Routing = go.Routing;
  export const ScrollMode = go.ScrollMode;
  export const CollapsePolicy = go.CollapsePolicy;
  export const Sizing = go.Sizing;
  export const TriggerStart = go.TriggerStart;
  export const Stretch = go.Stretch;
  export const TextFormat = go.TextFormat;
  export const TextOverflow = go.TextOverflow;
  export const ViewboxStretch = go.ViewboxStretch;
  export const Wrap = go.Wrap;
  export const BrushType = go.BrushType;
  export const ColorSpace = go.ColorSpace;
  export const GeometryStretch = go.GeometryStretch;
  export const GeometryType = go.GeometryType;
  export const SegmentType = go.SegmentType;
  export const BindingMode = go.BindingMode;
  export const ChangeType = go.ChangeType;
  export const CircularArrangement = go.CircularArrangement;
  export const CircularDirection = go.CircularDirection;
  export const CircularNodeDiameterFormula = go.CircularNodeDiameterFormula;
  export const CircularSorting = go.CircularSorting;
  export const GridAlignment = go.GridAlignment;
  export const GridArrangement = go.GridArrangement;
  export const GridSorting = go.GridSorting;
  export const LayeredDigraphAggressive = go.LayeredDigraphAggressive;
  export const LayeredDigraphAlign = go.LayeredDigraphAlign;
  export const LayeredDigraphCycleRemove = go.LayeredDigraphCycleRemove;
  export const LayeredDigraphInit = go.LayeredDigraphInit;
  export const LayeredDigraphLayering = go.LayeredDigraphLayering;
  export const LayeredDigraphPack = go.LayeredDigraphPack;
  export const TreeAlignment = go.TreeAlignment;
  export const TreeArrangement = go.TreeArrangement;
  export const TreeCompaction = go.TreeCompaction;
  export const TreeLayerStyle = go.TreeLayerStyle;
  export const TreePath = go.TreePath;
  export const TreeSorting = go.TreeSorting;
  export const TreeStyle = go.TreeStyle;
  export const GestureMode = go.GestureMode;
  export const LinkingDirection = go.LinkingDirection;
  export const ReshapingBehavior = go.ReshapingBehavior;
  export const TextEditingAccept = go.TextEditingAccept;
  export const TextEditingStarting = go.TextEditingStarting;
  export const TextEditingState = go.TextEditingState;
  export const WheelMode = go.WheelMode;
  export const Figures = go.Figures;
  export const Arrowheads = go.Arrowheads;
  export const PanelTypes = go.PanelTypes;
  export const ToolNames = go.ToolNames;
  export const Builders = go.Builders;
  export const LayerNames = go.LayerNames;