import{K as an,L as sn,R as on,M as cn,N as On,O as Pn,P as me,Q as We,T as ze,U as Vn,V as ne,W as Hn,c as bt,s as Rn,g as Bn,v as jn,x as qn,b as Xn,a as Zn,m as Qn,z as Gn,j as Jn,l as de,h as Pt,i as Kn,k as $n,y as tr}from"./mermaid.core-f754f63e.js";import{h as nt,W as er,X as nr}from"./app-56c0004a.js";import{av as rr}from"./framework-62ad666a.js";import{i as un}from"./init-77b53fdd.js";function Rt(t,e){return t==null||e==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function ir(t,e){return t==null||e==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Ce(t){let e,n,r;t.length!==2?(e=Rt,n=(l,g)=>Rt(t(l),g),r=(l,g)=>t(l)-g):(e=t===Rt||t===ir?t:ar,n=t,r=t);function i(l,g,c=0,b=l.length){if(c<b){if(e(g,g)!==0)return b;do{const T=c+b>>>1;n(l[T],g)<0?c=T+1:b=T}while(c<b)}return c}function a(l,g,c=0,b=l.length){if(c<b){if(e(g,g)!==0)return b;do{const T=c+b>>>1;n(l[T],g)<=0?c=T+1:b=T}while(c<b)}return c}function s(l,g,c=0,b=l.length){const T=i(l,g,c,b-1);return T>c&&r(l[T-1],g)>-r(l[T],g)?T-1:T}return{left:i,center:s,right:a}}function ar(){return 0}function sr(t){return t===null?NaN:+t}const or=Ce(Rt),cr=or.right;Ce(sr).center;const ur=cr,lr=Math.sqrt(50),fr=Math.sqrt(10),hr=Math.sqrt(2);function Xt(t,e,n){const r=(e-t)/Math.max(0,n),i=Math.floor(Math.log10(r)),a=r/Math.pow(10,i),s=a>=lr?10:a>=fr?5:a>=hr?2:1;let l,g,c;return i<0?(c=Math.pow(10,-i)/s,l=Math.round(t*c),g=Math.round(e*c),l/c<t&&++l,g/c>e&&--g,c=-c):(c=Math.pow(10,i)*s,l=Math.round(t/c),g=Math.round(e/c),l*c<t&&++l,g*c>e&&--g),g<l&&.5<=n&&n<2?Xt(t,e,n*2):[l,g,c]}function mr(t,e,n){if(e=+e,t=+t,n=+n,!(n>0))return[];if(t===e)return[t];const r=e<t,[i,a,s]=r?Xt(e,t,n):Xt(t,e,n);if(!(a>=i))return[];const l=a-i+1,g=new Array(l);if(r)if(s<0)for(let c=0;c<l;++c)g[c]=(a-c)/-s;else for(let c=0;c<l;++c)g[c]=(a-c)*s;else if(s<0)for(let c=0;c<l;++c)g[c]=(i+c)/-s;else for(let c=0;c<l;++c)g[c]=(i+c)*s;return g}function ge(t,e,n){return e=+e,t=+t,n=+n,Xt(t,e,n)[2]}function ye(t,e,n){e=+e,t=+t,n=+n;const r=e<t,i=r?ge(e,t,n):ge(t,e,n);return(r?-1:1)*(i<0?1/-i:i)}function dr(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n<r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n<i||n===void 0&&i>=i)&&(n=i)}return n}function gr(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n>i||n===void 0&&i>=i)&&(n=i)}return n}function yr(t){return t}var Bt=1,re=2,ke=3,Vt=4,Oe=1e-6;function kr(t){return"translate("+t+",0)"}function pr(t){return"translate(0,"+t+")"}function Tr(t){return e=>+t(e)}function vr(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function br(){return!this.__axis}function ln(t,e){var n=[],r=null,i=null,a=6,s=6,l=3,g=typeof window<"u"&&window.devicePixelRatio>1?0:.5,c=t===Bt||t===Vt?-1:1,b=t===Vt||t===re?"x":"y",T=t===Bt||t===ke?kr:pr;function y(k){var _=r??(e.ticks?e.ticks.apply(e,n):e.domain()),B=i??(e.tickFormat?e.tickFormat.apply(e,n):yr),j=Math.max(a,0)+l,G=e.range(),tt=+G[0]+g,O=+G[G.length-1]+g,H=(e.bandwidth?vr:Tr)(e.copy(),g),z=k.selection?k.selection():k,M=z.selectAll(".domain").data([null]),I=z.selectAll(".tick").data(_,e).order(),R=I.exit(),w=I.enter().append("g").attr("class","tick"),d=I.select("line"),u=I.select("text");M=M.merge(M.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),I=I.merge(w),d=d.merge(w.append("line").attr("stroke","currentColor").attr(b+"2",c*a)),u=u.merge(w.append("text").attr("fill","currentColor").attr(b,c*j).attr("dy",t===Bt?"0em":t===ke?"0.71em":"0.32em")),k!==z&&(M=M.transition(k),I=I.transition(k),d=d.transition(k),u=u.transition(k),R=R.transition(k).attr("opacity",Oe).attr("transform",function(h){return isFinite(h=H(h))?T(h+g):this.getAttribute("transform")}),w.attr("opacity",Oe).attr("transform",function(h){var v=this.parentNode.__axis;return T((v&&isFinite(v=v(h))?v:H(h))+g)})),R.remove(),M.attr("d",t===Vt||t===re?s?"M"+c*s+","+tt+"H"+g+"V"+O+"H"+c*s:"M"+g+","+tt+"V"+O:s?"M"+tt+","+c*s+"V"+g+"H"+O+"V"+c*s:"M"+tt+","+g+"H"+O),I.attr("opacity",1).attr("transform",function(h){return T(H(h)+g)}),d.attr(b+"2",c*a),u.attr(b,c*j).text(B),z.filter(br).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===re?"start":t===Vt?"end":"middle"),z.each(function(){this.__axis=H})}return y.scale=function(k){return arguments.length?(e=k,y):e},y.ticks=function(){return n=Array.from(arguments),y},y.tickArguments=function(k){return arguments.length?(n=k==null?[]:Array.from(k),y):n.slice()},y.tickValues=function(k){return arguments.length?(r=k==null?null:Array.from(k),y):r&&r.slice()},y.tickFormat=function(k){return arguments.length?(i=k,y):i},y.tickSize=function(k){return arguments.length?(a=s=+k,y):a},y.tickSizeInner=function(k){return arguments.length?(a=+k,y):a},y.tickSizeOuter=function(k){return arguments.length?(s=+k,y):s},y.tickPadding=function(k){return arguments.length?(l=+k,y):l},y.offset=function(k){return arguments.length?(g=+k,y):g},y}function xr(t){return ln(Bt,t)}function wr(t){return ln(ke,t)}const Mr=Math.PI/180,Cr=180/Math.PI,Zt=18,fn=.96422,hn=1,mn=.82521,dn=4/29,xt=6/29,gn=3*xt*xt,Dr=xt*xt*xt;function yn(t){if(t instanceof ot)return new ot(t.l,t.a,t.b,t.opacity);if(t instanceof ut)return kn(t);t instanceof on||(t=On(t));var e=oe(t.r),n=oe(t.g),r=oe(t.b),i=ie((.2225045*e+.7168786*n+.0606169*r)/hn),a,s;return e===n&&n===r?a=s=i:(a=ie((.4360747*e+.3850649*n+.1430804*r)/fn),s=ie((.0139322*e+.0971045*n+.7141733*r)/mn)),new ot(116*i-16,500*(a-i),200*(i-s),t.opacity)}function Sr(t,e,n,r){return arguments.length===1?yn(t):new ot(t,e,n,r??1)}function ot(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}an(ot,Sr,sn(cn,{brighter(t){return new ot(this.l+Zt*(t??1),this.a,this.b,this.opacity)},darker(t){return new ot(this.l-Zt*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=fn*ae(e),t=hn*ae(t),n=mn*ae(n),new on(se(3.1338561*e-1.6168667*t-.4906146*n),se(-.9787684*e+1.9161415*t+.033454*n),se(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function ie(t){return t>Dr?Math.pow(t,1/3):t/gn+dn}function ae(t){return t>xt?t*t*t:gn*(t-dn)}function se(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function oe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function _r(t){if(t instanceof ut)return new ut(t.h,t.c,t.l,t.opacity);if(t instanceof ot||(t=yn(t)),t.a===0&&t.b===0)return new ut(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Cr;return new ut(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function pe(t,e,n,r){return arguments.length===1?_r(t):new ut(t,e,n,r??1)}function ut(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function kn(t){if(isNaN(t.h))return new ot(t.l,0,0,t.opacity);var e=t.h*Mr;return new ot(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}an(ut,pe,sn(cn,{brighter(t){return new ut(this.h,this.c,this.l+Zt*(t??1),this.opacity)},darker(t){return new ut(this.h,this.c,this.l-Zt*(t??1),this.opacity)},rgb(){return kn(this).rgb()}}));function Ur(t,e){e||(e=[]);var n=t?Math.min(e.length,t.length):0,r=e.slice(),i;return function(a){for(i=0;i<n;++i)r[i]=t[i]*(1-a)+e[i]*a;return r}}function Fr(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function Ar(t,e){var n=e?e.length:0,r=t?Math.min(n,t.length):0,i=new Array(r),a=new Array(n),s;for(s=0;s<r;++s)i[s]=De(t[s],e[s]);for(;s<n;++s)a[s]=e[s];return function(l){for(s=0;s<r;++s)a[s]=i[s](l);return a}}function Er(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function Nr(t,e){var n={},r={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?n[i]=De(t[i],e[i]):r[i]=e[i];return function(a){for(i in n)r[i]=n[i](a);return r}}function De(t,e){var n=typeof e,r;return e==null||n==="boolean"?Pn(e):(n==="number"?me:n==="string"?(r=We(e))?(e=r,ze):Vn:e instanceof We?ze:e instanceof Date?Er:Fr(e)?Ur:Array.isArray(e)?Ar:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?Nr:me)(t,e)}function Lr(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}function Ir(t){return function(e,n){var r=t((e=pe(e)).h,(n=pe(n)).h),i=ne(e.c,n.c),a=ne(e.l,n.l),s=ne(e.opacity,n.opacity);return function(l){return e.h=r(l),e.c=i(l),e.l=a(l),e.opacity=s(l),e+""}}}const Yr=Ir(Hn);function Wr(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function Qt(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Mt(t){return t=Qt(Math.abs(t)),t?t[1]:NaN}function zr(t,e){return function(n,r){for(var i=n.length,a=[],s=0,l=t[0],g=0;i>0&&l>0&&(g+l+1>r&&(l=Math.max(1,r-g)),a.push(n.substring(i-=l,i+l)),!((g+=l+1)>r));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}function Or(t){return function(e){return e.replace(/[0-9]/g,function(n){return t[+n]})}}var Pr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Gt(t){if(!(e=Pr.exec(t)))throw new Error("invalid format: "+t);var e;return new Se({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}Gt.prototype=Se.prototype;function Se(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}Se.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Vr(t){t:for(var e=t.length,n=1,r=-1,i;n<e;++n)switch(t[n]){case".":r=i=n;break;case"0":r===0&&(r=n),i=n;break;default:if(!+t[n])break t;r>0&&(r=0);break}return r>0?t.slice(0,r)+t.slice(i+1):t}var pn;function Hr(t,e){var n=Qt(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(pn=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=r.length;return a===s?r:a>s?r+new Array(a-s+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Qt(t,Math.max(0,e+a-1))[0]}function Pe(t,e){var n=Qt(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}const Ve={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:Wr,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Pe(t*100,e),r:Pe,s:Hr,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function He(t){return t}var Re=Array.prototype.map,Be=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Rr(t){var e=t.grouping===void 0||t.thousands===void 0?He:zr(Re.call(t.grouping,Number),t.thousands+""),n=t.currency===void 0?"":t.currency[0]+"",r=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?He:Or(Re.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"−":t.minus+"",g=t.nan===void 0?"NaN":t.nan+"";function c(T){T=Gt(T);var y=T.fill,k=T.align,_=T.sign,B=T.symbol,j=T.zero,G=T.width,tt=T.comma,O=T.precision,H=T.trim,z=T.type;z==="n"?(tt=!0,z="g"):Ve[z]||(O===void 0&&(O=12),H=!0,z="g"),(j||y==="0"&&k==="=")&&(j=!0,y="0",k="=");var M=B==="$"?n:B==="#"&&/[boxX]/.test(z)?"0"+z.toLowerCase():"",I=B==="$"?r:/[%p]/.test(z)?s:"",R=Ve[z],w=/[defgprs%]/.test(z);O=O===void 0?6:/[gprs]/.test(z)?Math.max(1,Math.min(21,O)):Math.max(0,Math.min(20,O));function d(u){var h=M,v=I,o,N,f;if(z==="c")v=R(u)+v,u="";else{u=+u;var S=u<0||1/u<0;if(u=isNaN(u)?g:R(Math.abs(u),O),H&&(u=Vr(u)),S&&+u==0&&_!=="+"&&(S=!1),h=(S?_==="("?_:l:_==="-"||_==="("?"":_)+h,v=(z==="s"?Be[8+pn/3]:"")+v+(S&&_==="("?")":""),w){for(o=-1,N=u.length;++o<N;)if(f=u.charCodeAt(o),48>f||f>57){v=(f===46?i+u.slice(o+1):u.slice(o))+v,u=u.slice(0,o);break}}}tt&&!j&&(u=e(u,1/0));var V=h.length+u.length+v.length,q=V<G?new Array(G-V+1).join(y):"";switch(tt&&j&&(u=e(q+u,q.length?G-v.length:1/0),q=""),k){case"<":u=h+u+v+q;break;case"=":u=h+q+u+v;break;case"^":u=q.slice(0,V=q.length>>1)+h+u+v+q.slice(V);break;default:u=q+h+u+v;break}return a(u)}return d.toString=function(){return T+""},d}function b(T,y){var k=c((T=Gt(T),T.type="f",T)),_=Math.max(-8,Math.min(8,Math.floor(Mt(y)/3)))*3,B=Math.pow(10,-_),j=Be[8+_/3];return function(G){return k(B*G)+j}}return{format:c,formatPrefix:b}}var Ht,Tn,vn;Br({thousands:",",grouping:[3],currency:["$",""]});function Br(t){return Ht=Rr(t),Tn=Ht.format,vn=Ht.formatPrefix,Ht}function jr(t){return Math.max(0,-Mt(Math.abs(t)))}function qr(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Mt(e)/3)))*3-Mt(Math.abs(t)))}function Xr(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Mt(e)-Mt(t))+1}function Zr(t){return function(){return t}}function Qr(t){return+t}var je=[0,1];function Tt(t){return t}function Te(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:Zr(isNaN(e)?NaN:.5)}function Gr(t,e){var n;return t>e&&(n=t,t=e,e=n),function(r){return Math.max(t,Math.min(e,r))}}function Jr(t,e,n){var r=t[0],i=t[1],a=e[0],s=e[1];return i<r?(r=Te(i,r),a=n(s,a)):(r=Te(r,i),a=n(a,s)),function(l){return a(r(l))}}function Kr(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),a=new Array(r),s=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<r;)i[s]=Te(t[s],t[s+1]),a[s]=n(e[s],e[s+1]);return function(l){var g=ur(t,l,1,r)-1;return a[g](i[g](l))}}function bn(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function $r(){var t=je,e=je,n=De,r,i,a,s=Tt,l,g,c;function b(){var y=Math.min(t.length,e.length);return s!==Tt&&(s=Gr(t[0],t[y-1])),l=y>2?Kr:Jr,g=c=null,T}function T(y){return y==null||isNaN(y=+y)?a:(g||(g=l(t.map(r),e,n)))(r(s(y)))}return T.invert=function(y){return s(i((c||(c=l(e,t.map(r),me)))(y)))},T.domain=function(y){return arguments.length?(t=Array.from(y,Qr),b()):t.slice()},T.range=function(y){return arguments.length?(e=Array.from(y),b()):e.slice()},T.rangeRound=function(y){return e=Array.from(y),n=Lr,b()},T.clamp=function(y){return arguments.length?(s=y?!0:Tt,b()):s!==Tt},T.interpolate=function(y){return arguments.length?(n=y,b()):n},T.unknown=function(y){return arguments.length?(a=y,T):a},function(y,k){return r=y,i=k,b()}}function xn(){return $r()(Tt,Tt)}function ti(t,e,n,r){var i=ye(t,e,n),a;switch(r=Gt(r??",f"),r.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return r.precision==null&&!isNaN(a=qr(i,s))&&(r.precision=a),vn(r,s)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(a=Xr(i,Math.max(Math.abs(t),Math.abs(e))))&&(r.precision=a-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(a=jr(i))&&(r.precision=a-(r.type==="%")*2);break}}return Tn(r)}function ei(t){var e=t.domain;return t.ticks=function(n){var r=e();return mr(r[0],r[r.length-1],n??10)},t.tickFormat=function(n,r){var i=e();return ti(i[0],i[i.length-1],n??10,r)},t.nice=function(n){n==null&&(n=10);var r=e(),i=0,a=r.length-1,s=r[i],l=r[a],g,c,b=10;for(l<s&&(c=s,s=l,l=c,c=i,i=a,a=c);b-- >0;){if(c=ge(s,l,n),c===g)return r[i]=s,r[a]=l,e(r);if(c>0)s=Math.floor(s/c)*c,l=Math.ceil(l/c)*c;else if(c<0)s=Math.ceil(s*c)/c,l=Math.floor(l*c)/c;else break;g=c}return t},t}function wn(){var t=xn();return t.copy=function(){return bn(t,wn())},un.apply(t,arguments),ei(t)}function ni(t,e){t=t.slice();var n=0,r=t.length-1,i=t[n],a=t[r],s;return a<i&&(s=n,n=r,r=s,s=i,i=a,a=s),t[n]=e.floor(i),t[r]=e.ceil(a),t}const ce=new Date,ue=new Date;function Q(t,e,n,r){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=a=>(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{const s=i(a),l=i.ceil(a);return a-s<l-a?s:l},i.offset=(a,s)=>(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,l)=>{const g=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a<s)||!(l>0))return g;let c;do g.push(c=new Date(+a)),e(a,l),t(a);while(c<a&&a<s);return g},i.filter=a=>Q(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),n&&(i.count=(a,s)=>(ce.setTime(+a),ue.setTime(+s),t(ce),t(ue),Math.floor(n(ce,ue))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(r?s=>r(s)%a===0:s=>i.count(0,s)%a===0):i)),i}const Jt=Q(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);Jt.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?Q(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):Jt);Jt.range;const lt=1e3,it=lt*60,ft=it*60,ht=ft*24,_e=ht*7,qe=ht*30,le=ht*365,vt=Q(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*lt)},(t,e)=>(e-t)/lt,t=>t.getUTCSeconds());vt.range;const Lt=Q(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*lt)},(t,e)=>{t.setTime(+t+e*it)},(t,e)=>(e-t)/it,t=>t.getMinutes());Lt.range;const ri=Q(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*it)},(t,e)=>(e-t)/it,t=>t.getUTCMinutes());ri.range;const It=Q(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*lt-t.getMinutes()*it)},(t,e)=>{t.setTime(+t+e*ft)},(t,e)=>(e-t)/ft,t=>t.getHours());It.range;const ii=Q(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*ft)},(t,e)=>(e-t)/ft,t=>t.getUTCHours());ii.range;const dt=Q(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*it)/ht,t=>t.getDate()-1);dt.range;const Ue=Q(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/ht,t=>t.getUTCDate()-1);Ue.range;const ai=Q(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/ht,t=>Math.floor(t/ht));ai.range;function yt(t){return Q(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,n)=>{e.setDate(e.getDate()+n*7)},(e,n)=>(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*it)/_e)}const Ct=yt(0),Kt=yt(1),si=yt(2),oi=yt(3),Dt=yt(4),ci=yt(5),ui=yt(6);Ct.range;Kt.range;si.range;oi.range;Dt.range;ci.range;ui.range;function kt(t){return Q(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCDate(e.getUTCDate()+n*7)},(e,n)=>(n-e)/_e)}const Mn=kt(0),$t=kt(1),li=kt(2),fi=kt(3),St=kt(4),hi=kt(5),mi=kt(6);Mn.range;$t.range;li.range;fi.range;St.range;hi.range;mi.range;const Yt=Q(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth());Yt.range;const di=Q(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());di.range;const mt=Q(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());mt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:Q(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)});mt.range;const gt=Q(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());gt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:Q(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)});gt.range;function gi(t,e,n,r,i,a){const s=[[vt,1,lt],[vt,5,5*lt],[vt,15,15*lt],[vt,30,30*lt],[a,1,it],[a,5,5*it],[a,15,15*it],[a,30,30*it],[i,1,ft],[i,3,3*ft],[i,6,6*ft],[i,12,12*ft],[r,1,ht],[r,2,2*ht],[n,1,_e],[e,1,qe],[e,3,3*qe],[t,1,le]];function l(c,b,T){const y=b<c;y&&([c,b]=[b,c]);const k=T&&typeof T.range=="function"?T:g(c,b,T),_=k?k.range(c,+b+1):[];return y?_.reverse():_}function g(c,b,T){const y=Math.abs(b-c)/T,k=Ce(([,,j])=>j).right(s,y);if(k===s.length)return t.every(ye(c/le,b/le,T));if(k===0)return Jt.every(Math.max(ye(c,b,T),1));const[_,B]=s[y/s[k-1][2]<s[k][2]/y?k-1:k];return _.every(B)}return[l,g]}const[yi,ki]=gi(mt,Yt,Ct,dt,It,Lt);function fe(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function he(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function At(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function pi(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,s=t.shortDays,l=t.months,g=t.shortMonths,c=Et(i),b=Nt(i),T=Et(a),y=Nt(a),k=Et(s),_=Nt(s),B=Et(l),j=Nt(l),G=Et(g),tt=Nt(g),O={a:S,A:V,b:q,B:p,c:null,d:Ke,e:Ke,f:Vi,g:Ji,G:$i,H:zi,I:Oi,j:Pi,L:Cn,m:Hi,M:Ri,p:U,q:D,Q:en,s:nn,S:Bi,u:ji,U:qi,V:Xi,w:Zi,W:Qi,x:null,X:null,y:Gi,Y:Ki,Z:ta,"%":tn},H={a:W,A:P,b:F,B:L,c:null,d:$e,e:$e,f:ia,g:da,G:ya,H:ea,I:na,j:ra,L:Sn,m:aa,M:sa,p:Ft,q:J,Q:en,s:nn,S:oa,u:ca,U:ua,V:la,w:fa,W:ha,x:null,X:null,y:ma,Y:ga,Z:ka,"%":tn},z={a:d,A:u,b:h,B:v,c:o,d:Ge,e:Ge,f:Li,g:Qe,G:Ze,H:Je,I:Je,j:Fi,L:Ni,m:Ui,M:Ai,p:w,q:_i,Q:Yi,s:Wi,S:Ei,u:wi,U:Mi,V:Ci,w:xi,W:Di,x:N,X:f,y:Qe,Y:Ze,Z:Si,"%":Ii};O.x=M(n,O),O.X=M(r,O),O.c=M(e,O),H.x=M(n,H),H.X=M(r,H),H.c=M(e,H);function M(x,C){return function(A){var m=[],X=-1,E=0,et=x.length,K,at,rt;for(A instanceof Date||(A=new Date(+A));++X<et;)x.charCodeAt(X)===37&&(m.push(x.slice(E,X)),(at=Xe[K=x.charAt(++X)])!=null?K=x.charAt(++X):at=K==="e"?" ":"0",(rt=C[K])&&(K=rt(A,at)),m.push(K),E=X+1);return m.push(x.slice(E,X)),m.join("")}}function I(x,C){return function(A){var m=At(1900,void 0,1),X=R(m,x,A+="",0),E,et;if(X!=A.length)return null;if("Q"in m)return new Date(m.Q);if("s"in m)return new Date(m.s*1e3+("L"in m?m.L:0));if(C&&!("Z"in m)&&(m.Z=0),"p"in m&&(m.H=m.H%12+m.p*12),m.m===void 0&&(m.m="q"in m?m.q:0),"V"in m){if(m.V<1||m.V>53)return null;"w"in m||(m.w=1),"Z"in m?(E=he(At(m.y,0,1)),et=E.getUTCDay(),E=et>4||et===0?$t.ceil(E):$t(E),E=Ue.offset(E,(m.V-1)*7),m.y=E.getUTCFullYear(),m.m=E.getUTCMonth(),m.d=E.getUTCDate()+(m.w+6)%7):(E=fe(At(m.y,0,1)),et=E.getDay(),E=et>4||et===0?Kt.ceil(E):Kt(E),E=dt.offset(E,(m.V-1)*7),m.y=E.getFullYear(),m.m=E.getMonth(),m.d=E.getDate()+(m.w+6)%7)}else("W"in m||"U"in m)&&("w"in m||(m.w="u"in m?m.u%7:"W"in m?1:0),et="Z"in m?he(At(m.y,0,1)).getUTCDay():fe(At(m.y,0,1)).getDay(),m.m=0,m.d="W"in m?(m.w+6)%7+m.W*7-(et+5)%7:m.w+m.U*7-(et+6)%7);return"Z"in m?(m.H+=m.Z/100|0,m.M+=m.Z%100,he(m)):fe(m)}}function R(x,C,A,m){for(var X=0,E=C.length,et=A.length,K,at;X<E;){if(m>=et)return-1;if(K=C.charCodeAt(X++),K===37){if(K=C.charAt(X++),at=z[K in Xe?C.charAt(X++):K],!at||(m=at(x,A,m))<0)return-1}else if(K!=A.charCodeAt(m++))return-1}return m}function w(x,C,A){var m=c.exec(C.slice(A));return m?(x.p=b.get(m[0].toLowerCase()),A+m[0].length):-1}function d(x,C,A){var m=k.exec(C.slice(A));return m?(x.w=_.get(m[0].toLowerCase()),A+m[0].length):-1}function u(x,C,A){var m=T.exec(C.slice(A));return m?(x.w=y.get(m[0].toLowerCase()),A+m[0].length):-1}function h(x,C,A){var m=G.exec(C.slice(A));return m?(x.m=tt.get(m[0].toLowerCase()),A+m[0].length):-1}function v(x,C,A){var m=B.exec(C.slice(A));return m?(x.m=j.get(m[0].toLowerCase()),A+m[0].length):-1}function o(x,C,A){return R(x,e,C,A)}function N(x,C,A){return R(x,n,C,A)}function f(x,C,A){return R(x,r,C,A)}function S(x){return s[x.getDay()]}function V(x){return a[x.getDay()]}function q(x){return g[x.getMonth()]}function p(x){return l[x.getMonth()]}function U(x){return i[+(x.getHours()>=12)]}function D(x){return 1+~~(x.getMonth()/3)}function W(x){return s[x.getUTCDay()]}function P(x){return a[x.getUTCDay()]}function F(x){return g[x.getUTCMonth()]}function L(x){return l[x.getUTCMonth()]}function Ft(x){return i[+(x.getUTCHours()>=12)]}function J(x){return 1+~~(x.getUTCMonth()/3)}return{format:function(x){var C=M(x+="",O);return C.toString=function(){return x},C},parse:function(x){var C=I(x+="",!1);return C.toString=function(){return x},C},utcFormat:function(x){var C=M(x+="",H);return C.toString=function(){return x},C},utcParse:function(x){var C=I(x+="",!0);return C.toString=function(){return x},C}}}var Xe={"-":"",_:" ",0:"0"},$=/^\s*\d+/,Ti=/^%/,vi=/[\\^$*+?|[\]().{}]/g;function Y(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a<n?new Array(n-a+1).join(e)+i:i)}function bi(t){return t.replace(vi,"\\$&")}function Et(t){return new RegExp("^(?:"+t.map(bi).join("|")+")","i")}function Nt(t){return new Map(t.map((e,n)=>[e.toLowerCase(),n]))}function xi(t,e,n){var r=$.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function wi(t,e,n){var r=$.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Mi(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Ci(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Di(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Ze(t,e,n){var r=$.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Qe(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Si(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function _i(t,e,n){var r=$.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function Ui(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Ge(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Fi(t,e,n){var r=$.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Je(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Ai(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Ei(t,e,n){var r=$.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Ni(t,e,n){var r=$.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Li(t,e,n){var r=$.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Ii(t,e,n){var r=Ti.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Yi(t,e,n){var r=$.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Wi(t,e,n){var r=$.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Ke(t,e){return Y(t.getDate(),e,2)}function zi(t,e){return Y(t.getHours(),e,2)}function Oi(t,e){return Y(t.getHours()%12||12,e,2)}function Pi(t,e){return Y(1+dt.count(mt(t),t),e,3)}function Cn(t,e){return Y(t.getMilliseconds(),e,3)}function Vi(t,e){return Cn(t,e)+"000"}function Hi(t,e){return Y(t.getMonth()+1,e,2)}function Ri(t,e){return Y(t.getMinutes(),e,2)}function Bi(t,e){return Y(t.getSeconds(),e,2)}function ji(t){var e=t.getDay();return e===0?7:e}function qi(t,e){return Y(Ct.count(mt(t)-1,t),e,2)}function Dn(t){var e=t.getDay();return e>=4||e===0?Dt(t):Dt.ceil(t)}function Xi(t,e){return t=Dn(t),Y(Dt.count(mt(t),t)+(mt(t).getDay()===4),e,2)}function Zi(t){return t.getDay()}function Qi(t,e){return Y(Kt.count(mt(t)-1,t),e,2)}function Gi(t,e){return Y(t.getFullYear()%100,e,2)}function Ji(t,e){return t=Dn(t),Y(t.getFullYear()%100,e,2)}function Ki(t,e){return Y(t.getFullYear()%1e4,e,4)}function $i(t,e){var n=t.getDay();return t=n>=4||n===0?Dt(t):Dt.ceil(t),Y(t.getFullYear()%1e4,e,4)}function ta(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Y(e/60|0,"0",2)+Y(e%60,"0",2)}function $e(t,e){return Y(t.getUTCDate(),e,2)}function ea(t,e){return Y(t.getUTCHours(),e,2)}function na(t,e){return Y(t.getUTCHours()%12||12,e,2)}function ra(t,e){return Y(1+Ue.count(gt(t),t),e,3)}function Sn(t,e){return Y(t.getUTCMilliseconds(),e,3)}function ia(t,e){return Sn(t,e)+"000"}function aa(t,e){return Y(t.getUTCMonth()+1,e,2)}function sa(t,e){return Y(t.getUTCMinutes(),e,2)}function oa(t,e){return Y(t.getUTCSeconds(),e,2)}function ca(t){var e=t.getUTCDay();return e===0?7:e}function ua(t,e){return Y(Mn.count(gt(t)-1,t),e,2)}function _n(t){var e=t.getUTCDay();return e>=4||e===0?St(t):St.ceil(t)}function la(t,e){return t=_n(t),Y(St.count(gt(t),t)+(gt(t).getUTCDay()===4),e,2)}function fa(t){return t.getUTCDay()}function ha(t,e){return Y($t.count(gt(t)-1,t),e,2)}function ma(t,e){return Y(t.getUTCFullYear()%100,e,2)}function da(t,e){return t=_n(t),Y(t.getUTCFullYear()%100,e,2)}function ga(t,e){return Y(t.getUTCFullYear()%1e4,e,4)}function ya(t,e){var n=t.getUTCDay();return t=n>=4||n===0?St(t):St.ceil(t),Y(t.getUTCFullYear()%1e4,e,4)}function ka(){return"+0000"}function tn(){return"%"}function en(t){return+t}function nn(t){return Math.floor(+t/1e3)}var pt,te;pa({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function pa(t){return pt=pi(t),te=pt.format,pt.parse,pt.utcFormat,pt.utcParse,pt}function Ta(t){return new Date(t)}function va(t){return t instanceof Date?+t:+new Date(+t)}function Un(t,e,n,r,i,a,s,l,g,c){var b=xn(),T=b.invert,y=b.domain,k=c(".%L"),_=c(":%S"),B=c("%I:%M"),j=c("%I %p"),G=c("%a %d"),tt=c("%b %d"),O=c("%B"),H=c("%Y");function z(M){return(g(M)<M?k:l(M)<M?_:s(M)<M?B:a(M)<M?j:r(M)<M?i(M)<M?G:tt:n(M)<M?O:H)(M)}return b.invert=function(M){return new Date(T(M))},b.domain=function(M){return arguments.length?y(Array.from(M,va)):y().map(Ta)},b.ticks=function(M){var I=y();return t(I[0],I[I.length-1],M??10)},b.tickFormat=function(M,I){return I==null?z:c(I)},b.nice=function(M){var I=y();return(!M||typeof M.range!="function")&&(M=e(I[0],I[I.length-1],M??10)),M?y(ni(I,M)):b},b.copy=function(){return bn(b,Un(t,e,n,r,i,a,s,l,g,c))},b}function ba(){return un.apply(Un(yi,ki,mt,Yt,Ct,dt,It,Lt,vt,te).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}var ve={},xa={get exports(){return ve},set exports(t){ve=t}};(function(t,e){(function(n,r){t.exports=r()})(rr,function(){var n="day";return function(r,i,a){var s=function(c){return c.add(4-c.isoWeekday(),n)},l=i.prototype;l.isoWeekYear=function(){return s(this).year()},l.isoWeek=function(c){if(!this.$utils().u(c))return this.add(7*(c-this.isoWeek()),n);var b,T,y,k,_=s(this),B=(b=this.isoWeekYear(),T=this.$u,y=(T?a.utc:a)().year(b).startOf("year"),k=4-y.isoWeekday(),y.isoWeekday()>4&&(k+=7),y.add(k,n));return _.diff(B,"week")+1},l.isoWeekday=function(c){return this.$utils().u(c)?this.day()||7:this.day(this.day()%7?c:c-7)};var g=l.startOf;l.startOf=function(c,b){var T=this.$utils(),y=!!T.u(b)||b;return T.p(c)==="isoweek"?y?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):g.bind(this)(c,b)}}})})(xa);const wa=ve;var be=function(){var t=function(R,w,d,u){for(d=d||{},u=R.length;u--;d[R[u]]=w);return d},e=[1,3],n=[1,5],r=[7,9,11,12,13,14,15,16,17,18,19,20,21,23,25,26,28,35,40],i=[1,15],a=[1,16],s=[1,17],l=[1,18],g=[1,19],c=[1,20],b=[1,21],T=[1,22],y=[1,23],k=[1,24],_=[1,25],B=[1,26],j=[1,27],G=[1,29],tt=[1,31],O=[1,34],H=[5,7,9,11,12,13,14,15,16,17,18,19,20,21,23,25,26,28,35,40],z={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,topAxis:14,axisFormat:15,tickInterval:16,excludes:17,includes:18,todayMarker:19,title:20,acc_title:21,acc_title_value:22,acc_descr:23,acc_descr_value:24,acc_descr_multiline_value:25,section:26,clickStatement:27,taskTxt:28,taskData:29,openDirective:30,typeDirective:31,closeDirective:32,":":33,argDirective:34,click:35,callbackname:36,callbackargs:37,href:38,clickStatementDebug:39,open_directive:40,type_directive:41,arg_directive:42,close_directive:43,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"topAxis",15:"axisFormat",16:"tickInterval",17:"excludes",18:"includes",19:"todayMarker",20:"title",21:"acc_title",22:"acc_title_value",23:"acc_descr",24:"acc_descr_value",25:"acc_descr_multiline_value",26:"section",28:"taskTxt",29:"taskData",33:":",35:"click",36:"callbackname",37:"callbackargs",38:"href",40:"open_directive",41:"type_directive",42:"arg_directive",43:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[27,2],[27,3],[27,3],[27,4],[27,3],[27,4],[27,2],[39,2],[39,3],[39,3],[39,4],[39,3],[39,4],[39,2],[30,1],[31,1],[34,1],[32,1]],performAction:function(w,d,u,h,v,o,N){var f=o.length-1;switch(v){case 2:return o[f-1];case 3:this.$=[];break;case 4:o[f-1].push(o[f]),this.$=o[f-1];break;case 5:case 6:this.$=o[f];break;case 7:case 8:this.$=[];break;case 9:h.setDateFormat(o[f].substr(11)),this.$=o[f].substr(11);break;case 10:h.enableInclusiveEndDates(),this.$=o[f].substr(18);break;case 11:h.TopAxis(),this.$=o[f].substr(8);break;case 12:h.setAxisFormat(o[f].substr(11)),this.$=o[f].substr(11);break;case 13:h.setTickInterval(o[f].substr(13)),this.$=o[f].substr(13);break;case 14:h.setExcludes(o[f].substr(9)),this.$=o[f].substr(9);break;case 15:h.setIncludes(o[f].substr(9)),this.$=o[f].substr(9);break;case 16:h.setTodayMarker(o[f].substr(12)),this.$=o[f].substr(12);break;case 17:h.setDiagramTitle(o[f].substr(6)),this.$=o[f].substr(6);break;case 18:this.$=o[f].trim(),h.setAccTitle(this.$);break;case 19:case 20:this.$=o[f].trim(),h.setAccDescription(this.$);break;case 21:h.addSection(o[f].substr(8)),this.$=o[f].substr(8);break;case 23:h.addTask(o[f-1],o[f]),this.$="task";break;case 27:this.$=o[f-1],h.setClickEvent(o[f-1],o[f],null);break;case 28:this.$=o[f-2],h.setClickEvent(o[f-2],o[f-1],o[f]);break;case 29:this.$=o[f-2],h.setClickEvent(o[f-2],o[f-1],null),h.setLink(o[f-2],o[f]);break;case 30:this.$=o[f-3],h.setClickEvent(o[f-3],o[f-2],o[f-1]),h.setLink(o[f-3],o[f]);break;case 31:this.$=o[f-2],h.setClickEvent(o[f-2],o[f],null),h.setLink(o[f-2],o[f-1]);break;case 32:this.$=o[f-3],h.setClickEvent(o[f-3],o[f-1],o[f]),h.setLink(o[f-3],o[f-2]);break;case 33:this.$=o[f-1],h.setLink(o[f-1],o[f]);break;case 34:case 40:this.$=o[f-1]+" "+o[f];break;case 35:case 36:case 38:this.$=o[f-2]+" "+o[f-1]+" "+o[f];break;case 37:case 39:this.$=o[f-3]+" "+o[f-2]+" "+o[f-1]+" "+o[f];break;case 41:h.parseDirective("%%{","open_directive");break;case 42:h.parseDirective(o[f],"type_directive");break;case 43:o[f]=o[f].trim().replace(/'/g,'"'),h.parseDirective(o[f],"arg_directive");break;case 44:h.parseDirective("}%%","close_directive","gantt");break}},table:[{3:1,4:2,5:e,30:4,40:n},{1:[3]},{3:6,4:2,5:e,30:4,40:n},t(r,[2,3],{6:7}),{31:8,41:[1,9]},{41:[2,41]},{1:[2,1]},{4:30,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:i,13:a,14:s,15:l,16:g,17:c,18:b,19:T,20:y,21:k,23:_,25:B,26:j,27:28,28:G,30:4,35:tt,40:n},{32:32,33:[1,33],43:O},t([33,43],[2,42]),t(r,[2,8],{1:[2,2]}),t(r,[2,4]),{4:30,10:35,12:i,13:a,14:s,15:l,16:g,17:c,18:b,19:T,20:y,21:k,23:_,25:B,26:j,27:28,28:G,30:4,35:tt,40:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,9]),t(r,[2,10]),t(r,[2,11]),t(r,[2,12]),t(r,[2,13]),t(r,[2,14]),t(r,[2,15]),t(r,[2,16]),t(r,[2,17]),{22:[1,36]},{24:[1,37]},t(r,[2,20]),t(r,[2,21]),t(r,[2,22]),{29:[1,38]},t(r,[2,24]),{36:[1,39],38:[1,40]},{11:[1,41]},{34:42,42:[1,43]},{11:[2,44]},t(r,[2,5]),t(r,[2,18]),t(r,[2,19]),t(r,[2,23]),t(r,[2,27],{37:[1,44],38:[1,45]}),t(r,[2,33],{36:[1,46]}),t(H,[2,25]),{32:47,43:O},{43:[2,43]},t(r,[2,28],{38:[1,48]}),t(r,[2,29]),t(r,[2,31],{37:[1,49]}),{11:[1,50]},t(r,[2,30]),t(r,[2,32]),t(H,[2,26])],defaultActions:{5:[2,41],6:[2,1],34:[2,44],43:[2,43]},parseError:function(w,d){if(d.recoverable)this.trace(w);else{var u=new Error(w);throw u.hash=d,u}},parse:function(w){var d=this,u=[0],h=[],v=[null],o=[],N=this.table,f="",S=0,V=0,q=2,p=1,U=o.slice.call(arguments,1),D=Object.create(this.lexer),W={yy:{}};for(var P in this.yy)Object.prototype.hasOwnProperty.call(this.yy,P)&&(W.yy[P]=this.yy[P]);D.setInput(w,W.yy),W.yy.lexer=D,W.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var F=D.yylloc;o.push(F);var L=D.options&&D.options.ranges;typeof W.yy.parseError=="function"?this.parseError=W.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ft(){var rt;return rt=h.pop()||D.lex()||p,typeof rt!="number"&&(rt instanceof Array&&(h=rt,rt=h.pop()),rt=d.symbols_[rt]||rt),rt}for(var J,x,C,A,m={},X,E,et,K;;){if(x=u[u.length-1],this.defaultActions[x]?C=this.defaultActions[x]:((J===null||typeof J>"u")&&(J=Ft()),C=N[x]&&N[x][J]),typeof C>"u"||!C.length||!C[0]){var at="";K=[];for(X in N[x])this.terminals_[X]&&X>q&&K.push("'"+this.terminals_[X]+"'");D.showPosition?at="Parse error on line "+(S+1)+`:
`+D.showPosition()+`
Expecting `+K.join(", ")+", got '"+(this.terminals_[J]||J)+"'":at="Parse error on line "+(S+1)+": Unexpected "+(J==p?"end of input":"'"+(this.terminals_[J]||J)+"'"),this.parseError(at,{text:D.match,token:this.terminals_[J]||J,line:D.yylineno,loc:F,expected:K})}if(C[0]instanceof Array&&C.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+J);switch(C[0]){case 1:u.push(J),v.push(D.yytext),o.push(D.yylloc),u.push(C[1]),J=null,V=D.yyleng,f=D.yytext,S=D.yylineno,F=D.yylloc;break;case 2:if(E=this.productions_[C[1]][1],m.$=v[v.length-E],m._$={first_line:o[o.length-(E||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(E||1)].first_column,last_column:o[o.length-1].last_column},L&&(m._$.range=[o[o.length-(E||1)].range[0],o[o.length-1].range[1]]),A=this.performAction.apply(m,[f,V,S,W.yy,C[1],v,o].concat(U)),typeof A<"u")return A;E&&(u=u.slice(0,-1*E*2),v=v.slice(0,-1*E),o=o.slice(0,-1*E)),u.push(this.productions_[C[1]][0]),v.push(m.$),o.push(m._$),et=N[u[u.length-2]][u[u.length-1]],u.push(et);break;case 3:return!0}}return!0}},M=function(){var R={EOF:1,parseError:function(d,u){if(this.yy.parser)this.yy.parser.parseError(d,u);else throw new Error(d)},setInput:function(w,d){return this.yy=d||this.yy||{},this._input=w,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var w=this._input[0];this.yytext+=w,this.yyleng++,this.offset++,this.match+=w,this.matched+=w;var d=w.match(/(?:\r\n?|\n).*/g);return d?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),w},unput:function(w){var d=w.length,u=w.split(/(?:\r\n?|\n)/g);this._input=w+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-d),this.offset-=d;var h=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),u.length-1&&(this.yylineno-=u.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:u?(u.length===h.length?this.yylloc.first_column:0)+h[h.length-u.length].length-u[0].length:this.yylloc.first_column-d},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-d]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(w){this.unput(this.match.slice(w))},pastInput:function(){var w=this.matched.substr(0,this.matched.length-this.match.length);return(w.length>20?"...":"")+w.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var w=this.match;return w.length<20&&(w+=this._input.substr(0,20-w.length)),(w.substr(0,20)+(w.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var w=this.pastInput(),d=new Array(w.length+1).join("-");return w+this.upcomingInput()+`
`+d+"^"},test_match:function(w,d){var u,h,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),h=w[0].match(/(?:\r\n?|\n).*/g),h&&(this.yylineno+=h.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:h?h[h.length-1].length-h[h.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+w[0].length},this.yytext+=w[0],this.match+=w[0],this.matches=w,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(w[0].length),this.matched+=w[0],u=this.performAction.call(this,this.yy,this,d,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),u)return u;if(this._backtrack){for(var o in v)this[o]=v[o];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var w,d,u,h;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),o=0;o<v.length;o++)if(u=this._input.match(this.rules[v[o]]),u&&(!d||u[0].length>d[0].length)){if(d=u,h=o,this.options.backtrack_lexer){if(w=this.test_match(u,v[o]),w!==!1)return w;if(this._backtrack){d=!1;continue}else return!1}else if(!this.options.flex)break}return d?(w=this.test_match(d,v[h]),w!==!1?w:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var d=this.next();return d||this.lex()},begin:function(d){this.conditionStack.push(d)},popState:function(){var d=this.conditionStack.length-1;return d>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(d){return d=this.conditionStack.length-1-Math.abs(d||0),d>=0?this.conditionStack[d]:"INITIAL"},pushState:function(d){this.begin(d)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(d,u,h,v){switch(h){case 0:return this.begin("open_directive"),40;case 1:return this.begin("type_directive"),41;case 2:return this.popState(),this.begin("arg_directive"),33;case 3:return this.popState(),this.popState(),43;case 4:return 42;case 5:return this.begin("acc_title"),21;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),23;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:break;case 13:break;case 14:break;case 15:return 11;case 16:break;case 17:break;case 18:break;case 19:this.begin("href");break;case 20:this.popState();break;case 21:return 38;case 22:this.begin("callbackname");break;case 23:this.popState();break;case 24:this.popState(),this.begin("callbackargs");break;case 25:return 36;case 26:this.popState();break;case 27:return 37;case 28:this.begin("click");break;case 29:this.popState();break;case 30:return 35;case 31:return 5;case 32:return 12;case 33:return 13;case 34:return 14;case 35:return 15;case 36:return 16;case 37:return 18;case 38:return 17;case 39:return 19;case 40:return"date";case 41:return 20;case 42:return"accDescription";case 43:return 26;case 44:return 28;case 45:return 29;case 46:return 33;case 47:return 7;case 48:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[26,27],inclusive:!1},callbackname:{rules:[23,24,25],inclusive:!1},href:{rules:[20,21],inclusive:!1},click:{rules:[29,30],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,22,28,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};return R}();z.lexer=M;function I(){this.yy={}}return I.prototype=z,z.Parser=I,new I}();be.parser=be;const Ma=be;nt.extend(wa);nt.extend(er);nt.extend(nr);let st="",Fe="",Ae,Ee="",Wt=[],zt=[],Ne={},Le=[],ee=[],_t="";const Fn=["active","done","crit","milestone"];let Ie=[],Ot=!1,Ye=!1,xe=0;const Ca=function(t,e,n){Qn.parseDirective(this,t,e,n)},Da=function(){Le=[],ee=[],_t="",Ie=[],jt=0,Me=void 0,qt=void 0,Z=[],st="",Fe="",Ae=void 0,Ee="",Wt=[],zt=[],Ot=!1,Ye=!1,xe=0,Ne={},Gn()},Sa=function(t){Fe=t},_a=function(){return Fe},Ua=function(t){Ae=t},Fa=function(){return Ae},Aa=function(t){Ee=t},Ea=function(){return Ee},Na=function(t){st=t},La=function(){Ot=!0},Ia=function(){return Ot},Ya=function(){Ye=!0},Wa=function(){return Ye},za=function(){return st},Oa=function(t){Wt=t.toLowerCase().split(/[\s,]+/)},Pa=function(){return Wt},Va=function(t){zt=t.toLowerCase().split(/[\s,]+/)},Ha=function(){return zt},Ra=function(){return Ne},Ba=function(t){_t=t,Le.push(t)},ja=function(){return Le},qa=function(){let t=rn();const e=10;let n=0;for(;!t&&n<e;)t=rn(),n++;return ee=Z,ee},An=function(t,e,n,r){return r.includes(t.format(e.trim()))?!1:t.isoWeekday()>=6&&n.includes("weekends")||n.includes(t.format("dddd").toLowerCase())?!0:n.includes(t.format(e.trim()))},En=function(t,e,n,r){if(!n.length||t.manualEndTime)return;let i;t.startTime instanceof Date?i=nt(t.startTime):i=nt(t.startTime,e,!0),i=i.add(1,"d");let a;t.endTime instanceof Date?a=nt(t.endTime):a=nt(t.endTime,e,!0);const[s,l]=Xa(i,a,e,n,r);t.endTime=s.toDate(),t.renderEndTime=l},Xa=function(t,e,n,r,i){let a=!1,s=null;for(;t<=e;)a||(s=e.toDate()),a=An(t,n,r,i),a&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,s]},we=function(t,e,n){n=n.trim();const i=/^after\s+([\d\w- ]+)/.exec(n.trim());if(i!==null){let s=null;if(i[1].split(" ").forEach(function(l){let g=Ut(l);g!==void 0&&(s?g.endTime>s.endTime&&(s=g):s=g)}),s)return s.endTime;{const l=new Date;return l.setHours(0,0,0,0),l}}let a=nt(n,e.trim(),!0);if(a.isValid())return a.toDate();{de.debug("Invalid date:"+n),de.debug("With date format:"+e.trim());const s=new Date(n);if(s===void 0||isNaN(s.getTime()))throw new Error("Invalid date:"+n);return s}},Nn=function(t){const e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},Ln=function(t,e,n,r=!1){n=n.trim();let i=nt(n,e.trim(),!0);if(i.isValid())return r&&(i=i.add(1,"d")),i.toDate();let a=nt(t);const[s,l]=Nn(n);if(!Number.isNaN(s)){const g=a.add(s,l);g.isValid()&&(a=g)}return a.toDate()};let jt=0;const wt=function(t){return t===void 0?(jt=jt+1,"task"+jt):t},Za=function(t,e){let n;e.substr(0,1)===":"?n=e.substr(1,e.length):n=e;const r=n.split(","),i={};zn(r,i,Fn);for(let s=0;s<r.length;s++)r[s]=r[s].trim();let a="";switch(r.length){case 1:i.id=wt(),i.startTime=t.endTime,a=r[0];break;case 2:i.id=wt(),i.startTime=we(void 0,st,r[0]),a=r[1];break;case 3:i.id=wt(r[0]),i.startTime=we(void 0,st,r[1]),a=r[2];break}return a&&(i.endTime=Ln(i.startTime,st,a,Ot),i.manualEndTime=nt(a,"YYYY-MM-DD",!0).isValid(),En(i,st,zt,Wt)),i},Qa=function(t,e){let n;e.substr(0,1)===":"?n=e.substr(1,e.length):n=e;const r=n.split(","),i={};zn(r,i,Fn);for(let a=0;a<r.length;a++)r[a]=r[a].trim();switch(r.length){case 1:i.id=wt(),i.startTime={type:"prevTaskEnd",id:t},i.endTime={data:r[0]};break;case 2:i.id=wt(),i.startTime={type:"getStartDate",startData:r[0]},i.endTime={data:r[1]};break;case 3:i.id=wt(r[0]),i.startTime={type:"getStartDate",startData:r[1]},i.endTime={data:r[2]};break}return i};let Me,qt,Z=[];const In={},Ga=function(t,e){const n={section:_t,type:_t,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},r=Qa(qt,e);n.raw.startTime=r.startTime,n.raw.endTime=r.endTime,n.id=r.id,n.prevTaskId=qt,n.active=r.active,n.done=r.done,n.crit=r.crit,n.milestone=r.milestone,n.order=xe,xe++;const i=Z.push(n);qt=n.id,In[n.id]=i-1},Ut=function(t){const e=In[t];return Z[e]},Ja=function(t,e){const n={section:_t,type:_t,description:t,task:t,classes:[]},r=Za(Me,e);n.startTime=r.startTime,n.endTime=r.endTime,n.id=r.id,n.active=r.active,n.done=r.done,n.crit=r.crit,n.milestone=r.milestone,Me=n,ee.push(n)},rn=function(){const t=function(n){const r=Z[n];let i="";switch(Z[n].raw.startTime.type){case"prevTaskEnd":{const a=Ut(r.prevTaskId);r.startTime=a.endTime;break}case"getStartDate":i=we(void 0,st,Z[n].raw.startTime.startData),i&&(Z[n].startTime=i);break}return Z[n].startTime&&(Z[n].endTime=Ln(Z[n].startTime,st,Z[n].raw.endTime.data,Ot),Z[n].endTime&&(Z[n].processed=!0,Z[n].manualEndTime=nt(Z[n].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),En(Z[n],st,zt,Wt))),Z[n].processed};let e=!0;for(const[n,r]of Z.entries())t(n),e=e&&r.processed;return e},Ka=function(t,e){let n=e;bt().securityLevel!=="loose"&&(n=Jn(e)),t.split(",").forEach(function(r){Ut(r)!==void 0&&(Wn(r,()=>{window.open(n,"_self")}),Ne[r]=n)}),Yn(t,"clickable")},Yn=function(t,e){t.split(",").forEach(function(n){let r=Ut(n);r!==void 0&&r.classes.push(e)})},$a=function(t,e,n){if(bt().securityLevel!=="loose"||e===void 0)return;let r=[];if(typeof n=="string"){r=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a<r.length;a++){let s=r[a].trim();s.charAt(0)==='"'&&s.charAt(s.length-1)==='"'&&(s=s.substr(1,s.length-2)),r[a]=s}}r.length===0&&r.push(t),Ut(t)!==void 0&&Wn(t,()=>{tr.runFunc(e,...r)})},Wn=function(t,e){Ie.push(function(){const n=document.querySelector(`[id="${t}"]`);n!==null&&n.addEventListener("click",function(){e()})},function(){const n=document.querySelector(`[id="${t}-text"]`);n!==null&&n.addEventListener("click",function(){e()})})},ts=function(t,e,n){t.split(",").forEach(function(r){$a(r,e,n)}),Yn(t,"clickable")},es=function(t){Ie.forEach(function(e){e(t)})},ns={parseDirective:Ca,getConfig:()=>bt().gantt,clear:Da,setDateFormat:Na,getDateFormat:za,enableInclusiveEndDates:La,endDatesAreInclusive:Ia,enableTopAxis:Ya,topAxisEnabled:Wa,setAxisFormat:Sa,getAxisFormat:_a,setTickInterval:Ua,getTickInterval:Fa,setTodayMarker:Aa,getTodayMarker:Ea,setAccTitle:Rn,getAccTitle:Bn,setDiagramTitle:jn,getDiagramTitle:qn,setAccDescription:Xn,getAccDescription:Zn,addSection:Ba,getSections:ja,getTasks:qa,addTask:Ga,findTaskById:Ut,addTaskOrg:Ja,setIncludes:Oa,getIncludes:Pa,setExcludes:Va,getExcludes:Ha,setClickEvent:ts,setLink:Ka,getLinks:Ra,bindFunctions:es,parseDuration:Nn,isInvalidDate:An};function zn(t,e,n){let r=!0;for(;r;)r=!1,n.forEach(function(i){const a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),r=!0)})}const rs=function(){de.debug("Something is calling, setConf, remove the call")};let ct;const is=function(t,e,n,r){const i=bt().gantt,a=bt().securityLevel;let s;a==="sandbox"&&(s=Pt("#i"+e));const l=a==="sandbox"?Pt(s.nodes()[0].contentDocument.body):Pt("body"),g=a==="sandbox"?s.nodes()[0].contentDocument:document,c=g.getElementById(e);ct=c.parentElement.offsetWidth,ct===void 0&&(ct=1200),i.useWidth!==void 0&&(ct=i.useWidth);const b=r.db.getTasks(),T=b.length*(i.barHeight+i.barGap)+2*i.topPadding;c.setAttribute("viewBox","0 0 "+ct+" "+T);const y=l.select(`[id="${e}"]`),k=ba().domain([gr(b,function(d){return d.startTime}),dr(b,function(d){return d.endTime})]).rangeRound([0,ct-i.leftPadding-i.rightPadding]);let _=[];for(const d of b)_.push(d.type);const B=_;_=I(_);function j(d,u){const h=d.startTime,v=u.startTime;let o=0;return h>v?o=1:h<v&&(o=-1),o}b.sort(j),G(b,ct,T),Kn(y,T,ct,i.useMaxWidth),y.append("text").text(r.db.getDiagramTitle()).attr("x",ct/2).attr("y",i.titleTopMargin).attr("class","titleText");function G(d,u,h){const v=i.barHeight,o=v+i.barGap,N=i.topPadding,f=i.leftPadding,S=wn().domain([0,_.length]).range(["#00B9FA","#F95002"]).interpolate(Yr);O(o,N,f,u,h,d,r.db.getExcludes(),r.db.getIncludes()),H(f,N,u,h),tt(d,o,N,f,v,S,u),z(o,N),M(f,N,u,h)}function tt(d,u,h,v,o,N,f){y.append("g").selectAll("rect").data(d).enter().append("rect").attr("x",0).attr("y",function(p,U){return U=p.order,U*u+h-2}).attr("width",function(){return f-i.rightPadding/2}).attr("height",u).attr("class",function(p){for(const[U,D]of _.entries())if(p.type===D)return"section section"+U%i.numberSectionStyles;return"section section0"});const S=y.append("g").selectAll("rect").data(d).enter(),V=r.db.getLinks();if(S.append("rect").attr("id",function(p){return p.id}).attr("rx",3).attr("ry",3).attr("x",function(p){return p.milestone?k(p.startTime)+v+.5*(k(p.endTime)-k(p.startTime))-.5*o:k(p.startTime)+v}).attr("y",function(p,U){return U=p.order,U*u+h}).attr("width",function(p){return p.milestone?o:k(p.renderEndTime||p.endTime)-k(p.startTime)}).attr("height",o).attr("transform-origin",function(p,U){return U=p.order,(k(p.startTime)+v+.5*(k(p.endTime)-k(p.startTime))).toString()+"px "+(U*u+h+.5*o).toString()+"px"}).attr("class",function(p){const U="task";let D="";p.classes.length>0&&(D=p.classes.join(" "));let W=0;for(const[F,L]of _.entries())p.type===L&&(W=F%i.numberSectionStyles);let P="";return p.active?p.crit?P+=" activeCrit":P=" active":p.done?p.crit?P=" doneCrit":P=" done":p.crit&&(P+=" crit"),P.length===0&&(P=" task"),p.milestone&&(P=" milestone "+P),P+=W,P+=" "+D,U+P}),S.append("text").attr("id",function(p){return p.id+"-text"}).text(function(p){return p.task}).attr("font-size",i.fontSize).attr("x",function(p){let U=k(p.startTime),D=k(p.renderEndTime||p.endTime);p.milestone&&(U+=.5*(k(p.endTime)-k(p.startTime))-.5*o),p.milestone&&(D=U+o);const W=this.getBBox().width;return W>D-U?D+W+1.5*i.leftPadding>f?U+v-5:D+v+5:(D-U)/2+U+v}).attr("y",function(p,U){return U=p.order,U*u+i.barHeight/2+(i.fontSize/2-2)+h}).attr("text-height",o).attr("class",function(p){const U=k(p.startTime);let D=k(p.endTime);p.milestone&&(D=U+o);const W=this.getBBox().width;let P="";p.classes.length>0&&(P=p.classes.join(" "));let F=0;for(const[Ft,J]of _.entries())p.type===J&&(F=Ft%i.numberSectionStyles);let L="";return p.active&&(p.crit?L="activeCritText"+F:L="activeText"+F),p.done?p.crit?L=L+" doneCritText"+F:L=L+" doneText"+F:p.crit&&(L=L+" critText"+F),p.milestone&&(L+=" milestoneText"),W>D-U?D+W+1.5*i.leftPadding>f?P+" taskTextOutsideLeft taskTextOutside"+F+" "+L:P+" taskTextOutsideRight taskTextOutside"+F+" "+L+" width-"+W:P+" taskText taskText"+F+" "+L+" width-"+W}),bt().securityLevel==="sandbox"){let p;p=Pt("#i"+e);const U=p.nodes()[0].contentDocument;S.filter(function(D){return V[D.id]!==void 0}).each(function(D){var W=U.querySelector("#"+D.id),P=U.querySelector("#"+D.id+"-text");const F=W.parentNode;var L=U.createElement("a");L.setAttribute("xlink:href",V[D.id]),L.setAttribute("target","_top"),F.appendChild(L),L.appendChild(W),L.appendChild(P)})}}function O(d,u,h,v,o,N,f,S){const V=N.reduce((F,{startTime:L})=>F?Math.min(F,L):L,0),q=N.reduce((F,{endTime:L})=>F?Math.max(F,L):L,0),p=r.db.getDateFormat();if(!V||!q)return;const U=[];let D=null,W=nt(V);for(;W.valueOf()<=q;)r.db.isInvalidDate(W,p,f,S)?D?D.end=W:D={start:W,end:W}:D&&(U.push(D),D=null),W=W.add(1,"d");y.append("g").selectAll("rect").data(U).enter().append("rect").attr("id",function(F){return"exclude-"+F.start.format("YYYY-MM-DD")}).attr("x",function(F){return k(F.start)+h}).attr("y",i.gridLineStartPadding).attr("width",function(F){const L=F.end.add(1,"day");return k(L)-k(F.start)}).attr("height",o-u-i.gridLineStartPadding).attr("transform-origin",function(F,L){return(k(F.start)+h+.5*(k(F.end)-k(F.start))).toString()+"px "+(L*d+.5*o).toString()+"px"}).attr("class","exclude-range")}function H(d,u,h,v){let o=wr(k).tickSize(-v+u+i.gridLineStartPadding).tickFormat(te(r.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));const f=/^([1-9]\d*)(minute|hour|day|week|month)$/.exec(r.db.getTickInterval()||i.tickInterval);if(f!==null){const S=f[1];switch(f[2]){case"minute":o.ticks(Lt.every(S));break;case"hour":o.ticks(It.every(S));break;case"day":o.ticks(dt.every(S));break;case"week":o.ticks(Ct.every(S));break;case"month":o.ticks(Yt.every(S));break}}if(y.append("g").attr("class","grid").attr("transform","translate("+d+", "+(v-50)+")").call(o).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),r.db.topAxisEnabled()||i.topAxis){let S=xr(k).tickSize(-v+u+i.gridLineStartPadding).tickFormat(te(r.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(f!==null){const V=f[1];switch(f[2]){case"minute":S.ticks(Lt.every(V));break;case"hour":S.ticks(It.every(V));break;case"day":S.ticks(dt.every(V));break;case"week":S.ticks(Ct.every(V));break;case"month":S.ticks(Yt.every(V));break}}y.append("g").attr("class","grid").attr("transform","translate("+d+", "+u+")").call(S).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}function z(d,u){const h=[];let v=0;for(const[o,N]of _.entries())h[o]=[N,w(N,B)];y.append("g").selectAll("text").data(h).enter().append(function(o){const N=o[0].split($n.lineBreakRegex),f=-(N.length-1)/2,S=g.createElementNS("http://www.w3.org/2000/svg","text");S.setAttribute("dy",f+"em");for(const[V,q]of N.entries()){const p=g.createElementNS("http://www.w3.org/2000/svg","tspan");p.setAttribute("alignment-baseline","central"),p.setAttribute("x","10"),V>0&&p.setAttribute("dy","1em"),p.textContent=q,S.appendChild(p)}return S}).attr("x",10).attr("y",function(o,N){if(N>0)for(let f=0;f<N;f++)return v+=h[N-1][1],o[1]*d/2+v*d+u;else return o[1]*d/2+u}).attr("font-size",i.sectionFontSize).attr("font-size",i.sectionFontSize).attr("class",function(o){for(const[N,f]of _.entries())if(o[0]===f)return"sectionTitle sectionTitle"+N%i.numberSectionStyles;return"sectionTitle"})}function M(d,u,h,v){const o=r.db.getTodayMarker();if(o==="off")return;const N=y.append("g").attr("class","today"),f=new Date,S=N.append("line");S.attr("x1",k(f)+d).attr("x2",k(f)+d).attr("y1",i.titleTopMargin).attr("y2",v-i.titleTopMargin).attr("class","today"),o!==""&&S.attr("style",o.replace(/,/g,";"))}function I(d){const u={},h=[];for(let v=0,o=d.length;v<o;++v)Object.prototype.hasOwnProperty.call(u,d[v])||(u[d[v]]=!0,h.push(d[v]));return h}function R(d){let u=d.length;const h={};for(;u;)h[d[--u]]=(h[d[u]]||0)+1;return h}function w(d,u){return R(u)[d]||0}},as={setConf:rs,draw:is},ss=t=>`
  .mermaid-main-font {
    font-family: "trebuchet ms", verdana, arial, sans-serif;
    font-family: var(--mermaid-font-family);
  }
  .exclude-range {
    fill: ${t.excludeBkgColor};
  }

  .section {
    stroke: none;
    opacity: 0.2;
  }

  .section0 {
    fill: ${t.sectionBkgColor};
  }

  .section2 {
    fill: ${t.sectionBkgColor2};
  }

  .section1,
  .section3 {
    fill: ${t.altSectionBkgColor};
    opacity: 0.2;
  }

  .sectionTitle0 {
    fill: ${t.titleColor};
  }

  .sectionTitle1 {
    fill: ${t.titleColor};
  }

  .sectionTitle2 {
    fill: ${t.titleColor};
  }

  .sectionTitle3 {
    fill: ${t.titleColor};
  }

  .sectionTitle {
    text-anchor: start;
    // font-size: ${t.ganttFontSize};
    // text-height: 14px;
    font-family: 'trebuchet ms', verdana, arial, sans-serif;
    font-family: var(--mermaid-font-family);

  }


  /* Grid and axis */

  .grid .tick {
    stroke: ${t.gridColor};
    opacity: 0.8;
    shape-rendering: crispEdges;
    text {
      font-family: ${t.fontFamily};
      fill: ${t.textColor};
    }
  }

  .grid path {
    stroke-width: 0;
  }


  /* Today line */

  .today {
    fill: none;
    stroke: ${t.todayLineColor};
    stroke-width: 2px;
  }


  /* Task styling */

  /* Default task */

  .task {
    stroke-width: 2;
  }

  .taskText {
    text-anchor: middle;
    font-family: 'trebuchet ms', verdana, arial, sans-serif;
    font-family: var(--mermaid-font-family);
  }

  // .taskText:not([font-size]) {
  //   font-size: ${t.ganttFontSize};
  // }

  .taskTextOutsideRight {
    fill: ${t.taskTextDarkColor};
    text-anchor: start;
    // font-size: ${t.ganttFontSize};
    font-family: 'trebuchet ms', verdana, arial, sans-serif;
    font-family: var(--mermaid-font-family);

  }

  .taskTextOutsideLeft {
    fill: ${t.taskTextDarkColor};
    text-anchor: end;
    // font-size: ${t.ganttFontSize};
  }

  /* Special case clickable */
  .task.clickable {
    cursor: pointer;
  }
  .taskText.clickable {
    cursor: pointer;
    fill: ${t.taskTextClickableColor} !important;
    font-weight: bold;
  }

  .taskTextOutsideLeft.clickable {
    cursor: pointer;
    fill: ${t.taskTextClickableColor} !important;
    font-weight: bold;
  }

  .taskTextOutsideRight.clickable {
    cursor: pointer;
    fill: ${t.taskTextClickableColor} !important;
    font-weight: bold;
  }

  /* Specific task settings for the sections*/

  .taskText0,
  .taskText1,
  .taskText2,
  .taskText3 {
    fill: ${t.taskTextColor};
  }

  .task0,
  .task1,
  .task2,
  .task3 {
    fill: ${t.taskBkgColor};
    stroke: ${t.taskBorderColor};
  }

  .taskTextOutside0,
  .taskTextOutside2
  {
    fill: ${t.taskTextOutsideColor};
  }

  .taskTextOutside1,
  .taskTextOutside3 {
    fill: ${t.taskTextOutsideColor};
  }


  /* Active task */

  .active0,
  .active1,
  .active2,
  .active3 {
    fill: ${t.activeTaskBkgColor};
    stroke: ${t.activeTaskBorderColor};
  }

  .activeText0,
  .activeText1,
  .activeText2,
  .activeText3 {
    fill: ${t.taskTextDarkColor} !important;
  }


  /* Completed task */

  .done0,
  .done1,
  .done2,
  .done3 {
    stroke: ${t.doneTaskBorderColor};
    fill: ${t.doneTaskBkgColor};
    stroke-width: 2;
  }

  .doneText0,
  .doneText1,
  .doneText2,
  .doneText3 {
    fill: ${t.taskTextDarkColor} !important;
  }


  /* Tasks on the critical line */

  .crit0,
  .crit1,
  .crit2,
  .crit3 {
    stroke: ${t.critBorderColor};
    fill: ${t.critBkgColor};
    stroke-width: 2;
  }

  .activeCrit0,
  .activeCrit1,
  .activeCrit2,
  .activeCrit3 {
    stroke: ${t.critBorderColor};
    fill: ${t.activeTaskBkgColor};
    stroke-width: 2;
  }

  .doneCrit0,
  .doneCrit1,
  .doneCrit2,
  .doneCrit3 {
    stroke: ${t.critBorderColor};
    fill: ${t.doneTaskBkgColor};
    stroke-width: 2;
    cursor: pointer;
    shape-rendering: crispEdges;
  }

  .milestone {
    transform: rotate(45deg) scale(0.8,0.8);
  }

  .milestoneText {
    font-style: italic;
  }
  .doneCritText0,
  .doneCritText1,
  .doneCritText2,
  .doneCritText3 {
    fill: ${t.taskTextDarkColor} !important;
  }

  .activeCritText0,
  .activeCritText1,
  .activeCritText2,
  .activeCritText3 {
    fill: ${t.taskTextDarkColor} !important;
  }

  .titleText {
    text-anchor: middle;
    font-size: 18px;
    fill: ${t.textColor}    ;
    font-family: 'trebuchet ms', verdana, arial, sans-serif;
    font-family: var(--mermaid-font-family);
  }
`,os=ss,hs={parser:Ma,db:ns,renderer:as,styles:os};export{hs as diagram};