-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjoint.nowrap.min.js
More file actions
15 lines (8 loc) · 391 KB
/
joint.nowrap.min.js
File metadata and controls
15 lines (8 loc) · 391 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*! Rappid v3.1.1 - HTML5 Diagramming Framework - TRIAL VERSION
Copyright (c) 2015 client IO
2020-06-11
This Source Code Form is subject to the terms of the Rappid Trial License
, v. 2.0. If a copy of the Rappid License was not distributed with this
file, You can obtain one at http://jointjs.com/license/rappid_v2.txt
or from the Rappid archive as was distributed by client IO. See the LICENSE file.*/
var joint=function(e,s,i,S){"use strict";var n,l,r,c;s=s&&s.hasOwnProperty("default")?s.default:s,i=i&&i.hasOwnProperty("default")?i.default:i,S=S&&S.hasOwnProperty("default")?S.default:S,Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(t,e){if(null==this)throw new TypeError('"this" is null or not defined');var i=Object(this),n=i.length>>>0;if(0===n)return!1;var r,o,s=0|e,a=Math.max(0<=s?s:n-Math.abs(s),0);for(;a<n;){if((r=i[a])===(o=t)||"number"==typeof r&&"number"==typeof o&&isNaN(r)&&isNaN(o))return!0;a++}return!1}}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),i=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var n=arguments[1],r=0;r<i;){var o=e[r];if(t.call(n,o,r,e))return o;r++}}}),Array.from||(Array.from=(n=Object.prototype.toString,l=function(t){return"function"==typeof t||"[object Function]"===n.call(t)},r=Math.pow(2,53)-1,c=function(t){var e,i=(e=Number(t),isNaN(e)?0:0!==e&&isFinite(e)?(0<e?1:-1)*Math.floor(Math.abs(e)):e);return Math.min(Math.max(i,0),r)},function(t){var e=Object(t);if(null==t)throw new TypeError("Array.from requires an array-like object - not null or undefined");var i,n=1<arguments.length?arguments[1]:void 0;if(void 0!==n){if(!l(n))throw new TypeError("Array.from: when provided, the second argument must be a function");2<arguments.length&&(i=arguments[2])}for(var r,o=c(e.length),s=l(this)?Object(new this(o)):new Array(o),a=0;a<o;)r=e[a],s[a]=n?void 0===i?n(r,a):n.call(i,r,a):r,a+=1;return s.length=o,s})),Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),i=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var n=arguments[1],r=0;r<i;){var o=e[r];if(t.call(n,o,r,e))return r;r++}return-1}}),function(){var t=void 0!==e?e:this,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function l(t){this.message=t}(l.prototype=new Error).name="InvalidCharacterError",t.btoa||(t.btoa=function(t){for(var e,i,n=String(t),r=0,o=a,s="";n.charAt(0|r)||(o="=",r%1);s+=o.charAt(63&e>>8-r%1*8)){if(255<(i=n.charCodeAt(r+=.75)))throw new l("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");e=e<<8|i}return s}),t.atob||(t.atob=function(t){var e=String(t).replace(/=+$/,"");if(e.length%4==1)throw new l("'atob' failed: The string to be decoded is not correctly encoded.");for(var i,n,r=0,o=0,s="";n=e.charAt(o++);~n&&(i=r%4?64*i+n:n,r++%4)?s+=String.fromCharCode(255&i>>(-2*r&6)):0)n=a.indexOf(n);return s})}(),Number.isFinite=Number.isFinite||function(t){return"number"==typeof t&&isFinite(t)},Number.isNaN=Number.isNaN||function(t){return t!=t},String.prototype.includes||(String.prototype.includes=function(t,e){return"number"!=typeof e&&(e=0),!(e+t.length>this.length)&&-1!==this.indexOf(t,e)}),String.prototype.startsWith||(String.prototype.startsWith=function(t,e){return this.substr(e||0,t.length)===t}),function(){function n(t,e){return this.slice(t,e)}function r(t,e){arguments.length<2&&(e=0);for(var i=0,n=t.length;i<n;++i,++e)this[e]=255&t[i]}function t(t){var e;if("number"==typeof t){e=new Array(t);for(var i=0;i<t;++i)e[i]=0}else e=t.slice(0);return e.subarray=n,(e.buffer=e).byteLength=e.length,e.set=r,"object"==typeof t&&t.buffer&&(e.buffer=t.buffer),e}"undefined"==typeof Uint8Array&&"undefined"!=typeof window&&(window.Uint8Array=t,window.Uint32Array=t,window.Int32Array=t)}(),"undefined"!=typeof XMLHttpRequest&&("response"in XMLHttpRequest.prototype||"mozResponseArrayBuffer"in XMLHttpRequest.prototype||"mozResponse"in XMLHttpRequest.prototype||"responseArrayBuffer"in XMLHttpRequest.prototype||Object.defineProperty(XMLHttpRequest.prototype,"response",{get:function(){return new Uint8Array(new VBArray(this.responseBody).toArray())}}));var o=Math,Z=o.abs,g=o.cos,h=o.sin,L=o.sqrt,P=o.min,G=o.max,u=o.atan2,a=o.round,d=o.floor,f=o.PI,k=o.pow,t={curveThroughPoints:function(t){return console.warn("deprecated"),new O(p.throughPoints(t)).serialize()},getCurveControlPoints:function(t){console.warn("deprecated");var e,i=[],n=[],r=t.length-1;if(1==r)return i[0]=new E((2*t[0].x+t[1].x)/3,(2*t[0].y+t[1].y)/3),n[0]=new E(2*i[0].x-t[0].x,2*i[0].y-t[0].y),[i,n];var o=[];for(e=1;e<r-1;e++)o[e]=4*t[e].x+2*t[e+1].x;o[0]=t[0].x+2*t[1].x,o[r-1]=(8*t[r-1].x+t[r].x)/2;var s=this.getFirstControlPoints(o);for(e=1;e<r-1;++e)o[e]=4*t[e].y+2*t[e+1].y;o[0]=t[0].y+2*t[1].y,o[r-1]=(8*t[r-1].y+t[r].y)/2;var a=this.getFirstControlPoints(o);for(e=0;e<r;e++)i.push(new E(s[e],a[e])),e<r-1?n.push(new E(2*t[e+1].x-s[e+1],2*t[e+1].y-a[e+1])):n.push(new E((t[r].x+s[r-1])/2,(t[r].y+a[r-1])/2));return[i,n]},getCurveDivider:function(t,e,i,n){console.warn("deprecated");var r=new p(t,e,i,n);return function(t){var e=r.divide(t);return[{p0:e[0].start,p1:e[0].controlPoint1,p2:e[0].controlPoint2,p3:e[0].end},{p0:e[1].start,p1:e[1].controlPoint1,p2:e[1].controlPoint2,p3:e[1].end}]}},getFirstControlPoints:function(t){console.warn("deprecated");var e=t.length,i=[],n=[],r=2;i[0]=t[0]/r;for(var o=1;o<e;o++)n[o]=1/r,r=(o<e-1?4:3.5)-n[o],i[o]=(t[o]-i[o-1])/r;for(o=1;o<e;o++)i[e-o-1]-=n[e-o]*i[e-o];return i},getInversionSolver:function(t,e,i,n){console.warn("deprecated");var r=new p(t,e,i,n);return function(t){return r.closestPointT(t)}}},p=function(t,e,i,n){return this instanceof p?t instanceof p?new p(t.start,t.controlPoint1,t.controlPoint2,t.end):(this.start=new E(t),this.controlPoint1=new E(e),this.controlPoint2=new E(i),void(this.end=new E(n))):new p(t,e,i,n)};p.throughPoints=function(){function l(t){var e=t.length,i=[],n=[],r=2;i[0]=t[0]/r;for(var o=1;o<e;o++)n[o]=1/r,r=(o<e-1?4:3.5)-n[o],i[o]=(t[o]-i[o-1])/r;for(o=1;o<e;o++)i[e-o-1]-=n[e-o]*i[e-o];return i}return function(t){if(!t||Array.isArray(t)&&t.length<2)throw new Error("At least 2 points are required");for(var e=function(t){var e,i=[],n=[],r=t.length-1;if(1==r)return i[0]=new E((2*t[0].x+t[1].x)/3,(2*t[0].y+t[1].y)/3),n[0]=new E(2*i[0].x-t[0].x,2*i[0].y-t[0].y),[i,n];var o=[];for(e=1;e<r-1;e++)o[e]=4*t[e].x+2*t[e+1].x;o[0]=t[0].x+2*t[1].x,o[r-1]=(8*t[r-1].x+t[r].x)/2;var s=l(o);for(e=1;e<r-1;++e)o[e]=4*t[e].y+2*t[e+1].y;o[0]=t[0].y+2*t[1].y,o[r-1]=(8*t[r-1].y+t[r].y)/2;var a=l(o);for(e=0;e<r;e++)i.push(new E(s[e],a[e])),e<r-1?n.push(new E(2*t[e+1].x-s[e+1],2*t[e+1].y-a[e+1])):n.push(new E((t[r].x+s[r-1])/2,(t[r].y+a[r-1])/2));return[i,n]}(t),i=[],n=e[0].length,r=0;r<n;r++){var o=new E(e[0][r].x,e[0][r].y),s=new E(e[1][r].x,e[1][r].y);i.push(new p(t[r],o,s,t[r+1]))}return i}}(),p.prototype={bbox:function(){for(var t,e,i,n,r,o,s,a,l=this.start,c=this.controlPoint1,g=this.controlPoint2,h=this.end,u=l.x,d=l.y,f=c.x,p=c.y,I=g.x,m=g.y,A=h.x,v=h.y,C=new Array,w=new Array,y=[new Array,new Array],b=0;b<2;++b)if(i=0===b?(e=6*u-12*f+6*I,t=-3*u+9*f-9*I+3*A,3*f-3*u):(e=6*d-12*p+6*m,t=-3*d+9*p-9*m+3*v,3*p-3*d),Z(t)<1e-12){if(Z(e)<1e-12)continue;0<(n=-i/e)&&n<1&&w.push(n)}else a=L(s=e*e-4*i*t),s<0||(0<(r=(-e+a)/(2*t))&&r<1&&w.push(r),0<(o=(-e-a)/(2*t))&&o<1&&w.push(o));for(var N,M,x,S=w.length,k=S;S--;)M=(N=1-(n=w[S]))*N*N*u+3*N*N*n*f+3*N*n*n*I+n*n*n*A,y[0][S]=M,x=N*N*N*d+3*N*N*n*p+3*N*n*n*m+n*n*n*v,y[1][S]=x,C[S]={X:M,Y:x};w[k]=0,w[k+1]=1,C[k]={X:u,Y:d},C[k+1]={X:A,Y:v},y[0][k]=u,y[1][k]=d,y[0][k+1]=A,y[1][k+1]=v,w.length=k+2,y[0].length=k+2,y[1].length=k+2,C.length=k+2;var D=P.apply(null,y[0]),z=P.apply(null,y[1]),j=G.apply(null,y[0]),T=G.apply(null,y[1]);return new H(D,z,j-D,T-z)},clone:function(){return new p(this.start,this.controlPoint1,this.controlPoint2,this.end)},closestPoint:function(t,e){return this.pointAtT(this.closestPointT(t,e))},closestPointLength:function(t,e){var i=void 0===(e=e||{}).precision?this.PRECISION:e.precision,n={precision:i,subdivisions:void 0===e.subdivisions?this.getSubdivisions({precision:i}):e.subdivisions};return this.lengthAtT(this.closestPointT(t,n),n)},closestPointNormalizedLength:function(t,e){var i=void 0===(e=e||{}).precision?this.PRECISION:e.precision,n={precision:i,subdivisions:void 0===e.subdivisions?this.getSubdivisions({precision:i}):e.subdivisions},r=this.closestPointLength(t,n);if(!r)return 0;var o=this.length(n);return 0===o?0:r/o},closestPointT:function(t,e){for(var i,n,r,o,s,a,l,c=void 0===(e=e||{}).precision?this.PRECISION:e.precision,g=void 0===e.subdivisions?this.getSubdivisions({precision:c}):e.subdivisions,h=g.length,u=h?1/h:0,d=0;d<h;d++){var f=g[d],p=f.start.distance(t),I=f.end.distance(t),m=p+I;(!l||m<l)&&(n=d*u,r=(d+1)*u,o=p,s=I,a=(i=f).start.distance(f.end),l=m)}for(var A=k(10,-c);;){var v=o?Z(o-s)/o:0,C=s?Z(o-s)/s:0;if(v<A||C<A||(!o||o<a*A||(!s||s<a*A)))return o<=s?n:r;var w=i.divide(.5);u/=2;var y=w[0].start.distance(t),b=w[0].end.distance(t),N=y+b,M=w[1].start.distance(t),x=w[1].end.distance(t);s=N<=M+x?(i=w[0],r-=u,o=y,b):(i=w[1],n+=u,o=M,x)}},closestPointTangent:function(t,e){return this.tangentAtT(this.closestPointT(t,e))},containsPoint:function(t,e){return this.toPolyline(e).containsPoint(t)},divideAt:function(t,e){if(t<=0)return this.divideAtT(0);if(1<=t)return this.divideAtT(1);var i=this.tAt(t,e);return this.divideAtT(i)},divideAtLength:function(t,e){var i=this.tAtLength(t,e);return this.divideAtT(i)},divideAtT:function(t){var e=this.start,i=this.controlPoint1,n=this.controlPoint2,r=this.end;if(t<=0)return[new p(e,e,e,e),new p(e,i,n,r)];if(1<=t)return[new p(e,i,n,r),new p(r,r,r,r)];var o=this.getSkeletonPoints(t),s=o.startControlPoint1,a=o.startControlPoint2,l=o.divider,c=o.dividerControlPoint1,g=o.dividerControlPoint2;return[new p(e,s,a,l),new p(l,c,g,r)]},endpointDistance:function(){return this.start.distance(this.end)},equals:function(t){return!!t&&this.start.x===t.start.x&&this.start.y===t.start.y&&this.controlPoint1.x===t.controlPoint1.x&&this.controlPoint1.y===t.controlPoint1.y&&this.controlPoint2.x===t.controlPoint2.x&&this.controlPoint2.y===t.controlPoint2.y&&this.end.x===t.end.x&&this.end.y===t.end.y},getSkeletonPoints:function(t){var e=this.start,i=this.controlPoint1,n=this.controlPoint2,r=this.end;if(t<=0)return{startControlPoint1:e.clone(),startControlPoint2:e.clone(),divider:e.clone(),dividerControlPoint1:i.clone(),dividerControlPoint2:n.clone()};if(1<=t)return{startControlPoint1:i.clone(),startControlPoint2:n.clone(),divider:r.clone(),dividerControlPoint1:r.clone(),dividerControlPoint2:r.clone()};var o=new B(e,i).pointAt(t),s=new B(i,n).pointAt(t),a=new B(n,r).pointAt(t),l=new B(o,s).pointAt(t),c=new B(s,a).pointAt(t);return{startControlPoint1:o,startControlPoint2:l,divider:new B(l,c).pointAt(t),dividerControlPoint1:c,dividerControlPoint2:a}},getSubdivisions:function(t){var e=void 0===(t=t||{}).precision?this.PRECISION:t.precision,i=[new p(this.start,this.controlPoint1,this.controlPoint2,this.end)];if(0===e)return i;for(var n=this.endpointDistance(),r=k(10,-e),o=0;;){o+=1;for(var s=[],a=i.length,l=0;l<a;l++){var c=i[l].divide(.5);s.push(c[0],c[1])}for(var g=0,h=s.length,u=0;u<h;u++){g+=s[u].endpointDistance()}if(1<o&&(0!==g?(g-n)/g:0)<r)return s;i=s,n=g}},isDifferentiable:function(){var t=this.start,e=this.controlPoint1,i=this.controlPoint2,n=this.end;return!(t.equals(e)&&e.equals(i)&&i.equals(n))},length:function(t){for(var e=void 0===(t=t||{}).precision?this.PRECISION:t.precision,i=void 0===t.subdivisions?this.getSubdivisions({precision:e}):t.subdivisions,n=0,r=i.length,o=0;o<r;o++){n+=i[o].endpointDistance()}return n},lengthAtT:function(t,e){if(t<=0)return 0;var i=void 0===(e=e||{}).precision?this.PRECISION:e.precision;return this.divide(t)[0].length({precision:i})},pointAt:function(t,e){if(t<=0)return this.start.clone();if(1<=t)return this.end.clone();var i=this.tAt(t,e);return this.pointAtT(i)},pointAtLength:function(t,e){var i=this.tAtLength(t,e);return this.pointAtT(i)},pointAtT:function(t){return t<=0?this.start.clone():1<=t?this.end.clone():this.getSkeletonPoints(t).divider},PRECISION:3,scale:function(t,e,i){return this.start.scale(t,e,i),this.controlPoint1.scale(t,e,i),this.controlPoint2.scale(t,e,i),this.end.scale(t,e,i),this},tangentAt:function(t,e){if(!this.isDifferentiable())return null;t<0?t=0:1<t&&(t=1);var i=this.tAt(t,e);return this.tangentAtT(i)},tangentAtLength:function(t,e){if(!this.isDifferentiable())return null;var i=this.tAtLength(t,e);return this.tangentAtT(i)},tangentAtT:function(t){if(!this.isDifferentiable())return null;t<0?t=0:1<t&&(t=1);var e=this.getSkeletonPoints(t),i=e.startControlPoint2,n=e.dividerControlPoint1,r=e.divider,o=new B(i,n);return o.translate(r.x-i.x,r.y-i.y),o},tAt:function(t,e){if(t<=0)return 0;if(1<=t)return 1;var i=void 0===(e=e||{}).precision?this.PRECISION:e.precision,n={precision:i,subdivisions:void 0===e.subdivisions?this.getSubdivisions({precision:i}):e.subdivisions},r=this.length(n)*t;return this.tAtLength(r,n)},tAtLength:function(t,e){var i=!0;t<0&&(i=!1,t=-t);for(var n,r,o,s,a,l=void 0===(e=e||{}).precision?this.PRECISION:e.precision,c=void 0===e.subdivisions?this.getSubdivisions({precision:l}):e.subdivisions,g={precision:l,subdivisions:c},h=0,u=c.length,d=1/u,f=0;f<u;f++){var p=i?f:u-1-f,I=c[f],m=I.endpointDistance();if(t<=h+m){n=I,r=p*d,o=(p+1)*d,s=i?t-h:m+h-t,a=i?m+h-t:t-h;break}h+=m}if(!n)return i?1:0;for(var A=this.length(g),v=k(10,-l);;){var C,w;if((0!==A?s/A:0)<v)return r;if((0!==A?a/A:0)<v)return o;var y=n.divide(.5);d/=2;var b=y[0].endpointDistance(),N=y[1].endpointDistance();w=s<=b?(n=y[0],o-=d,b-(C=s)):(n=y[1],r+=d,N-(C=s-b)),s=C,a=w}},toPoints:function(t){for(var e=void 0===(t=t||{}).precision?this.PRECISION:t.precision,i=void 0===t.subdivisions?this.getSubdivisions({precision:e}):t.subdivisions,n=[i[0].start.clone()],r=i.length,o=0;o<r;o++){var s=i[o];n.push(s.end.clone())}return n},toPolyline:function(t){return new D(this.toPoints(t))},toString:function(){return this.start+" "+this.controlPoint1+" "+this.controlPoint2+" "+this.end},translate:function(t,e){return this.start.translate(t,e),this.controlPoint1.translate(t,e),this.controlPoint2.translate(t,e),this.end.translate(t,e),this}},p.prototype.divide=p.prototype.divideAtT;var w=function(t,e,i){return this instanceof w?t instanceof w?new w(new E(t.x,t.y),t.a,t.b):(t=new E(t),this.x=t.x,this.y=t.y,this.a=e,void(this.b=i)):new w(t,e,i)};w.fromRect=function(t){return t=new H(t),new w(t.center(),t.width/2,t.height/2)},w.prototype={bbox:function(){return new H(this.x-this.a,this.y-this.b,2*this.a,2*this.b)},center:function(){return new E(this.x,this.y)},clone:function(){return new w(this)},containsPoint:function(t){return this.normalizedDistance(t)<=1},equals:function(t){return!!t&&t.x===this.x&&t.y===this.y&&t.a===this.a&&t.b===this.b},inflate:function(t,e){return void 0===t&&(t=0),void 0===e&&(e=t),this.a+=2*t,this.b+=2*e,this},intersectionWithLine:function(t){var e=[],i=t.start,n=t.end,r=this.a,o=this.b,s=t.vector(),a=i.difference(new E(this)),l=new E(s.x/(r*r),s.y/(o*o)),c=new E(a.x/(r*r),a.y/(o*o)),g=s.dot(l),h=s.dot(c),u=h*h-g*(a.dot(c)-1);if(u<0)return null;if(0<u){var d=L(u),f=(-h-d)/g,p=(-h+d)/g;if((f<0||1<f)&&(p<0||1<p))return null;0<=f&&f<=1&&e.push(i.lerp(n,f)),0<=p&&p<=1&&e.push(i.lerp(n,p))}else{var I=-h/g;if(!(0<=I&&I<=1))return null;e.push(i.lerp(n,I))}return e},intersectionWithLineFromCenterToPoint:function(t,e){t=new E(t),e&&t.rotate(new E(this.x,this.y),e);var i,n=t.x-this.x,r=t.y-this.y;if(0===n)return i=this.bbox().pointNearestToPoint(t),e?i.rotate(new E(this.x,this.y),-e):i;var o=r/n,s=o*o,a=this.a*this.a,l=this.b*this.b,c=L(1/(1/a+s/l)),g=o*(c=n<0?-c:c);return i=new E(this.x+c,this.y+g),e?i.rotate(new E(this.x,this.y),-e):i},normalizedDistance:function(t){var e=t.x,i=t.y,n=this.a,r=this.b,o=this.x,s=this.y;return(e-o)*(e-o)/(n*n)+(i-s)*(i-s)/(r*r)},tangentTheta:function(t){var e,i,n=t.x,r=t.y,o=this.a,s=this.b,a=this.bbox().center(),l=a.x,c=a.y,g=n>a.x+o/2,h=n<a.x-o/2;return g||h?i=o*o/(n-l)-o*o*(r-c)*((e=n>a.x?r-30:r+30)-c)/(s*s*(n-l))+l:e=s*s/(r-c)-s*s*(n-l)*((i=r>a.y?n+30:n-30)-l)/(o*o*(r-c))+c,new E(i,e).theta(t)},toString:function(){return new E(this.x,this.y).toString()+" "+this.a+" "+this.b}};var B=function(t,e){return this instanceof B?t instanceof B?new B(t.start,t.end):(this.start=new E(t),void(this.end=new E(e))):new B(t,e)};B.prototype={angle:function(){var t=new E(this.start.x+1,this.start.y);return this.start.angleBetween(this.end,t)},bbox:function(){var t=P(this.start.x,this.end.x),e=P(this.start.y,this.end.y),i=G(this.start.x,this.end.x),n=G(this.start.y,this.end.y);return new H(t,e,i-t,n-e)},bearing:function(){var t=y(this.start.y),e=y(this.end.y),i=this.start.x,n=this.end.x,r=y(n-i),o=h(r)*g(e),s=g(t)*h(e)-h(t)*g(e)*g(r),a=A(u(o,s))-22.5;return a<0&&(a+=360),["NE","E","SE","S","SW","W","NW","N"][a=parseInt(a/45)]},clone:function(){return new B(this.start,this.end)},closestPoint:function(t){return this.pointAt(this.closestPointNormalizedLength(t))},closestPointLength:function(t){return this.closestPointNormalizedLength(t)*this.length()},closestPointNormalizedLength:function(t){var e=this.vector().dot(new B(this.start,t).vector()),i=P(1,G(0,e/this.squaredLength()));return i!=i?0:i},closestPointTangent:function(t){return this.tangentAt(this.closestPointNormalizedLength(t))},containsPoint:function(t){var e=this.start,i=this.end;if(0!==e.cross(t,i))return!1;var n=this.length();return!(new B(e,t).length()>n)&&!(new B(t,i).length()>n)},divideAt:function(t){var e=this.pointAt(t);return[new B(this.start,e),new B(e,this.end)]},divideAtLength:function(t){var e=this.pointAtLength(t);return[new B(this.start,e),new B(e,this.end)]},equals:function(t){return!!t&&this.start.x===t.start.x&&this.start.y===t.start.y&&this.end.x===t.end.x&&this.end.y===t.end.y},intersect:function(t,e){if(t instanceof B||t instanceof H||t instanceof D||t instanceof w||t instanceof O){var i=t.intersectionWithLine(this,e);return i&&t instanceof B&&(i=i[0]),i}return null},intersectionWithLine:function(t){var e=new E(this.end.x-this.start.x,this.end.y-this.start.y),i=new E(t.end.x-t.start.x,t.end.y-t.start.y),n=e.x*i.y-e.y*i.x,r=new E(t.start.x-this.start.x,t.start.y-this.start.y),o=r.x*i.y-r.y*i.x,s=r.x*e.y-r.y*e.x;if(0===n||o*n<0||s*n<0)return null;if(0<n){if(n<o||n<s)return null}else if(o<n||s<n)return null;return[new E(this.start.x+o*e.x/n,this.start.y+o*e.y/n)]},isDifferentiable:function(){return!this.start.equals(this.end)},length:function(){return L(this.squaredLength())},midpoint:function(){return new E((this.start.x+this.end.x)/2,(this.start.y+this.end.y)/2)},pointAt:function(t){var e=this.start,i=this.end;return t<=0?e.clone():1<=t?i.clone():e.lerp(i,t)},pointAtLength:function(t){var e=this.start,i=this.end,n=!0;t<0&&(n=!1,t=-t);var r=this.length();return r<=t?n?i.clone():e.clone():this.pointAt((n?t:r-t)/r)},pointOffset:function(t){t=new E(t);var e=this.start,i=this.end;return((i.x-e.x)*(t.y-e.y)-(i.y-e.y)*(t.x-e.x))/this.length()},rotate:function(t,e){return this.start.rotate(t,e),this.end.rotate(t,e),this},round:function(t){var e=k(10,t||0);return this.start.x=a(this.start.x*e)/e,this.start.y=a(this.start.y*e)/e,this.end.x=a(this.end.x*e)/e,this.end.y=a(this.end.y*e)/e,this},scale:function(t,e,i){return this.start.scale(t,e,i),this.end.scale(t,e,i),this},setLength:function(t){var e=this.length();if(!e)return this;var i=t/e;return this.scale(i,i,this.start)},squaredLength:function(){var t=this.start.x,e=this.start.y;return(t-=this.end.x)*t+(e-=this.end.y)*e},tangentAt:function(t){if(!this.isDifferentiable())return null;var e=this.start,i=this.end,n=this.pointAt(t),r=new B(e,i);return r.translate(n.x-e.x,n.y-e.y),r},tangentAtLength:function(t){if(!this.isDifferentiable())return null;var e=this.start,i=this.end,n=this.pointAtLength(t),r=new B(e,i);return r.translate(n.x-e.x,n.y-e.y),r},toString:function(){return this.start.toString()+" "+this.end.toString()},translate:function(t,e){return this.start.translate(t,e),this.end.translate(t,e),this},vector:function(){return new E(this.end.x-this.start.x,this.end.y-this.start.y)}},B.prototype.intersection=B.prototype.intersect;var O=function(t){if(!(this instanceof O))return new O(t);if("string"==typeof t)return new O.parse(t);var e,i;if(this.segments=[],t)if(Array.isArray(t)&&0!==t.length)if(i=(t=t.reduce(function(t,e){return t.concat(e)},[])).length,t[0].isSegment)for(e=0;e<i;e++){var n=t[e];this.appendSegment(n)}else{var r=null;for(e=0;e<i;e++){var o=t[e];if(!(o instanceof B||o instanceof p))throw new Error("Cannot construct a path segment from the provided object.");0===e&&this.appendSegment(O.createSegment("M",o.start)),r&&!r.end.equals(o.start)&&this.appendSegment(O.createSegment("M",o.start)),o instanceof B?this.appendSegment(O.createSegment("L",o.end)):o instanceof p&&this.appendSegment(O.createSegment("C",o.controlPoint1,o.controlPoint2,o.end)),r=o}}else if(t.isSegment)this.appendSegment(t);else if(t instanceof B)this.appendSegment(O.createSegment("M",t.start)),this.appendSegment(O.createSegment("L",t.end));else if(t instanceof p)this.appendSegment(O.createSegment("M",t.start)),this.appendSegment(O.createSegment("C",t.controlPoint1,t.controlPoint2,t.end));else{if(!(t instanceof D))throw new Error("Cannot construct a path from the provided object.");if(!t.points||0===t.points.length)return;for(i=t.points.length,e=0;e<i;e++){var s=t.points[e];0===e?this.appendSegment(O.createSegment("M",s)):this.appendSegment(O.createSegment("L",s))}}else;};O.parse=function(t){if(!t)return new O;for(var e=new O,i=t.match(/(?:[a-zA-Z] *)(?:(?:-?\d+(?:\.\d+)?(?:e[-+]?\d+)? *,? *)|(?:-?\.\d+ *,? *))+|(?:[a-zA-Z] *)(?! |\d|-|\.)/g),n=i.length,r=0;r<n;r++){var o=i[r].match(/(?:[a-zA-Z])|(?:(?:-?\d+(?:\.\d+)?(?:e[-+]?\d+)?))|(?:(?:-?\.\d+))/g),s=O.createSegment.apply(this,o);e.appendSegment(s)}return e},O.createSegment=function(t){var e=arguments;if(!t)throw new Error("Type must be provided.");var i=O.segmentTypes[t];if(!i)throw new Error(t+" is not a recognized path segment type.");for(var n=[],r=arguments.length,o=1;o<r;o++)n.push(e[o]);return x(i,n)},O.prototype={appendSegment:function(t){var e,i=this.segments,n=i.length,r=0!==n?i[n-1]:null;if(Array.isArray(t)){if(!(t=t.reduce(function(t,e){return t.concat(e)},[]))[0].isSegment)throw new Error("Segments required.");for(var o=t.length,s=0;s<o;s++){var a=t[s];e=this.prepareSegment(a,r,null),i.push(e),r=e}}else{if(!t||!t.isSegment)throw new Error("Segment required.");e=this.prepareSegment(t,r,null),i.push(e)}},bbox:function(){var t,e=this.segments,i=e.length;if(0===i)return null;for(var n=0;n<i;n++){var r=e[n];if(r.isVisible){var o=r.bbox();t=t?t.union(o):o}}if(t)return t;var s=e[i-1];return new H(s.end.x,s.end.y,0,0)},clone:function(){for(var t=this.segments,e=t.length,i=new O,n=0;n<e;n++){var r=t[n].clone();i.appendSegment(r)}return i},closestPoint:function(t,e){var i=this.closestPointT(t,e);return i?this.pointAtT(i):null},closestPointLength:function(t,e){var i=void 0===(e=e||{}).precision?this.PRECISION:e.precision,n={precision:i,segmentSubdivisions:void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:i}):e.segmentSubdivisions},r=this.closestPointT(t,n);return r?this.lengthAtT(r,n):0},closestPointNormalizedLength:function(t,e){var i=void 0===(e=e||{}).precision?this.PRECISION:e.precision,n={precision:i,segmentSubdivisions:void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:i}):e.segmentSubdivisions},r=this.closestPointLength(t,n);if(0===r)return 0;var o=this.length(n);return 0===o?0:r/o},closestPointT:function(t,e){var i=this.segments,n=i.length;if(0===n)return null;for(var r,o=void 0===(e=e||{}).precision?this.PRECISION:e.precision,s=void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:o}):e.segmentSubdivisions,a=1/0,l=0;l<n;l++){var c=i[l],g=s[l];if(c.isVisible){var h=c.closestPointT(t,{precision:o,subdivisions:g}),u=c.pointAtT(h),d=new B(u,t).squaredLength();d<a&&(r={segmentIndex:l,value:h},a=d)}}return r||{segmentIndex:n-1,value:1}},closestPointTangent:function(t,e){var i=this.segments,n=i.length;if(0===n)return null;for(var r,o=void 0===(e=e||{}).precision?this.PRECISION:e.precision,s=void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:o}):e.segmentSubdivisions,a=1/0,l=0;l<n;l++){var c=i[l],g=s[l];if(c.isDifferentiable()){var h=c.closestPointT(t,{precision:o,subdivisions:g}),u=c.pointAtT(h),d=new B(u,t).squaredLength();d<a&&(r=c.tangentAtT(h),a=d)}}return r||null},containsPoint:function(t,e){var i=this.toPolylines(e);if(!i)return!1;for(var n=i.length,r=0,o=0;o<n;o++){i[o].containsPoint(t)&&r++}return r%2==1},divideAt:function(t,e){if(0===this.segments.length)return null;t<0&&(t=0),1<t&&(t=1);var i=void 0===(e=e||{}).precision?this.PRECISION:e.precision,n={precision:i,segmentSubdivisions:void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:i}):e.segmentSubdivisions},r=this.length(n)*t;return this.divideAtLength(r,n)},divideAtLength:function(t,e){var i=this.segments.length;if(0===i)return null;var n=!0;t<0&&(n=!1,t=-t);var r,o,s,a,l,c,g,h=void 0===(e=e||{}).precision?this.PRECISION:e.precision,u=void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:h}):e.segmentSubdivisions,d=0;for(r=0;r<i;r++){var f=n?r:i-1-r;o=this.getSegment(f);var p=u[f],I=o.length({precision:h,subdivisions:p});if(o.isDifferentiable()&&(l=o,c=f,t<=d+I)){a=f,s=o.divideAtLength((n?1:-1)*(t-d),{precision:h,subdivisions:p});break}d+=I}if(!l)return null;s||(a=c,g=n?1:0,s=l.divideAtT(g));var m=this.clone();m.replaceSegment(a,s);var A=a,v=a+1,C=a+2;s[0].isDifferentiable()||(m.removeSegment(A),v-=1,C-=1);var w=m.getSegment(v).start;m.insertSegment(v,O.createSegment("M",w)),C+=1,s[1].isDifferentiable()||(m.removeSegment(C-1),C-=1);var y=C-A-1;for(r=C;r<m.segments.length;r++){var b=this.getSegment(r-y);if("Z"===(o=m.getSegment(r)).type&&!b.subpathStartSegment.end.equals(o.subpathStartSegment.end)){var N=O.createSegment("L",b.end);m.replaceSegment(r,N)}}return[new O(m.segments.slice(0,v)),new O(m.segments.slice(v))]},equals:function(t){if(!t)return!1;var e=this.segments,i=t.segments,n=e.length;if(i.length!==n)return!1;for(var r=0;r<n;r++){var o=e[r],s=i[r];if(o.type!==s.type||!o.equals(s))return!1}return!0},getSegment:function(t){var e=this.segments,i=e.length;if(0===i)throw new Error("Path has no segments.");if(t<0&&(t=i+t),i<=t||t<0)throw new Error("Index out of range.");return e[t]},getSegmentSubdivisions:function(t){for(var e=this.segments,i=e.length,n=void 0===(t=t||{}).precision?this.PRECISION:t.precision,r=[],o=0;o<i;o++){var s=e[o].getSubdivisions({precision:n});r.push(s)}return r},insertSegment:function(t,e){var i,n=this.segments,r=n.length;if(t<0&&(t=r+t+1),r<t||t<0)throw new Error("Index out of range.");var o=null,s=null;if(0!==r&&(s=1<=t?(o=n[t-1]).nextSegment:n[0]),Array.isArray(e)){if(!(e=e.reduce(function(t,e){return t.concat(e)},[]))[0].isSegment)throw new Error("Segments required.");for(var a=e.length,l=0;l<a;l++){var c=e[l];i=this.prepareSegment(c,o,s),n.splice(t+l,0,i),o=i}}else{if(!e||!e.isSegment)throw new Error("Segment required.");i=this.prepareSegment(e,o,s),n.splice(t,0,i)}},intersectionWithLine:function(t,e){var i=null,n=this.toPolylines(e);if(!n)return null;for(var r=0,o=n.length;r<o;r++){var s=n[r],a=t.intersect(s);a&&(i||(i=[]),Array.isArray(a)?Array.prototype.push.apply(i,a):i.push(a))}return i},isDifferentiable:function(){for(var t=this.segments,e=t.length,i=0;i<e;i++){if(t[i].isDifferentiable())return!0}return!1},isValid:function(){var t=this.segments;return 0===t.length||"M"===t[0].type},length:function(t){var e=this.segments,i=e.length;if(0===i)return 0;for(var n=void 0===(t=t||{}).precision?this.PRECISION:t.precision,r=void 0===t.segmentSubdivisions?this.getSegmentSubdivisions({precision:n}):t.segmentSubdivisions,o=0,s=0;s<i;s++){var a=e[s],l=r[s];o+=a.length({subdivisions:l})}return o},lengthAtT:function(t,e){var i=this.segments,n=i.length;if(0===n)return 0;var r=t.segmentIndex;if(r<0)return 0;var o=t.value;n<=r?(r=n-1,o=1):o<0?o=0:1<o&&(o=1);for(var s,a=void 0===(e=e||{}).precision?this.PRECISION:e.precision,l=void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:a}):e.segmentSubdivisions,c=0,g=0;g<r;g++){var h=i[g];s=l[g],c+=h.length({precisison:a,subdivisions:s})}return h=i[r],s=l[r],c+=h.lengthAtT(o,{precisison:a,subdivisions:s})},pointAt:function(t,e){if(0===this.segments.length)return null;if(t<=0)return this.start.clone();if(1<=t)return this.end.clone();var i=void 0===(e=e||{}).precision?this.PRECISION:e.precision,n={precision:i,segmentSubdivisions:void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:i}):e.segmentSubdivisions},r=this.length(n)*t;return this.pointAtLength(r,n)},pointAtLength:function(t,e){var i=this.segments,n=i.length;if(0===n)return null;if(0===t)return this.start.clone();var r=!0;t<0&&(r=!1,t=-t);for(var o,s=void 0===(e=e||{}).precision?this.PRECISION:e.precision,a=void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:s}):e.segmentSubdivisions,l=0,c=0;c<n;c++){var g=r?c:n-1-c,h=i[g],u=a[g],d=h.length({precision:s,subdivisions:u});if(h.isVisible){if(t<=l+d)return h.pointAtLength((r?1:-1)*(t-l),{precision:s,subdivisions:u});o=h}l+=d}return o?r?o.end:o.start:i[n-1].end.clone()},pointAtT:function(t){var e=this.segments,i=e.length;if(0===i)return null;var n=t.segmentIndex;if(n<0)return e[0].pointAtT(0);if(i<=n)return e[i-1].pointAtT(1);var r=t.value;return r<0?r=0:1<r&&(r=1),e[n].pointAtT(r)},PRECISION:3,prepareSegment:function(t,e,i){t.previousSegment=e,t.nextSegment=i,e&&(e.nextSegment=t),i&&(i.previousSegment=t);var n=t;return t.isSubpathStart&&(t.subpathStartSegment=t,n=i),n&&this.updateSubpathStartSegment(n),t},removeSegment:function(t){var e=this.segments,i=e.length;if(0===i)throw new Error("Path has no segments.");if(t<0&&(t=i+t),i<=t||t<0)throw new Error("Index out of range.");var n=e.splice(t,1)[0],r=n.previousSegment,o=n.nextSegment;r&&(r.nextSegment=o),o&&(o.previousSegment=r),n.isSubpathStart&&o&&this.updateSubpathStartSegment(o)},replaceSegment:function(t,e){var i,n=this.segments,r=n.length;if(0===r)throw new Error("Path has no segments.");if(t<0&&(t=r+t),r<=t||t<0)throw new Error("Index out of range.");var o=n[t],s=o.previousSegment,a=o.nextSegment,l=o.isSubpathStart;if(Array.isArray(e)){if(!(e=e.reduce(function(t,e){return t.concat(e)},[]))[0].isSegment)throw new Error("Segments required.");n.splice(t,1);for(var c=e.length,g=0;g<c;g++){var h=e[g];i=this.prepareSegment(h,s,a),n.splice(t+g,0,i),s=i,l&&i.isSubpathStart&&(l=!1)}}else{if(!e||!e.isSegment)throw new Error("Segment required.");i=this.prepareSegment(e,s,a),n.splice(t,1,i),l&&i.isSubpathStart&&(l=!1)}l&&a&&this.updateSubpathStartSegment(a)},scale:function(t,e,i){for(var n=this.segments,r=n.length,o=0;o<r;o++){n[o].scale(t,e,i)}return this},segmentAt:function(t,e){var i=this.segmentIndexAt(t,e);return i?this.getSegment(i):null},segmentAtLength:function(t,e){var i=this.segmentIndexAtLength(t,e);return i?this.getSegment(i):null},segmentIndexAt:function(t,e){if(0===this.segments.length)return null;t<0&&(t=0),1<t&&(t=1);var i=void 0===(e=e||{}).precision?this.PRECISION:e.precision,n={precision:i,segmentSubdivisions:void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:i}):e.segmentSubdivisions},r=this.length(n)*t;return this.segmentIndexAtLength(r,n)},segmentIndexAtLength:function(t,e){var i=this.segments,n=i.length;if(0===n)return null;var r=!0;t<0&&(r=!1,t=-t);for(var o=void 0===(e=e||{}).precision?this.PRECISION:e.precision,s=void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:o}):e.segmentSubdivisions,a=null,l=0,c=0;c<n;c++){var g=r?c:n-1-c,h=i[g],u=s[g],d=h.length({precision:o,subdivisions:u});if(h.isVisible){if(t<=l+d)return g;a=g}l+=d}return a},serialize:function(){if(!this.isValid())throw new Error("Invalid path segments.");return this.toString()},tangentAt:function(t,e){if(0===this.segments.length)return null;t<0&&(t=0),1<t&&(t=1);var i=void 0===(e=e||{}).precision?this.PRECISION:e.precision,n={precision:i,segmentSubdivisions:void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:i}):e.segmentSubdivisions},r=this.length(n)*t;return this.tangentAtLength(r,n)},tangentAtLength:function(t,e){var i=this.segments,n=i.length;if(0===n)return null;var r=!0;t<0&&(r=!1,t=-t);for(var o,s=void 0===(e=e||{}).precision?this.PRECISION:e.precision,a=void 0===e.segmentSubdivisions?this.getSegmentSubdivisions({precision:s}):e.segmentSubdivisions,l=0,c=0;c<n;c++){var g=r?c:n-1-c,h=i[g],u=a[g],d=h.length({precision:s,subdivisions:u});if(h.isDifferentiable()){if(t<=l+d)return h.tangentAtLength((r?1:-1)*(t-l),{precision:s,subdivisions:u});o=h}l+=d}if(o){var f=r?1:0;return o.tangentAtT(f)}return null},tangentAtT:function(t){var e=this.segments,i=e.length;if(0===i)return null;var n=t.segmentIndex;if(n<0)return e[0].tangentAtT(0);if(i<=n)return e[i-1].tangentAtT(1);var r=t.value;return r<0?r=0:1<r&&(r=1),e[n].tangentAtT(r)},toPoints:function(t){var e=this.segments,i=e.length;if(0===i)return null;for(var n=void 0===(t=t||{}).precision?this.PRECISION:t.precision,r=void 0===t.segmentSubdivisions?this.getSegmentSubdivisions({precision:n}):t.segmentSubdivisions,o=[],s=[],a=0;a<i;a++){var l=e[a];if(l.isVisible){var c=r[a];if(0<c.length){var g=c.map(function(t){return t.start});Array.prototype.push.apply(s,g)}else s.push(l.start)}else 0<s.length&&(s.push(e[a-1].end),o.push(s),s=[])}return 0<s.length&&(s.push(this.end),o.push(s)),o},toPolylines:function(t){var e=[],i=this.toPoints(t);if(!i)return null;for(var n=0,r=i.length;n<r;n++)e.push(new D(i[n]));return e},toString:function(){for(var t=this.segments,e=t.length,i="",n=0;n<e;n++){i+=t[n].serialize()+" "}return i.trim()},translate:function(t,e){for(var i=this.segments,n=i.length,r=0;r<n;r++){i[r].translate(t,e)}return this},updateSubpathStartSegment:function(t){for(var e=t.previousSegment;t&&!t.isSubpathStart;)t.subpathStartSegment=e?e.subpathStartSegment:null,t=(e=t).nextSegment}},Object.defineProperty(O.prototype,"start",{configurable:!0,enumerable:!0,get:function(){var t=this.segments,e=t.length;if(0===e)return null;for(var i=0;i<e;i++){var n=t[i];if(n.isVisible)return n.start}return t[e-1].end}}),Object.defineProperty(O.prototype,"end",{configurable:!0,enumerable:!0,get:function(){var t=this.segments,e=t.length;if(0===e)return null;for(var i=e-1;0<=i;i--){var n=t[i];if(n.isVisible)return n.end}return t[e-1].end}});var E=function(t,e){if(!(this instanceof E))return new E(t,e);if("string"==typeof t){var i=t.split(-1===t.indexOf("@")?" ":"@");t=parseFloat(i[0]),e=parseFloat(i[1])}else Object(t)===t&&(e=t.y,t=t.x);this.x=void 0===t?0:t,this.y=void 0===e?0:e};E.fromPolar=function(t,e,i){i=i&&new E(i)||new E(0,0);var n=Z(t*g(e)),r=Z(t*h(e)),o=C(A(e));return o<90?r=-r:o<180?(n=-n,r=-r):o<270&&(n=-n),new E(i.x+n,i.y+r)},E.random=function(t,e,i,n){return new E(m(t,e),m(i,n))},E.prototype={chooseClosest:function(t){var e=t.length;if(1===e)return new E(t[0]);for(var i=null,n=1/0,r=0;r<e;r++){var o=new E(t[r]),s=this.squaredDistance(o);s<n&&(i=o,n=s)}return i},adhereToRect:function(t){return t.containsPoint(this)||(this.x=P(G(this.x,t.x),t.x+t.width),this.y=P(G(this.y,t.y),t.y+t.height)),this},angleBetween:function(t,e){var i=this.equals(t)||this.equals(e)?NaN:this.theta(e)-this.theta(t);return i<0&&(i+=360),i},bearing:function(t){return new B(this,t).bearing()},changeInAngle:function(t,e,i){return this.clone().offset(-t,-e).theta(i)-this.theta(i)},clone:function(){return new E(this)},cross:function(t,e){return t&&e?(e.x-this.x)*(t.y-this.y)-(e.y-this.y)*(t.x-this.x):NaN},difference:function(t,e){return Object(t)===t&&(e=t.y,t=t.x),new E(this.x-(t||0),this.y-(e||0))},distance:function(t){return new B(this,t).length()},dot:function(t){return t?this.x*t.x+this.y*t.y:NaN},equals:function(t){return!!t&&this.x===t.x&&this.y===t.y},lerp:function(t,e){var i=this.x,n=this.y;return new E((1-e)*i+e*t.x,(1-e)*n+e*t.y)},magnitude:function(){return L(this.x*this.x+this.y*this.y)||.01},manhattanDistance:function(t){return Z(t.x-this.x)+Z(t.y-this.y)},move:function(t,e){var i=y(new E(t).theta(this));return this.offset(g(i)*e,-h(i)*e)},normalize:function(t){var e=(t||1)/this.magnitude();return this.scale(e,e)},offset:function(t,e){return Object(t)===t&&(e=t.y,t=t.x),this.x+=t||0,this.y+=e||0,this},reflection:function(t){return new E(t).move(this,this.distance(t))},rotate:function(t,e){t=t||new E(0,0),e=y(C(-e));var i=g(e),n=h(e),r=i*(this.x-t.x)-n*(this.y-t.y)+t.x,o=n*(this.x-t.x)+i*(this.y-t.y)+t.y;return this.x=r,this.y=o,this},round:function(t){var e=k(10,t||0);return this.x=a(this.x*e)/e,this.y=a(this.y*e)/e,this},scale:function(t,e,i){return i=i&&new E(i)||new E(0,0),this.x=i.x+t*(this.x-i.x),this.y=i.y+e*(this.y-i.y),this},snapToGrid:function(t,e){return this.x=I(this.x,t),this.y=I(this.y,e||t),this},squaredDistance:function(t){return new B(this,t).squaredLength()},theta:function(t){var e=-((t=new E(t)).y-this.y),i=t.x-this.x,n=u(e,i);return n<0&&(n=2*f+n),180*n/f},toJSON:function(){return{x:this.x,y:this.y}},toPolar:function(t){t=t&&new E(t)||new E(0,0);var e=this.x,i=this.y;return this.x=L((e-t.x)*(e-t.x)+(i-t.y)*(i-t.y)),this.y=y(t.theta(new E(e,i))),this},toString:function(){return this.x+"@"+this.y},update:function(t,e){return this.x=t||0,this.y=e||0,this},vectorAngle:function(t){return new E(0,0).angleBetween(this,t)}},E.prototype.translate=E.prototype.offset;var D=function(t){return this instanceof D?"string"==typeof t?new D.parse(t):void(this.points=Array.isArray(t)?t.map(E):[]):new D(t)};D.parse=function(t){if(""===(t=t.trim()))return new D;for(var e=[],i=t.split(/\s*,\s*|\s+/),n=i.length,r=0;r<n;r+=2)e.push({x:+i[r],y:+i[r+1]});return new D(e)},D.prototype={bbox:function(){var t=1/0,e=-1/0,i=1/0,n=-1/0,r=this.points,o=r.length;if(0===o)return null;for(var s=0;s<o;s++){var a=r[s],l=a.x,c=a.y;l<t&&(t=l),e<l&&(e=l),c<i&&(i=c),n<c&&(n=c)}return new H(t,i,e-t,n-i)},clone:function(){var t=this.points,e=t.length;if(0===e)return new D;for(var i=[],n=0;n<e;n++){var r=t[n].clone();i.push(r)}return new D(i)},closestPoint:function(t){var e=this.closestPointLength(t);return this.pointAtLength(e)},closestPointLength:function(t){var e,i=this.points,n=i.length;if(0===n)return 0;if(1===n)return 0;for(var r=1/0,o=0,s=n-1,a=0;a<s;a++){var l=new B(i[a],i[a+1]),c=l.length(),g=l.closestPointNormalizedLength(t),h=l.pointAt(g).squaredDistance(t);h<r&&(r=h,e=o+g*c),o+=c}return e},closestPointNormalizedLength:function(t){var e=this.closestPointLength(t);if(0===e)return 0;var i=this.length();return 0===i?0:e/i},closestPointTangent:function(t){var e=this.closestPointLength(t);return this.tangentAtLength(e)},containsPoint:function(t){var e=this.points,i=e.length;if(0===i)return!1;for(var n=t.x,r=t.y,o=i-1,s=0,a=0;s<i;s++){var l=e[o],c=e[s];if(t.equals(l))return!0;var g=new B(l,c);if(g.containsPoint(t))return!0;if(r<=l.y&&r>c.y||r>l.y&&r<=c.y){var h=l.x-n>c.x-n?l.x-n:c.x-n;if(0<=h){var u=new E(n+h,r),d=new B(t,u);g.intersect(d)&&a++}}o=s}return a%2==1},convexHull:function(){var t,e,i,n=this.points,r=n.length;if(0===r)return new D;for(t=0;t<r;t++)void 0===i?i=n[t]:n[t].y<i.y?i=n[t]:n[t].y===i.y&&n[t].x>i.x&&(i=n[t]);var o=[];for(t=0;t<r;t++){var s=i.theta(n[t]);0===s&&(s=360);var a=[n[t],t,s];o.push(a)}if(o.sort(function(t,e){var i=t[2]-e[2];return 0===i&&(i=e[1]-t[1]),i}),2<o.length){var l=o[o.length-1];o.unshift(l)}for(var c,g,h,u,d,f,p,I={},m=[];0!==o.length;)if(g=(c=o.pop())[0],!I.hasOwnProperty(c[0]+"@@"+c[1]))for(var A=!1;!A;)if(m.length<2)m.push(c),A=!0;else{u=(h=m.pop())[0];var v=(f=(d=m.pop())[0]).cross(u,g);if(v<0)m.push(d),m.push(h),m.push(c),A=!0;else if(0===v){var C=u.angleBetween(f,g);Z(C-180)<1e-10?(I[h[0]+"@@"+h[1]]=u,m.push(d)):u.equals(g)||f.equals(u)?(I[h[0]+"@@"+h[1]]=u,m.push(d)):Z((C+1)%360-1)<1e-10&&(m.push(d),o.push(h))}else I[h[0]+"@@"+h[1]]=u,m.push(d)}2<m.length&&m.pop();var w=-1;for(e=m.length,t=0;t<e;t++){var y=m[t][1];(void 0===p||y<p)&&(p=y,w=t)}var b=[];if(0<w){var N=m.slice(w),M=m.slice(0,w);b=N.concat(M)}else b=m;var x=[];for(e=b.length,t=0;t<e;t++)x.push(b[t][0]);return new D(x)},equals:function(t){if(!t)return!1;var e=this.points,i=t.points,n=e.length;if(i.length!==n)return!1;for(var r=0;r<n;r++){var o=e[r],s=t.points[r];if(!o.equals(s))return!1}return!0},intersectionWithLine:function(t){for(var e=new B(t),i=[],n=this.points,r=0,o=n.length-1;r<o;r++){var s=n[r],a=n[r+1],l=new B(s,a),c=e.intersectionWithLine(l);c&&i.push(c[0])}return 0<i.length?i:null},isDifferentiable:function(){var t=this.points,e=t.length;if(0===e)return!1;for(var i=e-1,n=0;n<i;n++){var r=t[n],o=t[n+1];if(new B(r,o).isDifferentiable())return!0}return!1},length:function(){var t=this.points,e=t.length;if(0===e)return 0;for(var i=0,n=e-1,r=0;r<n;r++)i+=t[r].distance(t[r+1]);return i},pointAt:function(t){var e=this.points,i=e.length;if(0===i)return null;if(1===i)return e[0].clone();if(t<=0)return e[0].clone();if(1<=t)return e[i-1].clone();var n=this.length()*t;return this.pointAtLength(n)},pointAtLength:function(t){var e=this.points,i=e.length;if(0===i)return null;if(1===i)return e[0].clone();var n=!0;t<0&&(n=!1,t=-t);for(var r=0,o=i-1,s=0;s<o;s++){var a=n?s:o-1-s,l=e[a],c=e[a+1],g=new B(l,c),h=l.distance(c);if(t<=r+h)return g.pointAtLength((n?1:-1)*(t-r));r+=h}return(n?e[i-1]:e[0]).clone()},scale:function(t,e,i){var n=this.points,r=n.length;if(0===r)return this;for(var o=0;o<r;o++)n[o].scale(t,e,i);return this},simplify:function(t){void 0===t&&(t={});var e=this.points;if(e.length<3)return this;for(var i=t.threshold||0,n=0;e[n+2];){var r=n+1,o=n+2,s=e[n],a=e[r],l=e[o];new B(s,l).closestPoint(a).distance(a)<=i?e.splice(r,1):n+=1}return this},tangentAt:function(t){var e=this.points.length;if(0===e)return null;if(1===e)return null;t<0&&(t=0),1<t&&(t=1);var i=this.length()*t;return this.tangentAtLength(i)},tangentAtLength:function(t){var e=this.points,i=e.length;if(0===i)return null;if(1===i)return null;var n,r=!0;t<0&&(r=!1,t=-t);for(var o=0,s=i-1,a=0;a<s;a++){var l=r?a:s-1-a,c=e[l],g=e[l+1],h=new B(c,g),u=c.distance(g);if(h.isDifferentiable()){if(t<=o+u)return h.tangentAtLength((r?1:-1)*(t-o));n=h}o+=u}if(n){var d=r?1:0;return n.tangentAt(d)}return null},toString:function(){return this.points+""},translate:function(t,e){var i=this.points,n=i.length;if(0===n)return this;for(var r=0;r<n;r++)i[r].translate(t,e);return this},serialize:function(){var t=this.points,e=t.length;if(0===e)return"";for(var i="",n=0;n<e;n++){var r=t[n];i+=r.x+","+r.y+" "}return i.trim()}},Object.defineProperty(D.prototype,"start",{configurable:!0,enumerable:!0,get:function(){return 0===this.points.length?null:this.points[0]}}),Object.defineProperty(D.prototype,"end",{configurable:!0,enumerable:!0,get:function(){var t=this.points.length;return 0===t?null:this.points[t-1]}});var H=function(t,e,i,n){if(!(this instanceof H))return new H(t,e,i,n);Object(t)===t&&(e=t.y,i=t.width,n=t.height,t=t.x),this.x=void 0===t?0:t,this.y=void 0===e?0:e,this.width=void 0===i?0:i,this.height=void 0===n?0:n};H.fromEllipse=function(t){return t=new w(t),new H(t.x-t.a,t.y-t.b,2*t.a,2*t.b)},H.prototype={bbox:function(t){if(!t)return this.clone();var e=y(t),i=Z(h(e)),n=Z(g(e)),r=this.width*n+this.height*i,o=this.width*i+this.height*n;return new H(this.x+(this.width-r)/2,this.y+(this.height-o)/2,r,o)},bottomLeft:function(){return new E(this.x,this.y+this.height)},bottomLine:function(){return new B(this.bottomLeft(),this.bottomRight())},bottomMiddle:function(){return new E(this.x+this.width/2,this.y+this.height)},center:function(){return new E(this.x+this.width/2,this.y+this.height/2)},clone:function(){return new H(this)},containsPoint:function(t){return(t=new E(t)).x>=this.x&&t.x<=this.x+this.width&&t.y>=this.y&&t.y<=this.y+this.height},containsRect:function(t){var e=new H(this).normalize(),i=new H(t).normalize(),n=e.width,r=e.height,o=i.width,s=i.height;if(!(n&&r&&o&&s))return!1;var a=e.x,l=e.y,c=i.x,g=i.y;return o+=c,n+=a,s+=g,r+=l,a<=c&&o<=n&&l<=g&&s<=r},corner:function(){return new E(this.x+this.width,this.y+this.height)},equals:function(t){var e=new H(this).normalize(),i=new H(t).normalize();return e.x===i.x&&e.y===i.y&&e.width===i.width&&e.height===i.height},inflate:function(t,e){return void 0===t&&(t=0),void 0===e&&(e=t),this.x-=t,this.y-=e,this.width+=2*t,this.height+=2*e,this},intersect:function(t){var e=this.origin(),i=this.corner(),n=t.origin(),r=t.corner();if(r.x<=e.x||r.y<=e.y||n.x>=i.x||n.y>=i.y)return null;var o=G(e.x,n.x),s=G(e.y,n.y);return new H(o,s,P(i.x,r.x)-o,P(i.y,r.y)-s)},intersectionWithLine:function(t){var e,i,n=[this.topLine(),this.rightLine(),this.bottomLine(),this.leftLine()],r=[],o=[],s=n.length;for(i=0;i<s;i++)null!==(e=t.intersect(n[i]))&&o.indexOf(e.toString())<0&&(r.push(e),o.push(e.toString()));return 0<r.length?r:null},intersectionWithLineFromCenterToPoint:function(t,e){t=new E(t);var i,n=new E(this.x+this.width/2,this.y+this.height/2);e&&t.rotate(n,e);for(var r=[this.topLine(),this.rightLine(),this.bottomLine(),this.leftLine()],o=new B(n,t),s=r.length-1;0<=s;--s){var a=r[s].intersection(o);if(null!==a){i=a;break}}return i&&e&&i.rotate(n,-e),i},leftLine:function(){return new B(this.topLeft(),this.bottomLeft())},leftMiddle:function(){return new E(this.x,this.y+this.height/2)},maxRectScaleToFit:function(t,e){var i,n,r,o,s,a,l,c;t=new H(t),e||(e=t.center());var g=e.x,h=e.y;i=n=r=o=s=a=l=c=1/0;var u=t.topLeft();u.x<g&&(i=(this.x-g)/(u.x-g)),u.y<h&&(s=(this.y-h)/(u.y-h));var d=t.bottomRight();d.x>g&&(n=(this.x+this.width-g)/(d.x-g)),d.y>h&&(a=(this.y+this.height-h)/(d.y-h));var f=t.topRight();f.x>g&&(r=(this.x+this.width-g)/(f.x-g)),f.y<h&&(l=(this.y-h)/(f.y-h));var p=t.bottomLeft();return p.x<g&&(o=(this.x-g)/(p.x-g)),p.y>h&&(c=(this.y+this.height-h)/(p.y-h)),{sx:P(i,n,r,o),sy:P(s,a,l,c)}},maxRectUniformScaleToFit:function(t,e){var i=this.maxRectScaleToFit(t,e);return P(i.sx,i.sy)},moveAndExpand:function(t){return this.x+=t.x||0,this.y+=t.y||0,this.width+=t.width||0,this.height+=t.height||0,this},normalize:function(){var t=this.x,e=this.y,i=this.width,n=this.height;return this.width<0&&(t=this.x+this.width,i=-this.width),this.height<0&&(e=this.y+this.height,n=-this.height),this.x=t,this.y=e,this.width=i,this.height=n,this},offset:function(t,e){return E.prototype.offset.call(this,t,e)},origin:function(){return new E(this.x,this.y)},pointNearestToPoint:function(t){if(t=new E(t),this.containsPoint(t))switch(this.sideNearestToPoint(t)){case"right":return new E(this.x+this.width,t.y);case"left":return new E(this.x,t.y);case"bottom":return new E(t.x,this.y+this.height);case"top":return new E(t.x,this.y)}return t.adhereToRect(this)},rightLine:function(){return new B(this.topRight(),this.bottomRight())},rightMiddle:function(){return new E(this.x+this.width,this.y+this.height/2)},round:function(t){var e=k(10,t||0);return this.x=a(this.x*e)/e,this.y=a(this.y*e)/e,this.width=a(this.width*e)/e,this.height=a(this.height*e)/e,this},scale:function(t,e,i){return i=this.origin().scale(t,e,i),this.x=i.x,this.y=i.y,this.width*=t,this.height*=e,this},sideNearestToPoint:function(t){var e=(t=new E(t)).x-this.x,i=this.x+this.width-t.x,n=t.y-this.y,r=e,o="left";return i<r&&(r=i,o="right"),n<r&&(r=n,o="top"),this.y+this.height-t.y<r&&(o="bottom"),o},snapToGrid:function(t,e){var i=this.origin().snapToGrid(t,e),n=this.corner().snapToGrid(t,e);return this.x=i.x,this.y=i.y,this.width=n.x-i.x,this.height=n.y-i.y,this},toJSON:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},topLine:function(){return new B(this.topLeft(),this.topRight())},topMiddle:function(){return new E(this.x+this.width/2,this.y)},topRight:function(){return new E(this.x+this.width,this.y)},toString:function(){return this.origin().toString()+" "+this.corner().toString()},union:function(t){var e=new H(t),i=this.x,n=this.y,r=this.width,o=this.height,s=e.x,a=e.y,l=e.width,c=e.height,g=e.x=P(i,s),h=e.y=P(n,a);return e.width=G(i+r,s+l)-g,e.height=G(n+o,a+c)-h,e}},H.prototype.bottomRight=H.prototype.corner,H.prototype.topLeft=H.prototype.origin,H.prototype.translate=H.prototype.offset;var C=function(t){return t%360+(t<0?360:0)},I=function(t,e){return e*a(t/e)},A=function(t){return 180*t/f%360},y=function(t,e){return(t=(e=e||!1)?t:t%360)*f/180},m=function(t,e){if(void 0===e)e=void 0===t?1:t,t=0;else if(e<t){var i=t;t=e,e=i}return d(o.random()*(e-t+1)+t)},v=w,b=B,N=E,M=H;function x(t,e){return e.unshift(null),new(Function.prototype.bind.apply(t,e))}function z(t){var e,i,n=arguments,r=[];for(i=arguments.length,e=1;e<i;e++)r.push(n[e]);if(!t)throw new Error("Missing a parent object.");var o=Object.create(t);for(i=r.length,e=0;e<i;e++){var s,a,l=r[e];for(a in l)l.hasOwnProperty(a)&&(delete o[a],s=Object.getOwnPropertyDescriptor(l,a),Object.defineProperty(o,a,s))}return o}var j={bbox:function(){throw new Error("Declaration missing for virtual function.")},clone:function(){throw new Error("Declaration missing for virtual function.")},closestPoint:function(){throw new Error("Declaration missing for virtual function.")},closestPointLength:function(){throw new Error("Declaration missing for virtual function.")},closestPointNormalizedLength:function(){throw new Error("Declaration missing for virtual function.")},closestPointT:function(t){if(this.closestPointNormalizedLength)return this.closestPointNormalizedLength(t);throw new Error("Neither closestPointT() nor closestPointNormalizedLength() function is implemented.")},closestPointTangent:function(){throw new Error("Declaration missing for virtual function.")},divideAt:function(){throw new Error("Declaration missing for virtual function.")},divideAtLength:function(){throw new Error("Declaration missing for virtual function.")},divideAtT:function(t){if(this.divideAt)return this.divideAt(t);throw new Error("Neither divideAtT() nor divideAt() function is implemented.")},equals:function(){throw new Error("Declaration missing for virtual function.")},getSubdivisions:function(){throw new Error("Declaration missing for virtual function.")},isDifferentiable:function(){throw new Error("Declaration missing for virtual function.")},isSegment:!0,isSubpathStart:!1,isVisible:!0,length:function(){throw new Error("Declaration missing for virtual function.")},lengthAtT:function(t){if(t<=0)return 0;var e=this.length();return 1<=t?e:e*t},nextSegment:null,pointAt:function(){throw new Error("Declaration missing for virtual function.")},pointAtLength:function(){throw new Error("Declaration missing for virtual function.")},pointAtT:function(t){if(this.pointAt)return this.pointAt(t);throw new Error("Neither pointAtT() nor pointAt() function is implemented.")},previousSegment:null,subpathStartSegment:null,scale:function(){throw new Error("Declaration missing for virtual function.")},serialize:function(){throw new Error("Declaration missing for virtual function.")},tangentAt:function(){throw new Error("Declaration missing for virtual function.")},tangentAtLength:function(){throw new Error("Declaration missing for virtual function.")},tangentAtT:function(t){if(this.tangentAt)return this.tangentAt(t);throw new Error("Neither tangentAtT() nor tangentAt() function is implemented.")},toString:function(){throw new Error("Declaration missing for virtual function.")},translate:function(){throw new Error("Declaration missing for virtual function.")}};Object.defineProperty(j,"end",{configurable:!0,enumerable:!0,writable:!0}),Object.defineProperty(j,"start",{configurable:!0,enumerable:!0,get:function(){if(!this.previousSegment)throw new Error("Missing previous segment. (This segment cannot be the first segment of a path; OR segment has not yet been added to a path.)");return this.previousSegment.end}}),Object.defineProperty(j,"type",{configurable:!0,enumerable:!0,get:function(){throw new Error("Bad segment declaration. No type specified.")}});var T=function(){for(var t,e,i=arguments,n=[],r=arguments.length,o=0;o<r;o++)n.push(i[o]);if(!(this instanceof T))return x(T,n);if(0===r)throw new Error("Lineto constructor expects a line, 1 point, or 2 coordinates (none provided).");if(n[0]instanceof B){if(1===r)return this.end=n[0].end.clone(),this;throw new Error("Lineto constructor expects a line, 1 point, or 2 coordinates ("+r+" lines provided).")}if("string"==typeof n[0]||"number"==typeof n[0]){if(2===r)return this.end=new E(+n[0],+n[1]),this;if(r<2)throw new Error("Lineto constructor expects a line, 1 point, or 2 coordinates ("+r+" coordinates provided).");var s;for(t=[],o=0;o<r;o+=2)s=n.slice(o,o+2),t.push(x(T,s));return t}if(1===r)return this.end=new E(n[0]),this;for(t=[],o=0;o<r;o+=1)e=n[o],t.push(new T(e));return t},Y={clone:function(){return new T(this.end)},divideAt:function(t){var e=new B(this.start,this.end).divideAt(t);return[new T(e[0]),new T(e[1])]},divideAtLength:function(t){var e=new B(this.start,this.end).divideAtLength(t);return[new T(e[0]),new T(e[1])]},getSubdivisions:function(){return[]},isDifferentiable:function(){return!!this.previousSegment&&!this.start.equals(this.end)},scale:function(t,e,i){return this.end.scale(t,e,i),this},serialize:function(){var t=this.end;return this.type+" "+t.x+" "+t.y},toString:function(){return this.type+" "+this.start+" "+this.end},translate:function(t,e){return this.end.translate(t,e),this}};Object.defineProperty(Y,"type",{configurable:!0,enumerable:!0,value:"L"}),T.prototype=z(j,B.prototype,Y);var R=function(){for(var t,e,i=arguments,n=[],r=arguments.length,o=0;o<r;o++)n.push(i[o]);if(!(this instanceof R))return x(R,n);if(0===r)throw new Error("Curveto constructor expects a curve, 3 points, or 6 coordinates (none provided).");if(n[0]instanceof p){if(1===r)return this.controlPoint1=n[0].controlPoint1.clone(),this.controlPoint2=n[0].controlPoint2.clone(),this.end=n[0].end.clone(),this;throw new Error("Curveto constructor expects a curve, 3 points, or 6 coordinates ("+r+" curves provided).")}if("string"==typeof n[0]||"number"==typeof n[0]){if(6===r)return this.controlPoint1=new E(+n[0],+n[1]),this.controlPoint2=new E(+n[2],+n[3]),this.end=new E(+n[4],+n[5]),this;if(r<6)throw new Error("Curveto constructor expects a curve, 3 points, or 6 coordinates ("+r+" coordinates provided).");var s;for(t=[],o=0;o<r;o+=6)s=n.slice(o,o+6),t.push(x(R,s));return t}if(3===r)return this.controlPoint1=new E(n[0]),this.controlPoint2=new E(n[1]),this.end=new E(n[2]),this;if(r<3)throw new Error("Curveto constructor expects a curve, 3 points, or 6 coordinates ("+r+" points provided).");for(t=[],o=0;o<r;o+=3)e=n.slice(o,o+3),t.push(x(R,e));return t},W={clone:function(){return new R(this.controlPoint1,this.controlPoint2,this.end)},divideAt:function(t,e){var i=new p(this.start,this.controlPoint1,this.controlPoint2,this.end).divideAt(t,e);return[new R(i[0]),new R(i[1])]},divideAtLength:function(t,e){var i=new p(this.start,this.controlPoint1,this.controlPoint2,this.end).divideAtLength(t,e);return[new R(i[0]),new R(i[1])]},divideAtT:function(t){var e=new p(this.start,this.controlPoint1,this.controlPoint2,this.end).divideAtT(t);return[new R(e[0]),new R(e[1])]},isDifferentiable:function(){if(!this.previousSegment)return!1;var t=this.start,e=this.controlPoint1,i=this.controlPoint2,n=this.end;return!(t.equals(e)&&e.equals(i)&&i.equals(n))},scale:function(t,e,i){return this.controlPoint1.scale(t,e,i),this.controlPoint2.scale(t,e,i),this.end.scale(t,e,i),this},serialize:function(){var t=this.controlPoint1,e=this.controlPoint2,i=this.end;return this.type+" "+t.x+" "+t.y+" "+e.x+" "+e.y+" "+i.x+" "+i.y},toString:function(){return this.type+" "+this.start+" "+this.controlPoint1+" "+this.controlPoint2+" "+this.end},translate:function(t,e){return this.controlPoint1.translate(t,e),this.controlPoint2.translate(t,e),this.end.translate(t,e),this}};Object.defineProperty(W,"type",{configurable:!0,enumerable:!0,value:"C"}),R.prototype=z(j,p.prototype,W);var U=function(){for(var t,e,i=arguments,n=[],r=arguments.length,o=0;o<r;o++)n.push(i[o]);if(!(this instanceof U))return x(U,n);if(0===r)throw new Error("Moveto constructor expects a line, a curve, 1 point, or 2 coordinates (none provided).");if(n[0]instanceof B){if(1===r)return this.end=n[0].end.clone(),this;throw new Error("Moveto constructor expects a line, a curve, 1 point, or 2 coordinates ("+r+" lines provided).")}if(n[0]instanceof p){if(1===r)return this.end=n[0].end.clone(),this;throw new Error("Moveto constructor expects a line, a curve, 1 point, or 2 coordinates ("+r+" curves provided).")}if("string"==typeof n[0]||"number"==typeof n[0]){if(2===r)return this.end=new E(+n[0],+n[1]),this;if(r<2)throw new Error("Moveto constructor expects a line, a curve, 1 point, or 2 coordinates ("+r+" coordinates provided).");var s;for(t=[],o=0;o<r;o+=2)s=n.slice(o,o+2),0===o?t.push(x(U,s)):t.push(x(T,s));return t}if(1===r)return this.end=new E(n[0]),this;for(t=[],o=0;o<r;o+=1)e=n[o],0===o?t.push(new U(e)):t.push(new T(e));return t},X={bbox:function(){return null},clone:function(){return new U(this.end)},closestPoint:function(){return this.end.clone()},closestPointNormalizedLength:function(){return 0},closestPointLength:function(){return 0},closestPointT:function(){return 1},closestPointTangent:function(){return null},divideAt:function(){return[this.clone(),this.clone()]},divideAtLength:function(){return[this.clone(),this.clone()]},equals:function(t){return this.end.equals(t.end)},getSubdivisions:function(){return[]},isDifferentiable:function(){return!1},isSubpathStart:!0,isVisible:!1,length:function(){return 0},lengthAtT:function(){return 0},pointAt:function(){return this.end.clone()},pointAtLength:function(){return this.end.clone()},pointAtT:function(){return this.end.clone()},scale:function(t,e,i){return this.end.scale(t,e,i),this},serialize:function(){var t=this.end;return this.type+" "+t.x+" "+t.y},tangentAt:function(){return null},tangentAtLength:function(){return null},tangentAtT:function(){return null},toString:function(){return this.type+" "+this.end},translate:function(t,e){return this.end.translate(t,e),this}};Object.defineProperty(X,"start",{configurable:!0,enumerable:!0,get:function(){throw new Error("Illegal access. Moveto segments should not need a start property.")}}),Object.defineProperty(X,"type",{configurable:!0,enumerable:!0,value:"M"}),U.prototype=z(j,X);var V=function(){for(var t=arguments,e=[],i=arguments.length,n=0;n<i;n++)e.push(t[n]);if(!(this instanceof V))return x(V,e);if(0<i)throw new Error("Closepath constructor expects no arguments.");return this},F={clone:function(){return new V},divideAt:function(t){var e=new B(this.start,this.end).divideAt(t);return[e[1].isDifferentiable()?new T(e[0]):this.clone(),new T(e[1])]},divideAtLength:function(t){var e=new B(this.start,this.end).divideAtLength(t);return[e[1].isDifferentiable()?new T(e[0]):this.clone(),new T(e[1])]},getSubdivisions:function(){return[]},isDifferentiable:function(){return!(!this.previousSegment||!this.subpathStartSegment)&&!this.start.equals(this.end)},scale:function(){return this},serialize:function(){return this.type},toString:function(){return this.type+" "+this.start+" "+this.end},translate:function(){return this}};Object.defineProperty(F,"end",{configurable:!0,enumerable:!0,get:function(){if(!this.subpathStartSegment)throw new Error("Missing subpath start segment. (This segment needs a subpath start segment (e.g. Moveto); OR segment has not yet been added to a path.)");return this.subpathStartSegment.end}}),Object.defineProperty(F,"type",{configurable:!0,enumerable:!0,value:"Z"}),V.prototype=z(j,B.prototype,F);var J=O.segmentTypes={L:T,C:R,M:U,Z:V,z:V};O.regexSupportedData=new RegExp("^[\\s\\d"+Object.keys(J).join("")+",.]*$"),O.isDataSupported=function(t){return"string"==typeof t&&this.regexSupportedData.test(t)};var Q,_,K={bezier:t,Curve:p,Ellipse:w,Line:B,Path:O,Point:E,Polyline:D,Rect:H,scale:{linear:function(t,e,i){var n=t[1]-t[0],r=e[1]-e[0];return(i-t[0])/n*r+e[0]||0}},normalizeAngle:C,snapToGrid:I,toDeg:A,toRad:y,random:m,ellipse:v,line:b,point:N,rect:M},q=function(){if(!("object"==typeof window&&!(!window.SVGAngle&&!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"))))return function(){throw new Error("SVG is required to use Vectorizer.")};var z={svg:"http://www.w3.org/2000/svg",xmlns:"http://www.w3.org/2000/xmlns/",xml:"http://www.w3.org/XML/1998/namespace",xlink:"http://www.w3.org/1999/xlink",xhtml:"http://www.w3.org/1999/xhtml"},t=Math,p=t.PI,o=t.atan2,s=t.sqrt,h=t.min,u=t.max,I=t.cos,m=t.sin,j=function(t,e,i){if(!(this instanceof j))return j.apply(Object.create(j.prototype),arguments);if(t){if(j.isV(t)&&(t=t.node),e=e||{},j.isString(t)){if("svg"===t.toLowerCase())t=j.createSvgDocument();else if("<"===t[0]){var n=j.createSvgDocument(t);if(1<n.childNodes.length){var r,o,s=[];for(r=0,o=n.childNodes.length;r<o;r++){var a=n.childNodes[r];s.push(new j(document.importNode(a,!0)))}return s}t=document.importNode(n.firstChild,!0)}else t=document.createElementNS(z.svg,t);j.ensureId(t)}return this.node=t,this.setAttributes(e),i&&this.append(i),this}},e=j.prototype;function T(t,e,i){i||(i={});for(var n=i.includeAnnotationIndices,r=i.eol,o=i.lineHeight,s=i.baseSize,a=0,l={},c=e.length-1,g=0;g<=c;g++){var h=e[g],u=null;if(j.isObject(h)){var d=h.attrs,f=j("tspan",d),p=f.node,I=h.t;r&&g===c&&(I+=r),p.textContent=I;var m=d.class;m&&f.addClass(m),n&&f.attr("annotations",h.annotations),void 0===(u=parseFloat(d["font-size"]))&&(u=s),u&&a<u&&(a=u)}else r&&g===c&&(h+=r),p=document.createTextNode(h||" "),s&&a<s&&(a=s);t.appendChild(p)}return a&&(l.maxFontSize=a),o?l.lineHeight=o:a&&(l.lineHeight=1.2*a),l}Object.defineProperty(e,"id",{enumerable:!0,get:function(){return this.node.id},set:function(t){this.node.id=t}}),e.getTransformToElement=function(t){var e=this.node;if(j.isSVGGraphicsElement(t)&&j.isSVGGraphicsElement(e)){var i=j.toNode(t).getScreenCTM(),n=e.getScreenCTM();if(i&&n)return i.inverse().multiply(n)}return j.createSVGMatrix()},e.transform=function(t,e){var i=this.node;if(j.isUndefined(t))return j.transformStringToMatrix(this.attr("transform"));if(e&&e.absolute)return this.attr("transform",j.matrixToTransformString(t));var n=j.createSVGTransform(t);return i.transform.baseVal.appendItem(n),this},e.translate=function(t,e,i){i=i||{},e=e||0;var n=this.attr("transform")||"",r=j.parseTransformString(n);if(n=r.value,j.isUndefined(t))return r.translate;n=n.replace(/translate\([^)]*\)/g,"").trim();var o="translate("+(i.absolute?t:r.translate.tx+t)+","+(i.absolute?e:r.translate.ty+e)+")";return this.attr("transform",(o+" "+n).trim()),this},e.rotate=function(t,e,i,n){n=n||{};var r=this.attr("transform")||"",o=j.parseTransformString(r);if(r=o.value,j.isUndefined(t))return o.rotate;r=r.replace(/rotate\([^)]*\)/g,"").trim(),t%=360;var s="rotate("+(n.absolute?t:o.rotate.angle+t)+(void 0!==e&&void 0!==i?","+e+","+i:"")+")";return this.attr("transform",(r+" "+s).trim()),this},e.scale=function(t,e){e=j.isUndefined(e)?t:e;var i=this.attr("transform")||"",n=j.parseTransformString(i);if(i=n.value,j.isUndefined(t))return n.scale;i=i.replace(/scale\([^)]*\)/g,"").trim();var r="scale("+t+","+e+")";return this.attr("transform",(i+" "+r).trim()),this},e.bbox=function(t,e){var i,n=this.node,r=n.ownerSVGElement;if(!r)return new H(0,0,0,0);try{i=n.getBBox()}catch(t){i={x:n.clientLeft,y:n.clientTop,width:n.clientWidth,height:n.clientHeight}}if(t)return new H(i);var o=this.getTransformToElement(e||r);return j.transformRect(i,o)},e.getBBox=function(t){var e,i={},n=this.node;if(!n.ownerSVGElement||!j.isSVGGraphicsElement(n))return new H(0,0,0,0);if(t&&(t.target&&(i.target=j.toNode(t.target)),t.recursive&&(i.recursive=t.recursive)),i.recursive){var r=this.children(),o=r.length;if(0===o)return this.getBBox({target:i.target,recursive:!1});i.target||(i.target=this);for(var s=0;s<o;s++){var a,l=r[s];a=0===l.children().length?l.getBBox({target:i.target,recursive:!1}):l.getBBox({target:i.target,recursive:!0}),e=e?e.union(a):a}return e}try{e=n.getBBox()}catch(t){e={x:n.clientLeft,y:n.clientTop,width:n.clientWidth,height:n.clientHeight}}if(i.target){var c=this.getTransformToElement(i.target);return j.transformRect(e,c)}return new H(e)};var Z=/em$/;function L(t,e){var i=parseFloat(t);return Z.test(t)?i*e:i}e.text=function(t,e){if(t&&"string"!=typeof t)throw new Error("Vectorizer: text() expects the first argument to be a string.");t=j.sanitizeText(t),e||(e={});var i=e.displayEmpty,n=e.eol,r=e.textPath,o=e.textVerticalAnchor,s="middle"===o||"bottom"===o||"top"===o,a=e.x;void 0===a&&(a=this.attr("x")||0);var l=e.includeAnnotationIndices,c=e.annotations;c&&!j.isArray(c)&&(c=[c]);var g=e.lineHeight,h="auto"===g,u=h?"1.5em":g||"1em";this.empty(),this.attr({"xml:space":"preserve",display:t||i?null:"none"});var d=parseFloat(this.attr("font-size"));d||(d=16,(s||c)&&this.attr("font-size",d));var f,p=document;f=r?("string"==typeof r&&(r={d:r}),function(t,e){t||(t={});var i=j("textPath"),n=t.d;if(n&&void 0===t["xlink:href"]){var r=j("path").attr("d",n).appendTo(e.defs());i.attr("xlink:href","#"+r.id)}return j.isObject(t)&&i.attr(t),i.node}(r,this)):p.createDocumentFragment();for(var I,m=0,A=t.split("\n"),v=[],C=0,w=A.length-1;C<=w;C++){var y,b=u,N="v-line",M=p.createElementNS(z.svg,"tspan"),x=A[C];if(x)if(c){var S=(y=T(M,j.annotateString(x,c,{offset:-m,includeAnnotationIndices:l}),{includeAnnotationIndices:l,eol:C!==w&&n,lineHeight:h?null:u,baseSize:d})).lineHeight;S&&h&&0!==C&&(b=S),0===C&&(I=.8*y.maxFontSize)}else n&&C!==w&&(x+=n),M.textContent=x;else{M.textContent="-",N+=" v-empty-line";var k=M.style;k.fillOpacity=0,k.strokeOpacity=0,c&&(y={})}y&&v.push(y),0<C&&M.setAttribute("dy",b),(0<C||r)&&M.setAttribute("x",a),M.className.baseVal=N,f.appendChild(M),m+=x.length+1}if(s)if(c)b=function(t,e,i,n){if(!Array.isArray(e))return 0;var r=e.length;if(!r)return 0;for(var o=e[0],s=L(o.maxFontSize,i)||i,a=0,l=L(n,i),c=1;c<r;c++)a+=L((o=e[c]).lineHeight,i)||l;var g,h=L(o.maxFontSize,i)||i;switch(t){case"middle":g=s/2-.15*h-a/2;break;case"bottom":g=-.25*h-a;break;default:case"top":g=.8*s}return g}(o,v,d,u);else if("top"===o)b="0.8em";else{var D;switch(0<w?(D=parseFloat(u)||1,D*=w,Z.test(u)||(D/=d)):D=0,o){case"middle":b=.3-D/2+"em";break;case"bottom":b=-D-.3+"em"}}else 0===o?b="0em":o?b=o:(b=0,null===this.attr("y")&&this.attr("y",I||"0.8em"));return f.firstChild.setAttribute("dy",b),this.append(f),this},e.removeAttr=function(t){var e=j.qualifyAttr(t),i=this.node;return e.ns?i.hasAttributeNS(e.ns,e.local)&&i.removeAttributeNS(e.ns,e.local):i.hasAttribute(t)&&i.removeAttribute(t),this},e.attr=function(t,e){if(j.isUndefined(t)){for(var i=this.node.attributes,n={},r=0;r<i.length;r++)n[i[r].name]=i[r].value;return n}if(j.isString(t)&&j.isUndefined(e))return this.node.getAttribute(t);if("object"==typeof t)for(var o in t)t.hasOwnProperty(o)&&this.setAttribute(o,t[o]);else this.setAttribute(t,e);return this},e.normalizePath=function(){return"PATH"===this.tagName()&&this.attr("d",j.normalizePathData(this.attr("d"))),this},e.remove=function(){return this.node.parentNode&&this.node.parentNode.removeChild(this.node),this},e.empty=function(){for(;this.node.firstChild;)this.node.removeChild(this.node.firstChild);return this},e.setAttributes=function(t){for(var e in t)t.hasOwnProperty(e)&&this.setAttribute(e,t[e]);return this},e.append=function(t){j.isArray(t)||(t=[t]);for(var e=0,i=t.length;e<i;e++)this.node.appendChild(j.toNode(t[e]));return this},e.prepend=function(t){var e=this.node.firstChild;return e?j(e).before(t):this.append(t)},e.before=function(t){var e=this.node,i=e.parentNode;if(i){j.isArray(t)||(t=[t]);for(var n=0,r=t.length;n<r;n++)i.insertBefore(j.toNode(t[n]),e)}return this},e.appendTo=function(t){return j.toNode(t).appendChild(this.node),this},e.svg=function(){return this.node instanceof window.SVGSVGElement?this:j(this.node.ownerSVGElement)},e.tagName=function(){return this.node.tagName.toUpperCase()},e.defs=function(){var t=this.svg()||this,e=t.node.getElementsByTagName("defs")[0];return e?j(e):j("defs").appendTo(t)},e.clone=function(){var t=j(this.node.cloneNode(!0));return t.node.id=j.uniqueId(),t},e.findOne=function(t){var e=this.node.querySelector(t);return e?j(e):void 0},e.find=function(t){var e=[],i=this.node.querySelectorAll(t);if(i)for(var n=0;n<i.length;n++)e.push(j(i[n]));return e},e.children=function(){for(var t=this.node.childNodes,e=[],i=0;i<t.length;i++){1===t[i].nodeType&&e.push(j(t[i]))}return e},e.index=function(){for(var t=0,e=this.node.previousSibling;e;)1===e.nodeType&&t++,e=e.previousSibling;return t},e.findParentByClass=function(t,e){for(var i=this.node.ownerSVGElement,n=this.node.parentNode;n&&n!==e&&n!==i;){var r=j(n);if(r.hasClass(t))return r;n=n.parentNode}return null},e.contains=function(t){var e=this.node,i=j.toNode(t),n=i&&i.parentNode;return e===n||!!(n&&1===n.nodeType&&16&e.compareDocumentPosition(n))},e.toLocalPoint=function(t,e){var i=this.svg().node,n=i.createSVGPoint();n.x=t,n.y=e;try{var r=n.matrixTransform(i.getScreenCTM().inverse()),o=this.getTransformToElement(i).inverse()}catch(t){return n}return r.matrixTransform(o)},e.translateCenterToPoint=function(t){var e=this.getBBox({target:this.svg()}).center();return this.translate(t.x-e.x,t.y-e.y),this},e.translateAndAutoOrient=function(t,e,i){t=new E(t),e=new E(e),i||(i=this.svg());var n=this.scale();this.attr("transform","");var r=this.getBBox({target:i}).scale(n.sx,n.sy),o=j.createSVGTransform();o.setTranslate(-r.x-r.width/2,-r.y-r.height/2);var s=j.createSVGTransform(),a=t.angleBetween(e,t.clone().offset(1,0));a&&s.setRotate(a,0,0);var l=j.createSVGTransform(),c=t.clone().move(e,r.width/2);l.setTranslate(2*t.x-c.x,2*t.y-c.y);var g=this.getTransformToElement(i),h=j.createSVGTransform();return h.setMatrix(l.matrix.multiply(s.matrix.multiply(o.matrix.multiply(g.scale(n.sx,n.sy))))),this.attr("transform",j.matrixToTransformString(h.matrix)),this},e.animateAlongPath=function(t,e){e=j.toNode(e);var i=j.ensureId(e),n=j("animateMotion",t),r=j("mpath",{"xlink:href":"#"+i});n.append(r),this.append(n);try{n.node.beginElement()}catch(t){if("fake"===document.documentElement.getAttribute("smiling")){var o=n.node;o.animators=[];var s=o.getAttribute("id");s&&(id2anim[s]=o);for(var a=getTargets(o),l=0,c=a.length;l<c;l++){var g=a[l],h=new Animator(o,g,l);animators.push(h),(o.animators[l]=h).register()}}}return this},e.hasClass=function(t){return new RegExp("(\\s|^)"+t+"(\\s|$)").test(this.node.getAttribute("class"))},e.addClass=function(t){if(t&&!this.hasClass(t)){var e=this.node.getAttribute("class")||"";this.node.setAttribute("class",(e+" "+t).trim())}return this},e.removeClass=function(t){if(t&&this.hasClass(t)){var e=this.node.getAttribute("class").replace(new RegExp("(\\s|^)"+t+"(\\s|$)","g"),"$2");this.node.setAttribute("class",e)}return this},e.toggleClass=function(t,e){return(j.isUndefined(e)?this.hasClass(t):!e)?this.removeClass(t):this.addClass(t),this},e.sample=function(t){t=t||1;for(var e,i=this.node,n=i.getTotalLength(),r=[],o=0;o<n;)e=i.getPointAtLength(o),r.push({x:e.x,y:e.y,distance:o}),o+=t;return r},e.convertToPath=function(){var t=j("path");t.attr(this.attr());var e=this.convertToPathData();return e&&t.attr("d",e),t},e.convertToPathData=function(){var t=this.tagName();switch(t){case"PATH":return this.attr("d");case"LINE":return j.convertLineToPathData(this.node);case"POLYGON":return j.convertPolygonToPathData(this.node);case"POLYLINE":return j.convertPolylineToPathData(this.node);case"ELLIPSE":return j.convertEllipseToPathData(this.node);case"CIRCLE":return j.convertCircleToPathData(this.node);case"RECT":return j.convertRectToPathData(this.node)}throw new Error(t+" cannot be converted to PATH.")},j.prototype.toGeometryShape=function(){var t,e,i,n,r,o,s,a,l,c,g,h,u,d,f;switch(this.tagName()){case"RECT":return t=parseFloat(this.attr("x"))||0,e=parseFloat(this.attr("y"))||0,i=parseFloat(this.attr("width"))||0,n=parseFloat(this.attr("height"))||0,new H(t,e,i,n);case"CIRCLE":return r=parseFloat(this.attr("cx"))||0,o=parseFloat(this.attr("cy"))||0,s=parseFloat(this.attr("r"))||0,new w({x:r,y:o},s,s);case"ELLIPSE":return r=parseFloat(this.attr("cx"))||0,o=parseFloat(this.attr("cy"))||0,a=parseFloat(this.attr("rx"))||0,l=parseFloat(this.attr("ry"))||0,new w({x:r,y:o},a,l);case"POLYLINE":return c=j.getPointsFromSvgNode(this),new D(c);case"POLYGON":return 1<(c=j.getPointsFromSvgNode(this)).length&&c.push(c[0]),new D(c);case"PATH":return g=this.attr("d"),O.isDataSupported(g)||(g=j.normalizePathData(g)),new O(g);case"LINE":return h=parseFloat(this.attr("x1"))||0,d=parseFloat(this.attr("y1"))||0,u=parseFloat(this.attr("x2"))||0,f=parseFloat(this.attr("y2"))||0,new B({x:h,y:d},{x:u,y:f})}return this.getBBox()},e.findIntersection=function(t,e){var i=this.svg().node;e=e||i;var n=this.getBBox({target:e}),r=n.center();if(n.intersectionWithLineFromCenterToPoint(t)){var o,s=this.tagName();if("RECT"===s){var a=new H(parseFloat(this.attr("x")||0),parseFloat(this.attr("y")||0),parseFloat(this.attr("width")),parseFloat(this.attr("height"))),l=this.getTransformToElement(e),c=j.decomposeMatrix(l),g=i.createSVGTransform();g.setRotate(-c.rotation,r.x,r.y);var h=j.transformRect(a,g.matrix.multiply(l));o=new H(h).intersectionWithLineFromCenterToPoint(t,c.rotation)}else if("PATH"===s||"POLYGON"===s||"POLYLINE"===s||"CIRCLE"===s||"ELLIPSE"===s){var u,d,f,p,I,m=("PATH"===s?this:this.convertToPath()).sample(),A=1/0,v=[];for(u=0;u<m.length;u++)d=m[u],f=(f=j.createSVGPoint(d.x,d.y)).matrixTransform(this.getTransformToElement(e)),(I=(d=new E(f)).distance(r)+(p=1.1*d.distance(t)))<A?(A=I,v=[{sample:d,refDistance:p}]):I<A+1&&v.push({sample:d,refDistance:p});v.sort(function(t,e){return t.refDistance-e.refDistance}),v[0]&&(o=v[0].sample)}return o}},e.setAttribute=function(t,e){var i=this.node;if(null===e)return this.removeAttr(t),this;var n=j.qualifyAttr(t);return n.ns?i.setAttributeNS(n.ns,t,e):"id"===t?i.id=e:i.setAttribute(t,e),this},j.createSvgDocument=function(t){if(t){var e='<svg xmlns="'+z.svg+'" xmlns:xlink="'+z.xlink+'" version="1.1">'+t+"</svg>";return j.parseXML(e,{async:!1}).documentElement}var i=document.createElementNS(z.svg,"svg");return i.setAttributeNS(z.xmlns,"xmlns:xlink",z.xlink),i.setAttribute("version","1.1"),i},j.idCounter=0,j.uniqueId=function(){return"v-"+ ++j.idCounter},j.toNode=function(t){return j.isV(t)?t.node:t.nodeName&&t||t[0]},j.ensureId=function(t){return(t=j.toNode(t)).id||(t.id=j.uniqueId())},j.sanitizeText=function(t){return(t||"").replace(/ /g," ")},j.isUndefined=function(t){return void 0===t},j.isString=function(t){return"string"==typeof t},j.isObject=function(t){return t&&"object"==typeof t},j.isArray=Array.isArray,j.parseXML=function(t,e){var i;e=e||{};try{var n=new DOMParser;j.isUndefined(e.async)||(n.async=e.async),i=n.parseFromString(t,"text/xml")}catch(t){i=void 0}if(!i||i.getElementsByTagName("parsererror").length)throw new Error("Invalid XML: "+t);return i},j.qualifyAttr=function(t){if(-1===t.indexOf(":"))return{ns:null,local:t};var e=t.split(":");return{ns:z[e[0]],local:e[1]}},j.transformRegex=/(\w+)\(([^,)]+),?([^)]+)?\)/gi,j.transformSeparatorRegex=/[ ,]+/,j.transformationListRegex=/^(\w+)\((.*)\)/,j.transformStringToMatrix=function(t){var e=j.createSVGMatrix(),i=t&&t.match(j.transformRegex);if(!i)return e;for(var n=0,r=i.length;n<r;n++){var o=i[n].match(j.transformationListRegex);if(o){var s,a,l,c,g,h=j.createSVGMatrix(),u=o[2].split(j.transformSeparatorRegex);switch(o[1].toLowerCase()){case"scale":s=parseFloat(u[0]),a=void 0===u[1]?s:parseFloat(u[1]),h=h.scaleNonUniform(s,a);break;case"translate":l=parseFloat(u[0]),c=parseFloat(u[1]),h=h.translate(l,c);break;case"rotate":g=parseFloat(u[0]),l=parseFloat(u[1])||0,c=parseFloat(u[2])||0,h=0!==l||0!==c?h.translate(l,c).rotate(g).translate(-l,-c):h.rotate(g);break;case"skewx":g=parseFloat(u[0]),h=h.skewX(g);break;case"skewy":g=parseFloat(u[0]),h=h.skewY(g);break;case"matrix":h.a=parseFloat(u[0]),h.b=parseFloat(u[1]),h.c=parseFloat(u[2]),h.d=parseFloat(u[3]),h.e=parseFloat(u[4]),h.f=parseFloat(u[5]);break;default:continue}e=e.multiply(h)}}return e},j.matrixToTransformString=function(t){return t||(t=!0),"matrix("+(void 0!==t.a?t.a:1)+","+(void 0!==t.b?t.b:0)+","+(void 0!==t.c?t.c:0)+","+(void 0!==t.d?t.d:1)+","+(void 0!==t.e?t.e:0)+","+(void 0!==t.f?t.f:0)+")"},j.parseTransformString=function(t){var e,i,n;if(t){var r=j.transformSeparatorRegex;if(0<=t.trim().indexOf("matrix")){var o=j.transformStringToMatrix(t),s=j.decomposeMatrix(o);e=[s.translateX,s.translateY],n=[s.scaleX,s.scaleY],i=[s.rotation];var a=[];0===e[0]&&0===e[1]||a.push("translate("+e+")"),1===n[0]&&1===n[1]||a.push("scale("+n+")"),0!==i[0]&&a.push("rotate("+i+")"),t=a.join(" ")}else{var l=t.match(/translate\((.*?)\)/);l&&(e=l[1].split(r));var c=t.match(/rotate\((.*?)\)/);c&&(i=c[1].split(r));var g=t.match(/scale\((.*?)\)/);g&&(n=g[1].split(r))}}var h=n&&n[0]?parseFloat(n[0]):1;return{value:t,translate:{tx:e&&e[0]?parseInt(e[0],10):0,ty:e&&e[1]?parseInt(e[1],10):0},rotate:{angle:i&&i[0]?parseInt(i[0],10):0,cx:i&&i[1]?parseInt(i[1],10):void 0,cy:i&&i[2]?parseInt(i[2],10):void 0},scale:{sx:h,sy:n&&n[1]?parseFloat(n[1]):h}}},j.deltaTransformPoint=function(t,e){return{x:e.x*t.a+e.y*t.c+0,y:e.x*t.b+e.y*t.d+0}},j.decomposeMatrix=function(t){var e=j.deltaTransformPoint(t,{x:0,y:1}),i=j.deltaTransformPoint(t,{x:1,y:0}),n=180/p*o(e.y,e.x)-90,r=180/p*o(i.y,i.x);return{translateX:t.e,translateY:t.f,scaleX:s(t.a*t.a+t.b*t.b),scaleY:s(t.c*t.c+t.d*t.d),skewX:n,skewY:r,rotation:n}},j.matrixToScale=function(t){var e,i,n,r;return t?(e=j.isUndefined(t.a)?1:t.a,r=j.isUndefined(t.d)?1:t.d,i=t.b,n=t.c):e=r=1,{sx:i?s(e*e+i*i):e,sy:n?s(n*n+r*r):r}},j.matrixToRotate=function(t){var e={x:0,y:1};return t&&(e=j.deltaTransformPoint(t,e)),{angle:C(A(o(e.y,e.x))-90)}},j.matrixToTranslate=function(t){return{tx:t&&t.e||0,ty:t&&t.f||0}},j.isV=function(t){return t instanceof j},j.isVElement=j.isV,j.isSVGGraphicsElement=function(t){return!!t&&((t=j.toNode(t))instanceof SVGElement&&"function"==typeof t.getScreenCTM)};var d=j("svg").node;return j.createSVGMatrix=function(t){var e=d.createSVGMatrix();for(var i in t)e[i]=t[i];return e},j.createSVGTransform=function(t){return j.isUndefined(t)?d.createSVGTransform():(t instanceof SVGMatrix||(t=j.createSVGMatrix(t)),d.createSVGTransformFromMatrix(t))},j.createSVGPoint=function(t,e){var i=d.createSVGPoint();return i.x=t,i.y=e,i},j.transformRect=function(t,e){var i=d.createSVGPoint();i.x=t.x,i.y=t.y;var n=i.matrixTransform(e);i.x=t.x+t.width,i.y=t.y;var r=i.matrixTransform(e);i.x=t.x+t.width,i.y=t.y+t.height;var o=i.matrixTransform(e);i.x=t.x,i.y=t.y+t.height;var s=i.matrixTransform(e),a=h(n.x,r.x,o.x,s.x),l=u(n.x,r.x,o.x,s.x),c=h(n.y,r.y,o.y,s.y),g=u(n.y,r.y,o.y,s.y);return new H(a,c,l-a,g-c)},j.transformPoint=function(t,e){return new E(j.createSVGPoint(t.x,t.y).matrixTransform(e))},j.transformLine=function(t,e){return new B(j.transformPoint(t.start,e),j.transformPoint(t.end,e))},j.transformPolyline=function(t,e){var i=t instanceof D?t.points:t;j.isArray(i)||(i=[]);for(var n=[],r=0,o=i.length;r<o;r++)n[r]=j.transformPoint(i[r],e);return new D(n)},j.styleToObject=function(t){for(var e={},i=t.split(";"),n=0;n<i.length;n++){var r=i[n].split("=");e[r[0].trim()]=r[1].trim()}return e},j.createSlicePathData=function(t,e,i,n){var r=2*p-1e-6,o=t,s=e,a=i,l=n,c=(l<a&&(c=a,a=l,l=c),l-a),g=c<p?"0":"1",h=I(a),u=m(a),d=I(l),f=m(l);return r<=c?o?"M0,"+s+"A"+s+","+s+" 0 1,1 0,"+-s+"A"+s+","+s+" 0 1,1 0,"+s+"M0,"+o+"A"+o+","+o+" 0 1,0 0,"+-o+"A"+o+","+o+" 0 1,0 0,"+o+"Z":"M0,"+s+"A"+s+","+s+" 0 1,1 0,"+-s+"A"+s+","+s+" 0 1,1 0,"+s+"Z":o?"M"+s*h+","+s*u+"A"+s+","+s+" 0 "+g+",1 "+s*d+","+s*f+"L"+o*d+","+o*f+"A"+o+","+o+" 0 "+g+",0 "+o*h+","+o*u+"Z":"M"+s*h+","+s*u+"A"+s+","+s+" 0 "+g+",1 "+s*d+","+s*f+"L0,0Z"},j.mergeAttrs=function(t,e){for(var i in e)"class"===i?t[i]=t[i]?t[i]+" "+e[i]:e[i]:"style"===i?j.isObject(t[i])&&j.isObject(e[i])?t[i]=j.mergeAttrs(t[i],e[i]):j.isObject(t[i])?t[i]=j.mergeAttrs(t[i],j.styleToObject(e[i])):j.isObject(e[i])?t[i]=j.mergeAttrs(j.styleToObject(t[i]),e[i]):t[i]=j.mergeAttrs(j.styleToObject(t[i]),j.styleToObject(e[i])):t[i]=e[i];return t},j.annotateString=function(t,e,i){e=e||[];for(var n,r,o,s=(i=i||{}).offset||0,a=[],l=[],c=0;c<t.length;c++){r=l[c]=t[c];for(var g=0;g<e.length;g++){var h=e[g],u=h.start+s,d=h.end+s;u<=c&&c<d&&(j.isObject(r)?r.attrs=j.mergeAttrs(j.mergeAttrs({},r.attrs),h.attrs):r=l[c]={t:t[c],attrs:h.attrs},i.includeAnnotationIndices&&(r.annotations||(r.annotations=[])).push(g))}(o=l[c-1])?j.isObject(r)&&j.isObject(o)?JSON.stringify(r.attrs)===JSON.stringify(o.attrs)?n.t+=r.t:(a.push(n),n=r):n=j.isObject(r)?(a.push(n),r):j.isObject(o)?(a.push(n),r):(n||"")+r:n=r}return n&&a.push(n),a},j.findAnnotationsAtIndex=function(t,e){var i=[];return t&&t.forEach(function(t){t.start<e&&e<=t.end&&i.push(t)}),i},j.findAnnotationsBetweenIndexes=function(t,e,i){var n=[];return t&&t.forEach(function(t){(e>=t.start&&e<t.end||i>t.start&&i<=t.end||t.start>=e&&t.end<i)&&n.push(t)}),n},j.shiftAnnotations=function(t,e,i){return t&&t.forEach(function(t){t.start<e&&t.end>=e?t.end+=i:t.start>=e&&(t.start+=i,t.end+=i)}),t},j.convertLineToPathData=function(t){return["M",(t=j(t)).attr("x1"),t.attr("y1"),"L",t.attr("x2"),t.attr("y2")].join(" ")},j.convertPolygonToPathData=function(t){var e=j.getPointsFromSvgNode(t);return 0===e.length?null:j.svgPointsToPath(e)+" Z"},j.convertPolylineToPathData=function(t){var e=j.getPointsFromSvgNode(t);return 0===e.length?null:j.svgPointsToPath(e)},j.svgPointsToPath=function(t){for(var e=0,i=t.length;e<i;e++)t[e]=t[e].x+" "+t[e].y;return"M "+t.join(" L")},j.getPointsFromSvgNode=function(t){var e=[],i=(t=j.toNode(t)).points;if(i)for(var n=0,r=i.numberOfItems;n<r;n++)e.push(i.getItem(n));return e},j.KAPPA=.551784,j.convertCircleToPathData=function(t){t=j(t);var e=parseFloat(t.attr("cx"))||0,i=parseFloat(t.attr("cy"))||0,n=parseFloat(t.attr("r")),r=n*j.KAPPA;return["M",e,i-n,"C",e+r,i-n,e+n,i-r,e+n,i,"C",e+n,i+r,e+r,i+n,e,i+n,"C",e-r,i+n,e-n,i+r,e-n,i,"C",e-n,i-r,e-r,i-n,e,i-n,"Z"].join(" ")},j.convertEllipseToPathData=function(t){t=j(t);var e=parseFloat(t.attr("cx"))||0,i=parseFloat(t.attr("cy"))||0,n=parseFloat(t.attr("rx")),r=parseFloat(t.attr("ry"))||n,o=n*j.KAPPA,s=r*j.KAPPA;return["M",e,i-r,"C",e+o,i-r,e+n,i-s,e+n,i,"C",e+n,i+s,e+o,i+r,e,i+r,"C",e-o,i+r,e-n,i+s,e-n,i,"C",e-n,i-s,e-o,i-r,e,i-r,"Z"].join(" ")},j.convertRectToPathData=function(t){return t=j(t),j.rectToPath({x:parseFloat(t.attr("x"))||0,y:parseFloat(t.attr("y"))||0,width:parseFloat(t.attr("width"))||0,height:parseFloat(t.attr("height"))||0,rx:parseFloat(t.attr("rx"))||0,ry:parseFloat(t.attr("ry"))||0})},j.rectToPath=function(t){var e=t.x,i=t.y,n=t.width,r=t.height,o=h(t.rx||t["top-rx"]||0,n/2),s=h(t.rx||t["bottom-rx"]||0,n/2),a=h(t.ry||t["top-ry"]||0,r/2),l=h(t.ry||t["bottom-ry"]||0,r/2);return(o||s||a||l?["M",e,i+a,"v",r-a-l,"a",s,l,0,0,0,s,l,"h",n-2*s,"a",s,l,0,0,0,s,-l,"v",-(r-l-a),"a",o,a,0,0,0,-o,-a,"h",-(n-2*o),"a",o,a,0,0,0,-o,a,"Z"]:["M",e,i,"H",e+n,"V",i+r,"H",e,"V",i,"Z"]).join(" ")},j.normalizePathData=function(){var t="\t\n\v\f\r \u2028\u2029",p=new RegExp("([a-z])["+t+",]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?["+t+"]*,?["+t+"]*)+)","ig"),I=new RegExp("(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)["+t+"]*,?["+t+"]*","ig"),e=Math,U=e.PI,X=e.sin,V=e.cos,F=e.tan,J=e.asin,H=e.sqrt,Q=e.abs;function u(t,e,i,n,r,o){return[1/3*t+2/3*i,1/3*e+2/3*n,1/3*r+2/3*i,1/3*o+2/3*n,r,o]}function _(t,e,i){return{x:t*V(i)-e*X(i),y:t*X(i)+e*V(i)}}function d(t){if(Array.isArray(t)&&Array.isArray(t&&t[0])||(t=function(t){if(!t)return null;var o={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},s=[];return String(t).replace(p,function(t,e,i){var n=[],r=e.toLowerCase();for(i.replace(I,function(t,e){e&&n.push(+e)}),"m"===r&&2<n.length&&(s.push([e].concat(n.splice(0,2))),r="l",e="m"===e?"l":"L");n.length>=o[r]&&(s.push([e].concat(n.splice(0,o[r]))),o[r]););}),s}(t)),!t||!t.length)return[["M",0,0]];for(var e,i=[],n=0,r=0,o=0,s=0,a=t.length,l=0;l<a;l++){var c=[];i.push(c);var g,h,u=t[l];if((e=u[0])!=e.toUpperCase())switch(c[0]=e.toUpperCase(),c[0]){case"A":c[1]=u[1],c[2]=u[2],c[3]=u[3],c[4]=u[4],c[5]=u[5],c[6]=+u[6]+n,c[7]=+u[7]+r;break;case"V":c[1]=+u[1]+r;break;case"H":c[1]=+u[1]+n;break;case"M":for(o=+u[1]+n,s=+u[2]+r,g=u.length,h=1;h<g;h++)c[h]=+u[h]+(h%2?n:r);break;default:for(g=u.length,h=1;h<g;h++)c[h]=+u[h]+(h%2?n:r)}else for(var d=u.length,f=0;f<d;f++)c[f]=u[f];switch(c[0]){case"Z":n=+o,r=+s;break;case"H":n=c[1];break;case"V":r=c[1];break;case"M":o=c[c.length-2],s=c[c.length-1],n=c[c.length-2],r=c[c.length-1];break;default:n=c[c.length-2],r=c[c.length-1]}}return i}function i(t){var n=d(t),e={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null};function i(t,e,i){var n,r;if(!t)return["C",e.x,e.y,e.x,e.y,e.x,e.y];switch(t[0]in{T:1,Q:1}||(e.qx=null,e.qy=null),t[0]){case"M":e.X=t[1],e.Y=t[2];break;case"A":t=0===parseFloat(t[1])||0===parseFloat(t[2])?["L",t[6],t[7]]:["C"].concat(function t(e,i,n,r,o,s,a,l,c,g){var h,u=120*U/180,d=U/180*(+o||0),f=[];if(g)b=g[0],N=g[1],w=g[2],y=g[3];else{e=(h=_(e,i,-d)).x,i=h.y;var p=(e-(l=(h=_(l,c,-d)).x))/2,I=(i-(c=h.y))/2,m=p*p/(n*n)+I*I/(r*r);1<m&&(n*=m=H(m),r*=m);var A=n*n,v=r*r,C=(s==a?-1:1)*H(Q((A*v-A*I*I-v*p*p)/(A*I*I+v*p*p))),w=C*n*I/r+(e+l)/2,y=C*-r*p/n+(i+c)/2,b=J(((i-y)/r).toFixed(9)),N=J(((c-y)/r).toFixed(9));(b=e<w?U-b:b)<0&&(b=2*U+b),(N=l<w?U-N:N)<0&&(N=2*U+N),a&&N<b&&(b-=2*U),!a&&b<N&&(N-=2*U)}var M=N-b;if(Q(M)>u){var x=N,S=l,k=c;f=t(l=w+n*V(N=b+u*(a&&b<N?1:-1)),c=y+r*X(N),n,r,o,0,a,S,k,[N,x,w,y])}M=N-b;var D=V(b),z=X(b),j=V(N),T=X(N),Z=F(M/4),L=4/3*(n*Z),P=4/3*(r*Z),G=[e,i],B=[e+L*z,i-P*D],O=[l+L*T,c-P*j],E=[l,c];if(B[0]=2*G[0]-B[0],B[1]=2*G[1]-B[1],g)return[B,O,E].concat(f);for(var Y=[],R=(f=[B,O,E].concat(f).join().split(",")).length,W=0;W<R;W++)Y[W]=W%2?_(f[W-1],f[W],d).y:_(f[W],f[W+1],d).x;return Y}.apply(0,[e.x,e.y].concat(t.slice(1))));break;case"S":r="C"===i||"S"===i?(n=2*e.x-e.bx,2*e.y-e.by):(n=e.x,e.y),t=["C",n,r].concat(t.slice(1));break;case"T":e.qy="Q"===i||"T"===i?(e.qx=2*e.x-e.qx,2*e.y-e.qy):(e.qx=e.x,e.y),t=["C"].concat(u(e.x,e.y,e.qx,e.qy,t[1],t[2]));break;case"Q":e.qx=t[1],e.qy=t[2],t=["C"].concat(u(e.x,e.y,t[1],t[2],t[3],t[4]));break;case"H":t=["L"].concat(t[1],e.y);break;case"V":t=["L"].concat(e.x,t[1])}return t}function r(t,e){if(7<t[e].length){t[e].shift();for(var i=t[e];i.length;)o[e]="A",t.splice(e++,0,["C"].concat(i.splice(0,6)));t.splice(e,1),l=n.length}}for(var o=[],s="",a="",l=n.length,c=0;c<l;c++){n[c]&&(s=n[c][0]),"C"!==s&&(o[c]=s,0<c&&(a=o[c-1])),n[c]=i(n[c],e,a),"A"!==o[c]&&"C"===s&&(o[c]="C"),r(n,c);var g=n[c],h=g.length;e.x=g[h-2],e.y=g[h-1],e.bx=parseFloat(g[h-4])||e.x,e.by=parseFloat(g[h-3])||e.y}return n[0][0]&&"M"===n[0][0]||n.unshift(["M",0,0]),n}return function(t){return i(t).join(",").split(",").join(" ")}}(),j.namespace=z,j.g=K,j}(),$={useCSSSelectors:!0,classNamePrefix:"joint-",defaultTheme:"default"},tt=function(t){return t?t.toString().split(" ").map(function(t){return t.substr(0,$.classNamePrefix.length)!==$.classNamePrefix&&(t=$.classNamePrefix+t),t}).join(" "):t},et=function(t){return t?t.toString().split(" ").map(function(t){return t.substr(0,$.classNamePrefix.length)===$.classNamePrefix&&(t=t.substr($.classNamePrefix.length)),t}).join(" "):t},it=function(t,e){for(var i={},n={},r=q.namespace.svg,o=e||r,s=document.createDocumentFragment(),a=[t,s,o];0<a.length;){o=a.pop();for(var l=a.pop(),c=a.pop(),g=0,h=c.length;g<h;g++){var u=c[g];if(!u.hasOwnProperty("tagName"))throw new Error("json-dom-parser: missing tagName");var d=u.tagName;u.hasOwnProperty("namespaceURI")&&(o=u.namespaceURI);var f=document.createElementNS(o,d),p=o===r,I=p?q:S,m=u.attributes;m&&I(f).attr(m);var A=u.style;if(A&&S(f).css(A),u.hasOwnProperty("className")){var v=u.className;p?f.className.baseVal=v:f.className=v}if(u.hasOwnProperty("textContent")&&(f.textContent=u.textContent),u.hasOwnProperty("selector")){var C=u.selector;if(i[C])throw new Error("json-dom-parser: selector must be unique");I(i[C]=f).attr("joint-selector",C)}if(u.hasOwnProperty("groupSelector")){var w=u.groupSelector;Array.isArray(w)||(w=[w]);for(var y=0,b=w.length;y<b;y++){var N=w[y],M=n[N];M||(M=n[N]=[]),M.push(f)}}l.appendChild(f);var x=u.children;Array.isArray(x)&&a.push(x,f,o)}}return{fragment:s,selectors:i,groupSelectors:n}},nt=function(t){var e=0;if(0===t.length)return e;for(var i=0;i<t.length;i++){e=(e<<5)-e+t.charCodeAt(i),e&=e}return e},rt=function(t,e,i){for(var n,r=Array.isArray(e)?e:e.split(i||"/"),o=0,s=r.length;o<s;){if(n=r[o++],!(Object(t)===t&&n in t))return;t=t[n]}return t},ot=function(t,e,i,n){for(var r=Array.isArray(e)?e:e.split(n||"/"),o=t,s=0,a=r.length;s<a-1;s++)o=o[r[s]]||(o[r[s]]={});return o[r[a-1]]=i,t},st=function(t,e,i){i||(i="/");var n=Array.isArray(e)?e.slice():e.split(i),r=n.pop();if(0<n.length){var o=rt(t,n,i);o&&delete o[r]}else delete t[r];return t},at=function(t,e,i){e=e||"/";var n={};for(var r in t)if(t.hasOwnProperty(r)){var o="object"==typeof t[r];if(o&&i&&i(t[r])&&(o=!1),o){var s=at(t[r],e,i);for(var a in s)s.hasOwnProperty(a)&&(n[r+e+a]=s[a])}else n[r]=t[r]}return n},lt=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){var e=16*Math.random()|0;return("x"===t?e:3&e|8).toString(16)})},ct=function(t){return ct.id=ct.id||1,t.id=void 0===t.id?"j_"+ct.id++:t.id,t.id},gt=function(t){return t.replace(/[A-Z]/g,"-$&").toLowerCase()},ht=function(t){var e=t,i=t.originalEvent&&t.originalEvent.changedTouches&&t.originalEvent.changedTouches[0];if(i){for(var n in t)void 0===i[n]&&(i[n]=t[n]);e=i}var r=e.target;if(r){var o=r.correspondingUseElement;o&&(e.target=o)}return e},ut=function(){var r;if("undefined"!=typeof window&&(r=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame),!r){var o=0;r=function(t){var e=(new Date).getTime(),i=Math.max(0,16-(e-o)),n=setTimeout(function(){t(e+i)},i);return o=e+i,n}}return function(t,e){for(var i=[],n=arguments.length-2;0<n--;)i[n]=arguments[n+2];return r(void 0!==e?t.bind.apply(t,[e].concat(i)):t)}}(),dt=((_="undefined"!=typeof window)&&(Q=window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.msCancelAnimationFrame||window.msCancelRequestAnimationFrame||window.oCancelAnimationFrame||window.oCancelRequestAnimationFrame||window.mozCancelAnimationFrame||window.mozCancelRequestAnimationFrame),Q=Q||clearTimeout,_?Q.bind(window):Q),ft=function(t){return ge(t)&&"%"===t.slice(-1)},pt=function(t,e){var i=parseFloat(t);if(Number.isNaN(i))return null;var n,r={};if(r.value=i,null==e)n="[A-Za-z]*";else if(Array.isArray(e)){if(0===e.length)return null;n=e.join("|")}else ge(e)&&(n=e);var o,s=(o=new RegExp("(?:\\d+(?:\\.\\d+)*)("+n+")$").exec(t))?o[1]:null;return null===s?null:(r.unit=s,r)},It=function(t,e,i,n){n=n||{},i=i||{};var r=e.width,o=e.height,s=n.svgDocument||q("svg").node,a=q("tspan").node,l=q("text").attr(i).append(a).node,c=document.createTextNode("");l.style.opacity=0,l.style.display="block",a.style.display="block",a.appendChild(c),s.appendChild(l),n.svgDocument||document.body.appendChild(s);for(var g,h,u,d=n.separator||" ",f=n.eol||"\n",p=n.hyphen?new RegExp(n.hyphen):/[^\w\d]/,I=t.split(d),m=[],A=[],v=0,C=0,w=I.length;v<w;v++){var y=I[v];if(y)if(f&&0<=y.indexOf(f))if(1<y.length){for(var b=y.split(f),N=0,M=b.length-1;N<M;N++)b.splice(2*N+1,0,f);Array.prototype.splice.apply(I,[v,1].concat(b)),v--,w+=b.length-1}else C++;else{if(c.data=A[C]?A[C]+" "+y:y,a.getComputedTextLength()<=r)A[C]=c.data,(g||h)&&(m[C++]=!0,h=g=0);else{if(!A[C]||g){var x=!!g;if(g=y.length-1,x||!g){if(!g){if(!A[C]){A=[];break}I.splice(v,2,y+I[v+1]),w--,m[C++]=!0,v--;continue}I[v]=y.substring(0,g),I[v+1]=y.substring(g)+I[v+1]}else{if(h)I.splice(v,2,I[v]+I[v+1]),h=0;else{var S=y.search(p);-1<S&&S!==y.length-1&&0!==S&&(h=S+1,g=0),I.splice(v,1,y.substring(0,h||g),y.substring(h||g)),w++}C&&!m[C-1]&&C--}v--;continue}C++,v--}if(void 0!==o){var k;if(void 0===u)u=(k="auto"===i.lineHeight?{value:1.5,unit:"em"}:pt(i.lineHeight,["em"])||{value:1,unit:"em"}).value,"em"===k.unit&&(u*=l.getBBox().height);if(u*A.length>o){var D=Math.floor(o/u)-1;A.splice(D+1);var z=n.ellipsis;if(!z||D<0)break;"string"!=typeof z&&(z="…");var j,T,Z=A[D],L=Z.length;do{if(T=Z[L],j=Z.substring(0,L),T?T.match(d)&&(j+=T):j+="string"==typeof d?d:" ",j+=z,c.data=j,a.getComputedTextLength()<=r){A[D]=j;break}L--}while(0<=L);break}}}}return n.svgDocument?s.removeChild(l):document.body.removeChild(s),A.join(f)},mt=function(t){var e=S(S.parseHTML("<div>"+t+"</div>",null,!1));return e.find("*").each(function(){var i=this;S.each(i.attributes,function(){var t=this.name,e=this.value;0!==t.indexOf("on")&&0!==e.indexOf("javascript:")||S(i).removeAttr(t)})}),e.html()},At=function(t,e){if(window.navigator.msSaveBlob)window.navigator.msSaveBlob(t,e);else{var i=window.URL.createObjectURL(t),n=document.createElement("a");n.href=i,n.download=e,document.body.appendChild(n),n.click(),document.body.removeChild(n),window.URL.revokeObjectURL(i)}},vt=function(t){t=t.replace(/\s/g,"");var e,i=(t=decodeURIComponent(t)).indexOf(","),n=t.slice(0,i),r=n.split(":")[1].split(";")[0],o=t.slice(i+1);e=0<=n.indexOf("base64")?atob(o):unescape(encodeURIComponent(o));for(var s=new Uint8Array(e.length),a=0;a<e.length;a++)s[a]=e.charCodeAt(a);return new Blob([s],{type:r})},Ct=function(t,e){var i=S(t),n=i.map(function(){var t=this.parentNode,e=t.insertBefore(document.createTextNode(""),this.nextSibling);return function(){if(t===this)throw new Error("You can't sort elements if any one is a descendant of another.");t.insertBefore(this,e),t.removeChild(e)}});return Array.prototype.sort.call(i,e).each(function(t){n[t].call(this)})},wt=function(t){if(Object(t)===t)return e=i=n=r=0,isFinite(t.vertical)&&(e=n=+t.vertical),isFinite(t.horizontal)&&(i=r=+t.horizontal),isFinite(t.top)&&(e=+t.top),isFinite(t.right)&&(i=+t.right),isFinite(t.bottom)&&(n=+t.bottom),isFinite(t.left)&&(r=+t.left),{top:e,right:i,bottom:n,left:r};var e,i,n,r,o=0;return isFinite(t)&&(o=+t),{top:o,right:o,bottom:o,left:o}},yt={linear:function(t){return t},quad:function(t){return t*t},cubic:function(t){return t*t*t},inout:function(t){if(t<=0)return 0;if(1<=t)return 1;var e=t*t,i=e*t;return 4*(t<.5?i:3*(t-e)+i-.75)},exponential:function(t){return Math.pow(2,10*(t-1))},bounce:function(t){for(var e=0,i=1;;e+=i,i/=2)if((7-4*e)/11<=t){var n=(11-6*e-11*t)/4;return-n*n+i*i}},reverse:function(e){return function(t){return 1-e(1-t)}},reflect:function(e){return function(t){return.5*(t<.5?e(2*t):2-e(2-2*t))}},clamp:function(i,n,r){return n=n||0,r=r||1,function(t){var e=i(t);return e<n?n:r<e?r:e}},back:function(e){return e||(e=1.70158),function(t){return t*t*((e+1)*t-e)}},elastic:function(e){return e||(e=1.5),function(t){return Math.pow(2,10*(t-1))*Math.cos(20*Math.PI*e/3*t)}}},bt={number:function(e,t){var i=t-e;return function(t){return e+i*t}},object:function(r,o){var s=Object.keys(r);return function(t){var e,i,n={};for(e=s.length-1;-1!=e;e--)n[i=s[e]]=r[i]+(o[i]-r[i])*t;return n}},hexColor:function(t,e){var i=parseInt(t.slice(1),16),n=parseInt(e.slice(1),16),r=255&i,o=(255&n)-r,s=65280&i,a=(65280&n)-s,l=16711680&i,c=(16711680&n)-l;return function(t){return"#"+(1<<24|r+o*t&255|s+a*t&65280|l+c*t&16711680).toString(16).slice(1)}},unit:function(e,t){var i=/(-?[0-9]*.[0-9]*)(px|em|cm|mm|in|pt|pc|%)/,n=i.exec(e),r=i.exec(t),o=r[1].indexOf("."),s=0<o?r[1].length-o-1:0;e=+n[1];var a=+r[1]-e,l=n[2];return function(t){return(e+a*t).toFixed(s)+l}}},Nt={outline:function(t){var e=Number.isFinite(t.margin)?t.margin:2,i=Number.isFinite(t.width)?t.width:1;return xt('<filter><feFlood flood-color="${color}" flood-opacity="${opacity}" result="colored"/><feMorphology in="SourceAlpha" result="morphedOuter" operator="dilate" radius="${outerRadius}" /><feMorphology in="SourceAlpha" result="morphedInner" operator="dilate" radius="${innerRadius}" /><feComposite result="morphedOuterColored" in="colored" in2="morphedOuter" operator="in"/><feComposite operator="xor" in="morphedOuterColored" in2="morphedInner" result="outline"/><feMerge><feMergeNode in="outline"/><feMergeNode in="SourceGraphic"/></feMerge></filter>')({color:t.color||"blue",opacity:Number.isFinite(t.opacity)?t.opacity:1,outerRadius:e+i,innerRadius:e})},highlight:function(t){return xt('<filter><feFlood flood-color="${color}" flood-opacity="${opacity}" result="colored"/><feMorphology result="morphed" in="SourceGraphic" operator="dilate" radius="${width}"/><feComposite result="composed" in="colored" in2="morphed" operator="in"/><feGaussianBlur result="blured" in="composed" stdDeviation="${blur}"/><feBlend in="SourceGraphic" in2="blured" mode="normal"/></filter>')({color:t.color||"red",width:Number.isFinite(t.width)?t.width:1,blur:Number.isFinite(t.blur)?t.blur:0,opacity:Number.isFinite(t.opacity)?t.opacity:1})},blur:function(t){var e=Number.isFinite(t.x)?t.x:2;return xt('<filter><feGaussianBlur stdDeviation="${stdDeviation}"/></filter>')({stdDeviation:Number.isFinite(t.y)?[e,t.y]:e})},dropShadow:function(t){var e="SVGFEDropShadowElement"in window?'<filter><feDropShadow stdDeviation="${blur}" dx="${dx}" dy="${dy}" flood-color="${color}" flood-opacity="${opacity}"/></filter>':'<filter><feGaussianBlur in="SourceAlpha" stdDeviation="${blur}"/><feOffset dx="${dx}" dy="${dy}" result="offsetblur"/><feFlood flood-color="${color}"/><feComposite in2="offsetblur" operator="in"/><feComponentTransfer><feFuncA type="linear" slope="${opacity}"/></feComponentTransfer><feMerge><feMergeNode/><feMergeNode in="SourceGraphic"/></feMerge></filter>';return xt(e)({dx:t.dx||0,dy:t.dy||0,opacity:Number.isFinite(t.opacity)?t.opacity:1,color:t.color||"black",blur:Number.isFinite(t.blur)?t.blur:4})},grayscale:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return xt('<filter><feColorMatrix type="matrix" values="${a} ${b} ${c} 0 0 ${d} ${e} ${f} 0 0 ${g} ${b} ${h} 0 0 0 0 0 1 0"/></filter>')({a:.2126+.7874*(1-e),b:.7152-.7152*(1-e),c:.0722-.0722*(1-e),d:.2126-.2126*(1-e),e:.7152+.2848*(1-e),f:.0722-.0722*(1-e),g:.2126-.2126*(1-e),h:.0722+.9278*(1-e)})},sepia:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return xt('<filter><feColorMatrix type="matrix" values="${a} ${b} ${c} 0 0 ${d} ${e} ${f} 0 0 ${g} ${h} ${i} 0 0 0 0 0 1 0"/></filter>')({a:.393+.607*(1-e),b:.769-.769*(1-e),c:.189-.189*(1-e),d:.349-.349*(1-e),e:.686+.314*(1-e),f:.168-.168*(1-e),g:.272-.272*(1-e),h:.534-.534*(1-e),i:.131+.869*(1-e)})},saturate:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return xt('<filter><feColorMatrix type="saturate" values="${amount}"/></filter>')({amount:1-e})},hueRotate:function(t){return xt('<filter><feColorMatrix type="hueRotate" values="${angle}"/></filter>')({angle:t.angle||0})},invert:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return xt('<filter><feComponentTransfer><feFuncR type="table" tableValues="${amount} ${amount2}"/><feFuncG type="table" tableValues="${amount} ${amount2}"/><feFuncB type="table" tableValues="${amount} ${amount2}"/></feComponentTransfer></filter>')({amount:e,amount2:1-e})},brightness:function(t){return xt('<filter><feComponentTransfer><feFuncR type="linear" slope="${amount}"/><feFuncG type="linear" slope="${amount}"/><feFuncB type="linear" slope="${amount}"/></feComponentTransfer></filter>')({amount:Number.isFinite(t.amount)?t.amount:1})},contrast:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return xt('<filter><feComponentTransfer><feFuncR type="linear" slope="${amount}" intercept="${amount2}"/><feFuncG type="linear" slope="${amount}" intercept="${amount2}"/><feFuncB type="linear" slope="${amount}" intercept="${amount2}"/></feComponentTransfer></filter>')({amount:e,amount2:.5-e/2})}},Mt={number:function(t,e,o){o=o||{currency:["$",""],decimal:".",thousands:",",grouping:[3]};var i=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i.exec(t),n=i[1]||" ",r=i[2]||">",s=i[3]||"",a=i[4]||"",l=i[5],c=+i[6],g=i[7],h=i[8],u=i[9],d=1,f="",p="",I=!1;switch(h&&(h=+h.substring(1)),(l||"0"===n&&"="===r)&&(l=n="0",r="=",g&&(c-=Math.floor((c-1)/4))),u){case"n":g=!0,u="g";break;case"%":d=100,p="%",u="f";break;case"p":d=100,p="%",u="r";break;case"b":case"o":case"x":case"X":"#"===a&&(f="0"+u.toLowerCase());break;case"c":case"d":I=!0,h=0;break;case"s":d=-1,u="r"}"$"===a&&(f=o.currency[0],p=o.currency[1]),"r"!=u||h||(u="g"),null!=h&&("g"==u?h=Math.max(1,Math.min(21,h)):"e"!=u&&"f"!=u||(h=Math.max(0,Math.min(20,h))));var m=l&&g;if(I&&e%1)return"";var A=e<0||0===e&&1/e<0?(e=-e,"-"):s,v=p;if(d<0){var C=this.prefix(e,h);e=C.scale(e),v=C.symbol+p}else e*=d;var w=(e=this.convert(u,e,h)).lastIndexOf("."),y=w<0?e:e.substring(0,w),b=w<0?"":o.decimal+e.substring(w+1);function N(t){for(var e=t.length,i=[],n=0,r=o.grouping[0];0<e&&0<r;)i.push(t.substring(e-=r,e+r)),r=o.grouping[n=(n+1)%o.grouping.length];return i.reverse().join(o.thousands)}!l&&g&&o.grouping&&(y=N(y));var M=f.length+y.length+b.length+(m?0:A.length),x=M<c?new Array(M=c-M+1).join(n):"";return m&&(y=N(x+y)),A+=f,e=y+b,("<"===r?A+e+x:">"===r?x+A+e:"^"===r?x.substring(0,M>>=1)+A+e+x.substring(M):A+(m?e:x+e))+v},string:function(t,e){for(var i,n="{",r=!1,o=[];-1!==(i=t.indexOf(n));){var s,a,l;if(s=t.slice(0,i),r){l=(a=s.split(":")).shift().split("."),s=e;for(var c=0;c<l.length;c++)s=s[l[c]];a.length&&(s=this.number(a,s))}o.push(s),t=t.slice(i+1),n=(r=!r)?"}":"{"}return o.push(t),o.join("")},convert:function(t,e,i){switch(t){case"b":return e.toString(2);case"c":return String.fromCharCode(e);case"o":return e.toString(8);case"x":return e.toString(16);case"X":return e.toString(16).toUpperCase();case"g":return e.toPrecision(i);case"e":return e.toExponential(i);case"f":return e.toFixed(i);case"r":return(e=this.round(e,this.precision(e,i))).toFixed(Math.max(0,Math.min(20,this.precision(e*(1+1e-15),i))));default:return e+""}},round:function(t,e){return e?Math.round(t*(e=Math.pow(10,e)))/e:Math.round(t)},precision:function(t,e){return e-(t?Math.ceil(Math.log(t)/Math.LN10):1)},prefix:function(t,e){var i=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"].map(function(t,e){var i=Math.pow(10,3*Math.abs(8-e));return{scale:8<e?function(t){return t/i}:function(t){return t*i},symbol:t}}),n=0;return t&&(t<0&&(t*=-1),e&&(t=this.round(t,this.precision(t,e))),n=1+Math.floor(1e-12+Math.log(t)/Math.LN10),n=Math.max(-24,Math.min(24,3*Math.floor((n<=0?n+1:n-1)/3)))),i[8+n/3]}},xt=function(t){var e=/<%= ([^ ]+) %>|\$\{ ?([^{} ]+) ?\}|\{\{([^{} ]+)\}\}/g;return function(n){return n=n||{},t.replace(e,function(t){for(var e=Array.from(arguments).slice(1,4).find(function(t){return!!t}).split("."),i=n[e.shift()];void 0!==i&&e.length;)i=i[e.shift()];return void 0!==i?i:""})}},St=i.assign,kt=i.defaults,Dt=St,zt=i.defaultsDeep,jt=i.assign,Tt=i.defaults,Zt=i.defaultsDeep,Lt=i.invokeMap||i.invoke,Pt=i.sortedIndexBy||i.sortedIndex,Gt=i.uniqBy||i.uniq,Bt=i.clone,Ot=i.cloneDeep,Et=i.isEmpty,Yt=i.isEqual,Rt=i.isFunction,Wt=i.isPlainObject,Ut=i.toArray,Xt=i.debounce,Vt=i.groupBy,Ft=i.sortBy,Jt=i.flattenDeep,Ht=i.without,Qt=i.difference,_t=i.intersection,Kt=i.union,qt=i.has,$t=i.result,te=i.omit,ee=i.pick,ie=i.bindAll,ne=i.forIn,re=i.camelCase,oe=i.uniqueId,se=function(){if(i.mergeWith){var t=Array.from(arguments),e=t[t.length-1],n=Rt(e)?e:he;return t.push(function(t,e){var i=n(t,e);return void 0!==i?i:Array.isArray(t)&&!Array.isArray(e)?e:void 0}),i.mergeWith.apply(this,t)}return i.merge.apply(this,arguments)},ae=function(t){var e=Object.prototype.toString;return!0===t||!1===t||!!t&&"object"==typeof t&&"[object Boolean]"===e.call(t)},le=function(t){return!!t&&("object"==typeof t||"function"==typeof t)},ce=function(t){var e=Object.prototype.toString;return"number"==typeof t||!!t&&"object"==typeof t&&"[object Number]"===e.call(t)},ge=function(t){var e=Object.prototype.toString;return"string"==typeof t||!!t&&"object"==typeof t&&"[object String]"===e.call(t)},he=function(){};function ue(t){t=Gt(t);var s=Ut(t).reduce(function(t,e){return t[e.id]=e.clone(),t},{});return Ut(t).forEach(function(t){var e=s[t.id];if(e.isLink()){var i=e.source(),n=e.target();i.id&&s[i.id]&&e.prop("source/id",s[i.id].id),n.id&&s[n.id]&&e.prop("target/id",s[n.id].id)}var r=t.get("parent");r&&s[r]&&e.set("parent",s[r].id);var o=Ut(t.get("embeds")).reduce(function(t,e){return s[e]&&t.push(s[e].id),t},[]);Et(o)||e.set("embeds",o)}),s}function de(o,s){return function(t,e){var i=ft(t);t=parseFloat(t),i&&(t/=100);var n={};if(isFinite(t)){var r=i||0<=t&&t<=1?t*e[s]:Math.max(t+e[s],0);n[o]=r}return n}}function fe(s,a,l){return function(t,e){var i,n=ft(t);if(t=parseFloat(t),n&&(t/=100),isFinite(t)){var r=e[l]();i=n||0<t&&t<1?r[s]+e[a]*t:r[s]+t}var o=E();return o[s]=i||0,o}}function pe(r,o,s){return function(t,e){var i;i="middle"===t?e[o]/2:t===s?e[o]:isFinite(t)?-1<t&&t<1?-e[o]*t:-t:ft(t)?e[o]*parseFloat(t)/100:0;var n=E();return n[r]=-(e[r]+i),n}}function Ie(d,t){var f="joint-shape",p=t&&t.resetOffset;return function(t,e,i){var n=S(i),r=n.data(f);if(!r||r.value!==t){var o=d(t);r={value:t,shape:o,shapeBBox:o.bbox()},n.data(f,r)}var s=r.shape.clone(),a=r.shapeBBox.clone(),l=a.origin(),c=e.origin();a.x=c.x,a.y=c.y;var g=e.maxRectScaleToFit(a,c),h=0===a.width||0===e.width?1:g.sx,u=0===a.height||0===e.height?1:g.sy;return s.scale(h,u,l),p&&s.translate(-l.x,-l.y),s}}function me(t){var n=Ie(function(t){return new O(q.normalizePathData(t))},t);return function(t,e,i){return{d:n(t,e,i).serialize()}}}function Ae(t){var n=Ie(D,t);return function(t,e,i){return{points:n(t,e,i).serialize()}}}function ve(r,o){var s=new E(1,0);return function(t){var e,i,n=this[r](t);return n?(i=o.rotate?n.vector().vectorAngle(s):0,e=n.start):(e=this.path.start,i=0),0===i?{transform:"translate("+e.x+","+e.y+")"}:{transform:"translate("+e.x+","+e.y+") rotate("+i+")"}}}function Ce(t,e,i){return void 0!==i.text}function we(){return this.model.isLink()}function ye(t){var e={},i=t.stroke;"string"==typeof i&&(e.stroke=i,e.fill=i);var n=t.strokeOpacity;return void 0===n&&(n=t["stroke-opacity"]),void 0===n&&(n=t.opacity),void 0!==n&&(e["stroke-opacity"]=n,e["fill-opacity"]=n),e}var be,Ne,Me={xlinkHref:{set:"xlink:href"},xlinkShow:{set:"xlink:show"},xlinkRole:{set:"xlink:role"},xlinkType:{set:"xlink:type"},xlinkArcrole:{set:"xlink:arcrole"},xlinkTitle:{set:"xlink:title"},xlinkActuate:{set:"xlink:actuate"},xmlSpace:{set:"xml:space"},xmlBase:{set:"xml:base"},xmlLang:{set:"xml:lang"},preserveAspectRatio:{set:"preserveAspectRatio"},requiredExtension:{set:"requiredExtension"},requiredFeatures:{set:"requiredFeatures"},systemLanguage:{set:"systemLanguage"},externalResourcesRequired:{set:"externalResourceRequired"},filter:{qualify:Wt,set:function(t){return"url(#"+this.paper.defineFilter(t)+")"}},fill:{qualify:Wt,set:function(t){return"url(#"+this.paper.defineGradient(t)+")"}},stroke:{qualify:Wt,set:function(t){return"url(#"+this.paper.defineGradient(t)+")"}},sourceMarker:{qualify:Wt,set:function(t,e,i,n){return t=jt(ye(n),t),{"marker-start":"url(#"+this.paper.defineMarker(t)+")"}}},targetMarker:{qualify:Wt,set:function(t,e,i,n){return t=jt(ye(n),{transform:"rotate(180)"},t),{"marker-end":"url(#"+this.paper.defineMarker(t)+")"}}},vertexMarker:{qualify:Wt,set:function(t,e,i,n){return t=jt(ye(n),t),{"marker-mid":"url(#"+this.paper.defineMarker(t)+")"}}},text:{qualify:function(t,e,i){return!i.textWrap||!Wt(i.textWrap)},set:function(t,e,i,n){var r=S(i),o="joint-text",s=r.data(o),a=ee(n,"lineHeight","annotations","textPath","x","textVerticalAnchor","eol","displayEmpty"),l=a.fontSize=n["font-size"]||n.fontSize,c=JSON.stringify([t,a]);if(void 0===s||s!==c){l&&i.setAttribute("font-size",l);var g=a.textPath;if(le(g)){var h=g.selector;if("string"==typeof h){var u=this.findBySelector(h)[0];u instanceof SVGPathElement&&(a.textPath=jt({"xlink:href":"#"+u.id},g))}}q(i).text(""+t,a),r.data(o,c)}}},textWrap:{qualify:Wt,set:function(t,e,i,n){var r=t.width||0;ft(r)?e.width*=parseFloat(r)/100:r<=0?e.width+=r:e.width=r;var o,s=t.height||0;ft(s)?e.height*=parseFloat(s)/100:s<=0?e.height+=s:e.height=s;var a=t.text;void 0===a&&(a=n.text),o=void 0!==a?It(""+a,e,{"font-weight":n["font-weight"]||n.fontWeight,"font-size":n["font-size"]||n.fontSize,"font-family":n["font-family"]||n.fontFamily,lineHeight:n.lineHeight},{svgDocument:this.paper.svg,ellipsis:t.ellipsis,hyphen:t.hyphen}):"",Me.text.set.call(this,o,e,i,n)}},title:{qualify:function(t,e){return e instanceof SVGElement},set:function(t,e,i){var n=S(i),r="joint-title",o=n.data(r);if(void 0===o||o!==t){n.data(r,t);var s=i.firstChild;if(s&&"TITLE"===s.tagName.toUpperCase())s.textContent=t;else{var a=document.createElementNS(i.namespaceURI,"title");a.textContent=t,i.insertBefore(a,s)}}}},lineHeight:{qualify:Ce},textVerticalAnchor:{qualify:Ce},textPath:{qualify:Ce},annotations:{qualify:Ce},eol:{qualify:Ce},displayEmpty:{qualify:Ce},port:{set:function(t){return null===t||void 0===t.id?t:t.id}},style:{qualify:Wt,set:function(t,e,i){S(i).css(t)}},html:{set:function(t,e,i){S(i).html(t+"")}},ref:{},refX:{position:fe("x","width","origin")},refY:{position:fe("y","height","origin")},refDx:{position:fe("x","width","corner")},refDy:{position:fe("y","height","corner")},refWidth:{set:de("width","width")},refHeight:{set:de("height","height")},refRx:{set:de("rx","width")},refRy:{set:de("ry","height")},refRInscribed:{set:(be=de("r","width"),Ne=de("r","height"),function(t,e){return(e.height>e.width?be:Ne)(t,e)})},refRCircumscribed:{set:function(t,e){var i=ft(t);t=parseFloat(t),i&&(t/=100);var n,r=Math.sqrt(e.height*e.height+e.width*e.width);return isFinite(t)&&(n=i||0<=t&&t<=1?t*r:Math.max(t+r,0)),{r:n}}},refCx:{set:de("cx","width")},refCy:{set:de("cy","height")},xAlignment:{offset:pe("x","width","right")},yAlignment:{offset:pe("y","height","bottom")},resetOffset:{offset:function(t,e){return t?{x:-e.x,y:-e.y}:{x:0,y:0}}},refDResetOffset:{set:me({resetOffset:!0})},refDKeepOffset:{set:me({resetOffset:!1})},refPointsResetOffset:{set:Ae({resetOffset:!0})},refPointsKeepOffset:{set:Ae({resetOffset:!1})},connection:{qualify:we,set:function(t){var e,i=t.stubs;if(void 0===i&&(i=0),isFinite(i)&&0!==i){var n;n=i<0?(this.getConnectionLength()+i)/2:i;var r=this.getConnection(),o=r.divideAtLength(n),s=r.divideAtLength(-n);o&&s&&(e=o[0].serialize()+" "+s[1].serialize())}return{d:e||this.getSerializedConnection()}}},atConnectionLengthKeepGradient:{qualify:we,set:ve("getTangentAtLength",{rotate:!0})},atConnectionLengthIgnoreGradient:{qualify:we,set:ve("getTangentAtLength",{rotate:!1})},atConnectionRatioKeepGradient:{qualify:we,set:ve("getTangentAtRatio",{rotate:!0})},atConnectionRatioIgnoreGradient:{qualify:we,set:ve("getTangentAtRatio",{rotate:!1})}};Me.refR=Me.refRInscribed,Me.refD=Me.refDResetOffset,Me.refPoints=Me.refPointsResetOffset,Me.atConnectionLength=Me.atConnectionLengthKeepGradient,Me.atConnectionRatio=Me.atConnectionRatioKeepGradient,Me.refX2=Me.refX,Me.refY2=Me.refY,Me.refWidth2=Me.refWidth,Me.refHeight2=Me.refHeight,Me["ref-x"]=Me.refX,Me["ref-y"]=Me.refY,Me["ref-dy"]=Me.refDy,Me["ref-dx"]=Me.refDx,Me["ref-width"]=Me.refWidth,Me["ref-height"]=Me.refHeight,Me["x-alignment"]=Me.xAlignment,Me["y-alignment"]=Me.yAlignment;var xe=Me,Se=s.Model.extend({constructor:function(t,e){var i,n=t||{};this.cid=oe("c"),this.attributes={},e&&e.collection&&(this.collection=e.collection),e&&e.parse&&(n=this.parse(n,e)||{}),(i=$t(this,"defaults"))&&(n=se({},i,n)),this.set(n,e),this.changed={},this.initialize.apply(this,arguments)},translate:function(t,e,i){throw new Error("Must define a translate() method.")},toJSON:function(){var e=this.constructor.prototype.defaults.attrs||{},t=this.attributes.attrs,o={};ne(t,function(t,n){var r=e[n];ne(t,function(t,i){le(t)&&!Array.isArray(t)?ne(t,function(t,e){r&&r[i]&&Yt(r[i][e],t)||(o[n]=o[n]||{},(o[n][i]||(o[n][i]={}))[e]=t)}):r&&Yt(r[i],t)||(o[n]=o[n]||{},o[n][i]=t)})});var i=Ot(te(this.attributes,"attrs"));return i.attrs=o,i},initialize:function(t){t&&t.id||this.set("id",this.generateId(),{silent:!0}),this._transitionIds={},this.processPorts(),this.on("change:attrs",this.processPorts,this)},generateId:function(){return lt()},processPorts:function(){var t=this.ports,i={};ne(this.get("attrs"),function(t,e){t&&t.port&&(void 0!==t.port.id?i[t.port.id]=t.port:i[t.port]={id:t.port})});var n={};(ne(t,function(t,e){i[e]||(n[e]=!0)}),this.graph&&!Et(n))&&(this.graph.getConnectedLinks(this,{inbound:!0}).forEach(function(t){n[t.get("target").port]&&t.remove()}),this.graph.getConnectedLinks(this,{outbound:!0}).forEach(function(t){n[t.get("source").port]&&t.remove()}));this.ports=i},remove:function(t){t=t||{};var e=this.graph;if(!e)return this.collection&&this.collection.remove(this,t),this;e.startBatch("remove");var i=this.getParentCell();i&&i.unembed(this);for(var n=this.getEmbeddedCells(),r=0,o=n.length;r<o;r++){var s=n[r];s&&s.remove(t)}return this.trigger("remove",this,e.attributes.cells,t),e.stopBatch("remove"),this},toFront:function(i){var t=this.graph;if(t){i=i||{};var e,n=t.maxZIndex();i.deep?(e=this.getEmbeddedCells({deep:!0,breadthFirst:!0})).unshift(this):e=[this],n=n-e.length+1;var r=t.get("cells"),o=r.indexOf(this)!==r.length-e.length;o||(o=e.some(function(t,e){return t.get("z")!==n+e})),o&&(this.startBatch("to-front"),n+=e.length,e.forEach(function(t,e){t.set("z",n+e,i)}),this.stopBatch("to-front"))}return this},toBack:function(i){var t=this.graph;if(t){i=i||{};var e,n=t.minZIndex();i.deep?(e=this.getEmbeddedCells({deep:!0,breadthFirst:!0})).unshift(this):e=[this];var r=0!==t.get("cells").indexOf(this);r||(r=e.some(function(t,e){return t.get("z")!==n+e})),r&&(this.startBatch("to-back"),n-=e.length,e.forEach(function(t,e){t.set("z",n+e,i)}),this.stopBatch("to-back"))}return this},parent:function(t,e){return void 0===t?this.get("parent"):this.set("parent",t,e)},embed:function(t,e){if(this===t||this.isEmbeddedIn(t))throw new Error("Recursive embedding not allowed.");this.startBatch("embed");var i=jt([],this.get("embeds"));return i[t.isLink()?"unshift":"push"](t.id),t.parent(this.id,e),this.set("embeds",Gt(i),e),this.stopBatch("embed"),this},unembed:function(t,e){return this.startBatch("unembed"),t.unset("parent",e),this.set("embeds",Ht(this.get("embeds"),t.id),e),this.stopBatch("unembed"),this},getParentCell:function(){var t=this.parent(),e=this.graph;return t&&e&&e.getCell(t)||null},getAncestors:function(){var t=[];if(!this.graph)return t;for(var e=this.getParentCell();e;)t.push(e),e=e.getParentCell();return t},getEmbeddedCells:function(e){if(e=e||{},this.graph){var i;if(e.deep)if(e.breadthFirst){i=[];for(var t=this.getEmbeddedCells();0<t.length;){var n=t.shift();i.push(n),t.push.apply(t,n.getEmbeddedCells())}}else(i=this.getEmbeddedCells()).forEach(function(t){i.push.apply(i,t.getEmbeddedCells(e))});else i=Ut(this.get("embeds")).map(this.graph.getCell,this.graph);return i}return[]},isEmbeddedIn:function(t,e){var i=ge(t)?t:t.id,n=this.parent();if(e=Tt({deep:!0},e),this.graph&&e.deep){for(;n;){if(n===i)return!0;n=this.graph.getCell(n).parent()}return!1}return n===i},isEmbedded:function(){return!!this.parent()},clone:function(t){if((t=t||{}).deep)return Ut(ue([this].concat(this.getEmbeddedCells({deep:!0}))));var e=s.Model.prototype.clone.apply(this,arguments);return e.set("id",this.generateId()),e.unset("embeds"),e.unset("parent"),e},prop:function(t,e,i){var n=ge(t);if(n||Array.isArray(t)){if(1<arguments.length){var r,o,s=(o=n?(r=t).split("/"):(r=t.join("/"),t.slice()))[0],a=o.length;if((i=i||{}).propertyPath=r,i.propertyValue=e,i.propertyPathArray=o,1===a)return this.set(s,e,i);for(var l={},c=l,g=s,h=1;h<a;h++){var u=o[h],d=Number.isFinite(n?Number(u):u);c=c[g]=d?[]:{},g=u}l=ot(l,o,e,"/");var f=se({},this.attributes);i.rewrite&&st(f,r,"/");var p=se(f,l);return this.set(s,p[s],i)}return rt(this.attributes,t,"/")}return this.set(se({},this.attributes,t),e)},removeProp:function(t,e){e=e||{};var i=Array.isArray(t)?t:t.split("/"),n=i[0];if("attrs"===n&&(e.dirty=!0),1===i.length)return this.unset(t,e);var r=i.slice(1),o=Ot(this.get(n));return st(o,r,"/"),this.set(n,o,e)},attr:function(t,e,i){var n=Array.from(arguments);return 0===n.length?this.get("attrs"):(Array.isArray(t)?n[0]=["attrs"].concat(t):ge(t)?n[0]="attrs/"+t:n[0]={attrs:t},this.prop.apply(this,n))},removeAttr:function(t,e){return Array.isArray(t)?this.removeProp(["attrs"].concat(t)):this.removeProp("attrs/"+t,e)},transition:function(r,e,o,i){i=i||"/",o=jt({duration:100,delay:10,timingFunction:yt.linear,valueFunction:bt.number},o);var s,a=0,l=function(t){var e,i,n;(i=(t-=a=a||t)/o.duration)<1?this._transitionIds[r]=e=ut(l):(i=1,delete this._transitionIds[r]),n=s(o.timingFunction(i)),o.transitionId=e,this.prop(r,n,o),e||this.trigger("transition:end",this,r)}.bind(this),t=function(t){this.stopTransitions(r),s=o.valueFunction(rt(this.attributes,r,i),e),this._transitionIds[r]=ut(t),this.trigger("transition:start",this,r)}.bind(this);return setTimeout(t,o.delay,l)},getTransitions:function(){return Object.keys(this._transitionIds)},stopTransitions:function(t,e){e=e||"/";var i=t&&t.split(e);return Object.keys(this._transitionIds).filter(i&&function(t){return Yt(i,t.split(e).slice(0,i.length))}).forEach(function(t){dt(this._transitionIds[t]),delete this._transitionIds[t],this.trigger("transition:end",this,t)},this),this},addTo:function(t,e){return t.addCell(this,e),this},findView:function(t){return t.findViewByModel(this)},isElement:function(){return!1},isLink:function(){return!1},startBatch:function(t,e){return this.graph&&this.graph.startBatch(t,jt({},e,{cell:this})),this},stopBatch:function(t,e){return this.graph&&this.graph.stopBatch(t,jt({},e,{cell:this})),this},getChangeFlag:function(t){var e=0;if(!t)return e;for(var i in t)t.hasOwnProperty(i)&&this.hasChanged(i)&&(e|=t[i]);return e},angle:function(){return 0},position:function(){return new E(0,0)},getPointFromConnectedLink:function(){return new E},getBBox:function(){return new H(0,0,0,0)}},{getAttributeDefinition:function(t){var e=this.attributes,i=xe;return e&&e[t]||i[t]},define:function(t,e,i,n){i=jt({defaults:Zt({type:t},e,this.prototype.defaults)},i);var r=this.extend(i,n);return void 0!==joint&&qt(joint,"shapes")&&ot(joint.shapes,t,r,"."),r}}),ke=function(e,t,i){if(ge(i)){if(!De[i])throw new Error('Unknown wrapper: "'+i+'"');i=De[i]}if(!Rt(i))throw new Error("Wrapper must be a function.");Ut(t).forEach(function(t){e[t]=i(e[t])})},De={cells:function(r){return function(){var t=Array.from(arguments),e=t.length,i=0<e&&t[0]||[],n=1<e&&t[e-1]||{};return Array.isArray(i)||(n instanceof Se?i=t:i instanceof Se&&(1<t.length&&t.pop(),i=t)),n instanceof Se&&(n={}),r.call(this,i,n)}}},ze={wrapWith:ke,wrappers:De,addClassNamePrefix:tt,removeClassNamePrefix:et,parseDOMJSON:it,hashCode:nt,getByPath:rt,setByPath:ot,unsetByPath:st,flattenObject:at,uuid:lt,guid:ct,toKebabCase:gt,normalizeEvent:ht,nextFrame:ut,cancelFrame:dt,shapePerimeterConnectionPoint:function(t,e,i,n){var r,o;if(!i){var s=e.$(".scalable")[0],a=e.$(".rotatable")[0];s&&s.firstChild?i=s.firstChild:a&&a.firstChild&&(i=a.firstChild)}return i?(o=q(i).findIntersection(n,t.paper.cells))||(r=q(i).getBBox({target:t.paper.cells})):o=(r=e.model.getBBox()).intersectionWithLineFromCenterToPoint(n),o||r.center()},isPercentage:ft,parseCssNumeric:pt,breakText:It,sanitizeHTML:mt,downloadBlob:At,downloadDataUri:function(t,e){var i=vt(t);At(i,e)},dataUriToBlob:vt,imageToDataUri:function(r,t){if(!r||"data:"===r.substr(0,"data:".length))return setTimeout(function(){t(null,r)},0);var e=new XMLHttpRequest;e.open("GET",r,!0),e.addEventListener("error",function(){t(new Error("Failed to load image "+r))}),e.responseType=window.FileReader?"blob":"arraybuffer",e.addEventListener("load",function(){window.FileReader?function(t,i){if(200===t.status){var e=new FileReader;e.onload=function(t){var e=t.target.result;i(null,e)},e.onerror=function(){i(new Error("Failed to load image "+r))},e.readAsDataURL(t.response)}else i(new Error("Failed to load image "+r))}(e,t):function(t,e){if(200===t.status){var i=new Uint8Array(t.response),n=r.split(".").pop()||"png";e(null,"data:image/"+({svg:"svg+xml"}[n]||n)+";base64,"+btoa(function(t){for(var e=[],i=0;i<t.length;i+=32768)e.push(String.fromCharCode.apply(null,t.subarray(i,i+32768)));return e.join("")}(i)))}else e(new Error("Failed to load image "+r))}(e,t)}),e.send()},getElementBBox:function(t){var e=S(t);if(0===e.length)throw new Error("Element not found");var i=e[0],n=i.ownerDocument,r=i.getBoundingClientRect(),o=0,s=0;if(i.ownerSVGElement){var a=q(i),l=a.getBBox({target:a.svg()});o=r.width-l.width,s=r.height-l.height}return{x:r.left+window.pageXOffset-n.documentElement.offsetLeft+o/2,y:r.top+window.pageYOffset-n.documentElement.offsetTop+s/2,width:r.width-o,height:r.height-s}},sortElements:Ct,setAttributesBySelector:function(t,e){var n=S(t);ne(e,function(t,e){var i=n.find(e).addBack().filter(e);qt(t,"class")&&(i.addClass(t.class),t=te(t,"class")),i.attr(t)})},normalizeSides:wt,timing:yt,interpolate:bt,filter:Nt,format:Mt,template:xt,toggleFullScreen:function(t){var e=window.top.document;function i(t,e){for(var i=["webkit","moz","ms","o",""],n=0;n<i.length;n++){var r=i[n],o=r?r+e:e.substr(0,1).toLowerCase()+e.substr(1);if(void 0!==t[o])return Rt(t[o])?t[o]():t[o]}}t=t||e.body,i(e,"FullscreenElement")||i(e,"FullScreenElement")?i(e,"ExitFullscreen")||i(e,"CancelFullScreen"):i(t,"RequestFullscreen")||i(t,"RequestFullScreen")},mixin:St,supplement:kt,deepMixin:Dt,deepSupplement:zt,assign:jt,defaults:Tt,defaultsDeep:Zt,invoke:Lt,sortedIndex:Pt,uniq:Gt,clone:Bt,cloneDeep:Ot,isEmpty:Et,isEqual:Yt,isFunction:Rt,isPlainObject:Wt,toArray:Ut,debounce:Xt,groupBy:Vt,sortBy:Ft,flattenDeep:Jt,without:Ht,difference:Qt,intersection:_t,union:Kt,has:qt,result:$t,omit:te,pick:ee,bindAll:ie,forIn:ne,camelCase:re,uniqueId:oe,merge:se,isBoolean:ae,isObject:le,isNumber:ce,isString:ge,noop:he,cloneCells:ue};function je(t,e,i){var n=t.toJSON();return n.angle=e||0,Tt({},i,n)}function Te(t,e,i){return t.map(function(t,e,i){var n=this.pointAt((e+.5)/i.length);return(t.dx||t.dy)&&n.offset(t.dx||0,t.dy||0),je(n.round(),0,t)},b(e,i))}function Ze(t,e,s,a){var l=e.center(),c=e.width/e.height,g=e.topMiddle(),h=w.fromRect(e);return t.map(function(t,e,i){var n=s+a(e,i.length),r=g.clone().rotate(l,-n).scale(c,1,l),o=t.compensateRotation?-h.tangentTheta(r):0;return(t.dx||t.dy)&&r.offset(t.dx||0,t.dy||0),t.dr&&r.move(l,t.dr),je(r.round(),o,t)})}function Le(t,e){var i=e.x;ge(i)&&(i=parseFloat(i)/100*t.width);var n=e.y;return ge(n)&&(n=parseFloat(n)/100*t.height),N(i||0,n||0)}var Pe={absolute:function(t,e,i){return t.map(Le.bind(null,e))},fn:function(t,e,i){return i.fn(t,e,i)},line:function(t,e,i){return Te(t,Le(e,i.start||e.origin()),Le(e,i.end||e.corner()))},left:function(t,e,i){return Te(t,e.origin(),e.bottomLeft())},right:function(t,e,i){return Te(t,e.topRight(),e.corner())},top:function(t,e,i){return Te(t,e.origin(),e.topRight())},bottom:function(t,e,i){return Te(t,e.bottomLeft(),e.corner())},ellipseSpread:function(t,e,i){var n=i.startAngle||0,r=i.step||360/t.length;return Ze(t,e,n,function(t){return t*r})},ellipse:function(t,e,i){var n=i.startAngle||0,r=i.step||20;return Ze(t,e,n,function(t,e){return(t+.5-e/2)*r})}};function Ge(t,e){return Zt({},t,e,{x:0,y:0,angle:0,attrs:{".":{y:"0","text-anchor":"start"}}})}function Be(t,e,i,n){n=Tt({},n,{offset:15});var r,o,s,a,l=e.center().theta(t),c=Oe(e),g=n.offset,h=0;a=l<c[1]||l>c[2]?(s=".3em",r=g,o=0,"start"):l<c[0]?(s="0",r=0,o=-g,i?(h=-90,"start"):"middle"):l<c[3]?(s=".3em",r=-g,o=0,"end"):(s=".6em",r=0,o=g,i?(h=90,"start"):"middle");var u=Math.round;return Ge({x:u(r),y:u(o),angle:h,attrs:{".":{y:s,"text-anchor":a}}})}function Oe(t){var e=t.center(),i=e.theta(t.origin()),n=e.theta(t.bottomLeft()),r=e.theta(t.corner());return[i,e.theta(t.topRight()),r,n]}function Ee(t,e,i,n){var r,o,s,a,l=e.center().theta(t),c=(n=Tt({},n,{offset:15})).offset,g=0,h=Oe(e);a=l<h[1]||l>h[2]?(s=".3em",r=-c,o=0,"end"):l<h[0]?(s=".6em",r=0,o=c,i?(g=90,"start"):"middle"):l<h[3]?(s=".3em",r=c,o=0,"start"):(s="0em",r=0,o=-c,i?(g=-90,"start"):"middle");var u=Math.round;return Ge({x:u(r),y:u(o),angle:g,attrs:{".":{y:s,"text-anchor":a}}})}function Ye(t,e,i){i=Tt({},i,{offset:20});var n,r=N(0,0),o=-t.theta(r),s=o,a=t.clone().move(r,i.offset).difference(t).round(),l=".3em";(o+90)%180==0?(n=e?"end":"middle",e||-270!==o||(l="0em")):-270<o&&o<-90?(n="start",s=o-180):n="end";var c=Math.round;return Ge({x:c(a.x),y:c(a.y),angle:e?s:0,attrs:{".":{y:l,"text-anchor":n}}})}var Re={manual:function(t,e,i){return Ge(i,e)},left:function(t,e,i){return Ge(i,{x:-15,attrs:{".":{y:".3em","text-anchor":"end"}}})},right:function(t,e,i){return Ge(i,{x:15,attrs:{".":{y:".3em","text-anchor":"start"}}})},top:function(t,e,i){return Ge(i,{y:-15,attrs:{".":{"text-anchor":"middle"}}})},bottom:function(t,e,i){return Ge(i,{y:15,attrs:{".":{y:".6em","text-anchor":"middle"}}})},outsideOriented:function(t,e,i){return Be(t,e,!0,i)},outside:function(t,e,i){return Be(t,e,!1,i)},insideOriented:function(t,e,i){return Ee(t,e,!0,i)},inside:function(t,e,i){return Ee(t,e,!1,i)},radial:function(t,e,i){return Ye(t.difference(e.center()),!1,i)},radialOriented:function(t,e,i){return Ye(t.difference(e.center()),!0,i)}},We=Se.extend({markup:['<path class="connection" stroke="black" d="M 0 0 0 0"/>','<path class="marker-source" fill="black" stroke="black" d="M 0 0 0 0"/>','<path class="marker-target" fill="black" stroke="black" d="M 0 0 0 0"/>','<path class="connection-wrap" d="M 0 0 0 0"/>','<g class="labels"/>','<g class="marker-vertices"/>','<g class="marker-arrowheads"/>','<g class="link-tools"/>'].join(""),toolMarkup:['<g class="link-tool">','<g class="tool-remove" event="remove">','<circle r="11" />','<path transform="scale(.8) translate(-16, -16)" d="M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z" />',"<title>Remove link.</title>","</g>",'<g class="tool-options" event="link:options">','<circle r="11" transform="translate(25)"/>','<path fill="white" transform="scale(.55) translate(29, -16)" d="M31.229,17.736c0.064-0.571,0.104-1.148,0.104-1.736s-0.04-1.166-0.104-1.737l-4.377-1.557c-0.218-0.716-0.504-1.401-0.851-2.05l1.993-4.192c-0.725-0.91-1.549-1.734-2.458-2.459l-4.193,1.994c-0.647-0.347-1.334-0.632-2.049-0.849l-1.558-4.378C17.165,0.708,16.588,0.667,16,0.667s-1.166,0.041-1.737,0.105L12.707,5.15c-0.716,0.217-1.401,0.502-2.05,0.849L6.464,4.005C5.554,4.73,4.73,5.554,4.005,6.464l1.994,4.192c-0.347,0.648-0.632,1.334-0.849,2.05l-4.378,1.557C0.708,14.834,0.667,15.412,0.667,16s0.041,1.165,0.105,1.736l4.378,1.558c0.217,0.715,0.502,1.401,0.849,2.049l-1.994,4.193c0.725,0.909,1.549,1.733,2.459,2.458l4.192-1.993c0.648,0.347,1.334,0.633,2.05,0.851l1.557,4.377c0.571,0.064,1.148,0.104,1.737,0.104c0.588,0,1.165-0.04,1.736-0.104l1.558-4.377c0.715-0.218,1.399-0.504,2.049-0.851l4.193,1.993c0.909-0.725,1.733-1.549,2.458-2.458l-1.993-4.193c0.347-0.647,0.633-1.334,0.851-2.049L31.229,17.736zM16,20.871c-2.69,0-4.872-2.182-4.872-4.871c0-2.69,2.182-4.872,4.872-4.872c2.689,0,4.871,2.182,4.871,4.872C20.871,18.689,18.689,20.871,16,20.871z"/>',"<title>Link options.</title>","</g>","</g>"].join(""),doubleToolMarkup:void 0,vertexMarkup:['<g class="marker-vertex-group" transform="translate(<%= x %>, <%= y %>)">','<circle class="marker-vertex" idx="<%= idx %>" r="10" />','<path class="marker-vertex-remove-area" idx="<%= idx %>" d="M16,5.333c-7.732,0-14,4.701-14,10.5c0,1.982,0.741,3.833,2.016,5.414L2,25.667l5.613-1.441c2.339,1.317,5.237,2.107,8.387,2.107c7.732,0,14-4.701,14-10.5C30,10.034,23.732,5.333,16,5.333z" transform="translate(5, -33)"/>','<path class="marker-vertex-remove" idx="<%= idx %>" transform="scale(.8) translate(9.5, -37)" d="M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z">',"<title>Remove vertex.</title>","</path>","</g>"].join(""),arrowheadMarkup:['<g class="marker-arrowhead-group marker-arrowhead-group-<%= end %>">','<path class="marker-arrowhead" end="<%= end %>" d="M 26 0 L 0 13 L 26 26 z" />',"</g>"].join(""),defaultLabel:void 0,labelMarkup:void 0,_builtins:{defaultLabel:{markup:[{tagName:"rect",selector:"rect"},{tagName:"text",selector:"text"}],attrs:{text:{fill:"#000000",fontSize:14,textAnchor:"middle",yAlignment:"middle",pointerEvents:"none"},rect:{ref:"text",fill:"#ffffff",rx:3,ry:3,refWidth:1,refHeight:1,refX:0,refY:0}},position:{distance:.5}}},defaults:{type:"link",source:{},target:{}},isLink:function(){return!0},disconnect:function(t){return this.set({source:{x:0,y:0},target:{x:0,y:0}},t)},source:function(t,e,i){return void 0===t?Bt(this.get("source")):(r=t instanceof Se?((n=Bt(e)||{}).id=t.id,i):Wt(t)?(n=t,e):((n=Bt(e)||{}).x=t.x,n.y=t.y,i),this.set("source",n,r));var n,r},target:function(t,e,i){return void 0===t?Bt(this.get("target")):(r=t instanceof Se?((n=Bt(e)||{}).id=t.id,i):Wt(t)?(n=t,e):((n=Bt(e)||{}).x=t.x,n.y=t.y,i),this.set("target",n,r));var n,r},router:function(t,e,i){if(void 0===t){var n=this.get("router");return n?"object"==typeof n?Bt(n):n:this.get("manhattan")?{name:"orthogonal"}:null}var r="object"==typeof t||"function"==typeof t,o=r?t:{name:t,args:e},s=r?e:i;return this.set("router",o,s)},connector:function(t,e,i){if(void 0===t){var n=this.get("connector");return n?"object"==typeof n?Bt(n):n:this.get("smooth")?{name:"smooth"}:null}var r="object"==typeof t||"function"==typeof t,o=r?t:{name:t,args:e},s=r?e:i;return this.set("connector",o,s)},label:function(t,e,i){var n=this.labels();return(t=isFinite(t)&&null!==t?0|t:0)<0&&(t=n.length+t),arguments.length<=1?this.prop(["labels",t]):this.prop(["labels",t],e,i)},labels:function(t,e){return 0===arguments.length?(t=this.get("labels"),Array.isArray(t)?t.slice():[]):(Array.isArray(t)||(t=[]),this.set("labels",t,e))},insertLabel:function(t,e,i){if(!e)throw new Error("dia.Link: no label provided");var n=this.labels(),r=n.length;return(t=isFinite(t)&&null!==t?0|t:r)<0&&(t=r+t+1),n.splice(t,0,e),this.labels(n,i)},appendLabel:function(t,e){return this.insertLabel(-1,t,e)},removeLabel:function(t,e){var i=this.labels();return t=isFinite(t)&&null!==t?0|t:-1,i.splice(t,1),this.labels(i,e)},vertex:function(t,e,i){var n=this.vertices();if((t=isFinite(t)&&null!==t?0|t:0)<0&&(t=n.length+t),arguments.length<=1)return this.prop(["vertices",t]);var r=this._normalizeVertex(e);return this.prop(["vertices",t],r,i)},vertices:function(t,e){if(0===arguments.length)return t=this.get("vertices"),Array.isArray(t)?t.slice():[];Array.isArray(t)||(t=[]);for(var i=[],n=0;n<t.length;n++){var r=t[n],o=this._normalizeVertex(r);i.push(o)}return this.set("vertices",i,e)},insertVertex:function(t,e,i){if(!e)throw new Error("dia.Link: no vertex provided");var n=this.vertices(),r=n.length;(t=isFinite(t)&&null!==t?0|t:r)<0&&(t=r+t+1);var o=this._normalizeVertex(e);return n.splice(t,0,o),this.vertices(n,i)},removeVertex:function(t,e){var i=this.vertices();return t=isFinite(t)&&null!==t?0|t:-1,i.splice(t,1),this.vertices(i,e)},_normalizeVertex:function(t){return!Wt(t)?{x:t.x,y:t.y}:t},translate:function(e,i,t){return(t=t||{}).translateBy=t.translateBy||this.id,t.tx=e,t.ty=i,this.applyToPoints(function(t){return{x:(t.x||0)+e,y:(t.y||0)+i}},t)},scale:function(e,i,n,t){return this.applyToPoints(function(t){return E(t).scale(e,i,n).toJSON()},t)},applyToPoints:function(t,e){if(!Rt(t))throw new TypeError("dia.Link: applyToPoints expects its first parameter to be a function.");var i={},n=this.attributes,r=n.source,o=n.target;r.id||(i.source=t(r)),o.id||(i.target=t(o));var s=this.vertices();return 0<s.length&&(i.vertices=s.map(t)),this.set(i,e)},getSourcePoint:function(){var t=this.getSourceCell();return t?t.getPointFromConnectedLink(this,"source"):new E(this.source())},getTargetPoint:function(){var t=this.getTargetCell();return t?t.getPointFromConnectedLink(this,"target"):new E(this.target())},getPointFromConnectedLink:function(){return this.getPolyline().pointAt(.5)},getPolyline:function(){var t=[this.getSourcePoint(),this.getTargetPoint()],e=this.vertices();return 0<e.length&&Array.prototype.push.apply(t,e.map(E)),new D(t)},getBBox:function(){return this.getPolyline().bbox()},reparent:function(t){var e;if(this.graph){var i=this.getSourceElement(),n=this.getTargetElement(),r=this.getParentCell();i&&n&&(e=i===n||i.isEmbeddedIn(n)?n:n.isEmbeddedIn(i)?i:this.graph.getCommonAncestor(i,n)),!r||e&&e.id===r.id||r.unembed(this,t),e&&e.embed(this,t)}return e},hasLoop:function(t){t=t||{};var e=this.attributes,i=e.source,n=e.target,r=i.id,o=n.id;if(!r||!o)return!1;var s=r===o;if(!s&&t.deep&&this.graph){var a=this.getSourceCell(),l=this.getTargetCell();s=a.isEmbeddedIn(l)||l.isEmbeddedIn(a)}return s},getSourceCell:function(){var t=this.graph,e=this.attributes.source;return e&&e.id&&t&&t.getCell(e.id)||null},getSourceElement:function(){var t=this,e={};do{if(e[t.id])return null;e[t.id]=!0,t=t.getSourceCell()}while(t&&t.isLink());return t},getTargetCell:function(){var t=this.graph,e=this.attributes.target;return e&&e.id&&t&&t.getCell(e.id)||null},getTargetElement:function(){var t=this,e={};do{if(e[t.id])return null;e[t.id]=!0,t=t.getTargetCell()}while(t&&t.isLink());return t},getRelationshipAncestor:function(){var t;if(this.graph){var e=[this,this.getSourceElement(),this.getTargetElement()].filter(function(t){return!!t});t=this.graph.getCommonAncestor.apply(this.graph,e)}return t||null},isRelationshipEmbeddedIn:function(t){var e=ge(t)||ce(t)?t:t.id,i=this.getRelationshipAncestor();return!!i&&(i.id===e||i.isEmbeddedIn(e))},_getDefaultLabel:function(){var t=this.get("defaultLabel")||this.defaultLabel||{},e={};return e.markup=t.markup||this.get("labelMarkup")||this.labelMarkup,e.position=t.position,e.attrs=t.attrs,e.size=t.size,e}},{endsEqual:function(t,e){var i=t.port===e.port||!t.port&&!e.port;return t.id===e.id&&i}}),Ue=function(t){var e=Ot(t)||{};this.ports=[],this.groups={},this.portLayoutNamespace=Pe,this.portLabelLayoutNamespace=Re,this._init(e)};Ue.prototype={getPorts:function(){return this.ports},getGroup:function(t){return this.groups[t]||{}},getPortsByGroup:function(e){return this.ports.filter(function(t){return t.group===e})},getGroupPortsMetrics:function(t,r){var e=this.getGroup(t),i=this.getPortsByGroup(t),n=e.position||{},o=n.name,s=this.portLayoutNamespace;s[o]||(o="left");var a=n.args||{},l=i.map(function(t){return t&&t.position&&t.position.args}),c=s[o](l,r,a),g={ports:i,result:[]};return Ut(c).reduce(function(t,e,i){var n=t.ports[i];return t.result.push({portId:n.id,portTransformation:e,labelTransformation:this._getPortLabelLayout(n,E(e),r),portAttrs:n.attrs,portSize:n.size,labelSize:n.label.size}),t}.bind(this),g),g.result},_getPortLabelLayout:function(t,e,i){var n=this.portLabelLayoutNamespace,r=t.label.position.name||"left";return n[r]?n[r](e,i,t.label.position.args):null},_init:function(t){if(le(t.groups))for(var e=Object.keys(t.groups),i=0,n=e.length;i<n;i++){var r=e[i];this.groups[r]=this._evaluateGroup(t.groups[r])}for(var o=Ut(t.items),s=0,a=o.length;s<a;s++)this.ports.push(this._evaluatePort(o[s]))},_evaluateGroup:function(t){return se(t,{position:this._getPosition(t.position,!0),label:this._getLabel(t,!0)})},_evaluatePort:function(t){var e=jt({},t),i=this.getGroup(t.group);return e.markup=e.markup||i.markup,e.attrs=se({},i.attrs,e.attrs),e.position=this._createPositionNode(i,e),e.label=se({},i.label,this._getLabel(e)),e.z=this._getZIndex(i,e),e.size=jt({},i.size,e.size),e},_getZIndex:function(t,e){return ce(e.z)?e.z:ce(t.z)||"auto"===t.z?t.z:"auto"},_createPositionNode:function(t,e){return se({name:"left",args:{}},t.position,{args:e.args})},_getPosition:function(t,e){var i,n={};Rt(t)?(i="fn",n.fn=t):ge(t)?i=t:void 0===t?i=e?"left":null:Array.isArray(t)?(i="absolute",n.x=t[0],n.y=t[1]):le(t)&&(i=t.name,jt(n,t.args));var r={args:n};return i&&(r.name=i),r},_getLabel:function(t,e){var i=t.label||{},n=i;return n.position=this._getPosition(i.position,e),n}};var Xe={_initializePorts:function(){this._createPortData(),this.on("change:ports",function(){this._processRemovedPort(),this._createPortData()},this)},_processRemovedPort:function(){var t=this.get("ports")||{},e={};Ut(t.items).forEach(function(t){e[t.id]=!0});var i=this.previous("ports")||{},n={};Ut(i.items).forEach(function(t){e[t.id]||(n[t.id]=!0)});var r=this.graph;r&&!Et(n)&&(r.getConnectedLinks(this,{inbound:!0}).forEach(function(t){n[t.get("target").port]&&t.remove()}),r.getConnectedLinks(this,{outbound:!0}).forEach(function(t){n[t.get("source").port]&&t.remove()}))},hasPorts:function(){var t=this.prop("ports/items");return Array.isArray(t)&&0<t.length},hasPort:function(t){return-1!==this.getPortIndex(t)},getPorts:function(){return Ot(this.prop("ports/items"))||[]},getPort:function(e){return Ot(Ut(this.prop("ports/items")).find(function(t){return t.id&&t.id===e}))},getPortsPositions:function(t){return this._portSettingsData.getGroupPortsMetrics(t,H(this.size())).reduce(function(t,e){var i=e.portTransformation;return t[e.portId]={x:i.x,y:i.y,angle:i.angle},t},{})},getPortIndex:function(t){var e=le(t)?t.id:t;return this._isValidPortId(e)?Ut(this.prop("ports/items")).findIndex(function(t){return t.id===e}):-1},addPort:function(t,e){if(!le(t)||Array.isArray(t))throw new Error("Element: addPort requires an object.");var i=jt([],this.prop("ports/items"));return i.push(t),this.prop("ports/items",i,e),this},portProp:function(t,e,i,n){var r=this.getPortIndex(t);if(-1===r)throw new Error("Element: unable to find port with id "+t);var o=Array.prototype.slice.call(arguments,1);return Array.isArray(e)?o[0]=["ports","items",r].concat(e):ge(e)?o[0]=["ports/items/",r,"/",e].join(""):(o=["ports/items/"+r],Wt(e)&&(o.push(e),o.push(i))),this.prop.apply(this,o)},_validatePorts:function(){var t=this.get("ports")||{},e=[],i=Ut((t=t||{}).items);return i.forEach(function(t){"object"!=typeof t&&e.push("Element: invalid port ",t),this._isValidPortId(t.id)||(t.id=this.generatePortId())},this),Gt(i,"id").length!==i.length&&e.push("Element: found id duplicities in ports."),e},generatePortId:function(){return this.generateId()},_isValidPortId:function(t){return null!=t&&!le(t)},addPorts:function(t,e){return t.length&&this.prop("ports/items",jt([],this.prop("ports/items")).concat(t),e),this},removePort:function(t,e){var i=e||{},n=jt([],this.prop("ports/items")),r=this.getPortIndex(t);return-1!==r&&(n.splice(r,1),i.rewrite=!0,this.prop("ports/items",n,i)),this},removePorts:function(t,e){var i;if(Array.isArray(t)){if(i=e||{},t.length){i.rewrite=!0;var n=jt([],this.prop("ports/items")).filter(function(i){return!t.some(function(t){var e=le(t)?t.id:t;return i.id===e})});this.prop("ports/items",n,i)}}else(i=t||{}).rewrite=!0,this.prop("ports/items",[],i);return this},_createPortData:function(){var t,e=this._validatePorts();if(0<e.length)throw this.set("ports",this.previous("ports")),new Error(e.join(" "));this._portSettingsData&&(t=this._portSettingsData.getPorts()),this._portSettingsData=new Ue(this.get("ports"));var i=this._portSettingsData.getPorts();if(t){var n=i.filter(function(e){if(!t.find(function(t){return t.id===e.id}))return e}),r=t.filter(function(e){if(!i.find(function(t){return t.id===e.id}))return e});0<r.length&&this.trigger("ports:remove",this,r),0<n.length&&this.trigger("ports:add",this,n)}}},Ve={portContainerMarkup:"g",portMarkup:[{tagName:"circle",selector:"circle",attributes:{r:10,fill:"#FFFFFF",stroke:"#000000"}}],portLabelMarkup:[{tagName:"text",selector:"text",attributes:{fill:"#000000"}}],_portElementsCache:null,_initializePorts:function(){this._cleanPortsCache()},_refreshPorts:function(){this._removePorts(),this._cleanPortsCache(),this._renderPorts()},_cleanPortsCache:function(){this._portElementsCache={}},_renderPorts:function(){for(var i=[],n=this._getContainerElement(),t=0,e=n.node.childNodes.length;t<e;t++)i.push(n.node.childNodes[t]);var r=Vt(this.model._portSettingsData.getPorts(),"z");Ut(r.auto).forEach(function(t){var e=this._getPortElement(t);n.append(e),i.push(e)},this);for(var o=Object.keys(r),s=0;s<o.length;s++){var a=o[s];if("auto"!==a){var l=parseInt(a,10);this._appendPorts(r[a],l,i)}}this._updatePorts()},_getContainerElement:function(){return this.rotatableNode||this.vel},_appendPorts:function(t,e,i){var n=this._getContainerElement(),r=Ut(t).map(this._getPortElement,this);i[e]||e<0?q(i[Math.max(e,0)]).before(r):n.append(r)},_getPortElement:function(t){return this._portElementsCache[t.id]?this._portElementsCache[t.id].portElement:this._createPortElement(t)},findPortNode:function(t,e){var i=this._portElementsCache[t];if(!i)return null;var n=i.portContentElement.node,r=i.portContentSelectors;return this.findBySelector(e,n,r)[0]},_updatePorts:function(){this._updatePortGroup(void 0),Object.keys(this.model._portSettingsData.groups).forEach(this._updatePortGroup,this)},_removePorts:function(){Lt(this._portElementsCache,"portElement.remove")},_createPortElement:function(t){var e,i,n,r=q(this.portContainerMarkup).addClass("joint-port"),o=this._getPortMarkup(t);if(Array.isArray(o)){var s=this.parseDOMJSON(o,r.node),a=s.fragment;e=1<a.childNodes.length?q("g").append(a):q(a.firstChild),n=s.selectors}else e=q(o),Array.isArray(e)&&(e=q("g").append(e));if(!e)throw new Error("ElementView: Invalid port markup.");e.attr({port:t.id,"port-group":t.group});var l,c,g=this._getPortLabelMarkup(t.label);if(Array.isArray(g)){var h=this.parseDOMJSON(g,r.node),u=h.fragment;i=1<u.childNodes.length?q("g").append(u):q(u.firstChild),l=h.selectors}else i=q(g),Array.isArray(i)&&(i=q("g").append(i));if(!i)throw new Error("ElementView: Invalid port label markup.");if(n&&l){for(var d in l)if(n[d]&&d!==this.selector)throw new Error("ElementView: selectors within port must be unique.");c=jt({},n,l)}else c=n||l;return r.append([e.addClass("joint-port-body"),i.addClass("joint-port-label")]),this._portElementsCache[t.id]={portElement:r,portLabelElement:i,portSelectors:c,portLabelSelectors:l,portContentElement:e,portContentSelectors:n},r},_updatePortGroup:function(t){for(var e=H(this.model.size()),i=this.model._portSettingsData.getGroupPortsMetrics(t,e),n=0,r=i.length;n<r;n++){var o=i[n],s=o.portId,a=this._portElementsCache[s]||{},l=o.portTransformation;this.applyPortTransform(a.portElement,l),this.updateDOMSubtreeAttributes(a.portElement.node,o.portAttrs,{rootBBox:new H(o.portSize),selectors:a.portSelectors});var c=o.labelTransformation;c&&(this.applyPortTransform(a.portLabelElement,c,-l.angle||0),this.updateDOMSubtreeAttributes(a.portLabelElement.node,c.attrs,{rootBBox:new H(o.labelSize),selectors:a.portLabelSelectors}))}},applyPortTransform:function(t,e,i){var n=q.createSVGMatrix().rotate(i||0).translate(e.x||0,e.y||0).rotate(e.angle||0);t.transform(n,{absolute:!0})},_getPortMarkup:function(t){return t.markup||this.model.get("portMarkup")||this.model.portMarkup||this.portMarkup},_getPortLabelMarkup:function(t){return t.markup||this.model.get("portLabelMarkup")||this.model.portLabelMarkup||this.portLabelMarkup}},Fe=Se.extend({defaults:{position:{x:0,y:0},size:{width:1,height:1},angle:0},initialize:function(){this._initializePorts(),Se.prototype.initialize.apply(this,arguments)},_initializePorts:function(){},_refreshPorts:function(){},isElement:function(){return!0},position:function(t,e,i){var n=ce(e);if((i=(n?i:t)||{}).parentRelative){if(!this.graph)throw new Error("Element must be part of a graph.");var r=this.getParentCell(),o=r&&!r.isLink()?r.get("position"):{x:0,y:0}}if(n){if(i.parentRelative&&(t+=o.x,e+=o.y),i.deep){var s=this.get("position");this.translate(t-s.x,e-s.y,i)}else this.set("position",{x:t,y:e},i);return this}var a=E(this.get("position"));return i.parentRelative?a.difference(o):a},translate:function(t,e,i){if(e=e||0,0===(t=t||0)&&0===e)return this;(i=i||{}).translateBy=i.translateBy||this.id;var n=this.get("position")||{x:0,y:0};if(i.restrictedArea&&i.translateBy===this.id){var r=this.getBBox({deep:!0}),o=i.restrictedArea,s=n.x-r.x,a=n.y-r.y,l=Math.max(o.x+s,Math.min(o.x+o.width+s-r.width,n.x+t)),c=Math.max(o.y+a,Math.min(o.y+o.height+a-r.height,n.y+e));t=l-n.x,e=c-n.y}var g={x:n.x+t,y:n.y+e};return i.tx=t,i.ty=e,i.transition?(le(i.transition)||(i.transition={}),this.transition("position",g,jt({},i.transition,{valueFunction:bt.object})),Lt(this.getEmbeddedCells(),"translate",t,e,i)):(this.startBatch("translate",i),this.set("position",g,i),Lt(this.getEmbeddedCells(),"translate",t,e,i),this.stopBatch("translate",i)),this},size:function(t,e,i){var n=this.get("size");return void 0===t?{width:n.width,height:n.height}:(le(t)&&(i=e,e=ce(t.height)?t.height:n.height,t=ce(t.width)?t.width:n.width),this.resize(t,e,i))},resize:function(t,e,i){if(i=i||{},this.startBatch("resize",i),i.direction){var n=this.get("size");switch(i.direction){case"left":case"right":e=n.height;break;case"top":case"bottom":t=n.width}var r=C(this.get("angle")||0),o={"top-right":0,right:0,"top-left":1,top:1,"bottom-left":2,left:2,"bottom-right":3,bottom:3}[i.direction];i.absolute&&(o+=Math.floor((r+45)/90),o%=4);var s=this.getBBox(),a=s[["bottomLeft","corner","topRight","origin"][o]](),l=E(a).rotate(s.center(),-r),c=Math.sqrt(t*t+e*e)/2,g=o*Math.PI/2;g+=Math.atan(o%2==0?e/t:t/e),g-=y(r);var h=E.fromPolar(c,g,l),u=E(h).offset(t/-2,e/-2);this.set("size",{width:t,height:e},i),this.position(u.x,u.y,i)}else this.set("size",{width:t,height:e},i);return this.stopBatch("resize",i),this},scale:function(t,e,i,n){var r=this.getBBox().scale(t,e,i);return this.startBatch("scale",n),this.position(r.x,r.y,n),this.resize(r.width,r.height,n),this.stopBatch("scale"),this},fitEmbeds:function(t){void 0===t&&(t={});var e=this.graph;if(!e)throw new Error("Element must be part of a graph.");var i=this.getEmbeddedCells().filter(function(t){return t.isElement()});if(0===i.length)return this;this.startBatch("fit-embeds",t),t.deep&&Lt(i,"fitEmbeds",t);var n=wt(t.padding),r=n.left,o=n.right,s=n.top,a=n.bottom,l=e.getCellsBBox(i),c=l.x,g=l.y,h=l.width,u=l.height;return c-=r,g-=s,h+=r+o,u+=a+s,this.set({position:{x:c,y:g},size:{width:h,height:u}},t),this.stopBatch("fit-embeds"),this},rotate:function(t,e,i,n){if(i){var r=this.getBBox().center(),o=this.get("size"),s=this.get("position");r.rotate(i,this.get("angle")-t);var a=r.x-o.width/2-s.x,l=r.y-o.height/2-s.y;this.startBatch("rotate",{angle:t,absolute:e,origin:i}),this.position(s.x+a,s.y+l,n),this.rotate(t,e,null,n),this.stopBatch("rotate")}else this.set("angle",e?t:(this.get("angle")+t)%360,n);return this},angle:function(){return C(this.get("angle")||0)},getBBox:function(t){if((t=t||{}).deep&&this.graph){var e=this.getEmbeddedCells({deep:!0,breadthFirst:!0});return e.push(this),this.graph.getCellsBBox(e)}var i=this.get("position"),n=this.get("size");return new H(i.x,i.y,n.width,n.height)},getPointFromConnectedLink:function(t,e){var i=this.getBBox(),n=i.center(),r=t.get(e);if(!r)return n;var o=r.port;if(!o)return n;var s=this.portProp(o,["group"]),a=this.getPortsPositions(s),l=new E(a[o]).offset(i.origin()),c=this.angle();return c&&l.rotate(n,-c),l}});jt(Fe.prototype,Xe);var Je=s.Collection.extend({initialize:function(t,e){e.cellNamespace?this.cellNamespace=e.cellNamespace:this.cellNamespace=void 0!==joint&&qt(joint,"shapes")?joint.shapes:null,this.graph=e.graph},model:function(t,e){var i=e.collection,n=i.cellNamespace,r=new("link"===t.type?We:rt(n,t.type,".")||Fe)(t,e);return e.dry||(r.graph=i.graph),r},comparator:function(t){return t.get("z")||0}}),He=s.Model.extend({_batches:{},initialize:function(t,e){var i=new Je([],{model:(e=e||{}).cellModel,cellNamespace:e.cellNamespace,graph:this});s.Model.prototype.set.call(this,"cells",i),i.on("all",this.trigger,this),this.on("change:z",this._sortOnChangeZ,this),this._out={},this._in={},this._nodes={},this._edges={},i.on("add",this._restructureOnAdd,this),i.on("remove",this._restructureOnRemove,this),i.on("reset",this._restructureOnReset,this),i.on("change:source",this._restructureOnChangeSource,this),i.on("change:target",this._restructureOnChangeTarget,this),i.on("remove",this._removeCell,this)},_sortOnChangeZ:function(){this.get("cells").sort()},_restructureOnAdd:function(t){if(t.isLink()){this._edges[t.id]=!0;var e=t.attributes,i=e.source,n=e.target;i.id&&((this._out[i.id]||(this._out[i.id]={}))[t.id]=!0),n.id&&((this._in[n.id]||(this._in[n.id]={}))[t.id]=!0)}else this._nodes[t.id]=!0},_restructureOnRemove:function(t){if(t.isLink()){delete this._edges[t.id];var e=t.attributes,i=e.source,n=e.target;i.id&&this._out[i.id]&&this._out[i.id][t.id]&&delete this._out[i.id][t.id],n.id&&this._in[n.id]&&this._in[n.id][t.id]&&delete this._in[n.id][t.id]}else delete this._nodes[t.id]},_restructureOnReset:function(t){t=t.models,this._out={},this._in={},this._nodes={},this._edges={},t.forEach(this._restructureOnAdd,this)},_restructureOnChangeSource:function(t){var e=t.previous("source");e.id&&this._out[e.id]&&delete this._out[e.id][t.id];var i=t.attributes.source;i.id&&((this._out[i.id]||(this._out[i.id]={}))[t.id]=!0)},_restructureOnChangeTarget:function(t){var e=t.previous("target");e.id&&this._in[e.id]&&delete this._in[e.id][t.id];var i=t.get("target");i.id&&((this._in[i.id]||(this._in[i.id]={}))[t.id]=!0)},getOutboundEdges:function(t){return this._out&&this._out[t]||{}},getInboundEdges:function(t){return this._in&&this._in[t]||{}},toJSON:function(){var t=s.Model.prototype.toJSON.apply(this,arguments);return t.cells=this.get("cells").toJSON(),t},fromJSON:function(t,e){if(!t.cells)throw new Error("Graph JSON must contain cells array.");return this.set(t,e)},set:function(t,e,i){var n;return"object"==typeof t?(n=t,i=e):(n={})[t]=e,n.hasOwnProperty("cells")&&(this.resetCells(n.cells,i),n=te(n,"cells")),s.Model.prototype.set.call(this,n,i)},clear:function(t){t=jt({},t,{clear:!0});var e=this.get("cells");if(0===e.length)return this;this.startBatch("clear",t);for(var i=e.sortBy(function(t){return t.isLink()?1:2});i.shift().remove(t),0<i.length;);return this.stopBatch("clear"),this},_prepareCell:function(t,e){var i;if(t instanceof s.Model?(i=t.attributes,t.graph||e&&e.dry||(t.graph=this)):i=t,!ge(i.type))throw new TypeError("dia.Graph: cell type must be a string.");return t},minZIndex:function(){var t=this.get("cells").first();return t&&t.get("z")||0},maxZIndex:function(){var t=this.get("cells").last();return t&&t.get("z")||0},addCell:function(t,e){return Array.isArray(t)?this.addCells(t,e):(t instanceof s.Model?t.has("z")||t.set("z",this.maxZIndex()+1):void 0===t.z&&(t.z=this.maxZIndex()+1),this.get("cells").add(this._prepareCell(t,e),e||{}),this)},addCells:function(t,e){return 0===t.length||(t=Jt(t),e.maxPosition=e.position=t.length-1,this.startBatch("add",e),t.forEach(function(t){this.addCell(t,e),e.position--},this),this.stopBatch("add",e)),this},resetCells:function(t,e){var i=Ut(t).map(function(t){return this._prepareCell(t,e)},this);return this.get("cells").reset(i,e),this},removeCells:function(t,e){return t.length&&(this.startBatch("remove"),Lt(t,"remove",e),this.stopBatch("remove")),this},_removeCell:function(t,e,i){(i=i||{}).clear||(i.disconnectLinks?this.disconnectLinks(t,i):this.removeLinks(t,i)),this.get("cells").remove(t,{silent:!0}),t.graph===this&&(t.graph=null)},getCell:function(t){return this.get("cells").get(t)},getCells:function(){return this.get("cells").toArray()},getElements:function(){return Object.keys(this._nodes).map(this.getCell,this)},getLinks:function(){return Object.keys(this._edges).map(this.getCell,this)},getFirstCell:function(){return this.get("cells").first()},getLastCell:function(){return this.get("cells").last()},getConnectedLinks:function(t,a){var r=(a=a||{}).indirect,o=a.inbound,s=a.outbound;void 0===o&&void 0===s&&(o=s=!0);var l=[],c={};function g(n,t){if(ne(n.getOutboundEdges(t.id),function(t,e){if(!c[e]){var i=n.getCell(e);l.push(i),c[e]=!0,r&&(o&&h(n,i),s&&g(n,i))}}.bind(n)),r&&t.isLink()){var e=t.getTargetCell();e&&e.isLink()&&(c[e.id]||(l.push(e),g(n,e)))}}function h(n,t){if(ne(n.getInboundEdges(t.id),function(t,e){if(!c[e]){var i=n.getCell(e);l.push(i),c[e]=!0,r&&(o&&h(n,i),s&&g(n,i))}}.bind(n)),r&&t.isLink()){var e=t.getSourceCell();e&&e.isLink()&&(c[e.id]||(l.push(e),h(n,e)))}}if(s&&g(this,t),o&&h(this,t),a.deep){var e=t.getEmbeddedCells({deep:!0}),u={};e.forEach(function(t){t.isElement()&&(u[t.id]=!0)}),e.forEach(function(t){t.isLink()||(s&&ne(this.getOutboundEdges(t.id),function(t,e){if(!c[e]){var i=this.getCell(e).attributes,n=i.source,r=i.target,o=n.id,s=r.id;if(!a.includeEnclosed&&o&&u[o]&&s&&u[s])return;l.push(this.getCell(e)),c[e]=!0}}.bind(this)),o&&ne(this.getInboundEdges(t.id),function(t,e){if(!c[e]){var i=this.getCell(e).attributes,n=i.source,r=i.target,o=n.id,s=r.id;if(!a.includeEnclosed&&o&&u[o]&&s&&u[s])return;l.push(this.getCell(e)),c[e]=!0}}.bind(this)))},this)}return l},getNeighbors:function(l,c){c||(c={});var g=c.inbound,h=c.outbound;void 0===g&&void 0===h&&(g=h=!0);var t=this.getConnectedLinks(l,c).reduce(function(t,e){var i=e.attributes,n=i.source,r=i.target,o=e.hasLoop(c);if(g&&qt(n,"id")&&!t[n.id]){var s=this.getCell(n.id);s.isElement()&&(!o&&(!s||s===l||c.deep&&s.isEmbeddedIn(l))||(t[n.id]=s))}if(h&&qt(r,"id")&&!t[r.id]){var a=this.getCell(r.id);a.isElement()&&(!o&&(!a||a===l||c.deep&&a.isEmbeddedIn(l))||(t[r.id]=a))}return t}.bind(this),{});if(l.isLink()){if(g){var e=l.getSourceCell();e&&e.isElement()&&!t[e.id]&&(t[e.id]=e)}if(h){var i=l.getTargetCell();i&&i.isElement()&&!t[i.id]&&(t[i.id]=i)}}return Ut(t)},getCommonAncestor:function(){var t=Array.from(arguments).map(function(t){for(var e=[],i=t.get("parent");i;)e.push(i),i=this.getCell(i).get("parent");return e},this);t=t.sort(function(t,e){return t.length-e.length});var e=Ut(t.shift()).find(function(e){return t.every(function(t){return t.includes(e)})});return this.getCell(e)},getSuccessors:function(e,t){t=t||{};var i=[];return this.search(e,function(t){t!==e&&i.push(t)},jt({},t,{outbound:!0})),i},cloneCells:ue,cloneSubgraph:function(t,e){var i=this.getSubgraph(t,e);return this.cloneCells(i)},getSubgraph:function(t,e){e=e||{};var s=[],a={},l=[],i=[];return Ut(t).forEach(function(t){(a[t.id]||(s.push(t),(a[t.id]=t).isLink()?i.push(t):l.push(t)),e.deep)&&t.getEmbeddedCells({deep:!0}).forEach(function(t){a[t.id]||(s.push(t),(a[t.id]=t).isLink()?i.push(t):l.push(t))})}),i.forEach(function(t){var e=t.attributes,i=e.source,n=e.target;if(i.id&&!a[i.id]){var r=this.getCell(i.id);s.push(r),a[r.id]=r,l.push(r)}if(n.id&&!a[n.id]){var o=this.getCell(n.id);s.push(this.getCell(n.id)),a[o.id]=o,l.push(o)}},this),l.forEach(function(t){this.getConnectedLinks(t,e).forEach(function(t){var e=t.attributes,i=e.source,n=e.target;!a[t.id]&&i.id&&a[i.id]&&n.id&&a[n.id]&&(s.push(t),a[t.id]=t)})},this),s},getPredecessors:function(e,t){t=t||{};var i=[];return this.search(e,function(t){t!==e&&i.push(t)},jt({},t,{inbound:!0})),i},search:function(t,e,i){(i=i||{}).breadthFirst?this.bfs(t,e,i):this.dfs(t,e,i)},bfs:function(t,e,i){void 0===i&&(i={});var n={},r={},o=[];for(o.push(t),r[t.id]=0;0<o.length;){var s=o.shift();if(!n[s.id]&&!(n[s.id]=!0)!==e.call(this,s,r[s.id]))for(var a=this.getNeighbors(s,i),l=0,c=a.length;l<c;l++){var g=a[l];r[g.id]=r[s.id]+1,o.push(g)}}},dfs:function(t,e,i){void 0===i&&(i={});var n={},r={},o=[];for(o.push(t),r[t.id]=0;0<o.length;){var s=o.pop();if(!n[s.id]&&!(n[s.id]=!0)!==e.call(this,s,r[s.id]))for(var a=this.getNeighbors(s,i),l=o.length,c=0,g=a.length;c<g;c++){var h=a[c];r[h.id]=r[s.id]+1,o.splice(l,0,h)}}},getSources:function(){var i=[];return ne(this._nodes,function(t,e){this._in[e]&&!Et(this._in[e])||i.push(this.getCell(e))}.bind(this)),i},getSinks:function(){var i=[];return ne(this._nodes,function(t,e){this._out[e]&&!Et(this._out[e])||i.push(this.getCell(e))}.bind(this)),i},isSource:function(t){return!this._in[t.id]||Et(this._in[t.id])},isSink:function(t){return!this._out[t.id]||Et(this._out[t.id])},isSuccessor:function(e,i){var n=!1;return this.search(e,function(t){if(t===i&&t!==e)return!(n=!0)},{outbound:!0}),n},isPredecessor:function(e,i){var n=!1;return this.search(e,function(t){if(t===i&&t!==e)return!(n=!0)},{inbound:!0}),n},isNeighbor:function(t,r,e){var o=(e=e||{}).inbound,s=e.outbound;void 0===o&&void 0===s&&(o=s=!0);var a=!1;return this.getConnectedLinks(t,e).forEach(function(t){var e=t.attributes,i=e.source,n=e.target;return o&&qt(i,"id")&&i.id===r.id?!(a=!0):s&&qt(n,"id")&&n.id===r.id?!(a=!0):void 0}),a},disconnectLinks:function(e,i){this.getConnectedLinks(e).forEach(function(t){t.set(t.attributes.source.id===e.id?"source":"target",{x:0,y:0},i)})},removeLinks:function(t,e){Lt(this.getConnectedLinks(t),"remove",e)},findModelsFromPoint:function(e){return this.getElements().filter(function(t){return t.getBBox().containsPoint(e)})},findModelsInArea:function(e,t){e=M(e);var i=(t=Tt(t||{},{strict:!1})).strict?"containsRect":"intersect";return this.getElements().filter(function(t){return e[i](t.getBBox())})},findModelsUnderElement:function(e,t){t=Tt(t||{},{searchBy:"bbox"});var i=e.getBBox();return("bbox"===t.searchBy?this.findModelsInArea(i):this.findModelsFromPoint(i[t.searchBy]())).filter(function(t){return e.id!==t.id&&!t.isEmbeddedIn(e)})},getBBox:function(){return this.getCellsBBox(this.getCells())},getCellsBBox:function(t,r){return r||(r={}),Ut(t).reduce(function(t,e){var i=e.getBBox(r);if(!i)return t;var n=e.angle();return n&&(i=i.bbox(n)),t?t.union(i):i},null)},translate:function(t,e,i){var n=this.getCells().filter(function(t){return!t.isEmbedded()});return Lt(n,"translate",t,e,i),this},resize:function(t,e,i){return this.resizeCells(t,e,this.getCells(),i)},resizeCells:function(t,e,i,n){var r=this.getCellsBBox(i);if(r){var o=Math.max(t/r.width,0),s=Math.max(e/r.height,0);Lt(i,"scale",o,s,r.origin(),n)}return this},startBatch:function(t,e){return e=e||{},this._batches[t]=(this._batches[t]||0)+1,this.trigger("batch:start",jt({},e,{batchName:t}))},stopBatch:function(t,e){return e=e||{},this._batches[t]=(this._batches[t]||0)-1,this.trigger("batch:stop",jt({},e,{batchName:t}))},hasActiveBatch:function(t){var e=this._batches;return(0===arguments.length?Ut(e):Array.isArray(t)?t:[t]).some(function(t){return 0<e[t]})}},{validations:{multiLinks:function(t,e){var i=e.attributes,r=i.source,o=i.target;if(r.id&&o.id){var n=e.getSourceCell();if(n)if(1<t.getConnectedLinks(n,{outbound:!0}).filter(function(t){var e=t.attributes,i=e.source,n=e.target;return i&&i.id===r.id&&(!i.port||i.port===r.port)&&n&&n.id===o.id&&(!n.port||n.port===o.port)}).length)return!1}return!0},linkPinning:function(t,e){var i=e.attributes,n=i.source,r=i.target;return n.id&&r.id}}});ke(He.prototype,["resetCells","addCells","removeCells"],De.cells);var Qe={},_e=s.View.extend({options:{},theme:null,themeClassNamePrefix:tt("theme-"),requireSetThemeOverride:!1,defaultTheme:$.defaultTheme,children:null,childNodes:null,UPDATE_PRIORITY:2,constructor:function(t){this.requireSetThemeOverride=t&&!!t.theme,this.options=jt({},this.options,t),s.View.call(this,t)},initialize:function(){(Qe[this.cid]=this).setTheme(this.options.theme||this.defaultTheme),this.init()},unmount:function(){this.svgElement?this.vel.remove():this.$el.remove()},renderChildren:function(t){if(t||(t=$t(this,"children")),t){var e=this.svgElement,i=q.namespace[e?"svg":"xhtml"],n=it(t,i);(e?this.vel:this.$el).empty().append(n.fragment),this.childNodes=n.selectors}return this},findAttribute:function(t,e){for(var i=e;i&&1===i.nodeType;){var n=i.getAttribute(t);if(n)return n;if(i===this.el)return null;i=i.parentNode}return null},_ensureElement:function(){if(this.el)this.setElement($t(this,"el"));else{var t=$t(this,"tagName"),e=jt({},$t(this,"attributes")),i=jt({},$t(this,"style"));this.id&&(e.id=$t(this,"id")),this.setElement(this._createElement(t)),this._setAttributes(e),this._setStyle(i)}this._ensureElClassName()},_setAttributes:function(t){this.svgElement?this.vel.attr(t):this.$el.attr(t)},_setStyle:function(t){this.$el.css(t)},_createElement:function(t){return this.svgElement?document.createElementNS(q.namespace.svg,t):document.createElement(t)},_setElement:function(t){this.$el=t instanceof s.$?t:s.$(t),this.el=this.$el[0],this.svgElement&&(this.vel=q(this.el))},_ensureElClassName:function(){var t=$t(this,"className");if(t){var e=tt(t);this.svgElement?this.vel.removeClass(t).addClass(e):this.$el.removeClass(t).addClass(e)}},init:function(){},onRender:function(){},confirmUpdate:function(){return 0},setTheme:function(t,e){return e=e||{},this.theme&&this.requireSetThemeOverride&&!e.override||(this.removeThemeClassName(),this.addThemeClassName(t),this.onSetTheme(this.theme,t),this.theme=t),this},addThemeClassName:function(t){t=t||this.theme;var e=this.themeClassNamePrefix+t;return this.svgElement?this.vel.addClass(e):this.$el.addClass(e),this},removeThemeClassName:function(t){t=t||this.theme;var e=this.themeClassNamePrefix+t;return this.svgElement?this.vel.removeClass(e):this.$el.removeClass(e),this},onSetTheme:function(t,e){},remove:function(){return this.onRemove(),this.undelegateDocumentEvents(),Qe[this.cid]=null,s.View.prototype.remove.apply(this,arguments),this},onRemove:function(){},getEventNamespace:function(){return".joint-event-ns-"+this.cid},delegateElementEvents:function(t,e,i){if(!e)return this;i||(i={});var n=this.getEventNamespace();for(var r in e){var o=e[r];"function"!=typeof o&&(o=this[o]),o&&S(t).on(r+n,i,o.bind(this))}return this},undelegateElementEvents:function(t){return S(t).off(this.getEventNamespace()),this},delegateDocumentEvents:function(t,e){return t||(t=$t(this,"documentEvents")),this.delegateElementEvents(document,t,e)},undelegateDocumentEvents:function(){return this.undelegateElementEvents(document)},eventData:function(t,e){if(!t)throw new Error("eventData(): event object required.");var i=t.data,n="__"+this.cid+"__";return void 0===e?i&&i[n]||{}:(i||(i=t.data={}),i[n]||(i[n]={}),jt(i[n],e),this)},stopPropagation:function(t){return this.eventData(t,{propagationStopped:!0}),this},isPropagationStopped:function(t){return!!this.eventData(t).propagationStopped}},{extend:function(){var t=Array.from(arguments),e=t[0]&&jt({},t[0])||{},i=t[1]&&jt({},t[1])||{},n=e.render||this.prototype&&this.prototype.render||null;return e.render=function(){return"function"==typeof n&&n.apply(this,arguments),this.render.__render__===n&&this.onRender(),this},e.render.__render__=n,s.View.extend.call(this,e,i)}}),Ke={views:Qe,View:_e},qe=_e.extend({tagName:"g",svgElement:!0,selector:"root",metrics:null,className:function(){var n=["cell"],t=this.model.get("type");return t&&t.toLowerCase().split(".").forEach(function(t,e,i){n.push("type-"+i.slice(0,e+1).join("-"))}),n.join(" ")},_presentationAttributes:null,_flags:null,setFlags:function(){var t,e,i,n={},r={},o=0,s=this.presentationAttributes;for(var a in s)if(s.hasOwnProperty(a)){var l=s[a];for(Array.isArray(l)||(l=[l]),t=0,e=l.length;t<e;t++){var c=n[i=l[t]];c||(c=n[i]=1<<o++),r[a]|=c}}var g=this.initFlag;for(Array.isArray(g)||(g=[g]),t=0,e=g.length;t<e;t++)n[i=g[t]]||(n[i]=1<<o++);if(25<o)throw new Error("dia.CellView: Maximum number of flags exceeded.");this._flags=n,this._presentationAttributes=r},hasFlag:function(t,e){return t&this.getFlag(e)},removeFlag:function(t,e){return t^t&this.getFlag(e)},getFlag:function(t){var e=this._flags;if(!e)return 0;var i=0;if(Array.isArray(t))for(var n=0,r=t.length;n<r;n++)i|=e[t[n]];else i|=e[t];return i},attributes:function(){var t=this.model;return{"model-id":t.id,"data-type":t.attributes.type}},constructor:function(t){t.id=t.id||ct(this),_e.call(this,t)},initialize:function(){this.setFlags(),_e.prototype.initialize.apply(this,arguments),this.cleanNodesCache(),this.$el.data("view",this),this.startListening()},startListening:function(){this.listenTo(this.model,"change",this.onAttributesChange)},onAttributesChange:function(t,e){var i=t.getChangeFlag(this._presentationAttributes);if(!e.updateHandled&&i){e.dirty&&this.hasFlag(i,"UPDATE")&&(i|=this.getFlag("RENDER")),e.tool&&(e.async=!1);var n=this.paper;n&&n.requestViewUpdate(this,i,this.UPDATE_PRIORITY,e)}},parseDOMJSON:function(t,e){var i=it(t),n=i.selectors,r=i.groupSelectors;for(var o in r){if(n[o])throw new Error("dia.CellView: ambiguous group selector");n[o]=r[o]}if(e){var s=this.selector;if(n[s])throw new Error("dia.CellView: ambiguous root selector.");n[s]=e}return{fragment:i.fragment,selectors:n}},can:function(t){var e=Rt(this.options.interactive)?this.options.interactive(this):this.options.interactive;return le(e)&&!1!==e[t]||ae(e)&&!1!==e},findBySelector:function(t,e,i){if(e||(e=this.el),i||(i=this.selectors),!t||"."===t)return[e];if(i){var n=i[t];if(n)return Array.isArray(n)?n:[n]}return $.useCSSSelectors?S(e).find(t).toArray():[]},notify:function(t){if(this.paper){var e=Array.prototype.slice.call(arguments,1);this.trigger.apply(this,[t].concat(e)),this.paper.trigger.apply(this.paper,[t,this].concat(e))}},getBBox:function(t){var e;if(t&&t.useModelGeometry){var i=this.model;e=i.getBBox().bbox(i.angle())}else e=this.getNodeBBox(this.el);return this.paper.localToPaperRect(e)},getNodeBBox:function(t){var e=this.getNodeBoundingRect(t),i=this.getNodeMatrix(t),n=this.getRootTranslateMatrix(),r=this.getRootRotateMatrix();return q.transformRect(e,n.multiply(r).multiply(i))},getNodeUnrotatedBBox:function(t){var e=this.getNodeBoundingRect(t),i=this.getNodeMatrix(t),n=this.getRootTranslateMatrix();return q.transformRect(e,n.multiply(i))},getRootTranslateMatrix:function(){var t=this.model.position();return q.createSVGMatrix().translate(t.x,t.y)},getRootRotateMatrix:function(){var t=q.createSVGMatrix(),e=this.model,i=e.angle();if(i){var n=e.getBBox(),r=n.width/2,o=n.height/2;t=t.translate(r,o).rotate(i).translate(-r,-o)}return t},highlight:function(t,e){return t=t&&this.$(t)[0]||this.el,(e=e||{}).partial=t!==this.el,this.notify("cell:highlight",t,e),this},unhighlight:function(t,e){return t=t&&this.$(t)[0]||this.el,(e=e||{}).partial=t!=this.el,this.notify("cell:unhighlight",t,e),this},findMagnet:function(t){var e=this.$(t),i=this.$el;0===e.length&&(e=i);do{var n=e.attr("magnet");if((n||e.is(i))&&"false"!==n)return e[0];e=e.parent()}while(0<e.length)},getSelector:function(t,e){var i;if(t===this.el)return"string"==typeof e&&(i="> "+e),i;if(t){var n=q(t).index()+1;i=t.tagName+":nth-child("+n+")",e&&(i+=" > "+e),i=this.getSelector(t.parentNode,i)}return i},getLinkEnd:function(t,e,i,n,r){var o=this.model,s=o.id,a=this.findAttribute("port",t),l=t.getAttribute("joint-selector"),c={id:s};null!=l&&(c.magnet=l),null!=a?(c.port=a,o.hasPort(a)||l||(c.selector=this.getSelector(t))):null==l&&this.el!==t&&(c.selector=this.getSelector(t));var g=this.paper,h=g.options.connectionStrategy;if("function"==typeof h){var u=h.call(g,c,this,t,new E(e,i),n,r,g);u&&(c=u)}return c},getMagnetFromLinkEnd:function(t){var e=this.el,i=t.port,n=t.magnet,r=this.model;return null!=i&&r.isElement()&&r.hasPort(i)?this.findPortNode(i,n)||e:(n||(n=t.selector),n||null==i||(n='[port="'+i+'"]'),this.findBySelector(n,e,this.selectors)[0])},getAttributeDefinition:function(t){return this.model.constructor.getAttributeDefinition(t)},setNodeAttributes:function(t,e){Et(e)||(t instanceof SVGElement?q(t).attr(e):S(t).attr(e))},processNodeAttributes:function(t,e){var i,n,r,o,s,a,l,c,g,h=[];for(i in e)e.hasOwnProperty(i)&&(n=e[i],!(r=this.getAttributeDefinition(i))||Rt(r.qualify)&&!r.qualify.call(this,n,t,e)?(a||(a={}),a[gt(i)]=n):(ge(r.set)&&(a||(a={}),a[r.set]=n),null!==n&&h.push(i,r)));for(o=0,s=h.length;o<s;o+=2)i=h[o],r=h[o+1],n=e[i],Rt(r.set)&&(l||(l={}),l[i]=n),Rt(r.position)&&(c||(c={}),c[i]=n),Rt(r.offset)&&(g||(g={}),g[i]=n);return{raw:e,normal:a,set:l,position:c,offset:g}},updateRelativeAttributes:function(t,e,i,n){var r,o;n||(n={});var s=e.raw||{},a=e.normal||{},l=e.set,c=e.position,g=e.offset;for(r in l){o=l[r];var h=this.getAttributeDefinition(r).set.call(this,o,i.clone(),t,s);le(h)?jt(a,h):void 0!==h&&(a[r]=h)}if(t instanceof HTMLElement)this.setNodeAttributes(t,a);else{var u,d,f,p=a.transform,I=q.transformStringToMatrix(p),m=E(I.e,I.f);if(p&&(a=te(a,"transform"),I.e=I.f=0),c||g){var A=this.getNodeScale(t,n.scalableNode);u=A.sx,d=A.sy}var v=!1;for(r in c)o=c[r],(f=this.getAttributeDefinition(r).position.call(this,o,i.clone(),t,s))&&(m.offset(E(f).scale(u,d)),v||(v=!0));this.setNodeAttributes(t,a);var C=!1;if(g){var w=this.getNodeBoundingRect(t);if(0<w.width&&0<w.height){var y=q.transformRect(w,I).scale(1/u,1/d);for(r in g)o=g[r],(f=this.getAttributeDefinition(r).offset.call(this,o,y,t,s))&&(m.offset(E(f).scale(u,d)),C||(C=!0))}}(void 0!==p||v||C)&&(m.round(1),I.e=m.x,I.f=m.y,t.setAttribute("transform",q.matrixToTransformString(I)))}},getNodeScale:function(t,e){var i,n;if(e&&e.contains(t)){var r=e.scale();i=1/r.sx,n=1/r.sy}else n=i=1;return{sx:i,sy:n}},cleanNodesCache:function(){this.metrics={}},nodeCache:function(t){var e=this.metrics;if(!e)return{};var i=q.ensureId(t),n=e[i];return n||(n=e[i]={}),n},getNodeData:function(t){var e=this.nodeCache(t);return e.data||(e.data={}),e.data},getNodeBoundingRect:function(t){var e=this.nodeCache(t);return void 0===e.boundingRect&&(e.boundingRect=q(t).getBBox()),new H(e.boundingRect)},getNodeMatrix:function(t){var e=this.nodeCache(t);if(void 0===e.magnetMatrix){var i=this.rotatableNode||this.el;e.magnetMatrix=q(t).getTransformToElement(i)}return q.createSVGMatrix(e.magnetMatrix)},getNodeShape:function(t){var e=this.nodeCache(t);return void 0===e.geometryShape&&(e.geometryShape=q(t).toGeometryShape()),e.geometryShape.clone()},isNodeConnection:function(t){return this.model.isLink()&&(!t||t===this.el)},findNodesAttributes:function(t,e,i,n){var r,o,s,a,l={},c=[];for(var g in t)if(t.hasOwnProperty(g)&&(s=t[g],Wt(s))){var h=i[g]=this.findBySelector(g,e,n);for(r=0,o=h.length;r<o;r++){var u=h[r];a=q.ensureId(u);var d=n&&n[g]===u,f=l[a];if(f){f.array||(c.push(a),f.array=!0,f.attributes=[f.attributes],f.selectedLength=[f.selectedLength]);var p=f.attributes,I=f.selectedLength;if(d)p.unshift(s),I.unshift(-1);else{var m=Pt(I,o);p.splice(m,0,s),I.splice(m,0,o)}}else l[a]={attributes:s,selectedLength:d?-1:o,node:u,array:!1}}}for(r=0,o=c.length;r<o;r++)(s=l[a=c[r]]).attributes=se.apply(void 0,[{}].concat(s.attributes.reverse()));return l},getEventTarget:function(t,e){void 0===e&&(e={});var i=t.target,n=t.type,r=t.clientX;void 0===r&&(r=0);var o=t.clientY;return void 0===o&&(o=0),e.fromPoint||"touchmove"===n||"touchend"===n?document.elementFromPoint(r,o):i},updateDOMSubtreeAttributes:function(t,e,i){i||(i={}),i.rootBBox||(i.rootBBox=H()),i.selectors||(i.selectors=this.selectors);var n,r,o,s,a,l,c={},g={},h=[],u=i.roAttributes,d=this.findNodesAttributes(u||e,t,c,i.selectors),f=u?this.findNodesAttributes(e,t,c,i.selectors):d;for(var p in d)if(o=(s=d[p]).attributes,r=s.node,(a=this.processNodeAttributes(r,o)).set||a.position||a.offset){var I,m=f[p]&&f[p].attributes,A=m&&void 0===o.ref?m.ref:o.ref;if(A){if(!(I=(c[A]||this.findBySelector(A,t,i.selectors))[0]))throw new Error('dia.ElementView: "'+A+'" reference does not exist.')}else I=null;n={node:r,refNode:I,processedAttributes:a,allAttributes:m};var v=h.findIndex(function(t){return t.refNode===r});-1<v?h.splice(v,0,n):h.push(n)}else this.setNodeAttributes(r,a.normal);for(var C=0,w=h.length;C<w;C++){n=h[C],r=n.node,I=n.refNode;var y=q(i.rotatableNode),b=I?q.ensureId(I):"",N=!!y&&!!I&&y.contains(I),M=g[b];if(!M){var x=N?y:t;M=g[b]=I?q(I).getBBox({target:x}):i.rootBBox}u?(a=this.processNodeAttributes(r,n.allAttributes),this.mergeProcessedAttributes(a,n.processedAttributes)):a=n.processedAttributes;var S=M;N&&!y.contains(r)&&(l||(l=q.transformStringToMatrix(y.attr("transform"))),S=q.transformRect(M,l)),this.updateRelativeAttributes(r,a,S,i)}},mergeProcessedAttributes:function(t,e){t.set||(t.set={}),t.position||(t.position={}),t.offset||(t.offset={}),jt(t.set,e.set),jt(t.position,e.position),jt(t.offset,e.offset);var i=t.normal&&t.normal.transform;void 0!==i&&e.normal&&(e.normal.transform=i),t.normal=e.normal},onRemove:function(){this.removeTools()},_toolsView:null,hasTools:function(t){var e=this._toolsView;return!!e&&(!t||e.getName()===t)},addTools:function(t){return this.removeTools(),t&&((this._toolsView=t).configure({relatedView:this}),t.listenTo(this.paper,"tools:event",this.onToolEvent.bind(this)),t.mount()),this},updateTools:function(t){var e=this._toolsView;return e&&e.update(t),this},removeTools:function(){var t=this._toolsView;return t&&(t.remove(),this._toolsView=null),this},hideTools:function(){var t=this._toolsView;return t&&t.hide(),this},showTools:function(){var t=this._toolsView;return t&&t.show(),this},onToolEvent:function(t){switch(t){case"remove":this.removeTools();break;case"hide":this.hideTools();break;case"show":this.showTools()}},pointerdblclick:function(t,e,i){this.notify("cell:pointerdblclick",t,e,i)},pointerclick:function(t,e,i){this.notify("cell:pointerclick",t,e,i)},contextmenu:function(t,e,i){this.notify("cell:contextmenu",t,e,i)},pointerdown:function(t,e,i){this.model.graph&&(this.model.startBatch("pointer"),this._graph=this.model.graph),this.notify("cell:pointerdown",t,e,i)},pointermove:function(t,e,i){this.notify("cell:pointermove",t,e,i)},pointerup:function(t,e,i){this.notify("cell:pointerup",t,e,i),this._graph&&(this._graph.stopBatch("pointer",{cell:this.model}),delete this._graph)},mouseover:function(t){this.notify("cell:mouseover",t)},mouseout:function(t){this.notify("cell:mouseout",t)},mouseenter:function(t){this.notify("cell:mouseenter",t)},mouseleave:function(t){this.notify("cell:mouseleave",t)},mousewheel:function(t,e,i,n){this.notify("cell:mousewheel",t,e,i,n)},onevent:function(t,e,i,n){this.notify(e,t,i,n)},onmagnet:function(){},magnetpointerdblclick:function(){},magnetcontextmenu:function(){},checkMouseleave:function(t){var e=this.paper;e.isAsync()&&e.dumpView(this);var i=this.getEventTarget(t,{fromPoint:!0}),n=e.findView(i);n!==this&&(this.mouseleave(t),n&&n.mouseenter(t))},setInteractivity:function(t){this.options.interactive=t}},{addPresentationAttributes:function(t){return se({},this.prototype.presentationAttributes,t,function(t,e){if(t&&e)return"string"==typeof t&&(t=[t]),"string"==typeof e&&(e=[e]),Array.isArray(t)&&Array.isArray(e)?Gt(t.concat(e)):void 0})}}),$e=qe.extend({_removePorts:function(){},_renderPorts:function(){},className:function(){var t=qe.prototype.className.apply(this).split(" ");return t.push("element"),t.join(" ")},initialize:function(){qe.prototype.initialize.apply(this,arguments),this._initializePorts()},presentationAttributes:{attrs:["UPDATE"],position:["TRANSLATE","TOOLS"],size:["RESIZE","PORTS","TOOLS"],angle:["ROTATE","TOOLS"],markup:["RENDER"],ports:["PORTS"]},initFlag:["RENDER"],UPDATE_PRIORITY:0,confirmUpdate:function(t,e){var i=$.useCSSSelectors;return this.hasFlag(t,"PORTS")&&(this._removePorts(),this._cleanPortsCache()),this.hasFlag(t,"RENDER")?(this.render(),this.updateTools(e),t=this.removeFlag(t,["RENDER","UPDATE","RESIZE","TRANSLATE","ROTATE","PORTS"])):(this.hasFlag(t,"RESIZE")&&(this.resize(e),t=this.removeFlag(t,["RESIZE","UPDATE"])),this.hasFlag(t,"UPDATE")&&(this.update(this.model,null,e),t=this.removeFlag(t,"UPDATE"),i&&(t=this.removeFlag(t,"PORTS"))),this.hasFlag(t,"TRANSLATE")&&(this.translate(),t=this.removeFlag(t,"TRANSLATE")),this.hasFlag(t,"ROTATE")&&(this.rotate(),t=this.removeFlag(t,"ROTATE")),this.hasFlag(t,"PORTS")&&(this._renderPorts(),t=this.removeFlag(t,"PORTS"))),this.hasFlag(t,"TOOLS")&&(this.updateTools(e),t=this.removeFlag(t,"TOOLS")),t},_initializePorts:function(){},update:function(t,e){this.cleanNodesCache();var i=$.useCSSSelectors;i&&this._removePorts();var n=this.model,r=n.attr();this.updateDOMSubtreeAttributes(this.el,r,{rootBBox:new H(n.size()),selectors:this.selectors,scalableNode:this.scalableNode,rotatableNode:this.rotatableNode,roAttributes:e===r?null:e}),i&&this._renderPorts()},rotatableSelector:"rotatable",scalableSelector:"scalable",scalableNode:null,rotatableNode:null,renderMarkup:function(){var t=this.model,e=t.get("markup")||t.markup;if(!e)throw new Error("dia.ElementView: markup required");if(Array.isArray(e))return this.renderJSONMarkup(e);if("string"==typeof e)return this.renderStringMarkup(e);throw new Error("dia.ElementView: invalid markup")},renderJSONMarkup:function(t){var e=this.parseDOMJSON(t,this.el),i=this.selectors=e.selectors;this.rotatableNode=q(i[this.rotatableSelector])||null,this.scalableNode=q(i[this.scalableSelector])||null,this.vel.append(e.fragment)},renderStringMarkup:function(t){var e=this.vel;e.append(q(t)),this.rotatableNode=e.findOne(".rotatable"),this.scalableNode=e.findOne(".scalable"),(this.selectors={})[this.selector]=this.el},render:function(){return this.vel.empty(),this.renderMarkup(),this.scalableNode&&this.update(),this.resize(),this.rotatableNode?(this.rotate(),this.translate()):this.updateTransformation(),$.useCSSSelectors||this._renderPorts(),this},resize:function(t){if(this.scalableNode)return this.sgResize(t);this.model.attributes.angle&&this.rotate(),this.update()},translate:function(){if(this.rotatableNode)return this.rgTranslate();this.updateTransformation()},rotate:function(){if(this.rotatableNode)return this.rgRotate(),void this.update();this.updateTransformation()},updateTransformation:function(){var t=this.getTranslateString(),e=this.getRotateString();e&&(t+=" "+e),this.vel.attr("transform",t)},getTranslateString:function(){var t=this.model.attributes.position;return"translate("+t.x+","+t.y+")"},getRotateString:function(){var t=this.model.attributes,e=t.angle;if(!e)return null;var i=t.size;return"rotate("+e+","+i.width/2+","+i.height/2+")"},rgRotate:function(){this.rotatableNode.attr("transform",this.getRotateString())},rgTranslate:function(){this.vel.attr("transform",this.getTranslateString())},sgResize:function(t){var e=this.model,i=e.angle(),n=e.size(),r=this.scalableNode,o=!1;0<r.node.getElementsByTagName("path").length&&(o=!0);var s=r.getBBox({recursive:o}),a=n.width/(s.width||1),l=n.height/(s.height||1);r.attr("transform","scale("+a+","+l+")");var c=this.rotatableNode,g=c&&c.attr("transform");if(g){c.attr("transform",g+" rotate("+-i+","+n.width/2+","+n.height/2+")");var h=r.getBBox({target:this.paper.cells});e.set("position",{x:h.x,y:h.y},jt({updateHandled:!0},t)),this.translate(),this.rotate()}this.update()},prepareEmbedding:function(t){t||(t={});var e=t.model||this.model,i=(t.paper||this.paper).model;e.startBatch("to-front"),e.toFront({deep:!0,ui:!0});var n=i.getElements().reduce(function(t,e){return Math.max(t,e.attributes.z||0)},0);i.getConnectedLinks(e,{deep:!0,includeEnclosed:!0}).forEach(function(t){t.attributes.z<=n&&t.set("z",n+1,{ui:!0})}),e.stopBatch("to-front");var r=e.parent();r&&i.getCell(r).unembed(e,{ui:!0})},processEmbedding:function(t){t||(t={});var e=t.model||this.model,i=t.paper||this.paper,n=i.options,r=[];Rt(n.findParentBy)?r=Ut(n.findParentBy.call(i.model,this)).filter(function(t){return t instanceof Se&&this.model.id!==t.id&&!t.isEmbeddedIn(this.model)}.bind(this)):r=i.model.findModelsUnderElement(e,{searchBy:n.findParentBy});n.frontParentOnly&&(r=r.slice(-1));for(var o=null,s=t.candidateEmbedView,a=r.length-1;0<=a;a--){var l=r[a];if(s&&s.model.id==l.id){o=s;break}var c=l.findView(i);if(n.validateEmbedding.call(i,this,c)){o=c;break}}o&&o!=s&&(this.clearEmbedding(t),t.candidateEmbedView=o.highlight(null,{embedding:!0})),!o&&s&&this.clearEmbedding(t)},clearEmbedding:function(t){t||(t={});var e=t.candidateEmbedView;e&&(e.unhighlight(null,{embedding:!0}),t.candidateEmbedView=null)},finalizeEmbedding:function(t){t||(t={});var e=t.candidateEmbedView,i=t.model||this.model,n=t.paper||this.paper;e&&(e.model.embed(i,{ui:!0}),e.unhighlight(null,{embedding:!0}),t.candidateEmbedView=null),Lt(n.model.getConnectedLinks(i,{deep:!0}),"reparent",{ui:!0})},getDelegatedView:function(){for(var t=this,e=t.model,i=t.paper;t&&!e.isLink();){if(!e.isEmbedded()||t.can("stopDelegation"))return t;e=e.getParentCell(),t=i.findViewByModel(e)}return null},notifyPointerdown:function(t,e,i){qe.prototype.pointerdown.call(this,t,e,i),this.notify("element:pointerdown",t,e,i)},notifyPointermove:function(t,e,i){qe.prototype.pointermove.call(this,t,e,i),this.notify("element:pointermove",t,e,i)},notifyPointerup:function(t,e,i){this.notify("element:pointerup",t,e,i),qe.prototype.pointerup.call(this,t,e,i)},pointerdblclick:function(t,e,i){qe.prototype.pointerdblclick.apply(this,arguments),this.notify("element:pointerdblclick",t,e,i)},pointerclick:function(t,e,i){qe.prototype.pointerclick.apply(this,arguments),this.notify("element:pointerclick",t,e,i)},contextmenu:function(t,e,i){qe.prototype.contextmenu.apply(this,arguments),this.notify("element:contextmenu",t,e,i)},pointerdown:function(t,e,i){this.isPropagationStopped(t)||(this.notifyPointerdown(t,e,i),this.dragStart(t,e,i))},pointermove:function(t,e,i){var n=this.eventData(t);switch(n.action){case"magnet":this.dragMagnet(t,e,i);break;case"move":(n.delegatedView||this).drag(t,e,i);default:this.notifyPointermove(t,e,i)}this.eventData(t,n)},pointerup:function(t,e,i){var n=this.eventData(t);switch(n.action){case"magnet":this.dragMagnetEnd(t,e,i);break;case"move":(n.delegatedView||this).dragEnd(t,e,i);default:this.notifyPointerup(t,e,i)}var r=n.targetMagnet;r&&this.magnetpointerclick(t,r,e,i),this.checkMouseleave(t)},mouseover:function(t){qe.prototype.mouseover.apply(this,arguments),this.notify("element:mouseover",t)},mouseout:function(t){qe.prototype.mouseout.apply(this,arguments),this.notify("element:mouseout",t)},mouseenter:function(t){qe.prototype.mouseenter.apply(this,arguments),this.notify("element:mouseenter",t)},mouseleave:function(t){qe.prototype.mouseleave.apply(this,arguments),this.notify("element:mouseleave",t)},mousewheel:function(t,e,i,n){qe.prototype.mousewheel.apply(this,arguments),this.notify("element:mousewheel",t,e,i,n)},onmagnet:function(t,e,i){this.dragMagnetStart(t,e,i)},magnetpointerdblclick:function(t,e,i,n){this.notify("element:magnet:pointerdblclick",t,e,i,n)},magnetcontextmenu:function(t,e,i,n){this.notify("element:magnet:contextmenu",t,e,i,n)},dragStart:function(t,e,i){var n=this.getDelegatedView();n&&n.can("elementMove")&&(this.eventData(t,{action:"move",delegatedView:n}),n.eventData(t,{pointerOffset:n.model.position().difference(e,i),restrictedArea:this.paper.getRestrictedArea(n)}))},dragMagnetStart:function(t,e,i){if(this.can("addLinkFromMagnet")){var n=t.currentTarget,r=this.paper;this.eventData(t,{targetMagnet:n}),t.stopPropagation(),r.options.validateMagnet(this,n,t)?(r.options.magnetThreshold<=0&&this.dragLinkStart(t,n,e,i),this.eventData(t,{action:"magnet"}),this.stopPropagation(t)):this.pointerdown(t,e,i),r.delegateDragEvents(this,t.data)}},dragLinkStart:function(t,e,i,n){this.model.startBatch("add-link");var r=this.addLinkFromMagnet(e,i,n);r.notifyPointerdown(t,i,n),r.eventData(t,r.startArrowheadMove("target",{whenNotAllowed:"remove"})),this.eventData(t,{linkView:r})},addLinkFromMagnet:function(t,e,i){var n=this.paper,r=n.model,o=n.getDefaultLink(this,t);return o.set({source:this.getLinkEnd(t,e,i,o,"source"),target:{x:e,y:i}}).addTo(r,{async:!1,ui:!0}),o.findView(n)},drag:function(t,e,i){var n=this.paper,r=n.options.gridSize,o=this.model,s=this.eventData(t),a=s.pointerOffset,l=s.restrictedArea,c=s.embedding,g=I(e+a.x,r),h=I(i+a.y,r);o.position(g,h,{restrictedArea:l,deep:!0,ui:!0}),n.options.embeddingMode&&(c||(this.prepareEmbedding(s),c=!0),this.processEmbedding(s)),this.eventData(t,{embedding:c})},dragMagnet:function(t,e,i){var n=this.eventData(t),r=n.linkView;if(r)r.pointermove(t,e,i);else{var o=this.paper,s=o.options.magnetThreshold,a=this.getEventTarget(t),l=n.targetMagnet;if("onleave"===s){if(l===a||q(l).contains(a))return}else if(o.eventData(t).mousemoved<=s)return;this.dragLinkStart(t,l,e,i)}},dragEnd:function(t,e,i){var n=this.eventData(t);n.embedding&&this.finalizeEmbedding(n)},dragMagnetEnd:function(t,e,i){var n=this.eventData(t).linkView;n&&(n.pointerup(t,e,i),this.model.stopBatch("add-link"))},magnetpointerclick:function(t,e,i,n){var r=this.paper;r.eventData(t).mousemoved>r.options.clickThreshold||this.notify("element:magnet:pointerclick",t,e,i,n)}});jt($e.prototype,Ve);var ti={N:"S",S:"N",E:"W",W:"E"},ei={N:-Math.PI/2*3,S:-Math.PI/2,E:0,W:Math.PI};function ii(t,e,i){var n=new E(t.x,e.y);return i.containsPoint(n)&&(n=new E(e.x,t.y)),n}function ni(t,e){return t["W"===e||"E"===e?"width":"height"]}function ri(t,e){return t.x===e.x?t.y>e.y?"N":"S":t.y===e.y?t.x>e.x?"W":"E":null}function oi(t){return new H(t.x,t.y,0,0)}function si(t){var e=wt(t.padding||t.elementPadding||20);return{x:-e.left,y:-e.top,width:e.left+e.right,height:e.top+e.bottom}}function ai(t,e){return t.sourceBBox.clone().moveAndExpand(si(e))}function li(t,e){return t.targetBBox.clone().moveAndExpand(si(e))}function ci(t,e,i){var n=new E(t.x,e.y),r=new E(e.x,t.y),o=ri(t,n),s=ri(t,r),a=ti[i],l=o===i||o!==a&&(s===a||s!==i)?n:r;return{points:[l],direction:ri(l,e)}}function gi(t,e,i){var n=ii(t,e,i);return{points:[n],direction:ri(n,e)}}function hi(e,t,i,n){var r,o={},s=[new E(e.x,t.y),new E(t.x,e.y)],a=s.filter(function(t){return!i.containsPoint(t)}),l=a.filter(function(t){return ri(t,e)!==n});if(0<l.length)r=(r=l.filter(function(t){return ri(e,t)===n}).pop())||l[0],o.points=[r],o.direction=ri(r,t);else{r=Qt(s,a)[0];var c=new E(t).move(r,-ni(i,n)/2),g=ii(c,e,i);o.points=[g,c],o.direction=ri(c,t)}return o}function ui(t,e,i,n){var r=gi(e,t,n),o=r.points[0];if(i.containsPoint(o)){var s=(r=gi(t,e,i)).points[0];if(n.containsPoint(s)){var a=new E(t).move(s,-ni(i,ri(t,s))/2),l=new E(e).move(o,-ni(n,ri(e,o))/2),c=new B(a,l).midpoint(),g=gi(t,c,i),h=ci(c,e,g.direction);r.points=[g.points[0],h.points[0]],r.direction=h.direction}}return r}function di(t,e,i,n,r){var o,s,a,l={},c=i.union(n).inflate(1),g=c.center().distance(e)>c.center().distance(t),h=g?e:t,u=g?t:e;return s=ii(o=r?(o=E.fromPolar(c.width+c.height,ei[r],h),c.pointNearestToPoint(o).move(o,-1)):c.pointNearestToPoint(h).move(h,1),u,c),o.round().equals(s.round())?(s=E.fromPolar(c.width+c.height,y(o.theta(h))+Math.PI/2,u),a=ii(o,s=c.pointNearestToPoint(s).move(u,1).round(),c),l.points=g?[s,a,o]:[o,a,s]):l.points=g?[s,o]:[o,s],l.direction=ri(g?o:s,e),l}function fi(t,e,i){var n,r,o,s,a,l=ai(i,e),c=li(i,e),g=(r=e,(n=i).sourceAnchor?n.sourceAnchor:ai(n,r).center()),h=(s=e,(o=i).targetAnchor?o.targetAnchor:li(o,s).center());l=l.union(oi(g)),c=c.union(oi(h)),(t=Ut(t).map(E)).unshift(g),t.push(h);for(var u=[],d=0,f=t.length-1;d<f;d++){var p=null,I=t[d],m=t[d+1],A=!!ri(I,m);if(0===d)d+1===f?l.intersect(c.clone().inflate(1))?p=di(I,m,l,c):A||(p=ui(I,m,l,c)):l.containsPoint(m)?p=di(I,m,l,oi(m).moveAndExpand(si(e))):A||(p=gi(I,m,l));else if(d+1===f){var v=A&&ri(m,I)===a;c.containsPoint(I)||v?p=di(I,m,oi(I).moveAndExpand(si(e)),c,a):A||(p=hi(I,m,c,a))}else A||(p=ci(I,m,a));a=p?(Array.prototype.push.apply(u,p.points),p.direction):ri(I,m),d+1<f&&u.push(m)}return u}var pi={step:10,maximumLoops:2e3,precision:1,maxAllowedDirectionChange:90,perpendicular:!0,excludeEnds:[],excludeTypes:["basic.Text"],startDirections:["top","right","bottom","left"],endDirections:["top","right","bottom","left"],directionMap:{top:{x:0,y:-1},right:{x:1,y:0},bottom:{x:0,y:1},left:{x:-1,y:0}},cost:function(){return this.step},directions:function(){var t=this.step,e=this.cost();return[{offsetX:t,offsetY:0,cost:e},{offsetX:0,offsetY:t,cost:e},{offsetX:-t,offsetY:0,cost:e},{offsetX:0,offsetY:-t,cost:e}]},penalties:function(){return{0:0,45:this.step/2,90:this.step/2}},paddingBox:function(){var t=this.step;return{x:-t,y:-t,width:2*t,height:2*t}},fallbackRouter:function(t,e,i){if(!Rt(fi))throw new Error("Manhattan requires the orthogonal router as default fallback.");return fi(t,jt({},pi,e),i)},fallbackRoute:function(t,e,i){return null},draggingRoute:null};function Ii(t){this.map={},this.options=t,this.mapGridSize=100}function mi(){this.items=[],this.hash={},this.values={},this.OPEN=1,this.CLOSE=2}function Ai(t,e){return e&&e.paddingBox?t.sourceBBox.clone().moveAndExpand(e.paddingBox):t.sourceBBox.clone()}function vi(t,e){return e&&e.paddingBox?t.targetBBox.clone().moveAndExpand(e.paddingBox):t.targetBBox.clone()}function Ci(t,e){return t.sourceAnchor?t.sourceAnchor:Ai(t,e).center()}function wi(t,e,i,n,r){var o,s,a,l,c,g,h,u,d,f,p=360/i,I=t.theta((o=t,s=e,a=n,l=r.step,c=s.x-o.x,g=s.y-o.y,h=c/a.x,u=g/a.y,d=h*l,f=u*l,new E(o.x+d,o.y+f))),m=C(I+p/2);return p*Math.floor(m/p)}function yi(t,e){var i=Math.abs(t-e);return 180<i?360-i:i}function bi(t,e){if(!t)return e;var i=Math.abs(t),n=Math.round(i/e);return n?e+(i-n*e)/n:i}function Ni(t,e){return t.round(e)}function Mi(t,e,i){return Ni((n=t.clone(),o=(r=e).source,s=I(n.x-o.x,r.x)+o.x,a=I(n.y-o.y,r.y)+o.y,new E(s,a)),i);var n,r,o,s,a}function xi(t){return t.clone().toString()}function Si(t){return new E(0===t.x?0:Math.abs(t.x)/t.x,0===t.y?0:Math.abs(t.y)/t.y)}function ki(t,e,i,n,r,o,s){for(var a,l=[],c=Si(r.difference(i)),g=xi(i),h=t[g];h;){var u=Si((a=e[g]).difference(h));u.equals(c)||(l.unshift(a),c=u),h=t[g=xi(h)]}var d=e[g];return Si(d.difference(n)).equals(c)||l.unshift(d),l}function Di(t,e){for(var i=1/0,n=0,r=e.length;n<r;n++){var o=t.manhattanDistance(e[n]);o<i&&(i=o)}return i}function zi(u,d,t,f,e){var p=e.precision,I=e.directionMap,m=u.difference(d.center()),i=le(I)?Object.keys(I):[],A=Ut(t),n=i.reduce(function(t,e){if(A.includes(e)){for(var i,n=I[e],r=new E(u.x+n.x*(Math.abs(m.x)+d.width),u.y+n.y*(Math.abs(m.y)+d.height)),o=new B(u,r).intersect(d)||[],s=o.length,a=null,l=0;l<s;l++){var c=o[l],g=u.squaredDistance(c);(void 0===i||i<g)&&(i=g,a=c)}if(a){var h=Mi(a,f,p);d.containsPoint(h)&&(h=Mi(h.offset(n.x*f.x,n.y*f.y),f,p)),t.push(h)}}return t},[]);return d.containsPoint(u)||n.push(Mi(u,f,p)),n}function ji(t,e,i,n){var r,o,s,a,l=n.precision;r=Ni(t instanceof H?Ci(this,n).clone():t.clone(),l),o=Ni(e instanceof H?(s=this,a=n,s.targetAnchor?s.targetAnchor:vi(s,a).center()).clone():e.clone(),l);var c,g,h,u,d,f,p,I,m,A,v=(c=n.step,h=o,{source:(g=r).clone(),x:bi(h.x-g.x,c),y:bi(h.y-g.y,c)});if(f=t instanceof H?zi(u=r,t,n.startDirections,v,n):[u=r],p=e instanceof H?zi(d=o,e,n.endDirections,v,n):[d=o],f=f.filter(i.isPointAccessible,i),p=p.filter(i.isPointAccessible,i),0<f.length&&0<p.length){for(var C=new mi,w={},y={},b={},N=0,M=f.length;N<M;N++){var x=f[N],S=xi(x);C.add(S,Di(x,p)),w[S]=x,b[S]=0}var k,D,z=n.previousDirectionAngle,j=void 0===z,T=n.directions;I=v,A=(m=n).step,Ut(m.directions).forEach(function(t){t.gridOffsetX=t.offsetX/A*I.x,t.gridOffsetY=t.offsetY/A*I.y});for(var Z=T.length,L=Ut(p).reduce(function(t,e){var i=xi(e);return t.push(i),t},[]),P=n.maximumLoops;!C.isEmpty()&&0<P;){var G,B=C.pop(),O=w[B],E=y[B],Y=b[B],R=void 0===E,W=O.equals(u);G=R?j?W?null:wi(u,O,Z,v,n):z:wi(E,O,Z,v,n);var U=Yt(f,p);if(!(R&&U)&&0<=L.indexOf(B))return n.previousDirectionAngle=G,ki(y,w,O,u,d);for(N=0;N<Z;N++){var X=(k=T[N]).angle;if(D=yi(G,X),j&&W||!(D>n.maxAllowedDirectionChange)){var V=Mi(O.clone().offset(k.gridOffsetX,k.gridOffsetY),v,l),F=xi(V);if(!C.isClose(F)&&i.isPointAccessible(V)){if(0<=L.indexOf(F))if(!V.equals(d))if(yi(X,wi(V,d,Z,v,n))>n.maxAllowedDirectionChange)continue;var J=Y+k.cost+(W?0:n.penalties[D]);(!C.isOpen(F)||J<b[F])&&(w[F]=V,y[F]=O,b[F]=J,C.add(F,J+Di(V,p)))}}}P--}}return n.fallbackRoute.call(this,u,d,n)}function Ti(t,e,i){!function(t){if(t.directions=$t(t,"directions"),t.penalties=$t(t,"penalties"),t.paddingBox=$t(t,"paddingBox"),t.padding=$t(t,"padding"),t.padding){var e=wt(t.padding);t.paddingBox={x:-e.left,y:-e.top,width:e.left+e.right,height:e.top+e.bottom}}Ut(t.directions).forEach(function(t){var e=new E(0,0),i=new E(t.offsetX,t.offsetY);t.angle=C(e.theta(i))})}(e),i.options.perpendicular=!!e.perpendicular;for(var n,r,o=Ai(i,e),s=vi(i,e),a=Ci(i,e),l=new Ii(e).build(i.paper.model,i.model),c=Ut(t).map(E),g=[],h=a,u=0,d=c.length;u<=d;u++){var f=null;if(r=n||o,!(n=c[u]))if(n=s,(!i.model.get("source").id||!i.model.get("target").id)&&Rt(e.draggingRoute)){var p=r===o?a:r,I=n.origin();f=e.draggingRoute.call(i,p,I,e)}if(null===(f=f||ji.call(i,r,n,l,e)))return e.fallbackRouter(t,e,i);var m=f[0];m&&m.equals(h)&&f.shift(),h=f[f.length-1]||h,Array.prototype.push.apply(g,f)}return g}Ii.prototype.build=function(r,o){var h=this.options,u=Ut(h.excludeEnds).reduce(function(t,e){var i=o.get(e);if(i){var n=r.getCell(i.id);n&&t.push(n)}return t},[]),d=[],t=r.getCell(o.get("source").id);t&&(d=Kt(d,t.getAncestors().map(function(t){return t.id})));var e=r.getCell(o.get("target").id);e&&(d=Kt(d,e.getAncestors().map(function(t){return t.id})));var f=this.mapGridSize;return r.getElements().reduce(function(t,e){var i=Ut(h.excludeTypes).includes(e.get("type")),n=u.find(function(t){return t.id===e.id}),r=d.includes(e.id);if(!(i||n||r))for(var o=e.getBBox().moveAndExpand(h.paddingBox),s=o.origin().snapToGrid(f),a=o.corner().snapToGrid(f),l=s.x;l<=a.x;l+=f)for(var c=s.y;c<=a.y;c+=f){var g=l+"@"+c;t[g]=t[g]||[],t[g].push(o)}return t},this.map),this},Ii.prototype.isPointAccessible=function(e){var t=e.clone().snapToGrid(this.mapGridSize).toString();return Ut(this.map[t]).every(function(t){return!t.containsPoint(e)})},mi.prototype.add=function(t,e){this.hash[t]?this.items.splice(this.items.indexOf(t),1):this.hash[t]=this.OPEN,this.values[t]=e;var i=Pt(this.items,t,function(t){return this.values[t]}.bind(this));this.items.splice(i,0,t)},mi.prototype.remove=function(t){this.hash[t]=this.CLOSE},mi.prototype.isOpen=function(t){return this.hash[t]===this.OPEN},mi.prototype.isClose=function(t){return this.hash[t]===this.CLOSE},mi.prototype.isEmpty=function(){return 0===this.items.length},mi.prototype.pop=function(){var t=this.items.shift();return this.remove(t),t};var Zi=function(t,e,i){return Ti(t,jt({},pi,e),i)},Li={maxAllowedDirectionChange:45,diagonalCost:function(){var t=this.step;return Math.ceil(Math.sqrt(t*t<<1))},directions:function(){var t=this.step,e=this.cost(),i=this.diagonalCost();return[{offsetX:t,offsetY:0,cost:e},{offsetX:t,offsetY:t,cost:i},{offsetX:0,offsetY:t,cost:e},{offsetX:-t,offsetY:t,cost:i},{offsetX:-t,offsetY:0,cost:e},{offsetX:-t,offsetY:-t,cost:i},{offsetX:0,offsetY:-t,cost:e},{offsetX:t,offsetY:-t,cost:i}]},fallbackRoute:function(t,e,i){var n=t.theta(e),r=[],o={x:e.x,y:t.y},s={x:t.x,y:e.y};if(90<n%180){var a=o;o=s,s=a}var l=n%90<45?o:s,c=new B(t,l),g=90*Math.ceil(n/90),h=E.fromPolar(c.squaredLength(),y(g+135),l),u=new B(e,h),d=c.intersection(u),f=d||e,p=d?f:t,I=360/i.directions.length,m=p.theta(e),A=C(m+I/2),v=I*Math.floor(A/I);return i.previousDirectionAngle=v,f&&r.push(f.round()),r.push(e),r}},Pi={normal:function(t,e,i){return t},oneSide:function(t,e,i){var n,r,o,s=e.side||"bottom",a=wt(e.padding||40),l=i.sourceBBox,c=i.targetBBox,g=l.center(),h=c.center();switch(s){case"bottom":o=1,n="y",r="height";break;case"top":o=-1,n="y",r="height";break;case"left":o=-1,n="x",r="width";break;case"right":o=1,n="x",r="width";break;default:throw new Error("Router: invalid side")}return g[n]+=o*(l[r]/2+a[s]),h[n]+=o*(c[r]/2+a[s]),0<o*(g[n]-h[n])?h[n]=g[n]:g[n]=h[n],[g].concat(t,h)},orthogonal:fi,manhattan:Zi,metro:function(t,e,i){if(!Rt(Zi))throw new Error("Metro requires the manhattan router.");return Zi(t,jt({},Li,e),i)}},Gi=["arc","gap","cubic"],Bi=["smooth"],Oi=1/3,Ei=2/3;function Yi(t,e,i){var r=[].concat(t,i,e);return r.reduce(function(t,e,i){var n=r[i+1];return null!=n&&(t[i]=b(e,n)),t},[])}function Ri(){for(var t=this._jumpOverUpdateList,e=0;e<t.length;e++)t[e].update()}function Wi(t,e){return b(t,e).squaredLength()}function Ui(S,k,D,z){var j,T=new O;return j=O.createSegment("M",S[0].start),T.appendSegment(j),Ut(S).forEach(function(t,e){if(t.isJump){var i,n,r,o;if("arc"===D){i=-90,n=t.start.difference(t.end);var s=Number(n.x<0||0===n.x&&n.y<0);s&&(i+=180);var a,l=t.midpoint(),c=new B(l,t.end).rotate(l,i);r=(a=new B(t.start,l)).pointAt(2/3).rotate(t.start,i),o=c.pointAt(1/3).rotate(c.end,-i),j=O.createSegment("C",r,o,c.end),T.appendSegment(j),a=new B(l,t.end),r=c.pointAt(1/3).rotate(c.end,i),o=a.pointAt(1/3).rotate(t.end,-i),j=O.createSegment("C",r,o,t.end),T.appendSegment(j)}else if("gap"===D)j=O.createSegment("M",t.end),T.appendSegment(j);else if("cubic"===D){i=t.start.theta(t.end);var g=.6*k,h=1.35*k;n=t.start.difference(t.end),(s=Number(n.x<0||0===n.x&&n.y<0))&&(h*=-1),r=E(t.start.x+g,t.start.y+h).rotate(t.start,i),o=E(t.end.x-g,t.end.y+h).rotate(t.end,i),j=O.createSegment("C",r,o,t.end),T.appendSegment(j)}}else{var u=S[e+1];0==z||!u||u.isJump?(j=O.createSegment("L",t.end),T.appendSegment(j)):(d=z,f=T,p=t.end,I=t.start,m=u.end,v=p.distance(I)/2,C=p.distance(m)/2,w=-Math.min(d,v),y=-Math.min(d,C),b=p.clone().move(I,w).round(),N=p.clone().move(m,y).round(),M=new E(Oi*b.x+Ei*p.x,Ei*p.y+Oi*b.y),x=new E(Oi*N.x+Ei*p.x,Ei*p.y+Oi*N.y),A=O.createSegment("L",b),f.appendSegment(A),A=O.createSegment("C",M,x,N),f.appendSegment(A))}var d,f,p,I,m,A,v,C,w,y,b,N,M,x}),T}var Xi={jumpover:function(t,e,i,n){var r,o;null==(o=(r=this).paper._jumpOverUpdateList)&&(o=r.paper._jumpOverUpdateList=[],r.paper.on("cell:pointerup",Ri),r.paper.model.on("reset",function(){o=r.paper._jumpOverUpdateList=[]})),o.indexOf(r)<0&&(o.push(r),r.listenToOnce(r.model,"change:connector remove",function(){o.splice(o.indexOf(r),1)}));var s=n.raw,a=n.size||5,l=n.jump&&(""+n.jump).toLowerCase(),c=n.radius||0,g=n.ignoreConnectors||Bi;-1===Gi.indexOf(l)&&(l=Gi[0]);var h=this.paper,u=h.model.getLinks();if(1===u.length)return Ui(Yi(t,e,i),a,l,c);var d=this.model,f=u.indexOf(d),p=h.options.defaultConnector||{},I=u.filter(function(t,e){var i=t.get("connector")||p;return!(Ut(g).includes(i.name)||f<e&&"jumpover"===i.name)}),m=I.map(function(t){return h.findViewByModel(t)}),A=Yi(t,e,i),v=m.map(function(t){return null==t?[]:t===this?A:Yi(t.sourcePoint,t.targetPoint,t.route)},this),C=Ui(A.reduce(function(t,s){var c,g,h,e=I.reduce(function(t,e,i){if(e!==d){var n=(r=s,o=v[i],Ut(o).reduce(function(t,e){var i=r.intersection(e);return i&&t.push(i),t},[]));t.push.apply(t,n)}var r,o;return t},[]).sort(function(t,e){return Wi(s.start,t)-Wi(s.start,e)});return 0<e.length?t.push.apply(t,(c=s,h=a,(g=e).reduce(function(t,e,i){if(!0===e.skip)return t;var n=t.pop()||c,r=N(e).move(n.start,-h),o=N(e).move(n.start,+h),s=g[i+1];if(null!=s){var a=o.distance(s);a<=h&&(o=s.move(n.start,a),s.skip=!0)}else if(r.distance(n.end)<2*h+1)return t.push(n),t;if(o.distance(n.start)<2*h+1)return t.push(n),t;var l=b(r,o);return l.isJump=!0,t.push(b(n.start,r),l,b(o,n.end)),t},[]))):t.push(s),t},[]),a,l,c);return s?C:C.serialize()},normal:function(t,e,i,n){var r=n&&n.raw,o=[t].concat(i).concat([e]),s=new D(o),a=new O(s);return r?a:a.serialize()},rounded:function(t,e,i,n){n||(n={});var r,o=n.radius||10,s=n.raw,a=new O;r=O.createSegment("M",t),a.appendSegment(r);for(var l,c,g,h,u,d,f,p,I,m,A,v=0,C=i.length;v<C;v++)l=new E(i[v]),c=i[v-1]||t,g=i[v+1]||e,h=u||l.distance(c)/2,u=l.distance(g)/2,d=-Math.min(o,h),f=-Math.min(o,u),p=l.clone().move(c,d).round(),I=l.clone().move(g,f).round(),m=new E(1/3*p.x+2/3*l.x,2/3*l.y+1/3*p.y),A=new E(1/3*I.x+2/3*l.x,2/3*l.y+1/3*I.y),r=O.createSegment("L",p),a.appendSegment(r),r=O.createSegment("C",m,A,I),a.appendSegment(r);return r=O.createSegment("L",e),a.appendSegment(r),s?a:a.serialize()},smooth:function(t,e,i,n){var r,o=n&&n.raw;if(i&&0!==i.length){var s=[t].concat(i).concat([e]),a=p.throughPoints(s);r=new O(a)}else{var l;if(r=new O,l=O.createSegment("M",t),r.appendSegment(l),Math.abs(t.x-e.x)>=Math.abs(t.y-e.y)){var c=(t.x+e.x)/2;l=O.createSegment("C",c,t.y,c,e.y,e.x,e.y),r.appendSegment(l)}else{var g=(t.y+e.y)/2;l=O.createSegment("C",t.x,g,e.x,g,e.x,e.y),r.appendSegment(l)}}return o?r:r.serialize()}},Vi=qe.extend({className:function(){var t=qe.prototype.className.apply(this).split(" ");return t.push("link"),t.join(" ")},options:{shortLinkLength:105,doubleLinkTools:!1,longLinkLength:155,linkToolsOffset:40,doubleLinkToolsOffset:65,sampleInterval:50},_labelCache:null,_labelSelectors:null,_markerCache:null,_V:null,_dragData:null,metrics:null,decimalsRounding:2,initialize:function(){qe.prototype.initialize.apply(this,arguments),this._labelCache={},this._labelSelectors={},this._markerCache={},this._V={},this.metrics={}},presentationAttributes:{markup:["RENDER"],attrs:["UPDATE"],router:["UPDATE"],connector:["UPDATE"],smooth:["UPDATE"],manhattan:["UPDATE"],toolMarkup:["TOOLS"],labels:["LABELS"],labelMarkup:["LABELS"],vertices:["VERTICES","UPDATE"],vertexMarkup:["VERTICES"],source:["SOURCE","UPDATE"],target:["TARGET","UPDATE"]},initFlag:["RENDER","SOURCE","TARGET"],UPDATE_PRIORITY:1,confirmUpdate:function(t,e){if(e||(e={}),this.hasFlag(t,"SOURCE")){if(!this.updateEndProperties("source"))return t;t=this.removeFlag(t,"SOURCE")}if(this.hasFlag(t,"TARGET")){if(!this.updateEndProperties("target"))return t;t=this.removeFlag(t,"TARGET")}var i=this.paper,n=this.sourceView,r=this.targetView;if(i&&(n&&!i.isViewMounted(n)||r&&!i.isViewMounted(r)))return t;if(this.hasFlag(t,"RENDER"))return this.render(),t=this.removeFlag(t,["RENDER","UPDATE","VERTICES","TOOLS","LABELS"]);this.hasFlag(t,"VERTICES")&&(this.renderVertexMarkers(),t=this.removeFlag(t,"VERTICES"));var o=this.model,s=o.attributes;return this.hasFlag(t,"UPDATE")&&(this.update(o,null,e),t=this.removeFlag(t,"UPDATE")),this.hasFlag(t,"LABELS")&&(this.onLabelsChange(o,s.labels,e),t=this.removeFlag(t,"LABELS")),this.hasFlag(t,"TOOLS")&&(this.renderTools().updateToolsPosition(),t=this.removeFlag(t,"TOOLS")),t},isLabelsRenderRequired:function(t){void 0===t&&(t={});var e=this.model.previous("labels");if(!e)return!0;if("propertyPathArray"in t&&"propertyValue"in t){var i=t.propertyPathArray||[],n=i.length;if(1<n)if(!!e[i[1]]){if(2===n)return"markup"in Object(t.propertyValue);if("markup"!==i[2])return!1}}return!0},onLabelsChange:function(t,e,i){this.isLabelsRenderRequired(i)?this.renderLabels():this.updateLabels(),this.updateLabelPositions()},render:function(){return this.vel.empty(),this._V={},this.renderMarkup(),this.renderLabels(),this.update(),this},renderMarkup:function(){var t=this.model,e=t.get("markup")||t.markup;if(!e)throw new Error("dia.LinkView: markup required");if(Array.isArray(e))return this.renderJSONMarkup(e);if("string"==typeof e)return this.renderStringMarkup(e);throw new Error("dia.LinkView: invalid markup")},renderJSONMarkup:function(t){var e=this.parseDOMJSON(t,this.el);this.selectors=e.selectors,this.vel.append(e.fragment)},renderStringMarkup:function(t){var e=q(t);Array.isArray(e)||(e=[e]);for(var i=this._V,n=0,r=e.length;n<r;n++){var o=e[n],s=o.attr("class");s&&(s=et(s),i[S.camelCase(s)]=o)}this.renderTools(),this.renderVertexMarkers(),this.renderArrowheadMarkers(),this.vel.append(e)},_getLabelMarkup:function(t){if(t){if(Array.isArray(t))return this.parseDOMJSON(t,null);if("string"==typeof t)return this._getLabelStringMarkup(t);throw new Error("dia.linkView: invalid label markup")}},_getLabelStringMarkup:function(t){var e=q(t),i=document.createDocumentFragment();if(Array.isArray(e))for(var n=0,r=e.length;n<r;n++){var o=e[n].node;i.appendChild(o)}else i.appendChild(e.node);return{fragment:i,selectors:{}}},_normalizeLabelMarkup:function(t){if(t){var e,i=t.fragment;if(!(t.fragment instanceof DocumentFragment&&t.fragment.hasChildNodes()))throw new Error("dia.LinkView: invalid label markup.");var n=i.childNodes;return(e=1<n.length||"G"!==n[0].nodeName.toUpperCase()?q("g").append(i):q(n[0])).addClass("label"),{node:e.node,selectors:t.selectors}}},renderLabels:function(){var t=this._V,e=t.labels,i=this._labelCache={},n=this._labelSelectors={},r=this.model,o=r.attributes.labels||[],s=o.length;if(0===s)return e&&e.remove(),this;e?e.empty():e=t.labels=q("g").addClass("labels");for(var a=e.node,l=0;l<s;l++){var c,g,h=o[l],u=this._normalizeLabelMarkup(this._getLabelMarkup(h.markup));if(u)c=u.node,g=u.selectors;else{var d=r._builtins.defaultLabel,f=this._normalizeLabelMarkup(this._getLabelMarkup(d.markup)),p=r._getDefaultLabel(),I=this._normalizeLabelMarkup(this._getLabelMarkup(p.markup))||f;c=I.node,g=I.selectors}c.setAttribute("label-idx",l),a.appendChild(c),i[l]=c;var m=this.selector;if(g[m])throw new Error("dia.LinkView: ambiguous label root selector.");g[m]=c,n[l]=g}return a.parentNode||this.el.appendChild(a),this.updateLabels(),this},_mergeLabelAttrs:function(t,e,i,n){return null===e?null:void 0!==e?t?se({},i,e):se({},n,i,e):null===i?null:void 0!==i?t?i:se({},n,i):t?void 0:n},updateLabels:function(){if(!this._V.labels)return this;for(var t=this.model,e=t.get("labels")||[],i=this.can("labelMove"),n=t._builtins.defaultLabel.attrs,r=t._getDefaultLabel(),o=r.markup,s=r.attrs,a=0,l=e.length;a<l;a++){var c=this._labelCache[a];c.setAttribute("cursor",i?"move":"default");var g=this._labelSelectors[a],h=e[a],u=h.markup,d=h.attrs,f=this._mergeLabelAttrs(u||o,d,s,n);this.updateDOMSubtreeAttributes(c,f,{rootBBox:new H(h.size),selectors:g})}return this},renderTools:function(){if(!this._V.linkTools)return this;var t,e=S(this._V.linkTools.node).empty(),i=xt(this.model.get("toolMarkup")||this.model.toolMarkup),n=q(i());(e.append(n.node),this._toolCache=n,this.options.doubleLinkTools)&&(t=this.model.get("doubleToolMarkup")||this.model.doubleToolMarkup?(i=xt(this.model.get("doubleToolMarkup")||this.model.doubleToolMarkup),q(i())):n.clone(),e.append(t.node),this._tool2Cache=t);return this},renderVertexMarkers:function(){if(!this._V.markerVertices)return this;var i=S(this._V.markerVertices.node).empty(),n=xt(this.model.get("vertexMarkup")||this.model.vertexMarkup);return this.model.vertices().forEach(function(t,e){i.append(q(n(jt({idx:e},t))).node)}),this},renderArrowheadMarkers:function(){if(!this._V.markerArrowheads)return this;var t=S(this._V.markerArrowheads.node);t.empty();var e=xt(this.model.get("arrowheadMarkup")||this.model.arrowheadMarkup);return this._V.sourceArrowhead=q(e({end:"source"})),this._V.targetArrowhead=q(e({end:"target"})),t.append(this._V.sourceArrowhead.node,this._V.targetArrowhead.node),this},update:function(t,e,i){return i||(i={}),this.cleanNodesCache(),this.updateConnection(i),this.updateDOMSubtreeAttributes(this.el,this.model.attr(),{selectors:this.selectors}),this.updateDefaultConnectionPath(),this.updateLabelPositions(),this.updateToolsPosition(),this.updateArrowheadMarkers(),this.updateTools(i),this.options.perpendicular=null,this},removeRedundantLinearVertices:function(t){var e=this.model,i=e.vertices(),n=[this.sourceAnchor].concat(i,[this.targetAnchor]),r=n.length,o=new D(n);o.simplify({threshold:.001});var s=o.points.map(function(t){return t.toJSON()}),a=s.length;return r===a?0:(e.vertices(s.slice(1,a-1),t),r-a)},updateDefaultConnectionPath:function(){var t=this._V;t.connection&&t.connection.attr("d",this.getSerializedConnection()),t.connectionWrap&&t.connectionWrap.attr("d",this.getSerializedConnection()),t.markerSource&&t.markerTarget&&this._translateAndAutoOrientArrows(t.markerSource,t.markerTarget)},getEndView:function(t){switch(t){case"source":return this.sourceView||null;case"target":return this.targetView||null;default:throw new Error("dia.LinkView: type parameter required.")}},getEndAnchor:function(t){switch(t){case"source":return new E(this.sourceAnchor);case"target":return new E(this.targetAnchor);default:throw new Error("dia.LinkView: type parameter required.")}},getEndMagnet:function(t){switch(t){case"source":var e=this.sourceView;if(!e)break;return this.sourceMagnet||e.el;case"target":var i=this.targetView;if(!i)break;return this.targetMagnet||i.el;default:throw new Error("dia.LinkView: type parameter required.")}return null},updateConnection:function(t){t=t||{};var e,i,n=this.model;if(t.translateBy&&n.isRelationshipEmbeddedIn(t.translateBy)){var r=t.tx||0,o=t.ty||0;e=new D(this.route).translate(r,o).points,this._translateConnectionPoints(r,o),(i=this.path).translate(r,o)}else{var s=n.vertices(),a=this.findAnchors(s),l=this.sourceAnchor=a.source,c=this.targetAnchor=a.target;e=this.findRoute(s,t);var g=this.findConnectionPoints(e,l,c),h=this.sourcePoint=g.source,u=this.targetPoint=g.target,d=this.findMarkerPoints(e,h,u);i=this.findPath(e,d.source||h,d.target||u)}this.route=e,this.path=i,this.metrics={}},findMarkerPoints:function(t,e,i){var n,r,o=t[0],s=t[t.length-1],a=this._markerCache;return this._V.markerSource&&(a.sourceBBox=a.sourceBBox||this._V.markerSource.getBBox(),n=E(e).move(o||i,a.sourceBBox.width*this._V.markerSource.scale().sx*-1).round()),this._V.markerTarget&&(a.targetBBox=a.targetBBox||this._V.markerTarget.getBBox(),r=E(i).move(s||e,a.targetBBox.width*this._V.markerTarget.scale().sx*-1).round()),a.sourcePoint=n||e.clone(),a.targetPoint=r||i.clone(),{source:n,target:r}},findAnchorsOrdered:function(t,e,i,n){var r,o,s,a,l=this.model,c=l.get(t),g=l.get(i),h=this.getEndView(t),u=this.getEndView(i),d=this.getEndMagnet(t),f=this.getEndMagnet(i);r=h?(s=e?new E(e):u?f:new E(g),this.getAnchor(c.anchor,h,d,s,t)):new E(c),o=u?(a=new E(n||r),this.getAnchor(g.anchor,u,f,a,i)):new E(g);var p={};return p[t]=r,p[i]=o,p},findAnchors:function(t){var e=this.model,i=t[0],n=t[t.length-1];return e.target().priority&&!e.source().priority?this.findAnchorsOrdered("target",n,"source",i):this.findAnchorsOrdered("source",i,"target",n)},findConnectionPoints:function(t,e,i){var n,r,o,s,a=t[0],l=t[t.length-1],c=this.model,g=c.get("source"),h=c.get("target"),u=this.sourceView,d=this.targetView,f=this.paper.options;if(u&&!u.isNodeConnection(this.sourceMagnet)){n=this.sourceMagnet||u.el;var p=g.connectionPoint||f.defaultConnectionPoint,I=new B(a||i,e);o=this.getConnectionPoint(p,u,n,I,"source")}else o=e;if(d&&!d.isNodeConnection(this.targetMagnet)){r=this.targetMagnet||d.el;var m=h.connectionPoint||f.defaultConnectionPoint,A=new B(l||e,i);s=this.getConnectionPoint(m,d,r,A,"target")}else s=i;return{source:o,target:s}},getAnchor:function(t,e,i,n,r){var o,s=e.isNodeConnection(i),a=this.paper.options;if(t||(t=s?a.defaultLinkAnchor:a.perpendicularLinks||this.options.perpendicular?{name:"perpendicular"}:a.defaultAnchor),!t)throw new Error("Anchor required.");if("function"==typeof t)o=t;else{var l=t.name;if("function"!=typeof(o=a[s?"linkAnchorNamespace":"anchorNamespace"][l]))throw new Error("Unknown anchor: "+l)}var c=o.call(this,e,i,n,t.args||{},r,this);return c?c.round(this.decimalsRounding):new E},getConnectionPoint:function(t,e,i,n,r){var o,s,a=n.end,l=this.paper.options;if("function"==typeof l.linkConnectionPoint){var c=i===e.el?void 0:i;if(o=l.linkConnectionPoint(this,e,c,n.start,r))return o}if(!t)return a;if("function"==typeof t)s=t;else{var g=t.name;if("function"!=typeof(s=l.connectionPointNamespace[g]))throw new Error("Unknown connection point: "+g)}return(o=s.call(this,n,e,i,t.args||{},r,this))?o.round(this.decimalsRounding):a},_translateConnectionPoints:function(t,e){var i=this._markerCache;i.sourcePoint.offset(t,e),i.targetPoint.offset(t,e),this.sourcePoint.offset(t,e),this.targetPoint.offset(t,e),this.sourceAnchor.offset(t,e),this.targetAnchor.offset(t,e)},_normalizeLabelPosition:function(t){return"number"==typeof t?{distance:t,offset:null,angle:0,args:null}:t},updateLabelPositions:function(){if(!this._V.labels)return this;if(!this.path)return this;var t=this.model,e=t.get("labels")||[];if(!e.length)return this;for(var i=t._builtins.defaultLabel.position,n=t._getDefaultLabel(),r=this._normalizeLabelPosition(n.position),o=se({},i,r),s=0,a=e.length;s<a;s++){var l=e[s],c=this._normalizeLabelPosition(l.position),g=se({},o,c),h=this._getLabelTransformationMatrix(g);this._labelCache[s].setAttribute("transform",q.matrixToTransformString(h))}return this},updateToolsPosition:function(){if(!this._V.linkTools)return this;var t="",e=this.options.linkToolsOffset,i=this.getConnectionLength();if(!Number.isNaN(i)){i<this.options.shortLinkLength&&(t="scale(.5)",e/=2);var n=this.getPointAtLength(e);if(this._toolCache.attr("transform","translate("+n.x+", "+n.y+") "+t),this.options.doubleLinkTools&&i>=this.options.longLinkLength){var r=this.options.doubleLinkToolsOffset||e;n=this.getPointAtLength(i-r),this._tool2Cache.attr("transform","translate("+n.x+", "+n.y+") "+t),this._tool2Cache.attr("visibility","visible")}else this.options.doubleLinkTools&&this._tool2Cache.attr("visibility","hidden")}return this},updateArrowheadMarkers:function(){if(!this._V.markerArrowheads)return this;if("none"===S.css(this._V.markerArrowheads.node,"display"))return this;var t=this.getConnectionLength()<this.options.shortLinkLength?.5:1;return this._V.sourceArrowhead.scale(t),this._V.targetArrowhead.scale(t),this._translateAndAutoOrientArrows(this._V.sourceArrowhead,this._V.targetArrowhead),this},updateEndProperties:function(t){var e=this.model,i=this.paper,n=t+"View",r=e.get(t),o=r&&r.id;if(!o)return this[n]=null,this.updateEndMagnet(t),!0;var s=i.getModelById(o);if(!s)throw new Error("LinkView: invalid "+t+" cell.");var a=s.findView(i);return!!a&&(this[n]=a,this.updateEndMagnet(t),!0)},updateEndMagnet:function(t){var e=t+"Magnet",i=this.getEndView(t);if(i){var n=i.getMagnetFromLinkEnd(this.model.get(t));n===i.el&&(n=null),this[e]=n}else this[e]=null},_translateAndAutoOrientArrows:function(t,e){var i=Ut(this.route);t&&t.translateAndAutoOrient(this.sourcePoint,i[0]||this.targetPoint,this.paper.cells),e&&e.translateAndAutoOrient(this.targetPoint,i[i.length-1]||this.sourcePoint,this.paper.cells)},_getLabelPositionAngle:function(t){return(this.model.label(t).position||{}).angle||0},_getLabelPositionArgs:function(t){return(this.model.label(t).position||{}).args},_getDefaultLabelPositionArgs:function(){return(this.model._getDefaultLabel().position||{}).args},_mergeLabelPositionArgs:function(t,e){return null===t?null:void 0===t?null===e?null:e:se({},e,t)},addLabel:function(t,e,i,n){var r,o,s,a=0;s="number"!=typeof t?(r=t.x,o=t.y,"number"==typeof e?(a=e,i):e):(r=t,o=e,"number"==typeof i?(a=i,n):i);var l=this._getDefaultLabelPositionArgs(),c=s,g=this._mergeLabelPositionArgs(c,l),h={position:this.getLabelPosition(r,o,a,g)};return this.model.insertLabel(-1,h,s),-1},addVertex:function(t,e,i){var n="number"!=typeof t,r=n?t.x:t,o=n?t.y:e,s=n?e:i,a={x:r,y:o},l=this.getVertexIndex(r,o);return this.model.insertVertex(l,a,s),l},sendToken:function(t,e,i){var n,r,o;o=le(e)?(n=e.duration,r="reverse"===e.direction,e.connection):(n=e,r=!1,null);var s={dur:(n=n||1e3)+"ms",repeatCount:1,calcMode:"linear",fill:"freeze"};r&&(s.keyPoints="1;0",s.keyTimes="0;1");var a,l,c,g=q(t);if("string"==typeof o)a=this.findBySelector(o,this.el,this.selectors)[0];else{var h=this._V;a=h.connection?h.connection.node:this.el.querySelector("path")}if(!(a instanceof SVGPathElement))throw new Error("dia.LinkView: token animation requires a valid connection path.");g.appendTo(this.paper.cells).animateAlongPath(s,a),setTimeout((l=g,c=i,function(){l.remove(),"function"==typeof c&&c()}),n)},findRoute:function(t){t||(t=[]);var e=Pi,i=this.model.router(),n=this.paper.options.defaultRouter;if(!i){if(!n)return t.map(E);i=n}var r=Rt(i)?i:e[i.name];if(!Rt(r))throw new Error('dia.LinkView: unknown router: "'+i.name+'".');var o=i.args||{},s=r.call(this,t,o,this);return s||t.map(E)},findPath:function(t,e,i){var n=Xi,r=this.model.connector(),o=this.paper.options.defaultConnector;r||(r=o||{});var s=Rt(r)?r:n[r.name];if(!Rt(s))throw new Error('dia.LinkView: unknown connector: "'+r.name+'".');var a=Bt(r.args||{});a.raw=!0;var l=s.call(this,e,i,t,a,this);return"string"==typeof l&&(l=new O(q.normalizePathData(l))),l},getConnection:function(){var t=this.path;return t?t.clone():null},getSerializedConnection:function(){var t=this.path;if(!t)return null;var e=this.metrics;if(e.hasOwnProperty("data"))return e.data;var i=t.serialize();return e.data=i},getConnectionSubdivisions:function(){var t=this.path;if(!t)return null;var e=this.metrics;if(e.hasOwnProperty("segmentSubdivisions"))return e.segmentSubdivisions;var i=t.getSegmentSubdivisions();return e.segmentSubdivisions=i},getConnectionLength:function(){var t=this.path;if(!t)return 0;var e=this.metrics;if(e.hasOwnProperty("length"))return e.length;var i=t.length({segmentSubdivisions:this.getConnectionSubdivisions()});return e.length=i},getPointAtLength:function(t){var e=this.path;return e?e.pointAtLength(t,{segmentSubdivisions:this.getConnectionSubdivisions()}):null},getPointAtRatio:function(t){var e=this.path;return e?(ft(t)&&(t=parseFloat(t)/100),e.pointAt(t,{segmentSubdivisions:this.getConnectionSubdivisions()})):null},getTangentAtLength:function(t){var e=this.path;return e?e.tangentAtLength(t,{segmentSubdivisions:this.getConnectionSubdivisions()}):null},getTangentAtRatio:function(t){var e=this.path;return e?e.tangentAt(t,{segmentSubdivisions:this.getConnectionSubdivisions()}):null},getClosestPoint:function(t){var e=this.path;return e?e.closestPoint(t,{segmentSubdivisions:this.getConnectionSubdivisions()}):null},getClosestPointLength:function(t){var e=this.path;return e?e.closestPointLength(t,{segmentSubdivisions:this.getConnectionSubdivisions()}):null},getClosestPointRatio:function(t){var e=this.path;return e?e.closestPointNormalizedLength(t,{segmentSubdivisions:this.getConnectionSubdivisions()}):null},getLabelPosition:function(t,e,i,n){var r,o={},s=0;(r="number"==typeof i?(s=i,n):i)&&(o.args=r);var a,l,c=!(r&&r.absoluteDistance),g=r&&r.absoluteDistance&&r.reverseDistance,h=r&&r.absoluteOffset,u=this.path,d={segmentSubdivisions:this.getConnectionSubdivisions()},f=new E(t,e),p=u.closestPointT(f,d),I=u.lengthAtT(p,d);if(c&&(I=I/this.getConnectionLength()||0),g&&(I=-1*(this.getConnectionLength()-I)||1),o.distance=I,h||(a=u.tangentAtT(p)),a)l=a.pointOffset(f);else{var m=u.pointAtT(p),A=f.difference(m);l={x:A.x,y:A.y}}return o.offset=l,o.angle=s,o},_getLabelTransformationMatrix:function(t){var e,i=0,n={};if("number"==typeof t)e=t;else{if("number"!=typeof t.distance)throw new Error("dia.LinkView: invalid label position distance.");n=t.args||{},e=t.distance,i=t.angle||0}var r=0<e&&e<=1,o=0,s={x:0,y:0};if(t.offset){var a=t.offset;"number"==typeof a&&(o=a),a.x&&(s.x=a.x),a.y&&(s.y=a.y)}var l,c=0!==s.x||0!==s.y||0===o,g=n.keepGradient,h=n.ensureLegibility,u=this.path,d={segmentSubdivisions:this.getConnectionSubdivisions()},f=r?e*this.getConnectionLength():e,p=u.tangentAtLength(f,d),I=i;if(p){if(c)(l=p.start).offset(s);else{var m=p.clone();m.rotate(p.start,-90),m.setLength(o),l=m.end}g&&(I=p.angle()+i,h&&(I=C((I+90)%180-90)))}else l=u.start,c&&l.offset(s);return q.createSVGMatrix().translate(l.x,l.y).rotate(I)},getLabelCoordinates:function(t){var e=this._getLabelTransformationMatrix(t);return new E(e.e,e.f)},getVertexIndex:function(t,e){for(var i=this.model.vertices(),n=this.getClosestPointLength(new E(t,e)),r=0,o=i.length;r<o;r++){var s=i[r];if(n<this.getClosestPointLength(s))break}return r},notifyPointerdown:function(t,e,i){qe.prototype.pointerdown.call(this,t,e,i),this.notify("link:pointerdown",t,e,i)},notifyPointermove:function(t,e,i){qe.prototype.pointermove.call(this,t,e,i),this.notify("link:pointermove",t,e,i)},notifyPointerup:function(t,e,i){this.notify("link:pointerup",t,e,i),qe.prototype.pointerup.call(this,t,e,i)},pointerdblclick:function(t,e,i){qe.prototype.pointerdblclick.apply(this,arguments),this.notify("link:pointerdblclick",t,e,i)},pointerclick:function(t,e,i){qe.prototype.pointerclick.apply(this,arguments),this.notify("link:pointerclick",t,e,i)},contextmenu:function(t,e,i){qe.prototype.contextmenu.apply(this,arguments),this.notify("link:contextmenu",t,e,i)},pointerdown:function(t,e,i){switch(this.notifyPointerdown(t,e,i),t.target.getAttribute("class")){case"marker-vertex":return void this.dragVertexStart(t,e,i);case"marker-vertex-remove":case"marker-vertex-remove-area":return void this.dragVertexRemoveStart(t,e,i);case"marker-arrowhead":return void this.dragArrowheadStart(t,e,i);case"connection":case"connection-wrap":return void this.dragConnectionStart(t,e,i);case"marker-source":case"marker-target":return}this.dragStart(t,e,i)},pointermove:function(t,e,i){var n=this._dragData;switch(n&&this.eventData(t,n),this.eventData(t).action){case"vertex-move":this.dragVertex(t,e,i);break;case"label-move":this.dragLabel(t,e,i);break;case"arrowhead-move":this.dragArrowhead(t,e,i);break;case"move":this.drag(t,e,i)}n&&jt(n,this.eventData(t)),this.notifyPointermove(t,e,i)},pointerup:function(t,e,i){var n=this._dragData;switch(n&&(this.eventData(t,n),this._dragData=null),this.eventData(t).action){case"vertex-move":this.dragVertexEnd(t,e,i);break;case"label-move":this.dragLabelEnd(t,e,i);break;case"arrowhead-move":this.dragArrowheadEnd(t,e,i);break;case"move":this.dragEnd(t,e,i)}this.notifyPointerup(t,e,i),this.checkMouseleave(t)},mouseover:function(t){qe.prototype.mouseover.apply(this,arguments),this.notify("link:mouseover",t)},mouseout:function(t){qe.prototype.mouseout.apply(this,arguments),this.notify("link:mouseout",t)},mouseenter:function(t){qe.prototype.mouseenter.apply(this,arguments),this.notify("link:mouseenter",t)},mouseleave:function(t){qe.prototype.mouseleave.apply(this,arguments),this.notify("link:mouseleave",t)},mousewheel:function(t,e,i,n){qe.prototype.mousewheel.apply(this,arguments),this.notify("link:mousewheel",t,e,i,n)},onevent:function(t,e,i,n){if(q(t.target).findParentByClass("link-tool",this.el)){if(t.stopPropagation(),this.can("useLinkTools")){if("remove"===e)return void this.model.remove({ui:!0});this.notify(e,t,i,n)}this.notifyPointerdown(t,i,n)}else qe.prototype.onevent.apply(this,arguments)},onlabel:function(t,e,i){this.notifyPointerdown(t,e,i),this.dragLabelStart(t,e,i),this.eventData(t).stopPropagation&&t.stopPropagation()},dragConnectionStart:function(t,e,i){if(this.can("vertexAdd")){var n=this.addVertex({x:e,y:i},{ui:!0});this.eventData(t,{action:"vertex-move",vertexIdx:n})}},dragLabelStart:function(t,e,i){if(this.can("labelMove")){var n=t.currentTarget,r=parseInt(n.getAttribute("label-idx"),10),o=this._getLabelPositionAngle(r),s=this._getLabelPositionArgs(r),a=this._getDefaultLabelPositionArgs(),l=this._mergeLabelPositionArgs(s,a);this.eventData(t,{action:"label-move",labelIdx:r,positionAngle:o,positionArgs:l,stopPropagation:!0})}else this.eventData(t,{stopPropagation:!0});this.paper.delegateDragEvents(this,t.data)},dragVertexStart:function(t,e,i){if(this.can("vertexMove")){var n=t.target,r=parseInt(n.getAttribute("idx"),10);this.eventData(t,{action:"vertex-move",vertexIdx:r})}},dragVertexRemoveStart:function(t,e,i){if(this.can("vertexRemove")){var n=t.target,r=parseInt(n.getAttribute("idx"),10);this.model.removeVertex(r)}},dragArrowheadStart:function(t,e,i){if(this.can("arrowheadMove")){var n=t.target.getAttribute("end"),r=this.startArrowheadMove(n,{ignoreBackwardsCompatibility:!0});this.eventData(t,r)}},dragStart:function(t,e,i){this.can("linkMove")&&this.eventData(t,{action:"move",dx:e,dy:i})},dragLabel:function(t,e,i){var n=this.eventData(t),r={position:this.getLabelPosition(e,i,n.positionAngle,n.positionArgs)};this.model.label(n.labelIdx,r)},dragVertex:function(t,e,i){var n=this.eventData(t);this.model.vertex(n.vertexIdx,{x:e,y:i},{ui:!0})},dragArrowhead:function(t,e,i){var n=this.eventData(t);this.paper.options.snapLinks?this._snapArrowhead(e,i,n):this._connectArrowhead(this.getEventTarget(t),e,i,n)},drag:function(t,e,i){var n=this.eventData(t);this.model.translate(e-n.dx,i-n.dy,{ui:!0}),this.eventData(t,{dx:e,dy:i})},dragLabelEnd:function(){},dragVertexEnd:function(){},dragArrowheadEnd:function(t,e,i){var n=this.eventData(t),r=this.paper;r.options.snapLinks?this._snapArrowheadEnd(n):this._connectArrowheadEnd(n,e,i),r.linkAllowed(this)?(this._finishEmbedding(n),this._notifyConnectEvent(n,t)):this._disallow(n),this._afterArrowheadMove(n)},dragEnd:function(){},_disallow:function(t){switch(t.whenNotAllowed){case"remove":this.model.remove({ui:!0});break;case"revert":default:this.model.set(t.arrowhead,t.initialEnd,{ui:!0})}},_finishEmbedding:function(t){this.paper.options.embeddingMode&&this.model.reparent()&&(t.z=null)},_notifyConnectEvent:function(t,e){var i=t.arrowhead,n=t.initialEnd,r=this.model.prop(i);if(r&&!We.endsEqual(n,r)){var o=this.paper;n.id&&this.notify("link:disconnect",e,o.findViewByModel(n.id),t.initialMagnet,i),r.id&&this.notify("link:connect",e,o.findViewByModel(r.id),t.magnetUnderPointer,i)}},_snapArrowhead:function(t,e,r){var o,s=this.paper.options.snapLinks.radius||50,i=this.paper.findViewsInArea({x:t-s,y:e-s,width:2*s,height:2*s}),n=r.closestView||null,a=r.closestMagnet||null;r.closestView=r.closestMagnet=null;var l,c=Number.MAX_VALUE,g=E(t,e),h=this.paper;i.forEach(function(n){"false"!==n.el.getAttribute("magnet")&&(o=n.model.getBBox().center().distance(g))<s&&o<c&&(a===n.el||h.options.validateConnection.apply(h,r.validateConnectionArgs(n,null)))&&(c=o,r.closestView=n,r.closestMagnet=n.el),n.$("[magnet]").each(function(t,e){var i=n.getNodeBBox(e);(o=g.distance({x:i.x+i.width/2,y:i.y+i.height/2}))<s&&o<c&&(a===e||h.options.validateConnection.apply(h,r.validateConnectionArgs(n,e)))&&(c=o,r.closestView=n,r.closestMagnet=e)}.bind(this))},this);var u=r.closestView,d=r.closestMagnet,f=r.arrowhead,p=a!==d;if(n&&p&&n.unhighlight(a,{connecting:!0,snapping:!0}),u){if(!p)return;u.highlight(d,{connecting:!0,snapping:!0}),l=u.getLinkEnd(d,t,e,this.model,f)}else l={x:t,y:e};this.model.set(f,l||{x:t,y:e},{ui:!0})},_snapArrowheadEnd:function(t){var e=t.closestView,i=t.closestMagnet;e&&i&&(e.unhighlight(i,{connecting:!0,snapping:!0}),t.magnetUnderPointer=e.findMagnet(i)),t.closestView=t.closestMagnet=null},_connectArrowhead:function(t,e,i,n){n.eventTarget!==t&&(n.magnetUnderPointer&&n.viewUnderPointer.unhighlight(n.magnetUnderPointer,{connecting:!0}),n.viewUnderPointer=this.paper.findView(t),n.viewUnderPointer?(n.magnetUnderPointer=n.viewUnderPointer.findMagnet(t),n.magnetUnderPointer&&this.paper.options.validateConnection.apply(this.paper,n.validateConnectionArgs(n.viewUnderPointer,n.magnetUnderPointer))?n.magnetUnderPointer&&n.viewUnderPointer.highlight(n.magnetUnderPointer,{connecting:!0}):n.magnetUnderPointer=null):n.magnetUnderPointer=null),n.eventTarget=t,this.model.set(n.arrowhead,{x:e,y:i},{ui:!0})},_connectArrowheadEnd:function(t,e,i){var n=t.viewUnderPointer,r=t.magnetUnderPointer;if(r&&n){n.unhighlight(r,{connecting:!0});var o=t.arrowhead,s=n.getLinkEnd(r,e,i,this.model,o);this.model.set(o,s,{ui:!0})}},_beforeArrowheadMove:function(t){t.z=this.model.get("z"),this.model.toFront();var e=this.el.style;t.pointerEvents=e.pointerEvents,e.pointerEvents="none",this.paper.options.markAvailable&&this._markAvailableMagnets(t)},_afterArrowheadMove:function(t){null!==t.z&&(this.model.set("z",t.z,{ui:!0}),t.z=null),this.el.style.pointerEvents=t.pointerEvents,this.paper.options.markAvailable&&this._unmarkAvailableMagnets(t)},_createValidateConnectionArgs:function(t){var e,i=[];i[4]=t,i[5]=this;var n=0,r=0;e="source"===t?(n=2,"target"):(r=2,"source");var o=this.model.get(e);if(o.id){var s=i[n]=this.paper.findViewByModel(o.id),a=s.getMagnetFromLinkEnd(o);a===s.el&&(a=void 0),i[n+1]=a}return function(t,e){return i[r]=t,i[r+1]=t.el===e?void 0:e,i}},_markAvailableMagnets:function(t){function e(t,e){var i=t.paper;return i.options.validateConnection.apply(i,this.validateConnectionArgs(t,e))}var i=this.paper,n=i.model.getCells();t.marked={};for(var r=0,o=n.length;r<o;r++){var s=n[r].findView(i);if(s){var a=Array.prototype.slice.call(s.el.querySelectorAll("[magnet]"));"false"!==s.el.getAttribute("magnet")&&a.push(s.el);var l=a.filter(e.bind(t,s));if(0<l.length){for(var c=0,g=l.length;c<g;c++)s.highlight(l[c],{magnetAvailability:!0});s.highlight(null,{elementAvailability:!0}),t.marked[s.model.id]=l}}}},_unmarkAvailableMagnets:function(t){for(var e,i,n=Object.keys(t.marked),r=0,o=n.length;r<o;r++){e=n[r],i=t.marked[e];var s=this.paper.findViewByModel(e);if(s){for(var a=0,l=i.length;a<l;a++)s.unhighlight(i[a],{magnetAvailability:!0});s.unhighlight(null,{elementAvailability:!0})}}t.marked=null},startArrowheadMove:function(t,e){e||(e={});var i={action:"arrowhead-move",arrowhead:t,whenNotAllowed:e.whenNotAllowed||"revert",initialMagnet:this[t+"Magnet"]||(this[t+"View"]?this[t+"View"].el:null),initialEnd:Bt(this.model.get(t)),validateConnectionArgs:this._createValidateConnectionArgs(t)};return this._beforeArrowheadMove(i),!0!==e.ignoreBackwardsCompatibility&&(this._dragData=i),i}});Object.defineProperty(Vi.prototype,"sourceBBox",{enumerable:!0,get:function(){var t=this.sourceView;if(!t){var e=this.model.source();return new H(e.x,e.y)}var i=this.sourceMagnet;return t.isNodeConnection(i)?new H(this.sourceAnchor):t.getNodeBBox(i||t.el)}}),Object.defineProperty(Vi.prototype,"targetBBox",{enumerable:!0,get:function(){var t=this.targetView;if(!t){var e=this.model.target();return new H(e.x,e.y)}var i=this.targetMagnet;return t.isNodeConnection(i)?new H(this.targetAnchor):t.getNodeBBox(i||t.el)}});var Fi={stroke:{defaultOptions:{padding:3,rx:0,ry:0,attrs:{"stroke-width":3,stroke:"#FEB663"}},_views:{},getHighlighterId:function(t,e){return t.id+JSON.stringify(e)},removeHighlighter:function(t){this._views[t]&&(this._views[t].remove(),this._views[t]=null)},highlight:function(t,e,i){var n=this.getHighlighterId(e,i);if(!this._views[n]){var r,o=Tt(i||{},this.defaultOptions),s=q(e);try{var a=s.convertToPathData()}catch(t){r=s.bbox(!0),a=q.rectToPath(jt({},o,r))}var l=q("path").attr({d:a,"pointer-events":"none","vector-effect":"non-scaling-stroke",fill:"none"}).attr(o.attrs);if(t.isNodeConnection(e))l.attr("d",t.getSerializedConnection());else{var c=s.getTransformToElement(t.el),g=o.padding;if(g){r||(r=s.bbox(!0));var h=r.x+r.width/2,u=r.y+r.height/2;r=q.transformRect(r,c);var d=Math.max(r.width,1),f=Math.max(r.height,1),p=(d+g)/d,I=(f+g)/f,m=q.createSVGMatrix({a:p,b:0,c:0,d:I,e:h-p*h,f:u-I*u});c=c.multiply(m)}l.transform(c)}var A=this._views[n]=new _e({svgElement:!0,className:"highlight-stroke",el:l.node}),v=this.removeHighlighter.bind(this,n),C=t.model;A.listenTo(C,"remove",v),A.listenTo(C.graph,"reset",v),t.vel.append(l)}},unhighlight:function(t,e,i){this.removeHighlighter(this.getHighlighterId(e,i))}},opacity:{highlight:function(t,e){q(e).addClass(tt("highlight-opacity"))},unhighlight:function(t,e){q(e).removeClass(tt("highlight-opacity"))}},addClass:{className:tt("highlighted"),highlight:function(t,e,i){var n=(i||{}).className||this.className;q(e).addClass(n)},unhighlight:function(t,e,i){var n=(i||{}).className||this.className;q(e).removeClass(n)}}};function Ji(s){return function(t,e,i,n){if(i instanceof Element){var r,o=this.paper.findView(i);if(o)if(o.isNodeConnection(i))r=Hi(o,"fixedAt"in n?n.fixedAt:"50%");else r=o.getNodeBBox(i).center();else r=new E;return s.call(this,t,e,r,n)}return s.apply(this,arguments)}}function Hi(t,e){var i=parseFloat(e);return ft(e)?t.getPointAtRatio(i/100):t.getPointAtLength(i)}var Qi=Ji(function(t,e,i,n){var r=t.getConnection(),o=t.getConnectionSubdivisions(),s=new B(i.clone().offset(0,1e6),i.clone().offset(0,-1e6)),a=new B(i.clone().offset(1e6,0),i.clone().offset(-1e6,0)),l=s.intersect(r,{segmentSubdivisions:o}),c=a.intersect(r,{segmentSubdivisions:o}),g=[];return l&&Array.prototype.push.apply(g,l),c&&Array.prototype.push.apply(g,c),0<g.length?i.chooseClosest(g):"fallbackAt"in n?Hi(t,n.fallbackAt):_i(t,e,i,n)}),_i=Ji(function(t,e,i,n){var r=t.getClosestPoint(i);return r||new E}),Ki={resolveRef:Ji,connectionRatio:function(t,e,i,n){var r="ratio"in n?n.ratio:.5;return t.getPointAtRatio(r)},connectionLength:function(t,e,i,n){var r="length"in n?n.length:20;return t.getPointAtLength(r)},connectionPerpendicular:Qi,connectionClosest:_i};function qi(t,e,i){if(!isFinite(i))return t;var n=t.distance(e);return 0===i&&0<n?t:t.move(e,-Math.min(i,n-1))}function $i(t){var e=t.getAttribute("stroke-width");return null===e?0:parseFloat(e)||0}function tn(t,e,i,n){var r=e.getNodeBBox(i);n.stroke&&r.inflate($i(i)/2);var o=t.intersect(r);return qi(o?t.start.chooseClosest(o):t.end,t.start,n.offset)}var en="segmentSubdivisons",nn="shapeBBox";var rn={anchor:function(t,e,i,n){return qi(t.end,t.start,n.offset)},bbox:tn,rectangle:function(t,e,i,n){var r=e.model.angle();if(0===r)return tn(t,e,i,n);var o=e.getNodeUnrotatedBBox(i);n.stroke&&o.inflate($i(i)/2);var s=o.center(),a=t.clone().rotate(s,r),l=a.setLength(1e6).intersect(o);return qi(l?a.start.chooseClosest(l).rotate(s,-r):t.end,t.start,n.offset)},boundary:function(t,e,i,n){var r,o,s=n.selector,a=t.end;if(r="string"==typeof s?e.findBySelector(s)[0]:Array.isArray(s)?rt(i,s):function(t){if(!t)return null;var e=t;do{var i=e.tagName;if("string"!=typeof i)return null;if("G"===(i=i.toUpperCase()))e=e.firstElementChild;else{if("TITLE"!==i)break;e=e.nextElementSibling}}while(e);return e}(i),!q.isSVGGraphicsElement(r)){if(r===i||!q.isSVGGraphicsElement(i))return a;r=i}var l,c=e.getNodeShape(r),g=e.getNodeMatrix(r),h=e.getRootTranslateMatrix(),u=e.getRootRotateMatrix(),d=h.multiply(u).multiply(g),f=d.inverse(),p=q.transformLine(t,f),I=p.start.clone(),m=e.getNodeData(r);if(!1===n.insideout&&(m[nn]||(m[nn]=c.bbox()),m[nn].containsPoint(I)))return a;if(c instanceof O){var A=n.precision||2;m[en]||(m[en]=c.getSegmentSubdivisions({precision:A})),l={precision:A,segmentSubdivisions:m[en]}}!0===n.extrapolate&&p.setLength(1e6),(o=p.intersect(c,l))?q.isArray(o)&&(o=I.chooseClosest(o)):!0===n.sticky&&(o=c instanceof H?c.pointNearestToPoint(I):c instanceof w?c.intersectionWithLineFromCenterToPoint(I):c.closestPoint(I,l));var v=o?q.transformPoint(o,d):a,C=n.offset||0;return n.stroke&&(C+=$i(r)/2),qi(v,t.start,C)}};function on(h){return function(t,e,i,n){var r=!!n.rotate,o=r?t.getNodeUnrotatedBBox(e):t.getNodeBBox(e),s=o[h](),a=n.dx;if(a){var l=ft(a);a=parseFloat(a),isFinite(a)&&(l&&(a/=100,a*=o.width),s.x+=a)}var c=n.dy;if(c){var g=ft(c);c=parseFloat(c),isFinite(c)&&(g&&(c/=100,c*=o.height),s.y+=c)}return r?s.rotate(t.model.getBBox().center(),-t.model.angle()):s}}var sn={center:on("center"),top:on("topMiddle"),bottom:on("bottomMiddle"),left:on("leftMiddle"),right:on("rightMiddle"),topLeft:on("origin"),topRight:on("topRight"),bottomLeft:on("bottomLeft"),bottomRight:on("corner"),perpendicular:Ji(function(t,e,i,n){var r=t.model.angle(),o=t.getNodeBBox(e),s=o.center(),a=o.origin(),l=o.corner(),c=n.padding;if(isFinite(c)||(c=0),a.y+c<=i.y&&i.y<=l.y-c){var g=i.y-s.y;s.x+=0===r||180===r?0:1*g/Math.tan(y(r)),s.y+=g}else if(a.x+c<=i.x&&i.x<=l.x-c){var h=i.x-s.x;s.y+=90===r||270===r?0:h*Math.tan(y(r)),s.x+=h}return s}),midSide:Ji(function(t,e,i,n){var r,o,s,a=!!n.rotate;a?(r=t.getNodeUnrotatedBBox(e),s=t.model.getBBox().center(),o=t.model.angle()):r=t.getNodeBBox(e);var l,c=n.padding;switch(isFinite(c)&&r.inflate(c),a&&i.rotate(s,o),r.sideNearestToPoint(i)){case"left":l=r.leftMiddle();break;case"right":l=r.rightMiddle();break;case"top":l=r.topMiddle();break;case"bottom":l=r.bottomMiddle()}return a?l.rotate(s,-o):l}),modelCenter:function(t,e,i,n,r){return t.model.getPointFromConnectedLink(this.model,r).offset(n.dx,n.dy)}},an={NONE:"sorting-none",APPROX:"sorting-approximate",EXACT:"sorting-exact"},ln=1<<30,cn=1<<29,gn=_e.extend({className:"paper",options:{width:800,height:600,origin:{x:0,y:0},gridSize:1,drawGrid:!1,background:!1,perpendicularLinks:!1,elementView:$e,linkView:Vi,snapLinks:!1,multiLinks:!0,guard:function(t,e){return!1},highlighting:{default:{name:"stroke",options:{padding:3}},magnetAvailability:{name:"addClass",options:{className:"available-magnet"}},elementAvailability:{name:"addClass",options:{className:"available-cell"}}},preventContextMenu:!0,preventDefaultBlankAction:!0,restrictTranslate:!1,markAvailable:!1,defaultLink:new We,defaultConnector:{name:"normal"},defaultRouter:{name:"normal"},defaultAnchor:{name:"center"},defaultLinkAnchor:{name:"connectionRatio"},defaultConnectionPoint:{name:"bbox"},connectionStrategy:null,validateMagnet:function(t,e,i){return"passive"!==e.getAttribute("magnet")},validateConnection:function(t,e,i,n,r,o){return("target"===r?i:t)instanceof $e},embeddingMode:!1,validateEmbedding:function(t,e){return!0},findParentBy:"bbox",frontParentOnly:!0,interactive:{labelMove:!1},linkPinning:!0,allowLink:null,clickThreshold:0,moveThreshold:0,magnetThreshold:0,sorting:an.EXACT,frozen:!1,onViewUpdate:function(t,e,i,n){e&ln||i.mounting||n.requestConnectedLinksUpdate(t,i)},onViewPostponed:function(t,e){return this.forcePostponedViewUpdate(t,e)},viewport:null,cellViewNamespace:null,highlighterNamespace:Fi,anchorNamespace:sn,linkAnchorNamespace:Ki,connectionPointNamespace:rn},events:{dblclick:"pointerdblclick",contextmenu:"contextmenu",mousedown:"pointerdown",touchstart:"pointerdown",mouseover:"mouseover",mouseout:"mouseout",mouseenter:"mouseenter",mouseleave:"mouseleave",mousewheel:"mousewheel",DOMMouseScroll:"mousewheel","mouseenter .joint-cell":"mouseenter","mouseleave .joint-cell":"mouseleave","mouseenter .joint-tools":"mouseenter","mouseleave .joint-tools":"mouseleave","mousedown .joint-cell [event]":"onevent","touchstart .joint-cell [event]":"onevent","mousedown .joint-cell [magnet]":"onmagnet","touchstart .joint-cell [magnet]":"onmagnet","dblclick .joint-cell [magnet]":"magnetpointerdblclick","contextmenu .joint-cell [magnet]":"magnetcontextmenu","mousedown .joint-link .label":"onlabel","touchstart .joint-link .label":"onlabel","dragstart .joint-cell image":"onImageDragStart"},documentEvents:{mousemove:"pointermove",touchmove:"pointermove",mouseup:"pointerup",touchend:"pointerup",touchcancel:"pointerup"},svg:null,viewport:null,defs:null,tools:null,$background:null,layers:null,$grid:null,$document:null,_highlights:null,_zPivots:null,_viewportMatrix:null,_viewportTransformString:null,_updates:null,SORT_DELAYING_BATCHES:["add","to-front","to-back"],UPDATE_DELAYING_BATCHES:["translate"],MIN_SCALE:1e-6,init:function(){var t=this.options,e=this.el;t.cellViewNamespace||(t.cellViewNamespace=void 0!==joint&&qt(joint,"shapes")?joint.shapes:null);var i=this.model=t.model||new He;this.setGrid(t.drawGrid),this.cloneOptions(),this.render(),this.setDimensions(),this.startListening(),this._views={},this._zPivots={},this.$document=S(e.ownerDocument),this._highlights={},this.resetViews(i.attributes.cells.models),!this.isFrozen()&&this.isAsync()&&this.updateViewsAsync()},_resetUpdates:function(){return this._updates={id:null,priorities:[{},{},{}],unmountedCids:[],mountedCids:[],unmounted:{},mounted:{},count:0,keyFrozen:!1,freezeKey:null,sort:!1}},startListening:function(){var t=this.model;this.listenTo(t,"add",this.onCellAdded).listenTo(t,"remove",this.onCellRemoved).listenTo(t,"change",this.onCellChange).listenTo(t,"reset",this.onGraphReset).listenTo(t,"sort",this.onGraphSort).listenTo(t,"batch:stop",this.onGraphBatchStop),this.on("cell:highlight",this.onCellHighlight).on("cell:unhighlight",this.onCellUnhighlight).on("scale translate",this.update)},onCellAdded:function(t,e,i){var n=i.position;this.isAsync()||!ce(n)?this.renderView(t,i):(i.maxPosition===n&&this.freeze({key:"addCells"}),this.renderView(t,i),0===n&&this.unfreeze({key:"addCells"}))},onCellRemoved:function(t,e,i){var n=this.findViewByModel(t);n&&this.requestViewUpdate(n,cn,n.UPDATE_PRIORITY,i)},onCellChange:function(t,e){if(t!==this.model.attributes.cells&&t.hasChanged("z")&&this.options.sorting===an.APPROX){var i=this.findViewByModel(t);i&&this.requestViewUpdate(i,ln,i.UPDATE_PRIORITY,e)}},onGraphReset:function(t,e){this.removeZPivots(),this.resetViews(t.models,e)},onGraphSort:function(){this.model.hasActiveBatch(this.SORT_DELAYING_BATCHES)||this.sortViews()},onGraphBatchStop:function(t){if(!this.isFrozen()){var e=t&&t.batchName,i=this.model;if(!this.isAsync()){var n=this.UPDATE_DELAYING_BATCHES;n.includes(e)&&!i.hasActiveBatch(n)&&this.updateViews(t)}var r=this.SORT_DELAYING_BATCHES;r.includes(e)&&!i.hasActiveBatch(r)&&this.sortViews()}},cloneOptions:function(){var t=this.options;t.origin=jt({},t.origin),t.defaultConnector=jt({},t.defaultConnector),t.highlighting=Zt({},t.highlighting,this.constructor.prototype.options.highlighting),!t.cellViewNamespace&&void 0!==joint&&qt(joint,"shapes")&&(t.cellViewNamespace=joint.shapes)},children:function(){var t=q.namespace;return[{namespaceURI:t.xhtml,tagName:"div",className:tt("paper-background"),selector:"background"},{namespaceURI:t.xhtml,tagName:"div",className:tt("paper-grid"),selector:"grid"},{namespaceURI:t.svg,tagName:"svg",attributes:{width:"100%",height:"100%","xmlns:xlink":t.xlink},selector:"svg",children:[{tagName:"defs",selector:"defs"},{tagName:"g",className:tt("layers"),selector:"layers",children:[{tagName:"g",className:tt("cells-layer viewport"),selector:"cells"},{tagName:"g",className:tt("tools-layer"),selector:"tools"}]}]}]},render:function(){this.renderChildren();var t=this.childNodes,e=this.options,i=t.svg,n=t.cells,r=t.defs,o=t.tools,s=t.layers,a=t.background,l=t.grid;return this.svg=i,this.defs=r,this.tools=o,this.cells=n,this.layers=s,this.$background=S(a),this.$grid=S(l),q.ensureId(i),this.viewport=n,e.background&&this.drawBackground(e.background),e.drawGrid&&this.drawGrid(),this},update:function(){return this.options.drawGrid&&this.drawGrid(),this._background&&this.updateBackgroundImage(this._background),this},matrix:function(t){var e=this.layers;if(void 0===t){var i=e.getAttribute("transform");return(this._viewportTransformString||null)===i?t=this._viewportMatrix:(t=e.getCTM(),this._viewportMatrix=t,this._viewportTransformString=i),q.createSVGMatrix(t)}t=q.createSVGMatrix(t);var n=q.matrixToTransformString(t);return e.setAttribute("transform",n),this._viewportMatrix=t,this._viewportTransformString=e.getAttribute("transform"),this},clientMatrix:function(){return q.createSVGMatrix(this.cells.getScreenCTM())},requestConnectedLinksUpdate:function(t,e){if(t instanceof qe)for(var i=t.model,n=this.model.getConnectedLinks(i),r=0,o=n.length;r<o;r++){var s=n[r],a=this.findViewByModel(s);if(a){var l=["UPDATE"];s.getTargetCell()===i&&l.push("TARGET"),s.getSourceCell()===i&&l.push("SOURCE"),this.scheduleViewUpdate(a,a.getFlag(l),a.UPDATE_PRIORITY,e)}}},forcePostponedViewUpdate:function(t,e){if(!(t&&t instanceof qe))return!1;var i=t.model;if(i.isElement())return!1;if(0==(e&t.getFlag(["SOURCE","TARGET"]))){var n=0,r=this.findViewByModel(i.getSourceCell());r&&!this.isViewMounted(r)&&(n=this.dumpView(r),t.updateEndMagnet("source"));var o=0,s=this.findViewByModel(i.getTargetCell());if(s&&!this.isViewMounted(s)&&(o=this.dumpView(s),t.updateEndMagnet("target")),0===n&&0===o)return!!this.dumpView(t)}return!1},requestViewUpdate:function(t,e,i,n){n||(n={}),this.scheduleViewUpdate(t,e,i,n);var r=this.isAsync();if(!(this.isFrozen()||r&&!1!==n.async||this.model.hasActiveBatch(this.UPDATE_DELAYING_BATCHES))){var o=this.updateViews(n);r&&this.trigger("render:done",o,n)}},scheduleViewUpdate:function(t,e,i,n){var r=this._updates,o=r.priorities[i];o||(o=r.priorities[i]={});var s=o[t.cid]||0;if((s&e)!==e){s||r.count++,e&cn&&s&ln?o[t.cid]^=ln:e&ln&&s&cn&&(o[t.cid]^=cn),o[t.cid]|=e;var a=this.options.onViewUpdate;"function"==typeof a&&a.call(this,t,e,n||{},this)}},dumpViewUpdate:function(t){if(!t)return 0;var e=this._updates,i=t.cid,n=e.priorities[t.UPDATE_PRIORITY],r=this.registerMountedView(t)|n[i];return delete n[i],r},dumpView:function(t,e){var i=this.dumpViewUpdate(t);return i?this.updateView(t,i,e):0},updateView:function(t,e,i){if(!t)return 0;if(t instanceof qe){if(e&cn)return this.removeView(t.model),0;e&ln&&(this.insertView(t),e^=ln)}return e?t.confirmUpdate(e,i||{}):0},requireView:function(t,e){var i=this.findViewByModel(t);return i?(this.dumpView(i,e),i):null},registerUnmountedView:function(t){var e=t.cid,i=this._updates;if(e in i.unmounted)return 0;var n=i.unmounted[e]|=ln;return i.unmountedCids.push(e),delete i.mounted[e],n},registerMountedView:function(t){var e=t.cid,i=this._updates;if(e in i.mounted)return 0;i.mounted[e]=!0,i.mountedCids.push(e);var n=i.unmounted[e]||0;return delete i.unmounted[e],n},isViewMounted:function(t){return!!t&&t.cid in this._updates.mounted},dumpViews:function(t){var e=Tt({},t,{viewport:null});this.checkViewport(e),this.updateViews(e)},updateViews:function(t){for(var e,i=0,n=0,r=2;n++,i+=(e=this.updateViewsBatch(t)).updated,r=Math.min(e.priority,r),!e.empty;);return{updated:i,batches:n,priority:r}},updateViewsAsync:function(t,e){t||(t={}),e||(e={processed:0,priority:2});var i=this._updates,n=i.id;if(n){dt(n);var r=this.updateViewsBatch(t),o=Tt({},t,{mountBatchSize:1e3-r.mounted,unmountBatchSize:1e3-r.unmounted}),s=this.checkViewport(o),a=s.unmounted,l=s.mounted,c=e.processed,g=i.count;0<r.updated&&(c+=r.updated+r.unmounted,r.processed=c,e.priority=Math.min(r.priority,e.priority),r.empty&&0===l?(r.unmounted+=a,r.mounted+=l,r.priority=e.priority,this.trigger("render:done",r,t),e.processed=0,i.count=0):e.processed=c);var h=t.progress;if(g&&"function"==typeof h&&h.call(this,r.empty,c,g,r,this),i.id!==n)return}i.id=ut(this.updateViewsAsync,this,t,e)},updateViewsBatch:function(t){t||(t={});var e=t.batchSize||1/0,i=this._updates,n=0,r=0,o=0,s=0,a=2,l=!0,c=this.options,g=i.priorities,h="viewport"in t?t.viewport:c.viewport;"function"!=typeof h&&(h=null);var u=c.onViewPostponed;"function"!=typeof u&&(u=null);t:for(var d=0,f=g.length;d<f;d++){var p=g[d];for(var I in p){if(e<=n){l=!1;break t}var m=Qe[I];if(m){var A=p[I];if(0==(A&cn)){var v=I in i.unmounted;if(h&&!h.call(this,m,v,this)){v||(this.registerUnmountedView(m),m.unmount()),i.unmounted[I]|=A,delete p[I],o++;continue}v&&(A|=ln,s++),A|=this.registerMountedView(m)}var C=this.updateView(m,A,t);0<C&&(p[I]=C,!u||!u.call(this,m,C,this)||p[I])?(r++,l=!1):(d<a&&(a=d),n++,delete p[I])}else delete p[I]}}return{priority:a,updated:n,postponed:r,unmounted:o,mounted:s,empty:l}},getUnmountedViews:function(){for(var t=this._updates,e=Object.keys(t.unmounted),i=e.length,n=new Array(i),r=0;r<i;r++)n[r]=Qe[e[r]];return n},getMountedViews:function(){for(var t=this._updates,e=Object.keys(t.mounted),i=e.length,n=new Array(i),r=0;r<i;r++)n[r]=Qe[e[r]];return n},checkUnmountedViews:function(t,e){e||(e={});var i=0;"function"!=typeof t&&(t=null);for(var n=("mountBatchSize"in e?e.mountBatchSize:1/0),r=this._updates,o=r.unmountedCids,s=r.unmounted,a=0,l=Math.min(o.length,n);a<l;a++){var c=o[a];if(c in s){var g=Qe[c];if(g)if(!t||t.call(this,g,!1,this)){i++;var h=this.registerMountedView(g);h&&this.scheduleViewUpdate(g,h,g.UPDATE_PRIORITY,{mounting:!0})}else o.push(c)}}return o.splice(0,a),i},checkMountedViews:function(t,e){e||(e={});var i=0;if("function"!=typeof t)return i;for(var n=("unmountBatchSize"in e?e.unmountBatchSize:1/0),r=this._updates,o=r.mountedCids,s=r.mounted,a=0,l=Math.min(o.length,n);a<l;a++){var c=o[a];if(c in s){var g=Qe[c];if(g)if(t.call(this,g,!0,this))o.push(c);else i++,this.registerUnmountedView(g)&&g.unmount()}}return o.splice(0,a),i},checkViewport:function(t){var e=Tt({},t,{mountBatchSize:1/0,unmountBatchSize:1/0}),i="viewport"in e?e.viewport:this.options.viewport,n=this.checkMountedViews(i,e);if(0<n){var r=this._updates.unmountedCids;e.mountBatchSize=Math.min(r.length-n,e.mountBatchSize)}return{mounted:this.checkUnmountedViews(i,e),unmounted:n}},freeze:function(t){t||(t={});var e=this._updates,i=t.key,n=this.options.frozen,r=e.freezeKey;if(i&&i!==r){if(n&&r)return;e.freezeKey=i,e.keyFrozen=n}this.options.frozen=!0;var o=e.id;e.id=null,this.isAsync()&&o&&dt(o)},unfreeze:function(t){t||(t={});var e=this._updates,i=t.key,n=e.freezeKey;i&&n&&i!==n||(e.freezeKey=null,i&&i===n&&e.keyFrozen||(this.isAsync()?(this.freeze(),this.updateViewsAsync(t)):this.updateViews(t),this.options.frozen=e.keyFrozen=!1,e.sort&&(this.sortViews(),e.sort=!1)))},isAsync:function(){return!!this.options.async},isFrozen:function(){return!!this.options.frozen},isExactSorting:function(){return this.options.sorting===an.EXACT},onRemove:function(){this.freeze(),this.removeViews()},getComputedSize:function(){var t=this.options,e=t.width,i=t.height;return ce(e)||(e=this.el.clientWidth),ce(i)||(i=this.el.clientHeight),{width:e,height:i}},setDimensions:function(t,e){var i=this.options,n=void 0===t?i.width:t,r=void 0===e?i.height:e;this.options.width=n,this.options.height=r,ce(n)&&(n=Math.round(n)),ce(r)&&(r=Math.round(r)),this.$el.css({width:null===n?"":n,height:null===r?"":r});var o=this.getComputedSize();this.trigger("resize",o.width,o.height)},setOrigin:function(t,e){return this.translate(t||0,e||0,{absolute:!0})},fitToContent:function(t,e,i,n){i=le(t)?(t=(n=t).gridWidth||1,e=n.gridHeight||1,n.padding||0):(n||(n={}),t=t||1,e=e||1,i||0),i=wt(i);var r="contentArea"in n?new H(n.contentArea):this.getContentArea(n),o=this.scale(),s=this.translate(),a=o.sx,l=o.sy;r.x*=a,r.y*=l,r.width*=a,r.height*=l;var c=Math.max(Math.ceil((r.width+r.x)/t),1)*t,g=Math.max(Math.ceil((r.height+r.y)/e),1)*e,h=0,u=0;("negative"==n.allowNewOrigin&&r.x<0||"positive"==n.allowNewOrigin&&0<=r.x||"any"==n.allowNewOrigin)&&(h=Math.ceil(-r.x/t)*t,c+=h+=i.left),("negative"==n.allowNewOrigin&&r.y<0||"positive"==n.allowNewOrigin&&0<=r.y||"any"==n.allowNewOrigin)&&(u=Math.ceil(-r.y/e)*e,g+=u+=i.top),c+=i.right,g+=i.bottom,c=Math.max(c,n.minWidth||0),g=Math.max(g,n.minHeight||0),c=Math.min(c,n.maxWidth||Number.MAX_VALUE),g=Math.min(g,n.maxHeight||Number.MAX_VALUE);var d=this.getComputedSize(),f=c!=d.width||g!=d.height;return(h!=s.tx||u!=s.ty)&&this.translate(h,u),f&&this.setDimensions(c,g),new H(-h/a,-u/l,c/a,g/l)},scaleContentToFit:function(t){var e,i;if(t||(t={}),"contentArea"in t){var n=t.contentArea;e=this.localToPaperRect(n),i=new E(n)}else e=this.getContentBBox(t),i=this.paperToLocalPoint(e);if(e.width&&e.height){Tt(t,{padding:0,preserveAspectRatio:!0,scaleGrid:null,minScale:0,maxScale:Number.MAX_VALUE});var r,o=t.padding,s=t.minScaleX||t.minScale,a=t.maxScaleX||t.maxScale,l=t.minScaleY||t.minScale,c=t.maxScaleY||t.maxScale;if(t.fittingBBox)r=t.fittingBBox;else{var g=this.translate(),h=this.getComputedSize();r={x:g.tx,y:g.ty,width:h.width,height:h.height}}r=new H(r).inflate(-o);var u=this.scale(),d=r.width/e.width*u.sx,f=r.height/e.height*u.sy;if(t.preserveAspectRatio&&(d=f=Math.min(d,f)),t.scaleGrid){var p=t.scaleGrid;d=p*Math.floor(d/p),f=p*Math.floor(f/p)}d=Math.min(a,Math.max(s,d)),f=Math.min(c,Math.max(l,f));var I=this.options.origin,m=r.x-i.x*d-I.x,A=r.y-i.y*f-I.y;this.scale(d,f),this.translate(m,A)}},getContentArea:function(t){return t&&t.useModelGeometry?this.model.getBBox()||new H:q(this.cells).getBBox()},getContentBBox:function(t){return this.localToPaperRect(this.getContentArea(t))},getArea:function(){return this.paperToLocalRect(this.getComputedSize())},getRestrictedArea:function(){return Rt(this.options.restrictTranslate)?this.options.restrictTranslate.apply(this,arguments):!0===this.options.restrictTranslate?this.getArea():this.options.restrictTranslate||null},createViewForModel:function(t){var e,i,n=this.options.cellViewNamespace,r=t.get("type")+"View",o=rt(n,r,".");return i=t.isLink()?(e=this.options.linkView,Vi):(e=this.options.elementView,$e),new(e.prototype instanceof s.View?o||e:e.call(this,t)||o||i)({model:t,interactive:this.options.interactive})},removeView:function(t){var e=t.id,i=this._views,n=this._updates,r=i[e];if(r){var o=r.cid,s=n.mounted,a=n.unmounted;r.remove(),delete i[e],delete s[o],delete a[o]}return r},renderView:function(t,e){var i,n,r=t.id,o=this._views;return n=r in o?(i=o[r],ln):((i=o[t.id]=this.createViewForModel(t)).paper=this).registerUnmountedView(i)|i.getFlag(i.initFlag),this.requestViewUpdate(i,n,i.UPDATE_PRIORITY,e),i},onImageDragStart:function(){return!1},resetViews:function(t,e){e||(e={}),t||(t=[]),this._resetUpdates(),this.removeViews(),this.freeze({key:"reset"});for(var i=0,n=t.length;i<n;i++)this.renderView(t[i],e);this.unfreeze({key:"reset"}),this.sortViews()},removeViews:function(){Lt(this._views,"remove"),this._views={}},sortViews:function(){this.isExactSorting()&&(this.isFrozen()?this._updates.sort=!0:this.sortViewsExact())},sortViewsExact:function(){var t=S(this.cells).children("[model-id]"),s=this.model.get("cells");Ct(t,function(t,e){var i=s.get(t.getAttribute("model-id")),n=s.get(e.getAttribute("model-id")),r=i.attributes.z||0,o=n.attributes.z||0;return r===o?0:r<o?-1:1})},insertView:function(t){var e=this.cells;switch(this.options.sorting){case an.APPROX:var i=t.model.get("z"),n=this.addZPivot(i);e.insertBefore(t.el,n);break;case an.EXACT:default:e.appendChild(t.el)}},addZPivot:function(t){(t=+t)||(t=0);var e=this._zPivots,i=e[t];if(i)return i;i=e[t]=document.createComment("z-index:"+(t+1));var n=-1/0;for(var r in e)(r=+r)<t&&n<r&&(n=r);var o=this.cells;if(n!==-1/0){var s=e[n];o.insertBefore(i,s.nextSibling)}else o.insertBefore(i,o.firstChild);return i},removeZPivots:function(){var t=this._zPivots,e=this.viewport;for(var i in t)e.removeChild(t[i]);this._zPivots={}},scale:function(t,e,i,n){if(void 0===t)return q.matrixToScale(this.matrix());void 0===e&&(e=t),void 0===i&&(n=i=0);var r=this.translate();if(i||n||r.tx||r.ty){var o=r.tx-i*(t-1),s=r.ty-n*(e-1);this.translate(o,s)}t=Math.max(t||0,this.MIN_SCALE),e=Math.max(e||0,this.MIN_SCALE);var a=this.matrix();return a.a=t,a.d=e,this.matrix(a),this.trigger("scale",t,e,i,n),this},rotate:function(t,e,i){if(void 0===t)return q.matrixToRotate(this.matrix());if(void 0===e){var n=this.cells.getBBox();e=n.width/2,i=n.height/2}var r=this.matrix().translate(e,i).rotate(t).translate(-e,-i);return this.matrix(r),this},translate:function(t,e){if(void 0===t)return q.matrixToTranslate(this.matrix());var i=this.matrix();i.e=t||0,i.f=e||0,this.matrix(i);var n=this.translate(),r=this.options.origin;return r.x=n.tx,r.y=n.ty,this.trigger("translate",n.tx,n.ty),this.options.drawGrid&&this.drawGrid(),this},findView:function(t){var e=ge(t)?this.cells.querySelector(t):t instanceof S?t[0]:t,i=this.findAttribute("model-id",e);if(i)return this._views[i]},findViewByModel:function(t){var e=ge(t)||ce(t)?t:t&&t.id;return this._views[e]},findViewsFromPoint:function(e){return e=new E(e),this.model.getElements().map(this.findViewByModel,this).filter(function(t){return t&&t.vel.getBBox({target:this.cells}).containsPoint(e)},this)},findViewsInArea:function(e,t){t=Tt(t||{},{strict:!1}),e=new H(e);var i=this.model.getElements().map(this.findViewByModel,this),n=t.strict?"containsRect":"intersect";return i.filter(function(t){return t&&e[n](t.vel.getBBox({target:this.cells}))},this)},removeTools:function(){return this.dispatchToolsEvent("remove"),this},hideTools:function(){return this.dispatchToolsEvent("hide"),this},showTools:function(){return this.dispatchToolsEvent("show"),this},dispatchToolsEvent:function(t){for(var e,i=[],n=arguments.length-1;0<n--;)i[n]=arguments[n+1];"string"==typeof t&&(e=this).trigger.apply(e,["tools:event",t].concat(i))},getModelById:function(t){return this.model.getCell(t)},snapToGrid:function(t,e){return this.clientToLocalPoint(t,e).snapToGrid(this.options.gridSize)},localToPaperPoint:function(t,e){var i=new E(t,e);return q.transformPoint(i,this.matrix())},localToPaperRect:function(t,e,i,n){var r=new H(t,e,i,n);return q.transformRect(r,this.matrix())},paperToLocalPoint:function(t,e){var i=new E(t,e);return q.transformPoint(i,this.matrix().inverse())},paperToLocalRect:function(t,e,i,n){var r=new H(t,e,i,n);return q.transformRect(r,this.matrix().inverse())},localToClientPoint:function(t,e){var i=new E(t,e);return q.transformPoint(i,this.clientMatrix())},localToClientRect:function(t,e,i,n){var r=new H(t,e,i,n);return q.transformRect(r,this.clientMatrix())},clientToLocalPoint:function(t,e){var i=new E(t,e);return q.transformPoint(i,this.clientMatrix().inverse())},clientToLocalRect:function(t,e,i,n){var r=new H(t,e,i,n);return q.transformRect(r,this.clientMatrix().inverse())},localToPagePoint:function(t,e){return this.localToPaperPoint(t,e).offset(this.pageOffset())},localToPageRect:function(t,e,i,n){return this.localToPaperRect(t,e,i,n).offset(this.pageOffset())},pageToLocalPoint:function(t,e){var i=new E(t,e).difference(this.pageOffset());return this.paperToLocalPoint(i)},pageToLocalRect:function(t,e,i,n){var r=this.pageOffset(),o=new H(t,e,i,n);return o.x-=r.x,o.y-=r.y,this.paperToLocalRect(o)},clientOffset:function(){var t=this.svg.getBoundingClientRect();return new E(t.left,t.top)},pageOffset:function(){return this.clientOffset().offset(window.scrollX,window.scrollY)},linkAllowed:function(t){if(!(t instanceof Vi))throw new Error("Must provide a linkView.");var e=t.model,i=this.options,n=this.model,r=n.constructor.validations;return!(!i.multiLinks&&!r.multiLinks.call(this,n,e))&&(!(!i.linkPinning&&!r.linkPinning.call(this,n,e))&&!("function"==typeof i.allowLink&&!i.allowLink.call(this,t,this)))},getDefaultLink:function(t,e){return Rt(this.options.defaultLink)?this.options.defaultLink.call(this,t,e):this.options.defaultLink.clone()},resolveHighlighter:function(e){var t=(e=e||{}).highlighter,i=this.options;if(void 0===t){var n=["embedding","connecting","magnetAvailability","elementAvailability"].find(function(t){return!!e[t]});t=n&&i.highlighting[n]||i.highlighting.default}if(!t)return!1;ge(t)&&(t={name:t});var r=t.name,o=i.highlighterNamespace[r];if(!o)throw new Error('Unknown highlighter ("'+r+'")');if("function"!=typeof o.highlight)throw new Error('Highlighter ("'+r+'") is missing required highlight() method');if("function"!=typeof o.unhighlight)throw new Error('Highlighter ("'+r+'") is missing required unhighlight() method');return{highlighter:o,options:t.options||{},name:r}},onCellHighlight:function(t,e,i){if(i=this.resolveHighlighter(i)){e.id||(e.id=q.uniqueId());var n=i.name+e.id+JSON.stringify(i.options);if(!this._highlights[n]){var r=i.highlighter;r.highlight(t,e,jt({},i.options)),this._highlights[n]={cellView:t,magnetEl:e,opt:i.options,highlighter:r}}}},onCellUnhighlight:function(t,e,i){if(i=this.resolveHighlighter(i)){var n=i.name+e.id+JSON.stringify(i.options),r=this._highlights[n];r&&(r.highlighter.unhighlight(r.cellView,r.magnetEl,r.opt),this._highlights[n]=null)}},pointerdblclick:function(t){t.preventDefault(),t=ht(t);var e=this.findView(t.target);if(!this.guard(t,e)){var i=this.snapToGrid(t.clientX,t.clientY);e?e.pointerdblclick(t,i.x,i.y):this.trigger("blank:pointerdblclick",t,i.x,i.y)}},pointerclick:function(t){if(this.eventData(t).mousemoved<=this.options.clickThreshold){t=ht(t);var e=this.findView(t.target);if(this.guard(t,e))return;var i=this.snapToGrid(t.clientX,t.clientY);e?e.pointerclick(t,i.x,i.y):this.trigger("blank:pointerclick",t,i.x,i.y)}},contextmenu:function(t){this.options.preventContextMenu&&t.preventDefault(),t=ht(t);var e=this.findView(t.target);if(!this.guard(t,e)){var i=this.snapToGrid(t.clientX,t.clientY);e?e.contextmenu(t,i.x,i.y):this.trigger("blank:contextmenu",t,i.x,i.y)}},pointerdown:function(t){t=ht(t);var e=this.findView(t.target);if(!this.guard(t,e)){var i=this.snapToGrid(t.clientX,t.clientY);e?(t.preventDefault(),e.pointerdown(t,i.x,i.y)):(this.options.preventDefaultBlankAction&&t.preventDefault(),this.trigger("blank:pointerdown",t,i.x,i.y)),this.delegateDragEvents(e,t.data)}},pointermove:function(t){var e=this.eventData(t);if(e.mousemoved||(e.mousemoved=0),!(++e.mousemoved<=this.options.moveThreshold)){t=ht(t);var i=this.snapToGrid(t.clientX,t.clientY),n=e.sourceView;n?n.pointermove(t,i.x,i.y):this.trigger("blank:pointermove",t,i.x,i.y),this.eventData(t,e)}},pointerup:function(t){this.undelegateDocumentEvents();var e=ht(t),i=this.snapToGrid(e.clientX,e.clientY),n=this.eventData(t).sourceView;n?n.pointerup(e,i.x,i.y):this.trigger("blank:pointerup",e,i.x,i.y),e.isPropagationStopped()||this.pointerclick(S.Event(t,{type:"click",data:t.data})),t.stopImmediatePropagation(),this.delegateEvents()},mouseover:function(t){t=ht(t);var e=this.findView(t.target);if(!this.guard(t,e))if(e)e.mouseover(t);else{if(this.el===t.target)return;this.trigger("blank:mouseover",t)}},mouseout:function(t){t=ht(t);var e=this.findView(t.target);if(!this.guard(t,e))if(e)e.mouseout(t);else{if(this.el===t.target)return;this.trigger("blank:mouseout",t)}},mouseenter:function(t){t=ht(t);var e=this.findView(t.target);if(!this.guard(t,e)){var i=this.findView(t.relatedTarget);if(e){if(i===e)return;e.mouseenter(t)}else{if(i)return;this.trigger("paper:mouseenter",t)}}},mouseleave:function(t){t=ht(t);var e=this.findView(t.target);if(!this.guard(t,e)){var i=this.findView(t.relatedTarget);if(e){if(i===e)return;e.mouseleave(t)}else{if(i)return;this.trigger("paper:mouseleave",t)}}},mousewheel:function(t){t=ht(t);var e=this.findView(t.target);if(!this.guard(t,e)){var i=t.originalEvent,n=this.snapToGrid(i.clientX,i.clientY),r=Math.max(-1,Math.min(1,i.wheelDelta||-i.detail));e?e.mousewheel(t,n.x,n.y,r):this.trigger("blank:mousewheel",t,n.x,n.y,r)}},onevent:function(t){var e=t.currentTarget,i=e.getAttribute("event");if(i){var n=this.findView(e);if(n){if(t=ht(t),this.guard(t,n))return;var r=this.snapToGrid(t.clientX,t.clientY);n.onevent(t,i,r.x,r.y)}}},magnetEvent:function(t,e){var i=t.currentTarget;if(i.getAttribute("magnet")){var n=this.findView(i);if(n){if(t=ht(t),this.guard(t,n))return;var r=this.snapToGrid(t.clientX,t.clientY);e.call(this,n,t,i,r.x,r.y)}}},onmagnet:function(t){this.magnetEvent(t,function(t,e,i,n,r){t.onmagnet(e,n,r)})},magnetpointerdblclick:function(t){this.magnetEvent(t,function(t,e,i,n,r){t.magnetpointerdblclick(e,i,n,r)})},magnetcontextmenu:function(t){this.options.preventContextMenu&&t.preventDefault(),this.magnetEvent(t,function(t,e,i,n,r){t.magnetcontextmenu(e,i,n,r)})},onlabel:function(t){var e=t.currentTarget,i=this.findView(e);if(i){if(t=ht(t),this.guard(t,i))return;var n=this.snapToGrid(t.clientX,t.clientY);i.onlabel(t,n.x,n.y)}},getPointerArgs:function(t){var e=ht(t),i=this.snapToGrid(e.clientX,e.clientY);return[e,i.x,i.y]},delegateDragEvents:function(t,e){e||(e={}),this.eventData({data:e},{sourceView:t||null,mousemoved:0}),this.delegateDocumentEvents(null,e),this.undelegateEvents()},guard:function(t,e){return"mousedown"===t.type&&2===t.button||(!(!this.options.guard||!this.options.guard(t,e))||(t.data&&void 0!==t.data.guarded?t.data.guarded:!(e&&e.model&&e.model instanceof Se)&&(this.svg!==t.target&&this.el!==t.target&&!S.contains(this.svg,t.target))))},setGridSize:function(t){return this.options.gridSize=t,this.options.drawGrid&&this.drawGrid(),this},clearGrid:function(){return this.$grid&&this.$grid.css("backgroundImage","none"),this},_getGridRefs:function(){return this._gridCache||(this._gridCache={root:q("svg",{width:"100%",height:"100%"},q("defs")),patterns:{},add:function(t,e){q(this.root.node.childNodes[0]).append(e),this.patterns[t]=e,this.root.append(q("rect",{width:"100%",height:"100%",fill:"url(#"+t+")"}))},get:function(t){return this.patterns[t]},exist:function(t){return void 0!==this.patterns[t]}}),this._gridCache},setGrid:function(t){return this.clearGrid(),this._gridCache=null,this._gridSettings=[],(Array.isArray(t)?t:[t||{}]).forEach(function(t){this._gridSettings.push.apply(this._gridSettings,this._resolveDrawGridOption(t))},this),this},_resolveDrawGridOption:function(t){var e=this.constructor.gridPatterns;if(ge(t)&&Array.isArray(e[t]))return e[t].map(function(t){return jt({},t)});var i=t||{args:[{}]},n=Array.isArray(i),r=i.name;if(n||r||i.markup||(r="dot"),r&&Array.isArray(e[r])){var o=e[r].map(function(t){return jt({},t)}),s=Array.isArray(i.args)?i.args:[i.args||{}];Tt(s[0],te(t,"args"));for(var a=0;a<s.length;a++)o[a]&&jt(o[a],s[a]);return o}return n?i:[i]},drawGrid:function(t){var a=this.options.gridSize;if(a<=1)return this.clearGrid();var l=Array.isArray(t)?t:[t],c=this.matrix(),g=this._getGridRefs();this._gridSettings.forEach(function(t,e){var i="pattern_"+e,n=se(t,l[e],{sx:c.a||1,sy:c.d||1,ox:c.e||0,oy:c.f||0});n.width=a*(c.a||1)*(n.scaleFactor||1),n.height=a*(c.d||1)*(n.scaleFactor||1),g.exist(i)||g.add(i,q("pattern",{id:i,patternUnits:"userSpaceOnUse"},q(n.markup)));var r=g.get(i);Rt(n.update)&&n.update(r.node.childNodes[0],n);var o=n.ox%n.width;o<0&&(o+=n.width);var s=n.oy%n.height;s<0&&(s+=n.height),r.attr({x:o,y:s,width:n.width,height:n.height})});var e=(new XMLSerializer).serializeToString(g.root.node);return e="url(data:image/svg+xml;base64,"+btoa(e)+")",this.$grid.css("backgroundImage",e),this},updateBackgroundImage:function(t){var e=(t=t||{}).position||"center",i=t.size||"auto auto",n=this.scale(),r=this.translate();le(e)&&(e=r.tx+n.sx*(e.x||0)+"px "+(r.ty+n.sy*(e.y||0))+"px");le(i)&&(i=(i=new H(i).scale(n.sx,n.sy)).width+"px "+i.height+"px"),this.$background.css({backgroundSize:i,backgroundPosition:e})},drawBackgroundImage:function(t,e){if(t instanceof HTMLImageElement){var i,n=(e=e||{}).size,r=e.repeat||"no-repeat",o=e.opacity||1,s=Math.abs(e.quality)||1,a=this.constructor.backgroundPatterns[re(r)];if(Rt(a)){t.width*=s,t.height*=s;var l=a(t,e);if(!(l instanceof HTMLCanvasElement))throw new Error("dia.Paper: background pattern must return an HTML Canvas instance");i=l.toDataURL("image/png"),r="repeat",le(n)?(n.width*=l.width/t.width,n.height*=l.height/t.height):void 0===n&&(e.size={width:l.width/s,height:l.height/s})}else i=t.src,void 0===n&&(e.size={width:t.width,height:t.height});this.$background.css({opacity:o,backgroundRepeat:r,backgroundImage:"url("+i+")"}),this.updateBackgroundImage(e)}else this.$background.css("backgroundImage","")},updateBackgroundColor:function(t){this.$el.css("backgroundColor",t||"")},drawBackground:function(t){if(t=t||{},this.updateBackgroundColor(t.color),t.image){t=this._background=Ot(t);var e=document.createElement("img");e.onload=this.drawBackgroundImage.bind(this,e,t),e.src=t.image}else this.drawBackgroundImage(null),this._background=null;return this},setInteractivity:function(t){this.options.interactive=t,Lt(this._views,"setInteractivity",t)},isDefined:function(t){return!!this.svg.getElementById(t)},defineFilter:function(t){if(!le(t))throw new TypeError("dia.Paper: defineFilter() requires 1. argument to be an object.");var e=t.id,i=t.name;if(e||(e=i+this.svg.id+nt(JSON.stringify(t))),!this.isDefined(e)){var n=Nt,r=n[i]&&n[i](t.args||{});if(!r)throw new Error("Non-existing filter "+i);var o=jt({filterUnits:"objectBoundingBox",x:-1,y:-1,width:3,height:3},t.attrs,{id:e});q(r,o).appendTo(this.defs)}return e},defineGradient:function(t){if(!le(t))throw new TypeError("dia.Paper: defineGradient() requires 1. argument to be an object.");var e=t.id,i=t.type,n=t.stops;if(e||(e=i+this.svg.id+nt(JSON.stringify(t))),!this.isDefined(e)){var r=xt('<stop offset="${offset}" stop-color="${color}" stop-opacity="${opacity}"/>'),o=["<"+i+">",Ut(n).map(function(t){return r({offset:t.offset,color:t.color,opacity:Number.isFinite(t.opacity)?t.opacity:1})}).join(""),"</"+i+">"].join(""),s=jt({id:e},t.attrs);q(o,s).appendTo(this.defs)}return e},defineMarker:function(t){if(!le(t))throw new TypeError("dia.Paper: defineMarker() requires 1. argument to be an object.");var e=t.id;if(e||(e=this.svg.id+nt(JSON.stringify(t))),!this.isDefined(e)){var i=te(t,"type","userSpaceOnUse");q("marker",{id:e,orient:"auto",overflow:"visible",markerUnits:t.markerUnits||"userSpaceOnUse"},[q(t.type||"path",i)]).appendTo(this.defs)}return e}},{sorting:an,backgroundPatterns:{flipXy:function(t){var e=document.createElement("canvas"),i=t.width,n=t.height;e.width=2*i,e.height=2*n;var r=e.getContext("2d");return r.drawImage(t,0,0,i,n),r.setTransform(-1,0,0,-1,e.width,e.height),r.drawImage(t,0,0,i,n),r.setTransform(-1,0,0,1,e.width,0),r.drawImage(t,0,0,i,n),r.setTransform(1,0,0,-1,0,e.height),r.drawImage(t,0,0,i,n),e},flipX:function(t){var e=document.createElement("canvas"),i=t.width,n=t.height;e.width=2*i,e.height=n;var r=e.getContext("2d");return r.drawImage(t,0,0,i,n),r.translate(2*i,0),r.scale(-1,1),r.drawImage(t,0,0,i,n),e},flipY:function(t){var e=document.createElement("canvas"),i=t.width,n=t.height;e.width=i,e.height=2*n;var r=e.getContext("2d");return r.drawImage(t,0,0,i,n),r.translate(0,2*n),r.scale(1,-1),r.drawImage(t,0,0,i,n),e},watermark:function(t,e){e=e||{};var i=t.width,n=t.height,r=document.createElement("canvas");r.width=3*i,r.height=3*n;for(var o=r.getContext("2d"),s=ce(e.watermarkAngle)?-e.watermarkAngle:-20,a=y(s),l=r.width/4,c=r.height/4,g=0;g<4;g++)for(var h=0;h<4;h++)0<(g+h)%2&&(o.setTransform(1,0,0,1,(2*g-1)*l,(2*h-1)*c),o.rotate(a),o.drawImage(t,-i/2,-n/2,i,n));return r}},gridPatterns:{dot:[{color:"#AAAAAA",thickness:1,markup:"rect",update:function(t,e){q(t).attr({width:e.thickness*e.sx,height:e.thickness*e.sy,fill:e.color})}}],fixedDot:[{color:"#AAAAAA",thickness:1,markup:"rect",update:function(t,e){var i=e.sx<=1?e.thickness*e.sx:e.thickness;q(t).attr({width:i,height:i,fill:e.color})}}],mesh:[{color:"#AAAAAA",thickness:1,markup:"path",update:function(t,e){var i,n=e.width,r=e.height,o=e.thickness;i=0<=n-o&&0<=r-o?["M",n,0,"H0 M0 0 V0",r].join(" "):"M 0 0 0 0",q(t).attr({d:i,stroke:e.color,"stroke-width":e.thickness})}}],doubleMesh:[{color:"#AAAAAA",thickness:1,markup:"path",update:function(t,e){var i,n=e.width,r=e.height,o=e.thickness;i=0<=n-o&&0<=r-o?["M",n,0,"H0 M0 0 V0",r].join(" "):"M 0 0 0 0",q(t).attr({d:i,stroke:e.color,"stroke-width":e.thickness})}},{color:"#000000",thickness:3,scaleFactor:4,markup:"path",update:function(t,e){var i,n=e.width,r=e.height,o=e.thickness;i=0<=n-o&&0<=r-o?["M",n,0,"H0 M0 0 V0",r].join(" "):"M 0 0 0 0",q(t).attr({d:i,stroke:e.color,"stroke-width":e.thickness})}}]}}),hn=_e.extend({name:null,tagName:"g",className:"tool",svgElement:!0,_visible:!0,init:function(){var t=this.name;t&&this.vel.attr("data-tool-name",t)},configure:function(t,e){return this.relatedView=t,this.paper=t.paper,this.parentView=e,this.simulateRelatedView(this.el),this.delegateEvents(),this},simulateRelatedView:function(t){t&&t.setAttribute("model-id",this.relatedView.model.id)},getName:function(){return this.name},show:function(){this.el.style.display="",this._visible=!0},hide:function(){this.el.style.display="none",this._visible=!1},isVisible:function(){return!!this._visible},focus:function(){var t=this.options.focusOpacity;isFinite(t)&&(this.el.style.opacity=t),this.parentView.focusTool(this)},blur:function(){this.el.style.opacity="",this.parentView.blurTool(this)},update:function(){},guard:function(t){var e=this.paper,i=this.relatedView;return!e||!i||e.guard(t,i)}}),un=_e.extend({tagName:"g",className:"tools",svgElement:!0,tools:null,options:{tools:null,relatedView:null,name:null,component:!1},configure:function(t){var e=(t=jt(this.options,t)).tools;if(!Array.isArray(e))return this;var i=t.relatedView;if(!(i instanceof qe))return this;for(var n=this.tools=[],r=0,o=e.length;r<o;r++){var s=e[r];s instanceof hn&&(s.configure(i,this),s.render(),this.vel.append(s.el),n.push(s))}return this},getName:function(){return this.options.name},update:function(t){t||(t={});var e=this.tools;if(e){for(var i=0,n=e.length;i<n;i++){var r=e[i];t.tool!==r.cid&&r.isVisible()&&r.update()}return this}},focusTool:function(t){var e=this.tools;if(!e)return this;for(var i=0,n=e.length;i<n;i++){var r=e[i];t===r?r.show():r.hide()}return this},blurTool:function(t){var e=this.tools;if(!e)return this;for(var i=0,n=e.length;i<n;i++){var r=e[i];r===t||r.isVisible()||(r.show(),r.update())}return this},hide:function(){return this.focusTool(null)},show:function(){return this.blurTool(null)},onRemove:function(){var t=this.tools;if(!t)return this;for(var e=0,i=t.length;e<i;e++)t[e].remove();this.tools=null},mount:function(){var t=this.options,e=t.relatedView;e&&(t.component?e.el:e.paper.tools).appendChild(this.el);return this}}),dn={ElementView:$e,Graph:He,Cell:Se,CellView:qe,Element:Fe,attributes:xe,Link:We,LinkView:Vi,Paper:gn,ToolView:hn,ToolsView:un},fn={exportElement:function(t){return t.size()},exportLink:function(t){var e=t.get("labelSize")||{};return{minLen:t.get("minLen")||1,weight:t.get("weight")||1,labelpos:t.get("labelPosition")||"c",labeloffset:t.get("labelOffset")||0,width:e.width||0,height:e.height||0}},importElement:function(t,e,i){var n=this.getCell(e),r=i.node(e);t.setPosition?t.setPosition(n,r):n.set("position",{x:r.x-r.width/2,y:r.y-r.height/2})},importLink:function(t,e,i){var n=this.getCell(e.name),r=i.edge(e),o=r.points||[],s=new D(o);if(t.setVertices||t.setLinkVertices)if(Rt(t.setVertices))t.setVertices(n,o);else{s.simplify({threshold:.001});var a=s.points.map(function(t){return t.toJSON()}),l=a.length;n.set("vertices",a.slice(1,l-1))}if(t.setLabels&&"x"in r&&"y"in r){var c={x:r.x,y:r.y};if(Rt(t.setLabels))t.setLabels(n,c,o);else{var g=s.closestPointLength(c),h=s.pointAtLength(g),u=g/s.length(),d=new E(c).difference(h).toJSON();n.label(0,{position:{distance:u,offset:d}})}}},layout:function(t,e){var i;i=t instanceof He?t:(new He).resetCells(t,{dry:!0,sort:!1});var n=(e=Tt(e||{},{resizeClusters:!(t=null),clusterPadding:10,exportElement:this.exportElement,exportLink:this.exportLink})).dagre||("undefined"!=typeof dagre?dagre:void 0);if(void 0===n)throw new Error('The the "dagre" utility is a mandatory dependency.');var r=fn.toGraphLib(i,{graphlib:e.graphlib,directed:!0,multigraph:!0,compound:!0,setNodeLabel:e.exportElement,setEdgeLabel:e.exportLink,setEdgeName:function(t){return t.id}}),o={},s=e.marginX||0,a=e.marginY||0;if(e.rankDir&&(o.rankdir=e.rankDir),e.align&&(o.align=e.align),e.nodeSep&&(o.nodesep=e.nodeSep),e.edgeSep&&(o.edgesep=e.edgeSep),e.rankSep&&(o.ranksep=e.rankSep),e.ranker&&(o.ranker=e.ranker),s&&(o.marginx=s),a&&(o.marginy=a),r.setGraph(o),n.layout(r,{debugTiming:!!e.debugTiming}),i.startBatch("layout"),fn.fromGraphLib(r,{importNode:this.importElement.bind(i,e),importEdge:this.importLink.bind(i,e)}),e.resizeClusters){var l=r.nodes().filter(function(t){return 0<r.children(t).length}).map(i.getCell.bind(i)).sort(function(t,e){return e.getAncestors().length-t.getAncestors().length});Lt(l,"fitEmbeds",{padding:e.clusterPadding})}i.stopBatch("layout");var c=r.graph();return new H(s,a,Math.abs(c.width-2*s),Math.abs(c.height-2*a))},fromGraphLib:function(e,i){var n=(i=i||{}).importNode||he,r=i.importEdge||he,o=this instanceof He?this:new He;return e.nodes().forEach(function(t){n.call(o,t,e,o,i)}),e.edges().forEach(function(t){r.call(o,t,e,o,i)}),o},toGraphLib:function(t,e){var i=(e=e||{}).graphlib||("undefined"!=typeof graphlib?graphlib:void 0);if(void 0===i)throw new Error('The the "graphlib" utility is a mandatory dependency.');for(var n=ee(e,"directed","compound","multigraph"),r=new i.Graph(n),o=e.setNodeLabel||he,s=e.setEdgeLabel||he,a=e.setEdgeName||he,l=t.get("cells"),c=0,g=l.length;c<g;c++){var h=l.at(c);if(h.isLink()){var u=h.get("source"),d=h.get("target");if(!u.id||!d.id)break;r.setEdge(u.id,d.id,s(h),a(h))}else if(r.setNode(h.id,o(h)),r.isCompound()&&h.has("parent")){var f=h.get("parent");l.has(f)&&r.setParent(h.id,f)}}return r}};He.prototype.toGraphLib=function(t){return fn.toGraphLib(this,t)},He.prototype.fromGraphLib=function(t,e){return fn.fromGraphLib.call(this,t,e)};var pn={_results:{},_tests:{svgforeignobject:function(){return!!document.createElementNS&&/SVGForeignObject/.test({}.toString.call(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")))}},addTest:function(t,e){return this._tests[t]=e},test:function(t){var e=this._tests[t];if(!e)throw new Error('Test not defined ("'+t+'"). Use `joint.env.addTest(name, fn) to add a new test.`');var i=this._results[t];if(void 0!==i)return i;try{i=e()}catch(t){i=!1}return this._results[t]=i}},In=Fe.define("basic.Generic",{attrs:{".":{fill:"#ffffff",stroke:"none"}}}),mn=In.define("basic.Rect",{attrs:{rect:{fill:"#ffffff",stroke:"#000000",width:100,height:60},text:{fill:"#000000",text:"","font-size":14,"ref-x":.5,"ref-y":.5,"text-anchor":"middle","y-alignment":"middle","font-family":"Arial, helvetica, sans-serif"}}},{markup:'<g class="rotatable"><g class="scalable"><rect/></g><text/></g>'}),An=$e.extend({presentationAttributes:$e.addPresentationAttributes({attrs:["SCALE"]}),confirmUpdate:function(){var t=$e.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"SCALE")&&(this.resize(),t=this.removeFlag(t,"SCALE")),t}}),vn=In.define("basic.Text",{attrs:{text:{"font-size":18,fill:"#000000"}}},{markup:'<g class="rotatable"><g class="scalable"><text/></g></g>'}),Cn=In.define("basic.Circle",{size:{width:60,height:60},attrs:{circle:{fill:"#ffffff",stroke:"#000000",r:30,cx:30,cy:30},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:'<g class="rotatable"><g class="scalable"><circle/></g><text/></g>'}),wn=In.define("basic.Ellipse",{size:{width:60,height:40},attrs:{ellipse:{fill:"#ffffff",stroke:"#000000",rx:30,ry:20,cx:30,cy:20},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:'<g class="rotatable"><g class="scalable"><ellipse/></g><text/></g>'}),yn=In.define("basic.Polygon",{size:{width:60,height:40},attrs:{polygon:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:'<g class="rotatable"><g class="scalable"><polygon/></g><text/></g>'}),bn=In.define("basic.Polyline",{size:{width:60,height:40},attrs:{polyline:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:'<g class="rotatable"><g class="scalable"><polyline/></g><text/></g>'}),Nn=In.define("basic.Image",{attrs:{text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:'<g class="rotatable"><g class="scalable"><image/></g><text/></g>'}),Mn=In.define("basic.Path",{size:{width:60,height:60},attrs:{path:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle",ref:"path","ref-x":.5,"ref-dy":10,fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:'<g class="rotatable"><g class="scalable"><path/></g><text/></g>'}),xn=Mn.define("basic.Rhombus",{attrs:{path:{d:"M 30 0 L 60 30 30 60 0 30 z"},text:{"ref-y":.5,"ref-dy":null,"y-alignment":"middle"}}}),Sn=pn.test("svgforeignobject"),kn=In.define("basic.TextBlock",{attrs:{rect:{fill:"#ffffff",stroke:"#000000",width:80,height:100},text:{fill:"#000000","font-size":14,"font-family":"Arial, helvetica, sans-serif"},".content":{text:"","ref-x":.5,"ref-y":.5,"y-alignment":"middle","x-alignment":"middle"}},content:""},{markup:['<g class="rotatable">','<g class="scalable"><rect/></g>',Sn?'<foreignObject class="fobj"><body xmlns="http://www.w3.org/1999/xhtml"><div class="content"/></body></foreignObject>':'<text class="content"/>',"</g>"].join(""),initialize:function(){this.listenTo(this,"change:size",this.updateSize),this.listenTo(this,"change:content",this.updateContent),this.updateSize(this,this.get("size")),this.updateContent(this,this.get("content")),In.prototype.initialize.apply(this,arguments)},updateSize:function(t,e){this.attr({".fobj":jt({},e),div:{style:jt({},e)}})},updateContent:function(t,e){Sn?this.attr({".content":{html:mt(e)}}):this.attr({".content":{text:e}})},setForeignObjectSize:function(){this.updateSize.apply(this,arguments)},setDivContent:function(){this.updateContent.apply(this,arguments)}}),Dn=$e.extend({presentationAttributes:Sn?$e.prototype.presentationAttributes:$e.addPresentationAttributes({content:["CONTENT"],size:["CONTENT"]}),initFlag:["RENDER","CONTENT"],confirmUpdate:function(){var t=$e.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"CONTENT")&&(this.updateContent(this.model),t=this.removeFlag(t,"CONTENT")),t},update:function(t,e){var i=this.model;if(Sn)$e.prototype.update.call(this,i,e);else{var n=te(e||i.get("attrs"),".content");$e.prototype.update.call(this,i,n),e&&!qt(e,".content")||this.updateContent(i,e)}},updateContent:function(t,e){var i=se({},(e||t.get("attrs"))[".content"]);i=te(i,"text");var n=It(t.get("content"),t.get("size"),i,{svgDocument:this.paper.svg}),r=ot({},".content",i,"/");r[".content"].text=n,$e.prototype.update.call(this,t,r)}}),zn={Generic:In,Rect:mn,TextView:An,Text:vn,Circle:Cn,Ellipse:wn,Polygon:yn,Polyline:bn,Image:Nn,Path:Mn,Rhombus:xn,TextBlock:kn,TextBlockView:Dn},jn=Fe.define("standard.Rectangle",{attrs:{body:{refWidth:"100%",refHeight:"100%",strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"text",selector:"label"}]}),Tn=Fe.define("standard.Circle",{attrs:{body:{refCx:"50%",refCy:"50%",refR:"50%",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"circle",selector:"body"},{tagName:"text",selector:"label"}]}),Zn=Fe.define("standard.Ellipse",{attrs:{body:{refCx:"50%",refCy:"50%",refRx:"50%",refRy:"50%",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"ellipse",selector:"body"},{tagName:"text",selector:"label"}]}),Ln=Fe.define("standard.Path",{attrs:{body:{refD:"M 0 0 L 10 0 10 10 0 10 Z",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"path",selector:"body"},{tagName:"text",selector:"label"}]}),Pn=Fe.define("standard.Polygon",{attrs:{body:{refPoints:"0 0 10 0 10 10 0 10",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"polygon",selector:"body"},{tagName:"text",selector:"label"}]}),Gn=Fe.define("standard.Polyline",{attrs:{body:{refPoints:"0 0 10 0 10 10 0 10 0 0",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"polyline",selector:"body"},{tagName:"text",selector:"label"}]}),Bn=Fe.define("standard.Image",{attrs:{image:{refWidth:"100%",refHeight:"100%"},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"image",selector:"image"},{tagName:"text",selector:"label"}]}),On=Fe.define("standard.BorderedImage",{attrs:{border:{refWidth:"100%",refHeight:"100%",stroke:"#333333",strokeWidth:2},background:{refWidth:-1,refHeight:-1,x:.5,y:.5,fill:"#FFFFFF"},image:{refWidth:-1,refHeight:-1,x:.5,y:.5},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"background",attributes:{stroke:"none"}},{tagName:"image",selector:"image"},{tagName:"rect",selector:"border",attributes:{fill:"none"}},{tagName:"text",selector:"label"}]}),En=Fe.define("standard.EmbeddedImage",{attrs:{body:{refWidth:"100%",refHeight:"100%",stroke:"#333333",fill:"#FFFFFF",strokeWidth:2},image:{refWidth:"30%",refHeight:-20,x:10,y:10,preserveAspectRatio:"xMidYMin"},label:{textVerticalAnchor:"top",textAnchor:"left",refX:"30%",refX2:20,refY:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"image",selector:"image"},{tagName:"text",selector:"label"}]}),Yn=Fe.define("standard.InscribedImage",{attrs:{border:{refRx:"50%",refRy:"50%",refCx:"50%",refCy:"50%",stroke:"#333333",strokeWidth:2},background:{refRx:"50%",refRy:"50%",refCx:"50%",refCy:"50%",fill:"#FFFFFF"},image:{refWidth:"68%",refHeight:"68%",refX:"16%",refY:"16%",preserveAspectRatio:"xMidYMid"},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"ellipse",selector:"background"},{tagName:"image",selector:"image"},{tagName:"ellipse",selector:"border",attributes:{fill:"none"}},{tagName:"text",selector:"label"}]}),Rn=Fe.define("standard.HeaderedRectangle",{attrs:{body:{refWidth:"100%",refHeight:"100%",strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},header:{refWidth:"100%",height:30,strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},headerText:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:15,fontSize:16,fill:"#333333"},bodyText:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",refY2:15,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"rect",selector:"header"},{tagName:"text",selector:"headerText"},{tagName:"text",selector:"bodyText"}]}),Wn=Fe.define("standard.Cylinder",{attrs:{body:{lateralArea:10,fill:"#FFFFFF",stroke:"#333333",strokeWidth:2},top:{refCx:"50%",cy:10,refRx:"50%",ry:10,fill:"#FFFFFF",stroke:"#333333",strokeWidth:2},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"100%",refY2:15,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"path",selector:"body"},{tagName:"ellipse",selector:"top"},{tagName:"text",selector:"label"}],topRy:function(t,e){if(void 0===t)return this.attr("body/lateralArea");var i={lateralArea:t},n=ft(t)?{refCy:t,refRy:t,cy:null,ry:null}:{refCy:null,refRy:null,cy:t,ry:t};return this.attr({body:i,top:n},e)}},{attributes:{lateralArea:{set:function(t,e){var i=ft(t);i&&(t=parseFloat(t)/100);var n=e.x,r=e.y,o=e.width,s=e.height,a=o/2,l=i?s*t:t,c=q.KAPPA,g=c*a,h=c*(i?s*t:t),u=n+o/2,d=n+o,f=r+l,p=f-l,I=r+s-l,m=r+s;return{d:["M",n,f,"L",n,I,"C",n,I+h,u-g,m,u,m,"C",u+g,m,d,I+h,d,I,"L",d,f,"C",d,f-h,u+g,p,u,p,"C",u-g,p,n,f-h,n,f,"Z"].join(" ")}}}}}),Un=pn.test("svgforeignobject")?{tagName:"foreignObject",selector:"foreignObject",attributes:{overflow:"hidden"},children:[{tagName:"div",namespaceURI:"http://www.w3.org/1999/xhtml",selector:"label",style:{width:"100%",height:"100%",position:"static",backgroundColor:"transparent",textAlign:"center",margin:0,padding:"0px 5px",boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center"}}]}:{tagName:"text",selector:"label",attributes:{"text-anchor":"middle"}},Xn={Rectangle:jn,Circle:Tn,Ellipse:Zn,Path:Ln,Polygon:Pn,Polyline:Gn,Image:Bn,BorderedImage:On,EmbeddedImage:En,InscribedImage:Yn,HeaderedRectangle:Rn,Cylinder:Wn,TextBlock:Fe.define("standard.TextBlock",{attrs:{body:{refWidth:"100%",refHeight:"100%",stroke:"#333333",fill:"#ffffff",strokeWidth:2},foreignObject:{refWidth:"100%",refHeight:"100%"},label:{style:{fontSize:14}}}},{markup:[{tagName:"rect",selector:"body"},Un]},{attributes:{text:{set:function(t,e,i,n){if(!(i instanceof HTMLElement)){var r=n.style||{},o={text:t,width:-5,height:"100%"},s=jt({textVerticalAnchor:"middle"},r);return xe.textWrap.set.call(this,o,e,i,s),{fill:r.color||null}}i.textContent=t},position:function(t,e,i){if(i instanceof SVGElement)return e.center()}}}}),Link:We.define("standard.Link",{attrs:{line:{connection:!0,stroke:"#333333",strokeWidth:2,strokeLinejoin:"round",targetMarker:{type:"path",d:"M 10 -5 0 0 10 5 z"}},wrapper:{connection:!0,strokeWidth:10,strokeLinejoin:"round"}}},{markup:[{tagName:"path",selector:"wrapper",attributes:{fill:"none",cursor:"pointer",stroke:"transparent","stroke-linecap":"round"}},{tagName:"path",selector:"line",attributes:{fill:"none","pointer-events":"none"}}]}),DoubleLink:We.define("standard.DoubleLink",{attrs:{line:{connection:!0,stroke:"#DDDDDD",strokeWidth:4,strokeLinejoin:"round",targetMarker:{type:"path",stroke:"#000000",d:"M 10 -3 10 -10 -2 0 10 10 10 3"}},outline:{connection:!0,stroke:"#000000",strokeWidth:6,strokeLinejoin:"round"}}},{markup:[{tagName:"path",selector:"outline",attributes:{fill:"none"}},{tagName:"path",selector:"line",attributes:{fill:"none"}}]}),ShadowLink:We.define("standard.ShadowLink",{attrs:{line:{connection:!0,stroke:"#FF0000",strokeWidth:20,strokeLinejoin:"round",targetMarker:{type:"path",stroke:"none",d:"M 0 -10 -10 0 0 10 z"},sourceMarker:{type:"path",stroke:"none",d:"M -10 -10 0 0 -10 10 0 10 0 -10 z"}},shadow:{connection:!0,refX:3,refY:6,stroke:"#000000",strokeOpacity:.2,strokeWidth:20,strokeLinejoin:"round",targetMarker:{type:"path",d:"M 0 -10 -10 0 0 10 z",stroke:"none"},sourceMarker:{type:"path",stroke:"none",d:"M -10 -10 0 0 -10 10 0 10 0 -10 z"}}}},{markup:[{tagName:"path",selector:"shadow",attributes:{fill:"none"}},{tagName:"path",selector:"line",attributes:{fill:"none"}}]})},Vn=In.define("devs.Model",{inPorts:[],outPorts:[],size:{width:80,height:80},attrs:{".":{magnet:!1},".label":{text:"Model","ref-x":.5,"ref-y":10,"font-size":18,"text-anchor":"middle",fill:"#000"},".body":{"ref-width":"100%","ref-height":"100%",stroke:"#000"}},ports:{groups:{in:{position:{name:"left"},attrs:{".port-label":{fill:"#000"},".port-body":{fill:"#fff",stroke:"#000",r:10,magnet:!0}},label:{position:{name:"left",args:{y:10}}}},out:{position:{name:"right"},attrs:{".port-label":{fill:"#000"},".port-body":{fill:"#fff",stroke:"#000",r:10,magnet:!0}},label:{position:{name:"right",args:{y:10}}}}}}},{markup:'<g class="rotatable"><rect class="body"/><text class="label"/></g>',portMarkup:'<circle class="port-body"/>',portLabelMarkup:'<text class="port-label"/>',initialize:function(){In.prototype.initialize.apply(this,arguments),this.on("change:inPorts change:outPorts",this.updatePortItems,this),this.updatePortItems()},updatePortItems:function(t,e,i){var n=Gt(this.get("inPorts")),r=Qt(Gt(this.get("outPorts")),n),o=this.createPortItems("in",n),s=this.createPortItems("out",r);this.prop("ports/items",o.concat(s),jt({rewrite:!0},i))},createPortItem:function(t,e){return{id:e,group:t,attrs:{".port-label":{text:e}}}},createPortItems:function(t,e){return Ut(e).map(this.createPortItem.bind(this,t))},_addGroupPort:function(t,e,i){var n=this.get(e);return this.set(e,Array.isArray(n)?n.concat(t):[t],i)},addOutPort:function(t,e){return this._addGroupPort(t,"outPorts",e)},addInPort:function(t,e){return this._addGroupPort(t,"inPorts",e)},_removeGroupPort:function(t,e,i){return this.set(e,Ht(this.get(e),t),i)},removeOutPort:function(t,e){return this._removeGroupPort(t,"outPorts",e)},removeInPort:function(t,e){return this._removeGroupPort(t,"inPorts",e)},_changeGroup:function(t,e,i){return this.prop("ports/groups/"+t,le(e)?e:{},i)},changeInGroup:function(t,e){return this._changeGroup("in",t,e)},changeOutGroup:function(t,e){return this._changeGroup("out",t,e)}}),Fn=Vn.define("devs.Atomic",{size:{width:80,height:80},attrs:{".label":{text:"Atomic"}}}),Jn=Vn.define("devs.Coupled",{size:{width:200,height:300},attrs:{".label":{text:"Coupled"}}}),Hn={Model:Vn,Atomic:Fn,Coupled:Jn,Link:We.define("devs.Link",{attrs:{".connection":{"stroke-width":2}}})},Qn=In.define("logic.Gate",{size:{width:80,height:40},attrs:{".":{magnet:!1},".body":{width:100,height:50},circle:{r:7,stroke:"black",fill:"transparent","stroke-width":2}}},{operation:function(){return!0}}),_n=Qn.define("logic.IO",{size:{width:60,height:30},attrs:{".body":{fill:"white",stroke:"black","stroke-width":2},".wire":{ref:".body","ref-y":.5,stroke:"black"},text:{fill:"black",ref:".body","ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle","font-weight":"bold","font-variant":"small-caps","text-transform":"capitalize","font-size":"14px"}}},{markup:'<g class="rotatable"><g class="scalable"><rect class="body"/></g><path class="wire"/><circle/><text/></g>'}),Kn=_n.define("logic.Input",{attrs:{".wire":{"ref-dx":0,d:"M 0 0 L 23 0"},circle:{ref:".body","ref-dx":30,"ref-y":.5,magnet:!0,class:"output",port:"out"},text:{text:"input"}}}),qn=_n.define("logic.Output",{attrs:{".wire":{"ref-x":0,d:"M 0 0 L -23 0"},circle:{ref:".body","ref-x":-30,"ref-y":.5,magnet:"passive",class:"input",port:"in"},text:{text:"output"}}}),$n=Qn.define("logic.Gate11",{attrs:{".input":{ref:".body","ref-x":-2,"ref-y":.5,magnet:"passive",port:"in"},".output":{ref:".body","ref-dx":2,"ref-y":.5,magnet:!0,port:"out"}}},{markup:'<g class="rotatable"><g class="scalable"><image class="body"/></g><circle class="input"/><circle class="output"/></g>'}),tr=Qn.define("logic.Gate21",{attrs:{".input1":{ref:".body","ref-x":-2,"ref-y":.3,magnet:"passive",port:"in1"},".input2":{ref:".body","ref-x":-2,"ref-y":.7,magnet:"passive",port:"in2"},".output":{ref:".body","ref-dx":2,"ref-y":.5,magnet:!0,port:"out"}}},{markup:'<g class="rotatable"><g class="scalable"><image class="body"/></g><circle class="input input1"/><circle class="input input2"/><circle class="output"/></g>'}),er=$n.define("logic.Repeater",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PVCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjgiCiAgICAgaW5rc2NhcGU6Y3g9Ijg0LjY4NTM1MiIKICAgICBpbmtzY2FwZTpjeT0iMTUuMjg4NjI4IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzIuMTU2OTEsMjUgTCA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAyOS4wNDM0NzgsMjUgTCA1LjA0MzQ3ODEsMjUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgZD0iTSAyOC45Njg3NSwyLjU5Mzc1IEwgMjguOTY4NzUsNSBMIDI4Ljk2ODc1LDQ1IEwgMjguOTY4NzUsNDcuNDA2MjUgTCAzMS4xMjUsNDYuMzQzNzUgTCA3Mi4xNTYyNSwyNi4zNDM3NSBMIDcyLjE1NjI1LDIzLjY1NjI1IEwgMzEuMTI1LDMuNjU2MjUgTCAyOC45Njg3NSwyLjU5Mzc1IHogTSAzMS45Njg3NSw3LjQwNjI1IEwgNjguMDkzNzUsMjUgTCAzMS45Njg3NSw0Mi41OTM3NSBMIDMxLjk2ODc1LDcuNDA2MjUgeiIKICAgICAgIGlkPSJwYXRoMjYzOCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjYyIgLz4KICA8L2c+Cjwvc3ZnPgo="}}},{operation:function(t){return t}}),ir=$n.define("logic.Not",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PVCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjgiCiAgICAgaW5rc2NhcGU6Y3g9Ijg0LjY4NTM1MiIKICAgICBpbmtzY2FwZTpjeT0iMTUuMjg4NjI4IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzkuMTU2OTEsMjUgTCA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAyOS4wNDM0NzgsMjUgTCA1LjA0MzQ3ODEsMjUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgZD0iTSAyOC45Njg3NSwyLjU5Mzc1IEwgMjguOTY4NzUsNSBMIDI4Ljk2ODc1LDQ1IEwgMjguOTY4NzUsNDcuNDA2MjUgTCAzMS4xMjUsNDYuMzQzNzUgTCA3Mi4xNTYyNSwyNi4zNDM3NSBMIDcyLjE1NjI1LDIzLjY1NjI1IEwgMzEuMTI1LDMuNjU2MjUgTCAyOC45Njg3NSwyLjU5Mzc1IHogTSAzMS45Njg3NSw3LjQwNjI1IEwgNjguMDkzNzUsMjUgTCAzMS45Njg3NSw0Mi41OTM3NSBMIDMxLjk2ODc1LDcuNDA2MjUgeiIKICAgICAgIGlkPSJwYXRoMjYzOCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDI2NzEiCiAgICAgICBzb2RpcG9kaTpjeD0iNzYiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA4MCwyNSBBIDQsNCAwIDEgMSA3MiwyNSBBIDQsNCAwIDEgMSA4MCwyNSB6IgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEsMCkiIC8+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t){return!t}}),nr=tr.define("logic.Or",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik9SIEFOU0kuc3ZnIgogICBpbmtzY2FwZTpvdXRwdXRfZXh0ZW5zaW9uPSJvcmcuaW5rc2NhcGUub3V0cHV0LnN2Zy5pbmtzY2FwZSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjUwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjI1IDogMTAgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjcxNCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODA2IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODE5IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjM3Mi4wNDcyNCA6IDM1MC43ODczOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI3NDQuMDk0NDggOiA1MjYuMTgxMDkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzc3IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49Ijc1IDogNDAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMTUwIDogNjAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDYwIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTMyNzUiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNTAgOiAzMy4zMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMTAwIDogNTAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDUwIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1MzMiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzIgOiAyMS4zMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNjQgOiAzMiA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMzIgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjU1NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDE2LjY2NjY2NyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDI1IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNCIKICAgICBpbmtzY2FwZTpjeD0iMTEzLjAwMDM5IgogICAgIGlua3NjYXBlOmN5PSIxMi44OTM3MzEiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImcyNTYwIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTpncmlkLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1wb2ludHM9InRydWUiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAwMDAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMzk5IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijg3NCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMzciCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii00IgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gNzAsMjUgYyAyMCwwIDI1LDAgMjUsMCIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMSwxNSA1LDE1IgogICAgICAgaWQ9InBhdGgzMDYxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzIsMzUgNSwzNSIKICAgICAgIGlkPSJwYXRoMzk0NCIgLz4KICAgIDxnCiAgICAgICBpZD0iZzI1NjAiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2LjUsLTM5LjUpIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjQwNjI1LDQ0LjUgTCAtMC40MDYyNSw0Ni45Mzc1IEMgLTAuNDA2MjUsNDYuOTM3NSA1LjI1LDUzLjkzNzU0OSA1LjI1LDY0LjUgQyA1LjI1LDc1LjA2MjQ1MSAtMC40MDYyNSw4Mi4wNjI1IC0wLjQwNjI1LDgyLjA2MjUgTCAtMi40MDYyNSw4NC41IEwgMC43NSw4NC41IEwgMTQuNzUsODQuNSBDIDE3LjE1ODA3Niw4NC41MDAwMDEgMjIuNDM5Njk5LDg0LjUyNDUxNCAyOC4zNzUsODIuMDkzNzUgQyAzNC4zMTAzMDEsNzkuNjYyOTg2IDQwLjkxMTUzNiw3NC43NTA0ODQgNDYuMDYyNSw2NS4yMTg3NSBMIDQ0Ljc1LDY0LjUgTCA0Ni4wNjI1LDYzLjc4MTI1IEMgMzUuNzU5Mzg3LDQ0LjcxNTU5IDE5LjUwNjU3NCw0NC41IDE0Ljc1LDQ0LjUgTCAwLjc1LDQ0LjUgTCAtMi40MDYyNSw0NC41IHogTSAzLjQ2ODc1LDQ3LjUgTCAxNC43NSw0Ny41IEMgMTkuNDM0MTczLDQ3LjUgMzMuMDM2ODUsNDcuMzY5NzkzIDQyLjcxODc1LDY0LjUgQyAzNy45NTE5NjQsNzIuOTI5MDc1IDMyLjE5NzQ2OSw3Ny4xODM5MSAyNyw3OS4zMTI1IEMgMjEuNjM5MzM5LDgxLjUwNzkyNCAxNy4xNTgwNzUsODEuNTAwMDAxIDE0Ljc1LDgxLjUgTCAzLjUsODEuNSBDIDUuMzczNTg4NCw3OC4zOTE1NjYgOC4yNSw3Mi40NTA2NSA4LjI1LDY0LjUgQyA4LjI1LDU2LjUyNjY0NiA1LjM0MTQ2ODYsNTAuNTk5ODE1IDMuNDY4NzUsNDcuNSB6IgogICAgICAgICBpZD0icGF0aDQ5NzMiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NzY2NjY3NjY2NjY2NjY2NzY2NzYyIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo="}}},{operation:function(t,e){return t||e}}),rr=tr.define("logic.And",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkFORCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI4IgogICAgIGlua3NjYXBlOmN4PSI1Ni42OTgzNDgiCiAgICAgaW5rc2NhcGU6Y3k9IjI1LjMyNjg5OSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDcwLDI1IGMgMjAsMCAyNSwwIDI1LDAiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEsMTUgNSwxNSIKICAgICAgIGlkPSJwYXRoMzA2MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMyLDM1IDUsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZvbnQtc2l6ZTptZWRpdW07Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGluZS1oZWlnaHQ6bm9ybWFsO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3RleHQtdHJhbnNmb3JtOm5vbmU7ZGlyZWN0aW9uOmx0cjtibG9jay1wcm9ncmVzc2lvbjp0Yjt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGU7Zm9udC1mYW1pbHk6Qml0c3RyZWFtIFZlcmEgU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkJpdHN0cmVhbSBWZXJhIFNhbnMiCiAgICAgICBkPSJNIDMwLDUgTCAzMCw2LjQyODU3MTQgTCAzMCw0My41NzE0MjkgTCAzMCw0NSBMIDMxLjQyODU3MSw0NSBMIDUwLjQ3NjE5LDQ1IEMgNjEuNzQ0MDk4LDQ1IDcwLjQ3NjE5LDM1Ljk5OTk1NSA3MC40NzYxOSwyNSBDIDcwLjQ3NjE5LDE0LjAwMDA0NSA2MS43NDQwOTksNS4wMDAwMDAyIDUwLjQ3NjE5LDUgQyA1MC40NzYxOSw1IDUwLjQ3NjE5LDUgMzEuNDI4NTcxLDUgTCAzMCw1IHogTSAzMi44NTcxNDMsNy44NTcxNDI5IEMgNDAuODM0MjY0LDcuODU3MTQyOSA0NS45MTgzNjgsNy44NTcxNDI5IDQ4LjA5NTIzOCw3Ljg1NzE0MjkgQyA0OS4yODU3MTQsNy44NTcxNDI5IDQ5Ljg4MDk1Miw3Ljg1NzE0MjkgNTAuMTc4NTcxLDcuODU3MTQyOSBDIDUwLjMyNzM4MSw3Ljg1NzE0MjkgNTAuNDA5MjI3LDcuODU3MTQyOSA1MC40NDY0MjksNy44NTcxNDI5IEMgNTAuNDY1MDI5LDcuODU3MTQyOSA1MC40NzE1NDMsNy44NTcxNDI5IDUwLjQ3NjE5LDcuODU3MTQyOSBDIDYwLjIzNjg1Myw3Ljg1NzE0MyA2Ny4xNDI4NTcsMTUuNDk3MDk4IDY3LjE0Mjg1NywyNSBDIDY3LjE0Mjg1NywzNC41MDI5MDIgNTkuNzYwNjYyLDQyLjE0Mjg1NyA1MCw0Mi4xNDI4NTcgTCAzMi44NTcxNDMsNDIuMTQyODU3IEwgMzIuODU3MTQzLDcuODU3MTQyOSB6IgogICAgICAgaWQ9InBhdGgyODg0IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NzY2NjY3Nzc3NzY2NjIiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return t&&e}}),or=tr.define("logic.Nor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PUiBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEiCiAgICAgaW5rc2NhcGU6Y3g9Ijc4LjY3NzY0NCIKICAgICBpbmtzY2FwZTpjeT0iMjIuMTAyMzQ0IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjM3IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItNCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDc5LDI1IEMgOTksMjUgOTUsMjUgOTUsMjUiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEsMTUgNSwxNSIKICAgICAgIGlkPSJwYXRoMzA2MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMyLDM1IDUsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8ZwogICAgICAgaWQ9ImcyNTYwIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNi41LC0zOS41KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi40MDYyNSw0NC41IEwgLTAuNDA2MjUsNDYuOTM3NSBDIC0wLjQwNjI1LDQ2LjkzNzUgNS4yNSw1My45Mzc1NDkgNS4yNSw2NC41IEMgNS4yNSw3NS4wNjI0NTEgLTAuNDA2MjUsODIuMDYyNSAtMC40MDYyNSw4Mi4wNjI1IEwgLTIuNDA2MjUsODQuNSBMIDAuNzUsODQuNSBMIDE0Ljc1LDg0LjUgQyAxNy4xNTgwNzYsODQuNTAwMDAxIDIyLjQzOTY5OSw4NC41MjQ1MTQgMjguMzc1LDgyLjA5Mzc1IEMgMzQuMzEwMzAxLDc5LjY2Mjk4NiA0MC45MTE1MzYsNzQuNzUwNDg0IDQ2LjA2MjUsNjUuMjE4NzUgTCA0NC43NSw2NC41IEwgNDYuMDYyNSw2My43ODEyNSBDIDM1Ljc1OTM4Nyw0NC43MTU1OSAxOS41MDY1NzQsNDQuNSAxNC43NSw0NC41IEwgMC43NSw0NC41IEwgLTIuNDA2MjUsNDQuNSB6IE0gMy40Njg3NSw0Ny41IEwgMTQuNzUsNDcuNSBDIDE5LjQzNDE3Myw0Ny41IDMzLjAzNjg1LDQ3LjM2OTc5MyA0Mi43MTg3NSw2NC41IEMgMzcuOTUxOTY0LDcyLjkyOTA3NSAzMi4xOTc0NjksNzcuMTgzOTEgMjcsNzkuMzEyNSBDIDIxLjYzOTMzOSw4MS41MDc5MjQgMTcuMTU4MDc1LDgxLjUwMDAwMSAxNC43NSw4MS41IEwgMy41LDgxLjUgQyA1LjM3MzU4ODQsNzguMzkxNTY2IDguMjUsNzIuNDUwNjUgOC4yNSw2NC41IEMgOC4yNSw1Ni41MjY2NDYgNS4zNDE0Njg2LDUwLjU5OTgxNSAzLjQ2ODc1LDQ3LjUgeiIKICAgICAgICAgaWQ9InBhdGg0OTczIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjc2NjY2NzY2NjY2NjY2Njc2Njc2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgICBpZD0icGF0aDI2MDQiCiAgICAgICAgIHNvZGlwb2RpOmN4PSI3NSIKICAgICAgICAgc29kaXBvZGk6Y3k9IjI1IgogICAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgICAgc29kaXBvZGk6cnk9IjQiCiAgICAgICAgIGQ9Ik0gNzksMjUgQSA0LDQgMCAxIDEgNzEsMjUgQSA0LDQgMCAxIDEgNzksMjUgeiIKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI2LjUsMzkuNSkiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t,e){return!(t||e)}}),sr=tr.define("logic.Nand",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5BTkQgQU5TSS5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxMCA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzE0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MDYiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3NzciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzUgOiA0MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxNTAgOiA2MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNjAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzI3NSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI1MCA6IDMzLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxMDAgOiA1MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTUzMyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMTYiCiAgICAgaW5rc2NhcGU6Y3g9Ijc4LjI4MzMwNyIKICAgICBpbmtzY2FwZTpjeT0iMTYuNDQyODQzIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzksMjUgQyA5MS44LDI1IDk1LDI1IDk1LDI1IgogICAgICAgaWQ9InBhdGgzMDU5IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMxLDE1IDUsMTUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk4ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMiwzNSA1LDM1IgogICAgICAgaWQ9InBhdGgzOTQ0IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmb250LXNpemU6bWVkaXVtO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7dGV4dC1pbmRlbnQ6MDt0ZXh0LWFsaWduOnN0YXJ0O3RleHQtZGVjb3JhdGlvbjpub25lO2xpbmUtaGVpZ2h0Om5vcm1hbDtsZXR0ZXItc3BhY2luZzpub3JtYWw7d29yZC1zcGFjaW5nOm5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2RpcmVjdGlvbjpsdHI7YmxvY2stcHJvZ3Jlc3Npb246dGI7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MzttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5OkJpdHN0cmVhbSBWZXJhIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpCaXRzdHJlYW0gVmVyYSBTYW5zIgogICAgICAgZD0iTSAzMCw1IEwgMzAsNi40Mjg1NzE0IEwgMzAsNDMuNTcxNDI5IEwgMzAsNDUgTCAzMS40Mjg1NzEsNDUgTCA1MC40NzYxOSw0NSBDIDYxLjc0NDA5OCw0NSA3MC40NzYxOSwzNS45OTk5NTUgNzAuNDc2MTksMjUgQyA3MC40NzYxOSwxNC4wMDAwNDUgNjEuNzQ0MDk5LDUuMDAwMDAwMiA1MC40NzYxOSw1IEMgNTAuNDc2MTksNSA1MC40NzYxOSw1IDMxLjQyODU3MSw1IEwgMzAsNSB6IE0gMzIuODU3MTQzLDcuODU3MTQyOSBDIDQwLjgzNDI2NCw3Ljg1NzE0MjkgNDUuOTE4MzY4LDcuODU3MTQyOSA0OC4wOTUyMzgsNy44NTcxNDI5IEMgNDkuMjg1NzE0LDcuODU3MTQyOSA0OS44ODA5NTIsNy44NTcxNDI5IDUwLjE3ODU3MSw3Ljg1NzE0MjkgQyA1MC4zMjczODEsNy44NTcxNDI5IDUwLjQwOTIyNyw3Ljg1NzE0MjkgNTAuNDQ2NDI5LDcuODU3MTQyOSBDIDUwLjQ2NTAyOSw3Ljg1NzE0MjkgNTAuNDcxNTQzLDcuODU3MTQyOSA1MC40NzYxOSw3Ljg1NzE0MjkgQyA2MC4yMzY4NTMsNy44NTcxNDMgNjcuMTQyODU3LDE1LjQ5NzA5OCA2Ny4xNDI4NTcsMjUgQyA2Ny4xNDI4NTcsMzQuNTAyOTAyIDU5Ljc2MDY2Miw0Mi4xNDI4NTcgNTAsNDIuMTQyODU3IEwgMzIuODU3MTQzLDQyLjE0Mjg1NyBMIDMyLjg1NzE0Myw3Ljg1NzE0MjkgeiIKICAgICAgIGlkPSJwYXRoMjg4NCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2Njc2NjY2Nzc3Nzc2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDQwMDgiCiAgICAgICBzb2RpcG9kaTpjeD0iNzUiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA3OSwyNSBBIDQsNCAwIDEgMSA3MSwyNSBBIDQsNCAwIDEgMSA3OSwyNSB6IiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return!(t&&e)}}),ar=tr.define("logic.Xor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IlhPUiBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjUuNjU2ODU0MiIKICAgICBpbmtzY2FwZTpjeD0iMjUuOTM4MTE2IgogICAgIGlua3NjYXBlOmN5PSIxNy4yMzAwNSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDcwLDI1IGMgMjAsMCAyNSwwIDI1LDAiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzAuMzg1NzE3LDE1IEwgNC45OTk5OTk4LDE1IgogICAgICAgaWQ9InBhdGgzMDYxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5NzY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEuMzYyMDkxLDM1IEwgNC45OTk5OTk4LDM1IgogICAgICAgaWQ9InBhdGgzOTQ0IiAvPgogICAgPGcKICAgICAgIGlkPSJnMjU2MCIKICAgICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjYuNSwtMzkuNSkiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDM1MTYiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi4yNSw4MS41MDAwMDUgQyAtMy44NDczNzQsODQuMTQ0NDA1IC00LjUsODQuNTAwMDA1IC00LjUsODQuNTAwMDA1IEwgLTguMTU2MjUsODQuNTAwMDA1IEwgLTYuMTU2MjUsODIuMDYyNTA1IEMgLTYuMTU2MjUsODIuMDYyNTA1IC0wLjUsNzUuMDYyNDUxIC0wLjUsNjQuNSBDIC0wLjUsNTMuOTM3NTQ5IC02LjE1NjI1LDQ2LjkzNzUgLTYuMTU2MjUsNDYuOTM3NSBMIC04LjE1NjI1LDQ0LjUgTCAtNC41LDQ0LjUgQyAtMy43MTg3NSw0NS40Mzc1IC0zLjA3ODEyNSw0Ni4xNTYyNSAtMi4yODEyNSw0Ny41IEMgLTAuNDA4NTMxLDUwLjU5OTgxNSAyLjUsNTYuNTI2NjQ2IDIuNSw2NC41IEMgMi41LDcyLjQ1MDY1IC0wLjM5NjY5Nyw3OC4zNzk0MjUgLTIuMjUsODEuNTAwMDA1IHoiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY3NjY2Njc2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi40MDYyNSw0NC41IEwgLTAuNDA2MjUsNDYuOTM3NSBDIC0wLjQwNjI1LDQ2LjkzNzUgNS4yNSw1My45Mzc1NDkgNS4yNSw2NC41IEMgNS4yNSw3NS4wNjI0NTEgLTAuNDA2MjUsODIuMDYyNSAtMC40MDYyNSw4Mi4wNjI1IEwgLTIuNDA2MjUsODQuNSBMIDAuNzUsODQuNSBMIDE0Ljc1LDg0LjUgQyAxNy4xNTgwNzYsODQuNTAwMDAxIDIyLjQzOTY5OSw4NC41MjQ1MTQgMjguMzc1LDgyLjA5Mzc1IEMgMzQuMzEwMzAxLDc5LjY2Mjk4NiA0MC45MTE1MzYsNzQuNzUwNDg0IDQ2LjA2MjUsNjUuMjE4NzUgTCA0NC43NSw2NC41IEwgNDYuMDYyNSw2My43ODEyNSBDIDM1Ljc1OTM4Nyw0NC43MTU1OSAxOS41MDY1NzQsNDQuNSAxNC43NSw0NC41IEwgMC43NSw0NC41IEwgLTIuNDA2MjUsNDQuNSB6IE0gMy40Njg3NSw0Ny41IEwgMTQuNzUsNDcuNSBDIDE5LjQzNDE3Myw0Ny41IDMzLjAzNjg1LDQ3LjM2OTc5MyA0Mi43MTg3NSw2NC41IEMgMzcuOTUxOTY0LDcyLjkyOTA3NSAzMi4xOTc0NjksNzcuMTgzOTEgMjcsNzkuMzEyNSBDIDIxLjYzOTMzOSw4MS41MDc5MjQgMTcuMTU4MDc1LDgxLjUwMDAwMSAxNC43NSw4MS41IEwgMy41LDgxLjUgQyA1LjM3MzU4ODQsNzguMzkxNTY2IDguMjUsNzIuNDUwNjUgOC4yNSw2NC41IEMgOC4yNSw1Ni41MjY2NDYgNS4zNDE0Njg2LDUwLjU5OTgxNSAzLjQ2ODc1LDQ3LjUgeiIKICAgICAgICAgaWQ9InBhdGg0OTczIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjc2NjY2NzY2NjY2NjY2Njc2Njc2MiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t,e){return(!t||e)&&(t||!e)}}),lr=tr.define("logic.Xnor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IlhOT1IgQU5TSS5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxMCA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzE0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MDYiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3NzciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzUgOiA0MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxNTAgOiA2MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNjAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzI3NSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI1MCA6IDMzLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxMDAgOiA1MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTUzMyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNTU3IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjI1IDogMTYuNjY2NjY3IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjUwIDogMjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDI1IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI0IgogICAgIGlua3NjYXBlOmN4PSI5NS43MjM2NiIKICAgICBpbmtzY2FwZTpjeT0iLTI2Ljc3NTAyMyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjAwMDAwMDI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDc4LjMzMzMzMiwyNSBDIDkxLjY2NjY2NiwyNSA5NSwyNSA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk4ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMC4zODU3MTcsMTUgTCA0Ljk5OTk5OTgsMTUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk3NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMS4zNjIwOTEsMzUgTCA0Ljk5OTk5OTgsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8ZwogICAgICAgaWQ9ImcyNTYwIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNi41LC0zOS41KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMzUxNiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjI1LDgxLjUwMDAwNSBDIC0zLjg0NzM3NCw4NC4xNDQ0MDUgLTQuNSw4NC41MDAwMDUgLTQuNSw4NC41MDAwMDUgTCAtOC4xNTYyNSw4NC41MDAwMDUgTCAtNi4xNTYyNSw4Mi4wNjI1MDUgQyAtNi4xNTYyNSw4Mi4wNjI1MDUgLTAuNSw3NS4wNjI0NTEgLTAuNSw2NC41IEMgLTAuNSw1My45Mzc1NDkgLTYuMTU2MjUsNDYuOTM3NSAtNi4xNTYyNSw0Ni45Mzc1IEwgLTguMTU2MjUsNDQuNSBMIC00LjUsNDQuNSBDIC0zLjcxODc1LDQ1LjQzNzUgLTMuMDc4MTI1LDQ2LjE1NjI1IC0yLjI4MTI1LDQ3LjUgQyAtMC40MDg1MzEsNTAuNTk5ODE1IDIuNSw1Ni41MjY2NDYgMi41LDY0LjUgQyAyLjUsNzIuNDUwNjUgLTAuMzk2Njk3LDc4LjM3OTQyNSAtMi4yNSw4MS41MDAwMDUgeiIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2Njc2NjY2NzYyIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjQwNjI1LDQ0LjUgTCAtMC40MDYyNSw0Ni45Mzc1IEMgLTAuNDA2MjUsNDYuOTM3NSA1LjI1LDUzLjkzNzU0OSA1LjI1LDY0LjUgQyA1LjI1LDc1LjA2MjQ1MSAtMC40MDYyNSw4Mi4wNjI1IC0wLjQwNjI1LDgyLjA2MjUgTCAtMi40MDYyNSw4NC41IEwgMC43NSw4NC41IEwgMTQuNzUsODQuNSBDIDE3LjE1ODA3Niw4NC41MDAwMDEgMjIuNDM5Njk5LDg0LjUyNDUxNCAyOC4zNzUsODIuMDkzNzUgQyAzNC4zMTAzMDEsNzkuNjYyOTg2IDQwLjkxMTUzNiw3NC43NTA0ODQgNDYuMDYyNSw2NS4yMTg3NSBMIDQ0Ljc1LDY0LjUgTCA0Ni4wNjI1LDYzLjc4MTI1IEMgMzUuNzU5Mzg3LDQ0LjcxNTU5IDE5LjUwNjU3NCw0NC41IDE0Ljc1LDQ0LjUgTCAwLjc1LDQ0LjUgTCAtMi40MDYyNSw0NC41IHogTSAzLjQ2ODc1LDQ3LjUgTCAxNC43NSw0Ny41IEMgMTkuNDM0MTczLDQ3LjUgMzMuMDM2ODUsNDcuMzY5NzkzIDQyLjcxODc1LDY0LjUgQyAzNy45NTE5NjQsNzIuOTI5MDc1IDMyLjE5NzQ2OSw3Ny4xODM5MSAyNyw3OS4zMTI1IEMgMjEuNjM5MzM5LDgxLjUwNzkyNCAxNy4xNTgwNzUsODEuNTAwMDAxIDE0Ljc1LDgxLjUgTCAzLjUsODEuNSBDIDUuMzczNTg4NCw3OC4zOTE1NjYgOC4yNSw3Mi40NTA2NSA4LjI1LDY0LjUgQyA4LjI1LDU2LjUyNjY0NiA1LjM0MTQ2ODYsNTAuNTk5ODE1IDMuNDY4NzUsNDcuNSB6IgogICAgICAgICBpZD0icGF0aDQ5NzMiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NzY2NjY3NjY2NjY2NjY2NzY2NzYyIgLz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDM1NTEiCiAgICAgICBzb2RpcG9kaTpjeD0iNzUiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA3OSwyNSBBIDQsNCAwIDEgMSA3MSwyNSBBIDQsNCAwIDEgMSA3OSwyNSB6IiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return(!t||!e)&&(t||e)}}),cr={Gate:Qn,IO:_n,Input:Kn,Output:qn,Gate11:$n,Gate21:tr,Repeater:er,Not:ir,Or:nr,And:rr,Nor:or,Nand:sr,Xor:ar,Xnor:lr,Wire:We.define("logic.Wire",{attrs:{".connection":{"stroke-width":2},".marker-vertex":{r:7}},router:{name:"orthogonal"},connector:{name:"rounded",args:{radius:10}}},{arrowheadMarkup:['<g class="marker-arrowhead-group marker-arrowhead-group-<%= end %>">','<circle class="marker-arrowhead" end="<%= end %>" r="7"/>',"</g>"].join(""),vertexMarkup:['<g class="marker-vertex-group" transform="translate(<%= x %>, <%= y %>)">','<circle class="marker-vertex" idx="<%= idx %>" r="10" />','<g class="marker-vertex-remove-group">','<path class="marker-vertex-remove-area" idx="<%= idx %>" d="M16,5.333c-7.732,0-14,4.701-14,10.5c0,1.982,0.741,3.833,2.016,5.414L2,25.667l5.613-1.441c2.339,1.317,5.237,2.107,8.387,2.107c7.732,0,14-4.701,14-10.5C30,10.034,23.732,5.333,16,5.333z" transform="translate(5, -33)"/>','<path class="marker-vertex-remove" idx="<%= idx %>" transform="scale(.8) translate(9.5, -37)" d="M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z">',"<title>Remove vertex.</title>","</path>","</g>","</g>"].join("")})},gr={KingWhite:In.define("chess.KingWhite",{size:{width:42,height:38}},{markup:'<g class="rotatable"><g class="scalable"><g style="fill:none; fill-opacity:1; fill-rule:evenodd; stroke:#000000; stroke-width:1.5; stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"><path d="M 22.5,11.63 L 22.5,6" style="fill:none; stroke:#000000; stroke-linejoin:miter;" /> <path d="M 20,8 L 25,8" style="fill:none; stroke:#000000; stroke-linejoin:miter;" /> <path d="M 22.5,25 C 22.5,25 27,17.5 25.5,14.5 C 25.5,14.5 24.5,12 22.5,12 C 20.5,12 19.5,14.5 19.5,14.5 C 18,17.5 22.5,25 22.5,25" style="fill:#ffffff; stroke:#000000; stroke-linecap:butt; stroke-linejoin:miter;" /> <path d="M 11.5,37 C 17,40.5 27,40.5 32.5,37 L 32.5,30 C 32.5,30 41.5,25.5 38.5,19.5 C 34.5,13 25,16 22.5,23.5 L 22.5,27 L 22.5,23.5 C 19,16 9.5,13 6.5,19.5 C 3.5,25.5 11.5,29.5 11.5,29.5 L 11.5,37 z " style="fill:#ffffff; stroke:#000000;" /> <path d="M 11.5,30 C 17,27 27,27 32.5,30" style="fill:none; stroke:#000000;" /> <path d="M 11.5,33.5 C 17,30.5 27,30.5 32.5,33.5" style="fill:none; stroke:#000000;" /> <path d="M 11.5,37 C 17,34 27,34 32.5,37" style="fill:none; stroke:#000000;" /> </g></g></g>'}),KingBlack:In.define("chess.KingBlack",{size:{width:42,height:38}},{markup:'<g class="rotatable"><g class="scalable"><g style="fill:none; fill-opacity:1; fill-rule:evenodd; stroke:#000000; stroke-width:1.5; stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"> <path d="M 22.5,11.63 L 22.5,6" style="fill:none; stroke:#000000; stroke-linejoin:miter;" id="path6570" /> <path d="M 22.5,25 C 22.5,25 27,17.5 25.5,14.5 C 25.5,14.5 24.5,12 22.5,12 C 20.5,12 19.5,14.5 19.5,14.5 C 18,17.5 22.5,25 22.5,25" style="fill:#000000;fill-opacity:1; stroke-linecap:butt; stroke-linejoin:miter;" /> <path d="M 11.5,37 C 17,40.5 27,40.5 32.5,37 L 32.5,30 C 32.5,30 41.5,25.5 38.5,19.5 C 34.5,13 25,16 22.5,23.5 L 22.5,27 L 22.5,23.5 C 19,16 9.5,13 6.5,19.5 C 3.5,25.5 11.5,29.5 11.5,29.5 L 11.5,37 z " style="fill:#000000; stroke:#000000;" /> <path d="M 20,8 L 25,8" style="fill:none; stroke:#000000; stroke-linejoin:miter;" /> <path d="M 32,29.5 C 32,29.5 40.5,25.5 38.03,19.85 C 34.15,14 25,18 22.5,24.5 L 22.51,26.6 L 22.5,24.5 C 20,18 9.906,14 6.997,19.85 C 4.5,25.5 11.85,28.85 11.85,28.85" style="fill:none; stroke:#ffffff;" /> <path d="M 11.5,30 C 17,27 27,27 32.5,30 M 11.5,33.5 C 17,30.5 27,30.5 32.5,33.5 M 11.5,37 C 17,34 27,34 32.5,37" style="fill:none; stroke:#ffffff;" /> </g></g></g>'}),QueenWhite:In.define("chess.QueenWhite",{size:{width:42,height:38}},{markup:'<g class="rotatable"><g class="scalable"><g style="opacity:1; fill:#ffffff; fill-opacity:1; fill-rule:evenodd; stroke:#000000; stroke-width:1.5; stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"> <path d="M 9 13 A 2 2 0 1 1 5,13 A 2 2 0 1 1 9 13 z" transform="translate(-1,-1)" /> <path d="M 9 13 A 2 2 0 1 1 5,13 A 2 2 0 1 1 9 13 z" transform="translate(15.5,-5.5)" /> <path d="M 9 13 A 2 2 0 1 1 5,13 A 2 2 0 1 1 9 13 z" transform="translate(32,-1)" /> <path d="M 9 13 A 2 2 0 1 1 5,13 A 2 2 0 1 1 9 13 z" transform="translate(7,-4.5)" /> <path d="M 9 13 A 2 2 0 1 1 5,13 A 2 2 0 1 1 9 13 z" transform="translate(24,-4)" /> <path d="M 9,26 C 17.5,24.5 30,24.5 36,26 L 38,14 L 31,25 L 31,11 L 25.5,24.5 L 22.5,9.5 L 19.5,24.5 L 14,10.5 L 14,25 L 7,14 L 9,26 z " style="stroke-linecap:butt;" /> <path d="M 9,26 C 9,28 10.5,28 11.5,30 C 12.5,31.5 12.5,31 12,33.5 C 10.5,34.5 10.5,36 10.5,36 C 9,37.5 11,38.5 11,38.5 C 17.5,39.5 27.5,39.5 34,38.5 C 34,38.5 35.5,37.5 34,36 C 34,36 34.5,34.5 33,33.5 C 32.5,31 32.5,31.5 33.5,30 C 34.5,28 36,28 36,26 C 27.5,24.5 17.5,24.5 9,26 z " style="stroke-linecap:butt;" /> <path d="M 11.5,30 C 15,29 30,29 33.5,30" style="fill:none;" /> <path d="M 12,33.5 C 18,32.5 27,32.5 33,33.5" style="fill:none;" /> </g></g></g>'}),QueenBlack:In.define("chess.QueenBlack",{size:{width:42,height:38}},{markup:'<g class="rotatable"><g class="scalable"><g style="opacity:1; fill:#000000; fill-opacity:1; fill-rule:evenodd; stroke:#000000; stroke-width:1.5; stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"> <g style="fill:#000000; stroke:none;"> <circle cx="6" cy="12" r="2.75" /> <circle cx="14" cy="9" r="2.75" /> <circle cx="22.5" cy="8" r="2.75" /> <circle cx="31" cy="9" r="2.75" /> <circle cx="39" cy="12" r="2.75" /> </g> <path d="M 9,26 C 17.5,24.5 30,24.5 36,26 L 38.5,13.5 L 31,25 L 30.7,10.9 L 25.5,24.5 L 22.5,10 L 19.5,24.5 L 14.3,10.9 L 14,25 L 6.5,13.5 L 9,26 z" style="stroke-linecap:butt; stroke:#000000;" /> <path d="M 9,26 C 9,28 10.5,28 11.5,30 C 12.5,31.5 12.5,31 12,33.5 C 10.5,34.5 10.5,36 10.5,36 C 9,37.5 11,38.5 11,38.5 C 17.5,39.5 27.5,39.5 34,38.5 C 34,38.5 35.5,37.5 34,36 C 34,36 34.5,34.5 33,33.5 C 32.5,31 32.5,31.5 33.5,30 C 34.5,28 36,28 36,26 C 27.5,24.5 17.5,24.5 9,26 z" style="stroke-linecap:butt;" /> <path d="M 11,38.5 A 35,35 1 0 0 34,38.5" style="fill:none; stroke:#000000; stroke-linecap:butt;" /> <path d="M 11,29 A 35,35 1 0 1 34,29" style="fill:none; stroke:#ffffff;" /> <path d="M 12.5,31.5 L 32.5,31.5" style="fill:none; stroke:#ffffff;" /> <path d="M 11.5,34.5 A 35,35 1 0 0 33.5,34.5" style="fill:none; stroke:#ffffff;" /> <path d="M 10.5,37.5 A 35,35 1 0 0 34.5,37.5" style="fill:none; stroke:#ffffff;" /> </g></g></g>'}),RookWhite:In.define("chess.RookWhite",{size:{width:32,height:34}},{markup:'<g class="rotatable"><g class="scalable"><g style="opacity:1; fill:#ffffff; fill-opacity:1; fill-rule:evenodd; stroke:#000000; stroke-width:1.5; stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"> <path d="M 9,39 L 36,39 L 36,36 L 9,36 L 9,39 z " style="stroke-linecap:butt;" /> <path d="M 12,36 L 12,32 L 33,32 L 33,36 L 12,36 z " style="stroke-linecap:butt;" /> <path d="M 11,14 L 11,9 L 15,9 L 15,11 L 20,11 L 20,9 L 25,9 L 25,11 L 30,11 L 30,9 L 34,9 L 34,14" style="stroke-linecap:butt;" /> <path d="M 34,14 L 31,17 L 14,17 L 11,14" /> <path d="M 31,17 L 31,29.5 L 14,29.5 L 14,17" style="stroke-linecap:butt; stroke-linejoin:miter;" /> <path d="M 31,29.5 L 32.5,32 L 12.5,32 L 14,29.5" /> <path d="M 11,14 L 34,14" style="fill:none; stroke:#000000; stroke-linejoin:miter;" /> </g></g></g>'}),RookBlack:In.define("chess.RookBlack",{size:{width:32,height:34}},{markup:'<g class="rotatable"><g class="scalable"><g style="opacity:1; fill:#000000; fill-opacity:1; fill-rule:evenodd; stroke:#000000; stroke-width:1.5; stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"> <path d="M 9,39 L 36,39 L 36,36 L 9,36 L 9,39 z " style="stroke-linecap:butt;" /> <path d="M 12.5,32 L 14,29.5 L 31,29.5 L 32.5,32 L 12.5,32 z " style="stroke-linecap:butt;" /> <path d="M 12,36 L 12,32 L 33,32 L 33,36 L 12,36 z " style="stroke-linecap:butt;" /> <path d="M 14,29.5 L 14,16.5 L 31,16.5 L 31,29.5 L 14,29.5 z " style="stroke-linecap:butt;stroke-linejoin:miter;" /> <path d="M 14,16.5 L 11,14 L 34,14 L 31,16.5 L 14,16.5 z " style="stroke-linecap:butt;" /> <path d="M 11,14 L 11,9 L 15,9 L 15,11 L 20,11 L 20,9 L 25,9 L 25,11 L 30,11 L 30,9 L 34,9 L 34,14 L 11,14 z " style="stroke-linecap:butt;" /> <path d="M 12,35.5 L 33,35.5 L 33,35.5" style="fill:none; stroke:#ffffff; stroke-width:1; stroke-linejoin:miter;" /> <path d="M 13,31.5 L 32,31.5" style="fill:none; stroke:#ffffff; stroke-width:1; stroke-linejoin:miter;" /> <path d="M 14,29.5 L 31,29.5" style="fill:none; stroke:#ffffff; stroke-width:1; stroke-linejoin:miter;" /> <path d="M 14,16.5 L 31,16.5" style="fill:none; stroke:#ffffff; stroke-width:1; stroke-linejoin:miter;" /> <path d="M 11,14 L 34,14" style="fill:none; stroke:#ffffff; stroke-width:1; stroke-linejoin:miter;" /> </g></g></g>'}),BishopWhite:In.define("chess.BishopWhite",{size:{width:38,height:38}},{markup:'<g class="rotatable"><g class="scalable"><g style="opacity:1; fill:none; fill-rule:evenodd; fill-opacity:1; stroke:#000000; stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"> <g style="fill:#ffffff; stroke:#000000; stroke-linecap:butt;"> <path d="M 9,36 C 12.39,35.03 19.11,36.43 22.5,34 C 25.89,36.43 32.61,35.03 36,36 C 36,36 37.65,36.54 39,38 C 38.32,38.97 37.35,38.99 36,38.5 C 32.61,37.53 25.89,38.96 22.5,37.5 C 19.11,38.96 12.39,37.53 9,38.5 C 7.646,38.99 6.677,38.97 6,38 C 7.354,36.06 9,36 9,36 z" /> <path d="M 15,32 C 17.5,34.5 27.5,34.5 30,32 C 30.5,30.5 30,30 30,30 C 30,27.5 27.5,26 27.5,26 C 33,24.5 33.5,14.5 22.5,10.5 C 11.5,14.5 12,24.5 17.5,26 C 17.5,26 15,27.5 15,30 C 15,30 14.5,30.5 15,32 z" /> <path d="M 25 8 A 2.5 2.5 0 1 1 20,8 A 2.5 2.5 0 1 1 25 8 z" /> </g> <path d="M 17.5,26 L 27.5,26 M 15,30 L 30,30 M 22.5,15.5 L 22.5,20.5 M 20,18 L 25,18" style="fill:none; stroke:#000000; stroke-linejoin:miter;" /> </g></g></g>'}),BishopBlack:In.define("chess.BishopBlack",{size:{width:38,height:38}},{markup:'<g class="rotatable"><g class="scalable"><g style="opacity:1; fill:none; fill-rule:evenodd; fill-opacity:1; stroke:#000000; stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"> <g style="fill:#000000; stroke:#000000; stroke-linecap:butt;"> <path d="M 9,36 C 12.39,35.03 19.11,36.43 22.5,34 C 25.89,36.43 32.61,35.03 36,36 C 36,36 37.65,36.54 39,38 C 38.32,38.97 37.35,38.99 36,38.5 C 32.61,37.53 25.89,38.96 22.5,37.5 C 19.11,38.96 12.39,37.53 9,38.5 C 7.646,38.99 6.677,38.97 6,38 C 7.354,36.06 9,36 9,36 z" /> <path d="M 15,32 C 17.5,34.5 27.5,34.5 30,32 C 30.5,30.5 30,30 30,30 C 30,27.5 27.5,26 27.5,26 C 33,24.5 33.5,14.5 22.5,10.5 C 11.5,14.5 12,24.5 17.5,26 C 17.5,26 15,27.5 15,30 C 15,30 14.5,30.5 15,32 z" /> <path d="M 25 8 A 2.5 2.5 0 1 1 20,8 A 2.5 2.5 0 1 1 25 8 z" /> </g> <path d="M 17.5,26 L 27.5,26 M 15,30 L 30,30 M 22.5,15.5 L 22.5,20.5 M 20,18 L 25,18" style="fill:none; stroke:#ffffff; stroke-linejoin:miter;" /> </g></g></g>'}),KnightWhite:In.define("chess.KnightWhite",{size:{width:38,height:37}},{markup:'<g class="rotatable"><g class="scalable"><g style="opacity:1; fill:none; fill-opacity:1; fill-rule:evenodd; stroke:#000000; stroke-width:1.5; stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"> <path d="M 22,10 C 32.5,11 38.5,18 38,39 L 15,39 C 15,30 25,32.5 23,18" style="fill:#ffffff; stroke:#000000;" /> <path d="M 24,18 C 24.38,20.91 18.45,25.37 16,27 C 13,29 13.18,31.34 11,31 C 9.958,30.06 12.41,27.96 11,28 C 10,28 11.19,29.23 10,30 C 9,30 5.997,31 6,26 C 6,24 12,14 12,14 C 12,14 13.89,12.1 14,10.5 C 13.27,9.506 13.5,8.5 13.5,7.5 C 14.5,6.5 16.5,10 16.5,10 L 18.5,10 C 18.5,10 19.28,8.008 21,7 C 22,7 22,10 22,10" style="fill:#ffffff; stroke:#000000;" /> <path d="M 9.5 25.5 A 0.5 0.5 0 1 1 8.5,25.5 A 0.5 0.5 0 1 1 9.5 25.5 z" style="fill:#000000; stroke:#000000;" /> <path d="M 15 15.5 A 0.5 1.5 0 1 1 14,15.5 A 0.5 1.5 0 1 1 15 15.5 z" transform="matrix(0.866,0.5,-0.5,0.866,9.693,-5.173)" style="fill:#000000; stroke:#000000;" /> </g></g></g>'}),KnightBlack:In.define("chess.KnightBlack",{size:{width:38,height:37}},{markup:'<g class="rotatable"><g class="scalable"><g style="opacity:1; fill:none; fill-opacity:1; fill-rule:evenodd; stroke:#000000; stroke-width:1.5; stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;"> <path d="M 22,10 C 32.5,11 38.5,18 38,39 L 15,39 C 15,30 25,32.5 23,18" style="fill:#000000; stroke:#000000;" /> <path d="M 24,18 C 24.38,20.91 18.45,25.37 16,27 C 13,29 13.18,31.34 11,31 C 9.958,30.06 12.41,27.96 11,28 C 10,28 11.19,29.23 10,30 C 9,30 5.997,31 6,26 C 6,24 12,14 12,14 C 12,14 13.89,12.1 14,10.5 C 13.27,9.506 13.5,8.5 13.5,7.5 C 14.5,6.5 16.5,10 16.5,10 L 18.5,10 C 18.5,10 19.28,8.008 21,7 C 22,7 22,10 22,10" style="fill:#000000; stroke:#000000;" /> <path d="M 9.5 25.5 A 0.5 0.5 0 1 1 8.5,25.5 A 0.5 0.5 0 1 1 9.5 25.5 z" style="fill:#ffffff; stroke:#ffffff;" /> <path d="M 15 15.5 A 0.5 1.5 0 1 1 14,15.5 A 0.5 1.5 0 1 1 15 15.5 z" transform="matrix(0.866,0.5,-0.5,0.866,9.693,-5.173)" style="fill:#ffffff; stroke:#ffffff;" /> <path d="M 24.55,10.4 L 24.1,11.85 L 24.6,12 C 27.75,13 30.25,14.49 32.5,18.75 C 34.75,23.01 35.75,29.06 35.25,39 L 35.2,39.5 L 37.45,39.5 L 37.5,39 C 38,28.94 36.62,22.15 34.25,17.66 C 31.88,13.17 28.46,11.02 25.06,10.5 L 24.55,10.4 z " style="fill:#ffffff; stroke:none;" /> </g></g></g>'}),PawnWhite:In.define("chess.PawnWhite",{size:{width:28,height:33}},{markup:'<g class="rotatable"><g class="scalable"><path d="M 22,9 C 19.79,9 18,10.79 18,13 C 18,13.89 18.29,14.71 18.78,15.38 C 16.83,16.5 15.5,18.59 15.5,21 C 15.5,23.03 16.44,24.84 17.91,26.03 C 14.91,27.09 10.5,31.58 10.5,39.5 L 33.5,39.5 C 33.5,31.58 29.09,27.09 26.09,26.03 C 27.56,24.84 28.5,23.03 28.5,21 C 28.5,18.59 27.17,16.5 25.22,15.38 C 25.71,14.71 26,13.89 26,13 C 26,10.79 24.21,9 22,9 z " style="opacity:1; fill:#ffffff; fill-opacity:1; fill-rule:nonzero; stroke:#000000; stroke-width:1.5; stroke-linecap:round; stroke-linejoin:miter; stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;" /></g></g>'}),PawnBlack:In.define("chess.PawnBlack",{size:{width:28,height:33}},{markup:'<g class="rotatable"><g class="scalable"><path d="M 22,9 C 19.79,9 18,10.79 18,13 C 18,13.89 18.29,14.71 18.78,15.38 C 16.83,16.5 15.5,18.59 15.5,21 C 15.5,23.03 16.44,24.84 17.91,26.03 C 14.91,27.09 10.5,31.58 10.5,39.5 L 33.5,39.5 C 33.5,31.58 29.09,27.09 26.09,26.03 C 27.56,24.84 28.5,23.03 28.5,21 C 28.5,18.59 27.17,16.5 25.22,15.38 C 25.71,14.71 26,13.89 26,13 C 26,10.79 24.21,9 22,9 z " style="opacity:1; fill:#000000; fill-opacity:1; fill-rule:nonzero; stroke:#000000; stroke-width:1.5; stroke-linecap:round; stroke-linejoin:miter; stroke-miterlimit:4; stroke-dasharray:none; stroke-opacity:1;" /></g></g>'})},hr=Fe.define("erd.Entity",{size:{width:150,height:60},attrs:{".outer":{fill:"#2ECC71",stroke:"#27AE60","stroke-width":2,points:"100,0 100,60 0,60 0,0"},".inner":{fill:"#2ECC71",stroke:"#27AE60","stroke-width":2,points:"95,5 95,55 5,55 5,5",display:"none"},text:{text:"Entity","font-family":"Arial","font-size":14,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:'<g class="rotatable"><g class="scalable"><polygon class="outer"/><polygon class="inner"/></g><text/></g>'}),ur=hr.define("erd.WeakEntity",{attrs:{".inner":{display:"auto"},text:{text:"Weak Entity"}}}),dr=Fe.define("erd.Relationship",{size:{width:80,height:80},attrs:{".outer":{fill:"#3498DB",stroke:"#2980B9","stroke-width":2,points:"40,0 80,40 40,80 0,40"},".inner":{fill:"#3498DB",stroke:"#2980B9","stroke-width":2,points:"40,5 75,40 40,75 5,40",display:"none"},text:{text:"Relationship","font-family":"Arial","font-size":12,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:'<g class="rotatable"><g class="scalable"><polygon class="outer"/><polygon class="inner"/></g><text/></g>'}),fr=dr.define("erd.IdentifyingRelationship",{attrs:{".inner":{display:"auto"},text:{text:"Identifying"}}}),pr=Fe.define("erd.Attribute",{size:{width:100,height:50},attrs:{ellipse:{transform:"translate(50, 25)"},".outer":{stroke:"#D35400","stroke-width":2,cx:0,cy:0,rx:50,ry:25,fill:"#E67E22"},".inner":{stroke:"#D35400","stroke-width":2,cx:0,cy:0,rx:45,ry:20,fill:"#E67E22",display:"none"},text:{"font-family":"Arial","font-size":14,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:'<g class="rotatable"><g class="scalable"><ellipse class="outer"/><ellipse class="inner"/></g><text/></g>'}),Ir=pr.define("erd.Multivalued",{attrs:{".inner":{display:"block"},text:{text:"multivalued"}}}),mr=pr.define("erd.Derived",{attrs:{".outer":{"stroke-dasharray":"3,5"},text:{text:"derived"}}}),Ar=pr.define("erd.Key",{attrs:{ellipse:{"stroke-width":4},text:{text:"key","font-weight":"800","text-decoration":"underline"}}}),vr=pr.define("erd.Normal",{attrs:{text:{text:"Normal"}}}),Cr={Entity:hr,WeakEntity:ur,Relationship:dr,IdentifyingRelationship:fr,Attribute:pr,Multivalued:Ir,Derived:mr,Key:Ar,Normal:vr,ISA:Fe.define("erd.ISA",{type:"erd.ISA",size:{width:100,height:50},attrs:{polygon:{points:"0,0 50,50 100,0",fill:"#F1C40F",stroke:"#F39C12","stroke-width":2},text:{text:"ISA","font-size":18,"ref-x":.5,"ref-y":.3,"y-alignment":"middle","text-anchor":"middle"}}},{markup:'<g class="rotatable"><g class="scalable"><polygon/></g><text/></g>'}),Line:We.define("erd.Line",{},{cardinality:function(t){this.set("labels",[{position:-20,attrs:{text:{dy:-8,text:t}}}])}})},wr={State:Cn.define("fsa.State",{attrs:{circle:{"stroke-width":3},text:{"font-weight":"800"}}}),StartState:Fe.define("fsa.StartState",{size:{width:20,height:20},attrs:{circle:{transform:"translate(10, 10)",r:10,fill:"#000000"}}},{markup:'<g class="rotatable"><g class="scalable"><circle/></g></g>'}),EndState:Fe.define("fsa.EndState",{size:{width:20,height:20},attrs:{".outer":{transform:"translate(10, 10)",r:10,fill:"#ffffff",stroke:"#000000"},".inner":{transform:"translate(10, 10)",r:6,fill:"#000000"}}},{markup:'<g class="rotatable"><g class="scalable"><circle class="outer"/><circle class="inner"/></g></g>'}),Arrow:We.define("fsa.Arrow",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z"}},smooth:!0})},yr={Member:Fe.define("org.Member",{size:{width:180,height:70},attrs:{rect:{width:170,height:60},".card":{fill:"#FFFFFF",stroke:"#000000","stroke-width":2,"pointer-events":"visiblePainted",rx:10,ry:10},image:{width:48,height:48,ref:".card","ref-x":10,"ref-y":5},".rank":{"text-decoration":"underline",ref:".card","ref-x":.9,"ref-y":.2,"font-family":"Courier New","font-size":14,"text-anchor":"end"},".name":{"font-weight":"800",ref:".card","ref-x":.9,"ref-y":.6,"font-family":"Courier New","font-size":14,"text-anchor":"end"}}},{markup:'<g class="rotatable"><g class="scalable"><rect class="card"/><image/></g><text class="rank"/><text class="name"/></g>'}),Arrow:We.define("org.Arrow",{source:{selector:".card"},target:{selector:".card"},attrs:{".connection":{stroke:"#585858","stroke-width":3}},z:-1})},br={Place:In.define("pn.Place",{size:{width:50,height:50},attrs:{".root":{r:25,fill:"#ffffff",stroke:"#000000",transform:"translate(25, 25)"},".label":{"text-anchor":"middle","ref-x":.5,"ref-y":-20,ref:".root",fill:"#000000","font-size":12},".tokens > circle":{fill:"#000000",r:5},".tokens.one > circle":{transform:"translate(25, 25)"},".tokens.two > circle:nth-child(1)":{transform:"translate(19, 25)"},".tokens.two > circle:nth-child(2)":{transform:"translate(31, 25)"},".tokens.three > circle:nth-child(1)":{transform:"translate(18, 29)"},".tokens.three > circle:nth-child(2)":{transform:"translate(25, 19)"},".tokens.three > circle:nth-child(3)":{transform:"translate(32, 29)"},".tokens.alot > text":{transform:"translate(25, 18)","text-anchor":"middle",fill:"#000000"}}},{markup:'<g class="rotatable"><g class="scalable"><circle class="root"/><g class="tokens" /></g><text class="label"/></g>'}),PlaceView:$e.extend({presentationAttributes:$e.addPresentationAttributes({tokens:["TOKENS"]}),initFlag:$e.prototype.initFlag.concat(["TOKENS"]),confirmUpdate:function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];var n=(t=$e.prototype.confirmUpdate).call.apply(t,[this].concat(e));return this.hasFlag(n,"TOKENS")&&(this.renderTokens(),this.update(),n=this.removeFlag(n,"TOKENS")),n},renderTokens:function(){var e=this.vel.findOne(".tokens").empty();["one","two","three","alot"].forEach(function(t){e.removeClass(t)});var t=this.model.get("tokens");if(t)switch(t){case 1:e.addClass("one"),e.append(q("circle"));break;case 2:e.addClass("two"),e.append([q("circle"),q("circle")]);break;case 3:e.addClass("three"),e.append([q("circle"),q("circle"),q("circle")]);break;default:e.addClass("alot"),e.append(q("text").text(t+""))}}}),Transition:In.define("pn.Transition",{size:{width:12,height:50},attrs:{rect:{width:12,height:50,fill:"#000000",stroke:"#000000"},".label":{"text-anchor":"middle","ref-x":.5,"ref-y":-20,ref:"rect",fill:"#000000","font-size":12}}},{markup:'<g class="rotatable"><g class="scalable"><rect class="root"/></g></g><text class="label"/>'}),Link:We.define("pn.Link",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z"}}})},Nr=In.define("uml.Class",{attrs:{rect:{width:200},".uml-class-name-rect":{stroke:"black","stroke-width":2,fill:"#3498db"},".uml-class-attrs-rect":{stroke:"black","stroke-width":2,fill:"#2980b9"},".uml-class-methods-rect":{stroke:"black","stroke-width":2,fill:"#2980b9"},".uml-class-name-text":{ref:".uml-class-name-rect","ref-y":.5,"ref-x":.5,"text-anchor":"middle","y-alignment":"middle","font-weight":"bold",fill:"black","font-size":12,"font-family":"Times New Roman"},".uml-class-attrs-text":{ref:".uml-class-attrs-rect","ref-y":5,"ref-x":5,fill:"black","font-size":12,"font-family":"Times New Roman"},".uml-class-methods-text":{ref:".uml-class-methods-rect","ref-y":5,"ref-x":5,fill:"black","font-size":12,"font-family":"Times New Roman"}},name:[],attributes:[],methods:[]},{markup:['<g class="rotatable">','<g class="scalable">','<rect class="uml-class-name-rect"/><rect class="uml-class-attrs-rect"/><rect class="uml-class-methods-rect"/>',"</g>",'<text class="uml-class-name-text"/><text class="uml-class-attrs-text"/><text class="uml-class-methods-text"/>',"</g>"].join(""),initialize:function(){this.on("change:name change:attributes change:methods",function(){this.updateRectangles(),this.trigger("uml-update")},this),this.updateRectangles(),In.prototype.initialize.apply(this,arguments)},getClassName:function(){return this.get("name")},updateRectangles:function(){var n=this.get("attrs"),t=[{type:"name",text:this.getClassName()},{type:"attrs",text:this.get("attributes")},{type:"methods",text:this.get("methods")}],r=0;t.forEach(function(t){var e=Array.isArray(t.text)?t.text:[t.text],i=20*e.length+20;n[".uml-class-"+t.type+"-text"].text=e.join("\n"),n[".uml-class-"+t.type+"-rect"].height=i,n[".uml-class-"+t.type+"-rect"].transform="translate(0,"+r+")",r+=i})}}),Mr=$e.extend({initialize:function(){$e.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"uml-update",function(){this.update(),this.resize()})}}),xr=Nr.define("uml.Abstract",{attrs:{".uml-class-name-rect":{fill:"#e74c3c"},".uml-class-attrs-rect":{fill:"#c0392b"},".uml-class-methods-rect":{fill:"#c0392b"}}},{getClassName:function(){return["<<Abstract>>",this.get("name")]}}),Sr=Mr,kr=Nr.define("uml.Interface",{attrs:{".uml-class-name-rect":{fill:"#f1c40f"},".uml-class-attrs-rect":{fill:"#f39c12"},".uml-class-methods-rect":{fill:"#f39c12"}}},{getClassName:function(){return["<<Interface>>",this.get("name")]}}),Dr={basic:zn,standard:Xn,devs:Hn,logic:cr,chess:gr,erd:Cr,fsa:wr,org:yr,pn:br,uml:{Class:Nr,ClassView:Mr,Abstract:xr,AbstractView:Sr,Interface:kr,InterfaceView:Mr,Generalization:We.define("uml.Generalization",{attrs:{".marker-target":{d:"M 20 0 L 0 10 L 20 20 z",fill:"white"}}}),Implementation:We.define("uml.Implementation",{attrs:{".marker-target":{d:"M 20 0 L 0 10 L 20 20 z",fill:"white"},".connection":{"stroke-dasharray":"3,3"}}}),Aggregation:We.define("uml.Aggregation",{attrs:{".marker-target":{d:"M 40 10 L 20 20 L 0 10 L 20 0 z",fill:"white"}}}),Composition:We.define("uml.Composition",{attrs:{".marker-target":{d:"M 40 10 L 20 20 L 0 10 L 20 0 z",fill:"black"}}}),Association:We.define("uml.Association"),State:In.define("uml.State",{attrs:{".uml-state-body":{width:200,height:200,rx:10,ry:10,fill:"#ecf0f1",stroke:"#bdc3c7","stroke-width":3},".uml-state-separator":{stroke:"#bdc3c7","stroke-width":2},".uml-state-name":{ref:".uml-state-body","ref-x":.5,"ref-y":5,"text-anchor":"middle",fill:"#000000","font-family":"Courier New","font-size":14},".uml-state-events":{ref:".uml-state-separator","ref-x":5,"ref-y":5,fill:"#000000","font-family":"Courier New","font-size":14}},name:"State",events:[]},{markup:['<g class="rotatable">','<g class="scalable">','<rect class="uml-state-body"/>',"</g>",'<path class="uml-state-separator"/>','<text class="uml-state-name"/>','<text class="uml-state-events"/>',"</g>"].join(""),initialize:function(){this.on({"change:name":this.updateName,"change:events":this.updateEvents,"change:size":this.updatePath},this),this.updateName(),this.updateEvents(),this.updatePath(),In.prototype.initialize.apply(this,arguments)},updateName:function(){this.attr(".uml-state-name/text",this.get("name"))},updateEvents:function(){this.attr(".uml-state-events/text",this.get("events").join("\n"))},updatePath:function(){var t="M 0 20 L "+this.get("size").width+" 20";this.attr(".uml-state-separator/d",t,{silent:!0})}}),StartState:Cn.define("uml.StartState",{type:"uml.StartState",attrs:{circle:{fill:"#34495e",stroke:"#2c3e50","stroke-width":2,rx:1}}}),EndState:In.define("uml.EndState",{size:{width:20,height:20},attrs:{"circle.outer":{transform:"translate(10, 10)",r:10,fill:"#ffffff",stroke:"#2c3e50"},"circle.inner":{transform:"translate(10, 10)",r:6,fill:"#34495e"}}},{markup:'<g class="rotatable"><g class="scalable"><circle class="outer"/><circle class="inner"/></g></g>'}),Transition:We.define("uml.Transition",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z",fill:"#34495e",stroke:"#2c3e50"},".connection":{stroke:"#2c3e50"}}})}};function zr(t,e){return 0===e?"0%":Math.round(t/e*100)+"%"}function jr(r){return function(t,e,i,n){return(e.isNodeConnection(i)?Zr:Tr)(r,t,e,i,n)}}function Tr(t,e,i,n,r){var o=i.model.angle(),s=i.getNodeUnrotatedBBox(n),a=i.model.getBBox().center();r.rotate(a,o);var l=r.x-s.x,c=r.y-s.y;return t&&(l=zr(l,s.width),c=zr(c,s.height)),e.anchor={name:"topLeft",args:{dx:l,dy:c,rotate:!0}},e}function Zr(t,e,i,n,r){var o=i.getConnection();if(!o)return e;var s=o.closestPointLength(r);if(t){var a=o.length();e.anchor={name:"connectionRatio",args:{ratio:s/a}}}else e.anchor={name:"connectionLength",args:{length:s}};return e}var Lr=he,Pr=jr(!1),Gr=jr(!0),Br={useDefaults:Lr,pinAbsolute:Pr,pinRelative:Gr};function Or(t,e,i){return Gr.call(this.paper,{},e,i,t,this.model).anchor}function Er(t,e){var i=t.model;return e?i.getBBox():i.isLink()?t.getConnection().bbox():t.getNodeUnrotatedBBox(t.el)}var Yr=_e.extend({tagName:"circle",svgElement:!0,className:"marker-vertex",events:{mousedown:"onPointerDown",touchstart:"onPointerDown",dblclick:"onDoubleClick"},documentEvents:{mousemove:"onPointerMove",touchmove:"onPointerMove",mouseup:"onPointerUp",touchend:"onPointerUp",touchcancel:"onPointerUp"},attributes:{r:6,fill:"#33334F",stroke:"#FFFFFF","stroke-width":2,cursor:"move"},position:function(t,e){this.vel.attr({cx:t,cy:e})},onPointerDown:function(t){this.options.guard(t)||(t.stopPropagation(),t.preventDefault(),this.options.paper.undelegateEvents(),this.delegateDocumentEvents(null,t.data),this.trigger("will-change",this,t))},onPointerMove:function(t){this.trigger("changing",this,t)},onDoubleClick:function(t){this.trigger("remove",this,t)},onPointerUp:function(t){this.trigger("changed",this,t),this.undelegateDocumentEvents(),this.options.paper.delegateEvents()}}),Rr=hn.extend({name:"vertices",options:{handleClass:Yr,snapRadius:20,redundancyRemoval:!0,vertexAdding:!0,stopPropagation:!0},children:[{tagName:"path",selector:"connection",className:"joint-vertices-path",attributes:{fill:"none",stroke:"transparent","stroke-width":10,cursor:"cell"}}],handles:null,events:{"mousedown .joint-vertices-path":"onPathPointerDown","touchstart .joint-vertices-path":"onPathPointerDown"},onRender:function(){return this.options.vertexAdding&&(this.renderChildren(),this.updatePath()),this.resetHandles(),this.renderHandles(),this},update:function(){return this.relatedView.model.vertices().length===this.handles.length?this.updateHandles():(this.resetHandles(),this.renderHandles()),this.options.vertexAdding&&this.updatePath(),this},resetHandles:function(){var t=this.handles;if(this.handles=[],this.stopListening(),Array.isArray(t))for(var e=0,i=t.length;e<i;e++)t[e].remove()},renderHandles:function(){for(var e=this,t=this.relatedView.model.vertices(),i=0,n=t.length;i<n;i++){var r=t[i],o=new this.options.handleClass({index:i,paper:this.paper,guard:function(t){return e.guard(t)}});o.render(),o.position(r.x,r.y),this.simulateRelatedView(o.el),o.vel.appendTo(this.el),this.handles.push(o),this.startHandleListening(o)}},updateHandles:function(){for(var t=this.relatedView.model.vertices(),e=0,i=t.length;e<i;e++){var n=t[e],r=this.handles[e];if(!r)return;r.position(n.x,n.y)}},updatePath:function(){var t=this.childNodes.connection;t&&t.setAttribute("d",this.relatedView.getSerializedConnection())},startHandleListening:function(t){var e=this.relatedView;e.can("vertexMove")&&(this.listenTo(t,"will-change",this.onHandleWillChange),this.listenTo(t,"changing",this.onHandleChanging),this.listenTo(t,"changed",this.onHandleChanged)),e.can("vertexRemove")&&this.listenTo(t,"remove",this.onHandleRemove)},getNeighborPoints:function(t){var e=this.relatedView,i=e.model.vertices(),n=0<t?i[t-1]:e.sourceAnchor,r=t<i.length-1?i[t+1]:e.targetAnchor;return{prev:new E(n),next:new E(r)}},onHandleWillChange:function(t,e){this.focus();var i=this.relatedView,n=this.options;i.model.startBatch("vertex-move",{ui:!0,tool:this.cid}),n.stopPropagation||i.notifyPointerdown.apply(i,i.paper.getPointerArgs(e))},onHandleChanging:function(t,e){var i=this.options,n=this.relatedView,r=t.options.index,o=n.paper.getPointerArgs(e),s=o[0],a=o[1],l=o[2],c={x:a,y:l};this.snapVertex(c,r),n.model.vertex(r,c,{ui:!0,tool:this.cid}),t.position(c.x,c.y),i.stopPropagation||n.notifyPointermove(s,a,l)},onHandleChanged:function(t,e){var i=this.options,n=this.relatedView;if(i.vertexAdding&&this.updatePath(),i.redundancyRemoval){n.removeRedundantLinearVertices({ui:!0,tool:this.cid})&&this.render(),this.blur(),n.model.stopBatch("vertex-move",{ui:!0,tool:this.cid}),this.eventData(e).vertexAdded&&n.model.stopBatch("vertex-add",{ui:!0,tool:this.cid});var r=n.paper.getPointerArgs(e),o=r[0],s=r[1],a=r[2];i.stopPropagation||n.notifyPointerup(o,s,a),n.checkMouseleave(o)}},snapVertex:function(t,e){var i=this.options.snapRadius;if(0<i){var n=this.getNeighborPoints(e),r=n.prev,o=n.next;Math.abs(t.x-r.x)<i?t.x=r.x:Math.abs(t.x-o.x)<i&&(t.x=o.x),Math.abs(t.y-r.y)<i?t.y=n.prev.y:Math.abs(t.y-o.y)<i&&(t.y=o.y)}},onHandleRemove:function(t,e){var i=t.options.index,n=this.relatedView;n.model.removeVertex(i,{ui:!0}),this.options.vertexAdding&&this.updatePath(),n.checkMouseleave(ht(e))},onPathPointerDown:function(t){if(!this.guard(t)){t.stopPropagation(),t.preventDefault();var e=ht(t),i=this.paper.snapToGrid(e.clientX,e.clientY).toJSON(),n=this.relatedView;n.model.startBatch("vertex-add",{ui:!0,tool:this.cid});var r=n.getVertexIndex(i.x,i.y);this.snapVertex(i,r),n.model.insertVertex(r,i,{ui:!0,tool:this.cid}),this.render();var o=this.handles[r];this.eventData(e,{vertexAdded:!0}),o.onPointerDown(e)}},onRemove:function(){this.resetHandles()}},{VertexHandle:Yr}),Wr=_e.extend({tagName:"g",svgElement:!0,className:"marker-segment",events:{mousedown:"onPointerDown",touchstart:"onPointerDown"},documentEvents:{mousemove:"onPointerMove",touchmove:"onPointerMove",mouseup:"onPointerUp",touchend:"onPointerUp",touchcancel:"onPointerUp"},children:[{tagName:"line",selector:"line",attributes:{stroke:"#33334F","stroke-width":2,fill:"none","pointer-events":"none"}},{tagName:"rect",selector:"handle",attributes:{width:20,height:8,x:-10,y:-4,rx:4,ry:4,fill:"#33334F",stroke:"#FFFFFF","stroke-width":2}}],onRender:function(){this.renderChildren()},position:function(t,e,i,n){var r=q.createSVGMatrix().translate(t,e).rotate(i),o=this.childNodes.handle;o.setAttribute("transform",q.matrixToTransformString(r)),o.setAttribute("cursor",i%180==0?"row-resize":"col-resize");var s=n.getClosestPoint(new E(t,e)),a=this.childNodes.line;a.setAttribute("x1",t),a.setAttribute("y1",e),a.setAttribute("x2",s.x),a.setAttribute("y2",s.y)},onPointerDown:function(t){this.options.guard(t)||(this.trigger("change:start",this,t),t.stopPropagation(),t.preventDefault(),this.options.paper.undelegateEvents(),this.delegateDocumentEvents(null,t.data))},onPointerMove:function(t){this.trigger("changing",this,t)},onPointerUp:function(t){this.undelegateDocumentEvents(),this.options.paper.delegateEvents(),this.trigger("change:end",this,t)},show:function(){this.el.style.display=""},hide:function(){this.el.style.display="none"}}),Ur=hn.extend({name:"segments",precision:.5,options:{handleClass:Wr,segmentLengthThreshold:40,redundancyRemoval:!0,anchor:Or,snapRadius:10,snapHandle:!0},handles:null,onRender:function(){this.resetHandles();var t=this.relatedView,e=t.model.vertices();e.unshift(t.sourcePoint),e.push(t.targetPoint);for(var i=0,n=e.length;i<n-1;i++){var r=e[i],o=e[i+1],s=this.renderHandle(r,o);this.simulateRelatedView(s.el),this.handles.push(s),s.options.index=i}return this},renderHandle:function(t,e){var i=this,n=new this.options.handleClass({paper:this.paper,guard:function(t){return i.guard(t)}});return n.render(),this.updateHandle(n,t,e),n.vel.appendTo(this.el),this.startHandleListening(n),n},update:function(){return this.render(),this},startHandleListening:function(t){this.listenTo(t,"change:start",this.onHandleChangeStart),this.listenTo(t,"changing",this.onHandleChanging),this.listenTo(t,"change:end",this.onHandleChangeEnd)},resetHandles:function(){var t=this.handles;if(this.handles=[],this.stopListening(),Array.isArray(t))for(var e=0,i=t.length;e<i;e++)t[e].remove()},shiftHandleIndexes:function(t){for(var e=this.handles,i=0,n=e.length;i<n;i++)e[i].options.index+=t},resetAnchor:function(t,e){var i=this.relatedView.model;e?i.prop([t,"anchor"],e,{rewrite:!0,ui:!0,tool:this.cid}):i.removeProp([t,"anchor"],{ui:!0,tool:this.cid})},snapHandle:function(t,e,i){var n=t.options.index,r=this.relatedView.model.vertices(),o=t.options.axis,s=r[n-2]||i.sourceAnchor,a=r[n+1]||i.targetAnchor,l=this.options.snapRadius;return Math.abs(e[o]-s[o])<l?e[o]=s[o]:Math.abs(e[o]-a[o])<l&&(e[o]=a[o]),e},onHandleChanging:function(t,e){var i=this.eventData(e),n=this.relatedView,r=n.paper,o=t.options.index-1,s=ht(e),a=r.snapToGrid(s.clientX,s.clientY),l=this.snapHandle(t,a.clone(),i),c=t.options.axis,g=this.options.snapHandle?0:a[c]-l[c],h=n.model,u=Ot(h.vertices()),d=u[o],f=u[o+1],p=this.options.anchor;"function"!=typeof p&&(p=null);var I=n.sourceView,m=n.sourceBBox,A=!1,v=!1;if(d?0===o?m.containsPoint(d)?(u.shift(),this.shiftHandleIndexes(-1),A=!0):(d[c]=l[c],v=!0):d[c]=l[c]:((d=n.sourceAnchor.toJSON())[c]=l[c],m.containsPoint(d)?(d[c]=l[c],A=!0):(u.unshift(d),this.shiftHandleIndexes(1),v=!0)),p&&I){if(A){var C=i.sourceAnchor.clone();C[c]=l[c];var w=p.call(n,C,I,n.sourceMagnet||I.el,"source",n);this.resetAnchor("source",w)}v&&this.resetAnchor("source",i.sourceAnchorDef)}var y=n.targetView,b=n.targetBBox,N=!1,M=!1;if(f?o===u.length-2?b.containsPoint(f)?(u.pop(),N=!0):(f[c]=l[c],M=!0):f[c]=l[c]:((f=n.targetAnchor.toJSON())[c]=l[c],b.containsPoint(f)?N=!0:(u.push(f),M=!0)),p&&y){if(N){var x=i.targetAnchor.clone();x[c]=l[c];var S=p.call(n,x,y,n.targetMagnet||y.el,"target",n);this.resetAnchor("target",S)}M&&this.resetAnchor("target",i.targetAnchorDef)}h.vertices(u,{ui:!0,tool:this.cid}),this.updateHandle(t,d,f,g)},onHandleChangeStart:function(t,e){var i=t.options.index,n=this.handles;if(Array.isArray(n)){for(var r=0,o=n.length;r<o;r++)r!==i&&n[r].hide();this.focus();var s=this.relatedView,a=s.model;this.eventData(e,{sourceAnchor:s.sourceAnchor.clone(),targetAnchor:s.targetAnchor.clone(),sourceAnchorDef:Bt(a.prop(["source","anchor"])),targetAnchorDef:Bt(a.prop(["target","anchor"]))}),s.model.startBatch("segment-move",{ui:!0,tool:this.cid})}},onHandleChangeEnd:function(t,e){var i=this.relatedView;this.options.redundancyRemoval&&i.removeRedundantLinearVertices({ui:!0,tool:this.cid}),this.render(),this.blur(),i.model.stopBatch("segment-move",{ui:!0,tool:this.cid}),i.checkMouseleave(ht(e))},updateHandle:function(t,e,i,n){var r=Math.abs(e.x-i.x)<this.precision,o=Math.abs(e.y-i.y)<this.precision;if(r||o){var s=new B(e,i);if(s.length()<this.options.segmentLengthThreshold)t.hide();else{var a=s.midpoint(),l=r?"x":"y";a[l]+=n||0;var c=s.vector().vectorAngle(new E(1,0));t.position(a.x,a.y,c,this.relatedView),t.show(),t.options.axis=l}}else t.hide()},onRemove:function(){this.resetHandles()}},{SegmentHandle:Wr}),Xr=hn.extend({tagName:"path",xAxisVector:new E(1,0),events:{mousedown:"onPointerDown",touchstart:"onPointerDown"},documentEvents:{mousemove:"onPointerMove",touchmove:"onPointerMove",mouseup:"onPointerUp",touchend:"onPointerUp",touchcancel:"onPointerUp"},onRender:function(){this.update()},update:function(){var t,e,i=this.ratio,n=this.relatedView,r=n.getTangentAtRatio(i);if(e=r?(t=r.start,r.vector().vectorAngle(this.xAxisVector)||0):(t=n.getPointAtRatio(i),0),!t)return this;var o=q.createSVGMatrix().translate(t.x,t.y).rotate(e);return this.vel.transform(o,{absolute:!0}),this},onPointerDown:function(t){if(!this.guard(t)){t.stopPropagation(),t.preventDefault();var e=this.relatedView;e.model.startBatch("arrowhead-move",{ui:!0,tool:this.cid}),e.can("arrowheadMove")&&(e.startArrowheadMove(this.arrowheadType),this.delegateDocumentEvents(),e.paper.undelegateEvents()),this.focus(),this.el.style.pointerEvents="none"}},onPointerMove:function(t){var e=ht(t),i=this.paper.snapToGrid(e.clientX,e.clientY);this.relatedView.pointermove(e,i.x,i.y)},onPointerUp:function(t){this.undelegateDocumentEvents();var e=this.relatedView,i=e.paper,n=ht(t),r=i.snapToGrid(n.clientX,n.clientY);e.pointerup(n,r.x,r.y),i.delegateEvents(),this.blur(),this.el.style.pointerEvents="",e.model.stopBatch("arrowhead-move",{ui:!0,tool:this.cid})}}),Vr=Xr.extend({name:"target-arrowhead",ratio:1,arrowheadType:"target",attributes:{d:"M -10 -8 10 0 -10 8 Z",fill:"#33334F",stroke:"#FFFFFF","stroke-width":2,cursor:"move",class:"target-arrowhead"}}),Fr=Xr.extend({name:"source-arrowhead",ratio:0,arrowheadType:"source",attributes:{d:"M 10 -8 -10 0 10 8 Z",fill:"#33334F",stroke:"#FFFFFF","stroke-width":2,cursor:"move",class:"source-arrowhead"}}),Jr=hn.extend({name:"button",events:{mousedown:"onPointerDown",touchstart:"onPointerDown"},options:{distance:0,offset:0,rotate:!1},onRender:function(){this.renderChildren(this.options.markup),this.update()},update:function(){return this.position(),this},position:function(){var t=this.relatedView,e=this.vel,i=t.model.isLink()?this.getLinkMatrix():this.getElementMatrix();e.transform(i,{absolute:!0})},getElementMatrix:function(){var t=this.relatedView,e=this.options,i=e.x;void 0===i&&(i=0);var n=e.y;void 0===n&&(n=0);var r=e.offset;void 0===r&&(r={});var o=e.useModelGeometry,s=e.rotate,a=Er(t,o),l=t.model.angle();s||(a=a.bbox(l));var c=r.x;void 0===c&&(c=0);var g=r.y;void 0===g&&(g=0),ft(i)&&(i=parseFloat(i)/100*a.width),ft(n)&&(n=parseFloat(n)/100*a.height);var h=q.createSVGMatrix().translate(a.x+a.width/2,a.y+a.height/2);return s&&(h=h.rotate(l)),h=h.translate(i+c-a.width/2,n+g-a.height/2)},getLinkMatrix:function(){var t=this.relatedView,e=this.options,i=e.offset;void 0===i&&(i=0);var n=e.distance;void 0===n&&(n=0);var r,o,s,a=e.rotate;s=(r=ft(n)?t.getTangentAtRatio(parseFloat(n)/100):t.getTangentAtLength(n))?(o=r.start,r.vector().vectorAngle(new E(1,0))||0):(o=t.getConnection().start,0);var l=q.createSVGMatrix().translate(o.x,o.y).rotate(s).translate(0,i);return a||(l=l.rotate(-s)),l},onPointerDown:function(t){if(!this.guard(t)){t.stopPropagation(),t.preventDefault();var e=this.options.action;"function"==typeof e&&e.call(this.relatedView,t,this.relatedView,this)}}}),Hr=Jr.extend({children:[{tagName:"circle",selector:"button",attributes:{r:7,fill:"#FF1D00",cursor:"pointer"}},{tagName:"path",selector:"icon",attributes:{d:"M -3 -3 3 3 M -3 3 3 -3",fill:"none",stroke:"#FFFFFF","stroke-width":2,"pointer-events":"none"}}],options:{distance:60,offset:0,action:function(t,e,i){e.model.remove({ui:!0,tool:i.cid})}}}),Qr=hn.extend({name:"boundary",tagName:"rect",options:{padding:10,useModelGeometry:!1},attributes:{fill:"none",stroke:"#33334F","stroke-width":.5,"stroke-dasharray":"5, 5","pointer-events":"none"},onRender:function(){this.update()},update:function(){var t=this.relatedView,e=this.options,i=this.vel,n=e.useModelGeometry,r=e.rotate,o=wt(e.padding),s=Er(t,n).moveAndExpand({x:-o.left,y:-o.top,width:o.left+o.right,height:o.top+o.bottom}),a=t.model;if(a.isElement()){var l=a.angle();if(l)if(r){var c=a.getBBox().center();i.rotate(l,c.x,c.y,{absolute:!0})}else s=s.bbox(l)}return i.attr(s.toJSON()),this}}),_r=hn.extend({tagName:"g",type:null,children:[{tagName:"circle",selector:"anchor",attributes:{cursor:"pointer"}},{tagName:"rect",selector:"area",attributes:{"pointer-events":"none",fill:"none",stroke:"#33334F","stroke-dasharray":"2,4",rx:5,ry:5}}],events:{mousedown:"onPointerDown",touchstart:"onPointerDown",dblclick:"onPointerDblClick"},documentEvents:{mousemove:"onPointerMove",touchmove:"onPointerMove",mouseup:"onPointerUp",touchend:"onPointerUp",touchcancel:"onPointerUp"},options:{snap:function(t,e,i,n,r,o){var s=o.options.snapRadius,a="source"===n,l=a?0:-1,c=this.model.vertex(l)||this.getEndAnchor(a?"target":"source");return c&&(Math.abs(c.x-t.x)<s&&(t.x=c.x),Math.abs(c.y-t.y)<s&&(t.y=c.y)),t},anchor:Or,customAnchorAttributes:{"stroke-width":4,stroke:"#33334F",fill:"#FFFFFF",r:5},defaultAnchorAttributes:{"stroke-width":2,stroke:"#FFFFFF",fill:"#33334F",r:6},areaPadding:6,snapRadius:10,restrictArea:!0,redundancyRemoval:!0},onRender:function(){this.renderChildren(),this.toggleArea(!1),this.update()},update:function(){var t=this.type,e=this.relatedView.getEndView(t);return this.el.style.display=e?(this.updateAnchor(),this.updateArea(),""):"none",this},updateAnchor:function(){var t=this.childNodes;if(t){var e=t.anchor;if(e){var i=this.relatedView,n=this.type,r=i.getEndAnchor(n),o=this.options,s=i.model.prop([n,"anchor"]);e.setAttribute("transform","translate("+r.x+","+r.y+")");var a=s?o.customAnchorAttributes:o.defaultAnchorAttributes;for(var l in a)e.setAttribute(l,a[l])}}},updateArea:function(){var t=this.childNodes;if(t){var e=t.area;if(e){var i,n,r,o=this.relatedView,s=this.type,a=o.getEndView(s),l=a.model,c=o.getEndMagnet(s),g=this.options.areaPadding;isFinite(g)||(g=0),a.isNodeConnection(c)?(n=0,r=(i=a.getBBox()).center()):(i=a.getNodeUnrotatedBBox(c),n=l.angle(),r=i.center(),n&&r.rotate(l.getBBox().center(),-n)),i.inflate(g),e.setAttribute("x",-i.width/2),e.setAttribute("y",-i.height/2),e.setAttribute("width",i.width),e.setAttribute("height",i.height),e.setAttribute("transform","translate("+r.x+","+r.y+") rotate("+n+")")}}},toggleArea:function(t){this.childNodes.area.style.display=t?"":"none"},onPointerDown:function(t){this.guard(t)||(t.stopPropagation(),t.preventDefault(),this.paper.undelegateEvents(),this.delegateDocumentEvents(),this.focus(),this.toggleArea(this.options.restrictArea),this.relatedView.model.startBatch("anchor-move",{ui:!0,tool:this.cid}))},resetAnchor:function(t){var e=this.type,i=this.relatedView.model;t?i.prop([e,"anchor"],t,{rewrite:!0,ui:!0,tool:this.cid}):i.removeProp([e,"anchor"],{ui:!0,tool:this.cid})},onPointerMove:function(t){var e,i=this.relatedView,n=this.type,r=i.getEndView(n),o=r.model,s=i.getEndMagnet(n),a=ht(t),l=this.paper.clientToLocalPoint(a.clientX,a.clientY),c=this.options.snap;if("function"==typeof c&&(l=c.call(i,l,r,s,n,i,this),l=new E(l)),this.options.restrictArea)if(r.isNodeConnection(s)){var g=r.getClosestPoint(l);g&&(l=g)}else{var h=r.getNodeUnrotatedBBox(s),u=o.angle(),d=o.getBBox().center(),f=l.clone().rotate(d,u);h.containsPoint(f)||(l=h.pointNearestToPoint(f).rotate(d,-u))}var p=this.options.anchor;"function"==typeof p&&(e=p.call(i,l,r,s,n,i)),this.resetAnchor(e),this.update()},onPointerUp:function(t){this.paper.delegateEvents(),this.undelegateDocumentEvents(),this.blur(),this.toggleArea(!1);var e=this.relatedView;this.options.redundancyRemoval&&e.removeRedundantLinearVertices({ui:!0,tool:this.cid}),e.model.stopBatch("anchor-move",{ui:!0,tool:this.cid})},onPointerDblClick:function(){this.resetAnchor(),this.update()}}),Kr={Vertices:Rr,Segments:Ur,SourceArrowhead:Fr,TargetArrowhead:Vr,SourceAnchor:_r.extend({name:"source-anchor",type:"source"}),TargetAnchor:_r.extend({name:"target-anchor",type:"target"}),Button:Jr,Remove:Hr,Boundary:Qr},qr={Button:Jr,Remove:Hr,Boundary:Qr},$r=q,to={DirectedGraph:fn,PortLabel:Re,Port:Pe};return e.V=q,e.Vectorizer=$r,e.anchors=sn,e.config=$,e.connectionPoints=rn,e.connectionStrategies=Br,e.connectors=Xi,e.dia=dn,e.elementTools=qr,e.env=pn,e.format={},e.g=K,e.highlighters=Fi,e.layout=to,e.linkAnchors=Ki,e.linkTools=Kr,e.mvc=Ke,e.routers=Pi,e.setTheme=function(t,e){Lt(Qe,"setTheme",t,e=e||{}),_e.prototype.defaultTheme=t},e.shapes=Dr,e.ui={},e.util=ze,e.version="3.1.1",e}({},Backbone,_,$);if(void 0!==joint)var g=joint.g,V=joint.V,Vectorizer=joint.V;