summaryrefslogtreecommitdiffstats
path: root/web/_static/mermaid-js/mermaid.core.js.map
blob: 6331d3c4707d5f183cacfd9b9a4c15e48f0c3b23 (plain)
1
{"version":3,"file":"mermaid.core.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;ACVA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,eAAe,kCAAkC;AACjD,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oJAAoJ;AACpJ,SAAS;;AAET;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW,YAAY,IAAI,WAAW,SAAS;AACvE,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,8gDAA8gD;AACzhD,aAAa,ioCAAioC;AAC9oC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,sBAAsB;AAChE;AACA;AACA;AACA;AACA;AACA,4CAA4C,wCAAwC;AACpF;AACA;AACA,2CAA2C,oBAAoB;AAC/D;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,sBAAsB;AACtB;AACA;AACA,sBAAsB;AACtB;AACA;AACA,8CAA8C,mCAAmC,yCAAyC;AAC1H;AACA;AACA,8CAA8C,yCAAyC;AACvF;AACA;AACA,8CAA8C,kCAAkC,oCAAoC;AACpH;AACA;AACA,8CAA8C,yCAAyC;AACvF;AACA;AACA,8CAA8C,0CAA0C;AACxF;AACA;AACA,8CAA8C,0CAA0C;AACxF;AACA;AACA;AACA;AACA;AACA,8CAA8C,2CAA2C;AACzF;AACA;AACA,8CAA8C,oDAAoD;AAClG;AACA;AACA,8CAA8C,2CAA2C;AACzF;AACA;AACA,8CAA8C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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kCAAkC;AAClC,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL,sDAAsD;AACtD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,WAAW;AACX;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA,yBAAyB,6BAA6B;AACtD;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,0BAA0B;AAC1B;AACA,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,wCAAwC,YAAY;AAC7vF,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,CAAC;;;AAGD,IAAI,IAAgE;AACpE,cAAc;AACd,cAAc;AACd,aAAa,iBAAiB;AAC9B,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB,qDAA0B,CAAC,sFAAyB;AACrE;AACA;AACA,IAAI,KAA6B,IAAI,4CAAY;AACjD;AACA;AACA;;;;;;;;;;;ACn7BA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,eAAe,kCAAkC;AACjD,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oJAAoJ;AACpJ,SAAS;;AAET;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW,YAAY,IAAI,WAAW,SAAS;AACvE,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,k2CAAk2C;AAC72C,aAAa,+2BAA+2B;AAC53B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,sBAAsB;AACtB;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,iDAAiD,wBAAwB;AACzE;AACA;AACA,sBAAsB,mCAAmC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,kCAAkC;AAClC;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB,qCAAqC;AACvD;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB,+BAA+B;AACjD;AACA;AACA,kBAAkB,uCAAuC;AACzD;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB,+CAA+C;AACjE;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,SAAS,yEAAyE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,0EAA0E,EAAE,QAAQ,sDAAsD,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,uBAAuB,oBAAoB,4NAA4N,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,eAAe,UAAU,qGAAqG,UAAU,EAAE,UAAU,6BAA6B,gFAAgF,GAAG,8CAA8C,8BAA8B,2BAA2B,EAAE,8CAA8C,EAAE,8CAA8C,EAAE,8CAA8C,EAAE,UAAU,eAAe,wDAAwD,gBAAgB,UAAU,oHAAoH,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,sOAAsO,4CAA4C,wDAAwD,EAAE,4DAA4D,gBAAgB,oBAAoB,eAAe,kCAAkC,oGAAoG,oBAAoB,GAAG,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,2BAA2B,4CAA4C,UAAU,EAAE,UAAU,gBAAgB,8CAA8C,EAAE,wDAAwD,eAAe,kCAAkC,iBAAiB,2BAA2B,EAAE,aAAa,EAAE,+CAA+C,eAAe,WAAW,gBAAgB,sBAAsB,gBAAgB,sBAAsB,gBAAgB,sBAAsB,2DAA2D,+CAA+C,6BAA6B,WAAW,GAAG,WAAW,EAAE,wBAAwB,yDAAyD,WAAW,8BAA8B,WAAW,8BAA8B,WAAW,iBAAiB,cAAc,gBAAgB,UAAU,4CAA4C,WAAW;AAC79F,iBAAiB,sGAAsG;AACvH;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kCAAkC;AAClC,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL,sDAAsD;AACtD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,WAAW;AACX;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA,yBAAyB,6BAA6B;AACtD;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,0BAA0B;AAC1B;AACA,iCAAiC;AACjC;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iCAAiC;AAChE;AACA;AACA;AACA;AACA;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iBAAiB,yIAAyI,8BAA8B,mBAAmB,yBAAyB,0JAA0J,cAAc,aAAa,yFAAyF,oBAAoB,WAAW,yBAAyB,0fAA0f,EAAE,MAAM,YAAY,EAAE;AAC1jC,aAAa,uBAAuB,kCAAkC,cAAc,+BAA+B,cAAc,+BAA+B,kBAAkB,gCAAgC,mBAAmB,gCAAgC,mBAAmB,8BAA8B,kBAAkB,kCAAkC,kBAAkB,qCAAqC,SAAS,kCAAkC,WAAW,2CAA2C,YAAY,kCAAkC,aAAa,kCAAkC,WAAW,kCAAkC,YAAY;AACxpB,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,CAAC;;;AAGD,IAAI,IAAgE;AACpE,cAAc;AACd,cAAc;AACd,aAAa,iBAAiB;AAC9B,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB,qDAA0B,CAAC,sFAAyB;AACrE;AACA;AACA,IAAI,KAA6B,IAAI,4CAAY;AACjD;AACA;AACA;;;;;;;;;;;AC14BA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,eAAe,kCAAkC;AACjD,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oJAAoJ;AACpJ,SAAS;;AAET;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW,YAAY,IAAI,WAAW,SAAS;AACvE,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,k0BAAk0B;AAC70B,aAAa,8eAA8e;AAC3f;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uEAAuE;AACvE;AACA;AACA;;AAEA,4CAA4C;AAC5C;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,sBAAsB;AACtB;AACA;AACA,kBAAkB,mCAAmC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,YAAY;AACZ;AACA;AACA,YAAY;AACZ;AACA;AACA,YAAY;AACZ;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,qBAAqB;AACrB;AACA;AACA,CAAC;AACD,SAAS,0BAA0B,EAAE,MAAM,cAAc,IAAI,GAAG,0BAA0B,EAAE,cAAc,EAAE,UAAU,EAAE,iGAAiG,EAAE,QAAQ,EAAE,uBAAuB,gCAAgC,QAAQ,gBAAgB,gEAAgE,uDAAuD,kDAAkD,GAAG,UAAU,EAAE,UAAU,EAAE,UAAU,6BAA6B,UAAU,GAAG,UAAU,EAAE,gBAAgB,EAAE,UAAU,eAAe,aAAa,EAAE,mCAAmC,EAAE,0BAA0B,oGAAoG,aAAa,eAAe,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,gBAAgB,mCAAmC,EAAE,gBAAgB,EAAE,UAAU,EAAE,kCAAkC,4CAA4C,UAAU,EAAE,0BAA0B,gBAAgB,UAAU,eAAe,6BAA6B,2BAA2B,UAAU,uEAAuE,aAAa;AACxuC,iBAAiB,mEAAmE;AACpF;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kCAAkC;AAClC,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL,sDAAsD;AACtD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,UAAU,wBAAwB;AAClC;AACA;AACA;AACA,gCAAgC;AAChC;AACA,yBAAyB;AACzB;AACA,gCAAgC;AAChC;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA,sCAAsC;AACtC;AACA,yBAAyB,6BAA6B;AACtD;AACA,0BAA0B,iBAAiB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,0HAA0H,eAAe,cAAc,eAAe,kBAAkB,gCAAgC,oBAAoB,yBAAyB,oBAAoB,gGAAgG,iHAAiH,mCAAmC,cAAc,uCAAuC,aAAa;AAC/kB,aAAa,uBAAuB,gCAAgC,cAAc,8BAA8B,cAAc,8BAA8B,mBAAmB,8BAA8B,mBAAmB,iCAAiC,kBAAkB,kCAAkC,UAAU,iDAAiD,YAAY;AAC5X,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,CAAC;;;AAGD,IAAI,IAAgE;AACpE,cAAc;AACd,cAAc;AACd,aAAa,iBAAiB;AAC9B,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB,qDAA0B,CAAC,sFAAyB;AACrE;AACA;AACA,IAAI,KAA6B,IAAI,4CAAY;AACjD;AACA;AACA;;;;;;;;;;;AC3xBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,eAAe,kCAAkC;AACjD,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oJAAoJ;AACpJ,SAAS;;AAET;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW,YAAY,IAAI,WAAW,SAAS;AACvE,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,6+DAA6+D;AACx/D,aAAa,6vCAA6vC;AAC1wC;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,sBAAsB;AACtB;AACA;AACA,6CAA6C,8CAA8C,WAAW;AACtG;AACA;AACA,+CAA+C,gDAAgD,WAAW;AAC1G;AACA;AACA,iCAAiC,aAAa;AAC9C;AACA;AACA,gCAAgC,aAAa;AAC7C;AACA;AACA,iCAAiC;AACjC;AACA;AACA,mCAAmC,qDAAqD;AACxF;AACA;AACA,oBAAoB;AACpB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA,uBAAuB;AACvB;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,6CAA6C,UAAU;AACvD;AACA;AACA,kCAAkC,UAAU;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB,qCAAqC;AACvD;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB,+CAA+C;AACjE;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB,+BAA+B;AACjD;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB,uCAAuC;AACzD;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB,8CAA8C;AAChE;AACA;AACA,kBAAkB,4CAA4C;AAC9D;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACD,SAAS,iDAAiD,EAAE,MAAM,EAAE,QAAQ,EAAE,kDAAkD,YAAY,MAAM,GAAG,eAAe,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,SAAS,EAAE,QAAQ,EAAE,6UAA6U,EAAE,sBAAsB,6DAA6D,uCAAuC,sFAAsF,0DAA0D,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,oCAAoC,gBAAgB,UAAU,EAAE,UAAU,6BAA6B,aAAa,GAAG,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,+KAA+K,2EAA2E,WAAW,gBAAgB,uQAAuQ,mRAAmR,2BAA2B,EAAE,kBAAkB,0DAA0D,WAAW,gBAAgB,cAAc,iBAAiB,qJAAqJ,6DAA6D,6BAA6B,GAAG,oSAAoS,qJAAqJ,oSAAoS,aAAa,OAAO,4CAA4C,QAAQ,GAAG,6JAA6J,EAAE,+BAA+B,EAAE,4JAA4J,EAAE,iJAAiJ,iBAAiB,sBAAsB,kBAAkB,WAAW,kBAAkB,sJAAsJ,kBAAkB,WAAW,mSAAmS,yIAAyI,EAAE,oSAAoS,EAAE,oSAAoS,EAAE,+SAA+S,EAAE,oSAAoS,EAAE,oSAAoS,EAAE,oSAAoS,EAAE,WAAW,EAAE,oSAAoS,EAAE,+SAA+S,EAAE,oSAAoS,EAAE,oSAAoS,EAAE,oSAAoS,gCAAgC,aAAa,EAAE,SAAS,4CAA4C,cAAc,iBAAiB,WAAW,GAAG,WAAW,EAAE,oSAAoS,EAAE,gSAAgS,qWAAqW,2TAA2T,EAAE,gVAAgV,EAAE,cAAc,EAAE,sJAAsJ,EAAE,WAAW,EAAE,WAAW,EAAE,uBAAuB,kBAAkB,WAAW,EAAE,sJAAsJ,EAAE,sJAAsJ,EAAE,WAAW,iBAAiB,WAAW,GAAG,uBAAuB,EAAE,WAAW,kBAAkB,uBAAuB,eAAe,mIAAmI,GAAG,gSAAgS,EAAE,gSAAgS,EAAE,oSAAoS,EAAE,gSAAgS,EAAE,gSAAgS,EAAE,gSAAgS,EAAE,gSAAgS,EAAE,WAAW,EAAE,gSAAgS,EAAE,gSAAgS,EAAE,oSAAoS,EAAE,gSAAgS,EAAE,2SAA2S,EAAE,2SAA2S,EAAE,2BAA2B,eAAe,QAAQ,iCAAiC,gSAAgS,gCAAgC,oSAAoS,aAAa,OAAO,iBAAiB,+IAA+I,EAAE,sHAAsH,EAAE,sHAAsH,EAAE,kIAAkI,EAAE,kIAAkI,EAAE,YAAY,EAAE,sHAAsH,EAAE,sHAAsH,EAAE,iJAAiJ,kBAAkB,WAAW,iBAAiB,WAAW,kDAAkD,WAAW,+CAA+C,gSAAgS,0DAA0D,WAAW,8BAA8B,gSAAgS,gKAAgK,gSAAgS,EAAE,gVAAgV,+BAA+B,SAAS,kBAAkB,uGAAuG,kNAAkN,SAAS,kBAAkB,SAAS,GAAG,WAAW,iBAAiB,SAAS,GAAG,WAAW,gCAAgC,SAAS,iBAAiB,SAAS,kBAAkB,2IAA2I,mBAAmB,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,2BAA2B,gBAAgB,+GAA+G,kBAAkB,iJAAiJ,EAAE,iJAAiJ,gDAAgD,oSAAoS,2BAA2B,OAAO,kBAAkB,uGAAuG,kBAAkB,sJAAsJ,kBAAkB,sJAAsJ,GAAG,gSAAgS,EAAE,gVAAgV,EAAE,sHAAsH,EAAE,sHAAsH,6CAA6C,SAAS,kBAAkB,SAAS;AACr/nB,iBAAiB,mCAAmC;AACpD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kCAAkC;AAClC,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL,sDAAsD;AACtD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,WAAW;AACX;AACA;AACA;AACA,sCAAsC;AACtC;AACA,sCAAsC;AACtC;AACA,yBAAyB,6BAA6B;AACtD;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,yBAAyB;AACzB;AACA,gCAAgC;AAChC;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,qBAAqB;AACrD;AACA,gCAAgC,qBAAqB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iBAAiB,iBAAiB,8BAA8B,mBAAmB,yBAAyB,mBAAmB,0HAA0H,cAAc,aAAa,mxBAAmxB,21JAA21J,UAAU;AAC54L,aAAa,mBAAmB,6BAA6B,kBAAkB,gCAAgC,mBAAmB,gCAAgC,mBAAmB,8BAA8B,iBAAiB,kCAAkC,iBAAiB,qCAAqC,SAAS,kCAAkC,UAAU,kCAAkC,WAAW,6BAA6B,QAAQ,6DAA6D,wBAAwB,kCAAkC,cAAc,+BAA+B,cAAc,8BAA8B,WAAW,kCAAkC,YAAY;AAC5sB,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,CAAC;;;AAGD,IAAI,IAAgE;AACpE,cAAc;AACd,cAAc;AACd,aAAa,iBAAiB;AAC9B,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB,qDAA0B,CAAC,sFAAyB;AACrE;AACA;AACA,IAAI,KAA6B,IAAI,4CAAY;AACjD;AACA;AACA;;;;;;;;;;;AC7hCA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,eAAe,kCAAkC;AACjD,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oJAAoJ;AACpJ,SAAS;;AAET;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW,YAAY,IAAI,WAAW,SAAS;AACvE,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,opBAAopB;AAC/pB,aAAa,ycAAyc;AACtd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,aAAa;AACb;AACA;AACA,oCAAoC;AACpC;AACA;AACA,iCAAiC;AACjC;AACA;AACA,iCAAiC;AACjC;AACA;AACA,qCAAqC;AACrC;AACA;AACA,qCAAqC;AACrC;AACA;AACA,sBAAsB;AACtB;AACA;AACA,sBAAsB;AACtB;AACA;AACA,gCAAgC;AAChC;AACA;AACA,4BAA4B;AAC5B;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB,2CAA2C;AAC7D;AACA;AACA,kBAAkB,+CAA+C;AACjE;AACA;AACA,kBAAkB,yCAAyC;AAC3D;AACA;AACA,kBAAkB,6CAA6C;AAC/D;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,qBAAqB;AACrB;AACA;AACA,CAAC;AACD,SAAS,0BAA0B,EAAE,MAAM,EAAE,0BAA0B,cAAc,IAAI,GAAG,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,gKAAgK,EAAE,uBAAuB,gCAAgC,QAAQ,gBAAgB,+HAA+H,2IAA2I,UAAU,EAAE,UAAU,4CAA4C,UAAU,gBAAgB,oBAAoB,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,sEAAsE,oBAAoB,gBAAgB,UAAU,iBAAiB,aAAa,EAAE,UAAU,eAAe,UAAU,8BAA8B,UAAU,GAAG,UAAU;AACngC,iBAAiB,qCAAqC;AACtD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kCAAkC;AAClC,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL,sDAAsD;AACtD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,UAAU,wBAAwB;AAClC;AACA;AACA;AACA,sCAAsC;AACtC;AACA,sCAAsC;AACtC;AACA,yBAAyB,6BAA6B;AACtD;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA,gCAAgC;AAChC;AACA,yBAAyB;AACzB;AACA,gCAAgC;AAChC;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iBAAiB,kBAAkB,gCAAgC,oBAAoB,gIAAgI,eAAe,cAAc,kBAAkB,qBAAqB,8TAA8T,2EAA2E,2BAA2B,2BAA2B,6BAA6B,qDAAqD,iCAAiC,2BAA2B,kBAAkB,kBAAkB;AAC54B,aAAa,uBAAuB,kCAAkC,cAAc,8BAA8B,cAAc,8BAA8B,oBAAoB,6BAA6B,kBAAkB,gCAAgC,mBAAmB,gCAAgC,mBAAmB,8BAA8B,iBAAiB,kCAAkC,iBAAiB,qCAAqC,SAAS,kCAAkC,UAAU,kCAAkC,YAAY;AACjjB,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,CAAC;;;AAGD,IAAI,IAAgE;AACpE,cAAc;AACd,cAAc;AACd,aAAa,iBAAiB;AAC9B,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB,qDAA0B,CAAC,sFAAyB;AACrE;AACA;AACA,IAAI,KAA6B,IAAI,4CAAY;AACjD;AACA;AACA;;;;;;;;;;;ACnxBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,eAAe,kCAAkC;AACjD,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oJAAoJ;AACpJ,SAAS;;AAET;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW,YAAY,IAAI,WAAW,SAAS;AACvE,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,8uBAA8uB,0BAA0B;AACnxB,aAAa,idAAid,EAAE;AAChe;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,sBAAsB;AACtB;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,qBAAqB;AACrB;AACA;AACA,CAAC;AACD,SAAS,kDAAkD,EAAE,MAAM,EAAE,mDAAmD,EAAE,mDAAmD,EAAE,2CAA2C,+CAA+C,gBAAgB,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,wBAAwB,EAAE,SAAS,eAAe,gBAAgB,gBAAgB,sBAAsB,oBAAoB,QAAQ,EAAE,SAAS,EAAE,wBAAwB,EAAE,gJAAgJ,6BAA6B,gBAAgB,iBAAiB,QAAQ,EAAE,SAAS,gBAAgB,yBAAyB,0DAA0D,UAAU,EAAE,UAAU,4CAA4C,UAAU,eAAe,wDAAwD,GAAG,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,wEAAwE,UAAU,EAAE,2BAA2B,EAAE,UAAU,EAAE,UAAU,6BAA6B,UAAU,GAAG,UAAU,eAAe,UAAU,8BAA8B,8BAA8B,gBAAgB,8BAA8B,0DAA0D,8BAA8B,gBAAgB,8BAA8B,GAAG,UAAU,gBAAgB,UAAU,EAAE,2BAA2B,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,2BAA2B,EAAE,UAAU,EAAE,UAAU,EAAE,2BAA2B,EAAE,UAAU,2CAA2C,oBAAoB,gBAAgB,sBAAsB,gBAAgB,sBAAsB,gBAAgB,sBAAsB,gBAAgB,sBAAsB,gBAAgB,sBAAsB,gBAAgB,sBAAsB,gBAAgB,sBAAsB,gBAAgB,sBAAsB,gBAAgB,sBAAsB,gBAAgB,sBAAsB,gBAAgB,sBAAsB,GAAG,WAAW,EAAE,WAAW,EAAE,4BAA4B,EAAE,WAAW,EAAE,4BAA4B,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,4BAA4B,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,4BAA4B,EAAE,WAAW,EAAE,4BAA4B,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,4BAA4B,EAAE,WAAW,eAAe,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,gBAAgB,WAAW,GAAG,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,4BAA4B,EAAE,WAAW,EAAE,4BAA4B,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,4BAA4B,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,4BAA4B,EAAE,WAAW,EAAE,4BAA4B,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,4BAA4B;AACxmH,iBAAiB,kEAAkE;AACnF;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kCAAkC;AAClC,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL,sDAAsD;AACtD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,UAAU,wBAAwB;AAClC;AACA;AACA;AACA,sCAAsC;AACtC;AACA,sCAAsC;AACtC;AACA,yBAAyB,6BAA6B;AACtD;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA,gCAAgC;AAChC;AACA,yBAAyB;AACzB;AACA,gCAAgC;AAChC;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,wBAAwB,WAAW;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,+BAA+B;AAC/B;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iBAAiB,kBAAkB,gCAAgC,oBAAoB,gIAAgI,eAAe,cAAc;AACpP,aAAa,uBAAuB,kCAAkC,cAAc,8BAA8B,cAAc,8BAA8B,oBAAoB,6BAA6B,kBAAkB,gCAAgC,mBAAmB,gCAAgC,mBAAmB,8BAA8B,YAAY,kCAAkC,WAAW,kCAAkC,YAAY;AAC5c,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,CAAC;;;AAGD,IAAI,IAAgE;AACpE,cAAc;AACd,cAAc;AACd,aAAa,iBAAiB;AAC9B,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB,qDAA0B,CAAC,sFAAyB;AACrE;AACA;AACA,IAAI,KAA6B,IAAI,4CAAY;AACjD;AACA;AACA;;;;;;;;;;;AC57BA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,eAAe,kCAAkC;AACjD,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oJAAoJ;AACpJ,SAAS;;AAET;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW,YAAY,IAAI,WAAW,SAAS;AACvE,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,mHAAmH;AAC9H,aAAa,gDAAgD;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,SAAS,YAAY,EAAE,MAAM,cAAc,IAAI,GAAG,iCAAiC,EAAE,QAAQ;AAC7F,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kCAAkC;AAClC,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL,sDAAsD;AACtD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,UAAU,wBAAwB;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,aAAa,WAAW;AACxB,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,CAAC;;;AAGD,IAAI,IAAgE;AACpE,cAAc;AACd,cAAc;AACd,aAAa,iBAAiB;AAC9B,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB,qDAA0B,CAAC,sFAAyB;AACrE;AACA;AACA,IAAI,KAA6B,IAAI,4CAAY;AACjD;AACA;AACA;;;;;;;;;;;AC7mBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,eAAe,kCAAkC;AACjD,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oJAAoJ;AACpJ,SAAS;;AAET;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW,YAAY,IAAI,WAAW,SAAS;AACvE,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,0WAA0W,mHAAmH;AACxe,aAAa,4NAA4N,2FAA2F;AACpU;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,sBAAsB;AACtB;AACA;AACA,sBAAsB;AACtB;AACA;AACA,gCAAgC;AAChC;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,qBAAqB;AACrB;AACA;AACA,CAAC;AACD,SAAS,mDAAmD,EAAE,MAAM,EAAE,oDAAoD,EAAE,oDAAoD,YAAY,cAAc,6CAA6C,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,YAAY,8EAA8E,aAAa,KAAK,GAAG,uBAAuB,iCAAiC,0BAA0B,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,sDAAsD,8EAA8E,iBAAiB,gBAAgB,oFAAoF,aAAa,EAAE,UAAU;AAC1yB,iBAAiB,qCAAqC;AACtD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kCAAkC;AAClC,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL,sDAAsD;AACtD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,UAAU,wBAAwB;AAClC;AACA;AACA;AACA,sCAAsC;AACtC;AACA,sCAAsC;AACtC;AACA,yBAAyB,6BAA6B;AACtD;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,0BAA0B;AAC1B;AACA,iCAAiC;AACjC;AACA,0BAA0B;AAC1B;AACA,iCAAiC;AACjC;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iBAAiB,kBAAkB,gCAAgC,oBAAoB,0BAA0B,oBAAoB,sNAAsN,eAAe,cAAc;AACxX,aAAa,uBAAuB,kCAAkC,cAAc,+BAA+B,cAAc,+BAA+B,oBAAoB,6BAA6B,kBAAkB,gCAAgC,mBAAmB,gCAAgC,mBAAmB,8BAA8B,UAAU,+BAA+B,WAAW,kCAAkC,YAAY;AACzc,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,CAAC;;;AAGD,IAAI,IAAgE;AACpE,cAAc;AACd,cAAc;AACd,aAAa,iBAAiB;AAC9B,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB,qDAA0B,CAAC,sFAAyB;AACrE;AACA;AACA,IAAI,KAA6B,IAAI,4CAAY;AACjD;AACA;AACA;;;;;;;;;;;AC3qBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,eAAe,kCAAkC;AACjD,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oJAAoJ;AACpJ,SAAS;;AAET;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW,YAAY,IAAI,WAAW,SAAS;AACvE,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,opCAAopC;AAC/pC,aAAa,gyBAAgyB;AAC7yB;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,sBAAsB;AACtB;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,SAAS,8CAA8C,EAAE,MAAM,EAAE,uDAAuD,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,eAAe,SAAS,EAAE,+CAA+C,EAAE,QAAQ,EAAE,mJAAmJ,EAAE,uBAAuB,8CAA8C,QAAQ,EAAE,SAAS,EAAE,mJAAmJ,EAAE,mJAAmJ,EAAE,mJAAmJ,EAAE,mJAAmJ,EAAE,mJAAmJ,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,oBAAoB,+HAA+H,gBAAgB,gBAAgB,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,uDAAuD,EAAE,uDAAuD,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,oGAAoG,UAAU,eAAe,+CAA+C,EAAE,iCAAiC,EAAE,oBAAoB,EAAE,oBAAoB,gBAAgB,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,+CAA+C,8BAA8B,UAAU,EAAE,UAAU,EAAE,iCAAiC,4CAA4C,oBAAoB,EAAE,0BAA0B,EAAE,oCAAoC,EAAE,kDAAkD,gBAAgB,6BAA6B,EAAE,6BAA6B,gBAAgB,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,gDAAgD,EAAE,gDAAgD,EAAE,gDAAgD,EAAE,gDAAgD,EAAE,kCAAkC,EAAE,kCAAkC;AACn7F,iBAAiB,iRAAiR;AAClS;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kCAAkC;AAClC,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL,sDAAsD;AACtD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,UAAU,wBAAwB;AAClC;AACA;AACA;AACA,sCAAsC;AACtC;AACA,sCAAsC;AACtC;AACA,yBAAyB,6BAA6B;AACtD;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,yBAAyB;AACzB;AACA,gCAAgC;AAChC;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA,CAAC;AACD,iBAAiB,kBAAkB,gCAAgC,oBAAoB,gCAAgC,wHAAwH,eAAe,cAAc,iHAAiH,WAAW,qoBAAqoB;AAC7gC,aAAa,uBAAuB,kCAAkC,cAAc,8BAA8B,cAAc,8BAA8B,oBAAoB,6BAA6B,kBAAkB,gCAAgC,mBAAmB,gCAAgC,mBAAmB,8BAA8B,cAAc,6BAA6B,UAAU,6BAA6B,WAAW,kCAAkC,YAAY;AAChf,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,CAAC;;;AAGD,IAAI,IAAgE;AACpE,cAAc;AACd,cAAc;AACd,aAAa,iBAAiB;AAC9B,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB,qDAA0B,CAAC,sFAAyB;AACrE;AACA;AACA,IAAI,KAA6B,IAAI,4CAAY;AACjD;AACA;AACA;;;;;;;;;;;ACrzBA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,eAAe,kCAAkC;AACjD,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oJAAoJ;AACpJ,SAAS;;AAET;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW,YAAY,IAAI,WAAW,SAAS;AACvE,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,wrCAAwrC;AACnsC,aAAa,kxBAAkxB;AAC/xB;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gDAAgD;AAC/E;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,yBAAyB,gDAAgD;AACzE;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,UAAU;AACV;AACA;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,wCAAwC;AACxC;AACA;AACA,wCAAwC;AACxC;AACA;AACA,sBAAsB;AACtB;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA,oBAAoB,0FAA0F;AAC9G,iBAAiB,qEAAqE;AACtF;AACA;AACA;;AAEA,oBAAoB,wFAAwF;AAC5G,iBAAiB,oFAAoF;AACrG;AACA;AACA;;AAEA,oBAAoB,uFAAuF;AAC3G,iBAAiB,mFAAmF;AACpG;AACA;AACA;;AAEA;AACA,oBAAoB,uFAAuF;AAC3G;AACA;AACA,iBAAiB,gDAAgD;AACjE;AACA;AACA;;AAEA;AACA,oBAAoB,uFAAuF;AAC3G;AACA;AACA,iBAAiB,gDAAgD;AACjE;AACA;AACA;;AAEA;AACA,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A;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kCAAkC;AAClC,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL,sDAAsD;AACtD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,UAAU,wBAAwB;AAClC;AACA;AACA;AACA,sCAAsC;AACtC;AACA,sCAAsC;AACtC;AACA,yBAAyB,6BAA6B;AACtD;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,2BAA2B;AAC3B;AACA,yCAAyC,qBAAqB;AAC9D;AACA,0BAA0B,iBAAiB,oBAAoB;AAC/D;AACA,0BAA0B,iBAAiB;AAC3C;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,0BAA0B;AAC1B;AACA,iCAAiC;AACjC;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iBAAiB,kBAAkB,gCAAgC,oBAAoB,uFAAuF,oBAAoB,2FAA2F,iCAAiC,0NAA0N,uNAAuN,yBAAyB,wHAAwH,eAAe,cAAc,mFAAmF,qBAAqB,yCAAyC,4IAA4I;AAC1rC,aAAa,uBAAuB,kCAAkC,cAAc,+BAA+B,cAAc,+BAA+B,mBAAmB,gCAAgC,mBAAmB,kCAAkC,kBAAkB,kCAAkC,OAAO,mCAAmC,UAAU,sCAAsC,SAAS,mCAAmC,YAAY;AAC9c,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,CAAC;;;AAGD,IAAI,IAAgE;AACpE,cAAc;AACd,cAAc;AACd,aAAa,iBAAiB;AAC9B,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB,qDAA0B,CAAC,sFAAyB;AACrE;AACA;AACA,IAAI,KAA6B,IAAI,4CAAY;AACjD;AACA;AACA;;;;;;;;;;;ACp7BA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,eAAe,kCAAkC;AACjD,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oJAAoJ;AACpJ,SAAS;;AAET;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW,YAAY,IAAI,WAAW,SAAS;AACvE,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,ynBAAynB,qJAAqJ;AACzxB,aAAa,wbAAwb,6HAA6H;AAClkB;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,yBAAyB;AAClE;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,WAAW;AACvD;AACA;AACA,6DAA6D,WAAW;AACxE;AACA;;AAEA,2CAA2C,iCAAiC;AAC5E,iBAAiB,4BAA4B,+DAA+D,WAAW;AACvH;AACA;AACA;;AAEA,sEAAsE;AACtE,iBAAiB,4BAA4B,+DAA+D,WAAW,8DAA8D;AACrL;AACA;AACA;;AAEA,2EAA2E;AAC3E,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;;AAEA,2GAA2G;AAC3G,kBAAkB;AAClB;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA;AACA;;AAEA,6GAA6G;AAC7G,iBAAiB,0CAA0C;AAC3D;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,sBAAsB;AACtB;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,qBAAqB;AACrB;AACA;AACA,CAAC;AACD,SAAS,sCAAsC,EAAE,MAAM,EAAE,sCAAsC,EAAE,sCAAsC,EAAE,uCAAuC,yEAAyE,KAAK,GAAG,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,0LAA0L,EAAE,uBAAuB,iCAAiC,iKAAiK,yCAAyC,oBAAoB,iBAAiB,UAAU,eAAe,UAAU,GAAG,UAAU,0DAA0D,oCAAoC,8BAA8B,UAAU,EAAE,UAAU,kHAAkH,gBAAgB,2CAA2C,oBAAoB,0BAA0B,KAAK,GAAG,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,8BAA8B,aAAa,EAAE,UAAU,eAAe,UAAU,GAAG,4LAA4L,eAAe,UAAU,GAAG,UAAU,EAAE,UAAU,sDAAsD,KAAK,+BAA+B,4LAA4L;AACt1D,iBAAiB,gEAAgE;AACjF;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kCAAkC;AAClC,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL,sDAAsD;AACtD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,UAAU,wBAAwB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA,sCAAsC;AACtC;AACA,yBAAyB,6BAA6B;AACtD;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA,6BAA6B,kCAAkC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,wCAAwC;AAC1E;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,0BAA0B;AAC1B;AACA,iCAAiC;AACjC;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA,wBAAwB,0CAA0C,yCAAyC;AAC3G;AACA,wBAAwB,yCAAyC,yCAAyC;AAC1G;AACA,wBAAwB,0CAA0C,yCAAyC;AAC3G;AACA,wBAAwB,yCAAyC,yCAAyC;AAC1G;AACA,wBAAwB,yCAAyC,yCAAyC;AAC1G;AACA,wBAAwB,0CAA0C,yCAAyC;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA,wBAAwB,2BAA2B;AACnD;AACA,wBAAwB,uCAAuC;AAC/D;AACA;AACA;AACA,wDAAwD;AACxD;AACA,oDAAoD;AACpD;AACA;AACA;AACA,wBAAwB,0BAA0B,0CAA0C;AAC5F;AACA,wCAAwC,oBAAoB;AAC5D;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,yBAAyB,0BAA0B;AACnD;AACA,yBAAyB,0BAA0B;AACnD;AACA,yBAAyB;AACzB;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA,2DAA2D;AAC3D;AACA,wBAAwB,8CAA8C;AACtE;AACA,yBAAyB,4BAA4B,6CAA6C;AAClG;AACA,yBAAyB,mDAAmD,2CAA2C;AACvH;AACA,yBAAyB,mDAAmD,6CAA6C;AACzH;AACA,4DAA4D;AAC5D;AACA,4DAA4D;AAC5D;AACA,qDAAqD;AACrD;AACA,iDAAiD;AACjD;AACA,2CAA2C;AAC3C;AACA,yCAAyC,sCAAsC;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,6IAA6I,kBAAkB,gCAAgC,oBAAoB,0BAA0B,oBAAoB,+PAA+P,eAAe,cAAc,6TAA6T,6CAA6C,wBAAwB,WAAW,gLAAgL,oJAAoJ,qBAAqB;AACnwC,aAAa,QAAQ,kCAAkC,oBAAoB,kCAAkC,kBAAkB,sCAAsC,mBAAmB,sCAAsC,mBAAmB,oCAAoC,WAAW,yEAAyE,qBAAqB,+BAA+B,kBAAkB,qCAAqC,cAAc,kCAAkC,YAAY,+BAA+B,SAAS,qCAAqC,wBAAwB,kCAAkC,cAAc,+BAA+B,cAAc,+BAA+B,UAAU,kCAAkC,UAAU,6BAA6B,aAAa,+BAA+B,iBAAiB,kCAAkC,eAAe,6BAA6B,UAAU,mEAAmE,OAAO,kCAAkC,YAAY;AACjlC,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,CAAC;;;AAGD,IAAI,IAAgE;AACpE,cAAc;AACd,cAAc;AACd,aAAa,iBAAiB;AAC9B,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB,qDAA0B,CAAC,sFAAyB;AACrE;AACA;AACA,IAAI,KAA6B,IAAI,4CAAY;AACjD;AACA;AACA;;;;;;;;;;;ACx1BA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA,eAAe,kCAAkC;AACjD,iBAAiB,kCAAkC;AACnD;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oJAAoJ;AACpJ,SAAS;;AAET;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAW,YAAY,IAAI,WAAW,SAAS;AACvE,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,qcAAqc;AAChd,aAAa,uSAAuS;AACpT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,sBAAsB;AACtB;AACA;AACA,sBAAsB;AACtB;AACA;AACA,gCAAgC;AAChC;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA,qBAAqB;AACrB;AACA;AACA,CAAC;AACD,SAAS,0BAA0B,EAAE,MAAM,cAAc,IAAI,GAAG,0BAA0B,EAAE,cAAc,EAAE,UAAU,EAAE,kGAAkG,EAAE,QAAQ,EAAE,uBAAuB,gCAAgC,QAAQ,gBAAgB,iEAAiE,0CAA0C,UAAU,EAAE,UAAU,8BAA8B,UAAU,gBAAgB,UAAU,EAAE,gBAAgB,EAAE,UAAU,sEAAsE,aAAa,EAAE,UAAU,EAAE,UAAU;AACjoB,iBAAiB,qCAAqC;AACtD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,kCAAkC;AAClC,sBAAsB;AACtB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL,sDAAsD;AACtD;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL,UAAU,wBAAwB;AAClC;AACA;AACA;AACA,sCAAsC;AACtC;AACA,sCAAsC;AACtC;AACA,yBAAyB,6BAA6B;AACtD;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,0BAA0B;AAC1B;AACA,iCAAiC;AACjC;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,iBAAiB,kBAAkB,gCAAgC,oBAAoB,yBAAyB,oBAAoB,2FAA2F,wHAAwH,eAAe,cAAc,2BAA2B,kBAAkB,kBAAkB;AACnb,aAAa,kBAAkB,8BAA8B,mBAAmB,gCAAgC,kBAAkB,gCAAgC,wBAAwB,kCAAkC,cAAc,+BAA+B,cAAc,+BAA+B,YAAY;AAClU,CAAC;AACD;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,CAAC;;;AAGD,IAAI,IAAgE;AACpE,cAAc;AACd,cAAc;AACd,aAAa,iBAAiB;AAC9B,YAAY;AACZ;AACA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A/DA;;EAiEb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEvP,mBAAmB,EAAE,KA5ER;;EA8Eb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEtL,MAAM,EAAE,CAAC,QAAD,EAAW,eAAX,EAA4B,aAA5B,EAA2C,aAA3C,CAxFK;;EA0Fb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE8a,gBAAgB,EAAE,KAtGL;;EAwGb;AACF;AACA;AACA;AACA;EACEC,mBAAmB,EAAEvZ,SA7GR;;EA+Gb;EACAG,SAAS,EAAE;IACT;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIqZ,cAAc,EAAE,CAbP;;IAeT;AACJ;AACA;AACA;AACA;AACA;AACA;IACIpZ,UAAU,EAAE,IAtBH;;IAwBT;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIqZ,WAAW,EAAE,EApCJ;;IAsCT;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,WAAW,EAAE,EAlDJ;;IAoDT;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIpQ,KAAK,EAAE,OA7DE;IA8DT;IACA;IACA3I,OAAO,EAAE,EAhEA;;IAkET;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgZ,WAAW,EAAE,IA9EJ;;IAgFT;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,eAAe,EAAE;EA5FR,CAhHE;;EA+Mb;EACAC,QAAQ,EAAE;IACRC,sBAAsB,EAAE,KADhB;;IAER;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,eAAe,EAAE,EATT;;IAWR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,cAAc,EAAE,EAlBR;;IAoBR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,cAAc,EAAE,EA3BR;;IA6BR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,WAAW,EAAE,EApCL;;IAsCR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIzZ,KAAK,EAAE,GA7CC;;IA+CR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,MAAM,EAAE,EAtDA;;IAwDR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIyZ,SAAS,EAAE,EA/DH;;IAiER;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,aAAa,EAAE,CAxEP;;IA0ER;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,UAAU,EAAE,EAjFJ;;IAmFR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,aAAa,EAAE,EA1FP;;IA4FR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAE,QAnGN;;IAqGR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAE,IA5GN;;IA8GR;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,UAAU,EAAE,KAvHJ;;IAyHR;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,eAAe,EAAE,CApIT;;IAsIR;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIf,WAAW,EAAE,IAhJL;;IAkJR;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgB,WAAW,EAAE,KA7JL;;IA+JR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,mBAAmB,EAAE,KAtKb;;IAwKR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,aAAa,EAAE,EA/KP;;IAiLR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,eAAe,EAAE,yBAxLT;;IA0LR;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAE,GA/LT;;IAiMR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAE,EAxMN;;IA0MR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,cAAc,EAAE,4CAjNR;;IAmNR;AACJ;AACA;AACA;AACA;IACIC,cAAc,EAAE,GAxNR;;IA0NR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,SAAS,EAAE,QAjOH;;IAmOR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,eAAe,EAAE,EA1OT;;IA4OR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,iBAAiB,EAAE,4CAnPX;;IAqPR;AACJ;AACA;AACA;AACA;IACIC,iBAAiB,EAAE,GA1PX;;IA4PR;AACJ;AACA;AACA;AACA;IACIC,IAAI,EAAE,KAjQE;;IAmQR;AACJ;AACA;AACA;AACA;IACIC,WAAW,EAAE,EAxQL;;IA0QR;AACJ;AACA;AACA;AACA;IACIC,aAAa,EAAE,EA/QP;;IAiRR;AACJ;AACA;AACA;AACA;IACIC,cAAc,EAAE,EAtRR;IAwRRC,WAAW,EAAE,uBAAY;MACvB,OAAO;QACL5c,UAAU,EAAE,KAAKsc,iBADZ;QAELO,QAAQ,EAAE,KAAKR,eAFV;QAGLS,UAAU,EAAE,KAAKP;MAHZ,CAAP;IAKD,CA9RO;IA+RRQ,QAAQ,EAAE,oBAAY;MACpB,OAAO;QACL/c,UAAU,EAAE,KAAKkc,cADZ;QAELW,QAAQ,EAAE,KAAKZ,YAFV;QAGLa,UAAU,EAAE,KAAKX;MAHZ,CAAP;IAKD,CArSO;IAsSRa,SAAS,EAAE,qBAAY;MACrB,OAAO;QACLhd,UAAU,EAAE,KAAK+b,eADZ;QAELc,QAAQ,EAAE,KAAKf,aAFV;QAGLgB,UAAU,EAAE,KAAKd;MAHZ,CAAP;IAKD;EA5SO,CAhNG;;EA+fb;EACAiB,KAAK,EAAE;IACL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,cAAc,EAAE,EAVX;;IAYL;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,SAAS,EAAE,EAnBN;;IAqBL;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,MAAM,EAAE,CA5BH;;IA8BL;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,UAAU,EAAE,EArCP;;IAuCL;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAE,EA9CT;;IAgDL;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,WAAW,EAAE,EAvDR;;IAyDL;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,oBAAoB,EAAE,EAhEjB;;IAkEL;AACJ;AACA;AACA;AACA;AACA;AACA;IACIX,QAAQ,EAAE,EAzEL;;IA2EL;AACJ;AACA;AACA;AACA;AACA;AACA;IACIY,eAAe,EAAE,EAlFZ;;IAoFL;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,mBAAmB,EAAE,CA3FhB;;IA6FL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,UAAU,EAAE,UAxGP;;IA0GL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI/C,WAAW,EAAE,IAtHR;;IAwHL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgD,OAAO,EAAE,KAjIJ;IAmILC,QAAQ,EAAE5c;EAnIL,CAhgBM;;EAsoBb;EACA6c,OAAO,EAAE;IACP;AACJ;AACA;AACA;AACA;AACA;AACA;IACI7C,cAAc,EAAE,EART;;IAUP;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,cAAc,EAAE,EAjBT;;IAmBP;AACJ;AACA;AACA;AACA;AACA;AACA;IACI6C,UAAU,EAAE,GA1BL;;IA4BP;AACJ;AACA;AACA;AACA;AACA;AACA;IACIrc,KAAK,EAAE,GAnCA;;IAqCP;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,MAAM,EAAE,EA5CD;;IA8CP;AACJ;AACA;AACA;AACA;AACA;AACA;IACIyZ,SAAS,EAAE,EArDJ;;IAuDP;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,aAAa,EAAE,CA9DR;;IAgEP;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,UAAU,EAAE,EAvEL;;IAyEP;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,aAAa,EAAE,EApFR;;IAsFP;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAE,QA7FP;;IA+FP;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIG,eAAe,EAAE,CA1GV;;IA4GP;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIf,WAAW,EAAE,IAxHN;;IA0HP;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgB,WAAW,EAAE,KArIN;IAsIPoC,YAAY,EAAE,EAtIP;IAuIPC,cAAc,EAAE,yBAvIT;IAwIPC,UAAU,EAAE,EAxIL;IAyIP;IACAlD,eAAe,EAAE,EA1IV;IA4IP;IACAmD,aAAa,EAAE,IA7IR;IA8IPC,YAAY,EAAE,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,CA9IP;IAgJPC,YAAY,EAAE,CAAC,SAAD,EAAY,SAAZ,EAAuB,SAAvB,EAAkC,SAAlC,EAA6C,SAA7C,EAAwD,SAAxD,EAAmE,SAAnE,CAhJP;IAiJPC,cAAc,EAAE,CAAC,MAAD;EAjJT,CAvoBI;EA0xBb1d,KAAK,EAAE;IACLmK,mBAAmB,EAAE,KADhB;;IAGL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6P,WAAW,EAAE,IAfR;;IAgBL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,eAAe,EAAE;EA5BZ,CA1xBM;EAwzBb/P,KAAK,EAAE;IACLyT,aAAa,EAAE,EADV;IAELC,QAAQ,EAAE,CAFL;IAGL5c,OAAO,EAAE,CAHJ;IAIL6c,UAAU,EAAE,EAJP;IAKLC,UAAU,EAAE,CAAC,EALR;IAMLpD,UAAU,EAAE,EANP;IAOLqD,SAAS,EAAE,EAPN;IAQLC,UAAU,EAAE,CARP;IASL;IACAC,WAAW,EAAE,CAVR;IAWL;IACA;IACAC,cAAc,EAAE,IAbX;IAcLjC,QAAQ,EAAE,EAdL;IAeLkC,WAAW,EAAE,EAfR;IAgBLC,gBAAgB,EAAE,IAhBb;IAiBLC,iBAAiB,EAAE,EAjBd;IAkBLC,MAAM,EAAE,CAlBH;;IAmBL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACItE,WAAW,EAAE,IA/BR;;IAgCL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,eAAe,EAAE;EA5CZ,CAxzBM;;EAu2Bb;EACAsE,EAAE,EAAE;IACF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI1E,cAAc,EAAE,EAbd;;IAeF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2E,eAAe,EAAE,IA5Bf;;IA8BF;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,cAAc,EAAE,GArCd;;IAuCF;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,eAAe,EAAE,EA9Cf;;IAgDF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,aAAa,EAAE,EA5Db;;IA8DF;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,MAAM,EAAE,MArEN;;IAuEF;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,IAAI,EAAE,UA9EJ;;IAgFF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI5C,QAAQ,EAAE,EAzFR;;IA2FF;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIjC,WAAW,EAAE;EAvGX,CAx2BS;;EAk9Bb;EACA8E,GAAG,EAAE;IACH7B,QAAQ,EAAE5c,SADP;;IAGH;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2Z,WAAW,EAAE;EAfV,CAn9BQ;;EAq+Bb;EACA+E,WAAW,EAAE;IACX9B,QAAQ,EAAE5c,SADC;;IAGX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2Z,WAAW,EAAE,IAfF;IAiBXgF,SAAS,EAAE,SAjBA;IAkBXC,UAAU,EAAE,MAlBD;IAmBXC,gBAAgB,EAAE,OAnBP;IAoBXC,iBAAiB,EAAE,MApBR;IAqBXC,cAAc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,MApBa;EAqBbyzB,OAAO,EAAPA,OArBa;EAsBb12C,OAAO,EAAPA,OAtBa;EAuBbwsC,YAAY,EAAZA,YAvBa;EAwBbF,eAAe,EAAEA,eAxBJ;EAyBbuC,kBAAkB,EAAlBA,kBAzBa;EA0BbC,WAAW,EAAXA;AA1Ba,CAAf;;;;;;;;;;;AC/jCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAuC,8BAA8B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,qBAAqB;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,YAAY;AACZ;AACA,sCAAsC;AACtC;AACA;AACA,UAAU;AACV;AACA;AACA,iDAAiD;AACjD;AACA,YAAY;AACZ;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gDAAgD;AAChD;AACA,MAAM;AACN,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF;AACpF;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA,8DAA8D;;AAE9D;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;;AChhBA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;;;;WC5BA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;WACA;WACA;WACA;;;;;UEJA;UACA;UACA;UACA","sources":["webpack://mermaid/webpack/universalModuleDefinition","webpack://mermaid/./src/diagrams/c4/parser/c4Diagram.jison","webpack://mermaid/./src/diagrams/class/parser/classDiagram.jison","webpack://mermaid/./src/diagrams/er/parser/erDiagram.jison","webpack://mermaid/./src/diagrams/flowchart/parser/flow.jison","webpack://mermaid/./src/diagrams/gantt/parser/gantt.jison","webpack://mermaid/./src/diagrams/git/parser/gitGraph.jison","webpack://mermaid/./src/diagrams/info/parser/info.jison","webpack://mermaid/./src/diagrams/pie/parser/pie.jison","webpack://mermaid/./src/diagrams/requirement/parser/requirementDiagram.jison","webpack://mermaid/./src/diagrams/sequence/parser/sequenceDiagram.jison","webpack://mermaid/./src/diagrams/state/parser/stateDiagram.jison","webpack://mermaid/./src/diagrams/user-journey/parser/journey.jison","webpack://mermaid/./src/accessibility.js","webpack://mermaid/./src/commonDb.js","webpack://mermaid/./src/config.js","webpack://mermaid/./src/dagre-wrapper/clusters.js","webpack://mermaid/./src/dagre-wrapper/createLabel.js","webpack://mermaid/./src/dagre-wrapper/edges.js","webpack://mermaid/./src/dagre-wrapper/index.js","webpack://mermaid/./src/dagre-wrapper/intersect/index.js","webpack://mermaid/./src/dagre-wrapper/intersect/intersect-circle.js","webpack://mermaid/./src/dagre-wrapper/intersect/intersect-ellipse.js","webpack://mermaid/./src/dagre-wrapper/intersect/intersect-line.js","webpack://mermaid/./src/dagre-wrapper/intersect/intersect-node.js","webpack://mermaid/./src/dagre-wrapper/intersect/intersect-polygon.js","webpack://mermaid/./src/dagre-wrapper/intersect/intersect-rect.js","webpack://mermaid/./src/dagre-wrapper/markers.js","webpack://mermaid/./src/dagre-wrapper/mermaid-graphlib.js","webpack://mermaid/./src/dagre-wrapper/nodes.js","webpack://mermaid/./src/dagre-wrapper/shapes/note.js","webpack://mermaid/./src/dagre-wrapper/shapes/util.js","webpack://mermaid/./src/defaultConfig.js","webpack://mermaid/./src/diagrams/c4/c4Db.js","webpack://mermaid/./src/diagrams/c4/c4Renderer.js","webpack://mermaid/./src/diagrams/c4/styles.js","webpack://mermaid/./src/diagrams/c4/svgDraw.js","webpack://mermaid/./src/diagrams/class/classDb.js","webpack://mermaid/./src/diagrams/class/classRenderer-v2.js","webpack://mermaid/./src/diagrams/class/classRenderer.js","webpack://mermaid/./src/diagrams/class/styles.js","webpack://mermaid/./src/diagrams/class/svgDraw.js","webpack://mermaid/./src/diagrams/common/common.js","webpack://mermaid/./src/diagrams/er/erDb.js","webpack://mermaid/./src/diagrams/er/erMarkers.js","webpack://mermaid/./src/diagrams/er/erRenderer.js","webpack://mermaid/./src/diagrams/er/styles.js","webpack://mermaid/./src/diagrams/flowchart/flowChartShapes.js","webpack://mermaid/./src/diagrams/flowchart/flowDb.js","webpack://mermaid/./src/diagrams/flowchart/flowRenderer-v2.js","webpack://mermaid/./src/diagrams/flowchart/flowRenderer.js","webpack://mermaid/./src/diagrams/flowchart/styles.js","webpack://mermaid/./src/diagrams/gantt/ganttDb.js","webpack://mermaid/./src/diagrams/gantt/ganttRenderer.js","webpack://mermaid/./src/diagrams/gantt/styles.js","webpack://mermaid/./src/diagrams/git/gitGraphAst.js","webpack://mermaid/./src/diagrams/git/gitGraphRenderer.js","webpack://mermaid/./src/diagrams/git/styles.js","webpack://mermaid/./src/diagrams/info/infoDb.js","webpack://mermaid/./src/diagrams/info/infoRenderer.js","webpack://mermaid/./src/diagrams/info/styles.js","webpack://mermaid/./src/diagrams/pie/pieDb.js","webpack://mermaid/./src/diagrams/pie/pieRenderer.js","webpack://mermaid/./src/diagrams/pie/styles.js","webpack://mermaid/./src/diagrams/requirement/requirementDb.js","webpack://mermaid/./src/diagrams/requirement/requirementMarkers.js","webpack://mermaid/./src/diagrams/requirement/requirementRenderer.js","webpack://mermaid/./src/diagrams/requirement/styles.js","webpack://mermaid/./src/diagrams/sequence/sequenceDb.js","webpack://mermaid/./src/diagrams/sequence/sequenceRenderer.js","webpack://mermaid/./src/diagrams/sequence/styles.js","webpack://mermaid/./src/diagrams/sequence/svgDraw.js","webpack://mermaid/./src/diagrams/state/id-cache.js","webpack://mermaid/./src/diagrams/state/shapes.js","webpack://mermaid/./src/diagrams/state/stateDb.js","webpack://mermaid/./src/diagrams/state/stateRenderer-v2.js","webpack://mermaid/./src/diagrams/state/stateRenderer.js","webpack://mermaid/./src/diagrams/state/styles.js","webpack://mermaid/./src/diagrams/user-journey/journeyDb.js","webpack://mermaid/./src/diagrams/user-journey/journeyRenderer.js","webpack://mermaid/./src/diagrams/user-journey/styles.js","webpack://mermaid/./src/diagrams/user-journey/svgDraw.js","webpack://mermaid/./src/errorRenderer.js","webpack://mermaid/./src/interactionDb.js","webpack://mermaid/./src/logger.js","webpack://mermaid/./src/mermaid.js","webpack://mermaid/./src/mermaidAPI.js","webpack://mermaid/./src/styles.js","webpack://mermaid/./src/themes/index.js","webpack://mermaid/./src/themes/theme-base.js","webpack://mermaid/./src/themes/theme-dark.js","webpack://mermaid/./src/themes/theme-default.js","webpack://mermaid/./src/themes/theme-forest.js","webpack://mermaid/./src/themes/theme-helpers.js","webpack://mermaid/./src/themes/theme-neutral.js","webpack://mermaid/./src/utils.js","webpack://mermaid/./node_modules/path-browserify/index.js","webpack://mermaid/external commonjs \"@braintree/sanitize-url\"","webpack://mermaid/external commonjs \"d3\"","webpack://mermaid/external commonjs \"dagre\"","webpack://mermaid/external commonjs \"dagre-d3\"","webpack://mermaid/external commonjs \"dagre-d3/lib/label/add-html-label.js\"","webpack://mermaid/external commonjs \"dompurify\"","webpack://mermaid/external commonjs \"graphlib\"","webpack://mermaid/external commonjs \"khroma\"","webpack://mermaid/external commonjs \"moment-mini\"","webpack://mermaid/external commonjs \"stylis\"","webpack://mermaid/ignored|/Users/ashishj/projects/mermaid/src/diagrams/c4/parser|fs","webpack://mermaid/ignored|/Users/ashishj/projects/mermaid/src/diagrams/class/parser|fs","webpack://mermaid/ignored|/Users/ashishj/projects/mermaid/src/diagrams/er/parser|fs","webpack://mermaid/ignored|/Users/ashishj/projects/mermaid/src/diagrams/flowchart/parser|fs","webpack://mermaid/ignored|/Users/ashishj/projects/mermaid/src/diagrams/gantt/parser|fs","webpack://mermaid/ignored|/Users/ashishj/projects/mermaid/src/diagrams/git/parser|fs","webpack://mermaid/ignored|/Users/ashishj/projects/mermaid/src/diagrams/info/parser|fs","webpack://mermaid/ignored|/Users/ashishj/projects/mermaid/src/diagrams/pie/parser|fs","webpack://mermaid/ignored|/Users/ashishj/projects/mermaid/src/diagrams/requirement/parser|fs","webpack://mermaid/ignored|/Users/ashishj/projects/mermaid/src/diagrams/sequence/parser|fs","webpack://mermaid/ignored|/Users/ashishj/projects/mermaid/src/diagrams/state/parser|fs","webpack://mermaid/ignored|/Users/ashishj/projects/mermaid/src/diagrams/user-journey/parser|fs","webpack://mermaid/webpack/bootstrap","webpack://mermaid/webpack/runtime/compat get default export","webpack://mermaid/webpack/runtime/define property getters","webpack://mermaid/webpack/runtime/hasOwnProperty shorthand","webpack://mermaid/webpack/runtime/make namespace object","webpack://mermaid/webpack/runtime/node module decorator","webpack://mermaid/webpack/before-startup","webpack://mermaid/webpack/startup","webpack://mermaid/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"mermaid\"] = factory();\n\telse\n\t\troot[\"mermaid\"] = factory();\n})(typeof self !== \"undefined\" ? self : this, () => {\nreturn ","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,6],$V1=[1,7],$V2=[1,8],$V3=[1,9],$V4=[1,16],$V5=[1,11],$V6=[1,12],$V7=[1,13],$V8=[1,14],$V9=[1,15],$Va=[1,27],$Vb=[1,33],$Vc=[1,34],$Vd=[1,35],$Ve=[1,36],$Vf=[1,37],$Vg=[1,72],$Vh=[1,73],$Vi=[1,74],$Vj=[1,75],$Vk=[1,76],$Vl=[1,77],$Vm=[1,78],$Vn=[1,38],$Vo=[1,39],$Vp=[1,40],$Vq=[1,41],$Vr=[1,42],$Vs=[1,43],$Vt=[1,44],$Vu=[1,45],$Vv=[1,46],$Vw=[1,47],$Vx=[1,48],$Vy=[1,49],$Vz=[1,50],$VA=[1,51],$VB=[1,52],$VC=[1,53],$VD=[1,54],$VE=[1,55],$VF=[1,56],$VG=[1,57],$VH=[1,59],$VI=[1,60],$VJ=[1,61],$VK=[1,62],$VL=[1,63],$VM=[1,64],$VN=[1,65],$VO=[1,66],$VP=[1,67],$VQ=[1,68],$VR=[1,69],$VS=[24,52],$VT=[24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],$VU=[15,24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],$VV=[1,94],$VW=[1,95],$VX=[1,96],$VY=[1,97],$VZ=[15,24,52],$V_=[7,8,9,10,18,22,25,26,27,28],$V$=[15,24,43,52],$V01=[15,24,43,52,86,87,89,90],$V11=[15,43],$V21=[44,46,47,48,49,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"mermaidDoc\":4,\"direction\":5,\"directive\":6,\"direction_tb\":7,\"direction_bt\":8,\"direction_rl\":9,\"direction_lr\":10,\"graphConfig\":11,\"openDirective\":12,\"typeDirective\":13,\"closeDirective\":14,\"NEWLINE\":15,\":\":16,\"argDirective\":17,\"open_directive\":18,\"type_directive\":19,\"arg_directive\":20,\"close_directive\":21,\"C4_CONTEXT\":22,\"statements\":23,\"EOF\":24,\"C4_CONTAINER\":25,\"C4_COMPONENT\":26,\"C4_DYNAMIC\":27,\"C4_DEPLOYMENT\":28,\"otherStatements\":29,\"diagramStatements\":30,\"otherStatement\":31,\"title\":32,\"accDescription\":33,\"acc_title\":34,\"acc_title_value\":35,\"acc_descr\":36,\"acc_descr_value\":37,\"acc_descr_multiline_value\":38,\"boundaryStatement\":39,\"boundaryStartStatement\":40,\"boundaryStopStatement\":41,\"boundaryStart\":42,\"LBRACE\":43,\"ENTERPRISE_BOUNDARY\":44,\"attributes\":45,\"SYSTEM_BOUNDARY\":46,\"BOUNDARY\":47,\"CONTAINER_BOUNDARY\":48,\"NODE\":49,\"NODE_L\":50,\"NODE_R\":51,\"RBRACE\":52,\"diagramStatement\":53,\"PERSON\":54,\"PERSON_EXT\":55,\"SYSTEM\":56,\"SYSTEM_DB\":57,\"SYSTEM_QUEUE\":58,\"SYSTEM_EXT\":59,\"SYSTEM_EXT_DB\":60,\"SYSTEM_EXT_QUEUE\":61,\"CONTAINER\":62,\"CONTAINER_DB\":63,\"CONTAINER_QUEUE\":64,\"CONTAINER_EXT\":65,\"CONTAINER_EXT_DB\":66,\"CONTAINER_EXT_QUEUE\":67,\"COMPONENT\":68,\"COMPONENT_DB\":69,\"COMPONENT_QUEUE\":70,\"COMPONENT_EXT\":71,\"COMPONENT_EXT_DB\":72,\"COMPONENT_EXT_QUEUE\":73,\"REL\":74,\"BIREL\":75,\"REL_U\":76,\"REL_D\":77,\"REL_L\":78,\"REL_R\":79,\"REL_B\":80,\"REL_INDEX\":81,\"UPDATE_EL_STYLE\":82,\"UPDATE_REL_STYLE\":83,\"UPDATE_LAYOUT_CONFIG\":84,\"attribute\":85,\"STR\":86,\"STR_KEY\":87,\"STR_VALUE\":88,\"ATTRIBUTE\":89,\"ATTRIBUTE_EMPTY\":90,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",7:\"direction_tb\",8:\"direction_bt\",9:\"direction_rl\",10:\"direction_lr\",15:\"NEWLINE\",16:\":\",18:\"open_directive\",19:\"type_directive\",20:\"arg_directive\",21:\"close_directive\",22:\"C4_CONTEXT\",24:\"EOF\",25:\"C4_CONTAINER\",26:\"C4_COMPONENT\",27:\"C4_DYNAMIC\",28:\"C4_DEPLOYMENT\",32:\"title\",33:\"accDescription\",34:\"acc_title\",35:\"acc_title_value\",36:\"acc_descr\",37:\"acc_descr_value\",38:\"acc_descr_multiline_value\",43:\"LBRACE\",44:\"ENTERPRISE_BOUNDARY\",46:\"SYSTEM_BOUNDARY\",47:\"BOUNDARY\",48:\"CONTAINER_BOUNDARY\",49:\"NODE\",50:\"NODE_L\",51:\"NODE_R\",52:\"RBRACE\",54:\"PERSON\",55:\"PERSON_EXT\",56:\"SYSTEM\",57:\"SYSTEM_DB\",58:\"SYSTEM_QUEUE\",59:\"SYSTEM_EXT\",60:\"SYSTEM_EXT_DB\",61:\"SYSTEM_EXT_QUEUE\",62:\"CONTAINER\",63:\"CONTAINER_DB\",64:\"CONTAINER_QUEUE\",65:\"CONTAINER_EXT\",66:\"CONTAINER_EXT_DB\",67:\"CONTAINER_EXT_QUEUE\",68:\"COMPONENT\",69:\"COMPONENT_DB\",70:\"COMPONENT_QUEUE\",71:\"COMPONENT_EXT\",72:\"COMPONENT_EXT_DB\",73:\"COMPONENT_EXT_QUEUE\",74:\"REL\",75:\"BIREL\",76:\"REL_U\",77:\"REL_D\",78:\"REL_L\",79:\"REL_R\",80:\"REL_B\",81:\"REL_INDEX\",82:\"UPDATE_EL_STYLE\",83:\"UPDATE_REL_STYLE\",84:\"UPDATE_LAYOUT_CONFIG\",86:\"STR\",87:\"STR_KEY\",88:\"STR_VALUE\",89:\"ATTRIBUTE\",90:\"ATTRIBUTE_EMPTY\"},\nproductions_: [0,[3,1],[3,1],[3,2],[5,1],[5,1],[5,1],[5,1],[4,1],[6,4],[6,6],[12,1],[13,1],[17,1],[14,1],[11,4],[11,4],[11,4],[11,4],[11,4],[23,1],[23,1],[23,2],[29,1],[29,2],[29,3],[31,1],[31,1],[31,2],[31,2],[31,1],[39,3],[40,3],[40,3],[40,4],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[41,1],[30,1],[30,2],[30,3],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,1],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[45,1],[45,2],[85,1],[85,2],[85,1],[85,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 4:\n yy.setDirection('TB');\nbreak;\ncase 5:\n yy.setDirection('BT');\nbreak;\ncase 6:\n yy.setDirection('RL');\nbreak;\ncase 7:\n yy.setDirection('LR');\nbreak;\ncase 11:\n console.log(\"open_directive: \", $$[$0]); yy.parseDirective('%%{', 'open_directive'); \nbreak;\ncase 12:\n  \nbreak;\ncase 13:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"'); console.log(\"arg_directive: \", $$[$0]); yy.parseDirective($$[$0], 'arg_directive'); \nbreak;\ncase 14:\n console.log(\"close_directive: \", $$[$0]); yy.parseDirective('}%%', 'close_directive', 'c4Context');  \nbreak;\ncase 15: case 16: case 17: case 18: case 19:\nyy.setC4Type($$[$0-3])\nbreak;\ncase 26:\nyy.setTitle($$[$0].substring(6));this.$=$$[$0].substring(6);\nbreak;\ncase 27:\nyy.setAccDescription($$[$0].substring(15));this.$=$$[$0].substring(15);\nbreak;\ncase 28:\n this.$=$$[$0].trim();yy.setTitle(this.$); \nbreak;\ncase 29: case 30:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 35: case 36:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); $$[$0].splice(2, 0, 'ENTERPRISE'); yy.addPersonOrSystemBoundary(...$$[$0]); this.$=$$[$0];\nbreak;\ncase 37:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addPersonOrSystemBoundary(...$$[$0]); this.$=$$[$0];\nbreak;\ncase 38:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); $$[$0].splice(2, 0, 'CONTAINER'); yy.addContainerBoundary(...$$[$0]); this.$=$$[$0];\nbreak;\ncase 39:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addDeploymentNode('node', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 40:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addDeploymentNode('nodeL', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 41:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addDeploymentNode('nodeR', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 42:\n yy.popBoundaryParseStack() \nbreak;\ncase 46:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addPersonOrSystem('person', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 47:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addPersonOrSystem('external_person', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 48:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addPersonOrSystem('system', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 49:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addPersonOrSystem('system_db', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 50:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addPersonOrSystem('system_queue', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 51:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addPersonOrSystem('external_system', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 52:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addPersonOrSystem('external_system_db', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 53:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addPersonOrSystem('external_system_queue', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 54:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addContainer('container', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 55:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addContainer('container_db', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 56:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addContainer('container_queue', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 57:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addContainer('external_container', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 58:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addContainer('external_container_db', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 59:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addContainer('external_container_queue', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 60:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addComponent('component', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 61:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addComponent('component_db', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 62:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addComponent('component_queue', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 63:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addComponent('external_component', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 64:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addComponent('external_component_db', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 65:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addComponent('external_component_queue', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 67:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addRel('rel', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 68:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addRel('birel', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 69:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addRel('rel_u', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 70:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addRel('rel_d', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 71:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addRel('rel_l', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 72:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addRel('rel_r', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 73:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.addRel('rel_b', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 74:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); $$[$0].splice(0, 1); yy.addRel('rel', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 75:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.updateElStyle('update_el_style', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 76:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.updateRelStyle('update_rel_style', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 77:\nconsole.log($$[$0-1],JSON.stringify($$[$0])); yy.updateLayoutConfig('update_layout_config', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 78:\n console.log('PUSH ATTRIBUTE: ', $$[$0]); this.$ = [$$[$0]]; \nbreak;\ncase 79:\n console.log('PUSH ATTRIBUTE: ', $$[$0-1]); $$[$0].unshift($$[$0-1]); this.$=$$[$0];\nbreak;\ncase 80: case 82:\n  this.$ = $$[$0].trim(); \nbreak;\ncase 81:\n console.log('kv: ', $$[$0-1], $$[$0]); let kv={}; kv[$$[$0-1].trim()]=$$[$0].trim(); this.$=kv; \nbreak;\ncase 83:\n  this.$ = \"\"; \nbreak;\n}\n},\ntable: [{3:1,4:2,5:3,6:4,7:$V0,8:$V1,9:$V2,10:$V3,11:5,12:10,18:$V4,22:$V5,25:$V6,26:$V7,27:$V8,28:$V9},{1:[3]},{1:[2,1]},{1:[2,2]},{3:17,4:2,5:3,6:4,7:$V0,8:$V1,9:$V2,10:$V3,11:5,12:10,18:$V4,22:$V5,25:$V6,26:$V7,27:$V8,28:$V9},{1:[2,8]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{1:[2,7]},{13:18,19:[1,19]},{15:[1,20]},{15:[1,21]},{15:[1,22]},{15:[1,23]},{15:[1,24]},{19:[2,11]},{1:[2,3]},{14:25,16:[1,26],21:$Va},o([16,21],[2,12]),{23:28,29:29,30:30,31:31,32:$Vb,33:$Vc,34:$Vd,36:$Ve,38:$Vf,39:58,40:70,42:71,44:$Vg,46:$Vh,47:$Vi,48:$Vj,49:$Vk,50:$Vl,51:$Vm,53:32,54:$Vn,55:$Vo,56:$Vp,57:$Vq,58:$Vr,59:$Vs,60:$Vt,61:$Vu,62:$Vv,63:$Vw,64:$Vx,65:$Vy,66:$Vz,67:$VA,68:$VB,69:$VC,70:$VD,71:$VE,72:$VF,73:$VG,74:$VH,75:$VI,76:$VJ,77:$VK,78:$VL,79:$VM,80:$VN,81:$VO,82:$VP,83:$VQ,84:$VR},{23:79,29:29,30:30,31:31,32:$Vb,33:$Vc,34:$Vd,36:$Ve,38:$Vf,39:58,40:70,42:71,44:$Vg,46:$Vh,47:$Vi,48:$Vj,49:$Vk,50:$Vl,51:$Vm,53:32,54:$Vn,55:$Vo,56:$Vp,57:$Vq,58:$Vr,59:$Vs,60:$Vt,61:$Vu,62:$Vv,63:$Vw,64:$Vx,65:$Vy,66:$Vz,67:$VA,68:$VB,69:$VC,70:$VD,71:$VE,72:$VF,73:$VG,74:$VH,75:$VI,76:$VJ,77:$VK,78:$VL,79:$VM,80:$VN,81:$VO,82:$VP,83:$VQ,84:$VR},{23:80,29:29,30:30,31:31,32:$Vb,33:$Vc,34:$Vd,36:$Ve,38:$Vf,39:58,40:70,42:71,44:$Vg,46:$Vh,47:$Vi,48:$Vj,49:$Vk,50:$Vl,51:$Vm,53:32,54:$Vn,55:$Vo,56:$Vp,57:$Vq,58:$Vr,59:$Vs,60:$Vt,61:$Vu,62:$Vv,63:$Vw,64:$Vx,65:$Vy,66:$Vz,67:$VA,68:$VB,69:$VC,70:$VD,71:$VE,72:$VF,73:$VG,74:$VH,75:$VI,76:$VJ,77:$VK,78:$VL,79:$VM,80:$VN,81:$VO,82:$VP,83:$VQ,84:$VR},{23:81,29:29,30:30,31:31,32:$Vb,33:$Vc,34:$Vd,36:$Ve,38:$Vf,39:58,40:70,42:71,44:$Vg,46:$Vh,47:$Vi,48:$Vj,49:$Vk,50:$Vl,51:$Vm,53:32,54:$Vn,55:$Vo,56:$Vp,57:$Vq,58:$Vr,59:$Vs,60:$Vt,61:$Vu,62:$Vv,63:$Vw,64:$Vx,65:$Vy,66:$Vz,67:$VA,68:$VB,69:$VC,70:$VD,71:$VE,72:$VF,73:$VG,74:$VH,75:$VI,76:$VJ,77:$VK,78:$VL,79:$VM,80:$VN,81:$VO,82:$VP,83:$VQ,84:$VR},{23:82,29:29,30:30,31:31,32:$Vb,33:$Vc,34:$Vd,36:$Ve,38:$Vf,39:58,40:70,42:71,44:$Vg,46:$Vh,47:$Vi,48:$Vj,49:$Vk,50:$Vl,51:$Vm,53:32,54:$Vn,55:$Vo,56:$Vp,57:$Vq,58:$Vr,59:$Vs,60:$Vt,61:$Vu,62:$Vv,63:$Vw,64:$Vx,65:$Vy,66:$Vz,67:$VA,68:$VB,69:$VC,70:$VD,71:$VE,72:$VF,73:$VG,74:$VH,75:$VI,76:$VJ,77:$VK,78:$VL,79:$VM,80:$VN,81:$VO,82:$VP,83:$VQ,84:$VR},{15:[1,83]},{17:84,20:[1,85]},{15:[2,14]},{24:[1,86]},o($VS,[2,20],{53:32,39:58,40:70,42:71,30:87,44:$Vg,46:$Vh,47:$Vi,48:$Vj,49:$Vk,50:$Vl,51:$Vm,54:$Vn,55:$Vo,56:$Vp,57:$Vq,58:$Vr,59:$Vs,60:$Vt,61:$Vu,62:$Vv,63:$Vw,64:$Vx,65:$Vy,66:$Vz,67:$VA,68:$VB,69:$VC,70:$VD,71:$VE,72:$VF,73:$VG,74:$VH,75:$VI,76:$VJ,77:$VK,78:$VL,79:$VM,80:$VN,81:$VO,82:$VP,83:$VQ,84:$VR}),o($VS,[2,21]),o($VT,[2,23],{15:[1,88]}),o($VS,[2,43],{15:[1,89]}),o($VU,[2,26]),o($VU,[2,27]),{35:[1,90]},{37:[1,91]},o($VU,[2,30]),{45:92,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:98,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:99,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:100,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:101,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:102,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:103,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:104,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:105,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:106,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:107,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:108,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:109,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:110,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:111,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:112,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:113,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:114,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:115,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:116,85:93,86:$VV,87:$VW,89:$VX,90:$VY},o($VZ,[2,66]),{45:117,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:118,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:119,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:120,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:121,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:122,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:123,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:124,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:125,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:126,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:127,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{30:128,39:58,40:70,42:71,44:$Vg,46:$Vh,47:$Vi,48:$Vj,49:$Vk,50:$Vl,51:$Vm,53:32,54:$Vn,55:$Vo,56:$Vp,57:$Vq,58:$Vr,59:$Vs,60:$Vt,61:$Vu,62:$Vv,63:$Vw,64:$Vx,65:$Vy,66:$Vz,67:$VA,68:$VB,69:$VC,70:$VD,71:$VE,72:$VF,73:$VG,74:$VH,75:$VI,76:$VJ,77:$VK,78:$VL,79:$VM,80:$VN,81:$VO,82:$VP,83:$VQ,84:$VR},{15:[1,130],43:[1,129]},{45:131,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:132,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:133,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:134,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:135,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:136,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{45:137,85:93,86:$VV,87:$VW,89:$VX,90:$VY},{24:[1,138]},{24:[1,139]},{24:[1,140]},{24:[1,141]},o($V_,[2,9]),{14:142,21:$Va},{21:[2,13]},{1:[2,15]},o($VS,[2,22]),o($VT,[2,24],{31:31,29:143,32:$Vb,33:$Vc,34:$Vd,36:$Ve,38:$Vf}),o($VS,[2,44],{29:29,30:30,31:31,53:32,39:58,40:70,42:71,23:144,32:$Vb,33:$Vc,34:$Vd,36:$Ve,38:$Vf,44:$Vg,46:$Vh,47:$Vi,48:$Vj,49:$Vk,50:$Vl,51:$Vm,54:$Vn,55:$Vo,56:$Vp,57:$Vq,58:$Vr,59:$Vs,60:$Vt,61:$Vu,62:$Vv,63:$Vw,64:$Vx,65:$Vy,66:$Vz,67:$VA,68:$VB,69:$VC,70:$VD,71:$VE,72:$VF,73:$VG,74:$VH,75:$VI,76:$VJ,77:$VK,78:$VL,79:$VM,80:$VN,81:$VO,82:$VP,83:$VQ,84:$VR}),o($VU,[2,28]),o($VU,[2,29]),o($VZ,[2,46]),o($V$,[2,78],{85:93,45:145,86:$VV,87:$VW,89:$VX,90:$VY}),o($V01,[2,80]),{88:[1,146]},o($V01,[2,82]),o($V01,[2,83]),o($VZ,[2,47]),o($VZ,[2,48]),o($VZ,[2,49]),o($VZ,[2,50]),o($VZ,[2,51]),o($VZ,[2,52]),o($VZ,[2,53]),o($VZ,[2,54]),o($VZ,[2,55]),o($VZ,[2,56]),o($VZ,[2,57]),o($VZ,[2,58]),o($VZ,[2,59]),o($VZ,[2,60]),o($VZ,[2,61]),o($VZ,[2,62]),o($VZ,[2,63]),o($VZ,[2,64]),o($VZ,[2,65]),o($VZ,[2,67]),o($VZ,[2,68]),o($VZ,[2,69]),o($VZ,[2,70]),o($VZ,[2,71]),o($VZ,[2,72]),o($VZ,[2,73]),o($VZ,[2,74]),o($VZ,[2,75]),o($VZ,[2,76]),o($VZ,[2,77]),{41:147,52:[1,148]},{15:[1,149]},{43:[1,150]},o($V11,[2,35]),o($V11,[2,36]),o($V11,[2,37]),o($V11,[2,38]),o($V11,[2,39]),o($V11,[2,40]),o($V11,[2,41]),{1:[2,16]},{1:[2,17]},{1:[2,18]},{1:[2,19]},{15:[1,151]},o($VT,[2,25]),o($VS,[2,45]),o($V$,[2,79]),o($V01,[2,81]),o($VZ,[2,31]),o($VZ,[2,42]),o($V21,[2,32]),o($V21,[2,33],{15:[1,152]}),o($V_,[2,10]),o($V21,[2,34])],\ndefaultActions: {2:[2,1],3:[2,2],5:[2,8],6:[2,4],7:[2,5],8:[2,6],9:[2,7],16:[2,11],17:[2,3],27:[2,14],85:[2,13],86:[2,15],138:[2,16],139:[2,17],140:[2,18],141:[2,19]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            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).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin('open_directive'); return 18; \nbreak;\ncase 1:return 7;\nbreak;\ncase 2:return 8;\nbreak;\ncase 3:return 9;\nbreak;\ncase 4:return 10;\nbreak;\ncase 5: this.begin('type_directive'); return 19; \nbreak;\ncase 6: this.popState(); this.begin('arg_directive'); return 16; \nbreak;\ncase 7: this.popState(); this.popState(); return 21; \nbreak;\ncase 8:return 20;\nbreak;\ncase 9:return 32;\nbreak;\ncase 10:return 33;\nbreak;\ncase 11: this.begin(\"acc_title\");return 34; \nbreak;\ncase 12: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 13: this.begin(\"acc_descr\");return 36; \nbreak;\ncase 14: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 15: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 16: this.popState(); \nbreak;\ncase 17:return \"acc_descr_multiline_value\";\nbreak;\ncase 18:/* skip comments */\nbreak;\ncase 19:c            /* skip comments */\nbreak;\ncase 20:return 15;\nbreak;\ncase 21:/* skip whitespace */\nbreak;\ncase 22:return 22;\nbreak;\ncase 23:return 25;\nbreak;\ncase 24:return 26;\nbreak;\ncase 25:return 27;\nbreak;\ncase 26:return 28;\nbreak;\ncase 27: this.begin(\"person_ext\"); console.log('begin person_ext'); return 55;\nbreak;\ncase 28: this.begin(\"person\"); console.log('begin person'); return 54;\nbreak;\ncase 29: this.begin(\"system_ext_queue\"); console.log('begin system_ext_queue'); return 61;\nbreak;\ncase 30: this.begin(\"system_ext_db\"); console.log('begin system_ext_db'); return 60;\nbreak;\ncase 31: this.begin(\"system_ext\"); console.log('begin system_ext'); return 59;\nbreak;\ncase 32: this.begin(\"system_queue\"); console.log('begin system_queue'); return 58;\nbreak;\ncase 33: this.begin(\"system_db\"); console.log('begin system_db'); return 57;\nbreak;\ncase 34: this.begin(\"system\"); console.log('begin system'); return 56;\nbreak;\ncase 35: this.begin(\"boundary\"); console.log('begin boundary'); return 47;\nbreak;\ncase 36: this.begin(\"enterprise_boundary\"); console.log('begin enterprise_boundary'); return 44;\nbreak;\ncase 37: this.begin(\"system_boundary\"); console.log('begin system_boundary'); return 46;\nbreak;\ncase 38: this.begin(\"container_ext_queue\"); console.log('begin container_ext_queue'); return 67;\nbreak;\ncase 39: this.begin(\"container_ext_db\"); console.log('begin container_ext_db'); return 66;\nbreak;\ncase 40: this.begin(\"container_ext\"); console.log('begin container_ext'); return 65;\nbreak;\ncase 41: this.begin(\"container_queue\"); console.log('begin container_queue'); return 64;\nbreak;\ncase 42: this.begin(\"container_db\"); console.log('begin container_db'); return 63;\nbreak;\ncase 43: this.begin(\"container\"); console.log('begin container'); return 62;\nbreak;\ncase 44: this.begin(\"container_boundary\"); console.log('begin container_boundary'); return 48;\nbreak;\ncase 45: this.begin(\"component_ext_queue\"); console.log('begin component_ext_queue'); return 73;\nbreak;\ncase 46: this.begin(\"component_ext_db\"); console.log('begin component_ext_db'); return 72;\nbreak;\ncase 47: this.begin(\"component_ext\"); console.log('begin component_ext'); return 71;\nbreak;\ncase 48: this.begin(\"component_queue\"); console.log('begin component_queue'); return 70;\nbreak;\ncase 49: this.begin(\"component_db\"); console.log('begin component_db'); return 69;\nbreak;\ncase 50: this.begin(\"component\"); console.log('begin component'); return 68;\nbreak;\ncase 51: this.begin(\"node\"); console.log('begin node'); return 49;\nbreak;\ncase 52: this.begin(\"node\"); console.log('begin node'); return 49;\nbreak;\ncase 53: this.begin(\"node_l\"); console.log('begin node_l'); return 50;\nbreak;\ncase 54: this.begin(\"node_r\"); console.log('begin node_r'); return 51;\nbreak;\ncase 55: this.begin(\"rel\"); console.log('begin rel'); return 74;\nbreak;\ncase 56: this.begin(\"birel\"); console.log('begin birel'); return 75;\nbreak;\ncase 57: this.begin(\"rel_u\"); console.log('begin rel_u'); return 76;\nbreak;\ncase 58: this.begin(\"rel_u\"); console.log('begin rel_u'); return 76;\nbreak;\ncase 59: this.begin(\"rel_d\"); console.log('begin rel_d'); return 77;\nbreak;\ncase 60: this.begin(\"rel_d\"); console.log('begin rel_d'); return 77;\nbreak;\ncase 61: this.begin(\"rel_l\"); console.log('begin rel_l'); return 78;\nbreak;\ncase 62: this.begin(\"rel_l\"); console.log('begin rel_l'); return 78;\nbreak;\ncase 63: this.begin(\"rel_r\"); console.log('begin rel_r'); return 79;\nbreak;\ncase 64: this.begin(\"rel_r\"); console.log('begin rel_r'); return 79;\nbreak;\ncase 65: this.begin(\"rel_b\"); console.log('begin rel_b'); return 80;\nbreak;\ncase 66: this.begin(\"rel_index\"); console.log('begin rel_index'); return 81;\nbreak;\ncase 67: this.begin(\"update_el_style\"); console.log('begin update_el_style'); return 82;\nbreak;\ncase 68: this.begin(\"update_rel_style\"); console.log('begin update_rel_style'); return 83;\nbreak;\ncase 69: this.begin(\"update_layout_config\"); console.log('begin update_layout_config'); return 84;\nbreak;\ncase 70:return \"EOF_IN_STRUCT\";\nbreak;\ncase 71: console.log('begin attribute with ATTRIBUTE_EMPTY'); this.begin(\"attribute\"); return \"ATTRIBUTE_EMPTY\";\nbreak;\ncase 72: console.log('begin attribute'); this.begin(\"attribute\"); \nbreak;\ncase 73: console.log('STOP attribute'); this.popState();console.log('STOP diagram'); this.popState();\nbreak;\ncase 74: console.log(',,'); return 90;\nbreak;\ncase 75: console.log(','); \nbreak;\ncase 76: console.log('ATTRIBUTE_EMPTY'); return 90;\nbreak;\ncase 77: console.log('begin string'); this.begin(\"string\");\nbreak;\ncase 78: console.log('STOP string');  this.popState(); \nbreak;\ncase 79: console.log('STR'); return \"STR\";\nbreak;\ncase 80: console.log('begin string_kv'); this.begin(\"string_kv\");\nbreak;\ncase 81: console.log('STR_KEY'); this.begin(\"string_kv_key\"); return \"STR_KEY\";\nbreak;\ncase 82: console.log('begin string_kv_value'); this.popState(); this.begin(\"string_kv_value\"); \nbreak;\ncase 83: console.log('STR_VALUE'); return \"STR_VALUE\";\nbreak;\ncase 84: console.log('STOP string_kv_value'); this.popState(); this.popState(); \nbreak;\ncase 85: console.log('not STR'); return \"STR\";\nbreak;\ncase 86: /* this.begin(\"lbrace\"); */ console.log('begin boundary block'); return \"LBRACE\";\nbreak;\ncase 87: /* this.popState(); */ console.log('STOP boundary block'); return \"RBRACE\";\nbreak;\ncase 88:return 'SPACE';\nbreak;\ncase 89:return 'EOL';\nbreak;\ncase 90:return 24;\nbreak;\n}\n},\nrules: [/^(?:%%\\{)/,/^(?:.*direction\\s+TB[^\\n]*)/,/^(?:.*direction\\s+BT[^\\n]*)/,/^(?:.*direction\\s+RL[^\\n]*)/,/^(?:.*direction\\s+LR[^\\n]*)/,/^(?:((?:(?!\\}%%)[^:.])*))/,/^(?::)/,/^(?:\\}%%)/,/^(?:((?:(?!\\}%%).|\\n)*))/,/^(?:title\\s[^#\\n;]+)/,/^(?:accDescription\\s[^#\\n;]+)/,/^(?:accTitle\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*\\{\\s*)/,/^(?:[\\}])/,/^(?:[^\\}]*)/,/^(?:%%(?!\\{)*[^\\n]*(\\r?\\n?)+)/,/^(?:%%[^\\n]*(\\r?\\n)*)/,/^(?:\\s*(\\r?\\n)+)/,/^(?:\\s+)/,/^(?:C4Context\\b)/,/^(?:C4Container\\b)/,/^(?:C4Component\\b)/,/^(?:C4Dynamic\\b)/,/^(?:C4Deployment\\b)/,/^(?:Person_Ext\\b)/,/^(?:Person\\b)/,/^(?:SystemQueue_Ext\\b)/,/^(?:SystemDb_Ext\\b)/,/^(?:System_Ext\\b)/,/^(?:SystemQueue\\b)/,/^(?:SystemDb\\b)/,/^(?:System\\b)/,/^(?:Boundary\\b)/,/^(?:Enterprise_Boundary\\b)/,/^(?:System_Boundary\\b)/,/^(?:ContainerQueue_Ext\\b)/,/^(?:ContainerDb_Ext\\b)/,/^(?:Container_Ext\\b)/,/^(?:ContainerQueue\\b)/,/^(?:ContainerDb\\b)/,/^(?:Container\\b)/,/^(?:Container_Boundary\\b)/,/^(?:ComponentQueue_Ext\\b)/,/^(?:ComponentDb_Ext\\b)/,/^(?:Component_Ext\\b)/,/^(?:ComponentQueue\\b)/,/^(?:ComponentDb\\b)/,/^(?:Component\\b)/,/^(?:Deployment_Node\\b)/,/^(?:Node\\b)/,/^(?:Node_L\\b)/,/^(?:Node_R\\b)/,/^(?:Rel\\b)/,/^(?:BiRel\\b)/,/^(?:Rel_Up\\b)/,/^(?:Rel_U\\b)/,/^(?:Rel_Down\\b)/,/^(?:Rel_D\\b)/,/^(?:Rel_Left\\b)/,/^(?:Rel_L\\b)/,/^(?:Rel_Right\\b)/,/^(?:Rel_R\\b)/,/^(?:Rel_Back\\b)/,/^(?:RelIndex\\b)/,/^(?:UpdateElementStyle\\b)/,/^(?:UpdateRelStyle\\b)/,/^(?:UpdateLayoutConfig\\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*[\"][\"])/,/^(?:[ ]*[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:[ ]*[\\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*[\"])/,/^(?:[^\"]+)/,/^(?:[\"])/,/^(?:[^,]+)/,/^(?:\\{)/,/^(?:\\})/,/^(?:[\\s]+)/,/^(?:[\\n\\r]+)/,/^(?:$)/],\nconditions: {\"acc_descr_multiline\":{\"rules\":[16,17],\"inclusive\":false},\"acc_descr\":{\"rules\":[14],\"inclusive\":false},\"acc_title\":{\"rules\":[12],\"inclusive\":false},\"close_directive\":{\"rules\":[],\"inclusive\":false},\"arg_directive\":{\"rules\":[7,8],\"inclusive\":false},\"type_directive\":{\"rules\":[6,7],\"inclusive\":false},\"open_directive\":{\"rules\":[5],\"inclusive\":false},\"string_kv_value\":{\"rules\":[83,84],\"inclusive\":false},\"string_kv_key\":{\"rules\":[82],\"inclusive\":false},\"string_kv\":{\"rules\":[81],\"inclusive\":false},\"string\":{\"rules\":[78,79],\"inclusive\":false},\"attribute\":{\"rules\":[73,74,75,76,77,80,85],\"inclusive\":false},\"update_layout_config\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"update_rel_style\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"update_el_style\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"rel_b\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"rel_r\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"rel_l\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"rel_d\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"rel_u\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"rel_bi\":{\"rules\":[],\"inclusive\":false},\"rel\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"node_r\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"node_l\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"node\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"index\":{\"rules\":[],\"inclusive\":false},\"rel_index\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"component_ext_queue\":{\"rules\":[],\"inclusive\":false},\"component_ext_db\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"component_ext\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"component_queue\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"component_db\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"component\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"container_boundary\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"container_ext_queue\":{\"rules\":[],\"inclusive\":false},\"container_ext_db\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"container_ext\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"container_queue\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"container_db\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"container\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"birel\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"system_boundary\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"enterprise_boundary\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"boundary\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"system_ext_queue\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"system_ext_db\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"system_ext\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"system_queue\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"system_db\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"system\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"person_ext\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"person\":{\"rules\":[70,71,72,73],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,86,87,88,89,90],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n    if (!args[1]) {\n        console.log('Usage: '+args[0]+' FILE');\n        process.exit(1);\n    }\n    var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n    return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n  exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,3],$V1=[1,7],$V2=[1,8],$V3=[1,9],$V4=[1,10],$V5=[1,13],$V6=[1,12],$V7=[1,16,25],$V8=[1,20],$V9=[1,31],$Va=[1,32],$Vb=[1,33],$Vc=[1,35],$Vd=[1,38],$Ve=[1,36],$Vf=[1,37],$Vg=[1,39],$Vh=[1,40],$Vi=[1,41],$Vj=[1,42],$Vk=[1,45],$Vl=[1,46],$Vm=[1,47],$Vn=[1,48],$Vo=[16,25],$Vp=[1,62],$Vq=[1,63],$Vr=[1,64],$Vs=[1,65],$Vt=[1,66],$Vu=[1,67],$Vv=[16,25,32,44,45,53,56,57,58,59,60,61,66,68],$Vw=[16,25,30,32,44,45,49,53,56,57,58,59,60,61,66,68,83,84,85,86],$Vx=[5,8,9,10,11,16,19,23,25],$Vy=[53,83,84,85,86],$Vz=[53,60,61,83,84,85,86],$VA=[53,56,57,58,59,83,84,85,86],$VB=[16,25,32],$VC=[1,99];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"mermaidDoc\":4,\"statments\":5,\"direction\":6,\"directive\":7,\"direction_tb\":8,\"direction_bt\":9,\"direction_rl\":10,\"direction_lr\":11,\"graphConfig\":12,\"openDirective\":13,\"typeDirective\":14,\"closeDirective\":15,\"NEWLINE\":16,\":\":17,\"argDirective\":18,\"open_directive\":19,\"type_directive\":20,\"arg_directive\":21,\"close_directive\":22,\"CLASS_DIAGRAM\":23,\"statements\":24,\"EOF\":25,\"statement\":26,\"className\":27,\"alphaNumToken\":28,\"classLiteralName\":29,\"GENERICTYPE\":30,\"relationStatement\":31,\"LABEL\":32,\"classStatement\":33,\"methodStatement\":34,\"annotationStatement\":35,\"clickStatement\":36,\"cssClassStatement\":37,\"acc_title\":38,\"acc_title_value\":39,\"acc_descr\":40,\"acc_descr_value\":41,\"acc_descr_multiline_value\":42,\"CLASS\":43,\"STYLE_SEPARATOR\":44,\"STRUCT_START\":45,\"members\":46,\"STRUCT_STOP\":47,\"ANNOTATION_START\":48,\"ANNOTATION_END\":49,\"MEMBER\":50,\"SEPARATOR\":51,\"relation\":52,\"STR\":53,\"relationType\":54,\"lineType\":55,\"AGGREGATION\":56,\"EXTENSION\":57,\"COMPOSITION\":58,\"DEPENDENCY\":59,\"LINE\":60,\"DOTTED_LINE\":61,\"CALLBACK\":62,\"LINK\":63,\"LINK_TARGET\":64,\"CLICK\":65,\"CALLBACK_NAME\":66,\"CALLBACK_ARGS\":67,\"HREF\":68,\"CSSCLASS\":69,\"commentToken\":70,\"textToken\":71,\"graphCodeTokens\":72,\"textNoTagsToken\":73,\"TAGSTART\":74,\"TAGEND\":75,\"==\":76,\"--\":77,\"PCT\":78,\"DEFAULT\":79,\"SPACE\":80,\"MINUS\":81,\"keywords\":82,\"UNICODE_TEXT\":83,\"NUM\":84,\"ALPHA\":85,\"BQUOTE_STR\":86,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"statments\",8:\"direction_tb\",9:\"direction_bt\",10:\"direction_rl\",11:\"direction_lr\",16:\"NEWLINE\",17:\":\",19:\"open_directive\",20:\"type_directive\",21:\"arg_directive\",22:\"close_directive\",23:\"CLASS_DIAGRAM\",25:\"EOF\",30:\"GENERICTYPE\",32:\"LABEL\",38:\"acc_title\",39:\"acc_title_value\",40:\"acc_descr\",41:\"acc_descr_value\",42:\"acc_descr_multiline_value\",43:\"CLASS\",44:\"STYLE_SEPARATOR\",45:\"STRUCT_START\",47:\"STRUCT_STOP\",48:\"ANNOTATION_START\",49:\"ANNOTATION_END\",50:\"MEMBER\",51:\"SEPARATOR\",53:\"STR\",56:\"AGGREGATION\",57:\"EXTENSION\",58:\"COMPOSITION\",59:\"DEPENDENCY\",60:\"LINE\",61:\"DOTTED_LINE\",62:\"CALLBACK\",63:\"LINK\",64:\"LINK_TARGET\",65:\"CLICK\",66:\"CALLBACK_NAME\",67:\"CALLBACK_ARGS\",68:\"HREF\",69:\"CSSCLASS\",72:\"graphCodeTokens\",74:\"TAGSTART\",75:\"TAGEND\",76:\"==\",77:\"--\",78:\"PCT\",79:\"DEFAULT\",80:\"SPACE\",81:\"MINUS\",82:\"keywords\",83:\"UNICODE_TEXT\",84:\"NUM\",85:\"ALPHA\",86:\"BQUOTE_STR\"},\nproductions_: [0,[3,1],[3,1],[3,1],[3,2],[6,1],[6,1],[6,1],[6,1],[4,1],[7,4],[7,6],[13,1],[14,1],[18,1],[15,1],[12,4],[24,1],[24,2],[24,3],[27,1],[27,1],[27,2],[27,2],[27,2],[26,1],[26,2],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,2],[26,2],[26,1],[33,2],[33,4],[33,5],[33,7],[35,4],[46,1],[46,2],[34,1],[34,2],[34,1],[34,1],[31,3],[31,4],[31,4],[31,5],[52,3],[52,2],[52,2],[52,1],[54,1],[54,1],[54,1],[54,1],[55,1],[55,1],[36,3],[36,4],[36,3],[36,4],[36,4],[36,5],[36,3],[36,4],[36,4],[36,5],[36,3],[36,4],[36,4],[36,5],[37,3],[70,1],[70,1],[71,1],[71,1],[71,1],[71,1],[71,1],[71,1],[71,1],[73,1],[73,1],[73,1],[73,1],[28,1],[28,1],[28,1],[29,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 5:\n yy.setDirection('TB');\nbreak;\ncase 6:\n yy.setDirection('BT');\nbreak;\ncase 7:\n yy.setDirection('RL');\nbreak;\ncase 8:\n yy.setDirection('LR');\nbreak;\ncase 12:\n yy.parseDirective('%%{', 'open_directive'); \nbreak;\ncase 13:\n yy.parseDirective($$[$0], 'type_directive'); \nbreak;\ncase 14:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"'); yy.parseDirective($$[$0], 'arg_directive'); \nbreak;\ncase 15:\n yy.parseDirective('}%%', 'close_directive', 'class'); \nbreak;\ncase 20: case 21:\n this.$=$$[$0]; \nbreak;\ncase 22:\n this.$=$$[$0-1]+$$[$0]; \nbreak;\ncase 23: case 24:\n this.$=$$[$0-1]+'~'+$$[$0]; \nbreak;\ncase 25:\n yy.addRelation($$[$0]); \nbreak;\ncase 26:\n $$[$0-1].title =  yy.cleanupLabel($$[$0]); yy.addRelation($$[$0-1]);        \nbreak;\ncase 34:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 35: case 36:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 37:\nyy.addClass($$[$0]);\nbreak;\ncase 38:\nyy.addClass($$[$0-2]);yy.setCssClass($$[$0-2], $$[$0]);\nbreak;\ncase 39:\n/*console.log($$[$0-3],JSON.stringify($$[$0-1]));*/yy.addClass($$[$0-3]);yy.addMembers($$[$0-3],$$[$0-1]);\nbreak;\ncase 40:\nyy.addClass($$[$0-5]);yy.setCssClass($$[$0-5], $$[$0-3]);yy.addMembers($$[$0-5],$$[$0-1]);\nbreak;\ncase 41:\n yy.addAnnotation($$[$0],$$[$0-2]); \nbreak;\ncase 42:\n this.$ = [$$[$0]]; \nbreak;\ncase 43:\n $$[$0].push($$[$0-1]);this.$=$$[$0];\nbreak;\ncase 44:\n/*console.log('Rel found',$$[$0]);*/\nbreak;\ncase 45:\nyy.addMember($$[$0-1],yy.cleanupLabel($$[$0]));\nbreak;\ncase 46:\n/*console.warn('Member',$$[$0]);*/\nbreak;\ncase 47:\n/*console.log('sep found',$$[$0]);*/\nbreak;\ncase 48:\n this.$ = {'id1':$$[$0-2],'id2':$$[$0], relation:$$[$0-1], relationTitle1:'none', relationTitle2:'none'}; \nbreak;\ncase 49:\n this.$ = {id1:$$[$0-3], id2:$$[$0], relation:$$[$0-1], relationTitle1:$$[$0-2], relationTitle2:'none'}\nbreak;\ncase 50:\n this.$ = {id1:$$[$0-3], id2:$$[$0], relation:$$[$0-2], relationTitle1:'none', relationTitle2:$$[$0-1]}; \nbreak;\ncase 51:\n this.$ = {id1:$$[$0-4], id2:$$[$0], relation:$$[$0-2], relationTitle1:$$[$0-3], relationTitle2:$$[$0-1]} \nbreak;\ncase 52:\n this.$={type1:$$[$0-2],type2:$$[$0],lineType:$$[$0-1]}; \nbreak;\ncase 53:\n this.$={type1:'none',type2:$$[$0],lineType:$$[$0-1]}; \nbreak;\ncase 54:\n this.$={type1:$$[$0-1],type2:'none',lineType:$$[$0]}; \nbreak;\ncase 55:\n this.$={type1:'none',type2:'none',lineType:$$[$0]}; \nbreak;\ncase 56:\n this.$=yy.relationType.AGGREGATION;\nbreak;\ncase 57:\n this.$=yy.relationType.EXTENSION;\nbreak;\ncase 58:\n this.$=yy.relationType.COMPOSITION;\nbreak;\ncase 59:\n this.$=yy.relationType.DEPENDENCY;\nbreak;\ncase 60:\nthis.$=yy.lineType.LINE;\nbreak;\ncase 61:\nthis.$=yy.lineType.DOTTED_LINE;\nbreak;\ncase 62: case 68:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-1], $$[$0]);\nbreak;\ncase 63: case 69:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-2], $$[$0-1]);yy.setTooltip($$[$0-2], $$[$0]);\nbreak;\ncase 64: case 72:\nthis.$ = $$[$0-2];yy.setLink($$[$0-1], $$[$0]);\nbreak;\ncase 65:\nthis.$ = $$[$0-3];yy.setLink($$[$0-2], $$[$0-1],$$[$0]);\nbreak;\ncase 66: case 74:\nthis.$ = $$[$0-3];yy.setLink($$[$0-2], $$[$0-1]);yy.setTooltip($$[$0-2], $$[$0]);\nbreak;\ncase 67: case 75:\nthis.$ = $$[$0-4];yy.setLink($$[$0-3], $$[$0-2], $$[$0]);yy.setTooltip($$[$0-3], $$[$0-1]);\nbreak;\ncase 70:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 71:\nthis.$ = $$[$0-4];yy.setClickEvent($$[$0-3], $$[$0-2], $$[$0-1]);yy.setTooltip($$[$0-3], $$[$0]);\nbreak;\ncase 73:\nthis.$ = $$[$0-3];yy.setLink($$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 76:\nyy.setCssClass($$[$0-1], $$[$0]);\nbreak;\n}\n},\ntable: [{3:1,4:2,5:$V0,6:4,7:5,8:$V1,9:$V2,10:$V3,11:$V4,12:6,13:11,19:$V5,23:$V6},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{3:14,4:2,5:$V0,6:4,7:5,8:$V1,9:$V2,10:$V3,11:$V4,12:6,13:11,19:$V5,23:$V6},{1:[2,9]},o($V7,[2,5]),o($V7,[2,6]),o($V7,[2,7]),o($V7,[2,8]),{14:15,20:[1,16]},{16:[1,17]},{20:[2,12]},{1:[2,4]},{15:18,17:[1,19],22:$V8},o([17,22],[2,13]),{6:30,7:29,8:$V1,9:$V2,10:$V3,11:$V4,13:11,19:$V5,24:21,26:22,27:34,28:43,29:44,31:23,33:24,34:25,35:26,36:27,37:28,38:$V9,40:$Va,42:$Vb,43:$Vc,48:$Vd,50:$Ve,51:$Vf,62:$Vg,63:$Vh,65:$Vi,69:$Vj,83:$Vk,84:$Vl,85:$Vm,86:$Vn},{16:[1,49]},{18:50,21:[1,51]},{16:[2,15]},{25:[1,52]},{16:[1,53],25:[2,17]},o($Vo,[2,25],{32:[1,54]}),o($Vo,[2,27]),o($Vo,[2,28]),o($Vo,[2,29]),o($Vo,[2,30]),o($Vo,[2,31]),o($Vo,[2,32]),o($Vo,[2,33]),{39:[1,55]},{41:[1,56]},o($Vo,[2,36]),o($Vo,[2,44],{52:57,54:60,55:61,32:[1,59],53:[1,58],56:$Vp,57:$Vq,58:$Vr,59:$Vs,60:$Vt,61:$Vu}),{27:68,28:43,29:44,83:$Vk,84:$Vl,85:$Vm,86:$Vn},o($Vo,[2,46]),o($Vo,[2,47]),{28:69,83:$Vk,84:$Vl,85:$Vm},{27:70,28:43,29:44,83:$Vk,84:$Vl,85:$Vm,86:$Vn},{27:71,28:43,29:44,83:$Vk,84:$Vl,85:$Vm,86:$Vn},{27:72,28:43,29:44,83:$Vk,84:$Vl,85:$Vm,86:$Vn},{53:[1,73]},o($Vv,[2,20],{28:43,29:44,27:74,30:[1,75],83:$Vk,84:$Vl,85:$Vm,86:$Vn}),o($Vv,[2,21],{30:[1,76]}),o($Vw,[2,90]),o($Vw,[2,91]),o($Vw,[2,92]),o([16,25,30,32,44,45,53,56,57,58,59,60,61,66,68],[2,93]),o($Vx,[2,10]),{15:77,22:$V8},{22:[2,14]},{1:[2,16]},{6:30,7:29,8:$V1,9:$V2,10:$V3,11:$V4,13:11,19:$V5,24:78,25:[2,18],26:22,27:34,28:43,29:44,31:23,33:24,34:25,35:26,36:27,37:28,38:$V9,40:$Va,42:$Vb,43:$Vc,48:$Vd,50:$Ve,51:$Vf,62:$Vg,63:$Vh,65:$Vi,69:$Vj,83:$Vk,84:$Vl,85:$Vm,86:$Vn},o($Vo,[2,26]),o($Vo,[2,34]),o($Vo,[2,35]),{27:79,28:43,29:44,53:[1,80],83:$Vk,84:$Vl,85:$Vm,86:$Vn},{52:81,54:60,55:61,56:$Vp,57:$Vq,58:$Vr,59:$Vs,60:$Vt,61:$Vu},o($Vo,[2,45]),{55:82,60:$Vt,61:$Vu},o($Vy,[2,55],{54:83,56:$Vp,57:$Vq,58:$Vr,59:$Vs}),o($Vz,[2,56]),o($Vz,[2,57]),o($Vz,[2,58]),o($Vz,[2,59]),o($VA,[2,60]),o($VA,[2,61]),o($Vo,[2,37],{44:[1,84],45:[1,85]}),{49:[1,86]},{53:[1,87]},{53:[1,88]},{66:[1,89],68:[1,90]},{28:91,83:$Vk,84:$Vl,85:$Vm},o($Vv,[2,22]),o($Vv,[2,23]),o($Vv,[2,24]),{16:[1,92]},{25:[2,19]},o($VB,[2,48]),{27:93,28:43,29:44,83:$Vk,84:$Vl,85:$Vm,86:$Vn},{27:94,28:43,29:44,53:[1,95],83:$Vk,84:$Vl,85:$Vm,86:$Vn},o($Vy,[2,54],{54:96,56:$Vp,57:$Vq,58:$Vr,59:$Vs}),o($Vy,[2,53]),{28:97,83:$Vk,84:$Vl,85:$Vm},{46:98,50:$VC},{27:100,28:43,29:44,83:$Vk,84:$Vl,85:$Vm,86:$Vn},o($Vo,[2,62],{53:[1,101]}),o($Vo,[2,64],{53:[1,103],64:[1,102]}),o($Vo,[2,68],{53:[1,104],67:[1,105]}),o($Vo,[2,72],{53:[1,107],64:[1,106]}),o($Vo,[2,76]),o($Vx,[2,11]),o($VB,[2,50]),o($VB,[2,49]),{27:108,28:43,29:44,83:$Vk,84:$Vl,85:$Vm,86:$Vn},o($Vy,[2,52]),o($Vo,[2,38],{45:[1,109]}),{47:[1,110]},{46:111,47:[2,42],50:$VC},o($Vo,[2,41]),o($Vo,[2,63]),o($Vo,[2,65]),o($Vo,[2,66],{64:[1,112]}),o($Vo,[2,69]),o($Vo,[2,70],{53:[1,113]}),o($Vo,[2,73]),o($Vo,[2,74],{64:[1,114]}),o($VB,[2,51]),{46:115,50:$VC},o($Vo,[2,39]),{47:[2,43]},o($Vo,[2,67]),o($Vo,[2,71]),o($Vo,[2,75]),{47:[1,116]},o($Vo,[2,40])],\ndefaultActions: {2:[2,1],3:[2,2],4:[2,3],6:[2,9],13:[2,12],14:[2,4],20:[2,15],51:[2,14],52:[2,16],78:[2,19],111:[2,43]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            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).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin('open_directive'); return 19; \nbreak;\ncase 1:return 8;\nbreak;\ncase 2:return 9;\nbreak;\ncase 3:return 10;\nbreak;\ncase 4:return 11;\nbreak;\ncase 5: this.begin('type_directive'); return 20; \nbreak;\ncase 6: this.popState(); this.begin('arg_directive'); return 17; \nbreak;\ncase 7: this.popState(); this.popState(); return 22; \nbreak;\ncase 8:return 21;\nbreak;\ncase 9:/* skip comments */\nbreak;\ncase 10:/* skip comments */\nbreak;\ncase 11: this.begin(\"acc_title\");return 38; \nbreak;\ncase 12: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 13: this.begin(\"acc_descr\");return 40; \nbreak;\ncase 14: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 15: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 16: this.popState(); \nbreak;\ncase 17:return \"acc_descr_multiline_value\";\nbreak;\ncase 18:return 16;\nbreak;\ncase 19:/* skip whitespace */\nbreak;\ncase 20:return 23;\nbreak;\ncase 21:return 23;\nbreak;\ncase 22: this.begin(\"struct\"); /*console.log('Starting struct');*/ return 45;\nbreak;\ncase 23:return \"EOF_IN_STRUCT\";\nbreak;\ncase 24:return \"OPEN_IN_STRUCT\";\nbreak;\ncase 25: /*console.log('Ending struct');*/this.popState(); return 47;\nbreak;\ncase 26:/* nothing */\nbreak;\ncase 27: /*console.log('lex-member: ' + yy_.yytext);*/  return \"MEMBER\";\nbreak;\ncase 28:return 43;\nbreak;\ncase 29:return 69;\nbreak;\ncase 30:return 62;\nbreak;\ncase 31:return 63;\nbreak;\ncase 32:return 65;\nbreak;\ncase 33:return 48;\nbreak;\ncase 34:return 49;\nbreak;\ncase 35:this.begin(\"generic\");\nbreak;\ncase 36:this.popState();\nbreak;\ncase 37:return \"GENERICTYPE\";\nbreak;\ncase 38:this.begin(\"string\");\nbreak;\ncase 39:this.popState();\nbreak;\ncase 40:return \"STR\";\nbreak;\ncase 41:this.begin(\"bqstring\");\nbreak;\ncase 42:this.popState();\nbreak;\ncase 43:return \"BQUOTE_STR\";\nbreak;\ncase 44:this.begin(\"href\");\nbreak;\ncase 45:this.popState();\nbreak;\ncase 46:return 68;\nbreak;\ncase 47:this.begin(\"callback_name\");\nbreak;\ncase 48:this.popState();\nbreak;\ncase 49:this.popState(); this.begin(\"callback_args\");\nbreak;\ncase 50:return 66;\nbreak;\ncase 51:this.popState();\nbreak;\ncase 52:return 67;\nbreak;\ncase 53:return 64;\nbreak;\ncase 54:return 64;\nbreak;\ncase 55:return 64;\nbreak;\ncase 56:return 64;\nbreak;\ncase 57:return 57;\nbreak;\ncase 58:return 57;\nbreak;\ncase 59:return 59;\nbreak;\ncase 60:return 59;\nbreak;\ncase 61:return 58;\nbreak;\ncase 62:return 56;\nbreak;\ncase 63:return 60;\nbreak;\ncase 64:return 61;\nbreak;\ncase 65:return 32;\nbreak;\ncase 66:return 44;\nbreak;\ncase 67:return 81;\nbreak;\ncase 68:return 'DOT';\nbreak;\ncase 69:return 'PLUS';\nbreak;\ncase 70:return 78;\nbreak;\ncase 71:return 'EQUALS';\nbreak;\ncase 72:return 'EQUALS';\nbreak;\ncase 73:return 85;\nbreak;\ncase 74:return 'PUNCTUATION';\nbreak;\ncase 75:return 84;\nbreak;\ncase 76:return 83;\nbreak;\ncase 77:return 80;\nbreak;\ncase 78:return 25;\nbreak;\n}\n},\nrules: [/^(?:%%\\{)/,/^(?:.*direction\\s+TB[^\\n]*)/,/^(?:.*direction\\s+BT[^\\n]*)/,/^(?:.*direction\\s+RL[^\\n]*)/,/^(?:.*direction\\s+LR[^\\n]*)/,/^(?:((?:(?!\\}%%)[^:.])*))/,/^(?::)/,/^(?:\\}%%)/,/^(?:((?:(?!\\}%%).|\\n)*))/,/^(?:%%(?!\\{)*[^\\n]*(\\r?\\n?)+)/,/^(?:%%[^\\n]*(\\r?\\n)*)/,/^(?:accTitle\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*\\{\\s*)/,/^(?:[\\}])/,/^(?:[^\\}]*)/,/^(?:\\s*(\\r?\\n)+)/,/^(?:\\s+)/,/^(?:classDiagram-v2\\b)/,/^(?:classDiagram\\b)/,/^(?:[{])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\\n])/,/^(?:[^{}\\n]*)/,/^(?:class\\b)/,/^(?:cssClass\\b)/,/^(?:callback\\b)/,/^(?:link\\b)/,/^(?:click\\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\\s]+[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:call[\\s]+)/,/^(?:\\([\\s]*\\))/,/^(?:\\()/,/^(?:[^(]*)/,/^(?:\\))/,/^(?:[^)]*)/,/^(?:_self\\b)/,/^(?:_blank\\b)/,/^(?:_parent\\b)/,/^(?:_top\\b)/,/^(?:\\s*<\\|)/,/^(?:\\s*\\|>)/,/^(?:\\s*>)/,/^(?:\\s*<)/,/^(?:\\s*\\*)/,/^(?:\\s*o\\b)/,/^(?:--)/,/^(?:\\.\\.)/,/^(?::{1}[^:\\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\\.)/,/^(?:\\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\\w+)/,/^(?:[!\"#$%&'*+,-.`?\\\\/])/,/^(?:[0-9]+)/,/^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/,/^(?:\\s)/,/^(?:$)/],\nconditions: {\"acc_descr_multiline\":{\"rules\":[16,17],\"inclusive\":false},\"acc_descr\":{\"rules\":[14],\"inclusive\":false},\"acc_title\":{\"rules\":[12],\"inclusive\":false},\"arg_directive\":{\"rules\":[7,8],\"inclusive\":false},\"type_directive\":{\"rules\":[6,7],\"inclusive\":false},\"open_directive\":{\"rules\":[5],\"inclusive\":false},\"callback_args\":{\"rules\":[51,52],\"inclusive\":false},\"callback_name\":{\"rules\":[48,49,50],\"inclusive\":false},\"href\":{\"rules\":[45,46],\"inclusive\":false},\"struct\":{\"rules\":[23,24,25,26,27],\"inclusive\":false},\"generic\":{\"rules\":[36,37],\"inclusive\":false},\"bqstring\":{\"rules\":[42,43],\"inclusive\":false},\"string\":{\"rules\":[39,40],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,28,29,30,31,32,33,34,35,38,41,44,47,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n    if (!args[1]) {\n        console.log('Usage: '+args[0]+' FILE');\n        process.exit(1);\n    }\n    var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n    return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n  exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,2],$V1=[1,5],$V2=[6,9,11,23,25,27,29,30,49],$V3=[1,17],$V4=[1,18],$V5=[1,19],$V6=[1,20],$V7=[1,21],$V8=[1,24],$V9=[1,29],$Va=[1,30],$Vb=[1,31],$Vc=[1,32],$Vd=[6,9,11,15,20,23,25,27,29,30,42,43,44,45,49],$Ve=[1,45],$Vf=[30,46,47],$Vg=[4,6,9,11,23,25,27,29,30,49],$Vh=[42,43,44,45],$Vi=[22,37],$Vj=[1,64];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"ER_DIAGRAM\":4,\"document\":5,\"EOF\":6,\"directive\":7,\"line\":8,\"SPACE\":9,\"statement\":10,\"NEWLINE\":11,\"openDirective\":12,\"typeDirective\":13,\"closeDirective\":14,\":\":15,\"argDirective\":16,\"entityName\":17,\"relSpec\":18,\"role\":19,\"BLOCK_START\":20,\"attributes\":21,\"BLOCK_STOP\":22,\"title\":23,\"title_value\":24,\"acc_title\":25,\"acc_title_value\":26,\"acc_descr\":27,\"acc_descr_value\":28,\"acc_descr_multiline_value\":29,\"ALPHANUM\":30,\".\":31,\"attribute\":32,\"attributeType\":33,\"attributeName\":34,\"attributeKeyType\":35,\"attributeComment\":36,\"ATTRIBUTE_WORD\":37,\"ATTRIBUTE_KEY\":38,\"COMMENT\":39,\"cardinality\":40,\"relType\":41,\"ZERO_OR_ONE\":42,\"ZERO_OR_MORE\":43,\"ONE_OR_MORE\":44,\"ONLY_ONE\":45,\"NON_IDENTIFYING\":46,\"IDENTIFYING\":47,\"WORD\":48,\"open_directive\":49,\"type_directive\":50,\"arg_directive\":51,\"close_directive\":52,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"ER_DIAGRAM\",6:\"EOF\",9:\"SPACE\",11:\"NEWLINE\",15:\":\",20:\"BLOCK_START\",22:\"BLOCK_STOP\",23:\"title\",24:\"title_value\",25:\"acc_title\",26:\"acc_title_value\",27:\"acc_descr\",28:\"acc_descr_value\",29:\"acc_descr_multiline_value\",30:\"ALPHANUM\",31:\".\",37:\"ATTRIBUTE_WORD\",38:\"ATTRIBUTE_KEY\",39:\"COMMENT\",42:\"ZERO_OR_ONE\",43:\"ZERO_OR_MORE\",44:\"ONE_OR_MORE\",45:\"ONLY_ONE\",46:\"NON_IDENTIFYING\",47:\"IDENTIFYING\",48:\"WORD\",49:\"open_directive\",50:\"type_directive\",51:\"arg_directive\",52:\"close_directive\"},\nproductions_: [0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[10,2],[10,2],[10,2],[10,1],[17,1],[17,3],[21,1],[21,2],[32,2],[32,3],[32,3],[32,4],[33,1],[34,1],[35,1],[36,1],[18,3],[40,1],[40,1],[40,1],[40,1],[41,1],[41,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n /*console.log('finished parsing');*/ \nbreak;\ncase 3:\n this.$ = [] \nbreak;\ncase 4:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 5: case 6:\n this.$ = $$[$0] \nbreak;\ncase 7: case 8:\n this.$=[];\nbreak;\ncase 12:\n\n          yy.addEntity($$[$0-4]);\n          yy.addEntity($$[$0-2]);\n          yy.addRelationship($$[$0-4], $$[$0], $$[$0-2], $$[$0-3]);\n          /*console.log($$[$0-4] + $$[$0-3] + $$[$0-2] + ':' + $$[$0]);*/\n      \nbreak;\ncase 13:\n\n          /* console.log('detected block'); */\n          yy.addEntity($$[$0-3]);\n          yy.addAttributes($$[$0-3], $$[$0-1]);\n          /* console.log('handled block'); */\n      \nbreak;\ncase 14:\n yy.addEntity($$[$0-2]); \nbreak;\ncase 15:\n yy.addEntity($$[$0]); \nbreak;\ncase 16: case 17:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 18: case 19:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 20:\n this.$ = $$[$0]; /*console.log('Entity: ' + $$[$0]);*/ \nbreak;\ncase 21:\n this.$ = $$[$0-2] + $$[$0-1] + $$[$0]; \nbreak;\ncase 22:\n this.$ = [$$[$0]]; \nbreak;\ncase 23:\n $$[$0].push($$[$0-1]); this.$=$$[$0]; \nbreak;\ncase 24:\n this.$ = { attributeType: $$[$0-1], attributeName: $$[$0] }; \nbreak;\ncase 25:\n this.$ = { attributeType: $$[$0-2], attributeName: $$[$0-1], attributeKeyType: $$[$0] }; \nbreak;\ncase 26:\n this.$ = { attributeType: $$[$0-2], attributeName: $$[$0-1], attributeComment: $$[$0] }; \nbreak;\ncase 27:\n this.$ = { attributeType: $$[$0-3], attributeName: $$[$0-2], attributeKeyType: $$[$0-1], attributeComment: $$[$0] }; \nbreak;\ncase 28: case 29: case 30:\n this.$=$$[$0]; \nbreak;\ncase 31:\n this.$=$$[$0].replace(/\"/g, ''); \nbreak;\ncase 32:\n\n        this.$ = { cardA: $$[$0], relType: $$[$0-1], cardB: $$[$0-2] };\n        /*console.log('relSpec: ' + $$[$0] + $$[$0-1] + $$[$0-2]);*/\n      \nbreak;\ncase 33:\n this.$ = yy.Cardinality.ZERO_OR_ONE; \nbreak;\ncase 34:\n this.$ = yy.Cardinality.ZERO_OR_MORE; \nbreak;\ncase 35:\n this.$ = yy.Cardinality.ONE_OR_MORE; \nbreak;\ncase 36:\n this.$ = yy.Cardinality.ONLY_ONE; \nbreak;\ncase 37:\n this.$ = yy.Identification.NON_IDENTIFYING;  \nbreak;\ncase 38:\n this.$ = yy.Identification.IDENTIFYING; \nbreak;\ncase 39:\n this.$ = $$[$0].replace(/\"/g, ''); \nbreak;\ncase 40:\n this.$ = $$[$0]; \nbreak;\ncase 41:\n yy.parseDirective('%%{', 'open_directive'); \nbreak;\ncase 42:\n yy.parseDirective($$[$0], 'type_directive'); \nbreak;\ncase 43:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"'); yy.parseDirective($$[$0], 'arg_directive'); \nbreak;\ncase 44:\n yy.parseDirective('}%%', 'close_directive', 'er'); \nbreak;\n}\n},\ntable: [{3:1,4:$V0,7:3,12:4,49:$V1},{1:[3]},o($V2,[2,3],{5:6}),{3:7,4:$V0,7:3,12:4,49:$V1},{13:8,50:[1,9]},{50:[2,41]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:$V3,25:$V4,27:$V5,29:$V6,30:$V7,49:$V1},{1:[2,2]},{14:22,15:[1,23],52:$V8},o([15,52],[2,42]),o($V2,[2,8],{1:[2,1]}),o($V2,[2,4]),{7:15,10:25,12:4,17:16,23:$V3,25:$V4,27:$V5,29:$V6,30:$V7,49:$V1},o($V2,[2,6]),o($V2,[2,7]),o($V2,[2,11]),o($V2,[2,15],{18:26,40:28,20:[1,27],42:$V9,43:$Va,44:$Vb,45:$Vc}),{24:[1,33]},{26:[1,34]},{28:[1,35]},o($V2,[2,19]),o($Vd,[2,20],{31:[1,36]}),{11:[1,37]},{16:38,51:[1,39]},{11:[2,44]},o($V2,[2,5]),{17:40,30:$V7},{21:41,22:[1,42],32:43,33:44,37:$Ve},{41:46,46:[1,47],47:[1,48]},o($Vf,[2,33]),o($Vf,[2,34]),o($Vf,[2,35]),o($Vf,[2,36]),o($V2,[2,16]),o($V2,[2,17]),o($V2,[2,18]),{17:49,30:$V7},o($Vg,[2,9]),{14:50,52:$V8},{52:[2,43]},{15:[1,51]},{22:[1,52]},o($V2,[2,14]),{21:53,22:[2,22],32:43,33:44,37:$Ve},{34:54,37:[1,55]},{37:[2,28]},{40:56,42:$V9,43:$Va,44:$Vb,45:$Vc},o($Vh,[2,37]),o($Vh,[2,38]),o($Vd,[2,21]),{11:[1,57]},{19:58,30:[1,60],48:[1,59]},o($V2,[2,13]),{22:[2,23]},o($Vi,[2,24],{35:61,36:62,38:[1,63],39:$Vj}),o([22,37,38,39],[2,29]),{30:[2,32]},o($Vg,[2,10]),o($V2,[2,12]),o($V2,[2,39]),o($V2,[2,40]),o($Vi,[2,25],{36:65,39:$Vj}),o($Vi,[2,26]),o([22,37,39],[2,30]),o($Vi,[2,31]),o($Vi,[2,27])],\ndefaultActions: {5:[2,41],7:[2,2],24:[2,44],39:[2,43],45:[2,28],53:[2,23],56:[2,32]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            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).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin(\"acc_title\");return 25; \nbreak;\ncase 1: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 2: this.begin(\"acc_descr\");return 27; \nbreak;\ncase 3: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 4: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 5: this.popState(); \nbreak;\ncase 6:return \"acc_descr_multiline_value\";\nbreak;\ncase 7: this.begin('open_directive'); return 49; \nbreak;\ncase 8: this.begin('type_directive'); return 50; \nbreak;\ncase 9: this.popState(); this.begin('arg_directive'); return 15; \nbreak;\ncase 10: this.popState(); this.popState(); return 52; \nbreak;\ncase 11:return 51;\nbreak;\ncase 12:/* skip comments */\nbreak;\ncase 13:/* skip comments */\nbreak;\ncase 14:return 11;\nbreak;\ncase 15:/* skip whitespace */\nbreak;\ncase 16:return 9;\nbreak;\ncase 17:return 48;\nbreak;\ncase 18:return 4;\nbreak;\ncase 19: this.begin(\"block\"); return 20; \nbreak;\ncase 20:/* skip whitespace in block */\nbreak;\ncase 21:return 38\nbreak;\ncase 22:return 37\nbreak;\ncase 23:return 39;\nbreak;\ncase 24:/* nothing */\nbreak;\ncase 25: this.popState(); return 22; \nbreak;\ncase 26:return yy_.yytext[0];\nbreak;\ncase 27:return 42;\nbreak;\ncase 28:return 43;\nbreak;\ncase 29:return 44;\nbreak;\ncase 30:return 45;\nbreak;\ncase 31:return 42;\nbreak;\ncase 32:return 43;\nbreak;\ncase 33:return 44;\nbreak;\ncase 34:return 46;\nbreak;\ncase 35:return 47;\nbreak;\ncase 36:return 46;\nbreak;\ncase 37:return 46;\nbreak;\ncase 38:return 30;\nbreak;\ncase 39:return yy_.yytext[0];\nbreak;\ncase 40:return 6;\nbreak;\n}\n},\nrules: [/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:%%\\{)/i,/^(?:((?:(?!\\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\\}%%)/i,/^(?:((?:(?!\\}%%).|\\n)*))/i,/^(?:%(?!\\{)[^\\n]*)/i,/^(?:[^\\}]%%[^\\n]*)/i,/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:[\\s]+)/i,/^(?:\"[^\"]*\")/i,/^(?:erDiagram\\b)/i,/^(?:\\{)/i,/^(?:\\s+)/i,/^(?:\\b((?:PK)|(?:FK))\\b)/i,/^(?:[A-Za-z][A-Za-z0-9\\-_]*)/i,/^(?:\"[^\"]*\")/i,/^(?:[\\n]+)/i,/^(?:\\})/i,/^(?:.)/i,/^(?:\\|o\\b)/i,/^(?:\\}o\\b)/i,/^(?:\\}\\|)/i,/^(?:\\|\\|)/i,/^(?:o\\|)/i,/^(?:o\\{)/i,/^(?:\\|\\{)/i,/^(?:\\.\\.)/i,/^(?:--)/i,/^(?:\\.-)/i,/^(?:-\\.)/i,/^(?:[A-Za-z][A-Za-z0-9\\-_]*)/i,/^(?:.)/i,/^(?:$)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[5,6],\"inclusive\":false},\"acc_descr\":{\"rules\":[3],\"inclusive\":false},\"acc_title\":{\"rules\":[1],\"inclusive\":false},\"open_directive\":{\"rules\":[8],\"inclusive\":false},\"type_directive\":{\"rules\":[9,10],\"inclusive\":false},\"arg_directive\":{\"rules\":[10,11],\"inclusive\":false},\"block\":{\"rules\":[20,21,22,23,24,25,26],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,2,4,7,12,13,14,15,16,17,18,19,27,28,29,30,31,32,33,34,35,36,37,38,39,40],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n    if (!args[1]) {\n        console.log('Usage: '+args[0]+' FILE');\n        process.exit(1);\n    }\n    var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n    return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n  exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,9],$V1=[1,7],$V2=[1,6],$V3=[1,8],$V4=[1,20,21,22,23,38,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],$V5=[2,10],$V6=[1,20],$V7=[1,21],$V8=[1,22],$V9=[1,23],$Va=[1,30],$Vb=[1,32],$Vc=[1,33],$Vd=[1,34],$Ve=[1,62],$Vf=[1,48],$Vg=[1,52],$Vh=[1,36],$Vi=[1,37],$Vj=[1,38],$Vk=[1,39],$Vl=[1,40],$Vm=[1,56],$Vn=[1,63],$Vo=[1,51],$Vp=[1,53],$Vq=[1,55],$Vr=[1,59],$Vs=[1,60],$Vt=[1,41],$Vu=[1,42],$Vv=[1,43],$Vw=[1,44],$Vx=[1,61],$Vy=[1,50],$Vz=[1,54],$VA=[1,57],$VB=[1,58],$VC=[1,49],$VD=[1,66],$VE=[1,71],$VF=[1,20,21,22,23,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],$VG=[1,75],$VH=[1,74],$VI=[1,76],$VJ=[20,21,23,81,82],$VK=[1,99],$VL=[1,104],$VM=[1,107],$VN=[1,108],$VO=[1,101],$VP=[1,106],$VQ=[1,109],$VR=[1,102],$VS=[1,114],$VT=[1,113],$VU=[1,103],$VV=[1,105],$VW=[1,110],$VX=[1,111],$VY=[1,112],$VZ=[1,115],$V_=[20,21,22,23,81,82],$V$=[20,21,22,23,53,81,82],$V01=[20,21,22,23,40,52,53,55,57,59,61,63,65,66,67,69,71,73,74,76,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],$V11=[20,21,23],$V21=[20,21,23,52,66,67,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],$V31=[1,12,20,21,22,23,24,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],$V41=[52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],$V51=[1,149],$V61=[1,157],$V71=[1,158],$V81=[1,159],$V91=[1,160],$Va1=[1,144],$Vb1=[1,145],$Vc1=[1,141],$Vd1=[1,152],$Ve1=[1,153],$Vf1=[1,154],$Vg1=[1,155],$Vh1=[1,156],$Vi1=[1,161],$Vj1=[1,162],$Vk1=[1,147],$Vl1=[1,150],$Vm1=[1,146],$Vn1=[1,143],$Vo1=[20,21,22,23,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],$Vp1=[1,165],$Vq1=[20,21,22,23,26,52,66,67,91,105,106,109,111,112,122,123,124,125,126,127],$Vr1=[20,21,22,23,24,26,38,40,41,42,52,56,58,60,62,64,66,67,68,70,72,73,75,77,81,82,86,87,88,89,90,91,92,95,105,106,109,111,112,113,114,122,123,124,125,126,127],$Vs1=[12,21,22,24],$Vt1=[22,106],$Vu1=[1,250],$Vv1=[1,245],$Vw1=[1,246],$Vx1=[1,254],$Vy1=[1,251],$Vz1=[1,248],$VA1=[1,247],$VB1=[1,249],$VC1=[1,252],$VD1=[1,253],$VE1=[1,255],$VF1=[1,273],$VG1=[20,21,23,106],$VH1=[20,21,22,23,66,67,86,102,105,106,109,110,111,112,113];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"mermaidDoc\":4,\"directive\":5,\"openDirective\":6,\"typeDirective\":7,\"closeDirective\":8,\"separator\":9,\":\":10,\"argDirective\":11,\"open_directive\":12,\"type_directive\":13,\"arg_directive\":14,\"close_directive\":15,\"graphConfig\":16,\"document\":17,\"line\":18,\"statement\":19,\"SEMI\":20,\"NEWLINE\":21,\"SPACE\":22,\"EOF\":23,\"GRAPH\":24,\"NODIR\":25,\"DIR\":26,\"FirstStmtSeperator\":27,\"ending\":28,\"endToken\":29,\"spaceList\":30,\"spaceListNewline\":31,\"verticeStatement\":32,\"styleStatement\":33,\"linkStyleStatement\":34,\"classDefStatement\":35,\"classStatement\":36,\"clickStatement\":37,\"subgraph\":38,\"text\":39,\"SQS\":40,\"SQE\":41,\"end\":42,\"direction\":43,\"acc_title\":44,\"acc_title_value\":45,\"acc_descr\":46,\"acc_descr_value\":47,\"acc_descr_multiline_value\":48,\"link\":49,\"node\":50,\"vertex\":51,\"AMP\":52,\"STYLE_SEPARATOR\":53,\"idString\":54,\"DOUBLECIRCLESTART\":55,\"DOUBLECIRCLEEND\":56,\"PS\":57,\"PE\":58,\"(-\":59,\"-)\":60,\"STADIUMSTART\":61,\"STADIUMEND\":62,\"SUBROUTINESTART\":63,\"SUBROUTINEEND\":64,\"VERTEX_WITH_PROPS_START\":65,\"ALPHA\":66,\"COLON\":67,\"PIPE\":68,\"CYLINDERSTART\":69,\"CYLINDEREND\":70,\"DIAMOND_START\":71,\"DIAMOND_STOP\":72,\"TAGEND\":73,\"TRAPSTART\":74,\"TRAPEND\":75,\"INVTRAPSTART\":76,\"INVTRAPEND\":77,\"linkStatement\":78,\"arrowText\":79,\"TESTSTR\":80,\"START_LINK\":81,\"LINK\":82,\"textToken\":83,\"STR\":84,\"keywords\":85,\"STYLE\":86,\"LINKSTYLE\":87,\"CLASSDEF\":88,\"CLASS\":89,\"CLICK\":90,\"DOWN\":91,\"UP\":92,\"textNoTags\":93,\"textNoTagsToken\":94,\"DEFAULT\":95,\"stylesOpt\":96,\"alphaNum\":97,\"CALLBACKNAME\":98,\"CALLBACKARGS\":99,\"HREF\":100,\"LINK_TARGET\":101,\"HEX\":102,\"numList\":103,\"INTERPOLATE\":104,\"NUM\":105,\"COMMA\":106,\"style\":107,\"styleComponent\":108,\"MINUS\":109,\"UNIT\":110,\"BRKT\":111,\"DOT\":112,\"PCT\":113,\"TAGSTART\":114,\"alphaNumToken\":115,\"idStringToken\":116,\"alphaNumStatement\":117,\"direction_tb\":118,\"direction_bt\":119,\"direction_rl\":120,\"direction_lr\":121,\"PUNCTUATION\":122,\"UNICODE_TEXT\":123,\"PLUS\":124,\"EQUALS\":125,\"MULT\":126,\"UNDERSCORE\":127,\"graphCodeTokens\":128,\"ARROW_CROSS\":129,\"ARROW_POINT\":130,\"ARROW_CIRCLE\":131,\"ARROW_OPEN\":132,\"QUOTE\":133,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",10:\":\",12:\"open_directive\",13:\"type_directive\",14:\"arg_directive\",15:\"close_directive\",20:\"SEMI\",21:\"NEWLINE\",22:\"SPACE\",23:\"EOF\",24:\"GRAPH\",25:\"NODIR\",26:\"DIR\",38:\"subgraph\",40:\"SQS\",41:\"SQE\",42:\"end\",44:\"acc_title\",45:\"acc_title_value\",46:\"acc_descr\",47:\"acc_descr_value\",48:\"acc_descr_multiline_value\",52:\"AMP\",53:\"STYLE_SEPARATOR\",55:\"DOUBLECIRCLESTART\",56:\"DOUBLECIRCLEEND\",57:\"PS\",58:\"PE\",59:\"(-\",60:\"-)\",61:\"STADIUMSTART\",62:\"STADIUMEND\",63:\"SUBROUTINESTART\",64:\"SUBROUTINEEND\",65:\"VERTEX_WITH_PROPS_START\",66:\"ALPHA\",67:\"COLON\",68:\"PIPE\",69:\"CYLINDERSTART\",70:\"CYLINDEREND\",71:\"DIAMOND_START\",72:\"DIAMOND_STOP\",73:\"TAGEND\",74:\"TRAPSTART\",75:\"TRAPEND\",76:\"INVTRAPSTART\",77:\"INVTRAPEND\",80:\"TESTSTR\",81:\"START_LINK\",82:\"LINK\",84:\"STR\",86:\"STYLE\",87:\"LINKSTYLE\",88:\"CLASSDEF\",89:\"CLASS\",90:\"CLICK\",91:\"DOWN\",92:\"UP\",95:\"DEFAULT\",98:\"CALLBACKNAME\",99:\"CALLBACKARGS\",100:\"HREF\",101:\"LINK_TARGET\",102:\"HEX\",104:\"INTERPOLATE\",105:\"NUM\",106:\"COMMA\",109:\"MINUS\",110:\"UNIT\",111:\"BRKT\",112:\"DOT\",113:\"PCT\",114:\"TAGSTART\",118:\"direction_tb\",119:\"direction_bt\",120:\"direction_rl\",121:\"direction_lr\",122:\"PUNCTUATION\",123:\"UNICODE_TEXT\",124:\"PLUS\",125:\"EQUALS\",126:\"MULT\",127:\"UNDERSCORE\",129:\"ARROW_CROSS\",130:\"ARROW_POINT\",131:\"ARROW_CIRCLE\",132:\"ARROW_OPEN\",133:\"QUOTE\"},\nproductions_: [0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[19,2],[19,2],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[50,1],[50,5],[50,3],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,8],[51,4],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,4],[51,4],[51,1],[49,2],[49,3],[49,3],[49,1],[49,3],[78,1],[79,3],[39,1],[39,2],[39,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[93,1],[93,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[103,1],[103,3],[96,1],[96,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[94,1],[94,1],[94,1],[94,1],[54,1],[54,2],[97,1],[97,2],[117,1],[117,1],[117,1],[117,1],[43,1],[43,1],[43,1],[43,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 5:\n yy.parseDirective('%%{', 'open_directive'); \nbreak;\ncase 6:\n yy.parseDirective($$[$0], 'type_directive'); \nbreak;\ncase 7:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"'); yy.parseDirective($$[$0], 'arg_directive'); \nbreak;\ncase 8:\n yy.parseDirective('}%%', 'close_directive', 'flowchart'); \nbreak;\ncase 10:\n this.$ = [];\nbreak;\ncase 11:\n\n\t    if($$[$0] !== []){\n\t        $$[$0-1].push($$[$0]);\n\t    }\n\t    this.$=$$[$0-1];\nbreak;\ncase 12: case 82: case 84: case 96: case 152: case 154: case 155:\nthis.$=$$[$0];\nbreak;\ncase 19:\n yy.setDirection('TB');this.$ = 'TB';\nbreak;\ncase 20:\n yy.setDirection($$[$0-1]);this.$ = $$[$0-1];\nbreak;\ncase 35:\n /* console.warn('finat vs', $$[$0-1].nodes); */ this.$=$$[$0-1].nodes\nbreak;\ncase 36: case 37: case 38: case 39: case 40:\nthis.$=[];\nbreak;\ncase 41:\nthis.$=yy.addSubGraph($$[$0-6],$$[$0-1],$$[$0-4]);\nbreak;\ncase 42:\nthis.$=yy.addSubGraph($$[$0-3],$$[$0-1],$$[$0-3]);\nbreak;\ncase 43:\nthis.$=yy.addSubGraph(undefined,$$[$0-1],undefined);\nbreak;\ncase 45:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 46: case 47:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 51:\n /* console.warn('vs',$$[$0-2].stmt,$$[$0]); */ yy.addLink($$[$0-2].stmt,$$[$0],$$[$0-1]); this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0-2].nodes) } \nbreak;\ncase 52:\n /* console.warn('vs',$$[$0-3].stmt,$$[$0-1]); */ yy.addLink($$[$0-3].stmt,$$[$0-1],$$[$0-2]); this.$ = { stmt: $$[$0-1], nodes: $$[$0-1].concat($$[$0-3].nodes) } \nbreak;\ncase 53:\n/*console.warn('noda', $$[$0-1]);*/ this.$ = {stmt: $$[$0-1], nodes:$$[$0-1] }\nbreak;\ncase 54:\n /*console.warn('noda', $$[$0]);*/ this.$ = {stmt: $$[$0], nodes:$$[$0] }\nbreak;\ncase 55:\n /* console.warn('nod', $$[$0]); */ this.$ = [$$[$0]];\nbreak;\ncase 56:\n this.$ = $$[$0-4].concat($$[$0]); /* console.warn('pip', $$[$0-4][0], $$[$0], this.$); */ \nbreak;\ncase 57:\nthis.$ = [$$[$0-2]];yy.setClass($$[$0-2],$$[$0])\nbreak;\ncase 58:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'square');\nbreak;\ncase 59:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'doublecircle');\nbreak;\ncase 60:\nthis.$ = $$[$0-5];yy.addVertex($$[$0-5],$$[$0-2],'circle');\nbreak;\ncase 61:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'ellipse');\nbreak;\ncase 62:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'stadium');\nbreak;\ncase 63:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'subroutine');\nbreak;\ncase 64:\nthis.$ = $$[$0-7];yy.addVertex($$[$0-7],$$[$0-1],'rect',undefined,undefined,undefined, Object.fromEntries([[$$[$0-5], $$[$0-3]]]));\nbreak;\ncase 65:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'cylinder');\nbreak;\ncase 66:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'round');\nbreak;\ncase 67:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'diamond');\nbreak;\ncase 68:\nthis.$ = $$[$0-5];yy.addVertex($$[$0-5],$$[$0-2],'hexagon');\nbreak;\ncase 69:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'odd');\nbreak;\ncase 70:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'trapezoid');\nbreak;\ncase 71:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'inv_trapezoid');\nbreak;\ncase 72:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'lean_right');\nbreak;\ncase 73:\nthis.$ = $$[$0-3];yy.addVertex($$[$0-3],$$[$0-1],'lean_left');\nbreak;\ncase 74:\n /*console.warn('h: ', $$[$0]);*/this.$ = $$[$0];yy.addVertex($$[$0]);\nbreak;\ncase 75:\n$$[$0-1].text = $$[$0];this.$ = $$[$0-1];\nbreak;\ncase 76: case 77:\n$$[$0-2].text = $$[$0-1];this.$ = $$[$0-2];\nbreak;\ncase 78:\nthis.$ = $$[$0];\nbreak;\ncase 79:\nvar inf = yy.destructLink($$[$0], $$[$0-2]); this.$ = {\"type\":inf.type,\"stroke\":inf.stroke,\"length\":inf.length,\"text\":$$[$0-1]};\nbreak;\ncase 80:\nvar inf = yy.destructLink($$[$0]);this.$ = {\"type\":inf.type,\"stroke\":inf.stroke,\"length\":inf.length};\nbreak;\ncase 81:\nthis.$ = $$[$0-1];\nbreak;\ncase 83: case 97: case 153:\nthis.$=$$[$0-1]+''+$$[$0];\nbreak;\ncase 98: case 99:\nthis.$ = $$[$0-4];yy.addClass($$[$0-2],$$[$0]);\nbreak;\ncase 100:\nthis.$ = $$[$0-4];yy.setClass($$[$0-2], $$[$0]);\nbreak;\ncase 101: case 109:\nthis.$ = $$[$0-1];yy.setClickEvent($$[$0-1], $$[$0]);\nbreak;\ncase 102: case 110:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-2]);yy.setTooltip($$[$0-3], $$[$0]);\nbreak;\ncase 103:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 104:\nthis.$ = $$[$0-4];yy.setClickEvent($$[$0-4], $$[$0-3], $$[$0-2]);yy.setTooltip($$[$0-4], $$[$0]);\nbreak;\ncase 105: case 111:\nthis.$ = $$[$0-1];yy.setLink($$[$0-1], $$[$0]);\nbreak;\ncase 106: case 112:\nthis.$ = $$[$0-3];yy.setLink($$[$0-3], $$[$0-2]);yy.setTooltip($$[$0-3], $$[$0]);\nbreak;\ncase 107: case 113:\nthis.$ = $$[$0-3];yy.setLink($$[$0-3], $$[$0-2], $$[$0]);\nbreak;\ncase 108: case 114:\nthis.$ = $$[$0-5];yy.setLink($$[$0-5], $$[$0-4], $$[$0]);yy.setTooltip($$[$0-5], $$[$0-2]);\nbreak;\ncase 115:\nthis.$ = $$[$0-4];yy.addVertex($$[$0-2],undefined,undefined,$$[$0]);\nbreak;\ncase 116: case 118:\nthis.$ = $$[$0-4];yy.updateLink($$[$0-2],$$[$0]);\nbreak;\ncase 117:\nthis.$ = $$[$0-4];yy.updateLink([$$[$0-2]],$$[$0]);\nbreak;\ncase 119:\nthis.$ = $$[$0-8];yy.updateLinkInterpolate([$$[$0-6]],$$[$0-2]);yy.updateLink([$$[$0-6]],$$[$0]);\nbreak;\ncase 120:\nthis.$ = $$[$0-8];yy.updateLinkInterpolate($$[$0-6],$$[$0-2]);yy.updateLink($$[$0-6],$$[$0]);\nbreak;\ncase 121:\nthis.$ = $$[$0-6];yy.updateLinkInterpolate([$$[$0-4]],$$[$0]);\nbreak;\ncase 122:\nthis.$ = $$[$0-6];yy.updateLinkInterpolate($$[$0-4],$$[$0]);\nbreak;\ncase 123: case 125:\nthis.$ = [$$[$0]]\nbreak;\ncase 124: case 126:\n$$[$0-2].push($$[$0]);this.$ = $$[$0-2];\nbreak;\ncase 128:\nthis.$ = $$[$0-1] + $$[$0];\nbreak;\ncase 150:\nthis.$=$$[$0]\nbreak;\ncase 151:\nthis.$=$$[$0-1]+''+$$[$0]\nbreak;\ncase 156:\nthis.$='v';\nbreak;\ncase 157:\nthis.$='-';\nbreak;\ncase 158:\n this.$={stmt:'dir', value:'TB'};\nbreak;\ncase 159:\n this.$={stmt:'dir', value:'BT'};\nbreak;\ncase 160:\n this.$={stmt:'dir', value:'RL'};\nbreak;\ncase 161:\n this.$={stmt:'dir', value:'LR'};\nbreak;\n}\n},\ntable: [{3:1,4:2,5:3,6:5,12:$V0,16:4,21:$V1,22:$V2,24:$V3},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:$V0,16:4,21:$V1,22:$V2,24:$V3},o($V4,$V5,{17:11}),{7:12,13:[1,13]},{16:14,21:$V1,22:$V2,24:$V3},{16:15,21:$V1,22:$V2,24:$V3},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:$V6,21:$V7,22:$V8,23:$V9,32:24,33:25,34:26,35:27,36:28,37:29,38:$Va,43:31,44:$Vb,46:$Vc,48:$Vd,50:35,51:45,52:$Ve,54:46,66:$Vf,67:$Vg,86:$Vh,87:$Vi,88:$Vj,89:$Vk,90:$Vl,91:$Vm,95:$Vn,105:$Vo,106:$Vp,109:$Vq,111:$Vr,112:$Vs,116:47,118:$Vt,119:$Vu,120:$Vv,121:$Vw,122:$Vx,123:$Vy,124:$Vz,125:$VA,126:$VB,127:$VC},{8:64,10:[1,65],15:$VD},o([10,15],[2,6]),o($V4,[2,17]),o($V4,[2,18]),o($V4,[2,19]),{20:[1,68],21:[1,69],22:$VE,27:67,30:70},o($VF,[2,11]),o($VF,[2,12]),o($VF,[2,13]),o($VF,[2,14]),o($VF,[2,15]),o($VF,[2,16]),{9:72,20:$VG,21:$VH,23:$VI,49:73,78:77,81:[1,78],82:[1,79]},{9:80,20:$VG,21:$VH,23:$VI},{9:81,20:$VG,21:$VH,23:$VI},{9:82,20:$VG,21:$VH,23:$VI},{9:83,20:$VG,21:$VH,23:$VI},{9:84,20:$VG,21:$VH,23:$VI},{9:86,20:$VG,21:$VH,22:[1,85],23:$VI},o($VF,[2,44]),{45:[1,87]},{47:[1,88]},o($VF,[2,47]),o($VJ,[2,54],{30:89,22:$VE}),{22:[1,90]},{22:[1,91]},{22:[1,92]},{22:[1,93]},{26:$VK,52:$VL,66:$VM,67:$VN,84:[1,97],91:$VO,97:96,98:[1,94],100:[1,95],105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,115:100,117:98,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o($VF,[2,158]),o($VF,[2,159]),o($VF,[2,160]),o($VF,[2,161]),o($V_,[2,55],{53:[1,116]}),o($V$,[2,74],{116:129,40:[1,117],52:$Ve,55:[1,118],57:[1,119],59:[1,120],61:[1,121],63:[1,122],65:[1,123],66:$Vf,67:$Vg,69:[1,124],71:[1,125],73:[1,126],74:[1,127],76:[1,128],91:$Vm,95:$Vn,105:$Vo,106:$Vp,109:$Vq,111:$Vr,112:$Vs,122:$Vx,123:$Vy,124:$Vz,125:$VA,126:$VB,127:$VC}),o($V01,[2,150]),o($V01,[2,175]),o($V01,[2,176]),o($V01,[2,177]),o($V01,[2,178]),o($V01,[2,179]),o($V01,[2,180]),o($V01,[2,181]),o($V01,[2,182]),o($V01,[2,183]),o($V01,[2,184]),o($V01,[2,185]),o($V01,[2,186]),o($V01,[2,187]),o($V01,[2,188]),o($V01,[2,189]),o($V01,[2,190]),{9:130,20:$VG,21:$VH,23:$VI},{11:131,14:[1,132]},o($V11,[2,8]),o($V4,[2,20]),o($V4,[2,26]),o($V4,[2,27]),{21:[1,133]},o($V21,[2,34],{30:134,22:$VE}),o($VF,[2,35]),{50:135,51:45,52:$Ve,54:46,66:$Vf,67:$Vg,91:$Vm,95:$Vn,105:$Vo,106:$Vp,109:$Vq,111:$Vr,112:$Vs,116:47,122:$Vx,123:$Vy,124:$Vz,125:$VA,126:$VB,127:$VC},o($V31,[2,48]),o($V31,[2,49]),o($V31,[2,50]),o($V41,[2,78],{79:136,68:[1,138],80:[1,137]}),{22:$V51,24:$V61,26:$V71,38:$V81,39:139,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o([52,66,67,68,80,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,80]),o($VF,[2,36]),o($VF,[2,37]),o($VF,[2,38]),o($VF,[2,39]),o($VF,[2,40]),{22:$V51,24:$V61,26:$V71,38:$V81,39:163,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o($Vo1,$V5,{17:164}),o($VF,[2,45]),o($VF,[2,46]),o($VJ,[2,53],{52:$Vp1}),{26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,97:166,102:[1,167],105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,115:100,117:98,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{95:[1,168],103:169,105:[1,170]},{26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,95:[1,171],97:172,105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,115:100,117:98,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,97:173,105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,115:100,117:98,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o($V11,[2,101],{22:[1,174],99:[1,175]}),o($V11,[2,105],{22:[1,176]}),o($V11,[2,109],{115:100,117:178,22:[1,177],26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ}),o($V11,[2,111],{22:[1,179]}),o($Vq1,[2,152]),o($Vq1,[2,154]),o($Vq1,[2,155]),o($Vq1,[2,156]),o($Vq1,[2,157]),o($Vr1,[2,162]),o($Vr1,[2,163]),o($Vr1,[2,164]),o($Vr1,[2,165]),o($Vr1,[2,166]),o($Vr1,[2,167]),o($Vr1,[2,168]),o($Vr1,[2,169]),o($Vr1,[2,170]),o($Vr1,[2,171]),o($Vr1,[2,172]),o($Vr1,[2,173]),o($Vr1,[2,174]),{52:$Ve,54:180,66:$Vf,67:$Vg,91:$Vm,95:$Vn,105:$Vo,106:$Vp,109:$Vq,111:$Vr,112:$Vs,116:47,122:$Vx,123:$Vy,124:$Vz,125:$VA,126:$VB,127:$VC},{22:$V51,24:$V61,26:$V71,38:$V81,39:181,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,39:182,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,39:184,42:$V91,52:$VL,57:[1,183],66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,39:185,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,39:186,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,39:187,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{66:[1,188]},{22:$V51,24:$V61,26:$V71,38:$V81,39:189,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,39:190,42:$V91,52:$VL,66:$VM,67:$VN,71:[1,191],73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,39:192,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,39:193,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,39:194,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o($V01,[2,151]),o($Vs1,[2,3]),{8:195,15:$VD},{15:[2,7]},o($V4,[2,28]),o($V21,[2,33]),o($VJ,[2,51],{30:196,22:$VE}),o($V41,[2,75],{22:[1,197]}),{22:[1,198]},{22:$V51,24:$V61,26:$V71,38:$V81,39:199,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,82:[1,200],83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o($Vr1,[2,82]),o($Vr1,[2,84]),o($Vr1,[2,140]),o($Vr1,[2,141]),o($Vr1,[2,142]),o($Vr1,[2,143]),o($Vr1,[2,144]),o($Vr1,[2,145]),o($Vr1,[2,146]),o($Vr1,[2,147]),o($Vr1,[2,148]),o($Vr1,[2,149]),o($Vr1,[2,85]),o($Vr1,[2,86]),o($Vr1,[2,87]),o($Vr1,[2,88]),o($Vr1,[2,89]),o($Vr1,[2,90]),o($Vr1,[2,91]),o($Vr1,[2,92]),o($Vr1,[2,93]),o($Vr1,[2,94]),o($Vr1,[2,95]),{9:203,20:$VG,21:$VH,22:$V51,23:$VI,24:$V61,26:$V71,38:$V81,40:[1,202],42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{18:18,19:19,20:$V6,21:$V7,22:$V8,23:$V9,32:24,33:25,34:26,35:27,36:28,37:29,38:$Va,42:[1,204],43:31,44:$Vb,46:$Vc,48:$Vd,50:35,51:45,52:$Ve,54:46,66:$Vf,67:$Vg,86:$Vh,87:$Vi,88:$Vj,89:$Vk,90:$Vl,91:$Vm,95:$Vn,105:$Vo,106:$Vp,109:$Vq,111:$Vr,112:$Vs,116:47,118:$Vt,119:$Vu,120:$Vv,121:$Vw,122:$Vx,123:$Vy,124:$Vz,125:$VA,126:$VB,127:$VC},{22:$VE,30:205},{22:[1,206],26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,115:100,117:178,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:[1,207]},{22:[1,208]},{22:[1,209],106:[1,210]},o($Vt1,[2,123]),{22:[1,211]},{22:[1,212],26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,115:100,117:178,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:[1,213],26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,115:100,117:178,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{84:[1,214]},o($V11,[2,103],{22:[1,215]}),{84:[1,216],101:[1,217]},{84:[1,218]},o($Vq1,[2,153]),{84:[1,219],101:[1,220]},o($V_,[2,57],{116:129,52:$Ve,66:$Vf,67:$Vg,91:$Vm,95:$Vn,105:$Vo,106:$Vp,109:$Vq,111:$Vr,112:$Vs,122:$Vx,123:$Vy,124:$Vz,125:$VA,126:$VB,127:$VC}),{22:$V51,24:$V61,26:$V71,38:$V81,41:[1,221],42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,56:[1,222],66:$VM,67:$VN,73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,39:223,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,58:[1,224],66:$VM,67:$VN,73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,60:[1,225],66:$VM,67:$VN,73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,62:[1,226],66:$VM,67:$VN,73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,64:[1,227],66:$VM,67:$VN,73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{67:[1,228]},{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,66:$VM,67:$VN,70:[1,229],73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,66:$VM,67:$VN,72:[1,230],73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,39:231,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,41:[1,232],42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,75:[1,233],77:[1,234],81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,75:[1,236],77:[1,235],81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{9:237,20:$VG,21:$VH,23:$VI},o($VJ,[2,52],{52:$Vp1}),o($V41,[2,77]),o($V41,[2,76]),{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,66:$VM,67:$VN,68:[1,238],73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o($V41,[2,79]),o($Vr1,[2,83]),{22:$V51,24:$V61,26:$V71,38:$V81,39:239,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o($Vo1,$V5,{17:240}),o($VF,[2,43]),{51:241,52:$Ve,54:46,66:$Vf,67:$Vg,91:$Vm,95:$Vn,105:$Vo,106:$Vp,109:$Vq,111:$Vr,112:$Vs,116:47,122:$Vx,123:$Vy,124:$Vz,125:$VA,126:$VB,127:$VC},{22:$Vu1,66:$Vv1,67:$Vw1,86:$Vx1,96:242,102:$Vy1,105:$Vz1,107:243,108:244,109:$VA1,110:$VB1,111:$VC1,112:$VD1,113:$VE1},{22:$Vu1,66:$Vv1,67:$Vw1,86:$Vx1,96:256,102:$Vy1,105:$Vz1,107:243,108:244,109:$VA1,110:$VB1,111:$VC1,112:$VD1,113:$VE1},{22:$Vu1,66:$Vv1,67:$Vw1,86:$Vx1,96:257,102:$Vy1,104:[1,258],105:$Vz1,107:243,108:244,109:$VA1,110:$VB1,111:$VC1,112:$VD1,113:$VE1},{22:$Vu1,66:$Vv1,67:$Vw1,86:$Vx1,96:259,102:$Vy1,104:[1,260],105:$Vz1,107:243,108:244,109:$VA1,110:$VB1,111:$VC1,112:$VD1,113:$VE1},{105:[1,261]},{22:$Vu1,66:$Vv1,67:$Vw1,86:$Vx1,96:262,102:$Vy1,105:$Vz1,107:243,108:244,109:$VA1,110:$VB1,111:$VC1,112:$VD1,113:$VE1},{22:$Vu1,66:$Vv1,67:$Vw1,86:$Vx1,96:263,102:$Vy1,105:$Vz1,107:243,108:244,109:$VA1,110:$VB1,111:$VC1,112:$VD1,113:$VE1},{26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,97:264,105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,115:100,117:98,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o($V11,[2,102]),{84:[1,265]},o($V11,[2,106],{22:[1,266]}),o($V11,[2,107]),o($V11,[2,110]),o($V11,[2,112],{22:[1,267]}),o($V11,[2,113]),o($V$,[2,58]),o($V$,[2,59]),{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,58:[1,268],66:$VM,67:$VN,73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o($V$,[2,66]),o($V$,[2,61]),o($V$,[2,62]),o($V$,[2,63]),{66:[1,269]},o($V$,[2,65]),o($V$,[2,67]),{22:$V51,24:$V61,26:$V71,38:$V81,42:$V91,52:$VL,66:$VM,67:$VN,72:[1,270],73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o($V$,[2,69]),o($V$,[2,70]),o($V$,[2,72]),o($V$,[2,71]),o($V$,[2,73]),o($Vs1,[2,4]),o([22,52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,81]),{22:$V51,24:$V61,26:$V71,38:$V81,41:[1,271],42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{18:18,19:19,20:$V6,21:$V7,22:$V8,23:$V9,32:24,33:25,34:26,35:27,36:28,37:29,38:$Va,42:[1,272],43:31,44:$Vb,46:$Vc,48:$Vd,50:35,51:45,52:$Ve,54:46,66:$Vf,67:$Vg,86:$Vh,87:$Vi,88:$Vj,89:$Vk,90:$Vl,91:$Vm,95:$Vn,105:$Vo,106:$Vp,109:$Vq,111:$Vr,112:$Vs,116:47,118:$Vt,119:$Vu,120:$Vv,121:$Vw,122:$Vx,123:$Vy,124:$Vz,125:$VA,126:$VB,127:$VC},o($V_,[2,56]),o($V11,[2,115],{106:$VF1}),o($VG1,[2,125],{108:274,22:$Vu1,66:$Vv1,67:$Vw1,86:$Vx1,102:$Vy1,105:$Vz1,109:$VA1,110:$VB1,111:$VC1,112:$VD1,113:$VE1}),o($VH1,[2,127]),o($VH1,[2,129]),o($VH1,[2,130]),o($VH1,[2,131]),o($VH1,[2,132]),o($VH1,[2,133]),o($VH1,[2,134]),o($VH1,[2,135]),o($VH1,[2,136]),o($VH1,[2,137]),o($VH1,[2,138]),o($VH1,[2,139]),o($V11,[2,116],{106:$VF1}),o($V11,[2,117],{106:$VF1}),{22:[1,275]},o($V11,[2,118],{106:$VF1}),{22:[1,276]},o($Vt1,[2,124]),o($V11,[2,98],{106:$VF1}),o($V11,[2,99],{106:$VF1}),o($V11,[2,100],{115:100,117:178,26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ}),o($V11,[2,104]),{101:[1,277]},{101:[1,278]},{58:[1,279]},{68:[1,280]},{72:[1,281]},{9:282,20:$VG,21:$VH,23:$VI},o($VF,[2,42]),{22:$Vu1,66:$Vv1,67:$Vw1,86:$Vx1,102:$Vy1,105:$Vz1,107:283,108:244,109:$VA1,110:$VB1,111:$VC1,112:$VD1,113:$VE1},o($VH1,[2,128]),{26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,97:284,105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,115:100,117:98,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,97:285,105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,115:100,117:98,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o($V11,[2,108]),o($V11,[2,114]),o($V$,[2,60]),{22:$V51,24:$V61,26:$V71,38:$V81,39:286,42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:140,84:$Vc1,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},o($V$,[2,68]),o($Vo1,$V5,{17:287}),o($VG1,[2,126],{108:274,22:$Vu1,66:$Vv1,67:$Vw1,86:$Vx1,102:$Vy1,105:$Vz1,109:$VA1,110:$VB1,111:$VC1,112:$VD1,113:$VE1}),o($V11,[2,121],{115:100,117:178,22:[1,288],26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ}),o($V11,[2,122],{115:100,117:178,22:[1,289],26:$VK,52:$VL,66:$VM,67:$VN,91:$VO,105:$VP,106:$VQ,109:$VR,111:$VS,112:$VT,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ}),{22:$V51,24:$V61,26:$V71,38:$V81,41:[1,290],42:$V91,52:$VL,66:$VM,67:$VN,73:$Va1,81:$Vb1,83:201,85:151,86:$Vd1,87:$Ve1,88:$Vf1,89:$Vg1,90:$Vh1,91:$Vi1,92:$Vj1,94:142,95:$Vk1,105:$VP,106:$VQ,109:$Vl1,111:$VS,112:$VT,113:$Vm1,114:$Vn1,115:148,122:$VU,123:$VV,124:$VW,125:$VX,126:$VY,127:$VZ},{18:18,19:19,20:$V6,21:$V7,22:$V8,23:$V9,32:24,33:25,34:26,35:27,36:28,37:29,38:$Va,42:[1,291],43:31,44:$Vb,46:$Vc,48:$Vd,50:35,51:45,52:$Ve,54:46,66:$Vf,67:$Vg,86:$Vh,87:$Vi,88:$Vj,89:$Vk,90:$Vl,91:$Vm,95:$Vn,105:$Vo,106:$Vp,109:$Vq,111:$Vr,112:$Vs,116:47,118:$Vt,119:$Vu,120:$Vv,121:$Vw,122:$Vx,123:$Vy,124:$Vz,125:$VA,126:$VB,127:$VC},{22:$Vu1,66:$Vv1,67:$Vw1,86:$Vx1,96:292,102:$Vy1,105:$Vz1,107:243,108:244,109:$VA1,110:$VB1,111:$VC1,112:$VD1,113:$VE1},{22:$Vu1,66:$Vv1,67:$Vw1,86:$Vx1,96:293,102:$Vy1,105:$Vz1,107:243,108:244,109:$VA1,110:$VB1,111:$VC1,112:$VD1,113:$VE1},o($V$,[2,64]),o($VF,[2,41]),o($V11,[2,119],{106:$VF1}),o($V11,[2,120],{106:$VF1})],\ndefaultActions: {2:[2,1],9:[2,5],10:[2,2],132:[2,7]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            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).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin('open_directive'); return 12; \nbreak;\ncase 1: this.begin('type_directive'); return 13; \nbreak;\ncase 2: this.popState(); this.begin('arg_directive'); return 10; \nbreak;\ncase 3: this.popState(); this.popState(); return 15; \nbreak;\ncase 4:return 14;\nbreak;\ncase 5:/* skip comments */\nbreak;\ncase 6:/* skip comments */\nbreak;\ncase 7: this.begin(\"acc_title\");return 44; \nbreak;\ncase 8: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 9: this.begin(\"acc_descr\");return 46; \nbreak;\ncase 10: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 11: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 12: this.popState(); \nbreak;\ncase 13:return \"acc_descr_multiline_value\";\nbreak;\ncase 14:this.begin(\"string\");\nbreak;\ncase 15:this.popState();\nbreak;\ncase 16:return \"STR\";\nbreak;\ncase 17:return 86;\nbreak;\ncase 18:return 95;\nbreak;\ncase 19:return 87;\nbreak;\ncase 20:return 104;\nbreak;\ncase 21:return 88;\nbreak;\ncase 22:return 89;\nbreak;\ncase 23:this.begin(\"href\");\nbreak;\ncase 24:this.popState();\nbreak;\ncase 25:return 100;\nbreak;\ncase 26:this.begin(\"callbackname\");\nbreak;\ncase 27:this.popState();\nbreak;\ncase 28:this.popState(); this.begin(\"callbackargs\");\nbreak;\ncase 29:return 98;\nbreak;\ncase 30:this.popState();\nbreak;\ncase 31:return 99;\nbreak;\ncase 32:this.begin(\"click\");\nbreak;\ncase 33:this.popState();\nbreak;\ncase 34:return 90;\nbreak;\ncase 35:if(yy.lex.firstGraph()){this.begin(\"dir\");}  return 24;\nbreak;\ncase 36:if(yy.lex.firstGraph()){this.begin(\"dir\");}  return 24;\nbreak;\ncase 37:return 38;\nbreak;\ncase 38:return 42;\nbreak;\ncase 39:return 101;\nbreak;\ncase 40:return 101;\nbreak;\ncase 41:return 101;\nbreak;\ncase 42:return 101;\nbreak;\ncase 43:   this.popState();  return 25; \nbreak;\ncase 44:   this.popState();  return 26; \nbreak;\ncase 45:   this.popState();  return 26; \nbreak;\ncase 46:   this.popState();  return 26; \nbreak;\ncase 47:   this.popState();  return 26; \nbreak;\ncase 48:   this.popState();  return 26; \nbreak;\ncase 49:   this.popState();  return 26; \nbreak;\ncase 50:   this.popState();  return 26; \nbreak;\ncase 51:   this.popState();  return 26; \nbreak;\ncase 52:   this.popState();  return 26; \nbreak;\ncase 53:   this.popState();  return 26; \nbreak;\ncase 54:return 118;\nbreak;\ncase 55:return 119;\nbreak;\ncase 56:return 120;\nbreak;\ncase 57:return 121;\nbreak;\ncase 58: return 105;\nbreak;\ncase 59:return 111;\nbreak;\ncase 60:return 53;\nbreak;\ncase 61:return 67;\nbreak;\ncase 62:return 52;\nbreak;\ncase 63:return 20;\nbreak;\ncase 64:return 106;\nbreak;\ncase 65:return 126;\nbreak;\ncase 66:return 82;\nbreak;\ncase 67:return 82;\nbreak;\ncase 68:return 82;\nbreak;\ncase 69:return 81;\nbreak;\ncase 70:return 81;\nbreak;\ncase 71:return 81;\nbreak;\ncase 72:return 59;\nbreak;\ncase 73:return 60;\nbreak;\ncase 74:return 61;\nbreak;\ncase 75:return 62;\nbreak;\ncase 76:return 63;\nbreak;\ncase 77:return 64;\nbreak;\ncase 78:return 65;\nbreak;\ncase 79:return 69;\nbreak;\ncase 80:return 70;\nbreak;\ncase 81:return 55;\nbreak;\ncase 82:return 56;\nbreak;\ncase 83:return 109;\nbreak;\ncase 84:return 112;\nbreak;\ncase 85:return 127;\nbreak;\ncase 86:return 124;\nbreak;\ncase 87:return 113;\nbreak;\ncase 88:return 125;\nbreak;\ncase 89:return 125;\nbreak;\ncase 90:return 114;\nbreak;\ncase 91:return 73;\nbreak;\ncase 92:return 92;\nbreak;\ncase 93:return 'SEP';\nbreak;\ncase 94:return 91;\nbreak;\ncase 95:return 66;\nbreak;\ncase 96:return 75;\nbreak;\ncase 97:return 74;\nbreak;\ncase 98:return 77;\nbreak;\ncase 99:return 76;\nbreak;\ncase 100:return 122;\nbreak;\ncase 101:return 123;\nbreak;\ncase 102:return 68;\nbreak;\ncase 103:return 57;\nbreak;\ncase 104:return 58;\nbreak;\ncase 105:return 40;\nbreak;\ncase 106:return 41;\nbreak;\ncase 107:return 71\nbreak;\ncase 108:return 72\nbreak;\ncase 109:return 133;\nbreak;\ncase 110:return 21;\nbreak;\ncase 111:return 22;\nbreak;\ncase 112:return 23;\nbreak;\n}\n},\nrules: [/^(?:%%\\{)/,/^(?:((?:(?!\\}%%)[^:.])*))/,/^(?::)/,/^(?:\\}%%)/,/^(?:((?:(?!\\}%%).|\\n)*))/,/^(?:%%(?!\\{)[^\\n]*)/,/^(?:[^\\}]%%[^\\n]*)/,/^(?:accTitle\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*\\{\\s*)/,/^(?:[\\}])/,/^(?:[^\\}]*)/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:style\\b)/,/^(?:default\\b)/,/^(?:linkStyle\\b)/,/^(?:interpolate\\b)/,/^(?:classDef\\b)/,/^(?:class\\b)/,/^(?:href[\\s]+[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:call[\\s]+)/,/^(?:\\([\\s]*\\))/,/^(?:\\()/,/^(?:[^(]*)/,/^(?:\\))/,/^(?:[^)]*)/,/^(?:click[\\s]+)/,/^(?:[\\s\\n])/,/^(?:[^\\s\\n]*)/,/^(?:graph\\b)/,/^(?:flowchart\\b)/,/^(?:subgraph\\b)/,/^(?:end\\b\\s*)/,/^(?:_self\\b)/,/^(?:_blank\\b)/,/^(?:_parent\\b)/,/^(?:_top\\b)/,/^(?:(\\r?\\n)*\\s*\\n)/,/^(?:\\s*LR\\b)/,/^(?:\\s*RL\\b)/,/^(?:\\s*TB\\b)/,/^(?:\\s*BT\\b)/,/^(?:\\s*TD\\b)/,/^(?:\\s*BR\\b)/,/^(?:\\s*<)/,/^(?:\\s*>)/,/^(?:\\s*\\^)/,/^(?:\\s*v\\b)/,/^(?:.*direction\\s+TB[^\\n]*)/,/^(?:.*direction\\s+BT[^\\n]*)/,/^(?:.*direction\\s+RL[^\\n]*)/,/^(?:.*direction\\s+LR[^\\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\\*)/,/^(?:\\s*[xo<]?--+[-xo>]\\s*)/,/^(?:\\s*[xo<]?==+[=xo>]\\s*)/,/^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/,/^(?:\\s*[xo<]?--\\s*)/,/^(?:\\s*[xo<]?==\\s*)/,/^(?:\\s*[xo<]?-\\.\\s*)/,/^(?:\\(-)/,/^(?:-\\))/,/^(?:\\(\\[)/,/^(?:\\]\\))/,/^(?:\\[\\[)/,/^(?:\\]\\])/,/^(?:\\[\\|)/,/^(?:\\[\\()/,/^(?:\\)\\])/,/^(?:\\(\\(\\()/,/^(?:\\)\\)\\))/,/^(?:-)/,/^(?:\\.)/,/^(?:[\\_])/,/^(?:\\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\\^)/,/^(?:\\\\\\|)/,/^(?:v\\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\\\\])/,/^(?:\\[\\/)/,/^(?:\\/\\])/,/^(?:\\[\\\\)/,/^(?:[!\"#$%&'*+,-.`?\\\\_/])/,/^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/,/^(?:\\|)/,/^(?:\\()/,/^(?:\\))/,/^(?:\\[)/,/^(?:\\])/,/^(?:\\{)/,/^(?:\\})/,/^(?:\")/,/^(?:(\\r?\\n)+)/,/^(?:\\s)/,/^(?:$)/],\nconditions: {\"close_directive\":{\"rules\":[],\"inclusive\":false},\"arg_directive\":{\"rules\":[3,4],\"inclusive\":false},\"type_directive\":{\"rules\":[2,3],\"inclusive\":false},\"open_directive\":{\"rules\":[1],\"inclusive\":false},\"callbackargs\":{\"rules\":[30,31],\"inclusive\":false},\"callbackname\":{\"rules\":[27,28,29],\"inclusive\":false},\"href\":{\"rules\":[24,25],\"inclusive\":false},\"click\":{\"rules\":[33,34],\"inclusive\":false},\"vertex\":{\"rules\":[],\"inclusive\":false},\"dir\":{\"rules\":[43,44,45,46,47,48,49,50,51,52,53],\"inclusive\":false},\"acc_descr_multiline\":{\"rules\":[12,13],\"inclusive\":false},\"acc_descr\":{\"rules\":[10],\"inclusive\":false},\"acc_title\":{\"rules\":[8],\"inclusive\":false},\"string\":{\"rules\":[15,16],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,5,6,7,9,11,14,17,18,19,20,21,22,23,26,32,35,36,37,38,39,40,41,42,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n    if (!args[1]) {\n        console.log('Usage: '+args[0]+' FILE');\n        process.exit(1);\n    }\n    var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n    return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n  exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,3],$V1=[1,5],$V2=[7,9,11,12,13,14,15,16,17,18,19,20,22,24,25,27,34,39],$V3=[1,15],$V4=[1,16],$V5=[1,17],$V6=[1,18],$V7=[1,19],$V8=[1,20],$V9=[1,21],$Va=[1,22],$Vb=[1,23],$Vc=[1,24],$Vd=[1,25],$Ve=[1,26],$Vf=[1,28],$Vg=[1,30],$Vh=[1,33],$Vi=[5,7,9,11,12,13,14,15,16,17,18,19,20,22,24,25,27,34,39];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"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,\"excludes\":16,\"includes\":17,\"todayMarker\":18,\"title\":19,\"acc_title\":20,\"acc_title_value\":21,\"acc_descr\":22,\"acc_descr_value\":23,\"acc_descr_multiline_value\":24,\"section\":25,\"clickStatement\":26,\"taskTxt\":27,\"taskData\":28,\"openDirective\":29,\"typeDirective\":30,\"closeDirective\":31,\":\":32,\"argDirective\":33,\"click\":34,\"callbackname\":35,\"callbackargs\":36,\"href\":37,\"clickStatementDebug\":38,\"open_directive\":39,\"type_directive\":40,\"arg_directive\":41,\"close_directive\":42,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"gantt\",7:\"EOF\",9:\"SPACE\",11:\"NL\",12:\"dateFormat\",13:\"inclusiveEndDates\",14:\"topAxis\",15:\"axisFormat\",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\",27:\"taskTxt\",28:\"taskData\",32:\":\",34:\"click\",35:\"callbackname\",36:\"callbackargs\",37:\"href\",39:\"open_directive\",40:\"type_directive\",41:\"arg_directive\",42:\"close_directive\"},\nproductions_: [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,2],[10,2],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[26,2],[26,3],[26,3],[26,4],[26,3],[26,4],[26,2],[38,2],[38,3],[38,3],[38,4],[38,3],[38,4],[38,2],[29,1],[30,1],[33,1],[31,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 2:\n return $$[$0-1]; \nbreak;\ncase 3:\n this.$ = [] \nbreak;\ncase 4:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 5: case 6:\n this.$ = $$[$0] \nbreak;\ncase 7: case 8:\n this.$=[];\nbreak;\ncase 9:\nyy.setDateFormat($$[$0].substr(11));this.$=$$[$0].substr(11);\nbreak;\ncase 10:\nyy.enableInclusiveEndDates();this.$=$$[$0].substr(18);\nbreak;\ncase 11:\nyy.TopAxis();this.$=$$[$0].substr(8);\nbreak;\ncase 12:\nyy.setAxisFormat($$[$0].substr(11));this.$=$$[$0].substr(11);\nbreak;\ncase 13:\nyy.setExcludes($$[$0].substr(9));this.$=$$[$0].substr(9);\nbreak;\ncase 14:\nyy.setIncludes($$[$0].substr(9));this.$=$$[$0].substr(9);\nbreak;\ncase 15:\nyy.setTodayMarker($$[$0].substr(12));this.$=$$[$0].substr(12);\nbreak;\ncase 16:\nyy.setDiagramTitle($$[$0].substr(6));this.$=$$[$0].substr(6);\nbreak;\ncase 17:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 18: case 19:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 20:\nyy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8);\nbreak;\ncase 22:\nyy.addTask($$[$0-1],$$[$0]);this.$='task';\nbreak;\ncase 26:\nthis.$ = $$[$0-1];yy.setClickEvent($$[$0-1], $$[$0], null);\nbreak;\ncase 27:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 28:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], null);yy.setLink($$[$0-2],$$[$0]);\nbreak;\ncase 29:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-2], $$[$0-1]);yy.setLink($$[$0-3],$$[$0]);\nbreak;\ncase 30:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0], null);yy.setLink($$[$0-2],$$[$0-1]);\nbreak;\ncase 31:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-1], $$[$0]);yy.setLink($$[$0-3],$$[$0-2]);\nbreak;\ncase 32:\nthis.$ = $$[$0-1];yy.setLink($$[$0-1], $$[$0]);\nbreak;\ncase 33: case 39:\nthis.$=$$[$0-1] + ' ' + $$[$0];\nbreak;\ncase 34: case 35: case 37:\nthis.$=$$[$0-2] + ' ' + $$[$0-1] + ' ' + $$[$0];\nbreak;\ncase 36: case 38:\nthis.$=$$[$0-3] + ' ' + $$[$0-2] + ' ' + $$[$0-1] + ' ' + $$[$0];\nbreak;\ncase 40:\n yy.parseDirective('%%{', 'open_directive'); \nbreak;\ncase 41:\n yy.parseDirective($$[$0], 'type_directive'); \nbreak;\ncase 42:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"'); yy.parseDirective($$[$0], 'arg_directive'); \nbreak;\ncase 43:\n yy.parseDirective('}%%', 'close_directive', 'gantt'); \nbreak;\n}\n},\ntable: [{3:1,4:2,5:$V0,29:4,39:$V1},{1:[3]},{3:6,4:2,5:$V0,29:4,39:$V1},o($V2,[2,3],{6:7}),{30:8,40:[1,9]},{40:[2,40]},{1:[2,1]},{4:29,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:$V3,13:$V4,14:$V5,15:$V6,16:$V7,17:$V8,18:$V9,19:$Va,20:$Vb,22:$Vc,24:$Vd,25:$Ve,26:27,27:$Vf,29:4,34:$Vg,39:$V1},{31:31,32:[1,32],42:$Vh},o([32,42],[2,41]),o($V2,[2,8],{1:[2,2]}),o($V2,[2,4]),{4:29,10:34,12:$V3,13:$V4,14:$V5,15:$V6,16:$V7,17:$V8,18:$V9,19:$Va,20:$Vb,22:$Vc,24:$Vd,25:$Ve,26:27,27:$Vf,29:4,34:$Vg,39:$V1},o($V2,[2,6]),o($V2,[2,7]),o($V2,[2,9]),o($V2,[2,10]),o($V2,[2,11]),o($V2,[2,12]),o($V2,[2,13]),o($V2,[2,14]),o($V2,[2,15]),o($V2,[2,16]),{21:[1,35]},{23:[1,36]},o($V2,[2,19]),o($V2,[2,20]),o($V2,[2,21]),{28:[1,37]},o($V2,[2,23]),{35:[1,38],37:[1,39]},{11:[1,40]},{33:41,41:[1,42]},{11:[2,43]},o($V2,[2,5]),o($V2,[2,17]),o($V2,[2,18]),o($V2,[2,22]),o($V2,[2,26],{36:[1,43],37:[1,44]}),o($V2,[2,32],{35:[1,45]}),o($Vi,[2,24]),{31:46,42:$Vh},{42:[2,42]},o($V2,[2,27],{37:[1,47]}),o($V2,[2,28]),o($V2,[2,30],{36:[1,48]}),{11:[1,49]},o($V2,[2,29]),o($V2,[2,31]),o($Vi,[2,25])],\ndefaultActions: {5:[2,40],6:[2,1],33:[2,43],42:[2,42]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            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).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin('open_directive'); return 39; \nbreak;\ncase 1: this.begin('type_directive'); return 40; \nbreak;\ncase 2: this.popState(); this.begin('arg_directive'); return 32; \nbreak;\ncase 3: this.popState(); this.popState(); return 42; \nbreak;\ncase 4:return 41;\nbreak;\ncase 5: this.begin(\"acc_title\");return 20; \nbreak;\ncase 6: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 7: this.begin(\"acc_descr\");return 22; \nbreak;\ncase 8: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 9: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 10: this.popState(); \nbreak;\ncase 11:return \"acc_descr_multiline_value\";\nbreak;\ncase 12:/* skip comments */\nbreak;\ncase 13:/* skip comments */\nbreak;\ncase 14:/* do nothing */\nbreak;\ncase 15:return 11;\nbreak;\ncase 16:/* skip whitespace */\nbreak;\ncase 17:/* skip comments */\nbreak;\ncase 18:/* skip comments */\nbreak;\ncase 19:this.begin(\"href\");\nbreak;\ncase 20:this.popState();\nbreak;\ncase 21:return 37;\nbreak;\ncase 22:this.begin(\"callbackname\");\nbreak;\ncase 23:this.popState();\nbreak;\ncase 24:this.popState(); this.begin(\"callbackargs\");\nbreak;\ncase 25:return 35;\nbreak;\ncase 26:this.popState();\nbreak;\ncase 27:return 36;\nbreak;\ncase 28:this.begin(\"click\");\nbreak;\ncase 29:this.popState();\nbreak;\ncase 30:return 34;\nbreak;\ncase 31:return 5;\nbreak;\ncase 32:return 12;\nbreak;\ncase 33:return 13;\nbreak;\ncase 34:return 14;\nbreak;\ncase 35:return 15;\nbreak;\ncase 36:return 17;\nbreak;\ncase 37:return 16;\nbreak;\ncase 38:return 18;\nbreak;\ncase 39:return 'date';\nbreak;\ncase 40:return 19;\nbreak;\ncase 41:return 'accDescription'\nbreak;\ncase 42:return 25;\nbreak;\ncase 43:return 27;\nbreak;\ncase 44:return 28;\nbreak;\ncase 45:return 32;\nbreak;\ncase 46:return 7;\nbreak;\ncase 47:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:%%\\{)/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,/^(?: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],\nconditions: {\"acc_descr_multiline\":{\"rules\":[10,11],\"inclusive\":false},\"acc_descr\":{\"rules\":[8],\"inclusive\":false},\"acc_title\":{\"rules\":[6],\"inclusive\":false},\"close_directive\":{\"rules\":[],\"inclusive\":false},\"arg_directive\":{\"rules\":[3,4],\"inclusive\":false},\"type_directive\":{\"rules\":[2,3],\"inclusive\":false},\"open_directive\":{\"rules\":[1],\"inclusive\":false},\"callbackargs\":{\"rules\":[26,27],\"inclusive\":false},\"callbackname\":{\"rules\":[23,24,25],\"inclusive\":false},\"href\":{\"rules\":[20,21],\"inclusive\":false},\"click\":{\"rules\":[29,30],\"inclusive\":false},\"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],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n    if (!args[1]) {\n        console.log('Usage: '+args[0]+' FILE');\n        process.exit(1);\n    }\n    var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n    return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n  exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,7],$V2=[1,5],$V3=[1,9],$V4=[1,6],$V5=[2,6],$V6=[1,16],$V7=[6,8,14,20,22,24,25,27,29,32,35,37,49,53],$V8=[8,14,20,22,24,25,27,29,32,35,37],$V9=[8,13,14,20,22,24,25,27,29,32,35,37],$Va=[1,26],$Vb=[6,8,14,49,53],$Vc=[8,14,53],$Vd=[1,64],$Ve=[1,65],$Vf=[1,66],$Vg=[8,14,33,36,41,53];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"eol\":4,\"directive\":5,\"GG\":6,\"document\":7,\"EOF\":8,\":\":9,\"DIR\":10,\"options\":11,\"body\":12,\"OPT\":13,\"NL\":14,\"line\":15,\"statement\":16,\"commitStatement\":17,\"mergeStatement\":18,\"cherryPickStatement\":19,\"acc_title\":20,\"acc_title_value\":21,\"acc_descr\":22,\"acc_descr_value\":23,\"acc_descr_multiline_value\":24,\"section\":25,\"branchStatement\":26,\"CHECKOUT\":27,\"ID\":28,\"BRANCH\":29,\"ORDER\":30,\"NUM\":31,\"CHERRY_PICK\":32,\"COMMIT_ID\":33,\"STR\":34,\"MERGE\":35,\"COMMIT_TAG\":36,\"COMMIT\":37,\"commit_arg\":38,\"COMMIT_TYPE\":39,\"commitType\":40,\"COMMIT_MSG\":41,\"NORMAL\":42,\"REVERSE\":43,\"HIGHLIGHT\":44,\"openDirective\":45,\"typeDirective\":46,\"closeDirective\":47,\"argDirective\":48,\"open_directive\":49,\"type_directive\":50,\"arg_directive\":51,\"close_directive\":52,\";\":53,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",6:\"GG\",8:\"EOF\",9:\":\",10:\"DIR\",13:\"OPT\",14:\"NL\",20:\"acc_title\",21:\"acc_title_value\",22:\"acc_descr\",23:\"acc_descr_value\",24:\"acc_descr_multiline_value\",25:\"section\",27:\"CHECKOUT\",28:\"ID\",29:\"BRANCH\",30:\"ORDER\",31:\"NUM\",32:\"CHERRY_PICK\",33:\"COMMIT_ID\",34:\"STR\",35:\"MERGE\",36:\"COMMIT_TAG\",37:\"COMMIT\",39:\"COMMIT_TYPE\",41:\"COMMIT_MSG\",42:\"NORMAL\",43:\"REVERSE\",44:\"HIGHLIGHT\",49:\"open_directive\",50:\"type_directive\",51:\"arg_directive\",52:\"close_directive\",53:\";\"},\nproductions_: [0,[3,2],[3,2],[3,3],[3,4],[3,5],[7,0],[7,2],[11,2],[11,1],[12,0],[12,2],[15,2],[15,1],[16,1],[16,1],[16,1],[16,2],[16,2],[16,1],[16,1],[16,1],[16,2],[26,2],[26,4],[19,3],[18,2],[18,4],[17,2],[17,3],[17,3],[17,5],[17,5],[17,3],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,3],[17,5],[17,5],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[38,0],[38,1],[40,1],[40,1],[40,1],[5,3],[5,5],[45,1],[46,1],[48,1],[47,1],[4,1],[4,1],[4,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 3:\n return $$[$0]; \nbreak;\ncase 4:\n return $$[$0-1]; \nbreak;\ncase 5:\nyy.setDirection($$[$0-3]); return $$[$0-1];\nbreak;\ncase 7:\n yy.setOptions($$[$0-1]); this.$ = $$[$0]\nbreak;\ncase 8:\n$$[$0-1] +=$$[$0]; this.$=$$[$0-1]\nbreak;\ncase 10:\nthis.$ = []\nbreak;\ncase 11:\n$$[$0-1].push($$[$0]); this.$=$$[$0-1];\nbreak;\ncase 12:\nthis.$ =$$[$0-1]\nbreak;\ncase 17:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 18: case 19:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 20:\nyy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8);\nbreak;\ncase 22:\nyy.checkout($$[$0])\nbreak;\ncase 23:\nyy.branch($$[$0])\nbreak;\ncase 24:\nyy.branch($$[$0-2], $$[$0])\nbreak;\ncase 25:\nyy.cherryPick($$[$0])\nbreak;\ncase 26:\nyy.merge($$[$0])\nbreak;\ncase 27:\nyy.merge($$[$0-2], $$[$0])\nbreak;\ncase 28:\nyy.commit($$[$0])\nbreak;\ncase 29:\nyy.commit('','',yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 30:\nyy.commit('','',$$[$0],'')\nbreak;\ncase 31:\nyy.commit('','',$$[$0],$$[$0-2])\nbreak;\ncase 32:\nyy.commit('','',$$[$0-2],$$[$0])\nbreak;\ncase 33:\nyy.commit('',$$[$0],yy.commitType.NORMAL,'')\nbreak;\ncase 34:\nyy.commit('',$$[$0-2],yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 35:\nyy.commit('',$$[$0],yy.commitType.NORMAL,$$[$0-2])\nbreak;\ncase 36:\nyy.commit('',$$[$0-2],$$[$0],'')\nbreak;\ncase 37:\nyy.commit('',$$[$0],$$[$0-2],'')\nbreak;\ncase 38:\nyy.commit('',$$[$0-4],$$[$0-2],$$[$0])\nbreak;\ncase 39:\nyy.commit('',$$[$0-4],$$[$0],$$[$0-2])\nbreak;\ncase 40:\nyy.commit('',$$[$0-2],$$[$0-4],$$[$0])\nbreak;\ncase 41:\nyy.commit('',$$[$0],$$[$0-4],$$[$0-2])\nbreak;\ncase 42:\nyy.commit('',$$[$0],$$[$0-2],$$[$0-4])\nbreak;\ncase 43:\nyy.commit('',$$[$0-2],$$[$0],$$[$0-4])\nbreak;\ncase 44:\nyy.commit($$[$0],'',yy.commitType.NORMAL,'')\nbreak;\ncase 45:\nyy.commit($$[$0],'',yy.commitType.NORMAL,$$[$0-2])\nbreak;\ncase 46:\nyy.commit($$[$0-2],'',yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 47:\nyy.commit($$[$0-2],'',$$[$0],'')\nbreak;\ncase 48:\nyy.commit($$[$0],'',$$[$0-2],'')\nbreak;\ncase 49:\nyy.commit($$[$0],$$[$0-2],yy.commitType.NORMAL,'')\nbreak;\ncase 50:\nyy.commit($$[$0-2],$$[$0],yy.commitType.NORMAL,'')\nbreak;\ncase 51:\nyy.commit($$[$0-4],'',$$[$0-2],$$[$0])\nbreak;\ncase 52:\nyy.commit($$[$0-4],'',$$[$0],$$[$0-2])\nbreak;\ncase 53:\nyy.commit($$[$0-2],'',$$[$0-4],$$[$0])\nbreak;\ncase 54:\nyy.commit($$[$0],'',$$[$0-4],$$[$0-2])\nbreak;\ncase 55:\nyy.commit($$[$0],'',$$[$0-2],$$[$0-4])\nbreak;\ncase 56:\nyy.commit($$[$0-2],'',$$[$0],$$[$0-4])\nbreak;\ncase 57:\nyy.commit($$[$0-4],$$[$0],$$[$0-2],'')\nbreak;\ncase 58:\nyy.commit($$[$0-4],$$[$0-2],$$[$0],'')\nbreak;\ncase 59:\nyy.commit($$[$0-2],$$[$0],$$[$0-4],'')\nbreak;\ncase 60:\nyy.commit($$[$0],$$[$0-2],$$[$0-4],'')\nbreak;\ncase 61:\nyy.commit($$[$0],$$[$0-4],$$[$0-2],'')\nbreak;\ncase 62:\nyy.commit($$[$0-2],$$[$0-4],$$[$0],'')\nbreak;\ncase 63:\nyy.commit($$[$0-4],$$[$0],yy.commitType.NORMAL,$$[$0-2])\nbreak;\ncase 64:\nyy.commit($$[$0-4],$$[$0-2],yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 65:\nyy.commit($$[$0-2],$$[$0],yy.commitType.NORMAL,$$[$0-4])\nbreak;\ncase 66:\nyy.commit($$[$0],$$[$0-2],yy.commitType.NORMAL,$$[$0-4])\nbreak;\ncase 67:\nyy.commit($$[$0],$$[$0-4],yy.commitType.NORMAL,$$[$0-2])\nbreak;\ncase 68:\nyy.commit($$[$0-2],$$[$0-4],yy.commitType.NORMAL,$$[$0])\nbreak;\ncase 69:\nyy.commit($$[$0-6],$$[$0-4],$$[$0-2],$$[$0])\nbreak;\ncase 70:\nyy.commit($$[$0-6],$$[$0-4],$$[$0],$$[$0-2])\nbreak;\ncase 71:\nyy.commit($$[$0-6],$$[$0-2],$$[$0-4],$$[$0])\nbreak;\ncase 72:\nyy.commit($$[$0-6],$$[$0],$$[$0-4],$$[$0-2])\nbreak;\ncase 73:\nyy.commit($$[$0-6],$$[$0-2],$$[$0],$$[$0-4])\nbreak;\ncase 74:\nyy.commit($$[$0-6],$$[$0],$$[$0-2],$$[$0-4])\nbreak;\ncase 75:\nyy.commit($$[$0-4],$$[$0-6],$$[$0-2],$$[$0])\nbreak;\ncase 76:\nyy.commit($$[$0-4],$$[$0-6],$$[$0],$$[$0-2])\nbreak;\ncase 77:\nyy.commit($$[$0-2],$$[$0-6],$$[$0-4],$$[$0])\nbreak;\ncase 78:\nyy.commit($$[$0],$$[$0-6],$$[$0-4],$$[$0-2])\nbreak;\ncase 79:\nyy.commit($$[$0-2],$$[$0-6],$$[$0],$$[$0-4])\nbreak;\ncase 80:\nyy.commit($$[$0],$$[$0-6],$$[$0-2],$$[$0-4])\nbreak;\ncase 81:\nyy.commit($$[$0],$$[$0-4],$$[$0-2],$$[$0-6])\nbreak;\ncase 82:\nyy.commit($$[$0-2],$$[$0-4],$$[$0],$$[$0-6])\nbreak;\ncase 83:\nyy.commit($$[$0],$$[$0-2],$$[$0-4],$$[$0-6])\nbreak;\ncase 84:\nyy.commit($$[$0-2],$$[$0],$$[$0-4],$$[$0-6])\nbreak;\ncase 85:\nyy.commit($$[$0-4],$$[$0-2],$$[$0],$$[$0-6])\nbreak;\ncase 86:\nyy.commit($$[$0-4],$$[$0],$$[$0-2],$$[$0-6])\nbreak;\ncase 87:\nyy.commit($$[$0-2],$$[$0-4],$$[$0-6],$$[$0])\nbreak;\ncase 88:\nyy.commit($$[$0],$$[$0-4],$$[$0-6],$$[$0-2])\nbreak;\ncase 89:\nyy.commit($$[$0-2],$$[$0],$$[$0-6],$$[$0-4])\nbreak;\ncase 90:\nyy.commit($$[$0],$$[$0-2],$$[$0-6],$$[$0-4])\nbreak;\ncase 91:\nyy.commit($$[$0-4],$$[$0-2],$$[$0-6],$$[$0])\nbreak;\ncase 92:\nyy.commit($$[$0-4],$$[$0],$$[$0-6],$$[$0-2])\nbreak;\ncase 93:\nthis.$ = \"\"\nbreak;\ncase 94:\nthis.$=$$[$0]\nbreak;\ncase 95:\n this.$=yy.commitType.NORMAL;\nbreak;\ncase 96:\n this.$=yy.commitType.REVERSE;\nbreak;\ncase 97:\n this.$=yy.commitType.HIGHLIGHT;\nbreak;\ncase 100:\n yy.parseDirective('%%{', 'open_directive'); \nbreak;\ncase 101:\n yy.parseDirective($$[$0], 'type_directive'); \nbreak;\ncase 102:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"'); yy.parseDirective($$[$0], 'arg_directive'); \nbreak;\ncase 103:\n yy.parseDirective('}%%', 'close_directive', 'gitGraph'); \nbreak;\n}\n},\ntable: [{3:1,4:2,5:3,6:$V0,8:$V1,14:$V2,45:8,49:$V3,53:$V4},{1:[3]},{3:10,4:2,5:3,6:$V0,8:$V1,14:$V2,45:8,49:$V3,53:$V4},{3:11,4:2,5:3,6:$V0,8:$V1,14:$V2,45:8,49:$V3,53:$V4},{7:12,8:$V5,9:[1,13],10:[1,14],11:15,14:$V6},o($V7,[2,104]),o($V7,[2,105]),o($V7,[2,106]),{46:17,50:[1,18]},{50:[2,100]},{1:[2,1]},{1:[2,2]},{8:[1,19]},{7:20,8:$V5,11:15,14:$V6},{9:[1,21]},o($V8,[2,10],{12:22,13:[1,23]}),o($V9,[2,9]),{9:[1,25],47:24,52:$Va},o([9,52],[2,101]),{1:[2,3]},{8:[1,27]},{7:28,8:$V5,11:15,14:$V6},{8:[2,7],14:[1,31],15:29,16:30,17:32,18:33,19:34,20:[1,35],22:[1,36],24:[1,37],25:[1,38],26:39,27:[1,40],29:[1,44],32:[1,43],35:[1,42],37:[1,41]},o($V9,[2,8]),o($Vb,[2,98]),{48:45,51:[1,46]},o($Vb,[2,103]),{1:[2,4]},{8:[1,47]},o($V8,[2,11]),{4:48,8:$V1,14:$V2,53:$V4},o($V8,[2,13]),o($Vc,[2,14]),o($Vc,[2,15]),o($Vc,[2,16]),{21:[1,49]},{23:[1,50]},o($Vc,[2,19]),o($Vc,[2,20]),o($Vc,[2,21]),{28:[1,51]},o($Vc,[2,93],{38:52,33:[1,55],34:[1,57],36:[1,53],39:[1,54],41:[1,56]}),{28:[1,58]},{33:[1,59]},{28:[1,60]},{47:61,52:$Va},{52:[2,102]},{1:[2,5]},o($V8,[2,12]),o($Vc,[2,17]),o($Vc,[2,18]),o($Vc,[2,22]),o($Vc,[2,28]),{34:[1,62]},{40:63,42:$Vd,43:$Ve,44:$Vf},{34:[1,67]},{34:[1,68]},o($Vc,[2,94]),o($Vc,[2,26],{36:[1,69]}),{34:[1,70]},o($Vc,[2,23],{30:[1,71]}),o($Vb,[2,99]),o($Vc,[2,29],{33:[1,73],39:[1,72],41:[1,74]}),o($Vc,[2,30],{33:[1,76],36:[1,75],41:[1,77]}),o($Vg,[2,95]),o($Vg,[2,96]),o($Vg,[2,97]),o($Vc,[2,33],{36:[1,78],39:[1,79],41:[1,80]}),o($Vc,[2,44],{33:[1,83],36:[1,81],39:[1,82]}),{34:[1,84]},o($Vc,[2,25]),{31:[1,85]},{40:86,42:$Vd,43:$Ve,44:$Vf},{34:[1,87]},{34:[1,88]},{34:[1,89]},{34:[1,90]},{34:[1,91]},{34:[1,92]},{40:93,42:$Vd,43:$Ve,44:$Vf},{34:[1,94]},{34:[1,95]},{40:96,42:$Vd,43:$Ve,44:$Vf},{34:[1,97]},o($Vc,[2,27]),o($Vc,[2,24]),o($Vc,[2,31],{33:[1,98],41:[1,99]}),o($Vc,[2,35],{39:[1,100],41:[1,101]}),o($Vc,[2,45],{33:[1,103],39:[1,102]}),o($Vc,[2,32],{33:[1,104],41:[1,105]}),o($Vc,[2,37],{36:[1,106],41:[1,107]}),o($Vc,[2,48],{33:[1,109],36:[1,108]}),o($Vc,[2,34],{39:[1,110],41:[1,111]}),o($Vc,[2,36],{36:[1,112],41:[1,113]}),o($Vc,[2,49],{36:[1,115],39:[1,114]}),o($Vc,[2,46],{33:[1,117],39:[1,116]}),o($Vc,[2,47],{33:[1,119],36:[1,118]}),o($Vc,[2,50],{36:[1,121],39:[1,120]}),{34:[1,122]},{34:[1,123]},{40:124,42:$Vd,43:$Ve,44:$Vf},{34:[1,125]},{40:126,42:$Vd,43:$Ve,44:$Vf},{34:[1,127]},{34:[1,128]},{34:[1,129]},{34:[1,130]},{34:[1,131]},{34:[1,132]},{34:[1,133]},{40:134,42:$Vd,43:$Ve,44:$Vf},{34:[1,135]},{34:[1,136]},{34:[1,137]},{40:138,42:$Vd,43:$Ve,44:$Vf},{34:[1,139]},{40:140,42:$Vd,43:$Ve,44:$Vf},{34:[1,141]},{34:[1,142]},{34:[1,143]},{40:144,42:$Vd,43:$Ve,44:$Vf},{34:[1,145]},o($Vc,[2,42],{41:[1,146]}),o($Vc,[2,55],{33:[1,147]}),o($Vc,[2,43],{41:[1,148]}),o($Vc,[2,66],{39:[1,149]}),o($Vc,[2,56],{33:[1,150]}),o($Vc,[2,65],{39:[1,151]}),o($Vc,[2,41],{41:[1,152]}),o($Vc,[2,54],{33:[1,153]}),o($Vc,[2,40],{41:[1,154]}),o($Vc,[2,60],{36:[1,155]}),o($Vc,[2,53],{33:[1,156]}),o($Vc,[2,59],{36:[1,157]}),o($Vc,[2,39],{41:[1,158]}),o($Vc,[2,67],{39:[1,159]}),o($Vc,[2,38],{41:[1,160]}),o($Vc,[2,61],{36:[1,161]}),o($Vc,[2,62],{36:[1,162]}),o($Vc,[2,68],{39:[1,163]}),o($Vc,[2,52],{33:[1,164]}),o($Vc,[2,63],{39:[1,165]}),o($Vc,[2,51],{33:[1,166]}),o($Vc,[2,57],{36:[1,167]}),o($Vc,[2,58],{36:[1,168]}),o($Vc,[2,64],{39:[1,169]}),{34:[1,170]},{34:[1,171]},{34:[1,172]},{40:173,42:$Vd,43:$Ve,44:$Vf},{34:[1,174]},{40:175,42:$Vd,43:$Ve,44:$Vf},{34:[1,176]},{34:[1,177]},{34:[1,178]},{34:[1,179]},{34:[1,180]},{34:[1,181]},{34:[1,182]},{40:183,42:$Vd,43:$Ve,44:$Vf},{34:[1,184]},{34:[1,185]},{34:[1,186]},{40:187,42:$Vd,43:$Ve,44:$Vf},{34:[1,188]},{40:189,42:$Vd,43:$Ve,44:$Vf},{34:[1,190]},{34:[1,191]},{34:[1,192]},{40:193,42:$Vd,43:$Ve,44:$Vf},o($Vc,[2,83]),o($Vc,[2,84]),o($Vc,[2,81]),o($Vc,[2,82]),o($Vc,[2,86]),o($Vc,[2,85]),o($Vc,[2,90]),o($Vc,[2,89]),o($Vc,[2,88]),o($Vc,[2,87]),o($Vc,[2,92]),o($Vc,[2,91]),o($Vc,[2,80]),o($Vc,[2,79]),o($Vc,[2,78]),o($Vc,[2,77]),o($Vc,[2,75]),o($Vc,[2,76]),o($Vc,[2,74]),o($Vc,[2,73]),o($Vc,[2,72]),o($Vc,[2,71]),o($Vc,[2,69]),o($Vc,[2,70])],\ndefaultActions: {9:[2,100],10:[2,1],11:[2,2],19:[2,3],27:[2,4],46:[2,102],47:[2,5]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            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).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin('open_directive'); return 49; \nbreak;\ncase 1: this.begin('type_directive'); return 50; \nbreak;\ncase 2: this.popState(); this.begin('arg_directive'); return 9; \nbreak;\ncase 3: this.popState(); this.popState(); return 52; \nbreak;\ncase 4:return 51;\nbreak;\ncase 5: this.begin(\"acc_title\");return 20; \nbreak;\ncase 6: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 7: this.begin(\"acc_descr\");return 22; \nbreak;\ncase 8: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 9: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 10: this.popState(); \nbreak;\ncase 11:return \"acc_descr_multiline_value\";\nbreak;\ncase 12:/*{console.log('New line');return 14;}*/ return 14;\nbreak;\ncase 13:/* skip all whitespace */\nbreak;\ncase 14:/* skip comments */\nbreak;\ncase 15:/* skip comments */\nbreak;\ncase 16:return 6;\nbreak;\ncase 17:return 37;\nbreak;\ncase 18:return 33;\nbreak;\ncase 19:return 39;\nbreak;\ncase 20:return 41;\nbreak;\ncase 21:return 42;\nbreak;\ncase 22:return 43;\nbreak;\ncase 23:return 44;\nbreak;\ncase 24:return 36;\nbreak;\ncase 25:return 29;\nbreak;\ncase 26:return 30;\nbreak;\ncase 27:return 35;\nbreak;\ncase 28:return 32;\nbreak;\ncase 29:return 27;\nbreak;\ncase 30:return 10;\nbreak;\ncase 31:return 10;\nbreak;\ncase 32:return 9;\nbreak;\ncase 33:return 'CARET'\nbreak;\ncase 34:this.begin(\"options\"); //\nbreak;\ncase 35:this.popState();       // not used anymore in the renderer, fixed for backward compatibility\nbreak;\ncase 36:return 13;          //\nbreak;\ncase 37:this.begin(\"string\");\nbreak;\ncase 38:this.popState();\nbreak;\ncase 39:return 34;\nbreak;\ncase 40:return 31;\nbreak;\ncase 41:return 28;\nbreak;\ncase 42:return 8;\nbreak;\n}\n},\nrules: [/^(?:%%\\{)/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,/^(?:(\\r?\\n)+)/i,/^(?:\\s+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:gitGraph\\b)/i,/^(?:commit\\b)/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\\b)/i,/^(?:REVERSE\\b)/i,/^(?:HIGHLIGHT\\b)/i,/^(?:tag:)/i,/^(?:branch\\b)/i,/^(?:order:)/i,/^(?:merge\\b)/i,/^(?:cherry-pick\\b)/i,/^(?:checkout\\b)/i,/^(?:LR\\b)/i,/^(?:BT\\b)/i,/^(?::)/i,/^(?:\\^)/i,/^(?:options\\r?\\n)/i,/^(?:[ \\r\\n\\t]+end\\b)/i,/^(?:[\\s\\S]+(?=[ \\r\\n\\t]+end))/i,/^(?:[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:[0-9]+)/i,/^(?:[a-zA-Z][-_\\./a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[10,11],\"inclusive\":false},\"acc_descr\":{\"rules\":[8],\"inclusive\":false},\"acc_title\":{\"rules\":[6],\"inclusive\":false},\"close_directive\":{\"rules\":[],\"inclusive\":false},\"arg_directive\":{\"rules\":[3,4],\"inclusive\":false},\"type_directive\":{\"rules\":[2,3],\"inclusive\":false},\"open_directive\":{\"rules\":[1],\"inclusive\":false},\"options\":{\"rules\":[35,36],\"inclusive\":false},\"string\":{\"rules\":[38,39],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,5,7,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,37,40,41,42],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n    if (!args[1]) {\n        console.log('Usage: '+args[0]+' FILE');\n        process.exit(1);\n    }\n    var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n    return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n  exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,9,10];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"info\":4,\"document\":5,\"EOF\":6,\"line\":7,\"statement\":8,\"NL\":9,\"showInfo\":10,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"info\",6:\"EOF\",9:\"NL\",10:\"showInfo\"},\nproductions_: [0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return yy; \nbreak;\ncase 4:\n \nbreak;\ncase 6:\n yy.setInfo(true);  \nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},o($V0,[2,3]),o($V0,[2,4]),o($V0,[2,5]),o($V0,[2,6])],\ndefaultActions: {4:[2,1]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\r\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            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).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\n\t// Pre-lexer code can go here\r\n\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 4    ;\nbreak;\ncase 1:return 9      ;\nbreak;\ncase 2:return 'space';\nbreak;\ncase 3:return 10;\nbreak;\ncase 4:return 6     ;\nbreak;\ncase 5:return 'TXT' ;\nbreak;\n}\n},\nrules: [/^(?:info\\b)/i,/^(?:[\\s\\n\\r]+)/i,/^(?:[\\s]+)/i,/^(?:showInfo\\b)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n    if (!args[1]) {\n        console.log('Usage: '+args[0]+' FILE');\n        process.exit(1);\n    }\n    var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n    return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n  exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,5],$V2=[1,6],$V3=[1,7],$V4=[1,9],$V5=[1,11,13,15,17,19,20,26,27,28,29],$V6=[2,5],$V7=[1,6,11,13,15,17,19,20,26,27,28,29],$V8=[26,27,28],$V9=[2,8],$Va=[1,18],$Vb=[1,19],$Vc=[1,20],$Vd=[1,21],$Ve=[1,22],$Vf=[1,23],$Vg=[1,28],$Vh=[6,26,27,28,29];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"eol\":4,\"directive\":5,\"PIE\":6,\"document\":7,\"showData\":8,\"line\":9,\"statement\":10,\"txt\":11,\"value\":12,\"title\":13,\"title_value\":14,\"acc_title\":15,\"acc_title_value\":16,\"acc_descr\":17,\"acc_descr_value\":18,\"acc_descr_multiline_value\":19,\"section\":20,\"openDirective\":21,\"typeDirective\":22,\"closeDirective\":23,\":\":24,\"argDirective\":25,\"NEWLINE\":26,\";\":27,\"EOF\":28,\"open_directive\":29,\"type_directive\":30,\"arg_directive\":31,\"close_directive\":32,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",6:\"PIE\",8:\"showData\",11:\"txt\",12:\"value\",13:\"title\",14:\"title_value\",15:\"acc_title\",16:\"acc_title_value\",17:\"acc_descr\",18:\"acc_descr_value\",19:\"acc_descr_multiline_value\",20:\"section\",24:\":\",26:\"NEWLINE\",27:\";\",28:\"EOF\",29:\"open_directive\",30:\"type_directive\",31:\"arg_directive\",32:\"close_directive\"},\nproductions_: [0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[21,1],[22,1],[25,1],[23,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 4:\nyy.setShowData(true);\nbreak;\ncase 7:\n this.$ = $$[$0-1] \nbreak;\ncase 9:\n yy.addSection($$[$0-1],yy.cleanupValue($$[$0])); \nbreak;\ncase 10:\n this.$=$$[$0].trim();yy.setDiagramTitle(this.$); \nbreak;\ncase 11:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 12: case 13:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 14:\nyy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8);\nbreak;\ncase 21:\n yy.parseDirective('%%{', 'open_directive'); \nbreak;\ncase 22:\n yy.parseDirective($$[$0], 'type_directive'); \nbreak;\ncase 23:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"'); yy.parseDirective($$[$0], 'arg_directive'); \nbreak;\ncase 24:\n yy.parseDirective('}%%', 'close_directive', 'pie'); \nbreak;\n}\n},\ntable: [{3:1,4:2,5:3,6:$V0,21:8,26:$V1,27:$V2,28:$V3,29:$V4},{1:[3]},{3:10,4:2,5:3,6:$V0,21:8,26:$V1,27:$V2,28:$V3,29:$V4},{3:11,4:2,5:3,6:$V0,21:8,26:$V1,27:$V2,28:$V3,29:$V4},o($V5,$V6,{7:12,8:[1,13]}),o($V7,[2,18]),o($V7,[2,19]),o($V7,[2,20]),{22:14,30:[1,15]},{30:[2,21]},{1:[2,1]},{1:[2,2]},o($V8,$V9,{21:8,9:16,10:17,5:24,1:[2,3],11:$Va,13:$Vb,15:$Vc,17:$Vd,19:$Ve,20:$Vf,29:$V4}),o($V5,$V6,{7:25}),{23:26,24:[1,27],32:$Vg},o([24,32],[2,22]),o($V5,[2,6]),{4:29,26:$V1,27:$V2,28:$V3},{12:[1,30]},{14:[1,31]},{16:[1,32]},{18:[1,33]},o($V8,[2,13]),o($V8,[2,14]),o($V8,[2,15]),o($V8,$V9,{21:8,9:16,10:17,5:24,1:[2,4],11:$Va,13:$Vb,15:$Vc,17:$Vd,19:$Ve,20:$Vf,29:$V4}),o($Vh,[2,16]),{25:34,31:[1,35]},o($Vh,[2,24]),o($V5,[2,7]),o($V8,[2,9]),o($V8,[2,10]),o($V8,[2,11]),o($V8,[2,12]),{23:36,32:$Vg},{32:[2,23]},o($Vh,[2,17])],\ndefaultActions: {9:[2,21],10:[2,1],11:[2,2],35:[2,23]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            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).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin('open_directive'); return 29; \nbreak;\ncase 1: this.begin('type_directive'); return 30; \nbreak;\ncase 2: this.popState(); this.begin('arg_directive'); return 24; \nbreak;\ncase 3: this.popState(); this.popState(); return 32; \nbreak;\ncase 4:return 31;\nbreak;\ncase 5:/* skip comments */\nbreak;\ncase 6:/* skip comments */{ /*console.log('');*/ }\nbreak;\ncase 7:return 26;\nbreak;\ncase 8:/* do nothing */\nbreak;\ncase 9:/* ignore */\nbreak;\ncase 10: this.begin(\"title\");return 13; \nbreak;\ncase 11: this.popState(); return \"title_value\"; \nbreak;\ncase 12: this.begin(\"acc_title\");return 15; \nbreak;\ncase 13: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 14: this.begin(\"acc_descr\");return 17; \nbreak;\ncase 15: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 16: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 17: this.popState(); \nbreak;\ncase 18:return \"acc_descr_multiline_value\";\nbreak;\ncase 19: this.begin(\"string\"); \nbreak;\ncase 20: this.popState(); \nbreak;\ncase 21: return \"txt\"; \nbreak;\ncase 22:return 6;\nbreak;\ncase 23:return 8;\nbreak;\ncase 24:return \"value\";\nbreak;\ncase 25:return 28;\nbreak;\n}\n},\nrules: [/^(?:%%\\{)/i,/^(?:((?:(?!\\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\\}%%)/i,/^(?:((?:(?!\\}%%).|\\n)*))/i,/^(?:%%(?!\\{)[^\\n]*)/i,/^(?:[^\\}]%%[^\\n]*)/i,/^(?:[\\n\\r]+)/i,/^(?:%%[^\\n]*)/i,/^(?:[\\s]+)/i,/^(?:title\\b)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:pie\\b)/i,/^(?:showData\\b)/i,/^(?::[\\s]*[\\d]+(?:\\.[\\d]+)?)/i,/^(?:$)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[17,18],\"inclusive\":false},\"acc_descr\":{\"rules\":[15],\"inclusive\":false},\"acc_title\":{\"rules\":[13],\"inclusive\":false},\"close_directive\":{\"rules\":[],\"inclusive\":false},\"arg_directive\":{\"rules\":[3,4],\"inclusive\":false},\"type_directive\":{\"rules\":[2,3],\"inclusive\":false},\"open_directive\":{\"rules\":[1],\"inclusive\":false},\"title\":{\"rules\":[11],\"inclusive\":false},\"string\":{\"rules\":[20,21],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,5,6,7,8,9,10,12,14,16,19,22,23,24,25],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n    if (!args[1]) {\n        console.log('Usage: '+args[0]+' FILE');\n        process.exit(1);\n    }\n    var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n    return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n  exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,3],$V1=[1,5],$V2=[1,6],$V3=[1,7],$V4=[1,8],$V5=[5,6,8,14,16,18,19,40,41,42,43,44,45,53,71,72],$V6=[1,22],$V7=[2,13],$V8=[1,26],$V9=[1,27],$Va=[1,28],$Vb=[1,29],$Vc=[1,30],$Vd=[1,31],$Ve=[1,24],$Vf=[1,32],$Vg=[1,33],$Vh=[1,36],$Vi=[71,72],$Vj=[5,8,14,16,18,19,40,41,42,43,44,45,53,60,62,71,72],$Vk=[1,56],$Vl=[1,57],$Vm=[1,58],$Vn=[1,59],$Vo=[1,60],$Vp=[1,61],$Vq=[1,62],$Vr=[62,63],$Vs=[1,74],$Vt=[1,70],$Vu=[1,71],$Vv=[1,72],$Vw=[1,73],$Vx=[1,75],$Vy=[1,79],$Vz=[1,80],$VA=[1,77],$VB=[1,78],$VC=[5,8,14,16,18,19,40,41,42,43,44,45,53,71,72];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"directive\":4,\"NEWLINE\":5,\"RD\":6,\"diagram\":7,\"EOF\":8,\"openDirective\":9,\"typeDirective\":10,\"closeDirective\":11,\":\":12,\"argDirective\":13,\"acc_title\":14,\"acc_title_value\":15,\"acc_descr\":16,\"acc_descr_value\":17,\"acc_descr_multiline_value\":18,\"open_directive\":19,\"type_directive\":20,\"arg_directive\":21,\"close_directive\":22,\"requirementDef\":23,\"elementDef\":24,\"relationshipDef\":25,\"requirementType\":26,\"requirementName\":27,\"STRUCT_START\":28,\"requirementBody\":29,\"ID\":30,\"COLONSEP\":31,\"id\":32,\"TEXT\":33,\"text\":34,\"RISK\":35,\"riskLevel\":36,\"VERIFYMTHD\":37,\"verifyType\":38,\"STRUCT_STOP\":39,\"REQUIREMENT\":40,\"FUNCTIONAL_REQUIREMENT\":41,\"INTERFACE_REQUIREMENT\":42,\"PERFORMANCE_REQUIREMENT\":43,\"PHYSICAL_REQUIREMENT\":44,\"DESIGN_CONSTRAINT\":45,\"LOW_RISK\":46,\"MED_RISK\":47,\"HIGH_RISK\":48,\"VERIFY_ANALYSIS\":49,\"VERIFY_DEMONSTRATION\":50,\"VERIFY_INSPECTION\":51,\"VERIFY_TEST\":52,\"ELEMENT\":53,\"elementName\":54,\"elementBody\":55,\"TYPE\":56,\"type\":57,\"DOCREF\":58,\"ref\":59,\"END_ARROW_L\":60,\"relationship\":61,\"LINE\":62,\"END_ARROW_R\":63,\"CONTAINS\":64,\"COPIES\":65,\"DERIVES\":66,\"SATISFIES\":67,\"VERIFIES\":68,\"REFINES\":69,\"TRACES\":70,\"unqString\":71,\"qString\":72,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"NEWLINE\",6:\"RD\",8:\"EOF\",12:\":\",14:\"acc_title\",15:\"acc_title_value\",16:\"acc_descr\",17:\"acc_descr_value\",18:\"acc_descr_multiline_value\",19:\"open_directive\",20:\"type_directive\",21:\"arg_directive\",22:\"close_directive\",28:\"STRUCT_START\",30:\"ID\",31:\"COLONSEP\",33:\"TEXT\",35:\"RISK\",37:\"VERIFYMTHD\",39:\"STRUCT_STOP\",40:\"REQUIREMENT\",41:\"FUNCTIONAL_REQUIREMENT\",42:\"INTERFACE_REQUIREMENT\",43:\"PERFORMANCE_REQUIREMENT\",44:\"PHYSICAL_REQUIREMENT\",45:\"DESIGN_CONSTRAINT\",46:\"LOW_RISK\",47:\"MED_RISK\",48:\"HIGH_RISK\",49:\"VERIFY_ANALYSIS\",50:\"VERIFY_DEMONSTRATION\",51:\"VERIFY_INSPECTION\",52:\"VERIFY_TEST\",53:\"ELEMENT\",56:\"TYPE\",58:\"DOCREF\",60:\"END_ARROW_L\",62:\"LINE\",63:\"END_ARROW_R\",64:\"CONTAINS\",65:\"COPIES\",66:\"DERIVES\",67:\"SATISFIES\",68:\"VERIFIES\",69:\"REFINES\",70:\"TRACES\",71:\"unqString\",72:\"qString\"},\nproductions_: [0,[3,3],[3,2],[3,4],[4,3],[4,5],[4,2],[4,2],[4,1],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[23,5],[29,5],[29,5],[29,5],[29,5],[29,2],[29,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[36,1],[36,1],[36,1],[38,1],[38,1],[38,1],[38,1],[24,5],[55,5],[55,5],[55,2],[55,1],[25,5],[25,5],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[27,1],[27,1],[32,1],[32,1],[34,1],[34,1],[54,1],[54,1],[57,1],[57,1],[59,1],[59,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 6:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 7: case 8:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 9:\n yy.parseDirective('%%{', 'open_directive'); \nbreak;\ncase 10:\n yy.parseDirective($$[$0], 'type_directive'); \nbreak;\ncase 11:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"'); yy.parseDirective($$[$0], 'arg_directive'); \nbreak;\ncase 12:\n yy.parseDirective('}%%', 'close_directive', 'pie'); \nbreak;\ncase 13:\n this.$ = [] \nbreak;\ncase 19:\n yy.addRequirement($$[$0-3], $$[$0-4]) \nbreak;\ncase 20:\n yy.setNewReqId($$[$0-2]); \nbreak;\ncase 21:\n yy.setNewReqText($$[$0-2]); \nbreak;\ncase 22:\n yy.setNewReqRisk($$[$0-2]); \nbreak;\ncase 23:\n yy.setNewReqVerifyMethod($$[$0-2]); \nbreak;\ncase 26:\n this.$=yy.RequirementType.REQUIREMENT;\nbreak;\ncase 27:\n this.$=yy.RequirementType.FUNCTIONAL_REQUIREMENT;\nbreak;\ncase 28:\n this.$=yy.RequirementType.INTERFACE_REQUIREMENT;\nbreak;\ncase 29:\n this.$=yy.RequirementType.PERFORMANCE_REQUIREMENT;\nbreak;\ncase 30:\n this.$=yy.RequirementType.PHYSICAL_REQUIREMENT;\nbreak;\ncase 31:\n this.$=yy.RequirementType.DESIGN_CONSTRAINT;\nbreak;\ncase 32:\n this.$=yy.RiskLevel.LOW_RISK;\nbreak;\ncase 33:\n this.$=yy.RiskLevel.MED_RISK;\nbreak;\ncase 34:\n this.$=yy.RiskLevel.HIGH_RISK;\nbreak;\ncase 35:\n this.$=yy.VerifyType.VERIFY_ANALYSIS;\nbreak;\ncase 36:\n this.$=yy.VerifyType.VERIFY_DEMONSTRATION;\nbreak;\ncase 37:\n this.$=yy.VerifyType.VERIFY_INSPECTION;\nbreak;\ncase 38:\n this.$=yy.VerifyType.VERIFY_TEST;\nbreak;\ncase 39:\n yy.addElement($$[$0-3]) \nbreak;\ncase 40:\n yy.setNewElementType($$[$0-2]); \nbreak;\ncase 41:\n yy.setNewElementDocRef($$[$0-2]); \nbreak;\ncase 44:\n  yy.addRelationship($$[$0-2], $$[$0], $$[$0-4]) \nbreak;\ncase 45:\n yy.addRelationship($$[$0-2], $$[$0-4], $$[$0]) \nbreak;\ncase 46:\n this.$=yy.Relationships.CONTAINS;\nbreak;\ncase 47:\n this.$=yy.Relationships.COPIES;\nbreak;\ncase 48:\n this.$=yy.Relationships.DERIVES;\nbreak;\ncase 49:\n this.$=yy.Relationships.SATISFIES;\nbreak;\ncase 50:\n this.$=yy.Relationships.VERIFIES;\nbreak;\ncase 51:\n this.$=yy.Relationships.REFINES;\nbreak;\ncase 52:\n this.$=yy.Relationships.TRACES;\nbreak;\n}\n},\ntable: [{3:1,4:2,6:$V0,9:4,14:$V1,16:$V2,18:$V3,19:$V4},{1:[3]},{3:10,4:2,5:[1,9],6:$V0,9:4,14:$V1,16:$V2,18:$V3,19:$V4},{5:[1,11]},{10:12,20:[1,13]},{15:[1,14]},{17:[1,15]},o($V5,[2,8]),{20:[2,9]},{3:16,4:2,6:$V0,9:4,14:$V1,16:$V2,18:$V3,19:$V4},{1:[2,2]},{4:21,5:$V6,7:17,8:$V7,9:4,14:$V1,16:$V2,18:$V3,19:$V4,23:18,24:19,25:20,26:23,32:25,40:$V8,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,53:$Ve,71:$Vf,72:$Vg},{11:34,12:[1,35],22:$Vh},o([12,22],[2,10]),o($V5,[2,6]),o($V5,[2,7]),{1:[2,1]},{8:[1,37]},{4:21,5:$V6,7:38,8:$V7,9:4,14:$V1,16:$V2,18:$V3,19:$V4,23:18,24:19,25:20,26:23,32:25,40:$V8,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,53:$Ve,71:$Vf,72:$Vg},{4:21,5:$V6,7:39,8:$V7,9:4,14:$V1,16:$V2,18:$V3,19:$V4,23:18,24:19,25:20,26:23,32:25,40:$V8,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,53:$Ve,71:$Vf,72:$Vg},{4:21,5:$V6,7:40,8:$V7,9:4,14:$V1,16:$V2,18:$V3,19:$V4,23:18,24:19,25:20,26:23,32:25,40:$V8,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,53:$Ve,71:$Vf,72:$Vg},{4:21,5:$V6,7:41,8:$V7,9:4,14:$V1,16:$V2,18:$V3,19:$V4,23:18,24:19,25:20,26:23,32:25,40:$V8,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,53:$Ve,71:$Vf,72:$Vg},{4:21,5:$V6,7:42,8:$V7,9:4,14:$V1,16:$V2,18:$V3,19:$V4,23:18,24:19,25:20,26:23,32:25,40:$V8,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,53:$Ve,71:$Vf,72:$Vg},{27:43,71:[1,44],72:[1,45]},{54:46,71:[1,47],72:[1,48]},{60:[1,49],62:[1,50]},o($Vi,[2,26]),o($Vi,[2,27]),o($Vi,[2,28]),o($Vi,[2,29]),o($Vi,[2,30]),o($Vi,[2,31]),o($Vj,[2,55]),o($Vj,[2,56]),o($V5,[2,4]),{13:51,21:[1,52]},o($V5,[2,12]),{1:[2,3]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{8:[2,17]},{8:[2,18]},{28:[1,53]},{28:[2,53]},{28:[2,54]},{28:[1,54]},{28:[2,59]},{28:[2,60]},{61:55,64:$Vk,65:$Vl,66:$Vm,67:$Vn,68:$Vo,69:$Vp,70:$Vq},{61:63,64:$Vk,65:$Vl,66:$Vm,67:$Vn,68:$Vo,69:$Vp,70:$Vq},{11:64,22:$Vh},{22:[2,11]},{5:[1,65]},{5:[1,66]},{62:[1,67]},o($Vr,[2,46]),o($Vr,[2,47]),o($Vr,[2,48]),o($Vr,[2,49]),o($Vr,[2,50]),o($Vr,[2,51]),o($Vr,[2,52]),{63:[1,68]},o($V5,[2,5]),{5:$Vs,29:69,30:$Vt,33:$Vu,35:$Vv,37:$Vw,39:$Vx},{5:$Vy,39:$Vz,55:76,56:$VA,58:$VB},{32:81,71:$Vf,72:$Vg},{32:82,71:$Vf,72:$Vg},o($VC,[2,19]),{31:[1,83]},{31:[1,84]},{31:[1,85]},{31:[1,86]},{5:$Vs,29:87,30:$Vt,33:$Vu,35:$Vv,37:$Vw,39:$Vx},o($VC,[2,25]),o($VC,[2,39]),{31:[1,88]},{31:[1,89]},{5:$Vy,39:$Vz,55:90,56:$VA,58:$VB},o($VC,[2,43]),o($VC,[2,44]),o($VC,[2,45]),{32:91,71:$Vf,72:$Vg},{34:92,71:[1,93],72:[1,94]},{36:95,46:[1,96],47:[1,97],48:[1,98]},{38:99,49:[1,100],50:[1,101],51:[1,102],52:[1,103]},o($VC,[2,24]),{57:104,71:[1,105],72:[1,106]},{59:107,71:[1,108],72:[1,109]},o($VC,[2,42]),{5:[1,110]},{5:[1,111]},{5:[2,57]},{5:[2,58]},{5:[1,112]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[1,113]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[2,38]},{5:[1,114]},{5:[2,61]},{5:[2,62]},{5:[1,115]},{5:[2,63]},{5:[2,64]},{5:$Vs,29:116,30:$Vt,33:$Vu,35:$Vv,37:$Vw,39:$Vx},{5:$Vs,29:117,30:$Vt,33:$Vu,35:$Vv,37:$Vw,39:$Vx},{5:$Vs,29:118,30:$Vt,33:$Vu,35:$Vv,37:$Vw,39:$Vx},{5:$Vs,29:119,30:$Vt,33:$Vu,35:$Vv,37:$Vw,39:$Vx},{5:$Vy,39:$Vz,55:120,56:$VA,58:$VB},{5:$Vy,39:$Vz,55:121,56:$VA,58:$VB},o($VC,[2,20]),o($VC,[2,21]),o($VC,[2,22]),o($VC,[2,23]),o($VC,[2,40]),o($VC,[2,41])],\ndefaultActions: {8:[2,9],10:[2,2],16:[2,1],37:[2,3],38:[2,14],39:[2,15],40:[2,16],41:[2,17],42:[2,18],44:[2,53],45:[2,54],47:[2,59],48:[2,60],52:[2,11],93:[2,57],94:[2,58],96:[2,32],97:[2,33],98:[2,34],100:[2,35],101:[2,36],102:[2,37],103:[2,38],105:[2,61],106:[2,62],108:[2,63],109:[2,64]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            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).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin('open_directive'); return 19; \nbreak;\ncase 1: this.begin('type_directive'); return 20; \nbreak;\ncase 2: this.popState(); this.begin('arg_directive'); return 12; \nbreak;\ncase 3: this.popState(); this.popState(); return 22; \nbreak;\ncase 4:return 21;\nbreak;\ncase 5:return 'title';\nbreak;\ncase 6: this.begin(\"acc_title\");return 14; \nbreak;\ncase 7: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 8: this.begin(\"acc_descr\");return 16; \nbreak;\ncase 9: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 10: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 11: this.popState(); \nbreak;\ncase 12:return \"acc_descr_multiline_value\";\nbreak;\ncase 13:return 5;\nbreak;\ncase 14:/* skip all whitespace */\nbreak;\ncase 15:/* skip comments */\nbreak;\ncase 16:/* skip comments */\nbreak;\ncase 17:return 8;\nbreak;\ncase 18:return 6;\nbreak;\ncase 19:return 28;\nbreak;\ncase 20:return 39;\nbreak;\ncase 21:return 31;\nbreak;\ncase 22:return 30;\nbreak;\ncase 23:return 33;\nbreak;\ncase 24:return 35;\nbreak;\ncase 25:return 37;\nbreak;\ncase 26:return 40;\nbreak;\ncase 27:return 41;\nbreak;\ncase 28:return 42;\nbreak;\ncase 29:return 43;\nbreak;\ncase 30:return 44;\nbreak;\ncase 31:return 45;\nbreak;\ncase 32:return 46;\nbreak;\ncase 33:return 47;\nbreak;\ncase 34:return 48;\nbreak;\ncase 35:return 49;\nbreak;\ncase 36:return 50;\nbreak;\ncase 37:return 51;\nbreak;\ncase 38:return 52;\nbreak;\ncase 39:return 53;\nbreak;\ncase 40:return 64;\nbreak;\ncase 41:return 65;\nbreak;\ncase 42:return 66;\nbreak;\ncase 43:return 67;\nbreak;\ncase 44:return 68;\nbreak;\ncase 45:return 69;\nbreak;\ncase 46:return 70;\nbreak;\ncase 47:return 56;\nbreak;\ncase 48:return 58;\nbreak;\ncase 49:return 60;\nbreak;\ncase 50:return 63;\nbreak;\ncase 51:return 62;\nbreak;\ncase 52: this.begin(\"string\"); \nbreak;\ncase 53: this.popState(); \nbreak;\ncase 54: return \"qString\"; \nbreak;\ncase 55: yy_.yytext = yy_.yytext.trim(); return 71;\nbreak;\n}\n},\nrules: [/^(?:%%\\{)/i,/^(?:((?:(?!\\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\\}%%)/i,/^(?:((?:(?!\\}%%).|\\n)*))/i,/^(?:title\\s[^#\\n;]+)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:(\\r?\\n)+)/i,/^(?:\\s+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\\b)/i,/^(?:\\{)/i,/^(?:\\})/i,/^(?::)/i,/^(?:id\\b)/i,/^(?:text\\b)/i,/^(?:risk\\b)/i,/^(?:verifyMethod\\b)/i,/^(?:requirement\\b)/i,/^(?:functionalRequirement\\b)/i,/^(?:interfaceRequirement\\b)/i,/^(?:performanceRequirement\\b)/i,/^(?:physicalRequirement\\b)/i,/^(?:designConstraint\\b)/i,/^(?:low\\b)/i,/^(?:medium\\b)/i,/^(?:high\\b)/i,/^(?:analysis\\b)/i,/^(?:demonstration\\b)/i,/^(?:inspection\\b)/i,/^(?:test\\b)/i,/^(?:element\\b)/i,/^(?:contains\\b)/i,/^(?:copies\\b)/i,/^(?:derives\\b)/i,/^(?:satisfies\\b)/i,/^(?:verifies\\b)/i,/^(?:refines\\b)/i,/^(?:traces\\b)/i,/^(?:type\\b)/i,/^(?:docref\\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:[\\w][^\\r\\n\\{\\<\\>\\-\\=]*)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[11,12],\"inclusive\":false},\"acc_descr\":{\"rules\":[9],\"inclusive\":false},\"acc_title\":{\"rules\":[7],\"inclusive\":false},\"close_directive\":{\"rules\":[],\"inclusive\":false},\"arg_directive\":{\"rules\":[3,4],\"inclusive\":false},\"type_directive\":{\"rules\":[2,3],\"inclusive\":false},\"open_directive\":{\"rules\":[1],\"inclusive\":false},\"unqString\":{\"rules\":[],\"inclusive\":false},\"token\":{\"rules\":[],\"inclusive\":false},\"string\":{\"rules\":[53,54],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,55],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n    if (!args[1]) {\n        console.log('Usage: '+args[0]+' FILE');\n        process.exit(1);\n    }\n    var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n    return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n  exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,2],$V1=[1,3],$V2=[1,5],$V3=[1,7],$V4=[2,5],$V5=[1,15],$V6=[1,17],$V7=[1,18],$V8=[1,19],$V9=[1,21],$Va=[1,22],$Vb=[1,23],$Vc=[1,29],$Vd=[1,30],$Ve=[1,31],$Vf=[1,32],$Vg=[1,33],$Vh=[1,34],$Vi=[1,35],$Vj=[1,36],$Vk=[1,37],$Vl=[1,38],$Vm=[1,39],$Vn=[1,40],$Vo=[1,43],$Vp=[1,44],$Vq=[1,45],$Vr=[1,46],$Vs=[1,47],$Vt=[1,48],$Vu=[1,51],$Vv=[1,4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,50,51,52,53,58,59,60,61,69,79],$Vw=[4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,53,58,59,60,61,69,79],$Vx=[4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,52,53,58,59,60,61,69,79],$Vy=[4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,51,53,58,59,60,61,69,79],$Vz=[4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,50,53,58,59,60,61,69,79],$VA=[67,68,69],$VB=[1,121],$VC=[1,4,5,7,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,50,51,52,53,58,59,60,61,69,79];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"SPACE\":4,\"NEWLINE\":5,\"directive\":6,\"SD\":7,\"document\":8,\"line\":9,\"statement\":10,\"openDirective\":11,\"typeDirective\":12,\"closeDirective\":13,\":\":14,\"argDirective\":15,\"participant\":16,\"actor\":17,\"AS\":18,\"restOfLine\":19,\"participant_actor\":20,\"signal\":21,\"autonumber\":22,\"NUM\":23,\"off\":24,\"activate\":25,\"deactivate\":26,\"note_statement\":27,\"links_statement\":28,\"link_statement\":29,\"properties_statement\":30,\"details_statement\":31,\"title\":32,\"legacy_title\":33,\"acc_title\":34,\"acc_title_value\":35,\"acc_descr\":36,\"acc_descr_value\":37,\"acc_descr_multiline_value\":38,\"loop\":39,\"end\":40,\"rect\":41,\"opt\":42,\"alt\":43,\"else_sections\":44,\"par\":45,\"par_sections\":46,\"critical\":47,\"option_sections\":48,\"break\":49,\"option\":50,\"and\":51,\"else\":52,\"note\":53,\"placement\":54,\"text2\":55,\"over\":56,\"actor_pair\":57,\"links\":58,\"link\":59,\"properties\":60,\"details\":61,\"spaceList\":62,\",\":63,\"left_of\":64,\"right_of\":65,\"signaltype\":66,\"+\":67,\"-\":68,\"ACTOR\":69,\"SOLID_OPEN_ARROW\":70,\"DOTTED_OPEN_ARROW\":71,\"SOLID_ARROW\":72,\"DOTTED_ARROW\":73,\"SOLID_CROSS\":74,\"DOTTED_CROSS\":75,\"SOLID_POINT\":76,\"DOTTED_POINT\":77,\"TXT\":78,\"open_directive\":79,\"type_directive\":80,\"arg_directive\":81,\"close_directive\":82,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"SPACE\",5:\"NEWLINE\",7:\"SD\",14:\":\",16:\"participant\",18:\"AS\",19:\"restOfLine\",20:\"participant_actor\",22:\"autonumber\",23:\"NUM\",24:\"off\",25:\"activate\",26:\"deactivate\",32:\"title\",33:\"legacy_title\",34:\"acc_title\",35:\"acc_title_value\",36:\"acc_descr\",37:\"acc_descr_value\",38:\"acc_descr_multiline_value\",39:\"loop\",40:\"end\",41:\"rect\",42:\"opt\",43:\"alt\",45:\"par\",47:\"critical\",49:\"break\",50:\"option\",51:\"and\",52:\"else\",53:\"note\",56:\"over\",58:\"links\",59:\"link\",60:\"properties\",61:\"details\",63:\",\",64:\"left_of\",65:\"right_of\",67:\"+\",68:\"-\",69:\"ACTOR\",70:\"SOLID_OPEN_ARROW\",71:\"DOTTED_OPEN_ARROW\",72:\"SOLID_ARROW\",73:\"DOTTED_ARROW\",74:\"SOLID_CROSS\",75:\"DOTTED_CROSS\",76:\"SOLID_POINT\",77:\"DOTTED_POINT\",78:\"TXT\",79:\"open_directive\",80:\"type_directive\",81:\"arg_directive\",82:\"close_directive\"},\nproductions_: [0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[6,4],[6,6],[10,5],[10,3],[10,5],[10,3],[10,2],[10,4],[10,3],[10,3],[10,2],[10,3],[10,3],[10,2],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,2],[10,2],[10,1],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[48,1],[48,4],[46,1],[46,4],[44,1],[44,4],[27,4],[27,4],[28,3],[29,3],[30,3],[31,3],[62,2],[62,1],[57,3],[57,1],[54,1],[54,1],[21,5],[21,5],[21,4],[17,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[55,1],[11,1],[12,1],[15,1],[13,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 4:\n yy.apply($$[$0]);return $$[$0]; \nbreak;\ncase 5:\n this.$ = [] \nbreak;\ncase 6:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 7: case 8:\n this.$ = $$[$0] \nbreak;\ncase 9:\n this.$=[]; \nbreak;\ncase 12:\n$$[$0-3].type='addParticipant';$$[$0-3].description=yy.parseMessage($$[$0-1]); this.$=$$[$0-3];\nbreak;\ncase 13:\n$$[$0-1].type='addParticipant';this.$=$$[$0-1];\nbreak;\ncase 14:\n$$[$0-3].type='addActor';$$[$0-3].description=yy.parseMessage($$[$0-1]); this.$=$$[$0-3];\nbreak;\ncase 15:\n$$[$0-1].type='addActor'; this.$=$$[$0-1];\nbreak;\ncase 17:\n this.$= {type:'sequenceIndex',sequenceIndex: Number($$[$0-2]), sequenceIndexStep:Number($$[$0-1]), sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER};\nbreak;\ncase 18:\n this.$ = {type:'sequenceIndex',sequenceIndex: Number($$[$0-1]), sequenceIndexStep:1, sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER};\nbreak;\ncase 19:\n this.$ = {type:'sequenceIndex', sequenceVisible:false, signalType:yy.LINETYPE.AUTONUMBER};\nbreak;\ncase 20:\nthis.$ = {type:'sequenceIndex', sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER}; \nbreak;\ncase 21:\nthis.$={type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1]};\nbreak;\ncase 22:\nthis.$={type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-1]};\nbreak;\ncase 28:\nyy.setDiagramTitle($$[$0].substring(6));this.$=$$[$0].substring(6);\nbreak;\ncase 29:\nyy.setDiagramTitle($$[$0].substring(7));this.$=$$[$0].substring(7);\nbreak;\ncase 30:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 31: case 32:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 33:\n\n\t\t$$[$0-1].unshift({type: 'loopStart', loopText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.LOOP_START});\n\t\t$$[$0-1].push({type: 'loopEnd', loopText:$$[$0-2], signalType: yy.LINETYPE.LOOP_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 34:\n\n\t\t$$[$0-1].unshift({type: 'rectStart', color:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.RECT_START });\n\t\t$$[$0-1].push({type: 'rectEnd', color:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.RECT_END });\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 35:\n\n\t\t$$[$0-1].unshift({type: 'optStart', optText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.OPT_START});\n\t\t$$[$0-1].push({type: 'optEnd', optText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.OPT_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 36:\n\n\t\t// Alt start\n\t\t$$[$0-1].unshift({type: 'altStart', altText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.ALT_START});\n\t\t// Content in alt is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 37:\n\n\t\t// Parallel start\n\t\t$$[$0-1].unshift({type: 'parStart', parText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.PAR_START});\n\t\t// Content in par is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 38:\n\n\t\t// critical start\n\t\t$$[$0-1].unshift({type: 'criticalStart', criticalText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.CRITICAL_START});\n\t\t// Content in critical is already in $$[$0-1]\n\t\t// critical end\n\t\t$$[$0-1].push({type: 'criticalEnd', signalType: yy.LINETYPE.CRITICAL_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 39:\n\n\t\t$$[$0-1].unshift({type: 'breakStart', breakText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.BREAK_START});\n\t\t$$[$0-1].push({type: 'breakEnd', optText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.BREAK_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 42:\n this.$ = $$[$0-3].concat([{type: 'option', optionText:yy.parseMessage($$[$0-1]), signalType: yy.LINETYPE.CRITICAL_OPTION}, $$[$0]]); \nbreak;\ncase 44:\n this.$ = $$[$0-3].concat([{type: 'and', parText:yy.parseMessage($$[$0-1]), signalType: yy.LINETYPE.PAR_AND}, $$[$0]]); \nbreak;\ncase 46:\n this.$ = $$[$0-3].concat([{type: 'else', altText:yy.parseMessage($$[$0-1]), signalType: yy.LINETYPE.ALT_ELSE}, $$[$0]]); \nbreak;\ncase 47:\n\n\t\tthis.$ = [$$[$0-1], {type:'addNote', placement:$$[$0-2], actor:$$[$0-1].actor, text:$$[$0]}];\nbreak;\ncase 48:\n\n\t\t// Coerce actor_pair into a [to, from, ...] array\n\t\t$$[$0-2] = [].concat($$[$0-1], $$[$0-1]).slice(0, 2);\n\t\t$$[$0-2][0] = $$[$0-2][0].actor;\n\t\t$$[$0-2][1] = $$[$0-2][1].actor;\n\t\tthis.$ = [$$[$0-1], {type:'addNote', placement:yy.PLACEMENT.OVER, actor:$$[$0-2].slice(0, 2), text:$$[$0]}];\nbreak;\ncase 49:\n\n\t\tthis.$ = [$$[$0-1], {type:'addLinks', actor:$$[$0-1].actor, text:$$[$0]}];\n  \nbreak;\ncase 50:\n\n\t\tthis.$ = [$$[$0-1], {type:'addALink', actor:$$[$0-1].actor, text:$$[$0]}];\n  \nbreak;\ncase 51:\n\n\t\tthis.$ = [$$[$0-1], {type:'addProperties', actor:$$[$0-1].actor, text:$$[$0]}];\n  \nbreak;\ncase 52:\n\n\t\tthis.$ = [$$[$0-1], {type:'addDetails', actor:$$[$0-1].actor, text:$$[$0]}];\n  \nbreak;\ncase 55:\n this.$ = [$$[$0-2], $$[$0]]; \nbreak;\ncase 56:\n this.$ = $$[$0]; \nbreak;\ncase 57:\n this.$ = yy.PLACEMENT.LEFTOF; \nbreak;\ncase 58:\n this.$ = yy.PLACEMENT.RIGHTOF; \nbreak;\ncase 59:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0]},\n\t              {type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1]}\n\t             ]\nbreak;\ncase 60:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0]},\n\t             {type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-4]}\n\t             ]\nbreak;\ncase 61:\n this.$ = [$$[$0-3],$$[$0-1],{type: 'addMessage', from:$$[$0-3].actor, to:$$[$0-1].actor, signalType:$$[$0-2], msg:$$[$0]}]\nbreak;\ncase 62:\nthis.$={ type: 'addParticipant', actor:$$[$0]}\nbreak;\ncase 63:\n this.$ = yy.LINETYPE.SOLID_OPEN; \nbreak;\ncase 64:\n this.$ = yy.LINETYPE.DOTTED_OPEN; \nbreak;\ncase 65:\n this.$ = yy.LINETYPE.SOLID; \nbreak;\ncase 66:\n this.$ = yy.LINETYPE.DOTTED; \nbreak;\ncase 67:\n this.$ = yy.LINETYPE.SOLID_CROSS; \nbreak;\ncase 68:\n this.$ = yy.LINETYPE.DOTTED_CROSS; \nbreak;\ncase 69:\n this.$ = yy.LINETYPE.SOLID_POINT; \nbreak;\ncase 70:\n this.$ = yy.LINETYPE.DOTTED_POINT; \nbreak;\ncase 71:\nthis.$ = yy.parseMessage($$[$0].trim().substring(1)) \nbreak;\ncase 72:\n yy.parseDirective('%%{', 'open_directive'); \nbreak;\ncase 73:\n yy.parseDirective($$[$0], 'type_directive'); \nbreak;\ncase 74:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"'); yy.parseDirective($$[$0], 'arg_directive'); \nbreak;\ncase 75:\n yy.parseDirective('}%%', 'close_directive', 'sequence'); \nbreak;\n}\n},\ntable: [{3:1,4:$V0,5:$V1,6:4,7:$V2,11:6,79:$V3},{1:[3]},{3:8,4:$V0,5:$V1,6:4,7:$V2,11:6,79:$V3},{3:9,4:$V0,5:$V1,6:4,7:$V2,11:6,79:$V3},{3:10,4:$V0,5:$V1,6:4,7:$V2,11:6,79:$V3},o([1,4,5,16,20,22,25,26,32,33,34,36,38,39,41,42,43,45,47,49,53,58,59,60,61,69,79],$V4,{8:11}),{12:12,80:[1,13]},{80:[2,72]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:$V5,5:$V6,6:41,9:14,10:16,11:6,16:$V7,17:42,20:$V8,21:20,22:$V9,25:$Va,26:$Vb,27:24,28:25,29:26,30:27,31:28,32:$Vc,33:$Vd,34:$Ve,36:$Vf,38:$Vg,39:$Vh,41:$Vi,42:$Vj,43:$Vk,45:$Vl,47:$Vm,49:$Vn,53:$Vo,58:$Vp,59:$Vq,60:$Vr,61:$Vs,69:$Vt,79:$V3},{13:49,14:[1,50],82:$Vu},o([14,82],[2,73]),o($Vv,[2,6]),{6:41,10:52,11:6,16:$V7,17:42,20:$V8,21:20,22:$V9,25:$Va,26:$Vb,27:24,28:25,29:26,30:27,31:28,32:$Vc,33:$Vd,34:$Ve,36:$Vf,38:$Vg,39:$Vh,41:$Vi,42:$Vj,43:$Vk,45:$Vl,47:$Vm,49:$Vn,53:$Vo,58:$Vp,59:$Vq,60:$Vr,61:$Vs,69:$Vt,79:$V3},o($Vv,[2,8]),o($Vv,[2,9]),{17:53,69:$Vt},{17:54,69:$Vt},{5:[1,55]},{5:[1,58],23:[1,56],24:[1,57]},{17:59,69:$Vt},{17:60,69:$Vt},{5:[1,61]},{5:[1,62]},{5:[1,63]},{5:[1,64]},{5:[1,65]},o($Vv,[2,28]),o($Vv,[2,29]),{35:[1,66]},{37:[1,67]},o($Vv,[2,32]),{19:[1,68]},{19:[1,69]},{19:[1,70]},{19:[1,71]},{19:[1,72]},{19:[1,73]},{19:[1,74]},o($Vv,[2,40]),{66:75,70:[1,76],71:[1,77],72:[1,78],73:[1,79],74:[1,80],75:[1,81],76:[1,82],77:[1,83]},{54:84,56:[1,85],64:[1,86],65:[1,87]},{17:88,69:$Vt},{17:89,69:$Vt},{17:90,69:$Vt},{17:91,69:$Vt},o([5,18,63,70,71,72,73,74,75,76,77,78],[2,62]),{5:[1,92]},{15:93,81:[1,94]},{5:[2,75]},o($Vv,[2,7]),{5:[1,96],18:[1,95]},{5:[1,98],18:[1,97]},o($Vv,[2,16]),{5:[1,100],23:[1,99]},{5:[1,101]},o($Vv,[2,20]),{5:[1,102]},{5:[1,103]},o($Vv,[2,23]),o($Vv,[2,24]),o($Vv,[2,25]),o($Vv,[2,26]),o($Vv,[2,27]),o($Vv,[2,30]),o($Vv,[2,31]),o($Vw,$V4,{8:104}),o($Vw,$V4,{8:105}),o($Vw,$V4,{8:106}),o($Vx,$V4,{44:107,8:108}),o($Vy,$V4,{46:109,8:110}),o($Vz,$V4,{48:111,8:112}),o($Vw,$V4,{8:113}),{17:116,67:[1,114],68:[1,115],69:$Vt},o($VA,[2,63]),o($VA,[2,64]),o($VA,[2,65]),o($VA,[2,66]),o($VA,[2,67]),o($VA,[2,68]),o($VA,[2,69]),o($VA,[2,70]),{17:117,69:$Vt},{17:119,57:118,69:$Vt},{69:[2,57]},{69:[2,58]},{55:120,78:$VB},{55:122,78:$VB},{55:123,78:$VB},{55:124,78:$VB},o($VC,[2,10]),{13:125,82:$Vu},{82:[2,74]},{19:[1,126]},o($Vv,[2,13]),{19:[1,127]},o($Vv,[2,15]),{5:[1,128]},o($Vv,[2,18]),o($Vv,[2,19]),o($Vv,[2,21]),o($Vv,[2,22]),{4:$V5,5:$V6,6:41,9:14,10:16,11:6,16:$V7,17:42,20:$V8,21:20,22:$V9,25:$Va,26:$Vb,27:24,28:25,29:26,30:27,31:28,32:$Vc,33:$Vd,34:$Ve,36:$Vf,38:$Vg,39:$Vh,40:[1,129],41:$Vi,42:$Vj,43:$Vk,45:$Vl,47:$Vm,49:$Vn,53:$Vo,58:$Vp,59:$Vq,60:$Vr,61:$Vs,69:$Vt,79:$V3},{4:$V5,5:$V6,6:41,9:14,10:16,11:6,16:$V7,17:42,20:$V8,21:20,22:$V9,25:$Va,26:$Vb,27:24,28:25,29:26,30:27,31:28,32:$Vc,33:$Vd,34:$Ve,36:$Vf,38:$Vg,39:$Vh,40:[1,130],41:$Vi,42:$Vj,43:$Vk,45:$Vl,47:$Vm,49:$Vn,53:$Vo,58:$Vp,59:$Vq,60:$Vr,61:$Vs,69:$Vt,79:$V3},{4:$V5,5:$V6,6:41,9:14,10:16,11:6,16:$V7,17:42,20:$V8,21:20,22:$V9,25:$Va,26:$Vb,27:24,28:25,29:26,30:27,31:28,32:$Vc,33:$Vd,34:$Ve,36:$Vf,38:$Vg,39:$Vh,40:[1,131],41:$Vi,42:$Vj,43:$Vk,45:$Vl,47:$Vm,49:$Vn,53:$Vo,58:$Vp,59:$Vq,60:$Vr,61:$Vs,69:$Vt,79:$V3},{40:[1,132]},{4:$V5,5:$V6,6:41,9:14,10:16,11:6,16:$V7,17:42,20:$V8,21:20,22:$V9,25:$Va,26:$Vb,27:24,28:25,29:26,30:27,31:28,32:$Vc,33:$Vd,34:$Ve,36:$Vf,38:$Vg,39:$Vh,40:[2,45],41:$Vi,42:$Vj,43:$Vk,45:$Vl,47:$Vm,49:$Vn,52:[1,133],53:$Vo,58:$Vp,59:$Vq,60:$Vr,61:$Vs,69:$Vt,79:$V3},{40:[1,134]},{4:$V5,5:$V6,6:41,9:14,10:16,11:6,16:$V7,17:42,20:$V8,21:20,22:$V9,25:$Va,26:$Vb,27:24,28:25,29:26,30:27,31:28,32:$Vc,33:$Vd,34:$Ve,36:$Vf,38:$Vg,39:$Vh,40:[2,43],41:$Vi,42:$Vj,43:$Vk,45:$Vl,47:$Vm,49:$Vn,51:[1,135],53:$Vo,58:$Vp,59:$Vq,60:$Vr,61:$Vs,69:$Vt,79:$V3},{40:[1,136]},{4:$V5,5:$V6,6:41,9:14,10:16,11:6,16:$V7,17:42,20:$V8,21:20,22:$V9,25:$Va,26:$Vb,27:24,28:25,29:26,30:27,31:28,32:$Vc,33:$Vd,34:$Ve,36:$Vf,38:$Vg,39:$Vh,40:[2,41],41:$Vi,42:$Vj,43:$Vk,45:$Vl,47:$Vm,49:$Vn,50:[1,137],53:$Vo,58:$Vp,59:$Vq,60:$Vr,61:$Vs,69:$Vt,79:$V3},{4:$V5,5:$V6,6:41,9:14,10:16,11:6,16:$V7,17:42,20:$V8,21:20,22:$V9,25:$Va,26:$Vb,27:24,28:25,29:26,30:27,31:28,32:$Vc,33:$Vd,34:$Ve,36:$Vf,38:$Vg,39:$Vh,40:[1,138],41:$Vi,42:$Vj,43:$Vk,45:$Vl,47:$Vm,49:$Vn,53:$Vo,58:$Vp,59:$Vq,60:$Vr,61:$Vs,69:$Vt,79:$V3},{17:139,69:$Vt},{17:140,69:$Vt},{55:141,78:$VB},{55:142,78:$VB},{55:143,78:$VB},{63:[1,144],78:[2,56]},{5:[2,49]},{5:[2,71]},{5:[2,50]},{5:[2,51]},{5:[2,52]},{5:[1,145]},{5:[1,146]},{5:[1,147]},o($Vv,[2,17]),o($Vv,[2,33]),o($Vv,[2,34]),o($Vv,[2,35]),o($Vv,[2,36]),{19:[1,148]},o($Vv,[2,37]),{19:[1,149]},o($Vv,[2,38]),{19:[1,150]},o($Vv,[2,39]),{55:151,78:$VB},{55:152,78:$VB},{5:[2,61]},{5:[2,47]},{5:[2,48]},{17:153,69:$Vt},o($VC,[2,11]),o($Vv,[2,12]),o($Vv,[2,14]),o($Vx,$V4,{8:108,44:154}),o($Vy,$V4,{8:110,46:155}),o($Vz,$V4,{8:112,48:156}),{5:[2,59]},{5:[2,60]},{78:[2,55]},{40:[2,46]},{40:[2,44]},{40:[2,42]}],\ndefaultActions: {7:[2,72],8:[2,1],9:[2,2],10:[2,3],51:[2,75],86:[2,57],87:[2,58],94:[2,74],120:[2,49],121:[2,71],122:[2,50],123:[2,51],124:[2,52],141:[2,61],142:[2,47],143:[2,48],151:[2,59],152:[2,60],153:[2,55],154:[2,46],155:[2,44],156:[2,42]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            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).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin('open_directive'); return 79; \nbreak;\ncase 1: this.begin('type_directive'); return 80; \nbreak;\ncase 2: this.popState(); this.begin('arg_directive'); return 14; \nbreak;\ncase 3: this.popState(); this.popState(); return 82; \nbreak;\ncase 4:return 81;\nbreak;\ncase 5:return 5;\nbreak;\ncase 6:/* skip all whitespace */\nbreak;\ncase 7:/* skip same-line whitespace */\nbreak;\ncase 8:/* skip comments */\nbreak;\ncase 9:/* skip comments */\nbreak;\ncase 10:/* skip comments */\nbreak;\ncase 11:return 23;\nbreak;\ncase 12: this.begin('ID'); return 16; \nbreak;\ncase 13: this.begin('ID'); return 20; \nbreak;\ncase 14: yy_.yytext = yy_.yytext.trim(); this.begin('ALIAS'); return 69; \nbreak;\ncase 15: this.popState(); this.popState(); this.begin('LINE'); return 18; \nbreak;\ncase 16: this.popState(); this.popState(); return 5; \nbreak;\ncase 17: this.begin('LINE'); return 39; \nbreak;\ncase 18: this.begin('LINE'); return 41; \nbreak;\ncase 19: this.begin('LINE'); return 42; \nbreak;\ncase 20: this.begin('LINE'); return 43; \nbreak;\ncase 21: this.begin('LINE'); return 52; \nbreak;\ncase 22: this.begin('LINE'); return 45; \nbreak;\ncase 23: this.begin('LINE'); return 51; \nbreak;\ncase 24: this.begin('LINE'); return 47; \nbreak;\ncase 25: this.begin('LINE'); return 50; \nbreak;\ncase 26: this.begin('LINE'); return 49; \nbreak;\ncase 27: this.popState(); return 19; \nbreak;\ncase 28:return 40;\nbreak;\ncase 29:return 64;\nbreak;\ncase 30:return 65;\nbreak;\ncase 31:return 58;\nbreak;\ncase 32:return 59;\nbreak;\ncase 33:return 60;\nbreak;\ncase 34:return 61;\nbreak;\ncase 35:return 56;\nbreak;\ncase 36:return 53;\nbreak;\ncase 37: this.begin('ID'); return 25; \nbreak;\ncase 38: this.begin('ID'); return 26; \nbreak;\ncase 39:return 32;\nbreak;\ncase 40:return 33;\nbreak;\ncase 41: this.begin(\"acc_title\");return 34; \nbreak;\ncase 42: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 43: this.begin(\"acc_descr\");return 36; \nbreak;\ncase 44: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 45: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 46: this.popState(); \nbreak;\ncase 47:return \"acc_descr_multiline_value\";\nbreak;\ncase 48:return 7;\nbreak;\ncase 49:return 22;\nbreak;\ncase 50:return 24;\nbreak;\ncase 51:return 63;\nbreak;\ncase 52:return 5;\nbreak;\ncase 53: yy_.yytext = yy_.yytext.trim(); return 69; \nbreak;\ncase 54:return 72;\nbreak;\ncase 55:return 73;\nbreak;\ncase 56:return 70;\nbreak;\ncase 57:return 71;\nbreak;\ncase 58:return 74;\nbreak;\ncase 59:return 75;\nbreak;\ncase 60:return 76;\nbreak;\ncase 61:return 77;\nbreak;\ncase 62:return 78;\nbreak;\ncase 63:return 67;\nbreak;\ncase 64:return 68;\nbreak;\ncase 65:return 5;\nbreak;\ncase 66:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:%%\\{)/i,/^(?:((?:(?!\\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\\}%%)/i,/^(?:((?:(?!\\}%%).|\\n)*))/i,/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:((?!\\n)\\s)+)/i,/^(?:#[^\\n]*)/i,/^(?:%(?!\\{)[^\\n]*)/i,/^(?:[^\\}]%%[^\\n]*)/i,/^(?:[0-9]+(?=[ \\n]+))/i,/^(?:participant\\b)/i,/^(?:actor\\b)/i,/^(?:[^\\->:\\n,;]+?(?=((?!\\n)\\s)+as(?!\\n)\\s|[#\\n;]|$))/i,/^(?:as\\b)/i,/^(?:(?:))/i,/^(?:loop\\b)/i,/^(?:rect\\b)/i,/^(?:opt\\b)/i,/^(?:alt\\b)/i,/^(?:else\\b)/i,/^(?:par\\b)/i,/^(?:and\\b)/i,/^(?:critical\\b)/i,/^(?:option\\b)/i,/^(?:break\\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\\n;]*)/i,/^(?:end\\b)/i,/^(?:left of\\b)/i,/^(?:right of\\b)/i,/^(?:links\\b)/i,/^(?:link\\b)/i,/^(?:properties\\b)/i,/^(?:details\\b)/i,/^(?:over\\b)/i,/^(?:note\\b)/i,/^(?:activate\\b)/i,/^(?:deactivate\\b)/i,/^(?:title\\s[^#\\n;]+)/i,/^(?:title:\\s[^#\\n;]+)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:sequenceDiagram\\b)/i,/^(?:autonumber\\b)/i,/^(?:off\\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\\+\\->:\\n,;]+((?!(-x|--x|-\\)|--\\)))[\\-]*[^\\+\\->:\\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\\)])/i,/^(?:--[\\)])/i,/^(?::(?:(?:no)?wrap)?[^#\\n;]+)/i,/^(?:\\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[46,47],\"inclusive\":false},\"acc_descr\":{\"rules\":[44],\"inclusive\":false},\"acc_title\":{\"rules\":[42],\"inclusive\":false},\"open_directive\":{\"rules\":[1,8],\"inclusive\":false},\"type_directive\":{\"rules\":[2,3,8],\"inclusive\":false},\"arg_directive\":{\"rules\":[3,4,8],\"inclusive\":false},\"ID\":{\"rules\":[7,8,14],\"inclusive\":false},\"ALIAS\":{\"rules\":[7,8,15,16],\"inclusive\":false},\"LINE\":{\"rules\":[7,8,27],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,5,6,8,9,10,11,12,13,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,45,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n    if (!args[1]) {\n        console.log('Usage: '+args[0]+' FILE');\n        process.exit(1);\n    }\n    var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n    return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n  exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,2],$V1=[1,3],$V2=[1,5],$V3=[1,7],$V4=[2,5],$V5=[1,15],$V6=[1,17],$V7=[1,19],$V8=[1,20],$V9=[1,21],$Va=[1,22],$Vb=[1,33],$Vc=[1,23],$Vd=[1,24],$Ve=[1,25],$Vf=[1,26],$Vg=[1,27],$Vh=[1,30],$Vi=[1,31],$Vj=[1,32],$Vk=[1,35],$Vl=[1,36],$Vm=[1,37],$Vn=[1,38],$Vo=[1,34],$Vp=[1,41],$Vq=[1,4,5,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],$Vr=[1,4,5,12,13,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],$Vs=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],$Vt=[4,5,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"SPACE\":4,\"NL\":5,\"directive\":6,\"SD\":7,\"document\":8,\"line\":9,\"statement\":10,\"idStatement\":11,\"DESCR\":12,\"-->\":13,\"HIDE_EMPTY\":14,\"scale\":15,\"WIDTH\":16,\"COMPOSIT_STATE\":17,\"STRUCT_START\":18,\"STRUCT_STOP\":19,\"STATE_DESCR\":20,\"AS\":21,\"ID\":22,\"FORK\":23,\"JOIN\":24,\"CHOICE\":25,\"CONCURRENT\":26,\"note\":27,\"notePosition\":28,\"NOTE_TEXT\":29,\"direction\":30,\"acc_title\":31,\"acc_title_value\":32,\"acc_descr\":33,\"acc_descr_value\":34,\"acc_descr_multiline_value\":35,\"openDirective\":36,\"typeDirective\":37,\"closeDirective\":38,\":\":39,\"argDirective\":40,\"direction_tb\":41,\"direction_bt\":42,\"direction_rl\":43,\"direction_lr\":44,\"eol\":45,\";\":46,\"EDGE_STATE\":47,\"left_of\":48,\"right_of\":49,\"open_directive\":50,\"type_directive\":51,\"arg_directive\":52,\"close_directive\":53,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"SPACE\",5:\"NL\",7:\"SD\",12:\"DESCR\",13:\"-->\",14:\"HIDE_EMPTY\",15:\"scale\",16:\"WIDTH\",17:\"COMPOSIT_STATE\",18:\"STRUCT_START\",19:\"STRUCT_STOP\",20:\"STATE_DESCR\",21:\"AS\",22:\"ID\",23:\"FORK\",24:\"JOIN\",25:\"CHOICE\",26:\"CONCURRENT\",27:\"note\",29:\"NOTE_TEXT\",31:\"acc_title\",32:\"acc_title_value\",33:\"acc_descr\",34:\"acc_descr_value\",35:\"acc_descr_multiline_value\",39:\":\",41:\"direction_tb\",42:\"direction_bt\",43:\"direction_rl\",44:\"direction_lr\",46:\";\",47:\"EDGE_STATE\",48:\"left_of\",49:\"right_of\",50:\"open_directive\",51:\"type_directive\",52:\"arg_directive\",53:\"close_directive\"},\nproductions_: [0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[10,2],[10,2],[10,1],[6,3],[6,5],[30,1],[30,1],[30,1],[30,1],[45,1],[45,1],[11,1],[11,1],[28,1],[28,1],[36,1],[37,1],[40,1],[38,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 4:\n /*console.warn('Root document', $$[$0]);*/ yy.setRootDoc($$[$0]);return $$[$0]; \nbreak;\ncase 5:\n this.$ = [] \nbreak;\ncase 6:\n\n        if($$[$0]!='nl'){\n            $$[$0-1].push($$[$0]);this.$ = $$[$0-1]\n        }\n        // console.warn('Got document',$$[$0-1], $$[$0]);\n    \nbreak;\ncase 7: case 8:\n this.$ = $$[$0] \nbreak;\ncase 9:\n this.$='nl';\nbreak;\ncase 10:\n /*console.warn('got id and descr', $$[$0]);*/this.$={ stmt: 'state', id: $$[$0], type: 'default', description: ''};\nbreak;\ncase 11:\n /*console.warn('got id and descr', $$[$0-1], $$[$0].trim());*/this.$={ stmt: 'state', id: $$[$0-1], type: 'default', description: yy.trimColon($$[$0])};\nbreak;\ncase 12:\n\n        /*console.warn('got id', $$[$0-2]);yy.addRelation($$[$0-2], $$[$0]);*/\n        this.$={ stmt: 'relation', state1: { stmt: 'state', id: $$[$0-2], type: 'default', description: '' }, state2:{ stmt: 'state', id: $$[$0] ,type: 'default', description: ''}};\n    \nbreak;\ncase 13:\n\n        /*yy.addRelation($$[$0-3], $$[$0-1], $$[$0].substr(1).trim());*/\n        this.$={ stmt: 'relation', state1: { stmt: 'state', id: $$[$0-3], type: 'default', description: '' }, state2:{ stmt: 'state', id: $$[$0-1] ,type: 'default', description: ''}, description: $$[$0].substr(1).trim()};\n    \nbreak;\ncase 17:\n\n        /* console.warn('Adding document for state without id ', $$[$0-3]);*/\n        this.$={ stmt: 'state', id: $$[$0-3], type: 'default', description: '', doc: $$[$0-1] }\n    \nbreak;\ncase 18:\n\n        var id=$$[$0];\n        var description = $$[$0-2].trim();\n        if($$[$0].match(':')){\n            var parts = $$[$0].split(':');\n            id=parts[0];\n            description = [description, parts[1]];\n        }\n        this.$={stmt: 'state', id: id, type: 'default', description: description};\n\n    \nbreak;\ncase 19:\n\n         // console.warn('Adding document for state with id zxzx', $$[$0-3], $$[$0-2], yy.getDirection()); yy.addDocument($$[$0-3]);\n         this.$={ stmt: 'state', id: $$[$0-3], type: 'default', description: $$[$0-5], doc: $$[$0-1] }\n    \nbreak;\ncase 20:\n\n        this.$={ stmt: 'state', id: $$[$0], type: 'fork' }\n    \nbreak;\ncase 21:\n\n        this.$={ stmt: 'state', id: $$[$0], type: 'join' }\n    \nbreak;\ncase 22:\n\n        this.$={ stmt: 'state', id: $$[$0], type: 'choice' }\n    \nbreak;\ncase 23:\n\n        this.$={ stmt: 'state', id: yy.getDividerId(), type: 'divider' }\n    \nbreak;\ncase 24:\n\n        /* console.warn('got NOTE, position: ', $$[$0-2].trim(), 'id = ', $$[$0-1].trim(), 'note: ', $$[$0]);*/\n        this.$={ stmt: 'state', id: $$[$0-1].trim(), note:{position: $$[$0-2].trim(), text: $$[$0].trim()}};\n    \nbreak;\ncase 28:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 29: case 30:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 33:\n yy.setDirection('TB');this.$={stmt:'dir', value:'TB'};\nbreak;\ncase 34:\n yy.setDirection('BT');this.$={stmt:'dir', value:'BT'};\nbreak;\ncase 35:\n yy.setDirection('RL'); this.$={stmt:'dir', value:'RL'};\nbreak;\ncase 36:\n yy.setDirection('LR');this.$={stmt:'dir', value:'LR'};\nbreak;\ncase 39: case 40:\nthis.$=$$[$0];\nbreak;\ncase 43:\n yy.parseDirective('%%{', 'open_directive'); \nbreak;\ncase 44:\n yy.parseDirective($$[$0], 'type_directive'); \nbreak;\ncase 45:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"'); yy.parseDirective($$[$0], 'arg_directive'); \nbreak;\ncase 46:\n yy.parseDirective('}%%', 'close_directive', 'state'); \nbreak;\n}\n},\ntable: [{3:1,4:$V0,5:$V1,6:4,7:$V2,36:6,50:$V3},{1:[3]},{3:8,4:$V0,5:$V1,6:4,7:$V2,36:6,50:$V3},{3:9,4:$V0,5:$V1,6:4,7:$V2,36:6,50:$V3},{3:10,4:$V0,5:$V1,6:4,7:$V2,36:6,50:$V3},o([1,4,5,14,15,17,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],$V4,{8:11}),{37:12,51:[1,13]},{51:[2,43]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:$V5,5:$V6,6:28,9:14,10:16,11:18,14:$V7,15:$V8,17:$V9,20:$Va,22:$Vb,23:$Vc,24:$Vd,25:$Ve,26:$Vf,27:$Vg,30:29,31:$Vh,33:$Vi,35:$Vj,36:6,41:$Vk,42:$Vl,43:$Vm,44:$Vn,47:$Vo,50:$V3},{38:39,39:[1,40],53:$Vp},o([39,53],[2,44]),o($Vq,[2,6]),{6:28,10:42,11:18,14:$V7,15:$V8,17:$V9,20:$Va,22:$Vb,23:$Vc,24:$Vd,25:$Ve,26:$Vf,27:$Vg,30:29,31:$Vh,33:$Vi,35:$Vj,36:6,41:$Vk,42:$Vl,43:$Vm,44:$Vn,47:$Vo,50:$V3},o($Vq,[2,8]),o($Vq,[2,9]),o($Vq,[2,10],{12:[1,43],13:[1,44]}),o($Vq,[2,14]),{16:[1,45]},o($Vq,[2,16],{18:[1,46]}),{21:[1,47]},o($Vq,[2,20]),o($Vq,[2,21]),o($Vq,[2,22]),o($Vq,[2,23]),{28:48,29:[1,49],48:[1,50],49:[1,51]},o($Vq,[2,26]),o($Vq,[2,27]),{32:[1,52]},{34:[1,53]},o($Vq,[2,30]),o($Vr,[2,39]),o($Vr,[2,40]),o($Vq,[2,33]),o($Vq,[2,34]),o($Vq,[2,35]),o($Vq,[2,36]),o($Vs,[2,31]),{40:54,52:[1,55]},o($Vs,[2,46]),o($Vq,[2,7]),o($Vq,[2,11]),{11:56,22:$Vb,47:$Vo},o($Vq,[2,15]),o($Vt,$V4,{8:57}),{22:[1,58]},{22:[1,59]},{21:[1,60]},{22:[2,41]},{22:[2,42]},o($Vq,[2,28]),o($Vq,[2,29]),{38:61,53:$Vp},{53:[2,45]},o($Vq,[2,12],{12:[1,62]}),{4:$V5,5:$V6,6:28,9:14,10:16,11:18,14:$V7,15:$V8,17:$V9,19:[1,63],20:$Va,22:$Vb,23:$Vc,24:$Vd,25:$Ve,26:$Vf,27:$Vg,30:29,31:$Vh,33:$Vi,35:$Vj,36:6,41:$Vk,42:$Vl,43:$Vm,44:$Vn,47:$Vo,50:$V3},o($Vq,[2,18],{18:[1,64]}),{29:[1,65]},{22:[1,66]},o($Vs,[2,32]),o($Vq,[2,13]),o($Vq,[2,17]),o($Vt,$V4,{8:67}),o($Vq,[2,24]),o($Vq,[2,25]),{4:$V5,5:$V6,6:28,9:14,10:16,11:18,14:$V7,15:$V8,17:$V9,19:[1,68],20:$Va,22:$Vb,23:$Vc,24:$Vd,25:$Ve,26:$Vf,27:$Vg,30:29,31:$Vh,33:$Vi,35:$Vj,36:6,41:$Vk,42:$Vl,43:$Vm,44:$Vn,47:$Vo,50:$V3},o($Vq,[2,19])],\ndefaultActions: {7:[2,43],8:[2,1],9:[2,2],10:[2,3],50:[2,41],51:[2,42],55:[2,45]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            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).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 41;\nbreak;\ncase 1:return 42;\nbreak;\ncase 2:return 43;\nbreak;\ncase 3:return 44;\nbreak;\ncase 4: this.begin('open_directive'); return 50; \nbreak;\ncase 5: this.begin('type_directive'); return 51; \nbreak;\ncase 6: this.popState(); this.begin('arg_directive'); return 39; \nbreak;\ncase 7: this.popState(); this.popState(); return 53; \nbreak;\ncase 8:return 52;\nbreak;\ncase 9:/* skip comments */\nbreak;\ncase 10:/* skip comments */{ /*console.log('Crap after close');*/ }\nbreak;\ncase 11:return 5;\nbreak;\ncase 12:/* skip all whitespace */\nbreak;\ncase 13:/* skip same-line whitespace */\nbreak;\ncase 14:/* skip comments */\nbreak;\ncase 15:/* skip comments */\nbreak;\ncase 16: this.pushState('SCALE'); /* console.log('Got scale', yy_.yytext);*/ return 15; \nbreak;\ncase 17:return 16;\nbreak;\ncase 18:this.popState();\nbreak;\ncase 19: this.begin(\"acc_title\");return 31; \nbreak;\ncase 20: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 21: this.begin(\"acc_descr\");return 33; \nbreak;\ncase 22: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 23: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 24: this.popState(); \nbreak;\ncase 25:return \"acc_descr_multiline_value\";\nbreak;\ncase 26: /*console.log('Starting STATE zxzx'+yy.getDirection());*/this.pushState('STATE'); \nbreak;\ncase 27:this.popState();yy_.yytext=yy_.yytext.slice(0,-8).trim(); /*console.warn('Fork Fork: ',yy_.yytext);*/return 23;\nbreak;\ncase 28:this.popState();yy_.yytext=yy_.yytext.slice(0,-8).trim();/*console.warn('Fork Join: ',yy_.yytext);*/return 24;\nbreak;\ncase 29:this.popState();yy_.yytext=yy_.yytext.slice(0,-10).trim();/*console.warn('Fork Join: ',yy_.yytext);*/return 25;\nbreak;\ncase 30:this.popState();yy_.yytext=yy_.yytext.slice(0,-8).trim();/*console.warn('Fork Fork: ',yy_.yytext);*/return 23;\nbreak;\ncase 31:this.popState();yy_.yytext=yy_.yytext.slice(0,-8).trim();/*console.warn('Fork Join: ',yy_.yytext);*/return 24;\nbreak;\ncase 32:this.popState();yy_.yytext=yy_.yytext.slice(0,-10).trim();/*console.warn('Fork Join: ',yy_.yytext);*/return 25;\nbreak;\ncase 33: return 41;\nbreak;\ncase 34: return 42;\nbreak;\ncase 35: return 43;\nbreak;\ncase 36: return 44;\nbreak;\ncase 37: /*console.log('Starting STATE_STRING zxzx');*/this.begin(\"STATE_STRING\");\nbreak;\ncase 38:this.popState();this.pushState('STATE_ID');return \"AS\";\nbreak;\ncase 39:this.popState();/* console.log('STATE_ID', yy_.yytext);*/return \"ID\";\nbreak;\ncase 40:this.popState();\nbreak;\ncase 41: /*console.log('Long description:', yy_.yytext);*/return \"STATE_DESCR\";\nbreak;\ncase 42:/*console.log('COMPOSIT_STATE', yy_.yytext);*/return 17;\nbreak;\ncase 43:this.popState();\nbreak;\ncase 44:this.popState();this.pushState('struct'); /*console.log('begin struct', yy_.yytext);*/return 18;\nbreak;\ncase 45: /*console.log('Ending struct');*/ this.popState(); return 19;\nbreak;\ncase 46:/* nothing */\nbreak;\ncase 47: this.begin('NOTE'); return 27; \nbreak;\ncase 48: this.popState();this.pushState('NOTE_ID');return 48;\nbreak;\ncase 49: this.popState();this.pushState('NOTE_ID');return 49;\nbreak;\ncase 50: this.popState();this.pushState('FLOATING_NOTE');\nbreak;\ncase 51:this.popState();this.pushState('FLOATING_NOTE_ID');return \"AS\";\nbreak;\ncase 52:/**/\nbreak;\ncase 53: /*console.log('Floating note text: ', yy_.yytext);*/return \"NOTE_TEXT\";\nbreak;\ncase 54:this.popState();/*console.log('Floating note ID', yy_.yytext);*/return \"ID\";\nbreak;\ncase 55: this.popState();this.pushState('NOTE_TEXT');/*console.log('Got ID for note', yy_.yytext);*/return 22;\nbreak;\ncase 56: this.popState();/*console.log('Got NOTE_TEXT for note',yy_.yytext);*/yy_.yytext = yy_.yytext.substr(2).trim();return 29;\nbreak;\ncase 57: this.popState();/*console.log('Got NOTE_TEXT for note',yy_.yytext);*/yy_.yytext = yy_.yytext.slice(0,-8).trim();return 29;\nbreak;\ncase 58: /*console.log('Got state diagram', yy_.yytext,'#');*/return 7; \nbreak;\ncase 59: /*console.log('Got state diagram', yy_.yytext,'#');*/return 7; \nbreak;\ncase 60: /*console.log('HIDE_EMPTY', yy_.yytext,'#');*/return 14; \nbreak;\ncase 61: /*console.log('EDGE_STATE=',yy_.yytext);*/ return 47;\nbreak;\ncase 62: /*console.log('=>ID=',yy_.yytext);*/ return 22;\nbreak;\ncase 63: yy_.yytext = yy_.yytext.trim(); /*console.log('Descr = ', yy_.yytext);*/ return 12; \nbreak;\ncase 64:return 13;\nbreak;\ncase 65:return 26;\nbreak;\ncase 66:return 5;\nbreak;\ncase 67:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:.*direction\\s+TB[^\\n]*)/i,/^(?:.*direction\\s+BT[^\\n]*)/i,/^(?:.*direction\\s+RL[^\\n]*)/i,/^(?:.*direction\\s+LR[^\\n]*)/i,/^(?:%%\\{)/i,/^(?:((?:(?!\\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\\}%%)/i,/^(?:((?:(?!\\}%%).|\\n)*))/i,/^(?:%%(?!\\{)[^\\n]*)/i,/^(?:[^\\}]%%[^\\n]*)/i,/^(?:[\\n]+)/i,/^(?:[\\s]+)/i,/^(?:((?!\\n)\\s)+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:scale\\s+)/i,/^(?:\\d+)/i,/^(?:\\s+width\\b)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:state\\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/i,/^(?:.*\\[\\[fork\\]\\])/i,/^(?:.*\\[\\[join\\]\\])/i,/^(?:.*\\[\\[choice\\]\\])/i,/^(?:.*direction\\s+TB[^\\n]*)/i,/^(?:.*direction\\s+BT[^\\n]*)/i,/^(?:.*direction\\s+RL[^\\n]*)/i,/^(?:.*direction\\s+LR[^\\n]*)/i,/^(?:[\"])/i,/^(?:\\s*as\\s+)/i,/^(?:[^\\n\\{]*)/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:[^\\n\\s\\{]+)/i,/^(?:\\n)/i,/^(?:\\{)/i,/^(?:\\})/i,/^(?:[\\n])/i,/^(?:note\\s+)/i,/^(?:left of\\b)/i,/^(?:right of\\b)/i,/^(?:\")/i,/^(?:\\s*as\\s*)/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:[^\\n]*)/i,/^(?:\\s*[^:\\n\\s\\-]+)/i,/^(?:\\s*:[^:\\n;]+)/i,/^(?:[\\s\\S]*?end note\\b)/i,/^(?:stateDiagram\\s+)/i,/^(?:stateDiagram-v2\\s+)/i,/^(?:hide empty description\\b)/i,/^(?:\\[\\*\\])/i,/^(?:[^:\\n\\s\\-\\{]+)/i,/^(?:\\s*:[^:\\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"LINE\":{\"rules\":[13,14],\"inclusive\":false},\"close_directive\":{\"rules\":[13,14],\"inclusive\":false},\"arg_directive\":{\"rules\":[7,8,13,14],\"inclusive\":false},\"type_directive\":{\"rules\":[6,7,13,14],\"inclusive\":false},\"open_directive\":{\"rules\":[5,13,14],\"inclusive\":false},\"struct\":{\"rules\":[13,14,26,33,34,35,36,45,46,47,61,62,63,64,65],\"inclusive\":false},\"FLOATING_NOTE_ID\":{\"rules\":[54],\"inclusive\":false},\"FLOATING_NOTE\":{\"rules\":[51,52,53],\"inclusive\":false},\"NOTE_TEXT\":{\"rules\":[56,57],\"inclusive\":false},\"NOTE_ID\":{\"rules\":[55],\"inclusive\":false},\"NOTE\":{\"rules\":[48,49,50],\"inclusive\":false},\"acc_descr_multiline\":{\"rules\":[24,25],\"inclusive\":false},\"acc_descr\":{\"rules\":[22],\"inclusive\":false},\"acc_title\":{\"rules\":[20],\"inclusive\":false},\"SCALE\":{\"rules\":[17,18],\"inclusive\":false},\"ALIAS\":{\"rules\":[],\"inclusive\":false},\"STATE_ID\":{\"rules\":[39],\"inclusive\":false},\"STATE_STRING\":{\"rules\":[40,41],\"inclusive\":false},\"FORK_STATE\":{\"rules\":[],\"inclusive\":false},\"STATE\":{\"rules\":[13,14,27,28,29,30,31,32,37,38,42,43,44],\"inclusive\":false},\"ID\":{\"rules\":[13,14],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,9,10,11,12,14,15,16,19,21,23,26,44,47,58,59,60,61,62,63,64,66,67],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n    if (!args[1]) {\n        console.log('Usage: '+args[0]+' FILE');\n        process.exit(1);\n    }\n    var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n    return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n  exports.main(process.argv.slice(1));\n}\n}","/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,2],$V1=[1,5],$V2=[6,9,11,17,18,20,22,23,24,26],$V3=[1,15],$V4=[1,16],$V5=[1,17],$V6=[1,18],$V7=[1,19],$V8=[1,20],$V9=[1,24],$Va=[4,6,9,11,17,18,20,22,23,24,26];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"journey\":4,\"document\":5,\"EOF\":6,\"directive\":7,\"line\":8,\"SPACE\":9,\"statement\":10,\"NEWLINE\":11,\"openDirective\":12,\"typeDirective\":13,\"closeDirective\":14,\":\":15,\"argDirective\":16,\"title\":17,\"acc_title\":18,\"acc_title_value\":19,\"acc_descr\":20,\"acc_descr_value\":21,\"acc_descr_multiline_value\":22,\"section\":23,\"taskName\":24,\"taskData\":25,\"open_directive\":26,\"type_directive\":27,\"arg_directive\":28,\"close_directive\":29,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"journey\",6:\"EOF\",9:\"SPACE\",11:\"NEWLINE\",15:\":\",17:\"title\",18:\"acc_title\",19:\"acc_title_value\",20:\"acc_descr\",21:\"acc_descr_value\",22:\"acc_descr_multiline_value\",23:\"section\",24:\"taskName\",25:\"taskData\",26:\"open_directive\",27:\"type_directive\",28:\"arg_directive\",29:\"close_directive\"},\nproductions_: [0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return $$[$0-1]; \nbreak;\ncase 3:\n this.$ = [] \nbreak;\ncase 4:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 5: case 6:\n this.$ = $$[$0] \nbreak;\ncase 7: case 8:\n this.$=[];\nbreak;\ncase 11:\nyy.setDiagramTitle($$[$0].substr(6));this.$=$$[$0].substr(6);\nbreak;\ncase 12:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 13: case 14:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 15:\nyy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8);\nbreak;\ncase 16:\nyy.addTask($$[$0-1], $$[$0]);this.$='task';\nbreak;\ncase 18:\n yy.parseDirective('%%{', 'open_directive'); \nbreak;\ncase 19:\n yy.parseDirective($$[$0], 'type_directive'); \nbreak;\ncase 20:\n $$[$0] = $$[$0].trim().replace(/'/g, '\"'); yy.parseDirective($$[$0], 'arg_directive'); \nbreak;\ncase 21:\n yy.parseDirective('}%%', 'close_directive', 'journey'); \nbreak;\n}\n},\ntable: [{3:1,4:$V0,7:3,12:4,26:$V1},{1:[3]},o($V2,[2,3],{5:6}),{3:7,4:$V0,7:3,12:4,26:$V1},{13:8,27:[1,9]},{27:[2,18]},{6:[1,10],7:21,8:11,9:[1,12],10:13,11:[1,14],12:4,17:$V3,18:$V4,20:$V5,22:$V6,23:$V7,24:$V8,26:$V1},{1:[2,2]},{14:22,15:[1,23],29:$V9},o([15,29],[2,19]),o($V2,[2,8],{1:[2,1]}),o($V2,[2,4]),{7:21,10:25,12:4,17:$V3,18:$V4,20:$V5,22:$V6,23:$V7,24:$V8,26:$V1},o($V2,[2,6]),o($V2,[2,7]),o($V2,[2,11]),{19:[1,26]},{21:[1,27]},o($V2,[2,14]),o($V2,[2,15]),{25:[1,28]},o($V2,[2,17]),{11:[1,29]},{16:30,28:[1,31]},{11:[2,21]},o($V2,[2,5]),o($V2,[2,12]),o($V2,[2,13]),o($V2,[2,16]),o($Va,[2,9]),{14:32,29:$V9},{29:[2,20]},{11:[1,33]},o($Va,[2,10])],\ndefaultActions: {5:[2,18],7:[2,2],24:[2,21],31:[2,20]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\r\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            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).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin('open_directive'); return 26; \nbreak;\ncase 1: this.begin('type_directive'); return 27; \nbreak;\ncase 2: this.popState(); this.begin('arg_directive'); return 15; \nbreak;\ncase 3: this.popState(); this.popState(); return 29; \nbreak;\ncase 4:return 28;\nbreak;\ncase 5:/* skip comments */\nbreak;\ncase 6:/* skip comments */\nbreak;\ncase 7:return 11;\nbreak;\ncase 8:/* skip whitespace */\nbreak;\ncase 9:/* skip comments */\nbreak;\ncase 10:return 4;\nbreak;\ncase 11:return 17;\nbreak;\ncase 12: this.begin(\"acc_title\");return 18; \nbreak;\ncase 13: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 14: this.begin(\"acc_descr\");return 20; \nbreak;\ncase 15: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 16: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 17: this.popState(); \nbreak;\ncase 18:return \"acc_descr_multiline_value\";\nbreak;\ncase 19:return 23;\nbreak;\ncase 20:return 24;\nbreak;\ncase 21:return 25;\nbreak;\ncase 22:return 15;\nbreak;\ncase 23:return 6;\nbreak;\ncase 24:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:%%\\{)/i,/^(?:((?:(?!\\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\\}%%)/i,/^(?:((?:(?!\\}%%).|\\n)*))/i,/^(?:%(?!\\{)[^\\n]*)/i,/^(?:[^\\}]%%[^\\n]*)/i,/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:#[^\\n]*)/i,/^(?:journey\\b)/i,/^(?:title\\s[^#\\n;]+)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:section\\s[^#:\\n;]+)/i,/^(?:[^#:\\n;]+)/i,/^(?::[^#\\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"open_directive\":{\"rules\":[1],\"inclusive\":false},\"type_directive\":{\"rules\":[2,3],\"inclusive\":false},\"arg_directive\":{\"rules\":[3,4],\"inclusive\":false},\"acc_descr_multiline\":{\"rules\":[17,18],\"inclusive\":false},\"acc_descr\":{\"rules\":[15],\"inclusive\":false},\"acc_title\":{\"rules\":[13],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23,24],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\nexports.main = function commonjsMain (args) {\n    if (!args[1]) {\n        console.log('Usage: '+args[0]+' FILE');\n        process.exit(1);\n    }\n    var source = require('fs').readFileSync(require('path').normalize(args[1]), \"utf8\");\n    return exports.parser.parse(source);\n};\nif (typeof module !== 'undefined' && require.main === module) {\n  exports.main(process.argv.slice(1));\n}\n}","/**\n * This method will add a basic title and description element to a chart. The yy parser will need to\n * respond to getAccTitle and getAccDescription, where the title is the title element on the chart,\n * which is generally not displayed and the accDescription is the description element on the chart,\n * which is never displayed.\n *\n * The following charts display their title as a visual and accessibility element: gantt\n *\n * @param yy_parser\n * @param svg\n * @param id\n */\nexport default function addSVGAccessibilityFields(yy_parser, svg, id) {\n  if (typeof svg.insert === 'undefined') {\n    return;\n  }\n\n  let title_string = yy_parser.getAccTitle();\n  let description = yy_parser.getAccDescription();\n  svg.attr('role', 'img').attr('aria-labelledby', 'chart-title-' + id + ' chart-desc-' + id);\n  svg\n    .insert('desc', ':first-child')\n    .attr('id', 'chart-desc-' + id)\n    .text(description);\n  svg\n    .insert('title', ':first-child')\n    .attr('id', 'chart-title-' + id)\n    .text(title_string);\n}\n","import { sanitizeText as _sanitizeText } from './diagrams/common/common';\nimport { getConfig } from './config';\nlet title = '';\nlet diagramTitle = '';\nlet description = '';\nconst sanitizeText = (txt) => _sanitizeText(txt, getConfig());\n\nexport const clear = function () {\n  title = '';\n  description = '';\n  diagramTitle = '';\n};\n\nexport const setAccTitle = function (txt) {\n  title = sanitizeText(txt).replace(/^\\s+/g, '');\n};\n\nexport const getAccTitle = function () {\n  return title || diagramTitle;\n};\n\nexport const setAccDescription = function (txt) {\n  description = sanitizeText(txt).replace(/\\n\\s+/g, '\\n');\n};\n\nexport const getAccDescription = function () {\n  return description;\n};\n\nexport const setDiagramTitle = function (txt) {\n  diagramTitle = sanitizeText(txt);\n};\n\nexport const getDiagramTitle = function () {\n  return diagramTitle;\n};\n\nexport default {\n  setAccTitle,\n  getAccTitle,\n  setDiagramTitle,\n  getDiagramTitle: getDiagramTitle,\n  getAccDescription,\n  setAccDescription,\n  clear,\n};\n","import { assignWithDepth } from './utils';\nimport { log } from './logger';\nimport theme from './themes';\nimport config from './defaultConfig';\n\nexport const defaultConfig = Object.freeze(config);\n\nlet siteConfig = assignWithDepth({}, defaultConfig);\nlet configFromInitialize;\nlet directives = [];\nlet currentConfig = assignWithDepth({}, defaultConfig);\n\nexport const updateCurrentConfig = (siteCfg, _directives) => {\n  // start with config beeing the siteConfig\n  let cfg = assignWithDepth({}, siteCfg);\n  // let sCfg = assignWithDepth(defaultConfig, siteConfigDelta);\n\n  // Join directives\n  let sumOfDirectives = {};\n  for (let i = 0; i < _directives.length; i++) {\n    const d = _directives[i];\n    sanitize(d);\n\n    // Apply the data from the directive where the the overrides the themeVariables\n    sumOfDirectives = assignWithDepth(sumOfDirectives, d);\n  }\n\n  cfg = assignWithDepth(cfg, sumOfDirectives);\n\n  if (sumOfDirectives.theme && theme[sumOfDirectives.theme]) {\n    const tmpConfigFromInitialize = assignWithDepth({}, configFromInitialize);\n    const themeVariables = assignWithDepth(\n      tmpConfigFromInitialize.themeVariables || {},\n      sumOfDirectives.themeVariables\n    );\n    cfg.themeVariables = theme[cfg.theme].getThemeVariables(themeVariables);\n  }\n\n  currentConfig = cfg;\n  return cfg;\n};\n\n/**\n * ## setSiteConfig\n *\n * | Function      | Description                           | Type        | Values                                  |\n * | ------------- | ------------------------------------- | ----------- | --------------------------------------- |\n * | setSiteConfig | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array |\n *\n * **Notes:** Sets the siteConfig. The siteConfig is a protected configuration for repeat use. Calls\n * to reset() will reset the currentConfig to siteConfig. Calls to reset(configApi.defaultConfig)\n * will reset siteConfig and currentConfig to the defaultConfig Note: currentConfig is set in this\n * function _Default value: At default, will mirror Global Config_\n *\n * @param conf - The base currentConfig to use as siteConfig\n * @returns {object} - The siteConfig\n */\nexport const setSiteConfig = (conf) => {\n  siteConfig = assignWithDepth({}, defaultConfig);\n  siteConfig = assignWithDepth(siteConfig, conf);\n\n  if (conf.theme && theme[conf.theme]) {\n    siteConfig.themeVariables = theme[conf.theme].getThemeVariables(conf.themeVariables);\n  }\n\n  currentConfig = updateCurrentConfig(siteConfig, directives);\n  return siteConfig;\n};\n\nexport const saveConfigFromInitialize = (conf) => {\n  configFromInitialize = assignWithDepth({}, conf);\n};\n\nexport const updateSiteConfig = (conf) => {\n  siteConfig = assignWithDepth(siteConfig, conf);\n  updateCurrentConfig(siteConfig, directives);\n\n  return siteConfig;\n};\n/**\n * ## getSiteConfig\n *\n * | Function      | Description                                       | Type        | Values                           |\n * | ------------- | ------------------------------------------------- | ----------- | -------------------------------- |\n * | setSiteConfig | Returns the current siteConfig base configuration | Get Request | Returns Any Values in siteConfig |\n *\n * **Notes**: Returns **any** values in siteConfig.\n *\n * @returns {object} - The siteConfig\n */\nexport const getSiteConfig = () => {\n  return assignWithDepth({}, siteConfig);\n};\n/**\n * ## setConfig\n *\n * | Function      | Description                           | Type        | Values                                  |\n * | ------------- | ------------------------------------- | ----------- | --------------------------------------- |\n * | setSiteConfig | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array |\n *\n * **Notes**: Sets the currentConfig. The parameter conf is sanitized based on the siteConfig.secure\n * keys. Any values found in conf with key found in siteConfig.secure will be replaced with the\n * corresponding siteConfig value.\n *\n * @param {any} conf - The potential currentConfig\n * @returns {any} - The currentConfig merged with the sanitized conf\n */\nexport const setConfig = (conf) => {\n  // sanitize(conf);\n  // Object.keys(conf).forEach(key => {\n  //   const manipulator = manipulators[key];\n  //   conf[key] = manipulator ? manipulator(conf[key]) : conf[key];\n  // });\n\n  assignWithDepth(currentConfig, conf);\n\n  return getConfig();\n};\n\n/**\n * ## getConfig\n *\n * | Function  | Description               | Type        | Return Values                  |\n * | --------- | ------------------------- | ----------- | ------------------------------ |\n * | getConfig | Obtains the currentConfig | Get Request | Any Values from current Config |\n *\n * **Notes**: Returns **any** the currentConfig\n *\n * @returns {any} - The currentConfig\n */\nexport const getConfig = () => {\n  return assignWithDepth({}, currentConfig);\n};\n/**\n * ## sanitize\n *\n * | Function | Description                            | Type        | Values |\n * | -------- | -------------------------------------- | ----------- | ------ |\n * | sanitize | Sets the siteConfig to desired values. | Put Request | None   |\n *\n * Ensures options parameter does not attempt to override siteConfig secure keys **Notes**: modifies\n * options in-place\n *\n * @param {any} options - The potential setConfig parameter\n */\nexport const sanitize = (options) => {\n  // Checking that options are not in the list of excluded options\n  Object.keys(siteConfig.secure).forEach((key) => {\n    if (typeof options[siteConfig.secure[key]] !== 'undefined') {\n      // DO NOT attempt to print options[siteConfig.secure[key]] within `${}` as a malicious script\n      // can exploit the logger's attempt to stringify the value and execute arbitrary code\n      log.debug(\n        `Denied attempt to modify a secure key ${siteConfig.secure[key]}`,\n        options[siteConfig.secure[key]]\n      );\n      delete options[siteConfig.secure[key]];\n    }\n  });\n\n  // Check that there no attempts of prototype pollution\n  Object.keys(options).forEach((key) => {\n    if (key.indexOf('__') === 0) {\n      delete options[key];\n    }\n  });\n  // Check that there no attempts of xss, there should be no tags at all in the directive\n  // blocking data urls as base64 urls can contain svgs with inline script tags\n  Object.keys(options).forEach((key) => {\n    if (typeof options[key] === 'string') {\n      if (\n        options[key].indexOf('<') > -1 ||\n        options[key].indexOf('>') > -1 ||\n        options[key].indexOf('url(data:') > -1\n      ) {\n        delete options[key];\n      }\n    }\n    if (typeof options[key] === 'object') {\n      sanitize(options[key]);\n    }\n  });\n};\n\n/**\n * Pushes in a directive to the configuration\n *\n * @param {object} directive The directive to push in\n */\nexport const addDirective = (directive) => {\n  if (directive.fontFamily) {\n    if (!directive.themeVariables) {\n      directive.themeVariables = { fontFamily: directive.fontFamily };\n    } else {\n      if (!directive.themeVariables.fontFamily) {\n        directive.themeVariables = { fontFamily: directive.fontFamily };\n      }\n    }\n  }\n  directives.push(directive);\n  updateCurrentConfig(siteConfig, directives);\n};\n\n/**\n * ## reset\n *\n * | Function | Description                  | Type        | Required | Values |\n * | -------- | ---------------------------- | ----------- | -------- | ------ |\n * | reset    | Resets currentConfig to conf | Put Request | Required | None   |\n *\n * ## conf\n *\n * | Parameter | Description                                                    | Type       | Required | Values                                       |\n * | --------- | -------------------------------------------------------------- | ---------- | -------- | -------------------------------------------- |\n * | conf      | base set of values, which currentConfig could be **reset** to. | Dictionary | Required | Any Values, with respect to the secure Array |\n *\n * **Notes**: (default: current siteConfig ) (optional, default `getSiteConfig()`)\n */\nexport const reset = () => {\n  // Replace current config with siteConfig\n  directives = [];\n  updateCurrentConfig(siteConfig, directives);\n};\n","import intersectRect from './intersect/intersect-rect';\nimport { log } from '../logger';\nimport createLabel from './createLabel';\nimport { select } from 'd3';\nimport { getConfig } from '../config';\nimport { evaluate } from '../diagrams/common/common';\n\nconst rect = (parent, node) => {\n  log.trace('Creating subgraph rect for ', node.id, node);\n\n  // Add outer g element\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', 'cluster' + (node.class ? ' ' + node.class : ''))\n    .attr('id', node.id);\n\n  // add the rect\n  const rect = shapeSvg.insert('rect', ':first-child');\n\n  // Create the label and insert it after the rect\n  const label = shapeSvg.insert('g').attr('class', 'cluster-label');\n\n  const text = label\n    .node()\n    .appendChild(createLabel(node.labelText, node.labelStyle, undefined, true));\n\n  // Get the size of the label\n  let bbox = text.getBBox();\n\n  if (evaluate(getConfig().flowchart.htmlLabels)) {\n    const div = text.children[0];\n    const dv = select(text);\n    bbox = div.getBoundingClientRect();\n    dv.attr('width', bbox.width);\n    dv.attr('height', bbox.height);\n  }\n\n  const padding = 0 * node.padding;\n  const halfPadding = padding / 2;\n\n  const width = node.width <= bbox.width + padding ? bbox.width + padding : node.width;\n  if (node.width <= bbox.width + padding) {\n    node.diff = (bbox.width - node.width) / 2 - node.padding / 2;\n  } else {\n    node.diff = -node.padding / 2;\n  }\n\n  log.trace('Data ', node, JSON.stringify(node));\n  // center the rect around its coordinate\n  rect\n    .attr('style', node.style)\n    .attr('rx', node.rx)\n    .attr('ry', node.ry)\n    .attr('x', node.x - width / 2)\n    .attr('y', node.y - node.height / 2 - halfPadding)\n    .attr('width', width)\n    .attr('height', node.height + padding);\n\n  // Center the label\n  label.attr(\n    'transform',\n    'translate(' +\n      (node.x - bbox.width / 2) +\n      ', ' +\n      (node.y - node.height / 2 + node.padding / 3) +\n      ')'\n  );\n\n  const rectBox = rect.node().getBBox();\n  node.width = rectBox.width;\n  node.height = rectBox.height;\n\n  node.intersect = function (point) {\n    return intersectRect(node, point);\n  };\n\n  return shapeSvg;\n};\n\n/**\n * Non visible cluster where the note is group with its\n *\n * @param {any} parent\n * @param {any} node\n * @returns {any} ShapeSvg\n */\nconst noteGroup = (parent, node) => {\n  // Add outer g element\n  const shapeSvg = parent.insert('g').attr('class', 'note-cluster').attr('id', node.id);\n\n  // add the rect\n  const rect = shapeSvg.insert('rect', ':first-child');\n\n  const padding = 0 * node.padding;\n  const halfPadding = padding / 2;\n\n  // center the rect around its coordinate\n  rect\n    .attr('rx', node.rx)\n    .attr('ry', node.ry)\n    .attr('x', node.x - node.width / 2 - halfPadding)\n    .attr('y', node.y - node.height / 2 - halfPadding)\n    .attr('width', node.width + padding)\n    .attr('height', node.height + padding)\n    .attr('fill', 'none');\n\n  const rectBox = rect.node().getBBox();\n  node.width = rectBox.width;\n  node.height = rectBox.height;\n\n  node.intersect = function (point) {\n    return intersectRect(node, point);\n  };\n\n  return shapeSvg;\n};\nconst roundedWithTitle = (parent, node) => {\n  // Add outer g element\n  const shapeSvg = parent.insert('g').attr('class', node.classes).attr('id', node.id);\n\n  // add the rect\n  const rect = shapeSvg.insert('rect', ':first-child');\n\n  // Create the label and insert it after the rect\n  const label = shapeSvg.insert('g').attr('class', 'cluster-label');\n  const innerRect = shapeSvg.append('rect');\n\n  const text = label\n    .node()\n    .appendChild(createLabel(node.labelText, node.labelStyle, undefined, true));\n\n  // Get the size of the label\n  let bbox = text.getBBox();\n  if (evaluate(getConfig().flowchart.htmlLabels)) {\n    const div = text.children[0];\n    const dv = select(text);\n    bbox = div.getBoundingClientRect();\n    dv.attr('width', bbox.width);\n    dv.attr('height', bbox.height);\n  }\n  bbox = text.getBBox();\n  const padding = 0 * node.padding;\n  const halfPadding = padding / 2;\n\n  const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n  if (node.width <= bbox.width + node.padding) {\n    node.diff = (bbox.width + node.padding * 0 - node.width) / 2;\n  } else {\n    node.diff = -node.padding / 2;\n  }\n\n  // center the rect around its coordinate\n  rect\n    .attr('class', 'outer')\n    .attr('x', node.x - width / 2 - halfPadding)\n    .attr('y', node.y - node.height / 2 - halfPadding)\n    .attr('width', width + padding)\n    .attr('height', node.height + padding);\n  innerRect\n    .attr('class', 'inner')\n    .attr('x', node.x - width / 2 - halfPadding)\n    .attr('y', node.y - node.height / 2 - halfPadding + bbox.height - 1)\n    .attr('width', width + padding)\n    .attr('height', node.height + padding - bbox.height - 3);\n\n  // Center the label\n  label.attr(\n    'transform',\n    'translate(' +\n      (node.x - bbox.width / 2) +\n      ', ' +\n      (node.y -\n        node.height / 2 -\n        node.padding / 3 +\n        (evaluate(getConfig().flowchart.htmlLabels) ? 5 : 3)) +\n      ')'\n  );\n\n  const rectBox = rect.node().getBBox();\n  node.height = rectBox.height;\n\n  node.intersect = function (point) {\n    return intersectRect(node, point);\n  };\n\n  return shapeSvg;\n};\n\nconst divider = (parent, node) => {\n  // Add outer g element\n  const shapeSvg = parent.insert('g').attr('class', node.classes).attr('id', node.id);\n\n  // add the rect\n  const rect = shapeSvg.insert('rect', ':first-child');\n\n  const padding = 0 * node.padding;\n  const halfPadding = padding / 2;\n\n  // center the rect around its coordinate\n  rect\n    .attr('class', 'divider')\n    .attr('x', node.x - node.width / 2 - halfPadding)\n    .attr('y', node.y - node.height / 2)\n    .attr('width', node.width + padding)\n    .attr('height', node.height + padding);\n\n  const rectBox = rect.node().getBBox();\n  node.width = rectBox.width;\n  node.height = rectBox.height;\n  node.diff = -node.padding / 2;\n  node.intersect = function (point) {\n    return intersectRect(node, point);\n  };\n\n  return shapeSvg;\n};\n\nconst shapes = { rect, roundedWithTitle, noteGroup, divider };\n\nlet clusterElems = {};\n\nexport const insertCluster = (elem, node) => {\n  log.trace('Inserting cluster');\n  const shape = node.shape || 'rect';\n  clusterElems[node.id] = shapes[shape](elem, node);\n};\nexport const getClusterTitleWidth = (elem, node) => {\n  const label = createLabel(node.labelText, node.labelStyle, undefined, true);\n  elem.node().appendChild(label);\n  const width = label.getBBox().width;\n  elem.node().removeChild(label);\n  return width;\n};\n\nexport const clear = () => {\n  clusterElems = {};\n};\n\nexport const positionCluster = (node) => {\n  log.info('Position cluster (' + node.id + ', ' + node.x + ', ' + node.y + ')');\n  const el = clusterElems[node.id];\n\n  el.attr('transform', 'translate(' + node.x + ', ' + node.y + ')');\n};\n","import { select } from 'd3';\nimport { log } from '../logger'; // eslint-disable-line\nimport { getConfig } from '../config';\nimport { sanitizeText, evaluate } from '../diagrams/common/common';\n\nconst sanitizeTxt = (txt) => sanitizeText(txt, getConfig());\n\n/**\n * @param dom\n * @param styleFn\n */\nfunction applyStyle(dom, styleFn) {\n  if (styleFn) {\n    dom.attr('style', styleFn);\n  }\n}\n\n/**\n * @param {any} node\n * @returns {SVGForeignObjectElement} Node\n */\nfunction addHtmlLabel(node) {\n  const fo = select(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject'));\n  const div = fo.append('xhtml:div');\n\n  const label = node.label;\n  const labelClass = node.isNode ? 'nodeLabel' : 'edgeLabel';\n  div.html(\n    '<span class=\"' +\n      labelClass +\n      '\" ' +\n      (node.labelStyle ? 'style=\"' + node.labelStyle + '\"' : '') +\n      '>' +\n      label +\n      '</span>'\n  );\n\n  applyStyle(div, node.labelStyle);\n  div.style('display', 'inline-block');\n  // Fix for firefox\n  div.style('white-space', 'nowrap');\n  div.attr('xmlns', 'http://www.w3.org/1999/xhtml');\n  return fo.node();\n}\n\nconst createLabel = (_vertexText, style, isTitle, isNode) => {\n  let vertexText = _vertexText || '';\n  if (typeof vertexText === 'object') vertexText = vertexText[0];\n  if (evaluate(getConfig().flowchart.htmlLabels)) {\n    // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that?\n    vertexText = vertexText.replace(/\\\\n|\\n/g, '<br />');\n    log.info('vertexText' + vertexText);\n    const node = {\n      isNode,\n      label: vertexText.replace(\n        /fa[lrsb]?:fa-[\\w-]+/g,\n        (s) => `<i class='${s.replace(':', ' ')}'></i>`\n      ),\n      labelStyle: style.replace('fill:', 'color:'),\n    };\n    let vertexNode = addHtmlLabel(node);\n    // vertexNode.parentNode.removeChild(vertexNode);\n    return vertexNode;\n  } else {\n    const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n    svgLabel.setAttribute('style', style.replace('color:', 'fill:'));\n    let rows = [];\n    if (typeof vertexText === 'string') {\n      rows = vertexText.split(/\\\\n|\\n|<br\\s*\\/?>/gi);\n    } else if (Array.isArray(vertexText)) {\n      rows = vertexText;\n    } else {\n      rows = [];\n    }\n\n    for (let j = 0; j < rows.length; j++) {\n      const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n      tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n      tspan.setAttribute('dy', '1em');\n      tspan.setAttribute('x', '0');\n      if (isTitle) {\n        tspan.setAttribute('class', 'title-row');\n      } else {\n        tspan.setAttribute('class', 'row');\n      }\n      tspan.textContent = rows[j].trim();\n      svgLabel.appendChild(tspan);\n    }\n    return svgLabel;\n  }\n};\n\nexport default createLabel;\n","import { log } from '../logger'; // eslint-disable-line\nimport createLabel from './createLabel';\nimport { line, curveBasis, select } from 'd3';\nimport { getConfig } from '../config';\nimport utils from '../utils';\nimport { evaluate } from '../diagrams/common/common';\n\nlet edgeLabels = {};\nlet terminalLabels = {};\n\nexport const clear = () => {\n  edgeLabels = {};\n  terminalLabels = {};\n};\n\nexport const insertEdgeLabel = (elem, edge) => {\n  // Create the actual text element\n  const labelElement = createLabel(edge.label, edge.labelStyle);\n\n  // Create outer g, edgeLabel, this will be positioned after graph layout\n  const edgeLabel = elem.insert('g').attr('class', 'edgeLabel');\n\n  // Create inner g, label, this will be positioned now for centering the text\n  const label = edgeLabel.insert('g').attr('class', 'label');\n  label.node().appendChild(labelElement);\n\n  // Center the label\n  let bbox = labelElement.getBBox();\n  if (evaluate(getConfig().flowchart.htmlLabels)) {\n    const div = labelElement.children[0];\n    const dv = select(labelElement);\n    bbox = div.getBoundingClientRect();\n    dv.attr('width', bbox.width);\n    dv.attr('height', bbox.height);\n  }\n  label.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n\n  // Make element accessible by id for positioning\n  edgeLabels[edge.id] = edgeLabel;\n\n  // Update the abstract data of the edge with the new information about its width and height\n  edge.width = bbox.width;\n  edge.height = bbox.height;\n\n  let fo;\n  if (edge.startLabelLeft) {\n    // Create the actual text element\n    const startLabelElement = createLabel(edge.startLabelLeft, edge.labelStyle);\n    const startEdgeLabelLeft = elem.insert('g').attr('class', 'edgeTerminals');\n    const inner = startEdgeLabelLeft.insert('g').attr('class', 'inner');\n    fo = inner.node().appendChild(startLabelElement);\n    const slBox = startLabelElement.getBBox();\n    inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n    if (!terminalLabels[edge.id]) {\n      terminalLabels[edge.id] = {};\n    }\n    terminalLabels[edge.id].startLeft = startEdgeLabelLeft;\n    setTerminalWidth(fo, edge.startLabelLeft);\n  }\n  if (edge.startLabelRight) {\n    // Create the actual text element\n    const startLabelElement = createLabel(edge.startLabelRight, edge.labelStyle);\n    const startEdgeLabelRight = elem.insert('g').attr('class', 'edgeTerminals');\n    const inner = startEdgeLabelRight.insert('g').attr('class', 'inner');\n    fo = startEdgeLabelRight.node().appendChild(startLabelElement);\n    inner.node().appendChild(startLabelElement);\n    const slBox = startLabelElement.getBBox();\n    inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n\n    if (!terminalLabels[edge.id]) {\n      terminalLabels[edge.id] = {};\n    }\n    terminalLabels[edge.id].startRight = startEdgeLabelRight;\n    setTerminalWidth(fo, edge.startLabelRight);\n  }\n  if (edge.endLabelLeft) {\n    // Create the actual text element\n    const endLabelElement = createLabel(edge.endLabelLeft, edge.labelStyle);\n    const endEdgeLabelLeft = elem.insert('g').attr('class', 'edgeTerminals');\n    const inner = endEdgeLabelLeft.insert('g').attr('class', 'inner');\n    fo = inner.node().appendChild(endLabelElement);\n    const slBox = endLabelElement.getBBox();\n    inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n\n    endEdgeLabelLeft.node().appendChild(endLabelElement);\n\n    if (!terminalLabels[edge.id]) {\n      terminalLabels[edge.id] = {};\n    }\n    terminalLabels[edge.id].endLeft = endEdgeLabelLeft;\n    setTerminalWidth(fo, edge.endLabelLeft);\n  }\n  if (edge.endLabelRight) {\n    // Create the actual text element\n    const endLabelElement = createLabel(edge.endLabelRight, edge.labelStyle);\n    const endEdgeLabelRight = elem.insert('g').attr('class', 'edgeTerminals');\n    const inner = endEdgeLabelRight.insert('g').attr('class', 'inner');\n\n    fo = inner.node().appendChild(endLabelElement);\n    const slBox = endLabelElement.getBBox();\n    inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n\n    endEdgeLabelRight.node().appendChild(endLabelElement);\n    if (!terminalLabels[edge.id]) {\n      terminalLabels[edge.id] = {};\n    }\n    terminalLabels[edge.id].endRight = endEdgeLabelRight;\n    setTerminalWidth(fo, edge.endLabelRight);\n  }\n};\n\n/**\n * @param {any} fo\n * @param {any} value\n */\nfunction setTerminalWidth(fo, value) {\n  if (getConfig().flowchart.htmlLabels && fo) {\n    fo.style.width = value.length * 9 + 'px';\n    fo.style.height = '12px';\n  }\n}\n\nexport const positionEdgeLabel = (edge, paths) => {\n  log.info('Moving label abc78 ', edge.id, edge.label, edgeLabels[edge.id]);\n  let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n  if (edge.label) {\n    const el = edgeLabels[edge.id];\n    let x = edge.x;\n    let y = edge.y;\n    if (path) {\n      //   // debugger;\n      const pos = utils.calcLabelPosition(path);\n      log.info('Moving label from (', x, ',', y, ') to (', pos.x, ',', pos.y, ') abc78');\n      // x = pos.x;\n      // y = pos.y;\n    }\n    el.attr('transform', 'translate(' + x + ', ' + y + ')');\n  }\n\n  //let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n  if (edge.startLabelLeft) {\n    const el = terminalLabels[edge.id].startLeft;\n    let x = edge.x;\n    let y = edge.y;\n    if (path) {\n      // debugger;\n      const pos = utils.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, 'start_left', path);\n      x = pos.x;\n      y = pos.y;\n    }\n    el.attr('transform', 'translate(' + x + ', ' + y + ')');\n  }\n  if (edge.startLabelRight) {\n    const el = terminalLabels[edge.id].startRight;\n    let x = edge.x;\n    let y = edge.y;\n    if (path) {\n      // debugger;\n      const pos = utils.calcTerminalLabelPosition(\n        edge.arrowTypeStart ? 10 : 0,\n        'start_right',\n        path\n      );\n      x = pos.x;\n      y = pos.y;\n    }\n    el.attr('transform', 'translate(' + x + ', ' + y + ')');\n  }\n  if (edge.endLabelLeft) {\n    const el = terminalLabels[edge.id].endLeft;\n    let x = edge.x;\n    let y = edge.y;\n    if (path) {\n      // debugger;\n      const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, 'end_left', path);\n      x = pos.x;\n      y = pos.y;\n    }\n    el.attr('transform', 'translate(' + x + ', ' + y + ')');\n  }\n  if (edge.endLabelRight) {\n    const el = terminalLabels[edge.id].endRight;\n    let x = edge.x;\n    let y = edge.y;\n    if (path) {\n      // debugger;\n      const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, 'end_right', path);\n      x = pos.x;\n      y = pos.y;\n    }\n    el.attr('transform', 'translate(' + x + ', ' + y + ')');\n  }\n};\n\nconst outsideNode = (node, point) => {\n  // log.warn('Checking bounds ', node, point);\n  const x = node.x;\n  const y = node.y;\n  const dx = Math.abs(point.x - x);\n  const dy = Math.abs(point.y - y);\n  const w = node.width / 2;\n  const h = node.height / 2;\n  if (dx >= w || dy >= h) {\n    return true;\n  }\n  return false;\n};\n\nexport const intersection = (node, outsidePoint, insidePoint) => {\n  log.warn(`intersection calc abc89:\n  outsidePoint: ${JSON.stringify(outsidePoint)}\n  insidePoint : ${JSON.stringify(insidePoint)}\n  node        : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);\n  const x = node.x;\n  const y = node.y;\n\n  const dx = Math.abs(x - insidePoint.x);\n  // const dy = Math.abs(y - insidePoint.y);\n  const w = node.width / 2;\n  let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx;\n  const h = node.height / 2;\n\n  // const edges = {\n  //   x1: x - w,\n  //   x2: x + w,\n  //   y1: y - h,\n  //   y2: y + h\n  // };\n\n  // if (\n  //   outsidePoint.x === edges.x1 ||\n  //   outsidePoint.x === edges.x2 ||\n  //   outsidePoint.y === edges.y1 ||\n  //   outsidePoint.y === edges.y2\n  // ) {\n  //   log.warn('abc89 calc equals on edge', outsidePoint, edges);\n  //   return outsidePoint;\n  // }\n\n  const Q = Math.abs(outsidePoint.y - insidePoint.y);\n  const R = Math.abs(outsidePoint.x - insidePoint.x);\n  // log.warn();\n  if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) { // eslint-disable-line\n    // Intersection is top or bottom of rect.\n    // let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n    let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n    r = (R * q) / Q;\n    const res = {\n      x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,\n      y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q,\n    };\n\n    if (r === 0) {\n      res.x = outsidePoint.x;\n      res.y = outsidePoint.y;\n    }\n    if (R === 0) {\n      res.x = outsidePoint.x;\n    }\n    if (Q === 0) {\n      res.y = outsidePoint.y;\n    }\n\n    log.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res);\n\n    return res;\n  } else {\n    // Intersection onn sides of rect\n    if (insidePoint.x < outsidePoint.x) {\n      r = outsidePoint.x - w - x;\n    } else {\n      // r = outsidePoint.x - w - x;\n      r = x - w - outsidePoint.x;\n    }\n    let q = (Q * r) / R;\n    //  OK let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x + dx - w;\n    // OK let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : outsidePoint.x + r;\n    let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;\n    // let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : outsidePoint.x + r;\n    let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;\n    log.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });\n    if (r === 0) {\n      _x = outsidePoint.x;\n      _y = outsidePoint.y;\n    }\n    if (R === 0) {\n      _x = outsidePoint.x;\n    }\n    if (Q === 0) {\n      _y = outsidePoint.y;\n    }\n\n    return { x: _x, y: _y };\n  }\n};\n/**\n * This function will page a path and node where the last point(s) in the path is inside the node\n * and return an update path ending by the border of the node.\n *\n * @param {Array} _points\n * @param {any} boundryNode\n * @returns {Array} Points\n */\nconst cutPathAtIntersect = (_points, boundryNode) => {\n  log.warn('abc88 cutPathAtIntersect', _points, boundryNode);\n  let points = [];\n  let lastPointOutside = _points[0];\n  let isInside = false;\n  _points.forEach((point) => {\n    // const node = clusterDb[edge.toCluster].node;\n    log.info('abc88 checking point', point, boundryNode);\n\n    // check if point is inside the boundry rect\n    if (!outsideNode(boundryNode, point) && !isInside) {\n      // First point inside the rect found\n      // Calc the intersection coord between the point anf the last point outside the rect\n      const inter = intersection(boundryNode, lastPointOutside, point);\n      log.warn('abc88 inside', point, lastPointOutside, inter);\n      log.warn('abc88 intersection', inter);\n\n      // // Check case where the intersection is the same as the last point\n      let pointPresent = false;\n      points.forEach((p) => {\n        pointPresent = pointPresent || (p.x === inter.x && p.y === inter.y);\n      });\n      // // if (!pointPresent) {\n      if (!points.find((e) => e.x === inter.x && e.y === inter.y)) {\n        points.push(inter);\n      } else {\n        log.warn('abc88 no intersect', inter, points);\n      }\n      // points.push(inter);\n      isInside = true;\n    } else {\n      // Outside\n      log.warn('abc88 outside', point, lastPointOutside);\n      lastPointOutside = point;\n      // points.push(point);\n      if (!isInside) points.push(point);\n    }\n  });\n  log.warn('abc88 returning points', points);\n  return points;\n};\n\n//(edgePaths, e, edge, clusterDb, diagramtype, graph)\nexport const insertEdge = function (elem, e, edge, clusterDb, diagramType, graph) {\n  let points = edge.points;\n  let pointsHasChanged = false;\n  const tail = graph.node(e.v);\n  var head = graph.node(e.w);\n\n  log.info('abc88 InsertEdge: ', edge);\n  if (head.intersect && tail.intersect) {\n    points = points.slice(1, edge.points.length - 1);\n    points.unshift(tail.intersect(points[0]));\n    log.info(\n      'Last point',\n      points[points.length - 1],\n      head,\n      head.intersect(points[points.length - 1])\n    );\n    points.push(head.intersect(points[points.length - 1]));\n  }\n  if (edge.toCluster) {\n    log.info('to cluster abc88', clusterDb[edge.toCluster]);\n    points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node);\n    // log.trace('edge', edge);\n    // points = [];\n    // let lastPointOutside; // = edge.points[0];\n    // let isInside = false;\n    // edge.points.forEach(point => {\n    //   const node = clusterDb[edge.toCluster].node;\n    //   log.warn('checking from', edge.fromCluster, point, node);\n\n    //   if (!outsideNode(node, point) && !isInside) {\n    //     log.trace('inside', edge.toCluster, point, lastPointOutside);\n\n    //     // First point inside the rect\n    //     const inter = intersection(node, lastPointOutside, point);\n\n    //     let pointPresent = false;\n    //     points.forEach(p => {\n    //       pointPresent = pointPresent || (p.x === inter.x && p.y === inter.y);\n    //     });\n    //     // if (!pointPresent) {\n    //     if (!points.find(e => e.x === inter.x && e.y === inter.y)) {\n    //       points.push(inter);\n    //     } else {\n    //       log.warn('no intersect', inter, points);\n    //     }\n    //     isInside = true;\n    // } else {\n    //   // outside\n    //   lastPointOutside = point;\n    //   if (!isInside) points.push(point);\n    // }\n    // });\n    pointsHasChanged = true;\n  }\n\n  if (edge.fromCluster) {\n    log.info('from cluster abc88', clusterDb[edge.fromCluster]);\n    points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse();\n\n    pointsHasChanged = true;\n  }\n\n  // The data for our line\n  const lineData = points.filter((p) => !Number.isNaN(p.y));\n\n  // This is the accessor function we talked about above\n  let curve;\n  // Currently only flowcharts get the curve from the settings, perhaps this should\n  // be expanded to a common setting? Restricting it for now in order not to cause side-effects that\n  // have not been thought through\n  if (diagramType === 'graph' || diagramType === 'flowchart') {\n    curve = edge.curve || curveBasis;\n  } else {\n    curve = curveBasis;\n  }\n  // curve = curveLinear;\n  const lineFunction = line()\n    .x(function (d) {\n      return d.x;\n    })\n    .y(function (d) {\n      return d.y;\n    })\n    .curve(curve);\n\n  // Contruct stroke classes based on properties\n  let strokeClasses;\n  switch (edge.thickness) {\n    case 'normal':\n      strokeClasses = 'edge-thickness-normal';\n      break;\n    case 'thick':\n      strokeClasses = 'edge-thickness-thick';\n      break;\n    default:\n      strokeClasses = '';\n  }\n  switch (edge.pattern) {\n    case 'solid':\n      strokeClasses += ' edge-pattern-solid';\n      break;\n    case 'dotted':\n      strokeClasses += ' edge-pattern-dotted';\n      break;\n    case 'dashed':\n      strokeClasses += ' edge-pattern-dashed';\n      break;\n  }\n\n  const svgPath = elem\n    .append('path')\n    .attr('d', lineFunction(lineData))\n    .attr('id', edge.id)\n    .attr('class', ' ' + strokeClasses + (edge.classes ? ' ' + edge.classes : ''))\n    .attr('style', edge.style);\n\n  // DEBUG code, adds a red circle at each edge coordinate\n  // edge.points.forEach(point => {\n  //   elem\n  //     .append('circle')\n  //     .style('stroke', 'red')\n  //     .style('fill', 'red')\n  //     .attr('r', 1)\n  //     .attr('cx', point.x)\n  //     .attr('cy', point.y);\n  // });\n\n  let url = '';\n  if (getConfig().state.arrowMarkerAbsolute) {\n    url =\n      window.location.protocol +\n      '//' +\n      window.location.host +\n      window.location.pathname +\n      window.location.search;\n    url = url.replace(/\\(/g, '\\\\(');\n    url = url.replace(/\\)/g, '\\\\)');\n  }\n  log.info('arrowTypeStart', edge.arrowTypeStart);\n  log.info('arrowTypeEnd', edge.arrowTypeEnd);\n\n  switch (edge.arrowTypeStart) {\n    case 'arrow_cross':\n      svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-crossStart' + ')');\n      break;\n    case 'arrow_point':\n      svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-pointStart' + ')');\n      break;\n    case 'arrow_barb':\n      svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-barbStart' + ')');\n      break;\n    case 'arrow_circle':\n      svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-circleStart' + ')');\n      break;\n    case 'aggregation':\n      svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-aggregationStart' + ')');\n      break;\n    case 'extension':\n      svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-extensionStart' + ')');\n      break;\n    case 'composition':\n      svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-compositionStart' + ')');\n      break;\n    case 'dependency':\n      svgPath.attr('marker-start', 'url(' + url + '#' + diagramType + '-dependencyStart' + ')');\n      break;\n    default:\n  }\n  switch (edge.arrowTypeEnd) {\n    case 'arrow_cross':\n      svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-crossEnd' + ')');\n      break;\n    case 'arrow_point':\n      svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-pointEnd' + ')');\n      break;\n    case 'arrow_barb':\n      svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-barbEnd' + ')');\n      break;\n    case 'arrow_circle':\n      svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-circleEnd' + ')');\n      break;\n    case 'aggregation':\n      svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-aggregationEnd' + ')');\n      break;\n    case 'extension':\n      svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-extensionEnd' + ')');\n      break;\n    case 'composition':\n      svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-compositionEnd' + ')');\n      break;\n    case 'dependency':\n      svgPath.attr('marker-end', 'url(' + url + '#' + diagramType + '-dependencyEnd' + ')');\n      break;\n    default:\n  }\n  let paths = {};\n  if (pointsHasChanged) {\n    paths.updatedPath = points;\n  }\n  paths.originalPath = edge.points;\n  return paths;\n};\n","import dagre from 'dagre';\nimport graphlib from 'graphlib';\nimport insertMarkers from './markers';\nimport { updateNodeBounds } from './shapes/util';\nimport {\n  clear as clearGraphlib,\n  clusterDb,\n  adjustClustersAndEdges,\n  findNonClusterChild,\n  sortNodesByHierarchy,\n} from './mermaid-graphlib';\nimport { insertNode, positionNode, clear as clearNodes, setNodeElem } from './nodes';\nimport { insertCluster, clear as clearClusters } from './clusters';\nimport { insertEdgeLabel, positionEdgeLabel, insertEdge, clear as clearEdges } from './edges';\nimport { log } from '../logger';\n\nconst recursiveRender = (_elem, graph, diagramtype, parentCluster) => {\n  log.info('Graph in recursive render: XXX', graphlib.json.write(graph), parentCluster);\n  const dir = graph.graph().rankdir;\n  log.trace('Dir in recursive render - dir:', dir);\n\n  const elem = _elem.insert('g').attr('class', 'root'); // eslint-disable-line\n  if (!graph.nodes()) {\n    log.info('No nodes found for', graph);\n  } else {\n    log.info('Recursive render XXX', graph.nodes());\n  }\n  if (graph.edges().length > 0) {\n    log.trace('Recursive edges', graph.edge(graph.edges()[0]));\n  }\n  const clusters = elem.insert('g').attr('class', 'clusters'); // eslint-disable-line\n  const edgePaths = elem.insert('g').attr('class', 'edgePaths');\n  const edgeLabels = elem.insert('g').attr('class', 'edgeLabels');\n  const nodes = elem.insert('g').attr('class', 'nodes');\n\n  // Insert nodes, this will insert them into the dom and each node will get a size. The size is updated\n  // to the abstract node and is later used by dagre for the layout\n  graph.nodes().forEach(function (v) {\n    const node = graph.node(v);\n    if (typeof parentCluster !== 'undefined') {\n      const data = JSON.parse(JSON.stringify(parentCluster.clusterData));\n      // data.clusterPositioning = true;\n      log.info('Setting data for cluster XXX (', v, ') ', data, parentCluster);\n      graph.setNode(parentCluster.id, data);\n      if (!graph.parent(v)) {\n        log.trace('Setting parent', v, parentCluster.id);\n        graph.setParent(v, parentCluster.id, data);\n      }\n    }\n    log.info('(Insert) Node XXX' + v + ': ' + JSON.stringify(graph.node(v)));\n    if (node && node.clusterNode) {\n      // const children = graph.children(v);\n      log.info('Cluster identified', v, node.width, graph.node(v));\n      const o = recursiveRender(nodes, node.graph, diagramtype, graph.node(v));\n      const newEl = o.elem;\n      updateNodeBounds(node, newEl);\n      node.diff = o.diff || 0;\n      log.info('Node bounds (abc123)', v, node, node.width, node.x, node.y);\n      setNodeElem(newEl, node);\n\n      log.warn('Recursive render complete ', newEl, node);\n    } else {\n      if (graph.children(v).length > 0) {\n        // This is a cluster but not to be rendered recursively\n        // Render as before\n        log.info('Cluster - the non recursive path XXX', v, node.id, node, graph);\n        log.info(findNonClusterChild(node.id, graph));\n        clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node };\n        // insertCluster(clusters, graph.node(v));\n      } else {\n        log.info('Node - the non recursive path', v, node.id, node);\n        insertNode(nodes, graph.node(v), dir);\n      }\n    }\n  });\n\n  // Insert labels, this will insert them into the dom so that the width can be calculated\n  // Also figure out which edges point to/from clusters and adjust them accordingly\n  // Edges from/to clusters really points to the first child in the cluster.\n  // TODO: pick optimal child in the cluster to us as link anchor\n  graph.edges().forEach(function (e) {\n    const edge = graph.edge(e.v, e.w, e.name);\n    log.info('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(e));\n    log.info('Edge ' + e.v + ' -> ' + e.w + ': ', e, ' ', JSON.stringify(graph.edge(e)));\n\n    // Check if link is either from or to a cluster\n    log.info('Fix', clusterDb, 'ids:', e.v, e.w, 'Translateing: ', clusterDb[e.v], clusterDb[e.w]);\n    insertEdgeLabel(edgeLabels, edge);\n  });\n\n  graph.edges().forEach(function (e) {\n    log.info('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(e));\n  });\n  log.info('#############################################');\n  log.info('###                Layout                 ###');\n  log.info('#############################################');\n  log.info(graph);\n  dagre.layout(graph);\n  log.info('Graph after layout:', graphlib.json.write(graph));\n  // Move the nodes to the correct place\n  let diff = 0;\n  sortNodesByHierarchy(graph).forEach(function (v) {\n    const node = graph.node(v);\n    log.info('Position ' + v + ': ' + JSON.stringify(graph.node(v)));\n    log.info(\n      'Position ' + v + ': (' + node.x,\n      ',' + node.y,\n      ') width: ',\n      node.width,\n      ' height: ',\n      node.height\n    );\n    if (node && node.clusterNode) {\n      // clusterDb[node.id].node = node;\n\n      positionNode(node);\n    } else {\n      // Non cluster node\n      if (graph.children(v).length > 0) {\n        // A cluster in the non-recursive way\n        // positionCluster(node);\n        insertCluster(clusters, node);\n        clusterDb[node.id].node = node;\n      } else {\n        positionNode(node);\n      }\n    }\n  });\n\n  // Move the edge labels to the correct place after layout\n  graph.edges().forEach(function (e) {\n    const edge = graph.edge(e);\n    log.info('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(edge), edge);\n\n    const paths = insertEdge(edgePaths, e, edge, clusterDb, diagramtype, graph);\n    positionEdgeLabel(edge, paths);\n  });\n\n  graph.nodes().forEach(function (v) {\n    const n = graph.node(v);\n    log.info(v, n.type, n.diff);\n    if (n.type === 'group') {\n      diff = n.diff;\n    }\n  });\n  return { elem, diff };\n};\n\nexport const render = (elem, graph, markers, diagramtype, id) => {\n  insertMarkers(elem, markers, diagramtype, id);\n  clearNodes();\n  clearEdges();\n  clearClusters();\n  clearGraphlib();\n\n  log.warn('Graph at first:', graphlib.json.write(graph));\n  adjustClustersAndEdges(graph);\n  log.warn('Graph after:', graphlib.json.write(graph));\n  // log.warn('Graph ever  after:', graphlib.json.write(graph.node('A').graph));\n  recursiveRender(elem, graph, diagramtype);\n};\n\n// const shapeDefinitions = {};\n// export const addShape = ({ shapeType: fun }) => {\n//   shapeDefinitions[shapeType] = fun;\n// };\n\n// const arrowDefinitions = {};\n// export const addArrow = ({ arrowType: fun }) => {\n//   arrowDefinitions[arrowType] = fun;\n// };\n","/*\n * Borrowed with love from from dagrge-d3. Many thanks to cpettitt!\n */\n\nimport node from './intersect-node.js';\nimport circle from './intersect-circle.js';\nimport ellipse from './intersect-ellipse.js';\nimport polygon from './intersect-polygon.js';\nimport rect from './intersect-rect.js';\n\nexport default {\n  node,\n  circle,\n  ellipse,\n  polygon,\n  rect,\n};\n","import intersectEllipse from './intersect-ellipse';\n\n/**\n * @param node\n * @param rx\n * @param point\n */\nfunction intersectCircle(node, rx, point) {\n  return intersectEllipse(node, rx, rx, point);\n}\n\nexport default intersectCircle;\n","/**\n * @param node\n * @param rx\n * @param ry\n * @param point\n */\nfunction intersectEllipse(node, rx, ry, point) {\n  // Formulae from: https://mathworld.wolfram.com/Ellipse-LineIntersection.html\n\n  var cx = node.x;\n  var cy = node.y;\n\n  var px = cx - point.x;\n  var py = cy - point.y;\n\n  var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n\n  var dx = Math.abs((rx * ry * px) / det);\n  if (point.x < cx) {\n    dx = -dx;\n  }\n  var dy = Math.abs((rx * ry * py) / det);\n  if (point.y < cy) {\n    dy = -dy;\n  }\n\n  return { x: cx + dx, y: cy + dy };\n}\n\nexport default intersectEllipse;\n","/**\n * Returns the point at which two lines, p and q, intersect or returns undefined if they do not intersect.\n *\n * @param p1\n * @param p2\n * @param q1\n * @param q2\n */\nfunction intersectLine(p1, p2, q1, q2) {\n  // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994,\n  // p7 and p473.\n\n  var a1, a2, b1, b2, c1, c2;\n  var r1, r2, r3, r4;\n  var denom, offset, num;\n  var x, y;\n\n  // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x +\n  // b1 y + c1 = 0.\n  a1 = p2.y - p1.y;\n  b1 = p1.x - p2.x;\n  c1 = p2.x * p1.y - p1.x * p2.y;\n\n  // Compute r3 and r4.\n  r3 = a1 * q1.x + b1 * q1.y + c1;\n  r4 = a1 * q2.x + b1 * q2.y + c1;\n\n  // Check signs of r3 and r4. If both point 3 and point 4 lie on\n  // same side of line 1, the line segments do not intersect.\n  if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n    return /*DONT_INTERSECT*/;\n  }\n\n  // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0\n  a2 = q2.y - q1.y;\n  b2 = q1.x - q2.x;\n  c2 = q2.x * q1.y - q1.x * q2.y;\n\n  // Compute r1 and r2\n  r1 = a2 * p1.x + b2 * p1.y + c2;\n  r2 = a2 * p2.x + b2 * p2.y + c2;\n\n  // Check signs of r1 and r2. If both point 1 and point 2 lie\n  // on same side of second line segment, the line segments do\n  // not intersect.\n  if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {\n    return /*DONT_INTERSECT*/;\n  }\n\n  // Line segments intersect: compute intersection point.\n  denom = a1 * b2 - a2 * b1;\n  if (denom === 0) {\n    return /*COLLINEAR*/;\n  }\n\n  offset = Math.abs(denom / 2);\n\n  // The denom/2 is to get rounding instead of truncating. It\n  // is added or subtracted to the numerator, depending upon the\n  // sign of the numerator.\n  num = b1 * c2 - b2 * c1;\n  x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n  num = a2 * c1 - a1 * c2;\n  y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n  return { x: x, y: y };\n}\n\n/**\n * @param r1\n * @param r2\n */\nfunction sameSign(r1, r2) {\n  return r1 * r2 > 0;\n}\n\nexport default intersectLine;\n","module.exports = intersectNode;\n\n/**\n * @param node\n * @param point\n */\nfunction intersectNode(node, point) {\n  // console.info('Intersect Node');\n  return node.intersect(point);\n}\n","/* eslint \"no-console\": off */\n\nimport intersectLine from './intersect-line';\n\nexport default intersectPolygon;\n\n/**\n * Returns the point ({x, y}) at which the point argument intersects with the node argument assuming\n * that it has the shape specified by polygon.\n *\n * @param node\n * @param polyPoints\n * @param point\n */\nfunction intersectPolygon(node, polyPoints, point) {\n  var x1 = node.x;\n  var y1 = node.y;\n\n  var intersections = [];\n\n  var minX = Number.POSITIVE_INFINITY;\n  var minY = Number.POSITIVE_INFINITY;\n  if (typeof polyPoints.forEach === 'function') {\n    polyPoints.forEach(function (entry) {\n      minX = Math.min(minX, entry.x);\n      minY = Math.min(minY, entry.y);\n    });\n  } else {\n    minX = Math.min(minX, polyPoints.x);\n    minY = Math.min(minY, polyPoints.y);\n  }\n\n  var left = x1 - node.width / 2 - minX;\n  var top = y1 - node.height / 2 - minY;\n\n  for (var i = 0; i < polyPoints.length; i++) {\n    var p1 = polyPoints[i];\n    var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n    var intersect = intersectLine(\n      node,\n      point,\n      { x: left + p1.x, y: top + p1.y },\n      { x: left + p2.x, y: top + p2.y }\n    );\n    if (intersect) {\n      intersections.push(intersect);\n    }\n  }\n\n  if (!intersections.length) {\n    // console.log('NO INTERSECTION FOUND, RETURN NODE CENTER', node);\n    return node;\n  }\n\n  if (intersections.length > 1) {\n    // More intersections, find the one nearest to edge end point\n    intersections.sort(function (p, q) {\n      var pdx = p.x - point.x;\n      var pdy = p.y - point.y;\n      var distp = Math.sqrt(pdx * pdx + pdy * pdy);\n\n      var qdx = q.x - point.x;\n      var qdy = q.y - point.y;\n      var distq = Math.sqrt(qdx * qdx + qdy * qdy);\n\n      return distp < distq ? -1 : distp === distq ? 0 : 1;\n    });\n  }\n  return intersections[0];\n}\n","const intersectRect = (node, point) => {\r\n  var x = node.x;\r\n  var y = node.y;\r\n\r\n  // Rectangle intersection algorithm from:\r\n  // https://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\r\n  var dx = point.x - x;\r\n  var dy = point.y - y;\r\n  var w = node.width / 2;\r\n  var h = node.height / 2;\r\n\r\n  var sx, sy;\r\n  if (Math.abs(dy) * w > Math.abs(dx) * h) {\r\n    // Intersection is top or bottom of rect.\r\n    if (dy < 0) {\r\n      h = -h;\r\n    }\r\n    sx = dy === 0 ? 0 : (h * dx) / dy;\r\n    sy = h;\r\n  } else {\r\n    // Intersection is left or right of rect.\r\n    if (dx < 0) {\r\n      w = -w;\r\n    }\r\n    sx = w;\r\n    sy = dx === 0 ? 0 : (w * dy) / dx;\r\n  }\r\n\r\n  return { x: x + sx, y: y + sy };\r\n};\r\n\r\nexport default intersectRect;\r\n","/** Setup arrow head and define the marker. The result is appended to the svg. */\n\nimport { log } from '../logger';\n\n// Only add the number of markers that the diagram needs\nconst insertMarkers = (elem, markerArray, type, id) => {\n  markerArray.forEach((markerName) => {\n    markers[markerName](elem, type, id);\n  });\n};\n\nconst extension = (elem, type, id) => {\n  log.trace('Making markers for ', id);\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', type + '-extensionStart')\n    .attr('class', 'marker extension ' + type)\n    .attr('refX', 0)\n    .attr('refY', 7)\n    .attr('markerWidth', 190)\n    .attr('markerHeight', 240)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 1,7 L18,13 V 1 Z');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', type + '-extensionEnd')\n    .attr('class', 'marker extension ' + type)\n    .attr('refX', 19)\n    .attr('refY', 7)\n    .attr('markerWidth', 20)\n    .attr('markerHeight', 28)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 1,1 V 13 L18,7 Z'); // this is actual shape for arrowhead\n};\n\nconst composition = (elem, type) => {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', type + '-compositionStart')\n    .attr('class', 'marker composition ' + type)\n    .attr('refX', 0)\n    .attr('refY', 7)\n    .attr('markerWidth', 190)\n    .attr('markerHeight', 240)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', type + '-compositionEnd')\n    .attr('class', 'marker composition ' + type)\n    .attr('refX', 19)\n    .attr('refY', 7)\n    .attr('markerWidth', 20)\n    .attr('markerHeight', 28)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n};\nconst aggregation = (elem, type) => {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', type + '-aggregationStart')\n    .attr('class', 'marker aggregation ' + type)\n    .attr('refX', 0)\n    .attr('refY', 7)\n    .attr('markerWidth', 190)\n    .attr('markerHeight', 240)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', type + '-aggregationEnd')\n    .attr('class', 'marker aggregation ' + type)\n    .attr('refX', 19)\n    .attr('refY', 7)\n    .attr('markerWidth', 20)\n    .attr('markerHeight', 28)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n};\nconst dependency = (elem, type) => {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', type + '-dependencyStart')\n    .attr('class', 'marker dependency ' + type)\n    .attr('refX', 0)\n    .attr('refY', 7)\n    .attr('markerWidth', 190)\n    .attr('markerHeight', 240)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', type + '-dependencyEnd')\n    .attr('class', 'marker dependency ' + type)\n    .attr('refX', 19)\n    .attr('refY', 7)\n    .attr('markerWidth', 20)\n    .attr('markerHeight', 28)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z');\n};\nconst point = (elem, type) => {\n  elem\n    .append('marker')\n    .attr('id', type + '-pointEnd')\n    .attr('class', 'marker ' + type)\n    .attr('viewBox', '0 0 10 10')\n    .attr('refX', 9)\n    .attr('refY', 5)\n    .attr('markerUnits', 'userSpaceOnUse')\n    .attr('markerWidth', 12)\n    .attr('markerHeight', 12)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 0 0 L 10 5 L 0 10 z')\n    .attr('class', 'arrowMarkerPath')\n    .style('stroke-width', 1)\n    .style('stroke-dasharray', '1,0');\n  elem\n    .append('marker')\n    .attr('id', type + '-pointStart')\n    .attr('class', 'marker ' + type)\n    .attr('viewBox', '0 0 10 10')\n    .attr('refX', 0)\n    .attr('refY', 5)\n    .attr('markerUnits', 'userSpaceOnUse')\n    .attr('markerWidth', 12)\n    .attr('markerHeight', 12)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 0 5 L 10 10 L 10 0 z')\n    .attr('class', 'arrowMarkerPath')\n    .style('stroke-width', 1)\n    .style('stroke-dasharray', '1,0');\n};\nconst circle = (elem, type) => {\n  elem\n    .append('marker')\n    .attr('id', type + '-circleEnd')\n    .attr('class', 'marker ' + type)\n    .attr('viewBox', '0 0 10 10')\n    .attr('refX', 11)\n    .attr('refY', 5)\n    .attr('markerUnits', 'userSpaceOnUse')\n    .attr('markerWidth', 11)\n    .attr('markerHeight', 11)\n    .attr('orient', 'auto')\n    .append('circle')\n    .attr('cx', '5')\n    .attr('cy', '5')\n    .attr('r', '5')\n    .attr('class', 'arrowMarkerPath')\n    .style('stroke-width', 1)\n    .style('stroke-dasharray', '1,0');\n\n  elem\n    .append('marker')\n    .attr('id', type + '-circleStart')\n    .attr('class', 'marker ' + type)\n    .attr('viewBox', '0 0 10 10')\n    .attr('refX', -1)\n    .attr('refY', 5)\n    .attr('markerUnits', 'userSpaceOnUse')\n    .attr('markerWidth', 11)\n    .attr('markerHeight', 11)\n    .attr('orient', 'auto')\n    .append('circle')\n    .attr('cx', '5')\n    .attr('cy', '5')\n    .attr('r', '5')\n    .attr('class', 'arrowMarkerPath')\n    .style('stroke-width', 1)\n    .style('stroke-dasharray', '1,0');\n};\nconst cross = (elem, type) => {\n  elem\n    .append('marker')\n    .attr('id', type + '-crossEnd')\n    .attr('class', 'marker cross ' + type)\n    .attr('viewBox', '0 0 11 11')\n    .attr('refX', 12)\n    .attr('refY', 5.2)\n    .attr('markerUnits', 'userSpaceOnUse')\n    .attr('markerWidth', 11)\n    .attr('markerHeight', 11)\n    .attr('orient', 'auto')\n    .append('path')\n    // .attr('stroke', 'black')\n    .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9')\n    .attr('class', 'arrowMarkerPath')\n    .style('stroke-width', 2)\n    .style('stroke-dasharray', '1,0');\n\n  elem\n    .append('marker')\n    .attr('id', type + '-crossStart')\n    .attr('class', 'marker cross ' + type)\n    .attr('viewBox', '0 0 11 11')\n    .attr('refX', -1)\n    .attr('refY', 5.2)\n    .attr('markerUnits', 'userSpaceOnUse')\n    .attr('markerWidth', 11)\n    .attr('markerHeight', 11)\n    .attr('orient', 'auto')\n    .append('path')\n    // .attr('stroke', 'black')\n    .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9')\n    .attr('class', 'arrowMarkerPath')\n    .style('stroke-width', 2)\n    .style('stroke-dasharray', '1,0');\n};\nconst barb = (elem, type) => {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', type + '-barbEnd')\n    .attr('refX', 19)\n    .attr('refY', 7)\n    .attr('markerWidth', 20)\n    .attr('markerHeight', 14)\n    .attr('markerUnits', 'strokeWidth')\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z');\n};\n\n// TODO rename the class diagram markers to something shape descriptive and semantic free\nconst markers = {\n  extension,\n  composition,\n  aggregation,\n  dependency,\n  point,\n  circle,\n  cross,\n  barb,\n};\nexport default insertMarkers;\n","/** Decorates with functions required by mermaids dagre-wrapper. */\nimport { log } from '../logger';\nimport graphlib from 'graphlib';\n\nexport let clusterDb = {};\nlet decendants = {};\nlet parents = {};\n\nexport const clear = () => {\n  decendants = {};\n  parents = {};\n  clusterDb = {};\n};\n\nconst isDecendant = (id, ancenstorId) => {\n  // if (id === ancenstorId) return true;\n\n  log.trace(\n    'In isDecendant',\n    ancenstorId,\n    ' ',\n    id,\n    ' = ',\n    decendants[ancenstorId].indexOf(id) >= 0\n  );\n  if (decendants[ancenstorId].indexOf(id) >= 0) return true;\n\n  return false;\n};\n\nconst edgeInCluster = (edge, clusterId) => {\n  log.info('Decendants of ', clusterId, ' is ', decendants[clusterId]);\n  log.info('Edge is ', edge);\n  // Edges to/from the cluster is not in the cluster, they are in the parent\n  if (edge.v === clusterId) return false;\n  if (edge.w === clusterId) return false;\n\n  if (!decendants[clusterId]) {\n    log.debug('Tilt, ', clusterId, ',not in decendants');\n    return false;\n  }\n  log.info('Here ');\n\n  if (decendants[clusterId].indexOf(edge.v) >= 0) return true;\n  if (isDecendant(edge.v, clusterId)) return true;\n  if (isDecendant(edge.w, clusterId)) return true;\n  if (decendants[clusterId].indexOf(edge.w) >= 0) return true;\n\n  return false;\n};\n\nconst copy = (clusterId, graph, newGraph, rootId) => {\n  log.warn(\n    'Copying children of ',\n    clusterId,\n    'root',\n    rootId,\n    'data',\n    graph.node(clusterId),\n    rootId\n  );\n  const nodes = graph.children(clusterId) || [];\n\n  // Include cluster node if it is not the root\n  if (clusterId !== rootId) {\n    nodes.push(clusterId);\n  }\n\n  log.warn('Copying (nodes) clusterId', clusterId, 'nodes', nodes);\n\n  nodes.forEach((node) => {\n    if (graph.children(node).length > 0) {\n      copy(node, graph, newGraph, rootId);\n    } else {\n      const data = graph.node(node);\n      log.info('cp ', node, ' to ', rootId, ' with parent ', clusterId); //,node, data, ' parent is ', clusterId);\n      newGraph.setNode(node, data);\n      if (rootId !== graph.parent(node)) {\n        log.warn('Setting parent', node, graph.parent(node));\n        newGraph.setParent(node, graph.parent(node));\n      }\n\n      if (clusterId !== rootId && node !== clusterId) {\n        log.debug('Setting parent', node, clusterId);\n        newGraph.setParent(node, clusterId);\n      } else {\n        log.info('In copy ', clusterId, 'root', rootId, 'data', graph.node(clusterId), rootId);\n        log.debug(\n          'Not Setting parent for node=',\n          node,\n          'cluster!==rootId',\n          clusterId !== rootId,\n          'node!==clusterId',\n          node !== clusterId\n        );\n      }\n      const edges = graph.edges(node);\n      log.debug('Copying Edges', edges);\n      edges.forEach((edge) => {\n        log.info('Edge', edge);\n        const data = graph.edge(edge.v, edge.w, edge.name);\n        log.info('Edge data', data, rootId);\n        try {\n          // Do not copy edges in and out of the root cluster, they belong to the parent graph\n          if (edgeInCluster(edge, rootId)) {\n            log.info('Copying as ', edge.v, edge.w, data, edge.name);\n            newGraph.setEdge(edge.v, edge.w, data, edge.name);\n            log.info('newGraph edges ', newGraph.edges(), newGraph.edge(newGraph.edges()[0]));\n          } else {\n            log.info(\n              'Skipping copy of edge ',\n              edge.v,\n              '-->',\n              edge.w,\n              ' rootId: ',\n              rootId,\n              ' clusterId:',\n              clusterId\n            );\n          }\n        } catch (e) {\n          log.error(e);\n        }\n      });\n    }\n    log.debug('Removing node', node);\n    graph.removeNode(node);\n  });\n};\nexport const extractDecendants = (id, graph) => {\n  // log.debug('Extracting ', id);\n  const children = graph.children(id);\n  let res = [].concat(children);\n\n  for (let i = 0; i < children.length; i++) {\n    parents[children[i]] = id;\n    res = res.concat(extractDecendants(children[i], graph));\n  }\n\n  return res;\n};\n\n/**\n * Validates the graph, checking that all parent child relation points to existing nodes and that\n * edges between nodes also ia correct. When not correct the function logs the discrepancies.\n *\n * @param graph\n */\nexport const validate = (graph) => {\n  const edges = graph.edges();\n  log.trace('Edges: ', edges);\n  for (let i = 0; i < edges.length; i++) {\n    if (graph.children(edges[i].v).length > 0) {\n      log.trace('The node ', edges[i].v, ' is part of and edge even though it has children');\n      return false;\n    }\n    if (graph.children(edges[i].w).length > 0) {\n      log.trace('The node ', edges[i].w, ' is part of and edge even though it has children');\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Finds a child that is not a cluster. When faking a edge between a node and a cluster.\n *\n * @param {Finds a} id\n * @param {any} graph\n */\nexport const findNonClusterChild = (id, graph) => {\n  // const node = graph.node(id);\n  log.trace('Searching', id);\n  // const children = graph.children(id).reverse();\n  const children = graph.children(id); //.reverse();\n  log.trace('Searching children of id ', id, children);\n  if (children.length < 1) {\n    log.trace('This is a valid node', id);\n    return id;\n  }\n  for (let i = 0; i < children.length; i++) {\n    const _id = findNonClusterChild(children[i], graph);\n    if (_id) {\n      log.trace('Found replacement for', id, ' => ', _id);\n      return _id;\n    }\n  }\n};\n\nconst getAnchorId = (id) => {\n  if (!clusterDb[id]) {\n    return id;\n  }\n  // If the cluster has no external connections\n  if (!clusterDb[id].externalConnections) {\n    return id;\n  }\n\n  // Return the replacement node\n  if (clusterDb[id]) {\n    return clusterDb[id].id;\n  }\n  return id;\n};\n\nexport const adjustClustersAndEdges = (graph, depth) => {\n  if (!graph || depth > 10) {\n    log.debug('Opting out, no graph ');\n    return;\n  } else {\n    log.debug('Opting in, graph ');\n  }\n  // Go through the nodes and for each cluster found, save a replacement node, this can be used when\n  // faking a link to a cluster\n  graph.nodes().forEach(function (id) {\n    const children = graph.children(id);\n    if (children.length > 0) {\n      log.warn(\n        'Cluster identified',\n        id,\n        ' Replacement id in edges: ',\n        findNonClusterChild(id, graph)\n      );\n      decendants[id] = extractDecendants(id, graph);\n      clusterDb[id] = { id: findNonClusterChild(id, graph), clusterData: graph.node(id) };\n    }\n  });\n\n  // Check incoming and outgoing edges for each cluster\n  graph.nodes().forEach(function (id) {\n    const children = graph.children(id);\n    const edges = graph.edges();\n    if (children.length > 0) {\n      log.debug('Cluster identified', id, decendants);\n      edges.forEach((edge) => {\n        // log.debug('Edge, decendants: ', edge, decendants[id]);\n\n        // Check if any edge leaves the cluster (not the actual cluster, thats a link from the box)\n        if (edge.v !== id && edge.w !== id) {\n          // Any edge where either the one of the nodes is decending to the cluster but not the other\n          // if (decendants[id].indexOf(edge.v) < 0 && decendants[id].indexOf(edge.w) < 0) {\n\n          const d1 = isDecendant(edge.v, id);\n          const d2 = isDecendant(edge.w, id);\n\n          // d1 xor d2 - if either d1 is true and d2 is false or the other way around\n          if (d1 ^ d2) {\n            log.warn('Edge: ', edge, ' leaves cluster ', id);\n            log.warn('Decendants of XXX ', id, ': ', decendants[id]);\n            clusterDb[id].externalConnections = true;\n          }\n        }\n      });\n    } else {\n      log.debug('Not a cluster ', id, decendants);\n    }\n  });\n\n  // For clusters with incoming and/or outgoing edges translate those edges to a real node\n  // in the cluster in order to fake the edge\n  graph.edges().forEach(function (e) {\n    const edge = graph.edge(e);\n    log.warn('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(e));\n    log.warn('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(graph.edge(e)));\n\n    let v = e.v;\n    let w = e.w;\n    // Check if link is either from or to a cluster\n    log.warn(\n      'Fix XXX',\n      clusterDb,\n      'ids:',\n      e.v,\n      e.w,\n      'Translateing: ',\n      clusterDb[e.v],\n      ' --- ',\n      clusterDb[e.w]\n    );\n    if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) {\n      log.warn('Fixing and trixing link to self - removing XXX', e.v, e.w, e.name);\n      log.warn('Fixing and trixing - removing XXX', e.v, e.w, e.name);\n      v = getAnchorId(e.v);\n      w = getAnchorId(e.w);\n      graph.removeEdge(e.v, e.w, e.name);\n      const specialId = e.w + '---' + e.v;\n      graph.setNode(specialId, {\n        domId: specialId,\n        id: specialId,\n        labelStyle: '',\n        labelText: edge.label,\n        padding: 0,\n        shape: 'labelRect',\n        style: '',\n      });\n      const edge1 = JSON.parse(JSON.stringify(edge));\n      const edge2 = JSON.parse(JSON.stringify(edge));\n      edge1.label = '';\n      edge1.arrowTypeEnd = 'none';\n      edge2.label = '';\n      edge1.fromCluster = e.v;\n      edge2.toCluster = e.v;\n\n      graph.setEdge(v, specialId, edge1, e.name + '-cyclic-special');\n      graph.setEdge(specialId, w, edge2, e.name + '-cyclic-special');\n    } else if (clusterDb[e.v] || clusterDb[e.w]) {\n      log.warn('Fixing and trixing - removing XXX', e.v, e.w, e.name);\n      v = getAnchorId(e.v);\n      w = getAnchorId(e.w);\n      graph.removeEdge(e.v, e.w, e.name);\n      if (v !== e.v) edge.fromCluster = e.v;\n      if (w !== e.w) edge.toCluster = e.w;\n      log.warn('Fix Replacing with XXX', v, w, e.name);\n      graph.setEdge(v, w, edge, e.name);\n    }\n  });\n  log.warn('Adjusted Graph', graphlib.json.write(graph));\n  extractor(graph, 0);\n\n  log.trace(clusterDb);\n\n  // Remove references to extracted cluster\n  // graph.edges().forEach(edge => {\n  //   if (isDecendant(edge.v, clusterId) || isDecendant(edge.w, clusterId)) {\n  //     graph.removeEdge(edge);\n  //   }\n  // });\n};\n\nexport const extractor = (graph, depth) => {\n  log.warn('extractor - ', depth, graphlib.json.write(graph), graph.children('D'));\n  if (depth > 10) {\n    log.error('Bailing out');\n    return;\n  }\n  // For clusters without incoming and/or outgoing edges, create a new cluster-node\n  // containing the nodes and edges in the custer in a new graph\n  // for (let i = 0;)\n  let nodes = graph.nodes();\n  let hasChildren = false;\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i];\n    const children = graph.children(node);\n    hasChildren = hasChildren || children.length > 0;\n  }\n\n  if (!hasChildren) {\n    log.debug('Done, no node has children', graph.nodes());\n    return;\n  }\n  // const clusters = Object.keys(clusterDb);\n  // clusters.forEach(clusterId => {\n  log.debug('Nodes = ', nodes, depth);\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i];\n\n    log.debug(\n      'Extracting node',\n      node,\n      clusterDb,\n      clusterDb[node] && !clusterDb[node].externalConnections,\n      !graph.parent(node),\n      graph.node(node),\n      graph.children('D'),\n      ' Depth ',\n      depth\n    );\n    // Note that the node might have been removed after the Object.keys call so better check\n    // that it still is in the game\n    if (!clusterDb[node]) {\n      // Skip if the node is not a cluster\n      log.debug('Not a cluster', node, depth);\n      // break;\n    } else if (\n      !clusterDb[node].externalConnections &&\n      // !graph.parent(node) &&\n      graph.children(node) &&\n      graph.children(node).length > 0\n    ) {\n      log.warn(\n        'Cluster without external connections, without a parent and with children',\n        node,\n        depth\n      );\n\n      const graphSettings = graph.graph();\n      let dir = graphSettings.rankdir === 'TB' ? 'LR' : 'TB';\n      if (clusterDb[node]) {\n        if (clusterDb[node].clusterData && clusterDb[node].clusterData.dir) {\n          dir = clusterDb[node].clusterData.dir;\n          log.warn('Fixing dir', clusterDb[node].clusterData.dir, dir);\n        }\n      }\n\n      const clusterGraph = new graphlib.Graph({\n        multigraph: true,\n        compound: true,\n      })\n        .setGraph({\n          rankdir: dir, // Todo: set proper spacing\n          nodesep: 50,\n          ranksep: 50,\n          marginx: 8,\n          marginy: 8,\n        })\n        .setDefaultEdgeLabel(function () {\n          return {};\n        });\n\n      log.warn('Old graph before copy', graphlib.json.write(graph));\n      copy(node, graph, clusterGraph, node);\n      graph.setNode(node, {\n        clusterNode: true,\n        id: node,\n        clusterData: clusterDb[node].clusterData,\n        labelText: clusterDb[node].labelText,\n        graph: clusterGraph,\n      });\n      log.warn('New graph after copy node: (', node, ')', graphlib.json.write(clusterGraph));\n      log.debug('Old graph after copy', graphlib.json.write(graph));\n    } else {\n      log.warn(\n        'Cluster ** ',\n        node,\n        ' **not meeting the criteria !externalConnections:',\n        !clusterDb[node].externalConnections,\n        ' no parent: ',\n        !graph.parent(node),\n        ' children ',\n        graph.children(node) && graph.children(node).length > 0,\n        graph.children('D'),\n        depth\n      );\n      log.debug(clusterDb);\n    }\n  }\n\n  nodes = graph.nodes();\n  log.warn('New list of nodes', nodes);\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i];\n    const data = graph.node(node);\n    log.warn(' Now next level', node, data);\n    if (data.clusterNode) {\n      extractor(data.graph, depth + 1);\n    }\n  }\n};\n\nconst sorter = (graph, nodes) => {\n  if (nodes.length === 0) return [];\n  let result = Object.assign(nodes);\n  nodes.forEach((node) => {\n    const children = graph.children(node);\n    const sorted = sorter(graph, children);\n    result = result.concat(sorted);\n  });\n\n  return result;\n};\n\nexport const sortNodesByHierarchy = (graph) => sorter(graph, graph.children());\n","import { select } from 'd3';\nimport { log } from '../logger'; // eslint-disable-line\nimport { labelHelper, updateNodeBounds, insertPolygonShape } from './shapes/util';\nimport { getConfig } from '../config';\nimport intersect from './intersect/index.js';\nimport createLabel from './createLabel';\nimport note from './shapes/note';\nimport { parseMember } from '../diagrams/class/svgDraw';\nimport { evaluate, sanitizeText as sanitize } from '../diagrams/common/common';\n\nconst sanitizeText = (txt) => sanitize(txt, getConfig());\n\nconst question = (parent, node) => {\n  const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true);\n\n  const w = bbox.width + node.padding;\n  const h = bbox.height + node.padding;\n  const s = w + h;\n  const points = [\n    { x: s / 2, y: 0 },\n    { x: s, y: -s / 2 },\n    { x: s / 2, y: -s },\n    { x: 0, y: -s / 2 },\n  ];\n\n  log.info('Question main (Circle)');\n\n  const questionElem = insertPolygonShape(shapeSvg, s, s, points);\n  questionElem.attr('style', node.style);\n  updateNodeBounds(node, questionElem);\n\n  node.intersect = function (point) {\n    log.warn('Intersect called');\n    return intersect.polygon(node, points, point);\n  };\n\n  return shapeSvg;\n};\n\nconst choice = (parent, node) => {\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', 'node default')\n    .attr('id', node.domId || node.id);\n\n  const s = 28;\n  const points = [\n    { x: 0, y: s / 2 },\n    { x: s / 2, y: 0 },\n    { x: 0, y: -s / 2 },\n    { x: -s / 2, y: 0 },\n  ];\n\n  const choice = shapeSvg.insert('polygon', ':first-child').attr(\n    'points',\n    points\n      .map(function (d) {\n        return d.x + ',' + d.y;\n      })\n      .join(' ')\n  );\n  // center the circle around its coordinate\n  choice.attr('class', 'state-start').attr('r', 7).attr('width', 28).attr('height', 28);\n  node.width = 28;\n  node.height = 28;\n\n  node.intersect = function (point) {\n    return intersect.circle(node, 14, point);\n  };\n\n  return shapeSvg;\n};\n\nconst hexagon = (parent, node) => {\n  const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true);\n\n  const f = 4;\n  const h = bbox.height + node.padding;\n  const m = h / f;\n  const w = bbox.width + 2 * m + node.padding;\n  const points = [\n    { x: m, y: 0 },\n    { x: w - m, y: 0 },\n    { x: w, y: -h / 2 },\n    { x: w - m, y: -h },\n    { x: m, y: -h },\n    { x: 0, y: -h / 2 },\n  ];\n\n  const hex = insertPolygonShape(shapeSvg, w, h, points);\n  hex.attr('style', node.style);\n  updateNodeBounds(node, hex);\n\n  node.intersect = function (point) {\n    return intersect.polygon(node, points, point);\n  };\n\n  return shapeSvg;\n};\n\nconst rect_left_inv_arrow = (parent, node) => {\n  const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true);\n\n  const w = bbox.width + node.padding;\n  const h = bbox.height + node.padding;\n  const points = [\n    { x: -h / 2, y: 0 },\n    { x: w, y: 0 },\n    { x: w, y: -h },\n    { x: -h / 2, y: -h },\n    { x: 0, y: -h / 2 },\n  ];\n\n  const el = insertPolygonShape(shapeSvg, w, h, points);\n  el.attr('style', node.style);\n\n  node.width = w + h;\n  node.height = h;\n\n  node.intersect = function (point) {\n    return intersect.polygon(node, points, point);\n  };\n\n  return shapeSvg;\n};\n\nconst lean_right = (parent, node) => {\n  const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true);\n\n  const w = bbox.width + node.padding;\n  const h = bbox.height + node.padding;\n  const points = [\n    { x: (-2 * h) / 6, y: 0 },\n    { x: w - h / 6, y: 0 },\n    { x: w + (2 * h) / 6, y: -h },\n    { x: h / 6, y: -h },\n  ];\n\n  const el = insertPolygonShape(shapeSvg, w, h, points);\n  el.attr('style', node.style);\n  updateNodeBounds(node, el);\n\n  node.intersect = function (point) {\n    return intersect.polygon(node, points, point);\n  };\n\n  return shapeSvg;\n};\n\nconst lean_left = (parent, node) => {\n  const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true);\n\n  const w = bbox.width + node.padding;\n  const h = bbox.height + node.padding;\n  const points = [\n    { x: (2 * h) / 6, y: 0 },\n    { x: w + h / 6, y: 0 },\n    { x: w - (2 * h) / 6, y: -h },\n    { x: -h / 6, y: -h },\n  ];\n\n  const el = insertPolygonShape(shapeSvg, w, h, points);\n  el.attr('style', node.style);\n  updateNodeBounds(node, el);\n\n  node.intersect = function (point) {\n    return intersect.polygon(node, points, point);\n  };\n\n  return shapeSvg;\n};\n\nconst trapezoid = (parent, node) => {\n  const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true);\n\n  const w = bbox.width + node.padding;\n  const h = bbox.height + node.padding;\n  const points = [\n    { x: (-2 * h) / 6, y: 0 },\n    { x: w + (2 * h) / 6, y: 0 },\n    { x: w - h / 6, y: -h },\n    { x: h / 6, y: -h },\n  ];\n\n  const el = insertPolygonShape(shapeSvg, w, h, points);\n  el.attr('style', node.style);\n  updateNodeBounds(node, el);\n\n  node.intersect = function (point) {\n    return intersect.polygon(node, points, point);\n  };\n\n  return shapeSvg;\n};\n\nconst inv_trapezoid = (parent, node) => {\n  const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true);\n\n  const w = bbox.width + node.padding;\n  const h = bbox.height + node.padding;\n  const points = [\n    { x: h / 6, y: 0 },\n    { x: w - h / 6, y: 0 },\n    { x: w + (2 * h) / 6, y: -h },\n    { x: (-2 * h) / 6, y: -h },\n  ];\n\n  const el = insertPolygonShape(shapeSvg, w, h, points);\n  el.attr('style', node.style);\n  updateNodeBounds(node, el);\n\n  node.intersect = function (point) {\n    return intersect.polygon(node, points, point);\n  };\n\n  return shapeSvg;\n};\n\nconst rect_right_inv_arrow = (parent, node) => {\n  const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true);\n\n  const w = bbox.width + node.padding;\n  const h = bbox.height + node.padding;\n  const points = [\n    { x: 0, y: 0 },\n    { x: w + h / 2, y: 0 },\n    { x: w, y: -h / 2 },\n    { x: w + h / 2, y: -h },\n    { x: 0, y: -h },\n  ];\n\n  const el = insertPolygonShape(shapeSvg, w, h, points);\n  el.attr('style', node.style);\n  updateNodeBounds(node, el);\n\n  node.intersect = function (point) {\n    return intersect.polygon(node, points, point);\n  };\n\n  return shapeSvg;\n};\n\nconst cylinder = (parent, node) => {\n  const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true);\n\n  const w = bbox.width + node.padding;\n  const rx = w / 2;\n  const ry = rx / (2.5 + w / 50);\n  const h = bbox.height + ry + node.padding;\n\n  const shape =\n    'M 0,' +\n    ry +\n    ' a ' +\n    rx +\n    ',' +\n    ry +\n    ' 0,0,0 ' +\n    w +\n    ' 0 a ' +\n    rx +\n    ',' +\n    ry +\n    ' 0,0,0 ' +\n    -w +\n    ' 0 l 0,' +\n    h +\n    ' a ' +\n    rx +\n    ',' +\n    ry +\n    ' 0,0,0 ' +\n    w +\n    ' 0 l 0,' +\n    -h;\n\n  const el = shapeSvg\n    .attr('label-offset-y', ry)\n    .insert('path', ':first-child')\n    .attr('style', node.style)\n    .attr('d', shape)\n    .attr('transform', 'translate(' + -w / 2 + ',' + -(h / 2 + ry) + ')');\n\n  updateNodeBounds(node, el);\n\n  node.intersect = function (point) {\n    const pos = intersect.rect(node, point);\n    const x = pos.x - node.x;\n\n    if (\n      rx != 0 &&\n      (Math.abs(x) < node.width / 2 ||\n        (Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry))\n    ) {\n      // ellipsis equation: x*x / a*a + y*y / b*b = 1\n      // solve for y to get adjustion value for pos.y\n      let y = ry * ry * (1 - (x * x) / (rx * rx));\n      if (y != 0) y = Math.sqrt(y);\n      y = ry - y;\n      if (point.y - node.y > 0) y = -y;\n\n      pos.y += y;\n    }\n\n    return pos;\n  };\n\n  return shapeSvg;\n};\n\nconst rect = (parent, node) => {\n  const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, 'node ' + node.classes, true);\n\n  log.trace('Classes = ', node.classes);\n  // add the rect\n  const rect = shapeSvg.insert('rect', ':first-child');\n\n  const totalWidth = bbox.width + node.padding;\n  const totalHeight = bbox.height + node.padding;\n  rect\n    .attr('class', 'basic label-container')\n    .attr('style', node.style)\n    .attr('rx', node.rx)\n    .attr('ry', node.ry)\n    .attr('x', -bbox.width / 2 - halfPadding)\n    .attr('y', -bbox.height / 2 - halfPadding)\n    .attr('width', totalWidth)\n    .attr('height', totalHeight);\n\n  if (node.props) {\n    const propKeys = new Set(Object.keys(node.props));\n    if (node.props.borders) {\n      applyNodePropertyBorders(rect, node.props.borders, totalWidth, totalHeight);\n      propKeys.delete('borders');\n    }\n    propKeys.forEach((propKey) => {\n      log.warn(`Unknown node property ${propKey}`);\n    });\n  }\n\n  updateNodeBounds(node, rect);\n\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n\n  return shapeSvg;\n};\n\nconst labelRect = (parent, node) => {\n  const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, 'label', true);\n\n  log.trace('Classes = ', node.classes);\n  // add the rect\n  const rect = shapeSvg.insert('rect', ':first-child');\n\n  // Hide the rect we are only after the label\n  const totalWidth = 0;\n  const totalHeight = 0;\n  rect.attr('width', totalWidth).attr('height', totalHeight);\n  shapeSvg.attr('class', 'label edgeLabel');\n\n  if (node.props) {\n    const propKeys = new Set(Object.keys(node.props));\n    if (node.props.borders) {\n      applyNodePropertyBorders(rect, node.props.borders, totalWidth, totalHeight);\n      propKeys.delete('borders');\n    }\n    propKeys.forEach((propKey) => {\n      log.warn(`Unknown node property ${propKey}`);\n    });\n  }\n\n  updateNodeBounds(node, rect);\n\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n\n  return shapeSvg;\n};\n\n/**\n * @param rect\n * @param borders\n * @param totalWidth\n * @param totalHeight\n */\nfunction applyNodePropertyBorders(rect, borders, totalWidth, totalHeight) {\n  const strokeDashArray = [];\n  const addBorder = (length) => {\n    strokeDashArray.push(length);\n    strokeDashArray.push(0);\n  };\n  const skipBorder = (length) => {\n    strokeDashArray.push(0);\n    strokeDashArray.push(length);\n  };\n  if (borders.includes('t')) {\n    log.debug('add top border');\n    addBorder(totalWidth);\n  } else {\n    skipBorder(totalWidth);\n  }\n  if (borders.includes('r')) {\n    log.debug('add right border');\n    addBorder(totalHeight);\n  } else {\n    skipBorder(totalHeight);\n  }\n  if (borders.includes('b')) {\n    log.debug('add bottom border');\n    addBorder(totalWidth);\n  } else {\n    skipBorder(totalWidth);\n  }\n  if (borders.includes('l')) {\n    log.debug('add left border');\n    addBorder(totalHeight);\n  } else {\n    skipBorder(totalHeight);\n  }\n  rect.attr('stroke-dasharray', strokeDashArray.join(' '));\n}\n\nconst rectWithTitle = (parent, node) => {\n  // const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, 'node ' + node.classes);\n\n  let classes;\n  if (!node.classes) {\n    classes = 'node default';\n  } else {\n    classes = 'node ' + node.classes;\n  }\n  // Add outer g element\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', classes)\n    .attr('id', node.domId || node.id);\n\n  // Create the title label and insert it after the rect\n  const rect = shapeSvg.insert('rect', ':first-child');\n  // const innerRect = shapeSvg.insert('rect');\n  const innerLine = shapeSvg.insert('line');\n\n  const label = shapeSvg.insert('g').attr('class', 'label');\n\n  const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText;\n  // const text2 = typeof text2prim === 'object' ? text2prim[0] : text2prim;\n\n  let title = '';\n  if (typeof text2 === 'object') {\n    title = text2[0];\n  } else {\n    title = text2;\n  }\n  log.info('Label text abc79', title, text2, typeof text2 === 'object');\n\n  const text = label.node().appendChild(createLabel(title, node.labelStyle, true, true));\n  let bbox = { width: 0, height: 0 };\n  if (evaluate(getConfig().flowchart.htmlLabels)) {\n    const div = text.children[0];\n    const dv = select(text);\n    bbox = div.getBoundingClientRect();\n    dv.attr('width', bbox.width);\n    dv.attr('height', bbox.height);\n  }\n  log.info('Text 2', text2);\n  const textRows = text2.slice(1, text2.length);\n  let titleBox = text.getBBox();\n  const descr = label\n    .node()\n    .appendChild(\n      createLabel(textRows.join ? textRows.join('<br/>') : textRows, node.labelStyle, true, true)\n    );\n\n  if (evaluate(getConfig().flowchart.htmlLabels)) {\n    const div = descr.children[0];\n    const dv = select(descr);\n    bbox = div.getBoundingClientRect();\n    dv.attr('width', bbox.width);\n    dv.attr('height', bbox.height);\n  }\n  // bbox = label.getBBox();\n  // log.info(descr);\n  const halfPadding = node.padding / 2;\n  select(descr).attr(\n    'transform',\n    'translate( ' +\n      // (titleBox.width - bbox.width) / 2 +\n      (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) +\n      ', ' +\n      (titleBox.height + halfPadding + 5) +\n      ')'\n  );\n  select(text).attr(\n    'transform',\n    'translate( ' +\n      // (titleBox.width - bbox.width) / 2 +\n      (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) +\n      ', ' +\n      0 +\n      ')'\n  );\n  // Get the size of the label\n\n  // Bounding box for title and text\n  bbox = label.node().getBBox();\n\n  // Center the label\n  label.attr(\n    'transform',\n    'translate(' + -bbox.width / 2 + ', ' + (-bbox.height / 2 - halfPadding + 3) + ')'\n  );\n\n  rect\n    .attr('class', 'outer title-state')\n    .attr('x', -bbox.width / 2 - halfPadding)\n    .attr('y', -bbox.height / 2 - halfPadding)\n    .attr('width', bbox.width + node.padding)\n    .attr('height', bbox.height + node.padding);\n\n  innerLine\n    .attr('class', 'divider')\n    .attr('x1', -bbox.width / 2 - halfPadding)\n    .attr('x2', bbox.width / 2 + halfPadding)\n    .attr('y1', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding)\n    .attr('y2', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n\n  updateNodeBounds(node, rect);\n\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n\n  return shapeSvg;\n};\n\nconst stadium = (parent, node) => {\n  const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true);\n\n  const h = bbox.height + node.padding;\n  const w = bbox.width + h / 4 + node.padding;\n\n  // add the rect\n  const rect = shapeSvg\n    .insert('rect', ':first-child')\n    .attr('style', node.style)\n    .attr('rx', h / 2)\n    .attr('ry', h / 2)\n    .attr('x', -w / 2)\n    .attr('y', -h / 2)\n    .attr('width', w)\n    .attr('height', h);\n\n  updateNodeBounds(node, rect);\n\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n\n  return shapeSvg;\n};\n\nconst circle = (parent, node) => {\n  const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, undefined, true);\n  const circle = shapeSvg.insert('circle', ':first-child');\n\n  // center the circle around its coordinate\n  circle\n    .attr('style', node.style)\n    .attr('rx', node.rx)\n    .attr('ry', node.ry)\n    .attr('r', bbox.width / 2 + halfPadding)\n    .attr('width', bbox.width + node.padding)\n    .attr('height', bbox.height + node.padding);\n\n  log.info('Circle main');\n\n  updateNodeBounds(node, circle);\n\n  node.intersect = function (point) {\n    log.info('Circle intersect', node, bbox.width / 2 + halfPadding, point);\n    return intersect.circle(node, bbox.width / 2 + halfPadding, point);\n  };\n\n  return shapeSvg;\n};\n\nconst doublecircle = (parent, node) => {\n  const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, undefined, true);\n  const gap = 5;\n  const circleGroup = shapeSvg.insert('g', ':first-child');\n  const outerCircle = circleGroup.insert('circle');\n  const innerCircle = circleGroup.insert('circle');\n\n  // center the circle around its coordinate\n  outerCircle\n    .attr('style', node.style)\n    .attr('rx', node.rx)\n    .attr('ry', node.ry)\n    .attr('r', bbox.width / 2 + halfPadding + gap)\n    .attr('width', bbox.width + node.padding + gap * 2)\n    .attr('height', bbox.height + node.padding + gap * 2);\n\n  innerCircle\n    .attr('style', node.style)\n    .attr('rx', node.rx)\n    .attr('ry', node.ry)\n    .attr('r', bbox.width / 2 + halfPadding)\n    .attr('width', bbox.width + node.padding)\n    .attr('height', bbox.height + node.padding);\n\n  log.info('DoubleCircle main');\n\n  updateNodeBounds(node, outerCircle);\n\n  node.intersect = function (point) {\n    log.info('DoubleCircle intersect', node, bbox.width / 2 + halfPadding + gap, point);\n    return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point);\n  };\n\n  return shapeSvg;\n};\n\nconst subroutine = (parent, node) => {\n  const { shapeSvg, bbox } = labelHelper(parent, node, undefined, true);\n\n  const w = bbox.width + node.padding;\n  const h = bbox.height + node.padding;\n  const points = [\n    { x: 0, y: 0 },\n    { x: w, y: 0 },\n    { x: w, y: -h },\n    { x: 0, y: -h },\n    { x: 0, y: 0 },\n    { x: -8, y: 0 },\n    { x: w + 8, y: 0 },\n    { x: w + 8, y: -h },\n    { x: -8, y: -h },\n    { x: -8, y: 0 },\n  ];\n\n  const el = insertPolygonShape(shapeSvg, w, h, points);\n  el.attr('style', node.style);\n  updateNodeBounds(node, el);\n\n  node.intersect = function (point) {\n    return intersect.polygon(node, points, point);\n  };\n\n  return shapeSvg;\n};\n\nconst start = (parent, node) => {\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', 'node default')\n    .attr('id', node.domId || node.id);\n  const circle = shapeSvg.insert('circle', ':first-child');\n\n  // center the circle around its coordinate\n  circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14);\n\n  updateNodeBounds(node, circle);\n\n  node.intersect = function (point) {\n    return intersect.circle(node, 7, point);\n  };\n\n  return shapeSvg;\n};\n\nconst forkJoin = (parent, node, dir) => {\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', 'node default')\n    .attr('id', node.domId || node.id);\n\n  let width = 70;\n  let height = 10;\n\n  if (dir === 'LR') {\n    width = 10;\n    height = 70;\n  }\n\n  const shape = shapeSvg\n    .append('rect')\n    .attr('x', (-1 * width) / 2)\n    .attr('y', (-1 * height) / 2)\n    .attr('width', width)\n    .attr('height', height)\n    .attr('class', 'fork-join');\n\n  updateNodeBounds(node, shape);\n  node.height = node.height + node.padding / 2;\n  node.width = node.width + node.padding / 2;\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n\n  return shapeSvg;\n};\n\nconst end = (parent, node) => {\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', 'node default')\n    .attr('id', node.domId || node.id);\n  const innerCircle = shapeSvg.insert('circle', ':first-child');\n  const circle = shapeSvg.insert('circle', ':first-child');\n\n  circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14);\n\n  innerCircle.attr('class', 'state-end').attr('r', 5).attr('width', 10).attr('height', 10);\n\n  updateNodeBounds(node, circle);\n\n  node.intersect = function (point) {\n    return intersect.circle(node, 7, point);\n  };\n\n  return shapeSvg;\n};\n\nconst class_box = (parent, node) => {\n  const halfPadding = node.padding / 2;\n  const rowPadding = 4;\n  const lineHeight = 8;\n\n  let classes;\n  if (!node.classes) {\n    classes = 'node default';\n  } else {\n    classes = 'node ' + node.classes;\n  }\n  // Add outer g element\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', classes)\n    .attr('id', node.domId || node.id);\n\n  // Create the title label and insert it after the rect\n  const rect = shapeSvg.insert('rect', ':first-child');\n  const topLine = shapeSvg.insert('line');\n  const bottomLine = shapeSvg.insert('line');\n  let maxWidth = 0;\n  let maxHeight = rowPadding;\n\n  const labelContainer = shapeSvg.insert('g').attr('class', 'label');\n  let verticalPos = 0;\n  const hasInterface = node.classData.annotations && node.classData.annotations[0];\n\n  // 1. Create the labels\n  const interfaceLabelText = node.classData.annotations[0]\n    ? '«' + node.classData.annotations[0] + '»'\n    : '';\n  const interfaceLabel = labelContainer\n    .node()\n    .appendChild(createLabel(interfaceLabelText, node.labelStyle, true, true));\n  let interfaceBBox = interfaceLabel.getBBox();\n  if (evaluate(getConfig().flowchart.htmlLabels)) {\n    const div = interfaceLabel.children[0];\n    const dv = select(interfaceLabel);\n    interfaceBBox = div.getBoundingClientRect();\n    dv.attr('width', interfaceBBox.width);\n    dv.attr('height', interfaceBBox.height);\n  }\n  if (node.classData.annotations[0]) {\n    maxHeight += interfaceBBox.height + rowPadding;\n    maxWidth += interfaceBBox.width;\n  }\n\n  let classTitleString = node.classData.id;\n\n  if (node.classData.type !== undefined && node.classData.type !== '') {\n    if (getConfig().flowchart.htmlLabels) {\n      classTitleString += '&lt;' + node.classData.type + '&gt;';\n    } else {\n      classTitleString += '<' + node.classData.type + '>';\n    }\n  }\n  const classTitleLabel = labelContainer\n    .node()\n    .appendChild(createLabel(classTitleString, node.labelStyle, true, true));\n  select(classTitleLabel).attr('class', 'classTitle');\n  let classTitleBBox = classTitleLabel.getBBox();\n  if (evaluate(getConfig().flowchart.htmlLabels)) {\n    const div = classTitleLabel.children[0];\n    const dv = select(classTitleLabel);\n    classTitleBBox = div.getBoundingClientRect();\n    dv.attr('width', classTitleBBox.width);\n    dv.attr('height', classTitleBBox.height);\n  }\n  maxHeight += classTitleBBox.height + rowPadding;\n  if (classTitleBBox.width > maxWidth) {\n    maxWidth = classTitleBBox.width;\n  }\n  const classAttributes = [];\n  node.classData.members.forEach((str) => {\n    const parsedInfo = parseMember(str);\n    let parsedText = parsedInfo.displayText;\n    if (getConfig().flowchart.htmlLabels) {\n      parsedText = parsedText.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n    }\n    const lbl = labelContainer\n      .node()\n      .appendChild(\n        createLabel(\n          parsedText,\n          parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n          true,\n          true\n        )\n      );\n    let bbox = lbl.getBBox();\n    if (evaluate(getConfig().flowchart.htmlLabels)) {\n      const div = lbl.children[0];\n      const dv = select(lbl);\n      bbox = div.getBoundingClientRect();\n      dv.attr('width', bbox.width);\n      dv.attr('height', bbox.height);\n    }\n    if (bbox.width > maxWidth) {\n      maxWidth = bbox.width;\n    }\n    maxHeight += bbox.height + rowPadding;\n    classAttributes.push(lbl);\n  });\n\n  maxHeight += lineHeight;\n\n  const classMethods = [];\n  node.classData.methods.forEach((str) => {\n    const parsedInfo = parseMember(str);\n    let displayText = parsedInfo.displayText;\n    if (getConfig().flowchart.htmlLabels) {\n      displayText = displayText.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n    }\n    const lbl = labelContainer\n      .node()\n      .appendChild(\n        createLabel(\n          displayText,\n          parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n          true,\n          true\n        )\n      );\n    let bbox = lbl.getBBox();\n    if (evaluate(getConfig().flowchart.htmlLabels)) {\n      const div = lbl.children[0];\n      const dv = select(lbl);\n      bbox = div.getBoundingClientRect();\n      dv.attr('width', bbox.width);\n      dv.attr('height', bbox.height);\n    }\n    if (bbox.width > maxWidth) {\n      maxWidth = bbox.width;\n    }\n    maxHeight += bbox.height + rowPadding;\n\n    classMethods.push(lbl);\n  });\n\n  maxHeight += lineHeight;\n\n  // 2. Position the labels\n\n  // position the interface label\n  if (hasInterface) {\n    let diffX = (maxWidth - interfaceBBox.width) / 2;\n    select(interfaceLabel).attr(\n      'transform',\n      'translate( ' + ((-1 * maxWidth) / 2 + diffX) + ', ' + (-1 * maxHeight) / 2 + ')'\n    );\n    verticalPos = interfaceBBox.height + rowPadding;\n  }\n  // Position the class title label\n  let diffX = (maxWidth - classTitleBBox.width) / 2;\n  select(classTitleLabel).attr(\n    'transform',\n    'translate( ' +\n      ((-1 * maxWidth) / 2 + diffX) +\n      ', ' +\n      ((-1 * maxHeight) / 2 + verticalPos) +\n      ')'\n  );\n  verticalPos += classTitleBBox.height + rowPadding;\n\n  topLine\n    .attr('class', 'divider')\n    .attr('x1', -maxWidth / 2 - halfPadding)\n    .attr('x2', maxWidth / 2 + halfPadding)\n    .attr('y1', -maxHeight / 2 - halfPadding + lineHeight + verticalPos)\n    .attr('y2', -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n\n  verticalPos += lineHeight;\n\n  classAttributes.forEach((lbl) => {\n    select(lbl).attr(\n      'transform',\n      'translate( ' +\n        -maxWidth / 2 +\n        ', ' +\n        ((-1 * maxHeight) / 2 + verticalPos + lineHeight / 2) +\n        ')'\n    );\n    verticalPos += classTitleBBox.height + rowPadding;\n  });\n\n  verticalPos += lineHeight;\n  bottomLine\n    .attr('class', 'divider')\n    .attr('x1', -maxWidth / 2 - halfPadding)\n    .attr('x2', maxWidth / 2 + halfPadding)\n    .attr('y1', -maxHeight / 2 - halfPadding + lineHeight + verticalPos)\n    .attr('y2', -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n\n  verticalPos += lineHeight;\n\n  classMethods.forEach((lbl) => {\n    select(lbl).attr(\n      'transform',\n      'translate( ' + -maxWidth / 2 + ', ' + ((-1 * maxHeight) / 2 + verticalPos) + ')'\n    );\n    verticalPos += classTitleBBox.height + rowPadding;\n  });\n  //\n  // let bbox;\n  // if (evaluate(getConfig().flowchart.htmlLabels)) {\n  //   const div = interfaceLabel.children[0];\n  //   const dv = select(interfaceLabel);\n  //   bbox = div.getBoundingClientRect();\n  //   dv.attr('width', bbox.width);\n  //   dv.attr('height', bbox.height);\n  // }\n  // bbox = labelContainer.getBBox();\n\n  // log.info('Text 2', text2);\n  // const textRows = text2.slice(1, text2.length);\n  // let titleBox = text.getBBox();\n  // const descr = label\n  //   .node()\n  //   .appendChild(createLabel(textRows.join('<br/>'), node.labelStyle, true, true));\n\n  // if (evaluate(getConfig().flowchart.htmlLabels)) {\n  //   const div = descr.children[0];\n  //   const dv = select(descr);\n  //   bbox = div.getBoundingClientRect();\n  //   dv.attr('width', bbox.width);\n  //   dv.attr('height', bbox.height);\n  // }\n  // // bbox = label.getBBox();\n  // // log.info(descr);\n  // select(descr).attr(\n  //   'transform',\n  //   'translate( ' +\n  //     // (titleBox.width - bbox.width) / 2 +\n  //     (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) +\n  //     ', ' +\n  //     (titleBox.height + halfPadding + 5) +\n  //     ')'\n  // );\n  // select(text).attr(\n  //   'transform',\n  //   'translate( ' +\n  //     // (titleBox.width - bbox.width) / 2 +\n  //     (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) +\n  //     ', ' +\n  //     0 +\n  //     ')'\n  // );\n  // // Get the size of the label\n\n  // // Bounding box for title and text\n  // bbox = label.node().getBBox();\n\n  // // Center the label\n  // label.attr(\n  //   'transform',\n  //   'translate(' + -bbox.width / 2 + ', ' + (-bbox.height / 2 - halfPadding + 3) + ')'\n  // );\n\n  rect\n    .attr('class', 'outer title-state')\n    .attr('x', -maxWidth / 2 - halfPadding)\n    .attr('y', -(maxHeight / 2) - halfPadding)\n    .attr('width', maxWidth + node.padding)\n    .attr('height', maxHeight + node.padding);\n\n  // innerLine\n  //   .attr('class', 'divider')\n  //   .attr('x1', -bbox.width / 2 - halfPadding)\n  //   .attr('x2', bbox.width / 2 + halfPadding)\n  //   .attr('y1', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding)\n  //   .attr('y2', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n\n  updateNodeBounds(node, rect);\n\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n\n  return shapeSvg;\n};\n\nconst shapes = {\n  question,\n  rect,\n  labelRect,\n  rectWithTitle,\n  choice,\n  circle,\n  doublecircle,\n  stadium,\n  hexagon,\n  rect_left_inv_arrow,\n  lean_right,\n  lean_left,\n  trapezoid,\n  inv_trapezoid,\n  rect_right_inv_arrow,\n  cylinder,\n  start,\n  end,\n  note,\n  subroutine,\n  fork: forkJoin,\n  join: forkJoin,\n  class_box,\n};\n\nlet nodeElems = {};\n\nexport const insertNode = (elem, node, dir) => {\n  let newEl;\n  let el;\n\n  // Add link when appropriate\n  if (node.link) {\n    let target;\n    if (getConfig().securityLevel === 'sandbox') {\n      target = '_top';\n    } else if (node.linkTarget) {\n      target = node.linkTarget || '_blank';\n    }\n    newEl = elem.insert('svg:a').attr('xlink:href', node.link).attr('target', target);\n    el = shapes[node.shape](newEl, node, dir);\n  } else {\n    el = shapes[node.shape](elem, node, dir);\n    newEl = el;\n  }\n  if (node.tooltip) {\n    el.attr('title', node.tooltip);\n  }\n  if (node.class) {\n    el.attr('class', 'node default ' + node.class);\n  }\n\n  nodeElems[node.id] = newEl;\n\n  if (node.haveCallback) {\n    nodeElems[node.id].attr('class', nodeElems[node.id].attr('class') + ' clickable');\n  }\n};\nexport const setNodeElem = (elem, node) => {\n  nodeElems[node.id] = elem;\n};\nexport const clear = () => {\n  nodeElems = {};\n};\n\nexport const positionNode = (node) => {\n  const el = nodeElems[node.id];\n  log.trace(\n    'Transforming node',\n    node.diff,\n    node,\n    'translate(' + (node.x - node.width / 2 - 5) + ', ' + node.width / 2 + ')'\n  );\n  const padding = 8;\n  const diff = node.diff || 0;\n  if (node.clusterNode) {\n    el.attr(\n      'transform',\n      'translate(' +\n        (node.x + diff - node.width / 2) +\n        ', ' +\n        (node.y - node.height / 2 - padding) +\n        ')'\n    );\n  } else {\n    el.attr('transform', 'translate(' + node.x + ', ' + node.y + ')');\n  }\n  return diff;\n};\n","import { updateNodeBounds, labelHelper } from './util';\nimport { log } from '../../logger'; // eslint-disable-line\nimport intersect from '../intersect/index.js';\n\nconst note = (parent, node) => {\n  const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, 'node ' + node.classes, true);\n\n  log.info('Classes = ', node.classes);\n  // add the rect\n  const rect = shapeSvg.insert('rect', ':first-child');\n\n  rect\n    .attr('rx', node.rx)\n    .attr('ry', node.ry)\n    .attr('x', -bbox.width / 2 - halfPadding)\n    .attr('y', -bbox.height / 2 - halfPadding)\n    .attr('width', bbox.width + node.padding)\n    .attr('height', bbox.height + node.padding);\n\n  updateNodeBounds(node, rect);\n\n  node.intersect = function (point) {\n    return intersect.rect(node, point);\n  };\n\n  return shapeSvg;\n};\n\nexport default note;\n","import createLabel from '../createLabel';\nimport { getConfig } from '../../config';\nimport { decodeEntities } from '../../mermaidAPI';\nimport { select } from 'd3';\nimport { evaluate, sanitizeText } from '../../diagrams/common/common';\nexport const labelHelper = (parent, node, _classes, isNode) => {\n  let classes;\n  if (!_classes) {\n    classes = 'node default';\n  } else {\n    classes = _classes;\n  }\n  // Add outer g element\n  const shapeSvg = parent\n    .insert('g')\n    .attr('class', classes)\n    .attr('id', node.domId || node.id);\n\n  // Create the label and insert it after the rect\n  const label = shapeSvg.insert('g').attr('class', 'label').attr('style', node.labelStyle);\n\n  const labelText = typeof node.labelText === 'string' ? node.labelText : node.labelText[0];\n\n  const text = label\n    .node()\n    .appendChild(\n      createLabel(\n        sanitizeText(decodeEntities(labelText), getConfig()),\n        node.labelStyle,\n        false,\n        isNode\n      )\n    );\n\n  // Get the size of the label\n  let bbox = text.getBBox();\n\n  if (evaluate(getConfig().flowchart.htmlLabels)) {\n    const div = text.children[0];\n    const dv = select(text);\n    bbox = div.getBoundingClientRect();\n    dv.attr('width', bbox.width);\n    dv.attr('height', bbox.height);\n  }\n\n  const halfPadding = node.padding / 2;\n\n  // Center the label\n  label.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n\n  return { shapeSvg, bbox, halfPadding, label };\n};\n\nexport const updateNodeBounds = (node, element) => {\n  const bbox = element.node().getBBox();\n  node.width = bbox.width;\n  node.height = bbox.height;\n};\n\n/**\n * @param parent\n * @param w\n * @param h\n * @param points\n */\nexport function insertPolygonShape(parent, w, h, points) {\n  return parent\n    .insert('polygon', ':first-child')\n    .attr(\n      'points',\n      points\n        .map(function (d) {\n          return d.x + ',' + d.y;\n        })\n        .join(' ')\n    )\n    .attr('class', 'label-container')\n    .attr('transform', 'translate(' + -w / 2 + ',' + h / 2 + ')');\n}\n","import theme from './themes';\n/**\n * **Configuration methods in Mermaid version 8.6.0 have been updated, to learn more[[click\n * here](8.6.0_docs.md)].**\n *\n * ## **What follows are config instructions for older versions**\n *\n * These are the default options which can be overridden with the initialization call like so:\n *\n * **Example 1:**<pre> mermaid.initialize({ flowchart:{ htmlLabels: false } }); </pre>\n *\n * **Example 2:**<pre> <script> var config = { startOnLoad:true, flowchart:{ useMaxWidth:true,\n * htmlLabels:true, curve:'cardinal', },\n *\n *     securityLevel:'loose',\n *\n * }; mermaid.initialize(config); </script> </pre>\n *\n * A summary of all options and their defaults is found [here](#mermaidapi-configuration-defaults).\n * A description of each option follows below.\n *\n * @name Configuration\n */\nconst config = {\n  /**\n   * Theme , the CSS style sheet\n   *\n   * | Parameter | Description     | Type   | Required | Values                                         |\n   * | --------- | --------------- | ------ | -------- | ---------------------------------------------- |\n   * | theme     | Built in Themes | string | Optional | 'default', 'forest', 'dark', 'neutral', 'null' |\n   *\n   * **Notes:** To disable any pre-defined mermaid theme, use \"null\".<pre> \"theme\": \"forest\",\n   * \"themeCSS\": \".node rect { fill: red; }\" </pre>\n   */\n  theme: 'default',\n  themeVariables: theme['default'].getThemeVariables(),\n  themeCSS: undefined,\n  /* **maxTextSize** - The maximum allowed size of the users text diagram */\n  maxTextSize: 50000,\n  darkMode: false,\n\n  /**\n   * | Parameter  | Description                                            | Type   | Required | Values                      |\n   * | ---------- | ------------------------------------------------------ | ------ | -------- | --------------------------- |\n   * | fontFamily | specifies the font to be used in the rendered diagrams | string | Required | Any Possible CSS FontFamily |\n   *\n   * **Notes:** Default value: '\"trebuchet ms\", verdana, arial, sans-serif;'.\n   */\n  fontFamily: '\"trebuchet ms\", verdana, arial, sans-serif;',\n\n  /**\n   * | Parameter | Description                                           | Type             | Required | Values        |\n   * | --------- | ----------------------------------------------------- | ---------------- | -------- | ------------- |\n   * | logLevel  | This option decides the amount of logging to be used. | string \\| number | Required | 1, 2, 3, 4, 5 |\n   *\n   * **Notes:**\n   *\n   * - Debug: 1\n   * - Info: 2\n   * - Warn: 3\n   * - Error: 4\n   * - Fatal: 5 (default)\n   */\n  logLevel: 5,\n\n  /**\n   * | Parameter     | Description                       | Type   | Required | Values                          |\n   * | ------------- | --------------------------------- | ------ | -------- | ------------------------------- |\n   * | securitylevel | Level of trust for parsed diagram | string | Required | 'strict', 'loose', 'antiscript' |\n   *\n   * **Notes**:\n   *\n   * - **strict**: (**default**) tags in text are encoded, click functionality is disabled\n   * - **loose**: tags in text are allowed, click functionality is enabled\n   * - **antiscript**: html tags in text are allowed, (only script element is removed), click\n   *   functionality is enabled\n   */\n  securityLevel: 'strict',\n\n  /**\n   * | Parameter   | Description                                  | Type    | Required | Values      |\n   * | ----------- | -------------------------------------------- | ------- | -------- | ----------- |\n   * | startOnLoad | Dictates whether mermaid starts on Page load | boolean | Required | true, false |\n   *\n   * **Notes:** Default value: true\n   */\n  startOnLoad: true,\n\n  /**\n   * | Parameter           | Description                                                                  | Type    | Required | Values      |\n   * | ------------------- | ---------------------------------------------------------------------------- | ------- | -------- | ----------- |\n   * | arrowMarkerAbsolute | Controls whether or arrow markers in html code are absolute paths or anchors | boolean | Required | true, false |\n   *\n   * **Notes**:\n   *\n   * This matters if you are using base tag settings.\n   *\n   * Default value: false\n   */\n  arrowMarkerAbsolute: false,\n\n  /**\n   * This option controls which currentConfig keys are considered _secure_ and can only be changed\n   * via call to mermaidAPI.initialize. Calls to mermaidAPI.reinitialize cannot make changes to the\n   * `secure` keys in the current currentConfig. This prevents malicious graph directives from\n   * overriding a site's default security.\n   *\n   * **Notes**:\n   *\n   * Default value: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize']\n   */\n  secure: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize'],\n\n  /**\n   * This option controls if the generated ids of nodes in the SVG are generated randomly or based\n   * on a seed. If set to false, the IDs are generated based on the current date and thus are not\n   * deterministic. This is the default behaviour.\n   *\n   * **Notes**:\n   *\n   * This matters if your files are checked into sourcecontrol e.g. git and should not change unless\n   * content is changed.\n   *\n   * Default value: false\n   */\n  deterministicIds: false,\n\n  /**\n   * This option is the optional seed for deterministic ids. if set to undefined but\n   * deterministicIds is true, a simple number iterator is used. You can set this attribute to base\n   * the seed on a static string.\n   */\n  deterministicIDSeed: undefined,\n\n  /** The object containing configurations specific for flowcharts */\n  flowchart: {\n    /**\n     * | Parameter      | Description                                     | Type    | Required | Values             |\n     * | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ |\n     * | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value |\n     *\n     * **Notes:**\n     *\n     * The amount of padding around the diagram as a whole so that embedded diagrams have margins,\n     * expressed in pixels\n     *\n     * Default value: 8\n     */\n    diagramPadding: 8,\n\n    /**\n     * | Parameter  | Description                                                                                  | Type    | Required | Values      |\n     * | ---------- | -------------------------------------------------------------------------------------------- | ------- | -------- | ----------- |\n     * | htmlLabels | Flag for setting whether or not a html tag should be used for rendering labels on the edges. | boolean | Required | true, false |\n     *\n     * **Notes:** Default value: true.\n     */\n    htmlLabels: true,\n\n    /**\n     * | Parameter   | Description                                         | Type    | Required | Values              |\n     * | ----------- | --------------------------------------------------- | ------- | -------- | ------------------- |\n     * | nodeSpacing | Defines the spacing between nodes on the same level | Integer | Required | Any positive Number |\n     *\n     * **Notes:**\n     *\n     * Pertains to horizontal spacing for TB (top to bottom) or BT (bottom to top) graphs, and the\n     * vertical spacing for LR as well as RL graphs.**\n     *\n     * Default value: 50\n     */\n    nodeSpacing: 50,\n\n    /**\n     * | Parameter   | Description                                           | Type    | Required | Values              |\n     * | ----------- | ----------------------------------------------------- | ------- | -------- | ------------------- |\n     * | rankSpacing | Defines the spacing between nodes on different levels | Integer | Required | Any Positive Number |\n     *\n     * **Notes**:\n     *\n     * Pertains to vertical spacing for TB (top to bottom) or BT (bottom to top), and the horizontal\n     * spacing for LR as well as RL graphs.\n     *\n     * Default value 50\n     */\n    rankSpacing: 50,\n\n    /**\n     * | Parameter | Description                                        | Type   | Required | Values                        |\n     * | --------- | -------------------------------------------------- | ------ | -------- | ----------------------------- |\n     * | curve     | Defines how mermaid renders curves for flowcharts. | string | Required | 'basis', 'linear', 'cardinal' |\n     *\n     * **Notes:**\n     *\n     * Default Value: 'basis'\n     */\n    curve: 'basis',\n    // Only used in new experimental rendering\n    // represents the padding between the labels and the shape\n    padding: 15,\n\n    /**\n     * | Parameter   | Description | Type    | Required | Values      |\n     * | ----------- | ----------- | ------- | -------- | ----------- |\n     * | useMaxWidth | See notes   | boolean | 4        | true, false |\n     *\n     * **Notes:**\n     *\n     * When this flag is set the height and width is set to 100% and is then scaling with the\n     * available space if not the absolute space required is used.\n     *\n     * Default value: true\n     */\n    useMaxWidth: true,\n\n    /**\n     * | Parameter       | Description | Type    | Required | Values                  |\n     * | --------------- | ----------- | ------- | -------- | ----------------------- |\n     * | defaultRenderer | See notes   | boolean | 4        | dagre-d3, dagre-wrapper |\n     *\n     * **Notes:**\n     *\n     * Decides which rendering engine that is to be used for the rendering. Legal values are:\n     * dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid\n     *\n     * Default value: 'dagre-d3'\n     */\n    defaultRenderer: 'dagre-d3',\n  },\n\n  /** The object containing configurations specific for sequence diagrams */\n  sequence: {\n    hideUnusedParticipants: false,\n    /**\n     * | Parameter       | Description                  | Type    | Required | Values             |\n     * | --------------- | ---------------------------- | ------- | -------- | ------------------ |\n     * | activationWidth | Width of the activation rect | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value :10\n     */\n    activationWidth: 10,\n\n    /**\n     * | Parameter      | Description                                          | Type    | Required | Values             |\n     * | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ |\n     * | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 50\n     */\n    diagramMarginX: 50,\n\n    /**\n     * | Parameter      | Description                                       | Type    | Required | Values             |\n     * | -------------- | ------------------------------------------------- | ------- | -------- | ------------------ |\n     * | diagramMarginY | Margin to the over and under the sequence diagram | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 10\n     */\n    diagramMarginY: 10,\n\n    /**\n     * | Parameter   | Description           | Type    | Required | Values             |\n     * | ----------- | --------------------- | ------- | -------- | ------------------ |\n     * | actorMargin | Margin between actors | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 50\n     */\n    actorMargin: 50,\n\n    /**\n     * | Parameter | Description          | Type    | Required | Values             |\n     * | --------- | -------------------- | ------- | -------- | ------------------ |\n     * | width     | Width of actor boxes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 150\n     */\n    width: 150,\n\n    /**\n     * | Parameter | Description           | Type    | Required | Values             |\n     * | --------- | --------------------- | ------- | -------- | ------------------ |\n     * | height    | Height of actor boxes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 65\n     */\n    height: 65,\n\n    /**\n     * | Parameter | Description              | Type    | Required | Values             |\n     * | --------- | ------------------------ | ------- | -------- | ------------------ |\n     * | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 10\n     */\n    boxMargin: 10,\n\n    /**\n     * | Parameter     | Description                                  | Type    | Required | Values             |\n     * | ------------- | -------------------------------------------- | ------- | -------- | ------------------ |\n     * | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 5\n     */\n    boxTextMargin: 5,\n\n    /**\n     * | Parameter  | Description         | Type    | Required | Values             |\n     * | ---------- | ------------------- | ------- | -------- | ------------------ |\n     * | noteMargin | margin around notes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 10\n     */\n    noteMargin: 10,\n\n    /**\n     * | Parameter     | Description            | Type    | Required | Values             |\n     * | ------------- | ---------------------- | ------- | -------- | ------------------ |\n     * | messageMargin | Space between messages | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 35\n     */\n    messageMargin: 35,\n\n    /**\n     * | Parameter    | Description                 | Type   | Required | Values                    |\n     * | ------------ | --------------------------- | ------ | -------- | ------------------------- |\n     * | messageAlign | Multiline message alignment | string | Required | 'left', 'center', 'right' |\n     *\n     * **Notes:** Default value: 'center'\n     */\n    messageAlign: 'center',\n\n    /**\n     * | Parameter    | Description                 | Type    | Required | Values      |\n     * | ------------ | --------------------------- | ------- | -------- | ----------- |\n     * | mirrorActors | Mirror actors under diagram | boolean | Required | true, false |\n     *\n     * **Notes:** Default value: true\n     */\n    mirrorActors: true,\n\n    /**\n     * | Parameter  | Description                                                             | Type    | Required | Values      |\n     * | ---------- | ----------------------------------------------------------------------- | ------- | -------- | ----------- |\n     * | forceMenus | forces actor popup menus to always be visible (to support E2E testing). | Boolean | Required | True, False |\n     *\n     * **Notes:**\n     *\n     * Default value: false.\n     */\n    forceMenus: false,\n\n    /**\n     * | Parameter       | Description                                | Type    | Required | Values             |\n     * | --------------- | ------------------------------------------ | ------- | -------- | ------------------ |\n     * | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | Required | Any Positive Value |\n     *\n     * **Notes:**\n     *\n     * Depending on css styling this might need adjustment.\n     *\n     * Default value: 1\n     */\n    bottomMarginAdj: 1,\n\n    /**\n     * | Parameter   | Description | Type    | Required | Values      |\n     * | ----------- | ----------- | ------- | -------- | ----------- |\n     * | useMaxWidth | See Notes   | boolean | Required | true, false |\n     *\n     * **Notes:** When this flag is set to true, the height and width is set to 100% and is then\n     * scaling with the available space. If set to false, the absolute space required is used.\n     *\n     * Default value: true\n     */\n    useMaxWidth: true,\n\n    /**\n     * | Parameter   | Description                          | Type    | Required | Values      |\n     * | ----------- | ------------------------------------ | ------- | -------- | ----------- |\n     * | rightAngles | display curve arrows as right angles | boolean | Required | true, false |\n     *\n     * **Notes:**\n     *\n     * This will display arrows that start and begin at the same node as right angles, rather than a curve\n     *\n     * Default value: false\n     */\n    rightAngles: false,\n\n    /**\n     * | Parameter           | Description                     | Type    | Required | Values      |\n     * | ------------------- | ------------------------------- | ------- | -------- | ----------- |\n     * | showSequenceNumbers | This will show the node numbers | boolean | Required | true, false |\n     *\n     * **Notes:** Default value: false\n     */\n    showSequenceNumbers: false,\n\n    /**\n     * | Parameter     | Description                                        | Type    | Required | Values             |\n     * | ------------- | -------------------------------------------------- | ------- | -------- | ------------------ |\n     * | actorFontSize | This sets the font size of the actor's description | Integer | Require  | Any Positive Value |\n     *\n     * **Notes:** **Default value 14**..\n     */\n    actorFontSize: 14,\n\n    /**\n     * | Parameter       | Description                                          | Type   | Required | Values                      |\n     * | --------------- | ---------------------------------------------------- | ------ | -------- | --------------------------- |\n     * | actorFontFamily | This sets the font family of the actor's description | string | Required | Any Possible CSS FontFamily |\n     *\n     * **Notes:** Default value: \"'Open Sans\", sans-serif'\n     */\n    actorFontFamily: '\"Open Sans\", sans-serif',\n\n    /**\n     * This sets the font weight of the actor's description\n     *\n     * **Notes:** Default value: 400.\n     */\n    actorFontWeight: 400,\n\n    /**\n     * | Parameter    | Description                                     | Type    | Required | Values             |\n     * | ------------ | ----------------------------------------------- | ------- | -------- | ------------------ |\n     * | noteFontSize | This sets the font size of actor-attached notes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 14\n     */\n    noteFontSize: 14,\n\n    /**\n     * | Parameter      | Description                                        | Type   | Required | Values                      |\n     * | -------------- | -------------------------------------------------- | ------ | -------- | --------------------------- |\n     * | noteFontFamily | This sets the font family of actor-attached notes. | string | Required | Any Possible CSS FontFamily |\n     *\n     * **Notes:** Default value: ''\"trebuchet ms\", verdana, arial, sans-serif'\n     */\n    noteFontFamily: '\"trebuchet ms\", verdana, arial, sans-serif',\n\n    /**\n     * This sets the font weight of the note's description\n     *\n     * **Notes:** Default value: 400\n     */\n    noteFontWeight: 400,\n\n    /**\n     * | Parameter | Description                                          | Type   | Required | Values                    |\n     * | --------- | ---------------------------------------------------- | ------ | -------- | ------------------------- |\n     * | noteAlign | This sets the text alignment of actor-attached notes | string | required | 'left', 'center', 'right' |\n     *\n     * **Notes:** Default value: 'center'\n     */\n    noteAlign: 'center',\n\n    /**\n     * | Parameter       | Description                               | Type    | Required | Values              |\n     * | --------------- | ----------------------------------------- | ------- | -------- | ------------------- |\n     * | messageFontSize | This sets the font size of actor messages | Integer | Required | Any Positive Number |\n     *\n     * **Notes:** Default value: 16\n     */\n    messageFontSize: 16,\n\n    /**\n     * | Parameter         | Description                                 | Type   | Required | Values                      |\n     * | ----------------- | ------------------------------------------- | ------ | -------- | --------------------------- |\n     * | messageFontFamily | This sets the font family of actor messages | string | Required | Any Possible CSS FontFamily |\n     *\n     * **Notes:** Default value: '\"trebuchet ms\", verdana, arial, sans-serif'\n     */\n    messageFontFamily: '\"trebuchet ms\", verdana, arial, sans-serif',\n\n    /**\n     * This sets the font weight of the message's description\n     *\n     * **Notes:** Default value: 400.\n     */\n    messageFontWeight: 400,\n\n    /**\n     * This sets the auto-wrap state for the diagram\n     *\n     * **Notes:** Default value: false.\n     */\n    wrap: false,\n\n    /**\n     * This sets the auto-wrap padding for the diagram (sides only)\n     *\n     * **Notes:** Default value: 0.\n     */\n    wrapPadding: 10,\n\n    /**\n     * This sets the width of the loop-box (loop, alt, opt, par)\n     *\n     * **Notes:** Default value: 50.\n     */\n    labelBoxWidth: 50,\n\n    /**\n     * This sets the height of the loop-box (loop, alt, opt, par)\n     *\n     * **Notes:** Default value: 20.\n     */\n    labelBoxHeight: 20,\n\n    messageFont: function () {\n      return {\n        fontFamily: this.messageFontFamily,\n        fontSize: this.messageFontSize,\n        fontWeight: this.messageFontWeight,\n      };\n    },\n    noteFont: function () {\n      return {\n        fontFamily: this.noteFontFamily,\n        fontSize: this.noteFontSize,\n        fontWeight: this.noteFontWeight,\n      };\n    },\n    actorFont: function () {\n      return {\n        fontFamily: this.actorFontFamily,\n        fontSize: this.actorFontSize,\n        fontWeight: this.actorFontWeight,\n      };\n    },\n  },\n\n  /** The object containing configurations specific for gantt diagrams */\n  gantt: {\n    /**\n     * ### titleTopMargin\n     *\n     * | Parameter      | Description                                    | Type    | Required | Values             |\n     * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |\n     * | titleTopMargin | Margin top for the text over the gantt diagram | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 25\n     */\n    titleTopMargin: 25,\n\n    /**\n     * | Parameter | Description                         | Type    | Required | Values             |\n     * | --------- | ----------------------------------- | ------- | -------- | ------------------ |\n     * | barHeight | The height of the bars in the graph | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 20\n     */\n    barHeight: 20,\n\n    /**\n     * | Parameter | Description                                                      | Type    | Required | Values             |\n     * | --------- | ---------------------------------------------------------------- | ------- | -------- | ------------------ |\n     * | barGap    | The margin between the different activities in the gantt diagram | Integer | Optional | Any Positive Value |\n     *\n     * **Notes:** Default value: 4\n     */\n    barGap: 4,\n\n    /**\n     * | Parameter  | Description                                                                | Type    | Required | Values             |\n     * | ---------- | -------------------------------------------------------------------------- | ------- | -------- | ------------------ |\n     * | topPadding | Margin between title and gantt diagram and between axis and gantt diagram. | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 50\n     */\n    topPadding: 50,\n\n    /**\n     * | Parameter    | Description                                                             | Type    | Required | Values             |\n     * | ------------ | ----------------------------------------------------------------------- | ------- | -------- | ------------------ |\n     * | rightPadding | The space allocated for the section name to the right of the activities | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 75\n     */\n    rightPadding: 75,\n\n    /**\n     * | Parameter   | Description                                                            | Type    | Required | Values             |\n     * | ----------- | ---------------------------------------------------------------------- | ------- | -------- | ------------------ |\n     * | leftPadding | The space allocated for the section name to the left of the activities | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 75\n     */\n    leftPadding: 75,\n\n    /**\n     * | Parameter            | Description                                  | Type    | Required | Values             |\n     * | -------------------- | -------------------------------------------- | ------- | -------- | ------------------ |\n     * | gridLineStartPadding | Vertical starting position of the grid lines | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 35\n     */\n    gridLineStartPadding: 35,\n\n    /**\n     * | Parameter | Description | Type    | Required | Values             |\n     * | --------- | ----------- | ------- | -------- | ------------------ |\n     * | fontSize  | Font size   | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 11\n     */\n    fontSize: 11,\n\n    /**\n     * | Parameter       | Description            | Type    | Required | Values             |\n     * | --------------- | ---------------------- | ------- | -------- | ------------------ |\n     * | sectionFontSize | Font size for sections | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 11\n     */\n    sectionFontSize: 11,\n\n    /**\n     * | Parameter           | Description                              | Type    | Required | Values             |\n     * | ------------------- | ---------------------------------------- | ------- | -------- | ------------------ |\n     * | numberSectionStyles | The number of alternating section styles | Integer | 4        | Any Positive Value |\n     *\n     * **Notes:** Default value: 4\n     */\n    numberSectionStyles: 4,\n\n    /**\n     * | Parameter  | Description                 | Type | Required | Values           |\n     * | ---------- | --------------------------- | ---- | -------- | ---------------- |\n     * | axisFormat | Datetime format of the axis | 3    | Required | Date in yy-mm-dd |\n     *\n     * **Notes:**\n     *\n     * This might need adjustment to match your locale and preferences\n     *\n     * Default value: '%Y-%m-%d'.\n     */\n    axisFormat: '%Y-%m-%d',\n\n    /**\n     * | Parameter   | Description | Type    | Required | Values      |\n     * | ----------- | ----------- | ------- | -------- | ----------- |\n     * | useMaxWidth | See notes   | boolean | 4        | true, false |\n     *\n     * **Notes:**\n     *\n     * When this flag is set the height and width is set to 100% and is then scaling with the\n     * available space if not the absolute space required is used.\n     *\n     * Default value: true\n     */\n    useMaxWidth: true,\n\n    /**\n     * | Parameter | Description | Type    | Required | Values      |\n     * | --------- | ----------- | ------- | -------- | ----------- |\n     * | topAxis   | See notes   | Boolean | 4        | True, False |\n     *\n     * **Notes:** when this flag is set date labels will be added to the top of the chart\n     *\n     * **Default value false**.\n     */\n    topAxis: false,\n\n    useWidth: undefined,\n  },\n\n  /** The object containing configurations specific for journey diagrams */\n  journey: {\n    /**\n     * | Parameter      | Description                                          | Type    | Required | Values             |\n     * | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ |\n     * | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 50\n     */\n    diagramMarginX: 50,\n\n    /**\n     * | Parameter      | Description                                        | Type    | Required | Values             |\n     * | -------------- | -------------------------------------------------- | ------- | -------- | ------------------ |\n     * | diagramMarginY | Margin to the over and under the sequence diagram. | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 10\n     */\n    diagramMarginY: 10,\n\n    /**\n     * | Parameter   | Description           | Type    | Required | Values             |\n     * | ----------- | --------------------- | ------- | -------- | ------------------ |\n     * | actorMargin | Margin between actors | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 50\n     */\n    leftMargin: 150,\n\n    /**\n     * | Parameter | Description          | Type    | Required | Values             |\n     * | --------- | -------------------- | ------- | -------- | ------------------ |\n     * | width     | Width of actor boxes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 150\n     */\n    width: 150,\n\n    /**\n     * | Parameter | Description           | Type    | Required | Values             |\n     * | --------- | --------------------- | ------- | -------- | ------------------ |\n     * | height    | Height of actor boxes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 65\n     */\n    height: 50,\n\n    /**\n     * | Parameter | Description              | Type    | Required | Values             |\n     * | --------- | ------------------------ | ------- | -------- | ------------------ |\n     * | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 10\n     */\n    boxMargin: 10,\n\n    /**\n     * | Parameter     | Description                                  | Type    | Required | Values             |\n     * | ------------- | -------------------------------------------- | ------- | -------- | ------------------ |\n     * | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 5\n     */\n    boxTextMargin: 5,\n\n    /**\n     * | Parameter  | Description         | Type    | Required | Values             |\n     * | ---------- | ------------------- | ------- | -------- | ------------------ |\n     * | noteMargin | Margin around notes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 10\n     */\n    noteMargin: 10,\n\n    /**\n     * | Parameter     | Description             | Type    | Required | Values             |\n     * | ------------- | ----------------------- | ------- | -------- | ------------------ |\n     * | messageMargin | Space between messages. | Integer | Required | Any Positive Value |\n     *\n     * **Notes:**\n     *\n     * Space between messages.\n     *\n     * Default value: 35\n     */\n    messageMargin: 35,\n\n    /**\n     * | Parameter    | Description                 | Type | Required | Values                    |\n     * | ------------ | --------------------------- | ---- | -------- | ------------------------- |\n     * | messageAlign | Multiline message alignment | 3    | 4        | 'left', 'center', 'right' |\n     *\n     * **Notes:** Default value: 'center'\n     */\n    messageAlign: 'center',\n\n    /**\n     * | Parameter       | Description                                | Type    | Required | Values             |\n     * | --------------- | ------------------------------------------ | ------- | -------- | ------------------ |\n     * | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | 4        | Any Positive Value |\n     *\n     * **Notes:**\n     *\n     * Depending on css styling this might need adjustment.\n     *\n     * Default value: 1\n     */\n    bottomMarginAdj: 1,\n\n    /**\n     * | Parameter   | Description | Type    | Required | Values      |\n     * | ----------- | ----------- | ------- | -------- | ----------- |\n     * | useMaxWidth | See notes   | boolean | 4        | true, false |\n     *\n     * **Notes:**\n     *\n     * When this flag is set the height and width is set to 100% and is then scaling with the\n     * available space if not the absolute space required is used.\n     *\n     * Default value: true\n     */\n    useMaxWidth: true,\n\n    /**\n     * | Parameter   | Description                       | Type | Required | Values      |\n     * | ----------- | --------------------------------- | ---- | -------- | ----------- |\n     * | rightAngles | Curved Arrows become Right Angles | 3    | 4        | true, false |\n     *\n     * **Notes:**\n     *\n     * This will display arrows that start and begin at the same node as right angles, rather than a curves\n     *\n     * Default value: false\n     */\n    rightAngles: false,\n    taskFontSize: 14,\n    taskFontFamily: '\"Open Sans\", sans-serif',\n    taskMargin: 50,\n    // width of activation box\n    activationWidth: 10,\n\n    // text placement as: tspan | fo | old only text as before\n    textPlacement: 'fo',\n    actorColours: ['#8FBC8F', '#7CFC00', '#00FFFF', '#20B2AA', '#B0E0E6', '#FFFFE0'],\n\n    sectionFills: ['#191970', '#8B008B', '#4B0082', '#2F4F4F', '#800000', '#8B4513', '#00008B'],\n    sectionColours: ['#fff'],\n  },\n  class: {\n    arrowMarkerAbsolute: false,\n\n    /**\n     * | Parameter   | Description | Type    | Required | Values      |\n     * | ----------- | ----------- | ------- | -------- | ----------- |\n     * | useMaxWidth | See notes   | boolean | 4        | true, false |\n     *\n     * **Notes:**\n     *\n     * When this flag is set the height and width is set to 100% and is then scaling with the\n     * available space if not the absolute space required is used.\n     *\n     * Default value: true\n     */\n    useMaxWidth: true,\n    /**\n     * | Parameter       | Description | Type    | Required | Values                  |\n     * | --------------- | ----------- | ------- | -------- | ----------------------- |\n     * | defaultRenderer | See notes   | boolean | 4        | dagre-d3, dagre-wrapper |\n     *\n     * **Notes**:\n     *\n     * Decides which rendering engine that is to be used for the rendering. Legal values are:\n     * dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid\n     *\n     * Default value: 'dagre-d3'\n     */\n    defaultRenderer: 'dagre-wrapper',\n  },\n  state: {\n    dividerMargin: 10,\n    sizeUnit: 5,\n    padding: 8,\n    textHeight: 10,\n    titleShift: -15,\n    noteMargin: 10,\n    forkWidth: 70,\n    forkHeight: 7,\n    // Used\n    miniPadding: 2,\n    // Font size factor, this is used to guess the width of the edges labels before rendering by dagre\n    // layout. This might need updating if/when switching font\n    fontSizeFactor: 5.02,\n    fontSize: 24,\n    labelHeight: 16,\n    edgeLengthFactor: '20',\n    compositTitleSize: 35,\n    radius: 5,\n    /**\n     * | Parameter   | Description | Type    | Required | Values      |\n     * | ----------- | ----------- | ------- | -------- | ----------- |\n     * | useMaxWidth | See notes   | boolean | 4        | true, false |\n     *\n     * **Notes:**\n     *\n     * When this flag is set the height and width is set to 100% and is then scaling with the\n     * available space if not the absolute space required is used.\n     *\n     * Default value: true\n     */\n    useMaxWidth: true,\n    /**\n     * | Parameter       | Description | Type    | Required | Values                  |\n     * | --------------- | ----------- | ------- | -------- | ----------------------- |\n     * | defaultRenderer | See notes   | boolean | 4        | dagre-d3, dagre-wrapper |\n     *\n     * **Notes:**\n     *\n     * Decides which rendering engine that is to be used for the rendering. Legal values are:\n     * dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid\n     *\n     * Default value: 'dagre-d3'\n     */\n    defaultRenderer: 'dagre-wrapper',\n  },\n\n  /** The object containing configurations specific for entity relationship diagrams */\n  er: {\n    /**\n     * | Parameter      | Description                                     | Type    | Required | Values             |\n     * | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ |\n     * | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value |\n     *\n     * **Notes:**\n     *\n     * The amount of padding around the diagram as a whole so that embedded diagrams have margins,\n     * expressed in pixels\n     *\n     * Default value: 20\n     */\n    diagramPadding: 20,\n\n    /**\n     * | Parameter       | Description                              | Type   | Required | Values                 |\n     * | --------------- | ---------------------------------------- | ------ | -------- | ---------------------- |\n     * | layoutDirection | Directional bias for layout of entities. | string | Required | \"TB\", \"BT\", \"LR\", \"RL\" |\n     *\n     * **Notes:**\n     *\n     * 'TB' for Top-Bottom, 'BT'for Bottom-Top, 'LR' for Left-Right, or 'RL' for Right to Left.\n     *\n     * T = top, B = bottom, L = left, and R = right.\n     *\n     * Default value: 'TB'\n     */\n    layoutDirection: 'TB',\n\n    /**\n     * | Parameter      | Description                        | Type    | Required | Values             |\n     * | -------------- | ---------------------------------- | ------- | -------- | ------------------ |\n     * | minEntityWidth | The minimum width of an entity box | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Expressed in pixels. Default value: 100\n     */\n    minEntityWidth: 100,\n\n    /**\n     * | Parameter       | Description                         | Type    | Required | Values             |\n     * | --------------- | ----------------------------------- | ------- | -------- | ------------------ |\n     * | minEntityHeight | The minimum height of an entity box | Integer | 4        | Any Positive Value |\n     *\n     * **Notes:** Expressed in pixels Default value: 75\n     */\n    minEntityHeight: 75,\n\n    /**\n     * | Parameter     | Description                                                  | Type    | Required | Values             |\n     * | ------------- | ------------------------------------------------------------ | ------- | -------- | ------------------ |\n     * | entityPadding | Minimum internal padding between text in box and box borders | Integer | 4        | Any Positive Value |\n     *\n     * **Notes:**\n     *\n     * The minimum internal padding between text in an entity box and the enclosing box borders,\n     * expressed in pixels.\n     *\n     * Default value: 15\n     */\n    entityPadding: 15,\n\n    /**\n     * | Parameter | Description                         | Type   | Required | Values               |\n     * | --------- | ----------------------------------- | ------ | -------- | -------------------- |\n     * | stroke    | Stroke color of box edges and lines | string | 4        | Any recognized color |\n     *\n     * **Notes:** Default value: 'gray'\n     */\n    stroke: 'gray',\n\n    /**\n     * | Parameter | Description                | Type   | Required | Values               |\n     * | --------- | -------------------------- | ------ | -------- | -------------------- |\n     * | fill      | Fill color of entity boxes | string | 4        | Any recognized color |\n     *\n     * **Notes:** Default value: 'honeydew'\n     */\n    fill: 'honeydew',\n\n    /**\n     * | Parameter | Description         | Type    | Required | Values             |\n     * | --------- | ------------------- | ------- | -------- | ------------------ |\n     * | fontSize  | Font Size in pixels | Integer |          | Any Positive Value |\n     *\n     * **Notes:**\n     *\n     * Font size (expressed as an integer representing a number of pixels) Default value: 12\n     */\n    fontSize: 12,\n\n    /**\n     * | Parameter   | Description | Type    | Required | Values      |\n     * | ----------- | ----------- | ------- | -------- | ----------- |\n     * | useMaxWidth | See Notes   | boolean | Required | true, false |\n     *\n     * **Notes:**\n     *\n     * When this flag is set to true, the diagram width is locked to 100% and scaled based on\n     * available space. If set to false, the diagram reserves its absolute width.\n     *\n     * Default value: true\n     */\n    useMaxWidth: true,\n  },\n\n  /** The object containing configurations specific for pie diagrams */\n  pie: {\n    useWidth: undefined,\n\n    /**\n     * | Parameter   | Description | Type    | Required | Values      |\n     * | ----------- | ----------- | ------- | -------- | ----------- |\n     * | useMaxWidth | See Notes   | boolean | Required | true, false |\n     *\n     * **Notes:**\n     *\n     * When this flag is set to true, the diagram width is locked to 100% and scaled based on\n     * available space. If set to false, the diagram reserves its absolute width.\n     *\n     * Default value: true\n     */\n    useMaxWidth: true,\n  },\n\n  /** The object containing configurations specific for req diagrams */\n  requirement: {\n    useWidth: undefined,\n\n    /**\n     * | Parameter   | Description | Type    | Required | Values      |\n     * | ----------- | ----------- | ------- | -------- | ----------- |\n     * | useMaxWidth | See Notes   | boolean | Required | true, false |\n     *\n     * **Notes:**\n     *\n     * When this flag is set to true, the diagram width is locked to 100% and scaled based on\n     * available space. If set to false, the diagram reserves its absolute width.\n     *\n     * Default value: true\n     */\n    useMaxWidth: true,\n\n    rect_fill: '#f9f9f9',\n    text_color: '#333',\n    rect_border_size: '0.5px',\n    rect_border_color: '#bbb',\n    rect_min_width: 200,\n    rect_min_height: 200,\n    fontSize: 14,\n    rect_padding: 10,\n    line_height: 20,\n  },\n  gitGraph: {\n    diagramPadding: 8,\n    nodeLabel: {\n      width: 75,\n      height: 100,\n      x: -25,\n      y: 0,\n    },\n    mainBranchName: 'main',\n    mainBranchOrder: 0,\n    showCommitLabel: true,\n    showBranches: true,\n    rotateCommitLabel: true,\n  },\n\n  /** The object containing configurations specific for c4 diagrams */\n  c4: {\n    useWidth: undefined,\n\n    /**\n     * | Parameter      | Description                                    | Type    | Required | Values             |\n     * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |\n     * | diagramMarginX | Margin to the right and left of the c4 diagram | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 50\n     */\n    diagramMarginX: 50,\n\n    /**\n     * | Parameter      | Description                                 | Type    | Required | Values             |\n     * | -------------- | ------------------------------------------- | ------- | -------- | ------------------ |\n     * | diagramMarginY | Margin to the over and under the c4 diagram | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 10\n     */\n    diagramMarginY: 10,\n\n    /**\n     * | Parameter     | Description           | Type    | Required | Values             |\n     * | ------------- | --------------------- | ------- | -------- | ------------------ |\n     * | c4ShapeMargin | Margin between shapes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 50\n     */\n    c4ShapeMargin: 50,\n\n    /**\n     * | Parameter      | Description            | Type    | Required | Values             |\n     * | -------------- | ---------------------- | ------- | -------- | ------------------ |\n     * | c4ShapePadding | Padding between shapes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 20\n     */\n    c4ShapePadding: 20,\n\n    /**\n     * | Parameter | Description           | Type    | Required | Values             |\n     * | --------- | --------------------- | ------- | -------- | ------------------ |\n     * | width     | Width of person boxes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 216\n     */\n    width: 216,\n\n    /**\n     * | Parameter | Description            | Type    | Required | Values             |\n     * | --------- | ---------------------- | ------- | -------- | ------------------ |\n     * | height    | Height of person boxes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 60\n     */\n    height: 60,\n\n    /**\n     * | Parameter | Description         | Type    | Required | Values             |\n     * | --------- | ------------------- | ------- | -------- | ------------------ |\n     * | boxMargin | Margin around boxes | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** Default value: 10\n     */\n    boxMargin: 10,\n\n    /**\n     * | Parameter   | Description | Type    | Required | Values      |\n     * | ----------- | ----------- | ------- | -------- | ----------- |\n     * | useMaxWidth | See Notes   | boolean | Required | true, false |\n     *\n     * **Notes:** When this flag is set to true, the height and width is set to 100% and is then\n     * scaling with the available space. If set to false, the absolute space required is used.\n     *\n     * Default value: true\n     */\n    useMaxWidth: true,\n\n    /**\n     * | Parameter    | Description | Type    | Required | Values             |\n     * | ------------ | ----------- | ------- | -------- | ------------------ |\n     * | c4ShapeInRow | See Notes   | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** How many shapes to place in each row.\n     *\n     * Default value: 4\n     */\n    c4ShapeInRow: 4,\n\n    nextLinePaddingX: 0,\n\n    /**\n     * | Parameter       | Description | Type    | Required | Values             |\n     * | --------------- | ----------- | ------- | -------- | ------------------ |\n     * | c4BoundaryInRow | See Notes   | Integer | Required | Any Positive Value |\n     *\n     * **Notes:** How many boundarys to place in each row.\n     *\n     * Default value: 2\n     */\n    c4BoundaryInRow: 2,\n\n    /**\n     * This sets the font size of Person shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    personFontSize: 14,\n    /**\n     * This sets the font family of Person shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    personFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of Person shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    personFontWeight: 'normal',\n\n    /**\n     * This sets the font size of External Person shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    external_personFontSize: 14,\n    /**\n     * This sets the font family of External Person shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    external_personFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of External Person shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    external_personFontWeight: 'normal',\n\n    /**\n     * This sets the font size of System shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    systemFontSize: 14,\n    /**\n     * This sets the font family of System shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    systemFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of System shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    systemFontWeight: 'normal',\n\n    /**\n     * This sets the font size of External System shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    external_systemFontSize: 14,\n    /**\n     * This sets the font family of External System shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    external_systemFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of External System shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    external_systemFontWeight: 'normal',\n\n    /**\n     * This sets the font size of System DB shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    system_dbFontSize: 14,\n    /**\n     * This sets the font family of System DB shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    system_dbFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of System DB shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    system_dbFontWeight: 'normal',\n\n    /**\n     * This sets the font size of External System DB shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    external_system_dbFontSize: 14,\n    /**\n     * This sets the font family of External System DB shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    external_system_dbFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of External System DB shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    external_system_dbFontWeight: 'normal',\n\n    /**\n     * This sets the font size of System Queue shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    system_queueFontSize: 14,\n    /**\n     * This sets the font family of System Queue shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    system_queueFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of System Queue shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    system_queueFontWeight: 'normal',\n\n    /**\n     * This sets the font size of External System Queue shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    external_system_queueFontSize: 14,\n    /**\n     * This sets the font family of External System Queue shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    external_system_queueFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of External System Queue shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    external_system_queueFontWeight: 'normal',\n\n    /**\n     * This sets the font size of Boundary shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    boundaryFontSize: 14,\n    /**\n     * This sets the font family of Boundary shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    boundaryFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of Boundary shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    boundaryFontWeight: 'normal',\n\n    /**\n     * This sets the font size of Message shape for the diagram\n     *\n     * **Notes:** Default value: 12.\n     */\n    messageFontSize: 12,\n    /**\n     * This sets the font family of Message shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    messageFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of Message shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    messageFontWeight: 'normal',\n\n    /**\n     * This sets the font size of Container shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    containerFontSize: 14,\n    /**\n     * This sets the font family of Container shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    containerFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of Container shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    containerFontWeight: 'normal',\n\n    /**\n     * This sets the font size of External Container shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    external_containerFontSize: 14,\n    /**\n     * This sets the font family of External Container shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    external_containerFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of External Container shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    external_containerFontWeight: 'normal',\n\n    /**\n     * This sets the font size of Container DB shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    container_dbFontSize: 14,\n    /**\n     * This sets the font family of Container DB shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    container_dbFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of Container DB shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    container_dbFontWeight: 'normal',\n\n    /**\n     * This sets the font size of External Container DB shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    external_container_dbFontSize: 14,\n    /**\n     * This sets the font family of External Container DB shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    external_container_dbFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of External Container DB shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    external_container_dbFontWeight: 'normal',\n\n    /**\n     * This sets the font size of Container Queue shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    container_queueFontSize: 14,\n    /**\n     * This sets the font family of Container Queue shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    container_queueFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of Container Queue shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    container_queueFontWeight: 'normal',\n\n    /**\n     * This sets the font size of External Container Queue shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    external_container_queueFontSize: 14,\n    /**\n     * This sets the font family of External Container Queue shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    external_container_queueFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of External Container Queue shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    external_container_queueFontWeight: 'normal',\n\n    /**\n     * This sets the font size of Component shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    componentFontSize: 14,\n    /**\n     * This sets the font family of Component shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    componentFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of Component shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    componentFontWeight: 'normal',\n\n    /**\n     * This sets the font size of External Component shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    external_componentFontSize: 14,\n    /**\n     * This sets the font family of External Component shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    external_componentFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of External Component shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    external_componentFontWeight: 'normal',\n\n    /**\n     * This sets the font size of Component DB shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    component_dbFontSize: 14,\n    /**\n     * This sets the font family of Component DB shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    component_dbFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of Component DB shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    component_dbFontWeight: 'normal',\n\n    /**\n     * This sets the font size of External Component DB shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    external_component_dbFontSize: 14,\n    /**\n     * This sets the font family of External Component DB shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    external_component_dbFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of External Component DB shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    external_component_dbFontWeight: 'normal',\n\n    /**\n     * This sets the font size of Component Queue shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    component_queueFontSize: 14,\n    /**\n     * This sets the font family of Component Queue shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    component_queueFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of Component Queue shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    component_queueFontWeight: 'normal',\n\n    /**\n     * This sets the font size of External Component Queue shape for the diagram\n     *\n     * **Notes:** Default value: 14.\n     */\n    external_component_queueFontSize: 14,\n    /**\n     * This sets the font family of External Component Queue shape for the diagram\n     *\n     * **Notes:** Default value: \"Open Sans\", sans-serif.\n     */\n    external_component_queueFontFamily: '\"Open Sans\", sans-serif',\n    /**\n     * This sets the font weight of External Component Queue shape for the diagram\n     *\n     * **Notes:** Default value: normal.\n     */\n    external_component_queueFontWeight: 'normal',\n\n    /**\n     * This sets the auto-wrap state for the diagram\n     *\n     * **Notes:** Default value: true.\n     */\n    wrap: true,\n\n    /**\n     * This sets the auto-wrap padding for the diagram (sides only)\n     *\n     * **Notes:** Default value: 0.\n     */\n    wrapPadding: 10,\n\n    personFont: function () {\n      return {\n        fontFamily: this.personFontFamily,\n        fontSize: this.personFontSize,\n        fontWeight: this.personFontWeight,\n      };\n    },\n\n    external_personFont: function () {\n      return {\n        fontFamily: this.external_personFontFamily,\n        fontSize: this.external_personFontSize,\n        fontWeight: this.external_personFontWeight,\n      };\n    },\n\n    systemFont: function () {\n      return {\n        fontFamily: this.systemFontFamily,\n        fontSize: this.systemFontSize,\n        fontWeight: this.systemFontWeight,\n      };\n    },\n\n    external_systemFont: function () {\n      return {\n        fontFamily: this.external_systemFontFamily,\n        fontSize: this.external_systemFontSize,\n        fontWeight: this.external_systemFontWeight,\n      };\n    },\n\n    system_dbFont: function () {\n      return {\n        fontFamily: this.system_dbFontFamily,\n        fontSize: this.system_dbFontSize,\n        fontWeight: this.system_dbFontWeight,\n      };\n    },\n\n    external_system_dbFont: function () {\n      return {\n        fontFamily: this.external_system_dbFontFamily,\n        fontSize: this.external_system_dbFontSize,\n        fontWeight: this.external_system_dbFontWeight,\n      };\n    },\n\n    system_queueFont: function () {\n      return {\n        fontFamily: this.system_queueFontFamily,\n        fontSize: this.system_queueFontSize,\n        fontWeight: this.system_queueFontWeight,\n      };\n    },\n\n    external_system_queueFont: function () {\n      return {\n        fontFamily: this.external_system_queueFontFamily,\n        fontSize: this.external_system_queueFontSize,\n        fontWeight: this.external_system_queueFontWeight,\n      };\n    },\n\n    containerFont: function () {\n      return {\n        fontFamily: this.containerFontFamily,\n        fontSize: this.containerFontSize,\n        fontWeight: this.containerFontWeight,\n      };\n    },\n\n    external_containerFont: function () {\n      return {\n        fontFamily: this.external_containerFontFamily,\n        fontSize: this.external_containerFontSize,\n        fontWeight: this.external_containerFontWeight,\n      };\n    },\n\n    container_dbFont: function () {\n      return {\n        fontFamily: this.container_dbFontFamily,\n        fontSize: this.container_dbFontSize,\n        fontWeight: this.container_dbFontWeight,\n      };\n    },\n\n    external_container_dbFont: function () {\n      return {\n        fontFamily: this.external_container_dbFontFamily,\n        fontSize: this.external_container_dbFontSize,\n        fontWeight: this.external_container_dbFontWeight,\n      };\n    },\n\n    container_queueFont: function () {\n      return {\n        fontFamily: this.container_queueFontFamily,\n        fontSize: this.container_queueFontSize,\n        fontWeight: this.container_queueFontWeight,\n      };\n    },\n\n    external_container_queueFont: function () {\n      return {\n        fontFamily: this.external_container_queueFontFamily,\n        fontSize: this.external_container_queueFontSize,\n        fontWeight: this.external_container_queueFontWeight,\n      };\n    },\n\n    componentFont: function () {\n      return {\n        fontFamily: this.componentFontFamily,\n        fontSize: this.componentFontSize,\n        fontWeight: this.componentFontWeight,\n      };\n    },\n\n    external_componentFont: function () {\n      return {\n        fontFamily: this.external_componentFontFamily,\n        fontSize: this.external_componentFontSize,\n        fontWeight: this.external_componentFontWeight,\n      };\n    },\n\n    component_dbFont: function () {\n      return {\n        fontFamily: this.component_dbFontFamily,\n        fontSize: this.component_dbFontSize,\n        fontWeight: this.component_dbFontWeight,\n      };\n    },\n\n    external_component_dbFont: function () {\n      return {\n        fontFamily: this.external_component_dbFontFamily,\n        fontSize: this.external_component_dbFontSize,\n        fontWeight: this.external_component_dbFontWeight,\n      };\n    },\n\n    component_queueFont: function () {\n      return {\n        fontFamily: this.component_queueFontFamily,\n        fontSize: this.component_queueFontSize,\n        fontWeight: this.component_queueFontWeight,\n      };\n    },\n\n    external_component_queueFont: function () {\n      return {\n        fontFamily: this.external_component_queueFontFamily,\n        fontSize: this.external_component_queueFontSize,\n        fontWeight: this.external_component_queueFontWeight,\n      };\n    },\n\n    boundaryFont: function () {\n      return {\n        fontFamily: this.boundaryFontFamily,\n        fontSize: this.boundaryFontSize,\n        fontWeight: this.boundaryFontWeight,\n      };\n    },\n\n    messageFont: function () {\n      return {\n        fontFamily: this.messageFontFamily,\n        fontSize: this.messageFontSize,\n        fontWeight: this.messageFontWeight,\n      };\n    },\n\n    // ' Colors\n    // ' ##################################\n    person_bg_color: '#08427B',\n    person_border_color: '#073B6F',\n    external_person_bg_color: '#686868',\n    external_person_border_color: '#8A8A8A',\n    system_bg_color: '#1168BD',\n    system_border_color: '#3C7FC0',\n    system_db_bg_color: '#1168BD',\n    system_db_border_color: '#3C7FC0',\n    system_queue_bg_color: '#1168BD',\n    system_queue_border_color: '#3C7FC0',\n    external_system_bg_color: '#999999',\n    external_system_border_color: '#8A8A8A',\n    external_system_db_bg_color: '#999999',\n    external_system_db_border_color: '#8A8A8A',\n    external_system_queue_bg_color: '#999999',\n    external_system_queue_border_color: '#8A8A8A',\n    container_bg_color: '#438DD5',\n    container_border_color: '#3C7FC0',\n    container_db_bg_color: '#438DD5',\n    container_db_border_color: '#3C7FC0',\n    container_queue_bg_color: '#438DD5',\n    container_queue_border_color: '#3C7FC0',\n    external_container_bg_color: '#B3B3B3',\n    external_container_border_color: '#A6A6A6',\n    external_container_db_bg_color: '#B3B3B3',\n    external_container_db_border_color: '#A6A6A6',\n    external_container_queue_bg_color: '#B3B3B3',\n    external_container_queue_border_color: '#A6A6A6',\n    component_bg_color: '#85BBF0',\n    component_border_color: '#78A8D8',\n    component_db_bg_color: '#85BBF0',\n    component_db_border_color: '#78A8D8',\n    component_queue_bg_color: '#85BBF0',\n    component_queue_border_color: '#78A8D8',\n    external_component_bg_color: '#CCCCCC',\n    external_component_border_color: '#BFBFBF',\n    external_component_db_bg_color: '#CCCCCC',\n    external_component_db_border_color: '#BFBFBF',\n    external_component_queue_bg_color: '#CCCCCC',\n    external_component_queue_border_color: '#BFBFBF',\n  },\n};\n\nconfig.class.arrowMarkerAbsolute = config.arrowMarkerAbsolute;\nconfig.gitGraph.arrowMarkerAbsolute = config.arrowMarkerAbsolute;\n\nconst keyify = (obj, prefix = '') =>\n  Object.keys(obj).reduce((res, el) => {\n    if (Array.isArray(obj[el])) {\n      return res;\n    } else if (typeof obj[el] === 'object' && obj[el] !== null) {\n      return [...res, prefix + el, ...keyify(obj[el], '')];\n    }\n    return [...res, prefix + el];\n  }, []);\n\nexport const configKeys = keyify(config, '');\nexport default config;\n","import mermaidAPI from '../../mermaidAPI';\nimport * as configApi from '../../config';\nimport { log } from '../../logger';\nimport { sanitizeText } from '../common/common';\nimport { setAccTitle, getAccTitle, getAccDescription, setAccDescription } from '../../commonDb';\n\nlet c4ShapeArray = [];\nlet boundaryParseStack = [''];\nlet currentBoundaryParse = 'global';\nlet parentBoundaryParse = '';\nlet boundarys = [\n  {\n    alias: 'global',\n    label: { text: 'global' },\n    type: { text: 'global' },\n    tags: null,\n    link: null,\n    parentBoundary: '',\n  },\n];\nlet rels = [];\nlet title = '';\nlet wrapEnabled = false;\nlet description = '';\nlet c4ShapeInRow = 4;\nlet c4BoundaryInRow = 2;\nvar c4Type;\n\nexport const getC4Type = function () {\n  return c4Type;\n};\n\nexport const setC4Type = function (c4TypeParam) {\n  let sanitizedText = sanitizeText(c4TypeParam, configApi.getConfig());\n  c4Type = sanitizedText;\n};\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\n//type, from, to, label, ?techn, ?descr, ?sprite, ?tags, $link\nexport const addRel = function (type, from, to, label, techn, descr, sprite, tags, link) {\n  // Don't allow label nulling\n  if (\n    type === undefined ||\n    type === null ||\n    from === undefined ||\n    from === null ||\n    to === undefined ||\n    to === null ||\n    label === undefined ||\n    label === null\n  )\n    return;\n\n  let rel = {};\n  const old = rels.find((rel) => rel.from === from && rel.to === to);\n  if (old) {\n    rel = old;\n  } else {\n    rels.push(rel);\n  }\n\n  rel.type = type;\n  rel.from = from;\n  rel.to = to;\n  rel.label = { text: label };\n\n  if (techn === undefined || techn === null) {\n    rel.techn = { text: '' };\n  } else {\n    if (typeof techn === 'object') {\n      let [key, value] = Object.entries(techn)[0];\n      rel[key] = { text: value };\n    } else {\n      rel.techn = { text: techn };\n    }\n  }\n\n  if (descr === undefined || descr === null) {\n    rel.descr = { text: '' };\n  } else {\n    if (typeof descr === 'object') {\n      let [key, value] = Object.entries(descr)[0];\n      rel[key] = { text: value };\n    } else {\n      rel.descr = { text: descr };\n    }\n  }\n\n  if (typeof sprite === 'object') {\n    let [key, value] = Object.entries(sprite)[0];\n    rel[key] = value;\n  } else {\n    rel.sprite = sprite;\n  }\n  if (typeof tags === 'object') {\n    let [key, value] = Object.entries(tags)[0];\n    rel[key] = value;\n  } else {\n    rel.tags = tags;\n  }\n  if (typeof link === 'object') {\n    let [key, value] = Object.entries(link)[0];\n    rel[key] = value;\n  } else {\n    rel.link = link;\n  }\n  rel.wrap = autoWrap();\n};\n\n//type, alias, label, ?descr, ?sprite, ?tags, $link\nexport const addPersonOrSystem = function (typeC4Shape, alias, label, descr, sprite, tags, link) {\n  // Don't allow label nulling\n  if (alias === null || label === null) return;\n\n  let personOrSystem = {};\n  const old = c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias);\n  if (old && alias === old.alias) {\n    personOrSystem = old;\n  } else {\n    personOrSystem.alias = alias;\n    c4ShapeArray.push(personOrSystem);\n  }\n\n  // Don't allow null labels, either\n  if (label === undefined || label === null) {\n    personOrSystem.label = { text: '' };\n  } else {\n    personOrSystem.label = { text: label };\n  }\n\n  if (descr === undefined || descr === null) {\n    personOrSystem.descr = { text: '' };\n  } else {\n    if (typeof descr === 'object') {\n      let [key, value] = Object.entries(descr)[0];\n      personOrSystem[key] = { text: value };\n    } else {\n      personOrSystem.descr = { text: descr };\n    }\n  }\n\n  if (typeof sprite === 'object') {\n    let [key, value] = Object.entries(sprite)[0];\n    personOrSystem[key] = value;\n  } else {\n    personOrSystem.sprite = sprite;\n  }\n  if (typeof tags === 'object') {\n    let [key, value] = Object.entries(tags)[0];\n    personOrSystem[key] = value;\n  } else {\n    personOrSystem.tags = tags;\n  }\n  if (typeof link === 'object') {\n    let [key, value] = Object.entries(link)[0];\n    personOrSystem[key] = value;\n  } else {\n    personOrSystem.link = link;\n  }\n  personOrSystem.typeC4Shape = { text: typeC4Shape };\n  personOrSystem.parentBoundary = currentBoundaryParse;\n  personOrSystem.wrap = autoWrap();\n};\n\n//type, alias, label, ?techn, ?descr ?sprite, ?tags, $link\nexport const addContainer = function (typeC4Shape, alias, label, techn, descr, sprite, tags, link) {\n  // Don't allow label nulling\n  if (alias === null || label === null) return;\n\n  let container = {};\n  const old = c4ShapeArray.find((container) => container.alias === alias);\n  if (old && alias === old.alias) {\n    container = old;\n  } else {\n    container.alias = alias;\n    c4ShapeArray.push(container);\n  }\n\n  // Don't allow null labels, either\n  if (label === undefined || label === null) {\n    container.label = { text: '' };\n  } else {\n    container.label = { text: label };\n  }\n\n  if (techn === undefined || techn === null) {\n    container.techn = { text: '' };\n  } else {\n    if (typeof techn === 'object') {\n      let [key, value] = Object.entries(techn)[0];\n      container[key] = { text: value };\n    } else {\n      container.techn = { text: techn };\n    }\n  }\n\n  if (descr === undefined || descr === null) {\n    container.descr = { text: '' };\n  } else {\n    if (typeof descr === 'object') {\n      let [key, value] = Object.entries(descr)[0];\n      container[key] = { text: value };\n    } else {\n      container.descr = { text: descr };\n    }\n  }\n\n  if (typeof sprite === 'object') {\n    let [key, value] = Object.entries(sprite)[0];\n    container[key] = value;\n  } else {\n    container.sprite = sprite;\n  }\n  if (typeof tags === 'object') {\n    let [key, value] = Object.entries(tags)[0];\n    container[key] = value;\n  } else {\n    container.tags = tags;\n  }\n  if (typeof link === 'object') {\n    let [key, value] = Object.entries(link)[0];\n    container[key] = value;\n  } else {\n    container.link = link;\n  }\n  container.wrap = autoWrap();\n  container.typeC4Shape = { text: typeC4Shape };\n  container.parentBoundary = currentBoundaryParse;\n};\n\n//type, alias, label, ?techn, ?descr ?sprite, ?tags, $link\nexport const addComponent = function (typeC4Shape, alias, label, techn, descr, sprite, tags, link) {\n  // Don't allow label nulling\n  if (alias === null || label === null) return;\n\n  let component = {};\n  const old = c4ShapeArray.find((component) => component.alias === alias);\n  if (old && alias === old.alias) {\n    component = old;\n  } else {\n    component.alias = alias;\n    c4ShapeArray.push(component);\n  }\n\n  // Don't allow null labels, either\n  if (label === undefined || label === null) {\n    component.label = { text: '' };\n  } else {\n    component.label = { text: label };\n  }\n\n  if (techn === undefined || techn === null) {\n    component.techn = { text: '' };\n  } else {\n    if (typeof techn === 'object') {\n      let [key, value] = Object.entries(techn)[0];\n      component[key] = { text: value };\n    } else {\n      component.techn = { text: techn };\n    }\n  }\n\n  if (descr === undefined || descr === null) {\n    component.descr = { text: '' };\n  } else {\n    if (typeof descr === 'object') {\n      let [key, value] = Object.entries(descr)[0];\n      component[key] = { text: value };\n    } else {\n      component.descr = { text: descr };\n    }\n  }\n\n  if (typeof sprite === 'object') {\n    let [key, value] = Object.entries(sprite)[0];\n    component[key] = value;\n  } else {\n    component.sprite = sprite;\n  }\n  if (typeof tags === 'object') {\n    let [key, value] = Object.entries(tags)[0];\n    component[key] = value;\n  } else {\n    component.tags = tags;\n  }\n  if (typeof link === 'object') {\n    let [key, value] = Object.entries(link)[0];\n    component[key] = value;\n  } else {\n    component.link = link;\n  }\n  component.wrap = autoWrap();\n  component.typeC4Shape = { text: typeC4Shape };\n  component.parentBoundary = currentBoundaryParse;\n};\n\n//alias, label, ?type, ?tags, $link\nexport const addPersonOrSystemBoundary = function (alias, label, type, tags, link) {\n  // if (parentBoundary === null) return;\n\n  // Don't allow label nulling\n  if (alias === null || label === null) return;\n\n  let boundary = {};\n  const old = boundarys.find((boundary) => boundary.alias === alias);\n  if (old && alias === old.alias) {\n    boundary = old;\n  } else {\n    boundary.alias = alias;\n    boundarys.push(boundary);\n  }\n\n  // Don't allow null labels, either\n  if (label === undefined || label === null) {\n    boundary.label = { text: '' };\n  } else {\n    boundary.label = { text: label };\n  }\n\n  if (type === undefined || type === null) {\n    boundary.type = { text: 'system' };\n  } else {\n    if (typeof type === 'object') {\n      let [key, value] = Object.entries(type)[0];\n      boundary[key] = { text: value };\n    } else {\n      boundary.type = { text: type };\n    }\n  }\n\n  if (typeof tags === 'object') {\n    let [key, value] = Object.entries(tags)[0];\n    boundary[key] = value;\n  } else {\n    boundary.tags = tags;\n  }\n  if (typeof link === 'object') {\n    let [key, value] = Object.entries(link)[0];\n    boundary[key] = value;\n  } else {\n    boundary.link = link;\n  }\n  boundary.parentBoundary = currentBoundaryParse;\n  boundary.wrap = autoWrap();\n\n  parentBoundaryParse = currentBoundaryParse;\n  currentBoundaryParse = alias;\n  boundaryParseStack.push(parentBoundaryParse);\n};\n\n//alias, label, ?type, ?tags, $link\nexport const addContainerBoundary = function (alias, label, type, tags, link) {\n  // if (parentBoundary === null) return;\n\n  // Don't allow label nulling\n  if (alias === null || label === null) return;\n\n  let boundary = {};\n  const old = boundarys.find((boundary) => boundary.alias === alias);\n  if (old && alias === old.alias) {\n    boundary = old;\n  } else {\n    boundary.alias = alias;\n    boundarys.push(boundary);\n  }\n\n  // Don't allow null labels, either\n  if (label === undefined || label === null) {\n    boundary.label = { text: '' };\n  } else {\n    boundary.label = { text: label };\n  }\n\n  if (type === undefined || type === null) {\n    boundary.type = { text: 'container' };\n  } else {\n    if (typeof type === 'object') {\n      let [key, value] = Object.entries(type)[0];\n      boundary[key] = { text: value };\n    } else {\n      boundary.type = { text: type };\n    }\n  }\n\n  if (typeof tags === 'object') {\n    let [key, value] = Object.entries(tags)[0];\n    boundary[key] = value;\n  } else {\n    boundary.tags = tags;\n  }\n  if (typeof link === 'object') {\n    let [key, value] = Object.entries(link)[0];\n    boundary[key] = value;\n  } else {\n    boundary.link = link;\n  }\n  boundary.parentBoundary = currentBoundaryParse;\n  boundary.wrap = autoWrap();\n\n  parentBoundaryParse = currentBoundaryParse;\n  currentBoundaryParse = alias;\n  boundaryParseStack.push(parentBoundaryParse);\n};\n\n//alias, label, ?type, ?descr, ?sprite, ?tags, $link\nexport const addDeploymentNode = function (\n  nodeType,\n  alias,\n  label,\n  type,\n  descr,\n  sprite,\n  tags,\n  link\n) {\n  // if (parentBoundary === null) return;\n\n  // Don't allow label nulling\n  if (alias === null || label === null) return;\n\n  let boundary = {};\n  const old = boundarys.find((boundary) => boundary.alias === alias);\n  if (old && alias === old.alias) {\n    boundary = old;\n  } else {\n    boundary.alias = alias;\n    boundarys.push(boundary);\n  }\n\n  // Don't allow null labels, either\n  if (label === undefined || label === null) {\n    boundary.label = { text: '' };\n  } else {\n    boundary.label = { text: label };\n  }\n\n  if (type === undefined || type === null) {\n    boundary.type = { text: 'node' };\n  } else {\n    if (typeof type === 'object') {\n      let [key, value] = Object.entries(type)[0];\n      boundary[key] = { text: value };\n    } else {\n      boundary.type = { text: type };\n    }\n  }\n\n  if (descr === undefined || descr === null) {\n    boundary.descr = { text: '' };\n  } else {\n    if (typeof descr === 'object') {\n      let [key, value] = Object.entries(descr)[0];\n      boundary[key] = { text: value };\n    } else {\n      boundary.descr = { text: descr };\n    }\n  }\n\n  if (typeof tags === 'object') {\n    let [key, value] = Object.entries(tags)[0];\n    boundary[key] = value;\n  } else {\n    boundary.tags = tags;\n  }\n  if (typeof link === 'object') {\n    let [key, value] = Object.entries(link)[0];\n    boundary[key] = value;\n  } else {\n    boundary.link = link;\n  }\n  boundary.nodeType = nodeType;\n  boundary.parentBoundary = currentBoundaryParse;\n  boundary.wrap = autoWrap();\n\n  parentBoundaryParse = currentBoundaryParse;\n  currentBoundaryParse = alias;\n  boundaryParseStack.push(parentBoundaryParse);\n};\n\nexport const popBoundaryParseStack = function () {\n  currentBoundaryParse = parentBoundaryParse;\n  boundaryParseStack.pop();\n  parentBoundaryParse = boundaryParseStack.pop();\n  boundaryParseStack.push(parentBoundaryParse);\n};\n\n//elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite\nexport const updateElStyle = function (\n  typeC4Shape,\n  elementName,\n  bgColor,\n  fontColor,\n  borderColor,\n  shadowing,\n  shape,\n  sprite,\n  techn,\n  legendText,\n  legendSprite\n) {\n  let old = c4ShapeArray.find((element) => element.alias === elementName);\n  if (old === undefined) {\n    old = boundarys.find((element) => element.alias === elementName);\n    if (old === undefined) {\n      return;\n    }\n  }\n  if (bgColor !== undefined && bgColor !== null) {\n    if (typeof bgColor === 'object') {\n      let [key, value] = Object.entries(bgColor)[0];\n      old[key] = value;\n    } else {\n      old.bgColor = bgColor;\n    }\n  }\n  if (fontColor !== undefined && fontColor !== null) {\n    if (typeof fontColor === 'object') {\n      let [key, value] = Object.entries(fontColor)[0];\n      old[key] = value;\n    } else {\n      old.fontColor = fontColor;\n    }\n  }\n  if (borderColor !== undefined && borderColor !== null) {\n    if (typeof borderColor === 'object') {\n      let [key, value] = Object.entries(borderColor)[0];\n      old[key] = value;\n    } else {\n      old.borderColor = borderColor;\n    }\n  }\n  if (shadowing !== undefined && shadowing !== null) {\n    if (typeof shadowing === 'object') {\n      let [key, value] = Object.entries(shadowing)[0];\n      old[key] = value;\n    } else {\n      old.shadowing = shadowing;\n    }\n  }\n  if (shape !== undefined && shape !== null) {\n    if (typeof shape === 'object') {\n      let [key, value] = Object.entries(shape)[0];\n      old[key] = value;\n    } else {\n      old.shape = shape;\n    }\n  }\n  if (sprite !== undefined && sprite !== null) {\n    if (typeof sprite === 'object') {\n      let [key, value] = Object.entries(sprite)[0];\n      old[key] = value;\n    } else {\n      old.sprite = sprite;\n    }\n  }\n  if (techn !== undefined && techn !== null) {\n    if (typeof techn === 'object') {\n      let [key, value] = Object.entries(techn)[0];\n      old[key] = value;\n    } else {\n      old.techn = techn;\n    }\n  }\n  if (legendText !== undefined && legendText !== null) {\n    if (typeof legendText === 'object') {\n      let [key, value] = Object.entries(legendText)[0];\n      old[key] = value;\n    } else {\n      old.legendText = legendText;\n    }\n  }\n  if (legendSprite !== undefined && legendSprite !== null) {\n    if (typeof legendSprite === 'object') {\n      let [key, value] = Object.entries(legendSprite)[0];\n      old[key] = value;\n    } else {\n      old.legendSprite = legendSprite;\n    }\n  }\n};\n\n//textColor, lineColor, ?offsetX, ?offsetY\nexport const updateRelStyle = function (\n  typeC4Shape,\n  from,\n  to,\n  textColor,\n  lineColor,\n  offsetX,\n  offsetY\n) {\n  const old = rels.find((rel) => rel.from === from && rel.to === to);\n  if (old === undefined) {\n    return;\n  }\n  if (textColor !== undefined && textColor !== null) {\n    if (typeof textColor === 'object') {\n      let [key, value] = Object.entries(textColor)[0];\n      old[key] = value;\n    } else {\n      old.textColor = textColor;\n    }\n  }\n  if (lineColor !== undefined && lineColor !== null) {\n    if (typeof lineColor === 'object') {\n      let [key, value] = Object.entries(lineColor)[0];\n      old[key] = value;\n    } else {\n      old.lineColor = lineColor;\n    }\n  }\n  if (offsetX !== undefined && offsetX !== null) {\n    if (typeof offsetX === 'object') {\n      let [key, value] = Object.entries(offsetX)[0];\n      old[key] = parseInt(value);\n    } else {\n      old.offsetX = parseInt(offsetX);\n    }\n  }\n  if (offsetY !== undefined && offsetY !== null) {\n    if (typeof offsetY === 'object') {\n      let [key, value] = Object.entries(offsetY)[0];\n      old[key] = parseInt(value);\n    } else {\n      old.offsetY = parseInt(offsetY);\n    }\n  }\n};\n\n//?c4ShapeInRow, ?c4BoundaryInRow\nexport const updateLayoutConfig = function (typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) {\n  let c4ShapeInRowValue = c4ShapeInRow;\n  let c4BoundaryInRowValue = c4BoundaryInRow;\n\n  if (typeof c4ShapeInRowParam === 'object') {\n    let [key, value] = Object.entries(c4ShapeInRowParam)[0];\n    c4ShapeInRowValue = parseInt(value);\n  } else {\n    c4ShapeInRowValue = parseInt(c4ShapeInRowParam);\n  }\n  if (typeof c4BoundaryInRowParam === 'object') {\n    let [key, value] = Object.entries(c4BoundaryInRowParam)[0];\n    c4BoundaryInRowValue = parseInt(value);\n  } else {\n    c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam);\n  }\n\n  if (c4ShapeInRowValue >= 1) c4ShapeInRow = c4ShapeInRowValue;\n  if (c4BoundaryInRowValue >= 1) c4BoundaryInRow = c4BoundaryInRowValue;\n};\n\nexport const getC4ShapeInRow = function () {\n  return c4ShapeInRow;\n};\nexport const getC4BoundaryInRow = function () {\n  return c4BoundaryInRow;\n};\nexport const getCurrentBoundaryParse = function () {\n  return currentBoundaryParse;\n};\n\nexport const getParentBoundaryParse = function () {\n  return parentBoundaryParse;\n};\n\nexport const getC4ShapeArray = function (parentBoundary) {\n  if (parentBoundary === undefined || parentBoundary === null) return c4ShapeArray;\n  else\n    return c4ShapeArray.filter((personOrSystem) => {\n      return personOrSystem.parentBoundary === parentBoundary;\n    });\n};\nexport const getC4Shape = function (alias) {\n  return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias);\n};\nexport const getC4ShapeKeys = function (parentBoundary) {\n  return Object.keys(getC4ShapeArray(parentBoundary));\n};\n\nexport const getBoundarys = function (parentBoundary) {\n  if (parentBoundary === undefined || parentBoundary === null) return boundarys;\n  else return boundarys.filter((boundary) => boundary.parentBoundary === parentBoundary);\n};\n\nexport const getRels = function () {\n  return rels;\n};\n\nexport const getTitle = function () {\n  return title;\n};\n\nexport const setWrap = function (wrapSetting) {\n  wrapEnabled = wrapSetting;\n};\n\nexport const autoWrap = function () {\n  return wrapEnabled;\n};\n\nexport const clear = function () {\n  c4ShapeArray = [];\n  boundarys = [\n    {\n      alias: 'global',\n      label: { text: 'global' },\n      type: { text: 'global' },\n      tags: null,\n      link: null,\n      parentBoundary: '',\n    },\n  ];\n  parentBoundaryParse = '';\n  currentBoundaryParse = 'global';\n  boundaryParseStack = [''];\n  rels = [];\n\n  boundaryParseStack = [''];\n  title = '';\n  wrapEnabled = false;\n  description = '';\n  c4ShapeInRow = 4;\n  c4BoundaryInRow = 2;\n};\n\nexport const LINETYPE = {\n  SOLID: 0,\n  DOTTED: 1,\n  NOTE: 2,\n  SOLID_CROSS: 3,\n  DOTTED_CROSS: 4,\n  SOLID_OPEN: 5,\n  DOTTED_OPEN: 6,\n  LOOP_START: 10,\n  LOOP_END: 11,\n  ALT_START: 12,\n  ALT_ELSE: 13,\n  ALT_END: 14,\n  OPT_START: 15,\n  OPT_END: 16,\n  ACTIVE_START: 17,\n  ACTIVE_END: 18,\n  PAR_START: 19,\n  PAR_AND: 20,\n  PAR_END: 21,\n  RECT_START: 22,\n  RECT_END: 23,\n  SOLID_POINT: 24,\n  DOTTED_POINT: 25,\n};\n\nexport const ARROWTYPE = {\n  FILLED: 0,\n  OPEN: 1,\n};\n\nexport const PLACEMENT = {\n  LEFTOF: 0,\n  RIGHTOF: 1,\n  OVER: 2,\n};\n\nexport const setTitle = function (txt) {\n  let sanitizedText = sanitizeText(txt, configApi.getConfig());\n  title = sanitizedText;\n};\n\nexport default {\n  addPersonOrSystem,\n  addPersonOrSystemBoundary,\n  addContainer,\n  addContainerBoundary,\n  addComponent,\n  addDeploymentNode,\n  popBoundaryParseStack,\n  addRel,\n  updateElStyle,\n  updateRelStyle,\n  updateLayoutConfig,\n  autoWrap,\n  setWrap,\n  getC4ShapeArray,\n  getC4Shape,\n  getC4ShapeKeys,\n  getBoundarys,\n  getCurrentBoundaryParse,\n  getParentBoundaryParse,\n  getRels,\n  getTitle,\n  getC4Type,\n  getC4ShapeInRow,\n  getC4BoundaryInRow,\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  parseDirective,\n  getConfig: () => configApi.getConfig().c4,\n  clear,\n  LINETYPE,\n  ARROWTYPE,\n  PLACEMENT,\n  setTitle,\n  setC4Type,\n  // apply,\n};\n","import { select } from 'd3';\nimport svgDraw, { drawText, fixLifeLineHeights } from './svgDraw';\nimport { log } from '../../logger';\nimport { parser } from './parser/c4Diagram';\nimport common from '../common/common';\nimport c4Db from './c4Db';\nimport * as configApi from '../../config';\nimport utils, {\n  wrapLabel,\n  calculateTextWidth,\n  calculateTextHeight,\n  assignWithDepth,\n  configureSvgSize,\n} from '../../utils';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nlet globalBoundaryMaxX = 0,\n  globalBoundaryMaxY = 0;\n\nlet c4ShapeInRow = 4;\nlet c4BoundaryInRow = 2;\n\nparser.yy = c4Db;\n\nlet conf = {};\n\nclass Bounds {\n  constructor() {\n    this.name = '';\n    this.data = {};\n    this.data.startx = undefined;\n    this.data.stopx = undefined;\n    this.data.starty = undefined;\n    this.data.stopy = undefined;\n    this.data.widthLimit = undefined;\n\n    this.nextData = {};\n    this.nextData.startx = undefined;\n    this.nextData.stopx = undefined;\n    this.nextData.starty = undefined;\n    this.nextData.stopy = undefined;\n    this.nextData.cnt = 0;\n\n    setConf(parser.yy.getConfig());\n  }\n\n  setData(startx, stopx, starty, stopy) {\n    this.nextData.startx = this.data.startx = startx;\n    this.nextData.stopx = this.data.stopx = stopx;\n    this.nextData.starty = this.data.starty = starty;\n    this.nextData.stopy = this.data.stopy = stopy;\n  }\n\n  updateVal(obj, key, val, fun) {\n    if (typeof obj[key] === 'undefined') {\n      obj[key] = val;\n    } else {\n      obj[key] = fun(val, obj[key]);\n    }\n  }\n\n  insert(c4Shape) {\n    this.nextData.cnt = this.nextData.cnt + 1;\n    let _startx =\n      this.nextData.startx === this.nextData.stopx\n        ? this.nextData.stopx + c4Shape.margin\n        : this.nextData.stopx + c4Shape.margin * 2;\n    let _stopx = _startx + c4Shape.width;\n    let _starty = this.nextData.starty + c4Shape.margin * 2;\n    let _stopy = _starty + c4Shape.height;\n    if (\n      _startx >= this.data.widthLimit ||\n      _stopx >= this.data.widthLimit ||\n      this.nextData.cnt > c4ShapeInRow\n    ) {\n      _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX;\n      _starty = this.nextData.stopy + c4Shape.margin * 2;\n\n      this.nextData.stopx = _stopx = _startx + c4Shape.width;\n      this.nextData.starty = this.nextData.stopy;\n      this.nextData.stopy = _stopy = _starty + c4Shape.height;\n      this.nextData.cnt = 1;\n    }\n\n    c4Shape.x = _startx;\n    c4Shape.y = _starty;\n\n    this.updateVal(this.data, 'startx', _startx, Math.min);\n    this.updateVal(this.data, 'starty', _starty, Math.min);\n    this.updateVal(this.data, 'stopx', _stopx, Math.max);\n    this.updateVal(this.data, 'stopy', _stopy, Math.max);\n\n    this.updateVal(this.nextData, 'startx', _startx, Math.min);\n    this.updateVal(this.nextData, 'starty', _starty, Math.min);\n    this.updateVal(this.nextData, 'stopx', _stopx, Math.max);\n    this.updateVal(this.nextData, 'stopy', _stopy, Math.max);\n  }\n\n  init() {\n    this.name = '';\n    this.data = {\n      startx: undefined,\n      stopx: undefined,\n      starty: undefined,\n      stopy: undefined,\n      widthLimit: undefined,\n    };\n    this.nextData = {\n      startx: undefined,\n      stopx: undefined,\n      starty: undefined,\n      stopy: undefined,\n      cnt: 0,\n    };\n    setConf(parser.yy.getConfig());\n  }\n\n  bumpLastMargin(margin) {\n    this.data.stopx += margin;\n    this.data.stopy += margin;\n  }\n}\n\nexport const setConf = function (cnf) {\n  assignWithDepth(conf, cnf);\n\n  if (cnf.fontFamily) {\n    conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily;\n  }\n  if (cnf.fontSize) {\n    conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize;\n  }\n  if (cnf.fontWeight) {\n    conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight;\n  }\n};\n\nconst c4ShapeFont = (cnf, typeC4Shape) => {\n  return {\n    fontFamily: cnf[typeC4Shape + 'FontFamily'],\n    fontSize: cnf[typeC4Shape + 'FontSize'],\n    fontWeight: cnf[typeC4Shape + 'FontWeight'],\n  };\n};\n\nconst boundaryFont = (cnf) => {\n  return {\n    fontFamily: cnf.boundaryFontFamily,\n    fontSize: cnf.boundaryFontSize,\n    fontWeight: cnf.boundaryFontWeight,\n  };\n};\n\nconst messageFont = (cnf) => {\n  return {\n    fontFamily: cnf.messageFontFamily,\n    fontSize: cnf.messageFontSize,\n    fontWeight: cnf.messageFontWeight,\n  };\n};\n\n/**\n * @param textType\n * @param c4Shape\n * @param c4ShapeTextWrap\n * @param textConf\n * @param textLimitWidth\n */\nfunction calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) {\n  if (!c4Shape[textType].width) {\n    if (c4ShapeTextWrap) {\n      c4Shape[textType].text = wrapLabel(c4Shape[textType].text, textLimitWidth, textConf);\n      c4Shape[textType].textLines = c4Shape[textType].text.split(common.lineBreakRegex).length;\n      // c4Shape[textType].width = calculateTextWidth(c4Shape[textType].text, textConf);\n      c4Shape[textType].width = textLimitWidth;\n      // c4Shape[textType].height = c4Shape[textType].textLines * textConf.fontSize;\n      c4Shape[textType].height = calculateTextHeight(c4Shape[textType].text, textConf);\n    } else {\n      let lines = c4Shape[textType].text.split(common.lineBreakRegex);\n      c4Shape[textType].textLines = lines.length;\n      let lineHeight = 0;\n      c4Shape[textType].height = 0;\n      c4Shape[textType].width = 0;\n      for (let i = 0; i < lines.length; i++) {\n        c4Shape[textType].width = Math.max(\n          calculateTextWidth(lines[i], textConf),\n          c4Shape[textType].width\n        );\n        lineHeight = calculateTextHeight(lines[i], textConf);\n        c4Shape[textType].height = c4Shape[textType].height + lineHeight;\n      }\n      // c4Shapes[textType].height = c4Shapes[textType].textLines * textConf.fontSize;\n    }\n  }\n}\n\nexport const drawBoundary = function (diagram, boundary, bounds) {\n  boundary.x = bounds.data.startx;\n  boundary.y = bounds.data.starty;\n  boundary.width = bounds.data.stopx - bounds.data.startx;\n  boundary.height = bounds.data.stopy - bounds.data.starty;\n\n  boundary.label.y = conf.c4ShapeMargin - 35;\n\n  let boundaryTextWrap = boundary.wrap && conf.wrap;\n  let boundaryLabelConf = boundaryFont(conf);\n  boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2;\n  boundaryLabelConf.fontWeight = 'bold';\n  let textLimitWidth = calculateTextWidth(boundary.label.text, boundaryLabelConf);\n  calcC4ShapeTextWH('label', boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth);\n\n  svgDraw.drawBoundary(diagram, boundary, conf);\n};\n\nexport const drawC4ShapeArray = function (currentBounds, diagram, c4ShapeArray, c4ShapeKeys) {\n  // Upper Y is relative point\n  let Y = 0;\n  // Draw the c4ShapeArray\n  for (let i = 0; i < c4ShapeKeys.length; i++) {\n    Y = 0;\n    const c4Shape = c4ShapeArray[c4ShapeKeys[i]];\n\n    // calc c4 shape type width and height\n\n    let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n    c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2;\n    c4Shape.typeC4Shape.width = calculateTextWidth(\n      '<<' + c4Shape.typeC4Shape.text + '>>',\n      c4ShapeTypeConf\n    );\n    c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2;\n    c4Shape.typeC4Shape.Y = conf.c4ShapePadding;\n    Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4;\n\n    // set image width and height c4Shape.x + c4Shape.width / 2 - 24, c4Shape.y + 28\n    // let imageWidth = 0,\n    //   imageHeight = 0,\n    //   imageY = 0;\n    //\n    c4Shape.image = { width: 0, height: 0, Y: 0 };\n    switch (c4Shape.typeC4Shape.text) {\n      case 'person':\n      case 'external_person':\n        c4Shape.image.width = 48;\n        c4Shape.image.height = 48;\n        c4Shape.image.Y = Y;\n        Y = c4Shape.image.Y + c4Shape.image.height;\n        break;\n    }\n    if (c4Shape.sprite) {\n      c4Shape.image.width = 48;\n      c4Shape.image.height = 48;\n      c4Shape.image.Y = Y;\n      Y = c4Shape.image.Y + c4Shape.image.height;\n    }\n\n    // Y = conf.c4ShapePadding + c4Shape.image.height;\n\n    let c4ShapeTextWrap = c4Shape.wrap && conf.wrap;\n    let textLimitWidth = conf.width - conf.c4ShapePadding * 2;\n\n    let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n    c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2;\n    c4ShapeLabelConf.fontWeight = 'bold';\n    calcC4ShapeTextWH('label', c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth);\n    c4Shape['label'].Y = Y + 8;\n    Y = c4Shape['label'].Y + c4Shape['label'].height;\n\n    if (c4Shape.type && c4Shape.type.text !== '') {\n      c4Shape.type.text = '[' + c4Shape.type.text + ']';\n      let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n      calcC4ShapeTextWH('type', c4Shape, c4ShapeTextWrap, c4ShapeTypeConf, textLimitWidth);\n      c4Shape['type'].Y = Y + 5;\n      Y = c4Shape['type'].Y + c4Shape['type'].height;\n    } else if (c4Shape.techn && c4Shape.techn.text !== '') {\n      c4Shape.techn.text = '[' + c4Shape.techn.text + ']';\n      let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text);\n      calcC4ShapeTextWH('techn', c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth);\n      c4Shape['techn'].Y = Y + 5;\n      Y = c4Shape['techn'].Y + c4Shape['techn'].height;\n    }\n\n    let rectHeight = Y;\n    let rectWidth = c4Shape.label.width;\n\n    if (c4Shape.descr && c4Shape.descr.text !== '') {\n      let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n      calcC4ShapeTextWH('descr', c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth);\n      c4Shape['descr'].Y = Y + 20;\n      Y = c4Shape['descr'].Y + c4Shape['descr'].height;\n\n      rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width);\n      rectHeight = Y - c4Shape['descr'].textLines * 5;\n    }\n\n    rectWidth = rectWidth + conf.c4ShapePadding;\n    // let rectHeight =\n\n    c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width);\n    c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height);\n    c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin;\n\n    currentBounds.insert(c4Shape);\n\n    const height = svgDraw.drawC4Shape(diagram, c4Shape, conf);\n  }\n\n  currentBounds.bumpLastMargin(conf.c4ShapeMargin);\n};\n\nclass Point {\n  constructor(x, y) {\n    this.x = x;\n    this.y = y;\n  }\n}\n\n/* * *\n * Get the intersection of the line between the center point of a rectangle and a point outside the rectangle.\n * Algorithm idea.\n * Using a point outside the rectangle as the coordinate origin, the graph is divided into four quadrants, and each quadrant is divided into two cases, with separate treatment on the coordinate axes\n * 1. The case of coordinate axes.\n * 1. The case of the negative x-axis\n * 2. The case of the positive x-axis\n * 3. The case of the positive y-axis\n * 4. The negative y-axis case\n * 2. Quadrant cases.\n * 2.1. first quadrant: the case where the line intersects the left side of the rectangle; the case where it intersects the lower side of the rectangle\n * 2.2. second quadrant: the case where the line intersects the right side of the rectangle; the case where it intersects the lower edge of the rectangle\n * 2.3. third quadrant: the case where the line intersects the right side of the rectangle; the case where it intersects the upper edge of the rectangle\n * 2.4. fourth quadrant: the case where the line intersects the left side of the rectangle; the case where it intersects the upper side of the rectangle\n *\n */\nlet getIntersectPoint = function (fromNode, endPoint) {\n  let x1 = fromNode.x;\n\n  let y1 = fromNode.y;\n\n  let x2 = endPoint.x;\n\n  let y2 = endPoint.y;\n\n  let fromCenterX = x1 + fromNode.width / 2;\n\n  let fromCenterY = y1 + fromNode.height / 2;\n\n  let dx = Math.abs(x1 - x2);\n\n  let dy = Math.abs(y1 - y2);\n\n  let tanDYX = dy / dx;\n\n  let fromDYX = fromNode.height / fromNode.width;\n\n  let returnPoint = null;\n\n  if (y1 == y2 && x1 < x2) {\n    returnPoint = new Point(x1 + fromNode.width, fromCenterY);\n  } else if (y1 == y2 && x1 > x2) {\n    returnPoint = new Point(x1, fromCenterY);\n  } else if (x1 == x2 && y1 < y2) {\n    returnPoint = new Point(fromCenterX, y1 + fromNode.height);\n  } else if (x1 == x2 && y1 > y2) {\n    returnPoint = new Point(fromCenterX, y1);\n  }\n\n  if (x1 > x2 && y1 < y2) {\n    if (fromDYX >= tanDYX) {\n      returnPoint = new Point(x1, fromCenterY + (tanDYX * fromNode.width) / 2);\n    } else {\n      returnPoint = new Point(\n        fromCenterX - ((dx / dy) * fromNode.height) / 2,\n        y1 + fromNode.height\n      );\n    }\n  } else if (x1 < x2 && y1 < y2) {\n    //\n    if (fromDYX >= tanDYX) {\n      returnPoint = new Point(x1 + fromNode.width, fromCenterY + (tanDYX * fromNode.width) / 2);\n    } else {\n      returnPoint = new Point(\n        fromCenterX + ((dx / dy) * fromNode.height) / 2,\n        y1 + fromNode.height\n      );\n    }\n  } else if (x1 < x2 && y1 > y2) {\n    if (fromDYX >= tanDYX) {\n      returnPoint = new Point(x1 + fromNode.width, fromCenterY - (tanDYX * fromNode.width) / 2);\n    } else {\n      returnPoint = new Point(fromCenterX + ((fromNode.height / 2) * dx) / dy, y1);\n    }\n  } else if (x1 > x2 && y1 > y2) {\n    if (fromDYX >= tanDYX) {\n      returnPoint = new Point(x1, fromCenterY - (fromNode.width / 2) * tanDYX);\n    } else {\n      returnPoint = new Point(fromCenterX - ((fromNode.height / 2) * dx) / dy, y1);\n    }\n  }\n  return returnPoint;\n};\n\nlet getIntersectPoints = function (fromNode, endNode) {\n  let endIntersectPoint = { x: 0, y: 0 };\n  endIntersectPoint.x = endNode.x + endNode.width / 2;\n  endIntersectPoint.y = endNode.y + endNode.height / 2;\n  let startPoint = getIntersectPoint(fromNode, endIntersectPoint);\n\n  endIntersectPoint.x = fromNode.x + fromNode.width / 2;\n  endIntersectPoint.y = fromNode.y + fromNode.height / 2;\n  let endPoint = getIntersectPoint(endNode, endIntersectPoint);\n  return { startPoint: startPoint, endPoint: endPoint };\n};\n\nexport const drawRels = function (diagram, rels, getC4ShapeObj) {\n  let i = 0;\n  for (let rel of rels) {\n    i = i + 1;\n    let relTextWrap = rel.wrap && conf.wrap;\n    let relConf = messageFont(conf);\n    let diagramType = parser.yy.getC4Type();\n    if (diagramType === 'C4Dynamic') rel.label.text = i + ': ' + rel.label.text;\n    let textLimitWidth = calculateTextWidth(rel.label.text, relConf);\n    calcC4ShapeTextWH('label', rel, relTextWrap, relConf, textLimitWidth);\n\n    if (rel.techn && rel.techn.text !== '') {\n      textLimitWidth = calculateTextWidth(rel.techn.text, relConf);\n      calcC4ShapeTextWH('techn', rel, relTextWrap, relConf, textLimitWidth);\n    }\n\n    if (rel.descr && rel.descr.text !== '') {\n      textLimitWidth = calculateTextWidth(rel.descr.text, relConf);\n      calcC4ShapeTextWH('descr', rel, relTextWrap, relConf, textLimitWidth);\n    }\n\n    let fromNode = getC4ShapeObj(rel.from);\n    let endNode = getC4ShapeObj(rel.to);\n    let points = getIntersectPoints(fromNode, endNode);\n    rel.startPoint = points.startPoint;\n    rel.endPoint = points.endPoint;\n  }\n  svgDraw.drawRels(diagram, rels, conf);\n};\n\n/**\n * @param diagram\n * @param parentBoundaryAlias\n * @param parentBounds\n * @param currentBoundarys\n */\nfunction drawInsideBoundary(diagram, parentBoundaryAlias, parentBounds, currentBoundarys) {\n  let currentBounds = new Bounds();\n  // Calculate the width limit of the boundar.  label/type 的长度,\n  currentBounds.data.widthLimit =\n    parentBounds.data.widthLimit / Math.min(c4BoundaryInRow, currentBoundarys.length);\n  // Math.min(\n  //   conf.width * conf.c4ShapeInRow + conf.c4ShapeMargin * conf.c4ShapeInRow * 2,\n  //   parentBounds.data.widthLimit / Math.min(conf.c4BoundaryInRow, currentBoundarys.length)\n  // );\n  for (let i = 0; i < currentBoundarys.length; i++) {\n    let currentBoundary = currentBoundarys[i];\n    let Y = 0;\n    currentBoundary.image = { width: 0, height: 0, Y: 0 };\n    if (currentBoundary.sprite) {\n      currentBoundary.image.width = 48;\n      currentBoundary.image.height = 48;\n      currentBoundary.image.Y = Y;\n      Y = currentBoundary.image.Y + currentBoundary.image.height;\n    }\n\n    let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap;\n\n    let currentBoundaryLabelConf = boundaryFont(conf);\n    currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2;\n    currentBoundaryLabelConf.fontWeight = 'bold';\n    calcC4ShapeTextWH(\n      'label',\n      currentBoundary,\n      currentBoundaryTextWrap,\n      currentBoundaryLabelConf,\n      currentBounds.data.widthLimit\n    );\n    currentBoundary['label'].Y = Y + 8;\n    Y = currentBoundary['label'].Y + currentBoundary['label'].height;\n\n    if (currentBoundary.type && currentBoundary.type.text !== '') {\n      currentBoundary.type.text = '[' + currentBoundary.type.text + ']';\n      let currentBoundaryTypeConf = boundaryFont(conf);\n      calcC4ShapeTextWH(\n        'type',\n        currentBoundary,\n        currentBoundaryTextWrap,\n        currentBoundaryTypeConf,\n        currentBounds.data.widthLimit\n      );\n      currentBoundary['type'].Y = Y + 5;\n      Y = currentBoundary['type'].Y + currentBoundary['type'].height;\n    }\n\n    if (currentBoundary.descr && currentBoundary.descr.text !== '') {\n      let currentBoundaryDescrConf = boundaryFont(conf);\n      currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2;\n      calcC4ShapeTextWH(\n        'descr',\n        currentBoundary,\n        currentBoundaryTextWrap,\n        currentBoundaryDescrConf,\n        currentBounds.data.widthLimit\n      );\n      currentBoundary['descr'].Y = Y + 20;\n      Y = currentBoundary['descr'].Y + currentBoundary['descr'].height;\n    }\n\n    if (i == 0 || i % c4BoundaryInRow === 0) {\n      // Calculate the drawing start point of the currentBoundarys.\n      let _x = parentBounds.data.startx + conf.diagramMarginX;\n      let _y = parentBounds.data.stopy + conf.diagramMarginY + Y;\n\n      currentBounds.setData(_x, _x, _y, _y);\n    } else {\n      // Calculate the drawing start point of the currentBoundarys.\n      let _x =\n        currentBounds.data.stopx !== currentBounds.data.startx\n          ? currentBounds.data.stopx + conf.diagramMarginX\n          : currentBounds.data.startx;\n      let _y = currentBounds.data.starty;\n\n      currentBounds.setData(_x, _x, _y, _y);\n    }\n    currentBounds.name = currentBoundary.alias;\n    let currentPersonOrSystemArray = parser.yy.getC4ShapeArray(currentBoundary.alias);\n    let currentPersonOrSystemKeys = parser.yy.getC4ShapeKeys(currentBoundary.alias);\n\n    if (currentPersonOrSystemKeys.length > 0) {\n      drawC4ShapeArray(\n        currentBounds,\n        diagram,\n        currentPersonOrSystemArray,\n        currentPersonOrSystemKeys\n      );\n    }\n    parentBoundaryAlias = currentBoundary.alias;\n    let nextCurrentBoundarys = parser.yy.getBoundarys(parentBoundaryAlias);\n\n    if (nextCurrentBoundarys.length > 0) {\n      // draw boundary inside currentBoundary\n      // bounds.init();\n      // parentBoundaryWidthLimit = bounds.data.stopx - bounds.startx;\n      drawInsideBoundary(diagram, parentBoundaryAlias, currentBounds, nextCurrentBoundarys);\n    }\n    // draw boundary\n    if (currentBoundary.alias !== 'global') drawBoundary(diagram, currentBoundary, currentBounds);\n    parentBounds.data.stopy = Math.max(\n      currentBounds.data.stopy + conf.c4ShapeMargin,\n      parentBounds.data.stopy\n    );\n    parentBounds.data.stopx = Math.max(\n      currentBounds.data.stopx + conf.c4ShapeMargin,\n      parentBounds.data.stopx\n    );\n    globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx);\n    globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy);\n  }\n}\n\n/**\n * Draws a sequenceDiagram in the tag with id: id based on the graph definition in text.\n *\n * @param {any} text\n * @param {any} id\n */\nexport const draw = function (text, id) {\n  conf = configApi.getConfig().c4;\n  const securityLevel = configApi.getConfig().securityLevel;\n  // Handle root and Document for when rendering in sanbox mode\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  let db = parser.yy;\n\n  parser.yy.clear();\n  parser.yy.setWrap(conf.wrap);\n  parser.parse(text + '\\n');\n\n  c4ShapeInRow = db.getC4ShapeInRow();\n  c4BoundaryInRow = db.getC4BoundaryInRow();\n\n  log.debug(`C:${JSON.stringify(conf, null, 2)}`);\n\n  const diagram =\n    securityLevel === 'sandbox' ? root.select(`[id=\"${id}\"]`) : select(`[id=\"${id}\"]`);\n\n  svgDraw.insertComputerIcon(diagram);\n  svgDraw.insertDatabaseIcon(diagram);\n  svgDraw.insertClockIcon(diagram);\n\n  let screenBounds = new Bounds();\n\n  screenBounds.setData(\n    conf.diagramMarginX,\n    conf.diagramMarginX,\n    conf.diagramMarginY,\n    conf.diagramMarginY\n  );\n\n  screenBounds.data.widthLimit = screen.availWidth;\n  globalBoundaryMaxX = conf.diagramMarginX;\n  globalBoundaryMaxY = conf.diagramMarginY;\n\n  const title = parser.yy.getTitle();\n  const c4type = parser.yy.getC4Type();\n  let currentBoundarys = parser.yy.getBoundarys('');\n  // switch (c4type) {\n  //   case 'C4Context':\n  drawInsideBoundary(diagram, '', screenBounds, currentBoundarys);\n  //     break;\n  // }\n\n  // The arrow head definition is attached to the svg once\n  svgDraw.insertArrowHead(diagram);\n  svgDraw.insertArrowEnd(diagram);\n  svgDraw.insertArrowCrossHead(diagram);\n  svgDraw.insertArrowFilledHead(diagram);\n\n  drawRels(diagram, parser.yy.getRels(), parser.yy.getC4Shape);\n\n  screenBounds.data.stopx = globalBoundaryMaxX;\n  screenBounds.data.stopy = globalBoundaryMaxY;\n\n  const box = screenBounds.data;\n\n  // Make sure the height of the diagram supports long menus.\n  let boxHeight = box.stopy - box.starty;\n\n  let height = boxHeight + 2 * conf.diagramMarginY;\n\n  // Make sure the width of the diagram supports wide menus.\n  let boxWidth = box.stopx - box.startx;\n  const width = boxWidth + 2 * conf.diagramMarginX;\n\n  if (title) {\n    diagram\n      .append('text')\n      .text(title)\n      .attr('x', (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX)\n      .attr('y', box.starty + conf.diagramMarginY);\n  }\n\n  configureSvgSize(diagram, height, width, conf.useMaxWidth);\n\n  const extraVertForTitle = title ? 60 : 0;\n  diagram.attr(\n    'viewBox',\n    box.startx -\n      conf.diagramMarginX +\n      ' -' +\n      (conf.diagramMarginY + extraVertForTitle) +\n      ' ' +\n      width +\n      ' ' +\n      (height + extraVertForTitle)\n  );\n\n  addSVGAccessibilityFields(parser.yy, diagram, id);\n  log.debug(`models:`, box);\n};\n\nexport default {\n  drawPersonOrSystemArray: drawC4ShapeArray,\n  drawBoundary,\n  setConf,\n  draw,\n};\n","const getStyles = (options) =>\n  `.person {\n    stroke: ${options.personBorder};\n    fill: ${options.personBkg};\n  }\n`;\n\nexport default getStyles;\n","import common from '../common/common';\nimport { addFunction } from '../../interactionDb';\nimport { sanitizeUrl } from '@braintree/sanitize-url';\n\nexport const drawRect = function (elem, rectData) {\n  const rectElem = elem.append('rect');\n  rectElem.attr('x', rectData.x);\n  rectElem.attr('y', rectData.y);\n  rectElem.attr('fill', rectData.fill);\n  rectElem.attr('stroke', rectData.stroke);\n  rectElem.attr('width', rectData.width);\n  rectElem.attr('height', rectData.height);\n  rectElem.attr('rx', rectData.rx);\n  rectElem.attr('ry', rectData.ry);\n\n  if (rectData.attrs !== 'undefined' && rectData.attrs !== null) {\n    for (let attrKey in rectData.attrs) rectElem.attr(attrKey, rectData.attrs[attrKey]);\n  }\n\n  if (rectData.class !== 'undefined') {\n    rectElem.attr('class', rectData.class);\n  }\n\n  return rectElem;\n};\n\nexport const drawImage = function (elem, width, height, x, y, link) {\n  const imageElem = elem.append('image');\n  imageElem.attr('width', width);\n  imageElem.attr('height', height);\n  imageElem.attr('x', x);\n  imageElem.attr('y', y);\n  let sanitizedLink = link.startsWith('data:image/png;base64') ? link : sanitizeUrl(link);\n  imageElem.attr('xlink:href', sanitizedLink);\n};\n\nexport const drawEmbeddedImage = function (elem, x, y, link) {\n  const imageElem = elem.append('use');\n  imageElem.attr('x', x);\n  imageElem.attr('y', y);\n  var sanitizedLink = sanitizeUrl(link);\n  imageElem.attr('xlink:href', '#' + sanitizedLink);\n};\n\nexport const drawText = function (elem, textData) {\n  let prevTextHeight = 0,\n    textHeight = 0;\n  const lines = textData.text.split(common.lineBreakRegex);\n\n  let textElems = [];\n  let dy = 0;\n  let yfunc = () => textData.y;\n  if (\n    typeof textData.valign !== 'undefined' &&\n    typeof textData.textMargin !== 'undefined' &&\n    textData.textMargin > 0\n  ) {\n    switch (textData.valign) {\n      case 'top':\n      case 'start':\n        yfunc = () => Math.round(textData.y + textData.textMargin);\n        break;\n      case 'middle':\n      case 'center':\n        yfunc = () =>\n          Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2);\n        break;\n      case 'bottom':\n      case 'end':\n        yfunc = () =>\n          Math.round(\n            textData.y +\n              (prevTextHeight + textHeight + 2 * textData.textMargin) -\n              textData.textMargin\n          );\n        break;\n    }\n  }\n  if (\n    typeof textData.anchor !== 'undefined' &&\n    typeof textData.textMargin !== 'undefined' &&\n    typeof textData.width !== 'undefined'\n  ) {\n    switch (textData.anchor) {\n      case 'left':\n      case 'start':\n        textData.x = Math.round(textData.x + textData.textMargin);\n        textData.anchor = 'start';\n        textData.dominantBaseline = 'text-after-edge';\n        textData.alignmentBaseline = 'middle';\n        break;\n      case 'middle':\n      case 'center':\n        textData.x = Math.round(textData.x + textData.width / 2);\n        textData.anchor = 'middle';\n        textData.dominantBaseline = 'middle';\n        textData.alignmentBaseline = 'middle';\n        break;\n      case 'right':\n      case 'end':\n        textData.x = Math.round(textData.x + textData.width - textData.textMargin);\n        textData.anchor = 'end';\n        textData.dominantBaseline = 'text-before-edge';\n        textData.alignmentBaseline = 'middle';\n        break;\n    }\n  }\n  for (let i = 0; i < lines.length; i++) {\n    let line = lines[i];\n    if (\n      typeof textData.textMargin !== 'undefined' &&\n      textData.textMargin === 0 &&\n      typeof textData.fontSize !== 'undefined'\n    ) {\n      dy = i * textData.fontSize;\n    }\n\n    const textElem = elem.append('text');\n    textElem.attr('x', textData.x);\n    textElem.attr('y', yfunc());\n    if (typeof textData.anchor !== 'undefined') {\n      textElem\n        .attr('text-anchor', textData.anchor)\n        .attr('dominant-baseline', textData.dominantBaseline)\n        .attr('alignment-baseline', textData.alignmentBaseline);\n    }\n    if (typeof textData.fontFamily !== 'undefined') {\n      textElem.style('font-family', textData.fontFamily);\n    }\n    if (typeof textData.fontSize !== 'undefined') {\n      textElem.style('font-size', textData.fontSize);\n    }\n    if (typeof textData.fontWeight !== 'undefined') {\n      textElem.style('font-weight', textData.fontWeight);\n    }\n    if (typeof textData.fill !== 'undefined') {\n      textElem.attr('fill', textData.fill);\n    }\n    if (typeof textData.class !== 'undefined') {\n      textElem.attr('class', textData.class);\n    }\n    if (typeof textData.dy !== 'undefined') {\n      textElem.attr('dy', textData.dy);\n    } else if (dy !== 0) {\n      textElem.attr('dy', dy);\n    }\n\n    if (textData.tspan) {\n      const span = textElem.append('tspan');\n      span.attr('x', textData.x);\n      if (typeof textData.fill !== 'undefined') {\n        span.attr('fill', textData.fill);\n      }\n      span.text(line);\n    } else {\n      textElem.text(line);\n    }\n    if (\n      typeof textData.valign !== 'undefined' &&\n      typeof textData.textMargin !== 'undefined' &&\n      textData.textMargin > 0\n    ) {\n      textHeight += (textElem._groups || textElem)[0][0].getBBox().height;\n      prevTextHeight = textHeight;\n    }\n\n    textElems.push(textElem);\n  }\n\n  return textElems;\n};\n\nexport const drawLabel = function (elem, txtObject) {\n  /**\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} cut\n   * @returns {any}\n   */\n  function genPoints(x, y, width, height, cut) {\n    return (\n      x +\n      ',' +\n      y +\n      ' ' +\n      (x + width) +\n      ',' +\n      y +\n      ' ' +\n      (x + width) +\n      ',' +\n      (y + height - cut) +\n      ' ' +\n      (x + width - cut * 1.2) +\n      ',' +\n      (y + height) +\n      ' ' +\n      x +\n      ',' +\n      (y + height)\n    );\n  }\n  const polygon = elem.append('polygon');\n  polygon.attr('points', genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7));\n  polygon.attr('class', 'labelBox');\n\n  txtObject.y = txtObject.y + txtObject.height / 2;\n\n  drawText(elem, txtObject);\n  return polygon;\n};\n\nexport const drawRels = (elem, rels, conf) => {\n  const relsElem = elem.append('g');\n  let i = 0;\n  for (let rel of rels) {\n    let textColor = rel.textColor ? rel.textColor : '#444444';\n    let strokeColor = rel.lineColor ? rel.lineColor : '#444444';\n    let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0;\n    let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0;\n\n    let url = '';\n    if (i === 0) {\n      let line = relsElem.append('line');\n      line.attr('x1', rel.startPoint.x);\n      line.attr('y1', rel.startPoint.y);\n      line.attr('x2', rel.endPoint.x);\n      line.attr('y2', rel.endPoint.y);\n\n      line.attr('stroke-width', '1');\n      line.attr('stroke', strokeColor);\n      line.style('fill', 'none');\n      if (rel.type !== 'rel_b') line.attr('marker-end', 'url(' + url + '#arrowhead)');\n      if (rel.type === 'birel' || rel.type === 'rel_b')\n        line.attr('marker-start', 'url(' + url + '#arrowend)');\n      i = -1;\n    } else {\n      let line = relsElem.append('path');\n      line\n        .attr('fill', 'none')\n        .attr('stroke-width', '1')\n        .attr('stroke', strokeColor)\n        .attr(\n          'd',\n          'Mstartx,starty Qcontrolx,controly stopx,stopy '\n            .replaceAll('startx', rel.startPoint.x)\n            .replaceAll('starty', rel.startPoint.y)\n            .replaceAll(\n              'controlx',\n              rel.startPoint.x +\n                (rel.endPoint.x - rel.startPoint.x) / 2 -\n                (rel.endPoint.x - rel.startPoint.x) / 4\n            )\n            .replaceAll('controly', rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2)\n            .replaceAll('stopx', rel.endPoint.x)\n            .replaceAll('stopy', rel.endPoint.y)\n        );\n      if (rel.type !== 'rel_b') line.attr('marker-end', 'url(' + url + '#arrowhead)');\n      if (rel.type === 'birel' || rel.type === 'rel_b')\n        line.attr('marker-start', 'url(' + url + '#arrowend)');\n    }\n\n    let messageConf = conf.messageFont();\n    _drawTextCandidateFunc(conf)(\n      rel.label.text,\n      relsElem,\n      Math.min(rel.startPoint.x, rel.endPoint.x) +\n        Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 +\n        offsetX,\n      Math.min(rel.startPoint.y, rel.endPoint.y) +\n        Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 +\n        offsetY,\n      rel.label.width,\n      rel.label.height,\n      { fill: textColor },\n      messageConf\n    );\n\n    if (rel.techn && rel.techn.text !== '') {\n      messageConf = conf.messageFont();\n      _drawTextCandidateFunc(conf)(\n        '[' + rel.techn.text + ']',\n        relsElem,\n        Math.min(rel.startPoint.x, rel.endPoint.x) +\n          Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 +\n          offsetX,\n        Math.min(rel.startPoint.y, rel.endPoint.y) +\n          Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 +\n          conf.messageFontSize +\n          5 +\n          offsetY,\n        Math.max(rel.label.width, rel.techn.width),\n        rel.techn.height,\n        { fill: textColor, 'font-style': 'italic' },\n        messageConf\n      );\n    }\n  }\n};\n\n/**\n * Draws an boundary in the diagram\n *\n * @param {any} elem - The diagram we'll draw to.\n * @param {any} boundary - The boundary to draw.\n * @param {any} conf - DrawText implementation discriminator object\n */\nconst drawBoundary = function (elem, boundary, conf) {\n  const boundaryElem = elem.append('g');\n\n  let fillColor = boundary.bgColor ? boundary.bgColor : 'none';\n  let strokeColor = boundary.borderColor ? boundary.borderColor : '#444444';\n  let fontColor = boundary.fontColor ? boundary.fontColor : 'black';\n\n  let attrsValue = { 'stroke-width': 1.0, 'stroke-dasharray': '7.0,7.0' };\n  if (boundary.nodeType) attrsValue = { 'stroke-width': 1.0 };\n  let rectData = {\n    x: boundary.x,\n    y: boundary.y,\n    fill: fillColor,\n    stroke: strokeColor,\n    width: boundary.width,\n    height: boundary.height,\n    rx: 2.5,\n    ry: 2.5,\n    attrs: attrsValue,\n  };\n\n  drawRect(boundaryElem, rectData);\n\n  // draw label\n  let boundaryConf = conf.boundaryFont();\n  boundaryConf.fontWeight = 'bold';\n  boundaryConf.fontSize = boundaryConf.fontSize + 2;\n  boundaryConf.fontColor = fontColor;\n  _drawTextCandidateFunc(conf)(\n    boundary.label.text,\n    boundaryElem,\n    boundary.x,\n    boundary.y + boundary.label.Y,\n    boundary.width,\n    boundary.height,\n    { fill: '#444444' },\n    boundaryConf\n  );\n\n  // draw type\n  if (boundary.type && boundary.type.text !== '') {\n    boundaryConf = conf.boundaryFont();\n    boundaryConf.fontColor = fontColor;\n    _drawTextCandidateFunc(conf)(\n      boundary.type.text,\n      boundaryElem,\n      boundary.x,\n      boundary.y + boundary.type.Y,\n      boundary.width,\n      boundary.height,\n      { fill: '#444444' },\n      boundaryConf\n    );\n  }\n\n  // draw descr\n  if (boundary.descr && boundary.descr.text !== '') {\n    boundaryConf = conf.boundaryFont();\n    boundaryConf.fontSize = boundaryConf.fontSize - 2;\n    boundaryConf.fontColor = fontColor;\n    _drawTextCandidateFunc(conf)(\n      boundary.descr.text,\n      boundaryElem,\n      boundary.x,\n      boundary.y + boundary.descr.Y,\n      boundary.width,\n      boundary.height,\n      { fill: '#444444' },\n      boundaryConf\n    );\n  }\n};\n\nexport const drawC4Shape = function (elem, c4Shape, conf) {\n  let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf[c4Shape.typeC4Shape.text + '_bg_color'];\n  let strokeColor = c4Shape.borderColor\n    ? c4Shape.borderColor\n    : conf[c4Shape.typeC4Shape.text + '_border_color'];\n  let fontColor = c4Shape.fontColor ? c4Shape.fontColor : '#FFFFFF';\n\n  let personImg =\n    'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=';\n  switch (c4Shape.typeC4Shape.text) {\n    case 'person':\n      personImg =\n        'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=';\n      break;\n    case 'external_person':\n      personImg =\n        'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=';\n      break;\n  }\n\n  const c4ShapeElem = elem.append('g');\n  c4ShapeElem.attr('class', 'person-man');\n\n  // <rect fill=\"#08427B\" height=\"119.2188\" rx=\"2.5\" ry=\"2.5\" style=\"stroke:#073B6F;stroke-width:0.5;\" width=\"110\" x=\"120\" y=\"7\"/>\n  // draw rect of c4Shape\n  const rect = getNoteRect();\n  switch (c4Shape.typeC4Shape.text) {\n    case 'person':\n    case 'external_person':\n    case 'system':\n    case 'external_system':\n    case 'container':\n    case 'external_container':\n    case 'component':\n    case 'external_component':\n      rect.x = c4Shape.x;\n      rect.y = c4Shape.y;\n      rect.fill = fillColor;\n      rect.width = c4Shape.width;\n      rect.height = c4Shape.height;\n      rect.style = 'stroke:' + strokeColor + ';stroke-width:0.5;';\n      rect.rx = 2.5;\n      rect.ry = 2.5;\n      drawRect(c4ShapeElem, rect);\n      break;\n    case 'system_db':\n    case 'external_system_db':\n    case 'container_db':\n    case 'external_container_db':\n    case 'component_db':\n    case 'external_component_db':\n      c4ShapeElem\n        .append('path')\n        .attr('fill', fillColor)\n        .attr('stroke-width', '0.5')\n        .attr('stroke', strokeColor)\n        .attr(\n          'd',\n          'Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height'\n            .replaceAll('startx', c4Shape.x)\n            .replaceAll('starty', c4Shape.y)\n            .replaceAll('half', c4Shape.width / 2)\n            .replaceAll('height', c4Shape.height)\n        );\n      c4ShapeElem\n        .append('path')\n        .attr('fill', 'none')\n        .attr('stroke-width', '0.5')\n        .attr('stroke', strokeColor)\n        .attr(\n          'd',\n          'Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10'\n            .replaceAll('startx', c4Shape.x)\n            .replaceAll('starty', c4Shape.y)\n            .replaceAll('half', c4Shape.width / 2)\n        );\n      break;\n    case 'system_queue':\n    case 'external_system_queue':\n    case 'container_queue':\n    case 'external_container_queue':\n    case 'component_queue':\n    case 'external_component_queue':\n      c4ShapeElem\n        .append('path')\n        .attr('fill', fillColor)\n        .attr('stroke-width', '0.5')\n        .attr('stroke', strokeColor)\n        .attr(\n          'd',\n          'Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half'\n            .replaceAll('startx', c4Shape.x)\n            .replaceAll('starty', c4Shape.y)\n            .replaceAll('width', c4Shape.width)\n            .replaceAll('half', c4Shape.height / 2)\n        );\n      c4ShapeElem\n        .append('path')\n        .attr('fill', 'none')\n        .attr('stroke-width', '0.5')\n        .attr('stroke', strokeColor)\n        .attr(\n          'd',\n          'Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half'\n            .replaceAll('startx', c4Shape.x + c4Shape.width)\n            .replaceAll('starty', c4Shape.y)\n            .replaceAll('half', c4Shape.height / 2)\n        );\n      break;\n  }\n\n  // draw type of c4Shape\n  let c4ShapeFontConf = getC4ShapeFont(conf, c4Shape.typeC4Shape.text);\n  c4ShapeElem\n    .append('text')\n    .attr('fill', fontColor)\n    .attr('font-family', c4ShapeFontConf.fontFamily)\n    .attr('font-size', c4ShapeFontConf.fontSize - 2)\n    .attr('font-style', 'italic')\n    .attr('lengthAdjust', 'spacing')\n    .attr('textLength', c4Shape.typeC4Shape.width)\n    .attr('x', c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2)\n    .attr('y', c4Shape.y + c4Shape.typeC4Shape.Y)\n    .text('<<' + c4Shape.typeC4Shape.text + '>>');\n\n  // draw image/sprite\n  switch (c4Shape.typeC4Shape.text) {\n    case 'person':\n    case 'external_person':\n      drawImage(\n        c4ShapeElem,\n        48,\n        48,\n        c4Shape.x + c4Shape.width / 2 - 24,\n        c4Shape.y + c4Shape.image.Y,\n        personImg\n      );\n      break;\n  }\n\n  // draw label\n  let textFontConf = conf[c4Shape.typeC4Shape.text + 'Font']();\n  textFontConf.fontWeight = 'bold';\n  textFontConf.fontSize = textFontConf.fontSize + 2;\n  textFontConf.fontColor = fontColor;\n  _drawTextCandidateFunc(conf)(\n    c4Shape.label.text,\n    c4ShapeElem,\n    c4Shape.x,\n    c4Shape.y + c4Shape.label.Y,\n    c4Shape.width,\n    c4Shape.height,\n    { fill: fontColor },\n    textFontConf\n  );\n\n  // draw techn/type\n  textFontConf = conf[c4Shape.typeC4Shape.text + 'Font']();\n  textFontConf.fontColor = fontColor;\n\n  if (c4Shape.thchn && c4Shape.thchn.text !== '') {\n    _drawTextCandidateFunc(conf)(\n      c4Shape.thchn.text,\n      c4ShapeElem,\n      c4Shape.x,\n      c4Shape.y + c4Shape.thchn.Y,\n      c4Shape.width,\n      c4Shape.height,\n      { fill: fontColor, 'font-style': 'italic' },\n      textFontConf\n    );\n  } else if (c4Shape.type && c4Shape.type.text !== '') {\n    _drawTextCandidateFunc(conf)(\n      c4Shape.type.text,\n      c4ShapeElem,\n      c4Shape.x,\n      c4Shape.y + c4Shape.type.Y,\n      c4Shape.width,\n      c4Shape.height,\n      { fill: fontColor, 'font-style': 'italic' },\n      textFontConf\n    );\n  }\n\n  // draw descr\n  if (c4Shape.descr && c4Shape.descr.text !== '') {\n    textFontConf = conf.personFont();\n    textFontConf.fontColor = fontColor;\n    _drawTextCandidateFunc(conf)(\n      c4Shape.descr.text,\n      c4ShapeElem,\n      c4Shape.x,\n      c4Shape.y + c4Shape.descr.Y,\n      c4Shape.width,\n      c4Shape.height,\n      { fill: fontColor },\n      textFontConf\n    );\n  }\n\n  return c4Shape.height;\n};\n\nexport const insertDatabaseIcon = function (elem) {\n  elem\n    .append('defs')\n    .append('symbol')\n    .attr('id', 'database')\n    .attr('fill-rule', 'evenodd')\n    .attr('clip-rule', 'evenodd')\n    .append('path')\n    .attr('transform', 'scale(.5)')\n    .attr(\n      'd',\n      'M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z'\n    );\n};\n\nexport const insertComputerIcon = function (elem) {\n  elem\n    .append('defs')\n    .append('symbol')\n    .attr('id', 'computer')\n    .attr('width', '24')\n    .attr('height', '24')\n    .append('path')\n    .attr('transform', 'scale(.5)')\n    .attr(\n      'd',\n      'M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z'\n    );\n};\n\nexport const insertClockIcon = function (elem) {\n  elem\n    .append('defs')\n    .append('symbol')\n    .attr('id', 'clock')\n    .attr('width', '24')\n    .attr('height', '24')\n    .append('path')\n    .attr('transform', 'scale(.5)')\n    .attr(\n      'd',\n      'M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z'\n    );\n};\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param elem\n */\nexport const insertArrowHead = function (elem) {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'arrowhead')\n    .attr('refX', 9)\n    .attr('refY', 5)\n    .attr('markerUnits', 'userSpaceOnUse')\n    .attr('markerWidth', 12)\n    .attr('markerHeight', 12)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 0 0 L 10 5 L 0 10 z'); // this is actual shape for arrowhead\n};\nexport const insertArrowEnd = function (elem) {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'arrowend')\n    .attr('refX', 1)\n    .attr('refY', 5)\n    .attr('markerUnits', 'userSpaceOnUse')\n    .attr('markerWidth', 12)\n    .attr('markerHeight', 12)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 10 0 L 0 5 L 10 10 z'); // this is actual shape for arrowhead\n};\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertArrowFilledHead = function (elem) {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'filled-head')\n    .attr('refX', 18)\n    .attr('refY', 7)\n    .attr('markerWidth', 20)\n    .attr('markerHeight', 28)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z');\n};\n/**\n * Setup node number. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertDynamicNumber = function (elem) {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'sequencenumber')\n    .attr('refX', 15)\n    .attr('refY', 15)\n    .attr('markerWidth', 60)\n    .attr('markerHeight', 40)\n    .attr('orient', 'auto')\n    .append('circle')\n    .attr('cx', 15)\n    .attr('cy', 15)\n    .attr('r', 6);\n  // .style(\"fill\", '#f00');\n};\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertArrowCrossHead = function (elem) {\n  const defs = elem.append('defs');\n  const marker = defs\n    .append('marker')\n    .attr('id', 'crosshead')\n    .attr('markerWidth', 15)\n    .attr('markerHeight', 8)\n    .attr('orient', 'auto')\n    .attr('refX', 16)\n    .attr('refY', 4);\n\n  // The arrow\n  marker\n    .append('path')\n    .attr('fill', 'black')\n    .attr('stroke', '#000000')\n    .style('stroke-dasharray', '0, 0')\n    .attr('stroke-width', '1px')\n    .attr('d', 'M 9,2 V 6 L16,4 Z');\n\n  // The cross\n  marker\n    .append('path')\n    .attr('fill', 'none')\n    .attr('stroke', '#000000')\n    .style('stroke-dasharray', '0, 0')\n    .attr('stroke-width', '1px')\n    .attr('d', 'M 0,1 L 6,7 M 6,1 L 0,7');\n  // this is actual shape for arrowhead\n};\n\nexport const getTextObj = function () {\n  return {\n    x: 0,\n    y: 0,\n    fill: undefined,\n    anchor: undefined,\n    style: '#666',\n    width: undefined,\n    height: undefined,\n    textMargin: 0,\n    rx: 0,\n    ry: 0,\n    tspan: true,\n    valign: undefined,\n  };\n};\n\nexport const getNoteRect = function () {\n  return {\n    x: 0,\n    y: 0,\n    fill: '#EDF2AE',\n    stroke: '#666',\n    width: 100,\n    anchor: 'start',\n    height: 100,\n    rx: 0,\n    ry: 0,\n  };\n};\n\nconst getC4ShapeFont = (cnf, typeC4Shape) => {\n  return {\n    fontFamily: cnf[typeC4Shape + 'FontFamily'],\n    fontSize: cnf[typeC4Shape + 'FontSize'],\n    fontWeight: cnf[typeC4Shape + 'FontWeight'],\n  };\n};\n\nconst _drawTextCandidateFunc = (function () {\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   */\n  function byText(content, g, x, y, width, height, textAttrs) {\n    const text = g\n      .append('text')\n      .attr('x', x + width / 2)\n      .attr('y', y + height / 2 + 5)\n      .style('text-anchor', 'middle')\n      .text(content);\n    _setTextAttrs(text, textAttrs);\n  }\n\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   * @param {any} conf\n   */\n  function byTspan(content, g, x, y, width, height, textAttrs, conf) {\n    const { fontSize, fontFamily, fontWeight } = conf;\n\n    const lines = content.split(common.lineBreakRegex);\n    for (let i = 0; i < lines.length; i++) {\n      const dy = i * fontSize - (fontSize * (lines.length - 1)) / 2;\n      const text = g\n        .append('text')\n        .attr('x', x + width / 2)\n        .attr('y', y)\n        .style('text-anchor', 'middle')\n        .attr('dominant-baseline', 'middle')\n        .style('font-size', fontSize)\n        .style('font-weight', fontWeight)\n        .style('font-family', fontFamily);\n      text\n        .append('tspan')\n        // .attr('x', x + width / 2)\n        .attr('dy', dy)\n        .text(lines[i])\n        // .attr('y', y + height / 2)\n        .attr('alignment-baseline', 'mathematical');\n\n      _setTextAttrs(text, textAttrs);\n    }\n  }\n\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   * @param {any} conf\n   */\n  function byFo(content, g, x, y, width, height, textAttrs, conf) {\n    const s = g.append('switch');\n    const f = s\n      .append('foreignObject')\n      .attr('x', x)\n      .attr('y', y)\n      .attr('width', width)\n      .attr('height', height);\n\n    const text = f\n      .append('xhtml:div')\n      .style('display', 'table')\n      .style('height', '100%')\n      .style('width', '100%');\n\n    text\n      .append('div')\n      .style('display', 'table-cell')\n      .style('text-align', 'center')\n      .style('vertical-align', 'middle')\n      .text(content);\n\n    byTspan(content, s, x, y, width, height, textAttrs, conf);\n    _setTextAttrs(text, textAttrs);\n  }\n\n  /**\n   * @param {any} toText\n   * @param {any} fromTextAttrsDict\n   */\n  function _setTextAttrs(toText, fromTextAttrsDict) {\n    for (const key in fromTextAttrsDict) {\n      if (fromTextAttrsDict.hasOwnProperty(key)) {\n        // eslint-disable-line\n        toText.attr(key, fromTextAttrsDict[key]);\n      }\n    }\n  }\n\n  return function (conf) {\n    return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n  };\n})();\n\nexport default {\n  drawRect,\n  drawText,\n  drawLabel,\n  drawBoundary,\n  drawC4Shape,\n  drawRels,\n  drawImage,\n  drawEmbeddedImage,\n  insertArrowHead,\n  insertArrowEnd,\n  insertArrowFilledHead,\n  insertDynamicNumber,\n  insertArrowCrossHead,\n  insertDatabaseIcon,\n  insertComputerIcon,\n  insertClockIcon,\n  getTextObj,\n  getNoteRect,\n  sanitizeUrl,\n};\n","import { select } from 'd3';\nimport { log } from '../../logger';\nimport * as configApi from '../../config';\nimport common from '../common/common';\nimport utils from '../../utils';\nimport mermaidAPI from '../../mermaidAPI';\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n} from '../../commonDb';\n\nconst MERMAID_DOM_ID_PREFIX = 'classid-';\n\nlet relations = [];\nlet classes = {};\nlet classCounter = 0;\n\nlet funs = [];\n\nconst sanitizeText = (txt) => common.sanitizeText(txt, configApi.getConfig());\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\nconst splitClassNameAndType = function (id) {\n  let genericType = '';\n  let className = id;\n\n  if (id.indexOf('~') > 0) {\n    let split = id.split('~');\n    className = split[0];\n\n    genericType = common.sanitizeText(split[1], configApi.getConfig());\n  }\n\n  return { className: className, type: genericType };\n};\n\n/**\n * Function called by parser when a node definition has been found.\n *\n * @param id\n * @public\n */\nexport const addClass = function (id) {\n  let classId = splitClassNameAndType(id);\n  // Only add class if not exists\n  if (typeof classes[classId.className] !== 'undefined') return;\n\n  classes[classId.className] = {\n    id: classId.className,\n    type: classId.type,\n    cssClasses: [],\n    methods: [],\n    members: [],\n    annotations: [],\n    domId: MERMAID_DOM_ID_PREFIX + classId.className + '-' + classCounter,\n  };\n\n  classCounter++;\n};\n\n/**\n * Function to lookup domId from id in the graph definition.\n *\n * @param id\n * @public\n */\nexport const lookUpDomId = function (id) {\n  const classKeys = Object.keys(classes);\n  for (let i = 0; i < classKeys.length; i++) {\n    if (classes[classKeys[i]].id === id) {\n      return classes[classKeys[i]].domId;\n    }\n  }\n};\n\nexport const clear = function () {\n  relations = [];\n  classes = {};\n  funs = [];\n  funs.push(setupToolTips);\n  commonClear();\n};\n\nexport const getClass = function (id) {\n  return classes[id];\n};\nexport const getClasses = function () {\n  return classes;\n};\n\nexport const getRelations = function () {\n  return relations;\n};\n\nexport const addRelation = function (relation) {\n  log.debug('Adding relation: ' + JSON.stringify(relation));\n  addClass(relation.id1);\n  addClass(relation.id2);\n\n  relation.id1 = splitClassNameAndType(relation.id1).className;\n  relation.id2 = splitClassNameAndType(relation.id2).className;\n\n  relation.relationTitle1 = common.sanitizeText(\n    relation.relationTitle1.trim(),\n    configApi.getConfig()\n  );\n\n  relation.relationTitle2 = common.sanitizeText(\n    relation.relationTitle2.trim(),\n    configApi.getConfig()\n  );\n\n  relations.push(relation);\n};\n\n/**\n * Adds an annotation to the specified class Annotations mark special properties of the given type\n * (like 'interface' or 'service')\n *\n * @param className The class name\n * @param annotation The name of the annotation without any brackets\n * @public\n */\nexport const addAnnotation = function (className, annotation) {\n  const validatedClassName = splitClassNameAndType(className).className;\n  classes[validatedClassName].annotations.push(annotation);\n};\n\n/**\n * Adds a member to the specified class\n *\n * @param className The class name\n * @param member The full name of the member. If the member is enclosed in <<brackets>> it is\n *   treated as an annotation If the member is ending with a closing bracket ) it is treated as a\n *   method Otherwise the member will be treated as a normal property\n * @public\n */\nexport const addMember = function (className, member) {\n  const validatedClassName = splitClassNameAndType(className).className;\n  const theClass = classes[validatedClassName];\n\n  if (typeof member === 'string') {\n    // Member can contain white spaces, we trim them out\n    const memberString = member.trim();\n\n    if (memberString.startsWith('<<') && memberString.endsWith('>>')) {\n      // Remove leading and trailing brackets\n      // theClass.annotations.push(memberString.substring(2, memberString.length - 2));\n      theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2)));\n    } else if (memberString.indexOf(')') > 0) {\n      theClass.methods.push(sanitizeText(memberString));\n    } else if (memberString) {\n      theClass.members.push(sanitizeText(memberString));\n    }\n  }\n};\n\nexport const addMembers = function (className, members) {\n  if (Array.isArray(members)) {\n    members.reverse();\n    members.forEach((member) => addMember(className, member));\n  }\n};\n\nexport const cleanupLabel = function (label) {\n  if (label.substring(0, 1) === ':') {\n    return common.sanitizeText(label.substr(1).trim(), configApi.getConfig());\n  } else {\n    return sanitizeText(label.trim());\n  }\n};\n\n/**\n * Called by parser when a special node is found, e.g. a clickable element.\n *\n * @param ids Comma separated list of ids\n * @param className Class to add\n */\nexport const setCssClass = function (ids, className) {\n  ids.split(',').forEach(function (_id) {\n    let id = _id;\n    if (_id[0].match(/\\d/)) id = MERMAID_DOM_ID_PREFIX + id;\n    if (typeof classes[id] !== 'undefined') {\n      classes[id].cssClasses.push(className);\n    }\n  });\n};\n\n/**\n * Called by parser when a tooltip is found, e.g. a clickable element.\n *\n * @param ids Comma separated list of ids\n * @param tooltip Tooltip to add\n */\nconst setTooltip = function (ids, tooltip) {\n  const config = configApi.getConfig();\n  ids.split(',').forEach(function (id) {\n    if (typeof tooltip !== 'undefined') {\n      classes[id].tooltip = common.sanitizeText(tooltip, config);\n    }\n  });\n};\n\n/**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n *\n * @param ids Comma separated list of ids\n * @param linkStr URL to create a link for\n * @param target Target of the link, _blank by default as originally defined in the svgDraw.js file\n */\nexport const setLink = function (ids, linkStr, target) {\n  const config = configApi.getConfig();\n  ids.split(',').forEach(function (_id) {\n    let id = _id;\n    if (_id[0].match(/\\d/)) id = MERMAID_DOM_ID_PREFIX + id;\n    if (typeof classes[id] !== 'undefined') {\n      classes[id].link = utils.formatUrl(linkStr, config);\n      if (config.securityLevel === 'sandbox') {\n        classes[id].linkTarget = '_top';\n      } else if (typeof target === 'string') {\n        classes[id].linkTarget = sanitizeText(target);\n      } else {\n        classes[id].linkTarget = '_blank';\n      }\n    }\n  });\n  setCssClass(ids, 'clickable');\n};\n\n/**\n * Called by parser when a click definition is found. Registers an event handler.\n *\n * @param ids Comma separated list of ids\n * @param functionName Function to be called on click\n * @param functionArgs Function args the function should be called with\n */\nexport const setClickEvent = function (ids, functionName, functionArgs) {\n  ids.split(',').forEach(function (id) {\n    setClickFunc(id, functionName, functionArgs);\n    classes[id].haveCallback = true;\n  });\n  setCssClass(ids, 'clickable');\n};\n\nconst setClickFunc = function (domId, functionName, functionArgs) {\n  const config = configApi.getConfig();\n  let id = domId;\n  let elemId = lookUpDomId(id);\n\n  if (config.securityLevel !== 'loose') {\n    return;\n  }\n  if (typeof functionName === 'undefined') {\n    return;\n  }\n  if (typeof classes[id] !== 'undefined') {\n    let argList = [];\n    if (typeof functionArgs === 'string') {\n      /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */\n      argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n      for (let i = 0; i < argList.length; i++) {\n        let item = argList[i].trim();\n        /* Removes all double quotes at the start and end of an argument */\n        /* This preserves all starting and ending whitespace inside */\n        if (item.charAt(0) === '\"' && item.charAt(item.length - 1) === '\"') {\n          item = item.substr(1, item.length - 2);\n        }\n        argList[i] = item;\n      }\n    }\n\n    /* if no arguments passed into callback, default to passing in id */\n    if (argList.length === 0) {\n      argList.push(elemId);\n    }\n\n    funs.push(function () {\n      const elem = document.querySelector(`[id=\"${elemId}\"]`);\n      if (elem !== null) {\n        elem.addEventListener(\n          'click',\n          function () {\n            utils.runFunc(functionName, ...argList);\n          },\n          false\n        );\n      }\n    });\n  }\n};\n\nexport const bindFunctions = function (element) {\n  funs.forEach(function (fun) {\n    fun(element);\n  });\n};\n\nexport const lineType = {\n  LINE: 0,\n  DOTTED_LINE: 1,\n};\n\nexport const relationType = {\n  AGGREGATION: 0,\n  EXTENSION: 1,\n  COMPOSITION: 2,\n  DEPENDENCY: 3,\n};\n\nconst setupToolTips = function (element) {\n  let tooltipElem = select('.mermaidTooltip');\n  if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n    tooltipElem = select('body').append('div').attr('class', 'mermaidTooltip').style('opacity', 0);\n  }\n\n  const svg = select(element).select('svg');\n\n  const nodes = svg.selectAll('g.node');\n  nodes\n    .on('mouseover', function () {\n      const el = select(this);\n      const title = el.attr('title');\n      // Dont try to draw a tooltip if no data is provided\n      if (title === null) {\n        return;\n      }\n      const rect = this.getBoundingClientRect();\n\n      tooltipElem.transition().duration(200).style('opacity', '.9');\n      tooltipElem\n        .text(el.attr('title'))\n        .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px')\n        .style('top', window.scrollY + rect.top - 14 + document.body.scrollTop + 'px');\n      el.classed('hover', true);\n    })\n    .on('mouseout', function () {\n      tooltipElem.transition().duration(500).style('opacity', 0);\n      const el = select(this);\n      el.classed('hover', false);\n    });\n};\nfuns.push(setupToolTips);\n\nlet direction = 'TB';\nconst getDirection = () => direction;\nconst setDirection = (dir) => {\n  direction = dir;\n};\n\nexport default {\n  parseDirective,\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  getConfig: () => configApi.getConfig().class,\n  addClass,\n  bindFunctions,\n  clear,\n  getClass,\n  getClasses,\n  addAnnotation,\n  getRelations,\n  addRelation,\n  getDirection,\n  setDirection,\n  addMember,\n  addMembers,\n  cleanupLabel,\n  lineType,\n  relationType,\n  setClickEvent,\n  setCssClass,\n  setLink,\n  setTooltip,\n  lookUpDomId,\n};\n","import { select } from 'd3';\nimport dagre from 'dagre';\nimport graphlib from 'graphlib';\nimport { log } from '../../logger';\nimport classDb, { lookUpDomId } from './classDb';\nimport { parser } from './parser/classDiagram';\nimport svgDraw from './svgDraw';\nimport { getConfig } from '../../config';\nimport { render } from '../../dagre-wrapper/index.js';\n// import addHtmlLabel from 'dagre-d3/lib/label/add-html-label.js';\nimport { curveLinear } from 'd3';\nimport { interpolateToCurve, getStylesFromArray, setupGraphViewbox } from '../../utils';\nimport common from '../common/common';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nparser.yy = classDb;\n\nlet idCache = {};\nconst padding = 20;\n\nconst sanitizeText = (txt) => common.sanitizeText(txt, getConfig());\n\nconst conf = {\n  dividerMargin: 10,\n  padding: 5,\n  textHeight: 10,\n};\n\n/**\n * Function that adds the vertices found during parsing to the graph to be rendered.\n *\n * @param {Object<\n *   string,\n *   { cssClasses: string[]; text: string; id: string; type: string; domId: string }\n * >} classes\n *   Object containing the vertices.\n * @param {SVGGElement} g The graph that is to be drawn.\n */\nexport const addClasses = function (classes, g) {\n  // const svg = select(`[id=\"${svgId}\"]`);\n  const keys = Object.keys(classes);\n  log.info('keys:', keys);\n  log.info(classes);\n\n  // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition\n  keys.forEach(function (id) {\n    const vertex = classes[id];\n\n    /**\n     * Variable for storing the classes for the vertex\n     *\n     * @type {string}\n     */\n    let cssClassStr = '';\n    if (vertex.cssClasses.length > 0) {\n      cssClassStr = cssClassStr + ' ' + vertex.cssClasses.join(' ');\n    }\n    // if (vertex.classes.length > 0) {\n    //   classStr = vertex.classes.join(' ');\n    // }\n\n    const styles = { labelStyle: '' }; //getStylesFromArray(vertex.styles);\n\n    // Use vertex id as text in the box if no text is provided by the graph definition\n    let vertexText = vertex.text !== undefined ? vertex.text : vertex.id;\n\n    // We create a SVG label, either by delegating to addHtmlLabel or manually\n    // let vertexNode;\n    // if (evaluate(getConfig().flowchart.htmlLabels)) {\n    //   const node = {\n    //     label: vertexText.replace(\n    //       /fa[lrsb]?:fa-[\\w-]+/g,\n    //       s => `<i class='${s.replace(':', ' ')}'></i>`\n    //     )\n    //   };\n    //   vertexNode = addHtmlLabel(svg, node).node();\n    //   vertexNode.parentNode.removeChild(vertexNode);\n    // } else {\n    //   const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n    //   svgLabel.setAttribute('style', styles.labelStyle.replace('color:', 'fill:'));\n\n    //   const rows = vertexText.split(common.lineBreakRegex);\n\n    //   for (let j = 0; j < rows.length; j++) {\n    //     const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n    //     tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n    //     tspan.setAttribute('dy', '1em');\n    //     tspan.setAttribute('x', '1');\n    //     tspan.textContent = rows[j];\n    //     svgLabel.appendChild(tspan);\n    //   }\n    //   vertexNode = svgLabel;\n    // }\n\n    let radious = 0;\n    let _shape = '';\n    // Set the shape based parameters\n    switch (vertex.type) {\n      case 'class':\n        _shape = 'class_box';\n        break;\n      default:\n        _shape = 'class_box';\n    }\n    // Add the node\n    g.setNode(vertex.id, {\n      labelStyle: styles.labelStyle,\n      shape: _shape,\n      labelText: sanitizeText(vertexText),\n      classData: vertex,\n      rx: radious,\n      ry: radious,\n      class: cssClassStr,\n      style: styles.style,\n      id: vertex.id,\n      domId: vertex.domId,\n      haveCallback: vertex.haveCallback,\n      link: vertex.link,\n      width: vertex.type === 'group' ? 500 : undefined,\n      type: vertex.type,\n      padding: getConfig().flowchart.padding,\n    });\n\n    log.info('setNode', {\n      labelStyle: styles.labelStyle,\n      shape: _shape,\n      labelText: vertexText,\n      rx: radious,\n      ry: radious,\n      class: cssClassStr,\n      style: styles.style,\n      id: vertex.id,\n      width: vertex.type === 'group' ? 500 : undefined,\n      type: vertex.type,\n      padding: getConfig().flowchart.padding,\n    });\n  });\n};\n\n/**\n * Add edges to graph based on parsed graph definition\n *\n * @param relations\n * @param {object} g The graph object\n */\nexport const addRelations = function (relations, g) {\n  let cnt = 0;\n\n  let defaultStyle;\n  let defaultLabelStyle;\n\n  // if (typeof relations.defaultStyle !== 'undefined') {\n  //   const defaultStyles = getStylesFromArray(relations.defaultStyle);\n  //   defaultStyle = defaultStyles.style;\n  //   defaultLabelStyle = defaultStyles.labelStyle;\n  // }\n\n  relations.forEach(function (edge) {\n    cnt++;\n    const edgeData = {};\n    //Set relationship style and line type\n    edgeData.classes = 'relation';\n    edgeData.pattern = edge.relation.lineType == 1 ? 'dashed' : 'solid';\n\n    edgeData.id = 'id' + cnt;\n    // Set link type for rendering\n    if (edge.type === 'arrow_open') {\n      edgeData.arrowhead = 'none';\n    } else {\n      edgeData.arrowhead = 'normal';\n    }\n\n    log.info(edgeData, edge);\n    //Set edge extra labels\n    //edgeData.startLabelLeft = edge.relationTitle1;\n    edgeData.startLabelRight = edge.relationTitle1 === 'none' ? '' : edge.relationTitle1;\n    edgeData.endLabelLeft = edge.relationTitle2 === 'none' ? '' : edge.relationTitle2;\n    //edgeData.endLabelRight = edge.relationTitle2;\n\n    //Set relation arrow types\n    edgeData.arrowTypeStart = getArrowMarker(edge.relation.type1);\n    edgeData.arrowTypeEnd = getArrowMarker(edge.relation.type2);\n    let style = '';\n    let labelStyle = '';\n\n    if (typeof edge.style !== 'undefined') {\n      const styles = getStylesFromArray(edge.style);\n      style = styles.style;\n      labelStyle = styles.labelStyle;\n    } else {\n      style = 'fill:none';\n      if (typeof defaultStyle !== 'undefined') {\n        style = defaultStyle;\n      }\n      if (typeof defaultLabelStyle !== 'undefined') {\n        labelStyle = defaultLabelStyle;\n      }\n    }\n\n    edgeData.style = style;\n    edgeData.labelStyle = labelStyle;\n\n    if (typeof edge.interpolate !== 'undefined') {\n      edgeData.curve = interpolateToCurve(edge.interpolate, curveLinear);\n    } else if (typeof relations.defaultInterpolate !== 'undefined') {\n      edgeData.curve = interpolateToCurve(relations.defaultInterpolate, curveLinear);\n    } else {\n      edgeData.curve = interpolateToCurve(conf.curve, curveLinear);\n    }\n\n    edge.text = edge.title;\n    if (typeof edge.text === 'undefined') {\n      if (typeof edge.style !== 'undefined') {\n        edgeData.arrowheadStyle = 'fill: #333';\n      }\n    } else {\n      edgeData.arrowheadStyle = 'fill: #333';\n      edgeData.labelpos = 'c';\n\n      if (getConfig().flowchart.htmlLabels) {\n        // eslint-disable-line\n        edgeData.labelType = 'html';\n        edgeData.label = '<span class=\"edgeLabel\">' + edge.text + '</span>';\n      } else {\n        edgeData.labelType = 'text';\n        edgeData.label = edge.text.replace(common.lineBreakRegex, '\\n');\n\n        if (typeof edge.style === 'undefined') {\n          edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none';\n        }\n\n        edgeData.labelStyle = edgeData.labelStyle.replace('color:', 'fill:');\n      }\n    }\n    // Add the edge to the graph\n    g.setEdge(edge.id1, edge.id2, edgeData, cnt);\n  });\n};\n\n/**\n * Gets the ID with the same label as in the cache\n *\n * @param {string} label The label to look for\n * @returns {string} The resulting ID\n */\nconst getGraphId = function (label) {\n  const foundEntry = Object.entries(idCache).find((entry) => entry[1].label === label);\n\n  if (foundEntry) {\n    return foundEntry[0];\n  }\n};\n\n/**\n * Merges the value of `conf` with the passed `cnf`\n *\n * @param {object} cnf Config to merge\n */\nexport const setConf = function (cnf) {\n  const keys = Object.keys(cnf);\n\n  keys.forEach(function (key) {\n    conf[key] = cnf[key];\n  });\n};\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n *\n * @param {string} text\n * @param {string} id\n */\nexport const draw = function (text, id) {\n  log.info('Drawing class - ', id);\n  classDb.clear();\n  // const parser = classDb.parser;\n  // parser.yy = classDb;\n\n  // Parse the graph definition\n  // try {\n  parser.parse(text);\n  // } catch (err) {\n  // log.debug('Parsing failed');\n  // }\n\n  // Fetch the default direction, use TD if none was found\n  //let dir = 'TD';\n\n  const conf = getConfig().flowchart;\n  const securityLevel = getConfig().securityLevel;\n  log.info('config:', conf);\n  const nodeSpacing = conf.nodeSpacing || 50;\n  const rankSpacing = conf.rankSpacing || 50;\n\n  // Create the input mermaid.graph\n  const g = new graphlib.Graph({\n    multigraph: true,\n    compound: true,\n  })\n    .setGraph({\n      rankdir: classDb.getDirection(),\n      nodesep: nodeSpacing,\n      ranksep: rankSpacing,\n      marginx: 8,\n      marginy: 8,\n    })\n    .setDefaultEdgeLabel(function () {\n      return {};\n    });\n\n  // let subG;\n  // const subGraphs = flowDb.getSubGraphs();\n  // log.info('Subgraphs - ', subGraphs);\n  // for (let i = subGraphs.length - 1; i >= 0; i--) {\n  //   subG = subGraphs[i];\n  //   log.info('Subgraph - ', subG);\n  //   flowDb.addVertex(subG.id, subG.title, 'group', undefined, subG.classes);\n  // }\n\n  // Fetch the vertices/nodes and edges/links from the parsed graph definition\n  const classes = classDb.getClasses();\n  const relations = classDb.getRelations();\n\n  log.info(relations);\n  addClasses(classes, g, id);\n  addRelations(relations, g);\n\n  // Add custom shapes\n  // flowChartShapes.addToRenderV2(addShape);\n\n  // Set up an SVG group so that we can translate the final graph.\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const svg = root.select(`[id=\"${id}\"]`);\n  svg.attr('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n  // Run the renderer. This is what draws the final graph.\n  const element = root.select('#' + id + ' g');\n  render(element, g, ['aggregation', 'extension', 'composition', 'dependency'], 'classDiagram', id);\n\n  setupGraphViewbox(g, svg, conf.diagramPadding, conf.useMaxWidth);\n\n  // Add label rects for non html labels\n  if (!conf.htmlLabels) {\n    const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n    const labels = doc.querySelectorAll('[id=\"' + id + '\"] .edgeLabel .label');\n    for (let k = 0; k < labels.length; k++) {\n      const label = labels[k];\n\n      // Get dimensions of label\n      const dim = label.getBBox();\n\n      const rect = doc.createElementNS('http://www.w3.org/2000/svg', 'rect');\n      rect.setAttribute('rx', 0);\n      rect.setAttribute('ry', 0);\n      rect.setAttribute('width', dim.width);\n      rect.setAttribute('height', dim.height);\n      // rect.setAttribute('style', 'fill:#e8e8e8;');\n\n      label.insertBefore(rect, label.firstChild);\n    }\n  }\n\n  addSVGAccessibilityFields(parser.yy, svg, id);\n  // If node has a link, wrap it in an anchor SVG object.\n  // const keys = Object.keys(classes);\n  // keys.forEach(function(key) {\n  //   const vertex = classes[key];\n\n  //   if (vertex.link) {\n  //     const node = select('#' + id + ' [id=\"' + key + '\"]');\n  //     if (node) {\n  //       const link = document.createElementNS('http://www.w3.org/2000/svg', 'a');\n  //       link.setAttributeNS('http://www.w3.org/2000/svg', 'class', vertex.classes.join(' '));\n  //       link.setAttributeNS('http://www.w3.org/2000/svg', 'href', vertex.link);\n  //       link.setAttributeNS('http://www.w3.org/2000/svg', 'rel', 'noopener');\n\n  //       const linkNode = node.insert(function() {\n  //         return link;\n  //       }, ':first-child');\n\n  //       const shape = node.select('.label-container');\n  //       if (shape) {\n  //         linkNode.append(function() {\n  //           return shape.node();\n  //         });\n  //       }\n\n  //       const label = node.select('.label');\n  //       if (label) {\n  //         linkNode.append(function() {\n  //           return label.node();\n  //         });\n  //       }\n  //     }\n  //   }\n  // });\n};\n\n/**\n * Gets the arrow marker for a type index\n *\n * @param {number} type The type to look for\n * @returns {'aggregation' | 'extension' | 'composition' | 'dependency'} The arrow marker\n */\nfunction getArrowMarker(type) {\n  let marker;\n  switch (type) {\n    case 0:\n      marker = 'aggregation';\n      break;\n    case 1:\n      marker = 'extension';\n      break;\n    case 2:\n      marker = 'composition';\n      break;\n    case 3:\n      marker = 'dependency';\n      break;\n    default:\n      marker = 'none';\n  }\n  return marker;\n}\n\nexport default {\n  setConf,\n  draw,\n};\n","import { select } from 'd3';\nimport dagre from 'dagre';\nimport graphlib from 'graphlib';\nimport { log } from '../../logger';\nimport classDb, { lookUpDomId } from './classDb';\nimport { parser } from './parser/classDiagram';\nimport svgDraw from './svgDraw';\nimport { configureSvgSize } from '../../utils';\nimport { getConfig } from '../../config';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nparser.yy = classDb;\n\nlet idCache = {};\nconst padding = 20;\n\nconst conf = {\n  dividerMargin: 10,\n  padding: 5,\n  textHeight: 10,\n};\n\n/**\n * Gets the ID with the same label as in the cache\n *\n * @param {string} label The label to look for\n * @returns {string} The resulting ID\n */\nconst getGraphId = function (label) {\n  const foundEntry = Object.entries(idCache).find((entry) => entry[1].label === label);\n\n  if (foundEntry) {\n    return foundEntry[0];\n  }\n};\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param {SVGSVGElement} elem The SVG element to append to\n */\nconst insertMarkers = function (elem) {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'extensionStart')\n    .attr('class', 'extension')\n    .attr('refX', 0)\n    .attr('refY', 7)\n    .attr('markerWidth', 190)\n    .attr('markerHeight', 240)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 1,7 L18,13 V 1 Z');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'extensionEnd')\n    .attr('refX', 19)\n    .attr('refY', 7)\n    .attr('markerWidth', 20)\n    .attr('markerHeight', 28)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 1,1 V 13 L18,7 Z'); // this is actual shape for arrowhead\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'compositionStart')\n    .attr('class', 'extension')\n    .attr('refX', 0)\n    .attr('refY', 7)\n    .attr('markerWidth', 190)\n    .attr('markerHeight', 240)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'compositionEnd')\n    .attr('refX', 19)\n    .attr('refY', 7)\n    .attr('markerWidth', 20)\n    .attr('markerHeight', 28)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'aggregationStart')\n    .attr('class', 'extension')\n    .attr('refX', 0)\n    .attr('refY', 7)\n    .attr('markerWidth', 190)\n    .attr('markerHeight', 240)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'aggregationEnd')\n    .attr('refX', 19)\n    .attr('refY', 7)\n    .attr('markerWidth', 20)\n    .attr('markerHeight', 28)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'dependencyStart')\n    .attr('class', 'extension')\n    .attr('refX', 0)\n    .attr('refY', 7)\n    .attr('markerWidth', 190)\n    .attr('markerHeight', 240)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'dependencyEnd')\n    .attr('refX', 19)\n    .attr('refY', 7)\n    .attr('markerWidth', 20)\n    .attr('markerHeight', 28)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z');\n};\n\n/**\n * Merges the value of `conf` with the passed `cnf`\n *\n * @param {object} cnf Config to merge\n */\nexport const setConf = function (cnf) {\n  const keys = Object.keys(cnf);\n\n  keys.forEach(function (key) {\n    conf[key] = cnf[key];\n  });\n};\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n *\n * @param {string} text\n * @param {string} id\n */\nexport const draw = function (text, id) {\n  idCache = {};\n  parser.yy.clear();\n  parser.parse(text);\n\n  log.info('Rendering diagram ' + text);\n\n  const securityLevel = getConfig().securityLevel;\n  // Handle root and Document for when rendering in sanbox mode\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  // Fetch the default direction, use TD if none was found\n  const diagram = root.select(`[id='${id}']`);\n  diagram.attr('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n  insertMarkers(diagram);\n\n  // Layout graph, Create a new directed graph\n  const g = new graphlib.Graph({\n    multigraph: true,\n  });\n\n  // Set an object for the graph label\n  g.setGraph({\n    isMultiGraph: true,\n  });\n\n  // Default to assigning a new object as a label for each new edge.\n  g.setDefaultEdgeLabel(function () {\n    return {};\n  });\n\n  const classes = classDb.getClasses();\n  const keys = Object.keys(classes);\n\n  for (let i = 0; i < keys.length; i++) {\n    const classDef = classes[keys[i]];\n    const node = svgDraw.drawClass(diagram, classDef, conf);\n    idCache[node.id] = node;\n\n    // Add nodes to the graph. The first argument is the node id. The second is\n    // metadata about the node. In this case we're going to add labels to each of\n    // our nodes.\n    g.setNode(node.id, node);\n\n    log.info('Org height: ' + node.height);\n  }\n\n  const relations = classDb.getRelations();\n  relations.forEach(function (relation) {\n    log.info(\n      'tjoho' + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation)\n    );\n    g.setEdge(\n      getGraphId(relation.id1),\n      getGraphId(relation.id2),\n      {\n        relation: relation,\n      },\n      relation.title || 'DEFAULT'\n    );\n  });\n\n  dagre.layout(g);\n  g.nodes().forEach(function (v) {\n    if (typeof v !== 'undefined' && typeof g.node(v) !== 'undefined') {\n      log.debug('Node ' + v + ': ' + JSON.stringify(g.node(v)));\n      root\n        .select('#' + lookUpDomId(v))\n        .attr(\n          'transform',\n          'translate(' +\n            (g.node(v).x - g.node(v).width / 2) +\n            ',' +\n            (g.node(v).y - g.node(v).height / 2) +\n            ' )'\n        );\n    }\n  });\n\n  g.edges().forEach(function (e) {\n    if (typeof e !== 'undefined' && typeof g.edge(e) !== 'undefined') {\n      log.debug('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(g.edge(e)));\n      svgDraw.drawEdge(diagram, g.edge(e), g.edge(e).relation, conf);\n    }\n  });\n\n  const svgBounds = diagram.node().getBBox();\n  const width = svgBounds.width + padding * 2;\n  const height = svgBounds.height + padding * 2;\n\n  configureSvgSize(diagram, height, width, conf.useMaxWidth);\n\n  // Ensure the viewBox includes the whole svgBounds area with extra space for padding\n  const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`;\n  log.debug(`viewBox ${vBox}`);\n  diagram.attr('viewBox', vBox);\n  addSVGAccessibilityFields(parser.yy, diagram, id);\n};\n\nexport default {\n  setConf,\n  draw,\n};\n","const getStyles = (options) =>\n  `g.classGroup text {\n  fill: ${options.nodeBorder};\n  fill: ${options.classText};\n  stroke: none;\n  font-family: ${options.fontFamily};\n  font-size: 10px;\n\n  .title {\n    font-weight: bolder;\n  }\n\n}\n\n.nodeLabel, .edgeLabel {\n  color: ${options.classText};\n}\n.edgeLabel .label rect {\n  fill: ${options.mainBkg};\n}\n.label text {\n  fill: ${options.classText};\n}\n.edgeLabel .label span {\n  background: ${options.mainBkg};\n}\n\n.classTitle {\n  font-weight: bolder;\n}\n.node rect,\n  .node circle,\n  .node ellipse,\n  .node polygon,\n  .node path {\n    fill: ${options.mainBkg};\n    stroke: ${options.nodeBorder};\n    stroke-width: 1px;\n  }\n\n\n.divider {\n  stroke: ${options.nodeBorder};\n  stroke: 1;\n}\n\ng.clickable {\n  cursor: pointer;\n}\n\ng.classGroup rect {\n  fill: ${options.mainBkg};\n  stroke: ${options.nodeBorder};\n}\n\ng.classGroup line {\n  stroke: ${options.nodeBorder};\n  stroke-width: 1;\n}\n\n.classLabel .box {\n  stroke: none;\n  stroke-width: 0;\n  fill: ${options.mainBkg};\n  opacity: 0.5;\n}\n\n.classLabel .label {\n  fill: ${options.nodeBorder};\n  font-size: 10px;\n}\n\n.relation {\n  stroke: ${options.lineColor};\n  stroke-width: 1;\n  fill: none;\n}\n\n.dashed-line{\n  stroke-dasharray: 3;\n}\n\n#compositionStart, .composition {\n  fill: ${options.lineColor} !important;\n  stroke: ${options.lineColor} !important;\n  stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n  fill: ${options.lineColor} !important;\n  stroke: ${options.lineColor} !important;\n  stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n  fill: ${options.lineColor} !important;\n  stroke: ${options.lineColor} !important;\n  stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n  fill: ${options.lineColor} !important;\n  stroke: ${options.lineColor} !important;\n  stroke-width: 1;\n}\n\n#extensionStart, .extension {\n  fill: ${options.lineColor} !important;\n  stroke: ${options.lineColor} !important;\n  stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n  fill: ${options.lineColor} !important;\n  stroke: ${options.lineColor} !important;\n  stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n  fill: ${options.mainBkg} !important;\n  stroke: ${options.lineColor} !important;\n  stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n  fill: ${options.mainBkg} !important;\n  stroke: ${options.lineColor} !important;\n  stroke-width: 1;\n}\n\n.edgeTerminals {\n  font-size: 11px;\n}\n\n`;\n\nexport default getStyles;\n","import { line, curveBasis } from 'd3';\nimport { lookUpDomId, relationType } from './classDb';\nimport utils from '../../utils';\nimport { log } from '../../logger';\n\nlet edgeCount = 0;\nexport const drawEdge = function (elem, path, relation, conf) {\n  const getRelationType = function (type) {\n    switch (type) {\n      case relationType.AGGREGATION:\n        return 'aggregation';\n      case relationType.EXTENSION:\n        return 'extension';\n      case relationType.COMPOSITION:\n        return 'composition';\n      case relationType.DEPENDENCY:\n        return 'dependency';\n    }\n  };\n\n  path.points = path.points.filter((p) => !Number.isNaN(p.y));\n\n  // The data for our line\n  const lineData = path.points;\n\n  // This is the accessor function we talked about above\n  const lineFunction = line()\n    .x(function (d) {\n      return d.x;\n    })\n    .y(function (d) {\n      return d.y;\n    })\n    .curve(curveBasis);\n\n  const svgPath = elem\n    .append('path')\n    .attr('d', lineFunction(lineData))\n    .attr('id', 'edge' + edgeCount)\n    .attr('class', 'relation');\n  let url = '';\n  if (conf.arrowMarkerAbsolute) {\n    url =\n      window.location.protocol +\n      '//' +\n      window.location.host +\n      window.location.pathname +\n      window.location.search;\n    url = url.replace(/\\(/g, '\\\\(');\n    url = url.replace(/\\)/g, '\\\\)');\n  }\n\n  if (relation.relation.lineType == 1) {\n    svgPath.attr('class', 'relation dashed-line');\n  }\n  if (relation.relation.type1 !== 'none') {\n    svgPath.attr(\n      'marker-start',\n      'url(' + url + '#' + getRelationType(relation.relation.type1) + 'Start' + ')'\n    );\n  }\n  if (relation.relation.type2 !== 'none') {\n    svgPath.attr(\n      'marker-end',\n      'url(' + url + '#' + getRelationType(relation.relation.type2) + 'End' + ')'\n    );\n  }\n\n  let x, y;\n  const l = path.points.length;\n  // Calculate Label position\n  let labelPosition = utils.calcLabelPosition(path.points);\n  x = labelPosition.x;\n  y = labelPosition.y;\n\n  let p1_card_x, p1_card_y;\n  let p2_card_x, p2_card_y;\n\n  if (l % 2 !== 0 && l > 1) {\n    let cardinality_1_point = utils.calcCardinalityPosition(\n      relation.relation.type1 !== 'none',\n      path.points,\n      path.points[0]\n    );\n    let cardinality_2_point = utils.calcCardinalityPosition(\n      relation.relation.type2 !== 'none',\n      path.points,\n      path.points[l - 1]\n    );\n\n    log.debug('cardinality_1_point ' + JSON.stringify(cardinality_1_point));\n    log.debug('cardinality_2_point ' + JSON.stringify(cardinality_2_point));\n\n    p1_card_x = cardinality_1_point.x;\n    p1_card_y = cardinality_1_point.y;\n    p2_card_x = cardinality_2_point.x;\n    p2_card_y = cardinality_2_point.y;\n  }\n\n  if (typeof relation.title !== 'undefined') {\n    const g = elem.append('g').attr('class', 'classLabel');\n    const label = g\n      .append('text')\n      .attr('class', 'label')\n      .attr('x', x)\n      .attr('y', y)\n      .attr('fill', 'red')\n      .attr('text-anchor', 'middle')\n      .text(relation.title);\n\n    window.label = label;\n    const bounds = label.node().getBBox();\n\n    g.insert('rect', ':first-child')\n      .attr('class', 'box')\n      .attr('x', bounds.x - conf.padding / 2)\n      .attr('y', bounds.y - conf.padding / 2)\n      .attr('width', bounds.width + conf.padding)\n      .attr('height', bounds.height + conf.padding);\n  }\n\n  log.info('Rendering relation ' + JSON.stringify(relation));\n  if (typeof relation.relationTitle1 !== 'undefined' && relation.relationTitle1 !== 'none') {\n    const g = elem.append('g').attr('class', 'cardinality');\n    g.append('text')\n      .attr('class', 'type1')\n      .attr('x', p1_card_x)\n      .attr('y', p1_card_y)\n      .attr('fill', 'black')\n      .attr('font-size', '6')\n      .text(relation.relationTitle1);\n  }\n  if (typeof relation.relationTitle2 !== 'undefined' && relation.relationTitle2 !== 'none') {\n    const g = elem.append('g').attr('class', 'cardinality');\n    g.append('text')\n      .attr('class', 'type2')\n      .attr('x', p2_card_x)\n      .attr('y', p2_card_y)\n      .attr('fill', 'black')\n      .attr('font-size', '6')\n      .text(relation.relationTitle2);\n  }\n\n  edgeCount++;\n};\n\n/**\n * Renders a class diagram\n *\n * @param {SVGSVGElement} elem The element to draw it into\n * @param classDef\n * @param conf\n * @todo Add more information in the JSDOC here\n */\nexport const drawClass = function (elem, classDef, conf) {\n  log.info('Rendering class ' + classDef);\n\n  const id = classDef.id;\n  const classInfo = {\n    id: id,\n    label: classDef.id,\n    width: 0,\n    height: 0,\n  };\n\n  // add class group\n  const g = elem.append('g').attr('id', lookUpDomId(id)).attr('class', 'classGroup');\n\n  // add title\n  let title;\n  if (classDef.link) {\n    title = g\n      .append('svg:a')\n      .attr('xlink:href', classDef.link)\n      .attr('target', classDef.linkTarget)\n      .append('text')\n      .attr('y', conf.textHeight + conf.padding)\n      .attr('x', 0);\n  } else {\n    title = g\n      .append('text')\n      .attr('y', conf.textHeight + conf.padding)\n      .attr('x', 0);\n  }\n\n  // add annotations\n  let isFirst = true;\n  classDef.annotations.forEach(function (member) {\n    const titleText2 = title.append('tspan').text('«' + member + '»');\n    if (!isFirst) titleText2.attr('dy', conf.textHeight);\n    isFirst = false;\n  });\n\n  let classTitleString = classDef.id;\n\n  if (classDef.type !== undefined && classDef.type !== '') {\n    classTitleString += '<' + classDef.type + '>';\n  }\n\n  const classTitle = title.append('tspan').text(classTitleString).attr('class', 'title');\n\n  // If class has annotations the title needs to have an offset of the text height\n  if (!isFirst) classTitle.attr('dy', conf.textHeight);\n\n  const titleHeight = title.node().getBBox().height;\n\n  const membersLine = g\n    .append('line') // text label for the x axis\n    .attr('x1', 0)\n    .attr('y1', conf.padding + titleHeight + conf.dividerMargin / 2)\n    .attr('y2', conf.padding + titleHeight + conf.dividerMargin / 2);\n\n  const members = g\n    .append('text') // text label for the x axis\n    .attr('x', conf.padding)\n    .attr('y', titleHeight + conf.dividerMargin + conf.textHeight)\n    .attr('fill', 'white')\n    .attr('class', 'classText');\n\n  isFirst = true;\n  classDef.members.forEach(function (member) {\n    addTspan(members, member, isFirst, conf);\n    isFirst = false;\n  });\n\n  const membersBox = members.node().getBBox();\n\n  const methodsLine = g\n    .append('line') // text label for the x axis\n    .attr('x1', 0)\n    .attr('y1', conf.padding + titleHeight + conf.dividerMargin + membersBox.height)\n    .attr('y2', conf.padding + titleHeight + conf.dividerMargin + membersBox.height);\n\n  const methods = g\n    .append('text') // text label for the x axis\n    .attr('x', conf.padding)\n    .attr('y', titleHeight + 2 * conf.dividerMargin + membersBox.height + conf.textHeight)\n    .attr('fill', 'white')\n    .attr('class', 'classText');\n\n  isFirst = true;\n\n  classDef.methods.forEach(function (method) {\n    addTspan(methods, method, isFirst, conf);\n    isFirst = false;\n  });\n\n  const classBox = g.node().getBBox();\n  var cssClassStr = ' ';\n\n  if (classDef.cssClasses.length > 0) {\n    cssClassStr = cssClassStr + classDef.cssClasses.join(' ');\n  }\n\n  const rect = g\n    .insert('rect', ':first-child')\n    .attr('x', 0)\n    .attr('y', 0)\n    .attr('width', classBox.width + 2 * conf.padding)\n    .attr('height', classBox.height + conf.padding + 0.5 * conf.dividerMargin)\n    .attr('class', cssClassStr);\n\n  const rectWidth = rect.node().getBBox().width;\n\n  // Center title\n  // We subtract the width of each text element from the class box width and divide it by 2\n  title.node().childNodes.forEach(function (x) {\n    x.setAttribute('x', (rectWidth - x.getBBox().width) / 2);\n  });\n\n  if (classDef.tooltip) {\n    title.insert('title').text(classDef.tooltip);\n  }\n\n  membersLine.attr('x2', rectWidth);\n  methodsLine.attr('x2', rectWidth);\n\n  classInfo.width = rectWidth;\n  classInfo.height = classBox.height + conf.padding + 0.5 * conf.dividerMargin;\n\n  return classInfo;\n};\n\nexport const parseMember = function (text) {\n  const fieldRegEx = /^(\\+|-|~|#)?(\\w+)(~\\w+~|\\[\\])?\\s+(\\w+) *(\\*|\\$)?$/;\n  const methodRegEx = /^([+|\\-|~|#])?(\\w+) *\\( *(.*)\\) *(\\*|\\$)? *(\\w*[~|[\\]]*\\s*\\w*~?)$/;\n\n  let fieldMatch = text.match(fieldRegEx);\n  let methodMatch = text.match(methodRegEx);\n\n  if (fieldMatch && !methodMatch) {\n    return buildFieldDisplay(fieldMatch);\n  } else if (methodMatch) {\n    return buildMethodDisplay(methodMatch);\n  } else {\n    return buildLegacyDisplay(text);\n  }\n};\n\nconst buildFieldDisplay = function (parsedText) {\n  let cssStyle = '';\n  let displayText = '';\n\n  try {\n    let visibility = parsedText[1] ? parsedText[1].trim() : '';\n    let fieldType = parsedText[2] ? parsedText[2].trim() : '';\n    let genericType = parsedText[3] ? parseGenericTypes(parsedText[3].trim()) : '';\n    let fieldName = parsedText[4] ? parsedText[4].trim() : '';\n    let classifier = parsedText[5] ? parsedText[5].trim() : '';\n\n    displayText = visibility + fieldType + genericType + ' ' + fieldName;\n    cssStyle = parseClassifier(classifier);\n  } catch (err) {\n    displayText = parsedText;\n  }\n\n  return {\n    displayText: displayText,\n    cssStyle: cssStyle,\n  };\n};\n\nconst buildMethodDisplay = function (parsedText) {\n  let cssStyle = '';\n  let displayText = '';\n\n  try {\n    let visibility = parsedText[1] ? parsedText[1].trim() : '';\n    let methodName = parsedText[2] ? parsedText[2].trim() : '';\n    let parameters = parsedText[3] ? parseGenericTypes(parsedText[3].trim()) : '';\n    let classifier = parsedText[4] ? parsedText[4].trim() : '';\n    let returnType = parsedText[5] ? ' : ' + parseGenericTypes(parsedText[5]).trim() : '';\n\n    displayText = visibility + methodName + '(' + parameters + ')' + returnType;\n    cssStyle = parseClassifier(classifier);\n  } catch (err) {\n    displayText = parsedText;\n  }\n\n  return {\n    displayText: displayText,\n    cssStyle: cssStyle,\n  };\n};\n\nconst buildLegacyDisplay = function (text) {\n  // if for some reason we dont have any match, use old format to parse text\n  let displayText = '';\n  let cssStyle = '';\n  let memberText = '';\n  let returnType = '';\n  let methodStart = text.indexOf('(');\n  let methodEnd = text.indexOf(')');\n\n  if (methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length) {\n    let visibility = '';\n    let methodName = '';\n\n    let firstChar = text.substring(0, 1);\n    if (firstChar.match(/\\w/)) {\n      methodName = text.substring(0, methodStart).trim();\n    } else {\n      if (firstChar.match(/\\+|-|~|#/)) {\n        visibility = firstChar;\n      }\n\n      methodName = text.substring(1, methodStart).trim();\n    }\n\n    let parameters = text.substring(methodStart + 1, methodEnd);\n    let classifier = text.substring(methodEnd + 1, 1);\n    cssStyle = parseClassifier(classifier);\n\n    displayText = visibility + methodName + '(' + parseGenericTypes(parameters.trim()) + ')';\n\n    if (methodEnd < memberText.length) {\n      returnType = text.substring(methodEnd + 2).trim();\n      if (returnType !== '') {\n        returnType = ' : ' + parseGenericTypes(returnType);\n      }\n    }\n  } else {\n    // finally - if all else fails, just send the text back as written (other than parsing for generic types)\n    displayText = parseGenericTypes(text);\n  }\n\n  return {\n    displayText: displayText,\n    cssStyle: cssStyle,\n  };\n};\n\n/**\n * Adds a <tspan> for a member in a diagram\n *\n * @param {SVGElement} textEl The element to append to\n * @param {string} txt The member\n * @param {boolean} isFirst\n * @param {{ padding: string; textHeight: string }} conf The configuration for the member\n */\nconst addTspan = function (textEl, txt, isFirst, conf) {\n  let member = parseMember(txt);\n\n  const tSpan = textEl.append('tspan').attr('x', conf.padding).text(member.displayText);\n\n  if (member.cssStyle !== '') {\n    tSpan.attr('style', member.cssStyle);\n  }\n\n  if (!isFirst) {\n    tSpan.attr('dy', conf.textHeight);\n  }\n};\n\n/**\n * Makes generics in typescript syntax\n *\n * @example <caption>Array of array of strings in typescript syntax</caption>\n *   // returns \"Array<Array<string>>\"\n *   parseGenericTypes('Array~Array~string~~');\n *\n * @param {string} text The text to convert\n * @returns {string} The converted string\n */\nconst parseGenericTypes = function (text) {\n  let cleanedText = text;\n\n  if (text.indexOf('~') != -1) {\n    cleanedText = cleanedText.replace('~', '<');\n    cleanedText = cleanedText.replace('~', '>');\n\n    return parseGenericTypes(cleanedText);\n  } else {\n    return cleanedText;\n  }\n};\n\n/**\n * Gives the styles for a classifier\n *\n * @param {'+' | '-' | '#' | '~' | '*' | '$'} classifier The classifier string\n * @returns {string} Styling for the classifier\n */\nconst parseClassifier = function (classifier) {\n  switch (classifier) {\n    case '*':\n      return 'font-style:italic;';\n    case '$':\n      return 'text-decoration:underline;';\n    default:\n      return '';\n  }\n};\n\nexport default {\n  drawClass,\n  drawEdge,\n  parseMember,\n};\n","import DOMPurify from 'dompurify';\n\n/**\n * Gets the number of lines in a string\n *\n * @param {string | undefined} s The string to check the lines for\n * @returns {number} The number of lines in that string\n */\nexport const getRows = (s) => {\n  if (!s) return 1;\n  let str = breakToPlaceholder(s);\n  str = str.replace(/\\\\n/g, '#br#');\n  return str.split('#br#');\n};\n\nexport const removeEscapes = (text) => {\n  let newStr = text.replace(/\\\\u[\\dA-F]{4}/gi, function (match) {\n    return String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16));\n  });\n\n  newStr = newStr.replace(/\\\\x([0-9a-f]{2})/gi, (_, c) => String.fromCharCode(parseInt(c, 16)));\n  newStr = newStr.replace(/\\\\[\\d\\d\\d]{3}/gi, function (match) {\n    return String.fromCharCode(parseInt(match.replace(/\\\\/g, ''), 8));\n  });\n  newStr = newStr.replace(/\\\\[\\d\\d\\d]{2}/gi, function (match) {\n    return String.fromCharCode(parseInt(match.replace(/\\\\/g, ''), 8));\n  });\n\n  return newStr;\n};\n\n/**\n * Removes script tags from a text\n *\n * @param {string} txt The text to sanitize\n * @returns {string} The safer text\n */\nexport const removeScript = (txt) => {\n  var rs = '';\n  var idx = 0;\n\n  while (idx >= 0) {\n    idx = txt.indexOf('<script');\n    if (idx >= 0) {\n      rs += txt.substr(0, idx);\n      txt = txt.substr(idx + 1);\n\n      idx = txt.indexOf('</script>');\n      if (idx >= 0) {\n        idx += 9;\n        txt = txt.substr(idx);\n      }\n    } else {\n      rs += txt;\n      idx = -1;\n      break;\n    }\n  }\n  let decodedText = removeEscapes(rs);\n  decodedText = decodedText.replaceAll(/script>/gi, '#');\n  decodedText = decodedText.replaceAll(/javascript:/gi, '#');\n  decodedText = decodedText.replaceAll(/javascript&colon/gi, '#');\n  decodedText = decodedText.replaceAll(/onerror=/gi, 'onerror:');\n  decodedText = decodedText.replaceAll(/<iframe/gi, '');\n  return decodedText;\n};\n\nconst sanitizeMore = (text, config) => {\n  let txt = text;\n  let htmlLabels = true;\n  if (\n    config.flowchart &&\n    (config.flowchart.htmlLabels === false || config.flowchart.htmlLabels === 'false')\n  ) {\n    htmlLabels = false;\n  }\n\n  if (htmlLabels) {\n    const level = config.securityLevel;\n\n    if (level === 'antiscript' || level === 'strict') {\n      txt = removeScript(txt);\n    } else if (level !== 'loose') {\n      // eslint-disable-line\n      txt = breakToPlaceholder(txt);\n      txt = txt.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n      txt = txt.replace(/=/g, '&equals;');\n      txt = placeholderToBreak(txt);\n    }\n  }\n\n  return txt;\n};\n\nexport const sanitizeText = (text, config) => {\n  if (!text) return text;\n  let txt = '';\n  if (config['dompurifyConfig']) {\n    txt = DOMPurify.sanitize(sanitizeMore(text, config), config['dompurifyConfig']);\n  } else {\n    txt = DOMPurify.sanitize(sanitizeMore(text, config));\n  }\n  return txt;\n};\n\nexport const sanitizeTextOrArray = (a, config) => {\n  if (typeof a === 'string') return sanitizeText(a, config);\n\n  const f = (x) => sanitizeText(x, config);\n  return a.flat().map(f);\n};\n\nexport const lineBreakRegex = /<br\\s*\\/?>/gi;\n\n/**\n * Whether or not a text has any linebreaks\n *\n * @param {string} text The text to test\n * @returns {boolean} Whether or not the text has breaks\n */\nexport const hasBreaks = (text) => {\n  return lineBreakRegex.test(text);\n};\n\n/**\n * Splits on <br> tags\n *\n * @param {string} text Text to split\n * @returns {string[]} List of lines as strings\n */\nexport const splitBreaks = (text) => {\n  return text.split(lineBreakRegex);\n};\n\n/**\n * Converts placeholders to linebreaks in HTML\n *\n * @param {string} s HTML with placeholders\n * @returns {string} HTML with breaks instead of placeholders\n */\nconst placeholderToBreak = (s) => {\n  return s.replace(/#br#/g, '<br/>');\n};\n\n/**\n * Opposite of `placeholderToBreak`, converts breaks to placeholders\n *\n * @param {string} s HTML string\n * @returns {string} String with placeholders\n */\nconst breakToPlaceholder = (s) => {\n  return s.replace(lineBreakRegex, '#br#');\n};\n\n/**\n * Gets the current URL\n *\n * @param {boolean} useAbsolute Whether to return the absolute URL or not\n * @returns {string} The current URL\n */\nconst getUrl = (useAbsolute) => {\n  let url = '';\n  if (useAbsolute) {\n    url =\n      window.location.protocol +\n      '//' +\n      window.location.host +\n      window.location.pathname +\n      window.location.search;\n    url = url.replace(/\\(/g, '\\\\(');\n    url = url.replace(/\\)/g, '\\\\)');\n  }\n\n  return url;\n};\n\n/**\n * Converts a string/boolean into a boolean\n *\n * @param {string | boolean} val String or boolean to convert\n * @returns {boolean} The result from the input\n */\nexport const evaluate = (val) => (val === 'false' || val === false ? false : true);\n\nexport default {\n  getRows,\n  sanitizeText,\n  sanitizeTextOrArray,\n  hasBreaks,\n  splitBreaks,\n  lineBreakRegex,\n  removeScript,\n  getUrl,\n  evaluate,\n  removeEscapes,\n};\n","import { log } from '../../logger';\nimport mermaidAPI from '../../mermaidAPI';\nimport * as configApi from '../../config';\nimport common from '../common/common';\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n} from '../../commonDb';\n\nlet entities = {};\nlet relationships = [];\nlet title = '';\nlet description = '';\n\nconst Cardinality = {\n  ZERO_OR_ONE: 'ZERO_OR_ONE',\n  ZERO_OR_MORE: 'ZERO_OR_MORE',\n  ONE_OR_MORE: 'ONE_OR_MORE',\n  ONLY_ONE: 'ONLY_ONE',\n};\n\nconst Identification = {\n  NON_IDENTIFYING: 'NON_IDENTIFYING',\n  IDENTIFYING: 'IDENTIFYING',\n};\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\nconst addEntity = function (name) {\n  if (typeof entities[name] === 'undefined') {\n    entities[name] = { attributes: [] };\n    log.info('Added new entity :', name);\n  }\n\n  return entities[name];\n};\n\nconst getEntities = () => entities;\n\nconst addAttributes = function (entityName, attribs) {\n  let entity = addEntity(entityName); // May do nothing (if entity has already been added)\n\n  // Process attribs in reverse order due to effect of recursive construction (last attribute is first)\n  let i;\n  for (i = attribs.length - 1; i >= 0; i--) {\n    entity.attributes.push(attribs[i]);\n    log.debug('Added attribute ', attribs[i].attributeName);\n  }\n};\n\n/**\n * Add a relationship\n *\n * @param entA The first entity in the relationship\n * @param rolA The role played by the first entity in relation to the second\n * @param entB The second entity in the relationship\n * @param rSpec The details of the relationship between the two entities\n */\nconst addRelationship = function (entA, rolA, entB, rSpec) {\n  let rel = {\n    entityA: entA,\n    roleA: rolA,\n    entityB: entB,\n    relSpec: rSpec,\n  };\n\n  relationships.push(rel);\n  log.debug('Added new relationship :', rel);\n};\n\nconst getRelationships = () => relationships;\n\nconst clear = function () {\n  entities = {};\n  relationships = [];\n  title = '';\n  commonClear();\n};\n\nexport default {\n  Cardinality,\n  Identification,\n  parseDirective,\n  getConfig: () => configApi.getConfig().er,\n  addEntity,\n  addAttributes,\n  getEntities,\n  addRelationship,\n  getRelationships,\n  clear,\n  setAccTitle,\n  getAccTitle,\n  setAccDescription,\n  getAccDescription,\n};\n","const ERMarkers = {\n  ONLY_ONE_START: 'ONLY_ONE_START',\n  ONLY_ONE_END: 'ONLY_ONE_END',\n  ZERO_OR_ONE_START: 'ZERO_OR_ONE_START',\n  ZERO_OR_ONE_END: 'ZERO_OR_ONE_END',\n  ONE_OR_MORE_START: 'ONE_OR_MORE_START',\n  ONE_OR_MORE_END: 'ONE_OR_MORE_END',\n  ZERO_OR_MORE_START: 'ZERO_OR_MORE_START',\n  ZERO_OR_MORE_END: 'ZERO_OR_MORE_END',\n};\n\n/**\n * Put the markers into the svg DOM for later use with edge paths\n *\n * @param elem\n * @param conf\n */\nconst insertMarkers = function (elem, conf) {\n  let marker;\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ONLY_ONE_START)\n    .attr('refX', 0)\n    .attr('refY', 9)\n    .attr('markerWidth', 18)\n    .attr('markerHeight', 18)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M9,0 L9,18 M15,0 L15,18');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ONLY_ONE_END)\n    .attr('refX', 18)\n    .attr('refY', 9)\n    .attr('markerWidth', 18)\n    .attr('markerHeight', 18)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M3,0 L3,18 M9,0 L9,18');\n\n  marker = elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ZERO_OR_ONE_START)\n    .attr('refX', 0)\n    .attr('refY', 9)\n    .attr('markerWidth', 30)\n    .attr('markerHeight', 18)\n    .attr('orient', 'auto');\n  marker\n    .append('circle')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'white')\n    .attr('cx', 21)\n    .attr('cy', 9)\n    .attr('r', 6);\n  marker.append('path').attr('stroke', conf.stroke).attr('fill', 'none').attr('d', 'M9,0 L9,18');\n\n  marker = elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ZERO_OR_ONE_END)\n    .attr('refX', 30)\n    .attr('refY', 9)\n    .attr('markerWidth', 30)\n    .attr('markerHeight', 18)\n    .attr('orient', 'auto');\n  marker\n    .append('circle')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'white')\n    .attr('cx', 9)\n    .attr('cy', 9)\n    .attr('r', 6);\n  marker.append('path').attr('stroke', conf.stroke).attr('fill', 'none').attr('d', 'M21,0 L21,18');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ONE_OR_MORE_START)\n    .attr('refX', 18)\n    .attr('refY', 18)\n    .attr('markerWidth', 45)\n    .attr('markerHeight', 36)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ONE_OR_MORE_END)\n    .attr('refX', 27)\n    .attr('refY', 18)\n    .attr('markerWidth', 45)\n    .attr('markerHeight', 36)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18');\n\n  marker = elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ZERO_OR_MORE_START)\n    .attr('refX', 18)\n    .attr('refY', 18)\n    .attr('markerWidth', 57)\n    .attr('markerHeight', 36)\n    .attr('orient', 'auto');\n  marker\n    .append('circle')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'white')\n    .attr('cx', 48)\n    .attr('cy', 18)\n    .attr('r', 6);\n  marker\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M0,18 Q18,0 36,18 Q18,36 0,18');\n\n  marker = elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ZERO_OR_MORE_END)\n    .attr('refX', 39)\n    .attr('refY', 18)\n    .attr('markerWidth', 57)\n    .attr('markerHeight', 36)\n    .attr('orient', 'auto');\n  marker\n    .append('circle')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'white')\n    .attr('cx', 9)\n    .attr('cy', 18)\n    .attr('r', 6);\n  marker\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M21,18 Q39,0 57,18 Q39,36 21,18');\n\n  return;\n};\n\nexport default {\n  ERMarkers,\n  insertMarkers,\n};\n","import graphlib from 'graphlib';\nimport { line, curveBasis, select } from 'd3';\nimport erDb from './erDb';\nimport erParser from './parser/erDiagram';\nimport dagre from 'dagre';\nimport { getConfig } from '../../config';\nimport { log } from '../../logger';\nimport erMarkers from './erMarkers';\nimport { configureSvgSize } from '../../utils';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nconst conf = {};\n\n/**\n * Allows the top-level API module to inject config specific to this renderer, storing it in the\n * local conf object. Note that generic config still needs to be retrieved using getConfig()\n * imported from the config module\n *\n * @param cnf\n */\nexport const setConf = function (cnf) {\n  const keys = Object.keys(cnf);\n  for (let i = 0; i < keys.length; i++) {\n    conf[keys[i]] = cnf[keys[i]];\n  }\n};\n\n/**\n * Draw attributes for an entity\n *\n * @param groupNode The svg group node for the entity\n * @param entityTextNode The svg node for the entity label text\n * @param attributes An array of attributes defined for the entity (each attribute has a type and a name)\n * @returns The bounding box of the entity, after attributes have been added\n */\nconst drawAttributes = (groupNode, entityTextNode, attributes) => {\n  const heightPadding = conf.entityPadding / 3; // Padding internal to attribute boxes\n  const widthPadding = conf.entityPadding / 3; // Ditto\n  const attrFontSize = conf.fontSize * 0.85;\n  const labelBBox = entityTextNode.node().getBBox();\n  const attributeNodes = []; // Intermediate storage for attribute nodes created so that we can do a second pass\n  let hasKeyType = false;\n  let hasComment = false;\n  let maxTypeWidth = 0;\n  let maxNameWidth = 0;\n  let maxKeyWidth = 0;\n  let maxCommentWidth = 0;\n  let cumulativeHeight = labelBBox.height + heightPadding * 2;\n  let attrNum = 1;\n\n  // Check to see if any of the attributes has a key or a comment\n  attributes.forEach((item) => {\n    if (item.attributeKeyType !== undefined) {\n      hasKeyType = true;\n    }\n\n    if (item.attributeComment !== undefined) {\n      hasComment = true;\n    }\n  });\n\n  attributes.forEach((item) => {\n    const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`;\n    let nodeHeight = 0;\n\n    // Add a text node for the attribute type\n    const typeNode = groupNode\n      .append('text')\n      .attr('class', 'er entityLabel')\n      .attr('id', `${attrPrefix}-type`)\n      .attr('x', 0)\n      .attr('y', 0)\n      .attr('dominant-baseline', 'middle')\n      .attr('text-anchor', 'left')\n      .attr(\n        'style',\n        'font-family: ' + getConfig().fontFamily + '; font-size: ' + attrFontSize + 'px'\n      )\n      .text(item.attributeType);\n\n    // Add a text node for the attribute name\n    const nameNode = groupNode\n      .append('text')\n      .attr('class', 'er entityLabel')\n      .attr('id', `${attrPrefix}-name`)\n      .attr('x', 0)\n      .attr('y', 0)\n      .attr('dominant-baseline', 'middle')\n      .attr('text-anchor', 'left')\n      .attr(\n        'style',\n        'font-family: ' + getConfig().fontFamily + '; font-size: ' + attrFontSize + 'px'\n      )\n      .text(item.attributeName);\n\n    const attributeNode = {};\n    attributeNode.tn = typeNode;\n    attributeNode.nn = nameNode;\n\n    const typeBBox = typeNode.node().getBBox();\n    const nameBBox = nameNode.node().getBBox();\n    maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width);\n    maxNameWidth = Math.max(maxNameWidth, nameBBox.width);\n\n    nodeHeight = Math.max(typeBBox.height, nameBBox.height);\n\n    if (hasKeyType) {\n      const keyTypeNode = groupNode\n        .append('text')\n        .attr('class', 'er entityLabel')\n        .attr('id', `${attrPrefix}-key`)\n        .attr('x', 0)\n        .attr('y', 0)\n        .attr('dominant-baseline', 'middle')\n        .attr('text-anchor', 'left')\n        .attr(\n          'style',\n          'font-family: ' + getConfig().fontFamily + '; font-size: ' + attrFontSize + 'px'\n        )\n        .text(item.attributeKeyType || '');\n\n      attributeNode.kn = keyTypeNode;\n      const keyTypeBBox = keyTypeNode.node().getBBox();\n      maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width);\n      nodeHeight = Math.max(nodeHeight, keyTypeBBox.height);\n    }\n\n    if (hasComment) {\n      const commentNode = groupNode\n        .append('text')\n        .attr('class', 'er entityLabel')\n        .attr('id', `${attrPrefix}-comment`)\n        .attr('x', 0)\n        .attr('y', 0)\n        .attr('dominant-baseline', 'middle')\n        .attr('text-anchor', 'left')\n        .attr(\n          'style',\n          'font-family: ' + getConfig().fontFamily + '; font-size: ' + attrFontSize + 'px'\n        )\n        .text(item.attributeComment || '');\n\n      attributeNode.cn = commentNode;\n      const commentNodeBBox = commentNode.node().getBBox();\n      maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width);\n      nodeHeight = Math.max(nodeHeight, commentNodeBBox.height);\n    }\n\n    attributeNode.height = nodeHeight;\n    // Keep a reference to the nodes so that we can iterate through them later\n    attributeNodes.push(attributeNode);\n    cumulativeHeight += nodeHeight + heightPadding * 2;\n    attrNum += 1;\n  });\n\n  let widthPaddingFactor = 4;\n  if (hasKeyType) {\n    widthPaddingFactor += 2;\n  }\n  if (hasComment) {\n    widthPaddingFactor += 2;\n  }\n\n  const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth;\n\n  // Calculate the new bounding box of the overall entity, now that attributes have been added\n  const bBox = {\n    width: Math.max(\n      conf.minEntityWidth,\n      Math.max(\n        labelBBox.width + conf.entityPadding * 2,\n        maxWidth + widthPadding * widthPaddingFactor\n      )\n    ),\n    height:\n      attributes.length > 0\n        ? cumulativeHeight\n        : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2),\n  };\n\n  if (attributes.length > 0) {\n    // There might be some spare width for padding out attributes if the entity name is very long\n    const spareColumnWidth = Math.max(\n      0,\n      (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2)\n    );\n\n    // Position the entity label near the top of the entity bounding box\n    entityTextNode.attr(\n      'transform',\n      'translate(' + bBox.width / 2 + ',' + (heightPadding + labelBBox.height / 2) + ')'\n    );\n\n    // Add rectangular boxes for the attribute types/names\n    let heightOffset = labelBBox.height + heightPadding * 2; // Start at the bottom of the entity label\n    let attribStyle = 'attributeBoxOdd'; // We will flip the style on alternate rows to achieve a banded effect\n\n    attributeNodes.forEach((attributeNode) => {\n      // Calculate the alignment y co-ordinate for the type/name of the attribute\n      const alignY = heightOffset + heightPadding + attributeNode.height / 2;\n\n      // Position the type attribute\n      attributeNode.tn.attr('transform', 'translate(' + widthPadding + ',' + alignY + ')');\n\n      // TODO Handle spareWidth in attr('width')\n      // Insert a rectangle for the type\n      const typeRect = groupNode\n        .insert('rect', '#' + attributeNode.tn.node().id)\n        .attr('class', `er ${attribStyle}`)\n        .attr('fill', conf.fill)\n        .attr('fill-opacity', '100%')\n        .attr('stroke', conf.stroke)\n        .attr('x', 0)\n        .attr('y', heightOffset)\n        .attr('width', maxTypeWidth + widthPadding * 2 + spareColumnWidth)\n        .attr('height', attributeNode.height + heightPadding * 2);\n\n      const nameXOffset = parseFloat(typeRect.attr('x')) + parseFloat(typeRect.attr('width'));\n\n      // Position the name attribute\n      attributeNode.nn.attr(\n        'transform',\n        'translate(' + (nameXOffset + widthPadding) + ',' + alignY + ')'\n      );\n\n      // Insert a rectangle for the name\n      const nameRect = groupNode\n        .insert('rect', '#' + attributeNode.nn.node().id)\n        .attr('class', `er ${attribStyle}`)\n        .attr('fill', conf.fill)\n        .attr('fill-opacity', '100%')\n        .attr('stroke', conf.stroke)\n        .attr('x', nameXOffset)\n        .attr('y', heightOffset)\n        .attr('width', maxNameWidth + widthPadding * 2 + spareColumnWidth)\n        .attr('height', attributeNode.height + heightPadding * 2);\n\n      let keyTypeAndCommentXOffset =\n        parseFloat(nameRect.attr('x')) + parseFloat(nameRect.attr('width'));\n\n      if (hasKeyType) {\n        // Position the key type attribute\n        attributeNode.kn.attr(\n          'transform',\n          'translate(' + (keyTypeAndCommentXOffset + widthPadding) + ',' + alignY + ')'\n        );\n\n        // Insert a rectangle for the key type\n        const keyTypeRect = groupNode\n          .insert('rect', '#' + attributeNode.kn.node().id)\n          .attr('class', `er ${attribStyle}`)\n          .attr('fill', conf.fill)\n          .attr('fill-opacity', '100%')\n          .attr('stroke', conf.stroke)\n          .attr('x', keyTypeAndCommentXOffset)\n          .attr('y', heightOffset)\n          .attr('width', maxKeyWidth + widthPadding * 2 + spareColumnWidth)\n          .attr('height', attributeNode.height + heightPadding * 2);\n\n        keyTypeAndCommentXOffset =\n          parseFloat(keyTypeRect.attr('x')) + parseFloat(keyTypeRect.attr('width'));\n      }\n\n      if (hasComment) {\n        // Position the comment attribute\n        attributeNode.cn.attr(\n          'transform',\n          'translate(' + (keyTypeAndCommentXOffset + widthPadding) + ',' + alignY + ')'\n        );\n\n        // Insert a rectangle for the comment\n        groupNode\n          .insert('rect', '#' + attributeNode.cn.node().id)\n          .attr('class', `er ${attribStyle}`)\n          .attr('fill', conf.fill)\n          .attr('fill-opacity', '100%')\n          .attr('stroke', conf.stroke)\n          .attr('x', keyTypeAndCommentXOffset)\n          .attr('y', heightOffset)\n          .attr('width', maxCommentWidth + widthPadding * 2 + spareColumnWidth)\n          .attr('height', attributeNode.height + heightPadding * 2);\n      }\n\n      // Increment the height offset to move to the next row\n      heightOffset += attributeNode.height + heightPadding * 2;\n\n      // Flip the attribute style for row banding\n      attribStyle = attribStyle == 'attributeBoxOdd' ? 'attributeBoxEven' : 'attributeBoxOdd';\n    });\n  } else {\n    // Ensure the entity box is a decent size without any attributes\n    bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight);\n\n    // Position the entity label in the middle of the box\n    entityTextNode.attr('transform', 'translate(' + bBox.width / 2 + ',' + bBox.height / 2 + ')');\n  }\n\n  return bBox;\n};\n\n/**\n * Use D3 to construct the svg elements for the entities\n *\n * @param svgNode The svg node that contains the diagram\n * @param entities The entities to be drawn\n * @param graph The graph that contains the vertex and edge definitions post-layout\n * @returns The first entity that was inserted\n */\nconst drawEntities = function (svgNode, entities, graph) {\n  const keys = Object.keys(entities);\n  let firstOne;\n\n  keys.forEach(function (id) {\n    // Create a group for each entity\n    const groupNode = svgNode.append('g').attr('id', id);\n\n    firstOne = firstOne === undefined ? id : firstOne;\n\n    // Label the entity - this is done first so that we can get the bounding box\n    // which then determines the size of the rectangle\n    const textId = 'entity-' + id;\n    const textNode = groupNode\n      .append('text')\n      .attr('class', 'er entityLabel')\n      .attr('id', textId)\n      .attr('x', 0)\n      .attr('y', 0)\n      .attr('dominant-baseline', 'middle')\n      .attr('text-anchor', 'middle')\n      .attr(\n        'style',\n        'font-family: ' + getConfig().fontFamily + '; font-size: ' + conf.fontSize + 'px'\n      )\n      .text(id);\n\n    const { width: entityWidth, height: entityHeight } = drawAttributes(\n      groupNode,\n      textNode,\n      entities[id].attributes\n    );\n\n    // Draw the rectangle - insert it before the text so that the text is not obscured\n    const rectNode = groupNode\n      .insert('rect', '#' + textId)\n      .attr('class', 'er entityBox')\n      .attr('fill', conf.fill)\n      .attr('fill-opacity', '100%')\n      .attr('stroke', conf.stroke)\n      .attr('x', 0)\n      .attr('y', 0)\n      .attr('width', entityWidth)\n      .attr('height', entityHeight);\n\n    const rectBBox = rectNode.node().getBBox();\n\n    // Add the entity to the graph\n    graph.setNode(id, {\n      width: rectBBox.width,\n      height: rectBBox.height,\n      shape: 'rect',\n      id: id,\n    });\n  });\n  return firstOne;\n}; // drawEntities\n\nconst adjustEntities = function (svgNode, graph) {\n  graph.nodes().forEach(function (v) {\n    if (typeof v !== 'undefined' && typeof graph.node(v) !== 'undefined') {\n      svgNode\n        .select('#' + v)\n        .attr(\n          'transform',\n          'translate(' +\n            (graph.node(v).x - graph.node(v).width / 2) +\n            ',' +\n            (graph.node(v).y - graph.node(v).height / 2) +\n            ' )'\n        );\n    }\n  });\n  return;\n};\n\nconst getEdgeName = function (rel) {\n  return (rel.entityA + rel.roleA + rel.entityB).replace(/\\s/g, '');\n};\n\n/**\n * Add each relationship to the graph\n *\n * @param relationships The relationships to be added\n * @param g The graph\n * @returns {Array} The array of relationships\n */\nconst addRelationships = function (relationships, g) {\n  relationships.forEach(function (r) {\n    g.setEdge(r.entityA, r.entityB, { relationship: r }, getEdgeName(r));\n  });\n  return relationships;\n}; // addRelationships\n\nlet relCnt = 0;\n/**\n * Draw a relationship using edge information from the graph\n *\n * @param svg The svg node\n * @param rel The relationship to draw in the svg\n * @param g The graph containing the edge information\n * @param insert The insertion point in the svg DOM (because relationships have markers that need to\n *   sit 'behind' opaque entity boxes)\n */\nconst drawRelationshipFromLayout = function (svg, rel, g, insert) {\n  relCnt++;\n\n  // Find the edge relating to this relationship\n  const edge = g.edge(rel.entityA, rel.entityB, getEdgeName(rel));\n\n  // Get a function that will generate the line path\n  const lineFunction = line()\n    .x(function (d) {\n      return d.x;\n    })\n    .y(function (d) {\n      return d.y;\n    })\n    .curve(curveBasis);\n\n  // Insert the line at the right place\n  const svgPath = svg\n    .insert('path', '#' + insert)\n    .attr('class', 'er relationshipLine')\n    .attr('d', lineFunction(edge.points))\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none');\n\n  // ...and with dashes if necessary\n  if (rel.relSpec.relType === erDb.Identification.NON_IDENTIFYING) {\n    svgPath.attr('stroke-dasharray', '8,8');\n  }\n\n  // TODO: Understand this better\n  let url = '';\n  if (conf.arrowMarkerAbsolute) {\n    url =\n      window.location.protocol +\n      '//' +\n      window.location.host +\n      window.location.pathname +\n      window.location.search;\n    url = url.replace(/\\(/g, '\\\\(');\n    url = url.replace(/\\)/g, '\\\\)');\n  }\n\n  // Decide which start and end markers it needs. It may be possible to be more concise here\n  // by reversing a start marker to make an end marker...but this will do for now\n\n  // Note that the 'A' entity's marker is at the end of the relationship and the 'B' entity's marker is at the start\n  switch (rel.relSpec.cardA) {\n    case erDb.Cardinality.ZERO_OR_ONE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_ONE_END + ')');\n      break;\n    case erDb.Cardinality.ZERO_OR_MORE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_MORE_END + ')');\n      break;\n    case erDb.Cardinality.ONE_OR_MORE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ONE_OR_MORE_END + ')');\n      break;\n    case erDb.Cardinality.ONLY_ONE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ONLY_ONE_END + ')');\n      break;\n  }\n\n  switch (rel.relSpec.cardB) {\n    case erDb.Cardinality.ZERO_OR_ONE:\n      svgPath.attr(\n        'marker-start',\n        'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_ONE_START + ')'\n      );\n      break;\n    case erDb.Cardinality.ZERO_OR_MORE:\n      svgPath.attr(\n        'marker-start',\n        'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_MORE_START + ')'\n      );\n      break;\n    case erDb.Cardinality.ONE_OR_MORE:\n      svgPath.attr(\n        'marker-start',\n        'url(' + url + '#' + erMarkers.ERMarkers.ONE_OR_MORE_START + ')'\n      );\n      break;\n    case erDb.Cardinality.ONLY_ONE:\n      svgPath.attr('marker-start', 'url(' + url + '#' + erMarkers.ERMarkers.ONLY_ONE_START + ')');\n      break;\n  }\n\n  // Now label the relationship\n\n  // Find the half-way point\n  const len = svgPath.node().getTotalLength();\n  const labelPoint = svgPath.node().getPointAtLength(len * 0.5);\n\n  // Append a text node containing the label\n  const labelId = 'rel' + relCnt;\n\n  const labelNode = svg\n    .append('text')\n    .attr('class', 'er relationshipLabel')\n    .attr('id', labelId)\n    .attr('x', labelPoint.x)\n    .attr('y', labelPoint.y)\n    .attr('text-anchor', 'middle')\n    .attr('dominant-baseline', 'middle')\n    .attr(\n      'style',\n      'font-family: ' + getConfig().fontFamily + '; font-size: ' + conf.fontSize + 'px'\n    )\n    .text(rel.roleA);\n\n  // Figure out how big the opaque 'container' rectangle needs to be\n  const labelBBox = labelNode.node().getBBox();\n\n  // Insert the opaque rectangle before the text label\n  svg\n    .insert('rect', '#' + labelId)\n    .attr('class', 'er relationshipLabelBox')\n    .attr('x', labelPoint.x - labelBBox.width / 2)\n    .attr('y', labelPoint.y - labelBBox.height / 2)\n    .attr('width', labelBBox.width)\n    .attr('height', labelBBox.height)\n    .attr('fill', 'white')\n    .attr('fill-opacity', '85%');\n\n  return;\n};\n\n/**\n * Draw en E-R diagram in the tag with id: id based on the text definition of the diagram\n *\n * @param text The text of the diagram\n * @param id The unique id of the DOM node that contains the diagram\n */\nexport const draw = function (text, id) {\n  log.info('Drawing ER diagram');\n  erDb.clear();\n  const parser = erParser.parser;\n  parser.yy = erDb;\n  const securityLevel = getConfig().securityLevel;\n  // Handle root and Document for when rendering in sanbox mode\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  // Parse the text to populate erDb\n  try {\n    parser.parse(text);\n  } catch (err) {\n    log.debug('Parsing failed');\n  }\n\n  // Get a reference to the svg node that contains the text\n  const svg = root.select(`[id='${id}']`);\n\n  // Add cardinality marker definitions to the svg\n  erMarkers.insertMarkers(svg, conf);\n\n  // Now we have to construct the diagram in a specific way:\n  // ---\n  // 1. Create all the entities in the svg node at 0,0, but with the correct dimensions (allowing for text content)\n  // 2. Make sure they are all added to the graph\n  // 3. Add all the edges (relationships) to the graph as well\n  // 4. Let dagre do its magic to layout the graph.  This assigns:\n  //    - the centre co-ordinates for each node, bearing in mind the dimensions and edge relationships\n  //    - the path co-ordinates for each edge\n  //    But it has no impact on the svg child nodes - the diagram remains with every entity rooted at 0,0\n  // 5. Now assign a transform to each entity in the svg node so that it gets drawn in the correct place, as determined by\n  //    its centre point, which is obtained from the graph, and it's width and height\n  // 6. And finally, create all the edges in the svg node using information from the graph\n  // ---\n\n  // Create the graph\n  let g;\n\n  // TODO: Explore directed vs undirected graphs, and how the layout is affected\n  // An E-R diagram could be said to be undirected, but there is merit in setting\n  // the direction from parent to child in a one-to-many as this influences graphlib to\n  // put the parent above the child (does it?), which is intuitive.  Most relationships\n  // in ER diagrams are one-to-many.\n  g = new graphlib.Graph({\n    multigraph: true,\n    directed: true,\n    compound: false,\n  })\n    .setGraph({\n      rankdir: conf.layoutDirection,\n      marginx: 20,\n      marginy: 20,\n      nodesep: 100,\n      edgesep: 100,\n      ranksep: 100,\n    })\n    .setDefaultEdgeLabel(function () {\n      return {};\n    });\n\n  // Draw the entities (at 0,0), returning the first svg node that got\n  // inserted - this represents the insertion point for relationship paths\n  const firstEntity = drawEntities(svg, erDb.getEntities(), g);\n\n  // TODO: externalise the addition of entities to the graph - it's a bit 'buried' in the above\n\n  // Add all the relationships to the graph\n  const relationships = addRelationships(erDb.getRelationships(), g);\n\n  dagre.layout(g); // Node and edge positions will be updated\n\n  // Adjust the positions of the entities so that they adhere to the layout\n  adjustEntities(svg, g);\n\n  // Draw the relationships\n  relationships.forEach(function (rel) {\n    drawRelationshipFromLayout(svg, rel, g, firstEntity);\n  });\n\n  const padding = conf.diagramPadding;\n\n  const svgBounds = svg.node().getBBox();\n  const width = svgBounds.width + padding * 2;\n  const height = svgBounds.height + padding * 2;\n\n  configureSvgSize(svg, height, width, conf.useMaxWidth);\n\n  svg.attr('viewBox', `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`);\n\n  addSVGAccessibilityFields(parser.yy, svg, id);\n}; // draw\n\nexport default {\n  setConf,\n  draw,\n};\n","const getStyles = (options) =>\n  `\n  .entityBox {\n    fill: ${options.mainBkg};\n    stroke: ${options.nodeBorder};\n  }\n\n  .attributeBoxOdd {\n    fill: #ffffff;\n    stroke: ${options.nodeBorder};\n  }\n\n  .attributeBoxEven {\n    fill: #f2f2f2;\n    stroke: ${options.nodeBorder};\n  }\n\n  .relationshipLabelBox {\n    fill: ${options.tertiaryColor};\n    opacity: 0.7;\n    background-color: ${options.tertiaryColor};\n      rect {\n        opacity: 0.5;\n      }\n  }\n\n    .relationshipLine {\n      stroke: ${options.lineColor};\n    }\n`;\n\nexport default getStyles;\n","import dagreD3 from 'dagre-d3';\n\n/**\n * @param parent\n * @param bbox\n * @param node\n */\nfunction question(parent, bbox, node) {\n  const w = bbox.width;\n  const h = bbox.height;\n  const s = (w + h) * 0.9;\n  const points = [\n    { x: s / 2, y: 0 },\n    { x: s, y: -s / 2 },\n    { x: s / 2, y: -s },\n    { x: 0, y: -s / 2 },\n  ];\n  const shapeSvg = insertPolygonShape(parent, s, s, points);\n  node.intersect = function (point) {\n    return dagreD3.intersect.polygon(node, points, point);\n  };\n  return shapeSvg;\n}\n\n/**\n * @param parent\n * @param bbox\n * @param node\n */\nfunction hexagon(parent, bbox, node) {\n  const f = 4;\n  const h = bbox.height;\n  const m = h / f;\n  const w = bbox.width + 2 * m;\n  const points = [\n    { x: m, y: 0 },\n    { x: w - m, y: 0 },\n    { x: w, y: -h / 2 },\n    { x: w - m, y: -h },\n    { x: m, y: -h },\n    { x: 0, y: -h / 2 },\n  ];\n  const shapeSvg = insertPolygonShape(parent, w, h, points);\n  node.intersect = function (point) {\n    return dagreD3.intersect.polygon(node, points, point);\n  };\n  return shapeSvg;\n}\n\n/**\n * @param parent\n * @param bbox\n * @param node\n */\nfunction rect_left_inv_arrow(parent, bbox, node) {\n  const w = bbox.width;\n  const h = bbox.height;\n  const points = [\n    { x: -h / 2, y: 0 },\n    { x: w, y: 0 },\n    { x: w, y: -h },\n    { x: -h / 2, y: -h },\n    { x: 0, y: -h / 2 },\n  ];\n  const shapeSvg = insertPolygonShape(parent, w, h, points);\n  node.intersect = function (point) {\n    return dagreD3.intersect.polygon(node, points, point);\n  };\n  return shapeSvg;\n}\n\n/**\n * @param parent\n * @param bbox\n * @param node\n */\nfunction lean_right(parent, bbox, node) {\n  const w = bbox.width;\n  const h = bbox.height;\n  const points = [\n    { x: (-2 * h) / 6, y: 0 },\n    { x: w - h / 6, y: 0 },\n    { x: w + (2 * h) / 6, y: -h },\n    { x: h / 6, y: -h },\n  ];\n  const shapeSvg = insertPolygonShape(parent, w, h, points);\n  node.intersect = function (point) {\n    return dagreD3.intersect.polygon(node, points, point);\n  };\n  return shapeSvg;\n}\n\n/**\n * @param parent\n * @param bbox\n * @param node\n */\nfunction lean_left(parent, bbox, node) {\n  const w = bbox.width;\n  const h = bbox.height;\n  const points = [\n    { x: (2 * h) / 6, y: 0 },\n    { x: w + h / 6, y: 0 },\n    { x: w - (2 * h) / 6, y: -h },\n    { x: -h / 6, y: -h },\n  ];\n  const shapeSvg = insertPolygonShape(parent, w, h, points);\n  node.intersect = function (point) {\n    return dagreD3.intersect.polygon(node, points, point);\n  };\n  return shapeSvg;\n}\n\n/**\n * @param parent\n * @param bbox\n * @param node\n */\nfunction trapezoid(parent, bbox, node) {\n  const w = bbox.width;\n  const h = bbox.height;\n  const points = [\n    { x: (-2 * h) / 6, y: 0 },\n    { x: w + (2 * h) / 6, y: 0 },\n    { x: w - h / 6, y: -h },\n    { x: h / 6, y: -h },\n  ];\n  const shapeSvg = insertPolygonShape(parent, w, h, points);\n  node.intersect = function (point) {\n    return dagreD3.intersect.polygon(node, points, point);\n  };\n  return shapeSvg;\n}\n\n/**\n * @param parent\n * @param bbox\n * @param node\n */\nfunction inv_trapezoid(parent, bbox, node) {\n  const w = bbox.width;\n  const h = bbox.height;\n  const points = [\n    { x: h / 6, y: 0 },\n    { x: w - h / 6, y: 0 },\n    { x: w + (2 * h) / 6, y: -h },\n    { x: (-2 * h) / 6, y: -h },\n  ];\n  const shapeSvg = insertPolygonShape(parent, w, h, points);\n  node.intersect = function (point) {\n    return dagreD3.intersect.polygon(node, points, point);\n  };\n  return shapeSvg;\n}\n\n/**\n * @param parent\n * @param bbox\n * @param node\n */\nfunction rect_right_inv_arrow(parent, bbox, node) {\n  const w = bbox.width;\n  const h = bbox.height;\n  const points = [\n    { x: 0, y: 0 },\n    { x: w + h / 2, y: 0 },\n    { x: w, y: -h / 2 },\n    { x: w + h / 2, y: -h },\n    { x: 0, y: -h },\n  ];\n  const shapeSvg = insertPolygonShape(parent, w, h, points);\n  node.intersect = function (point) {\n    return dagreD3.intersect.polygon(node, points, point);\n  };\n  return shapeSvg;\n}\n\n/**\n * @param parent\n * @param bbox\n * @param node\n */\nfunction stadium(parent, bbox, node) {\n  const h = bbox.height;\n  const w = bbox.width + h / 4;\n\n  const shapeSvg = parent\n    .insert('rect', ':first-child')\n    .attr('rx', h / 2)\n    .attr('ry', h / 2)\n    .attr('x', -w / 2)\n    .attr('y', -h / 2)\n    .attr('width', w)\n    .attr('height', h);\n\n  node.intersect = function (point) {\n    return dagreD3.intersect.rect(node, point);\n  };\n  return shapeSvg;\n}\n\n/**\n * @param parent\n * @param bbox\n * @param node\n */\nfunction subroutine(parent, bbox, node) {\n  const w = bbox.width;\n  const h = bbox.height;\n  const points = [\n    { x: 0, y: 0 },\n    { x: w, y: 0 },\n    { x: w, y: -h },\n    { x: 0, y: -h },\n    { x: 0, y: 0 },\n    { x: -8, y: 0 },\n    { x: w + 8, y: 0 },\n    { x: w + 8, y: -h },\n    { x: -8, y: -h },\n    { x: -8, y: 0 },\n  ];\n  const shapeSvg = insertPolygonShape(parent, w, h, points);\n  node.intersect = function (point) {\n    return dagreD3.intersect.polygon(node, points, point);\n  };\n  return shapeSvg;\n}\n\n/**\n * @param parent\n * @param bbox\n * @param node\n */\nfunction cylinder(parent, bbox, node) {\n  const w = bbox.width;\n  const rx = w / 2;\n  const ry = rx / (2.5 + w / 50);\n  const h = bbox.height + ry;\n\n  const shape =\n    'M 0,' +\n    ry +\n    ' a ' +\n    rx +\n    ',' +\n    ry +\n    ' 0,0,0 ' +\n    w +\n    ' 0 a ' +\n    rx +\n    ',' +\n    ry +\n    ' 0,0,0 ' +\n    -w +\n    ' 0 l 0,' +\n    h +\n    ' a ' +\n    rx +\n    ',' +\n    ry +\n    ' 0,0,0 ' +\n    w +\n    ' 0 l 0,' +\n    -h;\n\n  const shapeSvg = parent\n    .attr('label-offset-y', ry)\n    .insert('path', ':first-child')\n    .attr('d', shape)\n    .attr('transform', 'translate(' + -w / 2 + ',' + -(h / 2 + ry) + ')');\n\n  node.intersect = function (point) {\n    const pos = dagreD3.intersect.rect(node, point);\n    const x = pos.x - node.x;\n\n    if (\n      rx != 0 &&\n      (Math.abs(x) < node.width / 2 ||\n        (Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry))\n    ) {\n      // ellipsis equation: x*x / a*a + y*y / b*b = 1\n      // solve for y to get adjustion value for pos.y\n      let y = ry * ry * (1 - (x * x) / (rx * rx));\n      if (y != 0) y = Math.sqrt(y);\n      y = ry - y;\n      if (point.y - node.y > 0) y = -y;\n\n      pos.y += y;\n    }\n\n    return pos;\n  };\n\n  return shapeSvg;\n}\n\n/** @param render */\nexport function addToRender(render) {\n  render.shapes().question = question;\n  render.shapes().hexagon = hexagon;\n  render.shapes().stadium = stadium;\n  render.shapes().subroutine = subroutine;\n  render.shapes().cylinder = cylinder;\n\n  // Add custom shape for box with inverted arrow on left side\n  render.shapes().rect_left_inv_arrow = rect_left_inv_arrow;\n\n  // Add custom shape for box with inverted arrow on left side\n  render.shapes().lean_right = lean_right;\n\n  // Add custom shape for box with inverted arrow on left side\n  render.shapes().lean_left = lean_left;\n\n  // Add custom shape for box with inverted arrow on left side\n  render.shapes().trapezoid = trapezoid;\n\n  // Add custom shape for box with inverted arrow on left side\n  render.shapes().inv_trapezoid = inv_trapezoid;\n\n  // Add custom shape for box with inverted arrow on right side\n  render.shapes().rect_right_inv_arrow = rect_right_inv_arrow;\n}\n\n/** @param addShape */\nexport function addToRenderV2(addShape) {\n  addShape({ question });\n  addShape({ hexagon });\n  addShape({ stadium });\n  addShape({ subroutine });\n  addShape({ cylinder });\n\n  // Add custom shape for box with inverted arrow on left side\n  addShape({ rect_left_inv_arrow });\n\n  // Add custom shape for box with inverted arrow on left side\n  addShape({ lean_right });\n\n  // Add custom shape for box with inverted arrow on left side\n  addShape({ lean_left });\n\n  // Add custom shape for box with inverted arrow on left side\n  addShape({ trapezoid });\n\n  // Add custom shape for box with inverted arrow on left side\n  addShape({ inv_trapezoid });\n\n  // Add custom shape for box with inverted arrow on right side\n  addShape({ rect_right_inv_arrow });\n}\n\n/**\n * @param parent\n * @param w\n * @param h\n * @param points\n */\nfunction insertPolygonShape(parent, w, h, points) {\n  return parent\n    .insert('polygon', ':first-child')\n    .attr(\n      'points',\n      points\n        .map(function (d) {\n          return d.x + ',' + d.y;\n        })\n        .join(' ')\n    )\n    .attr('transform', 'translate(' + -w / 2 + ',' + h / 2 + ')');\n}\n\nexport default {\n  addToRender,\n  addToRenderV2,\n};\n","import { select } from 'd3';\nimport utils from '../../utils';\nimport * as configApi from '../../config';\nimport common from '../common/common';\nimport mermaidAPI from '../../mermaidAPI';\nimport { log } from '../../logger';\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n} from '../../commonDb';\n\nconst MERMAID_DOM_ID_PREFIX = 'flowchart-';\nlet vertexCounter = 0;\nlet config = configApi.getConfig();\nlet vertices = {};\nlet edges = [];\nlet classes = [];\nlet subGraphs = [];\nlet subGraphLookup = {};\nlet tooltips = {};\nlet subCount = 0;\nlet firstGraphFlag = true;\nlet direction;\n\nlet version; // As in graph\n\n// Functions to be run after graph rendering\nlet funs = [];\n\nconst sanitizeText = (txt) => common.sanitizeText(txt, config);\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\n/**\n * Function to lookup domId from id in the graph definition.\n *\n * @param id\n * @public\n */\nexport const lookUpDomId = function (id) {\n  const veritceKeys = Object.keys(vertices);\n  for (let i = 0; i < veritceKeys.length; i++) {\n    if (vertices[veritceKeys[i]].id === id) {\n      return vertices[veritceKeys[i]].domId;\n    }\n  }\n  return id;\n};\n\n/**\n * Function called by parser when a node definition has been found\n *\n * @param _id\n * @param text\n * @param type\n * @param style\n * @param classes\n * @param dir\n * @param props\n */\nexport const addVertex = function (_id, text, type, style, classes, dir, props = {}) {\n  let txt;\n  let id = _id;\n  if (typeof id === 'undefined') {\n    return;\n  }\n  if (id.trim().length === 0) {\n    return;\n  }\n\n  // if (id[0].match(/\\d/)) id = MERMAID_DOM_ID_PREFIX + id;\n\n  if (typeof vertices[id] === 'undefined') {\n    vertices[id] = {\n      id: id,\n      domId: MERMAID_DOM_ID_PREFIX + id + '-' + vertexCounter,\n      styles: [],\n      classes: [],\n    };\n  }\n  vertexCounter++;\n  if (typeof text !== 'undefined') {\n    config = configApi.getConfig();\n    txt = sanitizeText(text.trim());\n\n    // strip quotes if string starts and ends with a quote\n    if (txt[0] === '\"' && txt[txt.length - 1] === '\"') {\n      txt = txt.substring(1, txt.length - 1);\n    }\n\n    vertices[id].text = txt;\n  } else {\n    if (typeof vertices[id].text === 'undefined') {\n      vertices[id].text = _id;\n    }\n  }\n  if (typeof type !== 'undefined') {\n    vertices[id].type = type;\n  }\n  if (typeof style !== 'undefined') {\n    if (style !== null) {\n      style.forEach(function (s) {\n        vertices[id].styles.push(s);\n      });\n    }\n  }\n  if (typeof classes !== 'undefined') {\n    if (classes !== null) {\n      classes.forEach(function (s) {\n        vertices[id].classes.push(s);\n      });\n    }\n  }\n  if (typeof dir !== 'undefined') {\n    vertices[id].dir = dir;\n  }\n  vertices[id].props = props;\n};\n\n/**\n * Function called by parser when a link/edge definition has been found\n *\n * @param _start\n * @param _end\n * @param type\n * @param linktext\n */\nexport const addSingleLink = function (_start, _end, type, linktext) {\n  let start = _start;\n  let end = _end;\n  // if (start[0].match(/\\d/)) start = MERMAID_DOM_ID_PREFIX + start;\n  // if (end[0].match(/\\d/)) end = MERMAID_DOM_ID_PREFIX + end;\n  // log.info('Got edge...', start, end);\n\n  const edge = { start: start, end: end, type: undefined, text: '' };\n  linktext = type.text;\n\n  if (typeof linktext !== 'undefined') {\n    edge.text = sanitizeText(linktext.trim());\n\n    // strip quotes if string starts and exnds with a quote\n    if (edge.text[0] === '\"' && edge.text[edge.text.length - 1] === '\"') {\n      edge.text = edge.text.substring(1, edge.text.length - 1);\n    }\n  }\n\n  if (typeof type !== 'undefined') {\n    edge.type = type.type;\n    edge.stroke = type.stroke;\n    edge.length = type.length;\n  }\n  edges.push(edge);\n};\nexport const addLink = function (_start, _end, type, linktext) {\n  let i, j;\n  for (i = 0; i < _start.length; i++) {\n    for (j = 0; j < _end.length; j++) {\n      addSingleLink(_start[i], _end[j], type, linktext);\n    }\n  }\n};\n\n/**\n * Updates a link's line interpolation algorithm\n *\n * @param positions\n * @param interp\n */\nexport const updateLinkInterpolate = function (positions, interp) {\n  positions.forEach(function (pos) {\n    if (pos === 'default') {\n      edges.defaultInterpolate = interp;\n    } else {\n      edges[pos].interpolate = interp;\n    }\n  });\n};\n\n/**\n * Updates a link with a style\n *\n * @param positions\n * @param style\n */\nexport const updateLink = function (positions, style) {\n  positions.forEach(function (pos) {\n    if (pos === 'default') {\n      edges.defaultStyle = style;\n    } else {\n      if (utils.isSubstringInArray('fill', style) === -1) {\n        style.push('fill:none');\n      }\n      edges[pos].style = style;\n    }\n  });\n};\n\nexport const addClass = function (id, style) {\n  if (typeof classes[id] === 'undefined') {\n    classes[id] = { id: id, styles: [], textStyles: [] };\n  }\n\n  if (typeof style !== 'undefined') {\n    if (style !== null) {\n      style.forEach(function (s) {\n        if (s.match('color')) {\n          const newStyle1 = s.replace('fill', 'bgFill');\n          const newStyle2 = newStyle1.replace('color', 'fill');\n          classes[id].textStyles.push(newStyle2);\n        }\n        classes[id].styles.push(s);\n      });\n    }\n  }\n};\n\n/**\n * Called by parser when a graph definition is found, stores the direction of the chart.\n *\n * @param dir\n */\nexport const setDirection = function (dir) {\n  direction = dir;\n  if (direction.match(/.*</)) {\n    direction = 'RL';\n  }\n  if (direction.match(/.*\\^/)) {\n    direction = 'BT';\n  }\n  if (direction.match(/.*>/)) {\n    direction = 'LR';\n  }\n  if (direction.match(/.*v/)) {\n    direction = 'TB';\n  }\n};\n\n/**\n * Called by parser when a special node is found, e.g. a clickable element.\n *\n * @param ids Comma separated list of ids\n * @param className Class to add\n */\nexport const setClass = function (ids, className) {\n  ids.split(',').forEach(function (_id) {\n    // let id = version === 'gen-2' ? lookUpDomId(_id) : _id;\n    let id = _id;\n    // if (_id[0].match(/\\d/)) id = MERMAID_DOM_ID_PREFIX + id;\n    if (typeof vertices[id] !== 'undefined') {\n      vertices[id].classes.push(className);\n    }\n\n    if (typeof subGraphLookup[id] !== 'undefined') {\n      subGraphLookup[id].classes.push(className);\n    }\n  });\n};\n\nconst setTooltip = function (ids, tooltip) {\n  ids.split(',').forEach(function (id) {\n    if (typeof tooltip !== 'undefined') {\n      tooltips[version === 'gen-1' ? lookUpDomId(id) : id] = sanitizeText(tooltip);\n    }\n  });\n};\n\nconst setClickFun = function (id, functionName, functionArgs) {\n  let domId = lookUpDomId(id);\n  // if (_id[0].match(/\\d/)) id = MERMAID_DOM_ID_PREFIX + id;\n  if (configApi.getConfig().securityLevel !== 'loose') {\n    return;\n  }\n  if (typeof functionName === 'undefined') {\n    return;\n  }\n  let argList = [];\n  if (typeof functionArgs === 'string') {\n    /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */\n    argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n    for (let i = 0; i < argList.length; i++) {\n      let item = argList[i].trim();\n      /* Removes all double quotes at the start and end of an argument */\n      /* This preserves all starting and ending whitespace inside */\n      if (item.charAt(0) === '\"' && item.charAt(item.length - 1) === '\"') {\n        item = item.substr(1, item.length - 2);\n      }\n      argList[i] = item;\n    }\n  }\n\n  /* if no arguments passed into callback, default to passing in id */\n  if (argList.length === 0) {\n    argList.push(id);\n  }\n\n  if (typeof vertices[id] !== 'undefined') {\n    vertices[id].haveCallback = true;\n    funs.push(function () {\n      const elem = document.querySelector(`[id=\"${domId}\"]`);\n      if (elem !== null) {\n        elem.addEventListener(\n          'click',\n          function () {\n            utils.runFunc(functionName, ...argList);\n          },\n          false\n        );\n      }\n    });\n  }\n};\n\n/**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n *\n * @param ids Comma separated list of ids\n * @param linkStr URL to create a link for\n * @param target\n */\nexport const setLink = function (ids, linkStr, target) {\n  ids.split(',').forEach(function (id) {\n    if (typeof vertices[id] !== 'undefined') {\n      vertices[id].link = utils.formatUrl(linkStr, config);\n      vertices[id].linkTarget = target;\n    }\n  });\n  setClass(ids, 'clickable');\n};\nexport const getTooltip = function (id) {\n  return tooltips[id];\n};\n\n/**\n * Called by parser when a click definition is found. Registers an event handler.\n *\n * @param ids Comma separated list of ids\n * @param functionName Function to be called on click\n * @param functionArgs\n */\nexport const setClickEvent = function (ids, functionName, functionArgs) {\n  ids.split(',').forEach(function (id) {\n    setClickFun(id, functionName, functionArgs);\n  });\n  setClass(ids, 'clickable');\n};\n\nexport const bindFunctions = function (element) {\n  funs.forEach(function (fun) {\n    fun(element);\n  });\n};\nexport const getDirection = function () {\n  return direction.trim();\n};\n/**\n * Retrieval function for fetching the found nodes after parsing has completed.\n *\n * @returns {{} | any | vertices}\n */\nexport const getVertices = function () {\n  return vertices;\n};\n\n/**\n * Retrieval function for fetching the found links after parsing has completed.\n *\n * @returns {{} | any | edges}\n */\nexport const getEdges = function () {\n  return edges;\n};\n\n/**\n * Retrieval function for fetching the found class definitions after parsing has completed.\n *\n * @returns {{} | any | classes}\n */\nexport const getClasses = function () {\n  return classes;\n};\n\nconst setupToolTips = function (element) {\n  let tooltipElem = select('.mermaidTooltip');\n  if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n    tooltipElem = select('body').append('div').attr('class', 'mermaidTooltip').style('opacity', 0);\n  }\n\n  const svg = select(element).select('svg');\n\n  const nodes = svg.selectAll('g.node');\n  nodes\n    .on('mouseover', function () {\n      const el = select(this);\n      const title = el.attr('title');\n\n      // Dont try to draw a tooltip if no data is provided\n      if (title === null) {\n        return;\n      }\n      const rect = this.getBoundingClientRect();\n\n      tooltipElem.transition().duration(200).style('opacity', '.9');\n      tooltipElem\n        .text(el.attr('title'))\n        .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px')\n        .style('top', window.scrollY + rect.top - 14 + document.body.scrollTop + 'px');\n      el.classed('hover', true);\n    })\n    .on('mouseout', function () {\n      tooltipElem.transition().duration(500).style('opacity', 0);\n      const el = select(this);\n      el.classed('hover', false);\n    });\n};\nfuns.push(setupToolTips);\n\n/**\n * Clears the internal graph db so that a new graph can be parsed.\n *\n * @param ver\n */\nexport const clear = function (ver) {\n  vertices = {};\n  classes = {};\n  edges = [];\n  funs = [];\n  funs.push(setupToolTips);\n  subGraphs = [];\n  subGraphLookup = {};\n  subCount = 0;\n  tooltips = [];\n  firstGraphFlag = true;\n  version = ver || 'gen-1';\n  commonClear();\n};\nexport const setGen = (ver) => {\n  version = ver || 'gen-1';\n};\n/** @returns {string} */\nexport const defaultStyle = function () {\n  return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;';\n};\n\n/**\n * Clears the internal graph db so that a new graph can be parsed.\n *\n * @param _id\n * @param list\n * @param _title\n */\nexport const addSubGraph = function (_id, list, _title) {\n  // console.log('addSubGraph', _id, list, _title);\n  let id = _id.trim();\n  let title = _title;\n  if (_id === _title && _title.match(/\\s/)) {\n    id = undefined;\n  }\n  /** @param a */\n  function uniq(a) {\n    const prims = { boolean: {}, number: {}, string: {} };\n    const objs = [];\n\n    let dir; //  = undefined; direction.trim();\n    const nodeList = a.filter(function (item) {\n      const type = typeof item;\n      if (item.stmt && item.stmt === 'dir') {\n        dir = item.value;\n        return false;\n      }\n      if (item.trim() === '') {\n        return false;\n      }\n      if (type in prims) {\n        return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); // eslint-disable-line\n      } else {\n        return objs.indexOf(item) >= 0 ? false : objs.push(item);\n      }\n    });\n    return { nodeList, dir };\n  }\n\n  let nodeList = [];\n\n  const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list));\n  nodeList = nl;\n  if (version === 'gen-1') {\n    log.warn('LOOKING UP');\n    for (let i = 0; i < nodeList.length; i++) {\n      nodeList[i] = lookUpDomId(nodeList[i]);\n    }\n  }\n\n  id = id || 'subGraph' + subCount;\n  // if (id[0].match(/\\d/)) id = lookUpDomId(id);\n  title = title || '';\n  title = sanitizeText(title);\n  subCount = subCount + 1;\n  const subGraph = { id: id, nodes: nodeList, title: title.trim(), classes: [], dir };\n\n  log.info('Adding', subGraph.id, subGraph.nodes, subGraph.dir);\n\n  /** Deletes an id from all subgraphs */\n  // const del = _id => {\n  //   subGraphs.forEach(sg => {\n  //     const pos = sg.nodes.indexOf(_id);\n  //     if (pos >= 0) {\n  //       sg.nodes.splice(pos, 1);\n  //     }\n  //   });\n  // };\n\n  // // Removes the members of this subgraph from any other subgraphs, a node only belong to one subgraph\n  // subGraph.nodes.forEach(_id => del(_id));\n\n  // Remove the members in the new subgraph if they already belong to another subgraph\n  subGraph.nodes = makeUniq(subGraph, subGraphs).nodes;\n  subGraphs.push(subGraph);\n  subGraphLookup[id] = subGraph;\n  return id;\n};\n\nconst getPosForId = function (id) {\n  for (let i = 0; i < subGraphs.length; i++) {\n    if (subGraphs[i].id === id) {\n      return i;\n    }\n  }\n  return -1;\n};\nlet secCount = -1;\nconst posCrossRef = [];\nconst indexNodes2 = function (id, pos) {\n  const nodes = subGraphs[pos].nodes;\n  secCount = secCount + 1;\n  if (secCount > 2000) {\n    return;\n  }\n  posCrossRef[secCount] = pos;\n  // Check if match\n  if (subGraphs[pos].id === id) {\n    return {\n      result: true,\n      count: 0,\n    };\n  }\n\n  let count = 0;\n  let posCount = 1;\n  while (count < nodes.length) {\n    const childPos = getPosForId(nodes[count]);\n    // Ignore regular nodes (pos will be -1)\n    if (childPos >= 0) {\n      const res = indexNodes2(id, childPos);\n      if (res.result) {\n        return {\n          result: true,\n          count: posCount + res.count,\n        };\n      } else {\n        posCount = posCount + res.count;\n      }\n    }\n    count = count + 1;\n  }\n\n  return {\n    result: false,\n    count: posCount,\n  };\n};\n\nexport const getDepthFirstPos = function (pos) {\n  return posCrossRef[pos];\n};\nexport const indexNodes = function () {\n  secCount = -1;\n  if (subGraphs.length > 0) {\n    indexNodes2('none', subGraphs.length - 1, 0);\n  }\n};\n\nexport const getSubGraphs = function () {\n  return subGraphs;\n};\n\nexport const firstGraph = () => {\n  if (firstGraphFlag) {\n    firstGraphFlag = false;\n    return true;\n  }\n  return false;\n};\n\nconst destructStartLink = (_str) => {\n  let str = _str.trim();\n  let type = 'arrow_open';\n\n  switch (str[0]) {\n    case '<':\n      type = 'arrow_point';\n      str = str.slice(1);\n      break;\n    case 'x':\n      type = 'arrow_cross';\n      str = str.slice(1);\n      break;\n    case 'o':\n      type = 'arrow_circle';\n      str = str.slice(1);\n      break;\n  }\n\n  let stroke = 'normal';\n\n  if (str.indexOf('=') !== -1) {\n    stroke = 'thick';\n  }\n\n  if (str.indexOf('.') !== -1) {\n    stroke = 'dotted';\n  }\n\n  return { type, stroke };\n};\n\nconst countChar = (char, str) => {\n  const length = str.length;\n  let count = 0;\n  for (let i = 0; i < length; ++i) {\n    if (str[i] === char) {\n      ++count;\n    }\n  }\n  return count;\n};\n\nconst destructEndLink = (_str) => {\n  const str = _str.trim();\n  let line = str.slice(0, -1);\n  let type = 'arrow_open';\n\n  switch (str.slice(-1)) {\n    case 'x':\n      type = 'arrow_cross';\n      if (str[0] === 'x') {\n        type = 'double_' + type;\n        line = line.slice(1);\n      }\n      break;\n    case '>':\n      type = 'arrow_point';\n      if (str[0] === '<') {\n        type = 'double_' + type;\n        line = line.slice(1);\n      }\n      break;\n    case 'o':\n      type = 'arrow_circle';\n      if (str[0] === 'o') {\n        type = 'double_' + type;\n        line = line.slice(1);\n      }\n      break;\n  }\n\n  let stroke = 'normal';\n  let length = line.length - 1;\n\n  if (line[0] === '=') {\n    stroke = 'thick';\n  }\n\n  let dots = countChar('.', line);\n\n  if (dots) {\n    stroke = 'dotted';\n    length = dots;\n  }\n\n  return { type, stroke, length };\n};\n\nconst destructLink = (_str, _startStr) => {\n  const info = destructEndLink(_str);\n  let startInfo;\n  if (_startStr) {\n    startInfo = destructStartLink(_startStr);\n\n    if (startInfo.stroke !== info.stroke) {\n      return { type: 'INVALID', stroke: 'INVALID' };\n    }\n\n    if (startInfo.type === 'arrow_open') {\n      // -- xyz -->  - take arrow type from ending\n      startInfo.type = info.type;\n    } else {\n      // x-- xyz -->  - not supported\n      if (startInfo.type !== info.type) return { type: 'INVALID', stroke: 'INVALID' };\n\n      startInfo.type = 'double_' + startInfo.type;\n    }\n\n    if (startInfo.type === 'double_arrow') {\n      startInfo.type = 'double_arrow_point';\n    }\n\n    startInfo.length = info.length;\n    return startInfo;\n  }\n\n  return info;\n};\n\n// Todo optimizer this by caching existing nodes\nconst exists = (allSgs, _id) => {\n  let res = false;\n  allSgs.forEach((sg) => {\n    const pos = sg.nodes.indexOf(_id);\n    if (pos >= 0) {\n      res = true;\n    }\n  });\n  return res;\n};\n/**\n * Deletes an id from all subgraphs\n *\n * @param sg\n * @param allSubgraphs\n */\nconst makeUniq = (sg, allSubgraphs) => {\n  const res = [];\n  sg.nodes.forEach((_id, pos) => {\n    if (!exists(allSubgraphs, _id)) {\n      res.push(sg.nodes[pos]);\n    }\n  });\n  return { nodes: res };\n};\n\nexport default {\n  parseDirective,\n  defaultConfig: () => configApi.defaultConfig.flowchart,\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  addVertex,\n  lookUpDomId,\n  addLink,\n  updateLinkInterpolate,\n  updateLink,\n  addClass,\n  setDirection,\n  setClass,\n  setTooltip,\n  getTooltip,\n  setClickEvent,\n  setLink,\n  bindFunctions,\n  getDirection,\n  getVertices,\n  getEdges,\n  getClasses,\n  clear,\n  setGen,\n  defaultStyle,\n  addSubGraph,\n  getDepthFirstPos,\n  indexNodes,\n  getSubGraphs,\n  destructLink,\n  lex: {\n    firstGraph,\n  },\n  exists,\n  makeUniq,\n};\n","import graphlib from 'graphlib';\nimport { select, curveLinear, selectAll } from 'd3';\n\nimport flowDb from './flowDb';\nimport flow from './parser/flow';\nimport { getConfig } from '../../config';\n\nimport { render } from '../../dagre-wrapper/index.js';\nimport addHtmlLabel from 'dagre-d3/lib/label/add-html-label.js';\nimport { log } from '../../logger';\nimport common, { evaluate } from '../common/common';\nimport { interpolateToCurve, getStylesFromArray, setupGraphViewbox } from '../../utils';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nconst conf = {};\nexport const setConf = function (cnf) {\n  const keys = Object.keys(cnf);\n  for (let i = 0; i < keys.length; i++) {\n    conf[keys[i]] = cnf[keys[i]];\n  }\n};\n\n/**\n * Function that adds the vertices found during parsing to the graph to be rendered.\n *\n * @param vert Object containing the vertices.\n * @param g The graph that is to be drawn.\n * @param svgId\n * @param root\n * @param doc\n */\nexport const addVertices = function (vert, g, svgId, root, doc) {\n  const svg = root.select(`[id=\"${svgId}\"]`);\n  const keys = Object.keys(vert);\n\n  // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition\n  keys.forEach(function (id) {\n    const vertex = vert[id];\n\n    /**\n     * Variable for storing the classes for the vertex\n     *\n     * @type {string}\n     */\n    let classStr = 'default';\n    if (vertex.classes.length > 0) {\n      classStr = vertex.classes.join(' ');\n    }\n\n    const styles = getStylesFromArray(vertex.styles);\n\n    // Use vertex id as text in the box if no text is provided by the graph definition\n    let vertexText = vertex.text !== undefined ? vertex.text : vertex.id;\n\n    // We create a SVG label, either by delegating to addHtmlLabel or manually\n    let vertexNode;\n    if (evaluate(getConfig().flowchart.htmlLabels)) {\n      // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that?\n      const node = {\n        label: vertexText.replace(\n          /fa[lrsb]?:fa-[\\w-]+/g,\n          (s) => `<i class='${s.replace(':', ' ')}'></i>`\n        ),\n      };\n      vertexNode = addHtmlLabel(svg, node).node();\n      vertexNode.parentNode.removeChild(vertexNode);\n    } else {\n      const svgLabel = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n      svgLabel.setAttribute('style', styles.labelStyle.replace('color:', 'fill:'));\n\n      const rows = vertexText.split(common.lineBreakRegex);\n\n      for (let j = 0; j < rows.length; j++) {\n        const tspan = doc.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n        tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n        tspan.setAttribute('dy', '1em');\n        tspan.setAttribute('x', '1');\n        tspan.textContent = rows[j];\n        svgLabel.appendChild(tspan);\n      }\n      vertexNode = svgLabel;\n    }\n\n    let radious = 0;\n    let _shape = '';\n    // Set the shape based parameters\n    switch (vertex.type) {\n      case 'round':\n        radious = 5;\n        _shape = 'rect';\n        break;\n      case 'square':\n        _shape = 'rect';\n        break;\n      case 'diamond':\n        _shape = 'question';\n        break;\n      case 'hexagon':\n        _shape = 'hexagon';\n        break;\n      case 'odd':\n        _shape = 'rect_left_inv_arrow';\n        break;\n      case 'lean_right':\n        _shape = 'lean_right';\n        break;\n      case 'lean_left':\n        _shape = 'lean_left';\n        break;\n      case 'trapezoid':\n        _shape = 'trapezoid';\n        break;\n      case 'inv_trapezoid':\n        _shape = 'inv_trapezoid';\n        break;\n      case 'odd_right':\n        _shape = 'rect_left_inv_arrow';\n        break;\n      case 'circle':\n        _shape = 'circle';\n        break;\n      case 'ellipse':\n        _shape = 'ellipse';\n        break;\n      case 'stadium':\n        _shape = 'stadium';\n        break;\n      case 'subroutine':\n        _shape = 'subroutine';\n        break;\n      case 'cylinder':\n        _shape = 'cylinder';\n        break;\n      case 'group':\n        _shape = 'rect';\n        break;\n      case 'doublecircle':\n        _shape = 'doublecircle';\n        break;\n      default:\n        _shape = 'rect';\n    }\n    // Add the node\n    g.setNode(vertex.id, {\n      labelStyle: styles.labelStyle,\n      shape: _shape,\n      labelText: vertexText,\n      rx: radious,\n      ry: radious,\n      class: classStr,\n      style: styles.style,\n      id: vertex.id,\n      link: vertex.link,\n      linkTarget: vertex.linkTarget,\n      tooltip: flowDb.getTooltip(vertex.id) || '',\n      domId: flowDb.lookUpDomId(vertex.id),\n      haveCallback: vertex.haveCallback,\n      width: vertex.type === 'group' ? 500 : undefined,\n      dir: vertex.dir,\n      type: vertex.type,\n      props: vertex.props,\n      padding: getConfig().flowchart.padding,\n    });\n\n    log.info('setNode', {\n      labelStyle: styles.labelStyle,\n      shape: _shape,\n      labelText: vertexText,\n      rx: radious,\n      ry: radious,\n      class: classStr,\n      style: styles.style,\n      id: vertex.id,\n      domId: flowDb.lookUpDomId(vertex.id),\n      width: vertex.type === 'group' ? 500 : undefined,\n      type: vertex.type,\n      dir: vertex.dir,\n      props: vertex.props,\n      padding: getConfig().flowchart.padding,\n    });\n  });\n};\n\n/**\n * Add edges to graph based on parsed graph definition\n *\n * @param {object} edges The edges to add to the graph\n * @param {object} g The graph object\n */\nexport const addEdges = function (edges, g) {\n  log.info('abc78 edges = ', edges);\n  let cnt = 0;\n  let linkIdCnt = {};\n\n  let defaultStyle;\n  let defaultLabelStyle;\n\n  if (typeof edges.defaultStyle !== 'undefined') {\n    const defaultStyles = getStylesFromArray(edges.defaultStyle);\n    defaultStyle = defaultStyles.style;\n    defaultLabelStyle = defaultStyles.labelStyle;\n  }\n\n  edges.forEach(function (edge) {\n    cnt++;\n\n    // Identify Link\n    var linkIdBase = 'L-' + edge.start + '-' + edge.end;\n    // count the links from+to the same node to give unique id\n    if (typeof linkIdCnt[linkIdBase] === 'undefined') {\n      linkIdCnt[linkIdBase] = 0;\n      log.info('abc78 new entry', linkIdBase, linkIdCnt[linkIdBase]);\n    } else {\n      linkIdCnt[linkIdBase]++;\n      log.info('abc78 new entry', linkIdBase, linkIdCnt[linkIdBase]);\n    }\n    let linkId = linkIdBase + '-' + linkIdCnt[linkIdBase];\n    log.info('abc78 new link id to be used is', linkIdBase, linkId, linkIdCnt[linkIdBase]);\n    var linkNameStart = 'LS-' + edge.start;\n    var linkNameEnd = 'LE-' + edge.end;\n\n    const edgeData = { style: '', labelStyle: '' };\n    edgeData.minlen = edge.length || 1;\n    //edgeData.id = 'id' + cnt;\n\n    // Set link type for rendering\n    if (edge.type === 'arrow_open') {\n      edgeData.arrowhead = 'none';\n    } else {\n      edgeData.arrowhead = 'normal';\n    }\n\n    // Check of arrow types, placed here in order not to break old rendering\n    edgeData.arrowTypeStart = 'arrow_open';\n    edgeData.arrowTypeEnd = 'arrow_open';\n\n    /* eslint-disable no-fallthrough */\n    switch (edge.type) {\n      case 'double_arrow_cross':\n        edgeData.arrowTypeStart = 'arrow_cross';\n      case 'arrow_cross':\n        edgeData.arrowTypeEnd = 'arrow_cross';\n        break;\n      case 'double_arrow_point':\n        edgeData.arrowTypeStart = 'arrow_point';\n      case 'arrow_point':\n        edgeData.arrowTypeEnd = 'arrow_point';\n        break;\n      case 'double_arrow_circle':\n        edgeData.arrowTypeStart = 'arrow_circle';\n      case 'arrow_circle':\n        edgeData.arrowTypeEnd = 'arrow_circle';\n        break;\n    }\n\n    let style = '';\n    let labelStyle = '';\n\n    switch (edge.stroke) {\n      case 'normal':\n        style = 'fill:none;';\n        if (typeof defaultStyle !== 'undefined') {\n          style = defaultStyle;\n        }\n        if (typeof defaultLabelStyle !== 'undefined') {\n          labelStyle = defaultLabelStyle;\n        }\n        edgeData.thickness = 'normal';\n        edgeData.pattern = 'solid';\n        break;\n      case 'dotted':\n        edgeData.thickness = 'normal';\n        edgeData.pattern = 'dotted';\n        edgeData.style = 'fill:none;stroke-width:2px;stroke-dasharray:3;';\n        break;\n      case 'thick':\n        edgeData.thickness = 'thick';\n        edgeData.pattern = 'solid';\n        edgeData.style = 'stroke-width: 3.5px;fill:none;';\n        break;\n    }\n    if (typeof edge.style !== 'undefined') {\n      const styles = getStylesFromArray(edge.style);\n      style = styles.style;\n      labelStyle = styles.labelStyle;\n    }\n\n    edgeData.style = edgeData.style += style;\n    edgeData.labelStyle = edgeData.labelStyle += labelStyle;\n\n    if (typeof edge.interpolate !== 'undefined') {\n      edgeData.curve = interpolateToCurve(edge.interpolate, curveLinear);\n    } else if (typeof edges.defaultInterpolate !== 'undefined') {\n      edgeData.curve = interpolateToCurve(edges.defaultInterpolate, curveLinear);\n    } else {\n      edgeData.curve = interpolateToCurve(conf.curve, curveLinear);\n    }\n\n    if (typeof edge.text === 'undefined') {\n      if (typeof edge.style !== 'undefined') {\n        edgeData.arrowheadStyle = 'fill: #333';\n      }\n    } else {\n      edgeData.arrowheadStyle = 'fill: #333';\n      edgeData.labelpos = 'c';\n    }\n    // if (evaluate(getConfig().flowchart.htmlLabels) && false) {\n    //   // eslint-disable-line\n    //   edgeData.labelType = 'html';\n    //   edgeData.label = `<span id=\"L-${linkId}\" class=\"edgeLabel L-${linkNameStart}' L-${linkNameEnd}\">${edge.text}</span>`;\n    // } else {\n    edgeData.labelType = 'text';\n    edgeData.label = edge.text.replace(common.lineBreakRegex, '\\n');\n\n    if (typeof edge.style === 'undefined') {\n      edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none;';\n    }\n\n    edgeData.labelStyle = edgeData.labelStyle.replace('color:', 'fill:');\n    // }\n\n    edgeData.id = linkId;\n    edgeData.classes = 'flowchart-link ' + linkNameStart + ' ' + linkNameEnd;\n\n    // Add the edge to the graph\n    g.setEdge(edge.start, edge.end, edgeData, cnt);\n  });\n};\n\n/**\n * Returns the all the styles from classDef statements in the graph definition.\n *\n * @param text\n * @returns {object} ClassDef styles\n */\nexport const getClasses = function (text) {\n  log.info('Extracting classes');\n  flowDb.clear();\n  const parser = flow.parser;\n  parser.yy = flowDb;\n\n  try {\n    // Parse the graph definition\n    parser.parse(text);\n  } catch (e) {\n    return;\n  }\n\n  return flowDb.getClasses();\n};\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n *\n * @param text\n * @param id\n */\n\nexport const draw = function (text, id) {\n  log.info('Drawing flowchart');\n  flowDb.clear();\n  flowDb.setGen('gen-2');\n  const parser = flow.parser;\n  parser.yy = flowDb;\n\n  // Parse the graph definition\n  // try {\n  parser.parse(text);\n  // } catch (err) {\n  // log.debug('Parsing failed');\n  // }\n\n  // Fetch the default direction, use TD if none was found\n  let dir = flowDb.getDirection();\n  if (typeof dir === 'undefined') {\n    dir = 'TD';\n  }\n\n  const conf = getConfig().flowchart;\n  const nodeSpacing = conf.nodeSpacing || 50;\n  const rankSpacing = conf.rankSpacing || 50;\n\n  const securityLevel = getConfig().securityLevel;\n  // Handle root and document for when rendering in sandbox mode\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  // Create the input mermaid.graph\n  const g = new graphlib.Graph({\n    multigraph: true,\n    compound: true,\n  })\n    .setGraph({\n      rankdir: dir,\n      nodesep: nodeSpacing,\n      ranksep: rankSpacing,\n      marginx: 8,\n      marginy: 8,\n    })\n    .setDefaultEdgeLabel(function () {\n      return {};\n    });\n\n  let subG;\n  const subGraphs = flowDb.getSubGraphs();\n  log.info('Subgraphs - ', subGraphs);\n  for (let i = subGraphs.length - 1; i >= 0; i--) {\n    subG = subGraphs[i];\n    log.info('Subgraph - ', subG);\n    flowDb.addVertex(subG.id, subG.title, 'group', undefined, subG.classes, subG.dir);\n  }\n\n  // Fetch the vertices/nodes and edges/links from the parsed graph definition\n  const vert = flowDb.getVertices();\n\n  const edges = flowDb.getEdges();\n\n  log.info(edges);\n  let i = 0;\n  for (i = subGraphs.length - 1; i >= 0; i--) {\n    // for (let i = 0; i < subGraphs.length; i++) {\n    subG = subGraphs[i];\n\n    selectAll('cluster').append('text');\n\n    for (let j = 0; j < subG.nodes.length; j++) {\n      log.info('Setting up subgraphs', subG.nodes[j], subG.id);\n      g.setParent(subG.nodes[j], subG.id);\n    }\n  }\n  addVertices(vert, g, id, root, doc);\n  addEdges(edges, g);\n\n  // Add custom shapes\n  // flowChartShapes.addToRenderV2(addShape);\n\n  // Set up an SVG group so that we can translate the final graph.\n  const svg = root.select(`[id=\"${id}\"]`);\n  svg.attr('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n  // Adds title and description to the flow chart\n  addSVGAccessibilityFields(parser.yy, svg, id);\n\n  // Run the renderer. This is what draws the final graph.\n  const element = root.select('#' + id + ' g');\n  render(element, g, ['point', 'circle', 'cross'], 'flowchart', id);\n\n  setupGraphViewbox(g, svg, conf.diagramPadding, conf.useMaxWidth);\n\n  // Index nodes\n  flowDb.indexNodes('subGraph' + i);\n\n  // Add label rects for non html labels\n  if (!conf.htmlLabels) {\n    const labels = doc.querySelectorAll('[id=\"' + id + '\"] .edgeLabel .label');\n    for (let k = 0; k < labels.length; k++) {\n      const label = labels[k];\n\n      // Get dimensions of label\n      const dim = label.getBBox();\n\n      const rect = doc.createElementNS('http://www.w3.org/2000/svg', 'rect');\n      rect.setAttribute('rx', 0);\n      rect.setAttribute('ry', 0);\n      rect.setAttribute('width', dim.width);\n      rect.setAttribute('height', dim.height);\n\n      label.insertBefore(rect, label.firstChild);\n    }\n  }\n\n  // If node has a link, wrap it in an anchor SVG object.\n  const keys = Object.keys(vert);\n  keys.forEach(function (key) {\n    const vertex = vert[key];\n\n    if (vertex.link) {\n      const node = select('#' + id + ' [id=\"' + key + '\"]');\n      if (node) {\n        const link = doc.createElementNS('http://www.w3.org/2000/svg', 'a');\n        link.setAttributeNS('http://www.w3.org/2000/svg', 'class', vertex.classes.join(' '));\n        link.setAttributeNS('http://www.w3.org/2000/svg', 'href', vertex.link);\n        link.setAttributeNS('http://www.w3.org/2000/svg', 'rel', 'noopener');\n        if (securityLevel === 'sandbox') {\n          link.setAttributeNS('http://www.w3.org/2000/svg', 'target', '_top');\n        } else if (vertex.linkTarget) {\n          link.setAttributeNS('http://www.w3.org/2000/svg', 'target', vertex.linkTarget);\n        }\n\n        const linkNode = node.insert(function () {\n          return link;\n        }, ':first-child');\n\n        const shape = node.select('.label-container');\n        if (shape) {\n          linkNode.append(function () {\n            return shape.node();\n          });\n        }\n\n        const label = node.select('.label');\n        if (label) {\n          linkNode.append(function () {\n            return label.node();\n          });\n        }\n      }\n    }\n  });\n};\n\nexport default {\n  setConf,\n  addVertices,\n  addEdges,\n  getClasses,\n  draw,\n};\n","import graphlib from 'graphlib';\nimport { select, curveLinear, selectAll } from 'd3';\n\nimport flowDb from './flowDb';\nimport flow from './parser/flow';\nimport { getConfig } from '../../config';\n\nimport dagreD3 from 'dagre-d3';\nimport addHtmlLabel from 'dagre-d3/lib/label/add-html-label.js';\nimport { log } from '../../logger';\nimport common, { evaluate } from '../common/common';\nimport { interpolateToCurve, getStylesFromArray, setupGraphViewbox } from '../../utils';\nimport flowChartShapes from './flowChartShapes';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nconst conf = {};\nexport const setConf = function (cnf) {\n  const keys = Object.keys(cnf);\n  for (let i = 0; i < keys.length; i++) {\n    conf[keys[i]] = cnf[keys[i]];\n  }\n};\n\n/**\n * Function that adds the vertices found in the graph definition to the graph to be rendered.\n *\n * @param vert Object containing the vertices.\n * @param g The graph that is to be drawn.\n * @param svgId\n * @param root\n * @param doc\n * @param _doc\n */\nexport const addVertices = function (vert, g, svgId, root, _doc) {\n  const securityLevel = getConfig().securityLevel;\n\n  const svg = !root ? select(`[id=\"${svgId}\"]`) : root.select(`[id=\"${svgId}\"]`);\n  const doc = !_doc ? document : _doc;\n  const keys = Object.keys(vert);\n\n  // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition\n  keys.forEach(function (id) {\n    const vertex = vert[id];\n\n    /**\n     * Variable for storing the classes for the vertex\n     *\n     * @type {string}\n     */\n    let classStr = 'default';\n    if (vertex.classes.length > 0) {\n      classStr = vertex.classes.join(' ');\n    }\n\n    const styles = getStylesFromArray(vertex.styles);\n\n    // Use vertex id as text in the box if no text is provided by the graph definition\n    let vertexText = vertex.text !== undefined ? vertex.text : vertex.id;\n\n    // We create a SVG label, either by delegating to addHtmlLabel or manually\n    let vertexNode;\n    if (evaluate(getConfig().flowchart.htmlLabels)) {\n      // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that?\n      const node = {\n        label: vertexText.replace(\n          /fa[lrsb]?:fa-[\\w-]+/g,\n          (s) => `<i class='${s.replace(':', ' ')}'></i>`\n        ),\n      };\n      vertexNode = addHtmlLabel(svg, node).node();\n      vertexNode.parentNode.removeChild(vertexNode);\n    } else {\n      const svgLabel = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n      svgLabel.setAttribute('style', styles.labelStyle.replace('color:', 'fill:'));\n\n      const rows = vertexText.split(common.lineBreakRegex);\n\n      for (let j = 0; j < rows.length; j++) {\n        const tspan = doc.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n        tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n        tspan.setAttribute('dy', '1em');\n        tspan.setAttribute('x', '1');\n        tspan.textContent = rows[j];\n        svgLabel.appendChild(tspan);\n      }\n      vertexNode = svgLabel;\n    }\n\n    let radious = 0;\n    let _shape = '';\n    // Set the shape based parameters\n    switch (vertex.type) {\n      case 'round':\n        radious = 5;\n        _shape = 'rect';\n        break;\n      case 'square':\n        _shape = 'rect';\n        break;\n      case 'diamond':\n        _shape = 'question';\n        break;\n      case 'hexagon':\n        _shape = 'hexagon';\n        break;\n      case 'odd':\n        _shape = 'rect_left_inv_arrow';\n        break;\n      case 'lean_right':\n        _shape = 'lean_right';\n        break;\n      case 'lean_left':\n        _shape = 'lean_left';\n        break;\n      case 'trapezoid':\n        _shape = 'trapezoid';\n        break;\n      case 'inv_trapezoid':\n        _shape = 'inv_trapezoid';\n        break;\n      case 'odd_right':\n        _shape = 'rect_left_inv_arrow';\n        break;\n      case 'circle':\n        _shape = 'circle';\n        break;\n      case 'ellipse':\n        _shape = 'ellipse';\n        break;\n      case 'stadium':\n        _shape = 'stadium';\n        break;\n      case 'subroutine':\n        _shape = 'subroutine';\n        break;\n      case 'cylinder':\n        _shape = 'cylinder';\n        break;\n      case 'group':\n        _shape = 'rect';\n        break;\n      default:\n        _shape = 'rect';\n    }\n    // Add the node\n    log.warn('Adding node', vertex.id, vertex.domId);\n    g.setNode(flowDb.lookUpDomId(vertex.id), {\n      labelType: 'svg',\n      labelStyle: styles.labelStyle,\n      shape: _shape,\n      label: vertexNode,\n      rx: radious,\n      ry: radious,\n      class: classStr,\n      style: styles.style,\n      id: flowDb.lookUpDomId(vertex.id),\n    });\n  });\n};\n\n/**\n * Add edges to graph based on parsed graph definition\n *\n * @param {object} edges The edges to add to the graph\n * @param {object} g The graph object\n */\nexport const addEdges = function (edges, g) {\n  let cnt = 0;\n\n  let defaultStyle;\n  let defaultLabelStyle;\n\n  if (typeof edges.defaultStyle !== 'undefined') {\n    const defaultStyles = getStylesFromArray(edges.defaultStyle);\n    defaultStyle = defaultStyles.style;\n    defaultLabelStyle = defaultStyles.labelStyle;\n  }\n\n  edges.forEach(function (edge) {\n    cnt++;\n\n    // Identify Link\n    var linkId = 'L-' + edge.start + '-' + edge.end;\n    var linkNameStart = 'LS-' + edge.start;\n    var linkNameEnd = 'LE-' + edge.end;\n\n    const edgeData = {};\n\n    // Set link type for rendering\n    if (edge.type === 'arrow_open') {\n      edgeData.arrowhead = 'none';\n    } else {\n      edgeData.arrowhead = 'normal';\n    }\n\n    let style = '';\n    let labelStyle = '';\n\n    if (typeof edge.style !== 'undefined') {\n      const styles = getStylesFromArray(edge.style);\n      style = styles.style;\n      labelStyle = styles.labelStyle;\n    } else {\n      switch (edge.stroke) {\n        case 'normal':\n          style = 'fill:none';\n          if (typeof defaultStyle !== 'undefined') {\n            style = defaultStyle;\n          }\n          if (typeof defaultLabelStyle !== 'undefined') {\n            labelStyle = defaultLabelStyle;\n          }\n          break;\n        case 'dotted':\n          style = 'fill:none;stroke-width:2px;stroke-dasharray:3;';\n          break;\n        case 'thick':\n          style = ' stroke-width: 3.5px;fill:none';\n          break;\n      }\n    }\n\n    edgeData.style = style;\n    edgeData.labelStyle = labelStyle;\n\n    if (typeof edge.interpolate !== 'undefined') {\n      edgeData.curve = interpolateToCurve(edge.interpolate, curveLinear);\n    } else if (typeof edges.defaultInterpolate !== 'undefined') {\n      edgeData.curve = interpolateToCurve(edges.defaultInterpolate, curveLinear);\n    } else {\n      edgeData.curve = interpolateToCurve(conf.curve, curveLinear);\n    }\n\n    if (typeof edge.text === 'undefined') {\n      if (typeof edge.style !== 'undefined') {\n        edgeData.arrowheadStyle = 'fill: #333';\n      }\n    } else {\n      edgeData.arrowheadStyle = 'fill: #333';\n      edgeData.labelpos = 'c';\n\n      if (evaluate(getConfig().flowchart.htmlLabels)) {\n        edgeData.labelType = 'html';\n        edgeData.label = `<span id=\"L-${linkId}\" class=\"edgeLabel L-${linkNameStart}' L-${linkNameEnd}\" style=\"${\n          edgeData.labelStyle\n        }\">${edge.text.replace(\n          /fa[lrsb]?:fa-[\\w-]+/g,\n          (s) => `<i class='${s.replace(':', ' ')}'></i>`\n        )}</span>`;\n      } else {\n        edgeData.labelType = 'text';\n        edgeData.label = edge.text.replace(common.lineBreakRegex, '\\n');\n\n        if (typeof edge.style === 'undefined') {\n          edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none';\n        }\n\n        edgeData.labelStyle = edgeData.labelStyle.replace('color:', 'fill:');\n      }\n    }\n\n    edgeData.id = linkId;\n    edgeData.class = linkNameStart + ' ' + linkNameEnd;\n    edgeData.minlen = edge.length || 1;\n\n    // Add the edge to the graph\n    g.setEdge(flowDb.lookUpDomId(edge.start), flowDb.lookUpDomId(edge.end), edgeData, cnt);\n  });\n};\n\n/**\n * Returns the all the styles from classDef statements in the graph definition.\n *\n * @param text\n * @returns {object} ClassDef styles\n */\nexport const getClasses = function (text) {\n  log.info('Extracting classes');\n  flowDb.clear();\n  try {\n    const parser = flow.parser;\n    parser.yy = flowDb;\n\n    // Parse the graph definition\n    parser.parse(text);\n    return flowDb.getClasses();\n  } catch (e) {\n    return;\n  }\n};\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n *\n * @param text\n * @param id\n */\nexport const draw = function (text, id) {\n  log.info('Drawing flowchart');\n  flowDb.clear();\n  flowDb.setGen('gen-1');\n  const parser = flow.parser;\n  parser.yy = flowDb;\n\n  const securityLevel = getConfig().securityLevel;\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  // Parse the graph definition\n  // try {\n  parser.parse(text);\n  // } catch (err) {\n  // log.debug('Parsing failed');\n  // }\n\n  // Fetch the default direction, use TD if none was found\n  let dir = flowDb.getDirection();\n  if (typeof dir === 'undefined') {\n    dir = 'TD';\n  }\n\n  const conf = getConfig().flowchart;\n  const nodeSpacing = conf.nodeSpacing || 50;\n  const rankSpacing = conf.rankSpacing || 50;\n\n  // Create the input mermaid.graph\n  const g = new graphlib.Graph({\n    multigraph: true,\n    compound: true,\n  })\n    .setGraph({\n      rankdir: dir,\n      nodesep: nodeSpacing,\n      ranksep: rankSpacing,\n      marginx: 8,\n      marginy: 8,\n    })\n    .setDefaultEdgeLabel(function () {\n      return {};\n    });\n\n  let subG;\n  const subGraphs = flowDb.getSubGraphs();\n  for (let i = subGraphs.length - 1; i >= 0; i--) {\n    subG = subGraphs[i];\n    flowDb.addVertex(subG.id, subG.title, 'group', undefined, subG.classes);\n  }\n\n  // Fetch the vertices/nodes and edges/links from the parsed graph definition\n  const vert = flowDb.getVertices();\n  log.warn('Get vertices', vert);\n\n  const edges = flowDb.getEdges();\n\n  let i = 0;\n  for (i = subGraphs.length - 1; i >= 0; i--) {\n    subG = subGraphs[i];\n\n    selectAll('cluster').append('text');\n\n    for (let j = 0; j < subG.nodes.length; j++) {\n      log.warn(\n        'Setting subgraph',\n        subG.nodes[j],\n        flowDb.lookUpDomId(subG.nodes[j]),\n        flowDb.lookUpDomId(subG.id)\n      );\n      g.setParent(flowDb.lookUpDomId(subG.nodes[j]), flowDb.lookUpDomId(subG.id));\n    }\n  }\n  addVertices(vert, g, id, root, doc);\n  addEdges(edges, g);\n\n  // Create the renderer\n  const Render = dagreD3.render;\n  const render = new Render();\n\n  // Add custom shapes\n  flowChartShapes.addToRender(render);\n\n  // Add our custom arrow - an empty arrowhead\n  render.arrows().none = function normal(parent, id, edge, type) {\n    const marker = parent\n      .append('marker')\n      .attr('id', id)\n      .attr('viewBox', '0 0 10 10')\n      .attr('refX', 9)\n      .attr('refY', 5)\n      .attr('markerUnits', 'strokeWidth')\n      .attr('markerWidth', 8)\n      .attr('markerHeight', 6)\n      .attr('orient', 'auto');\n\n    const path = marker.append('path').attr('d', 'M 0 0 L 0 0 L 0 0 z');\n    dagreD3.util.applyStyle(path, edge[type + 'Style']);\n  };\n\n  // Override normal arrowhead defined in d3. Remove style & add class to allow css styling.\n  render.arrows().normal = function normal(parent, id) {\n    const marker = parent\n      .append('marker')\n      .attr('id', id)\n      .attr('viewBox', '0 0 10 10')\n      .attr('refX', 9)\n      .attr('refY', 5)\n      .attr('markerUnits', 'strokeWidth')\n      .attr('markerWidth', 8)\n      .attr('markerHeight', 6)\n      .attr('orient', 'auto');\n\n    marker\n      .append('path')\n      .attr('d', 'M 0 0 L 10 5 L 0 10 z')\n      .attr('class', 'arrowheadPath')\n      .style('stroke-width', 1)\n      .style('stroke-dasharray', '1,0');\n  };\n\n  // Set up an SVG group so that we can translate the final graph.\n  const svg = root.select(`[id=\"${id}\"]`);\n  svg.attr('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n  // Adds title and description to the flow chart\n  addSVGAccessibilityFields(parser.yy, svg, id);\n\n  // Run the renderer. This is what draws the final graph.\n  const element = root.select('#' + id + ' g');\n  render(element, g);\n\n  element.selectAll('g.node').attr('title', function () {\n    return flowDb.getTooltip(this.id);\n  });\n\n  // Index nodes\n  flowDb.indexNodes('subGraph' + i);\n\n  // reposition labels\n  for (i = 0; i < subGraphs.length; i++) {\n    subG = subGraphs[i];\n    if (subG.title !== 'undefined') {\n      const clusterRects = doc.querySelectorAll(\n        '#' + id + ' [id=\"' + flowDb.lookUpDomId(subG.id) + '\"] rect'\n      );\n      const clusterEl = doc.querySelectorAll(\n        '#' + id + ' [id=\"' + flowDb.lookUpDomId(subG.id) + '\"]'\n      );\n\n      const xPos = clusterRects[0].x.baseVal.value;\n      const yPos = clusterRects[0].y.baseVal.value;\n      const _width = clusterRects[0].width.baseVal.value;\n      const cluster = select(clusterEl[0]);\n      const te = cluster.select('.label');\n      te.attr('transform', `translate(${xPos + _width / 2}, ${yPos + 14})`);\n      te.attr('id', id + 'Text');\n\n      for (let j = 0; j < subG.classes.length; j++) {\n        clusterEl[0].classList.add(subG.classes[j]);\n      }\n    }\n  }\n\n  // Add label rects for non html labels\n  if (!evaluate(conf.htmlLabels) || true) { // eslint-disable-line\n    const labels = doc.querySelectorAll('[id=\"' + id + '\"] .edgeLabel .label');\n    for (let k = 0; k < labels.length; k++) {\n      const label = labels[k];\n\n      // Get dimensions of label\n      const dim = label.getBBox();\n\n      const rect = doc.createElementNS('http://www.w3.org/2000/svg', 'rect');\n      rect.setAttribute('rx', 0);\n      rect.setAttribute('ry', 0);\n      rect.setAttribute('width', dim.width);\n      rect.setAttribute('height', dim.height);\n      // rect.setAttribute('style', 'fill:#e8e8e8;');\n\n      label.insertBefore(rect, label.firstChild);\n    }\n  }\n  setupGraphViewbox(g, svg, conf.diagramPadding, conf.useMaxWidth);\n\n  // If node has a link, wrap it in an anchor SVG object.\n  const keys = Object.keys(vert);\n  keys.forEach(function (key) {\n    const vertex = vert[key];\n\n    if (vertex.link) {\n      const node = root.select('#' + id + ' [id=\"' + flowDb.lookUpDomId(key) + '\"]');\n      if (node) {\n        const link = doc.createElementNS('http://www.w3.org/2000/svg', 'a');\n        link.setAttributeNS('http://www.w3.org/2000/svg', 'class', vertex.classes.join(' '));\n        link.setAttributeNS('http://www.w3.org/2000/svg', 'href', vertex.link);\n        link.setAttributeNS('http://www.w3.org/2000/svg', 'rel', 'noopener');\n        if (securityLevel === 'sandbox') {\n          link.setAttributeNS('http://www.w3.org/2000/svg', 'target', '_top');\n        } else if (vertex.linkTarget) {\n          link.setAttributeNS('http://www.w3.org/2000/svg', 'target', vertex.linkTarget);\n        }\n\n        const linkNode = node.insert(function () {\n          return link;\n        }, ':first-child');\n\n        const shape = node.select('.label-container');\n        if (shape) {\n          linkNode.append(function () {\n            return shape.node();\n          });\n        }\n\n        const label = node.select('.label');\n        if (label) {\n          linkNode.append(function () {\n            return label.node();\n          });\n        }\n      }\n    }\n  });\n};\n\nexport default {\n  setConf,\n  addVertices,\n  addEdges,\n  getClasses,\n  draw,\n};\n","/**\n * Returns the styles given options\n *\n * @param {{\n *   fontFamily: string;\n *   nodeTextColor: string;\n *   textColor: string;\n *   titleColor: string;\n *   mainBkg: string;\n *   nodeBorder: string;\n *   arrowheadColor: string;\n *   lineColor: string;\n *   edgeLabelBackground: string;\n *   clusterBkg: string;\n *   clusterBorder: string;\n *   tertiaryColor: string;\n *   border2: string;\n * }} options\n *   The options for the styles\n * @returns {string} The resulting styles\n */\nconst getStyles = (options) =>\n  `.label {\n    font-family: ${options.fontFamily};\n    color: ${options.nodeTextColor || options.textColor};\n  }\n  .cluster-label text {\n    fill: ${options.titleColor};\n  }\n  .cluster-label span {\n    color: ${options.titleColor};\n  }\n\n  .label text,span {\n    fill: ${options.nodeTextColor || options.textColor};\n    color: ${options.nodeTextColor || options.textColor};\n  }\n\n  .node rect,\n  .node circle,\n  .node ellipse,\n  .node polygon,\n  .node path {\n    fill: ${options.mainBkg};\n    stroke: ${options.nodeBorder};\n    stroke-width: 1px;\n  }\n\n  .node .label {\n    text-align: center;\n  }\n  .node.clickable {\n    cursor: pointer;\n  }\n\n  .arrowheadPath {\n    fill: ${options.arrowheadColor};\n  }\n\n  .edgePath .path {\n    stroke: ${options.lineColor};\n    stroke-width: 2.0px;\n  }\n\n  .flowchart-link {\n    stroke: ${options.lineColor};\n    fill: none;\n  }\n\n  .edgeLabel {\n    background-color: ${options.edgeLabelBackground};\n    rect {\n      opacity: 0.5;\n      background-color: ${options.edgeLabelBackground};\n      fill: ${options.edgeLabelBackground};\n    }\n    text-align: center;\n  }\n\n  .cluster rect {\n    fill: ${options.clusterBkg};\n    stroke: ${options.clusterBorder};\n    stroke-width: 1px;\n  }\n\n  .cluster text {\n    fill: ${options.titleColor};\n  }\n\n  .cluster span {\n    color: ${options.titleColor};\n  }\n  /* .cluster div {\n    color: ${options.titleColor};\n  } */\n\n  div.mermaidTooltip {\n    position: absolute;\n    text-align: center;\n    max-width: 200px;\n    padding: 2px;\n    font-family: ${options.fontFamily};\n    font-size: 12px;\n    background: ${options.tertiaryColor};\n    border: 1px solid ${options.border2};\n    border-radius: 2px;\n    pointer-events: none;\n    z-index: 100;\n  }\n`;\n\nexport default getStyles;\n","import moment from 'moment-mini';\nimport { sanitizeUrl } from '@braintree/sanitize-url';\nimport { log } from '../../logger';\nimport * as configApi from '../../config';\nimport utils from '../../utils';\nimport mermaidAPI from '../../mermaidAPI';\nimport common from '../common/common';\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n  setDiagramTitle,\n  getDiagramTitle,\n} from '../../commonDb';\n\nlet dateFormat = '';\nlet axisFormat = '';\nlet todayMarker = '';\nlet includes = [];\nlet excludes = [];\nlet links = {};\nlet title = '';\nlet accDescription = '';\nlet sections = [];\nlet tasks = [];\nlet currentSection = '';\nconst tags = ['active', 'done', 'crit', 'milestone'];\nlet funs = [];\nlet inclusiveEndDates = false;\nlet topAxis = false;\n\n// The serial order of the task in the script\nlet lastOrder = 0;\n\nconst sanitizeText = function (txt) {\n  return common.sanitizeText(txt, configApi.getConfig());\n};\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\nexport const clear = function () {\n  sections = [];\n  tasks = [];\n  currentSection = '';\n  funs = [];\n  title = '';\n  taskCnt = 0;\n  lastTask = undefined;\n  lastTaskID = undefined;\n  rawTasks = [];\n  dateFormat = '';\n  axisFormat = '';\n  todayMarker = '';\n  includes = [];\n  excludes = [];\n  inclusiveEndDates = false;\n  topAxis = false;\n  lastOrder = 0;\n  links = {};\n  commonClear();\n};\n\nexport const setAxisFormat = function (txt) {\n  axisFormat = txt;\n};\n\nexport const getAxisFormat = function () {\n  return axisFormat;\n};\n\nexport const setTodayMarker = function (txt) {\n  todayMarker = txt;\n};\n\nexport const getTodayMarker = function () {\n  return todayMarker;\n};\n\nexport const setDateFormat = function (txt) {\n  dateFormat = txt;\n};\n\nexport const enableInclusiveEndDates = function () {\n  inclusiveEndDates = true;\n};\n\nexport const endDatesAreInclusive = function () {\n  return inclusiveEndDates;\n};\n\nexport const enableTopAxis = function () {\n  topAxis = true;\n};\n\nexport const topAxisEnabled = function () {\n  return topAxis;\n};\n\nexport const getDateFormat = function () {\n  return dateFormat;\n};\n\nexport const setIncludes = function (txt) {\n  includes = txt.toLowerCase().split(/[\\s,]+/);\n};\n\nexport const getIncludes = function () {\n  return includes;\n};\nexport const setExcludes = function (txt) {\n  excludes = txt.toLowerCase().split(/[\\s,]+/);\n};\n\nexport const getExcludes = function () {\n  return excludes;\n};\n\nexport const getLinks = function () {\n  return links;\n};\n\nexport const addSection = function (txt) {\n  currentSection = txt;\n  sections.push(txt);\n};\n\nexport const getSections = function () {\n  return sections;\n};\n\nexport const getTasks = function () {\n  let allItemsPricessed = compileTasks();\n  const maxDepth = 10;\n  let iterationCount = 0;\n  while (!allItemsPricessed && iterationCount < maxDepth) {\n    allItemsPricessed = compileTasks();\n    iterationCount++;\n  }\n\n  tasks = rawTasks;\n\n  return tasks;\n};\n\nexport const isInvalidDate = function (date, dateFormat, excludes, includes) {\n  if (includes.indexOf(date.format(dateFormat.trim())) >= 0) {\n    return false;\n  }\n  if (date.isoWeekday() >= 6 && excludes.indexOf('weekends') >= 0) {\n    return true;\n  }\n  if (excludes.indexOf(date.format('dddd').toLowerCase()) >= 0) {\n    return true;\n  }\n  return excludes.indexOf(date.format(dateFormat.trim())) >= 0;\n};\n\nconst checkTaskDates = function (task, dateFormat, excludes, includes) {\n  if (!excludes.length || task.manualEndTime) return;\n  let startTime = moment(task.startTime, dateFormat, true);\n  startTime.add(1, 'd');\n  let endTime = moment(task.endTime, dateFormat, true);\n  let renderEndTime = fixTaskDates(startTime, endTime, dateFormat, excludes, includes);\n  task.endTime = endTime.toDate();\n  task.renderEndTime = renderEndTime;\n};\n\nconst fixTaskDates = function (startTime, endTime, dateFormat, excludes, includes) {\n  let invalid = false;\n  let renderEndTime = null;\n  while (startTime <= endTime) {\n    if (!invalid) {\n      renderEndTime = endTime.toDate();\n    }\n    invalid = isInvalidDate(startTime, dateFormat, excludes, includes);\n    if (invalid) {\n      endTime.add(1, 'd');\n    }\n    startTime.add(1, 'd');\n  }\n  return renderEndTime;\n};\n\nconst getStartDate = function (prevTime, dateFormat, str) {\n  str = str.trim();\n\n  // Test for after\n  const re = /^after\\s+([\\d\\w- ]+)/;\n  const afterStatement = re.exec(str.trim());\n\n  if (afterStatement !== null) {\n    // check all after ids and take the latest\n    let latestEndingTask = null;\n    afterStatement[1].split(' ').forEach(function (id) {\n      let task = findTaskById(id);\n      if (typeof task !== 'undefined') {\n        if (!latestEndingTask) {\n          latestEndingTask = task;\n        } else {\n          if (task.endTime > latestEndingTask.endTime) {\n            latestEndingTask = task;\n          }\n        }\n      }\n    });\n\n    if (!latestEndingTask) {\n      const dt = new Date();\n      dt.setHours(0, 0, 0, 0);\n      return dt;\n    } else {\n      return latestEndingTask.endTime;\n    }\n  }\n\n  // Check for actual date set\n  let mDate = moment(str, dateFormat.trim(), true);\n  if (mDate.isValid()) {\n    return mDate.toDate();\n  } else {\n    log.debug('Invalid date:' + str);\n    log.debug('With date format:' + dateFormat.trim());\n  }\n\n  // Default date - now\n  return new Date();\n};\n\nconst durationToDate = function (durationStatement, relativeTime) {\n  if (durationStatement !== null) {\n    switch (durationStatement[2]) {\n      case 's':\n        relativeTime.add(durationStatement[1], 'seconds');\n        break;\n      case 'm':\n        relativeTime.add(durationStatement[1], 'minutes');\n        break;\n      case 'h':\n        relativeTime.add(durationStatement[1], 'hours');\n        break;\n      case 'd':\n        relativeTime.add(durationStatement[1], 'days');\n        break;\n      case 'w':\n        relativeTime.add(durationStatement[1], 'weeks');\n        break;\n    }\n  }\n  // Default date - now\n  return relativeTime.toDate();\n};\n\nconst getEndDate = function (prevTime, dateFormat, str, inclusive) {\n  inclusive = inclusive || false;\n  str = str.trim();\n\n  // Check for actual date\n  let mDate = moment(str, dateFormat.trim(), true);\n  if (mDate.isValid()) {\n    if (inclusive) {\n      mDate.add(1, 'd');\n    }\n    return mDate.toDate();\n  }\n\n  return durationToDate(/^([\\d]+)([wdhms])/.exec(str.trim()), moment(prevTime));\n};\n\nlet taskCnt = 0;\nconst parseId = function (idStr) {\n  if (typeof idStr === 'undefined') {\n    taskCnt = taskCnt + 1;\n    return 'task' + taskCnt;\n  }\n  return idStr;\n};\n// id, startDate, endDate\n// id, startDate, length\n// id, after x, endDate\n// id, after x, length\n// startDate, endDate\n// startDate, length\n// after x, endDate\n// after x, length\n// endDate\n// length\n\nconst compileData = function (prevTask, dataStr) {\n  let ds;\n\n  if (dataStr.substr(0, 1) === ':') {\n    ds = dataStr.substr(1, dataStr.length);\n  } else {\n    ds = dataStr;\n  }\n\n  const data = ds.split(',');\n\n  const task = {};\n\n  // Get tags like active, done, crit and milestone\n  getTaskTags(data, task, tags);\n\n  for (let i = 0; i < data.length; i++) {\n    data[i] = data[i].trim();\n  }\n\n  let endTimeData = '';\n  switch (data.length) {\n    case 1:\n      task.id = parseId();\n      task.startTime = prevTask.endTime;\n      endTimeData = data[0];\n      break;\n    case 2:\n      task.id = parseId();\n      task.startTime = getStartDate(undefined, dateFormat, data[0]);\n      endTimeData = data[1];\n      break;\n    case 3:\n      task.id = parseId(data[0]);\n      task.startTime = getStartDate(undefined, dateFormat, data[1]);\n      endTimeData = data[2];\n      break;\n    default:\n  }\n\n  if (endTimeData) {\n    task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates);\n    task.manualEndTime = moment(endTimeData, 'YYYY-MM-DD', true).isValid();\n    checkTaskDates(task, dateFormat, excludes, includes);\n  }\n\n  return task;\n};\n\nconst parseData = function (prevTaskId, dataStr) {\n  let ds;\n  if (dataStr.substr(0, 1) === ':') {\n    ds = dataStr.substr(1, dataStr.length);\n  } else {\n    ds = dataStr;\n  }\n\n  const data = ds.split(',');\n\n  const task = {};\n\n  // Get tags like active, done, crit and milestone\n  getTaskTags(data, task, tags);\n\n  for (let i = 0; i < data.length; i++) {\n    data[i] = data[i].trim();\n  }\n\n  switch (data.length) {\n    case 1:\n      task.id = parseId();\n      task.startTime = {\n        type: 'prevTaskEnd',\n        id: prevTaskId,\n      };\n      task.endTime = {\n        data: data[0],\n      };\n      break;\n    case 2:\n      task.id = parseId();\n      task.startTime = {\n        type: 'getStartDate',\n        startData: data[0],\n      };\n      task.endTime = {\n        data: data[1],\n      };\n      break;\n    case 3:\n      task.id = parseId(data[0]);\n      task.startTime = {\n        type: 'getStartDate',\n        startData: data[1],\n      };\n      task.endTime = {\n        data: data[2],\n      };\n      break;\n    default:\n  }\n\n  return task;\n};\n\nlet lastTask;\nlet lastTaskID;\nlet rawTasks = [];\nconst taskDb = {};\nexport const addTask = function (descr, data) {\n  const rawTask = {\n    section: currentSection,\n    type: currentSection,\n    processed: false,\n    manualEndTime: false,\n    renderEndTime: null,\n    raw: { data: data },\n    task: descr,\n    classes: [],\n  };\n  const taskInfo = parseData(lastTaskID, data);\n  rawTask.raw.startTime = taskInfo.startTime;\n  rawTask.raw.endTime = taskInfo.endTime;\n  rawTask.id = taskInfo.id;\n  rawTask.prevTaskId = lastTaskID;\n  rawTask.active = taskInfo.active;\n  rawTask.done = taskInfo.done;\n  rawTask.crit = taskInfo.crit;\n  rawTask.milestone = taskInfo.milestone;\n  rawTask.order = lastOrder;\n\n  lastOrder++;\n\n  const pos = rawTasks.push(rawTask);\n\n  lastTaskID = rawTask.id;\n  // Store cross ref\n  taskDb[rawTask.id] = pos - 1;\n};\n\nexport const findTaskById = function (id) {\n  const pos = taskDb[id];\n  return rawTasks[pos];\n};\n\nexport const addTaskOrg = function (descr, data) {\n  const newTask = {\n    section: currentSection,\n    type: currentSection,\n    description: descr,\n    task: descr,\n    classes: [],\n  };\n  const taskInfo = compileData(lastTask, data);\n  newTask.startTime = taskInfo.startTime;\n  newTask.endTime = taskInfo.endTime;\n  newTask.id = taskInfo.id;\n  newTask.active = taskInfo.active;\n  newTask.done = taskInfo.done;\n  newTask.crit = taskInfo.crit;\n  newTask.milestone = taskInfo.milestone;\n  lastTask = newTask;\n  tasks.push(newTask);\n};\n\nconst compileTasks = function () {\n  const compileTask = function (pos) {\n    const task = rawTasks[pos];\n    let startTime = '';\n    switch (rawTasks[pos].raw.startTime.type) {\n      case 'prevTaskEnd': {\n        const prevTask = findTaskById(task.prevTaskId);\n        task.startTime = prevTask.endTime;\n        break;\n      }\n      case 'getStartDate':\n        startTime = getStartDate(undefined, dateFormat, rawTasks[pos].raw.startTime.startData);\n        if (startTime) {\n          rawTasks[pos].startTime = startTime;\n        }\n        break;\n    }\n\n    if (rawTasks[pos].startTime) {\n      rawTasks[pos].endTime = getEndDate(\n        rawTasks[pos].startTime,\n        dateFormat,\n        rawTasks[pos].raw.endTime.data,\n        inclusiveEndDates\n      );\n      if (rawTasks[pos].endTime) {\n        rawTasks[pos].processed = true;\n        rawTasks[pos].manualEndTime = moment(\n          rawTasks[pos].raw.endTime.data,\n          'YYYY-MM-DD',\n          true\n        ).isValid();\n        checkTaskDates(rawTasks[pos], dateFormat, excludes, includes);\n      }\n    }\n\n    return rawTasks[pos].processed;\n  };\n\n  let allProcessed = true;\n  for (let i = 0; i < rawTasks.length; i++) {\n    compileTask(i);\n\n    allProcessed = allProcessed && rawTasks[i].processed;\n  }\n  return allProcessed;\n};\n\n/**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n *\n * @param ids Comma separated list of ids\n * @param _linkStr URL to create a link for\n */\nexport const setLink = function (ids, _linkStr) {\n  let linkStr = _linkStr;\n  if (configApi.getConfig().securityLevel !== 'loose') {\n    linkStr = sanitizeUrl(_linkStr);\n  }\n  ids.split(',').forEach(function (id) {\n    let rawTask = findTaskById(id);\n    if (typeof rawTask !== 'undefined') {\n      pushFun(id, () => {\n        window.open(linkStr, '_self');\n      });\n      links[id] = linkStr;\n    }\n  });\n  setClass(ids, 'clickable');\n};\n\n/**\n * Called by parser when a special node is found, e.g. a clickable element.\n *\n * @param ids Comma separated list of ids\n * @param className Class to add\n */\nexport const setClass = function (ids, className) {\n  ids.split(',').forEach(function (id) {\n    let rawTask = findTaskById(id);\n    if (typeof rawTask !== 'undefined') {\n      rawTask.classes.push(className);\n    }\n  });\n};\n\nconst setClickFun = function (id, functionName, functionArgs) {\n  if (configApi.getConfig().securityLevel !== 'loose') {\n    return;\n  }\n  if (typeof functionName === 'undefined') {\n    return;\n  }\n\n  let argList = [];\n  if (typeof functionArgs === 'string') {\n    /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */\n    argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n    for (let i = 0; i < argList.length; i++) {\n      let item = argList[i].trim();\n      /* Removes all double quotes at the start and end of an argument */\n      /* This preserves all starting and ending whitespace inside */\n      if (item.charAt(0) === '\"' && item.charAt(item.length - 1) === '\"') {\n        item = item.substr(1, item.length - 2);\n      }\n      argList[i] = item;\n    }\n  }\n\n  /* if no arguments passed into callback, default to passing in id */\n  if (argList.length === 0) {\n    argList.push(id);\n  }\n\n  let rawTask = findTaskById(id);\n  if (typeof rawTask !== 'undefined') {\n    pushFun(id, () => {\n      utils.runFunc(functionName, ...argList);\n    });\n  }\n};\n\n/**\n * The callbackFunction is executed in a click event bound to the task with the specified id or the\n * task's assigned text\n *\n * @param id The task's id\n * @param callbackFunction A function to be executed when clicked on the task or the task's text\n */\nconst pushFun = function (id, callbackFunction) {\n  funs.push(function () {\n    // const elem = d3.select(element).select(`[id=\"${id}\"]`)\n    const elem = document.querySelector(`[id=\"${id}\"]`);\n    if (elem !== null) {\n      elem.addEventListener('click', function () {\n        callbackFunction();\n      });\n    }\n  });\n  funs.push(function () {\n    // const elem = d3.select(element).select(`[id=\"${id}-text\"]`)\n    const elem = document.querySelector(`[id=\"${id}-text\"]`);\n    if (elem !== null) {\n      elem.addEventListener('click', function () {\n        callbackFunction();\n      });\n    }\n  });\n};\n\n/**\n * Called by parser when a click definition is found. Registers an event handler.\n *\n * @param ids Comma separated list of ids\n * @param functionName Function to be called on click\n * @param functionArgs Function args the function should be called with\n */\nexport const setClickEvent = function (ids, functionName, functionArgs) {\n  ids.split(',').forEach(function (id) {\n    setClickFun(id, functionName, functionArgs);\n  });\n  setClass(ids, 'clickable');\n};\n\n/**\n * Binds all functions previously added to fun (specified through click) to the element\n *\n * @param element\n */\nexport const bindFunctions = function (element) {\n  funs.forEach(function (fun) {\n    fun(element);\n  });\n};\n\nexport default {\n  parseDirective,\n  getConfig: () => configApi.getConfig().gantt,\n  clear,\n  setDateFormat,\n  getDateFormat,\n  enableInclusiveEndDates,\n  endDatesAreInclusive,\n  enableTopAxis,\n  topAxisEnabled,\n  setAxisFormat,\n  getAxisFormat,\n  setTodayMarker,\n  getTodayMarker,\n  setAccTitle,\n  getAccTitle,\n  setDiagramTitle,\n  getDiagramTitle,\n  setAccDescription,\n  getAccDescription,\n  addSection,\n  getSections,\n  getTasks,\n  addTask,\n  findTaskById,\n  addTaskOrg,\n  setIncludes,\n  getIncludes,\n  setExcludes,\n  getExcludes,\n  setClickEvent,\n  setLink,\n  getLinks,\n  bindFunctions,\n  durationToDate,\n  isInvalidDate,\n};\n\n/**\n * @param data\n * @param task\n * @param tags\n */\nfunction getTaskTags(data, task, tags) {\n  let matchFound = true;\n  while (matchFound) {\n    matchFound = false;\n    tags.forEach(function (t) {\n      const pattern = '^\\\\s*' + t + '\\\\s*$';\n      const regex = new RegExp(pattern);\n      if (data[0].match(regex)) {\n        task[t] = true;\n        data.shift(1);\n        matchFound = true;\n      }\n    });\n  }\n}\n","import moment from 'moment-mini';\nimport { log } from '../../logger';\nimport {\n  select,\n  scaleTime,\n  min,\n  max,\n  scaleLinear,\n  interpolateHcl,\n  axisBottom,\n  axisTop,\n  timeFormat,\n} from 'd3';\nimport { parser } from './parser/gantt';\nimport common from '../common/common';\nimport ganttDb from './ganttDb';\nimport { getConfig } from '../../config';\nimport { configureSvgSize } from '../../utils';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nparser.yy = ganttDb;\nexport const setConf = function () {\n  log.debug('Something is calling, setConf, remove the call');\n};\n\nlet w;\nexport const draw = function (text, id) {\n  const conf = getConfig().gantt;\n  parser.yy.clear();\n  parser.parse(text);\n\n  const securityLevel = getConfig().securityLevel;\n  // Handle root and Document for when rendering in sanbox mode\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  const elem = doc.getElementById(id);\n  w = elem.parentElement.offsetWidth;\n\n  if (typeof w === 'undefined') {\n    w = 1200;\n  }\n\n  if (typeof conf.useWidth !== 'undefined') {\n    w = conf.useWidth;\n  }\n\n  const taskArray = parser.yy.getTasks();\n\n  // Set height based on number of tasks\n  const h = taskArray.length * (conf.barHeight + conf.barGap) + 2 * conf.topPadding;\n\n  // Set viewBox\n  elem.setAttribute('viewBox', '0 0 ' + w + ' ' + h);\n  const svg = root.select(`[id=\"${id}\"]`);\n\n  // Set timescale\n  const timeScale = scaleTime()\n    .domain([\n      min(taskArray, function (d) {\n        return d.startTime;\n      }),\n      max(taskArray, function (d) {\n        return d.endTime;\n      }),\n    ])\n    .rangeRound([0, w - conf.leftPadding - conf.rightPadding]);\n\n  let categories = [];\n\n  for (let i = 0; i < taskArray.length; i++) {\n    categories.push(taskArray[i].type);\n  }\n\n  const catsUnfiltered = categories; // for vert labels\n\n  categories = checkUnique(categories);\n\n  /**\n   * @param a\n   * @param b\n   */\n  function taskCompare(a, b) {\n    const taskA = a.startTime;\n    const taskB = b.startTime;\n    let result = 0;\n    if (taskA > taskB) {\n      result = 1;\n    } else if (taskA < taskB) {\n      result = -1;\n    }\n    return result;\n  }\n\n  // Sort the task array using the above taskCompare() so that\n  // tasks are created based on their order of startTime\n  taskArray.sort(taskCompare);\n\n  makeGant(taskArray, w, h);\n\n  configureSvgSize(svg, h, w, conf.useMaxWidth);\n\n  svg\n    .append('text')\n    .text(parser.yy.getDiagramTitle())\n    .attr('x', w / 2)\n    .attr('y', conf.titleTopMargin)\n    .attr('class', 'titleText');\n\n  addSVGAccessibilityFields(parser.yy, svg, id);\n\n  /**\n   * @param tasks\n   * @param pageWidth\n   * @param pageHeight\n   */\n  function makeGant(tasks, pageWidth, pageHeight) {\n    const barHeight = conf.barHeight;\n    const gap = barHeight + conf.barGap;\n    const topPadding = conf.topPadding;\n    const leftPadding = conf.leftPadding;\n\n    const colorScale = scaleLinear()\n      .domain([0, categories.length])\n      .range(['#00B9FA', '#F95002'])\n      .interpolate(interpolateHcl);\n\n    drawExcludeDays(\n      gap,\n      topPadding,\n      leftPadding,\n      pageWidth,\n      pageHeight,\n      tasks,\n      parser.yy.getExcludes(),\n      parser.yy.getIncludes()\n    );\n    makeGrid(leftPadding, topPadding, pageWidth, pageHeight);\n    drawRects(tasks, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight);\n    vertLabels(gap, topPadding, leftPadding, barHeight, colorScale);\n    drawToday(leftPadding, topPadding, pageWidth, pageHeight);\n  }\n\n  /**\n   * @param theArray\n   * @param theGap\n   * @param theTopPad\n   * @param theSidePad\n   * @param theBarHeight\n   * @param theColorScale\n   * @param w\n   */\n  function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w) {\n    // Draw background rects covering the entire width of the graph, these form the section rows.\n    svg\n      .append('g')\n      .selectAll('rect')\n      .data(theArray)\n      .enter()\n      .append('rect')\n      .attr('x', 0)\n      .attr('y', function (d, i) {\n        // Ignore the incoming i value and use our order instead\n        i = d.order;\n        return i * theGap + theTopPad - 2;\n      })\n      .attr('width', function () {\n        return w - conf.rightPadding / 2;\n      })\n      .attr('height', theGap)\n      .attr('class', function (d) {\n        for (let i = 0; i < categories.length; i++) {\n          if (d.type === categories[i]) {\n            return 'section section' + (i % conf.numberSectionStyles);\n          }\n        }\n        return 'section section0';\n      });\n\n    // Draw the rects representing the tasks\n    const rectangles = svg.append('g').selectAll('rect').data(theArray).enter();\n\n    const links = ganttDb.getLinks();\n\n    // Render the tasks with links\n    // Render the other tasks\n    rectangles\n      .append('rect')\n      .attr('id', function (d) {\n        return d.id;\n      })\n      .attr('rx', 3)\n      .attr('ry', 3)\n      .attr('x', function (d) {\n        if (d.milestone) {\n          return (\n            timeScale(d.startTime) +\n            theSidePad +\n            0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) -\n            0.5 * theBarHeight\n          );\n        }\n        return timeScale(d.startTime) + theSidePad;\n      })\n      .attr('y', function (d, i) {\n        // Ignore the incoming i value and use our order instead\n        i = d.order;\n        return i * theGap + theTopPad;\n      })\n      .attr('width', function (d) {\n        if (d.milestone) {\n          return theBarHeight;\n        }\n        return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime);\n      })\n      .attr('height', theBarHeight)\n      .attr('transform-origin', function (d, i) {\n        // Ignore the incoming i value and use our order instead\n        i = d.order;\n\n        return (\n          (\n            timeScale(d.startTime) +\n            theSidePad +\n            0.5 * (timeScale(d.endTime) - timeScale(d.startTime))\n          ).toString() +\n          'px ' +\n          (i * theGap + theTopPad + 0.5 * theBarHeight).toString() +\n          'px'\n        );\n      })\n      .attr('class', function (d) {\n        const res = 'task';\n\n        let classStr = '';\n        if (d.classes.length > 0) {\n          classStr = d.classes.join(' ');\n        }\n\n        let secNum = 0;\n        for (let i = 0; i < categories.length; i++) {\n          if (d.type === categories[i]) {\n            secNum = i % conf.numberSectionStyles;\n          }\n        }\n\n        let taskClass = '';\n        if (d.active) {\n          if (d.crit) {\n            taskClass += ' activeCrit';\n          } else {\n            taskClass = ' active';\n          }\n        } else if (d.done) {\n          if (d.crit) {\n            taskClass = ' doneCrit';\n          } else {\n            taskClass = ' done';\n          }\n        } else {\n          if (d.crit) {\n            taskClass += ' crit';\n          }\n        }\n\n        if (taskClass.length === 0) {\n          taskClass = ' task';\n        }\n\n        if (d.milestone) {\n          taskClass = ' milestone ' + taskClass;\n        }\n\n        taskClass += secNum;\n\n        taskClass += ' ' + classStr;\n\n        return res + taskClass;\n      });\n\n    // Append task labels\n    rectangles\n      .append('text')\n      .attr('id', function (d) {\n        return d.id + '-text';\n      })\n      .text(function (d) {\n        return d.task;\n      })\n      .attr('font-size', conf.fontSize)\n      .attr('x', function (d) {\n        let startX = timeScale(d.startTime);\n        let endX = timeScale(d.renderEndTime || d.endTime);\n        if (d.milestone) {\n          startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight;\n        }\n        if (d.milestone) {\n          endX = startX + theBarHeight;\n        }\n        const textWidth = this.getBBox().width;\n\n        // Check id text width > width of rectangle\n        if (textWidth > endX - startX) {\n          if (endX + textWidth + 1.5 * conf.leftPadding > w) {\n            return startX + theSidePad - 5;\n          } else {\n            return endX + theSidePad + 5;\n          }\n        } else {\n          return (endX - startX) / 2 + startX + theSidePad;\n        }\n      })\n      .attr('y', function (d, i) {\n        // Ignore the incoming i value and use our order instead\n        i = d.order;\n        return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad;\n      })\n      .attr('text-height', theBarHeight)\n      .attr('class', function (d) {\n        const startX = timeScale(d.startTime);\n        let endX = timeScale(d.endTime);\n        if (d.milestone) {\n          endX = startX + theBarHeight;\n        }\n        const textWidth = this.getBBox().width;\n\n        let classStr = '';\n        if (d.classes.length > 0) {\n          classStr = d.classes.join(' ');\n        }\n\n        let secNum = 0;\n        for (let i = 0; i < categories.length; i++) {\n          if (d.type === categories[i]) {\n            secNum = i % conf.numberSectionStyles;\n          }\n        }\n\n        let taskType = '';\n        if (d.active) {\n          if (d.crit) {\n            taskType = 'activeCritText' + secNum;\n          } else {\n            taskType = 'activeText' + secNum;\n          }\n        }\n\n        if (d.done) {\n          if (d.crit) {\n            taskType = taskType + ' doneCritText' + secNum;\n          } else {\n            taskType = taskType + ' doneText' + secNum;\n          }\n        } else {\n          if (d.crit) {\n            taskType = taskType + ' critText' + secNum;\n          }\n        }\n\n        if (d.milestone) {\n          taskType += ' milestoneText';\n        }\n\n        // Check id text width > width of rectangle\n        if (textWidth > endX - startX) {\n          if (endX + textWidth + 1.5 * conf.leftPadding > w) {\n            return classStr + ' taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType;\n          } else {\n            return (\n              classStr +\n              ' taskTextOutsideRight taskTextOutside' +\n              secNum +\n              ' ' +\n              taskType +\n              ' width-' +\n              textWidth\n            );\n          }\n        } else {\n          return classStr + ' taskText taskText' + secNum + ' ' + taskType + ' width-' + textWidth;\n        }\n      });\n\n    const securityLevel = getConfig().securityLevel;\n\n    // Wrap the tasks in an a tag for working links without javascript\n    if (securityLevel === 'sandbox') {\n      let sandboxElement;\n      sandboxElement = select('#i' + id);\n      const root = select(sandboxElement.nodes()[0].contentDocument.body);\n      const doc = sandboxElement.nodes()[0].contentDocument;\n\n      rectangles\n        .filter(function (d) {\n          return typeof links[d.id] !== 'undefined';\n        })\n        .each(function (o) {\n          var taskRect = doc.querySelector('#' + o.id);\n          var taskText = doc.querySelector('#' + o.id + '-text');\n          const oldParent = taskRect.parentNode;\n          var Link = doc.createElement('a');\n          Link.setAttribute('xlink:href', links[o.id]);\n          Link.setAttribute('target', '_top');\n          oldParent.appendChild(Link);\n          Link.appendChild(taskRect);\n          Link.appendChild(taskText);\n        });\n    }\n  }\n  /**\n   * @param theGap\n   * @param theTopPad\n   * @param theSidePad\n   * @param w\n   * @param h\n   * @param tasks\n   * @param excludes\n   * @param includes\n   */\n  function drawExcludeDays(theGap, theTopPad, theSidePad, w, h, tasks, excludes, includes) {\n    const minTime = tasks.reduce(\n      (min, { startTime }) => (min ? Math.min(min, startTime) : startTime),\n      0\n    );\n    const maxTime = tasks.reduce((max, { endTime }) => (max ? Math.max(max, endTime) : endTime), 0);\n    const dateFormat = parser.yy.getDateFormat();\n    if (!minTime || !maxTime) return;\n\n    const excludeRanges = [];\n    let range = null;\n    let d = moment(minTime);\n    while (d.valueOf() <= maxTime) {\n      if (parser.yy.isInvalidDate(d, dateFormat, excludes, includes)) {\n        if (!range) {\n          range = {\n            start: d.clone(),\n            end: d.clone(),\n          };\n        } else {\n          range.end = d.clone();\n        }\n      } else {\n        if (range) {\n          excludeRanges.push(range);\n          range = null;\n        }\n      }\n      d.add(1, 'd');\n    }\n\n    const rectangles = svg.append('g').selectAll('rect').data(excludeRanges).enter();\n\n    rectangles\n      .append('rect')\n      .attr('id', function (d) {\n        return 'exclude-' + d.start.format('YYYY-MM-DD');\n      })\n      .attr('x', function (d) {\n        return timeScale(d.start) + theSidePad;\n      })\n      .attr('y', conf.gridLineStartPadding)\n      .attr('width', function (d) {\n        const renderEnd = d.end.clone().add(1, 'day');\n        return timeScale(renderEnd) - timeScale(d.start);\n      })\n      .attr('height', h - theTopPad - conf.gridLineStartPadding)\n      .attr('transform-origin', function (d, i) {\n        return (\n          (\n            timeScale(d.start) +\n            theSidePad +\n            0.5 * (timeScale(d.end) - timeScale(d.start))\n          ).toString() +\n          'px ' +\n          (i * theGap + 0.5 * h).toString() +\n          'px'\n        );\n      })\n      .attr('class', 'exclude-range');\n  }\n\n  /**\n   * @param theSidePad\n   * @param theTopPad\n   * @param w\n   * @param h\n   */\n  function makeGrid(theSidePad, theTopPad, w, h) {\n    let bottomXAxis = axisBottom(timeScale)\n      .tickSize(-h + theTopPad + conf.gridLineStartPadding)\n      .tickFormat(timeFormat(parser.yy.getAxisFormat() || conf.axisFormat || '%Y-%m-%d'));\n\n    svg\n      .append('g')\n      .attr('class', 'grid')\n      .attr('transform', 'translate(' + theSidePad + ', ' + (h - 50) + ')')\n      .call(bottomXAxis)\n      .selectAll('text')\n      .style('text-anchor', 'middle')\n      .attr('fill', '#000')\n      .attr('stroke', 'none')\n      .attr('font-size', 10)\n      .attr('dy', '1em');\n\n    if (ganttDb.topAxisEnabled() || conf.topAxis) {\n      let topXAxis = axisTop(timeScale)\n        .tickSize(-h + theTopPad + conf.gridLineStartPadding)\n        .tickFormat(timeFormat(parser.yy.getAxisFormat() || conf.axisFormat || '%Y-%m-%d'));\n\n      svg\n        .append('g')\n        .attr('class', 'grid')\n        .attr('transform', 'translate(' + theSidePad + ', ' + theTopPad + ')')\n        .call(topXAxis)\n        .selectAll('text')\n        .style('text-anchor', 'middle')\n        .attr('fill', '#000')\n        .attr('stroke', 'none')\n        .attr('font-size', 10);\n      // .attr('dy', '1em');\n    }\n  }\n\n  /**\n   * @param theGap\n   * @param theTopPad\n   */\n  function vertLabels(theGap, theTopPad) {\n    const numOccurances = [];\n    let prevGap = 0;\n\n    for (let i = 0; i < categories.length; i++) {\n      numOccurances[i] = [categories[i], getCount(categories[i], catsUnfiltered)];\n    }\n\n    svg\n      .append('g') // without doing this, impossible to put grid lines behind text\n      .selectAll('text')\n      .data(numOccurances)\n      .enter()\n      .append(function (d) {\n        const rows = d[0].split(common.lineBreakRegex);\n        const dy = -(rows.length - 1) / 2;\n\n        const svgLabel = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n        svgLabel.setAttribute('dy', dy + 'em');\n\n        for (let j = 0; j < rows.length; j++) {\n          const tspan = doc.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n          tspan.setAttribute('alignment-baseline', 'central');\n          tspan.setAttribute('x', '10');\n          if (j > 0) tspan.setAttribute('dy', '1em');\n          tspan.textContent = rows[j];\n          svgLabel.appendChild(tspan);\n        }\n        return svgLabel;\n      })\n      .attr('x', 10)\n      .attr('y', function (d, i) {\n        if (i > 0) {\n          for (let j = 0; j < i; j++) {\n            prevGap += numOccurances[i - 1][1];\n            return (d[1] * theGap) / 2 + prevGap * theGap + theTopPad;\n          }\n        } else {\n          return (d[1] * theGap) / 2 + theTopPad;\n        }\n      })\n      .attr('font-size', conf.sectionFontSize)\n      .attr('font-size', conf.sectionFontSize)\n      .attr('class', function (d) {\n        for (let i = 0; i < categories.length; i++) {\n          if (d[0] === categories[i]) {\n            return 'sectionTitle sectionTitle' + (i % conf.numberSectionStyles);\n          }\n        }\n        return 'sectionTitle';\n      });\n  }\n\n  /**\n   * @param theSidePad\n   * @param theTopPad\n   * @param w\n   * @param h\n   */\n  function drawToday(theSidePad, theTopPad, w, h) {\n    const todayMarker = ganttDb.getTodayMarker();\n    if (todayMarker === 'off') {\n      return;\n    }\n\n    const todayG = svg.append('g').attr('class', 'today');\n    const today = new Date();\n    const todayLine = todayG.append('line');\n\n    todayLine\n      .attr('x1', timeScale(today) + theSidePad)\n      .attr('x2', timeScale(today) + theSidePad)\n      .attr('y1', conf.titleTopMargin)\n      .attr('y2', h - conf.titleTopMargin)\n      .attr('class', 'today');\n\n    if (todayMarker !== '') {\n      todayLine.attr('style', todayMarker.replace(/,/g, ';'));\n    }\n  }\n\n  /**\n   * From this stackexchange question:\n   * http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript\n   *\n   * @param arr\n   */\n  function checkUnique(arr) {\n    const hash = {};\n    const result = [];\n    for (let i = 0, l = arr.length; i < l; ++i) {\n      if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) {\n        // eslint-disable-line\n        // it works with objects! in FF, at least\n        hash[arr[i]] = true;\n        result.push(arr[i]);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * From this stackexchange question:\n   * http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array\n   *\n   * @param arr\n   */\n  function getCounts(arr) {\n    let i = arr.length; // const to loop over\n    const obj = {}; // obj to store results\n    while (i) {\n      obj[arr[--i]] = (obj[arr[i]] || 0) + 1; // count occurrences\n    }\n    return obj;\n  }\n\n  /**\n   * Get specific from everything\n   *\n   * @param word\n   * @param arr\n   */\n  function getCount(word, arr) {\n    return getCounts(arr)[word] || 0;\n  }\n};\n\nexport default {\n  setConf,\n  draw,\n};\n","const getStyles = (options) =>\n  `\n  .mermaid-main-font {\n    font-family: \"trebuchet ms\", verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n  }\n  .exclude-range {\n    fill: ${options.excludeBkgColor};\n  }\n\n  .section {\n    stroke: none;\n    opacity: 0.2;\n  }\n\n  .section0 {\n    fill: ${options.sectionBkgColor};\n  }\n\n  .section2 {\n    fill: ${options.sectionBkgColor2};\n  }\n\n  .section1,\n  .section3 {\n    fill: ${options.altSectionBkgColor};\n    opacity: 0.2;\n  }\n\n  .sectionTitle0 {\n    fill: ${options.titleColor};\n  }\n\n  .sectionTitle1 {\n    fill: ${options.titleColor};\n  }\n\n  .sectionTitle2 {\n    fill: ${options.titleColor};\n  }\n\n  .sectionTitle3 {\n    fill: ${options.titleColor};\n  }\n\n  .sectionTitle {\n    text-anchor: start;\n    // font-size: ${options.ganttFontSize};\n    // text-height: 14px;\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n\n  }\n\n\n  /* Grid and axis */\n\n  .grid .tick {\n    stroke: ${options.gridColor};\n    opacity: 0.8;\n    shape-rendering: crispEdges;\n    text {\n      font-family: ${options.fontFamily};\n      fill: ${options.textColor};\n    }\n  }\n\n  .grid path {\n    stroke-width: 0;\n  }\n\n\n  /* Today line */\n\n  .today {\n    fill: none;\n    stroke: ${options.todayLineColor};\n    stroke-width: 2px;\n  }\n\n\n  /* Task styling */\n\n  /* Default task */\n\n  .task {\n    stroke-width: 2;\n  }\n\n  .taskText {\n    text-anchor: middle;\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n  }\n\n  // .taskText:not([font-size]) {\n  //   font-size: ${options.ganttFontSize};\n  // }\n\n  .taskTextOutsideRight {\n    fill: ${options.taskTextDarkColor};\n    text-anchor: start;\n    // font-size: ${options.ganttFontSize};\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n\n  }\n\n  .taskTextOutsideLeft {\n    fill: ${options.taskTextDarkColor};\n    text-anchor: end;\n    // font-size: ${options.ganttFontSize};\n  }\n\n  /* Special case clickable */\n  .task.clickable {\n    cursor: pointer;\n  }\n  .taskText.clickable {\n    cursor: pointer;\n    fill: ${options.taskTextClickableColor} !important;\n    font-weight: bold;\n  }\n\n  .taskTextOutsideLeft.clickable {\n    cursor: pointer;\n    fill: ${options.taskTextClickableColor} !important;\n    font-weight: bold;\n  }\n\n  .taskTextOutsideRight.clickable {\n    cursor: pointer;\n    fill: ${options.taskTextClickableColor} !important;\n    font-weight: bold;\n  }\n\n  /* Specific task settings for the sections*/\n\n  .taskText0,\n  .taskText1,\n  .taskText2,\n  .taskText3 {\n    fill: ${options.taskTextColor};\n  }\n\n  .task0,\n  .task1,\n  .task2,\n  .task3 {\n    fill: ${options.taskBkgColor};\n    stroke: ${options.taskBorderColor};\n  }\n\n  .taskTextOutside0,\n  .taskTextOutside2\n  {\n    fill: ${options.taskTextOutsideColor};\n  }\n\n  .taskTextOutside1,\n  .taskTextOutside3 {\n    fill: ${options.taskTextOutsideColor};\n  }\n\n\n  /* Active task */\n\n  .active0,\n  .active1,\n  .active2,\n  .active3 {\n    fill: ${options.activeTaskBkgColor};\n    stroke: ${options.activeTaskBorderColor};\n  }\n\n  .activeText0,\n  .activeText1,\n  .activeText2,\n  .activeText3 {\n    fill: ${options.taskTextDarkColor} !important;\n  }\n\n\n  /* Completed task */\n\n  .done0,\n  .done1,\n  .done2,\n  .done3 {\n    stroke: ${options.doneTaskBorderColor};\n    fill: ${options.doneTaskBkgColor};\n    stroke-width: 2;\n  }\n\n  .doneText0,\n  .doneText1,\n  .doneText2,\n  .doneText3 {\n    fill: ${options.taskTextDarkColor} !important;\n  }\n\n\n  /* Tasks on the critical line */\n\n  .crit0,\n  .crit1,\n  .crit2,\n  .crit3 {\n    stroke: ${options.critBorderColor};\n    fill: ${options.critBkgColor};\n    stroke-width: 2;\n  }\n\n  .activeCrit0,\n  .activeCrit1,\n  .activeCrit2,\n  .activeCrit3 {\n    stroke: ${options.critBorderColor};\n    fill: ${options.activeTaskBkgColor};\n    stroke-width: 2;\n  }\n\n  .doneCrit0,\n  .doneCrit1,\n  .doneCrit2,\n  .doneCrit3 {\n    stroke: ${options.critBorderColor};\n    fill: ${options.doneTaskBkgColor};\n    stroke-width: 2;\n    cursor: pointer;\n    shape-rendering: crispEdges;\n  }\n\n  .milestone {\n    transform: rotate(45deg) scale(0.8,0.8);\n  }\n\n  .milestoneText {\n    font-style: italic;\n  }\n  .doneCritText0,\n  .doneCritText1,\n  .doneCritText2,\n  .doneCritText3 {\n    fill: ${options.taskTextDarkColor} !important;\n  }\n\n  .activeCritText0,\n  .activeCritText1,\n  .activeCritText2,\n  .activeCritText3 {\n    fill: ${options.taskTextDarkColor} !important;\n  }\n\n  .titleText {\n    text-anchor: middle;\n    font-size: 18px;\n    fill: ${options.textColor}    ;\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n  }\n`;\n\nexport default getStyles;\n","import { log } from '../../logger';\nimport { random } from '../../utils';\nimport mermaidAPI from '../../mermaidAPI';\nimport * as configApi from '../../config';\nimport { getConfig } from '../../config';\nimport common from '../common/common';\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n} from '../../commonDb';\n\nlet mainBranchName = getConfig().gitGraph.mainBranchName;\nlet mainBranchOrder = getConfig().gitGraph.mainBranchOrder;\nlet commits = {};\nlet head = null;\nlet branchesConfig = {};\nbranchesConfig[mainBranchName] = { name: mainBranchName, order: mainBranchOrder };\nlet branches = {};\nbranches[mainBranchName] = head;\nlet curBranch = mainBranchName;\nlet direction = 'LR';\nlet seq = 0;\n\nfunction getId() {\n  // eslint-disable-line\n  return random({ length: 7 });\n}\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\n// /**\n//  * @param currentCommit\n//  * @param otherCommit\n//  */\n// function isfastforwardable(currentCommit, otherCommit) {\n//   log.debug('Entering isfastforwardable:', currentCommit.id, otherCommit.id);\n//   let cnt = 0;\n//   while (currentCommit.seq <= otherCommit.seq && currentCommit !== otherCommit && cnt < 1000) {\n//     cnt++;\n//     // only if other branch has more commits\n//     if (otherCommit.parent == null) break;\n//     if (Array.isArray(otherCommit.parent)) {\n//       log.debug('In merge commit:', otherCommit.parent);\n//       return (\n//         isfastforwardable(currentCommit, commits[otherCommit.parent[0]]) ||\n//         isfastforwardable(currentCommit, commits[otherCommit.parent[1]])\n//       );\n//     } else {\n//       otherCommit = commits[otherCommit.parent];\n//     }\n//   }\n//   log.debug(currentCommit.id, otherCommit.id);\n//   return currentCommit.id === otherCommit.id;\n// }\n\n/**\n * @param currentCommit\n * @param otherCommit\n */\n// function isReachableFrom(currentCommit, otherCommit) {\n//   const currentSeq = currentCommit.seq;\n//   const otherSeq = otherCommit.seq;\n//   if (currentSeq > otherSeq) return isfastforwardable(otherCommit, currentCommit);\n//   return false;\n// }\n\n/**\n * @param list\n * @param fn\n */\nfunction uniqBy(list, fn) {\n  const recordMap = Object.create(null);\n  return list.reduce((out, item) => {\n    const key = fn(item);\n    if (!recordMap[key]) {\n      recordMap[key] = true;\n      out.push(item);\n    }\n    return out;\n  }, []);\n}\n\nexport const setDirection = function (dir) {\n  direction = dir;\n};\nlet options = {};\nexport const setOptions = function (rawOptString) {\n  log.debug('options str', rawOptString);\n  rawOptString = rawOptString && rawOptString.trim();\n  rawOptString = rawOptString || '{}';\n  try {\n    options = JSON.parse(rawOptString);\n  } catch (e) {\n    log.error('error while parsing gitGraph options', e.message);\n  }\n};\n\nexport const getOptions = function () {\n  return options;\n};\n\nexport const commit = function (msg, id, type, tag) {\n  log.debug('Entering commit:', msg, id, type, tag);\n  id = common.sanitizeText(id, configApi.getConfig());\n  msg = common.sanitizeText(msg, configApi.getConfig());\n  tag = common.sanitizeText(tag, configApi.getConfig());\n  const commit = {\n    id: id ? id : seq + '-' + getId(),\n    message: msg,\n    seq: seq++,\n    type: type ? type : commitType.NORMAL,\n    tag: tag ? tag : '',\n    parents: head == null ? [] : [head.id],\n    branch: curBranch,\n  };\n  head = commit;\n  commits[commit.id] = commit;\n  branches[curBranch] = commit.id;\n  log.debug('in pushCommit ' + commit.id);\n};\n\nexport const branch = function (name, order) {\n  name = common.sanitizeText(name, configApi.getConfig());\n  if (typeof branches[name] === 'undefined') {\n    branches[name] = head != null ? head.id : null;\n    branchesConfig[name] = { name, order: order ? parseInt(order, 10) : null };\n    checkout(name);\n    log.debug('in createBranch');\n  } else {\n    let error = new Error(\n      'Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using \"checkout ' +\n        name +\n        '\")'\n    );\n    error.hash = {\n      text: 'branch ' + name,\n      token: 'branch ' + name,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['\"checkout ' + name + '\"'],\n    };\n    throw error;\n  }\n};\n\nexport const merge = function (otherBranch, tag) {\n  otherBranch = common.sanitizeText(otherBranch, configApi.getConfig());\n  const currentCommit = commits[branches[curBranch]];\n  const otherCommit = commits[branches[otherBranch]];\n  if (curBranch === otherBranch) {\n    let error = new Error('Incorrect usage of \"merge\". Cannot merge a branch to itself');\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['branch abc'],\n    };\n    throw error;\n  } else if (typeof currentCommit === 'undefined' || !currentCommit) {\n    let error = new Error(\n      'Incorrect usage of \"merge\". Current branch (' + curBranch + ')has no commits'\n    );\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['commit'],\n    };\n    throw error;\n  } else if (typeof branches[otherBranch] === 'undefined') {\n    let error = new Error(\n      'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + ') does not exist'\n    );\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['branch ' + otherBranch],\n    };\n    throw error;\n  } else if (typeof otherCommit === 'undefined' || !otherCommit) {\n    let error = new Error(\n      'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + ') has no commits'\n    );\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['\"commit\"'],\n    };\n    throw error;\n  } else if (currentCommit === otherCommit) {\n    let error = new Error('Incorrect usage of \"merge\". Both branches have same head');\n    error.hash = {\n      text: 'merge ' + otherBranch,\n      token: 'merge ' + otherBranch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['branch abc'],\n    };\n    throw error;\n  }\n  // if (isReachableFrom(currentCommit, otherCommit)) {\n  //   log.debug('Already merged');\n  //   return;\n  // }\n  // if (isfastforwardable(currentCommit, otherCommit)) {\n  //   branches[curBranch] = branches[otherBranch];\n  //   head = commits[branches[curBranch]];\n  // } else {\n  // create merge commit\n  const commit = {\n    id: seq + '-' + getId(),\n    message: 'merged branch ' + otherBranch + ' into ' + curBranch,\n    seq: seq++,\n    parents: [head == null ? null : head.id, branches[otherBranch]],\n    branch: curBranch,\n    type: commitType.MERGE,\n    tag: tag ? tag : '',\n  };\n  head = commit;\n  commits[commit.id] = commit;\n  branches[curBranch] = commit.id;\n  // }\n  log.debug(branches);\n  log.debug('in mergeBranch');\n};\n\nexport const cherryPick = function (sourceId, targetId) {\n  sourceId = common.sanitizeText(sourceId, configApi.getConfig());\n  targetId = common.sanitizeText(targetId, configApi.getConfig());\n\n  if (!sourceId || typeof commits[sourceId] === 'undefined') {\n    let error = new Error(\n      'Incorrect usage of \"cherryPick\". Source commit id should exist and provided'\n    );\n    error.hash = {\n      text: 'cherryPick ' + sourceId + ' ' + targetId,\n      token: 'cherryPick ' + sourceId + ' ' + targetId,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['cherry-pick abc'],\n    };\n    throw error;\n  }\n\n  let sourceCommit = commits[sourceId];\n  let sourceCommitBranch = sourceCommit.branch;\n  if (sourceCommit.type === commitType.MERGE) {\n    let error = new Error(\n      'Incorrect usage of \"cherryPick\". Source commit should not be a merge commit'\n    );\n    error.hash = {\n      text: 'cherryPick ' + sourceId + ' ' + targetId,\n      token: 'cherryPick ' + sourceId + ' ' + targetId,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['cherry-pick abc'],\n    };\n    throw error;\n  }\n  if (!targetId || typeof commits[targetId] === 'undefined') {\n    // cherry-pick source commit to current branch\n\n    if (sourceCommitBranch === curBranch) {\n      let error = new Error(\n        'Incorrect usage of \"cherryPick\". Source commit is already on current branch'\n      );\n      error.hash = {\n        text: 'cherryPick ' + sourceId + ' ' + targetId,\n        token: 'cherryPick ' + sourceId + ' ' + targetId,\n        line: '1',\n        loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n        expected: ['cherry-pick abc'],\n      };\n      throw error;\n    }\n    const currentCommit = commits[branches[curBranch]];\n    if (typeof currentCommit === 'undefined' || !currentCommit) {\n      let error = new Error(\n        'Incorrect usage of \"cherry-pick\". Current branch (' + curBranch + ')has no commits'\n      );\n      error.hash = {\n        text: 'cherryPick ' + sourceId + ' ' + targetId,\n        token: 'cherryPick ' + sourceId + ' ' + targetId,\n        line: '1',\n        loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n        expected: ['cherry-pick abc'],\n      };\n      throw error;\n    }\n    const commit = {\n      id: seq + '-' + getId(),\n      message: 'cherry-picked ' + sourceCommit + ' into ' + curBranch,\n      seq: seq++,\n      parents: [head == null ? null : head.id, sourceCommit.id],\n      branch: curBranch,\n      type: commitType.CHERRY_PICK,\n      tag: 'cherry-pick:' + sourceCommit.id,\n    };\n    head = commit;\n    commits[commit.id] = commit;\n    branches[curBranch] = commit.id;\n    log.debug(branches);\n    log.debug('in cheeryPick');\n  }\n};\nexport const checkout = function (branch) {\n  branch = common.sanitizeText(branch, configApi.getConfig());\n  if (typeof branches[branch] === 'undefined') {\n    let error = new Error(\n      'Trying to checkout branch which is not yet created. (Help try using \"branch ' + branch + '\")'\n    );\n    error.hash = {\n      text: 'checkout ' + branch,\n      token: 'checkout ' + branch,\n      line: '1',\n      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n      expected: ['\"branch ' + branch + '\"'],\n    };\n    throw error;\n    //branches[branch] = head != null ? head.id : null;\n    //log.debug('in createBranch');\n  } else {\n    curBranch = branch;\n    const id = branches[curBranch];\n    head = commits[id];\n  }\n};\n\n// export const reset = function (commitRef) {\n//   log.debug('in reset', commitRef);\n//   const ref = commitRef.split(':')[0];\n//   let parentCount = parseInt(commitRef.split(':')[1]);\n//   let commit = ref === 'HEAD' ? head : commits[branches[ref]];\n//   log.debug(commit, parentCount);\n//   while (parentCount > 0) {\n//     commit = commits[commit.parent];\n//     parentCount--;\n//     if (!commit) {\n//       const err = 'Critical error - unique parent commit not found during reset';\n//       log.error(err);\n//       throw err;\n//     }\n//   }\n//   head = commit;\n//   branches[curBranch] = commit.id;\n// };\n\n/**\n * @param arr\n * @param key\n * @param newval\n */\nfunction upsert(arr, key, newval) {\n  const index = arr.indexOf(key);\n  if (index === -1) {\n    arr.push(newval);\n  } else {\n    arr.splice(index, 1, newval);\n  }\n}\n\n/** @param commitArr */\nfunction prettyPrintCommitHistory(commitArr) {\n  const commit = commitArr.reduce((out, commit) => {\n    if (out.seq > commit.seq) return out;\n    return commit;\n  }, commitArr[0]);\n  let line = '';\n  commitArr.forEach(function (c) {\n    if (c === commit) {\n      line += '\\t*';\n    } else {\n      line += '\\t|';\n    }\n  });\n  const label = [line, commit.id, commit.seq];\n  for (let branch in branches) {\n    if (branches[branch] === commit.id) label.push(branch);\n  }\n  log.debug(label.join(' '));\n  if (commit.parents && commit.parents.length == 2) {\n    const newCommit = commits[commit.parents[0]];\n    upsert(commitArr, commit, newCommit);\n    commitArr.push(commits[commit.parents[1]]);\n  } else if (commit.parents.length == 0) {\n    return;\n  } else {\n    const nextCommit = commits[commit.parents];\n    upsert(commitArr, commit, nextCommit);\n  }\n  commitArr = uniqBy(commitArr, (c) => c.id);\n  prettyPrintCommitHistory(commitArr);\n}\n\nexport const prettyPrint = function () {\n  log.debug(commits);\n  const node = getCommitsArray()[0];\n  prettyPrintCommitHistory([node]);\n};\n\nexport const clear = function () {\n  commits = {};\n  head = null;\n  let mainBranch = getConfig().gitGraph.mainBranchName;\n  let mainBranchOrder = getConfig().gitGraph.mainBranchOrder;\n  branches = {};\n  branches[mainBranch] = null;\n  branchesConfig = {};\n  branchesConfig[mainBranch] = { name: mainBranch, order: mainBranchOrder };\n  curBranch = mainBranch;\n  seq = 0;\n  commonClear();\n};\n\nexport const getBranchesAsObjArray = function () {\n  const branchesArray = Object.values(branchesConfig)\n    .map((branchConfig, i) => {\n      if (branchConfig.order !== null) return branchConfig;\n      return {\n        ...branchConfig,\n        order: parseFloat(`0.${i}`, 10),\n      };\n    })\n    .sort((a, b) => a.order - b.order)\n    .map(({ name }) => ({ name }));\n\n  return branchesArray;\n};\n\nexport const getBranches = function () {\n  return branches;\n};\nexport const getCommits = function () {\n  return commits;\n};\nexport const getCommitsArray = function () {\n  const commitArr = Object.keys(commits).map(function (key) {\n    return commits[key];\n  });\n  commitArr.forEach(function (o) {\n    log.debug(o.id);\n  });\n  commitArr.sort((a, b) => a.seq - b.seq);\n  return commitArr;\n};\nexport const getCurrentBranch = function () {\n  return curBranch;\n};\nexport const getDirection = function () {\n  return direction;\n};\nexport const getHead = function () {\n  return head;\n};\n\nexport const commitType = {\n  NORMAL: 0,\n  REVERSE: 1,\n  HIGHLIGHT: 2,\n  MERGE: 3,\n  CHERRY_PICK: 4,\n};\n\nexport default {\n  parseDirective,\n  getConfig: () => configApi.getConfig().gitGraph,\n  setDirection,\n  setOptions,\n  getOptions,\n  commit,\n  branch,\n  merge,\n  cherryPick,\n  checkout,\n  //reset,\n  prettyPrint,\n  clear,\n  getBranchesAsObjArray,\n  getBranches,\n  getCommits,\n  getCommitsArray,\n  getCurrentBranch,\n  getDirection,\n  getHead,\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  commitType,\n};\n","import { curveBasis, line, select } from 'd3';\nimport { interpolateToCurve, getStylesFromArray, configureSvgSize } from '../../utils';\nimport db from './gitGraphAst';\nimport gitGraphParser from './parser/gitGraph';\nimport { log } from '../../logger';\nimport { getConfig } from '../../config';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nlet allCommitsDict = {};\nlet branchNum;\n\nconst commitType = {\n  NORMAL: 0,\n  REVERSE: 1,\n  HIGHLIGHT: 2,\n  MERGE: 3,\n  CHERRY_PICK: 4,\n};\n\nlet branchPos = {};\nlet commitPos = {};\nlet lanes = [];\nlet maxPos = 0;\nconst clear = () => {\n  branchPos = {};\n  commitPos = {};\n  allCommitsDict = {};\n  maxPos = 0;\n  lanes = [];\n};\n\n/**\n * Draws a text, used for labels of the branches\n *\n * @param {string} txt The text\n * @returns {SVGElement}\n */\nconst drawText = (txt) => {\n  const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n  let rows = [];\n\n  // Handling of new lines in the label\n  if (typeof txt === 'string') {\n    rows = txt.split(/\\\\n|\\n|<br\\s*\\/?>/gi);\n  } else if (Array.isArray(txt)) {\n    rows = txt;\n  } else {\n    rows = [];\n  }\n\n  for (let j = 0; j < rows.length; j++) {\n    const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n    tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n    tspan.setAttribute('dy', '1em');\n    tspan.setAttribute('x', '0');\n    tspan.setAttribute('class', 'row');\n    tspan.textContent = rows[j].trim();\n    svgLabel.appendChild(tspan);\n  }\n  /**\n   * @param svg\n   * @param selector\n   */\n  return svgLabel;\n};\n\n/**\n * Draws the commits with its symbol and labels. The function has two modes, one which only\n * calculates the positions and one that does the actual drawing. This for a simple way getting the\n * vertical layering correct in the graph.\n *\n * @param {any} svg\n * @param {any} commits\n * @param {any} modifyGraph\n */\nconst drawCommits = (svg, commits, modifyGraph) => {\n  const gitGraphConfig = getConfig().gitGraph;\n  const gBullets = svg.append('g').attr('class', 'commit-bullets');\n  const gLabels = svg.append('g').attr('class', 'commit-labels');\n  let pos = 0;\n\n  const keys = Object.keys(commits);\n  const sortedKeys = keys.sort((a, b) => {\n    return commits[a].seq - commits[b].seq;\n  });\n  sortedKeys.forEach((key, index) => {\n    const commit = commits[key];\n\n    const y = branchPos[commit.branch].pos;\n    const x = pos + 10;\n    // Don't draw the commits now but calculate the positioning which is used by the branch lines etc.\n    if (modifyGraph) {\n      let typeClass;\n      switch (commit.type) {\n        case commitType.NORMAL:\n          typeClass = 'commit-normal';\n          break;\n        case commitType.REVERSE:\n          typeClass = 'commit-reverse';\n          break;\n        case commitType.HIGHLIGHT:\n          typeClass = 'commit-highlight';\n          break;\n        case commitType.MERGE:\n          typeClass = 'commit-merge';\n          break;\n        case commitType.CHERRY_PICK:\n          typeClass = 'commit-cherry-pick';\n          break;\n        default:\n          typeClass = 'commit-normal';\n      }\n\n      if (commit.type === commitType.HIGHLIGHT) {\n        const circle = gBullets.append('rect');\n        circle.attr('x', x - 10);\n        circle.attr('y', y - 10);\n        circle.attr('height', 20);\n        circle.attr('width', 20);\n        circle.attr(\n          'class',\n          'commit ' +\n            commit.id +\n            ' commit-highlight' +\n            branchPos[commit.branch].index +\n            ' ' +\n            typeClass +\n            '-outer'\n        );\n        gBullets\n          .append('rect')\n          .attr('x', x - 6)\n          .attr('y', y - 6)\n          .attr('height', 12)\n          .attr('width', 12)\n          .attr(\n            'class',\n            'commit ' +\n              commit.id +\n              ' commit' +\n              branchPos[commit.branch].index +\n              ' ' +\n              typeClass +\n              '-inner'\n          );\n      } else if (commit.type === commitType.CHERRY_PICK) {\n        gBullets\n          .append('circle')\n          .attr('cx', x)\n          .attr('cy', y)\n          .attr('r', 10)\n          .attr('class', 'commit ' + commit.id + ' ' + typeClass);\n        gBullets\n          .append('circle')\n          .attr('cx', x - 3)\n          .attr('cy', y + 2)\n          .attr('r', 2.75)\n          .attr('fill', '#fff')\n          .attr('class', 'commit ' + commit.id + ' ' + typeClass);\n        gBullets\n          .append('circle')\n          .attr('cx', x + 3)\n          .attr('cy', y + 2)\n          .attr('r', 2.75)\n          .attr('fill', '#fff')\n          .attr('class', 'commit ' + commit.id + ' ' + typeClass);\n        gBullets\n          .append('line')\n          .attr('x1', x + 3)\n          .attr('y1', y + 1)\n          .attr('x2', x)\n          .attr('y2', y - 5)\n          .attr('stroke', '#fff')\n          .attr('class', 'commit ' + commit.id + ' ' + typeClass);\n        gBullets\n          .append('line')\n          .attr('x1', x - 3)\n          .attr('y1', y + 1)\n          .attr('x2', x)\n          .attr('y2', y - 5)\n          .attr('stroke', '#fff')\n          .attr('class', 'commit ' + commit.id + ' ' + typeClass);\n      } else {\n        const circle = gBullets.append('circle');\n        circle.attr('cx', x);\n        circle.attr('cy', y);\n        circle.attr('r', commit.type === commitType.MERGE ? 9 : 10);\n        circle.attr('class', 'commit ' + commit.id + ' commit' + branchPos[commit.branch].index);\n        if (commit.type === commitType.MERGE) {\n          const circle2 = gBullets.append('circle');\n          circle2.attr('cx', x);\n          circle2.attr('cy', y);\n          circle2.attr('r', 6);\n          circle2.attr(\n            'class',\n            'commit ' + typeClass + ' ' + commit.id + ' commit' + branchPos[commit.branch].index\n          );\n        }\n        if (commit.type === commitType.REVERSE) {\n          const cross = gBullets.append('path');\n          cross\n            .attr('d', `M ${x - 5},${y - 5}L${x + 5},${y + 5}M${x - 5},${y + 5}L${x + 5},${y - 5}`)\n            .attr(\n              'class',\n              'commit ' + typeClass + ' ' + commit.id + ' commit' + branchPos[commit.branch].index\n            );\n        }\n      }\n    }\n    commitPos[commit.id] = { x: pos + 10, y: y };\n\n    // The first iteration over the commits are for positioning purposes, this\n    // is required for drawing the lines. The circles and labels is drawn after the labels\n    // placing them on top of the lines.\n    if (modifyGraph) {\n      const px = 4;\n      const py = 2;\n      // Draw the commit label\n      if (\n        commit.type !== commitType.CHERRY_PICK &&\n        commit.type !== commitType.MERGE &&\n        gitGraphConfig.showCommitLabel\n      ) {\n        const wrapper = gLabels.append('g');\n        const labelBkg = wrapper.insert('rect').attr('class', 'commit-label-bkg');\n\n        const text = wrapper\n          .append('text')\n          .attr('x', pos)\n          .attr('y', y + 25)\n          .attr('class', 'commit-label')\n          .text(commit.id);\n        let bbox = text.node().getBBox();\n\n        // Now we have the label, lets position the background\n        labelBkg\n          .attr('x', pos + 10 - bbox.width / 2 - py)\n          .attr('y', y + 13.5)\n          .attr('width', bbox.width + 2 * py)\n          .attr('height', bbox.height + 2 * py);\n        text.attr('x', pos + 10 - bbox.width / 2);\n        if (gitGraphConfig.rotateCommitLabel) {\n          let r_x = -7.5 - ((bbox.width + 10) / 25) * 9.5;\n          let r_y = 10 + (bbox.width / 25) * 8.5;\n          wrapper.attr(\n            'transform',\n            'translate(' + r_x + ', ' + r_y + ') rotate(' + -45 + ', ' + pos + ', ' + y + ')'\n          );\n        }\n      }\n      if (commit.tag) {\n        const rect = gLabels.insert('polygon');\n        const hole = gLabels.append('circle');\n        const tag = gLabels\n          .append('text')\n          // Note that we are delaying setting the x position until we know the width of the text\n          .attr('y', y - 16)\n          .attr('class', 'tag-label')\n          .text(commit.tag);\n        let tagBbox = tag.node().getBBox();\n        tag.attr('x', pos + 10 - tagBbox.width / 2);\n\n        const h2 = tagBbox.height / 2;\n        const ly = y - 19.2;\n        rect.attr('class', 'tag-label-bkg').attr(\n          'points',\n          `\n          ${pos - tagBbox.width / 2 - px / 2},${ly + py}\n          ${pos - tagBbox.width / 2 - px / 2},${ly - py}\n          ${pos + 10 - tagBbox.width / 2 - px},${ly - h2 - py}\n          ${pos + 10 + tagBbox.width / 2 + px},${ly - h2 - py}\n          ${pos + 10 + tagBbox.width / 2 + px},${ly + h2 + py}\n          ${pos + 10 - tagBbox.width / 2 - px},${ly + h2 + py}`\n        );\n\n        hole\n          .attr('cx', pos - tagBbox.width / 2 + px / 2)\n          .attr('cy', ly)\n          .attr('r', 1.5)\n          .attr('class', 'tag-hole');\n      }\n    }\n    pos += 50;\n    if (pos > maxPos) {\n      maxPos = pos;\n    }\n  });\n};\n\n/**\n * Detect if there are other commits between commit1s x-position and commit2s x-position on the same\n * branch as commit2.\n *\n * @param {any} commit1\n * @param {any} commit2\n * @param allCommits\n * @returns\n */\nconst hasOverlappingCommits = (commit1, commit2, allCommits) => {\n  const commit1Pos = commitPos[commit2.id];\n  const commit2Pos = commitPos[commit1.id];\n\n  // Find commits on the same branch as commit2\n  const keys = Object.keys(allCommits);\n  const overlappingComits = keys.filter((key) => {\n    return (\n      allCommits[key].branch === commit2.branch &&\n      allCommits[key].seq > commit1.seq &&\n      allCommits[key].seq < commit2.seq\n    );\n  });\n\n  return overlappingComits.length > 0;\n};\n\n/**\n * This function find a lane in the y-axis that is not overlapping with any other lanes. This is\n * used for drawing the lines between commits.\n *\n * @param {any} y1\n * @param {any} y2\n * @param {any} _depth\n * @returns\n */\nconst findLane = (y1, y2, _depth) => {\n  const depth = _depth || 0;\n\n  const candidate = y1 + Math.abs(y1 - y2) / 2;\n  if (depth > 5) {\n    return candidate;\n  }\n\n  let ok = true;\n  for (let i = 0; i < lanes.length; i++) {\n    if (Math.abs(lanes[i] - candidate) < 10) {\n      ok = false;\n    }\n  }\n  if (ok) {\n    lanes.push(candidate);\n    return candidate;\n  }\n  const diff = Math.abs(y1 - y2);\n  return findLane(y1, y2 - diff / 5, depth);\n};\n\n/**\n * This function draw the lines between the commits. They were arrows initially.\n *\n * @param {any} svg\n * @param {any} commit1\n * @param {any} commit2\n * @param {any} allCommits\n */\nconst drawArrow = (svg, commit1, commit2, allCommits) => {\n  const conf = getConfig();\n\n  const p1 = commitPos[commit1.id];\n  const p2 = commitPos[commit2.id];\n  const overlappingCommits = hasOverlappingCommits(commit1, commit2, allCommits);\n  // log.debug('drawArrow', p1, p2, overlappingCommits, commit1.id, commit2.id);\n\n  let url = '';\n  if (conf.arrowMarkerAbsolute) {\n    url =\n      window.location.protocol +\n      '//' +\n      window.location.host +\n      window.location.pathname +\n      window.location.search;\n    url = url.replace(/\\(/g, '\\\\(');\n    url = url.replace(/\\)/g, '\\\\)');\n  }\n\n  let arc = '';\n  let arc2 = '';\n  let radius = 0;\n  let offset = 0;\n  let colorClassNum = branchPos[commit2.branch].index;\n  let lineDef;\n  if (overlappingCommits) {\n    arc = 'A 10 10, 0, 0, 0,';\n    arc2 = 'A 10 10, 0, 0, 1,';\n    radius = 10;\n    offset = 10;\n    // Figure out the color of the arrow,arrows going down take the color from the destination branch\n    colorClassNum = branchPos[commit2.branch].index;\n\n    const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y);\n\n    if (p1.y < p2.y) {\n      lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${p1.x + offset} ${lineY} L ${\n        p2.x - radius\n      } ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`;\n    } else {\n      lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${\n        p1.x + offset\n      } ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`;\n    }\n  } else {\n    if (p1.y < p2.y) {\n      arc = 'A 20 20, 0, 0, 0,';\n      radius = 20;\n      offset = 20;\n\n      // Figure out the color of the arrow,arrows going down take the color from the destination branch\n      colorClassNum = branchPos[commit2.branch].index;\n\n      lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${\n        p2.x\n      } ${p2.y}`;\n    }\n    if (p1.y > p2.y) {\n      arc = 'A 20 20, 0, 0, 0,';\n      radius = 20;\n      offset = 20;\n\n      // Arrows going up take the color from the source branch\n      colorClassNum = branchPos[commit1.branch].index;\n      lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${p1.y - offset} L ${\n        p2.x\n      } ${p2.y}`;\n    }\n\n    if (p1.y === p2.y) {\n      colorClassNum = branchPos[commit1.branch].index;\n      lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${p2.y} L ${\n        p2.x\n      } ${p2.y}`;\n    }\n  }\n  const arrow = svg\n    .append('path')\n    .attr('d', lineDef)\n    .attr('class', 'arrow arrow' + colorClassNum);\n};\n\nconst drawArrows = (svg, commits) => {\n  const gArrows = svg.append('g').attr('class', 'commit-arrows');\n  let pos = 0;\n\n  const k = Object.keys(commits);\n  k.forEach((key, index) => {\n    const commit = commits[key];\n    if (commit.parents && commit.parents.length > 0) {\n      commit.parents.forEach((parent) => {\n        drawArrow(gArrows, commits[parent], commit, commits);\n      });\n    }\n  });\n};\n\n/**\n * This function adds the branches and the branches' labels to the svg.\n *\n * @param svg\n * @param commitid\n * @param branches\n * @param direction\n */\nconst drawBranches = (svg, branches) => {\n  const gitGraphConfig = getConfig().gitGraph;\n  const g = svg.append('g');\n  branches.forEach((branch, index) => {\n    let adjustIndexForTheme = index >= 8 ? index - 8 : index;\n\n    const pos = branchPos[branch.name].pos;\n    const line = g.append('line');\n    line.attr('x1', 0);\n    line.attr('y1', pos);\n    line.attr('x2', maxPos);\n    line.attr('y2', pos);\n    line.attr('class', 'branch branch' + adjustIndexForTheme);\n\n    lanes.push(pos);\n\n    let name = branch.name;\n\n    // Create the actual text element\n    const labelElement = drawText(name);\n    // Create outer g, edgeLabel, this will be positioned after graph layout\n    const bkg = g.insert('rect');\n    const branchLabel = g.insert('g').attr('class', 'branchLabel');\n\n    // Create inner g, label, this will be positioned now for centering the text\n    const label = branchLabel.insert('g').attr('class', 'label branch-label' + adjustIndexForTheme);\n    label.node().appendChild(labelElement);\n    let bbox = labelElement.getBBox();\n    bkg\n      .attr('class', 'branchLabelBkg label' + adjustIndexForTheme)\n      .attr('rx', 4)\n      .attr('ry', 4)\n      .attr('x', -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0))\n      .attr('y', -bbox.height / 2 + 8)\n      .attr('width', bbox.width + 18)\n      .attr('height', bbox.height + 4);\n\n    label.attr(\n      'transform',\n      'translate(' +\n        (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)) +\n        ', ' +\n        (pos - bbox.height / 2 - 1) +\n        ')'\n    );\n    bkg.attr('transform', 'translate(' + -19 + ', ' + (pos - bbox.height / 2) + ')');\n  });\n};\n\n/**\n * @param svg\n * @param commit\n * @param direction\n * @param branchColor\n * @param txt\n * @param id\n * @param ver\n */\nexport const draw = function (txt, id, ver) {\n  clear();\n  const conf = getConfig();\n  const gitGraphConfig = getConfig().gitGraph;\n  // try {\n  const parser = gitGraphParser.parser;\n  parser.yy = db;\n  parser.yy.clear();\n\n  log.debug('in gitgraph renderer', txt + '\\n', 'id:', id, ver);\n  // // Parse the graph definition\n  parser.parse(txt + '\\n');\n\n  const direction = db.getDirection();\n  allCommitsDict = db.getCommits();\n  const branches = db.getBranchesAsObjArray();\n\n  // Position branches vertically\n  let pos = 0;\n  branches.forEach((branch, index) => {\n    branchPos[branch.name] = { pos, index };\n    pos += 50 + (gitGraphConfig.rotateCommitLabel ? 40 : 0);\n  });\n\n  const diagram = select(`[id=\"${id}\"]`);\n\n  // Adds title and description to the flow chart\n  addSVGAccessibilityFields(parser.yy, diagram, id);\n\n  drawCommits(diagram, allCommitsDict, false);\n  if (gitGraphConfig.showBranches) {\n    drawBranches(diagram, branches);\n  }\n  drawArrows(diagram, allCommitsDict);\n  drawCommits(diagram, allCommitsDict, true);\n\n  const padding = gitGraphConfig.diagramPadding;\n  const svgBounds = diagram.node().getBBox();\n  const width = svgBounds.width + padding * 2;\n  const height = svgBounds.height + padding * 2;\n\n  configureSvgSize(diagram, height, width, conf.useMaxWidth);\n  const vBox = `${\n    svgBounds.x -\n    padding -\n    (gitGraphConfig.showBranches && gitGraphConfig.rotateCommitLabel === true ? 30 : 0)\n  } ${svgBounds.y - padding} ${width} ${height}`;\n  diagram.attr('viewBox', vBox);\n};\n\nexport default {\n  draw,\n};\n","const getStyles = (options) =>\n  `\n  .commit-id,\n  .commit-msg,\n  .branch-label {\n    fill: lightgrey;\n    color: lightgrey;\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n  }\n  ${[0, 1, 2, 3, 4, 5, 6, 7]\n    .map(\n      (i) =>\n        `\n        .branch-label${i} { fill: ${options['gitBranchLabel' + i]}; }\n        .commit${i} { stroke: ${options['git' + i]}; fill: ${options['git' + i]}; }\n        .commit-highlight${i} { stroke: ${options['gitInv' + i]}; fill: ${options['gitInv' + i]}; }\n        .label${i}  { fill: ${options['git' + i]}; }\n        .arrow${i} { stroke: ${options['git' + i]}; }\n        `\n    )\n    .join('\\n')}\n\n  .branch {\n    stroke-width: 1;\n    stroke: ${options.lineColor};\n    stroke-dasharray: 2;\n  }\n  .commit-label { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelColor};}\n  .commit-label-bkg { font-size: ${options.commitLabelFontSize}; fill: ${\n    options.commitLabelBackground\n  }; opacity: 0.5; }\n  .tag-label { font-size: ${options.tagLabelFontSize}; fill: ${options.tagLabelColor};}\n  .tag-label-bkg { fill: ${options.tagLabelBackground}; stroke: ${options.tagLabelBorder}; }\n  .tag-hole { fill: ${options.textColor}; }\n\n  .commit-merge {\n    stroke: ${options.primaryColor};\n    fill: ${options.primaryColor};\n  }\n  .commit-reverse {\n    stroke: ${options.primaryColor};\n    fill: ${options.primaryColor};\n    stroke-width: 3;\n  }\n  .commit-highlight-outer {\n  }\n  .commit-highlight-inner {\n    stroke: ${options.primaryColor};\n    fill: ${options.primaryColor};\n  }\n\n  .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n  }\n`;\n\nexport default getStyles;\n","/** Created by knut on 15-01-14. */\nimport { log } from '../../logger';\n\nvar message = '';\nvar info = false;\n\nexport const setMessage = (txt) => {\n  log.debug('Setting message to: ' + txt);\n  message = txt;\n};\n\nexport const getMessage = () => {\n  return message;\n};\n\nexport const setInfo = (inf) => {\n  info = inf;\n};\n\nexport const getInfo = () => {\n  return info;\n};\n\n// export const parseError = (err, hash) => {\n//   global.mermaidAPI.parseError(err, hash)\n// }\n\nexport default {\n  setMessage,\n  getMessage,\n  setInfo,\n  getInfo,\n  // parseError\n};\n","/** Created by knut on 14-12-11. */\nimport { select } from 'd3';\nimport db from './infoDb';\nimport infoParser from './parser/info';\nimport { log } from '../../logger';\nimport { getConfig } from '../../config';\n\nconst conf = {};\nexport const setConf = function (cnf) {\n  const keys = Object.keys(cnf);\n\n  keys.forEach(function (key) {\n    conf[key] = cnf[key];\n  });\n};\n\n/**\n * Draws a an info picture in the tag with id: id based on the graph definition in text.\n *\n * @param {any} text\n * @param {any} id\n * @param {any} version\n */\nexport const draw = (text, id, version) => {\n  try {\n    const parser = infoParser.parser;\n    parser.yy = db;\n    log.debug('Renering info diagram\\n' + text);\n\n    const securityLevel = getConfig().securityLevel;\n    // Handle root and Document for when rendering in sanbox mode\n    let sandboxElement;\n    if (securityLevel === 'sandbox') {\n      sandboxElement = select('#i' + id);\n    }\n    const root =\n      securityLevel === 'sandbox'\n        ? select(sandboxElement.nodes()[0].contentDocument.body)\n        : select('body');\n    const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n    // Parse the graph definition\n    parser.parse(text);\n    log.debug('Parsed info diagram');\n    // Fetch the default direction, use TD if none was found\n    const svg = root.select('#' + id);\n\n    const g = svg.append('g');\n\n    g.append('text') // text label for the x axis\n      .attr('x', 100)\n      .attr('y', 40)\n      .attr('class', 'version')\n      .attr('font-size', '32px')\n      .style('text-anchor', 'middle')\n      .text('v ' + version);\n\n    svg.attr('height', 100);\n    svg.attr('width', 400);\n    // svg.attr('viewBox', '0 0 300 150');\n  } catch (e) {\n    log.error('Error while rendering info diagram');\n    log.error(e.message);\n  }\n};\n\nexport default {\n  setConf,\n  draw,\n};\n","const getStyles = () => ``;\r\n\r\nexport default getStyles;\r\n","import { log } from '../../logger';\nimport mermaidAPI from '../../mermaidAPI';\nimport * as configApi from '../../config';\nimport common from '../common/common';\nimport {\n  setAccTitle,\n  getAccTitle,\n  setDiagramTitle,\n  getDiagramTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n} from '../../commonDb';\n\nlet sections = {};\nlet title = '';\nlet description = '';\nlet showData = false;\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\nconst addSection = function (id, value) {\n  id = common.sanitizeText(id, configApi.getConfig());\n  if (typeof sections[id] === 'undefined') {\n    sections[id] = value;\n    log.debug('Added new section :', id);\n  }\n};\nconst getSections = () => sections;\n\nconst setShowData = function (toggle) {\n  showData = toggle;\n};\n\nconst getShowData = function () {\n  return showData;\n};\n\nconst cleanupValue = function (value) {\n  if (value.substring(0, 1) === ':') {\n    value = value.substring(1).trim();\n    return Number(value.trim());\n  } else {\n    return Number(value.trim());\n  }\n};\n\nconst clear = function () {\n  sections = {};\n  title = '';\n  showData = false;\n  commonClear();\n};\n\nexport default {\n  parseDirective,\n  getConfig: () => configApi.getConfig().pie,\n  addSection,\n  getSections,\n  cleanupValue,\n  clear,\n  setAccTitle,\n  getAccTitle,\n  setDiagramTitle,\n  getDiagramTitle,\n  setShowData,\n  getShowData,\n  getAccDescription,\n  setAccDescription,\n};\n","/** Created by AshishJ on 11-09-2019. */\nimport { select, scaleOrdinal, pie as d3pie, arc } from 'd3';\nimport pieData from './pieDb';\nimport pieParser from './parser/pie';\nimport { log } from '../../logger';\nimport { configureSvgSize } from '../../utils';\nimport * as configApi from '../../config';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nlet conf = configApi.getConfig();\n\n/**\n * Draws a Pie Chart with the data given in text.\n *\n * @param text\n * @param id\n */\nlet width;\nconst height = 450;\nexport const draw = (txt, id) => {\n  try {\n    conf = configApi.getConfig();\n    const parser = pieParser.parser;\n    parser.yy = pieData;\n    log.debug('Rendering info diagram\\n' + txt);\n\n    const securityLevel = configApi.getConfig().securityLevel;\n    // Handle root and Document for when rendering in sanbox mode\n    let sandboxElement;\n    if (securityLevel === 'sandbox') {\n      sandboxElement = select('#i' + id);\n    }\n    const root =\n      securityLevel === 'sandbox'\n        ? select(sandboxElement.nodes()[0].contentDocument.body)\n        : select('body');\n    const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n    // Parse the Pie Chart definition\n    parser.yy.clear();\n    parser.parse(txt);\n    log.debug('Parsed info diagram');\n    const elem = doc.getElementById(id);\n    width = elem.parentElement.offsetWidth;\n\n    if (typeof width === 'undefined') {\n      width = 1200;\n    }\n\n    if (typeof conf.useWidth !== 'undefined') {\n      width = conf.useWidth;\n    }\n    if (typeof conf.pie.useWidth !== 'undefined') {\n      width = conf.pie.useWidth;\n    }\n\n    const diagram = root.select('#' + id);\n    configureSvgSize(diagram, height, width, conf.pie.useMaxWidth);\n\n    addSVGAccessibilityFields(parser.yy, diagram, id);\n    // Set viewBox\n    elem.setAttribute('viewBox', '0 0 ' + width + ' ' + height);\n\n    // Fetch the default direction, use TD if none was found\n    var margin = 40;\n    var legendRectSize = 18;\n    var legendSpacing = 4;\n\n    var radius = Math.min(width, height) / 2 - margin;\n\n    var svg = diagram\n      .append('g')\n      .attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')');\n\n    var data = pieData.getSections();\n    var sum = 0;\n    Object.keys(data).forEach(function (key) {\n      sum += data[key];\n    });\n\n    const themeVariables = conf.themeVariables;\n    var myGeneratedColors = [\n      themeVariables.pie1,\n      themeVariables.pie2,\n      themeVariables.pie3,\n      themeVariables.pie4,\n      themeVariables.pie5,\n      themeVariables.pie6,\n      themeVariables.pie7,\n      themeVariables.pie8,\n      themeVariables.pie9,\n      themeVariables.pie10,\n      themeVariables.pie11,\n      themeVariables.pie12,\n    ];\n\n    // Set the color scale\n    var color = scaleOrdinal().range(myGeneratedColors);\n\n    // Compute the position of each group on the pie:\n    var pie = d3pie().value(function (d) {\n      return d[1];\n    });\n    var dataReady = pie(Object.entries(data));\n\n    // Shape helper to build arcs:\n    var arcGenerator = arc().innerRadius(0).outerRadius(radius);\n\n    // Build the pie chart: each part of the pie is a path that we build using the arc function.\n    svg\n      .selectAll('mySlices')\n      .data(dataReady)\n      .enter()\n      .append('path')\n      .attr('d', arcGenerator)\n      .attr('fill', function (d) {\n        return color(d.data[0]);\n      })\n      .attr('class', 'pieCircle');\n\n    // Now add the percentage.\n    // Use the centroid method to get the best coordinates.\n    svg\n      .selectAll('mySlices')\n      .data(dataReady)\n      .enter()\n      .append('text')\n      .text(function (d) {\n        return ((d.data[1] / sum) * 100).toFixed(0) + '%';\n      })\n      .attr('transform', function (d) {\n        return 'translate(' + arcGenerator.centroid(d) + ')';\n      })\n      .style('text-anchor', 'middle')\n      .attr('class', 'slice');\n\n    svg\n      .append('text')\n      .text(parser.yy.getDiagramTitle())\n      .attr('x', 0)\n      .attr('y', -(height - 50) / 2)\n      .attr('class', 'pieTitleText');\n\n    // Add the legends/annotations for each section\n    var legend = svg\n      .selectAll('.legend')\n      .data(color.domain())\n      .enter()\n      .append('g')\n      .attr('class', 'legend')\n      .attr('transform', function (d, i) {\n        var height = legendRectSize + legendSpacing;\n        var offset = (height * color.domain().length) / 2;\n        var horz = 12 * legendRectSize;\n        var vert = i * height - offset;\n        return 'translate(' + horz + ',' + vert + ')';\n      });\n\n    legend\n      .append('rect')\n      .attr('width', legendRectSize)\n      .attr('height', legendRectSize)\n      .style('fill', color)\n      .style('stroke', color);\n\n    legend\n      .data(dataReady)\n      .append('text')\n      .attr('x', legendRectSize + legendSpacing)\n      .attr('y', legendRectSize - legendSpacing)\n      .text(function (d) {\n        if (parser.yy.getShowData() || conf.showData || conf.pie.showData) {\n          return d.data[0] + ' [' + d.data[1] + ']';\n        } else {\n          return d.data[0];\n        }\n      });\n  } catch (e) {\n    log.error('Error while rendering info diagram');\n    log.error(e);\n  }\n};\n\nexport default {\n  draw,\n};\n","const getStyles = (options) =>\n  `\n  .pieCircle{\n    stroke: ${options.pieStrokeColor};\n    stroke-width : ${options.pieStrokeWidth};\n    opacity : ${options.pieOpacity};\n  }\n  .pieTitleText {\n    text-anchor: middle;\n    font-size: ${options.pieTitleTextSize};\n    fill: ${options.pieTitleTextColor};\n    font-family: ${options.fontFamily};\n  }\n  .slice {\n    font-family: ${options.fontFamily};\n    fill: ${options.pieSectionTextColor};\n    font-size:${options.pieSectionTextSize};\n    // fill: white;\n  }\n  .legend text {\n    fill: ${options.pieLegendTextColor};\n    font-family: ${options.fontFamily};\n    font-size: ${options.pieLegendTextSize};\n  }\n`;\n\nexport default getStyles;\n","import * as configApi from '../../config';\nimport { log } from '../../logger';\nimport mermaidAPI from '../../mermaidAPI';\nimport common from '../common/common';\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n} from '../../commonDb';\n\nlet relations = [];\nlet latestRequirement = {};\nlet requirements = {};\nlet latestElement = {};\nlet elements = {};\nlet title = '';\nlet accDescription = '';\n\nconst sanitizeText = (txt) => common.sanitizeText(txt, configApi.getConfig());\n\nconst RequirementType = {\n  REQUIREMENT: 'Requirement',\n  FUNCTIONAL_REQUIREMENT: 'Functional Requirement',\n  INTERFACE_REQUIREMENT: 'Interface Requirement',\n  PERFORMANCE_REQUIREMENT: 'Performance Requirement',\n  PHYSICAL_REQUIREMENT: 'Physical Requirement',\n  DESIGN_CONSTRAINT: 'Design Constraint',\n};\n\nconst RiskLevel = {\n  LOW_RISK: 'Low',\n  MED_RISK: 'Medium',\n  HIGH_RISK: 'High',\n};\n\nconst VerifyType = {\n  VERIFY_ANALYSIS: 'Analysis',\n  VERIFY_DEMONSTRATION: 'Demonstration',\n  VERIFY_INSPECTION: 'Inspection',\n  VERIFY_TEST: 'Test',\n};\n\nconst Relationships = {\n  CONTAINS: 'contains',\n  COPIES: 'copies',\n  DERIVES: 'derives',\n  SATISFIES: 'satisfies',\n  VERIFIES: 'verifies',\n  REFINES: 'refines',\n  TRACES: 'traces',\n};\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\nconst addRequirement = (name, type) => {\n  if (typeof requirements[name] === 'undefined') {\n    requirements[name] = {\n      name,\n      type,\n\n      id: latestRequirement.id,\n      text: latestRequirement.text,\n      risk: latestRequirement.risk,\n      verifyMethod: latestRequirement.verifyMethod,\n    };\n  }\n  latestRequirement = {};\n\n  return requirements[name];\n};\n\nconst getRequirements = () => requirements;\n\nconst setNewReqId = (id) => {\n  if (typeof latestRequirement != 'undefined') {\n    latestRequirement.id = id;\n  }\n};\n\nconst setNewReqText = (text) => {\n  if (typeof latestRequirement != 'undefined') {\n    latestRequirement.text = text;\n  }\n};\n\nconst setNewReqRisk = (risk) => {\n  if (typeof latestRequirement != 'undefined') {\n    latestRequirement.risk = risk;\n  }\n};\n\nconst setNewReqVerifyMethod = (verifyMethod) => {\n  if (typeof latestRequirement != 'undefined') {\n    latestRequirement.verifyMethod = verifyMethod;\n  }\n};\n\nconst addElement = (name) => {\n  if (typeof elements[name] === 'undefined') {\n    elements[name] = {\n      name,\n\n      type: latestElement.type,\n      docRef: latestElement.docRef,\n    };\n    log.info('Added new requirement: ', name);\n  }\n  latestElement = {};\n\n  return elements[name];\n};\n\nconst getElements = () => elements;\n\nconst setNewElementType = (type) => {\n  if (typeof latestElement != 'undefined') {\n    latestElement.type = type;\n  }\n};\n\nconst setNewElementDocRef = (docRef) => {\n  if (typeof latestElement != 'undefined') {\n    latestElement.docRef = docRef;\n  }\n};\n\nconst addRelationship = (type, src, dst) => {\n  relations.push({\n    type,\n    src,\n    dst,\n  });\n};\n\nconst getRelationships = () => relations;\n\nconst clear = () => {\n  relations = [];\n  latestRequirement = {};\n  requirements = {};\n  latestElement = {};\n  elements = {};\n  commonClear();\n};\n\nexport default {\n  RequirementType,\n  RiskLevel,\n  VerifyType,\n  Relationships,\n\n  parseDirective,\n  getConfig: () => configApi.getConfig().req,\n\n  addRequirement,\n  getRequirements,\n  setNewReqId,\n  setNewReqText,\n  setNewReqRisk,\n  setNewReqVerifyMethod,\n  setAccTitle,\n  getAccTitle,\n  setAccDescription,\n  getAccDescription,\n\n  addElement,\n  getElements,\n  setNewElementType,\n  setNewElementDocRef,\n\n  addRelationship,\n  getRelationships,\n\n  clear,\n};\n","const ReqMarkers = {\n  CONTAINS: 'contains',\n  ARROW: 'arrow',\n};\n\nconst insertLineEndings = (parentNode, conf) => {\n  let containsNode = parentNode\n    .append('defs')\n    .append('marker')\n    .attr('id', ReqMarkers.CONTAINS + '_line_ending')\n    .attr('refX', 0)\n    .attr('refY', conf.line_height / 2)\n    .attr('markerWidth', conf.line_height)\n    .attr('markerHeight', conf.line_height)\n    .attr('orient', 'auto')\n    .append('g');\n\n  containsNode\n    .append('circle')\n    .attr('cx', conf.line_height / 2)\n    .attr('cy', conf.line_height / 2)\n    .attr('r', conf.line_height / 2)\n    // .attr('stroke', conf.rect_border_color)\n    // .attr('stroke-width', 1)\n    .attr('fill', 'none');\n\n  containsNode\n    .append('line')\n    .attr('x1', 0)\n    .attr('x2', conf.line_height)\n    .attr('y1', conf.line_height / 2)\n    .attr('y2', conf.line_height / 2)\n    // .attr('stroke', conf.rect_border_color)\n    .attr('stroke-width', 1);\n\n  containsNode\n    .append('line')\n    .attr('y1', 0)\n    .attr('y2', conf.line_height)\n    .attr('x1', conf.line_height / 2)\n    .attr('x2', conf.line_height / 2)\n    // .attr('stroke', conf.rect_border_color)\n    .attr('stroke-width', 1);\n\n  parentNode\n    .append('defs')\n    .append('marker')\n    .attr('id', ReqMarkers.ARROW + '_line_ending')\n    .attr('refX', conf.line_height)\n    .attr('refY', 0.5 * conf.line_height)\n    .attr('markerWidth', conf.line_height)\n    .attr('markerHeight', conf.line_height)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr(\n      'd',\n      `M0,0\n      L${conf.line_height},${conf.line_height / 2}\n      M${conf.line_height},${conf.line_height / 2}\n      L0,${conf.line_height}`\n    )\n    .attr('stroke-width', 1);\n  // .attr('stroke', conf.rect_border_color);\n};\n\nexport default {\n  ReqMarkers,\n  insertLineEndings,\n};\n","import { line, select } from 'd3';\nimport dagre from 'dagre';\nimport graphlib from 'graphlib';\n// import * as configApi from '../../config';\nimport { log } from '../../logger';\nimport { configureSvgSize } from '../../utils';\nimport common from '../common/common';\nimport { parser } from './parser/requirementDiagram';\nimport requirementDb from './requirementDb';\nimport markers from './requirementMarkers';\nimport { getConfig } from '../../config';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nconst conf = {};\nlet relCnt = 0;\n\nexport const setConf = function (cnf) {\n  if (typeof cnf === 'undefined') {\n    return;\n  }\n  const keys = Object.keys(cnf);\n  for (let i = 0; i < keys.length; i++) {\n    conf[keys[i]] = cnf[keys[i]];\n  }\n};\n\nconst newRectNode = (parentNode, id) => {\n  return parentNode\n    .insert('rect', '#' + id)\n    .attr('class', 'req reqBox')\n    .attr('x', 0)\n    .attr('y', 0)\n    .attr('width', conf.rect_min_width + 'px')\n    .attr('height', conf.rect_min_height + 'px');\n};\n\nconst newTitleNode = (parentNode, id, txts) => {\n  let x = conf.rect_min_width / 2;\n\n  let title = parentNode\n    .append('text')\n    .attr('class', 'req reqLabel reqTitle')\n    .attr('id', id)\n    .attr('x', x)\n    .attr('y', conf.rect_padding)\n    .attr('dominant-baseline', 'hanging');\n  // .attr(\n  //   'style',\n  //   'font-family: ' + configApi.getConfig().fontFamily + '; font-size: ' + conf.fontSize + 'px'\n  // )\n  let i = 0;\n  txts.forEach((textStr) => {\n    if (i == 0) {\n      title\n        .append('tspan')\n        .attr('text-anchor', 'middle')\n        .attr('x', conf.rect_min_width / 2)\n        .attr('dy', 0)\n        .text(textStr);\n    } else {\n      title\n        .append('tspan')\n        .attr('text-anchor', 'middle')\n        .attr('x', conf.rect_min_width / 2)\n        .attr('dy', conf.line_height * 0.75)\n        .text(textStr);\n    }\n    i++;\n  });\n\n  let yPadding = 1.5 * conf.rect_padding;\n  let linePadding = i * conf.line_height * 0.75;\n  let totalY = yPadding + linePadding;\n\n  parentNode\n    .append('line')\n    .attr('class', 'req-title-line')\n    .attr('x1', '0')\n    .attr('x2', conf.rect_min_width)\n    .attr('y1', totalY)\n    .attr('y2', totalY);\n\n  return {\n    titleNode: title,\n    y: totalY,\n  };\n};\n\nconst newBodyNode = (parentNode, id, txts, yStart) => {\n  let body = parentNode\n    .append('text')\n    .attr('class', 'req reqLabel')\n    .attr('id', id)\n    .attr('x', conf.rect_padding)\n    .attr('y', yStart)\n    .attr('dominant-baseline', 'hanging');\n  // .attr(\n  //   'style',\n  //   'font-family: ' + configApi.getConfig().fontFamily + '; font-size: ' + conf.fontSize + 'px'\n  // );\n\n  let currentRow = 0;\n  const charLimit = 30;\n  let wrappedTxts = [];\n  txts.forEach((textStr) => {\n    let currentTextLen = textStr.length;\n    while (currentTextLen > charLimit && currentRow < 3) {\n      let firstPart = textStr.substring(0, charLimit);\n      textStr = textStr.substring(charLimit, textStr.length);\n      currentTextLen = textStr.length;\n      wrappedTxts[wrappedTxts.length] = firstPart;\n      currentRow++;\n    }\n    if (currentRow == 3) {\n      let lastStr = wrappedTxts[wrappedTxts.length - 1];\n      wrappedTxts[wrappedTxts.length - 1] = lastStr.substring(0, lastStr.length - 4) + '...';\n    } else {\n      wrappedTxts[wrappedTxts.length] = textStr;\n    }\n    currentRow = 0;\n  });\n\n  wrappedTxts.forEach((textStr) => {\n    body.append('tspan').attr('x', conf.rect_padding).attr('dy', conf.line_height).text(textStr);\n  });\n\n  return body;\n};\n\nconst addEdgeLabel = (parentNode, svgPath, conf, txt) => {\n  // Find the half-way point\n  const len = svgPath.node().getTotalLength();\n  const labelPoint = svgPath.node().getPointAtLength(len * 0.5);\n\n  // Append a text node containing the label\n  const labelId = 'rel' + relCnt;\n  relCnt++;\n\n  const labelNode = parentNode\n    .append('text')\n    .attr('class', 'req relationshipLabel')\n    .attr('id', labelId)\n    .attr('x', labelPoint.x)\n    .attr('y', labelPoint.y)\n    .attr('text-anchor', 'middle')\n    .attr('dominant-baseline', 'middle')\n    // .attr('style', 'font-family: ' + conf.fontFamily + '; font-size: ' + conf.fontSize + 'px')\n    .text(txt);\n\n  // Figure out how big the opaque 'container' rectangle needs to be\n  const labelBBox = labelNode.node().getBBox();\n\n  // Insert the opaque rectangle before the text label\n  parentNode\n    .insert('rect', '#' + labelId)\n    .attr('class', 'req reqLabelBox')\n    .attr('x', labelPoint.x - labelBBox.width / 2)\n    .attr('y', labelPoint.y - labelBBox.height / 2)\n    .attr('width', labelBBox.width)\n    .attr('height', labelBBox.height)\n    .attr('fill', 'white')\n    .attr('fill-opacity', '85%');\n};\n\nconst drawRelationshipFromLayout = function (svg, rel, g, insert) {\n  // Find the edge relating to this relationship\n  const edge = g.edge(elementString(rel.src), elementString(rel.dst));\n\n  // Get a function that will generate the line path\n  const lineFunction = line()\n    .x(function (d) {\n      return d.x;\n    })\n    .y(function (d) {\n      return d.y;\n    });\n\n  // Insert the line at the right place\n  const svgPath = svg\n    .insert('path', '#' + insert)\n    .attr('class', 'er relationshipLine')\n    .attr('d', lineFunction(edge.points))\n    .attr('fill', 'none');\n\n  if (rel.type == requirementDb.Relationships.CONTAINS) {\n    svgPath.attr(\n      'marker-start',\n      'url(' + common.getUrl(conf.arrowMarkerAbsolute) + '#' + rel.type + '_line_ending' + ')'\n    );\n  } else {\n    svgPath.attr('stroke-dasharray', '10,7');\n    svgPath.attr(\n      'marker-end',\n      'url(' +\n        common.getUrl(conf.arrowMarkerAbsolute) +\n        '#' +\n        markers.ReqMarkers.ARROW +\n        '_line_ending' +\n        ')'\n    );\n  }\n\n  addEdgeLabel(svg, svgPath, conf, `<<${rel.type}>>`);\n\n  return;\n};\n\nexport const drawReqs = (reqs, graph, svgNode) => {\n  Object.keys(reqs).forEach((reqName) => {\n    let req = reqs[reqName];\n    reqName = elementString(reqName);\n    log.info('Added new requirement: ', reqName);\n\n    const groupNode = svgNode.append('g').attr('id', reqName);\n    const textId = 'req-' + reqName;\n    const rectNode = newRectNode(groupNode, textId);\n\n    let nodes = [];\n\n    let titleNodeInfo = newTitleNode(groupNode, reqName + '_title', [\n      `<<${req.type}>>`,\n      `${req.name}`,\n    ]);\n\n    nodes.push(titleNodeInfo.titleNode);\n\n    let bodyNode = newBodyNode(\n      groupNode,\n      reqName + '_body',\n      [\n        `Id: ${req.id}`,\n        `Text: ${req.text}`,\n        `Risk: ${req.risk}`,\n        `Verification: ${req.verifyMethod}`,\n      ],\n      titleNodeInfo.y\n    );\n\n    nodes.push(bodyNode);\n\n    const rectBBox = rectNode.node().getBBox();\n\n    // Add the entity to the graph\n    graph.setNode(reqName, {\n      width: rectBBox.width,\n      height: rectBBox.height,\n      shape: 'rect',\n      id: reqName,\n    });\n  });\n};\n\nexport const drawElements = (els, graph, svgNode) => {\n  Object.keys(els).forEach((elName) => {\n    let el = els[elName];\n    const id = elementString(elName);\n\n    const groupNode = svgNode.append('g').attr('id', id);\n    const textId = 'element-' + id;\n    const rectNode = newRectNode(groupNode, textId);\n\n    let nodes = [];\n\n    let titleNodeInfo = newTitleNode(groupNode, textId + '_title', [`<<Element>>`, `${elName}`]);\n\n    nodes.push(titleNodeInfo.titleNode);\n\n    let bodyNode = newBodyNode(\n      groupNode,\n      textId + '_body',\n      [`Type: ${el.type || 'Not Specified'}`, `Doc Ref: ${el.docRef || 'None'}`],\n      titleNodeInfo.y\n    );\n\n    nodes.push(bodyNode);\n\n    const rectBBox = rectNode.node().getBBox();\n\n    // Add the entity to the graph\n    graph.setNode(id, {\n      width: rectBBox.width,\n      height: rectBBox.height,\n      shape: 'rect',\n      id: id,\n    });\n  });\n};\n\nconst addRelationships = (relationships, g) => {\n  relationships.forEach(function (r) {\n    let src = elementString(r.src);\n    let dst = elementString(r.dst);\n    g.setEdge(src, dst, { relationship: r });\n  });\n  return relationships;\n};\n\nconst adjustEntities = function (svgNode, graph) {\n  graph.nodes().forEach(function (v) {\n    if (typeof v !== 'undefined' && typeof graph.node(v) !== 'undefined') {\n      svgNode.select('#' + v);\n      svgNode\n        .select('#' + v)\n        .attr(\n          'transform',\n          'translate(' +\n            (graph.node(v).x - graph.node(v).width / 2) +\n            ',' +\n            (graph.node(v).y - graph.node(v).height / 2) +\n            ' )'\n        );\n    }\n  });\n  return;\n};\n\nconst elementString = (str) => {\n  return str.replace(/\\s/g, '').replace(/\\./g, '_');\n};\n\nexport const draw = (text, id) => {\n  parser.yy = requirementDb;\n  parser.yy.clear();\n  parser.parse(text);\n\n  const securityLevel = getConfig().securityLevel;\n  // Handle root and Document for when rendering in sanbox mode\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  const svg = root.select(`[id='${id}']`);\n  markers.insertLineEndings(svg, conf);\n\n  const g = new graphlib.Graph({\n    multigraph: false,\n    compound: false,\n    directed: true,\n  })\n    .setGraph({\n      rankdir: conf.layoutDirection,\n      marginx: 20,\n      marginy: 20,\n      nodesep: 100,\n      edgesep: 100,\n      ranksep: 100,\n    })\n    .setDefaultEdgeLabel(function () {\n      return {};\n    });\n\n  let requirements = requirementDb.getRequirements();\n  let elements = requirementDb.getElements();\n  let relationships = requirementDb.getRelationships();\n\n  drawReqs(requirements, g, svg);\n  drawElements(elements, g, svg);\n  addRelationships(relationships, g);\n  dagre.layout(g);\n  adjustEntities(svg, g);\n\n  relationships.forEach(function (rel) {\n    drawRelationshipFromLayout(svg, rel, g, id);\n  });\n\n  // svg.attr('height', '500px');\n  const padding = conf.rect_padding;\n  const svgBounds = svg.node().getBBox();\n  const width = svgBounds.width + padding * 2;\n  const height = svgBounds.height + padding * 2;\n\n  configureSvgSize(svg, height, width, conf.useMaxWidth);\n\n  svg.attr('viewBox', `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`);\n  // Adds title and description to the requirements diagram\n  addSVGAccessibilityFields(parser.yy, svg, id);\n};\n\nexport default {\n  setConf,\n  draw,\n};\n","const getStyles = (options) => `\n\n  marker {\n    fill: ${options.relationColor};\n    stroke: ${options.relationColor};\n  }\n\n  marker.cross {\n    stroke: ${options.lineColor};\n  }\n\n  svg {\n    font-family: ${options.fontFamily};\n    font-size: ${options.fontSize};\n  }\n\n  .reqBox {\n    fill: ${options.requirementBackground};\n    fill-opacity: 100%;\n    stroke: ${options.requirementBorderColor};\n    stroke-width: ${options.requirementBorderSize};\n  }\n  \n  .reqTitle, .reqLabel{\n    fill:  ${options.requirementTextColor};\n  }\n  .reqLabelBox {\n    fill: ${options.relationLabelBackground};\n    fill-opacity: 100%;\n  }\n\n  .req-title-line {\n    stroke: ${options.requirementBorderColor};\n    stroke-width: ${options.requirementBorderSize};\n  }\n  .relationshipLine {\n    stroke: ${options.relationColor};\n    stroke-width: 1;\n  }\n  .relationshipLabel {\n    fill: ${options.relationLabelColor};\n  }\n\n`;\n// fill', conf.rect_fill)\nexport default getStyles;\n","import mermaidAPI from '../../mermaidAPI';\nimport * as configApi from '../../config';\nimport { log } from '../../logger';\nimport { sanitizeText } from '../common/common';\nimport {\n  setAccTitle,\n  getAccTitle,\n  setDiagramTitle,\n  getDiagramTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n} from '../../commonDb';\n\nlet prevActor = undefined;\nlet actors = {};\nlet messages = [];\nconst notes = [];\nlet diagramTitle = '';\nlet description = '';\nlet sequenceNumbersEnabled = false;\nlet wrapEnabled = false;\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\nexport const addActor = function (id, name, description, type) {\n  // Don't allow description nulling\n  const old = actors[id];\n  if (old && name === old.name && description == null) return;\n\n  // Don't allow null descriptions, either\n  if (description == null || description.text == null) {\n    description = { text: name, wrap: null, type };\n  }\n  if (type == null || description.text == null) {\n    description = { text: name, wrap: null, type };\n  }\n\n  actors[id] = {\n    name: name,\n    description: description.text,\n    wrap: (description.wrap === undefined && autoWrap()) || !!description.wrap,\n    prevActor: prevActor,\n    links: {},\n    properties: {},\n    actorCnt: null,\n    rectData: null,\n    type: type || 'participant',\n  };\n  if (prevActor && actors[prevActor]) {\n    actors[prevActor].nextActor = id;\n  }\n\n  prevActor = id;\n};\n\nconst activationCount = (part) => {\n  let i;\n  let count = 0;\n  for (i = 0; i < messages.length; i++) {\n    if (messages[i].type === LINETYPE.ACTIVE_START) {\n      if (messages[i].from.actor === part) {\n        count++;\n      }\n    }\n    if (messages[i].type === LINETYPE.ACTIVE_END) {\n      if (messages[i].from.actor === part) {\n        count--;\n      }\n    }\n  }\n  return count;\n};\n\nexport const addMessage = function (idFrom, idTo, message, answer) {\n  messages.push({\n    from: idFrom,\n    to: idTo,\n    message: message.text,\n    wrap: (message.wrap === undefined && autoWrap()) || !!message.wrap,\n    answer: answer,\n  });\n};\n\nexport const addSignal = function (\n  idFrom,\n  idTo,\n  message = { text: undefined, wrap: undefined },\n  messageType\n) {\n  if (messageType === LINETYPE.ACTIVE_END) {\n    const cnt = activationCount(idFrom.actor);\n    if (cnt < 1) {\n      // Bail out as there is an activation signal from an inactive participant\n      let error = new Error('Trying to inactivate an inactive participant (' + idFrom.actor + ')');\n      error.hash = {\n        text: '->>-',\n        token: '->>-',\n        line: '1',\n        loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n        expected: [\"'ACTIVE_PARTICIPANT'\"],\n      };\n      throw error;\n    }\n  }\n  messages.push({\n    from: idFrom,\n    to: idTo,\n    message: message.text,\n    wrap: (message.wrap === undefined && autoWrap()) || !!message.wrap,\n    type: messageType,\n  });\n  return true;\n};\n\nexport const getMessages = function () {\n  return messages;\n};\n\nexport const getActors = function () {\n  return actors;\n};\nexport const getActor = function (id) {\n  return actors[id];\n};\nexport const getActorKeys = function () {\n  return Object.keys(actors);\n};\nexport const enableSequenceNumbers = function () {\n  sequenceNumbersEnabled = true;\n};\nexport const disableSequenceNumbers = function () {\n  sequenceNumbersEnabled = false;\n};\nexport const showSequenceNumbers = () => sequenceNumbersEnabled;\n\nexport const setWrap = function (wrapSetting) {\n  wrapEnabled = wrapSetting;\n};\n\nexport const autoWrap = () => wrapEnabled;\n\nexport const clear = function () {\n  actors = {};\n  messages = [];\n  sequenceNumbersEnabled = false;\n  diagramTitle = '';\n  commonClear();\n};\n\nexport const parseMessage = function (str) {\n  const _str = str.trim();\n  const message = {\n    text: _str.replace(/^[:]?(?:no)?wrap:/, '').trim(),\n    wrap:\n      _str.match(/^[:]?wrap:/) !== null\n        ? true\n        : _str.match(/^[:]?nowrap:/) !== null\n        ? false\n        : undefined,\n  };\n  log.debug('parseMessage:', message);\n  return message;\n};\n\nexport const LINETYPE = {\n  SOLID: 0,\n  DOTTED: 1,\n  NOTE: 2,\n  SOLID_CROSS: 3,\n  DOTTED_CROSS: 4,\n  SOLID_OPEN: 5,\n  DOTTED_OPEN: 6,\n  LOOP_START: 10,\n  LOOP_END: 11,\n  ALT_START: 12,\n  ALT_ELSE: 13,\n  ALT_END: 14,\n  OPT_START: 15,\n  OPT_END: 16,\n  ACTIVE_START: 17,\n  ACTIVE_END: 18,\n  PAR_START: 19,\n  PAR_AND: 20,\n  PAR_END: 21,\n  RECT_START: 22,\n  RECT_END: 23,\n  SOLID_POINT: 24,\n  DOTTED_POINT: 25,\n  AUTONUMBER: 26,\n  CRITICAL_START: 27,\n  CRITICAL_OPTION: 28,\n  CRITICAL_END: 29,\n  BREAK_START: 30,\n  BREAK_END: 31,\n};\n\nexport const ARROWTYPE = {\n  FILLED: 0,\n  OPEN: 1,\n};\n\nexport const PLACEMENT = {\n  LEFTOF: 0,\n  RIGHTOF: 1,\n  OVER: 2,\n};\n\nexport const addNote = function (actor, placement, message) {\n  const note = {\n    actor: actor,\n    placement: placement,\n    message: message.text,\n    wrap: (message.wrap === undefined && autoWrap()) || !!message.wrap,\n  };\n\n  // Coerce actor into a [to, from, ...] array\n  const actors = [].concat(actor, actor);\n\n  notes.push(note);\n  messages.push({\n    from: actors[0],\n    to: actors[1],\n    message: message.text,\n    wrap: (message.wrap === undefined && autoWrap()) || !!message.wrap,\n    type: LINETYPE.NOTE,\n    placement: placement,\n  });\n};\n\nexport const addLinks = function (actorId, text) {\n  // find the actor\n  const actor = getActor(actorId);\n  // JSON.parse the text\n  try {\n    let sanitizedText = sanitizeText(text.text, configApi.getConfig());\n    sanitizedText = sanitizedText.replace(/&amp;/g, '&');\n    sanitizedText = sanitizedText.replace(/&equals;/g, '=');\n    const links = JSON.parse(sanitizedText);\n    // add the deserialized text to the actor's links field.\n    insertLinks(actor, links);\n  } catch (e) {\n    log.error('error while parsing actor link text', e);\n  }\n};\n\nexport const addALink = function (actorId, text) {\n  // find the actor\n  const actor = getActor(actorId);\n  try {\n    const links = {};\n    let sanitizedText = sanitizeText(text.text, configApi.getConfig());\n    var sep = sanitizedText.indexOf('@');\n    sanitizedText = sanitizedText.replace(/&amp;/g, '&');\n    sanitizedText = sanitizedText.replace(/&equals;/g, '=');\n    var label = sanitizedText.slice(0, sep - 1).trim();\n    var link = sanitizedText.slice(sep + 1).trim();\n\n    links[label] = link;\n    // add the deserialized text to the actor's links field.\n    insertLinks(actor, links);\n  } catch (e) {\n    log.error('error while parsing actor link text', e);\n  }\n};\n\n/**\n * @param {any} actor\n * @param {any} links\n */\nfunction insertLinks(actor, links) {\n  if (actor.links == null) {\n    actor.links = links;\n  } else {\n    for (let key in links) {\n      actor.links[key] = links[key];\n    }\n  }\n}\n\nexport const addProperties = function (actorId, text) {\n  // find the actor\n  const actor = getActor(actorId);\n  // JSON.parse the text\n  try {\n    let sanitizedText = sanitizeText(text.text, configApi.getConfig());\n    const properties = JSON.parse(sanitizedText);\n    // add the deserialized text to the actor's property field.\n    insertProperties(actor, properties);\n  } catch (e) {\n    log.error('error while parsing actor properties text', e);\n  }\n};\n\n/**\n * @param {any} actor\n * @param {any} properties\n */\nfunction insertProperties(actor, properties) {\n  if (actor.properties == null) {\n    actor.properties = properties;\n  } else {\n    for (let key in properties) {\n      actor.properties[key] = properties[key];\n    }\n  }\n}\n\nexport const addDetails = function (actorId, text) {\n  // find the actor\n  const actor = getActor(actorId);\n  const elem = document.getElementById(text.text);\n\n  // JSON.parse the text\n  try {\n    const text = elem.innerHTML;\n    const details = JSON.parse(text);\n    // add the deserialized text to the actor's property field.\n    if (details['properties']) {\n      insertProperties(actor, details['properties']);\n    }\n\n    if (details['links']) {\n      insertLinks(actor, details['links']);\n    }\n  } catch (e) {\n    log.error('error while parsing actor details text', e);\n  }\n};\n\nexport const getActorProperty = function (actor, key) {\n  if (typeof actor !== 'undefined' && typeof actor.properties !== 'undefined') {\n    return actor.properties[key];\n  }\n\n  return undefined;\n};\n\nexport const apply = function (param) {\n  if (param instanceof Array) {\n    param.forEach(function (item) {\n      apply(item);\n    });\n  } else {\n    switch (param.type) {\n      case 'sequenceIndex':\n        messages.push({\n          from: undefined,\n          to: undefined,\n          message: {\n            start: param.sequenceIndex,\n            step: param.sequenceIndexStep,\n            visible: param.sequenceVisible,\n          },\n          wrap: false,\n          type: param.signalType,\n        });\n        break;\n      case 'addParticipant':\n        addActor(param.actor, param.actor, param.description, 'participant');\n        break;\n      case 'addActor':\n        addActor(param.actor, param.actor, param.description, 'actor');\n        break;\n      case 'activeStart':\n        addSignal(param.actor, undefined, undefined, param.signalType);\n        break;\n      case 'activeEnd':\n        addSignal(param.actor, undefined, undefined, param.signalType);\n        break;\n      case 'addNote':\n        addNote(param.actor, param.placement, param.text);\n        break;\n      case 'addLinks':\n        addLinks(param.actor, param.text);\n        break;\n      case 'addALink':\n        addALink(param.actor, param.text);\n        break;\n      case 'addProperties':\n        addProperties(param.actor, param.text);\n        break;\n      case 'addDetails':\n        addDetails(param.actor, param.text);\n        break;\n      case 'addMessage':\n        addSignal(param.from, param.to, param.msg, param.signalType);\n        break;\n      case 'loopStart':\n        addSignal(undefined, undefined, param.loopText, param.signalType);\n        break;\n      case 'loopEnd':\n        addSignal(undefined, undefined, undefined, param.signalType);\n        break;\n      case 'rectStart':\n        addSignal(undefined, undefined, param.color, param.signalType);\n        break;\n      case 'rectEnd':\n        addSignal(undefined, undefined, undefined, param.signalType);\n        break;\n      case 'optStart':\n        addSignal(undefined, undefined, param.optText, param.signalType);\n        break;\n      case 'optEnd':\n        addSignal(undefined, undefined, undefined, param.signalType);\n        break;\n      case 'altStart':\n        addSignal(undefined, undefined, param.altText, param.signalType);\n        break;\n      case 'else':\n        addSignal(undefined, undefined, param.altText, param.signalType);\n        break;\n      case 'altEnd':\n        addSignal(undefined, undefined, undefined, param.signalType);\n        break;\n      case 'setAccTitle':\n        setAccTitle(param.text);\n        break;\n      case 'parStart':\n        addSignal(undefined, undefined, param.parText, param.signalType);\n        break;\n      case 'and':\n        addSignal(undefined, undefined, param.parText, param.signalType);\n        break;\n      case 'parEnd':\n        addSignal(undefined, undefined, undefined, param.signalType);\n        break;\n      case 'criticalStart':\n        addSignal(undefined, undefined, param.criticalText, param.signalType);\n        break;\n      case 'option':\n        addSignal(undefined, undefined, param.optionText, param.signalType);\n        break;\n      case 'criticalEnd':\n        addSignal(undefined, undefined, undefined, param.signalType);\n        break;\n      case 'breakStart':\n        addSignal(undefined, undefined, param.breakText, param.signalType);\n        break;\n      case 'breakEnd':\n        addSignal(undefined, undefined, undefined, param.signalType);\n        break;\n    }\n  }\n};\n\nexport default {\n  addActor,\n  addMessage,\n  addSignal,\n  addLinks,\n  addDetails,\n  addProperties,\n  autoWrap,\n  setWrap,\n  enableSequenceNumbers,\n  disableSequenceNumbers,\n  showSequenceNumbers,\n  getMessages,\n  getActors,\n  getActor,\n  getActorKeys,\n  getActorProperty,\n  getAccTitle,\n  getDiagramTitle,\n  setDiagramTitle,\n  parseDirective,\n  getConfig: () => configApi.getConfig().sequence,\n  clear,\n  parseMessage,\n  LINETYPE,\n  ARROWTYPE,\n  PLACEMENT,\n  addNote,\n  setAccTitle,\n  apply,\n  setAccDescription,\n  getAccDescription,\n};\n","import { select, selectAll } from 'd3';\nimport svgDraw, { drawText, fixLifeLineHeights } from './svgDraw';\nimport { log } from '../../logger';\nimport { parser } from './parser/sequenceDiagram';\nimport common from '../common/common';\nimport sequenceDb from './sequenceDb';\nimport * as configApi from '../../config';\nimport utils, { assignWithDepth, configureSvgSize } from '../../utils';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nparser.yy = sequenceDb;\n\nlet conf = {};\n\nexport const bounds = {\n  data: {\n    startx: undefined,\n    stopx: undefined,\n    starty: undefined,\n    stopy: undefined,\n  },\n  verticalPos: 0,\n  sequenceItems: [],\n  activations: [],\n  models: {\n    getHeight: function () {\n      return (\n        Math.max.apply(\n          null,\n          this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0)\n        ) +\n        (this.loops.length === 0\n          ? 0\n          : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) +\n        (this.messages.length === 0\n          ? 0\n          : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) +\n        (this.notes.length === 0\n          ? 0\n          : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h))\n      );\n    },\n    clear: function () {\n      this.actors = [];\n      this.loops = [];\n      this.messages = [];\n      this.notes = [];\n    },\n    addActor: function (actorModel) {\n      this.actors.push(actorModel);\n    },\n    addLoop: function (loopModel) {\n      this.loops.push(loopModel);\n    },\n    addMessage: function (msgModel) {\n      this.messages.push(msgModel);\n    },\n    addNote: function (noteModel) {\n      this.notes.push(noteModel);\n    },\n    lastActor: function () {\n      return this.actors[this.actors.length - 1];\n    },\n    lastLoop: function () {\n      return this.loops[this.loops.length - 1];\n    },\n    lastMessage: function () {\n      return this.messages[this.messages.length - 1];\n    },\n    lastNote: function () {\n      return this.notes[this.notes.length - 1];\n    },\n    actors: [],\n    loops: [],\n    messages: [],\n    notes: [],\n  },\n  init: function () {\n    this.sequenceItems = [];\n    this.activations = [];\n    this.models.clear();\n    this.data = {\n      startx: undefined,\n      stopx: undefined,\n      starty: undefined,\n      stopy: undefined,\n    };\n    this.verticalPos = 0;\n    setConf(parser.yy.getConfig());\n  },\n  updateVal: function (obj, key, val, fun) {\n    if (typeof obj[key] === 'undefined') {\n      obj[key] = val;\n    } else {\n      obj[key] = fun(val, obj[key]);\n    }\n  },\n  updateBounds: function (startx, starty, stopx, stopy) {\n    const _self = this;\n    let cnt = 0;\n    /** @param {any} type */\n    function updateFn(type) {\n      return function updateItemBounds(item) {\n        cnt++;\n        // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems\n        const n = _self.sequenceItems.length - cnt + 1;\n\n        _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min);\n        _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max);\n\n        _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min);\n        _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max);\n\n        if (!(type === 'activation')) {\n          _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min);\n          _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max);\n\n          _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min);\n          _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max);\n        }\n      };\n    }\n\n    this.sequenceItems.forEach(updateFn());\n    this.activations.forEach(updateFn('activation'));\n  },\n  insert: function (startx, starty, stopx, stopy) {\n    const _startx = Math.min(startx, stopx);\n    const _stopx = Math.max(startx, stopx);\n    const _starty = Math.min(starty, stopy);\n    const _stopy = Math.max(starty, stopy);\n\n    this.updateVal(bounds.data, 'startx', _startx, Math.min);\n    this.updateVal(bounds.data, 'starty', _starty, Math.min);\n    this.updateVal(bounds.data, 'stopx', _stopx, Math.max);\n    this.updateVal(bounds.data, 'stopy', _stopy, Math.max);\n\n    this.updateBounds(_startx, _starty, _stopx, _stopy);\n  },\n  newActivation: function (message, diagram, actors) {\n    const actorRect = actors[message.from.actor];\n    const stackedSize = actorActivations(message.from.actor).length || 0;\n    const x = actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2;\n    this.activations.push({\n      startx: x,\n      starty: this.verticalPos + 2,\n      stopx: x + conf.activationWidth,\n      stopy: undefined,\n      actor: message.from.actor,\n      anchored: svgDraw.anchorElement(diagram),\n    });\n  },\n  endActivation: function (message) {\n    // find most recent activation for given actor\n    const lastActorActivationIdx = this.activations\n      .map(function (activation) {\n        return activation.actor;\n      })\n      .lastIndexOf(message.from.actor);\n    return this.activations.splice(lastActorActivationIdx, 1)[0];\n  },\n  createLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) {\n    return {\n      startx: undefined,\n      starty: this.verticalPos,\n      stopx: undefined,\n      stopy: undefined,\n      title: title.message,\n      wrap: title.wrap,\n      width: title.width,\n      height: 0,\n      fill: fill,\n    };\n  },\n  newLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) {\n    this.sequenceItems.push(this.createLoop(title, fill));\n  },\n  endLoop: function () {\n    return this.sequenceItems.pop();\n  },\n  addSectionToLoop: function (message) {\n    const loop = this.sequenceItems.pop();\n    loop.sections = loop.sections || [];\n    loop.sectionTitles = loop.sectionTitles || [];\n    loop.sections.push({ y: bounds.getVerticalPos(), height: 0 });\n    loop.sectionTitles.push(message);\n    this.sequenceItems.push(loop);\n  },\n  bumpVerticalPos: function (bump) {\n    this.verticalPos = this.verticalPos + bump;\n    this.data.stopy = this.verticalPos;\n  },\n  getVerticalPos: function () {\n    return this.verticalPos;\n  },\n  getBounds: function () {\n    return { bounds: this.data, models: this.models };\n  },\n};\n\n/**\n * Draws an note in the diagram with the attached line\n *\n * @param {any} elem - The diagram to draw to.\n * @param {{ x: number; y: number; message: string; width: number }} noteModel - Startx: x axis\n *   start position, verticalPos: y axis position, messsage: the message to be shown, width: Set\n *   this with a custom width to override the default configured width.\n */\nconst drawNote = function (elem, noteModel) {\n  bounds.bumpVerticalPos(conf.boxMargin);\n  noteModel.height = conf.boxMargin;\n  noteModel.starty = bounds.getVerticalPos();\n  const rect = svgDraw.getNoteRect();\n  rect.x = noteModel.startx;\n  rect.y = noteModel.starty;\n  rect.width = noteModel.width || conf.width;\n  rect.class = 'note';\n\n  let g = elem.append('g');\n  const rectElem = svgDraw.drawRect(g, rect);\n  const textObj = svgDraw.getTextObj();\n  textObj.x = noteModel.startx;\n  textObj.y = noteModel.starty;\n  textObj.width = rect.width;\n  textObj.dy = '1em';\n  textObj.text = noteModel.message;\n  textObj.class = 'noteText';\n  textObj.fontFamily = conf.noteFontFamily;\n  textObj.fontSize = conf.noteFontSize;\n  textObj.fontWeight = conf.noteFontWeight;\n  textObj.anchor = conf.noteAlign;\n  textObj.textMargin = conf.noteMargin;\n  textObj.valign = conf.noteAlign;\n\n  let textElem = drawText(g, textObj);\n\n  let textHeight = Math.round(\n    textElem\n      .map((te) => (te._groups || te)[0][0].getBBox().height)\n      .reduce((acc, curr) => acc + curr)\n  );\n\n  rectElem.attr('height', textHeight + 2 * conf.noteMargin);\n  noteModel.height += textHeight + 2 * conf.noteMargin;\n  bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin);\n  noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin;\n  noteModel.stopx = noteModel.startx + rect.width;\n  bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy);\n  bounds.models.addNote(noteModel);\n};\n\nconst messageFont = (cnf) => {\n  return {\n    fontFamily: cnf.messageFontFamily,\n    fontSize: cnf.messageFontSize,\n    fontWeight: cnf.messageFontWeight,\n  };\n};\nconst noteFont = (cnf) => {\n  return {\n    fontFamily: cnf.noteFontFamily,\n    fontSize: cnf.noteFontSize,\n    fontWeight: cnf.noteFontWeight,\n  };\n};\nconst actorFont = (cnf) => {\n  return {\n    fontFamily: cnf.actorFontFamily,\n    fontSize: cnf.actorFontSize,\n    fontWeight: cnf.actorFontWeight,\n  };\n};\n\n/**\n * Process a message by adding its dimensions to the bound. It returns the Y coordinate of the\n * message so it can be drawn later. We do not draw the message at this point so the arrowhead can\n * be on top of the activation box.\n *\n * @param {any} diagram - The parent of the message element\n * @param {any} msgModel - The model containing fields describing a message\n * @returns {number} LineStarty - The Y coordinate at which the message line starts\n */\nconst boundMessage = function (diagram, msgModel) {\n  bounds.bumpVerticalPos(10);\n  const { startx, stopx, message } = msgModel;\n  const lines = common.splitBreaks(message).length;\n  let textDims = utils.calculateTextDimensions(message, messageFont(conf));\n  const lineHeight = textDims.height / lines;\n  msgModel.height += lineHeight;\n\n  bounds.bumpVerticalPos(lineHeight);\n\n  let lineStarty;\n  let totalOffset = textDims.height - 10;\n  let textWidth = textDims.width;\n\n  if (startx === stopx) {\n    lineStarty = bounds.getVerticalPos() + totalOffset;\n    if (!conf.rightAngles) {\n      totalOffset += conf.boxMargin;\n      lineStarty = bounds.getVerticalPos() + totalOffset;\n    }\n    totalOffset += 30;\n    const dx = Math.max(textWidth / 2, conf.width / 2);\n    bounds.insert(\n      startx - dx,\n      bounds.getVerticalPos() - 10 + totalOffset,\n      stopx + dx,\n      bounds.getVerticalPos() + 30 + totalOffset\n    );\n  } else {\n    totalOffset += conf.boxMargin;\n    lineStarty = bounds.getVerticalPos() + totalOffset;\n    bounds.insert(startx, lineStarty - 10, stopx, lineStarty);\n  }\n  bounds.bumpVerticalPos(totalOffset);\n  msgModel.height += totalOffset;\n  msgModel.stopy = msgModel.starty + msgModel.height;\n  bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy);\n\n  return lineStarty;\n};\n\n/**\n * Draws a message. Note that the bounds have previously been updated by boundMessage.\n *\n * @param {any} diagram - The parent of the message element\n * @param {any} msgModel - The model containing fields describing a message\n * @param {float} lineStarty - The Y coordinate at which the message line starts\n */\nconst drawMessage = function (diagram, msgModel, lineStarty) {\n  const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel;\n  let textDims = utils.calculateTextDimensions(message, messageFont(conf));\n  const textObj = svgDraw.getTextObj();\n  textObj.x = startx;\n  textObj.y = starty + 10;\n  textObj.width = stopx - startx;\n  textObj.class = 'messageText';\n  textObj.dy = '1em';\n  textObj.text = message;\n  textObj.fontFamily = conf.messageFontFamily;\n  textObj.fontSize = conf.messageFontSize;\n  textObj.fontWeight = conf.messageFontWeight;\n  textObj.anchor = conf.messageAlign;\n  textObj.valign = conf.messageAlign;\n  textObj.textMargin = conf.wrapPadding;\n  textObj.tspan = false;\n\n  drawText(diagram, textObj);\n\n  let textWidth = textDims.width;\n\n  let line;\n  if (startx === stopx) {\n    if (conf.rightAngles) {\n      line = diagram\n        .append('path')\n        .attr(\n          'd',\n          `M  ${startx},${lineStarty} H ${startx + Math.max(conf.width / 2, textWidth / 2)} V ${\n            lineStarty + 25\n          } H ${startx}`\n        );\n    } else {\n      line = diagram\n        .append('path')\n        .attr(\n          'd',\n          'M ' +\n            startx +\n            ',' +\n            lineStarty +\n            ' C ' +\n            (startx + 60) +\n            ',' +\n            (lineStarty - 10) +\n            ' ' +\n            (startx + 60) +\n            ',' +\n            (lineStarty + 30) +\n            ' ' +\n            startx +\n            ',' +\n            (lineStarty + 20)\n        );\n    }\n  } else {\n    line = diagram.append('line');\n    line.attr('x1', startx);\n    line.attr('y1', lineStarty);\n    line.attr('x2', stopx);\n    line.attr('y2', lineStarty);\n  }\n  // Make an SVG Container\n  // Draw the line\n  if (\n    type === parser.yy.LINETYPE.DOTTED ||\n    type === parser.yy.LINETYPE.DOTTED_CROSS ||\n    type === parser.yy.LINETYPE.DOTTED_POINT ||\n    type === parser.yy.LINETYPE.DOTTED_OPEN\n  ) {\n    line.style('stroke-dasharray', '3, 3');\n    line.attr('class', 'messageLine1');\n  } else {\n    line.attr('class', 'messageLine0');\n  }\n\n  let url = '';\n  if (conf.arrowMarkerAbsolute) {\n    url =\n      window.location.protocol +\n      '//' +\n      window.location.host +\n      window.location.pathname +\n      window.location.search;\n    url = url.replace(/\\(/g, '\\\\(');\n    url = url.replace(/\\)/g, '\\\\)');\n  }\n\n  line.attr('stroke-width', 2);\n  line.attr('stroke', 'none'); // handled by theme/css anyway\n  line.style('fill', 'none'); // remove any fill colour\n  if (type === parser.yy.LINETYPE.SOLID || type === parser.yy.LINETYPE.DOTTED) {\n    line.attr('marker-end', 'url(' + url + '#arrowhead)');\n  }\n  if (type === parser.yy.LINETYPE.SOLID_POINT || type === parser.yy.LINETYPE.DOTTED_POINT) {\n    line.attr('marker-end', 'url(' + url + '#filled-head)');\n  }\n\n  if (type === parser.yy.LINETYPE.SOLID_CROSS || type === parser.yy.LINETYPE.DOTTED_CROSS) {\n    line.attr('marker-end', 'url(' + url + '#crosshead)');\n  }\n\n  // add node number\n  if (sequenceVisible || conf.showSequenceNumbers) {\n    line.attr('marker-start', 'url(' + url + '#sequencenumber)');\n    diagram\n      .append('text')\n      .attr('x', startx)\n      .attr('y', lineStarty + 4)\n      .attr('font-family', 'sans-serif')\n      .attr('font-size', '12px')\n      .attr('text-anchor', 'middle')\n      .attr('class', 'sequenceNumber')\n      .text(sequenceIndex);\n  }\n};\n\nexport const drawActors = function (\n  diagram,\n  actors,\n  actorKeys,\n  verticalPos,\n  configuration,\n  messages\n) {\n  if (configuration.hideUnusedParticipants === true) {\n    const newActors = new Set();\n    messages.forEach((message) => {\n      newActors.add(message.from);\n      newActors.add(message.to);\n    });\n    actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey));\n  }\n\n  // Draw the actors\n  let prevWidth = 0;\n  let prevMargin = 0;\n  let maxHeight = 0;\n  for (let i = 0; i < actorKeys.length; i++) {\n    const actor = actors[actorKeys[i]];\n\n    // Add some rendering data to the object\n    actor.width = actor.width || conf.width;\n    actor.height = Math.max(actor.height || conf.height, conf.height);\n    actor.margin = actor.margin || conf.actorMargin;\n\n    actor.x = prevWidth + prevMargin;\n    actor.y = verticalPos;\n\n    // Draw the box with the attached line\n    const height = svgDraw.drawActor(diagram, actor, conf);\n    maxHeight = Math.max(maxHeight, height);\n    bounds.insert(actor.x, verticalPos, actor.x + actor.width, actor.height);\n\n    prevWidth += actor.width;\n    prevMargin += actor.margin;\n    bounds.models.addActor(actor);\n  }\n\n  // Add a margin between the actor boxes and the first arrow\n  bounds.bumpVerticalPos(maxHeight);\n};\n\nexport const drawActorsPopup = function (diagram, actors, actorKeys, doc) {\n  var maxHeight = 0;\n  var maxWidth = 0;\n  for (let i = 0; i < actorKeys.length; i++) {\n    const actor = actors[actorKeys[i]];\n    const minMenuWidth = getRequiredPopupWidth(actor);\n    var menuDimensions = svgDraw.drawPopup(\n      diagram,\n      actor,\n      minMenuWidth,\n      conf,\n      conf.forceMenus,\n      doc\n    );\n    if (menuDimensions.height > maxHeight) {\n      maxHeight = menuDimensions.height;\n    }\n    if (menuDimensions.width + actor.x > maxWidth) {\n      maxWidth = menuDimensions.width + actor.x;\n    }\n  }\n\n  return { maxHeight: maxHeight, maxWidth: maxWidth };\n};\n\nexport const setConf = function (cnf) {\n  assignWithDepth(conf, cnf);\n\n  if (cnf.fontFamily) {\n    conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily;\n  }\n  if (cnf.fontSize) {\n    conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize;\n  }\n  if (cnf.fontWeight) {\n    conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight;\n  }\n};\n\nconst actorActivations = function (actor) {\n  return bounds.activations.filter(function (activation) {\n    return activation.actor === actor;\n  });\n};\n\nconst activationBounds = function (actor, actors) {\n  // handle multiple stacked activations for same actor\n  const actorObj = actors[actor];\n  const activations = actorActivations(actor);\n\n  const left = activations.reduce(function (acc, activation) {\n    return Math.min(acc, activation.startx);\n  }, actorObj.x + actorObj.width / 2);\n  const right = activations.reduce(function (acc, activation) {\n    return Math.max(acc, activation.stopx);\n  }, actorObj.x + actorObj.width / 2);\n  return [left, right];\n};\n\n/**\n * @param {any} loopWidths\n * @param {any} msg\n * @param {any} preMargin\n * @param {any} postMargin\n * @param {any} addLoopFn\n */\nfunction adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) {\n  bounds.bumpVerticalPos(preMargin);\n  let heightAdjust = postMargin;\n  if (msg.id && msg.message && loopWidths[msg.id]) {\n    let loopWidth = loopWidths[msg.id].width;\n    let textConf = messageFont(conf);\n    msg.message = utils.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf);\n    msg.width = loopWidth;\n    msg.wrap = true;\n\n    // const lines = common.splitBreaks(msg.message).length;\n    const textDims = utils.calculateTextDimensions(msg.message, textConf);\n    const totalOffset = Math.max(textDims.height, conf.labelBoxHeight);\n    heightAdjust = postMargin + totalOffset;\n    log.debug(`${totalOffset} - ${msg.message}`);\n  }\n  addLoopFn(msg);\n  bounds.bumpVerticalPos(heightAdjust);\n}\n\n/**\n * Draws a sequenceDiagram in the tag with id: id based on the graph definition in text.\n *\n * @param {any} text\n * @param {any} id\n */\nexport const draw = function (text, id) {\n  conf = configApi.getConfig().sequence;\n  const securityLevel = configApi.getConfig().securityLevel;\n  // Handle root and Document for when rendering in sanbox mode\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  parser.yy.clear();\n  parser.yy.setWrap(conf.wrap);\n  parser.parse(text + '\\n');\n  bounds.init();\n  log.debug(`C:${JSON.stringify(conf, null, 2)}`);\n\n  const diagram =\n    securityLevel === 'sandbox' ? root.select(`[id=\"${id}\"]`) : select(`[id=\"${id}\"]`);\n\n  // Fetch data from the parsing\n  const actors = parser.yy.getActors();\n  const actorKeys = parser.yy.getActorKeys();\n  const messages = parser.yy.getMessages();\n  const title = parser.yy.getDiagramTitle();\n\n  const maxMessageWidthPerActor = getMaxMessageWidthPerActor(actors, messages);\n  conf.height = calculateActorMargins(actors, maxMessageWidthPerActor);\n\n  svgDraw.insertComputerIcon(diagram);\n  svgDraw.insertDatabaseIcon(diagram);\n  svgDraw.insertClockIcon(diagram);\n\n  drawActors(diagram, actors, actorKeys, 0, conf, messages);\n  const loopWidths = calculateLoopBounds(messages, actors, maxMessageWidthPerActor);\n\n  // The arrow head definition is attached to the svg once\n  svgDraw.insertArrowHead(diagram);\n  svgDraw.insertArrowCrossHead(diagram);\n  svgDraw.insertArrowFilledHead(diagram);\n  svgDraw.insertSequenceNumber(diagram);\n\n  /**\n   * @param {any} msg\n   * @param {any} verticalPos\n   */\n  function activeEnd(msg, verticalPos) {\n    const activationData = bounds.endActivation(msg);\n    if (activationData.starty + 18 > verticalPos) {\n      activationData.starty = verticalPos - 6;\n      verticalPos += 12;\n    }\n    svgDraw.drawActivation(\n      diagram,\n      activationData,\n      verticalPos,\n      conf,\n      actorActivations(msg.from.actor).length\n    );\n\n    bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos);\n  }\n\n  // Draw the messages/signals\n  let sequenceIndex = 1;\n  let sequenceIndexStep = 1;\n  let messagesToDraw = Array();\n  messages.forEach(function (msg) {\n    let loopModel, noteModel, msgModel;\n\n    switch (msg.type) {\n      case parser.yy.LINETYPE.NOTE:\n        noteModel = msg.noteModel;\n        drawNote(diagram, noteModel);\n        break;\n      case parser.yy.LINETYPE.ACTIVE_START:\n        bounds.newActivation(msg, diagram, actors);\n        break;\n      case parser.yy.LINETYPE.ACTIVE_END:\n        activeEnd(msg, bounds.getVerticalPos());\n        break;\n      case parser.yy.LINETYPE.LOOP_START:\n        adjustLoopHeightForWrap(\n          loopWidths,\n          msg,\n          conf.boxMargin,\n          conf.boxMargin + conf.boxTextMargin,\n          (message) => bounds.newLoop(message)\n        );\n        break;\n      case parser.yy.LINETYPE.LOOP_END:\n        loopModel = bounds.endLoop();\n        svgDraw.drawLoop(diagram, loopModel, 'loop', conf);\n        bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n        bounds.models.addLoop(loopModel);\n        break;\n      case parser.yy.LINETYPE.RECT_START:\n        adjustLoopHeightForWrap(loopWidths, msg, conf.boxMargin, conf.boxMargin, (message) =>\n          bounds.newLoop(undefined, message.message)\n        );\n        break;\n      case parser.yy.LINETYPE.RECT_END:\n        loopModel = bounds.endLoop();\n        svgDraw.drawBackgroundRect(diagram, loopModel);\n        bounds.models.addLoop(loopModel);\n        bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n        break;\n      case parser.yy.LINETYPE.OPT_START:\n        adjustLoopHeightForWrap(\n          loopWidths,\n          msg,\n          conf.boxMargin,\n          conf.boxMargin + conf.boxTextMargin,\n          (message) => bounds.newLoop(message)\n        );\n        break;\n      case parser.yy.LINETYPE.OPT_END:\n        loopModel = bounds.endLoop();\n        svgDraw.drawLoop(diagram, loopModel, 'opt', conf);\n        bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n        bounds.models.addLoop(loopModel);\n        break;\n      case parser.yy.LINETYPE.ALT_START:\n        adjustLoopHeightForWrap(\n          loopWidths,\n          msg,\n          conf.boxMargin,\n          conf.boxMargin + conf.boxTextMargin,\n          (message) => bounds.newLoop(message)\n        );\n        break;\n      case parser.yy.LINETYPE.ALT_ELSE:\n        adjustLoopHeightForWrap(\n          loopWidths,\n          msg,\n          conf.boxMargin + conf.boxTextMargin,\n          conf.boxMargin,\n          (message) => bounds.addSectionToLoop(message)\n        );\n        break;\n      case parser.yy.LINETYPE.ALT_END:\n        loopModel = bounds.endLoop();\n        svgDraw.drawLoop(diagram, loopModel, 'alt', conf);\n        bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n        bounds.models.addLoop(loopModel);\n        break;\n      case parser.yy.LINETYPE.PAR_START:\n        adjustLoopHeightForWrap(\n          loopWidths,\n          msg,\n          conf.boxMargin,\n          conf.boxMargin + conf.boxTextMargin,\n          (message) => bounds.newLoop(message)\n        );\n        break;\n      case parser.yy.LINETYPE.PAR_AND:\n        adjustLoopHeightForWrap(\n          loopWidths,\n          msg,\n          conf.boxMargin + conf.boxTextMargin,\n          conf.boxMargin,\n          (message) => bounds.addSectionToLoop(message)\n        );\n        break;\n      case parser.yy.LINETYPE.PAR_END:\n        loopModel = bounds.endLoop();\n        svgDraw.drawLoop(diagram, loopModel, 'par', conf);\n        bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n        bounds.models.addLoop(loopModel);\n        break;\n      case parser.yy.LINETYPE.AUTONUMBER:\n        sequenceIndex = msg.message.start || sequenceIndex;\n        sequenceIndexStep = msg.message.step || sequenceIndexStep;\n        if (msg.message.visible) parser.yy.enableSequenceNumbers();\n        else parser.yy.disableSequenceNumbers();\n        break;\n      case parser.yy.LINETYPE.CRITICAL_START:\n        adjustLoopHeightForWrap(\n          loopWidths,\n          msg,\n          conf.boxMargin,\n          conf.boxMargin + conf.boxTextMargin,\n          (message) => bounds.newLoop(message)\n        );\n        break;\n      case parser.yy.LINETYPE.CRITICAL_OPTION:\n        adjustLoopHeightForWrap(\n          loopWidths,\n          msg,\n          conf.boxMargin + conf.boxTextMargin,\n          conf.boxMargin,\n          (message) => bounds.addSectionToLoop(message)\n        );\n        break;\n      case parser.yy.LINETYPE.CRITICAL_END:\n        loopModel = bounds.endLoop();\n        svgDraw.drawLoop(diagram, loopModel, 'critical', conf);\n        bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n        bounds.models.addLoop(loopModel);\n        break;\n      case parser.yy.LINETYPE.BREAK_START:\n        adjustLoopHeightForWrap(\n          loopWidths,\n          msg,\n          conf.boxMargin,\n          conf.boxMargin + conf.boxTextMargin,\n          (message) => bounds.newLoop(message)\n        );\n        break;\n      case parser.yy.LINETYPE.BREAK_END:\n        loopModel = bounds.endLoop();\n        svgDraw.drawLoop(diagram, loopModel, 'break', conf);\n        bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n        bounds.models.addLoop(loopModel);\n        break;\n      default:\n        try {\n          // lastMsg = msg\n          msgModel = msg.msgModel;\n          msgModel.starty = bounds.getVerticalPos();\n          msgModel.sequenceIndex = sequenceIndex;\n          msgModel.sequenceVisible = parser.yy.showSequenceNumbers();\n          let lineStarty = boundMessage(diagram, msgModel);\n          messagesToDraw.push({ messageModel: msgModel, lineStarty: lineStarty });\n          bounds.models.addMessage(msgModel);\n        } catch (e) {\n          log.error('error while drawing message', e);\n        }\n    }\n\n    // Increment sequence counter if msg.type is a line (and not another event like activation or note, etc)\n    if (\n      [\n        parser.yy.LINETYPE.SOLID_OPEN,\n        parser.yy.LINETYPE.DOTTED_OPEN,\n        parser.yy.LINETYPE.SOLID,\n        parser.yy.LINETYPE.DOTTED,\n        parser.yy.LINETYPE.SOLID_CROSS,\n        parser.yy.LINETYPE.DOTTED_CROSS,\n        parser.yy.LINETYPE.SOLID_POINT,\n        parser.yy.LINETYPE.DOTTED_POINT,\n      ].includes(msg.type)\n    ) {\n      sequenceIndex = sequenceIndex + sequenceIndexStep;\n    }\n  });\n\n  messagesToDraw.forEach((e) => drawMessage(diagram, e.messageModel, e.lineStarty));\n\n  if (conf.mirrorActors) {\n    // Draw actors below diagram\n    bounds.bumpVerticalPos(conf.boxMargin * 2);\n    drawActors(diagram, actors, actorKeys, bounds.getVerticalPos(), conf, messages);\n    bounds.bumpVerticalPos(conf.boxMargin);\n    fixLifeLineHeights(diagram, bounds.getVerticalPos());\n  }\n\n  // only draw popups for the top row of actors.\n  var requiredBoxSize = drawActorsPopup(diagram, actors, actorKeys, doc);\n\n  const { bounds: box } = bounds.getBounds();\n\n  // Adjust line height of actor lines now that the height of the diagram is known\n  log.debug('For line height fix Querying: #' + id + ' .actor-line');\n  const actorLines = selectAll('#' + id + ' .actor-line');\n  actorLines.attr('y2', box.stopy);\n\n  // Make sure the height of the diagram supports long menus.\n  let boxHeight = box.stopy - box.starty;\n  if (boxHeight < requiredBoxSize.maxHeight) {\n    boxHeight = requiredBoxSize.maxHeight;\n  }\n\n  let height = boxHeight + 2 * conf.diagramMarginY;\n  if (conf.mirrorActors) {\n    height = height - conf.boxMargin + conf.bottomMarginAdj;\n  }\n\n  // Make sure the width of the diagram supports wide menus.\n  let boxWidth = box.stopx - box.startx;\n  if (boxWidth < requiredBoxSize.maxWidth) {\n    boxWidth = requiredBoxSize.maxWidth;\n  }\n  const width = boxWidth + 2 * conf.diagramMarginX;\n\n  if (title) {\n    diagram\n      .append('text')\n      .text(title)\n      .attr('x', (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX)\n      .attr('y', -25);\n  }\n\n  configureSvgSize(diagram, height, width, conf.useMaxWidth);\n\n  const extraVertForTitle = title ? 40 : 0;\n  diagram.attr(\n    'viewBox',\n    box.startx -\n      conf.diagramMarginX +\n      ' -' +\n      (conf.diagramMarginY + extraVertForTitle) +\n      ' ' +\n      width +\n      ' ' +\n      (height + extraVertForTitle)\n  );\n\n  addSVGAccessibilityFields(parser.yy, diagram, id);\n  log.debug(`models:`, bounds.models);\n};\n\n/**\n * Retrieves the max message width of each actor, supports signals (messages, loops) and notes.\n *\n * It will enumerate each given message, and will determine its text width, in relation to the actor\n * it originates from, and destined to.\n *\n * @param {any} actors - The actors map\n * @param {Array} messages - A list of message objects to iterate\n * @returns {any}\n */\nconst getMaxMessageWidthPerActor = function (actors, messages) {\n  const maxMessageWidthPerActor = {};\n\n  messages.forEach(function (msg) {\n    if (actors[msg.to] && actors[msg.from]) {\n      const actor = actors[msg.to];\n\n      // If this is the first actor, and the message is left of it, no need to calculate the margin\n      if (msg.placement === parser.yy.PLACEMENT.LEFTOF && !actor.prevActor) {\n        return;\n      }\n\n      // If this is the last actor, and the message is right of it, no need to calculate the margin\n      if (msg.placement === parser.yy.PLACEMENT.RIGHTOF && !actor.nextActor) {\n        return;\n      }\n\n      const isNote = msg.placement !== undefined;\n      const isMessage = !isNote;\n\n      const textFont = isNote ? noteFont(conf) : messageFont(conf);\n      let wrappedMessage = msg.wrap\n        ? utils.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont)\n        : msg.message;\n      const messageDimensions = utils.calculateTextDimensions(wrappedMessage, textFont);\n      const messageWidth = messageDimensions.width + 2 * conf.wrapPadding;\n\n      /*\n       * The following scenarios should be supported:\n       *\n       * - There's a message (non-note) between fromActor and toActor\n       *   - If fromActor is on the right and toActor is on the left, we should\n       *     define the toActor's margin\n       *   - If fromActor is on the left and toActor is on the right, we should\n       *     define the fromActor's margin\n       * - There's a note, in which case fromActor == toActor\n       *   - If the note is to the left of the actor, we should define the previous actor\n       *     margin\n       *   - If the note is on the actor, we should define both the previous and next actor\n       *     margins, each being the half of the note size\n       *   - If the note is on the right of the actor, we should define the current actor\n       *     margin\n       */\n      if (isMessage && msg.from === actor.nextActor) {\n        maxMessageWidthPerActor[msg.to] = Math.max(\n          maxMessageWidthPerActor[msg.to] || 0,\n          messageWidth\n        );\n      } else if (isMessage && msg.from === actor.prevActor) {\n        maxMessageWidthPerActor[msg.from] = Math.max(\n          maxMessageWidthPerActor[msg.from] || 0,\n          messageWidth\n        );\n      } else if (isMessage && msg.from === msg.to) {\n        maxMessageWidthPerActor[msg.from] = Math.max(\n          maxMessageWidthPerActor[msg.from] || 0,\n          messageWidth / 2\n        );\n\n        maxMessageWidthPerActor[msg.to] = Math.max(\n          maxMessageWidthPerActor[msg.to] || 0,\n          messageWidth / 2\n        );\n      } else if (msg.placement === parser.yy.PLACEMENT.RIGHTOF) {\n        maxMessageWidthPerActor[msg.from] = Math.max(\n          maxMessageWidthPerActor[msg.from] || 0,\n          messageWidth\n        );\n      } else if (msg.placement === parser.yy.PLACEMENT.LEFTOF) {\n        maxMessageWidthPerActor[actor.prevActor] = Math.max(\n          maxMessageWidthPerActor[actor.prevActor] || 0,\n          messageWidth\n        );\n      } else if (msg.placement === parser.yy.PLACEMENT.OVER) {\n        if (actor.prevActor) {\n          maxMessageWidthPerActor[actor.prevActor] = Math.max(\n            maxMessageWidthPerActor[actor.prevActor] || 0,\n            messageWidth / 2\n          );\n        }\n\n        if (actor.nextActor) {\n          maxMessageWidthPerActor[msg.from] = Math.max(\n            maxMessageWidthPerActor[msg.from] || 0,\n            messageWidth / 2\n          );\n        }\n      }\n    }\n  });\n\n  log.debug('maxMessageWidthPerActor:', maxMessageWidthPerActor);\n  return maxMessageWidthPerActor;\n};\n\nconst getRequiredPopupWidth = function (actor) {\n  let requiredPopupWidth = 0;\n  const textFont = actorFont(conf);\n  for (let key in actor.links) {\n    let labelDimensions = utils.calculateTextDimensions(key, textFont);\n    let labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin;\n    if (requiredPopupWidth < labelWidth) {\n      requiredPopupWidth = labelWidth;\n    }\n  }\n\n  return requiredPopupWidth;\n};\n\n/**\n * This will calculate the optimal margin for each given actor, for a given actor->messageWidth map.\n *\n * An actor's margin is determined by the width of the actor, the width of the largest message that\n * originates from it, and the configured conf.actorMargin.\n *\n * @param {any} actors - The actors map to calculate margins for\n * @param {any} actorToMessageWidth - A map of actor key -> max message width it holds\n */\nconst calculateActorMargins = function (actors, actorToMessageWidth) {\n  let maxHeight = 0;\n  Object.keys(actors).forEach((prop) => {\n    const actor = actors[prop];\n    if (actor.wrap) {\n      actor.description = utils.wrapLabel(\n        actor.description,\n        conf.width - 2 * conf.wrapPadding,\n        actorFont(conf)\n      );\n    }\n    const actDims = utils.calculateTextDimensions(actor.description, actorFont(conf));\n    actor.width = actor.wrap\n      ? conf.width\n      : Math.max(conf.width, actDims.width + 2 * conf.wrapPadding);\n\n    actor.height = actor.wrap ? Math.max(actDims.height, conf.height) : conf.height;\n    maxHeight = Math.max(maxHeight, actor.height);\n  });\n\n  for (let actorKey in actorToMessageWidth) {\n    const actor = actors[actorKey];\n\n    if (!actor) {\n      continue;\n    }\n\n    const nextActor = actors[actor.nextActor];\n\n    // No need to space out an actor that doesn't have a next link\n    if (!nextActor) {\n      continue;\n    }\n\n    const messageWidth = actorToMessageWidth[actorKey];\n    const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2;\n\n    actor.margin = Math.max(actorWidth, conf.actorMargin);\n  }\n\n  return Math.max(maxHeight, conf.height);\n};\n\nconst buildNoteModel = function (msg, actors) {\n  let startx = actors[msg.from].x;\n  let stopx = actors[msg.to].x;\n  let shouldWrap = msg.wrap && msg.message;\n\n  let textDimensions = utils.calculateTextDimensions(\n    shouldWrap ? utils.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message,\n    noteFont(conf)\n  );\n  let noteModel = {\n    width: shouldWrap\n      ? conf.width\n      : Math.max(conf.width, textDimensions.width + 2 * conf.noteMargin),\n    height: 0,\n    startx: actors[msg.from].x,\n    stopx: 0,\n    starty: 0,\n    stopy: 0,\n    message: msg.message,\n  };\n  if (msg.placement === parser.yy.PLACEMENT.RIGHTOF) {\n    noteModel.width = shouldWrap\n      ? Math.max(conf.width, textDimensions.width)\n      : Math.max(\n          actors[msg.from].width / 2 + actors[msg.to].width / 2,\n          textDimensions.width + 2 * conf.noteMargin\n        );\n    noteModel.startx = startx + (actors[msg.from].width + conf.actorMargin) / 2;\n  } else if (msg.placement === parser.yy.PLACEMENT.LEFTOF) {\n    noteModel.width = shouldWrap\n      ? Math.max(conf.width, textDimensions.width + 2 * conf.noteMargin)\n      : Math.max(\n          actors[msg.from].width / 2 + actors[msg.to].width / 2,\n          textDimensions.width + 2 * conf.noteMargin\n        );\n    noteModel.startx = startx - noteModel.width + (actors[msg.from].width - conf.actorMargin) / 2;\n  } else if (msg.to === msg.from) {\n    textDimensions = utils.calculateTextDimensions(\n      shouldWrap\n        ? utils.wrapLabel(msg.message, Math.max(conf.width, actors[msg.from].width), noteFont(conf))\n        : msg.message,\n      noteFont(conf)\n    );\n    noteModel.width = shouldWrap\n      ? Math.max(conf.width, actors[msg.from].width)\n      : Math.max(actors[msg.from].width, conf.width, textDimensions.width + 2 * conf.noteMargin);\n    noteModel.startx = startx + (actors[msg.from].width - noteModel.width) / 2;\n  } else {\n    noteModel.width =\n      Math.abs(startx + actors[msg.from].width / 2 - (stopx + actors[msg.to].width / 2)) +\n      conf.actorMargin;\n    noteModel.startx =\n      startx < stopx\n        ? startx + actors[msg.from].width / 2 - conf.actorMargin / 2\n        : stopx + actors[msg.to].width / 2 - conf.actorMargin / 2;\n  }\n  if (shouldWrap) {\n    noteModel.message = utils.wrapLabel(\n      msg.message,\n      noteModel.width - 2 * conf.wrapPadding,\n      noteFont(conf)\n    );\n  }\n  log.debug(\n    `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]`\n  );\n  return noteModel;\n};\n\nconst buildMessageModel = function (msg, actors) {\n  let process = false;\n  if (\n    [\n      parser.yy.LINETYPE.SOLID_OPEN,\n      parser.yy.LINETYPE.DOTTED_OPEN,\n      parser.yy.LINETYPE.SOLID,\n      parser.yy.LINETYPE.DOTTED,\n      parser.yy.LINETYPE.SOLID_CROSS,\n      parser.yy.LINETYPE.DOTTED_CROSS,\n      parser.yy.LINETYPE.SOLID_POINT,\n      parser.yy.LINETYPE.DOTTED_POINT,\n    ].includes(msg.type)\n  ) {\n    process = true;\n  }\n  if (!process) {\n    return {};\n  }\n  const fromBounds = activationBounds(msg.from, actors);\n  const toBounds = activationBounds(msg.to, actors);\n  const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0;\n  const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1;\n  const allBounds = fromBounds.concat(toBounds);\n  const boundedWidth = Math.abs(toBounds[toIdx] - fromBounds[fromIdx]);\n  if (msg.wrap && msg.message) {\n    msg.message = utils.wrapLabel(\n      msg.message,\n      Math.max(boundedWidth + 2 * conf.wrapPadding, conf.width),\n      messageFont(conf)\n    );\n  }\n  const msgDims = utils.calculateTextDimensions(msg.message, messageFont(conf));\n\n  return {\n    width: Math.max(\n      msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding,\n      boundedWidth + 2 * conf.wrapPadding,\n      conf.width\n    ),\n    height: 0,\n    startx: fromBounds[fromIdx],\n    stopx: toBounds[toIdx],\n    starty: 0,\n    stopy: 0,\n    message: msg.message,\n    type: msg.type,\n    wrap: msg.wrap,\n    fromBounds: Math.min.apply(null, allBounds),\n    toBounds: Math.max.apply(null, allBounds),\n  };\n};\n\nconst calculateLoopBounds = function (messages, actors) {\n  const loops = {};\n  const stack = [];\n  let current, noteModel, msgModel;\n\n  messages.forEach(function (msg) {\n    msg.id = utils.random({ length: 10 });\n    switch (msg.type) {\n      case parser.yy.LINETYPE.LOOP_START:\n      case parser.yy.LINETYPE.ALT_START:\n      case parser.yy.LINETYPE.OPT_START:\n      case parser.yy.LINETYPE.PAR_START:\n      case parser.yy.LINETYPE.CRITICAL_START:\n      case parser.yy.LINETYPE.BREAK_START:\n        stack.push({\n          id: msg.id,\n          msg: msg.message,\n          from: Number.MAX_SAFE_INTEGER,\n          to: Number.MIN_SAFE_INTEGER,\n          width: 0,\n        });\n        break;\n      case parser.yy.LINETYPE.ALT_ELSE:\n      case parser.yy.LINETYPE.PAR_AND:\n      case parser.yy.LINETYPE.CRITICAL_OPTION:\n        if (msg.message) {\n          current = stack.pop();\n          loops[current.id] = current;\n          loops[msg.id] = current;\n          stack.push(current);\n        }\n        break;\n      case parser.yy.LINETYPE.LOOP_END:\n      case parser.yy.LINETYPE.ALT_END:\n      case parser.yy.LINETYPE.OPT_END:\n      case parser.yy.LINETYPE.PAR_END:\n      case parser.yy.LINETYPE.CRITICAL_END:\n      case parser.yy.LINETYPE.BREAK_END:\n        current = stack.pop();\n        loops[current.id] = current;\n        break;\n      case parser.yy.LINETYPE.ACTIVE_START:\n        {\n          const actorRect = actors[msg.from ? msg.from.actor : msg.to.actor];\n          const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length;\n          const x =\n            actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2;\n          const toAdd = {\n            startx: x,\n            stopx: x + conf.activationWidth,\n            actor: msg.from.actor,\n            enabled: true,\n          };\n          bounds.activations.push(toAdd);\n        }\n        break;\n      case parser.yy.LINETYPE.ACTIVE_END:\n        {\n          const lastActorActivationIdx = bounds.activations\n            .map((a) => a.actor)\n            .lastIndexOf(msg.from.actor);\n          delete bounds.activations.splice(lastActorActivationIdx, 1)[0];\n        }\n        break;\n    }\n    const isNote = msg.placement !== undefined;\n    if (isNote) {\n      noteModel = buildNoteModel(msg, actors);\n      msg.noteModel = noteModel;\n      stack.forEach((stk) => {\n        current = stk;\n        current.from = Math.min(current.from, noteModel.startx);\n        current.to = Math.max(current.to, noteModel.startx + noteModel.width);\n        current.width =\n          Math.max(current.width, Math.abs(current.from - current.to)) - conf.labelBoxWidth;\n      });\n    } else {\n      msgModel = buildMessageModel(msg, actors);\n      msg.msgModel = msgModel;\n      if (msgModel.startx && msgModel.stopx && stack.length > 0) {\n        stack.forEach((stk) => {\n          current = stk;\n          if (msgModel.startx === msgModel.stopx) {\n            let from = actors[msg.from];\n            let to = actors[msg.to];\n            current.from = Math.min(\n              from.x - msgModel.width / 2,\n              from.x - from.width / 2,\n              current.from\n            );\n            current.to = Math.max(to.x + msgModel.width / 2, to.x + from.width / 2, current.to);\n            current.width =\n              Math.max(current.width, Math.abs(current.to - current.from)) - conf.labelBoxWidth;\n          } else {\n            current.from = Math.min(msgModel.startx, current.from);\n            current.to = Math.max(msgModel.stopx, current.to);\n            current.width = Math.max(current.width, msgModel.width) - conf.labelBoxWidth;\n          }\n        });\n      }\n    }\n  });\n  bounds.activations = [];\n  log.debug('Loop type widths:', loops);\n  return loops;\n};\n\nexport default {\n  bounds,\n  drawActors,\n  drawActorsPopup,\n  setConf,\n  draw,\n};\n","const getStyles = (options) =>\n  `.actor {\n    stroke: ${options.actorBorder};\n    fill: ${options.actorBkg};\n  }\n\n  text.actor > tspan {\n    fill: ${options.actorTextColor};\n    stroke: none;\n  }\n\n  .actor-line {\n    stroke: ${options.actorLineColor};\n  }\n\n  .messageLine0 {\n    stroke-width: 1.5;\n    stroke-dasharray: none;\n    stroke: ${options.signalColor};\n  }\n\n  .messageLine1 {\n    stroke-width: 1.5;\n    stroke-dasharray: 2, 2;\n    stroke: ${options.signalColor};\n  }\n\n  #arrowhead path {\n    fill: ${options.signalColor};\n    stroke: ${options.signalColor};\n  }\n\n  .sequenceNumber {\n    fill: ${options.sequenceNumberColor};\n  }\n\n  #sequencenumber {\n    fill: ${options.signalColor};\n  }\n\n  #crosshead path {\n    fill: ${options.signalColor};\n    stroke: ${options.signalColor};\n  }\n\n  .messageText {\n    fill: ${options.signalTextColor};\n    stroke: ${options.signalTextColor};\n  }\n\n  .labelBox {\n    stroke: ${options.labelBoxBorderColor};\n    fill: ${options.labelBoxBkgColor};\n  }\n\n  .labelText, .labelText > tspan {\n    fill: ${options.labelTextColor};\n    stroke: none;\n  }\n\n  .loopText, .loopText > tspan {\n    fill: ${options.loopTextColor};\n    stroke: none;\n  }\n\n  .loopLine {\n    stroke-width: 2px;\n    stroke-dasharray: 2, 2;\n    stroke: ${options.labelBoxBorderColor};\n    fill: ${options.labelBoxBorderColor};\n  }\n\n  .note {\n    //stroke: #decc93;\n    stroke: ${options.noteBorderColor};\n    fill: ${options.noteBkgColor};\n  }\n\n  .noteText, .noteText > tspan {\n    fill: ${options.noteTextColor};\n    stroke: none;\n  }\n\n  .activation0 {\n    fill: ${options.activationBkgColor};\n    stroke: ${options.activationBorderColor};\n  }\n\n  .activation1 {\n    fill: ${options.activationBkgColor};\n    stroke: ${options.activationBorderColor};\n  }\n\n  .activation2 {\n    fill: ${options.activationBkgColor};\n    stroke: ${options.activationBorderColor};\n  }\n\n  .actorPopupMenu {\n    position: absolute;\n  }\n\n  .actorPopupMenuPanel {\n    position: absolute;\n    fill: ${options.actorBkg};\n    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n    filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));\n}\n  .actor-man line {\n    stroke: ${options.actorBorder};\n    fill: ${options.actorBkg};\n  }\n  .actor-man circle, line {\n    stroke: ${options.actorBorder};\n    fill: ${options.actorBkg};\n    stroke-width: 2px;\n  }\n`;\n\nexport default getStyles;\n","import common from '../common/common';\nimport { addFunction } from '../../interactionDb';\nimport { sanitizeUrl } from '@braintree/sanitize-url';\n\nexport const drawRect = function (elem, rectData) {\n  const rectElem = elem.append('rect');\n  rectElem.attr('x', rectData.x);\n  rectElem.attr('y', rectData.y);\n  rectElem.attr('fill', rectData.fill);\n  rectElem.attr('stroke', rectData.stroke);\n  rectElem.attr('width', rectData.width);\n  rectElem.attr('height', rectData.height);\n  rectElem.attr('rx', rectData.rx);\n  rectElem.attr('ry', rectData.ry);\n\n  if (typeof rectData.class !== 'undefined') {\n    rectElem.attr('class', rectData.class);\n  }\n\n  return rectElem;\n};\n\n// const sanitizeUrl = function (s) {\n//   return s\n//     .replace(/&/g, '&amp;')\n//     .replace(/</g, '&lt;')\n//     .replace(/javascript:/g, '');\n// };\n\nconst addPopupInteraction = (id, actorCnt) => {\n  addFunction(() => {\n    const arr = document.querySelectorAll(id);\n    // This will be the case when running in sandboxed mode\n    if (arr.length === 0) return;\n    arr[0].addEventListener('mouseover', function () {\n      popupMenuUpFunc('actor' + actorCnt + '_popup');\n    });\n    arr[0].addEventListener('mouseout', function () {\n      popupMenuDownFunc('actor' + actorCnt + '_popup');\n    });\n  });\n};\nexport const drawPopup = function (elem, actor, minMenuWidth, textAttrs, forceMenus) {\n  if (actor.links === undefined || actor.links === null || Object.keys(actor.links).length === 0) {\n    return { height: 0, width: 0 };\n  }\n\n  const links = actor.links;\n  const actorCnt = actor.actorCnt;\n  const rectData = actor.rectData;\n\n  var displayValue = 'none';\n  if (forceMenus) {\n    displayValue = 'block !important';\n  }\n\n  const g = elem.append('g');\n  g.attr('id', 'actor' + actorCnt + '_popup');\n  g.attr('class', 'actorPopupMenu');\n  g.attr('display', displayValue);\n  addPopupInteraction('#actor' + actorCnt + '_popup', actorCnt);\n  var actorClass = '';\n  if (typeof rectData.class !== 'undefined') {\n    actorClass = ' ' + rectData.class;\n  }\n\n  let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth;\n\n  const rectElem = g.append('rect');\n  rectElem.attr('class', 'actorPopupMenuPanel' + actorClass);\n  rectElem.attr('x', rectData.x);\n  rectElem.attr('y', rectData.height);\n  rectElem.attr('fill', rectData.fill);\n  rectElem.attr('stroke', rectData.stroke);\n  rectElem.attr('width', menuWidth);\n  rectElem.attr('height', rectData.height);\n  rectElem.attr('rx', rectData.rx);\n  rectElem.attr('ry', rectData.ry);\n  if (links != null) {\n    var linkY = 20;\n    for (let key in links) {\n      var linkElem = g.append('a');\n      var sanitizedLink = sanitizeUrl(links[key]);\n      linkElem.attr('xlink:href', sanitizedLink);\n      linkElem.attr('target', '_blank');\n\n      _drawMenuItemTextCandidateFunc(textAttrs)(\n        key,\n        linkElem,\n        rectData.x + 10,\n        rectData.height + linkY,\n        menuWidth,\n        20,\n        { class: 'actor' },\n        textAttrs\n      );\n\n      linkY += 30;\n    }\n  }\n\n  rectElem.attr('height', linkY);\n\n  return { height: rectData.height + linkY, width: menuWidth };\n};\n\nexport const drawImage = function (elem, x, y, link) {\n  const imageElem = elem.append('image');\n  imageElem.attr('x', x);\n  imageElem.attr('y', y);\n  var sanitizedLink = sanitizeUrl(link);\n  imageElem.attr('xlink:href', sanitizedLink);\n};\n\nexport const drawEmbeddedImage = function (elem, x, y, link) {\n  const imageElem = elem.append('use');\n  imageElem.attr('x', x);\n  imageElem.attr('y', y);\n  var sanitizedLink = sanitizeUrl(link);\n  imageElem.attr('xlink:href', '#' + sanitizedLink);\n};\n\nexport const popupMenu = function (popid) {\n  return (\n    \"var pu = document.getElementById('\" +\n    popid +\n    \"'); if (pu != null) { pu.style.display = 'block'; }\"\n  );\n};\n\nexport const popdownMenu = function (popid) {\n  return (\n    \"var pu = document.getElementById('\" +\n    popid +\n    \"'); if (pu != null) { pu.style.display = 'none'; }\"\n  );\n};\n\nconst popupMenuUpFunc = function (popupId) {\n  var pu = document.getElementById(popupId);\n  if (pu != null) {\n    pu.style.display = 'block';\n  }\n};\n\nconst popupMenuDownFunc = function (popupId) {\n  var pu = document.getElementById(popupId);\n  if (pu != null) {\n    pu.style.display = 'none';\n  }\n};\nexport const drawText = function (elem, textData) {\n  let prevTextHeight = 0,\n    textHeight = 0;\n  const lines = textData.text.split(common.lineBreakRegex);\n\n  let textElems = [];\n  let dy = 0;\n  let yfunc = () => textData.y;\n  if (\n    typeof textData.valign !== 'undefined' &&\n    typeof textData.textMargin !== 'undefined' &&\n    textData.textMargin > 0\n  ) {\n    switch (textData.valign) {\n      case 'top':\n      case 'start':\n        yfunc = () => Math.round(textData.y + textData.textMargin);\n        break;\n      case 'middle':\n      case 'center':\n        yfunc = () =>\n          Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2);\n        break;\n      case 'bottom':\n      case 'end':\n        yfunc = () =>\n          Math.round(\n            textData.y +\n              (prevTextHeight + textHeight + 2 * textData.textMargin) -\n              textData.textMargin\n          );\n        break;\n    }\n  }\n  if (\n    typeof textData.anchor !== 'undefined' &&\n    typeof textData.textMargin !== 'undefined' &&\n    typeof textData.width !== 'undefined'\n  ) {\n    switch (textData.anchor) {\n      case 'left':\n      case 'start':\n        textData.x = Math.round(textData.x + textData.textMargin);\n        textData.anchor = 'start';\n        textData.dominantBaseline = 'text-after-edge';\n        textData.alignmentBaseline = 'middle';\n        break;\n      case 'middle':\n      case 'center':\n        textData.x = Math.round(textData.x + textData.width / 2);\n        textData.anchor = 'middle';\n        textData.dominantBaseline = 'middle';\n        textData.alignmentBaseline = 'middle';\n        break;\n      case 'right':\n      case 'end':\n        textData.x = Math.round(textData.x + textData.width - textData.textMargin);\n        textData.anchor = 'end';\n        textData.dominantBaseline = 'text-before-edge';\n        textData.alignmentBaseline = 'middle';\n        break;\n    }\n  }\n  for (let i = 0; i < lines.length; i++) {\n    let line = lines[i];\n    if (\n      typeof textData.textMargin !== 'undefined' &&\n      textData.textMargin === 0 &&\n      typeof textData.fontSize !== 'undefined'\n    ) {\n      dy = i * textData.fontSize;\n    }\n\n    const textElem = elem.append('text');\n    textElem.attr('x', textData.x);\n    textElem.attr('y', yfunc());\n    if (typeof textData.anchor !== 'undefined') {\n      textElem\n        .attr('text-anchor', textData.anchor)\n        .attr('dominant-baseline', textData.dominantBaseline)\n        .attr('alignment-baseline', textData.alignmentBaseline);\n    }\n    if (typeof textData.fontFamily !== 'undefined') {\n      textElem.style('font-family', textData.fontFamily);\n    }\n    if (typeof textData.fontSize !== 'undefined') {\n      textElem.style('font-size', textData.fontSize);\n    }\n    if (typeof textData.fontWeight !== 'undefined') {\n      textElem.style('font-weight', textData.fontWeight);\n    }\n    if (typeof textData.fill !== 'undefined') {\n      textElem.attr('fill', textData.fill);\n    }\n    if (typeof textData.class !== 'undefined') {\n      textElem.attr('class', textData.class);\n    }\n    if (typeof textData.dy !== 'undefined') {\n      textElem.attr('dy', textData.dy);\n    } else if (dy !== 0) {\n      textElem.attr('dy', dy);\n    }\n\n    if (textData.tspan) {\n      const span = textElem.append('tspan');\n      span.attr('x', textData.x);\n      if (typeof textData.fill !== 'undefined') {\n        span.attr('fill', textData.fill);\n      }\n      span.text(line);\n    } else {\n      textElem.text(line);\n    }\n    if (\n      typeof textData.valign !== 'undefined' &&\n      typeof textData.textMargin !== 'undefined' &&\n      textData.textMargin > 0\n    ) {\n      textHeight += (textElem._groups || textElem)[0][0].getBBox().height;\n      prevTextHeight = textHeight;\n    }\n\n    textElems.push(textElem);\n  }\n\n  return textElems;\n};\n\nexport const drawLabel = function (elem, txtObject) {\n  /**\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} cut\n   * @returns {any}\n   */\n  function genPoints(x, y, width, height, cut) {\n    return (\n      x +\n      ',' +\n      y +\n      ' ' +\n      (x + width) +\n      ',' +\n      y +\n      ' ' +\n      (x + width) +\n      ',' +\n      (y + height - cut) +\n      ' ' +\n      (x + width - cut * 1.2) +\n      ',' +\n      (y + height) +\n      ' ' +\n      x +\n      ',' +\n      (y + height)\n    );\n  }\n  const polygon = elem.append('polygon');\n  polygon.attr('points', genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7));\n  polygon.attr('class', 'labelBox');\n\n  txtObject.y = txtObject.y + txtObject.height / 2;\n\n  drawText(elem, txtObject);\n  return polygon;\n};\n\nlet actorCnt = -1;\n\nexport const fixLifeLineHeights = (diagram, bounds) => {\n  if (!diagram.selectAll) return;\n  diagram\n    .selectAll('.actor-line')\n    .attr('class', '200')\n    .attr('y2', bounds - 55);\n};\n\n/**\n * Draws an actor in the diagram with the attached line\n *\n * @param {any} elem - The diagram we'll draw to.\n * @param {any} actor - The actor to draw.\n * @param {any} conf - DrawText implementation discriminator object\n */\nconst drawActorTypeParticipant = function (elem, actor, conf) {\n  const center = actor.x + actor.width / 2;\n\n  const boxpluslineGroup = elem.append('g');\n  var g = boxpluslineGroup;\n\n  if (actor.y === 0) {\n    actorCnt++;\n    g.append('line')\n      .attr('id', 'actor' + actorCnt)\n      .attr('x1', center)\n      .attr('y1', 5)\n      .attr('x2', center)\n      .attr('y2', 2000)\n      .attr('class', 'actor-line')\n      .attr('stroke-width', '0.5px')\n      .attr('stroke', '#999');\n\n    g = boxpluslineGroup.append('g');\n    actor.actorCnt = actorCnt;\n\n    if (actor.links != null) {\n      g.attr('id', 'root-' + actorCnt);\n      addPopupInteraction('#root-' + actorCnt, actorCnt);\n    }\n  }\n\n  const rect = getNoteRect();\n  var cssclass = 'actor';\n  if (actor.properties != null && actor.properties['class']) {\n    cssclass = actor.properties['class'];\n  } else {\n    rect.fill = '#eaeaea';\n  }\n  rect.x = actor.x;\n  rect.y = actor.y;\n  rect.width = actor.width;\n  rect.height = actor.height;\n  rect.class = cssclass;\n  rect.rx = 3;\n  rect.ry = 3;\n  const rectElem = drawRect(g, rect);\n  actor.rectData = rect;\n\n  if (actor.properties != null && actor.properties['icon']) {\n    const iconSrc = actor.properties['icon'].trim();\n    if (iconSrc.charAt(0) === '@') {\n      drawEmbeddedImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1));\n    } else {\n      drawImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc);\n    }\n  }\n\n  _drawTextCandidateFunc(conf)(\n    actor.description,\n    g,\n    rect.x,\n    rect.y,\n    rect.width,\n    rect.height,\n    { class: 'actor' },\n    conf\n  );\n\n  let height = actor.height;\n  if (rectElem.node) {\n    const bounds = rectElem.node().getBBox();\n    actor.height = bounds.height;\n    height = bounds.height;\n  }\n\n  return height;\n};\n\nconst drawActorTypeActor = function (elem, actor, conf) {\n  const center = actor.x + actor.width / 2;\n\n  if (actor.y === 0) {\n    actorCnt++;\n    elem\n      .append('line')\n      .attr('id', 'actor' + actorCnt)\n      .attr('x1', center)\n      .attr('y1', 80)\n      .attr('x2', center)\n      .attr('y2', 2000)\n      .attr('class', 'actor-line')\n      .attr('stroke-width', '0.5px')\n      .attr('stroke', '#999');\n  }\n  const actElem = elem.append('g');\n  actElem.attr('class', 'actor-man');\n\n  const rect = getNoteRect();\n  rect.x = actor.x;\n  rect.y = actor.y;\n  rect.fill = '#eaeaea';\n  rect.width = actor.width;\n  rect.height = actor.height;\n  rect.class = 'actor';\n  rect.rx = 3;\n  rect.ry = 3;\n  // drawRect(actElem, rect);\n\n  actElem\n    .append('line')\n    .attr('id', 'actor-man-torso' + actorCnt)\n    .attr('x1', center)\n    .attr('y1', actor.y + 25)\n    .attr('x2', center)\n    .attr('y2', actor.y + 45);\n\n  actElem\n    .append('line')\n    .attr('id', 'actor-man-arms' + actorCnt)\n    .attr('x1', center - 18)\n    .attr('y1', actor.y + 33)\n    .attr('x2', center + 18)\n    .attr('y2', actor.y + 33);\n  actElem\n    .append('line')\n    .attr('x1', center - 18)\n    .attr('y1', actor.y + 60)\n    .attr('x2', center)\n    .attr('y2', actor.y + 45);\n  actElem\n    .append('line')\n    .attr('x1', center)\n    .attr('y1', actor.y + 45)\n    .attr('x2', center + 16)\n    .attr('y2', actor.y + 60);\n\n  const circle = actElem.append('circle');\n  circle.attr('cx', actor.x + actor.width / 2);\n  circle.attr('cy', actor.y + 10);\n  circle.attr('r', 15);\n  circle.attr('width', actor.width);\n  circle.attr('height', actor.height);\n\n  const bounds = actElem.node().getBBox();\n  actor.height = bounds.height;\n\n  _drawTextCandidateFunc(conf)(\n    actor.description,\n    actElem,\n    rect.x,\n    rect.y + 35,\n    rect.width,\n    rect.height,\n    { class: 'actor' },\n    conf\n  );\n\n  return actor.height;\n};\n\nexport const drawActor = function (elem, actor, conf) {\n  switch (actor.type) {\n    case 'actor':\n      return drawActorTypeActor(elem, actor, conf);\n    case 'participant':\n      return drawActorTypeParticipant(elem, actor, conf);\n  }\n};\n\nexport const anchorElement = function (elem) {\n  return elem.append('g');\n};\n/**\n * Draws an activation in the diagram\n *\n * @param {any} elem - Element to append activation rect.\n * @param {any} bounds - Activation box bounds.\n * @param {any} verticalPos - Precise y cooridnate of bottom activation box edge.\n * @param {any} conf - Sequence diagram config object.\n * @param {any} actorActivations - Number of activations on the actor.\n */\nexport const drawActivation = function (elem, bounds, verticalPos, conf, actorActivations) {\n  const rect = getNoteRect();\n  const g = bounds.anchored;\n  rect.x = bounds.startx;\n  rect.y = bounds.starty;\n  rect.class = 'activation' + (actorActivations % 3); // Will evaluate to 0, 1 or 2\n  rect.width = bounds.stopx - bounds.startx;\n  rect.height = verticalPos - bounds.starty;\n  drawRect(g, rect);\n};\n\n/**\n * Draws a loop in the diagram\n *\n * @param {any} elem - Elemenet to append the loop to.\n * @param {any} loopModel - LoopModel of the given loop.\n * @param {any} labelText - Text within the loop.\n * @param {any} conf - Diagrom configuration\n * @returns {any}\n */\nexport const drawLoop = function (elem, loopModel, labelText, conf) {\n  const {\n    boxMargin,\n    boxTextMargin,\n    labelBoxHeight,\n    labelBoxWidth,\n    messageFontFamily: fontFamily,\n    messageFontSize: fontSize,\n    messageFontWeight: fontWeight,\n  } = conf;\n  const g = elem.append('g');\n  const drawLoopLine = function (startx, starty, stopx, stopy) {\n    return g\n      .append('line')\n      .attr('x1', startx)\n      .attr('y1', starty)\n      .attr('x2', stopx)\n      .attr('y2', stopy)\n      .attr('class', 'loopLine');\n  };\n  drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty);\n  drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy);\n  drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy);\n  drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy);\n  if (typeof loopModel.sections !== 'undefined') {\n    loopModel.sections.forEach(function (item) {\n      drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style(\n        'stroke-dasharray',\n        '3, 3'\n      );\n    });\n  }\n\n  let txt = getTextObj();\n  txt.text = labelText;\n  txt.x = loopModel.startx;\n  txt.y = loopModel.starty;\n  txt.fontFamily = fontFamily;\n  txt.fontSize = fontSize;\n  txt.fontWeight = fontWeight;\n  txt.anchor = 'middle';\n  txt.valign = 'middle';\n  txt.tspan = false;\n  txt.width = labelBoxWidth || 50;\n  txt.height = labelBoxHeight || 20;\n  txt.textMargin = boxTextMargin;\n  txt.class = 'labelText';\n\n  drawLabel(g, txt);\n  txt = getTextObj();\n  txt.text = loopModel.title;\n  txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2;\n  txt.y = loopModel.starty + boxMargin + boxTextMargin;\n  txt.anchor = 'middle';\n  txt.valign = 'middle';\n  txt.textMargin = boxTextMargin;\n  txt.class = 'loopText';\n  txt.fontFamily = fontFamily;\n  txt.fontSize = fontSize;\n  txt.fontWeight = fontWeight;\n  txt.wrap = true;\n\n  let textElem = drawText(g, txt);\n\n  if (typeof loopModel.sectionTitles !== 'undefined') {\n    loopModel.sectionTitles.forEach(function (item, idx) {\n      if (item.message) {\n        txt.text = item.message;\n        txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2;\n        txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin;\n        txt.class = 'loopText';\n        txt.anchor = 'middle';\n        txt.valign = 'middle';\n        txt.tspan = false;\n        txt.fontFamily = fontFamily;\n        txt.fontSize = fontSize;\n        txt.fontWeight = fontWeight;\n        txt.wrap = loopModel.wrap;\n        textElem = drawText(g, txt);\n        let sectionHeight = Math.round(\n          textElem\n            .map((te) => (te._groups || te)[0][0].getBBox().height)\n            .reduce((acc, curr) => acc + curr)\n        );\n        loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin);\n      }\n    });\n  }\n\n  loopModel.height = Math.round(loopModel.stopy - loopModel.starty);\n  return g;\n};\n\n/**\n * Draws a background rectangle\n *\n * @param {any} elem Diagram (reference for bounds)\n * @param {any} bounds Shape of the rectangle\n */\nexport const drawBackgroundRect = function (elem, bounds) {\n  const rectElem = drawRect(elem, {\n    x: bounds.startx,\n    y: bounds.starty,\n    width: bounds.stopx - bounds.startx,\n    height: bounds.stopy - bounds.starty,\n    fill: bounds.fill,\n    class: 'rect',\n  });\n  rectElem.lower();\n};\n\nexport const insertDatabaseIcon = function (elem) {\n  elem\n    .append('defs')\n    .append('symbol')\n    .attr('id', 'database')\n    .attr('fill-rule', 'evenodd')\n    .attr('clip-rule', 'evenodd')\n    .append('path')\n    .attr('transform', 'scale(.5)')\n    .attr(\n      'd',\n      'M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z'\n    );\n};\n\nexport const insertComputerIcon = function (elem) {\n  elem\n    .append('defs')\n    .append('symbol')\n    .attr('id', 'computer')\n    .attr('width', '24')\n    .attr('height', '24')\n    .append('path')\n    .attr('transform', 'scale(.5)')\n    .attr(\n      'd',\n      'M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z'\n    );\n};\n\nexport const insertClockIcon = function (elem) {\n  elem\n    .append('defs')\n    .append('symbol')\n    .attr('id', 'clock')\n    .attr('width', '24')\n    .attr('height', '24')\n    .append('path')\n    .attr('transform', 'scale(.5)')\n    .attr(\n      'd',\n      'M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z'\n    );\n};\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param elem\n */\nexport const insertArrowHead = function (elem) {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'arrowhead')\n    .attr('refX', 9)\n    .attr('refY', 5)\n    .attr('markerUnits', 'userSpaceOnUse')\n    .attr('markerWidth', 12)\n    .attr('markerHeight', 12)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 0 0 L 10 5 L 0 10 z'); // this is actual shape for arrowhead\n};\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertArrowFilledHead = function (elem) {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'filled-head')\n    .attr('refX', 18)\n    .attr('refY', 7)\n    .attr('markerWidth', 20)\n    .attr('markerHeight', 28)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z');\n};\n/**\n * Setup node number. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertSequenceNumber = function (elem) {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'sequencenumber')\n    .attr('refX', 15)\n    .attr('refY', 15)\n    .attr('markerWidth', 60)\n    .attr('markerHeight', 40)\n    .attr('orient', 'auto')\n    .append('circle')\n    .attr('cx', 15)\n    .attr('cy', 15)\n    .attr('r', 6);\n  // .style(\"fill\", '#f00');\n};\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertArrowCrossHead = function (elem) {\n  const defs = elem.append('defs');\n  const marker = defs\n    .append('marker')\n    .attr('id', 'crosshead')\n    .attr('markerWidth', 15)\n    .attr('markerHeight', 8)\n    .attr('orient', 'auto')\n    .attr('refX', 16)\n    .attr('refY', 4);\n\n  // The arrow\n  marker\n    .append('path')\n    .attr('fill', 'black')\n    .attr('stroke', '#000000')\n    .style('stroke-dasharray', '0, 0')\n    .attr('stroke-width', '1px')\n    .attr('d', 'M 9,2 V 6 L16,4 Z');\n\n  // The cross\n  marker\n    .append('path')\n    .attr('fill', 'none')\n    .attr('stroke', '#000000')\n    .style('stroke-dasharray', '0, 0')\n    .attr('stroke-width', '1px')\n    .attr('d', 'M 0,1 L 6,7 M 6,1 L 0,7');\n  // this is actual shape for arrowhead\n};\n\nexport const getTextObj = function () {\n  return {\n    x: 0,\n    y: 0,\n    fill: undefined,\n    anchor: undefined,\n    style: '#666',\n    width: undefined,\n    height: undefined,\n    textMargin: 0,\n    rx: 0,\n    ry: 0,\n    tspan: true,\n    valign: undefined,\n  };\n};\n\nexport const getNoteRect = function () {\n  return {\n    x: 0,\n    y: 0,\n    fill: '#EDF2AE',\n    stroke: '#666',\n    width: 100,\n    anchor: 'start',\n    height: 100,\n    rx: 0,\n    ry: 0,\n  };\n};\n\nconst _drawTextCandidateFunc = (function () {\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   */\n  function byText(content, g, x, y, width, height, textAttrs) {\n    const text = g\n      .append('text')\n      .attr('x', x + width / 2)\n      .attr('y', y + height / 2 + 5)\n      .style('text-anchor', 'middle')\n      .text(content);\n    _setTextAttrs(text, textAttrs);\n  }\n\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   * @param {any} conf\n   */\n  function byTspan(content, g, x, y, width, height, textAttrs, conf) {\n    const { actorFontSize, actorFontFamily, actorFontWeight } = conf;\n\n    const lines = content.split(common.lineBreakRegex);\n    for (let i = 0; i < lines.length; i++) {\n      const dy = i * actorFontSize - (actorFontSize * (lines.length - 1)) / 2;\n      const text = g\n        .append('text')\n        .attr('x', x + width / 2)\n        .attr('y', y)\n        .style('text-anchor', 'middle')\n        .style('font-size', actorFontSize)\n        .style('font-weight', actorFontWeight)\n        .style('font-family', actorFontFamily);\n      text\n        .append('tspan')\n        .attr('x', x + width / 2)\n        .attr('dy', dy)\n        .text(lines[i]);\n\n      text\n        .attr('y', y + height / 2.0)\n        .attr('dominant-baseline', 'central')\n        .attr('alignment-baseline', 'central');\n\n      _setTextAttrs(text, textAttrs);\n    }\n  }\n\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   * @param {any} conf\n   */\n  function byFo(content, g, x, y, width, height, textAttrs, conf) {\n    const s = g.append('switch');\n    const f = s\n      .append('foreignObject')\n      .attr('x', x)\n      .attr('y', y)\n      .attr('width', width)\n      .attr('height', height);\n\n    const text = f\n      .append('xhtml:div')\n      .style('display', 'table')\n      .style('height', '100%')\n      .style('width', '100%');\n\n    text\n      .append('div')\n      .style('display', 'table-cell')\n      .style('text-align', 'center')\n      .style('vertical-align', 'middle')\n      .text(content);\n\n    byTspan(content, s, x, y, width, height, textAttrs, conf);\n    _setTextAttrs(text, textAttrs);\n  }\n\n  /**\n   * @param {any} toText\n   * @param {any} fromTextAttrsDict\n   */\n  function _setTextAttrs(toText, fromTextAttrsDict) {\n    for (const key in fromTextAttrsDict) {\n      if (fromTextAttrsDict.hasOwnProperty(key)) { // eslint-disable-line\n        toText.attr(key, fromTextAttrsDict[key]);\n      }\n    }\n  }\n\n  return function (conf) {\n    return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n  };\n})();\n\nconst _drawMenuItemTextCandidateFunc = (function () {\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   */\n  function byText(content, g, x, y, width, height, textAttrs) {\n    const text = g\n      .append('text')\n      .attr('x', x)\n      .attr('y', y)\n      .style('text-anchor', 'start')\n      .text(content);\n    _setTextAttrs(text, textAttrs);\n  }\n\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   * @param {any} conf\n   */\n  function byTspan(content, g, x, y, width, height, textAttrs, conf) {\n    const { actorFontSize, actorFontFamily, actorFontWeight } = conf;\n\n    const lines = content.split(common.lineBreakRegex);\n    for (let i = 0; i < lines.length; i++) {\n      const dy = i * actorFontSize - (actorFontSize * (lines.length - 1)) / 2;\n      const text = g\n        .append('text')\n        .attr('x', x)\n        .attr('y', y)\n        .style('text-anchor', 'start')\n        .style('font-size', actorFontSize)\n        .style('font-weight', actorFontWeight)\n        .style('font-family', actorFontFamily);\n      text.append('tspan').attr('x', x).attr('dy', dy).text(lines[i]);\n\n      text\n        .attr('y', y + height / 2.0)\n        .attr('dominant-baseline', 'central')\n        .attr('alignment-baseline', 'central');\n\n      _setTextAttrs(text, textAttrs);\n    }\n  }\n\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   * @param {any} conf\n   */\n  function byFo(content, g, x, y, width, height, textAttrs, conf) {\n    const s = g.append('switch');\n    const f = s\n      .append('foreignObject')\n      .attr('x', x)\n      .attr('y', y)\n      .attr('width', width)\n      .attr('height', height);\n\n    const text = f\n      .append('xhtml:div')\n      .style('display', 'table')\n      .style('height', '100%')\n      .style('width', '100%');\n\n    text\n      .append('div')\n      .style('display', 'table-cell')\n      .style('text-align', 'center')\n      .style('vertical-align', 'middle')\n      .text(content);\n\n    byTspan(content, s, x, y, width, height, textAttrs, conf);\n    _setTextAttrs(text, textAttrs);\n  }\n\n  /**\n   * @param {any} toText\n   * @param {any} fromTextAttrsDict\n   */\n  function _setTextAttrs(toText, fromTextAttrsDict) {\n    for (const key in fromTextAttrsDict) {\n      if (fromTextAttrsDict.hasOwnProperty(key)) { // eslint-disable-line\n        toText.attr(key, fromTextAttrsDict[key]);\n      }\n    }\n  }\n\n  return function (conf) {\n    return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n  };\n})();\n\nexport default {\n  drawRect,\n  drawText,\n  drawLabel,\n  drawActor,\n  drawPopup,\n  drawImage,\n  drawEmbeddedImage,\n  anchorElement,\n  drawActivation,\n  drawLoop,\n  drawBackgroundRect,\n  insertArrowHead,\n  insertArrowFilledHead,\n  insertSequenceNumber,\n  insertArrowCrossHead,\n  insertDatabaseIcon,\n  insertComputerIcon,\n  insertClockIcon,\n  getTextObj,\n  getNoteRect,\n  popupMenu,\n  popdownMenu,\n  fixLifeLineHeights,\n  sanitizeUrl,\n};\n","const idCache = {};\n\nexport const set = (key, val) => {\n  idCache[key] = val;\n};\n\nexport const get = (k) => idCache[k];\nexport const keys = () => Object.keys(idCache);\nexport const size = () => keys().length;\n\nexport default {\n  get,\n  set,\n  keys,\n  size,\n};\n","import { line, curveBasis } from 'd3';\nimport idCache from './id-cache.js';\nimport stateDb from './stateDb';\nimport utils from '../../utils';\nimport common from '../common/common';\nimport { getConfig } from '../../config';\nimport { log } from '../../logger';\n\n/**\n * Draws a start state as a black circle\n *\n * @param {any} g\n */\nexport const drawStartState = (g) =>\n  g\n    .append('circle')\n    // .style('stroke', 'black')\n    // .style('fill', 'black')\n    .attr('class', 'start-state')\n    .attr('r', getConfig().state.sizeUnit)\n    .attr('cx', getConfig().state.padding + getConfig().state.sizeUnit)\n    .attr('cy', getConfig().state.padding + getConfig().state.sizeUnit);\n\n/**\n * Draws a start state as a black circle\n *\n * @param {any} g\n */\nexport const drawDivider = (g) =>\n  g\n    .append('line')\n    .style('stroke', 'grey')\n    .style('stroke-dasharray', '3')\n    .attr('x1', getConfig().state.textHeight)\n    .attr('class', 'divider')\n    .attr('x2', getConfig().state.textHeight * 2)\n    .attr('y1', 0)\n    .attr('y2', 0);\n\n/**\n * Draws a an end state as a black circle\n *\n * @param {any} g\n * @param {any} stateDef\n */\nexport const drawSimpleState = (g, stateDef) => {\n  const state = g\n    .append('text')\n    .attr('x', 2 * getConfig().state.padding)\n    .attr('y', getConfig().state.textHeight + 2 * getConfig().state.padding)\n    .attr('font-size', getConfig().state.fontSize)\n    .attr('class', 'state-title')\n    .text(stateDef.id);\n\n  const classBox = state.node().getBBox();\n  g.insert('rect', ':first-child')\n    .attr('x', getConfig().state.padding)\n    .attr('y', getConfig().state.padding)\n    .attr('width', classBox.width + 2 * getConfig().state.padding)\n    .attr('height', classBox.height + 2 * getConfig().state.padding)\n    .attr('rx', getConfig().state.radius);\n\n  return state;\n};\n\n/**\n * Draws a state with descriptions\n *\n * @param {any} g\n * @param {any} stateDef\n * @returns\n */\nexport const drawDescrState = (g, stateDef) => {\n  const addTspan = function (textEl, txt, isFirst) {\n    const tSpan = textEl\n      .append('tspan')\n      .attr('x', 2 * getConfig().state.padding)\n      .text(txt);\n    if (!isFirst) {\n      tSpan.attr('dy', getConfig().state.textHeight);\n    }\n  };\n  const title = g\n    .append('text')\n    .attr('x', 2 * getConfig().state.padding)\n    .attr('y', getConfig().state.textHeight + 1.3 * getConfig().state.padding)\n    .attr('font-size', getConfig().state.fontSize)\n    .attr('class', 'state-title')\n    .text(stateDef.descriptions[0]);\n\n  const titleBox = title.node().getBBox();\n  const titleHeight = titleBox.height;\n\n  const description = g\n    .append('text') // text label for the x axis\n    .attr('x', getConfig().state.padding)\n    .attr(\n      'y',\n      titleHeight +\n        getConfig().state.padding * 0.4 +\n        getConfig().state.dividerMargin +\n        getConfig().state.textHeight\n    )\n    .attr('class', 'state-description');\n\n  let isFirst = true;\n  let isSecond = true;\n  stateDef.descriptions.forEach(function (descr) {\n    if (!isFirst) {\n      addTspan(description, descr, isSecond);\n      isSecond = false;\n    }\n    isFirst = false;\n  });\n\n  const descrLine = g\n    .append('line') // text label for the x axis\n    .attr('x1', getConfig().state.padding)\n    .attr('y1', getConfig().state.padding + titleHeight + getConfig().state.dividerMargin / 2)\n    .attr('y2', getConfig().state.padding + titleHeight + getConfig().state.dividerMargin / 2)\n    .attr('class', 'descr-divider');\n  const descrBox = description.node().getBBox();\n  const width = Math.max(descrBox.width, titleBox.width);\n\n  descrLine.attr('x2', width + 3 * getConfig().state.padding);\n  // const classBox = title.node().getBBox();\n\n  g.insert('rect', ':first-child')\n    .attr('x', getConfig().state.padding)\n    .attr('y', getConfig().state.padding)\n    .attr('width', width + 2 * getConfig().state.padding)\n    .attr('height', descrBox.height + titleHeight + 2 * getConfig().state.padding)\n    .attr('rx', getConfig().state.radius);\n\n  return g;\n};\n\n/** Adds the creates a box around the existing content and adds a panel for the id on top of the content. */\n/**\n * Function that creates an title row and a frame around a substate for a composit state diagram.\n * The function returns a new d3 svg object with updated width and height properties;\n *\n * @param {any} g The d3 svg object for the substate to framed\n * @param {any} stateDef The info about the\n * @param {any} altBkg\n */\nexport const addTitleAndBox = (g, stateDef, altBkg) => {\n  const pad = getConfig().state.padding;\n  const dblPad = 2 * getConfig().state.padding;\n  const orgBox = g.node().getBBox();\n  const orgWidth = orgBox.width;\n  const orgX = orgBox.x;\n\n  const title = g\n    .append('text')\n    .attr('x', 0)\n    .attr('y', getConfig().state.titleShift)\n    .attr('font-size', getConfig().state.fontSize)\n    .attr('class', 'state-title')\n    .text(stateDef.id);\n\n  const titleBox = title.node().getBBox();\n  const titleWidth = titleBox.width + dblPad;\n  let width = Math.max(titleWidth, orgWidth); // + dblPad;\n  if (width === orgWidth) {\n    width = width + dblPad;\n  }\n  let startX;\n  // const lineY = 1 - getConfig().state.textHeight;\n  // const descrLine = g\n  //   .append('line') // text label for the x axis\n  //   .attr('x1', 0)\n  //   .attr('y1', lineY)\n  //   .attr('y2', lineY)\n  //   .attr('class', 'descr-divider');\n\n  const graphBox = g.node().getBBox();\n  // descrLine.attr('x2', graphBox.width + getConfig().state.padding);\n\n  if (stateDef.doc) {\n    // cnsole.warn(\n    //   stateDef.id,\n    //   'orgX: ',\n    //   orgX,\n    //   'width: ',\n    //   width,\n    //   'titleWidth: ',\n    //   titleWidth,\n    //   'orgWidth: ',\n    //   orgWidth,\n    //   'width',\n    //   width\n    // );\n  }\n\n  startX = orgX - pad;\n  if (titleWidth > orgWidth) {\n    startX = (orgWidth - width) / 2 + pad;\n  }\n  if (Math.abs(orgX - graphBox.x) < pad) {\n    if (titleWidth > orgWidth) {\n      startX = orgX - (titleWidth - orgWidth) / 2;\n    }\n  }\n\n  const lineY = 1 - getConfig().state.textHeight;\n  // White color\n  g.insert('rect', ':first-child')\n    .attr('x', startX)\n    .attr('y', lineY)\n    .attr('class', altBkg ? 'alt-composit' : 'composit')\n    .attr('width', width)\n    .attr(\n      'height',\n      graphBox.height + getConfig().state.textHeight + getConfig().state.titleShift + 1\n    )\n    .attr('rx', '0');\n\n  title.attr('x', startX + pad);\n  if (titleWidth <= orgWidth) title.attr('x', orgX + (width - dblPad) / 2 - titleWidth / 2 + pad);\n\n  // Title background\n  g.insert('rect', ':first-child')\n    .attr('x', startX)\n    .attr(\n      'y',\n      getConfig().state.titleShift - getConfig().state.textHeight - getConfig().state.padding\n    )\n    .attr('width', width)\n    // Just needs to be higher then the descr line, will be clipped by the white color box\n    .attr('height', getConfig().state.textHeight * 3)\n    .attr('rx', getConfig().state.radius);\n\n  // Full background\n  g.insert('rect', ':first-child')\n    .attr('x', startX)\n    .attr(\n      'y',\n      getConfig().state.titleShift - getConfig().state.textHeight - getConfig().state.padding\n    )\n    .attr('width', width)\n    .attr('height', graphBox.height + 3 + 2 * getConfig().state.textHeight)\n    .attr('rx', getConfig().state.radius);\n\n  return g;\n};\n\nconst drawEndState = (g) => {\n  g.append('circle')\n    // .style('stroke', 'black')\n    // .style('fill', 'white')\n    .attr('class', 'end-state-outer')\n    .attr('r', getConfig().state.sizeUnit + getConfig().state.miniPadding)\n    .attr(\n      'cx',\n      getConfig().state.padding + getConfig().state.sizeUnit + getConfig().state.miniPadding\n    )\n    .attr(\n      'cy',\n      getConfig().state.padding + getConfig().state.sizeUnit + getConfig().state.miniPadding\n    );\n\n  return (\n    g\n      .append('circle')\n      // .style('stroke', 'black')\n      // .style('fill', 'black')\n      .attr('class', 'end-state-inner')\n      .attr('r', getConfig().state.sizeUnit)\n      .attr('cx', getConfig().state.padding + getConfig().state.sizeUnit + 2)\n      .attr('cy', getConfig().state.padding + getConfig().state.sizeUnit + 2)\n  );\n};\nconst drawForkJoinState = (g, stateDef) => {\n  let width = getConfig().state.forkWidth;\n  let height = getConfig().state.forkHeight;\n\n  if (stateDef.parentId) {\n    let tmp = width;\n    width = height;\n    height = tmp;\n  }\n  return g\n    .append('rect')\n    .style('stroke', 'black')\n    .style('fill', 'black')\n    .attr('width', width)\n    .attr('height', height)\n    .attr('x', getConfig().state.padding)\n    .attr('y', getConfig().state.padding);\n};\n\nexport const drawText = function (elem, textData) {\n  // Remove and ignore br:s\n  const nText = textData.text.replace(common.lineBreakRegex, ' ');\n\n  const textElem = elem.append('text');\n  textElem.attr('x', textData.x);\n  textElem.attr('y', textData.y);\n  textElem.style('text-anchor', textData.anchor);\n  textElem.attr('fill', textData.fill);\n  if (typeof textData.class !== 'undefined') {\n    textElem.attr('class', textData.class);\n  }\n\n  const span = textElem.append('tspan');\n  span.attr('x', textData.x + textData.textMargin * 2);\n  span.attr('fill', textData.fill);\n  span.text(nText);\n\n  return textElem;\n};\n\nconst _drawLongText = (_text, x, y, g) => {\n  let textHeight = 0;\n\n  const textElem = g.append('text');\n  textElem.style('text-anchor', 'start');\n  textElem.attr('class', 'noteText');\n\n  let text = _text.replace(/\\r\\n/g, '<br/>');\n  text = text.replace(/\\n/g, '<br/>');\n  const lines = text.split(common.lineBreakRegex);\n\n  let tHeight = 1.25 * getConfig().state.noteMargin;\n  for (const line of lines) {\n    const txt = line.trim();\n\n    if (txt.length > 0) {\n      const span = textElem.append('tspan');\n      span.text(txt);\n      if (tHeight === 0) {\n        const textBounds = span.node().getBBox();\n        tHeight += textBounds.height;\n      }\n      textHeight += tHeight;\n      span.attr('x', x + getConfig().state.noteMargin);\n      span.attr('y', y + textHeight + 1.25 * getConfig().state.noteMargin);\n    }\n  }\n  return { textWidth: textElem.node().getBBox().width, textHeight };\n};\n\n/**\n * Draws a note to the diagram\n *\n * @param text - The text of the given note.\n * @param g - The element the note is attached to.\n */\n\nexport const drawNote = (text, g) => {\n  g.attr('class', 'state-note');\n  const note = g.append('rect').attr('x', 0).attr('y', getConfig().state.padding);\n  const rectElem = g.append('g');\n\n  const { textWidth, textHeight } = _drawLongText(text, 0, 0, rectElem);\n  note.attr('height', textHeight + 2 * getConfig().state.noteMargin);\n  note.attr('width', textWidth + getConfig().state.noteMargin * 2);\n\n  return note;\n};\n\n/**\n * Starting point for drawing a state. The function finds out the specifics about the state and\n * renders with appropriate function.\n *\n * @param {any} elem\n * @param {any} stateDef\n */\n\nexport const drawState = function (elem, stateDef) {\n  const id = stateDef.id;\n  const stateInfo = {\n    id: id,\n    label: stateDef.id,\n    width: 0,\n    height: 0,\n  };\n\n  const g = elem.append('g').attr('id', id).attr('class', 'stateGroup');\n\n  if (stateDef.type === 'start') drawStartState(g);\n  if (stateDef.type === 'end') drawEndState(g);\n  if (stateDef.type === 'fork' || stateDef.type === 'join') drawForkJoinState(g, stateDef);\n  if (stateDef.type === 'note') drawNote(stateDef.note.text, g);\n  if (stateDef.type === 'divider') drawDivider(g);\n  if (stateDef.type === 'default' && stateDef.descriptions.length === 0)\n    drawSimpleState(g, stateDef);\n  if (stateDef.type === 'default' && stateDef.descriptions.length > 0) drawDescrState(g, stateDef);\n\n  const stateBox = g.node().getBBox();\n  stateInfo.width = stateBox.width + 2 * getConfig().state.padding;\n  stateInfo.height = stateBox.height + 2 * getConfig().state.padding;\n\n  idCache.set(id, stateInfo);\n  // stateCnt++;\n  return stateInfo;\n};\n\nlet edgeCount = 0;\nexport const drawEdge = function (elem, path, relation) {\n  const getRelationType = function (type) {\n    switch (type) {\n      case stateDb.relationType.AGGREGATION:\n        return 'aggregation';\n      case stateDb.relationType.EXTENSION:\n        return 'extension';\n      case stateDb.relationType.COMPOSITION:\n        return 'composition';\n      case stateDb.relationType.DEPENDENCY:\n        return 'dependency';\n    }\n  };\n\n  path.points = path.points.filter((p) => !Number.isNaN(p.y));\n\n  // The data for our line\n  const lineData = path.points;\n\n  // This is the accessor function we talked about above\n  const lineFunction = line()\n    .x(function (d) {\n      return d.x;\n    })\n    .y(function (d) {\n      return d.y;\n    })\n    .curve(curveBasis);\n\n  const svgPath = elem\n    .append('path')\n    .attr('d', lineFunction(lineData))\n    .attr('id', 'edge' + edgeCount)\n    .attr('class', 'transition');\n  let url = '';\n  if (getConfig().state.arrowMarkerAbsolute) {\n    url =\n      window.location.protocol +\n      '//' +\n      window.location.host +\n      window.location.pathname +\n      window.location.search;\n    url = url.replace(/\\(/g, '\\\\(');\n    url = url.replace(/\\)/g, '\\\\)');\n  }\n\n  svgPath.attr(\n    'marker-end',\n    'url(' + url + '#' + getRelationType(stateDb.relationType.DEPENDENCY) + 'End' + ')'\n  );\n\n  if (typeof relation.title !== 'undefined') {\n    const label = elem.append('g').attr('class', 'stateLabel');\n\n    const { x, y } = utils.calcLabelPosition(path.points);\n\n    const rows = common.getRows(relation.title);\n\n    let titleHeight = 0;\n    const titleRows = [];\n    let maxWidth = 0;\n    let minX = 0;\n\n    for (let i = 0; i <= rows.length; i++) {\n      const title = label\n        .append('text')\n        .attr('text-anchor', 'middle')\n        .text(rows[i])\n        .attr('x', x)\n        .attr('y', y + titleHeight);\n\n      const boundstmp = title.node().getBBox();\n      maxWidth = Math.max(maxWidth, boundstmp.width);\n      minX = Math.min(minX, boundstmp.x);\n\n      log.info(boundstmp.x, x, y + titleHeight);\n\n      if (titleHeight === 0) {\n        const titleBox = title.node().getBBox();\n        titleHeight = titleBox.height;\n        log.info('Title height', titleHeight, y);\n      }\n      titleRows.push(title);\n    }\n\n    let boxHeight = titleHeight * rows.length;\n    if (rows.length > 1) {\n      const heightAdj = (rows.length - 1) * titleHeight * 0.5;\n\n      titleRows.forEach((title, i) => title.attr('y', y + i * titleHeight - heightAdj));\n      boxHeight = titleHeight * rows.length;\n    }\n\n    const bounds = label.node().getBBox();\n\n    label\n      .insert('rect', ':first-child')\n      .attr('class', 'box')\n      .attr('x', x - maxWidth / 2 - getConfig().state.padding / 2)\n      .attr('y', y - boxHeight / 2 - getConfig().state.padding / 2 - 3.5)\n      .attr('width', maxWidth + getConfig().state.padding)\n      .attr('height', boxHeight + getConfig().state.padding);\n\n    log.info(bounds);\n\n    //label.attr('transform', '0 -' + (bounds.y / 2));\n\n    // Debug points\n    // path.points.forEach(point => {\n    //   g.append('circle')\n    //     .style('stroke', 'red')\n    //     .style('fill', 'red')\n    //     .attr('r', 1)\n    //     .attr('cx', point.x)\n    //     .attr('cy', point.y);\n    // });\n    // g.append('circle')\n    //   .style('stroke', 'blue')\n    //   .style('fill', 'blue')\n    //   .attr('r', 1)\n    //   .attr('cx', x)\n    //   .attr('cy', y);\n  }\n\n  edgeCount++;\n};\n","import { log } from '../../logger';\nimport { generateId } from '../../utils';\nimport mermaidAPI from '../../mermaidAPI';\nimport common from '../common/common';\nimport * as configApi from '../../config';\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n} from '../../commonDb';\n\nconst sanitizeText = (txt) => common.sanitizeText(txt, configApi.getConfig());\n\nconst clone = (o) => JSON.parse(JSON.stringify(o));\nlet rootDoc = [];\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\nconst setRootDoc = (o) => {\n  log.info('Setting root doc', o);\n  // rootDoc = { id: 'root', doc: o };\n  rootDoc = o;\n};\n\nconst getRootDoc = () => rootDoc;\n\nconst docTranslator = (parent, node, first) => {\n  if (node.stmt === 'relation') {\n    docTranslator(parent, node.state1, true);\n    docTranslator(parent, node.state2, false);\n  } else {\n    if (node.stmt === 'state') {\n      if (node.id === '[*]') {\n        node.id = first ? parent.id + '_start' : parent.id + '_end';\n        node.start = first;\n      }\n    }\n\n    if (node.doc) {\n      const doc = [];\n      // Check for concurrency\n      let i = 0;\n      let currentDoc = [];\n      for (i = 0; i < node.doc.length; i++) {\n        if (node.doc[i].type === 'divider') {\n          // debugger;\n          const newNode = clone(node.doc[i]);\n          newNode.doc = clone(currentDoc);\n          doc.push(newNode);\n          currentDoc = [];\n        } else {\n          currentDoc.push(node.doc[i]);\n        }\n      }\n\n      // If any divider was encountered\n      if (doc.length > 0 && currentDoc.length > 0) {\n        const newNode = {\n          stmt: 'state',\n          id: generateId(),\n          type: 'divider',\n          doc: clone(currentDoc),\n        };\n        doc.push(clone(newNode));\n        node.doc = doc;\n      }\n\n      node.doc.forEach((docNode) => docTranslator(node, docNode, true));\n    }\n  }\n};\nconst getRootDocV2 = () => {\n  docTranslator({ id: 'root' }, { id: 'root', doc: rootDoc }, true);\n  return { id: 'root', doc: rootDoc };\n  // Here\n};\n\nconst extract = (_doc) => {\n  // const res = { states: [], relations: [] };\n  let doc;\n  if (_doc.doc) {\n    doc = _doc.doc;\n  } else {\n    doc = _doc;\n  }\n  // let doc = root.doc;\n  // if (!doc) {\n  //   doc = root;\n  // }\n  log.info(doc);\n  clear(true);\n\n  log.info('Extract', doc);\n\n  doc.forEach((item) => {\n    if (item.stmt === 'state') {\n      addState(item.id, item.type, item.doc, item.description, item.note);\n    }\n    if (item.stmt === 'relation') {\n      addRelation(item.state1.id, item.state2.id, item.description);\n    }\n  });\n};\n\nconst newDoc = () => {\n  return {\n    relations: [],\n    states: {},\n    documents: {},\n  };\n};\n\nlet documents = {\n  root: newDoc(),\n};\n\nlet currentDocument = documents.root;\n\nlet startCnt = 0;\nlet endCnt = 0; // eslint-disable-line\n// let stateCnt = 0;\n\nlet title = 'State diagram';\nlet description = '';\n\n/**\n * Function called by parser when a node definition has been found.\n *\n * @param {any} id\n * @param {any} type\n * @param {any} doc\n * @param {any} descr\n * @param {any} note\n */\nexport const addState = function (id, type, doc, descr, note) {\n  if (typeof currentDocument.states[id] === 'undefined') {\n    currentDocument.states[id] = {\n      id: id,\n      descriptions: [],\n      type,\n      doc,\n      note,\n    };\n  } else {\n    if (!currentDocument.states[id].doc) {\n      currentDocument.states[id].doc = doc;\n    }\n    if (!currentDocument.states[id].type) {\n      currentDocument.states[id].type = type;\n    }\n  }\n  if (descr) {\n    log.info('Adding state ', id, descr);\n    if (typeof descr === 'string') addDescription(id, descr.trim());\n\n    if (typeof descr === 'object') {\n      descr.forEach((des) => addDescription(id, des.trim()));\n    }\n  }\n\n  if (note) {\n    currentDocument.states[id].note = note;\n    currentDocument.states[id].note.text = common.sanitizeText(\n      currentDocument.states[id].note.text,\n      configApi.getConfig()\n    );\n  }\n};\n\nexport const clear = function (saveCommon) {\n  documents = {\n    root: newDoc(),\n  };\n  currentDocument = documents.root;\n\n  currentDocument = documents.root;\n\n  startCnt = 0;\n  endCnt = 0; // eslint-disable-line\n  classes = [];\n  if (!saveCommon) {\n    commonClear();\n  }\n};\n\nexport const getState = function (id) {\n  return currentDocument.states[id];\n};\n\nexport const getStates = function () {\n  return currentDocument.states;\n};\nexport const logDocuments = function () {\n  log.info('Documents = ', documents);\n};\nexport const getRelations = function () {\n  return currentDocument.relations;\n};\n\nexport const addRelation = function (_id1, _id2, title) {\n  let id1 = _id1;\n  let id2 = _id2;\n  let type1 = 'default';\n  let type2 = 'default';\n  if (_id1 === '[*]') {\n    startCnt++;\n    id1 = 'start' + startCnt;\n    type1 = 'start';\n  }\n  if (_id2 === '[*]') {\n    endCnt++;\n    id2 = 'end' + startCnt;\n    type2 = 'end';\n  }\n  addState(id1, type1);\n  addState(id2, type2);\n  currentDocument.relations.push({\n    id1,\n    id2,\n    title: common.sanitizeText(title, configApi.getConfig()),\n  });\n};\n\nconst addDescription = function (id, _descr) {\n  const theState = currentDocument.states[id];\n  let descr = _descr;\n  if (descr[0] === ':') {\n    descr = descr.substr(1).trim();\n  }\n  theState.descriptions.push(common.sanitizeText(descr, configApi.getConfig()));\n};\n\nexport const cleanupLabel = function (label) {\n  if (label.substring(0, 1) === ':') {\n    return label.substr(2).trim();\n  } else {\n    return label.trim();\n  }\n};\n\nexport const lineType = {\n  LINE: 0,\n  DOTTED_LINE: 1,\n};\n\nlet dividerCnt = 0;\nconst getDividerId = () => {\n  dividerCnt++;\n  return 'divider-id-' + dividerCnt;\n};\n\nlet classes = [];\n\nconst getClasses = () => classes;\n\nlet direction = 'TB';\nconst getDirection = () => direction;\nconst setDirection = (dir) => {\n  direction = dir;\n};\n\nexport const relationType = {\n  AGGREGATION: 0,\n  EXTENSION: 1,\n  COMPOSITION: 2,\n  DEPENDENCY: 3,\n};\n\nconst trimColon = (str) => (str && str[0] === ':' ? str.substr(1).trim() : str.trim());\n\nexport default {\n  parseDirective,\n  getConfig: () => configApi.getConfig().state,\n  addState,\n  clear,\n  getState,\n  getStates,\n  getRelations,\n  getClasses,\n  getDirection,\n  addRelation,\n  getDividerId,\n  setDirection,\n  cleanupLabel,\n  lineType,\n  relationType,\n  logDocuments,\n  getRootDoc,\n  setRootDoc,\n  getRootDocV2,\n  extract,\n  trimColon,\n  getAccTitle,\n  setAccTitle,\n  getAccDescription,\n  setAccDescription,\n};\n","import graphlib from 'graphlib';\nimport { select } from 'd3';\nimport stateDb from './stateDb';\nimport state from './parser/stateDiagram';\nimport { getConfig } from '../../config';\nimport { render } from '../../dagre-wrapper/index.js';\nimport { log } from '../../logger';\nimport { configureSvgSize } from '../../utils';\nimport common from '../common/common';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nconst conf = {};\nexport const setConf = function (cnf) {\n  const keys = Object.keys(cnf);\n  for (let i = 0; i < keys.length; i++) {\n    conf[keys[i]] = cnf[keys[i]];\n  }\n};\n\nlet nodeDb = {};\n\n/**\n * Returns the all the styles from classDef statements in the graph definition.\n *\n * @param {any} text\n * @returns {object} ClassDef styles\n */\nexport const getClasses = function (text) {\n  log.trace('Extracting classes');\n  stateDb.clear();\n  const parser = state.parser;\n  parser.yy = stateDb;\n\n  // Parse the graph definition\n  parser.parse(text);\n  return stateDb.getClasses();\n};\n\nconst setupNode = (g, parent, node, altFlag) => {\n  // Add the node\n  if (node.id !== 'root') {\n    let shape = 'rect';\n    if (node.start === true) {\n      shape = 'start';\n    }\n    if (node.start === false) {\n      shape = 'end';\n    }\n    if (node.type !== 'default') {\n      shape = node.type;\n    }\n\n    if (!nodeDb[node.id]) {\n      nodeDb[node.id] = {\n        id: node.id,\n        shape,\n        description: common.sanitizeText(node.id, getConfig()),\n        classes: 'statediagram-state',\n      };\n    }\n\n    // Build of the array of description strings accordinging\n    if (node.description) {\n      if (Array.isArray(nodeDb[node.id].description)) {\n        // There already is an array of strings,add to it\n        nodeDb[node.id].shape = 'rectWithTitle';\n        nodeDb[node.id].description.push(node.description);\n      } else {\n        if (nodeDb[node.id].description.length > 0) {\n          // if there is a description already transformit to an array\n          nodeDb[node.id].shape = 'rectWithTitle';\n          if (nodeDb[node.id].description === node.id) {\n            // If the previous description was the is, remove it\n            nodeDb[node.id].description = [node.description];\n          } else {\n            nodeDb[node.id].description = [nodeDb[node.id].description, node.description];\n          }\n        } else {\n          nodeDb[node.id].shape = 'rect';\n          nodeDb[node.id].description = node.description;\n        }\n      }\n      nodeDb[node.id].description = common.sanitizeTextOrArray(\n        nodeDb[node.id].description,\n        getConfig()\n      );\n    }\n\n    //\n    if (nodeDb[node.id].description.length === 1 && nodeDb[node.id].shape === 'rectWithTitle') {\n      nodeDb[node.id].shape = 'rect';\n    }\n\n    // Save data for description and group so that for instance a statement without description overwrites\n    // one with description\n\n    // group\n    if (!nodeDb[node.id].type && node.doc) {\n      log.info('Setting cluster for ', node.id, getDir(node));\n      nodeDb[node.id].type = 'group';\n      nodeDb[node.id].dir = getDir(node);\n      nodeDb[node.id].shape = node.type === 'divider' ? 'divider' : 'roundedWithTitle';\n      nodeDb[node.id].classes =\n        nodeDb[node.id].classes +\n        ' ' +\n        (altFlag ? 'statediagram-cluster statediagram-cluster-alt' : 'statediagram-cluster');\n    }\n\n    const nodeData = {\n      labelStyle: '',\n      shape: nodeDb[node.id].shape,\n      labelText: nodeDb[node.id].description,\n      // typeof nodeDb[node.id].description === 'object'\n      //   ? nodeDb[node.id].description[0]\n      //   : nodeDb[node.id].description,\n      classes: nodeDb[node.id].classes, //classStr,\n      style: '', //styles.style,\n      id: node.id,\n      dir: nodeDb[node.id].dir,\n      domId: 'state-' + node.id + '-' + cnt,\n      type: nodeDb[node.id].type,\n      padding: 15, //getConfig().flowchart.padding\n    };\n\n    if (node.note) {\n      // Todo: set random id\n      const noteData = {\n        labelStyle: '',\n        shape: 'note',\n        labelText: node.note.text,\n        classes: 'statediagram-note', //classStr,\n        style: '', //styles.style,\n        id: node.id + '----note-' + cnt,\n        domId: 'state-' + node.id + '----note-' + cnt,\n        type: nodeDb[node.id].type,\n        padding: 15, //getConfig().flowchart.padding\n      };\n      const groupData = {\n        labelStyle: '',\n        shape: 'noteGroup',\n        labelText: node.note.text,\n        classes: nodeDb[node.id].classes, //classStr,\n        style: '', //styles.style,\n        id: node.id + '----parent',\n        domId: 'state-' + node.id + '----parent-' + cnt,\n        type: 'group',\n        padding: 0, //getConfig().flowchart.padding\n      };\n      cnt++;\n\n      g.setNode(node.id + '----parent', groupData);\n\n      g.setNode(noteData.id, noteData);\n      g.setNode(node.id, nodeData);\n\n      g.setParent(node.id, node.id + '----parent');\n      g.setParent(noteData.id, node.id + '----parent');\n\n      let from = node.id;\n      let to = noteData.id;\n\n      if (node.note.position === 'left of') {\n        from = noteData.id;\n        to = node.id;\n      }\n      g.setEdge(from, to, {\n        arrowhead: 'none',\n        arrowType: '',\n        style: 'fill:none',\n        labelStyle: '',\n        classes: 'transition note-edge',\n        arrowheadStyle: 'fill: #333',\n        labelpos: 'c',\n        labelType: 'text',\n        thickness: 'normal',\n      });\n    } else {\n      g.setNode(node.id, nodeData);\n    }\n  }\n\n  if (parent) {\n    if (parent.id !== 'root') {\n      log.trace('Setting node ', node.id, ' to be child of its parent ', parent.id);\n      g.setParent(node.id, parent.id);\n    }\n  }\n  if (node.doc) {\n    log.trace('Adding nodes children ');\n    setupDoc(g, node, node.doc, !altFlag);\n  }\n};\nlet cnt = 0;\nconst setupDoc = (g, parent, doc, altFlag) => {\n  // cnt = 0;\n  log.trace('items', doc);\n  doc.forEach((item) => {\n    if (item.stmt === 'state' || item.stmt === 'default') {\n      setupNode(g, parent, item, altFlag);\n    } else if (item.stmt === 'relation') {\n      setupNode(g, parent, item.state1, altFlag);\n      setupNode(g, parent, item.state2, altFlag);\n      const edgeData = {\n        id: 'edge' + cnt,\n        arrowhead: 'normal',\n        arrowTypeEnd: 'arrow_barb',\n        style: 'fill:none',\n        labelStyle: '',\n        label: common.sanitizeText(item.description, getConfig()),\n        arrowheadStyle: 'fill: #333',\n        labelpos: 'c',\n        labelType: 'text',\n        thickness: 'normal',\n        classes: 'transition',\n      };\n      let startId = item.state1.id;\n      let endId = item.state2.id;\n\n      g.setEdge(startId, endId, edgeData, cnt);\n      cnt++;\n    }\n  });\n};\nconst getDir = (nodes, defaultDir) => {\n  let dir = defaultDir || 'TB';\n  if (nodes.doc) {\n    for (let i = 0; i < nodes.doc.length; i++) {\n      const node = nodes.doc[i];\n      if (node.stmt === 'dir') {\n        dir = node.value;\n      }\n    }\n  }\n  return dir;\n};\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n *\n * @param {any} text\n * @param {any} id\n */\nexport const draw = function (text, id) {\n  log.info('Drawing state diagram (v2)', id);\n  stateDb.clear();\n  nodeDb = {};\n  const parser = state.parser;\n  parser.yy = stateDb;\n\n  // Parse the graph definition\n  parser.parse(text);\n\n  // Fetch the default direction, use TD if none was found\n  let dir = stateDb.getDirection();\n  if (typeof dir === 'undefined') {\n    dir = 'LR';\n  }\n\n  const conf = getConfig().state;\n  const nodeSpacing = conf.nodeSpacing || 50;\n  const rankSpacing = conf.rankSpacing || 50;\n\n  const securityLevel = getConfig().securityLevel;\n\n  log.info(stateDb.getRootDocV2());\n  stateDb.extract(stateDb.getRootDocV2());\n  log.info(stateDb.getRootDocV2());\n\n  // Create the input mermaid.graph\n  const g = new graphlib.Graph({\n    multigraph: true,\n    compound: true,\n  })\n    .setGraph({\n      rankdir: getDir(stateDb.getRootDocV2()),\n      nodesep: nodeSpacing,\n      ranksep: rankSpacing,\n      marginx: 8,\n      marginy: 8,\n    })\n    .setDefaultEdgeLabel(function () {\n      return {};\n    });\n\n  setupNode(g, undefined, stateDb.getRootDocV2(), true);\n\n  // Set up an SVG group so that we can translate the final graph.\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n  const svg = root.select(`[id=\"${id}\"]`);\n\n  // Run the renderer. This is what draws the final graph.\n\n  const element = root.select('#' + id + ' g');\n  render(element, g, ['barb'], 'statediagram', id);\n\n  const padding = 8;\n\n  const bounds = svg.node().getBBox();\n\n  const width = bounds.width + padding * 2;\n  const height = bounds.height + padding * 2;\n\n  // Zoom in a bit\n  svg.attr('class', 'statediagram');\n\n  const svgBounds = svg.node().getBBox();\n\n  configureSvgSize(svg, height, width * 1.75, conf.useMaxWidth);\n\n  // Ensure the viewBox includes the whole svgBounds area with extra space for padding\n  const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`;\n  log.debug(`viewBox ${vBox}`);\n  svg.attr('viewBox', vBox);\n\n  // Add label rects for non html labels\n  // if (!evaluate(conf.htmlLabels) || true) {\n  const labels = document.querySelectorAll('[id=\"' + id + '\"] .edgeLabel .label');\n  for (let k = 0; k < labels.length; k++) {\n    const label = labels[k];\n\n    // Get dimensions of label\n    const dim = label.getBBox();\n\n    const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n    rect.setAttribute('rx', 0);\n    rect.setAttribute('ry', 0);\n    rect.setAttribute('width', dim.width);\n    rect.setAttribute('height', dim.height);\n\n    label.insertBefore(rect, label.firstChild);\n    // }\n  }\n  addSVGAccessibilityFields(parser.yy, svg, id);\n};\n\nexport default {\n  setConf,\n  getClasses,\n  draw,\n};\n","import { select } from 'd3';\nimport dagre from 'dagre';\nimport graphlib from 'graphlib';\nimport { log } from '../../logger';\nimport stateDb from './stateDb';\nimport common from '../common/common';\nimport { parser } from './parser/stateDiagram';\n// import idCache from './id-cache';\nimport { drawState, addTitleAndBox, drawEdge } from './shapes';\nimport { getConfig } from '../../config';\nimport { configureSvgSize } from '../../utils';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nparser.yy = stateDb;\n\n// TODO Move conf object to main conf in mermaidAPI\nlet conf;\n\nconst transformationLog = {};\n\nexport const setConf = function () {};\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param {any} elem\n */\nconst insertMarkers = function (elem) {\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', 'dependencyEnd')\n    .attr('refX', 19)\n    .attr('refY', 7)\n    .attr('markerWidth', 20)\n    .attr('markerHeight', 28)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z');\n};\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n *\n * @param {any} text\n * @param {any} id\n */\nexport const draw = function (text, id) {\n  conf = getConfig().state;\n  const securityLevel = getConfig().securityLevel;\n  // Handle root and Document for when rendering in sanbox mode\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  parser.yy.clear();\n  parser.parse(text);\n  log.debug('Rendering diagram ' + text);\n\n  // Fetch the default direction, use TD if none was found\n  const diagram = root.select(`[id='${id}']`);\n  insertMarkers(diagram);\n\n  // Layout graph, Create a new directed graph\n  const graph = new graphlib.Graph({\n    multigraph: true,\n    compound: true,\n    // acyclicer: 'greedy',\n    rankdir: 'RL',\n    // ranksep: '20'\n  });\n\n  // Default to assigning a new object as a label for each new edge.\n  graph.setDefaultEdgeLabel(function () {\n    return {};\n  });\n\n  const rootDoc = stateDb.getRootDoc();\n  renderDoc(rootDoc, diagram, undefined, false, root, doc);\n\n  const padding = conf.padding;\n  const bounds = diagram.node().getBBox();\n\n  const width = bounds.width + padding * 2;\n  const height = bounds.height + padding * 2;\n\n  // zoom in a bit\n  const svgWidth = width * 1.75;\n  configureSvgSize(diagram, height, svgWidth, conf.useMaxWidth);\n\n  diagram.attr(\n    'viewBox',\n    `${bounds.x - conf.padding}  ${bounds.y - conf.padding} ` + width + ' ' + height\n  );\n  addSVGAccessibilityFields(parser.yy, diagram, id);\n};\nconst getLabelWidth = (text) => {\n  return text ? text.length * conf.fontSizeFactor : 1;\n};\n\nconst renderDoc = (doc, diagram, parentId, altBkg, root, domDocument) => {\n  // Layout graph, Create a new directed graph\n  const graph = new graphlib.Graph({\n    compound: true,\n    multigraph: true,\n  });\n\n  let i;\n  let edgeFreeDoc = true;\n  for (i = 0; i < doc.length; i++) {\n    if (doc[i].stmt === 'relation') {\n      edgeFreeDoc = false;\n      break;\n    }\n  }\n\n  // Set an object for the graph label\n  if (parentId)\n    graph.setGraph({\n      rankdir: 'LR',\n      multigraph: true,\n      compound: true,\n      // acyclicer: 'greedy',\n      ranker: 'tight-tree',\n      ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor,\n      nodeSep: edgeFreeDoc ? 1 : 50,\n      isMultiGraph: true,\n      // ranksep: 5,\n      // nodesep: 1\n    });\n  else {\n    graph.setGraph({\n      rankdir: 'TB',\n      multigraph: true,\n      compound: true,\n      // isCompound: true,\n      // acyclicer: 'greedy',\n      // ranker: 'longest-path'\n      ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor,\n      nodeSep: edgeFreeDoc ? 1 : 50,\n      ranker: 'tight-tree',\n      // ranker: 'network-simplex'\n      isMultiGraph: true,\n    });\n  }\n\n  // Default to assigning a new object as a label for each new edge.\n  graph.setDefaultEdgeLabel(function () {\n    return {};\n  });\n\n  stateDb.extract(doc);\n  const states = stateDb.getStates();\n  const relations = stateDb.getRelations();\n\n  const keys = Object.keys(states);\n\n  let first = true;\n\n  for (let i = 0; i < keys.length; i++) {\n    const stateDef = states[keys[i]];\n\n    if (parentId) {\n      stateDef.parentId = parentId;\n    }\n\n    let node;\n    if (stateDef.doc) {\n      let sub = diagram.append('g').attr('id', stateDef.id).attr('class', 'stateGroup');\n      node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument);\n\n      if (first) {\n        // first = false;\n        sub = addTitleAndBox(sub, stateDef, altBkg);\n        let boxBounds = sub.node().getBBox();\n        node.width = boxBounds.width;\n        node.height = boxBounds.height + conf.padding / 2;\n        transformationLog[stateDef.id] = { y: conf.compositTitleSize };\n      } else {\n        // sub = addIdAndBox(sub, stateDef);\n        let boxBounds = sub.node().getBBox();\n        node.width = boxBounds.width;\n        node.height = boxBounds.height;\n        // transformationLog[stateDef.id] = { y: conf.compositTitleSize };\n      }\n    } else {\n      node = drawState(diagram, stateDef, graph);\n    }\n\n    if (stateDef.note) {\n      // Draw note note\n      const noteDef = {\n        descriptions: [],\n        id: stateDef.id + '-note',\n        note: stateDef.note,\n        type: 'note',\n      };\n      const note = drawState(diagram, noteDef, graph);\n\n      // graph.setNode(node.id, node);\n      if (stateDef.note.position === 'left of') {\n        graph.setNode(node.id + '-note', note);\n        graph.setNode(node.id, node);\n      } else {\n        graph.setNode(node.id, node);\n        graph.setNode(node.id + '-note', note);\n      }\n      // graph.setNode(node.id);\n      graph.setParent(node.id, node.id + '-group');\n      graph.setParent(node.id + '-note', node.id + '-group');\n    } else {\n      // Add nodes to the graph. The first argument is the node id. The second is\n      // metadata about the node. In this case we're going to add labels to each of\n      // our nodes.\n      graph.setNode(node.id, node);\n    }\n  }\n\n  log.debug('Count=', graph.nodeCount(), graph);\n  let cnt = 0;\n  relations.forEach(function (relation) {\n    cnt++;\n    log.debug('Setting edge', relation);\n    graph.setEdge(\n      relation.id1,\n      relation.id2,\n      {\n        relation: relation,\n        width: getLabelWidth(relation.title),\n        height: conf.labelHeight * common.getRows(relation.title).length,\n        labelpos: 'c',\n      },\n      'id' + cnt\n    );\n  });\n\n  dagre.layout(graph);\n\n  log.debug('Graph after layout', graph.nodes());\n  const svgElem = diagram.node();\n\n  graph.nodes().forEach(function (v) {\n    if (typeof v !== 'undefined' && typeof graph.node(v) !== 'undefined') {\n      log.warn('Node ' + v + ': ' + JSON.stringify(graph.node(v)));\n      root\n        .select('#' + svgElem.id + ' #' + v)\n        .attr(\n          'transform',\n          'translate(' +\n            (graph.node(v).x - graph.node(v).width / 2) +\n            ',' +\n            (graph.node(v).y +\n              (transformationLog[v] ? transformationLog[v].y : 0) -\n              graph.node(v).height / 2) +\n            ' )'\n        );\n      root\n        .select('#' + svgElem.id + ' #' + v)\n        .attr('data-x-shift', graph.node(v).x - graph.node(v).width / 2);\n      const dividers = domDocument.querySelectorAll('#' + svgElem.id + ' #' + v + ' .divider');\n      dividers.forEach((divider) => {\n        const parent = divider.parentElement;\n        let pWidth = 0;\n        let pShift = 0;\n        if (parent) {\n          if (parent.parentElement) pWidth = parent.parentElement.getBBox().width;\n          pShift = parseInt(parent.getAttribute('data-x-shift'), 10);\n          if (Number.isNaN(pShift)) {\n            pShift = 0;\n          }\n        }\n        divider.setAttribute('x1', 0 - pShift + 8);\n        divider.setAttribute('x2', pWidth - pShift - 8);\n      });\n    } else {\n      log.debug('No Node ' + v + ': ' + JSON.stringify(graph.node(v)));\n    }\n  });\n\n  let stateBox = svgElem.getBBox();\n\n  graph.edges().forEach(function (e) {\n    if (typeof e !== 'undefined' && typeof graph.edge(e) !== 'undefined') {\n      log.debug('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(graph.edge(e)));\n      drawEdge(diagram, graph.edge(e), graph.edge(e).relation);\n    }\n  });\n\n  stateBox = svgElem.getBBox();\n\n  const stateInfo = {\n    id: parentId ? parentId : 'root',\n    label: parentId ? parentId : 'root',\n    width: 0,\n    height: 0,\n  };\n\n  stateInfo.width = stateBox.width + 2 * conf.padding;\n  stateInfo.height = stateBox.height + 2 * conf.padding;\n\n  log.debug('Doc rendered', stateInfo, graph);\n  return stateInfo;\n};\n\nexport default {\n  setConf,\n  draw,\n};\n","const getStyles = (options) =>\n  `\ndefs #statediagram-barbEnd {\n    fill: ${options.transitionColor};\n    stroke: ${options.transitionColor};\n  }\ng.stateGroup text {\n  fill: ${options.nodeBorder};\n  stroke: none;\n  font-size: 10px;\n}\ng.stateGroup text {\n  fill: ${options.textColor};\n  stroke: none;\n  font-size: 10px;\n\n}\ng.stateGroup .state-title {\n  font-weight: bolder;\n  fill: ${options.stateLabelColor};\n}\n\ng.stateGroup rect {\n  fill: ${options.mainBkg};\n  stroke: ${options.nodeBorder};\n}\n\ng.stateGroup line {\n  stroke: ${options.lineColor};\n  stroke-width: 1;\n}\n\n.transition {\n  stroke: ${options.transitionColor};\n  stroke-width: 1;\n  fill: none;\n}\n\n.stateGroup .composit {\n  fill: ${options.background};\n  border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n  fill: #e0e0e0;\n  border-bottom: 1px\n}\n\n.state-note {\n  stroke: ${options.noteBorderColor};\n  fill: ${options.noteBkgColor};\n\n  text {\n    fill: ${options.noteTextColor};\n    stroke: none;\n    font-size: 10px;\n  }\n}\n\n.stateLabel .box {\n  stroke: none;\n  stroke-width: 0;\n  fill: ${options.mainBkg};\n  opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n  fill: ${options.labelBackgroundColor};\n  opacity: 0.5;\n}\n.edgeLabel .label text {\n  fill: ${options.transitionLabelColor || options.tertiaryTextColor};\n}\n.label div .edgeLabel {\n  color: ${options.transitionLabelColor || options.tertiaryTextColor};\n}\n\n.stateLabel text {\n  fill: ${options.stateLabelColor};\n  font-size: 10px;\n  font-weight: bold;\n}\n\n.node circle.state-start {\n  fill: ${options.specialStateColor};\n  stroke: ${options.specialStateColor};\n}\n\n.node .fork-join {\n  fill: ${options.specialStateColor};\n  stroke: ${options.specialStateColor};\n}\n\n.node circle.state-end {\n  fill: ${options.innerEndBackground};\n  stroke: ${options.background};\n  stroke-width: 1.5\n}\n.end-state-inner {\n  fill: ${options.compositeBackground || options.background};\n  // stroke: ${options.background};\n  stroke-width: 1.5\n}\n\n.node rect {\n  fill: ${options.stateBkg || options.mainBkg};\n  stroke: ${options.stateBorder || options.nodeBorder};\n  stroke-width: 1px;\n}\n.node polygon {\n  fill: ${options.mainBkg};\n  stroke: ${options.stateBorder || options.nodeBorder};;\n  stroke-width: 1px;\n}\n#statediagram-barbEnd {\n  fill: ${options.lineColor};\n}\n\n.statediagram-cluster rect {\n  fill: ${options.compositeTitleBackground};\n  stroke: ${options.stateBorder || options.nodeBorder};\n  stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n  color: ${options.stateLabelColor};\n}\n\n.statediagram-cluster rect.outer {\n  rx: 5px;\n  ry: 5px;\n}\n.statediagram-state .divider {\n  stroke: ${options.stateBorder || options.nodeBorder};\n}\n\n.statediagram-state .title-state {\n  rx: 5px;\n  ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n  fill: ${options.compositeBackground || options.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n  fill: ${options.altBackground ? options.altBackground : '#efefef'};\n}\n\n.statediagram-cluster .inner {\n  rx:0;\n  ry:0;\n}\n\n.statediagram-state rect.basic {\n  rx: 5px;\n  ry: 5px;\n}\n.statediagram-state rect.divider {\n  stroke-dasharray: 10,10;\n  fill: ${options.altBackground ? options.altBackground : '#efefef'};\n}\n\n.note-edge {\n  stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n  fill: ${options.noteBkgColor};\n  stroke: ${options.noteBorderColor};\n  stroke-width: 1px;\n  rx: 0;\n  ry: 0;\n}\n.statediagram-note rect {\n  fill: ${options.noteBkgColor};\n  stroke: ${options.noteBorderColor};\n  stroke-width: 1px;\n  rx: 0;\n  ry: 0;\n}\n\n.statediagram-note text {\n  fill: ${options.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n  color: ${options.noteTextColor};\n}\n.statediagram .edgeLabel {\n  color: red; // ${options.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n  fill: ${options.lineColor};\n  stroke: ${options.lineColor};\n  stroke-width: 1;\n}\n`;\n\nexport default getStyles;\n","import mermaidAPI from '../../mermaidAPI';\nimport * as configApi from '../../config';\nimport common from '../common/common';\nimport {\n  setAccTitle,\n  getAccTitle,\n  setDiagramTitle,\n  getDiagramTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n} from '../../commonDb';\n\nconst sanitizeText = (txt) => common.sanitizeText(txt, configApi.getConfig());\n\nlet title = '';\nlet description = '';\nlet currentSection = '';\n\nconst sections = [];\nconst tasks = [];\nconst rawTasks = [];\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\nexport const clear = function () {\n  sections.length = 0;\n  tasks.length = 0;\n  currentSection = '';\n  title = '';\n  description = '';\n  rawTasks.length = 0;\n  commonClear();\n};\n\nexport const addSection = function (txt) {\n  currentSection = txt;\n  sections.push(txt);\n};\n\nexport const getSections = function () {\n  return sections;\n};\n\nexport const getTasks = function () {\n  let allItemsProcessed = compileTasks();\n  const maxDepth = 100;\n  let iterationCount = 0;\n  while (!allItemsProcessed && iterationCount < maxDepth) {\n    allItemsProcessed = compileTasks();\n    iterationCount++;\n  }\n\n  tasks.push(...rawTasks);\n\n  return tasks;\n};\n\nconst updateActors = function () {\n  const tempActors = [];\n  tasks.forEach((task) => {\n    if (task.people) {\n      tempActors.push(...task.people);\n    }\n  });\n\n  const unique = new Set(tempActors);\n  return [...unique].sort();\n};\n\nexport const addTask = function (descr, taskData) {\n  const pieces = taskData.substr(1).split(':');\n\n  let score = 0;\n  let peeps = [];\n  if (pieces.length === 1) {\n    score = Number(pieces[0]);\n    peeps = [];\n  } else {\n    score = Number(pieces[0]);\n    peeps = pieces[1].split(',');\n  }\n  const peopleList = peeps.map((s) => s.trim());\n\n  const rawTask = {\n    section: currentSection,\n    type: currentSection,\n    people: peopleList,\n    task: descr,\n    score,\n  };\n\n  rawTasks.push(rawTask);\n};\n\nexport const addTaskOrg = function (descr) {\n  const newTask = {\n    section: currentSection,\n    type: currentSection,\n    description: descr,\n    task: descr,\n    classes: [],\n  };\n  tasks.push(newTask);\n};\n\nconst compileTasks = function () {\n  const compileTask = function (pos) {\n    return rawTasks[pos].processed;\n  };\n\n  let allProcessed = true;\n  for (let i = 0; i < rawTasks.length; i++) {\n    compileTask(i);\n\n    allProcessed = allProcessed && rawTasks[i].processed;\n  }\n  return allProcessed;\n};\n\nconst getActors = function () {\n  return updateActors();\n};\n\nexport default {\n  parseDirective,\n  getConfig: () => configApi.getConfig().journey,\n  clear,\n  setDiagramTitle,\n  getDiagramTitle,\n  setAccTitle,\n  getAccTitle,\n  setAccDescription,\n  getAccDescription,\n  addSection,\n  getSections,\n  getTasks,\n  addTask,\n  addTaskOrg,\n  getActors,\n};\n","import { select } from 'd3';\nimport { parser } from './parser/journey';\nimport journeyDb from './journeyDb';\nimport svgDraw from './svgDraw';\nimport { getConfig } from '../../config';\nimport { configureSvgSize } from '../../utils';\nimport addSVGAccessibilityFields from '../../accessibility';\n\nparser.yy = journeyDb;\n\nexport const setConf = function (cnf) {\n  const keys = Object.keys(cnf);\n\n  keys.forEach(function (key) {\n    conf[key] = cnf[key];\n  });\n};\n\nconst actors = {};\n\n/** @param {any} diagram */\nfunction drawActorLegend(diagram) {\n  const conf = getConfig().journey;\n  // Draw the actors\n  let yPos = 60;\n  Object.keys(actors).forEach((person) => {\n    const colour = actors[person].color;\n\n    const circleData = {\n      cx: 20,\n      cy: yPos,\n      r: 7,\n      fill: colour,\n      stroke: '#000',\n      pos: actors[person].position,\n    };\n    svgDraw.drawCircle(diagram, circleData);\n\n    const labelData = {\n      x: 40,\n      y: yPos + 7,\n      fill: '#666',\n      text: person,\n      textMargin: conf.boxTextMargin | 5,\n    };\n    svgDraw.drawText(diagram, labelData);\n\n    yPos += 20;\n  });\n}\nconst conf = getConfig().journey;\nconst LEFT_MARGIN = getConfig().journey.leftMargin;\nexport const draw = function (text, id) {\n  const conf = getConfig().journey;\n  parser.yy.clear();\n  parser.parse(text + '\\n');\n\n  const securityLevel = getConfig().securityLevel;\n  // Handle root and Document for when rendering in sanbox mode\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  bounds.init();\n  const diagram = root.select('#' + id);\n  diagram.attr('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n  svgDraw.initGraphics(diagram);\n\n  const tasks = parser.yy.getTasks();\n  const title = parser.yy.getDiagramTitle();\n\n  const actorNames = parser.yy.getActors();\n  for (let member in actors) delete actors[member];\n  let actorPos = 0;\n  actorNames.forEach((actorName) => {\n    actors[actorName] = {\n      color: conf.actorColours[actorPos % conf.actorColours.length],\n      position: actorPos,\n    };\n    actorPos++;\n  });\n\n  drawActorLegend(diagram);\n  bounds.insert(0, 0, LEFT_MARGIN, Object.keys(actors).length * 50);\n  drawTasks(diagram, tasks, 0);\n\n  const box = bounds.getBounds();\n  if (title) {\n    diagram\n      .append('text')\n      .text(title)\n      .attr('x', LEFT_MARGIN)\n      .attr('font-size', '4ex')\n      .attr('font-weight', 'bold')\n      .attr('y', 25);\n  }\n\n  const height = box.stopy - box.starty + 2 * conf.diagramMarginY;\n  const width = LEFT_MARGIN + box.stopx + 2 * conf.diagramMarginX;\n\n  configureSvgSize(diagram, height, width, conf.useMaxWidth);\n\n  // Draw activity line\n  diagram\n    .append('line')\n    .attr('x1', LEFT_MARGIN)\n    .attr('y1', conf.height * 4) // One section head + one task + margins\n    .attr('x2', width - LEFT_MARGIN - 4) // Subtract stroke width so arrow point is retained\n    .attr('y2', conf.height * 4)\n    .attr('stroke-width', 4)\n    .attr('stroke', 'black')\n    .attr('marker-end', 'url(#arrowhead)');\n\n  const extraVertForTitle = title ? 70 : 0;\n  diagram.attr('viewBox', `${box.startx} -25 ${width} ${height + extraVertForTitle}`);\n  diagram.attr('preserveAspectRatio', 'xMinYMin meet');\n  diagram.attr('height', height + extraVertForTitle + 25);\n\n  addSVGAccessibilityFields(parser.yy, diagram, id);\n};\n\nexport const bounds = {\n  data: {\n    startx: undefined,\n    stopx: undefined,\n    starty: undefined,\n    stopy: undefined,\n  },\n  verticalPos: 0,\n\n  sequenceItems: [],\n  init: function () {\n    this.sequenceItems = [];\n    this.data = {\n      startx: undefined,\n      stopx: undefined,\n      starty: undefined,\n      stopy: undefined,\n    };\n    this.verticalPos = 0;\n  },\n  updateVal: function (obj, key, val, fun) {\n    if (typeof obj[key] === 'undefined') {\n      obj[key] = val;\n    } else {\n      obj[key] = fun(val, obj[key]);\n    }\n  },\n  updateBounds: function (startx, starty, stopx, stopy) {\n    const conf = getConfig().journey;\n    const _self = this;\n    let cnt = 0;\n    /** @param {any} type */\n    function updateFn(type) {\n      return function updateItemBounds(item) {\n        cnt++;\n        // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems\n        const n = _self.sequenceItems.length - cnt + 1;\n        _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min);\n        _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max);\n\n        _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min);\n        _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max);\n\n        if (!(type === 'activation')) {\n          _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min);\n          _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max);\n\n          _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min);\n          _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max);\n        }\n      };\n    }\n\n    this.sequenceItems.forEach(updateFn());\n  },\n  insert: function (startx, starty, stopx, stopy) {\n    const _startx = Math.min(startx, stopx);\n    const _stopx = Math.max(startx, stopx);\n    const _starty = Math.min(starty, stopy);\n    const _stopy = Math.max(starty, stopy);\n\n    this.updateVal(bounds.data, 'startx', _startx, Math.min);\n    this.updateVal(bounds.data, 'starty', _starty, Math.min);\n    this.updateVal(bounds.data, 'stopx', _stopx, Math.max);\n    this.updateVal(bounds.data, 'stopy', _stopy, Math.max);\n\n    this.updateBounds(_startx, _starty, _stopx, _stopy);\n  },\n  bumpVerticalPos: function (bump) {\n    this.verticalPos = this.verticalPos + bump;\n    this.data.stopy = this.verticalPos;\n  },\n  getVerticalPos: function () {\n    return this.verticalPos;\n  },\n  getBounds: function () {\n    return this.data;\n  },\n};\n\nconst fills = conf.sectionFills;\nconst textColours = conf.sectionColours;\n\nexport const drawTasks = function (diagram, tasks, verticalPos) {\n  const conf = getConfig().journey;\n  let lastSection = '';\n  const sectionVHeight = conf.height * 2 + conf.diagramMarginY;\n  const taskPos = verticalPos + sectionVHeight;\n\n  let sectionNumber = 0;\n  let fill = '#CCC';\n  let colour = 'black';\n  let num = 0;\n\n  // Draw the tasks\n  for (let i = 0; i < tasks.length; i++) {\n    let task = tasks[i];\n    if (lastSection !== task.section) {\n      fill = fills[sectionNumber % fills.length];\n      num = sectionNumber % fills.length;\n      colour = textColours[sectionNumber % textColours.length];\n\n      const section = {\n        x: i * conf.taskMargin + i * conf.width + LEFT_MARGIN,\n        y: 50,\n        text: task.section,\n        fill,\n        num,\n        colour,\n      };\n\n      svgDraw.drawSection(diagram, section, conf);\n      lastSection = task.section;\n      sectionNumber++;\n    }\n\n    // Collect the actors involved in the task\n    const taskActors = task.people.reduce((acc, actorName) => {\n      if (actors[actorName]) {\n        acc[actorName] = actors[actorName];\n      }\n\n      return acc;\n    }, {});\n\n    // Add some rendering data to the object\n    task.x = i * conf.taskMargin + i * conf.width + LEFT_MARGIN;\n    task.y = taskPos;\n    task.width = conf.diagramMarginX;\n    task.height = conf.diagramMarginY;\n    task.colour = colour;\n    task.fill = fill;\n    task.num = num;\n    task.actors = taskActors;\n\n    // Draw the box with the attached line\n    svgDraw.drawTask(diagram, task, conf);\n    bounds.insert(task.x, task.y, task.x + task.width + conf.taskMargin, 300 + 5 * 30); // stopy is the length of the descenders.\n  }\n};\n\nexport default {\n  setConf,\n  draw,\n};\n","const getStyles = (options) =>\n  `.label {\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n    color: ${options.textColor};\n  }\n  .mouth {\n    stroke: #666;\n  }\n\n  line {\n    stroke: ${options.textColor}\n  }\n\n  .legend {\n    fill: ${options.textColor};\n  }\n\n  .label text {\n    fill: #333;\n  }\n  .label {\n    color: ${options.textColor}\n  }\n\n  .face {\n    ${options.faceColor ? `fill: ${options.faceColor}` : 'fill: #FFF8DC'};\n    stroke: #999;\n  }\n\n  .node rect,\n  .node circle,\n  .node ellipse,\n  .node polygon,\n  .node path {\n    fill: ${options.mainBkg};\n    stroke: ${options.nodeBorder};\n    stroke-width: 1px;\n  }\n\n  .node .label {\n    text-align: center;\n  }\n  .node.clickable {\n    cursor: pointer;\n  }\n\n  .arrowheadPath {\n    fill: ${options.arrowheadColor};\n  }\n\n  .edgePath .path {\n    stroke: ${options.lineColor};\n    stroke-width: 1.5px;\n  }\n\n  .flowchart-link {\n    stroke: ${options.lineColor};\n    fill: none;\n  }\n\n  .edgeLabel {\n    background-color: ${options.edgeLabelBackground};\n    rect {\n      opacity: 0.5;\n    }\n    text-align: center;\n  }\n\n  .cluster rect {\n  }\n\n  .cluster text {\n    fill: ${options.titleColor};\n  }\n\n  div.mermaidTooltip {\n    position: absolute;\n    text-align: center;\n    max-width: 200px;\n    padding: 2px;\n    font-family: 'trebuchet ms', verdana, arial, sans-serif;\n    font-family: var(--mermaid-font-family);\n    font-size: 12px;\n    background: ${options.tertiaryColor};\n    border: 1px solid ${options.border2};\n    border-radius: 2px;\n    pointer-events: none;\n    z-index: 100;\n  }\n\n  .task-type-0, .section-type-0  {\n    ${options.fillType0 ? `fill: ${options.fillType0}` : ''};\n  }\n  .task-type-1, .section-type-1  {\n    ${options.fillType0 ? `fill: ${options.fillType1}` : ''};\n  }\n  .task-type-2, .section-type-2  {\n    ${options.fillType0 ? `fill: ${options.fillType2}` : ''};\n  }\n  .task-type-3, .section-type-3  {\n    ${options.fillType0 ? `fill: ${options.fillType3}` : ''};\n  }\n  .task-type-4, .section-type-4  {\n    ${options.fillType0 ? `fill: ${options.fillType4}` : ''};\n  }\n  .task-type-5, .section-type-5  {\n    ${options.fillType0 ? `fill: ${options.fillType5}` : ''};\n  }\n  .task-type-6, .section-type-6  {\n    ${options.fillType0 ? `fill: ${options.fillType6}` : ''};\n  }\n  .task-type-7, .section-type-7  {\n    ${options.fillType0 ? `fill: ${options.fillType7}` : ''};\n  }\n\n  .actor-0 {\n    ${options.actor0 ? `fill: ${options.actor0}` : ''};\n  }\n  .actor-1 {\n    ${options.actor1 ? `fill: ${options.actor1}` : ''};\n  }\n  .actor-2 {\n    ${options.actor2 ? `fill: ${options.actor2}` : ''};\n  }\n  .actor-3 {\n    ${options.actor3 ? `fill: ${options.actor3}` : ''};\n  }\n  .actor-4 {\n    ${options.actor4 ? `fill: ${options.actor4}` : ''};\n  }\n  .actor-5 {\n    ${options.actor5 ? `fill: ${options.actor5}` : ''};\n  }\n\n  }\n`;\n\nexport default getStyles;\n","import { arc as d3arc } from 'd3';\n\nexport const drawRect = function (elem, rectData) {\n  const rectElem = elem.append('rect');\n  rectElem.attr('x', rectData.x);\n  rectElem.attr('y', rectData.y);\n  rectElem.attr('fill', rectData.fill);\n  rectElem.attr('stroke', rectData.stroke);\n  rectElem.attr('width', rectData.width);\n  rectElem.attr('height', rectData.height);\n  rectElem.attr('rx', rectData.rx);\n  rectElem.attr('ry', rectData.ry);\n\n  if (typeof rectData.class !== 'undefined') {\n    rectElem.attr('class', rectData.class);\n  }\n\n  return rectElem;\n};\n\nexport const drawFace = function (element, faceData) {\n  const radius = 15;\n  const circleElement = element\n    .append('circle')\n    .attr('cx', faceData.cx)\n    .attr('cy', faceData.cy)\n    .attr('class', 'face')\n    .attr('r', radius)\n    .attr('stroke-width', 2)\n    .attr('overflow', 'visible');\n\n  const face = element.append('g');\n\n  //left eye\n  face\n    .append('circle')\n    .attr('cx', faceData.cx - radius / 3)\n    .attr('cy', faceData.cy - radius / 3)\n    .attr('r', 1.5)\n    .attr('stroke-width', 2)\n    .attr('fill', '#666')\n    .attr('stroke', '#666');\n\n  //right eye\n  face\n    .append('circle')\n    .attr('cx', faceData.cx + radius / 3)\n    .attr('cy', faceData.cy - radius / 3)\n    .attr('r', 1.5)\n    .attr('stroke-width', 2)\n    .attr('fill', '#666')\n    .attr('stroke', '#666');\n\n  /** @param {any} face */\n  function smile(face) {\n    const arc = d3arc()\n      .startAngle(Math.PI / 2)\n      .endAngle(3 * (Math.PI / 2))\n      .innerRadius(radius / 2)\n      .outerRadius(radius / 2.2);\n    //mouth\n    face\n      .append('path')\n      .attr('class', 'mouth')\n      .attr('d', arc)\n      .attr('transform', 'translate(' + faceData.cx + ',' + (faceData.cy + 2) + ')');\n  }\n\n  /** @param {any} face */\n  function sad(face) {\n    const arc = d3arc()\n      .startAngle((3 * Math.PI) / 2)\n      .endAngle(5 * (Math.PI / 2))\n      .innerRadius(radius / 2)\n      .outerRadius(radius / 2.2);\n    //mouth\n    face\n      .append('path')\n      .attr('class', 'mouth')\n      .attr('d', arc)\n      .attr('transform', 'translate(' + faceData.cx + ',' + (faceData.cy + 7) + ')');\n  }\n\n  /** @param {any} face */\n  function ambivalent(face) {\n    face\n      .append('line')\n      .attr('class', 'mouth')\n      .attr('stroke', 2)\n      .attr('x1', faceData.cx - 5)\n      .attr('y1', faceData.cy + 7)\n      .attr('x2', faceData.cx + 5)\n      .attr('y2', faceData.cy + 7)\n      .attr('class', 'mouth')\n      .attr('stroke-width', '1px')\n      .attr('stroke', '#666');\n  }\n\n  if (faceData.score > 3) {\n    smile(face);\n  } else if (faceData.score < 3) {\n    sad(face);\n  } else {\n    ambivalent(face);\n  }\n\n  return circleElement;\n};\n\nexport const drawCircle = function (element, circleData) {\n  const circleElement = element.append('circle');\n  circleElement.attr('cx', circleData.cx);\n  circleElement.attr('cy', circleData.cy);\n  circleElement.attr('class', 'actor-' + circleData.pos);\n  circleElement.attr('fill', circleData.fill);\n  circleElement.attr('stroke', circleData.stroke);\n  circleElement.attr('r', circleData.r);\n\n  if (typeof circleElement.class !== 'undefined') {\n    circleElement.attr('class', circleElement.class);\n  }\n\n  if (typeof circleData.title !== 'undefined') {\n    circleElement.append('title').text(circleData.title);\n  }\n\n  return circleElement;\n};\n\nexport const drawText = function (elem, textData) {\n  // Remove and ignore br:s\n  const nText = textData.text.replace(/<br\\s*\\/?>/gi, ' ');\n\n  const textElem = elem.append('text');\n  textElem.attr('x', textData.x);\n  textElem.attr('y', textData.y);\n  textElem.attr('class', 'legend');\n\n  textElem.style('text-anchor', textData.anchor);\n\n  if (typeof textData.class !== 'undefined') {\n    textElem.attr('class', textData.class);\n  }\n\n  const span = textElem.append('tspan');\n  span.attr('x', textData.x + textData.textMargin * 2);\n  span.text(nText);\n\n  return textElem;\n};\n\nexport const drawLabel = function (elem, txtObject) {\n  /**\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} cut\n   */\n  function genPoints(x, y, width, height, cut) {\n    return (\n      x +\n      ',' +\n      y +\n      ' ' +\n      (x + width) +\n      ',' +\n      y +\n      ' ' +\n      (x + width) +\n      ',' +\n      (y + height - cut) +\n      ' ' +\n      (x + width - cut * 1.2) +\n      ',' +\n      (y + height) +\n      ' ' +\n      x +\n      ',' +\n      (y + height)\n    );\n  }\n  const polygon = elem.append('polygon');\n  polygon.attr('points', genPoints(txtObject.x, txtObject.y, 50, 20, 7));\n  polygon.attr('class', 'labelBox');\n\n  txtObject.y = txtObject.y + txtObject.labelMargin;\n  txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin;\n  drawText(elem, txtObject);\n};\n\nexport const drawSection = function (elem, section, conf) {\n  const g = elem.append('g');\n\n  const rect = getNoteRect();\n  rect.x = section.x;\n  rect.y = section.y;\n  rect.fill = section.fill;\n  rect.width = conf.width;\n  rect.height = conf.height;\n  rect.class = 'journey-section section-type-' + section.num;\n  rect.rx = 3;\n  rect.ry = 3;\n  drawRect(g, rect);\n\n  _drawTextCandidateFunc(conf)(\n    section.text,\n    g,\n    rect.x,\n    rect.y,\n    rect.width,\n    rect.height,\n    { class: 'journey-section section-type-' + section.num },\n    conf,\n    section.colour\n  );\n};\n\nlet taskCount = -1;\n/**\n * Draws an actor in the diagram with the attaced line\n *\n * @param {any} elem The HTML element\n * @param {any} task The task to render\n * @param {any} conf The global configuration\n */\nexport const drawTask = function (elem, task, conf) {\n  const center = task.x + conf.width / 2;\n  const g = elem.append('g');\n  taskCount++;\n  const maxHeight = 300 + 5 * 30;\n  g.append('line')\n    .attr('id', 'task' + taskCount)\n    .attr('x1', center)\n    .attr('y1', task.y)\n    .attr('x2', center)\n    .attr('y2', maxHeight)\n    .attr('class', 'task-line')\n    .attr('stroke-width', '1px')\n    .attr('stroke-dasharray', '4 2')\n    .attr('stroke', '#666');\n\n  drawFace(g, {\n    cx: center,\n    cy: 300 + (5 - task.score) * 30,\n    score: task.score,\n  });\n\n  const rect = getNoteRect();\n  rect.x = task.x;\n  rect.y = task.y;\n  rect.fill = task.fill;\n  rect.width = conf.width;\n  rect.height = conf.height;\n  rect.class = 'task task-type-' + task.num;\n  rect.rx = 3;\n  rect.ry = 3;\n  drawRect(g, rect);\n\n  let xPos = task.x + 14;\n  task.people.forEach((person) => {\n    const colour = task.actors[person].color;\n\n    const circle = {\n      cx: xPos,\n      cy: task.y,\n      r: 7,\n      fill: colour,\n      stroke: '#000',\n      title: person,\n      pos: task.actors[person].position,\n    };\n\n    drawCircle(g, circle);\n    xPos += 10;\n  });\n\n  _drawTextCandidateFunc(conf)(\n    task.task,\n    g,\n    rect.x,\n    rect.y,\n    rect.width,\n    rect.height,\n    { class: 'task' },\n    conf,\n    task.colour\n  );\n};\n\n/**\n * Draws a background rectangle\n *\n * @param {any} elem The html element\n * @param {any} bounds The bounds of the drawing\n */\nexport const drawBackgroundRect = function (elem, bounds) {\n  const rectElem = drawRect(elem, {\n    x: bounds.startx,\n    y: bounds.starty,\n    width: bounds.stopx - bounds.startx,\n    height: bounds.stopy - bounds.starty,\n    fill: bounds.fill,\n    class: 'rect',\n  });\n  rectElem.lower();\n};\n\nexport const getTextObj = function () {\n  return {\n    x: 0,\n    y: 0,\n    fill: undefined,\n    'text-anchor': 'start',\n    width: 100,\n    height: 100,\n    textMargin: 0,\n    rx: 0,\n    ry: 0,\n  };\n};\n\nexport const getNoteRect = function () {\n  return {\n    x: 0,\n    y: 0,\n    width: 100,\n    anchor: 'start',\n    height: 100,\n    rx: 0,\n    ry: 0,\n  };\n};\n\nconst _drawTextCandidateFunc = (function () {\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   * @param {any} colour\n   */\n  function byText(content, g, x, y, width, height, textAttrs, colour) {\n    const text = g\n      .append('text')\n      .attr('x', x + width / 2)\n      .attr('y', y + height / 2 + 5)\n      .style('font-color', colour)\n      .style('text-anchor', 'middle')\n      .text(content);\n    _setTextAttrs(text, textAttrs);\n  }\n\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   * @param {any} conf\n   * @param {any} colour\n   */\n  function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) {\n    const { taskFontSize, taskFontFamily } = conf;\n\n    const lines = content.split(/<br\\s*\\/?>/gi);\n    for (let i = 0; i < lines.length; i++) {\n      const dy = i * taskFontSize - (taskFontSize * (lines.length - 1)) / 2;\n      const text = g\n        .append('text')\n        .attr('x', x + width / 2)\n        .attr('y', y)\n        .attr('fill', colour)\n        .style('text-anchor', 'middle')\n        .style('font-size', taskFontSize)\n        .style('font-family', taskFontFamily);\n      text\n        .append('tspan')\n        .attr('x', x + width / 2)\n        .attr('dy', dy)\n        .text(lines[i]);\n\n      text\n        .attr('y', y + height / 2.0)\n        .attr('dominant-baseline', 'central')\n        .attr('alignment-baseline', 'central');\n\n      _setTextAttrs(text, textAttrs);\n    }\n  }\n\n  /**\n   * @param {any} content\n   * @param {any} g\n   * @param {any} x\n   * @param {any} y\n   * @param {any} width\n   * @param {any} height\n   * @param {any} textAttrs\n   * @param {any} conf\n   */\n  function byFo(content, g, x, y, width, height, textAttrs, conf) {\n    const body = g.append('switch');\n    const f = body\n      .append('foreignObject')\n      .attr('x', x)\n      .attr('y', y)\n      .attr('width', width)\n      .attr('height', height)\n      .attr('position', 'fixed');\n\n    const text = f\n      .append('xhtml:div')\n      .style('display', 'table')\n      .style('height', '100%')\n      .style('width', '100%');\n\n    text\n      .append('div')\n      .attr('class', 'label')\n      .style('display', 'table-cell')\n      .style('text-align', 'center')\n      .style('vertical-align', 'middle')\n      .text(content);\n\n    byTspan(content, body, x, y, width, height, textAttrs, conf);\n    _setTextAttrs(text, textAttrs);\n  }\n\n  /**\n   * @param {any} toText\n   * @param {any} fromTextAttrsDict\n   */\n  function _setTextAttrs(toText, fromTextAttrsDict) {\n    for (const key in fromTextAttrsDict) {\n      if (key in fromTextAttrsDict) {\n        // eslint-disable-line\n        // noinspection JSUnfilteredForInLoop\n        toText.attr(key, fromTextAttrsDict[key]);\n      }\n    }\n  }\n\n  return function (conf) {\n    return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n  };\n})();\n\nconst initGraphics = function (graphics) {\n  graphics\n    .append('defs')\n    .append('marker')\n    .attr('id', 'arrowhead')\n    .attr('refX', 5)\n    .attr('refY', 2)\n    .attr('markerWidth', 6)\n    .attr('markerHeight', 4)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('d', 'M 0,0 V 4 L6,2 Z'); // this is actual shape for arrowhead\n};\n\nexport default {\n  drawRect,\n  drawCircle,\n  drawSection,\n  drawText,\n  drawLabel,\n  drawTask,\n  drawBackgroundRect,\n  getTextObj,\n  getNoteRect,\n  initGraphics,\n};\n","/** Created by knut on 14-12-11. */\nimport { select } from 'd3';\nimport { log } from './logger';\n\nconst conf = {};\n\n/**\n * Merges the value of `conf` with the passed `cnf`\n *\n * @param {object} cnf Config to merge\n */\nexport const setConf = function (cnf) {\n  const keys = Object.keys(cnf);\n\n  keys.forEach(function (key) {\n    conf[key] = cnf[key];\n  });\n};\n\n/**\n * Draws a an info picture in the tag with id: id based on the graph definition in text.\n *\n * @param {string} id The text for the error\n * @param {string} ver The version\n */\nexport const draw = (id, ver) => {\n  try {\n    log.debug('Renering svg for syntax error\\n');\n\n    const svg = select('#' + id);\n\n    const g = svg.append('g');\n\n    g.append('path')\n      .attr('class', 'error-icon')\n      .attr(\n        'd',\n        'm411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z'\n      );\n\n    g.append('path')\n      .attr('class', 'error-icon')\n      .attr(\n        'd',\n        'm459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z'\n      );\n\n    g.append('path')\n      .attr('class', 'error-icon')\n      .attr(\n        'd',\n        'm340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z'\n      );\n\n    g.append('path')\n      .attr('class', 'error-icon')\n      .attr(\n        'd',\n        'm400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z'\n      );\n\n    g.append('path')\n      .attr('class', 'error-icon')\n      .attr(\n        'd',\n        'm496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z'\n      );\n\n    g.append('path')\n      .attr('class', 'error-icon')\n      .attr(\n        'd',\n        'm436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z'\n      );\n\n    g.append('text') // text label for the x axis\n      .attr('class', 'error-text')\n      .attr('x', 1240)\n      .attr('y', 250)\n      .attr('font-size', '150px')\n      .style('text-anchor', 'middle')\n      .text('Syntax error in graph');\n    g.append('text') // text label for the x axis\n      .attr('class', 'error-text')\n      .attr('x', 1050)\n      .attr('y', 400)\n      .attr('font-size', '100px')\n      .style('text-anchor', 'middle')\n      .text('mermaid version ' + ver);\n\n    svg.attr('height', 100);\n    svg.attr('width', 400);\n    svg.attr('viewBox', '768 0 512 512');\n  } catch (e) {\n    log.error('Error while rendering info diagram');\n    log.error(e.message);\n  }\n};\n\nexport default {\n  setConf,\n  draw,\n};\n","let interactionFunctions = [];\nexport const addFunction = (func) => {\n  interactionFunctions.push(func);\n};\nexport const attachFunctions = () => {\n  interactionFunctions.forEach((f) => {\n    f();\n  });\n  interactionFunctions = [];\n};\n","import moment from 'moment-mini';\n\n/** @typedef {'debug' | 'info' | 'warn' | 'error' | 'fatal'} LogLevel A log level */\n\n/** @type {Object<LogLevel, number>} */\nexport const LEVELS = {\n  debug: 1,\n  info: 2,\n  warn: 3,\n  error: 4,\n  fatal: 5,\n};\n\nexport const log = {\n  debug: () => {},\n  info: () => {},\n  warn: () => {},\n  error: () => {},\n  fatal: () => {},\n};\n\n/**\n * Sets a log level\n *\n * @param {LogLevel} [level=\"fatal\"] The level to set the logging to. Default is `\"fatal\"`\n */\nexport const setLogLevel = function (level = 'fatal') {\n  if (isNaN(level)) {\n    level = level.toLowerCase();\n    if (LEVELS[level] !== undefined) {\n      level = LEVELS[level];\n    }\n  }\n  log.trace = () => {};\n  log.debug = () => {};\n  log.info = () => {};\n  log.warn = () => {};\n  log.error = () => {};\n  log.fatal = () => {};\n  if (level <= LEVELS.fatal) {\n    log.fatal = console.error\n      ? console.error.bind(console, format('FATAL'), 'color: orange')\n      : console.log.bind(console, '\\x1b[35m', format('FATAL'));\n  }\n  if (level <= LEVELS.error) {\n    log.error = console.error\n      ? console.error.bind(console, format('ERROR'), 'color: orange')\n      : console.log.bind(console, '\\x1b[31m', format('ERROR'));\n  }\n  if (level <= LEVELS.warn) {\n    log.warn = console.warn\n      ? console.warn.bind(console, format('WARN'), 'color: orange')\n      : console.log.bind(console, `\\x1b[33m`, format('WARN'));\n  }\n  if (level <= LEVELS.info) {\n    log.info = console.info // ? console.info.bind(console, '\\x1b[34m', format('INFO'), 'color: blue')\n      ? console.info.bind(console, format('INFO'), 'color: lightblue')\n      : console.log.bind(console, '\\x1b[34m', format('INFO'));\n  }\n  if (level <= LEVELS.debug) {\n    log.debug = console.debug\n      ? console.debug.bind(console, format('DEBUG'), 'color: lightgreen')\n      : console.log.bind(console, '\\x1b[32m', format('DEBUG'));\n  }\n};\n\n/**\n * Returns a format with the timestamp and the log level\n *\n * @param {LogLevel} level The level for the log format\n * @returns {string} The format with the timestamp and log level\n */\nconst format = (level) => {\n  const time = moment().format('ss.SSS');\n  return `%c${time} : ${level} : `;\n};\n","/**\n * Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid\n * functionality and to render the diagrams to svg code.\n */\nimport { log } from './logger';\nimport mermaidAPI from './mermaidAPI';\nimport utils from './utils';\n\n/**\n * ## init\n *\n * Function that goes through the document to find the chart definitions in there and render them.\n *\n * The function tags the processed attributes with the attribute data-processed and ignores found\n * elements with the attribute already set. This way the init function can be triggered several times.\n *\n * Optionally, `init` can accept in the second argument one of the following:\n *\n * - A DOM Node\n * - An array of DOM nodes (as would come from a jQuery selector)\n * - A W3C selector, a la `.mermaid`\n *\n * ```mermaid\n * graph LR;\n *  a(Find elements)-->b{Processed}\n *  b-->|Yes|c(Leave element)\n *  b-->|No |d(Transform)\n * ```\n *\n * Renders the mermaid diagrams\n */\nconst init = function () {\n  try {\n    initThrowsErrors(...arguments);\n  } catch (e) {\n    log.warn('Syntax Error rendering');\n    log.warn(e);\n    if (this.parseError) {\n      this.parseError(e);\n    }\n  }\n};\n\nconst initThrowsErrors = function () {\n  const conf = mermaidAPI.getConfig();\n  // console.log('Starting rendering diagrams (init) - mermaid.init', conf);\n  let nodes;\n  if (arguments.length >= 2) {\n    /*! sequence config was passed as #1 */\n    if (typeof arguments[0] !== 'undefined') {\n      mermaid.sequenceConfig = arguments[0];\n    }\n\n    nodes = arguments[1];\n  } else {\n    nodes = arguments[0];\n  }\n\n  // if last argument is a function this is the callback function\n  let callback;\n  if (typeof arguments[arguments.length - 1] === 'function') {\n    callback = arguments[arguments.length - 1];\n    log.debug('Callback function found');\n  } else {\n    if (typeof conf.mermaid !== 'undefined') {\n      if (typeof conf.mermaid.callback === 'function') {\n        callback = conf.mermaid.callback;\n        log.debug('Callback function found');\n      } else {\n        log.debug('No Callback function found');\n      }\n    }\n  }\n  nodes =\n    nodes === undefined\n      ? document.querySelectorAll('.mermaid')\n      : typeof nodes === 'string'\n      ? document.querySelectorAll(nodes)\n      : nodes instanceof window.Node\n      ? [nodes]\n      : nodes; // Last case  - sequence config was passed pick next\n\n  log.debug('Start On Load before: ' + mermaid.startOnLoad);\n  if (typeof mermaid.startOnLoad !== 'undefined') {\n    log.debug('Start On Load inner: ' + mermaid.startOnLoad);\n    mermaidAPI.updateSiteConfig({ startOnLoad: mermaid.startOnLoad });\n  }\n\n  if (typeof mermaid.ganttConfig !== 'undefined') {\n    mermaidAPI.updateSiteConfig({ gantt: mermaid.ganttConfig });\n  }\n\n  const idGenerator = new utils.initIdGenerator(conf.deterministicIds, conf.deterministicIDSeed);\n\n  let txt;\n\n  for (let i = 0; i < nodes.length; i++) {\n    // element is the current div with mermaid class\n    const element = nodes[i];\n\n    /*! Check if previously processed */\n    if (!element.getAttribute('data-processed')) {\n      element.setAttribute('data-processed', true);\n    } else {\n      continue;\n    }\n\n    const id = `mermaid-${idGenerator.next()}`;\n\n    // Fetch the graph definition including tags\n    txt = element.innerHTML;\n\n    // transforms the html to pure text\n    txt = utils\n      .entityDecode(txt)\n      .trim()\n      .replace(/<br\\s*\\/?>/gi, '<br/>');\n\n    const init = utils.detectInit(txt);\n    if (init) {\n      log.debug('Detected early reinit: ', init);\n    }\n\n    mermaidAPI.render(\n      id,\n      txt,\n      (svgCode, bindFunctions) => {\n        element.innerHTML = svgCode;\n        if (typeof callback !== 'undefined') {\n          callback(id);\n        }\n        if (bindFunctions) bindFunctions(element);\n      },\n      element\n    );\n  }\n};\n\nconst initialize = function (config) {\n  // mermaidAPI.reset();\n  if (typeof config.mermaid !== 'undefined') {\n    if (typeof config.mermaid.startOnLoad !== 'undefined') {\n      mermaid.startOnLoad = config.mermaid.startOnLoad;\n    }\n    if (typeof config.mermaid.htmlLabels !== 'undefined') {\n      mermaid.htmlLabels =\n        config.mermaid.htmlLabels === 'false' || config.mermaid.htmlLabels === false ? false : true;\n    }\n  }\n  mermaidAPI.initialize(config);\n  // mermaidAPI.reset();\n};\n\n/**\n * ##contentLoaded Callback function that is called when page is loaded. This functions fetches\n * configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the page.\n */\nconst contentLoaded = function () {\n  let config;\n\n  if (mermaid.startOnLoad) {\n    // No config found, do check API config\n    config = mermaidAPI.getConfig();\n    if (config.startOnLoad) {\n      mermaid.init();\n    }\n  } else {\n    if (typeof mermaid.startOnLoad === 'undefined') {\n      log.debug('In start, no config');\n      config = mermaidAPI.getConfig();\n      if (config.startOnLoad) {\n        mermaid.init();\n      }\n    }\n  }\n};\n\nif (typeof document !== 'undefined') {\n  /*!\n   * Wait for document loaded before starting the execution\n   */\n  window.addEventListener(\n    'load',\n    function () {\n      contentLoaded();\n    },\n    false\n  );\n}\n\n/**\n * ## setParseErrorHandler  Alternative to directly setting parseError using:\n *\n * ```js\n * mermaid.parseError = function(err,hash){=\n *   forExampleDisplayErrorInGui(err);  // do something with the error\n * };\n * ```\n *\n * This is provided for environments where the mermaid object can't directly have a new member added\n * to it (eg. dart interop wrapper). (Initially there is no parseError member of mermaid).\n *\n * @param {function (err, hash)} newParseErrorHandler New parseError() callback.\n */\nconst setParseErrorHandler = function (newParseErrorHandler) {\n  mermaid.parseError = newParseErrorHandler;\n};\n\nconst mermaid = {\n  startOnLoad: true,\n  htmlLabels: true,\n\n  mermaidAPI,\n  parse: mermaidAPI != undefined ? mermaidAPI.parse : null,\n  render: mermaidAPI != undefined ? mermaidAPI.render : null,\n\n  init,\n  initThrowsErrors,\n  initialize,\n\n  contentLoaded,\n\n  setParseErrorHandler,\n};\n\nexport default mermaid;\n","/**\n * Edit this\n * Page[[N|Solid](img/GitHub-Mark-32px.png)](https://github.com/mermaid-js/mermaid/blob/develop/src/mermaidAPI.js)\n *\n * This is the API to be used when optionally handling the integration with the web page, instead of\n * using the default integration provided by mermaid.js.\n *\n * The core of this api is the [**render**](Setup.md?id=render) function which, given a graph\n * definition as text, renders the graph/diagram and returns an svg element for the graph.\n *\n * It is is then up to the user of the API to make use of the svg, either insert it somewhere in the\n * page or do something completely different.\n *\n * In addition to the render function, a number of behavioral configuration options are available.\n *\n * @name mermaidAPI\n */\nimport { select } from 'd3';\nimport { compile, serialize, stringify } from 'stylis';\nimport pkg from '../package.json';\nimport * as configApi from './config';\nimport c4Db from './diagrams/c4/c4Db';\nimport c4Renderer from './diagrams/c4/c4Renderer';\nimport c4Parser from './diagrams/c4/parser/c4Diagram';\nimport classDb from './diagrams/class/classDb';\nimport classRenderer from './diagrams/class/classRenderer';\nimport classRendererV2 from './diagrams/class/classRenderer-v2';\nimport classParser from './diagrams/class/parser/classDiagram';\nimport erDb from './diagrams/er/erDb';\nimport erRenderer from './diagrams/er/erRenderer';\nimport erParser from './diagrams/er/parser/erDiagram';\nimport flowDb from './diagrams/flowchart/flowDb';\nimport flowRenderer from './diagrams/flowchart/flowRenderer';\nimport flowRendererV2 from './diagrams/flowchart/flowRenderer-v2';\nimport flowParser from './diagrams/flowchart/parser/flow';\nimport ganttDb from './diagrams/gantt/ganttDb';\nimport ganttRenderer from './diagrams/gantt/ganttRenderer';\nimport ganttParser from './diagrams/gantt/parser/gantt';\nimport gitGraphAst from './diagrams/git/gitGraphAst';\nimport gitGraphRenderer from './diagrams/git/gitGraphRenderer';\nimport gitGraphParser from './diagrams/git/parser/gitGraph';\nimport infoDb from './diagrams/info/infoDb';\nimport infoRenderer from './diagrams/info/infoRenderer';\nimport infoParser from './diagrams/info/parser/info';\nimport pieParser from './diagrams/pie/parser/pie';\nimport pieDb from './diagrams/pie/pieDb';\nimport pieRenderer from './diagrams/pie/pieRenderer';\nimport addSVGAccessibilityFields from './diagrams/pie/pieRenderer';\nimport requirementParser from './diagrams/requirement/parser/requirementDiagram';\nimport requirementDb from './diagrams/requirement/requirementDb';\nimport requirementRenderer from './diagrams/requirement/requirementRenderer';\nimport sequenceParser from './diagrams/sequence/parser/sequenceDiagram';\nimport sequenceDb from './diagrams/sequence/sequenceDb';\nimport sequenceRenderer from './diagrams/sequence/sequenceRenderer';\nimport stateParser from './diagrams/state/parser/stateDiagram';\nimport stateDb from './diagrams/state/stateDb';\nimport stateRenderer from './diagrams/state/stateRenderer';\nimport stateRendererV2 from './diagrams/state/stateRenderer-v2';\nimport journeyDb from './diagrams/user-journey/journeyDb';\nimport journeyRenderer from './diagrams/user-journey/journeyRenderer';\nimport journeyParser from './diagrams/user-journey/parser/journey';\nimport errorRenderer from './errorRenderer';\nimport { attachFunctions } from './interactionDb';\nimport { log, setLogLevel } from './logger';\nimport getStyles from './styles';\nimport theme from './themes';\nimport utils, { directiveSanitizer, assignWithDepth, sanitizeCss } from './utils';\nimport DOMPurify from 'dompurify';\nimport mermaid from './mermaid';\n\n/**\n * @param text\n * @returns {any}\n */\nfunction parse(text) {\n  var parseEncounteredException = false;\n  try {\n    text = text + '\\n';\n    const cnf = configApi.getConfig();\n    const graphInit = utils.detectInit(text, cnf);\n    if (graphInit) {\n      reinitialize(graphInit);\n      log.info('reinit ', graphInit);\n    }\n    const graphType = utils.detectType(text, cnf);\n    let parser;\n\n    log.debug('Type ' + graphType);\n    switch (graphType) {\n      case 'c4':\n        c4Db.clear();\n        parser = c4Parser;\n        parser.parser.yy = c4Db;\n        break;\n      case 'gitGraph':\n        gitGraphAst.clear();\n        parser = gitGraphParser;\n        parser.parser.yy = gitGraphAst;\n        break;\n      case 'flowchart':\n        flowDb.clear();\n        parser = flowParser;\n        parser.parser.yy = flowDb;\n        break;\n      case 'flowchart-v2':\n        flowDb.clear();\n        parser = flowParser;\n        parser.parser.yy = flowDb;\n        break;\n      case 'sequence':\n        sequenceDb.clear();\n        parser = sequenceParser;\n        parser.parser.yy = sequenceDb;\n        break;\n      case 'gantt':\n        parser = ganttParser;\n        parser.parser.yy = ganttDb;\n        break;\n      case 'class':\n        parser = classParser;\n        parser.parser.yy = classDb;\n        break;\n      case 'classDiagram':\n        parser = classParser;\n        parser.parser.yy = classDb;\n        break;\n      case 'state':\n        parser = stateParser;\n        parser.parser.yy = stateDb;\n        break;\n      case 'stateDiagram':\n        parser = stateParser;\n        parser.parser.yy = stateDb;\n        break;\n      case 'info':\n        log.debug('info info info');\n        parser = infoParser;\n        parser.parser.yy = infoDb;\n        break;\n      case 'pie':\n        log.debug('pie');\n        parser = pieParser;\n        parser.parser.yy = pieDb;\n        break;\n      case 'er':\n        log.debug('er');\n        parser = erParser;\n        parser.parser.yy = erDb;\n        break;\n      case 'journey':\n        log.debug('Journey');\n        parser = journeyParser;\n        parser.parser.yy = journeyDb;\n        break;\n      case 'requirement':\n      case 'requirementDiagram':\n        log.debug('RequirementDiagram');\n        parser = requirementParser;\n        parser.parser.yy = requirementDb;\n        break;\n    }\n    parser.parser.yy.graphType = graphType;\n    parser.parser.yy.parseError = (str, hash) => {\n      const error = { str, hash };\n      throw error;\n    };\n\n    parser.parse(text);\n  } catch (error) {\n    parseEncounteredException = true;\n    // Is this the correct way to access mermiad's parseError()\n    // method ? (or global.mermaid.parseError()) ?\n    if (mermaid.parseError) {\n      if (error.str != undefined) {\n        // handle case where error string and hash were\n        // wrapped in object like`const error = { str, hash };`\n        mermaid.parseError(error.str, error.hash);\n      } else {\n        // assume it is just error string and pass it on\n        mermaid.parseError(error);\n      }\n    } else {\n      // No mermaid.parseError() handler defined, so re-throw it\n      throw error;\n    }\n  }\n  return !parseEncounteredException;\n}\n\nexport const encodeEntities = function (text) {\n  let txt = text;\n\n  txt = txt.replace(/style.*:\\S*#.*;/g, function (s) {\n    const innerTxt = s.substring(0, s.length - 1);\n    return innerTxt;\n  });\n  txt = txt.replace(/classDef.*:\\S*#.*;/g, function (s) {\n    const innerTxt = s.substring(0, s.length - 1);\n    return innerTxt;\n  });\n\n  txt = txt.replace(/#\\w+;/g, function (s) {\n    const innerTxt = s.substring(1, s.length - 1);\n\n    const isInt = /^\\+?\\d+$/.test(innerTxt);\n    if (isInt) {\n      return 'fl°°' + innerTxt + '¶ß';\n    } else {\n      return 'fl°' + innerTxt + '¶ß';\n    }\n  });\n\n  return txt;\n};\n\nexport const decodeEntities = function (text) {\n  let txt = text;\n\n  txt = txt.replace(/fl°°/g, function () {\n    return '&#';\n  });\n  txt = txt.replace(/fl°/g, function () {\n    return '&';\n  });\n  txt = txt.replace(/¶ß/g, function () {\n    return ';';\n  });\n\n  return txt;\n};\n/**\n * Function that renders an svg with a graph from a chart definition. Usage example below.\n *\n * ```javascript\n * mermaidAPI.initialize({\n *   startOnLoad: true,\n * });\n * $(function () {\n *   const graphDefinition = 'graph TB\\na-->b';\n *   const cb = function (svgGraph) {\n *     console.log(svgGraph);\n *   };\n *   mermaidAPI.render('id1', graphDefinition, cb);\n * });\n * ```\n *\n * @param {any} id The id of the element to be rendered\n * @param {any} _txt The graph definition\n * @param {any} cb Callback which is called after rendering is finished with the svg code as inparam.\n * @param {any} container Selector to element in which a div with the graph temporarily will be\n *   inserted. In one is provided a hidden div will be inserted in the body of the page instead. The\n *   element will be removed when rendering is completed.\n * @returns {any}\n */\nconst render = function (id, _txt, cb, container) {\n  configApi.reset();\n  let txt = _txt.replace(/\\r\\n?/g, '\\n'); // parser problems on CRLF ignore all CR and leave LF;;\n  const graphInit = utils.detectInit(txt);\n  if (graphInit) {\n    directiveSanitizer(graphInit);\n    configApi.addDirective(graphInit);\n  }\n  let cnf = configApi.getConfig();\n\n  log.debug(cnf);\n\n  // Check the maximum allowed text size\n  if (_txt.length > cnf.maxTextSize) {\n    txt = 'graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa';\n  }\n\n  // let d3Iframe;\n  let root = select('body');\n\n  // In regular execution the container will be the div with a mermaid class\n  if (typeof container !== 'undefined') {\n    if (cnf.securityLevel === 'sandbox') {\n      // IF we are in sandboxed mode, we do everyting mermaid related\n      // in a sandboxed div\n      const iframe = select('body')\n        .append('iframe')\n        .attr('id', 'i' + id)\n        .attr('style', 'width: 100%; height: 100%;')\n        .attr('sandbox', '');\n      // const iframeBody = ;\n      root = select(iframe.nodes()[0].contentDocument.body);\n      root.node().style.margin = 0;\n    }\n\n    // A container was provided by the caller\n    container.innerHTML = '';\n\n    if (cnf.securityLevel === 'sandbox') {\n      // IF we are in sandboxed mode, we do everyting mermaid related\n      // in a sandboxed div\n      const iframe = select(container)\n        .append('iframe')\n        .attr('id', 'i' + id)\n        .attr('style', 'width: 100%; height: 100%;')\n        .attr('sandbox', '');\n      // const iframeBody = ;\n      root = select(iframe.nodes()[0].contentDocument.body);\n      root.node().style.margin = 0;\n    } else {\n      root = select(container);\n    }\n\n    root\n      .append('div')\n      .attr('id', 'd' + id)\n      .attr('style', 'font-family: ' + cnf.fontFamily)\n      .append('svg')\n      .attr('id', id)\n      .attr('width', '100%')\n      .attr('xmlns', 'http://www.w3.org/2000/svg')\n      .append('g');\n  } else {\n    // No container was provided\n    // If there is an existsing element with the id, we remove it\n    // this likely a previously rendered diagram\n    const existingSvg = document.getElementById(id);\n    if (existingSvg) {\n      existingSvg.remove();\n    }\n\n    // Remove previous tpm element if it exists\n    let element;\n    if (cnf.securityLevel !== 'sandbox') {\n      element = document.querySelector('#' + 'd' + id);\n    } else {\n      element = document.querySelector('#' + 'i' + id);\n    }\n    if (element) {\n      element.remove();\n    }\n\n    // if (cnf.securityLevel === 'sandbox') {\n    //   const iframe = select('body')\n    //     .append('iframe')\n    //     .attr('id', 'i' + id)\n    //     .attr('sandbox', '');\n    //   // const iframeBody = ;\n    //   root = select(iframe.nodes()[0].contentDocument.body);\n    // }\n\n    // Add the tmp div used for rendering with the id `d${id}`\n    // d+id it will contain a svg with the id \"id\"\n\n    if (cnf.securityLevel === 'sandbox') {\n      // IF we are in sandboxed mode, we do everyting mermaid related\n      // in a sandboxed div\n      const iframe = select('body')\n        .append('iframe')\n        .attr('id', 'i' + id)\n        .attr('style', 'width: 100%; height: 100%;')\n        .attr('sandbox', '');\n      // const iframeBody = ;\n      root = select(iframe.nodes()[0].contentDocument.body);\n      root.node().style.margin = 0;\n    } else {\n      root = select('body');\n    }\n\n    // This is the temporary div\n    root\n      .append('div')\n      .attr('id', 'd' + id)\n      // this is the seed of the svg to be rendered\n      .append('svg')\n      .attr('id', id)\n      .attr('width', '100%')\n      .attr('xmlns', 'http://www.w3.org/2000/svg')\n      .append('g');\n  }\n\n  txt = encodeEntities(txt);\n\n  // Get the tmp element containing the the svg\n  const element = root.select('#d' + id).node();\n  const graphType = utils.detectType(txt, cnf);\n\n  // insert inline style into svg\n  const svg = element.firstChild;\n  const firstChild = svg.firstChild;\n\n  let userStyles = '';\n  // user provided theme CSS\n  // If you add more configuration driven data into the user styles make sure that the value is\n  // sanitized bye the santiizeCSS function\n  if (cnf.themeCSS !== undefined) {\n    userStyles += `\\n${cnf.themeCSS}`;\n  }\n  // user provided theme CSS\n  if (cnf.fontFamily !== undefined) {\n    userStyles += `\\n:root { --mermaid-font-family: ${cnf.fontFamily}}`;\n  }\n  // user provided theme CSS\n  if (cnf.altFontFamily !== undefined) {\n    userStyles += `\\n:root { --mermaid-alt-font-family: ${cnf.altFontFamily}}`;\n  }\n\n  // classDef\n  if (graphType === 'flowchart' || graphType === 'flowchart-v2' || graphType === 'graph') {\n    const classes = flowRenderer.getClasses(txt);\n    const htmlLabels = cnf.htmlLabels || cnf.flowchart.htmlLabels;\n    for (const className in classes) {\n      if (htmlLabels) {\n        userStyles += `\\n.${className} > * { ${classes[className].styles.join(\n          ' !important; '\n        )} !important; }`;\n        userStyles += `\\n.${className} span { ${classes[className].styles.join(\n          ' !important; '\n        )} !important; }`;\n      } else {\n        userStyles += `\\n.${className} path { ${classes[className].styles.join(\n          ' !important; '\n        )} !important; }`;\n        userStyles += `\\n.${className} rect { ${classes[className].styles.join(\n          ' !important; '\n        )} !important; }`;\n        userStyles += `\\n.${className} polygon { ${classes[className].styles.join(\n          ' !important; '\n        )} !important; }`;\n        userStyles += `\\n.${className} ellipse { ${classes[className].styles.join(\n          ' !important; '\n        )} !important; }`;\n        userStyles += `\\n.${className} circle { ${classes[className].styles.join(\n          ' !important; '\n        )} !important; }`;\n        if (classes[className].textStyles) {\n          userStyles += `\\n.${className} tspan { ${classes[className].textStyles.join(\n            ' !important; '\n          )} !important; }`;\n        }\n      }\n    }\n  }\n\n  // log.warn(cnf.themeVariables);\n\n  const stylis = (selector, styles) => serialize(compile(`${selector}{${styles}}`), stringify);\n  const rules = stylis(`#${id}`, getStyles(graphType, userStyles, cnf.themeVariables));\n\n  const style1 = document.createElement('style');\n  style1.innerHTML = `#${id} ` + rules;\n  svg.insertBefore(style1, firstChild);\n\n  // Verify that the generated svgs are ok before removing this\n\n  // const style2 = document.createElement('style');\n  // const cs = window.getComputedStyle(svg);\n  // style2.innerHTML = `#d${id} * {\n  //   color: ${cs.color};\n  //   // font: ${cs.font};\n  //   // font-family: Arial;\n  //   // font-size: 24px;\n  // }`;\n  // svg.insertBefore(style2, firstChild);\n\n  try {\n    switch (graphType) {\n      case 'c4':\n        c4Renderer.setConf(cnf.c4);\n        c4Renderer.draw(txt, id);\n        break;\n      case 'gitGraph':\n        // cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n        //gitGraphRenderer.setConf(cnf.git);\n        gitGraphRenderer.draw(txt, id, false);\n        break;\n      case 'flowchart':\n        cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n        flowRenderer.setConf(cnf.flowchart);\n        flowRenderer.draw(txt, id, false);\n        break;\n      case 'flowchart-v2':\n        cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n        flowRendererV2.setConf(cnf.flowchart);\n        flowRendererV2.draw(txt, id, false);\n        break;\n      case 'sequence':\n        cnf.sequence.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n        if (cnf.sequenceDiagram) {\n          // backwards compatibility\n          sequenceRenderer.setConf(Object.assign(cnf.sequence, cnf.sequenceDiagram));\n          console.error(\n            '`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.'\n          );\n        } else {\n          sequenceRenderer.setConf(cnf.sequence);\n        }\n        sequenceRenderer.draw(txt, id);\n        break;\n      case 'gantt':\n        cnf.gantt.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n        ganttRenderer.setConf(cnf.gantt);\n        ganttRenderer.draw(txt, id);\n        break;\n      case 'class':\n        cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n        classRenderer.setConf(cnf.class);\n        classRenderer.draw(txt, id);\n        break;\n      case 'classDiagram':\n        cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n        classRendererV2.setConf(cnf.class);\n        classRendererV2.draw(txt, id);\n        break;\n      case 'state':\n        cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n        stateRenderer.setConf(cnf.state);\n        stateRenderer.draw(txt, id);\n        break;\n      case 'stateDiagram':\n        cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n        stateRendererV2.setConf(cnf.state);\n        stateRendererV2.draw(txt, id);\n        break;\n      case 'info':\n        cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n        infoRenderer.setConf(cnf.class);\n        infoRenderer.draw(txt, id, pkg.version);\n        break;\n      case 'pie':\n        //cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n        //pieRenderer.setConf(cnf.pie);\n        pieRenderer.draw(txt, id, pkg.version);\n        break;\n      case 'er':\n        erRenderer.setConf(cnf.er);\n        erRenderer.draw(txt, id, pkg.version);\n        break;\n      case 'journey':\n        journeyRenderer.setConf(cnf.journey);\n        journeyRenderer.draw(txt, id, pkg.version);\n        break;\n      case 'requirement':\n        requirementRenderer.setConf(cnf.requirement);\n        requirementRenderer.draw(txt, id, pkg.version);\n        break;\n    }\n  } catch (e) {\n    // errorRenderer.setConf(cnf.class);\n    errorRenderer.draw(id, pkg.version);\n    throw e;\n  }\n\n  root\n    .select(`[id=\"${id}\"]`)\n    .selectAll('foreignobject > *')\n    .attr('xmlns', 'http://www.w3.org/1999/xhtml');\n\n  // Fix for when the base tag is used\n  let svgCode = root.select('#d' + id).node().innerHTML;\n\n  log.debug('cnf.arrowMarkerAbsolute', cnf.arrowMarkerAbsolute);\n  if (\n    (!cnf.arrowMarkerAbsolute || cnf.arrowMarkerAbsolute === 'false') &&\n    cnf.arrowMarkerAbsolute !== 'sandbox'\n  ) {\n    svgCode = svgCode.replace(/marker-end=\"url\\(.*?#/g, 'marker-end=\"url(#', 'g');\n  }\n\n  svgCode = decodeEntities(svgCode);\n\n  // Fix for when the br tag is used\n  svgCode = svgCode.replace(/<br>/g, '<br/>');\n\n  if (cnf.securityLevel === 'sandbox') {\n    let svgEl = root.select('#d' + id + ' svg').node();\n    let width = '100%';\n    let height = '100%';\n    if (svgEl) {\n      // width = svgEl.viewBox.baseVal.width + 'px';\n      height = svgEl.viewBox.baseVal.height + 'px';\n    }\n    svgCode = `<iframe style=\"width:${width};height:${height};border:0;margin:0;\" src=\"data:text/html;base64,${btoa(\n      '<body style=\"margin:0\">' + svgCode + '</body>'\n    )}\" sandbox=\"allow-top-navigation-by-user-activation allow-popups\">\n  The “iframe” tag is not supported by your browser.\n</iframe>`;\n  } else {\n    if (cnf.securityLevel !== 'loose') {\n      svgCode = DOMPurify.sanitize(svgCode, {\n        ADD_TAGS: ['foreignobject'],\n        ADD_ATTR: ['dominant-baseline'],\n      });\n    }\n  }\n\n  if (typeof cb !== 'undefined') {\n    switch (graphType) {\n      case 'flowchart':\n      case 'flowchart-v2':\n        cb(svgCode, flowDb.bindFunctions);\n        break;\n      case 'gantt':\n        cb(svgCode, ganttDb.bindFunctions);\n        break;\n      case 'class':\n      case 'classDiagram':\n        cb(svgCode, classDb.bindFunctions);\n        break;\n      default:\n        cb(svgCode);\n    }\n  } else {\n    log.debug('CB = undefined!');\n  }\n  attachFunctions();\n\n  const tmpElementSelector = cnf.securityLevel === 'sandbox' ? '#i' + id : '#d' + id;\n  const node = select(tmpElementSelector).node();\n  if (node !== null && typeof node.remove === 'function') {\n    select(tmpElementSelector).node().remove();\n  }\n\n  return svgCode;\n};\n\nlet currentDirective = {};\n\nconst parseDirective = function (p, statement, context, type) {\n  try {\n    if (statement !== undefined) {\n      statement = statement.trim();\n      switch (context) {\n        case 'open_directive':\n          currentDirective = {};\n          break;\n        case 'type_directive':\n          currentDirective.type = statement.toLowerCase();\n          break;\n        case 'arg_directive':\n          currentDirective.args = JSON.parse(statement);\n          break;\n        case 'close_directive':\n          handleDirective(p, currentDirective, type);\n          currentDirective = null;\n          break;\n      }\n    }\n  } catch (error) {\n    log.error(\n      `Error while rendering sequenceDiagram directive: ${statement} jison context: ${context}`\n    );\n    log.error(error.message);\n  }\n};\n\nconst handleDirective = function (p, directive, type) {\n  log.debug(`Directive type=${directive.type} with args:`, directive.args);\n  switch (directive.type) {\n    case 'init':\n    case 'initialize': {\n      ['config'].forEach((prop) => {\n        if (typeof directive.args[prop] !== 'undefined') {\n          if (type === 'flowchart-v2') {\n            type = 'flowchart';\n          }\n          directive.args[type] = directive.args[prop];\n          delete directive.args[prop];\n        }\n      });\n      log.debug('sanitize in handleDirective', directive.args);\n      directiveSanitizer(directive.args);\n      log.debug('sanitize in handleDirective (done)', directive.args);\n      reinitialize(directive.args);\n      configApi.addDirective(directive.args);\n      break;\n    }\n    case 'wrap':\n    case 'nowrap':\n      if (p && p['setWrap']) {\n        p.setWrap(directive.type === 'wrap');\n      }\n      break;\n    case 'themeCss':\n      log.warn('themeCss encountered');\n      break;\n    default:\n      log.warn(\n        `Unhandled directive: source: '%%{${directive.type}: ${JSON.stringify(\n          directive.args ? directive.args : {}\n        )}}%%`,\n        directive\n      );\n      break;\n  }\n};\n\n/** @param {any} conf */\nfunction updateRendererConfigs(conf) {\n  // Todo remove, all diagrams should get config on demand from the config object, no need for this\n\n  // gitGraphRenderer.setConf(conf.git); // Todo Remove all  of these\n  flowRenderer.setConf(conf.flowchart);\n  flowRendererV2.setConf(conf.flowchart);\n  if (typeof conf['sequenceDiagram'] !== 'undefined') {\n    sequenceRenderer.setConf(assignWithDepth(conf.sequence, conf['sequenceDiagram']));\n  }\n  sequenceRenderer.setConf(conf.sequence);\n  ganttRenderer.setConf(conf.gantt);\n  classRenderer.setConf(conf.class);\n  stateRenderer.setConf(conf.state);\n  stateRendererV2.setConf(conf.state);\n  infoRenderer.setConf(conf.class);\n  // pieRenderer.setConf(conf.class);\n  erRenderer.setConf(conf.er);\n  journeyRenderer.setConf(conf.journey);\n  requirementRenderer.setConf(conf.requirement);\n  errorRenderer.setConf(conf.class);\n}\n\n/** To be removed */\nfunction reinitialize() {\n  // `mermaidAPI.reinitialize: v${pkg.version}`,\n  //   JSON.stringify(options),\n  //   options.themeVariables.primaryColor;\n  // // if (options.theme && theme[options.theme]) {\n  // //   options.themeVariables = theme[options.theme].getThemeVariables(options.themeVariables);\n  // // }\n  // // Set default options\n  // const config =\n  //   typeof options === 'object' ? configApi.setConfig(options) : configApi.getSiteConfig();\n  // updateRendererConfigs(config);\n  // setLogLevel(config.logLevel);\n  // log.debug('mermaidAPI.reinitialize: ', config);\n}\n\n/** @param {any} options */\nfunction initialize(options) {\n  // console.warn(`mermaidAPI.initialize: v${pkg.version} `, options);\n\n  // Handle legacy location of font-family configuration\n  if (options && options.fontFamily) {\n    if (!options.themeVariables) {\n      options.themeVariables = { fontFamily: options.fontFamily };\n    } else {\n      if (!options.themeVariables.fontFamily) {\n        options.themeVariables = { fontFamily: options.fontFamily };\n      }\n    }\n  }\n  // Set default options\n  configApi.saveConfigFromInitialize(options);\n\n  if (options && options.theme && theme[options.theme]) {\n    // Todo merge with user options\n    options.themeVariables = theme[options.theme].getThemeVariables(options.themeVariables);\n  } else {\n    if (options) options.themeVariables = theme.default.getThemeVariables(options.themeVariables);\n  }\n\n  const config =\n    typeof options === 'object' ? configApi.setSiteConfig(options) : configApi.getSiteConfig();\n\n  updateRendererConfigs(config);\n  setLogLevel(config.logLevel);\n  // log.debug('mermaidAPI.initialize: ', config);\n}\n\nconst mermaidAPI = Object.freeze({\n  render,\n  parse,\n  parseDirective,\n  initialize,\n  reinitialize,\n  getConfig: configApi.getConfig,\n  setConfig: configApi.setConfig,\n  getSiteConfig: configApi.getSiteConfig,\n  updateSiteConfig: configApi.updateSiteConfig,\n  reset: () => {\n    // console.warn('reset');\n    configApi.reset();\n    // const siteConfig = configApi.getSiteConfig();\n    // updateRendererConfigs(siteConfig);\n  },\n  globalReset: () => {\n    configApi.reset(configApi.defaultConfig);\n    updateRendererConfigs(configApi.getConfig());\n  },\n  defaultConfig: configApi.defaultConfig,\n});\n\nsetLogLevel(configApi.getConfig().logLevel);\nconfigApi.reset(configApi.getConfig());\n\nexport default mermaidAPI;\n/**\n * ## mermaidAPI configuration defaults\n *\n * ```html\n * <script>\n *   var config = {\n *     theme: 'default',\n *     logLevel: 'fatal',\n *     securityLevel: 'strict',\n *     startOnLoad: true,\n *     arrowMarkerAbsolute: false,\n *\n *     er: {\n *       diagramPadding: 20,\n *       layoutDirection: 'TB',\n *       minEntityWidth: 100,\n *       minEntityHeight: 75,\n *       entityPadding: 15,\n *       stroke: 'gray',\n *       fill: 'honeydew',\n *       fontSize: 12,\n *       useMaxWidth: true,\n *     },\n *     flowchart: {\n *       diagramPadding: 8,\n *       htmlLabels: true,\n *       curve: 'basis',\n *     },\n *     sequence: {\n *       diagramMarginX: 50,\n *       diagramMarginY: 10,\n *       actorMargin: 50,\n *       width: 150,\n *       height: 65,\n *       boxMargin: 10,\n *       boxTextMargin: 5,\n *       noteMargin: 10,\n *       messageMargin: 35,\n *       messageAlign: 'center',\n *       mirrorActors: true,\n *       bottomMarginAdj: 1,\n *       useMaxWidth: true,\n *       rightAngles: false,\n *       showSequenceNumbers: false,\n *     },\n *     gantt: {\n *       titleTopMargin: 25,\n *       barHeight: 20,\n *       barGap: 4,\n *       topPadding: 50,\n *       leftPadding: 75,\n *       gridLineStartPadding: 35,\n *       fontSize: 11,\n *       fontFamily: '\"Open Sans\", sans-serif',\n *       numberSectionStyles: 4,\n *       axisFormat: '%Y-%m-%d',\n *       topAxis: false,\n *     },\n *   };\n *   mermaid.initialize(config);\n * </script>\n * ```\n */\n","import classDiagram from './diagrams/class/styles';\nimport er from './diagrams/er/styles';\nimport flowchart from './diagrams/flowchart/styles';\nimport gantt from './diagrams/gantt/styles';\nimport gitGraph from './diagrams/git/styles';\nimport info from './diagrams/info/styles';\nimport pie from './diagrams/pie/styles';\nimport requirement from './diagrams/requirement/styles';\nimport sequence from './diagrams/sequence/styles';\nimport stateDiagram from './diagrams/state/styles';\nimport journey from './diagrams/user-journey/styles';\nimport c4 from './diagrams/c4/styles';\nimport { log } from './logger';\n\nconst themes = {\n  flowchart,\n  'flowchart-v2': flowchart,\n  sequence,\n  gantt,\n  classDiagram,\n  'classDiagram-v2': classDiagram,\n  class: classDiagram,\n  stateDiagram,\n  state: stateDiagram,\n  gitGraph,\n  info,\n  pie,\n  er,\n  journey,\n  requirement,\n  c4,\n};\n\nexport const calcThemeVariables = (theme, userOverRides) => {\n  log.info('userOverides', userOverRides);\n  return theme.calcColors(userOverRides);\n};\n\nconst getStyles = (type, userStyles, options) => {\n  return ` {\n    font-family: ${options.fontFamily};\n    font-size: ${options.fontSize};\n    fill: ${options.textColor}\n  }\n\n  /* Classes common for multiple diagrams */\n\n  .error-icon {\n    fill: ${options.errorBkgColor};\n  }\n  .error-text {\n    fill: ${options.errorTextColor};\n    stroke: ${options.errorTextColor};\n  }\n\n  .edge-thickness-normal {\n    stroke-width: 2px;\n  }\n  .edge-thickness-thick {\n    stroke-width: 3.5px\n  }\n  .edge-pattern-solid {\n    stroke-dasharray: 0;\n  }\n\n  .edge-pattern-dashed{\n    stroke-dasharray: 3;\n  }\n  .edge-pattern-dotted {\n    stroke-dasharray: 2;\n  }\n\n  .marker {\n    fill: ${options.lineColor};\n    stroke: ${options.lineColor};\n  }\n  .marker.cross {\n    stroke: ${options.lineColor};\n  }\n\n  svg {\n    font-family: ${options.fontFamily};\n    font-size: ${options.fontSize};\n  }\n\n  ${themes[type](options)}\n\n  ${userStyles}\n`;\n};\n\nexport default getStyles;\n","import { getThemeVariables as baseThemeVariables } from './theme-base';\nimport { getThemeVariables as darkThemeVariables } from './theme-dark';\nimport { getThemeVariables as defaultThemeVariables } from './theme-default';\nimport { getThemeVariables as forestThemeVariables } from './theme-forest';\nimport { getThemeVariables as neutralThemeVariables } from './theme-neutral';\n\nexport default {\n  base: {\n    getThemeVariables: baseThemeVariables,\n  },\n  dark: {\n    getThemeVariables: darkThemeVariables,\n  },\n  default: {\n    getThemeVariables: defaultThemeVariables,\n  },\n  forest: {\n    getThemeVariables: forestThemeVariables,\n  },\n  neutral: {\n    getThemeVariables: neutralThemeVariables,\n  },\n};\n","import { darken, lighten, adjust, invert } from 'khroma';\nimport { mkBorder } from './theme-helpers';\nclass Theme {\n  constructor() {\n    /** # Base variables */\n    /**\n     * - Background - used to know what the background color is of the diagram. This is used for\n     *   deducing colors for instance line color. Default value is #f4f4f4.\n     */\n    this.background = '#f4f4f4';\n    this.darkMode = false;\n\n    this.primaryColor = '#fff4dd';\n\n    this.noteBkgColor = '#fff5ad';\n    this.noteTextColor = '#333';\n\n    // dark\n\n    this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n    this.fontSize = '16px';\n  }\n  updateColors() {\n    // The || is to make sure that if the variable has been defined by a user override that value is to be used\n\n    /* Main */\n    this.primaryTextColor = this.primaryTextColor || (this.darkMode ? '#eee' : '#333'); // invert(this.primaryColor);\n    this.secondaryColor = this.secondaryColor || adjust(this.primaryColor, { h: -120 });\n    this.tertiaryColor = this.tertiaryColor || adjust(this.primaryColor, { h: 180, l: 5 });\n\n    this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);\n    this.secondaryBorderColor =\n      this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);\n    this.tertiaryBorderColor =\n      this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);\n    this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);\n    this.noteBkgColor = this.noteBkgColor || '#fff5ad';\n    this.noteTextColor = this.noteTextColor || '#333';\n\n    this.secondaryTextColor = this.secondaryTextColor || invert(this.secondaryColor);\n    this.tertiaryTextColor = this.tertiaryTextColor || invert(this.tertiaryColor);\n    this.lineColor = this.lineColor || invert(this.background);\n    this.textColor = this.textColor || this.primaryTextColor;\n\n    /* Flowchart variables */\n    this.nodeBkg = this.nodeBkg || this.primaryColor;\n    this.mainBkg = this.mainBkg || this.primaryColor;\n    this.nodeBorder = this.nodeBorder || this.primaryBorderColor;\n    this.clusterBkg = this.clusterBkg || this.tertiaryColor;\n    this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;\n    this.defaultLinkColor = this.defaultLinkColor || this.lineColor;\n    this.titleColor = this.titleColor || this.tertiaryTextColor;\n    this.edgeLabelBackground =\n      this.edgeLabelBackground ||\n      (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n    this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;\n    /* Sequence Diagram variables */\n\n    // this.actorBorder = lighten(this.border1, 0.5);\n    this.actorBorder = this.actorBorder || this.primaryBorderColor;\n    this.actorBkg = this.actorBkg || this.mainBkg;\n    this.actorTextColor = this.actorTextColor || this.primaryTextColor;\n    this.actorLineColor = this.actorLineColor || 'grey';\n    this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;\n    this.signalColor = this.signalColor || this.textColor;\n    this.signalTextColor = this.signalTextColor || this.textColor;\n    this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;\n    this.labelTextColor = this.labelTextColor || this.actorTextColor;\n    this.loopTextColor = this.loopTextColor || this.actorTextColor;\n    this.activationBorderColor = this.activationBorderColor || darken(this.secondaryColor, 10);\n    this.activationBkgColor = this.activationBkgColor || this.secondaryColor;\n    this.sequenceNumberColor = this.sequenceNumberColor || invert(this.lineColor);\n\n    /* Gantt chart variables */\n\n    this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor;\n    this.altSectionBkgColor = this.altSectionBkgColor || 'white';\n    this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor;\n    this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor;\n    this.excludeBkgColor = this.excludeBkgColor || '#eeeeee';\n    this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;\n    this.taskBkgColor = this.taskBkgColor || this.primaryColor;\n    this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor;\n    this.activeTaskBkgColor = this.activeTaskBkgColor || lighten(this.primaryColor, 23);\n    this.gridColor = this.gridColor || 'lightgrey';\n    this.doneTaskBkgColor = this.doneTaskBkgColor || 'lightgrey';\n    this.doneTaskBorderColor = this.doneTaskBorderColor || 'grey';\n    this.critBorderColor = this.critBorderColor || '#ff8888';\n    this.critBkgColor = this.critBkgColor || 'red';\n    this.todayLineColor = this.todayLineColor || 'red';\n    this.taskTextColor = this.taskTextColor || this.textColor;\n    this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;\n    this.taskTextLightColor = this.taskTextLightColor || this.textColor;\n    this.taskTextColor = this.taskTextColor || this.primaryTextColor;\n    this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;\n    this.taskTextClickableColor = this.taskTextClickableColor || '#003163';\n\n    /* Sequence Diagram variables */\n\n    this.personBorder = this.personBorder || this.primaryBorderColor;\n    this.personBkg = this.personBkg || this.mainBkg;\n\n    /* state colors */\n    this.transitionColor = this.transitionColor || this.lineColor;\n    this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n    /* The color of the text tables of the states*/\n    this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n\n    this.stateBkg = this.stateBkg || this.mainBkg;\n    this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n    this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n    this.altBackground = this.altBackground || this.tertiaryColor;\n    this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n    this.compositeBorder = this.compositeBorder || this.nodeBorder;\n    this.innerEndBackground = this.nodeBorder;\n    this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n    this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n    this.transitionColor = this.transitionColor || this.lineColor;\n    this.specialStateColor = this.lineColor;\n\n    /* class */\n    this.classText = this.classText || this.textColor;\n\n    /* user-journey */\n    this.fillType0 = this.fillType0 || this.primaryColor;\n    this.fillType1 = this.fillType1 || this.secondaryColor;\n    this.fillType2 = this.fillType2 || adjust(this.primaryColor, { h: 64 });\n    this.fillType3 = this.fillType3 || adjust(this.secondaryColor, { h: 64 });\n    this.fillType4 = this.fillType4 || adjust(this.primaryColor, { h: -64 });\n    this.fillType5 = this.fillType5 || adjust(this.secondaryColor, { h: -64 });\n    this.fillType6 = this.fillType6 || adjust(this.primaryColor, { h: 128 });\n    this.fillType7 = this.fillType7 || adjust(this.secondaryColor, { h: 128 });\n\n    /* pie */\n    this.pie1 = this.pie1 || this.primaryColor;\n    this.pie2 = this.pie2 || this.secondaryColor;\n    this.pie3 = this.pie3 || this.tertiaryColor;\n    this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -10 });\n    this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -10 });\n    this.pie6 = this.pie6 || adjust(this.tertiaryColor, { l: -10 });\n    this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -10 });\n    this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -10 });\n    this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: 0 });\n    this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -20 });\n    this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -60, l: -20 });\n    this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -10 });\n    this.pieTitleTextSize = this.pieTitleTextSize || '25px';\n    this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n    this.pieSectionTextSize = this.pieSectionTextSize || '17px';\n    this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n    this.pieLegendTextSize = this.pieLegendTextSize || '17px';\n    this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n    this.pieStrokeColor = this.pieStrokeColor || 'black';\n    this.pieStrokeWidth = this.pieStrokeWidth || '2px';\n    this.pieOpacity = this.pieOpacity || '0.7';\n\n    /* requirement-diagram */\n    this.requirementBackground = this.requirementBackground || this.primaryColor;\n    this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n    this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor;\n    this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n    this.relationColor = this.relationColor || this.lineColor;\n    this.relationLabelBackground =\n      this.relationLabelBackground ||\n      (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n    this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n\n    /* git */\n    this.git0 = this.git0 || this.primaryColor;\n    this.git1 = this.git1 || this.secondaryColor;\n    this.git2 = this.git2 || this.tertiaryColor;\n    this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 });\n    this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 });\n    this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 });\n    this.git6 = this.git6 || adjust(this.primaryColor, { h: +60 });\n    this.git7 = this.git7 || adjust(this.primaryColor, { h: +120 });\n    if (this.darkMode) {\n      this.git0 = lighten(this.git0, 25);\n      this.git1 = lighten(this.git1, 25);\n      this.git2 = lighten(this.git2, 25);\n      this.git3 = lighten(this.git3, 25);\n      this.git4 = lighten(this.git4, 25);\n      this.git5 = lighten(this.git5, 25);\n      this.git6 = lighten(this.git6, 25);\n      this.git7 = lighten(this.git7, 25);\n    } else {\n      this.git0 = darken(this.git0, 25);\n      this.git1 = darken(this.git1, 25);\n      this.git2 = darken(this.git2, 25);\n      this.git3 = darken(this.git3, 25);\n      this.git4 = darken(this.git4, 25);\n      this.git5 = darken(this.git5, 25);\n      this.git6 = darken(this.git6, 25);\n      this.git7 = darken(this.git7, 25);\n    }\n    this.gitInv0 = this.gitInv0 || invert(this.git0);\n    this.gitInv1 = this.gitInv1 || invert(this.git1);\n    this.gitInv2 = this.gitInv2 || invert(this.git2);\n    this.gitInv3 = this.gitInv3 || invert(this.git3);\n    this.gitInv4 = this.gitInv4 || invert(this.git4);\n    this.gitInv5 = this.gitInv5 || invert(this.git5);\n    this.gitInv6 = this.gitInv6 || invert(this.git6);\n    this.gitInv7 = this.gitInv7 || invert(this.git7);\n    this.branchLabelColor =\n      this.branchLabelColor || (this.darkMode ? 'black' : this.labelTextColor);\n    this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;\n    this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;\n    this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;\n    this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;\n    this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;\n    this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;\n    this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;\n    this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;\n\n    this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n    this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n    this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n    this.tagLabelFontSize = this.tagLabelFontSize || '10px';\n    this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n    this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n    this.commitLabelFontSize = this.commitLabelFontSize || '10px';\n  }\n  calculate(overrides) {\n    if (typeof overrides !== 'object') {\n      // Calculate colors form base colors\n      this.updateColors();\n      return;\n    }\n\n    const keys = Object.keys(overrides);\n\n    // Copy values from overrides, this is mainly for base colors\n    keys.forEach((k) => {\n      this[k] = overrides[k];\n    });\n\n    // Calculate colors form base colors\n    this.updateColors();\n    // Copy values from overrides again in case of an override of derived value\n    keys.forEach((k) => {\n      this[k] = overrides[k];\n    });\n  }\n}\n\nexport const getThemeVariables = (userOverrides) => {\n  const theme = new Theme();\n  theme.calculate(userOverrides);\n  return theme;\n};\n","import { invert, lighten, darken, rgba, adjust } from 'khroma';\nimport { mkBorder } from './theme-helpers';\nclass Theme {\n  constructor() {\n    this.background = '#333';\n    this.primaryColor = '#1f2020';\n    this.secondaryColor = lighten(this.primaryColor, 16);\n\n    this.tertiaryColor = adjust(this.primaryColor, { h: -160 });\n    this.primaryBorderColor = invert(this.background);\n    this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n    this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n    this.primaryTextColor = invert(this.primaryColor);\n    this.secondaryTextColor = invert(this.secondaryColor);\n    this.tertiaryTextColor = invert(this.tertiaryColor);\n    this.lineColor = invert(this.background);\n    this.textColor = invert(this.background);\n\n    this.mainBkg = '#1f2020';\n    this.secondBkg = 'calculated';\n    this.mainContrastColor = 'lightgrey';\n    this.darkTextColor = lighten(invert('#323D47'), 10);\n    this.lineColor = 'calculated';\n    this.border1 = '#81B1DB';\n    this.border2 = rgba(255, 255, 255, 0.25);\n    this.arrowheadColor = 'calculated';\n    this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n    this.fontSize = '16px';\n    this.labelBackground = '#181818';\n    this.textColor = '#ccc';\n    /* Flowchart variables */\n\n    this.nodeBkg = 'calculated';\n    this.nodeBorder = 'calculated';\n    this.clusterBkg = 'calculated';\n    this.clusterBorder = 'calculated';\n    this.defaultLinkColor = 'calculated';\n    this.titleColor = '#F9FFFE';\n    this.edgeLabelBackground = 'calculated';\n\n    /* Sequence Diagram variables */\n\n    this.actorBorder = 'calculated';\n    this.actorBkg = 'calculated';\n    this.actorTextColor = 'calculated';\n    this.actorLineColor = 'calculated';\n    this.signalColor = 'calculated';\n    this.signalTextColor = 'calculated';\n    this.labelBoxBkgColor = 'calculated';\n    this.labelBoxBorderColor = 'calculated';\n    this.labelTextColor = 'calculated';\n    this.loopTextColor = 'calculated';\n    this.noteBorderColor = 'calculated';\n    this.noteBkgColor = '#fff5ad';\n    this.noteTextColor = 'calculated';\n    this.activationBorderColor = 'calculated';\n    this.activationBkgColor = 'calculated';\n    this.sequenceNumberColor = 'black';\n\n    /* Gantt chart variables */\n\n    this.sectionBkgColor = darken('#EAE8D9', 30);\n    this.altSectionBkgColor = 'calculated';\n    this.sectionBkgColor2 = '#EAE8D9';\n    this.taskBorderColor = rgba(255, 255, 255, 70);\n    this.taskBkgColor = 'calculated';\n    this.taskTextColor = 'calculated';\n    this.taskTextLightColor = 'calculated';\n    this.taskTextOutsideColor = 'calculated';\n    this.taskTextClickableColor = '#003163';\n    this.activeTaskBorderColor = rgba(255, 255, 255, 50);\n    this.activeTaskBkgColor = '#81B1DB';\n    this.gridColor = 'calculated';\n    this.doneTaskBkgColor = 'calculated';\n    this.doneTaskBorderColor = 'grey';\n    this.critBorderColor = '#E83737';\n    this.critBkgColor = '#E83737';\n    this.taskTextDarkColor = 'calculated';\n    this.todayLineColor = '#DB5757';\n\n    /* C4 Context Diagram variables */\n\n    this.personBorder = 'calculated';\n    this.personBkg = 'calculated';\n\n    /* state colors */\n    this.labelColor = 'calculated';\n\n    this.errorBkgColor = '#a44141';\n    this.errorTextColor = '#ddd';\n  }\n  updateColors() {\n    this.secondBkg = lighten(this.mainBkg, 16);\n    this.lineColor = this.mainContrastColor;\n    this.arrowheadColor = this.mainContrastColor;\n    /* Flowchart variables */\n\n    this.nodeBkg = this.mainBkg;\n    this.nodeBorder = this.border1;\n    this.clusterBkg = this.secondBkg;\n    this.clusterBorder = this.border2;\n    this.defaultLinkColor = this.lineColor;\n    this.edgeLabelBackground = lighten(this.labelBackground, 25);\n\n    /* Sequence Diagram variables */\n\n    this.actorBorder = this.border1;\n    this.actorBkg = this.mainBkg;\n    this.actorTextColor = this.mainContrastColor;\n    this.actorLineColor = this.mainContrastColor;\n    this.signalColor = this.mainContrastColor;\n    this.signalTextColor = this.mainContrastColor;\n    this.labelBoxBkgColor = this.actorBkg;\n    this.labelBoxBorderColor = this.actorBorder;\n    this.labelTextColor = this.mainContrastColor;\n    this.loopTextColor = this.mainContrastColor;\n    this.noteBorderColor = this.secondaryBorderColor;\n    this.noteBkgColor = this.secondBkg;\n    this.noteTextColor = this.secondaryTextColor;\n    this.activationBorderColor = this.border1;\n    this.activationBkgColor = this.secondBkg;\n\n    /* Gantt chart variables */\n\n    this.altSectionBkgColor = this.background;\n    this.taskBkgColor = lighten(this.mainBkg, 23);\n    this.taskTextColor = this.darkTextColor;\n    this.taskTextLightColor = this.mainContrastColor;\n    this.taskTextOutsideColor = this.taskTextLightColor;\n    this.gridColor = this.mainContrastColor;\n    this.doneTaskBkgColor = this.mainContrastColor;\n    this.taskTextDarkColor = this.darkTextColor;\n\n    /* state colors */\n    this.transitionColor = this.transitionColor || this.lineColor;\n    this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n    this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n    this.stateBkg = this.stateBkg || this.mainBkg;\n    this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n    this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n    this.altBackground = this.altBackground || '#555';\n    this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n    this.compositeBorder = this.compositeBorder || this.nodeBorder;\n    this.innerEndBackground = this.primaryBorderColor;\n    this.specialStateColor = '#f4f4f4'; // this.lineColor;\n\n    this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n    this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n\n    this.fillType0 = this.primaryColor;\n    this.fillType1 = this.secondaryColor;\n    this.fillType2 = adjust(this.primaryColor, { h: 64 });\n    this.fillType3 = adjust(this.secondaryColor, { h: 64 });\n    this.fillType4 = adjust(this.primaryColor, { h: -64 });\n    this.fillType5 = adjust(this.secondaryColor, { h: -64 });\n    this.fillType6 = adjust(this.primaryColor, { h: 128 });\n    this.fillType7 = adjust(this.secondaryColor, { h: 128 });\n\n    /* pie */\n    this.pie1 = this.pie1 || '#0b0000';\n    this.pie2 = this.pie2 || '#4d1037';\n    this.pie3 = this.pie3 || '#3f5258';\n    this.pie4 = this.pie4 || '#4f2f1b';\n    this.pie5 = this.pie5 || '#6e0a0a';\n    this.pie6 = this.pie6 || '#3b0048';\n    this.pie7 = this.pie7 || '#995a01';\n    this.pie8 = this.pie8 || '#154706';\n    this.pie9 = this.pie9 || '#161722';\n    this.pie10 = this.pie10 || '#00296f';\n    this.pie11 = this.pie11 || '#01629c';\n    this.pie12 = this.pie12 || '#010029';\n    this.pieTitleTextSize = this.pieTitleTextSize || '25px';\n    this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n    this.pieSectionTextSize = this.pieSectionTextSize || '17px';\n    this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n    this.pieLegendTextSize = this.pieLegendTextSize || '17px';\n    this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n    this.pieStrokeColor = this.pieStrokeColor || 'black';\n    this.pieStrokeWidth = this.pieStrokeWidth || '2px';\n    this.pieOpacity = this.pieOpacity || '0.7';\n\n    /* class */\n    this.classText = this.primaryTextColor;\n\n    /* requirement-diagram */\n    this.requirementBackground = this.requirementBackground || this.primaryColor;\n    this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n    this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor;\n    this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n    this.relationColor = this.relationColor || this.lineColor;\n    this.relationLabelBackground =\n      this.relationLabelBackground ||\n      (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n    this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n\n    /* git */\n    this.git0 = lighten(this.secondaryColor, 20);\n    this.git1 = lighten(this.pie2 || this.secondaryColor, 20);\n    this.git2 = lighten(this.pie3 || this.tertiaryColor, 20);\n    this.git3 = lighten(this.pie4 || adjust(this.primaryColor, { h: -30 }), 20);\n    this.git4 = lighten(this.pie5 || adjust(this.primaryColor, { h: -60 }), 20);\n    this.git5 = lighten(this.pie6 || adjust(this.primaryColor, { h: -90 }), 10);\n    this.git6 = lighten(this.pie7 || adjust(this.primaryColor, { h: +60 }), 10);\n    this.git7 = lighten(this.pie8 || adjust(this.primaryColor, { h: +120 }), 20);\n    this.gitInv0 = this.gitInv0 || invert(this.git0);\n    this.gitInv1 = this.gitInv1 || invert(this.git1);\n    this.gitInv2 = this.gitInv2 || invert(this.git2);\n    this.gitInv3 = this.gitInv3 || invert(this.git3);\n    this.gitInv4 = this.gitInv4 || invert(this.git4);\n    this.gitInv5 = this.gitInv5 || invert(this.git5);\n    this.gitInv6 = this.gitInv6 || invert(this.git6);\n    this.gitInv7 = this.gitInv7 || invert(this.git7);\n\n    this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n    this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n    this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n    this.tagLabelFontSize = this.tagLabelFontSize || '10px';\n    this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n    this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n    this.commitLabelFontSize = this.commitLabelFontSize || '10px';\n  }\n  calculate(overrides) {\n    if (typeof overrides !== 'object') {\n      // Calculate colors form base colors\n      this.updateColors();\n      return;\n    }\n\n    const keys = Object.keys(overrides);\n\n    // Copy values from overrides, this is mainly for base colors\n    keys.forEach((k) => {\n      this[k] = overrides[k];\n    });\n\n    // Calculate colors form base colors\n    this.updateColors();\n    // Copy values from overrides again in case of an override of derived value\n    keys.forEach((k) => {\n      this[k] = overrides[k];\n    });\n  }\n}\n\nexport const getThemeVariables = (userOverrides) => {\n  const theme = new Theme();\n  theme.calculate(userOverrides);\n  return theme;\n};\n","import { invert, lighten, rgba, adjust, darken } from 'khroma';\nimport { mkBorder } from './theme-helpers';\n\nclass Theme {\n  constructor() {\n    /* Base variables */\n    this.background = '#f4f4f4';\n    this.primaryColor = '#ECECFF';\n\n    this.secondaryColor = adjust(this.primaryColor, { h: 120 });\n    this.secondaryColor = '#ffffde';\n    this.tertiaryColor = adjust(this.primaryColor, { h: -160 });\n    this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n    this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n    this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n    // this.noteBorderColor = mkBorder(this.noteBkgColor, this.darkMode);\n\n    this.primaryTextColor = invert(this.primaryColor);\n    this.secondaryTextColor = invert(this.secondaryColor);\n    this.tertiaryTextColor = invert(this.tertiaryColor);\n    this.lineColor = invert(this.background);\n    this.textColor = invert(this.background);\n\n    this.background = 'white';\n    this.mainBkg = '#ECECFF';\n    this.secondBkg = '#ffffde';\n    this.lineColor = '#333333';\n    this.border1 = '#9370DB';\n    this.border2 = '#aaaa33';\n    this.arrowheadColor = '#333333';\n    this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n    this.fontSize = '16px';\n    this.labelBackground = '#e8e8e8';\n    this.textColor = '#333';\n\n    /* Flowchart variables */\n\n    this.nodeBkg = 'calculated';\n    this.nodeBorder = 'calculated';\n    this.clusterBkg = 'calculated';\n    this.clusterBorder = 'calculated';\n    this.defaultLinkColor = 'calculated';\n    this.titleColor = 'calculated';\n    this.edgeLabelBackground = 'calculated';\n\n    /* Sequence Diagram variables */\n\n    this.actorBorder = 'calculated';\n    this.actorBkg = 'calculated';\n    this.actorTextColor = 'black';\n    this.actorLineColor = 'grey';\n    this.signalColor = 'calculated';\n    this.signalTextColor = 'calculated';\n    this.labelBoxBkgColor = 'calculated';\n    this.labelBoxBorderColor = 'calculated';\n    this.labelTextColor = 'calculated';\n    this.loopTextColor = 'calculated';\n    this.noteBorderColor = 'calculated';\n    this.noteBkgColor = '#fff5ad';\n    this.noteTextColor = 'calculated';\n    this.activationBorderColor = '#666';\n    this.activationBkgColor = '#f4f4f4';\n    this.sequenceNumberColor = 'white';\n\n    /* Gantt chart variables */\n\n    this.sectionBkgColor = 'calculated';\n    this.altSectionBkgColor = 'calculated';\n    this.sectionBkgColor2 = 'calculated';\n    this.excludeBkgColor = '#eeeeee';\n    this.taskBorderColor = 'calculated';\n    this.taskBkgColor = 'calculated';\n    this.taskTextLightColor = 'calculated';\n    this.taskTextColor = this.taskTextLightColor;\n    this.taskTextDarkColor = 'calculated';\n    this.taskTextOutsideColor = this.taskTextDarkColor;\n    this.taskTextClickableColor = 'calculated';\n    this.activeTaskBorderColor = 'calculated';\n    this.activeTaskBkgColor = 'calculated';\n    this.gridColor = 'calculated';\n    this.doneTaskBkgColor = 'calculated';\n    this.doneTaskBorderColor = 'calculated';\n    this.critBorderColor = 'calculated';\n    this.critBkgColor = 'calculated';\n    this.todayLineColor = 'calculated';\n\n    this.sectionBkgColor = rgba(102, 102, 255, 0.49);\n    this.altSectionBkgColor = 'white';\n    this.sectionBkgColor2 = '#fff400';\n    this.taskBorderColor = '#534fbc';\n    this.taskBkgColor = '#8a90dd';\n    this.taskTextLightColor = 'white';\n    this.taskTextColor = 'calculated';\n    this.taskTextDarkColor = 'black';\n    this.taskTextOutsideColor = 'calculated';\n    this.taskTextClickableColor = '#003163';\n    this.activeTaskBorderColor = '#534fbc';\n    this.activeTaskBkgColor = '#bfc7ff';\n    this.gridColor = 'lightgrey';\n    this.doneTaskBkgColor = 'lightgrey';\n    this.doneTaskBorderColor = 'grey';\n    this.critBorderColor = '#ff8888';\n    this.critBkgColor = 'red';\n    this.todayLineColor = 'red';\n\n    /* C4 Context Diagram variables */\n\n    this.personBorder = 'calculated';\n    this.personBkg = 'calculated';\n\n    /* state colors */\n    this.labelColor = 'black';\n    this.errorBkgColor = '#552222';\n    this.errorTextColor = '#552222';\n    this.updateColors();\n  }\n  updateColors() {\n    /* Flowchart variables */\n\n    this.nodeBkg = this.mainBkg;\n    this.nodeBorder = this.border1; // border 1\n    this.clusterBkg = this.secondBkg;\n    this.clusterBorder = this.border2;\n    this.defaultLinkColor = this.lineColor;\n    this.titleColor = this.textColor;\n    this.edgeLabelBackground = this.labelBackground;\n\n    /* Sequence Diagram variables */\n\n    // this.actorBorder = lighten(this.border1, 0.5);\n    this.actorBorder = lighten(this.border1, 23);\n    this.actorBkg = this.mainBkg;\n    this.labelBoxBkgColor = this.actorBkg;\n    this.signalColor = this.textColor;\n    this.signalTextColor = this.textColor;\n    this.labelBoxBorderColor = this.actorBorder;\n    this.labelTextColor = this.actorTextColor;\n    this.loopTextColor = this.actorTextColor;\n    this.noteBorderColor = this.border2;\n    this.noteTextColor = this.actorTextColor;\n\n    /* Gantt chart variables */\n\n    this.taskTextColor = this.taskTextLightColor;\n    this.taskTextOutsideColor = this.taskTextDarkColor;\n\n    /* state colors */\n    this.transitionColor = this.transitionColor || this.lineColor;\n    this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n    this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n\n    this.stateBkg = this.stateBkg || this.mainBkg;\n    this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n    this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n    this.altBackground = this.altBackground || '#f0f0f0';\n    this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n    this.compositeBorder = this.compositeBorder || this.nodeBorder;\n    this.innerEndBackground = this.nodeBorder;\n    this.specialStateColor = this.lineColor;\n\n    this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n    this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n    this.transitionColor = this.transitionColor || this.lineColor;\n    /* class */\n    this.classText = this.primaryTextColor;\n    /* journey */\n    this.fillType0 = this.primaryColor;\n    this.fillType1 = this.secondaryColor;\n    this.fillType2 = adjust(this.primaryColor, { h: 64 });\n    this.fillType3 = adjust(this.secondaryColor, { h: 64 });\n    this.fillType4 = adjust(this.primaryColor, { h: -64 });\n    this.fillType5 = adjust(this.secondaryColor, { h: -64 });\n    this.fillType6 = adjust(this.primaryColor, { h: 128 });\n    this.fillType7 = adjust(this.secondaryColor, { h: 128 });\n\n    /* pie */\n    this.pie1 = this.pie1 || this.primaryColor;\n    this.pie2 = this.pie2 || this.secondaryColor;\n    this.pie3 = this.pie3 || adjust(this.tertiaryColor, { l: -40 });\n    this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -10 });\n    this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -30 });\n    this.pie6 = this.pie6 || adjust(this.tertiaryColor, { l: -20 });\n    this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -20 });\n    this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -40 });\n    this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: -40 });\n    this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -40 });\n    this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -90, l: -40 });\n    this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -30 });\n    this.pieTitleTextSize = this.pieTitleTextSize || '25px';\n    this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n    this.pieSectionTextSize = this.pieSectionTextSize || '17px';\n    this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n    this.pieLegendTextSize = this.pieLegendTextSize || '17px';\n    this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n    this.pieStrokeColor = this.pieStrokeColor || 'black';\n    this.pieStrokeWidth = this.pieStrokeWidth || '2px';\n    this.pieOpacity = this.pieOpacity || '0.7';\n\n    /* requirement-diagram */\n    this.requirementBackground = this.requirementBackground || this.primaryColor;\n    this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n    this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor;\n    this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n    this.relationColor = this.relationColor || this.lineColor;\n    this.relationLabelBackground = this.relationLabelBackground || this.labelBackground;\n    this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n\n    /* git */\n    this.git0 = this.git0 || this.primaryColor;\n    this.git1 = this.git1 || this.secondaryColor;\n    this.git2 = this.git2 || this.tertiaryColor;\n    this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 });\n    this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 });\n    this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 });\n    this.git6 = this.git6 || adjust(this.primaryColor, { h: +60 });\n    this.git7 = this.git7 || adjust(this.primaryColor, { h: +120 });\n    if (this.darkMode) {\n      this.git0 = lighten(this.git0, 25);\n      this.git1 = lighten(this.git1, 25);\n      this.git2 = lighten(this.git2, 25);\n      this.git3 = lighten(this.git3, 25);\n      this.git4 = lighten(this.git4, 25);\n      this.git5 = lighten(this.git5, 25);\n      this.git6 = lighten(this.git6, 25);\n      this.git7 = lighten(this.git7, 25);\n    } else {\n      this.git0 = darken(this.git0, 25);\n      this.git1 = darken(this.git1, 25);\n      this.git2 = darken(this.git2, 25);\n      this.git3 = darken(this.git3, 25);\n      this.git4 = darken(this.git4, 25);\n      this.git5 = darken(this.git5, 25);\n      this.git6 = darken(this.git6, 25);\n      this.git7 = darken(this.git7, 25);\n    }\n    this.gitInv0 = this.gitInv0 || darken(invert(this.git0), 25);\n    this.gitInv1 = this.gitInv1 || invert(this.git1);\n    this.gitInv2 = this.gitInv2 || invert(this.git2);\n    this.gitInv3 = this.gitInv3 || invert(this.git3);\n    this.gitInv4 = this.gitInv4 || invert(this.git4);\n    this.gitInv5 = this.gitInv5 || invert(this.git5);\n    this.gitInv6 = this.gitInv6 || invert(this.git6);\n    this.gitInv7 = this.gitInv7 || invert(this.git7);\n    this.gitBranchLabel0 = this.gitBranchLabel0 || invert(this.labelTextColor);\n    this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n    this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n    this.gitBranchLabel3 = this.gitBranchLabel3 || invert(this.labelTextColor);\n    this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n    this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n    this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n    this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n\n    this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n    this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n    this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n    this.tagLabelFontSize = this.tagLabelFontSize || '10px';\n    this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n    this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n    this.commitLabelFontSize = this.commitLabelFontSize || '10px';\n  }\n  calculate(overrides) {\n    if (typeof overrides !== 'object') {\n      // Calculate colors form base colors\n      this.updateColors();\n      return;\n    }\n\n    const keys = Object.keys(overrides);\n\n    // Copy values from overrides, this is mainly for base colors\n    keys.forEach((k) => {\n      this[k] = overrides[k];\n    });\n\n    // Calculate colors form base colors\n    this.updateColors();\n    // Copy values from overrides again in case of an override of derived value\n    keys.forEach((k) => {\n      this[k] = overrides[k];\n    });\n  }\n}\n\nexport const getThemeVariables = (userOverrides) => {\n  const theme = new Theme();\n  theme.calculate(userOverrides);\n  return theme;\n};\n","import { darken, lighten, adjust, invert } from 'khroma';\nimport { mkBorder } from './theme-helpers';\nclass Theme {\n  constructor() {\n    /* Base vales */\n    this.background = '#f4f4f4';\n    this.primaryColor = '#cde498';\n    this.secondaryColor = '#cdffb2';\n    this.background = 'white';\n    this.mainBkg = '#cde498';\n    this.secondBkg = '#cdffb2';\n    this.lineColor = 'green';\n    this.border1 = '#13540c';\n    this.border2 = '#6eaa49';\n    this.arrowheadColor = 'green';\n    this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n    this.fontSize = '16px';\n\n    this.tertiaryColor = lighten('#cde498', 10);\n    this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n    this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n    this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n    this.primaryTextColor = invert(this.primaryColor);\n    this.secondaryTextColor = invert(this.secondaryColor);\n    this.tertiaryTextColor = invert(this.primaryColor);\n    this.lineColor = invert(this.background);\n    this.textColor = invert(this.background);\n\n    /* Flowchart variables */\n    this.nodeBkg = 'calculated';\n    this.nodeBorder = 'calculated';\n    this.clusterBkg = 'calculated';\n    this.clusterBorder = 'calculated';\n    this.defaultLinkColor = 'calculated';\n    this.titleColor = '#333';\n    this.edgeLabelBackground = '#e8e8e8';\n\n    /* Sequence Diagram variables */\n\n    this.actorBorder = 'calculated';\n    this.actorBkg = 'calculated';\n    this.actorTextColor = 'black';\n    this.actorLineColor = 'grey';\n    this.signalColor = '#333';\n    this.signalTextColor = '#333';\n    this.labelBoxBkgColor = 'calculated';\n    this.labelBoxBorderColor = '#326932';\n    this.labelTextColor = 'calculated';\n    this.loopTextColor = 'calculated';\n    this.noteBorderColor = 'calculated';\n    this.noteBkgColor = '#fff5ad';\n    this.noteTextColor = 'calculated';\n    this.activationBorderColor = '#666';\n    this.activationBkgColor = '#f4f4f4';\n    this.sequenceNumberColor = 'white';\n\n    /* Gantt chart variables */\n\n    this.sectionBkgColor = '#6eaa49';\n    this.altSectionBkgColor = 'white';\n    this.sectionBkgColor2 = '#6eaa49';\n    this.excludeBkgColor = '#eeeeee';\n    this.taskBorderColor = 'calculated';\n    this.taskBkgColor = '#487e3a';\n    this.taskTextLightColor = 'white';\n    this.taskTextColor = 'calculated';\n    this.taskTextDarkColor = 'black';\n    this.taskTextOutsideColor = 'calculated';\n    this.taskTextClickableColor = '#003163';\n    this.activeTaskBorderColor = 'calculated';\n    this.activeTaskBkgColor = 'calculated';\n    this.gridColor = 'lightgrey';\n    this.doneTaskBkgColor = 'lightgrey';\n    this.doneTaskBorderColor = 'grey';\n    this.critBorderColor = '#ff8888';\n    this.critBkgColor = 'red';\n    this.todayLineColor = 'red';\n\n    /* C4 Context Diagram variables */\n\n    this.personBorder = 'calculated';\n    this.personBkg = 'calculated';\n\n    /* state colors */\n    this.labelColor = 'black';\n\n    this.errorBkgColor = '#552222';\n    this.errorTextColor = '#552222';\n  }\n  updateColors() {\n    /* Flowchart variables */\n\n    this.nodeBkg = this.mainBkg;\n    this.nodeBorder = this.border1;\n    this.clusterBkg = this.secondBkg;\n    this.clusterBorder = this.border2;\n    this.defaultLinkColor = this.lineColor;\n\n    /* Sequence Diagram variables */\n\n    this.actorBorder = darken(this.mainBkg, 20);\n    this.actorBkg = this.mainBkg;\n    this.labelBoxBkgColor = this.actorBkg;\n    this.labelTextColor = this.actorTextColor;\n    this.loopTextColor = this.actorTextColor;\n    this.noteBorderColor = this.border2;\n    this.noteTextColor = this.actorTextColor;\n\n    /* Gantt chart variables */\n\n    this.taskBorderColor = this.border1;\n    this.taskTextColor = this.taskTextLightColor;\n    this.taskTextOutsideColor = this.taskTextDarkColor;\n    this.activeTaskBorderColor = this.taskBorderColor;\n    this.activeTaskBkgColor = this.mainBkg;\n\n    /* state colors */\n    this.transitionColor = this.transitionColor || this.lineColor;\n    this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n    this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n\n    this.stateBkg = this.stateBkg || this.mainBkg;\n    this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n    this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n    this.altBackground = this.altBackground || '#f0f0f0';\n    this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n    this.compositeBorder = this.compositeBorder || this.nodeBorder;\n    this.innerEndBackground = this.primaryBorderColor;\n    this.specialStateColor = this.lineColor;\n\n    this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n    this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n    this.transitionColor = this.transitionColor || this.lineColor;\n    /* class */\n    this.classText = this.primaryTextColor;\n    /* journey */\n    this.fillType0 = this.primaryColor;\n    this.fillType1 = this.secondaryColor;\n    this.fillType2 = adjust(this.primaryColor, { h: 64 });\n    this.fillType3 = adjust(this.secondaryColor, { h: 64 });\n    this.fillType4 = adjust(this.primaryColor, { h: -64 });\n    this.fillType5 = adjust(this.secondaryColor, { h: -64 });\n    this.fillType6 = adjust(this.primaryColor, { h: 128 });\n    this.fillType7 = adjust(this.secondaryColor, { h: 128 });\n\n    /* pie */\n    this.pie1 = this.pie1 || this.primaryColor;\n    this.pie2 = this.pie2 || this.secondaryColor;\n    this.pie3 = this.pie3 || this.tertiaryColor;\n    this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -30 });\n    this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -30 });\n    this.pie6 = this.pie6 || adjust(this.tertiaryColor, { h: +40, l: -40 });\n    this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -10 });\n    this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -10 });\n    this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: 0 });\n    this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -50 });\n    this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -60, l: -50 });\n    this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -50 });\n    this.pieTitleTextSize = this.pieTitleTextSize || '25px';\n    this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n    this.pieSectionTextSize = this.pieSectionTextSize || '17px';\n    this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n    this.pieLegendTextSize = this.pieLegendTextSize || '17px';\n    this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n    this.pieStrokeColor = this.pieStrokeColor || 'black';\n    this.pieStrokeWidth = this.pieStrokeWidth || '2px';\n    this.pieOpacity = this.pieOpacity || '0.7';\n\n    /* requirement-diagram */\n    this.requirementBackground = this.requirementBackground || this.primaryColor;\n    this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n    this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor;\n    this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n    this.relationColor = this.relationColor || this.lineColor;\n    this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;\n    this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n\n    /* git */\n    this.git0 = this.git0 || this.primaryColor;\n    this.git1 = this.git1 || this.secondaryColor;\n    this.git2 = this.git2 || this.tertiaryColor;\n    this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 });\n    this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 });\n    this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 });\n    this.git6 = this.git6 || adjust(this.primaryColor, { h: +60 });\n    this.git7 = this.git7 || adjust(this.primaryColor, { h: +120 });\n    if (this.darkMode) {\n      this.git0 = lighten(this.git0, 25);\n      this.git1 = lighten(this.git1, 25);\n      this.git2 = lighten(this.git2, 25);\n      this.git3 = lighten(this.git3, 25);\n      this.git4 = lighten(this.git4, 25);\n      this.git5 = lighten(this.git5, 25);\n      this.git6 = lighten(this.git6, 25);\n      this.git7 = lighten(this.git7, 25);\n    } else {\n      this.git0 = darken(this.git0, 25);\n      this.git1 = darken(this.git1, 25);\n      this.git2 = darken(this.git2, 25);\n      this.git3 = darken(this.git3, 25);\n      this.git4 = darken(this.git4, 25);\n      this.git5 = darken(this.git5, 25);\n      this.git6 = darken(this.git6, 25);\n      this.git7 = darken(this.git7, 25);\n    }\n    this.gitInv0 = this.gitInv0 || invert(this.git0);\n    this.gitInv1 = this.gitInv1 || invert(this.git1);\n    this.gitInv2 = this.gitInv2 || invert(this.git2);\n    this.gitInv3 = this.gitInv3 || invert(this.git3);\n    this.gitInv4 = this.gitInv4 || invert(this.git4);\n    this.gitInv5 = this.gitInv5 || invert(this.git5);\n    this.gitInv6 = this.gitInv6 || invert(this.git6);\n    this.gitInv7 = this.gitInv7 || invert(this.git7);\n\n    this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n    this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n    this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n    this.tagLabelFontSize = this.tagLabelFontSize || '10px';\n    this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n    this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n    this.commitLabelFontSize = this.commitLabelFontSize || '10px';\n  }\n  calculate(overrides) {\n    if (typeof overrides !== 'object') {\n      // Calculate colors form base colors\n      this.updateColors();\n      return;\n    }\n\n    const keys = Object.keys(overrides);\n\n    // Copy values from overrides, this is mainly for base colors\n    keys.forEach((k) => {\n      this[k] = overrides[k];\n    });\n\n    // Calculate colors form base colors\n    this.updateColors();\n    // Copy values from overrides again in case of an override of derived value\n    keys.forEach((k) => {\n      this[k] = overrides[k];\n    });\n  }\n}\n\nexport const getThemeVariables = (userOverrides) => {\n  const theme = new Theme();\n  theme.calculate(userOverrides);\n  return theme;\n};\n","import { adjust } from 'khroma';\r\n\r\nexport const mkBorder = (col, darkMode) =>\r\n  darkMode ? adjust(col, { s: -40, l: 10 }) : adjust(col, { s: -40, l: -10 });\r\n","import { invert, darken, lighten, adjust } from 'khroma';\nimport { mkBorder } from './theme-helpers';\n\n// const Color = require ( 'khroma/dist/color' ).default\n// Color.format.hex.stringify(Color.parse('hsl(210, 66.6666666667%, 95%)')); // => \"#EAF2FB\"\n\nclass Theme {\n  constructor() {\n    this.primaryColor = '#eee';\n    this.contrast = '#707070';\n    this.secondaryColor = lighten(this.contrast, 55);\n    this.background = '#ffffff';\n\n    // this.secondaryColor = adjust(this.primaryColor, { h: 120 });\n    this.tertiaryColor = adjust(this.primaryColor, { h: -160 });\n    this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n    this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n    this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n    // this.noteBorderColor = mkBorder(this.noteBkgColor, this.darkMode);\n\n    this.primaryTextColor = invert(this.primaryColor);\n    this.secondaryTextColor = invert(this.secondaryColor);\n    this.tertiaryTextColor = invert(this.tertiaryColor);\n    this.lineColor = invert(this.background);\n    this.textColor = invert(this.background);\n\n    // this.altBackground = lighten(this.contrast, 55);\n    this.mainBkg = '#eee';\n    this.secondBkg = 'calculated';\n    this.lineColor = '#666';\n    this.border1 = '#999';\n    this.border2 = 'calculated';\n    this.note = '#ffa';\n    this.text = '#333';\n    this.critical = '#d42';\n    this.done = '#bbb';\n    this.arrowheadColor = '#333333';\n    this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n    this.fontSize = '16px';\n\n    /* Flowchart variables */\n\n    this.nodeBkg = 'calculated';\n    this.nodeBorder = 'calculated';\n    this.clusterBkg = 'calculated';\n    this.clusterBorder = 'calculated';\n    this.defaultLinkColor = 'calculated';\n    this.titleColor = 'calculated';\n    this.edgeLabelBackground = 'white';\n\n    /* Sequence Diagram variables */\n\n    this.actorBorder = 'calculated';\n    this.actorBkg = 'calculated';\n    this.actorTextColor = 'calculated';\n    this.actorLineColor = 'calculated';\n    this.signalColor = 'calculated';\n    this.signalTextColor = 'calculated';\n    this.labelBoxBkgColor = 'calculated';\n    this.labelBoxBorderColor = 'calculated';\n    this.labelTextColor = 'calculated';\n    this.loopTextColor = 'calculated';\n    this.noteBorderColor = 'calculated';\n    this.noteBkgColor = 'calculated';\n    this.noteTextColor = 'calculated';\n    this.activationBorderColor = '#666';\n    this.activationBkgColor = '#f4f4f4';\n    this.sequenceNumberColor = 'white';\n\n    /* Gantt chart variables */\n\n    this.sectionBkgColor = 'calculated';\n    this.altSectionBkgColor = 'white';\n    this.sectionBkgColor2 = 'calculated';\n    this.excludeBkgColor = '#eeeeee';\n    this.taskBorderColor = 'calculated';\n    this.taskBkgColor = 'calculated';\n    this.taskTextLightColor = 'white';\n    this.taskTextColor = 'calculated';\n    this.taskTextDarkColor = 'calculated';\n    this.taskTextOutsideColor = 'calculated';\n    this.taskTextClickableColor = '#003163';\n    this.activeTaskBorderColor = 'calculated';\n    this.activeTaskBkgColor = 'calculated';\n    this.gridColor = 'calculated';\n    this.doneTaskBkgColor = 'calculated';\n    this.doneTaskBorderColor = 'calculated';\n    this.critBkgColor = 'calculated';\n    this.critBorderColor = 'calculated';\n    this.todayLineColor = 'calculated';\n\n    /* C4 Context Diagram variables */\n\n    this.personBorder = 'calculated';\n    this.personBkg = 'calculated';\n\n    /* state colors */\n    this.labelColor = 'black';\n\n    this.errorBkgColor = '#552222';\n    this.errorTextColor = '#552222';\n  }\n  updateColors() {\n    this.secondBkg = lighten(this.contrast, 55);\n    this.border2 = this.contrast;\n\n    /* Flowchart variables */\n\n    this.nodeBkg = this.mainBkg;\n    this.nodeBorder = this.border1;\n    this.clusterBkg = this.secondBkg;\n    this.clusterBorder = this.border2;\n    this.defaultLinkColor = this.lineColor;\n    this.titleColor = this.text;\n\n    /* Sequence Diagram variables */\n\n    this.actorBorder = lighten(this.border1, 23);\n    this.actorBkg = this.mainBkg;\n    this.actorTextColor = this.text;\n    this.actorLineColor = this.lineColor;\n    this.signalColor = this.text;\n    this.signalTextColor = this.text;\n    this.labelBoxBkgColor = this.actorBkg;\n    this.labelBoxBorderColor = this.actorBorder;\n    this.labelTextColor = this.text;\n    this.loopTextColor = this.text;\n    this.noteBorderColor = '#999';\n    this.noteBkgColor = '#666';\n    this.noteTextColor = '#fff';\n\n    /* Gantt chart variables */\n\n    this.sectionBkgColor = lighten(this.contrast, 30);\n    this.sectionBkgColor2 = lighten(this.contrast, 30);\n\n    this.taskBorderColor = darken(this.contrast, 10);\n\n    this.taskBkgColor = this.contrast;\n    this.taskTextColor = this.taskTextLightColor;\n    this.taskTextDarkColor = this.text;\n    this.taskTextOutsideColor = this.taskTextDarkColor;\n    this.activeTaskBorderColor = this.taskBorderColor;\n    this.activeTaskBkgColor = this.mainBkg;\n    this.gridColor = lighten(this.border1, 30);\n\n    this.doneTaskBkgColor = this.done;\n    this.doneTaskBorderColor = this.lineColor;\n    this.critBkgColor = this.critical;\n    this.critBorderColor = darken(this.critBkgColor, 10);\n\n    this.todayLineColor = this.critBkgColor;\n\n    /* state colors */\n    this.transitionColor = this.transitionColor || '#000';\n    this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n    this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n\n    this.stateBkg = this.stateBkg || this.mainBkg;\n    this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n    this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n    this.altBackground = this.altBackground || '#f4f4f4';\n    this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n    this.stateBorder = this.stateBorder || '#000';\n    this.innerEndBackground = this.primaryBorderColor;\n    this.specialStateColor = '#222';\n\n    this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n    this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n\n    /* class */\n    this.classText = this.primaryTextColor;\n    /* journey */\n    this.fillType0 = this.primaryColor;\n    this.fillType1 = this.secondaryColor;\n    this.fillType2 = adjust(this.primaryColor, { h: 64 });\n    this.fillType3 = adjust(this.secondaryColor, { h: 64 });\n    this.fillType4 = adjust(this.primaryColor, { h: -64 });\n    this.fillType5 = adjust(this.secondaryColor, { h: -64 });\n    this.fillType6 = adjust(this.primaryColor, { h: 128 });\n    this.fillType7 = adjust(this.secondaryColor, { h: 128 });\n\n    // /* pie */\n    this.pie1 = this.pie1 || '#F4F4F4';\n    this.pie2 = this.pie2 || '#555';\n    this.pie3 = this.pie3 || '#BBB';\n    this.pie4 = this.pie4 || '#777';\n    this.pie5 = this.pie5 || '#999';\n    this.pie6 = this.pie6 || '#DDD';\n    this.pie7 = this.pie7 || '#FFF';\n    this.pie8 = this.pie8 || '#DDD';\n    this.pie9 = this.pie9 || '#BBB';\n    this.pie10 = this.pie10 || '#999';\n    this.pie11 = this.pie11 || '#777';\n    this.pie12 = this.pie12 || '#555';\n    this.pieTitleTextSize = this.pieTitleTextSize || '25px';\n    this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n    this.pieSectionTextSize = this.pieSectionTextSize || '17px';\n    this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n    this.pieLegendTextSize = this.pieLegendTextSize || '17px';\n    this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n    this.pieStrokeColor = this.pieStrokeColor || 'black';\n    this.pieStrokeWidth = this.pieStrokeWidth || '2px';\n    this.pieOpacity = this.pieOpacity || '0.7';\n\n    // this.pie1 = this.pie1 || '#212529';\n    // this.pie2 = this.pie2 || '#343A40';\n    // this.pie3 = this.pie3 || '#495057';\n    // this.pie4 = this.pie4 || '#6C757D';\n    // this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -10 });\n    // this.pie6 = this.pie6 || adjust(this.tertiaryColor, { l: -10 });\n    // this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -10 });\n    // this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -10 });\n    // this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: 0 });\n    // this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -20 });\n    // this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -60, l: -20 });\n    // this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -10 });\n\n    /* requirement-diagram */\n    this.requirementBackground = this.requirementBackground || this.primaryColor;\n    this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n    this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor;\n    this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n    this.relationColor = this.relationColor || this.lineColor;\n    this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;\n    this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n\n    /* git */\n    this.git0 = darken(this.pie1, 25) || this.primaryColor;\n    this.git1 = this.pie2 || this.secondaryColor;\n    this.git2 = this.pie3 || this.tertiaryColor;\n    this.git3 = this.pie4 || adjust(this.primaryColor, { h: -30 });\n    this.git4 = this.pie5 || adjust(this.primaryColor, { h: -60 });\n    this.git5 = this.pie6 || adjust(this.primaryColor, { h: -90 });\n    this.git6 = this.pie7 || adjust(this.primaryColor, { h: +60 });\n    this.git7 = this.pie8 || adjust(this.primaryColor, { h: +120 });\n\n    this.gitInv0 = this.gitInv0 || invert(this.git0);\n    this.gitInv1 = this.gitInv1 || invert(this.git1);\n    this.gitInv2 = this.gitInv2 || invert(this.git2);\n    this.gitInv3 = this.gitInv3 || invert(this.git3);\n    this.gitInv4 = this.gitInv4 || invert(this.git4);\n    this.gitInv5 = this.gitInv5 || invert(this.git5);\n    this.gitInv6 = this.gitInv6 || invert(this.git6);\n    this.gitInv7 = this.gitInv7 || invert(this.git7);\n\n    this.branchLabelColor = this.branchLabelColor || this.labelTextColor;\n    this.gitBranchLabel0 = this.branchLabelColor;\n    this.gitBranchLabel1 = 'white';\n    this.gitBranchLabel2 = this.branchLabelColor;\n    this.gitBranchLabel3 = 'white';\n    this.gitBranchLabel4 = this.branchLabelColor;\n    this.gitBranchLabel5 = this.branchLabelColor;\n    this.gitBranchLabel6 = this.branchLabelColor;\n    this.gitBranchLabel7 = this.branchLabelColor;\n\n    this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n    this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n    this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n    this.tagLabelFontSize = this.tagLabelFontSize || '10px';\n    this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n    this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n    this.commitLabelFontSize = this.commitLabelFontSize || '10px';\n  }\n  calculate(overrides) {\n    if (typeof overrides !== 'object') {\n      // Calculate colors form base colors\n      this.updateColors();\n      return;\n    }\n\n    const keys = Object.keys(overrides);\n\n    // Copy values from overrides, this is mainly for base colors\n    keys.forEach((k) => {\n      this[k] = overrides[k];\n    });\n\n    // Calculate colors form base colors\n    this.updateColors();\n    // Copy values from overrides again in case of an override of derived value\n    keys.forEach((k) => {\n      this[k] = overrides[k];\n    });\n  }\n}\n\nexport const getThemeVariables = (userOverrides) => {\n  const theme = new Theme();\n  theme.calculate(userOverrides);\n  return theme;\n};\n","import { sanitizeUrl } from '@braintree/sanitize-url';\nimport {\n  curveBasis,\n  curveBasisClosed,\n  curveBasisOpen,\n  curveLinear,\n  curveLinearClosed,\n  curveMonotoneX,\n  curveMonotoneY,\n  curveNatural,\n  curveStep,\n  curveStepAfter,\n  curveStepBefore,\n  select,\n} from 'd3';\nimport common from './diagrams/common/common';\nimport { configKeys } from './defaultConfig';\nimport { log } from './logger';\n\n// Effectively an enum of the supported curve types, accessible by name\nconst d3CurveTypes = {\n  curveBasis: curveBasis,\n  curveBasisClosed: curveBasisClosed,\n  curveBasisOpen: curveBasisOpen,\n  curveLinear: curveLinear,\n  curveLinearClosed: curveLinearClosed,\n  curveMonotoneX: curveMonotoneX,\n  curveMonotoneY: curveMonotoneY,\n  curveNatural: curveNatural,\n  curveStep: curveStep,\n  curveStepAfter: curveStepAfter,\n  curveStepBefore: curveStepBefore,\n};\nconst directive =\n  /[%]{2}[{]\\s*(?:(?:(\\w+)\\s*:|(\\w+))\\s*(?:(?:(\\w+))|((?:(?![}][%]{2}).|\\r?\\n)*))?\\s*)(?:[}][%]{2})?/gi;\nconst directiveWithoutOpen =\n  /\\s*(?:(?:(\\w+)(?=:):|(\\w+))\\s*(?:(?:(\\w+))|((?:(?![}][%]{2}).|\\r?\\n)*))?\\s*)(?:[}][%]{2})?/gi;\nconst anyComment = /\\s*%%.*\\n/gm;\n\n/**\n * @function detectInit Detects the init config object from the text\n *\n *   ```mermaid\n *   %%{init: {\"theme\": \"debug\", \"logLevel\": 1 }}%%\n *   graph LR\n *    a-->b\n *    b-->c\n *    c-->d\n *    d-->e\n *    e-->f\n *    f-->g\n *    g-->h\n * ```\n *\n *   Or\n *\n *   ```mermaid\n *   %%{initialize: {\"theme\": \"dark\", logLevel: \"debug\" }}%%\n *   graph LR\n *    a-->b\n *    b-->c\n *    c-->d\n *    d-->e\n *    e-->f\n *    f-->g\n *    g-->h\n * ```\n * @param {string} text The text defining the graph\n * @param {any} cnf\n * @returns {object} The json object representing the init passed to mermaid.initialize()\n */\nexport const detectInit = function (text, cnf) {\n  let inits = detectDirective(text, /(?:init\\b)|(?:initialize\\b)/);\n  let results = {};\n\n  if (Array.isArray(inits)) {\n    let args = inits.map((init) => init.args);\n    directiveSanitizer(args);\n\n    results = assignWithDepth(results, [...args]);\n  } else {\n    results = inits.args;\n  }\n  if (results) {\n    let type = detectType(text, cnf);\n    ['config'].forEach((prop) => {\n      if (typeof results[prop] !== 'undefined') {\n        if (type === 'flowchart-v2') {\n          type = 'flowchart';\n        }\n        results[type] = results[prop];\n        delete results[prop];\n      }\n    });\n  }\n\n  // Todo: refactor this, these results are never used\n  return results;\n};\n\n/**\n * @function detectDirective Detects the directive from the text. Text can be single line or\n *   multiline. If type is null or omitted the first directive encountered in text will be returned\n *\n *   ```mermaid\n *   graph LR\n *    %%{somedirective}%%\n *    a-->b\n *    b-->c\n *    c-->d\n *    d-->e\n *    e-->f\n *    f-->g\n *    g-->h\n * ```\n * @param {string} text The text defining the graph\n * @param {string | RegExp} type The directive to return (default: null)\n * @returns {object | Array} An object or Array representing the directive(s): { type: string, args:\n *   object|null } matched by the input type if a single directive was found, that directive object\n *   will be returned.\n */\nexport const detectDirective = function (text, type = null) {\n  try {\n    const commentWithoutDirectives = new RegExp(\n      `[%]{2}(?![{]${directiveWithoutOpen.source})(?=[}][%]{2}).*\\n`,\n      'ig'\n    );\n    text = text.trim().replace(commentWithoutDirectives, '').replace(/'/gm, '\"');\n    log.debug(\n      `Detecting diagram directive${type !== null ? ' type:' + type : ''} based on the text:${text}`\n    );\n    let match,\n      result = [];\n    while ((match = directive.exec(text)) !== null) {\n      // This is necessary to avoid infinite loops with zero-width matches\n      if (match.index === directive.lastIndex) {\n        directive.lastIndex++;\n      }\n      if (\n        (match && !type) ||\n        (type && match[1] && match[1].match(type)) ||\n        (type && match[2] && match[2].match(type))\n      ) {\n        let type = match[1] ? match[1] : match[2];\n        let args = match[3] ? match[3].trim() : match[4] ? JSON.parse(match[4].trim()) : null;\n        result.push({ type, args });\n      }\n    }\n    if (result.length === 0) {\n      result.push({ type: text, args: null });\n    }\n\n    return result.length === 1 ? result[0] : result;\n  } catch (error) {\n    log.error(\n      `ERROR: ${error.message} - Unable to parse directive\n      ${type !== null ? ' type:' + type : ''} based on the text:${text}`\n    );\n    return { type: null, args: null };\n  }\n};\n\n/**\n * @function detectType Detects the type of the graph text. Takes into consideration the possible\n *   existence of an %%init directive\n *\n *   ```mermaid\n *   %%{initialize: {\"startOnLoad\": true, logLevel: \"fatal\" }}%%\n *   graph LR\n *    a-->b\n *    b-->c\n *    c-->d\n *    d-->e\n *    e-->f\n *    f-->g\n *    g-->h\n * ```\n * @param {string} text The text defining the graph\n * @param {{\n *   class: { defaultRenderer: string } | undefined;\n *   state: { defaultRenderer: string } | undefined;\n *   flowchart: { defaultRenderer: string } | undefined;\n * }} [cnf]\n * @returns {string} A graph definition key\n */\nexport const detectType = function (text, cnf) {\n  text = text.replace(directive, '').replace(anyComment, '\\n');\n  if (text.match(/^\\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/)) {\n    return 'c4';\n  }\n\n  if (text.match(/^\\s*sequenceDiagram/)) {\n    return 'sequence';\n  }\n\n  if (text.match(/^\\s*gantt/)) {\n    return 'gantt';\n  }\n  if (text.match(/^\\s*classDiagram-v2/)) {\n    return 'classDiagram';\n  }\n  if (text.match(/^\\s*classDiagram/)) {\n    if (cnf && cnf.class && cnf.class.defaultRenderer === 'dagre-wrapper') return 'classDiagram';\n    return 'class';\n  }\n\n  if (text.match(/^\\s*stateDiagram-v2/)) {\n    return 'stateDiagram';\n  }\n\n  if (text.match(/^\\s*stateDiagram/)) {\n    if (cnf && cnf.class && cnf.state.defaultRenderer === 'dagre-wrapper') return 'stateDiagram';\n    return 'state';\n  }\n\n  if (text.match(/^\\s*gitGraph/)) {\n    return 'gitGraph';\n  }\n  if (text.match(/^\\s*flowchart/)) {\n    return 'flowchart-v2';\n  }\n\n  if (text.match(/^\\s*info/)) {\n    return 'info';\n  }\n  if (text.match(/^\\s*pie/)) {\n    return 'pie';\n  }\n\n  if (text.match(/^\\s*erDiagram/)) {\n    return 'er';\n  }\n\n  if (text.match(/^\\s*journey/)) {\n    return 'journey';\n  }\n\n  if (text.match(/^\\s*requirement/) || text.match(/^\\s*requirementDiagram/)) {\n    return 'requirement';\n  }\n  if (cnf && cnf.flowchart && cnf.flowchart.defaultRenderer === 'dagre-wrapper')\n    return 'flowchart-v2';\n\n  return 'flowchart';\n};\n\n/**\n * Caches results of functions based on input\n *\n * @param {Function} fn Function to run\n * @param {Function} resolver Function that resolves to an ID given arguments the `fn` takes\n * @returns {Function} An optimized caching function\n */\nconst memoize = (fn, resolver) => {\n  let cache = {};\n  return (...args) => {\n    let n = resolver ? resolver.apply(this, args) : args[0];\n    if (n in cache) {\n      return cache[n];\n    } else {\n      let result = fn(...args);\n      cache[n] = result;\n      return result;\n    }\n  };\n};\n\n/**\n * @function isSubstringInArray Detects whether a substring in present in a given array\n * @param {string} str The substring to detect\n * @param {Array} arr The array to search\n * @returns {number} The array index containing the substring or -1 if not present\n */\nexport const isSubstringInArray = function (str, arr) {\n  for (let i = 0; i < arr.length; i++) {\n    if (arr[i].match(str)) return i;\n  }\n  return -1;\n};\n\n/**\n * Returns a d3 curve given a curve name\n *\n * @param {string | undefined} interpolate The interpolation name\n * @param {any} defaultCurve The default curve to return\n * @returns {import('d3-shape').CurveFactory} The curve factory to use\n */\nexport const interpolateToCurve = (interpolate, defaultCurve) => {\n  if (!interpolate) {\n    return defaultCurve;\n  }\n  const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`;\n  return d3CurveTypes[curveName] || defaultCurve;\n};\n\n/**\n * Formats a URL string\n *\n * @param {string} linkStr String of the URL\n * @param {{ securityLevel: string }} config Configuration passed to MermaidJS\n * @returns {string | undefined} The formatted URL\n */\nexport const formatUrl = (linkStr, config) => {\n  let url = linkStr.trim();\n\n  if (url) {\n    if (config.securityLevel !== 'loose') {\n      return sanitizeUrl(url);\n    }\n\n    return url;\n  }\n};\n\n/**\n * Runs a function\n *\n * @param {string} functionName A dot seperated path to the function relative to the `window`\n * @param {...any} params Parameters to pass to the function\n */\nexport const runFunc = (functionName, ...params) => {\n  const arrPaths = functionName.split('.');\n\n  const len = arrPaths.length - 1;\n  const fnName = arrPaths[len];\n\n  let obj = window;\n  for (let i = 0; i < len; i++) {\n    obj = obj[arrPaths[i]];\n    if (!obj) return;\n  }\n\n  obj[fnName](...params);\n};\n\n/**\n * @typedef {object} Point A (x, y) point\n * @property {number} x The x value\n * @property {number} y The y value\n */\n\n/**\n * Finds the distance between two points using the Distance Formula\n *\n * @param {Point} p1 The first point\n * @param {Point} p2 The second point\n * @returns {number} The distance\n */\nconst distance = (p1, p2) =>\n  p1 && p2 ? Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)) : 0;\n\n/**\n * @param {Point[]} points List of points\n * @returns {Point}\n * @todo Give this a description\n */\nconst traverseEdge = (points) => {\n  let prevPoint;\n  let totalDistance = 0;\n\n  points.forEach((point) => {\n    totalDistance += distance(point, prevPoint);\n    prevPoint = point;\n  });\n\n  // Traverse half of total distance along points\n  let remainingDistance = totalDistance / 2;\n  let center = undefined;\n  prevPoint = undefined;\n  points.forEach((point) => {\n    if (prevPoint && !center) {\n      const vectorDistance = distance(point, prevPoint);\n      if (vectorDistance < remainingDistance) {\n        remainingDistance -= vectorDistance;\n      } else {\n        // The point is remainingDistance from prevPoint in the vector between prevPoint and point\n        // Calculate the coordinates\n        const distanceRatio = remainingDistance / vectorDistance;\n        if (distanceRatio <= 0) center = prevPoint;\n        if (distanceRatio >= 1) center = { x: point.x, y: point.y };\n        if (distanceRatio > 0 && distanceRatio < 1) {\n          center = {\n            x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x,\n            y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y,\n          };\n        }\n      }\n    }\n    prevPoint = point;\n  });\n  return center;\n};\n\n/**\n * Alias for `traverseEdge`\n *\n * @param {Point[]} points List of points\n * @returns {Point} Return result of `transverseEdge`\n */\nconst calcLabelPosition = (points) => {\n  if (points.length === 1) {\n    return points[0];\n  }\n  return traverseEdge(points);\n};\n\nconst calcCardinalityPosition = (isRelationTypePresent, points, initialPosition) => {\n  let prevPoint;\n  let totalDistance = 0; // eslint-disable-line\n  log.info('our points', points);\n  if (points[0] !== initialPosition) {\n    points = points.reverse();\n  }\n  points.forEach((point) => {\n    totalDistance += distance(point, prevPoint);\n    prevPoint = point;\n  });\n\n  // Traverse only 25 total distance along points to find cardinality point\n  const distanceToCardinalityPoint = 25;\n\n  let remainingDistance = distanceToCardinalityPoint;\n  let center;\n  prevPoint = undefined;\n  points.forEach((point) => {\n    if (prevPoint && !center) {\n      const vectorDistance = distance(point, prevPoint);\n      if (vectorDistance < remainingDistance) {\n        remainingDistance -= vectorDistance;\n      } else {\n        // The point is remainingDistance from prevPoint in the vector between prevPoint and point\n        // Calculate the coordinates\n        const distanceRatio = remainingDistance / vectorDistance;\n        if (distanceRatio <= 0) center = prevPoint;\n        if (distanceRatio >= 1) center = { x: point.x, y: point.y };\n        if (distanceRatio > 0 && distanceRatio < 1) {\n          center = {\n            x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x,\n            y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y,\n          };\n        }\n      }\n    }\n    prevPoint = point;\n  });\n  // if relation is present (Arrows will be added), change cardinality point off-set distance (d)\n  let d = isRelationTypePresent ? 10 : 5;\n  //Calculate Angle for x and y axis\n  let angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n  let cardinalityPosition = { x: 0, y: 0 };\n  //Calculation cardinality position using angle, center point on the line/curve but pendicular and with offset-distance\n  cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n  cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n  return cardinalityPosition;\n};\n\n/**\n * Position ['start_left', 'start_right', 'end_left', 'end_right']\n *\n * @param {any} terminalMarkerSize\n * @param {any} position\n * @param {any} _points\n * @returns {any}\n */\nconst calcTerminalLabelPosition = (terminalMarkerSize, position, _points) => {\n  // Todo looking to faster cloning method\n  let points = JSON.parse(JSON.stringify(_points));\n  let prevPoint;\n  let totalDistance = 0; // eslint-disable-line\n  log.info('our points', points);\n  if (position !== 'start_left' && position !== 'start_right') {\n    points = points.reverse();\n  }\n\n  points.forEach((point) => {\n    totalDistance += distance(point, prevPoint);\n    prevPoint = point;\n  });\n\n  // Traverse only 25 total distance along points to find cardinality point\n  const distanceToCardinalityPoint = 25 + terminalMarkerSize;\n\n  let remainingDistance = distanceToCardinalityPoint;\n  let center;\n  prevPoint = undefined;\n  points.forEach((point) => {\n    if (prevPoint && !center) {\n      const vectorDistance = distance(point, prevPoint);\n      if (vectorDistance < remainingDistance) {\n        remainingDistance -= vectorDistance;\n      } else {\n        // The point is remainingDistance from prevPoint in the vector between prevPoint and point\n        // Calculate the coordinates\n        const distanceRatio = remainingDistance / vectorDistance;\n        if (distanceRatio <= 0) center = prevPoint;\n        if (distanceRatio >= 1) center = { x: point.x, y: point.y };\n        if (distanceRatio > 0 && distanceRatio < 1) {\n          center = {\n            x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x,\n            y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y,\n          };\n        }\n      }\n    }\n    prevPoint = point;\n  });\n  // if relation is present (Arrows will be added), change cardinality point off-set distance (d)\n  let d = 10 + terminalMarkerSize * 0.5;\n  //Calculate Angle for x and y axis\n  let angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n\n  let cardinalityPosition = { x: 0, y: 0 };\n\n  //Calculation cardinality position using angle, center point on the line/curve but pendicular and with offset-distance\n\n  cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n  cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n  if (position === 'start_left') {\n    cardinalityPosition.x = Math.sin(angle + Math.PI) * d + (points[0].x + center.x) / 2;\n    cardinalityPosition.y = -Math.cos(angle + Math.PI) * d + (points[0].y + center.y) / 2;\n  }\n  if (position === 'end_right') {\n    cardinalityPosition.x = Math.sin(angle - Math.PI) * d + (points[0].x + center.x) / 2 - 5;\n    cardinalityPosition.y = -Math.cos(angle - Math.PI) * d + (points[0].y + center.y) / 2 - 5;\n  }\n  if (position === 'end_left') {\n    cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2 - 5;\n    cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2 - 5;\n  }\n  return cardinalityPosition;\n};\n\n/**\n * Gets styles from an array of declarations\n *\n * @param {string[]} arr Declarations\n * @returns {{ style: string; labelStyle: string }} The styles grouped as strings\n */\nexport const getStylesFromArray = (arr) => {\n  let style = '';\n  let labelStyle = '';\n\n  for (let i = 0; i < arr.length; i++) {\n    if (typeof arr[i] !== 'undefined') {\n      // add text properties to label style definition\n      if (arr[i].startsWith('color:') || arr[i].startsWith('text-align:')) {\n        labelStyle = labelStyle + arr[i] + ';';\n      } else {\n        style = style + arr[i] + ';';\n      }\n    }\n  }\n\n  return { style: style, labelStyle: labelStyle };\n};\n\nlet cnt = 0;\nexport const generateId = () => {\n  cnt++;\n  return 'id-' + Math.random().toString(36).substr(2, 12) + '-' + cnt;\n};\n\n/**\n * @param {any} length\n * @returns {any}\n */\nfunction makeid(length) {\n  var result = '';\n  var characters = '0123456789abcdef';\n  var charactersLength = characters.length;\n  for (var i = 0; i < length; i++) {\n    result += characters.charAt(Math.floor(Math.random() * charactersLength));\n  }\n  return result;\n}\n\nexport const random = (options) => {\n  return makeid(options.length);\n};\n\n/**\n * @function assignWithDepth Extends the functionality of {@link ObjectConstructor.assign} with the\n *   ability to merge arbitrary-depth objects For each key in src with path `k` (recursively)\n *   performs an Object.assign(dst[`k`], src[`k`]) with a slight change from the typical handling of\n *   undefined for dst[`k`]: instead of raising an error, dst[`k`] is auto-initialized to {} and\n *   effectively merged with src[`k`]<p> Additionally, dissimilar types will not clobber unless the\n *   config.clobber parameter === true. Example:\n *\n *   ```js\n *   let config_0 = { foo: { bar: 'bar' }, bar: 'foo' };\n *   let config_1 = { foo: 'foo', bar: 'bar' };\n *   let result = assignWithDepth(config_0, config_1);\n *   console.log(result);\n *   //-> result: { foo: { bar: 'bar' }, bar: 'bar' }\n *   ```\n *\n *   Traditional Object.assign would have clobbered foo in config_0 with foo in config_1. If src is a\n *   destructured array of objects and dst is not an array, assignWithDepth will apply each element\n *   of src to dst in order.\n * @param dst\n * @param src\n * @param config\n * @param dst\n * @param src\n * @param config\n * @param dst\n * @param src\n * @param config\n * @param {any} dst - The destination of the merge\n * @param {any} src - The source object(s) to merge into destination\n * @param {{ depth: number; clobber: boolean }} [config={ depth: 2, clobber: false }] - Depth: depth\n *   to traverse within src and dst for merging - clobber: should dissimilar types clobber (default:\n *   { depth: 2, clobber: false }). Default is `{ depth: 2, clobber: false }`\n * @returns {any}\n */\nexport const assignWithDepth = function (dst, src, config) {\n  const { depth, clobber } = Object.assign({ depth: 2, clobber: false }, config);\n  if (Array.isArray(src) && !Array.isArray(dst)) {\n    src.forEach((s) => assignWithDepth(dst, s, config));\n    return dst;\n  } else if (Array.isArray(src) && Array.isArray(dst)) {\n    src.forEach((s) => {\n      if (dst.indexOf(s) === -1) {\n        dst.push(s);\n      }\n    });\n    return dst;\n  }\n  if (typeof dst === 'undefined' || depth <= 0) {\n    if (dst !== undefined && dst !== null && typeof dst === 'object' && typeof src === 'object') {\n      return Object.assign(dst, src);\n    } else {\n      return src;\n    }\n  }\n  if (typeof src !== 'undefined' && typeof dst === 'object' && typeof src === 'object') {\n    Object.keys(src).forEach((key) => {\n      if (\n        typeof src[key] === 'object' &&\n        (dst[key] === undefined || typeof dst[key] === 'object')\n      ) {\n        if (dst[key] === undefined) {\n          dst[key] = Array.isArray(src[key]) ? [] : {};\n        }\n        dst[key] = assignWithDepth(dst[key], src[key], { depth: depth - 1, clobber });\n      } else if (clobber || (typeof dst[key] !== 'object' && typeof src[key] !== 'object')) {\n        dst[key] = src[key];\n      }\n    });\n  }\n  return dst;\n};\n\nexport const getTextObj = function () {\n  return {\n    x: 0,\n    y: 0,\n    fill: undefined,\n    anchor: 'start',\n    style: '#666',\n    width: 100,\n    height: 100,\n    textMargin: 0,\n    rx: 0,\n    ry: 0,\n    valign: undefined,\n  };\n};\n\n/**\n * Adds text to an element\n *\n * @param {SVGElement} elem Element to add text to\n * @param {{\n *   text: string;\n *   x: number;\n *   y: number;\n *   anchor: 'start' | 'middle' | 'end';\n *   fontFamily: string;\n *   fontSize: string | number;\n *   fontWeight: string | number;\n *   fill: string;\n *   class: string | undefined;\n *   textMargin: number;\n * }} textData\n * @returns {SVGTextElement} Text element with given styling and content\n */\nexport const drawSimpleText = function (elem, textData) {\n  // Remove and ignore br:s\n  const nText = textData.text.replace(common.lineBreakRegex, ' ');\n\n  const textElem = elem.append('text');\n  textElem.attr('x', textData.x);\n  textElem.attr('y', textData.y);\n  textElem.style('text-anchor', textData.anchor);\n  textElem.style('font-family', textData.fontFamily);\n  textElem.style('font-size', textData.fontSize);\n  textElem.style('font-weight', textData.fontWeight);\n  textElem.attr('fill', textData.fill);\n  if (typeof textData.class !== 'undefined') {\n    textElem.attr('class', textData.class);\n  }\n\n  const span = textElem.append('tspan');\n  span.attr('x', textData.x + textData.textMargin * 2);\n  span.attr('fill', textData.fill);\n  span.text(nText);\n\n  return textElem;\n};\n\nexport const wrapLabel = memoize(\n  (label, maxWidth, config) => {\n    if (!label) {\n      return label;\n    }\n    config = Object.assign(\n      { fontSize: 12, fontWeight: 400, fontFamily: 'Arial', joinWith: '<br/>' },\n      config\n    );\n    if (common.lineBreakRegex.test(label)) {\n      return label;\n    }\n    const words = label.split(' ');\n    const completedLines = [];\n    let nextLine = '';\n    words.forEach((word, index) => {\n      const wordLength = calculateTextWidth(`${word} `, config);\n      const nextLineLength = calculateTextWidth(nextLine, config);\n      if (wordLength > maxWidth) {\n        const { hyphenatedStrings, remainingWord } = breakString(word, maxWidth, '-', config);\n        completedLines.push(nextLine, ...hyphenatedStrings);\n        nextLine = remainingWord;\n      } else if (nextLineLength + wordLength >= maxWidth) {\n        completedLines.push(nextLine);\n        nextLine = word;\n      } else {\n        nextLine = [nextLine, word].filter(Boolean).join(' ');\n      }\n      const currentWord = index + 1;\n      const isLastWord = currentWord === words.length;\n      if (isLastWord) {\n        completedLines.push(nextLine);\n      }\n    });\n    return completedLines.filter((line) => line !== '').join(config.joinWith);\n  },\n  (label, maxWidth, config) =>\n    `${label}-${maxWidth}-${config.fontSize}-${config.fontWeight}-${config.fontFamily}-${config.joinWith}`\n);\n\nconst breakString = memoize(\n  (word, maxWidth, hyphenCharacter = '-', config) => {\n    config = Object.assign(\n      { fontSize: 12, fontWeight: 400, fontFamily: 'Arial', margin: 0 },\n      config\n    );\n    const characters = word.split('');\n    const lines = [];\n    let currentLine = '';\n    characters.forEach((character, index) => {\n      const nextLine = `${currentLine}${character}`;\n      const lineWidth = calculateTextWidth(nextLine, config);\n      if (lineWidth >= maxWidth) {\n        const currentCharacter = index + 1;\n        const isLastLine = characters.length === currentCharacter;\n        const hyphenatedNextLine = `${nextLine}${hyphenCharacter}`;\n        lines.push(isLastLine ? nextLine : hyphenatedNextLine);\n        currentLine = '';\n      } else {\n        currentLine = nextLine;\n      }\n    });\n    return { hyphenatedStrings: lines, remainingWord: currentLine };\n  },\n  (word, maxWidth, hyphenCharacter = '-', config) =>\n    `${word}-${maxWidth}-${hyphenCharacter}-${config.fontSize}-${config.fontWeight}-${config.fontFamily}`\n);\n\n/**\n * This calculates the text's height, taking into account the wrap breaks and both the statically\n * configured height, width, and the length of the text (in pixels).\n *\n * If the wrapped text text has greater height, we extend the height, so it's value won't overflow.\n *\n * @param {any} text The text to measure\n * @param {any} config - The config for fontSize, fontFamily, and fontWeight all impacting the resulting size\n * @returns {any} - The height for the given text\n */\nexport const calculateTextHeight = function (text, config) {\n  config = Object.assign(\n    { fontSize: 12, fontWeight: 400, fontFamily: 'Arial', margin: 15 },\n    config\n  );\n  return calculateTextDimensions(text, config).height;\n};\n\n/**\n * This calculates the width of the given text, font size and family.\n *\n * @param {any} text - The text to calculate the width of\n * @param {any} config - The config for fontSize, fontFamily, and fontWeight all impacting the resulting size\n * @returns {any} - The width for the given text\n */\nexport const calculateTextWidth = function (text, config) {\n  config = Object.assign({ fontSize: 12, fontWeight: 400, fontFamily: 'Arial' }, config);\n  return calculateTextDimensions(text, config).width;\n};\n\n/**\n * This calculates the dimensions of the given text, font size, font family, font weight, and margins.\n *\n * @param {any} text - The text to calculate the width of\n * @param {any} config - The config for fontSize, fontFamily, fontWeight, and margin all impacting\n *   the resulting size\n * @returns - The width for the given text\n */\nexport const calculateTextDimensions = memoize(\n  function (text, config) {\n    config = Object.assign({ fontSize: 12, fontWeight: 400, fontFamily: 'Arial' }, config);\n    const { fontSize, fontFamily, fontWeight } = config;\n    if (!text) {\n      return { width: 0, height: 0 };\n    }\n\n    // We can't really know if the user supplied font family will render on the user agent;\n    // thus, we'll take the max width between the user supplied font family, and a default\n    // of sans-serif.\n    const fontFamilies = ['sans-serif', fontFamily];\n    const lines = text.split(common.lineBreakRegex);\n    let dims = [];\n\n    const body = select('body');\n    // We don't want to leak DOM elements - if a removal operation isn't available\n    // for any reason, do not continue.\n    if (!body.remove) {\n      return { width: 0, height: 0, lineHeight: 0 };\n    }\n\n    const g = body.append('svg');\n\n    for (let fontFamily of fontFamilies) {\n      let cheight = 0;\n      let dim = { width: 0, height: 0, lineHeight: 0 };\n      for (let line of lines) {\n        const textObj = getTextObj();\n        textObj.text = line;\n        const textElem = drawSimpleText(g, textObj)\n          .style('font-size', fontSize)\n          .style('font-weight', fontWeight)\n          .style('font-family', fontFamily);\n\n        let bBox = (textElem._groups || textElem)[0][0].getBBox();\n        dim.width = Math.round(Math.max(dim.width, bBox.width));\n        cheight = Math.round(bBox.height);\n        dim.height += cheight;\n        dim.lineHeight = Math.round(Math.max(dim.lineHeight, cheight));\n      }\n      dims.push(dim);\n    }\n\n    g.remove();\n\n    let index =\n      isNaN(dims[1].height) ||\n      isNaN(dims[1].width) ||\n      isNaN(dims[1].lineHeight) ||\n      (dims[0].height > dims[1].height &&\n        dims[0].width > dims[1].width &&\n        dims[0].lineHeight > dims[1].lineHeight)\n        ? 0\n        : 1;\n    return dims[index];\n  },\n  (text, config) => `${text}-${config.fontSize}-${config.fontWeight}-${config.fontFamily}`\n);\n\n/**\n * Applys d3 attributes\n *\n * @param {any} d3Elem D3 Element to apply the attributes onto\n * @param {[string, string][]} attrs Object.keys equivalent format of key to value mapping of attributes\n */\nconst d3Attrs = function (d3Elem, attrs) {\n  for (let attr of attrs) {\n    d3Elem.attr(attr[0], attr[1]);\n  }\n};\n\n/**\n * Gives attributes for an SVG's size given arguments\n *\n * @param {number} height The height of the SVG\n * @param {number} width The width of the SVG\n * @param {boolean} useMaxWidth Whether or not to use max-width and set width to 100%\n * @returns {Map<'height' | 'width' | 'style', string>} Attributes for the SVG\n */\nexport const calculateSvgSizeAttrs = function (height, width, useMaxWidth) {\n  let attrs = new Map();\n  attrs.set('height', height);\n  if (useMaxWidth) {\n    attrs.set('width', '100%');\n    attrs.set('style', `max-width: ${width}px;`);\n  } else {\n    attrs.set('width', width);\n  }\n  return attrs;\n};\n\n/**\n * Applies attributes from `calculateSvgSizeAttrs`\n *\n * @param {SVGSVGElement} svgElem The SVG Element to configure\n * @param {number} height The height of the SVG\n * @param {number} width The width of the SVG\n * @param {boolean} useMaxWidth Whether or not to use max-width and set width to 100%\n */\nexport const configureSvgSize = function (svgElem, height, width, useMaxWidth) {\n  const attrs = calculateSvgSizeAttrs(height, width, useMaxWidth);\n  d3Attrs(svgElem, attrs);\n};\nexport const setupGraphViewbox = function (graph, svgElem, padding, useMaxWidth) {\n  const svgBounds = svgElem.node().getBBox();\n  const sWidth = svgBounds.width;\n  const sHeight = svgBounds.height;\n\n  let width = graph._label.width;\n  let height = graph._label.height;\n  let tx = 0;\n  let ty = 0;\n  if (sWidth > width) {\n    tx = (sWidth - width) / 2 + padding;\n    width = sWidth + padding * 2;\n  } else {\n    if (Math.abs(sWidth - width) >= 2 * padding + 1) {\n      width = width - padding;\n    }\n  }\n  if (sHeight > height) {\n    ty = (sHeight - height) / 2 + padding;\n    height = sHeight + padding * 2;\n  }\n  configureSvgSize(svgElem, height, width, useMaxWidth);\n\n  // Ensure the viewBox includes the whole svgBounds area with extra space for padding\n  const vBox = `0 0 ${width} ${height}`;\n  log.debug(\n    'Graph.label',\n    graph._label,\n    'swidth',\n    sWidth,\n    'sheight',\n    sHeight,\n    'width',\n    width,\n    'height',\n    height,\n    'tx',\n    tx,\n    'ty',\n    ty,\n    'vBox',\n    vBox\n  );\n  svgElem.attr('viewBox', vBox);\n  svgElem.select('g').attr('transform', `translate(${tx}, ${ty})`);\n};\n\nexport const initIdGenerator = class iterator {\n  constructor(deterministic, seed) {\n    this.deterministic = deterministic;\n    this.seed = seed;\n\n    this.count = seed ? seed.length : 0;\n  }\n\n  next() {\n    if (!this.deterministic) return Date.now();\n\n    return this.count++;\n  }\n};\n\nlet decoder;\n\n/**\n * Decodes HTML, source: {@link https://github.com/shrpne/entity-decode/blob/v2.0.1/browser.js}\n *\n * @param {string} html HTML as a string\n * @returns Unescaped HTML\n */\nexport const entityDecode = function (html) {\n  decoder = decoder || document.createElement('div');\n  // Escape HTML before decoding for HTML Entities\n  html = escape(html).replace(/%26/g, '&').replace(/%23/g, '#').replace(/%3B/g, ';');\n  // decoding\n  decoder.innerHTML = html;\n  return unescape(decoder.textContent);\n};\n\n/**\n * Sanitizes directive objects\n *\n * @param {object} args Directive's JSON\n */\nexport const directiveSanitizer = (args) => {\n  log.debug('directiveSanitizer called with', args);\n  if (typeof args === 'object') {\n    // check for array\n    if (args.length) {\n      args.forEach((arg) => directiveSanitizer(arg));\n    } else {\n      // This is an object\n      Object.keys(args).forEach((key) => {\n        log.debug('Checking key', key);\n        if (key.indexOf('__') === 0) {\n          log.debug('sanitize deleting __ option', key);\n          delete args[key];\n        }\n\n        if (key.indexOf('proto') >= 0) {\n          log.debug('sanitize deleting proto option', key);\n          delete args[key];\n        }\n\n        if (key.indexOf('constr') >= 0) {\n          log.debug('sanitize deleting constr option', key);\n          delete args[key];\n        }\n\n        if (key.indexOf('themeCSS') >= 0) {\n          log.debug('sanitizing themeCss option');\n          args[key] = sanitizeCss(args[key]);\n        }\n        if (key.indexOf('fontFamily') >= 0) {\n          log.debug('sanitizing fontFamily option');\n          args[key] = sanitizeCss(args[key]);\n        }\n        if (key.indexOf('altFontFamily') >= 0) {\n          log.debug('sanitizing altFontFamily option');\n          args[key] = sanitizeCss(args[key]);\n        }\n        if (configKeys.indexOf(key) < 0) {\n          log.debug('sanitize deleting option', key);\n          delete args[key];\n        } else {\n          if (typeof args[key] === 'object') {\n            log.debug('sanitize deleting object', key);\n            directiveSanitizer(args[key]);\n          }\n        }\n      });\n    }\n  }\n  if (args.themeVariables) {\n    const kArr = Object.keys(args.themeVariables);\n    for (let i = 0; i < kArr.length; i++) {\n      const k = kArr[i];\n      const val = args.themeVariables[k];\n      if (val && val.match && !val.match(/^[a-zA-Z0-9#,\";()%. ]+$/)) {\n        args.themeVariables[k] = '';\n      }\n    }\n  }\n  log.debug('After sanitization', args);\n};\nexport const sanitizeCss = (str) => {\n  let startCnt = 0;\n  let endCnt = 0;\n\n  for (let i = 0; i < str.length; i++) {\n    if (startCnt < endCnt) {\n      return '{ /* ERROR: Unbalanced CSS */ }';\n    }\n    if (str[i] === '{') {\n      startCnt++;\n    } else if (str[i] === '}') {\n      endCnt++;\n    }\n  }\n  if (startCnt !== endCnt) {\n    return '{ /* ERROR: Unbalanced CSS */ }';\n  }\n  // Todo add more checks here\n  return str;\n};\n\nexport default {\n  assignWithDepth,\n  wrapLabel,\n  calculateTextHeight,\n  calculateTextWidth,\n  calculateTextDimensions,\n  calculateSvgSizeAttrs,\n  configureSvgSize,\n  setupGraphViewbox,\n  detectInit,\n  detectDirective,\n  detectType,\n  isSubstringInArray,\n  interpolateToCurve,\n  calcLabelPosition,\n  calcCardinalityPosition,\n  calcTerminalLabelPosition,\n  formatUrl,\n  getStylesFromArray,\n  generateId,\n  random,\n  memoize,\n  runFunc,\n  entityDecode,\n  initIdGenerator: initIdGenerator,\n  directiveSanitizer,\n  sanitizeCss,\n};\n","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n  }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n  var res = '';\n  var lastSegmentLength = 0;\n  var lastSlash = -1;\n  var dots = 0;\n  var code;\n  for (var i = 0; i <= path.length; ++i) {\n    if (i < path.length)\n      code = path.charCodeAt(i);\n    else if (code === 47 /*/*/)\n      break;\n    else\n      code = 47 /*/*/;\n    if (code === 47 /*/*/) {\n      if (lastSlash === i - 1 || dots === 1) {\n        // NOOP\n      } else if (lastSlash !== i - 1 && dots === 2) {\n        if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n          if (res.length > 2) {\n            var lastSlashIndex = res.lastIndexOf('/');\n            if (lastSlashIndex !== res.length - 1) {\n              if (lastSlashIndex === -1) {\n                res = '';\n                lastSegmentLength = 0;\n              } else {\n                res = res.slice(0, lastSlashIndex);\n                lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n              }\n              lastSlash = i;\n              dots = 0;\n              continue;\n            }\n          } else if (res.length === 2 || res.length === 1) {\n            res = '';\n            lastSegmentLength = 0;\n            lastSlash = i;\n            dots = 0;\n            continue;\n          }\n        }\n        if (allowAboveRoot) {\n          if (res.length > 0)\n            res += '/..';\n          else\n            res = '..';\n          lastSegmentLength = 2;\n        }\n      } else {\n        if (res.length > 0)\n          res += '/' + path.slice(lastSlash + 1, i);\n        else\n          res = path.slice(lastSlash + 1, i);\n        lastSegmentLength = i - lastSlash - 1;\n      }\n      lastSlash = i;\n      dots = 0;\n    } else if (code === 46 /*.*/ && dots !== -1) {\n      ++dots;\n    } else {\n      dots = -1;\n    }\n  }\n  return res;\n}\n\nfunction _format(sep, pathObject) {\n  var dir = pathObject.dir || pathObject.root;\n  var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n  if (!dir) {\n    return base;\n  }\n  if (dir === pathObject.root) {\n    return dir + base;\n  }\n  return dir + sep + base;\n}\n\nvar posix = {\n  // path.resolve([from ...], to)\n  resolve: function resolve() {\n    var resolvedPath = '';\n    var resolvedAbsolute = false;\n    var cwd;\n\n    for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n      var path;\n      if (i >= 0)\n        path = arguments[i];\n      else {\n        if (cwd === undefined)\n          cwd = process.cwd();\n        path = cwd;\n      }\n\n      assertPath(path);\n\n      // Skip empty entries\n      if (path.length === 0) {\n        continue;\n      }\n\n      resolvedPath = path + '/' + resolvedPath;\n      resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    }\n\n    // At this point the path should be resolved to a full absolute path, but\n    // handle relative paths to be safe (might happen when process.cwd() fails)\n\n    // Normalize the path\n    resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n    if (resolvedAbsolute) {\n      if (resolvedPath.length > 0)\n        return '/' + resolvedPath;\n      else\n        return '/';\n    } else if (resolvedPath.length > 0) {\n      return resolvedPath;\n    } else {\n      return '.';\n    }\n  },\n\n  normalize: function normalize(path) {\n    assertPath(path);\n\n    if (path.length === 0) return '.';\n\n    var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n    // Normalize the path\n    path = normalizeStringPosix(path, !isAbsolute);\n\n    if (path.length === 0 && !isAbsolute) path = '.';\n    if (path.length > 0 && trailingSeparator) path += '/';\n\n    if (isAbsolute) return '/' + path;\n    return path;\n  },\n\n  isAbsolute: function isAbsolute(path) {\n    assertPath(path);\n    return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n  },\n\n  join: function join() {\n    if (arguments.length === 0)\n      return '.';\n    var joined;\n    for (var i = 0; i < arguments.length; ++i) {\n      var arg = arguments[i];\n      assertPath(arg);\n      if (arg.length > 0) {\n        if (joined === undefined)\n          joined = arg;\n        else\n          joined += '/' + arg;\n      }\n    }\n    if (joined === undefined)\n      return '.';\n    return posix.normalize(joined);\n  },\n\n  relative: function relative(from, to) {\n    assertPath(from);\n    assertPath(to);\n\n    if (from === to) return '';\n\n    from = posix.resolve(from);\n    to = posix.resolve(to);\n\n    if (from === to) return '';\n\n    // Trim any leading backslashes\n    var fromStart = 1;\n    for (; fromStart < from.length; ++fromStart) {\n      if (from.charCodeAt(fromStart) !== 47 /*/*/)\n        break;\n    }\n    var fromEnd = from.length;\n    var fromLen = fromEnd - fromStart;\n\n    // Trim any leading backslashes\n    var toStart = 1;\n    for (; toStart < to.length; ++toStart) {\n      if (to.charCodeAt(toStart) !== 47 /*/*/)\n        break;\n    }\n    var toEnd = to.length;\n    var toLen = toEnd - toStart;\n\n    // Compare paths to find the longest common path from root\n    var length = fromLen < toLen ? fromLen : toLen;\n    var lastCommonSep = -1;\n    var i = 0;\n    for (; i <= length; ++i) {\n      if (i === length) {\n        if (toLen > length) {\n          if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n            // We get here if `from` is the exact base path for `to`.\n            // For example: from='/foo/bar'; to='/foo/bar/baz'\n            return to.slice(toStart + i + 1);\n          } else if (i === 0) {\n            // We get here if `from` is the root\n            // For example: from='/'; to='/foo'\n            return to.slice(toStart + i);\n          }\n        } else if (fromLen > length) {\n          if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n            // We get here if `to` is the exact base path for `from`.\n            // For example: from='/foo/bar/baz'; to='/foo/bar'\n            lastCommonSep = i;\n          } else if (i === 0) {\n            // We get here if `to` is the root.\n            // For example: from='/foo'; to='/'\n            lastCommonSep = 0;\n          }\n        }\n        break;\n      }\n      var fromCode = from.charCodeAt(fromStart + i);\n      var toCode = to.charCodeAt(toStart + i);\n      if (fromCode !== toCode)\n        break;\n      else if (fromCode === 47 /*/*/)\n        lastCommonSep = i;\n    }\n\n    var out = '';\n    // Generate the relative path based on the path difference between `to`\n    // and `from`\n    for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n      if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n        if (out.length === 0)\n          out += '..';\n        else\n          out += '/..';\n      }\n    }\n\n    // Lastly, append the rest of the destination (`to`) path that comes after\n    // the common path parts\n    if (out.length > 0)\n      return out + to.slice(toStart + lastCommonSep);\n    else {\n      toStart += lastCommonSep;\n      if (to.charCodeAt(toStart) === 47 /*/*/)\n        ++toStart;\n      return to.slice(toStart);\n    }\n  },\n\n  _makeLong: function _makeLong(path) {\n    return path;\n  },\n\n  dirname: function dirname(path) {\n    assertPath(path);\n    if (path.length === 0) return '.';\n    var code = path.charCodeAt(0);\n    var hasRoot = code === 47 /*/*/;\n    var end = -1;\n    var matchedSlash = true;\n    for (var i = path.length - 1; i >= 1; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          if (!matchedSlash) {\n            end = i;\n            break;\n          }\n        } else {\n        // We saw the first non-path separator\n        matchedSlash = false;\n      }\n    }\n\n    if (end === -1) return hasRoot ? '/' : '.';\n    if (hasRoot && end === 1) return '//';\n    return path.slice(0, end);\n  },\n\n  basename: function basename(path, ext) {\n    if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n    assertPath(path);\n\n    var start = 0;\n    var end = -1;\n    var matchedSlash = true;\n    var i;\n\n    if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n      if (ext.length === path.length && ext === path) return '';\n      var extIdx = ext.length - 1;\n      var firstNonSlashEnd = -1;\n      for (i = path.length - 1; i >= 0; --i) {\n        var code = path.charCodeAt(i);\n        if (code === 47 /*/*/) {\n            // If we reached a path separator that was not part of a set of path\n            // separators at the end of the string, stop now\n            if (!matchedSlash) {\n              start = i + 1;\n              break;\n            }\n          } else {\n          if (firstNonSlashEnd === -1) {\n            // We saw the first non-path separator, remember this index in case\n            // we need it if the extension ends up not matching\n            matchedSlash = false;\n            firstNonSlashEnd = i + 1;\n          }\n          if (extIdx >= 0) {\n            // Try to match the explicit extension\n            if (code === ext.charCodeAt(extIdx)) {\n              if (--extIdx === -1) {\n                // We matched the extension, so mark this as the end of our path\n                // component\n                end = i;\n              }\n            } else {\n              // Extension does not match, so our result is the entire path\n              // component\n              extIdx = -1;\n              end = firstNonSlashEnd;\n            }\n          }\n        }\n      }\n\n      if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n      return path.slice(start, end);\n    } else {\n      for (i = path.length - 1; i >= 0; --i) {\n        if (path.charCodeAt(i) === 47 /*/*/) {\n            // If we reached a path separator that was not part of a set of path\n            // separators at the end of the string, stop now\n            if (!matchedSlash) {\n              start = i + 1;\n              break;\n            }\n          } else if (end === -1) {\n          // We saw the first non-path separator, mark this as the end of our\n          // path component\n          matchedSlash = false;\n          end = i + 1;\n        }\n      }\n\n      if (end === -1) return '';\n      return path.slice(start, end);\n    }\n  },\n\n  extname: function extname(path) {\n    assertPath(path);\n    var startDot = -1;\n    var startPart = 0;\n    var end = -1;\n    var matchedSlash = true;\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    var preDotState = 0;\n    for (var i = path.length - 1; i >= 0; --i) {\n      var code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            startPart = i + 1;\n            break;\n          }\n          continue;\n        }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n          // If this is our first dot, mark it as the start of our extension\n          if (startDot === -1)\n            startDot = i;\n          else if (preDotState !== 1)\n            preDotState = 1;\n      } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (startDot === -1 || end === -1 ||\n        // We saw a non-dot character immediately before the dot\n        preDotState === 0 ||\n        // The (right-most) trimmed path component is exactly '..'\n        preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      return '';\n    }\n    return path.slice(startDot, end);\n  },\n\n  format: function format(pathObject) {\n    if (pathObject === null || typeof pathObject !== 'object') {\n      throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n    }\n    return _format('/', pathObject);\n  },\n\n  parse: function parse(path) {\n    assertPath(path);\n\n    var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n    if (path.length === 0) return ret;\n    var code = path.charCodeAt(0);\n    var isAbsolute = code === 47 /*/*/;\n    var start;\n    if (isAbsolute) {\n      ret.root = '/';\n      start = 1;\n    } else {\n      start = 0;\n    }\n    var startDot = -1;\n    var startPart = 0;\n    var end = -1;\n    var matchedSlash = true;\n    var i = path.length - 1;\n\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    var preDotState = 0;\n\n    // Get non-dir info\n    for (; i >= start; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            startPart = i + 1;\n            break;\n          }\n          continue;\n        }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n          // If this is our first dot, mark it as the start of our extension\n          if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n        } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (startDot === -1 || end === -1 ||\n    // We saw a non-dot character immediately before the dot\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly '..'\n    preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      if (end !== -1) {\n        if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n      }\n    } else {\n      if (startPart === 0 && isAbsolute) {\n        ret.name = path.slice(1, startDot);\n        ret.base = path.slice(1, end);\n      } else {\n        ret.name = path.slice(startPart, startDot);\n        ret.base = path.slice(startPart, end);\n      }\n      ret.ext = path.slice(startDot, end);\n    }\n\n    if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n    return ret;\n  },\n\n  sep: '/',\n  delimiter: ':',\n  win32: null,\n  posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n","module.exports = require(\"@braintree/sanitize-url\");","module.exports = require(\"d3\");","module.exports = require(\"dagre\");","module.exports = require(\"dagre-d3\");","module.exports = require(\"dagre-d3/lib/label/add-html-label.js\");","module.exports = require(\"dompurify\");","module.exports = require(\"graphlib\");","module.exports = require(\"khroma\");","module.exports = require(\"moment-mini\");","module.exports = require(\"stylis\");","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the module cache\n__webpack_require__.c = __webpack_module_cache__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","","// module cache are used so entry inlining is disabled\n// startup\n// Load entry module and return exports\nvar __webpack_exports__ = __webpack_require__(__webpack_require__.s = \"./src/mermaid.js\");\n",""],"names":["addSVGAccessibilityFields","yy_parser","svg","id","insert","title_string","getAccTitle","description","getAccDescription","attr","text","sanitizeText","_sanitizeText","getConfig","title","diagramTitle","txt","clear","setAccTitle","replace","setAccDescription","setDiagramTitle","getDiagramTitle","assignWithDepth","log","theme","config","defaultConfig","Object","freeze","siteConfig","configFromInitialize","directives","currentConfig","updateCurrentConfig","siteCfg","_directives","cfg","sumOfDirectives","i","length","d","sanitize","tmpConfigFromInitialize","themeVariables","getThemeVariables","setSiteConfig","conf","saveConfigFromInitialize","updateSiteConfig","getSiteConfig","setConfig","options","keys","secure","forEach","key","debug","indexOf","addDirective","directive","fontFamily","push","reset","intersectRect","createLabel","select","evaluate","rect","parent","node","trace","shapeSvg","class","label","appendChild","labelText","labelStyle","undefined","bbox","getBBox","flowchart","htmlLabels","div","children","dv","getBoundingClientRect","width","height","padding","halfPadding","diff","JSON","stringify","style","rx","ry","x","y","rectBox","intersect","point","noteGroup","roundedWithTitle","classes","innerRect","append","divider","shapes","clusterElems","insertCluster","elem","shape","getClusterTitleWidth","removeChild","positionCluster","info","el","sanitizeTxt","applyStyle","dom","styleFn","addHtmlLabel","fo","document","createElementNS","labelClass","isNode","html","_vertexText","isTitle","vertexText","s","vertexNode","svgLabel","setAttribute","rows","split","Array","isArray","j","tspan","setAttributeNS","textContent","trim","line","curveBasis","utils","edgeLabels","terminalLabels","insertEdgeLabel","edge","labelElement","edgeLabel","startLabelLeft","startLabelElement","startEdgeLabelLeft","inner","slBox","startLeft","setTerminalWidth","startLabelRight","startEdgeLabelRight","startRight","endLabelLeft","endLabelElement","endEdgeLabelLeft","endLeft","endLabelRight","endEdgeLabelRight","endRight","value","positionEdgeLabel","paths","path","updatedPath","originalPath","pos","calcLabelPosition","calcTerminalLabelPosition","arrowTypeStart","arrowTypeEnd","outsideNode","dx","Math","abs","dy","w","h","intersection","outsidePoint","insidePoint","warn","r","Q","R","q","res","_x","_y","cutPathAtIntersect","_points","boundryNode","points","lastPointOutside","isInside","inter","pointPresent","p","find","e","insertEdge","clusterDb","diagramType","graph","pointsHasChanged","tail","v","head","slice","unshift","toCluster","fromCluster","reverse","lineData","filter","Number","isNaN","curve","lineFunction","strokeClasses","thickness","pattern","svgPath","url","state","arrowMarkerAbsolute","window","location","protocol","host","pathname","search","dagre","graphlib","insertMarkers","updateNodeBounds","clearGraphlib","adjustClustersAndEdges","findNonClusterChild","sortNodesByHierarchy","insertNode","positionNode","clearNodes","setNodeElem","clearClusters","clearEdges","recursiveRender","_elem","diagramtype","parentCluster","json","write","dir","rankdir","nodes","edges","clusters","edgePaths","data","parse","clusterData","setNode","setParent","clusterNode","o","newEl","name","layout","n","type","render","markers","circle","ellipse","polygon","intersectEllipse","intersectCircle","cx","cy","px","py","det","sqrt","intersectLine","p1","p2","q1","q2","a1","a2","b1","b2","c1","c2","r1","r2","r3","r4","denom","offset","num","sameSign","module","exports","intersectNode","intersectPolygon","polyPoints","x1","y1","intersections","minX","POSITIVE_INFINITY","minY","entry","min","left","top","sort","pdx","pdy","distp","qdx","qdy","distq","sx","sy","markerArray","markerName","extension","composition","aggregation","dependency","cross","barb","decendants","parents","isDecendant","ancenstorId","edgeInCluster","clusterId","copy","newGraph","rootId","setEdge","error","removeNode","extractDecendants","concat","validate","_id","getAnchorId","externalConnections","depth","d1","d2","removeEdge","specialId","domId","edge1","edge2","extractor","hasChildren","graphSettings","clusterGraph","Graph","multigraph","compound","setGraph","nodesep","ranksep","marginx","marginy","setDefaultEdgeLabel","sorter","result","assign","sorted","labelHelper","insertPolygonShape","note","parseMember","question","questionElem","choice","map","join","hexagon","f","m","hex","rect_left_inv_arrow","lean_right","lean_left","trapezoid","inv_trapezoid","rect_right_inv_arrow","cylinder","totalWidth","totalHeight","props","propKeys","Set","borders","applyNodePropertyBorders","delete","propKey","labelRect","strokeDashArray","addBorder","skipBorder","includes","rectWithTitle","innerLine","text2","flat","textRows","titleBox","descr","stadium","doublecircle","gap","circleGroup","outerCircle","innerCircle","subroutine","start","forkJoin","end","class_box","rowPadding","lineHeight","topLine","bottomLine","maxWidth","maxHeight","labelContainer","verticalPos","hasInterface","classData","annotations","interfaceLabelText","interfaceLabel","interfaceBBox","classTitleString","classTitleLabel","classTitleBBox","classAttributes","members","str","parsedInfo","parsedText","displayText","lbl","cssStyle","classMethods","methods","diffX","fork","nodeElems","link","target","securityLevel","linkTarget","tooltip","haveCallback","decodeEntities","_classes","element","themeCSS","maxTextSize","darkMode","logLevel","startOnLoad","deterministicIds","deterministicIDSeed","diagramPadding","nodeSpacing","rankSpacing","useMaxWidth","defaultRenderer","sequence","hideUnusedParticipants","activationWidth","diagramMarginX","diagramMarginY","actorMargin","boxMargin","boxTextMargin","noteMargin","messageMargin","messageAlign","mirrorActors","forceMenus","bottomMarginAdj","rightAngles","showSequenceNumbers","actorFontSize","actorFontFamily","actorFontWeight","noteFontSize","noteFontFamily","noteFontWeight","noteAlign","messageFontSize","messageFontFamily","messageFontWeight","wrap","wrapPadding","labelBoxWidth","labelBoxHeight","messageFont","fontSize","fontWeight","noteFont","actorFont","gantt","titleTopMargin","barHeight","barGap","topPadding","rightPadding","leftPadding","gridLineStartPadding","sectionFontSize","numberSectionStyles","axisFormat","topAxis","useWidth","journey","leftMargin","taskFontSize","taskFontFamily","taskMargin","textPlacement","actorColours","sectionFills","sectionColours","dividerMargin","sizeUnit","textHeight","titleShift","forkWidth","forkHeight","miniPadding","fontSizeFactor","labelHeight","edgeLengthFactor","compositTitleSize","radius","er","layoutDirection","minEntityWidth","minEntityHeight","entityPadding","stroke","fill","pie","requirement","rect_fill","text_color","rect_border_size","rect_border_color","rect_min_width","rect_min_height","rect_padding","line_height","gitGraph","nodeLabel","mainBranchName","mainBranchOrder","showCommitLabel","showBranches","rotateCommitLabel","c4","c4ShapeMargin","c4ShapePadding","c4ShapeInRow","nextLinePaddingX","c4BoundaryInRow","personFontSize","personFontFamily","personFontWeight","external_personFontSize","external_personFontFamily","external_personFontWeight","systemFontSize","systemFontFamily","systemFontWeight","external_systemFontSize","external_systemFontFamily","external_systemFontWeight","system_dbFontSize","system_dbFontFamily","system_dbFontWeight","external_system_dbFontSize","external_system_dbFontFamily","external_system_dbFontWeight","system_queueFontSize","system_queueFontFamily","system_queueFontWeight","external_system_queueFontSize","external_system_queueFontFamily","external_system_queueFontWeight","boundaryFontSize","boundaryFontFamily","boundaryFontWeight","containerFontSize","containerFontFamily","containerFontWeight","external_containerFontSize","external_containerFontFamily","external_containerFontWeight","container_dbFontSize","container_dbFontFamily","container_dbFontWeight","external_container_dbFontSize","external_container_dbFontFamily","external_container_dbFontWeight","container_queueFontSize","container_queueFontFamily","container_queueFontWeight","external_container_queueFontSize","external_container_queueFontFamily","external_container_queueFontWeight","componentFontSize","componentFontFamily","componentFontWeight","external_componentFontSize","external_componentFontFamily","external_componentFontWeight","component_dbFontSize","component_dbFontFamily","component_dbFontWeight","external_component_dbFontSize","external_component_dbFontFamily","external_component_dbFontWeight","component_queueFontSize","component_queueFontFamily","component_queueFontWeight","external_component_queueFontSize","external_component_queueFontFamily","external_component_queueFontWeight","personFont","external_personFont","systemFont","external_systemFont","system_dbFont","external_system_dbFont","system_queueFont","external_system_queueFont","containerFont","external_containerFont","container_dbFont","external_container_dbFont","container_queueFont","external_container_queueFont","componentFont","external_componentFont","component_dbFont","external_component_dbFont","component_queueFont","external_component_queueFont","boundaryFont","person_bg_color","person_border_color","external_person_bg_color","external_person_border_color","system_bg_color","system_border_color","system_db_bg_color","system_db_border_color","system_queue_bg_color","system_queue_border_color","external_system_bg_color","external_system_border_color","external_system_db_bg_color","external_system_db_border_color","external_system_queue_bg_color","external_system_queue_border_color","container_bg_color","container_border_color","container_db_bg_color","container_db_border_color","container_queue_bg_color","container_queue_border_color","external_container_bg_color","external_container_border_color","external_container_db_bg_color","external_container_db_border_color","external_container_queue_bg_color","external_container_queue_border_color","component_bg_color","component_border_color","component_db_bg_color","component_db_border_color","component_queue_bg_color","component_queue_border_color","external_component_bg_color","external_component_border_color","external_component_db_bg_color","external_component_db_border_color","external_component_queue_bg_color","external_component_queue_border_color","keyify","obj","prefix","reduce","configKeys","mermaidAPI","configApi","c4ShapeArray","boundaryParseStack","currentBoundaryParse","parentBoundaryParse","boundarys","alias","tags","parentBoundary","rels","wrapEnabled","c4Type","getC4Type","setC4Type","c4TypeParam","sanitizedText","parseDirective","statement","context","addRel","from","to","techn","sprite","rel","old","entries","autoWrap","addPersonOrSystem","typeC4Shape","personOrSystem","addContainer","container","addComponent","component","addPersonOrSystemBoundary","boundary","addContainerBoundary","addDeploymentNode","nodeType","popBoundaryParseStack","pop","updateElStyle","elementName","bgColor","fontColor","borderColor","shadowing","legendText","legendSprite","updateRelStyle","textColor","lineColor","offsetX","offsetY","parseInt","updateLayoutConfig","c4ShapeInRowParam","c4BoundaryInRowParam","c4ShapeInRowValue","c4BoundaryInRowValue","getC4ShapeInRow","getC4BoundaryInRow","getCurrentBoundaryParse","getParentBoundaryParse","getC4ShapeArray","getC4Shape","getC4ShapeKeys","getBoundarys","getRels","getTitle","setWrap","wrapSetting","LINETYPE","SOLID","DOTTED","NOTE","SOLID_CROSS","DOTTED_CROSS","SOLID_OPEN","DOTTED_OPEN","LOOP_START","LOOP_END","ALT_START","ALT_ELSE","ALT_END","OPT_START","OPT_END","ACTIVE_START","ACTIVE_END","PAR_START","PAR_AND","PAR_END","RECT_START","RECT_END","SOLID_POINT","DOTTED_POINT","ARROWTYPE","FILLED","OPEN","PLACEMENT","LEFTOF","RIGHTOF","OVER","setTitle","svgDraw","drawText","fixLifeLineHeights","parser","common","c4Db","wrapLabel","calculateTextWidth","calculateTextHeight","configureSvgSize","globalBoundaryMaxX","globalBoundaryMaxY","yy","Bounds","startx","stopx","starty","stopy","widthLimit","nextData","cnt","setConf","val","fun","c4Shape","_startx","margin","_stopx","_starty","_stopy","updateVal","max","cnf","c4ShapeFont","calcC4ShapeTextWH","textType","c4ShapeTextWrap","textConf","textLimitWidth","textLines","lineBreakRegex","lines","drawBoundary","diagram","bounds","boundaryTextWrap","boundaryLabelConf","drawC4ShapeArray","currentBounds","c4ShapeKeys","Y","c4ShapeTypeConf","image","c4ShapeLabelConf","c4ShapeTechnConf","rectHeight","rectWidth","c4ShapeDescrConf","drawC4Shape","bumpLastMargin","Point","getIntersectPoint","fromNode","endPoint","x2","y2","fromCenterX","fromCenterY","tanDYX","fromDYX","returnPoint","getIntersectPoints","endNode","endIntersectPoint","startPoint","drawRels","getC4ShapeObj","relTextWrap","relConf","drawInsideBoundary","parentBoundaryAlias","parentBounds","currentBoundarys","currentBoundary","currentBoundaryTextWrap","currentBoundaryLabelConf","currentBoundaryTypeConf","currentBoundaryDescrConf","setData","currentPersonOrSystemArray","currentPersonOrSystemKeys","nextCurrentBoundarys","draw","sandboxElement","root","contentDocument","body","doc","db","insertComputerIcon","insertDatabaseIcon","insertClockIcon","screenBounds","screen","availWidth","c4type","insertArrowHead","insertArrowEnd","insertArrowCrossHead","insertArrowFilledHead","box","boxHeight","boxWidth","extraVertForTitle","drawPersonOrSystemArray","getStyles","personBorder","personBkg","addFunction","sanitizeUrl","drawRect","rectData","rectElem","attrs","attrKey","drawImage","imageElem","sanitizedLink","startsWith","drawEmbeddedImage","textData","prevTextHeight","textElems","yfunc","valign","textMargin","round","anchor","dominantBaseline","alignmentBaseline","textElem","span","_groups","drawLabel","txtObject","genPoints","cut","relsElem","strokeColor","replaceAll","messageConf","_drawTextCandidateFunc","boundaryElem","fillColor","attrsValue","boundaryConf","personImg","c4ShapeElem","getNoteRect","c4ShapeFontConf","getC4ShapeFont","textFontConf","thchn","insertDynamicNumber","defs","marker","getTextObj","byText","content","g","textAttrs","_setTextAttrs","byTspan","byFo","toText","fromTextAttrsDict","hasOwnProperty","commonClear","MERMAID_DOM_ID_PREFIX","relations","classCounter","funs","splitClassNameAndType","genericType","className","addClass","classId","cssClasses","lookUpDomId","classKeys","setupToolTips","getClass","getClasses","getRelations","addRelation","relation","id1","id2","relationTitle1","relationTitle2","addAnnotation","annotation","validatedClassName","addMember","member","theClass","memberString","endsWith","substring","addMembers","cleanupLabel","substr","setCssClass","ids","match","setTooltip","setLink","linkStr","formatUrl","setClickEvent","functionName","functionArgs","setClickFunc","elemId","argList","item","charAt","querySelector","addEventListener","runFunc","bindFunctions","lineType","LINE","DOTTED_LINE","relationType","AGGREGATION","EXTENSION","COMPOSITION","DEPENDENCY","tooltipElem","selectAll","on","transition","duration","scrollX","right","scrollY","scrollTop","classed","direction","getDirection","setDirection","classDb","curveLinear","interpolateToCurve","getStylesFromArray","setupGraphViewbox","idCache","addClasses","vertex","cssClassStr","styles","radious","_shape","addRelations","defaultStyle","defaultLabelStyle","edgeData","arrowhead","getArrowMarker","type1","type2","interpolate","defaultInterpolate","arrowheadStyle","labelpos","labelType","getGraphId","foundEntry","labels","querySelectorAll","k","dim","insertBefore","firstChild","isMultiGraph","classDef","drawClass","drawEdge","svgBounds","vBox","nodeBorder","classText","mainBkg","edgeCount","getRelationType","l","labelPosition","p1_card_x","p1_card_y","p2_card_x","p2_card_y","cardinality_1_point","calcCardinalityPosition","cardinality_2_point","classInfo","isFirst","titleText2","classTitle","titleHeight","membersLine","addTspan","membersBox","methodsLine","method","classBox","childNodes","fieldRegEx","methodRegEx","fieldMatch","methodMatch","buildFieldDisplay","buildMethodDisplay","buildLegacyDisplay","visibility","fieldType","parseGenericTypes","fieldName","classifier","parseClassifier","err","methodName","parameters","returnType","memberText","methodStart","methodEnd","firstChar","textEl","tSpan","cleanedText","DOMPurify","getRows","breakToPlaceholder","removeEscapes","newStr","String","fromCharCode","_","c","removeScript","rs","idx","decodedText","sanitizeMore","level","placeholderToBreak","sanitizeTextOrArray","a","hasBreaks","test","splitBreaks","getUrl","useAbsolute","entities","relationships","Cardinality","ZERO_OR_ONE","ZERO_OR_MORE","ONE_OR_MORE","ONLY_ONE","Identification","NON_IDENTIFYING","IDENTIFYING","addEntity","attributes","getEntities","addAttributes","entityName","attribs","entity","attributeName","addRelationship","entA","rolA","entB","rSpec","entityA","roleA","entityB","relSpec","getRelationships","ERMarkers","ONLY_ONE_START","ONLY_ONE_END","ZERO_OR_ONE_START","ZERO_OR_ONE_END","ONE_OR_MORE_START","ONE_OR_MORE_END","ZERO_OR_MORE_START","ZERO_OR_MORE_END","erDb","erParser","erMarkers","drawAttributes","groupNode","entityTextNode","heightPadding","widthPadding","attrFontSize","labelBBox","attributeNodes","hasKeyType","hasComment","maxTypeWidth","maxNameWidth","maxKeyWidth","maxCommentWidth","cumulativeHeight","attrNum","attributeKeyType","attributeComment","attrPrefix","nodeHeight","typeNode","attributeType","nameNode","attributeNode","tn","nn","typeBBox","nameBBox","keyTypeNode","kn","keyTypeBBox","commentNode","cn","commentNodeBBox","widthPaddingFactor","bBox","spareColumnWidth","heightOffset","attribStyle","alignY","typeRect","nameXOffset","parseFloat","nameRect","keyTypeAndCommentXOffset","keyTypeRect","drawEntities","svgNode","firstOne","textId","textNode","entityWidth","entityHeight","rectNode","rectBBox","adjustEntities","getEdgeName","addRelationships","relationship","relCnt","drawRelationshipFromLayout","relType","cardA","cardB","len","getTotalLength","labelPoint","getPointAtLength","labelId","labelNode","directed","edgesep","firstEntity","tertiaryColor","dagreD3","addToRender","addToRenderV2","addShape","vertexCounter","vertices","subGraphs","subGraphLookup","tooltips","subCount","firstGraphFlag","version","veritceKeys","addVertex","addSingleLink","_start","_end","linktext","addLink","updateLinkInterpolate","positions","interp","updateLink","isSubstringInArray","textStyles","newStyle1","newStyle2","setClass","setClickFun","getTooltip","getVertices","getEdges","ver","setGen","addSubGraph","list","_title","uniq","prims","boolean","number","string","objs","nodeList","stmt","apply","nl","subGraph","makeUniq","getPosForId","secCount","posCrossRef","indexNodes2","count","posCount","childPos","getDepthFirstPos","indexNodes","getSubGraphs","firstGraph","destructStartLink","_str","countChar","char","destructEndLink","dots","destructLink","_startStr","startInfo","exists","allSgs","sg","allSubgraphs","lex","flowDb","flow","addVertices","vert","svgId","classStr","parentNode","addEdges","linkIdCnt","defaultStyles","linkIdBase","linkId","linkNameStart","linkNameEnd","minlen","subG","linkNode","flowChartShapes","_doc","Render","arrows","none","normal","util","clusterRects","clusterEl","xPos","baseVal","yPos","_width","cluster","te","classList","add","nodeTextColor","titleColor","arrowheadColor","edgeLabelBackground","clusterBkg","clusterBorder","border2","moment","dateFormat","todayMarker","excludes","links","accDescription","sections","tasks","currentSection","inclusiveEndDates","lastOrder","taskCnt","lastTask","lastTaskID","rawTasks","setAxisFormat","getAxisFormat","setTodayMarker","getTodayMarker","setDateFormat","enableInclusiveEndDates","endDatesAreInclusive","enableTopAxis","topAxisEnabled","getDateFormat","setIncludes","toLowerCase","getIncludes","setExcludes","getExcludes","getLinks","addSection","getSections","getTasks","allItemsPricessed","compileTasks","maxDepth","iterationCount","isInvalidDate","date","format","isoWeekday","checkTaskDates","task","manualEndTime","startTime","endTime","renderEndTime","fixTaskDates","toDate","invalid","getStartDate","prevTime","re","afterStatement","exec","latestEndingTask","findTaskById","dt","Date","setHours","mDate","isValid","durationToDate","durationStatement","relativeTime","getEndDate","inclusive","parseId","idStr","compileData","prevTask","dataStr","ds","getTaskTags","endTimeData","parseData","prevTaskId","startData","taskDb","addTask","rawTask","section","processed","raw","taskInfo","active","done","crit","milestone","order","addTaskOrg","newTask","compileTask","allProcessed","_linkStr","pushFun","open","callbackFunction","matchFound","t","regex","RegExp","shift","scaleTime","scaleLinear","interpolateHcl","axisBottom","axisTop","timeFormat","ganttDb","getElementById","parentElement","offsetWidth","taskArray","timeScale","domain","rangeRound","categories","catsUnfiltered","checkUnique","taskCompare","b","taskA","taskB","makeGant","pageWidth","pageHeight","colorScale","range","drawExcludeDays","makeGrid","drawRects","vertLabels","drawToday","theArray","theGap","theTopPad","theSidePad","theBarHeight","theColorScale","enter","rectangles","toString","secNum","taskClass","startX","endX","textWidth","taskType","each","taskRect","taskText","oldParent","Link","createElement","minTime","maxTime","excludeRanges","valueOf","clone","renderEnd","bottomXAxis","tickSize","tickFormat","call","topXAxis","numOccurances","prevGap","getCount","todayG","today","todayLine","arr","hash","prototype","getCounts","word","excludeBkgColor","sectionBkgColor","sectionBkgColor2","altSectionBkgColor","ganttFontSize","gridColor","todayLineColor","taskTextDarkColor","taskTextClickableColor","taskTextColor","taskBkgColor","taskBorderColor","taskTextOutsideColor","activeTaskBkgColor","activeTaskBorderColor","doneTaskBorderColor","doneTaskBkgColor","critBorderColor","critBkgColor","random","commits","branchesConfig","branches","curBranch","seq","getId","uniqBy","fn","recordMap","create","out","setOptions","rawOptString","message","getOptions","commit","msg","tag","commitType","NORMAL","branch","checkout","Error","token","loc","first_line","last_line","first_column","last_column","expected","merge","otherBranch","currentCommit","otherCommit","MERGE","cherryPick","sourceId","targetId","sourceCommit","sourceCommitBranch","CHERRY_PICK","upsert","newval","index","splice","prettyPrintCommitHistory","commitArr","newCommit","nextCommit","prettyPrint","getCommitsArray","mainBranch","getBranchesAsObjArray","branchesArray","values","branchConfig","getBranches","getCommits","getCurrentBranch","getHead","REVERSE","HIGHLIGHT","gitGraphParser","allCommitsDict","branchNum","branchPos","commitPos","lanes","maxPos","drawCommits","modifyGraph","gitGraphConfig","gBullets","gLabels","sortedKeys","typeClass","circle2","wrapper","labelBkg","r_x","r_y","hole","tagBbox","h2","ly","hasOverlappingCommits","commit1","commit2","allCommits","commit1Pos","commit2Pos","overlappingComits","findLane","_depth","candidate","ok","drawArrow","overlappingCommits","arc","arc2","colorClassNum","lineDef","lineY","arrow","drawArrows","gArrows","drawBranches","adjustIndexForTheme","bkg","branchLabel","commitLabelFontSize","commitLabelColor","commitLabelBackground","tagLabelFontSize","tagLabelColor","tagLabelBackground","tagLabelBorder","primaryColor","setMessage","getMessage","setInfo","inf","getInfo","infoParser","showData","setShowData","toggle","getShowData","cleanupValue","scaleOrdinal","d3pie","pieData","pieParser","legendRectSize","legendSpacing","sum","myGeneratedColors","pie1","pie2","pie3","pie4","pie5","pie6","pie7","pie8","pie9","pie10","pie11","pie12","color","dataReady","arcGenerator","innerRadius","outerRadius","toFixed","centroid","legend","horz","pieStrokeColor","pieStrokeWidth","pieOpacity","pieTitleTextSize","pieTitleTextColor","pieSectionTextColor","pieSectionTextSize","pieLegendTextColor","pieLegendTextSize","latestRequirement","requirements","latestElement","elements","RequirementType","REQUIREMENT","FUNCTIONAL_REQUIREMENT","INTERFACE_REQUIREMENT","PERFORMANCE_REQUIREMENT","PHYSICAL_REQUIREMENT","DESIGN_CONSTRAINT","RiskLevel","LOW_RISK","MED_RISK","HIGH_RISK","VerifyType","VERIFY_ANALYSIS","VERIFY_DEMONSTRATION","VERIFY_INSPECTION","VERIFY_TEST","Relationships","CONTAINS","COPIES","DERIVES","SATISFIES","VERIFIES","REFINES","TRACES","addRequirement","risk","verifyMethod","getRequirements","setNewReqId","setNewReqText","setNewReqRisk","setNewReqVerifyMethod","addElement","docRef","getElements","setNewElementType","setNewElementDocRef","src","dst","req","ReqMarkers","ARROW","insertLineEndings","containsNode","requirementDb","newRectNode","newTitleNode","txts","textStr","yPadding","linePadding","totalY","titleNode","newBodyNode","yStart","currentRow","charLimit","wrappedTxts","currentTextLen","firstPart","lastStr","addEdgeLabel","elementString","drawReqs","reqs","reqName","titleNodeInfo","bodyNode","drawElements","els","elName","relationColor","requirementBackground","requirementBorderColor","requirementBorderSize","requirementTextColor","relationLabelBackground","relationLabelColor","prevActor","actors","messages","notes","sequenceNumbersEnabled","addActor","properties","actorCnt","nextActor","activationCount","part","actor","addMessage","idFrom","idTo","answer","addSignal","messageType","getMessages","getActors","getActor","getActorKeys","enableSequenceNumbers","disableSequenceNumbers","parseMessage","AUTONUMBER","CRITICAL_START","CRITICAL_OPTION","CRITICAL_END","BREAK_START","BREAK_END","addNote","placement","addLinks","actorId","insertLinks","addALink","sep","addProperties","insertProperties","addDetails","innerHTML","details","getActorProperty","param","sequenceIndex","step","sequenceIndexStep","visible","sequenceVisible","signalType","loopText","optText","altText","parText","criticalText","optionText","breakText","sequenceDb","sequenceItems","activations","models","getHeight","loops","it","acc","actorModel","addLoop","loopModel","msgModel","noteModel","lastActor","lastLoop","lastMessage","lastNote","init","updateBounds","_self","updateFn","updateItemBounds","newActivation","actorRect","stackedSize","actorActivations","anchored","anchorElement","endActivation","lastActorActivationIdx","activation","lastIndexOf","createLoop","newLoop","endLoop","addSectionToLoop","loop","sectionTitles","getVerticalPos","bumpVerticalPos","bump","getBounds","drawNote","textObj","curr","boundMessage","textDims","calculateTextDimensions","lineStarty","totalOffset","fromBounds","toBounds","drawMessage","drawActors","actorKeys","configuration","newActors","actorKey","has","prevWidth","prevMargin","drawActor","drawActorsPopup","minMenuWidth","getRequiredPopupWidth","menuDimensions","drawPopup","activationBounds","actorObj","adjustLoopHeightForWrap","loopWidths","preMargin","postMargin","addLoopFn","heightAdjust","loopWidth","maxMessageWidthPerActor","getMaxMessageWidthPerActor","calculateActorMargins","calculateLoopBounds","insertSequenceNumber","activeEnd","activationData","drawActivation","messagesToDraw","drawLoop","drawBackgroundRect","messageModel","requiredBoxSize","actorLines","isNote","isMessage","textFont","wrappedMessage","messageDimensions","messageWidth","requiredPopupWidth","labelDimensions","labelWidth","actorToMessageWidth","prop","actDims","actorWidth","buildNoteModel","shouldWrap","textDimensions","buildMessageModel","process","fromIdx","toIdx","allBounds","boundedWidth","msgDims","stack","current","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","toAdd","enabled","stk","actorBorder","actorBkg","actorTextColor","actorLineColor","signalColor","sequenceNumberColor","signalTextColor","labelBoxBorderColor","labelBoxBkgColor","labelTextColor","loopTextColor","noteBorderColor","noteBkgColor","noteTextColor","activationBkgColor","activationBorderColor","addPopupInteraction","popupMenuUpFunc","popupMenuDownFunc","displayValue","actorClass","menuWidth","linkY","linkElem","_drawMenuItemTextCandidateFunc","popupMenu","popid","popdownMenu","popupId","pu","display","drawActorTypeParticipant","center","boxpluslineGroup","cssclass","iconSrc","drawActorTypeActor","actElem","drawLoopLine","sectionHeight","lower","set","get","size","stateDb","drawStartState","drawDivider","drawSimpleState","stateDef","drawDescrState","descriptions","isSecond","descrLine","descrBox","addTitleAndBox","altBkg","pad","dblPad","orgBox","orgWidth","orgX","titleWidth","graphBox","drawEndState","drawForkJoinState","parentId","tmp","nText","_drawLongText","_text","tHeight","textBounds","drawState","stateInfo","stateBox","titleRows","boundstmp","heightAdj","generateId","rootDoc","setRootDoc","getRootDoc","docTranslator","first","state1","state2","currentDoc","newNode","docNode","getRootDocV2","extract","addState","newDoc","states","documents","currentDocument","startCnt","endCnt","addDescription","des","saveCommon","getState","getStates","logDocuments","_id1","_id2","_descr","theState","dividerCnt","getDividerId","trimColon","nodeDb","setupNode","altFlag","getDir","nodeData","noteData","groupData","position","arrowType","setupDoc","startId","endId","defaultDir","transformationLog","renderDoc","svgWidth","getLabelWidth","domDocument","edgeFreeDoc","ranker","nodeSep","sub","boxBounds","noteDef","nodeCount","svgElem","dividers","pWidth","pShift","getAttribute","transitionColor","stateLabelColor","background","labelBackgroundColor","transitionLabelColor","tertiaryTextColor","specialStateColor","innerEndBackground","compositeBackground","stateBkg","stateBorder","compositeTitleBackground","altBackground","allItemsProcessed","updateActors","tempActors","people","unique","taskData","pieces","score","peeps","peopleList","journeyDb","drawActorLegend","person","colour","circleData","drawCircle","labelData","LEFT_MARGIN","initGraphics","actorNames","actorPos","actorName","drawTasks","fills","textColours","lastSection","sectionVHeight","taskPos","sectionNumber","drawSection","taskActors","drawTask","faceColor","fillType0","fillType1","fillType2","fillType3","fillType4","fillType5","fillType6","fillType7","actor0","actor1","actor2","actor3","actor4","actor5","d3arc","drawFace","faceData","circleElement","face","smile","startAngle","PI","endAngle","sad","ambivalent","labelMargin","taskCount","graphics","interactionFunctions","func","attachFunctions","LEVELS","fatal","setLogLevel","console","bind","time","initThrowsErrors","arguments","parseError","mermaid","sequenceConfig","callback","Node","ganttConfig","idGenerator","initIdGenerator","next","entityDecode","detectInit","svgCode","initialize","contentLoaded","setParseErrorHandler","newParseErrorHandler","compile","serialize","pkg","c4Renderer","c4Parser","classRenderer","classRendererV2","classParser","erRenderer","flowRenderer","flowRendererV2","flowParser","ganttRenderer","ganttParser","gitGraphAst","gitGraphRenderer","infoDb","infoRenderer","pieDb","pieRenderer","requirementParser","requirementRenderer","sequenceParser","sequenceRenderer","stateParser","stateRenderer","stateRendererV2","journeyRenderer","journeyParser","errorRenderer","directiveSanitizer","sanitizeCss","parseEncounteredException","graphInit","reinitialize","graphType","detectType","encodeEntities","innerTxt","isInt","_txt","cb","iframe","existingSvg","remove","userStyles","altFontFamily","stylis","selector","rules","style1","sequenceDiagram","svgEl","viewBox","btoa","ADD_TAGS","ADD_ATTR","tmpElementSelector","currentDirective","args","handleDirective","updateRendererConfigs","default","globalReset","classDiagram","stateDiagram","themes","calcThemeVariables","userOverRides","calcColors","errorBkgColor","errorTextColor","baseThemeVariables","darkThemeVariables","defaultThemeVariables","forestThemeVariables","neutralThemeVariables","base","dark","forest","neutral","darken","lighten","adjust","invert","mkBorder","Theme","primaryTextColor","secondaryColor","primaryBorderColor","secondaryBorderColor","tertiaryBorderColor","secondaryTextColor","nodeBkg","defaultLinkColor","taskTextLightColor","compositeBorder","git0","git1","git2","git3","git4","git5","git6","git7","gitInv0","gitInv1","gitInv2","gitInv3","gitInv4","gitInv5","gitInv6","gitInv7","branchLabelColor","gitBranchLabel0","gitBranchLabel1","gitBranchLabel2","gitBranchLabel3","gitBranchLabel4","gitBranchLabel5","gitBranchLabel6","gitBranchLabel7","tagBorder","overrides","updateColors","userOverrides","calculate","rgba","secondBkg","mainContrastColor","darkTextColor","border1","labelBackground","labelColor","col","contrast","critical","curveBasisClosed","curveBasisOpen","curveLinearClosed","curveMonotoneX","curveMonotoneY","curveNatural","curveStep","curveStepAfter","curveStepBefore","d3CurveTypes","directiveWithoutOpen","anyComment","inits","detectDirective","results","commentWithoutDirectives","source","lastIndex","memoize","resolver","cache","defaultCurve","curveName","toUpperCase","arrPaths","fnName","params","distance","pow","traverseEdge","prevPoint","totalDistance","remainingDistance","vectorDistance","distanceRatio","isRelationTypePresent","initialPosition","distanceToCardinalityPoint","angle","atan2","cardinalityPosition","sin","cos","terminalMarkerSize","makeid","characters","charactersLength","floor","clobber","drawSimpleText","joinWith","words","completedLines","nextLine","wordLength","nextLineLength","breakString","hyphenatedStrings","remainingWord","Boolean","currentWord","isLastWord","hyphenCharacter","currentLine","character","lineWidth","currentCharacter","isLastLine","hyphenatedNextLine","fontFamilies","dims","cheight","d3Attrs","d3Elem","calculateSvgSizeAttrs","Map","sWidth","sHeight","_label","tx","ty","deterministic","seed","now","decoder","escape","unescape","arg","kArr"],"sourceRoot":""}