diff --git a/docs/1_Fundamentals/css/layout.css b/docs/1_Fundamentals/css/layout.css new file mode 100644 index 0000000..0897e70 --- /dev/null +++ b/docs/1_Fundamentals/css/layout.css @@ -0,0 +1,636 @@ +@charset "UTF-8"; +:root { + --split-div-size: 0; + --split-gap-size: 0; +} +split { + display: flex; + gap: unset; + flex-flow: row wrap; + align-content: center; +} +split[even] > * { + flex: 1; +} +split[no-margin] > * { + --r-block-margin: 0; +} +split[wrap="1"] > * { + flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (1 - 1))) - (calc(var(--dbg-size) * 1 * 2))) / 1); +} +split[wrap="2"] > * { + flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (2 - 1))) - (calc(var(--dbg-size) * 2 * 2))) / 2); +} +split[wrap="3"] > * { + flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (3 - 1))) - (calc(var(--dbg-size) * 3 * 2))) / 3); +} +split[wrap="4"] > * { + flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (4 - 1))) - (calc(var(--dbg-size) * 4 * 2))) / 4); +} +split[wrap="5"] > * { + flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (5 - 1))) - (calc(var(--dbg-size) * 5 * 2))) / 5); +} +split[wrap="6"] > * { + flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (6 - 1))) - (calc(var(--dbg-size) * 6 * 2))) / 6); +} +split[wrap="7"] > * { + flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (7 - 1))) - (calc(var(--dbg-size) * 7 * 2))) / 7); +} +split[wrap="8"] > * { + flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (8 - 1))) - (calc(var(--dbg-size) * 8 * 2))) / 8); +} +split[wrap="9"] > * { + flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (9 - 1))) - (calc(var(--dbg-size) * 9 * 2))) / 9); +} +split[wrap="10"] > * { + flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (10 - 1))) - (calc(var(--dbg-size) * 10 * 2))) / 10); +} +split[wrap="11"] > * { + flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (11 - 1))) - (calc(var(--dbg-size) * 11 * 2))) / 11); +} +split[wrap="12"] > * { + flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (12 - 1))) - (calc(var(--dbg-size) * 12 * 2))) / 12); +} +split[gap="0"] { + --split-gap-size: 0; + gap: unset; +} +split[gap="1"] { + --split-gap-size: 1em; + gap: 1em; +} +split[gap="2"] { + --split-gap-size: 2em; + gap: 2em; +} +split[gap="3"] { + --split-gap-size: 3em; + gap: 3em; +} +split[gap="4"] { + --split-gap-size: 4em; + gap: 4em; +} +split[gap="5"] { + --split-gap-size: 5em; + gap: 5em; +} +split[left="1"] > *:first-child { + flex: 1; +} +split[middle="1"] > *:nth-child(2) { + flex: 1 !important; +} +split[right="1"] > *:nth-child(2) { + flex: 1; +} +split[right="1"] > *:nth-child(3) { + flex: 1; +} +split[left="2"] > *:first-child { + flex: 2; +} +split[middle="2"] > *:nth-child(2) { + flex: 2 !important; +} +split[right="2"] > *:nth-child(2) { + flex: 2; +} +split[right="2"] > *:nth-child(3) { + flex: 2; +} +split[left="3"] > *:first-child { + flex: 3; +} +split[middle="3"] > *:nth-child(2) { + flex: 3 !important; +} +split[right="3"] > *:nth-child(2) { + flex: 3; +} +split[right="3"] > *:nth-child(3) { + flex: 3; +} +split[left="4"] > *:first-child { + flex: 4; +} +split[middle="4"] > *:nth-child(2) { + flex: 4 !important; +} +split[right="4"] > *:nth-child(2) { + flex: 4; +} +split[right="4"] > *:nth-child(3) { + flex: 4; +} +split[left="5"] > *:first-child { + flex: 5; +} +split[middle="5"] > *:nth-child(2) { + flex: 5 !important; +} +split[right="5"] > *:nth-child(2) { + flex: 5; +} +split[right="5"] > *:nth-child(3) { + flex: 5; +} +split[left="6"] > *:first-child { + flex: 6; +} +split[middle="6"] > *:nth-child(2) { + flex: 6 !important; +} +split[right="6"] > *:nth-child(2) { + flex: 6; +} +split[right="6"] > *:nth-child(3) { + flex: 6; +} +split[left="7"] > *:first-child { + flex: 7; +} +split[middle="7"] > *:nth-child(2) { + flex: 7 !important; +} +split[right="7"] > *:nth-child(2) { + flex: 7; +} +split[right="7"] > *:nth-child(3) { + flex: 7; +} +split[left="8"] > *:first-child { + flex: 8; +} +split[middle="8"] > *:nth-child(2) { + flex: 8 !important; +} +split[right="8"] > *:nth-child(2) { + flex: 8; +} +split[right="8"] > *:nth-child(3) { + flex: 8; +} +split[left="9"] > *:first-child { + flex: 9; +} +split[middle="9"] > *:nth-child(2) { + flex: 9 !important; +} +split[right="9"] > *:nth-child(2) { + flex: 9; +} +split[right="9"] > *:nth-child(3) { + flex: 9; +} +split[left="10"] > *:first-child { + flex: 10; +} +split[middle="10"] > *:nth-child(2) { + flex: 10 !important; +} +split[right="10"] > *:nth-child(2) { + flex: 10; +} +split[right="10"] > *:nth-child(3) { + flex: 10; +} +split[left="11"] > *:first-child { + flex: 11; +} +split[middle="11"] > *:nth-child(2) { + flex: 11 !important; +} +split[right="11"] > *:nth-child(2) { + flex: 11; +} +split[right="11"] > *:nth-child(3) { + flex: 11; +} +.align-left { + display: flex; + align-items: flex-start; +} +.align-left p { + text-align: left; +} +.align-center { + display: flex; + align-items: center; +} +.align-center p { + text-align: center; +} +.align-right { + display: flex; + align-items: flex-end; +} +.align-right p { + text-align: right; +} +h1.align-left, +h2.align-left, +h3.align-left, +h4.align-left, +h5.align-left, +h6.align-left, +p.align-left { + text-align: left; + align-self: flex-start; +} +h1.align-right, +h2.align-right, +h3.align-right, +h4.align-right, +h5.align-right, +h6.align-right, +p.align-right { + text-align: right; + align-self: flex-end; +} +h1.align-center, +h2.align-center, +h3.align-center, +h4.align-center, +h5.align-center, +h6.align-center, +p.align-center { + text-align: center; + align-self: center; +} +:root { + --animation-duration: 0.7s; +} +.slower { + --animation-duration: 1.3s; +} +.faster { + --animation-duration: 0.35s; +} +@keyframes fadeIn { + from { + opacity: 0; + animation-timing-function: cubic-bezier(0.1, 0.25, 0.75, 0.9); + } + to { + opacity: 1; + } +} +.fadeIn { + animation-name: fadeIn; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1); + animation-fill-mode: both; +} +@keyframes slideRightIn { + from { + transform: translate3d(-200px, 0, 0); + } + to { + transform: translate3d(0, 0, 0); + } +} +.slideRightIn { + animation-name: fadeIn, slideRightIn; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1); + animation-fill-mode: both; +} +@keyframes slideLeftIn { + from { + transform: translate3d(200px, 0, 0); + } + to { + transform: translate3d(0, 0, 0); + } +} +.slideLeftIn { + animation-name: fadeIn, slideLeftIn; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1); + animation-fill-mode: both; +} +@keyframes slideUpIn { + from { + transform: translate3d(0, 150px, 0); + } + to { + transform: translate3d(0, 0, 0); + } +} +.slideUpIn { + animation-name: fadeIn, slideUpIn; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.5, 1); + animation-fill-mode: both; +} +@keyframes slideDownIn { + from { + transform: translate3d(0, -150px, 0); + } + to { + transform: translate3d(0, 0, 0); + } +} +.slideDownIn { + animation-name: fadeIn, slideDownIn; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.5, 1); + animation-fill-mode: both; +} +@keyframes fadeOut { + from { + opacity: 1; + animation-timing-function: cubic-bezier(0.1, 0.25, 0.75, 0.9); + } + to { + opacity: 0; + } +} +.fadeOut { + animation-name: fadeOut; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1); + animation-fill-mode: both; +} +@keyframes slideRightOut { + from { + transform: translate3d(0, 0, 0); + } + to { + transform: translate3d(200px, 0, 0); + } +} +.slideRightOut { + animation-name: fadeOut, slideRightOut; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1); + animation-fill-mode: both; +} +@keyframes slideLeftOut { + from { + transform: translate3d(0, 0, 0); + } + to { + transform: translate3d(-200px, 0, 0); + } +} +.slideLeftOut { + animation-name: fadeOut, slideLeftOut; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1); + animation-fill-mode: both; +} +@keyframes slideUpOut { + from { + transform: translate3d(0, 0, 0); + } + to { + transform: translate3d(0, -150px, 0); + } +} +.slideUpOut { + animation-name: fadeOut, slideUpOut; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.5, 1); + animation-fill-mode: both; +} +@keyframes slideDownOut { + from { + transform: translate3d(0, 0, 0); + } + to { + transform: translate3d(0, 150px, 0); + } +} +.slideDownOut { + animation-name: fadeOut, slideDownOut; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.5, 1); + animation-fill-mode: both; +} +@keyframes scaleUp { + from { + transform: scale3d(0.78, 0.78, 1); + } + to { + transform: scale3d(1, 1, 1); + } +} +.scaleUp { + animation-name: fadeIn, scaleUp; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1); + animation-fill-mode: both; +} +@keyframes scaleUpOut { + from { + transform: scale3d(1, 1, 1); + } + to { + transform: scale3d(1.23, 1.23, 1); + } +} +.scaleUpOut { + animation-name: fadeOut, scaleUpOut; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.5, 1); + animation-fill-mode: both; +} +@keyframes scaleDown { + from { + transform: scale3d(1.23, 1.23, 1); + } + to { + transform: scale3d(1, 1, 1); + } +} +.scaleDown { + animation-name: fadeIn, scaleDown; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1); + animation-fill-mode: both; +} +@keyframes scaleDownOut { + from { + transform: scale3d(1, 1, 1); + } + to { + transform: scale3d(0.78, 0.78, 1); + } +} +.scaleDownOut { + animation-name: fadeOut, scaleDownOut; + animation-duration: var(--animation-duration); + animation-timing-function: cubic-bezier(0.1, 0.5, 1); + animation-fill-mode: both; +} +:root { + --callout-background-color: + 255, + 255, + 255; +} +.callout-color1 { + --callout-color: + 108, + 192, + 245; +} +.callout-color2 { + --callout-color: + 109, + 197, + 217; +} +.callout-color3 { + --callout-color: + 113, + 208, + 136; +} +.callout-color4 { + --callout-color: + 160, + 224, + 107; +} +.callout-color5 { + --callout-color: + 238, + 177, + 91; +} +.callout-color6 { + --callout-color: + 234, + 136, + 133; +} +.callout-color7 { + --callout-color: + 230, + 98, + 121; +} +.callout-color8 { + --callout-color: + 152, + 126, + 243; +} +.callout-color9 { + --callout-color: + 182, + 182, + 182; +} +.callout-color-default { + --callout-color: + 129, + 167, + 244; +} +.has-light-background { + --callout-background-color: + 160, + 160, + 160; +} +.callout { + border-left: 4px solid rgb(var(--callout-color)); + border-radius: 2px; + background-color: rgba(var(--callout-background-color), 0.2); + margin: 1em 0; +} +.callout-title { + padding: 10px; + display: flex; + gap: 10px; + background-color: rgba(var(--callout-color), 0.3); +} +.callout-icon { + flex: 0 0 auto; + display: flex; + align-self: center; + color: rgb(var(--callout-color)); +} +.callout-title-inner { + flex: 1 1 0; + font-weight: 700; +} +.callout-content { + overflow-x: auto; + padding: 5px 15px; +} +.stretch-column > * { + flex: 1; + height: 1%; + width: 100%; +} +.stretch-row > * { + flex: 1; + height: 100%; + width: 1%; +} +.stretch-column > * > p > img, +.stretch-row > * > p > img, +.stretch-column > * > p > video, +.stretch-row > * > p > video, +.stretch-column > * > p > iframe, +.stretch-row > * > p > iframe { + height: 100%; + width: 100%; + max-width: 100% !important; + max-height: 100% !important; + object-fit: cover; +} +.stretch-column > * > .image-paragraph { + height: 100%; + width: 100%; +} +.arrowList ul { + margin: 0; +} +.arrowList li { + display: grid; + grid-template-columns: 1em auto; + align-items: center; + padding: 0; +} +.arrowList li:first-child { + padding-top: 0.5em; +} +.arrowList li:last-child { + padding-bottom: 0.5em; +} +.arrowList li:before { + content: "\25b6"; + font-size: 0.75em; + color: var(--r-main-color); + top: 0.1em; + position: relative; +} +.wideTable, +.wideTable > table { + width: 100%; +} +.noBorder td, +.noBorder th { + border: none !important; +} +:root { + --dbg-size: 0; +} +.dbg, +.dbg * { + --dbg-size: 1px; + border: 1px solid red; +} +.reset-margin { + --r-block-margin: 0; + --r-heading-margin: 0; +} +.flex-even > * { + flex: 1; +} diff --git a/docs/1_Fundamentals/css/mattropolis.css b/docs/1_Fundamentals/css/mattropolis.css new file mode 100644 index 0000000..9a48851 --- /dev/null +++ b/docs/1_Fundamentals/css/mattropolis.css @@ -0,0 +1,404 @@ +@charset "UTF-8"; +@font-face { + font-family: "League Gothic"; + src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAFD0ABIAAAAAlDQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABlAAAABwAAAAcgBETtkdERUYAAAGwAAAAHQAAAB4AJwDaR1BPUwAAAdAAAAQFAAAHrsK/x9xHU1VCAAAF2AAAACwAAAAwuP+4/k9TLzIAAAYEAAAATQAAAGB3OYz0Y21hcAAABlQAAAGuAAACGp5sFYdjdnQgAAAIBAAAAEQAAABEEJ0UFWZwZ20AAAhIAAABsQAAAmVTtC+nZ2FzcAAACfwAAAAIAAAACAAAABBnbHlmAAAKBAAAPuwAAHksdq5AR2hlYWQAAEjwAAAANgAAADYPTKfHaGhlYQAASSgAAAAfAAAAJA2WBdtobXR4AABJSAAAAfsAAANOOUMvrmxvY2EAAEtEAAABnAAAAarhrsVObWF4cAAATOAAAAAgAAAAIAHxAfhuYW1lAABNAAAAAXEAAANSKkR24nBvc3QAAE50AAABxgAAApmXcG9vcHJlcAAAUDwAAAC4AAABJ4/vHQQAAAABAAAAANXtRbgAAAAAzGT8dAAAAADdvtGJeNpjYGRgYOABYjEgZmJgBMLLQMwC5jEAAAyvAQIAAAB42pWV22scZRjGn/lmN7uzm8Zq2xRrwVMsMSiWCkYlqBfbNcXFtpsmTWPFE14pvUjTRgSjhV54FciRHFYtOaLYpsmlF8UbjSK9qlDoPzA3Iksoy1AC429e0xgPKZiH38y3M/O97/t87zcTeZJyOqiX5ArF0gk1fPhO3xntU4rrimMl97eOvQ/e7z2jbDIyUnKcnXKp/fL8i/ZsUeOqaEZX9Z2+14/61WvxDno93tvelGtzRVdCXe4jV/Ra3DUo2rWii/yy3+0PeC3M2hRzW5i7Ieb/pdJdJc9sxDX5A38quUaN++KbdlyXr0bcPqSd2m+V7+bX3jjk7p444tga3+CZtvg3DcIK7FGBYxHaoQxDMAwjMApjMA4TMAlTMA0VmIU5mIcFWIRl8HSSfDk1UUEb1fVyPgt9cA7OQz8Mcm/Fqm9lVgN1hNQRUkdIvpB8IflC8oXkC8kXki8kX0i+kHwh+UI1qwlnrfguxNeIskqUVR2Lf9FxKDPu4NwJp+KaeuANsp7m3Mu8s9AH5+A89MMQcYZhBEZhDMZhgliTMAXTUIEZ4s5ynoN5WIBFuEz8JVhm7HSE0cl4zdbm9ubvGnutQOeOcG2I8zCMwCiMwTjcr/tYqyLPtkMZuljdCc6TMAXTUIFZmIN5WIBFy17TKvMb/hbh/8xupMIqsyNmR8yOyF+j2irVVqm2SrVVqq1SbZXIEZEjIkdEjogcETkickTkiMgRkSMiR7YWvyuwFUhW5U3Vb7sKnq2W0166vJO3sJERu57d7rPPnlBaT6KMnkJZPYMCHdKz7MJWVK8C7+0OtavE7NfVwc7vVDez30IPs0P79YgG9KkO6KI+Z0cN8ZY/rQl9SYwZLepFfa1v9YquoIKW0WE5dyv5InjN3hp5GviK3Iivx7fZy/f6S/33ZdwlxyheN9W2e8JG69uH//e9u/NY4X/eub45+ia+suXXRi2bv6Mtc6KNOu9wvHMvo/Ga3X+Qrj3KijbTr6Q7fIFQHatYoFOHUZreFHmqHTm9htL0qcSTR5GvYzrOlTJydK6DcTfK6JR66PJpFFgffX2sT8iS9NHXZ7rAWg+iOutmlm5WiPAFPfX1lS5xdwalNUt/nfU3o8sosC6ntYQC67XTCqrjfIBO59hJTShtfgI9h1J6gT3imTdn3nLmKq9XUb15y5urwFwF5ipjrvLmKqMTqJ592cm4C9WZQ98c+uYw0Lt6j+zJfk2bz8B8Zs2nM58585k3n4H5zJrPjPnMm0PfvPnmLW/enH7gf9kO/aSfOTrtMofa0jdn3nx7k1LmJ0OnSkQ/SvU5OtLDlyqp9QGrdZdVuZueXOA9Tep7zOp7nPou8a4mb9UhVn1Jz1PFil7+A50JTGIAAAB42mNgZGBg4GLQYdBjYHJx8wlh4MtJLMljkGBgAYoz/P8PJBAsIAAAnsoHa3jaY2Bm2so4gYGVgYXVmOUsAwPDLAjNdJYhjWkBkA+UggN2BiQQ6h3ux+DAwPubifXh34dAyXlMGgoMDJNBciwJrEARBgUGJgCUOQ4lAAAAeNpjYGBgZoBgGQZGIMnAKALkMYL5LAw/gLQVgwKQJcXAy1DHMIVhMcNShpUM6xm2MOxguMbwjeE/YzBjBdMxpjsKXAoiClIKcgpKCmoK+grxCmsUlVT//Gb6/x9oBi/QjMkMC4B6VzCsBerdzrCf4QbDD8YgqF4GBQEFCQUZNL2M//////r/8f/z/4/8P/z/4P99/3f93/F/0/+N/zf8j/tv9fft3xsPtj7Y8GDtgzUPVj5Y9mDeg/wHyvfX3brKehHiF3IBIxsD3ABGJiDBhK4AGGQsrGzsHJxc3Dy8fPwCgkLCIqJi4hKSUtIysnLyCopKyiqqauoamlraOrp6+gaGRsYmpmbmFpZW1ja2dvYOjk7OLq5u7h6eXt4+vn7+AYFBwSGhYeERkVHRMbFx8QmJDGXlldXNHb2TJk6eOmXajFkzZ8+ZN3f+gkVLFi9dvmzVytVrGBjS0hlOM0zIybqQl8lQ0QlyVgbcgdNXFKZCmWdSikrbN2w8fOTEyaPHGBjWb2I4z8Bw6TJD/vFTDCU1xbVV9Q2Nda1tDC3dPV0Mm7fkArUUADEA6ECXMwAAAAAEYAXhAMMArAC1ALoAvwDJANEA1wDbAOEAywDAAMsAzwDVANkA3QDlAJ8AmwC9ALcAoQCkAJIA0wCdAHsATQBEBRF42l1Ru05bQRDdDQ8DgcTYIDnaFLOZkMZ7oQUJxNWNYmQ7heUIaTdykYtxAR9AgUQN2q8ZoKGkSJsGIRdIfEI+IRIza4iiNDs7s3POmTNLypGqd+lrz1PnJJDC3QbNNv1OSLWzAPek6+uNjLSDB1psZvTKdfv+Cwab0ZQ7agDlPW8pDxlNO4FatKf+0fwKhvv8H/M7GLQ00/TUOgnpIQTmm3FLg+8ZzbrLD/qC1eFiMDCkmKbiLj+mUv63NOdqy7C1kdG8gzMR+ck0QFNrbQSa/tQh1fNxFEuQy6axNpiYsv4kE8GFyXRVU7XM+NrBXbKz6GCDKs2BB9jDVnkMHg4PJhTStyTKLA0R9mKrxAgRkxwKOeXcyf6kQPlIEsa8SUo744a1BsaR18CgNk+z/zybTW1vHcL4WRzBd78ZSzr4yIbaGBFiO2IpgAlEQkZV+YYaz70sBuRS+89AlIDl8Y9/nQi07thEPJe1dQ4xVgh6ftvc8suKu1a5zotCd2+qaqjSKc37Xs6+xwOeHgvDQWPBm8/7/kqB+jwsrjRoDgRDejd6/6K16oirvBc+sifTv7FaAAAAAAEAAf//AA942t29eXxb5Zkvft5zjvbtHO2LJVmSJVmWZdmSZUV2vMTZHCcEk4Q0ZQmBhmyQ0rAM0DRN+aUMDQwFCmVoSjuBUtrbX4aeI5tAcyGktJRtqKeftvFwM557M5kunmlphsvtlBAr93necyTLjgNhOv/8fgRrPcv7LO/zfN9necWwzBKGYTdrLmc4Rse0yYTJLizr+Mbf52St5h8XljkWXjIyhx9r8OOyThs5u7BM8PO8GBHjETGyhG2sNJHHKts0l5/5f5fwbzFwSWaYYUhJc5Je180QSZ+VyPEx1soIfFo2kDTT3hEgeQeXL8SGi3cVT01MaE5+8Cy/8kz4FD1/NXeEjannDzBl+CQt8fkxYmb0fFrS5Oqu6IcPWEHWkPSYlr7D68saVrTLHF8qqXfCf6vDXwsnQwfCmpPTb7NJ/KP36mAY/iDcK8CEyV/DWBuzEntc5qxTEifILriWE146BVkLL3XwUifIIrwUrFNyhKSlLv+R/m3/McK40kZeYtskZxsOh+Pex3Nc3Pu1byVtmyS0SVpB1sGXAlwFv9z6H0PwpQnOGSWsy5GGm47ynBNeaIVRjVaEFzphVK8THOlRE30000cbPuIxdnoMnOWgZ8F13HidUR999Fev2YDfjgarVw7hWaNhfARxuhrvbbw3prWK9pLkL0m+kuQulWEU+L6hJAVLkqNUhsHg+3BJCpUke6kMY8L3ppJkLkm2EjPgJSzHa7Q6vclsg68cTpfb528IhsJtF/iPDAiE1+DhdscFDpUG/ARE6MhzeUcE/vLFGP2LcRH4i+nyXCwCX3S8uvCVHqKBh5f8R+PHAj/sfqVUOVt6pfSK/8fxn5D74oSPk8OVYeXvR4R9mTxVuQr/Xq5UCFupMISJn0uxD2ivYnqYKxjJnx1rMjNWPk2khVkpdVx2W6YkpvG4KPeACrgFOQ+iD+ZkE3wcysm9oBB5t2gfMPA6uzbaFM8WmzzAG1ESS4zc5AdljMZLJSDE7XF7XPlCV7Gr0JlMJNsIPCQKncWufJfbU4TXyULMpdVpXU6PW/nncuq0sSh8Eee6B/bs3ruoYG9aa8haVse7Xc50a4vumLWj79O7bylmnKFPdF7SYul2eTr6IyGObPnLq7e6J9+27rrisUV9O263LBG3DFy7stSVJ0u6fX+x5HLTnn2+Hev3DPZs3nvJp/rcm4cvyXV3d4wwGqZ47jQ3pnmXscPsbWKKzErmCFNOMUx6bIjHOVy2wowca6Cvx/rzKasFnpR3MZ6+i9F3RFqVlZjjYx468yWPgFNmTK+80wtyHN4tUN4tEOQl8C6j2IhLgKEeRrSD4kkRcdTKN8SQoXq75CzJC+LwhbskLRFH86n+IfwiY5dcwOmhFHDa6SiVZGsDvHK5Kc+BlflcsasoIr9jUWCuI09iREwA13PAYNEZi5J5DoID+lj1CEUGRUf6uoWhRRxnd/V19YWWbN3PxvZN/xvLmz2CxhprIW/Y2zb1Bgc4ToQD+kOLd7M8r7WabBorb7YLOoF7oL15Q2DB1eTZ9kRze6Bnw5kXwBw9Q541CkG9y19ZWZxelkus9xevJmM5PKL7ysoqMmYSDEYDfr/KIgRNTrBbHNMBMsqAjFJMFzPI3MCUeZCP3KmbKodBOHKJnyLSYuS+3CJOSS01W4ZslluAt2UOdbIkucTDvMYXbh9ciJx02ssmoQE+Z+ROHnioMcEhJfFZM+OLt/XDEQpDG4tUOfMFVFnQ5mJSq6Mvkglkns7psXJuYDAcZmWBdQ7Kap0TDkp0rP8E4T+bCA0nHEZ9wJHI+ESN5Hf1X76x69qlfX+7vXgDt6M5uyBwwmi0hRbt9Abb/C0Bu7AgIjRy1zca/KTni5/afF/KVbTq/41zmlNX3rp6ReSxnquPfW7rs0ef6ryu/M//0HvZbbfd8YXmDZk7vh8K+dN8YJUnPXLNNy5tuwl4R5gSd4QI1L9EFe+iuhYi8XV+BZ2K6j9K4QMhxW/Q8wcrE6xeW2BExgEew065bADWOugJwB87zmVW7CzakTHsYGbdt54cKt2VuvTeJy8bfIi9+ydPVY5U1m29h2RI/7FvkuKr6/Z+rfJ9eu1UZYKcrr+29bisqV07TLqKdrEzyXI6t8cOesmmnrx08JHMuqfo9df+ct2eA2QD6f/Jd0iJGNd9+q7KK5WfHv1m5cf02sPcb9irgG4rwzg8Ok/RU0wWk7pizJMcPnTLvlWr991yKP2U44DjKf5U9N6Rxx4buTf6yDJJWkbPJVnuBP8AY4JzIyK4/0JEjImRYXLzIXJL5f5DlS+z+ytPkysOkSsqT8PxmcofCc+cYrRMiJG47JjWzBiQw7qszIAG8uKUrKck9RAw7IVYZmhoy64JOMl4ShkreZXcwu4HGcH5TBZc6hSKB08eI060zap8HDCSYYJse/VlOK8AJ5vhvhwTBNninODMtTNlArfVqLctxAoTE6fwXvpzO9nXqT6sZagOgM0iVqYJ7BIBZw53ZOk7PBU9/sLJ3xUVj8+0odNnBJm43qeO3/U+O8qAJ6zzXh6wNvrvsr4nH9beylDMseTcafYhmLs+Js10M2UtjrLZOFV24MwNG2G4rVSn/I4pyS/ITTBws2NKzsAzdSYOLUU2DmUOotmihiuhTj6tziF21oybYrqWcJHQgv6dN/T3NkQ4LhJcuPT6rUuL4Qg3qRfbg2KD3toZEEKkcO3ixel8vm1g8bXc7dcsXpzp7GxZtvias/u526OuBWKs5+z+JkdRiDFURj542A98MzARlNGYgWcCKGOjIibeyZiBaSZFTHlQmhgOzvfw5N1i42Xb+cc/2Kw5mWhe78RrFYExDwBPGuFV2YSMcOuBEZGsJByXmJwsAi9EQfYjDIOXJCdH4aUfQIls4ig78qAIMDvQsSIbgiRfqHJBS7lSZDdUnrxrw129wwefXt79T1axpdVu5hbmV2249sTbb5GO15+5auft1/7t9u0jHcW+lpE7Rv/6K997BMeWAXndCWPrZu5jyk0oLT83VS7iIDXc1JhNaCpa0rJNC+PtyUqNdLxhOw5SCguyEdEBvMsLUitCCBfYY1dWbgVVXAhfhRuBBJsAZtYojmr8TQgd5LwLfFwWjLAA8i6HG1vRUttE+EjS2GUmTx1bXiUvSJw6K9G58ggXtFTgiCpizppyANpIJIt9pMqbzNtWY0u7RW+1DC11LEr3sXpruytgcLydXnJ4efsnWiI827WC7epMDn2/PJjks4+U8ouSV9zZ2dAY1jzPeVM3J8fiA55Q3/1HP/WEv/0zm1Z5nF8d72a7Dj+xaeSRg9eijoNusIirjYwNtINIgqITGiejA51ACK1hUHZWRZXRpMByQIyBtS3mRR9Z/8bWrZOVF1+4y2whQ5XnydDL3MTZFJnITJ9V7API5D64fjPgNcX3xXRTUiArW1BtUjh/JFdOTsK8EQGzeXJSUpDDcFs9fNKCfE/C7QOwRpD0ouxwoscLxOAjNwMfWRC6zWCHgoiMS4AOUbunMH5mcvWS4fTgqLw0He9/yOuOZsmG6akjvmBjtEmwxRM2Kzn8d9d+7aENB8nI1Zft5wymKCmdOPvbUDLV21GRPtOWzqRu60GeDQJN+0DPokw7s0Olqq3q0Z2gaZYkHwZNs6Bz76AmIgZzwZaTYoKcBtvkyyF5kj8n54DCGCIoAOxpEc4oUfgUAiotQDggdskpyj5/6TwqozrFeKAy5VFhGikY6iMKxahcg+mhv31mKB3vezjbbzWnfAGtcTK1ovLkiuZJNtIYjsfDkSgp7Lx0//5Ld5L8Lav2xon5E4mkN9jx+Mb7Ru69d/X9Z7eS19zNHY5Kn6OjncpTDwwogDy1dMWoU1ZhTjrR9aqdRz8R0ZNVJ381Of1zjfbMGQ0/SbFQoY5v/cg5alHb9FNlD3KuAJzrTWo9wLleNK4DVDkCObkJZmWTgNoglQDMw7y05+RFaGVRNTVh4FmLWE54OnD2meyy1oZa0ouKE7ZVOYdgCGZYL4Ep1kfgqWp+nIB9iMvNFrtyNRjPdqkWSXlbsNh7VhJ+5UK7uWdBrhAfeubQUKIzt6DnBGc23Go2Gs3dbTaes5jjabPJZE63GshgauCqvksv7b+yp036xDcKua+M7N286pFHVl+3d+QrucI3PvFzwi4aHBz6wqcWLexkz/6uNZMfuOrGgSKaV6YEfNoNfIowWeZGVb8CoF9m5FICuOTM8GbgkhP1q51yyZaTG0GjojmpUZA9wKhUDu2v3AFcakQucWbgjUcEYC7p7DJvQg45A/BFYwS+yIiA1KuQUVEwVCdR0ThxxlaBx1KmlBXQd6KUWk6uW55KD1e+O4xq1t5vsaZ8fq3xn/6pKRyNstHGcBNZd9/q++B/bsONa770pTU3Vk7cDIpW+dVlrVTRyD3kWUd71llZ6k62qzGJCL+JxhT8NCaB9kjic4gJJE1OjUsgLEBDNDwB/51iD5yi8QyAJXiuFqwZnmtSztXlEMZI+pxsrkcy9PTlywHNTCh4hl6F2izmGe5tDQ/XYRykYCAFMsw9ML2MPXJ2F4Cn+KtkM9n8aiWuxFDIJPc2b6bjZRDj4D84/Owu/COThyYOzb1mES7oMhB6EHtketkz5MRBcuLVyuOVxxXcgTb5Ks3vYE3XjF42Qh2YTjGX4GXjOTSVsiGRy6GrNZjSctCiGEsRVvSShlpqj6rC1KWCKPNoLsC3wGKJrmnBSjqAA76y3ZfKNjvMvKF1oCFz1OLK6f2aoM+fWfK1z1+58msTE/zv1nU1FeOhQMvy7ZfsfvgcEJMvbVhnyehz2bXJ64Zv4rit686Mn1LGDraRy4Lu5pk+5gBT1qDuGvmpchsS4eCnxqK9mjZYeUYpBhlrKNJ3DSoi6afG0gqOwCrIjeCHOhV41ynIPSBJT05uBsoHgNJOcMfPGh0Nmmgbrod6RFmfAEVutks60GyjRsQXUlSU9CWp115OJJvBOMgNRfjcSzVdgWRJ6hgKYs1FU3CGmk9dsge4psA1MBFE7FRsayw62JS8/ifHdzyWv+1Tnclk17Wbu+JaV6L9kiUPNXjSDudTTYmtP3l1c7KJ/DLr8XdkSbZle3bPA+v7e1o6uTs7sn19mXzG7IpuXFUJHDK64gs4X/oz7Xv3tt/UOv1V8mqhwVcpFRR+Auhip8De6hgLoFAiWSmHCKIWQebRPQM+sSFSJ6J9VKvTW4AdVMkxmsZFAqSY9zic/9D8y9TEqcq7PQNas3aA5CtvaU6eXUhOJJNUjzlmDdznebiPnQmA3n2SKROUnMM0VRZRckHT1FiDk4hgdRrQccezkve4FMnJGueUbIEhJGAIFi9w1wDsd8BYJBZdFyij1IAfSkFRspQQ/VWDKupzmjhE1dJy1RdriPDC2uXe9ssuCQe3XDP+8uRg4yD8vygyOBgxfH7n4ZuX3de2fLDvM/9wzYYzZ8i4p/3gE+0e9gB5yJ35y7szbpxvVeyeZVapfsYByD2FtDQYq2ZT9oDN9AjIP6kRzIOAFpTaTJsHTKM2hVaywQHQzhKJlmqRoSpcK8RqUR+xq6pAylq7ivBn4fmfGuylAKyOea0rGxUjP63H9/WQfnw86ioK8RJ3e1JYIDZ1j4/PQHzUiaqsrLB2yqiSsoGkLEidYALqQlnJc1zWgWwASgE6tdHpgFqRg4EC9maTbYRyvha8Ag1f88zj329t9vmaW5/5xjOT/X2CnWNZzi70Lb98hFj/+B/ENnL5sjNn+WQot+Sqof9xYmjTQGcIeI3jWQXjMYFnJ5K5tviDhaRkyMkWXNAhxuGq8J9CSHheQ85UTr31FglWtKfIN98l9ylrSrzeJrpe8TB0lQI2f0znxKW/ukrpIbVLTML5HdPvsg/8i3J6nezbmetV2dthHdCM3AkYa5DM7aAhQivIPgxuBd5FFDzmZqgRlaxiWWtCsyEZFKti14Im6PQG/CggjjLGxkgt0uJx59BaRFz5KtqsMyqzdUJ0LvH6O0tvLPfvq7y5AVZ0fjGkrO4mZ2lEbM3AYGt+wxD7zn+vnG5y4LKO268s737zm/pFn0Hl2fNUBgwyBxdx+G/N5KFJ+J99YHqX5uT0V9hPq/wlWbqOdjIzS27HzJIbz5uEA+BY87l/JygLG+Niyizy0oIshGWCSA+uQtKYSrbZ6TiwavmkPZg3mqzksku+xL/xwYZOV4KoY/wdXEsAG0MkMSvpjst6+5RsR7ivA6YbFcsl9hOwWXnOEeN0lIa8Rav92j/8+s2J5036Sda5Oxye3sW9S/5QMflgxV/TmXVwbQ3VGW1NB1FndHSkVPFia1i2cmLyLVjf0HO4++EcB3MTnOPMSprjmJ3AyKZLiSAc2/snASMIVokTJP6YLLrel4RjR/ov+eNDysc2QbIek3Xu9yX9MeY5jtfprTZBrIXOz/tEjTWgiIBCXEKBzgCVSS6y5i2z/ssb79db/q7y7j4jb9pXeZd7d+Dsaq48cNYKwhsZGWGlGq0TMG6LImu4EIo6ycXWvGm2T7xCH7j1y86eBhv/vWWc8P+fWIZi+8aonjuBkrIRh28xT0lsVjZjAMmVlcTjshaG7kbLZzGDWmmp5RNz5zmcNZNPbtu9+1PfmZz8VFM4HGWvuO7WP5y+deP0FeSVQttffjGVrcaB7mdfAN6FwKJcofIuY5waNWW0ekA3gMy9OIymGdsSBi6GBTmFkAyGglYlFQYueoGLkghYxYKexQT2BPFJRnGNNd7SeC26x4tjcHHB0Ne7Q17O/lE8tt/2oqllgXFR/iL5fITqmJtZxyhLDxu6Fk9WchxHPG7AGB0Q51Wmyg+17z2mBNv4Npgux3hZY3jfKmmPMaOYb6LTQea0s6YAzHEMdswWSc8tk/f39h3+0eTkslhPTxO7e/pu9u3Uc3/x9tvTW8nRcOdf3dfZqMz5OOj0AZBLB3OdukrKwFoyiEO1I0jJZaXIcVmwqzmhDnghKAtwdw4ND+LJPIgmDah5zMIHkhmavRAlMxr7DABMPeP2RDpqRj6vqpCaDcIhF+k6MjYnF0Ttf7w4fOw7lwwMpjZv9BVXtnvFtxcs/z7PPzCyyB5dObwoFOi+st9jJ0+/ufmem6/5bzfcNfLV/a3XDD7MLeu8xnnwhru5z2x8sLfntttuuaqtdVvf02sKdyLNQCasoREPetTVkakWrTHMRPDyhQj/s8mfTd/FVz5g+YriV0eAX9+Ec32AimqYiEj+OVCITvyACoJg8pw37WMzLi42wkWVSd4TjHKTBms+IIQnSeGapTinM4uWXsMf+mAdwpmmbv4QjMGu6pUB1jbo22lMHlZnBgXNcqBUJkSzBpgtLKllhmPURtp/PfmriU/rLfqbNCfPhMG6vTIwwPVUY5zce3BdF7Maruum13VZpiSXIAvgCWzKOsKmhPkMsFyCRbLsQk9PSpIgIlq12WUNT+N7uHQw4NRU716kxloZg/Loe+PQVrPesuXQm29t4EXtxoMbtYJmA46KfX3DhukijO3djg7OqjzC+NAI/wzGJzKnq7kISchRIG/LIZbXgloaYdEOHwBmciiTqver73y1GsG2SiJMKoKTijt25OX/87ufKN8IbTIj6umXNit8aT12ZOG53z2hfGmE00zwjUGAb/Rw2g3VC2rhGw18o/O8L+sNevyy99F3HqNpbiKMsoRzpMvwOJN0ZgZsGDLH3LEBnHudV6u6u8Pwrd5kFec6O4WBXJWDDuHtvRo9v/ft906/fadWr7vjf5wmP7TbK/2ch32jss9uJ3umu4Bn4NrZZ6itb6G4EmVqAv6YlDS/BqADYkutCWAZwTICRV6g/uqdrP88efLtm7S8FvTl7MHpvexd3KZK2GolJ6nO4NpqI9XFKFOLhhM6l9DAmc7DraQQcUWIkx2uHCSbpn9LUpVvn+DTJ0588FvFL59Lk5N0bkZrkQu8nolWQ9CKh5nreSI0BAEY+IE33qjs+uUrmsyPaY5jFSdoH5+V4+AU5eUEmZyX4/hR5Hc9c3IcnJLjIPPkOBwkT/Tspu9OH9A+/idJN6LY0RKM+/X6cRMacRlj6dDpuFlSNQUeV4Si3BJ5sPKZN4VXtId/fObnynUKXIr30dgg48gb4Faxwquwyki/Wtn3r1yKDU+fZJ+nsZDKEX7XuS1Ao4ORCLCJVzI/CvyEGxSG+eSBQ4fgWBLX+Ngtmp8px4KTZ7T1xxJPPkniT/7NDs3Pnn9eqRMBG7eN38W0MSVml+oVusArOAi8CGng5G6qR1mwDV70Cj5Y9GUFSmQ0l8vJVmEKYw1yFhezfEk2+GBdrXe0dKFvsIqSCXxDFw8apzeZcSEQEsesNsabm+UkinmnJ5+oBmrrcxxBYqUBGU8nGFIntaIdA6nehR0xt9XxhnXVyuvvWD0yzpta41YtqzWbnJaAblv3+jeXD+WaIlYj4Q8szycbkoPe9TtZaeeKoQ1X3JktuBp7os723RqDUWfSWfni0A33rbsnXDkZTKaD6MuBJ5upbYwyl6mWvxFWRDaipEiIFFOiCkC6w52j5igILDDCewSCxqBYDao2AmSRGbZUkm1+mvenoTj37MA0LHFooLAWiF4zHnX05lZm4/GOFeFAbsH4eKItEvF448MhW2Zl71r2zcsGhm3uAnnjAxd7qy+dDE7/VTCZpDlcGPs6kGcc1/FUmlbtVDmCI/egKiToyO0gRLuAMxaD6np415CTkzB0kx3Gy0dw6B6wYWVDoKFUH0vvJbCGhyG2ERg8jZ1TWSlkuAZXLvrcl/qWjHtj/oBGE/DHvONL+r60e3Al6Rm9bPni4bGdj3cmwhE/e5U/Ek503rNhbHjJ0GWjNC4I475K5fladeTIc3EOz90CXYWi+pkbQP2qPMdFqMyLlOdU2wxGDGCJyHUEi8WqprkQ/Kso0TWL68PJ1lWNDW3d4wr3M8nxxrZE3OtpfPPynpVWV3FYc7LSBQIY7ls7vYm9FZTFp7JdzXFsAL6HwfauV8cvaKbKARx/HOdRmo4fy64ac1hFZVaizgasvMnJrVjGgMYuVJLMoswHkJI4AK1Ro8vdqEwWRW36SH0gBdZoVcjrKdSCKoNccPC713cVC5pjFGKEOLKeCy1+emt+u+EYp7O3B4Ug8axe9nCm9da1d3026i0Kye7/TZYtH/pK5hPf+uY3k/aS0NT3TcXmkzc1U0wDaFTZTVcPWswnECmIuQxUHw5EosvJoXo0FeslygQOEU+hOqljzu3j27ZprRlbA2fhfK78gc7wdu7ps1dwTx8JdjSGlvKEJWWtfv9lD4Yxxmau3MSC5YP11xBzFfM0U24GZkrRvDyiw+ADmrVl/BQsROVPokW8OitljkuFnLwS4IqwAualUtoElmulIF8ODPZZpkYHfZfDIkRvpeGLjfBhDwDXcrqjiOpy+UoAsRZ777LmETRfgwhtJZ+97A0naO2IcxkgX0YvFHrx60+Ksr0DTNoITUc1i1ICpORBWDsb97p7CK3B6UzgOiVfQGGp8x5xooKFqY0rzpRGJRydhbpaHkXc5qsufeIrmz6zcfmdS5L5oNbq2FTcYeBZPn1JuhhJrrj7U/nrzaytYbg9kd6zvDn/+qody7xioa1nyeIOTmdu9Vl8WiHlsXqevy3fxvWueOz/WdxuM1osUZ+fTV/2NdJrMwu8x/uDlCe5NbP2G5XxWGlrhy9bSN8aicTb7cVWl8klhptc9hb2VY2W5APevNCUq7wVdnWI/pm4AtpOD9YpUIOpxaWFNyv7cH1pwyWcS1lfUm2lgfaZUE9szbjWHHDnfhrPrAgE4gU3O87dYhQCHbDsehSNnrPgJuR/1tZcJKLWU87JfQizch9irAAquWYc/uM3lcfh3HM/r+wlAWpvfICsJQ04cS6fl0UOFj85ivEtx3FeGgS67AnQK+lc7pn4jToF2wimBTJmvavjG53Bcd7aZmrgzH8xPn74JZ7V3jP8ML/ng7uzrsZ+UG7N6+NVHu2hcZ2tM3EdC43r0JXh1OnPKhBFp2JOvRfQqOGYpBFGtRod4Ex4rMOZYxRiKpCyrNEaVPzyoTGicb/OyG959YWvHrnebBwn+wYFodLDvkdurJxoYt+oyVLlb33cS5gV9xofV+JeGBuSYK42w79yI85Tbx5FD2gd8zCYbVG84WgokWym9qxeBebRheozCk4rBILFl3lHoGHBy/HMsDfcm3SZW6/xB9qz9Rpyi95e0xSxqcVl2GPzZ91kY1UvYXweJnIhvSyDdKmzm183CxelmxtBL/vBF6yBe9mBF4tVXwAuoGylvkxTzePLDjBCDlo8SMusMCHlQBcgqtWB/riSm5gx/DVbX28cnC7RrZiHfi40+PT1XV2dGsXYbzH8iDPYOoKCn6NuIEA8q4bA5t+2hh1AU7/+qemXtRo2H/GWhEiXVjP9FnqCGJ1blb2UX6o/phgo8hEYKFSPgUI1DBTR0uwGRUBlh9OlAIq8eB4KqkuXOrXzoSBwxpFIWwKm7puzgdCKs4+iQ1ZwUFrJbe5lr1LHf5kqg8hH4Ing/HgiwtOwE8USsslSqkcTGDd21aOJ2ujnQRMA4BJtVTRRKWhOrqhHEzh4gHLqvDsNYxcwYmeguoqRJLHKcMmaQ1vByAbUWisW2Shaq7jcAmbfqLpmmpZEvRsH3D7QVOOiRFT/64XuNuueaixoNdyjg7m2Ggvip8phvBlNk+eyUuw4loOrsSBrLRbkzVHv6ZsVCwrOigU5waWO6RmvL3ahUJCiufnZwaAQW40EdQw//cXh7r7IpoWhjNmaSNn1P0z1fo3XfHFpvj92XUtrennRJ5Jl+9bt3XLZ566+vnPTguZibkEokwn07Fu6ldt8ye7tGzs3tnSsbLynv3kxXbueO03e1twGXqlF1WbRoCR+WFoz4RIoSTT9I6LCmhQlddYwF/BUDeLQgh4R0Ey480AupHFpeIFv8Kat+vvvHwc8M/3ygbX3aYmWvAlwhl8cH2EzR4ir8m/Upq4Gvm/iNzFetEOU7w60Q74sloAxsgOxq5GulOq0TEWtWooLwPesjrcOB4Kxop0fH7doAm6Pf/zNtb0rBUfRzm7kN539slsTcAa529U4yjDczwArPBo/IsdlFmCQgSUAgxis/85ifGeUpx9wlik1ZTQTRRKe+7vnXl+iF/RL+E0fHOQ3Td8+NMTuV7Ahdxtc28U8NBNDstbHkIS6GJKVxpBoluDgf7hnojQEHJzLBw7OcWzU6XKAd4PHeu/GEDAaqneDl1XvJriUpKlNVMNQNINtED8sDOV8+tCISW8cOfT0i4v0FuP63euNZsMiJIv19PdPTwFxzw0MsCuUR0bl3xVAo8h8v1YTSyzVIBTODyFbH44C/qklszQedeXv35gTj9IBpeyxIy9vf+fr58ej/Eo86uVvV0+rRZ14Go9iBkwMwAjt7CQJcmaM1ejVQNKFw0ivr9Py2nWvH5N+NAwvhl+WSCAUqvyKHWRDlTPhMNFO/zONDQLuvg5o9jElRrJkZb22FvUEBC35BNmJrsqiRD19WHRNjCYKkPUWdeoEiJIjTUaTLhX/quPwHdXbc66lvJHNib6b1w4LP3ljDW/g14AU9kYDixKClmef5zd/8gv82PRIqaTmcMwgB57q8ezYk+HDYk95YiZ/qpwiwUrhdOXUC+zZ774wzSvYprdSYm/XvAfWYB2jFKKFYClhyspmnk6JFl5Zsmmq9SNo93CRJmpEpSqfMQPd8KZEy6ngIykEC4W4r5b3Bj8ANg0sBy0FEmkdFSY5+zC/ibxRYH3viqivvTP3rT1DGwLFgf7+gWJgw9Ceb+U6232RYfIK19PWWLnl1gdTyTB7yOZuvZXcv2pHc3LbanL/ra1u2yE2nEw9eGvllnh6IcVhFYbYaTysHrNZq5gNU19rjh2rMPrH1VgW8OEWyocRRknL+IABSpAJU9MWlQ+J49gRgp1CosIHXQL4EAU+mNFT6uJKdWEUl0uyPUx54HJjAQ3N6wITVB60EZ0rV+WOwgMrKX3+qVxn1htdMRzxZjtzT32+jheV36g0kvujrT3ctxamkkD6DD8qt6zelmzesQqYBPxAmnZprPzr2n2gKRmK7MPaqVFnWAPmzaSljh89PCNrTEABU5LDTlo4OFMDFGKp1U1qFYCvQ+e+6x5rZOCKZTd2de/oWtN/e989zoaedcObtW1C2tMSbXV/ctEXNEPdzbkrh6ORaPvG75ZyLVcs5xuMXoOg1WY30/VKgXuP7aHxPgsTYsoa7P8y0f4v1GJdDqtVMKFA5VTAdiCN8lSYwLorkqVP3HuniLHyx1P0cb7r8nhd44Wu6yjEXHn1qbD1MxNDv8EH7j1iPHWKlnUpvWqAn0hJrStTe924Ob1uYFpiSSwK+0PxrvTERGUvv6p8SolB3c2u0oaZJqaToaUvYDhwBok04lTmvWEMHCKI8OdoIYxJhKnE0pIRvK7gAViFNYdKrAn1pmsm0kRbicTBv9997cYXm+KJaDQRb3ox275p99+Ts5VfhCo/J1nrV79+49c7Wrri7FVNXamOezZ8fXi57b13Q5XjVOf5c6c5p+b/MEuZF5lyJ+p8Gn3wsqy04LicFKZGB5ILQFmCMMCkIGdhgO3ilLxcMekvr3vnV0ouuyRIPcfkOPe+FDs22hSPOdLw0Wh3qQdcGLydcWFl+Ix6slh3T1Nctdczr6k3G1iAVrRvEK1JkpYBBe2HTX5LIBxNI7LKitjA1m4fs3kaIw5lXVBU9DWkQZig6KuONq4Am0AuyTZ2FtKidW1OhwcEr1SwaPmvGO3xDr3otPpMQc2m9i37zS9wfk8o6U00lrzP/Fzr9XhcnrZBv+eXg2ufe+zSgdXah18IxzvSK/ovDbnynFZr1tq4/E+ec1/f2sJxDo/1ti1DW/b7Vq/Zm1+WLi4srJO3fJ7j7rjusXWVimv/jYPXXa+PL67mn2j9hY+5jak5F/uMc7FT50KXw4//+3+fjRZ8HnCG3mPMKEO8PiVRSrwqH9EbjbKcVke7fsTDGj2mXnh857CPWgSzXeFdAJQr74I/JVxVUCYa9U8/fliSpEn4e/jHb39ax2s/rTk5bbt3//7KIbJu//572X+vpUQYlggaH3tajUEEmDKHc0+blxlY+fK0oVOdLKC7MZzNRHjpJRJ56SWN77XXXlNqfLVFzbtgrRPMaua/KRWAY01KP5oNe3j8Sgdauktjs8CTUgc43E/fDat1gJfSvIdbAVywnEmCc+xWuki7BUynS4tzY1nlg6U5jN8D0B0zKrN5BPjdjcXTTSUpJx62+dOarv5hqnR2uS2Gbr2/S7Q/Z3S5w0z7kqUqpre7+XyuiRZHJZpiUV6nZe0CdpYhjLeyjW0kXsWvMGPdc4p8dC5a5EPXTYU7fkG8j3+D+H9x++2/qPz6G1+v/GbHDbffvuXwv+774juHN28+/IfKmX89TK515+5YllxuuJfTmSN2o0trDruMLu5ezp27eXlqhD399cqv8QrEB9fy/eKOO3bcUPlt5X8RLb3G77+4798Ob9ly+PrOtuvCC7fv2SMIYaM9xjoEW6PR1bhnD3weGtjyn+/R4WfJEus5j1xYmrkClV9O7SfsnyO/bpBYOjfWTiU21qoIrn2W1AZUcyT84aQyO9IwO1pgdrQGYHZkYHa0pFszyuxoyaizo9st2g/bNP6mZL4TBdwuSjEQb6EJxQvSTabaOy9avJp8tSJBwIKEWv33RYrzmoeK1/z1jgWNv/3xQ5l+l9XqHLhICa4gOysPkwezm1YTtrKHsOlgTymYYggpaWLsq5pXZuTGz5KbqSY3gviwRL5cuVkTe5LiIHIA5vGJat4M4A83O2+WL8bIgb95ckLje17BTQzoxwS3E44PKPeqdmOZ6rux0LRMTLD7/4Xe43uVvez6cw+Bn44wcCz2jtnU3jFMVGqsTBsMUWkL0LjyunyxQL7X37wtc9P9d999vxLzTFVuZXeCX8Za5y68imzR1QJKIqJzWuTsN6URt3rAhSVyNLLkEWkmhFEj1O4ZgJNQe2mUOgWMHVhZxB+p7NJH92zsjo+aw83tKcFarXj2tOlDXNDnPzoxsePqS27muO2LPrGuraU72dCQWr79krvvJcw5ptB17UpbVpPLruWOnaJolGGndGGwkiZYS3XOrKVmV+Y6qjheX5J48bBWZ4DFsDi7RJfz5JOcY1aZ7g1PHryho65Ul/T94AdnKrVy3Y93f6wMPowRVeXOkkasBlGV+xdBGebcP3PwiYmr6u5/d93d6+9thdc9DK26Ov/e7lm0Pwe0myxWm5MOwY5xlZkhJPNFYEJsTrHyLS/29r94/z9G6gcyNFTPiPqxRJgkcz2DGD8IUF+guV2cMM3zjS2ljk3WY/sDHZ1VCASjSWV0Mkb1YCkg4BFOOMInShGEMGqsXx01wpVqXUwBla8azpxDyICmoS2UT6UzHnuLH1+3tnWkPPa0b3cdaXs5q8CJDq3R8xi+cohaq+OD+IzMeZXWrCpzF9Nfi1LMoc5To85Upc5ghOWdS6WOtlHVc7+gsh63eqiNevtLLz1FxxcAF69w//Uz7ygD4le8Xj+mXTAmrBANMl9kYNE5FqR+QPJlx2yqRwhVxzlqIIw+Xe01nxn0qEXDw+cB5fNAdsyi+AXsBfMQxNM6QSm8fRYAkFGhhbeDYUNJ+YIAkwxmi16NxCuEsU53rqszEVW0m8XcqFMbrREoXvGFDRu+YKU0Ptq2sK1tYXW2fe6yyz635swhldbvdKfT3S2KvRKA6Bith3Uw25WqUaTLMVUtGe399jt/NwPvbBgiaXgfYyWjLMHdHAR8LMPrut0chBLzLEPYWgiEjFZfz8Q+lFZeteqZg7fCP15xqlo/Pf1Q+lEjDl4toz67kGWnK7R2EWy0UgffxVw5byV8sVb+lc+dXwy/QG3xl9s7aGvjmDaVK2AtxJ9ZGO9Q/MFF18e/NpDalrnYIvkzv1IdjFLHuArsgwkklpjpb5ypThfVuVLmzNZSaW6FugPMUl2VevCJgztUFqNJ/vOvj7a37vroktXr3/2DOeO30+s75l7fOXN9Yd7ro2GtuwX7Ql//i18+Ub0L2NNa/8cqsC0mqtktVLNp9tGcq7uZS73ZKGcRVC82+27KoqDudmZcHhw9Wr3d669Tu8GeOwMAoh/oon1T1ANi2/GTf7PjpslJXfgHP/gTFlKpOdHHqsdhho5ybHKSPwjg5SQyiT13FI4Zg2Ow74vhFIrxcoMv9g68cP8JdnJSuwXoVC7JcOfehOO/B7Ry1JIyaPQwjoSjLxw9etfk5MGjR7VbXv/Tz9DiqT04Sm9MnMnBmqjaGYMAWPaalCqU8HHZ4JzClQoje2FmjBKDyCjYE3DlrLYLMaa0L8xqvnD21Xdf9JHAunV1HRhYwF/fhTH9lekdpPwv5KFZrRiqvkwALyzgDTczAArkGHhDN3rDsOIN0fdRpM2fnlXbbgq+Lxlpta7RpBih6itqhGQ7YG3Z6gcrEBalZEmK2aVAqVbKrlagFy/oEutq0/eACwx2UneYQncYBHfYAq7RV1+0fr47tDhBYrSOHejzga/JMstVi9ZarWSPzfT2hMCihQS5GahtyNGaVmzsCaEt8wewVUwsO4La0keVtaNqXnxpewE0OHsx5e3sLYDo3HNLrz8uff6cSmKNvuYQJiUpXVh3g+VOH04fgr+Lp+9tMFBbLoY+cmQe8mbR1whz6RKVvmyVvgTSl6f0RbAjh6boKHGd8ByhwmssYa/0qCMQ1CIGMNvlUPijqUSj8DF6FDIvUNsRuzhaEZW656mjr6c3zyxlblPpHazSWzKCkmblLMzRKM7RNK8E7oD+TqC/U5D7VPqXY9MjpT8L9PcB/Y0Zlf5yNJGk2YpQFL9PUP5IeYx3wET9UL5ccLp+DFZtmjudMxTdtvj2XBTzxuaZ6Gd6z2cmr/Iyq86NPHPpvLOjc87sp9wr1KZ+kE79Zx3ahkB7XtWfjtxH6k9hHuXBTy/IleLRo0/X07/76NEL68/rZ7RzCNbc+DrVn55zvwP89kcmzKSA4l+pOVaG5PM4V8pO2vInwrusSnvgOO0Eb6Gd4Lj3RqQDywAUHlCAOvL7b9Odzhi60xluihJSdjoLvX+kt+/3N86UgNMtzPARjhq1M3QzMnzk8etI9YsW/KgMX9QhWnsJIC7decwG2Ja12cORlmpPlIJ07eH6nig5ittrOJWt4Dz5Yk0KGCAvxnQzvXMgoqKjKgEfqcqk5y5b37WKFLQWf+aztkVXK3LgbY7nHlZEAOJotZud2bQqgUBouOPRbFptg3E0rY0eIr+teCn/yST5JQgklXAruJ/2Tqh2ub++eyI0X/dEuLoxlh8xc1kbCFJ7bJcaPrybAr3NvB0Vi548eMOFuiooEp07xoXzj9GfmztMpdM1+CHuon6AiL7mHeApwGMXGiCFsrPG14h1RDPji8zHw2h15UENfj0X57f3c4aJ9n7ekWYUAHzBwSIi5tSxKrYmApa7brTR+UYbq402qK6TAg2hiGpfwo0fOV4FOM874KICoS844Cqmprl9SV2L5OlaZJ6OCVHtmHiWcLzZYlMDQta5rRMoaKHWPuE6+MTE3BYKir1r/XjYJ5aiFfpW85Rky8pGc7VZjHbjeWlVmnWebjy0rLXmrye27969+Wn2hNKQR7Z96tZ3Tt96zb+f3U5+XGj7y33YkUeYQbjnd2FNm8QVrQvkIjF53Hel3ER3StBOlU2ESY+Z1WRCM+6aIPthPatHF9toVcI/jRjcCdF0gNmpTFWTiOXKGrvUqNYf0fInpzbmqsaCXQjkqVHqqu65MvjTRFNLa65puS8c9g5tuKN5fSo+vGHR8sp7ly7mf97avaC1MHD/0Ib3fn354h+mS58j1/zjX9zYMnjj5y5Zt37FF6p7xLHbND9j2gAR9TKfVW1896yuhT4qy3x910Je7VroUrsW+nEDIy+WeWWViFU7djGN6R0tuW6leUE2dSC53ee3L3R9zPYFCos/XgtDAUzYoo/ZxsDHnn/+gzUzvQz1vCrV8aprHl59aIdH/0yHB3Kqu8qprl6FU2VTz0IKqf5rWz0QbX+cdg8zWtWP3fLBe56fo1cFZoDZq/KqdxavFlFeddXzqkvlVUnl1SC86QJelflsoTRHszpUfo2acjQDw8i95zOs9HGVS0XrH0+/Ukq02PUxVYy7YfnyeXVsAvg2zFzOfEvl25o6vgHQoqX6C5Bng4jZ11M+rqzn40qVj6tVPn4C3qwEPo7y2dwy3D0MW4ueRaVbsqbKxQULBygX15zPxdV4SucCmN9ZUE2s5R8uScvsUu/H420fqYf8tAhwpgj3YzF8o9bDK2Ftp6vVq/VyHYFUR1srxrV3fmwhcCYWVwE6k+sxeClyTgHD37fMiAXwvyKXk6qdXMTsmddSDl7IUpajXX3V+b9YtZWg0zlslKiKor2ju2oA+gdK/1XGElcP9UagcFFGoPDSS4+qfLwPIMBFs/K1DwbrTMFrSpye8k4bBN51AedWMIdV3vXVa3UuO7ZCidwvzY51qZH7YcrPIvBzMCcVBUzi4hHtWXgje4G7XvqKqnq3wt7R5VaDnm7egxH8lfBNsV2xtQbxOb3D19LRtZRuCLvcXjblCpTPfefzGUUhL10BM6Y935n9mEy3V2P/M4y3qwmAi2H+fTQ34Ff5b1WyAxfrtYI0f/CBdkYMn1ZSCMp+sE/yu5g+kME65tuKFCR9Xl4GgqAScWqmyjFsOAjn5TYQyqU5Il1OZdAPMmhGnU4B1/sFVGIJGO61TknDOclLq1SltTnZolQirQe+9zcrXYyLU8DdWPcy5K5XlLWY9RLssj5Mu4B4CsvktmWi/TnGZvU3+wZpvUQMs141pn9Is9ZFuD4y082F/L/j+sV/Qxu6fqivb+i6dtHiyz+8AXJEafdqoMLYt09p+Iq7Zhq+Ojs/0kGS79GOsFj/N5Vet8petcewtVY9PrvLMHPhLsM24LId4++JZIruPyeO8pHmFmUfZDnd+p9sPVTzIxfsQDzUn9qe+fA2xLM30iwIp/TyAQ4IMzGY/9fO7eZLodXM1rr5mmrdfJlaN1+72s0nhxrpQnGUD0ToVs8GpWYypTb2NV1UYx8FjxfX3NcEoLHnIxv82Huef/7siVqXHzOL5hag+bp5OxhrNMuN6dw8PYzts3oYy3ygTdkMSG7N/FndjBygwIvpaHwQ0d9HdzWyO59n5tCcYDpw76PZNLdqlD4IVc7JGsXtNYrzKsXlUGOiNFfSclMcyW5VyU5enKxVLHdx4rYqa/P4R0qcjANqmyVy8HEK/SdVPc8xW+fV9PyHanrnDAdiCgeeBQ5EszmVB+10BfUx9R39f734Cx8qfu9LL31XZUAQlv0fwoPXzr45owSv0bza/6Q9bj+bnVeLwCzaPD6OTfJnsvymal7t4epxSkdhEbvfYKHPb/oB7aVX8mpwTH1ezTGTV9PCFX0gBuWS1byaWjt4fl7tnvHxA0ePanyvnQnDHV6DMawCeW3U/IlpAkxS3R02D7LCdju5RVPLTcexByMnxZXaVWxHwKx0HKXkDzSilLLisw7eF2rJqzbJhm3TLXTmzmo368SNtLOkjSR1GIvReYpuT6K2jbxSyFdtPlvFhQa/vQWW+Zo91y/YaHdwRm4na9L5NhfXNNmuHNiVdL6sNKOFOM6ghLiVbrRb17IPnn15w+Aar4Mzc5s1Jn3Lhv6hyz67evfgFdMvKt1p8V6lNy1RjaFshvWGh8ljxqfazScFlcRApJYYgFVHYU53nxyM4L5C8fqYf+JDev6KH4L/z+8HXASo/gIQf55WwR/MC+IV20R7CEGX8LcKmjHvM7uLsGGmixBrvDyzuwhpYE10lLCP8Fmr0803xFVBuy7UT0jTdnNFen4/YQxmRlERY5BTmgpD5zUVonv5YJkiuKa+quDqacLqtUurXXlVmryzOyPjOWyODM7THBkEuMt7I82qicFkzgWoOo8iDChcsEuyRpGGOpK5rZJvzaGI731+rqxwt7Bqt2Fzla6wZma3MGtttzAkCncL8+O0FB3YNiI1KdIKVynzeC9IWTVB99Eisyk+IvlRUqMu4nyx1eibAPpaAYdXY0g9VfpyGlzTyM0w9Rpw6jXh1FN2Js0AvRlBLqr04kakGSyHEB1uSmMRCPYn+FyPQnC5AXfXBVvkxd+5cDRSlkitdJvSSGl+Rsyen7Mych/NmyV1S/IWX+PMbN370dyqTl6j+zGhuv7eeh730M8q/DupzuXW2v4Ws2dzZr7Z3KbOZtAQd4nO5+esvMvZEE+1qjrSkr6wjhRi882AwjwzIIA+dDbJn0Nfeh7Vr33Qdd40eI3qSJldwz/DNMDcbiUFpgxuMl02IJlpINOLZEZnyAxap0Zhda2nVa+4PNZk1a0EpSAtX8eyVSsc5LIm4SCnsjJuUzNy506HlJIxDf1lIo0ga8PKLxOF3z/S+8c/nKEpOY0wymtcjrQGfxpIp3U60kf6NKc78btRB77FI9x4BD8axKfaqaNN+BZPi+Nx/GgCn8pwtbqUXRP9PSE4AN84SsyAiddo8eeBgk3xRH1r3rO8zuFWez2U5B1uES8FSnISq/C8Btrhwaj7YuryxTpBzuTyqpLkHIok+02O/vCIM1dQ5GgIFkIrXT3Zmjlrtu3cg5JMEE+846ruO1cLiiBbmzd13DniAGFWdpBHQZLR6TT5VWUnyJL+RhX2p4It84IkZ3WognMNXXyHKvqTebpUY08c3DFvpyrZpe5H9F90f0zHzHP/H4Nhn/f+gODq7x2efe/GLE7Ij3FvtM3z3F5QgOD8IwDrC/NIGcNJSn/j7FFEspjju/hRKCmyeYbRoLSgzD8MbEvBPbWxBxR4gfm84Zku0FCtC9Sfq28EDc9uBMVN+DH7KDloCvdi2kJRYhdsDQWxXbA9FMG3ul+Bun/Qpf91+xXQHZvm26tA/E/vVaBs2jSzWQGn8vqkmjtdPcPt6Hw9tzGV1WPAan9QaXMarSZPHWry9GI4nlQ15EJc/yo4gMjRoxdmPFUVhv7eHvcM3fMlVcv1J/TVnbCR9y2UEK9jCqNumKjG7YMtOSxWYuRgAiOZVlt9XWxdkeSH7ua5dCu7RC3pfWHHYFejspFni91aLaK5cmAw2aFWU2YTywauUPfvjDc0nt1dV3cEPpr7Lr+LSTIloOevZuKMXYBunLlahDEDb/tzRFpKKWoGb91MG6xoVLG7FlVcXIsqLsMiM7T3CeyuGo3xGbozmteuBhVFNajYpQQVpYw4avX5aVQ9Ngv1nLdk7iWzwonzAB4yE1+kLn/r4oEdtSBixmFW19CLF2+fDwWTtWZHBiOHiAJKpVrkMBsKnqFr6oUL54PF5O+fCoeySrCQU3Ps1TrZvloF+JwsOxbKmnDVYgY1kLTiYcLxFqvgUAvwsct6TsK9qr0zSfc7QF8bX3rpvLy7mu8nhNf42DN0fR7CHh+Jy8tanGa6LG26gcHQiU/bfdCCE15JkdFVO+0vsrOvAg4OML20r9gDiNeAiNeBiLdBqTS2KI1GQdphjLtyMha0gyL4e8ljl6x4+Q9ZU5LS7CyRh58BpRrfhRaM9T1rzKyutD/rO3Y/O8mtulAfnG52Hxz78PROdv+PlPO4ffQ8x6zz6g7mSmdfxYPpfTq494ie9i83Kl3Rauty7Ve1SO1XtdS+6I76Tmh6jQxcg6fXaFE6oOuvocEdGZVryKwGZaLuzqy0QWe27Kp2QCvX+rN+4+v/W33ehcof2R5KqwUQB1ArGfIqwZK5/ooqrZo8fSoMDcHlSJY+KZeb+Y2zNWyBXcan4IoRyj+jyj+rojo6Wh5fHahT3RqGqv+aR7ZtGR56cNuOoWGuY9sjw0M7tj04NEx/CwceHqC/f4axsrD6G2i8Pp/H1jtZa8zl6Fb6ltrPnWhUA1GYmCCD8LdoYuIU/qfuvQk46x3Nu+CvNjNlPV7LZZwq52s1tQP0l3pKvbmc7HNMycFIjuIdEWx7C83ZSa3Kb+qIPuwbypdoPjrQEG6k+eiECyuGbEy6tVutaXddoOGjoHYfFy7Q+OGifcqFG+orncb19m5s/JiC/9Tmj3H4vluppYxyN9xwAxt7Z6b8ad069HTx0jv79+9/R2n/WLfu6qVLWrGecunV8LHS888VuA10X9ParsCu47j2wu5TJ03kjJmVRZqZsmJMUH5REPunnECxbDSUSrLZBK/s+HOVQq3nsLrJMgH7nXfgrkkc/Bvetmtb5SXy6a0j+dXb9i/RLr5Xc+f0C+ySbdPryA8r/fjHHqr8kPSrPZewmN5E9yRIKvIvE/DKtV1fqUVSn1Rb0yFGRDzlg4PV/WvLmtOgPWmm7ENRi9qp2gv1N3Lx909xR0NDjmL+6tBx3/nqnoZuTwF/4XRmU8O/Hq8cAJE0dDn1urCuue87C6r7Gp69gt8UzMcCyxE8EZ4Y/mrF4+H6sYTQXnnVfRWJFKZDaKhtqthI2yMQy9lL52+uiHycPZJt22Ac4abxp+aM4wgdBH9mXHNyZhTM/wXIZHgFAAEAAAABj1z3lKphXw889QAfCAAAAAAAzGT8dAAAAADdvtGJ/77+AAY3B3EAAAAIAAIAAAAAAAB42mNgZGBgn/f3BpAs/L/v/z42cwagCAq4DACqEQd/AHjabZI/aFNRFMa/e+7zDxIkyBtMRzFihwwZQnmUIoZM0RbJ4CAODg61dLAlOKgdipTiGIoIbg4iLRJKcSgSSodudghYKFJLKZ0K6iaiEOLvvfyxYgI/vpv7zrnn3O8e+6qS+NmK5EbhmcoWaiJoKm/vlfXHGvG3lXcFRZZXEYbtjcrBZZXZy7kGel0Fa+qs7ajk9pSxPY1YXTl7x3qT8xrkjfN9nbiGIjdFDgSX/mILyvhJ4loK7VgV21LJfqFVmIRDlfw5Vdw8vFXKi727qvgDuMqa2vRQsc/oEbqhrC0qsG+6Zdu6EKTo5VBp6p+3WWoMkXeRnoYUBeMqBB/oQy5rL7h3nfwFeqnT15KK3CkkL2Vr1J6F6fYnm++sfYtY9q2ma0keOe4n+khZ94O8NU3YHaX9c9ZT1H9MHyFnrWrM3SduVdEpacYe4g303+Cpij5P/01l6Ct9eppveB0r/yN4pV0JXaHX4cS3AQQ3qBl7We162cXV2r9dLb5De8NV2x/xOuz7+D+jiY8n2eTcHeL38WkZzwbg99HYx6V/oeZB4mOv9mvd7Hs4iNjDk8Qexl6jfpe5OCKGfnzLBbE3fl06MyP11J7g6RcY66Dv6Bz6AI3nt4u/AtvJXOeT2YbeuyS85L23eIe5znk+p4JfZm7usQ4UKvwDcUOvrQB42mNgYNCBQh+GJsY2Jh6me8w1zHOYTzH/YBFj0WPxY8liaWHZw6rA6sY6hU2PLY7tBLsbewr7D44yjikcOzjOcTzi+MEZxvmPy4hrFjcHdwB3BfcMHiEeDR47nhSeSTxreDl4lXjbeA/wWfH18LPxq/Cn8U/ifyRQI7BG4IrAN0EDwRDBDME6wWlCCkJ1QreErYSXCT8R2SfyRVRINEB0ieguMS4xB7FF4kziCeKTJLgk/CTaJLZIqkkukHwlJSRVJzVNmkHaR7pCehEQHpARkLkkayYbJqcgZyP3R15K3kjeRz5P/pQCl4KHQp8ii6Kf4jElOaV5SueU/ikbKWcp1ylPUF6hfEBFTKVN5Ztqmuo9tRa1f+qHNEQ0UjR2aYpo+ml2aH7QatOW0d6h06KrpPtMb4O+gv4sAxGDKYZihlqGNoYhhjmGH4ySjM4YWxivMPEw2WU6z/SemYxZnNkis1/mEeY7LKQsjlnyWOpYVuGAHZbTLJdYHrC8YfnLSsHKwSrHaprVAatX1kJgOMf6jQ2PTZDNNAAv0Hw1AAEAAADUAF0ABQAAAAAAAgABAAIAFgAAAQABlwAAAAB42p1STU/CQBSctkhCYjDx4IETBw+GCFYMRCHxZPSgEmJRvFq0Fi2CtRK9GH+VB3+BH7/Am7/Dk7PbB1YSEzWb3Z03b9687ksBzOARFoxUBkCTO8YGcoxibCKLM8EW1nEjOIUCHgRPkX0XnMaCcSg4g6pxL3gaG8ZIP4uC8SH4CXPmvOBn2GZN8Auy5qjvK9Km9H2zkDPvUIbNtYY8itwqWuZaJG7BxwnvHZ5HOMW1jvrweO7yHmreRaD5Fm4xIPqu3qIuok8XHeyRUXzAfMgeJVRQZb869rGNNhpEyepkbXGi+ucu+QnlAaMQV8z1ccFssm8TDhlbv/mL9bVbR+uHUmFLvo4eXc/pqTQe2YDOLucWa8pUr/Cs/Pol/5uyT7+IqIYlrkh7BAkHVd+bqI6ktqTf1vvDDNuMXDqqiUTjiTjMqaih+8T/jspV+VVlTqHGvSq8mssxXTzWKNdIf1Efm2NPB5fMdNktVG/5BKh/f0oAAAB42m3Q109TcRTA8e+B0kLZezlxo+K9ty1QdxnXvRVcqCjQVhGwWBUXmmgMOAIvPIM+GvdK9FEM4CYqUR98d/4HJNbe36Pn5ZMzcnJyiCEa40Ga+F98BImRWGKxEYcdB/Ek4CSRJJJJIZU00skgkyyyySGXPPIpoJAJTGQSk5nCVIqYxnRmMJNZzGYOxcxlHvMpYQEaOgYu3HgopYxyvCxkEYtZwlKWsRwfFVRSRTUmK1jJKlazhrWsYz0b2MgmNrOFrWyjhlq2s4Od7GI3dexhL/uoF5vEiZ0bXOAifVzjsjjo5itXec43rnOLEYa4zX4O0EMDr2hkmJe84zVveMv3yHc+8J5R7uCnl7HIXz4R4Ce/6eIgQQ5xmGZa6KeVI7QRop0wRznGcX5wgpN0cIoznGaATs5yjvP84g9Pucs9nvGZLxIvCeKUREmSZEmRVEmTdMmQTMmSbO7zgMc8YZCHPOIFl7gpOZIreVyRfCmQQru/uaMtoDvCLUFN06osvS6l29KnKaN9IzKo1JWG0qV0Kz3KUmWZslzpVfosdbVX151NQX841NhQ3x6wSoZp6TFt1eFQazTxmJX/NCusOyIafwHjZYhvAAB42kXOvQrCMBSG4cTY9N/+Ogp1DuruJtouHRRBaMDBqxAcRBdHvZZTJ3H0xuqpxrid54UD34M2F6BXUoK1qmpKb7IuuKiGEMoS0jUeZzkALrYVAZblwMQCzCx/EkY90hEf8yy/mwcFA8GXCl2EMVWwEOylYCMsqeAg7LmCi3AmCh7CHX9BwVcDelj9XUfUrNgjg3aPf2qILmFbAtr/lwhfwqNmjIw2mgkynmmmyGT0o4RUvAGYjlJk) format("woff"); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: "Lato"; + src: url(data:application/font-woff2;charset=utf-8;base64,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) format("woff2"); + font-style: normal; + font-weight: 400; +} +@font-face { + font-family: "Lato"; + src: url(data:application/font-woff2;charset=utf-8;base64,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) format("woff2"); + font-style: italic; + font-weight: 400; +} +@font-face { + font-family: "Lato"; + src: url(data:application/font-woff2;charset=utf-8;base64,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) format("woff2"); + font-style: normal; + font-weight: 700; +} +@font-face { + font-family: "Lato"; + src: url(data:application/font-woff2;charset=utf-8;base64,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) format("woff2"); + font-style: italic; + font-weight: 700; +} +.reveal .has-light-background, +.reveal .has-light-background h1, +.reveal .has-light-background h2, +.reveal .has-light-background h3, +.reveal .has-light-background h4, +.reveal .has-light-background h5, +.reveal .has-light-background h6 { + color: #222; +} +:root { + --r-background-color: #111; + --r-main-font: Lato, sans-serif; + --r-main-font-size: 24px; + --r-main-color: #fff; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: + League Gothic, + Impact, + sans-serif; + --r-heading-color: #fff; + --r-heading-line-height: 1em; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: uppercase; + --r-heading-text-shadow: none; + --r-heading1-font-weight: normal; + --r-heading2-font-weight: normal; + --r-heading3-font-weight: normal; + --r-heading4-font-weight: normal; + --r-heading5-font-weight: normal; + --r-heading6-font-weight: normal; + --r-heading1-text-shadow: none; + --r-heading1-size: 3.77em; + --r-heading2-size: 2.11em; + --r-heading3-size: 1.55em; + --r-heading4-size: 1em; + --r-heading5-size: 0.8em; + --r-heading6-size: 0.6em; + --r-code-font: monospace; + --r-link-color: #e7ad52; + --r-link-color-dark: #d08a1d; + --r-link-color-hover: #f0cd95; + --r-selection-background-color: #f7e2c2; + --r-selection-color: #fff; +} +.reveal-viewport { + background: rgb(28, 30, 32); + background: -moz-radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%); + background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, rgb(85, 90, 95)), color-stop(100%, rgb(28, 30, 32))); + background: -webkit-radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%); + background: -o-radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%); + background: -ms-radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%); + background: radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%); + background-color: var(--r-background-color); +} +.reveal { + font-family: var(--r-main-font); + font-size: var(--r-main-font-size); + font-weight: normal; + color: var(--r-main-color); +} +.reveal ::selection { + color: var(--r-selection-color); + background: var(--r-selection-background-color); + text-shadow: none; +} +.reveal ::-moz-selection { + color: var(--r-selection-color); + background: var(--r-selection-background-color); + text-shadow: none; +} +.reveal .slides section, +.reveal .slides section > section { + line-height: 1.3; + font-weight: inherit; +} +.reveal h1, +.reveal h2, +.reveal h3, +.reveal h4, +.reveal h5, +.reveal h6 { + margin: var(--r-heading-margin); + color: var(--r-heading-color); + font-family: var(--r-heading-font); + line-height: var(--r-heading-line-height); + letter-spacing: var(--r-heading-letter-spacing); + text-transform: var(--r-heading-text-transform); + text-shadow: var(--r-heading-text-shadow); + word-wrap: break-word; +} +.reveal h1 { + font-size: var(--r-heading1-size); +} +.reveal h2 { + font-size: var(--r-heading2-size); +} +.reveal h3 { + font-size: var(--r-heading3-size); +} +.reveal h4 { + font-size: var(--r-heading4-size); +} +.reveal h5 { + font-size: var(--r-heading5-size); +} +.reveal h6 { + font-size: var(--r-heading6-size); +} +.reveal h1 { + font-weight: var(--r-heading1-font-weight); +} +.reveal h2 { + font-weight: var(--r-heading2-font-weight); +} +.reveal h3 { + font-weight: var(--r-heading3-font-weight); +} +.reveal h4 { + font-weight: var(--r-heading4-font-weight); +} +.reveal h5 { + font-weight: var(--r-heading5-font-weight); +} +.reveal h6 { + font-weight: var(--r-heading6-font-weight); +} +.reveal h1 { + text-shadow: var(--r-heading1-text-shadow); +} +.reveal .slides > section.drop { + padding-top: 0; + padding-bottom: 0; + height: 100%; +} +.reveal p { + margin: var(--r-block-margin) 0; + line-height: 1.3; +} +.reveal h1:last-child, +.reveal h2:last-child, +.reveal h3:last-child, +.reveal h4:last-child, +.reveal h5:last-child, +.reveal h6:last-child { + margin-bottom: 0; +} +.reveal img, +.reveal video, +.reveal iframe { + max-width: 100%; + max-height: 100%; +} +.reveal strong, +.reveal b { + font-weight: bold; +} +.reveal em { + font-style: italic; +} +.reveal ol, +.reveal dl, +.reveal ul { + display: inline-block; + text-align: left; + margin: 0 0 0 1em; +} +.reveal ol { + list-style-type: decimal; +} +.reveal ul { + list-style-type: disc; +} +.reveal ul ul { + list-style-type: square; +} +.reveal ul ul ul { + list-style-type: circle; +} +.reveal ul ul, +.reveal ul ol, +.reveal ol ol, +.reveal ol ul { + display: block; + margin-left: 40px; +} +.reveal dt { + font-weight: bold; +} +.reveal dd { + margin-left: 40px; +} +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: var(--r-block-margin) auto; + padding: 5px; + font-style: italic; + background: rgba(255, 255, 255, 0.05); + box-shadow: 0 0 2px rgba(0, 0, 0, 0.2); +} +.reveal blockquote p:first-child, +.reveal blockquote p:last-child { + display: inline-block; +} +.reveal q { + font-style: italic; +} +.reveal pre { + display: block; + position: relative; + width: 90%; + margin: var(--r-block-margin) auto; + text-align: left; + font-size: 0.55em; + font-family: var(--r-code-font); + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15); +} +.reveal code { + font-family: var(--r-code-font); + text-transform: none; + tab-size: 2; +} +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; +} +.reveal .code-wrapper { + white-space: normal; +} +.reveal .code-wrapper code { + white-space: pre; +} +.reveal table { + margin: auto; + border-collapse: collapse; + border-spacing: 0; +} +.reveal table th { + font-weight: bold; +} +.reveal table th, +.reveal table td { + text-align: left; + padding: 0.2em 0.5em; + border-bottom: 1px solid; +} +.reveal table th[align=center], +.reveal table td[align=center] { + text-align: center; +} +.reveal table th[align=right], +.reveal table td[align=right] { + text-align: right; +} +.reveal table tbody tr:last-child th, +.reveal table tbody tr:last-child td { + border-bottom: none; +} +.reveal sup { + vertical-align: super; + font-size: smaller; +} +.reveal sub { + vertical-align: sub; + font-size: smaller; +} +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; +} +.reveal small * { + vertical-align: top; +} +.reveal img { + margin: var(--r-block-margin) 0; +} +.reveal a { + color: var(--r-link-color); + text-decoration: none; + transition: color 0.15s ease; +} +.reveal a:hover { + color: var(--r-link-color-hover); + text-shadow: none; + border: none; +} +.reveal .roll span:after { + color: #fff; + background: var(--r-link-color-dark); +} +.reveal .r-frame { + border: 4px solid var(--r-main-color); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); +} +.reveal a .r-frame { + transition: all 0.15s linear; +} +.reveal a:hover .r-frame { + border-color: var(--r-link-color); + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); +} +.reveal .controls { + color: var(--r-link-color) !important; +} +.reveal .progress { + background: rgba(0, 0, 0, 0.2); + color: var(--r-link-color); +} +@media print { + .backgrounds { + background-color: var(--r-background-color); + } +} +.has-dark-background canvas[data-chart] { + background-color: white; +} +.has-light-background canvas[data-chart] { + background-color: unset; +} +canvas[data-chart] { + padding: 0.5em; +} +.reveal .hljs { + min-height: 50%; +} +.reveal .slides { + text-align: left; +} +p.reset-paragraph { + margin: inherit; + line-height: inherit; +} +.reveal img, +.reveal video, +.reveal iframe { + max-width: 100%; + max-height: 100%; +} +.reveal ol, +.reveal dl, +.reveal ul { + text-align: left; + margin: var(--r-block-margin) 0; + margin-left: 1em; +} +.reveal sup { + vertical-align: super; + font-size: x-small; + color: var(--r-link-color); +} +.reveal sub { + vertical-align: sub; + font-size: x-small; +} +.footnotes { + font-size: 8px; +} +.footnotes > ol * { + margin: 0px !important; +} +.footnotes > ol > li::marker { + color: var(--r-link-color); + content: counter(list-item) ": "; +} diff --git a/docs/1_Fundamentals/css/vs2015.css b/docs/1_Fundamentals/css/vs2015.css new file mode 100644 index 0000000..7f6fe11 --- /dev/null +++ b/docs/1_Fundamentals/css/vs2015.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#1e1e1e;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta .hljs-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%} \ No newline at end of file diff --git a/docs/1_Fundamentals/index.html b/docs/1_Fundamentals/index.html new file mode 100644 index 0000000..d9c93e8 --- /dev/null +++ b/docs/1_Fundamentals/index.html @@ -0,0 +1,693 @@ + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + diff --git a/docs/1_Fundamentals/plugin/chalkboard/README.md b/docs/1_Fundamentals/plugin/chalkboard/README.md new file mode 100644 index 0000000..804cec0 --- /dev/null +++ b/docs/1_Fundamentals/plugin/chalkboard/README.md @@ -0,0 +1,160 @@ +# Chalkboard + +With this plugin you can add a chalkboard to reveal.js. The plugin provides two possibilities to include handwritten notes to your presentation: + +- you can make notes directly on the slides, e.g. to comment on certain aspects, +- you can open a chalkboard or whiteboard on which you can make notes. + +The main use case in mind when implementing the plugin is classroom usage in which you may want to explain some course content and quickly need to make some notes. + +The plugin records all drawings made so that they can be play backed using the `autoSlide` feature or the `audio-slideshow` plugin. + +[Check out the live demo](https://rajgoel.github.io/reveal.js-demos/chalkboard-demo.html) + +The chalkboard effect is based on [Chalkboard](https://github.com/mmoustafa/Chalkboard) by Mohamed Moustafa. + +## Installation + +Copy the file `plugin.js` and the `img` directory into the plugin folder of your reveal.js presentation, i.e. `plugin/chalkboard` and load the plugin as shown below. + +```html + + + + +``` + +The following stylesheet +```html + + +``` +has to be included to the `head` section of you HTML-file. + + +In order to include buttons for opening and closing the notes canvas or the chalkboard you should make sure that `font-awesome` is available. The easiest way is to include +``` + +``` +to the ```head``` section of you HTML-file. + +## Usage + +### Mouse or touch +- Click on the pen symbols at the bottom left to toggle the notes canvas or chalkboard +- Click on the color picker at the left to change the color (the color picker is only visible if the notes canvas or chalkboard is active) +- Click on the up/down arrows on the left to the switch among multiple chalkboardd (the up/down arrows are only available for the chlakboard) +- Click the left mouse button and drag to write on notes canvas or chalkboard +- Click the right mouse button and drag to wipe away previous drawings +- Touch and move to write on notes canvas or chalkboard +- Touch and hold for half a second, then move to wipe away previous drawings + +### Keyboard +- Press the 'BACKSPACE' key to delete all chalkboard drawings +- Press the 'DEL' key to clear the notes canvas or chalkboard +- Press the 'c' key to toggle the notes canvas +- Press the 'b' key to toggle the chalkboard +- Press the 'd' key to download drawings +- Press the 'x' key to cycle colors forward +- Press the 'y' key to cycle colors backward + +## Playback + +If the `autoSlide` feature is set or if the `audio-slideshow` plugin is used, pre-recorded chalkboard drawings can be played. The slideshow plays back the user interaction with the chalkboard in the same way as it was conducted when recording the data. + +## Multiplexing + +The plugin supports multiplexing via the [`multiplex` plugin](https://github.com/reveal/multiplex) or the [`seminar` plugin](https://github.com/rajgoel/reveal.js-plugins/tree/master/seminar). + +## PDF-Export + +If the slideshow is opened in [print mode](https://revealjs.com/pdf-export/), the chalkboard drawings in the session storage (see `storage` option - print version must be opened in the same tab or window as the original slideshow) or provided in a file (see `src` option) are included in the PDF-file. Each drawing on the chalkboard is added after the slide that was shown when opening the chalkboard. Drawings on the notes canvas are not included in the PDF-file. + + +## Configuration + +The plugin has several configuration options: + +- ```boardmarkerWidth```: an integer, the drawing width of the boardmarker; larger values draw thicker lines. +- ```chalkWidth```: an integer, the drawing width of the chalk; larger values draw thicker lines. +- ```chalkEffect```: a float in the range ```[0.0, 1.0]```, the intesity of the chalk effect on the chalk board. Full effect (default) ```1.0```, no effect ```0.0```. +- ```storage```: Optional variable name for session storage of drawings. +- ```src```: Optional filename for pre-recorded drawings. +- ```readOnly```: Configuation option allowing to prevent changes to existing drawings. If set to ```true``` no changes can be made, if set to false ```false``` changes can be made, if unset or set to ```undefined``` no changes to the drawings can be made after returning to a slide or fragment for which drawings had been recorded before. In any case the recorded drawings for a slide or fragment can be cleared by pressing the 'DEL' key (i.e. by using the ```RevealChalkboard.clear()``` function). +- ```transition```: Gives the duration (in milliseconds) of the transition for a slide change, so that the notes canvas is drawn after the transition is completed. +- ```theme```: Can be set to either ```"chalkboard"``` or ```"whiteboard"```. + +The following configuration options allow to change the appearance of the notes canvas and the chalkboard. All of these options require two values, the first gives the value for the notes canvas, the second for the chalkboard. + +- ```background```: The first value expects a (semi-)transparent color which is used to provide visual feedback that the notes canvas is enabled, the second value expects a filename to a background image for the chalkboard. +- ```grid```: By default whiteboard and chalkboard themes include a grid pattern on the background. This pattern can be modified by setting the color, the distance between lines, and the line width, e.g. ```{ color: 'rgb(127,127,255,0.1)', distance: 40, width: 2}```. Alternatively, the grid can be removed by setting the value to ```false```. +- ```eraser```: An image path and radius for the eraser. +- ```boardmarkers```: A list of boardmarkers with given color and cursor. +- ```chalks```: A list of chalks with given color and cursor. +- ```rememberColor```: Whether to remember the last selected color for the slide canvas or the board. + +All of the configurations are optional and the default values shown below are used if the options are not provided. + +```javascript +Reveal.initialize({ + // ... + chalkboard: { + boardmarkerWidth: 3, + chalkWidth: 7, + chalkEffect: 1.0, + storage: null, + src: null, + readOnly: undefined, + transition: 800, + theme: "chalkboard", + background: [ 'rgba(127,127,127,.1)' , path + 'img/blackboard.png' ], + grid: { color: 'rgb(50,50,10,0.5)', distance: 80, width: 2}, + eraser: { src: path + 'img/sponge.png', radius: 20}, + boardmarkers : [ + { color: 'rgba(100,100,100,1)', cursor: 'url(' + path + 'img/boardmarker-black.png), auto'}, + { color: 'rgba(30,144,255, 1)', cursor: 'url(' + path + 'img/boardmarker-blue.png), auto'}, + { color: 'rgba(220,20,60,1)', cursor: 'url(' + path + 'img/boardmarker-red.png), auto'}, + { color: 'rgba(50,205,50,1)', cursor: 'url(' + path + 'img/boardmarker-green.png), auto'}, + { color: 'rgba(255,140,0,1)', cursor: 'url(' + path + 'img/boardmarker-orange.png), auto'}, + { color: 'rgba(150,0,20150,1)', cursor: 'url(' + path + 'img/boardmarker-purple.png), auto'}, + { color: 'rgba(255,220,0,1)', cursor: 'url(' + path + 'img/boardmarker-yellow.png), auto'} + ], + chalks: [ + { color: 'rgba(255,255,255,0.5)', cursor: 'url(' + path + 'img/chalk-white.png), auto'}, + { color: 'rgba(96, 154, 244, 0.5)', cursor: 'url(' + path + 'img/chalk-blue.png), auto'}, + { color: 'rgba(237, 20, 28, 0.5)', cursor: 'url(' + path + 'img/chalk-red.png), auto'}, + { color: 'rgba(20, 237, 28, 0.5)', cursor: 'url(' + path + 'img/chalk-green.png), auto'}, + { color: 'rgba(220, 133, 41, 0.5)', cursor: 'url(' + path + 'img/chalk-orange.png), auto'}, + { color: 'rgba(220,0,220,0.5)', cursor: 'url(' + path + 'img/chalk-purple.png), auto'}, + { color: 'rgba(255,220,0,0.5)', cursor: 'url(' + path + 'img/chalk-yellow.png), auto'} + ] + }, + customcontrols: { + controls: [ + { icon: '', + title: 'Toggle chalkboard (B)', + action: 'RevealChalkboard.toggleChalkboard();' + }, + { icon: '', + title: 'Toggle notes canvas (C)', + action: 'RevealChalkboard.toggleNotesCanvas();' + } + ] + }, + // ... + +}); +``` + + +## License + +MIT licensed + +Copyright (C) 2021 Asvin Goel diff --git a/docs/1_Fundamentals/plugin/chalkboard/_style.css b/docs/1_Fundamentals/plugin/chalkboard/_style.css new file mode 100644 index 0000000..4a60a93 --- /dev/null +++ b/docs/1_Fundamentals/plugin/chalkboard/_style.css @@ -0,0 +1,38 @@ +div.palette, div.boardhandle { + position: absolute; +/* + height: 260px; + margin: -130px 0 0 0px; +*/ + top: 50%; + transform: translateY(-50%); + font-size: 24px; + border-radius: 10px; + border-top: 4px solid #222; + border-right: 4px solid #222; + border-bottom: 4px solid #222; + background: black; + transition: transform 0.3s; +} + +div.palette { + left: -10px; + padding-left:10px; +} + +div.boardhandle { + right: -10px; + padding-right:10px; +} + +div.palette > ul, +div.boardhandle > ul { + list-style-type: none; + margin: 0; + padding: 0; +} + +div.palette > ul > li, +div.boardhandle > ul > li { + margin: 10px; +} diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/blackboard.png b/docs/1_Fundamentals/plugin/chalkboard/img/blackboard.png new file mode 100644 index 0000000..50a2f64 Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/blackboard.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-black.png b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-black.png new file mode 100644 index 0000000..170b520 Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-black.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-blue.png b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-blue.png new file mode 100644 index 0000000..32f3ff8 Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-blue.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-green.png b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-green.png new file mode 100644 index 0000000..28a4221 Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-green.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-orange.png b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-orange.png new file mode 100644 index 0000000..7e8c2d2 Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-orange.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-purple.png b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-purple.png new file mode 100644 index 0000000..637066c Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-purple.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-red.png b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-red.png new file mode 100644 index 0000000..713d6cd Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-red.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-yellow.png b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-yellow.png new file mode 100644 index 0000000..23e87f5 Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/boardmarker-yellow.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/chalk-blue.png b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-blue.png new file mode 100644 index 0000000..f70c299 Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-blue.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/chalk-green.png b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-green.png new file mode 100644 index 0000000..39f3b20 Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-green.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/chalk-orange.png b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-orange.png new file mode 100644 index 0000000..488c847 Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-orange.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/chalk-purple.png b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-purple.png new file mode 100644 index 0000000..5bd29fb Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-purple.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/chalk-red.png b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-red.png new file mode 100644 index 0000000..18d4dc7 Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-red.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/chalk-white.png b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-white.png new file mode 100644 index 0000000..fed89a3 Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-white.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/chalk-yellow.png b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-yellow.png new file mode 100644 index 0000000..0186bec Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/chalk-yellow.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/sponge.png b/docs/1_Fundamentals/plugin/chalkboard/img/sponge.png new file mode 100644 index 0000000..cbfb269 Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/sponge.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/img/whiteboard.png b/docs/1_Fundamentals/plugin/chalkboard/img/whiteboard.png new file mode 100644 index 0000000..dbf570a Binary files /dev/null and b/docs/1_Fundamentals/plugin/chalkboard/img/whiteboard.png differ diff --git a/docs/1_Fundamentals/plugin/chalkboard/plugin (copy).js b/docs/1_Fundamentals/plugin/chalkboard/plugin (copy).js new file mode 100644 index 0000000..713059a --- /dev/null +++ b/docs/1_Fundamentals/plugin/chalkboard/plugin (copy).js @@ -0,0 +1,1812 @@ +/***************************************************************** +** Author: Asvin Goel, goel@telematique.eu +** +** A plugin for reveal.js adding a chalkboard. +** +** Version: 1.5.0 +** +** License: MIT license (see LICENSE.md) +** +** Credits: +** Chalkboard effect by Mohamed Moustafa https://github.com/mmoustafa/Chalkboard +** Multi color support by Kurt Rinnert https://github.com/rinnert +** Compatibility with reveal.js v4 by Hakim El Hattab https://github.com/hakimel +******************************************************************/ + +window.RevealChalkboard = window.RevealChalkboard || { + id: 'RevealChalkboard', + init: function(deck) { + initChalkboard(deck); + }, + configure: function(config) { configure(config); }, + toggleNotesCanvas: function() { toggleNotesCanvas(); }, + toggleChalkboard: function() { toggleChalkboard(); }, + colorIndex: function() { colorIndex(); }, + colorNext: function() { colorNext(); }, + colorPrev: function() {colorPrev(); }, + clear: function() { clear(); }, + reset: function() { reset(); }, + resetAll: function() { resetAll(); }, + updateStorage: function() { updateStorage(); }, + getData: function() { return getData(); }, + download: function() { download(); }, +}; + +function scriptPath() { + // obtain plugin path from the script element + var src; + if (document.currentScript) { + src = document.currentScript.src; + } else { + var sel = document.querySelector('script[src$="/chalkboard/plugin.js"]') + if (sel) { + src = sel.src; + } + } + var path = (src === undefined) ? "" : src.slice(0, src.lastIndexOf("/") + 1); +//console.log("Path: " + path); + return path; +} +var path = scriptPath(); + +const initChalkboard = function(Reveal){ +//console.warn(path); + /* Feature detection for passive event handling*/ + var passiveSupported = false; + + try { + window.addEventListener("test", null, Object.defineProperty({}, "passive", { get: function() { passiveSupported = true; } })); + } catch(err) {} + + +/***************************************************************** +** Configuration +******************************************************************/ + var background, pen, draw, color; + var grid = false; + var boardmarkerWidth = 3; + var chalkWidth = 7; + var chalkEffect = 1.0; + var rememberColor = [true, false]; + var eraser = { src: path + 'img/sponge.png', radius: 20}; + var boardmarkers = [ + { color: 'rgba(100,100,100,1)', cursor: 'url(' + path + 'img/boardmarker-black.png), auto'}, + { color: 'rgba(30,144,255, 1)', cursor: 'url(' + path + 'img/boardmarker-blue.png), auto'}, + { color: 'rgba(220,20,60,1)', cursor: 'url(' + path + 'img/boardmarker-red.png), auto'}, + { color: 'rgba(50,205,50,1)', cursor: 'url(' + path + 'img/boardmarker-green.png), auto'}, + { color: 'rgba(255,140,0,1)', cursor: 'url(' + path + 'img/boardmarker-orange.png), auto'}, + { color: 'rgba(150,0,20150,1)', cursor: 'url(' + path + 'img/boardmarker-purple.png), auto'}, + { color: 'rgba(255,220,0,1)', cursor: 'url(' + path + 'img/boardmarker-yellow.png), auto'} + ]; + var chalks = [ + { color: 'rgba(255,255,255,0.5)', cursor: 'url(' + path + 'img/chalk-white.png), auto'}, + { color: 'rgba(96, 154, 244, 0.5)', cursor: 'url(' + path + 'img/chalk-blue.png), auto'}, + { color: 'rgba(237, 20, 28, 0.5)', cursor: 'url(' + path + 'img/chalk-red.png), auto'}, + { color: 'rgba(20, 237, 28, 0.5)', cursor: 'url(' + path + 'img/chalk-green.png), auto'}, + { color: 'rgba(220, 133, 41, 0.5)', cursor: 'url(' + path + 'img/chalk-orange.png), auto'}, + { color: 'rgba(220,0,220,0.5)', cursor: 'url(' + path + 'img/chalk-purple.png), auto'}, + { color: 'rgba(255,220,0,0.5)', cursor: 'url(' + path + 'img/chalk-yellow.png), auto'} + ]; + var keyBindings = { + toggleNotesCanvas: { keyCode: 67, key: 'C', description: 'Toggle notes canvas' }, + toggleChalkboard: { keyCode: 66, key: 'B', description: 'Toggle chalkboard' }, + clear: { keyCode: 171, key: '+', description: 'Clear drawings on slide' }, + reset: { keyCode: 46, key: 'DEL', description: 'Reset drawings on slide' }, + resetAll: { keyCode: 8, key: 'BACKSPACE', description: 'Reset all drawings' }, + colorNext: { keyCode: 88, key: 'X', description: 'Next color' }, + colorPrev: { keyCode: 89, key: 'Y', description: 'Previous color' }, + download: { keyCode: 68, key: 'D', description: 'Download drawings' } + }; + + + var theme = "chalkboard"; + var color = [0, 0]; + var toggleChalkboardButton = true; + var toggleNotesButton = true; + var colorButtons = true; + var boardHandle = true; + var transition = 800; + + var readOnly = false; + var messageType = 'broadcast'; + + var config = configure( Reveal.getConfig().chalkboard || {} ); + if ( config.keyBindings ) { + for (var key in config.keyBindings) { + keyBindings[key] = config.keyBindings[key]; + }; + } + + function configure( config ) { + + if ( config.boardmarkerWidth || config.penWidth ) boardmarkerWidth = config.boardmarkerWidth || config.penWidth; + if ( config.chalkWidth ) chalkWidth = config.chalkWidth; + if ( config.chalkEffect ) chalkEffect = config.chalkEffect; + if ( config.rememberColor ) rememberColor = config.rememberColor; + if ( config.eraser ) eraser = config.eraser; + if ( config.boardmarkers ) boardmarkers = config.boardmarkers; + if ( config.chalks) chalks = config.chalks; + + if ( config.theme ) theme = config.theme; + switch ( theme ) { + case "whiteboard": + background = [ 'rgba(127,127,127,.1)' , path + 'img/whiteboard.png' ]; + draw = [ drawWithBoardmarker , drawWithBoardmarker ]; + pens = [ boardmarkers, boardmarkers ]; + grid = { color: 'rgb(127,127,255,0.1)', distance: 40, width: 2}; + break; + case "chalkboard": + default: + background = [ 'rgba(127,127,127,.1)' , path + 'img/blackboard.png' ]; + draw = [ drawWithBoardmarker , drawWithChalk ]; + pens = [ boardmarkers, chalks ]; + grid = { color: 'rgb(50,50,10,0.5)', distance: 80, width: 2}; + } + + if ( config.background ) background = config.background; + if ( config.grid != undefined ) grid = config.grid; + + if (config.toggleChalkboardButton != undefined) toggleChalkboardButton = config.toggleChalkboardButton; + if (config.toggleNotesButton != undefined) toggleNotesButton = config.toggleNotesButton; + if (config.colorButtons != undefined) colorButtons = config.colorButtons; + if (config.boardHandle != undefined) boardHandle = config.boardHandle; + if (config.transition) transition = config.transition; + + if (config.readOnly != undefined) readOnly = config.readOnly; + if (config.messageType) messageType = config.messageType; + + if ( drawingCanvas && ( config.theme || config.background || config.grid ) ) { + var canvas = document.getElementById( drawingCanvas[1].id ); + canvas.style.background = 'url("' + background[1] + '") repeat'; + clearCanvas( 1 ); + drawGrid(); + } + + return config; + } +/***************************************************************** +** Setup +******************************************************************/ + + function whenReady( callback ) { + // wait for drawings to be loaded and markdown to be parsed + if ( document.querySelectorAll(".pdf-page").length && loaded !== null ) { + callback(); + } + else { +console.log("Wait for pdf pages to be created and drawings to be loaded"); + setTimeout( whenReady, 500, callback ) + } + } + + + if ( toggleChalkboardButton ) { +//console.log("toggleChalkboardButton") + var button = document.createElement( 'div' ); + button.className = "chalkboard-button"; + button.id = "toggle-chalkboard"; + button.style.visibility = "visible"; + button.style.position = "absolute"; + button.style.zIndex = 30; + button.style.fontSize = "24px"; + + button.style.left = toggleChalkboardButton.left || "30px"; + button.style.bottom = toggleChalkboardButton.bottom || "30px"; + button.style.top = toggleChalkboardButton.top || "auto"; + button.style.right = toggleChalkboardButton.right || "auto"; + + button.innerHTML = '' + document.querySelector(".reveal").appendChild( button ); + } + if ( toggleNotesButton ) { +//console.log("toggleNotesButton") + var button = document.createElement( 'div' ); + button.className = "chalkboard-button"; + button.id = "toggle-notes"; + button.style.position = "absolute"; + button.style.zIndex = 30; + button.style.fontSize = "24px"; + + button.style.left = toggleNotesButton.left || "70px"; + button.style.bottom = toggleNotesButton.bottom || "30px"; + button.style.top = toggleNotesButton.top || "auto"; + button.style.right = toggleNotesButton.right || "auto"; + + button.innerHTML = '' + document.querySelector(".reveal").appendChild( button ); + } +//alert("Buttons"); + + var drawingCanvas = [ {id: "notescanvas" }, {id: "chalkboard" } ]; + setupDrawingCanvas(0); + setupDrawingCanvas(1); + + var mode = 0; // 0: notes canvas, 1: chalkboard + var board = 0; // board index (only for chalkboard) + + var mouseX = 0; + var mouseY = 0; + var xLast = null; + var yLast = null; + + var slideStart = Date.now(); + var slideIndices = { h:0, v:0 }; + var event = null; + var timeouts = [ [], [] ]; + var touchTimeout = null; + var slidechangeTimeout = null; + var playback = false; + + function createPalette( colors, length ) { + if ( length === true || length > colors.length ) { + length = colors.length; + } + var palette = document.createElement( 'div' ); + palette.classList.add('palette'); + var list = document.createElement( 'ul' ); + // color pickers + for (var i = 0; i < length; i++ ) { + var colorButton = document.createElement( 'li' ); + colorButton.setAttribute("data-color",i); + colorButton.innerHTML = ''; + colorButton.style.color = colors[i].color; + colorButton.addEventListener("click", function(e) { + colorIndex(e.target.parentElement.getAttribute("data-color")); + }); + list.appendChild( colorButton ); + } + palette.appendChild( list ); + return palette; + }; + + function setupDrawingCanvas( id ) { + var container = document.createElement( 'div' ); + container.id = drawingCanvas[id].id; + container.classList.add( 'overlay' ); + container.setAttribute( 'data-prevent-swipe', '' ); + container.oncontextmenu = function() { return false; } + container.style.cursor = pens[ id ][ color[id] ].cursor; + + drawingCanvas[id].width = window.innerWidth; + drawingCanvas[id].height = window.innerHeight; + drawingCanvas[id].scale = 1; + drawingCanvas[id].xOffset = 0; + drawingCanvas[id].yOffset = 0; + + if ( id == "0" ) { + container.style.background = 'rgba(0,0,0,0)'; + container.style.zIndex = 24; + container.style.opacity = 1; + container.style.visibility = 'visible'; + container.style.pointerEvents = "none"; + + var slides = document.querySelector(".slides"); + var aspectRatio = Reveal.getConfig().width / Reveal.getConfig().height; + if ( drawingCanvas[id].width > drawingCanvas[id].height*aspectRatio ) { + drawingCanvas[id].xOffset = (drawingCanvas[id].width - drawingCanvas[id].height*aspectRatio) / 2; + } + else if ( drawingCanvas[id].height > drawingCanvas[id].width/aspectRatio ) { + drawingCanvas[id].yOffset = ( drawingCanvas[id].height - drawingCanvas[id].width/aspectRatio ) / 2; + } + + if ( colorButtons ) { + var palette = createPalette( boardmarkers, colorButtons ); + palette.style.visibility = 'hidden'; // only show palette in drawing mode + container.appendChild(palette); + } + } + else { + container.style.background = 'url("' + background[id] + '") repeat'; + container.style.zIndex = 26; + container.style.opacity = 0; + container.style.visibility = 'hidden'; + + if ( colorButtons ) { + var palette = createPalette( chalks, colorButtons ); + container.appendChild(palette); + } + if ( boardHandle ) { + var handle = document.createElement( 'div' ); + handle.classList.add('boardhandle'); + handle.innerHTML=''; + handle.querySelector("#previousboard").addEventListener("click", function(e) { + e.preventDefault(); + setBoard(board-1,true); + }); + handle.querySelector("#nextboard").addEventListener("click", function(e) { + e.preventDefault(); + setBoard(board+1,true); + }); + + container.appendChild(handle); + } + } + + + var sponge = document.createElement( 'img' ); + sponge.src = eraser.src; + sponge.id = "sponge"; + sponge.style.visibility = "hidden"; + sponge.style.position = "absolute"; + container.appendChild( sponge ); + drawingCanvas[id].sponge = sponge; + + var canvas = document.createElement( 'canvas' ); + canvas.width = drawingCanvas[id].width; + canvas.height = drawingCanvas[id].height; + canvas.setAttribute( 'data-chalkboard', id ); + canvas.style.cursor = pens[ id ][ color[id] ].cursor; + container.appendChild( canvas ); + drawingCanvas[id].canvas = canvas; + + drawingCanvas[id].context = canvas.getContext("2d"); + + + document.querySelector( '.reveal' ).appendChild( container ); + drawingCanvas[id].container = container; + } + + +/***************************************************************** +** Storage +******************************************************************/ + + var storage = [ + { width: Reveal.getConfig().width, height: Reveal.getConfig().height, data: []}, + { width: Reveal.getConfig().width, height: Reveal.getConfig().height, data: []} + ]; + + var loaded = null; + + if ( config.storage ) { + // Get chalkboard drawings from session storage + loaded = initStorage( sessionStorage.getItem( config.storage ) ); + } + + if ( !loaded && config.src != null ) { + // Get chalkboard drawings from the given file + loadData( config.src ); + } + + /** + * Initialize storage. + */ + function initStorage( json ) { + var success = false; + try { + var data = JSON.parse( json ); + for (var id = 0; id < data.length; id++) { + if ( drawingCanvas[id].width != data[id].width || drawingCanvas[id].height != data[id].height ) { + drawingCanvas[id].scale = Math.min( drawingCanvas[id].width/data[id].width, drawingCanvas[id].height/data[id].height); + drawingCanvas[id].xOffset = (drawingCanvas[id].width - data[id].width * drawingCanvas[id].scale)/2; + drawingCanvas[id].yOffset = (drawingCanvas[id].height - data[id].height * drawingCanvas[id].scale)/2; + } + if ( config.readOnly ) { + drawingCanvas[id].container.style.cursor = 'default'; + drawingCanvas[id].canvas.style.cursor = 'default'; + } + } + success = true; + storage = data; + } + catch ( err ) { + console.warn( "Cannot initialise storage!" ); + } + return success; + } + + + /** + * Load data. + */ + function loadData( filename ) { + var xhr = new XMLHttpRequest(); + xhr.onload = function() { + if (xhr.readyState === 4 && xhr.status != 404 ) { + loaded = initStorage(xhr.responseText); +console.log("Drawings loaded from file"); + } + else { + config.readOnly = undefined; + readOnly = undefined; + console.warn( 'Failed to get file ' + filename +". ReadyState: " + xhr.readyState + ", Status: " + xhr.status); + loaded = false; + } + }; + + xhr.open( 'GET', filename, true ); + try { + xhr.send(); + } + catch ( error ) { + config.readOnly = undefined; + readOnly = undefined; + console.warn( 'Failed to get file ' + filename + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + error ); + loaded = false; + } + } + + + function updateStorage() { + var json = JSON.stringify( storage ) + if ( config.storage ) { + sessionStorage.setItem( config.storage, json ) + } + return json; + } + + /** + * Get data as json string. + */ + function getData() { + // cleanup slide data without events + for (var id = 0; id < 2; id++) { + for (var i = storage[id].data.length-1; i >= 0; i--) { + if (storage[id].data[i].events.length == 0) { + storage[id].data.splice(i, 1); + } + } + } + + return updateStorage(); + } + + /** + * Download data. + */ + function downloadData() { + var a = document.createElement('a'); + document.body.appendChild(a); + try { + a.download = "chalkboard.json"; + var blob = new Blob( [ getData() ], { type: "application/json"} ); + a.href = window.URL.createObjectURL( blob ); + } catch( error ) { + a.innerHTML += " (" + error + ")"; + } + a.click(); + document.body.removeChild(a); + } + + /** + * Returns data object for the slide with the given indices. + */ + function getSlideData( indices, id ) { + if ( id == undefined ) id = mode; + if (!indices) indices = slideIndices; + var data; + for (var i = 0; i < storage[id].data.length; i++) { + if (storage[id].data[i].slide.h === indices.h && storage[id].data[i].slide.v === indices.v && storage[id].data[i].slide.f === indices.f ) { + data = storage[id].data[i]; + return data; + } + } + storage[id].data.push( { slide: indices, events: [], duration: 0 } ); + data = storage[id].data[storage[id].data.length-1]; + return data; + } + + /** + * Returns maximum duration of slide playback for both modes + */ + function getSlideDuration( indices ) { + if (!indices) indices = slideIndices; + var duration = 0; + for (var id = 0; id < 2; id++) { + for (var i = 0; i < storage[id].data.length; i++) { + if (storage[id].data[i].slide.h === indices.h && storage[id].data[i].slide.v === indices.v && storage[id].data[i].slide.f === indices.f ) { + duration = Math.max( duration, storage[id].data[i].duration ); + break; + } + } + } +//console.log( duration ); + return duration; + } + +/***************************************************************** +** Print +******************************************************************/ + var printMode = ( /print-pdf/gi ).test( window.location.search ); +//console.log("createPrintout" + printMode) + + function createPrintout( ) { +console.warn(Reveal.getTotalSlides(),Reveal.getSlidesElement()); + if ( storage[1].data.length == 0 ) return; +console.log( 'Create printout(s) for ' + storage[1].data.length + " slides"); + drawingCanvas[0].container.style.opacity = 0; // do not print notes canvas + drawingCanvas[0].container.style.visibility = 'hidden'; + + var patImg = new Image(); + patImg.onload = function () { + var slides = getSlidesArray(); +//console.log(slides); + for (var i = storage[1].data.length-1; i>=0; i--) { +console.log( 'Create printout for slide ' + storage[1].data[i].slide.h + "." + storage[1].data[i].slide.v ); + var slideData = getSlideData( storage[1].data[i].slide, 1 ); + var drawings = createDrawings( slideData, patImg ); + var slide = slides[ storage[1].data[i].slide.h][ storage[1].data[i].slide.v ]; +//console.log("Slide:", slide); + addDrawings( slide, drawings ); + + } +// Reveal.sync(); + }; + patImg.src = background[1]; + } + + function getSlidesArray() { + var horizontal = document.querySelectorAll('.slides > div.pdf-page > section, .slides > section'); + var slides = []; + var slidenumber = undefined; + for ( var i=0; i < horizontal.length; i++) { + if ( horizontal[i].parentElement.classList.contains("pdf-page") ) { + // Horizontal slide + if ( horizontal[i].getAttribute("data-slide-number") != slidenumber ) { + // new slide + slides.push([]); + slides[slides.length-1].push(horizontal[i]); + slidenumber = horizontal[i].getAttribute("data-slide-number"); + } + else { + // fragment of same slide + slides[slides.length-1][slides[slides.length-1].length-1] = horizontal[i]; + } + } + else { + // Vertical slides + var vertical = horizontal[i].querySelectorAll('section'); + slides.push([]); + var slidenumber = undefined; + for ( var j=0; j < vertical.length; j++) { + if ( vertical[j].getAttribute("data-slide-number") != slidenumber ) { + // new slide + slides[slides.length-1].push(vertical[j]); + slidenumber = vertical[j].getAttribute("data-slide-number"); + } + else { + // fragment of same slide + slides[slides.length-1][slides[slides.length-1].length-1] = vertical[j]; + } + } + } + } +//console.log("Slides:", slides); + return slides; + } + + function cloneCanvas(oldCanvas) { + //create a new canvas + var newCanvas = document.createElement('canvas'); + var context = newCanvas.getContext('2d'); + //set dimensions + newCanvas.width = oldCanvas.width; + newCanvas.height = oldCanvas.height; + //apply the old canvas to the new one + context.drawImage(oldCanvas, 0, 0); + //return the new canvas + return newCanvas; + } + + function getCanvas( template, container, board ) { + var idx = container.findIndex(element => element.board === board); + if ( idx === -1 ) { + var canvas = cloneCanvas(template); + if ( !container.length ) { + idx = 0; + container.push({ board, canvas }); + } + else if ( board < container[0].board ) { + idx = 0; + container.unshift({ board, canvas }); + } + else if ( board > container[container.length-1].board ) { + idx = container.length; + container.push({ board, canvas }); + } + } + + return container[idx].canvas; + } + + function createDrawings( slideData, patImg ) { + var width = Reveal.getConfig().width; + var height = Reveal.getConfig().height; + var scale = 1; + var xOffset = 0; + var yOffset = 0; + if ( width != storage[1].width || height != storage[1].height ) { + scale = Math.min( width/storage[1].width, height/storage[1].height); + xOffset = (width - storage[1].width * scale)/2; + yOffset = (height - storage[1].height * scale)/2; + } + mode = 1; + board = 0; +console.log( 'Create printout(s) for slide ', slideData); + + var drawings = []; + var template = document.createElement('canvas'); + template.width = width; + template.height = height; + + var imgCtx = template.getContext("2d"); + imgCtx.fillStyle = imgCtx.createPattern( patImg ,'repeat'); + imgCtx.rect(0,0,width,height); + imgCtx.fill(); + + for (var j = 0; j < slideData.events.length; j++) { + switch ( slideData.events[j].type ) { + case "draw": + for (var k = 1; k < slideData.events[j].curve.length; k++) { + draw[1]( getCanvas(template,drawings,board).getContext("2d"), + xOffset + slideData.events[j].curve[k-1].x*scale, + yOffset + slideData.events[j].curve[k-1].y*scale, + xOffset + slideData.events[j].curve[k].x*scale, + yOffset + slideData.events[j].curve[k].y*scale + ); + } + break; + case "erase": + for (var k = 0; k < slideData.events[j].curve.length; k++) { + eraseWithSponge( getCanvas(template,drawings,board).getContext("2d"), + xOffset + slideData.events[j].curve[k].x*scale, + yOffset + slideData.events[j].curve[k].y*scale + ); + } + break; + case "setcolor": + setColor(slideData.events[j].index); + break; + case "setboard": + // Todo: create new canvas for each new index + setBoard(slideData.events[j].index); +//board = 0; + break; + case "clear": + getCanvas(template,drawings,board).getContext("2d").clearRect(0,0,width,height); + getCanvas(template,drawings,board).getContext("2d").fill(); + break; + default: + break; + } + } + + drawings = drawings.sort((a, b) => a.board > b.board && 1 || -1); + + mode = 0; + + return drawings; + } + + function addDrawings( slide, drawings ) { + var parent = slide.parentElement.parentElement; + var nextSlide = slide.parentElement.nextElementSibling; + + for (var i = 0; i < drawings.length; i++) { + var newPDFPage = document.createElement( 'div' ); + newPDFPage.classList.add('pdf-page'); + newPDFPage.style.height = Reveal.getConfig().height; +// newPDFPage.innerHTML = '

Drawing should be here!

'; + newPDFPage.append(drawings[i].canvas); +//console.log("Add drawing", newPDFPage); + if ( nextSlide != null ) { + parent.insertBefore( newPDFPage, nextSlide ); + } + else { + parent.append( newPDFPage ); + } + } + } + +/***************************************************************** +** Drawings +******************************************************************/ + + function drawWithBoardmarker(context,fromX,fromY,toX,toY){ + context.lineWidth = boardmarkerWidth; + context.lineCap = 'round'; + context.strokeStyle = boardmarkers[color[mode]].color; + context.beginPath(); + context.moveTo(fromX, fromY); + context.lineTo(toX, toY); + context.stroke(); + } + + function drawWithChalk(context,fromX,fromY,toX,toY) { + var brushDiameter = chalkWidth; + context.lineWidth = brushDiameter; + context.lineCap = 'round'; + context.fillStyle = chalks[color[mode]].color; // 'rgba(255,255,255,0.5)'; + context.strokeStyle = chalks[color[mode]].color; + /*var opacity = Math.min(0.8, Math.max(0,color[1].replace(/^.*,(.+)\)/,'$1') - 0.1)) + Math.random()*0.2;*/ + var opacity = 1.0; + context.strokeStyle = context.strokeStyle.replace(/[\d\.]+\)$/g, opacity + ')'); + context.beginPath(); + context.moveTo(fromX, fromY); + context.lineTo(toX, toY); + context.stroke(); + // Chalk Effect + var length = Math.round(Math.sqrt(Math.pow(toX-fromX,2)+Math.pow(toY-fromY,2))/(5/brushDiameter)); + var xUnit = (toX-fromX)/length; + var yUnit = (toY-fromY)/length; + for(var i=0; i (Math.random() * 0.9)) { + var xCurrent = fromX+(i*xUnit); + var yCurrent = fromY+(i*yUnit); + var xRandom = xCurrent+(Math.random()-0.5)*brushDiameter*1.2; + var yRandom = yCurrent+(Math.random()-0.5)*brushDiameter*1.2; + context.clearRect( xRandom, yRandom, Math.random()*2+2, Math.random()+1); + } + } + } + + function eraseWithSponge(context,x,y) { + context.save(); + context.beginPath(); + context.arc(x, y, eraser.radius, 0, 2 * Math.PI, false); + context.clip(); + context.clearRect(x - eraser.radius - 1, y - eraser.radius - 1, eraser.radius * 2 + 2, eraser.radius * 2 + 2); + context.restore(); + if ( mode == 1 && grid) { + redrawGrid(x,y,eraser.radius); + } + } + + + + /** + * Show an overlay for the chalkboard. + */ + function showChalkboard() { +//console.log("showChalkboard"); + clearTimeout(touchTimeout); + touchTimeout = null; + drawingCanvas[0].sponge.style.visibility = "hidden"; // make sure that the sponge from touch events is hidden + drawingCanvas[1].sponge.style.visibility = "hidden"; // make sure that the sponge from touch events is hidden + drawingCanvas[1].container.style.opacity = 1; + drawingCanvas[1].container.style.visibility = 'visible'; + mode = 1; + } + + + /** + * Closes open chalkboard. + */ + function closeChalkboard() { + clearTimeout(touchTimeout); + touchTimeout = null; + drawingCanvas[0].sponge.style.visibility = "hidden"; // make sure that the sponge from touch events is hidden + drawingCanvas[1].sponge.style.visibility = "hidden"; // make sure that the sponge from touch events is hidden + drawingCanvas[1].container.style.opacity = 0; + drawingCanvas[1].container.style.visibility = 'hidden'; + xLast = null; + yLast = null; + event = null; + mode = 0; + } + + /** + * Clear current canvas. + */ + function clearCanvas( id ) { + if ( id == 0 ) clearTimeout( slidechangeTimeout ); + drawingCanvas[id].context.clearRect(0,0,drawingCanvas[id].width,drawingCanvas[id].height); + if ( id == 1 && grid ) drawGrid(); + } + + /** + * Draw grid on background + */ + function drawGrid() { + var context = drawingCanvas[1].context; + + drawingCanvas[1].scale = Math.min( drawingCanvas[1].width/storage[1].width, drawingCanvas[1].height/storage[1].height ); + drawingCanvas[1].xOffset = (drawingCanvas[1].width - storage[1].width * drawingCanvas[1].scale)/2; + drawingCanvas[1].yOffset = (drawingCanvas[1].height - storage[1].height * drawingCanvas[1].scale)/2; + + var scale = drawingCanvas[1].scale; + var xOffset = drawingCanvas[1].xOffset; + var yOffset = drawingCanvas[1].yOffset; + + var distance = grid.distance*scale; + + var fromX = drawingCanvas[1].width/2 - distance/2 - Math.floor( (drawingCanvas[1].width - distance)/2 / distance ) * distance; + for( var x=fromX; x < drawingCanvas[1].width; x+=distance ) { + context.beginPath(); + context.lineWidth = grid.width*scale; + context.lineCap = 'round'; + context.fillStyle = grid.color; + context.strokeStyle = grid.color; + context.moveTo(x, 0); + context.lineTo(x, drawingCanvas[1].height); + context.stroke(); + } + var fromY = drawingCanvas[1].height/2 - distance/2 - Math.floor( (drawingCanvas[1].height - distance)/2 / distance ) * distance ; + + for( var y=fromY; y < drawingCanvas[1].height; y+=distance ) { + context.beginPath(); + context.lineWidth = grid.width*scale; + context.lineCap = 'round'; + context.fillStyle = grid.color; + context.strokeStyle = grid.color; + context.moveTo(0, y); + context.lineTo(drawingCanvas[1].width, y); + context.stroke(); + } + } + + function redrawGrid(centerX,centerY,diameter) { + var context = drawingCanvas[1].context; + + drawingCanvas[1].scale = Math.min( drawingCanvas[1].width/storage[1].width, drawingCanvas[1].height/storage[1].height ); + drawingCanvas[1].xOffset = (drawingCanvas[1].width - storage[1].width * drawingCanvas[1].scale)/2; + drawingCanvas[1].yOffset = (drawingCanvas[1].height - storage[1].height * drawingCanvas[1].scale)/2; + + var scale = drawingCanvas[1].scale; + var xOffset = drawingCanvas[1].xOffset; + var yOffset = drawingCanvas[1].yOffset; + + var distance = grid.distance*scale; + + var fromX = drawingCanvas[1].width/2 - distance/2 - Math.floor( (drawingCanvas[1].width - distance)/2 / distance ) * distance; + + for( var x=fromX + distance* Math.ceil( (centerX-diameter-fromX) / distance); x <= fromX + distance* Math.floor( (centerX+diameter-fromX) / distance); x+=distance ) { + context.beginPath(); + context.lineWidth = grid.width*scale; + context.lineCap = 'round'; + context.fillStyle = grid.color; + context.strokeStyle = grid.color; + context.moveTo(x, centerY - Math.sqrt( diameter*diameter - (centerX-x)*(centerX-x) )); + context.lineTo(x, centerY + Math.sqrt( diameter*diameter - (centerX-x)*(centerX-x) ) ); + context.stroke(); + } + var fromY = drawingCanvas[1].height/2 - distance/2 - Math.floor( (drawingCanvas[1].height - distance)/2 / distance ) * distance ; + for( var y=fromY + distance* Math.ceil( (centerY-diameter-fromY) / distance); y <= fromY + distance* Math.floor( (centerY+diameter-fromY) / distance); y+=distance ) { + context.beginPath(); + context.lineWidth = grid.width*scale; + context.lineCap = 'round'; + context.fillStyle = grid.color; + context.strokeStyle = grid.color; + context.moveTo(centerX - Math.sqrt( diameter*diameter - (centerY-y)*(centerY-y) ), y ); + context.lineTo(centerX + Math.sqrt( diameter*diameter - (centerY-y)*(centerY-y) ), y ); + context.stroke(); + } + } + + /** + * Set the color + */ + function setColor( index, record ) { + // protect against out of bounds (this could happen when + // replaying events recorded with different color settings). + if ( index >= boardmarkers[mode].length ) index = 0; + color[mode] = index; + drawingCanvas[mode].canvas.style.cursor = pens[mode][color[mode]].cursor; + if ( record ) { + recordEvent( { type: "setcolor", index: index, begin: Date.now() - slideStart } ); + updateStorage(); + } + } + + /** + * Set the board + */ + function setBoard( index, record ) { + board = index; + redrawChalkboard( board ); + + if ( record ) { + recordEvent( { type: "setboard", index: board, begin: Date.now() - slideStart } ); + updateStorage(); + } + } + + function redrawChalkboard( board ) { + clearCanvas( 1 ); + var slideData = getSlideData( slideIndices, 1 ); + var index = 0; + var play = ( board == 0 ); + while ( index < slideData.events.length && slideData.events[index].begin < Date.now() - slideStart) { + if ( slideData.events[index].type == "setboard" ) { + play = ( board == slideData.events[index].index ); + } + else if ( play || slideData.events[index].type == "setcolor" ) { + playEvent( 1, slideData.events[index], Date.now() - slideStart ); + } + index++; + } + } + + + /** + * Forward cycle color + */ + function cycleColorNext() { + color[mode] = (color[mode] + 1) % pens[mode].length; + return color[mode]; + } + + /** + * Backward cycle color + */ + function cycleColorPrev() { + color[mode] = (color[mode] + (pens[mode].length - 1)) % pens[mode].length; + return color[mode]; + } + +/***************************************************************** +** Broadcast +******************************************************************/ + + var eventQueue = []; + + document.addEventListener( 'received', function ( message ) { + if ( message.content && message.content.sender == 'chalkboard-plugin' ) { + // add message to queue + eventQueue.push(message); + } + if ( eventQueue.length == 1 ) processQueue(); + }); + +//console.log(JSON.stringify(message)); + function processQueue() { + // take first message from queue + var message = eventQueue.shift(); + + // synchronize time with seminar host + slideStart = Date.now() - message.content.timestamp; + switch ( message.content.type ) { + case 'showChalkboard': + showChalkboard(); + break; + case 'closeChalkboard': + closeChalkboard(); + break; + case 'startDrawing': + startDrawing(message.content.x, message.content.y, message.content.erase); + break; + case 'startErasing': + if ( message.content ) { + message.content.type = "erase"; + message.content.begin = Date.now() - slideStart; + eraseWithSponge(drawingCanvas[mode].context, message.content.x, message.content.y); + } + break; + case 'drawSegment': + drawSegment(message.content.x, message.content.y, message.content.erase); + break; + case 'stopDrawing': + stopDrawing(); + break; + case 'clear': + clear(); + break; + case 'setcolor': + setColor(message.content.index, true); + break; + case 'setboard': + setBoard(message.content.index, true); + break; + case 'resetSlide': + resetSlide(true); + break; + case 'init': + storage = message.content.storage; + for (var id = 0; id < 2; id++ ) { + drawingCanvas[id].scale = Math.min( drawingCanvas[id].width/storage[id].width, drawingCanvas[id].height/storage[id].height ); + drawingCanvas[id].xOffset = (drawingCanvas[id].width - storage[id].width * drawingCanvas[id].scale)/2; + drawingCanvas[id].yOffset = (drawingCanvas[id].height - storage[id].height * drawingCanvas[id].scale)/2; + } + clearCanvas( 0 ); + clearCanvas( 1 ); + if ( !playback ) { + slidechangeTimeout = setTimeout( startPlayback, transition, getSlideDuration(), 0 ); + } + if ( mode == 1 && message.content.mode == 0) { + setTimeout( closeChalkboard, transition + 50 ); + } + if ( mode == 0 && message.content.mode == 1) { + setTimeout( showChalkboard, transition + 50 ); + } + mode = message.content.mode; + break; + default: + break; + } + + // continue with next message if queued + if ( eventQueue.length > 0 ) { + processQueue(); + } + else { + updateStorage(); + } + } + + document.addEventListener( 'welcome', function( user ) { + // broadcast storage + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', recipient: user.id, type: 'init', timestamp: Date.now() - slideStart, storage: storage, mode: mode }; + document.dispatchEvent( message ); + }); + +/***************************************************************** +** Playback +******************************************************************/ + + document.addEventListener('seekplayback', function( event ) { +//console.log('event seekplayback ' + event.timestamp); + stopPlayback(); + if ( !playback || event.timestamp == 0) { + // in other cases startplayback fires after seeked + startPlayback( event.timestamp ); + } +//console.log('seeked'); + }); + + + document.addEventListener('startplayback', function( event ) { +//console.log('event startplayback ' + event.timestamp); + stopPlayback(); + playback = true; + startPlayback( event.timestamp ); + }); + + document.addEventListener('stopplayback', function( event ) { +//console.log('event stopplayback ' + (Date.now() - slideStart) ); + playback = false; + stopPlayback(); + }); + + document.addEventListener('startrecording', function( event ) { +//console.log('event startrecording ' + event.timestamp); + startRecording(); + }); + + function recordEvent( event ) { + var slideData = getSlideData(); + var i = slideData.events.length; + while ( i > 0 && event.begin < slideData.events[i-1].begin ) { + i--; + } + slideData.events.splice( i, 0, event); + slideData.duration = Math.max( slideData.duration, Date.now() - slideStart ) + 1; + } + + function startRecording() { + resetSlide( true ); + slideStart = Date.now(); + } + + function startPlayback( timestamp, finalMode ) { +//console.log("playback " + timestamp ); + slideStart = Date.now() - timestamp; + closeChalkboard(); + mode = 0; + board = 0; + for ( var id = 0; id < 2; id++ ) { + clearCanvas( id ); + var slideData = getSlideData( slideIndices, id ); +//console.log( timestamp +" / " + JSON.stringify(slideData)); + var index = 0; + while ( index < slideData.events.length && slideData.events[index].begin < (Date.now() - slideStart) ) { + playEvent( id, slideData.events[index], timestamp ); + index++; + } + + while ( playback && index < slideData.events.length ) { + timeouts[id].push( setTimeout( playEvent, slideData.events[index].begin - (Date.now() - slideStart), id, slideData.events[index], timestamp ) ); + index++; + } + } +//console.log("Mode: " + finalMode + "/" + mode ); + if ( finalMode != undefined ) { + mode = finalMode; + } + if( mode == 1 ) showChalkboard(); +//console.log("playback (ok)"); + + }; + + function stopPlayback() { +//console.log("stopPlayback"); +//console.log("Timeouts: " + timeouts[0].length + "/"+ timeouts[1].length); + for ( var id = 0; id < 2; id++ ) { + for (var i = 0; i < timeouts[id].length; i++) { + clearTimeout(timeouts[id][i]); + } + timeouts[id] = []; + } + }; + + function playEvent( id, event, timestamp ) { +//console.log( timestamp +" / " + JSON.stringify(event)); +//console.log( id + ": " + timestamp +" / " + event.begin +" / " + event.type +" / " + mode ); + switch ( event.type ) { + case "open": + if ( timestamp <= event.begin ) { + showChalkboard(); + } + else { + mode = 1; + } + + break; + case "close": + if ( timestamp < event.begin ) { + closeChalkboard(); + } + else { + mode = 0; + } + break; + case "clear": + clearCanvas( id ); + break; + case "setcolor": + setColor(event.index); + break; + case "setboard": + setBoard(event.index); + break; + case "draw": + drawCurve( id, event, timestamp ); + break; + case "erase": + eraseCurve( id, event, timestamp ); + break; + + } + }; + + function drawCurve( id, event, timestamp ) { + if ( event.curve.length > 1 ) { + var ctx = drawingCanvas[id].context; + var scale = drawingCanvas[id].scale; + var xOffset = drawingCanvas[id].xOffset; + var yOffset = drawingCanvas[id].yOffset; + + var stepDuration = ( event.end - event.begin )/ ( event.curve.length - 1 ); +//console.log("---"); + for (var i = 1; i < event.curve.length; i++) { + if (event.begin + i * stepDuration <= (Date.now() - slideStart)) { +//console.log( "Draw " + timestamp +" / " + event.begin + " + " + i + " * " + stepDuration ); + draw[id](ctx, xOffset + event.curve[i-1].x*scale, yOffset + event.curve[i-1].y*scale, xOffset + event.curve[i].x*scale, yOffset + event.curve[i].y*scale); + } + else if ( playback ) { +//console.log( "Cue " + timestamp +" / " + (Date.now() - slideStart) +" / " + event.begin + " + " + i + " * " + stepDuration + " = " + Math.max(0,event.begin + i * stepDuration - timestamp) ); + timeouts.push( setTimeout( + draw[id], Math.max(0,event.begin + i * stepDuration - (Date.now() - slideStart)), ctx, + xOffset + event.curve[i-1].x*scale, + yOffset + event.curve[i-1].y*scale, + xOffset + event.curve[i].x*scale, + yOffset + event.curve[i].y*scale + ) + ); + } + } + } + + }; + + function eraseCurve( id, event, timestamp ) { + if ( event.curve.length > 1 ) { + var ctx = drawingCanvas[id].context; + var scale = drawingCanvas[id].scale; + var xOffset = drawingCanvas[id].xOffset; + var yOffset = drawingCanvas[id].yOffset; + + var stepDuration = ( event.end - event.begin )/ event.curve.length; + for (var i = 0; i < event.curve.length; i++) { + if (event.begin + i * stepDuration <= (Date.now() - slideStart)) { + eraseWithSponge(ctx, xOffset + event.curve[i].x*scale, yOffset + event.curve[i].y*scale); + } + else if ( playback ) { + timeouts.push( setTimeout( + eraseWithSponge, Math.max(0,event.begin + i * stepDuration - (Date.now() - slideStart)), ctx, + xOffset + event.curve[i].x * scale, + yOffset + event.curve[i].y * scale + ) + ); + } + } + } + + }; + + + function startDrawing( x, y, erase ) { + var ctx = drawingCanvas[mode].context; + var scale = drawingCanvas[mode].scale; + var xOffset = drawingCanvas[mode].xOffset; + var yOffset = drawingCanvas[mode].yOffset; + xLast = x * scale + xOffset; + yLast = y * scale + yOffset; + if ( erase == true) { + event = { type: "erase", begin: Date.now() - slideStart, end: null, curve: [{x: x, y: y}]}; + drawingCanvas[mode].canvas.style.cursor = 'url("' + eraser.src + '") ' + eraser.radius + ' ' + eraser.radius + ', auto'; + eraseWithSponge(ctx, x * scale + xOffset, y * scale + yOffset); + } + else { + event = { type: "draw", begin: Date.now() - slideStart, end: null, curve: [{x: x, y: y}] }; + } + } + + + function showSponge(x,y) { + if ( event ) { + event.type = "erase"; + event.begin = Date.now() - slideStart; + // show sponge image + drawingCanvas[mode].sponge.style.left = (x - eraser.radius) +"px" ; + drawingCanvas[mode].sponge.style.top = (y - eraser.radius) +"px" ; + drawingCanvas[mode].sponge.style.visibility = "visible"; + eraseWithSponge(drawingCanvas[mode].context,x,y); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'startErasing', timestamp: Date.now() - slideStart, x: (mouseX - xOffset)/scale, y: (mouseY-yOffset)/scale }; + document.dispatchEvent( message ); + } + } + + function drawSegment( x, y, erase ) { + var ctx = drawingCanvas[mode].context; + var scale = drawingCanvas[mode].scale; + var xOffset = drawingCanvas[mode].xOffset; + var yOffset = drawingCanvas[mode].yOffset; + if ( !event ) { + // safeguard if broadcast hickup + startDrawing( x, y, erase ); + } + event.curve.push({x: x, y: y}); + if(y * scale + yOffset < drawingCanvas[mode].height && x * scale + xOffset < drawingCanvas[mode].width) { + if ( erase ) { + eraseWithSponge(ctx, x * scale + xOffset, y * scale + yOffset); + } + else { + draw[mode](ctx, xLast, yLast, x * scale + xOffset, y * scale + yOffset); + } + xLast = x * scale + xOffset; + yLast = y * scale + yOffset; + } + } + + function stopDrawing() { + if ( event ) { + event.end = Date.now() - slideStart; + if ( event.type == "erase" || event.curve.length > 1 ) { + // do not save a line with a single point only + recordEvent( event ); + updateStorage(); + } + event = null; + } + } + + +/***************************************************************** +** User interface +******************************************************************/ + + +// TODO: check all touchevents + document.addEventListener('touchstart', function(evt) { +//console.log("Touch start"); + if ( !readOnly && evt.target.getAttribute('data-chalkboard') == mode ) { +// var ctx = drawingCanvas[mode].context; + var scale = drawingCanvas[mode].scale; + var xOffset = drawingCanvas[mode].xOffset; + var yOffset = drawingCanvas[mode].yOffset; + + evt.preventDefault(); + var touch = evt.touches[0]; + mouseX = touch.pageX; + mouseY = touch.pageY; + startDrawing( (mouseX - xOffset)/scale, (mouseY-yOffset)/scale, false ); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'startDrawing', timestamp: Date.now() - slideStart, x: (mouseX - xOffset)/scale, y: (mouseY-yOffset)/scale, erase: false }; + document.dispatchEvent( message ); +/* + xLast = mouseX; + yLast = mouseY; + event = { type: "draw", begin: Date.now() - slideStart, end: null, curve: [{x: (mouseX - xOffset)/scale, y: (mouseY-yOffset)/scale}] }; +*/ + touchTimeout = setTimeout( showSponge, 500, mouseX, mouseY ); + } + }, passiveSupported ? {passive: false} : false); + + document.addEventListener('touchmove', function(evt) { +//console.log("Touch move"); + clearTimeout( touchTimeout ); + touchTimeout = null; + if ( event ) { +// var ctx = drawingCanvas[mode].context; + var scale = drawingCanvas[mode].scale; + var xOffset = drawingCanvas[mode].xOffset; + var yOffset = drawingCanvas[mode].yOffset; + + var touch = evt.touches[0]; + mouseX = touch.pageX; + mouseY = touch.pageY; + if (mouseY < drawingCanvas[mode].height && mouseX < drawingCanvas[mode].width) { + evt.preventDefault(); + // move sponge + if ( event.type == "erase" ) { + drawingCanvas[mode].sponge.style.left = (mouseX - eraser.radius) +"px" ; + drawingCanvas[mode].sponge.style.top = (mouseY - eraser.radius) +"px" ; + } + } + + drawSegment( (mouseX - xOffset)/scale, (mouseY-yOffset)/scale, ( event.type == "erase" ) ); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'drawSegment', timestamp: Date.now() - slideStart, x: (mouseX - xOffset)/scale, y: (mouseY-yOffset)/scale, erase: ( event.type == "erase" ) }; + document.dispatchEvent( message ); +/* + if (mouseY < drawingCanvas[mode].height && mouseX < drawingCanvas[mode].width) { + evt.preventDefault(); + event.curve.push({x: (mouseX - xOffset)/scale, y: (mouseY-yOffset)/scale}); + if ( event.type == "erase" ) { + drawingCanvas[mode].sponge.style.left = (mouseX - eraser.radius) +"px" ; + drawingCanvas[mode].sponge.style.top = (mouseY - eraser.radius) +"px" ; + eraseWithSponge(ctx, mouseX, mouseY); + } + else { + draw[mode](ctx, xLast, yLast, mouseX, mouseY); + } + xLast = mouseX; + yLast = mouseY; + } +*/ + } + }, false); + + + document.addEventListener('touchend', function(evt) { + clearTimeout( touchTimeout ); + touchTimeout = null; + // hide sponge image + drawingCanvas[mode].sponge.style.visibility = "hidden"; + stopDrawing(); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', timestamp: Date.now() - slideStart, type: 'stopDrawing' }; + document.dispatchEvent( message ); +/* + if ( event ) { + event.end = Date.now() - slideStart; + if ( event.type == "erase" || event.curve.length > 1 ) { + // do not save a line with a single point only + recordEvent( event ); + } + event = null; + } +*/ + }, false); + + document.addEventListener( 'mousedown', function( evt ) { +//console.log("Mouse down"); +//console.log( "Read only: " + readOnly ); + if ( !readOnly && evt.target.getAttribute('data-chalkboard') == mode ) { +//console.log( "mousedown: " + evt.button ); +// var ctx = drawingCanvas[mode].context; + var scale = drawingCanvas[mode].scale; + var xOffset = drawingCanvas[mode].xOffset; + var yOffset = drawingCanvas[mode].yOffset; + + mouseX = evt.pageX; + mouseY = evt.pageY; + startDrawing( (mouseX - xOffset)/scale, (mouseY-yOffset)/scale, ( evt.button == 2 || evt.button == 1) ); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'startDrawing', timestamp: Date.now() - slideStart, x: (mouseX - xOffset)/scale, y: (mouseY-yOffset)/scale, erase: ( evt.button == 2 || evt.button == 1) }; + document.dispatchEvent( message ); +/* + xLast = mouseX; + yLast = mouseY; + if ( evt.button == 2) { + event = { type: "erase", begin: Date.now() - slideStart, end: null, curve: [{x: (mouseX - xOffset)/scale, y: (mouseY-yOffset)/scale}]}; + drawingCanvas[mode].canvas.style.cursor = 'url("' + path + 'img/sponge.png") ' + eraser.radius + ' ' + eraser.radius + ', auto'; + eraseWithSponge(ctx,mouseX,mouseY); + } + else { + event = { type: "draw", begin: Date.now() - slideStart, end: null, curve: [{x: (mouseX - xOffset)/scale, y: (mouseY-yOffset)/scale}] }; + } +*/ + } + } ); + + document.addEventListener( 'mousemove', function( evt ) { +//console.log("Mouse move"); + if ( event ) { +// var ctx = drawingCanvas[mode].context; + var scale = drawingCanvas[mode].scale; + var xOffset = drawingCanvas[mode].xOffset; + var yOffset = drawingCanvas[mode].yOffset; + + mouseX = evt.pageX; + mouseY = evt.pageY; + drawSegment( (mouseX - xOffset)/scale, (mouseY-yOffset)/scale, ( event.type == "erase" ) ); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'drawSegment', timestamp: Date.now() - slideStart, x: (mouseX - xOffset)/scale, y: (mouseY-yOffset)/scale, erase: ( event.type == "erase" ) }; + document.dispatchEvent( message ); +/* + event.curve.push({x: (mouseX - xOffset)/scale, y: (mouseY-yOffset)/scale}); + if(mouseY < drawingCanvas[mode].height && mouseX < drawingCanvas[mode].width) { + if ( event.type == "erase" ) { + eraseWithSponge(ctx,mouseX,mouseY); + } + else { + draw[mode](ctx, xLast, yLast, mouseX,mouseY); + } + xLast = mouseX; + yLast = mouseY; + } +*/ + } + } ); + + + document.addEventListener( 'mouseup', function( evt ) { + drawingCanvas[mode].canvas.style.cursor = pens[mode][color[mode]].cursor; + if ( event ) { + stopDrawing(); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'stopDrawing', timestamp: Date.now() - slideStart }; + document.dispatchEvent( message ); +/* if(evt.button == 2){ + } + event.end = Date.now() - slideStart; + if ( event.type == "erase" || event.curve.length > 1 ) { + // do not save a line with a single point only + recordEvent( event ); + } + event = null; +*/ + } + } ); + + + window.addEventListener( "resize", function() { +//console.log("resize"); + // Resize the canvas and draw everything again + var timestamp = Date.now() - slideStart; + if ( !playback ) { + timestamp = getSlideDuration(); + } + +//console.log( drawingCanvas[0].scale + "/" + drawingCanvas[0].xOffset + "/" +drawingCanvas[0].yOffset ); + for (var id = 0; id < 2; id++ ) { + drawingCanvas[id].width = window.innerWidth; + drawingCanvas[id].height = window.innerHeight; + drawingCanvas[id].canvas.width = drawingCanvas[id].width; + drawingCanvas[id].canvas.height = drawingCanvas[id].height; + drawingCanvas[id].context.canvas.width = drawingCanvas[id].width; + drawingCanvas[id].context.canvas.height = drawingCanvas[id].height; + + drawingCanvas[id].scale = Math.min( drawingCanvas[id].width/storage[id].width, drawingCanvas[id].height/storage[id].height ); + drawingCanvas[id].xOffset = (drawingCanvas[id].width - storage[id].width * drawingCanvas[id].scale)/2; + drawingCanvas[id].yOffset = (drawingCanvas[id].height - storage[id].height * drawingCanvas[id].scale)/2; +//console.log( drawingCanvas[id].scale + "/" + drawingCanvas[id].xOffset + "/" +drawingCanvas[id].yOffset ); + } +//console.log( window.innerWidth + "/" + window.innerHeight); + startPlayback( timestamp, mode, true ); + + } ); + + Reveal.addEventListener( 'ready', function( evt ) { +//console.log('ready'); + if ( !printMode ) { + slideStart = Date.now() - getSlideDuration(); + slideIndices = Reveal.getIndices(); + if ( !playback ) { + startPlayback( getSlideDuration(), 0 ); + } + if ( Reveal.isAutoSliding() ) { + var event = new CustomEvent('startplayback'); + event.timestamp = 0; + document.dispatchEvent( event ); + } + updateStorage(); + } + else { +console.log("Create printouts when ready"); + whenReady( createPrintout ); + } + }); + Reveal.addEventListener( 'slidechanged', function( evt ) { +// clearTimeout( slidechangeTimeout ); +//console.log('slidechanged'); + if ( !printMode ) { + slideStart = Date.now() - getSlideDuration(); + slideIndices = Reveal.getIndices(); + closeChalkboard(); + clearCanvas( 0 ); + clearCanvas( 1 ); + if ( !playback ) { + slidechangeTimeout = setTimeout( startPlayback, transition, getSlideDuration(), 0 ); + } + if ( Reveal.isAutoSliding() ) { + var event = new CustomEvent('startplayback'); + event.timestamp = 0; + document.dispatchEvent( event ); + } + + updateStorage(); + } + }); + Reveal.addEventListener( 'fragmentshown', function( evt ) { +// clearTimeout( slidechangeTimeout ); +//console.log('fragmentshown'); + if ( !printMode ) { + slideStart = Date.now() - getSlideDuration(); + slideIndices = Reveal.getIndices(); + closeChalkboard(); + clearCanvas( 0 ); + clearCanvas( 1 ); + if ( Reveal.isAutoSliding() ) { + var event = new CustomEvent('startplayback'); + event.timestamp = 0; + document.dispatchEvent( event ); + } + else if ( !playback ) { + // + startPlayback( getSlideDuration(), 0 ); +// closeChalkboard(); + } + } + }); + Reveal.addEventListener( 'fragmenthidden', function( evt ) { +// clearTimeout( slidechangeTimeout ); +//console.log('fragmenthidden'); + if ( !printMode ) { + slideStart = Date.now() - getSlideDuration(); + slideIndices = Reveal.getIndices(); + closeChalkboard(); + clearCanvas( 0 ); + clearCanvas( 1 ); + if ( Reveal.isAutoSliding() ) { + document.dispatchEvent( new CustomEvent('stopplayback') ); + } + else if ( !playback ) { + startPlayback( getSlideDuration() ); + closeChalkboard(); + } + } + }); + + Reveal.addEventListener( 'autoslideresumed', function( evt ) { +//console.log('autoslideresumed'); + var event = new CustomEvent('startplayback'); + event.timestamp = 0; + document.dispatchEvent( event ); + }); + Reveal.addEventListener( 'autoslidepaused', function( evt ) { +//console.log('autoslidepaused'); + document.dispatchEvent( new CustomEvent('stopplayback') ); + + // advance to end of slide +// closeChalkboard(); + startPlayback( getSlideDuration(), 0 ); + }); + + function toggleNotesCanvas() { + if ( !readOnly ) { + if ( mode == 1 ) { + toggleChalkboard(); + notescanvas.style.background = background[0]; //'rgba(255,0,0,0.5)'; + notescanvas.style.pointerEvents = "auto"; + } + else { + if ( notescanvas.style.pointerEvents != "none" ) { + // hide notes canvas + if ( colorButtons) { + notescanvas.querySelector(".palette").style.visibility = "hidden"; + } + event = null; + notescanvas.style.background = 'rgba(0,0,0,0)'; + notescanvas.style.pointerEvents = "none"; + } + else { + // show notes canvas + if ( colorButtons) { + notescanvas.querySelector(".palette").style.visibility = "visible"; + } + notescanvas.style.background = background[0]; //'rgba(255,0,0,0.5)'; + notescanvas.style.pointerEvents = "auto"; + + var idx = 0; + if (color[mode]) { + idx = color[mode]; + } + + setColor(idx, true); + + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'setcolor', timestamp: Date.now() - slideStart, index: idx }; + document.dispatchEvent( message ); + } + } + } + }; + + function toggleChalkboard() { +//console.log("toggleChalkboard " + mode); + if ( mode == 1 ) { + event = null; + if ( !readOnly ) { + recordEvent( { type:"close", begin: Date.now() - slideStart } ); + updateStorage(); + } + closeChalkboard(); + + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'closeChalkboard', timestamp: Date.now() - slideStart }; + document.dispatchEvent( message ); + } + else { + showChalkboard(); + if ( !readOnly ) { + recordEvent( { type:"open", begin: Date.now() - slideStart } ); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'showChalkboard', timestamp: Date.now() - slideStart }; + document.dispatchEvent( message ); + + var idx = 0; + + if (rememberColor[mode]) { + idx = color[mode]; + } + + setColor(idx, true); + + // broadcast + message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'setcolor', timestamp: Date.now() - slideStart, index: idx }; + document.dispatchEvent( message ); + + } + } + }; + + function clear() { + if ( !readOnly ) { + recordEvent( { type:"clear", begin: Date.now() - slideStart } ); + clearCanvas( mode ); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'clear', timestamp: Date.now() - slideStart }; + document.dispatchEvent( message ); + } + }; + + function colorIndex( idx ) { + if ( !readOnly ) { + setColor(idx, true); +// recordEvent( { type: "setcolor", index: idx, begin: Date.now() - slideStart } ); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'setcolor', timestamp: Date.now() - slideStart, index: idx }; + document.dispatchEvent( message ); + } + } + + function colorNext() { + if ( !readOnly ) { + let idx = cycleColorNext(); + setColor(idx, true); +// recordEvent( { type: "setcolor", index: idx, begin: Date.now() - slideStart } ); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'setcolor', timestamp: Date.now() - slideStart, index: idx }; + document.dispatchEvent( message ); + } + } + + function colorPrev() { + if ( !readOnly ) { + let idx = cycleColorPrev(); + setColor(idx, true); +// recordEvent( { type: "setcolor", index: idx, begin: Date.now() - slideStart } ); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'setcolor', timestamp: Date.now() - slideStart, index: idx }; + document.dispatchEvent( message ); + } + } + + function resetSlide( force ) { + var ok = force || confirm("Please confirm to delete chalkboard drawings on this slide!"); + if ( ok ) { +//console.log("resetSlide "); + stopPlayback(); + slideStart = Date.now(); + event = null; + closeChalkboard(); + + clearCanvas( 0 ); + clearCanvas( 1 ); + + mode = 1; + var slideData = getSlideData(); + slideData.duration = 0; + slideData.events = []; + mode = 0; + var slideData = getSlideData(); + slideData.duration = 0; + slideData.events = []; + + updateStorage(); + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'resetSlide', timestamp: Date.now() - slideStart }; + document.dispatchEvent( message ); + } + }; + + function resetStorage( force ) { + var ok = force || confirm("Please confirm to delete all chalkboard drawings!"); + if ( ok ) { + stopPlayback(); + slideStart = Date.now(); + clearCanvas( 0 ); + clearCanvas( 1 ); + if ( mode == 1 ) { + event = null; + closeChalkboard(); + } + + storage = [ + { width: Reveal.getConfig().width, height: Reveal.getConfig().height, data: []}, + { width: Reveal.getConfig().width, height: Reveal.getConfig().height, data: []} + ]; +/* + storage = [ + { width: drawingCanvas[0].width - 2 * drawingCanvas[0].xOffset, height: drawingCanvas[0].height - 2 * drawingCanvas[0].yOffset, data: []}, + { width: drawingCanvas[1].width, height: drawingCanvas[1].height, data: []} + ]; +*/ + if ( config.storage ) { + sessionStorage.setItem( config.storage, null ) + } + // broadcast + var message = new CustomEvent(messageType); + message.content = { sender: 'chalkboard-plugin', type: 'init', timestamp: Date.now() - slideStart, storage: storage, mode: mode }; + document.dispatchEvent( message ); + } + }; + + +/* + this.drawWithBoardmarker = drawWithBoardmarker; + this.drawWithChalk = drawWithChalk; + this.startRecording = startRecording; +*/ + this.toggleNotesCanvas = toggleNotesCanvas; + this.toggleChalkboard = toggleChalkboard; + this.colorIndex = colorIndex; + this.colorNext = colorNext; + this.colorPrev = colorPrev; + this.clear = clear; + this.reset = resetSlide; + this.resetAll = resetStorage; + this.download = downloadData; + this.updateStorage = updateStorage; + this.getData = getData; + this.configure = configure; + + + for (var key in keyBindings) { + if ( keyBindings[key] ) { + Reveal.addKeyBinding( keyBindings[key], RevealChalkboard[key] ); + } + }; + + return this; +}; diff --git a/docs/1_Fundamentals/plugin/chalkboard/plugin.js b/docs/1_Fundamentals/plugin/chalkboard/plugin.js new file mode 100644 index 0000000..76b736e --- /dev/null +++ b/docs/1_Fundamentals/plugin/chalkboard/plugin.js @@ -0,0 +1,1976 @@ +/***************************************************************** + ** Author: Asvin Goel, goel@telematique.eu + ** + ** A plugin for reveal.js adding a chalkboard. + ** + ** Version: 2.1.0 + ** + ** License: MIT license (see LICENSE.md) + ** + ** Credits: + ** Chalkboard effect by Mohamed Moustafa https://github.com/mmoustafa/Chalkboard + ** Multi color support initially added by Kurt Rinnert https://github.com/rinnert + ** Compatibility with reveal.js v4 by Hakim El Hattab https://github.com/hakimel + ******************************************************************/ + +window.RevealChalkboard = window.RevealChalkboard || { + id: 'RevealChalkboard', + init: function ( deck ) { + initChalkboard( deck ); + }, + configure: function ( config ) { + configure( config ); + }, + toggleNotesCanvas: function () { + toggleNotesCanvas(); + }, + toggleChalkboard: function () { + toggleChalkboard(); + }, + colorIndex: function () { + colorIndex(); + }, + colorNext: function () { + colorNext(); + }, + colorPrev: function () { + colorPrev(); + }, + clear: function () { + clear(); + }, + reset: function () { + reset(); + }, + resetAll: function () { + resetAll(); + }, + updateStorage: function () { + updateStorage(); + }, + getData: function () { + return getData(); + }, + download: function () { + download(); + }, +}; + +function scriptPath() { + // obtain plugin path from the script element + var src; + if ( document.currentScript ) { + src = document.currentScript.src; + } else { + var sel = document.querySelector( 'script[src$="/chalkboard/plugin.js"]' ) + if ( sel ) { + src = sel.src; + } + } + var path = ( src === undefined ) ? "" : src.slice( 0, src.lastIndexOf( "/" ) + 1 ); +//console.log("Path: " + path); + return path; +} +var path = scriptPath(); + +const initChalkboard = function ( Reveal ) { +//console.warn(path); + /* Feature detection for passive event handling*/ + var passiveSupported = false; + + try { + window.addEventListener( 'test', null, Object.defineProperty( {}, 'passive', { + get: function () { + passiveSupported = true; + } + } ) ); + } catch ( err ) {} + + +/***************************************************************** + ** Configuration + ******************************************************************/ + var background, pen, draw, color; + var grid = false; + var boardmarkerWidth = 3; + var chalkWidth = 7; + var chalkEffect = 1.0; + var rememberColor = [ true, false ]; + var eraser = { + src: path + 'img/sponge.png', + radius: 20 + }; + var boardmarkers = [ { + color: 'rgba(100,100,100,1)', + cursor: 'url(' + path + 'img/boardmarker-black.png), auto' + }, + { + color: 'rgba(30,144,255, 1)', + cursor: 'url(' + path + 'img/boardmarker-blue.png), auto' + }, + { + color: 'rgba(220,20,60,1)', + cursor: 'url(' + path + 'img/boardmarker-red.png), auto' + }, + { + color: 'rgba(50,205,50,1)', + cursor: 'url(' + path + 'img/boardmarker-green.png), auto' + }, + { + color: 'rgba(255,140,0,1)', + cursor: 'url(' + path + 'img/boardmarker-orange.png), auto' + }, + { + color: 'rgba(150,0,20150,1)', + cursor: 'url(' + path + 'img/boardmarker-purple.png), auto' + }, + { + color: 'rgba(255,220,0,1)', + cursor: 'url(' + path + 'img/boardmarker-yellow.png), auto' + } + ]; + var chalks = [ { + color: 'rgba(255,255,255,0.5)', + cursor: 'url(' + path + 'img/chalk-white.png), auto' + }, + { + color: 'rgba(96, 154, 244, 0.5)', + cursor: 'url(' + path + 'img/chalk-blue.png), auto' + }, + { + color: 'rgba(237, 20, 28, 0.5)', + cursor: 'url(' + path + 'img/chalk-red.png), auto' + }, + { + color: 'rgba(20, 237, 28, 0.5)', + cursor: 'url(' + path + 'img/chalk-green.png), auto' + }, + { + color: 'rgba(220, 133, 41, 0.5)', + cursor: 'url(' + path + 'img/chalk-orange.png), auto' + }, + { + color: 'rgba(220,0,220,0.5)', + cursor: 'url(' + path + 'img/chalk-purple.png), auto' + }, + { + color: 'rgba(255,220,0,0.5)', + cursor: 'url(' + path + 'img/chalk-yellow.png), auto' + } + ]; + var keyBindings = { + toggleNotesCanvas: { + keyCode: 67, + key: 'C', + description: 'Toggle notes canvas' + }, + toggleChalkboard: { + keyCode: 66, + key: 'B', + description: 'Toggle chalkboard' + }, + clear: { + keyCode: 46, + key: 'DEL', + description: 'Clear drawings on slide' + }, +/* + reset: { + keyCode: 173, + key: '-', + description: 'Reset drawings on slide' + }, +*/ + resetAll: { + keyCode: 8, + key: 'BACKSPACE', + description: 'Reset all drawings' + }, + colorNext: { + keyCode: 88, + key: 'X', + description: 'Next color' + }, + colorPrev: { + keyCode: 89, + key: 'Y', + description: 'Previous color' + }, + download: { + keyCode: 68, + key: 'D', + description: 'Download drawings' + } + }; + + + var theme = 'chalkboard'; + var color = [ 0, 0 ]; + var toggleChalkboardButton = false; + var toggleNotesButton = false; + var colorButtons = true; + var boardHandle = true; + var transition = 800; + + var readOnly = false; + var messageType = 'broadcast'; + + var config = configure( Reveal.getConfig().chalkboard || {} ); + if ( config.keyBindings ) { + for ( var key in config.keyBindings ) { + keyBindings[ key ] = config.keyBindings[ key ]; + }; + } + + function configure( config ) { + + if ( config.boardmarkerWidth || config.penWidth ) boardmarkerWidth = config.boardmarkerWidth || config.penWidth; + if ( config.chalkWidth ) chalkWidth = config.chalkWidth; + if ( config.chalkEffect ) chalkEffect = config.chalkEffect; + if ( config.rememberColor ) rememberColor = config.rememberColor; + if ( config.eraser ) eraser = config.eraser; + if ( config.boardmarkers ) boardmarkers = config.boardmarkers; + if ( config.chalks ) chalks = config.chalks; + + if ( config.theme ) theme = config.theme; + switch ( theme ) { + case 'whiteboard': + background = [ 'rgba(127,127,127,.1)', path + 'img/whiteboard.png' ]; + draw = [ drawWithBoardmarker, drawWithBoardmarker ]; + pens = [ boardmarkers, boardmarkers ]; + grid = { + color: 'rgb(127,127,255,0.1)', + distance: 40, + width: 2 + }; + break; + case 'chalkboard': + default: + background = [ 'rgba(127,127,127,.1)', path + 'img/blackboard.png' ]; + draw = [ drawWithBoardmarker, drawWithChalk ]; + pens = [ boardmarkers, chalks ]; + grid = { + color: 'rgb(50,50,10,0.5)', + distance: 80, + width: 2 + }; + } + + if ( config.background ) background = config.background; + if ( config.grid != undefined ) grid = config.grid; + + if ( config.toggleChalkboardButton != undefined ) toggleChalkboardButton = config.toggleChalkboardButton; + if ( config.toggleNotesButton != undefined ) toggleNotesButton = config.toggleNotesButton; + if ( config.colorButtons != undefined ) colorButtons = config.colorButtons; + if ( config.boardHandle != undefined ) boardHandle = config.boardHandle; + if ( config.transition ) transition = config.transition; + + if ( config.readOnly != undefined ) readOnly = config.readOnly; + if ( config.messageType ) messageType = config.messageType; + + if ( drawingCanvas && ( config.theme || config.background || config.grid ) ) { + var canvas = document.getElementById( drawingCanvas[ 1 ].id ); + canvas.style.background = 'url("' + background[ 1 ] + '") repeat'; + clearCanvas( 1 ); + drawGrid(); + } + + return config; + } +/***************************************************************** + ** Setup + ******************************************************************/ + + function whenReady( callback ) { + // wait for markdown to be parsed and code to be highlighted + if ( !document.querySelector( 'section[data-markdown]:not([data-markdown-parsed])' ) + && !document.querySelector( 'code[data-line-numbers*="|"]') + ) { + callback(); + } else { + console.log( "Wait for markdown to be parsed and code to be highlighted" ); + setTimeout( whenReady, 500, callback ) + } + } + + function whenLoaded( callback ) { + // wait for drawings to be loaded and markdown to be parsed + if ( loaded !== null ) { + callback(); + } else { + console.log( "Wait for drawings to be loaded" ); + setTimeout( whenLoaded, 500, callback ) + } + } + + if ( toggleChalkboardButton ) { +console.warn( "toggleChalkboardButton is deprecated, use customcontrols plugin instead!" ); +//console.log("toggleChalkboardButton") + var button = document.createElement( 'div' ); + button.className = "chalkboard-button"; + button.id = "toggle-chalkboard"; + button.style.visibility = "visible"; + button.style.position = "absolute"; + button.style.zIndex = 30; + button.style.fontSize = "24px"; + + button.style.left = toggleChalkboardButton.left || "30px"; + button.style.bottom = toggleChalkboardButton.bottom || "30px"; + button.style.top = toggleChalkboardButton.top || "auto"; + button.style.right = toggleChalkboardButton.right || "auto"; + + button.innerHTML = '' + document.querySelector( ".reveal" ).appendChild( button ); + } + if ( toggleNotesButton ) { +console.warn( "toggleNotesButton is deprecated, use customcontrols plugin instead!" ); +//console.log("toggleNotesButton") + var button = document.createElement( 'div' ); + button.className = "chalkboard-button"; + button.id = "toggle-notes"; + button.style.position = "absolute"; + button.style.zIndex = 30; + button.style.fontSize = "24px"; + + button.style.left = toggleNotesButton.left || "70px"; + button.style.bottom = toggleNotesButton.bottom || "30px"; + button.style.top = toggleNotesButton.top || "auto"; + button.style.right = toggleNotesButton.right || "auto"; + + button.innerHTML = '' + document.querySelector( ".reveal" ).appendChild( button ); + } + + var drawingCanvas = [ { + id: 'notescanvas' + }, { + id: 'chalkboard' + } ]; + setupDrawingCanvas( 0 ); + setupDrawingCanvas( 1 ); + + var mode = 0; // 0: notes canvas, 1: chalkboard + var board = 0; // board index (only for chalkboard) + + var mouseX = 0; + var mouseY = 0; + var lastX = null; + var lastY = null; + + var drawing = false; + var erasing = false; + + var slideStart = Date.now(); + var slideIndices = { + h: 0, + v: 0 + }; + + var timeouts = [ + [], + [] + ]; + var touchTimeout = null; + var slidechangeTimeout = null; + var updateStorageTimeout = null; + var playback = false; + + function createPalette( colors, length ) { + if ( length === true || length > colors.length ) { + length = colors.length; + } + var palette = document.createElement( 'div' ); + palette.classList.add( 'palette' ); + var list = document.createElement( 'ul' ); + // color pickers + for ( var i = 0; i < length; i++ ) { + var colorButton = document.createElement( 'li' ); + colorButton.setAttribute( 'data-color', i ); + colorButton.innerHTML = ''; + colorButton.style.color = colors[ i ].color; + colorButton.addEventListener( 'click', function ( e ) { + var element = e.target; + while ( !element.hasAttribute( 'data-color' ) ) { + element = element.parentElement; + } + colorIndex( parseInt( element.getAttribute( 'data-color' ) ) ); + } ); + colorButton.addEventListener( 'touchstart', function ( e ) { + var element = e.target; + while ( !element.hasAttribute( 'data-color' ) ) { + element = element.parentElement; + } + colorIndex( parseInt( element.getAttribute( 'data-color' ) ) ); + } ); + list.appendChild( colorButton ); + } + palette.appendChild( list ); + return palette; + }; + + function switchBoard( boardIdx ) { + selectBoard( boardIdx, true ); + // broadcast + var message = new CustomEvent( messageType ); + message.content = { + sender: 'chalkboard-plugin', + type: 'selectboard', + timestamp: Date.now() - slideStart, + mode, + board + }; + document.dispatchEvent( message ); + } + + function setupDrawingCanvas( id ) { + var container = document.createElement( 'div' ); + container.id = drawingCanvas[ id ].id; + container.classList.add( 'overlay' ); + container.setAttribute( 'data-prevent-swipe', 'true' ); + container.oncontextmenu = function () { + return false; + } + container.style.cursor = pens[ id ][ color[ id ] ].cursor; + + drawingCanvas[ id ].width = window.innerWidth; + drawingCanvas[ id ].height = window.innerHeight; + drawingCanvas[ id ].scale = 1; + drawingCanvas[ id ].xOffset = 0; + drawingCanvas[ id ].yOffset = 0; + + if ( id == "0" ) { + container.style.background = 'rgba(0,0,0,0)'; + container.style.zIndex = 24; + container.style.opacity = 1; + container.style.visibility = 'visible'; + container.style.pointerEvents = 'none'; + + var slides = document.querySelector( '.slides' ); + var aspectRatio = Reveal.getConfig().width / Reveal.getConfig().height; + if ( drawingCanvas[ id ].width > drawingCanvas[ id ].height * aspectRatio ) { + drawingCanvas[ id ].xOffset = ( drawingCanvas[ id ].width - drawingCanvas[ id ].height * aspectRatio ) / 2; + } else if ( drawingCanvas[ id ].height > drawingCanvas[ id ].width / aspectRatio ) { + drawingCanvas[ id ].yOffset = ( drawingCanvas[ id ].height - drawingCanvas[ id ].width / aspectRatio ) / 2; + } + + if ( colorButtons ) { + var palette = createPalette( boardmarkers, colorButtons ); + palette.style.visibility = 'hidden'; // only show palette in drawing mode + container.appendChild( palette ); + } + } else { + container.style.background = 'url("' + background[ id ] + '") repeat'; + container.style.zIndex = 26; + container.style.opacity = 0; + container.style.visibility = 'hidden'; + + if ( colorButtons ) { + var palette = createPalette( chalks, colorButtons ); + container.appendChild( palette ); + } + if ( boardHandle ) { + var handle = document.createElement( 'div' ); + handle.classList.add( 'boardhandle' ); + handle.innerHTML = ''; + handle.querySelector( '#previousboard' ).addEventListener( 'click', function ( e ) { + e.preventDefault(); + switchBoard( board - 1 ); + } ); + handle.querySelector( '#nextboard' ).addEventListener( 'click', function ( e ) { + e.preventDefault(); + switchBoard( board + 1 ); + } ); + handle.querySelector( '#previousboard' ).addEventListener( 'touchstart', function ( e ) { + e.preventDefault(); + switchBoard( board - 1 ); + } ); + handle.querySelector( '#nextboard' ).addEventListener( 'touchstart', function ( e ) { + e.preventDefault(); + switchBoard( board + 1 ); + } ); + + container.appendChild( handle ); + } + } + + + var sponge = document.createElement( 'img' ); + sponge.src = eraser.src; + sponge.id = 'sponge'; + sponge.style.visibility = 'hidden'; + sponge.style.position = 'absolute'; + container.appendChild( sponge ); + drawingCanvas[ id ].sponge = sponge; + + var canvas = document.createElement( 'canvas' ); + canvas.width = drawingCanvas[ id ].width; + canvas.height = drawingCanvas[ id ].height; + canvas.setAttribute( 'data-chalkboard', id ); + canvas.style.cursor = pens[ id ][ color[ id ] ].cursor; + container.appendChild( canvas ); + drawingCanvas[ id ].canvas = canvas; + + drawingCanvas[ id ].context = canvas.getContext( '2d' ); + + setupCanvasEvents( container ); + + document.querySelector( '.reveal' ).appendChild( container ); + drawingCanvas[ id ].container = container; + } + + +/***************************************************************** + ** Storage + ******************************************************************/ + + var storage = [ { + width: Reveal.getConfig().width, + height: Reveal.getConfig().height, + data: [] + }, + { + width: Reveal.getConfig().width, + height: Reveal.getConfig().height, + data: [] + } + ]; + + var loaded = null; + + if ( config.storage ) { + // Get chalkboard drawings from session storage + loaded = initStorage( sessionStorage.getItem( config.storage ) ); + } + + if ( !loaded && config.src != null ) { + // Get chalkboard drawings from the given file + loadData( config.src ); + } + + /** + * Initialize storage. + */ + function initStorage( json ) { + var success = false; + try { + var data = JSON.parse( json ); + for ( var id = 0; id < data.length; id++ ) { + if ( drawingCanvas[ id ].width != data[ id ].width || drawingCanvas[ id ].height != data[ id ].height ) { + drawingCanvas[ id ].scale = Math.min( drawingCanvas[ id ].width / data[ id ].width, drawingCanvas[ id ].height / data[ id ].height ); + drawingCanvas[ id ].xOffset = ( drawingCanvas[ id ].width - data[ id ].width * drawingCanvas[ id ].scale ) / 2; + drawingCanvas[ id ].yOffset = ( drawingCanvas[ id ].height - data[ id ].height * drawingCanvas[ id ].scale ) / 2; + } + if ( config.readOnly ) { + drawingCanvas[ id ].container.style.cursor = 'default'; + drawingCanvas[ id ].canvas.style.cursor = 'default'; + } + } + success = true; + storage = data; + } catch ( err ) { + console.warn( "Cannot initialise storage!" ); + } + return success; + } + + + /** + * Load data. + */ + function loadData( filename ) { + var xhr = new XMLHttpRequest(); + xhr.onload = function () { + if ( xhr.readyState === 4 && xhr.status != 404 ) { + loaded = initStorage( xhr.responseText ); + updateStorage(); + console.log( "Drawings loaded from file" ); + } else { + config.readOnly = undefined; + readOnly = undefined; + console.warn( 'Failed to get file ' + filename + '. ReadyState: ' + xhr.readyState + ', Status: ' + xhr.status ); + loaded = false; + } + }; + + xhr.open( 'GET', filename, true ); + try { + xhr.send(); + } catch ( error ) { + config.readOnly = undefined; + readOnly = undefined; + console.warn( 'Failed to get file ' + filename + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + error ); + loaded = false; + } + } + + + function storageChanged( now ) { + if ( !now ) { + // create or update timer + if ( updateStorageTimeout ) { + clearTimeout( updateStorageTimeout ); + } + updateStorageTimeout = setTimeout( storageChanged, 1000, true); + } + else { +// console.log("Update storage", updateStorageTimeout, Date.now()); + updateStorage(); + updateStorageTimeout = null; + } + } + + function updateStorage() { + var json = JSON.stringify( storage ) + if ( config.storage ) { + sessionStorage.setItem( config.storage, json ) + } + return json; + } + + function recordEvent( event ) { +//console.log(event); + event.time = Date.now() - slideStart; + if ( mode == 1 ) event.board = board; + var slideData = getSlideData(); + var i = slideData.events.length; + while ( i > 0 && event.time < slideData.events[ i - 1 ].time ) { + i--; + } + slideData.events.splice( i, 0, event ); + slideData.duration = Math.max( slideData.duration, Date.now() - slideStart ) + 1; + + storageChanged(); + } + + /** + * Get data as json string. + */ + function getData() { + // cleanup slide data without events + for ( var id = 0; id < 2; id++ ) { + for ( var i = storage[ id ].data.length - 1; i >= 0; i-- ) { + if ( storage[ id ].data[ i ].events.length == 0 ) { + storage[ id ].data.splice( i, 1 ); + } + } + } + + return updateStorage(); + } + + /** + * Download data. + */ + function downloadData() { + var a = document.createElement( 'a' ); + document.body.appendChild( a ); + try { + a.download = 'chalkboard.json'; + var blob = new Blob( [ getData() ], { + type: 'application/json' + } ); + a.href = window.URL.createObjectURL( blob ); + } catch ( error ) { + a.innerHTML += ' (' + error + ')'; + } + a.click(); + document.body.removeChild( a ); + } + + /** + * Returns data object for the slide with the given indices. + */ + function getSlideData( indices, id ) { + if ( id == undefined ) id = mode; + if ( !indices ) indices = slideIndices; + var data; + for ( var i = 0; i < storage[ id ].data.length; i++ ) { + if ( storage[ id ].data[ i ].slide.h === indices.h && storage[ id ].data[ i ].slide.v === indices.v && storage[ id ].data[ i ].slide.f === indices.f ) { + data = storage[ id ].data[ i ]; + return data; + } + } + var page = Number( Reveal.getCurrentSlide().getAttribute('data-pdf-page-number') ); +//console.log( indices, Reveal.getCurrentSlide() ); + storage[ id ].data.push( { + slide: indices, + page, + events: [], + duration: 0 + } ); + data = storage[ id ].data[ storage[ id ].data.length - 1 ]; + return data; + } + + /** + * Returns maximum duration of slide playback for both modes + */ + function getSlideDuration( indices ) { + if ( !indices ) indices = slideIndices; + var duration = 0; + for ( var id = 0; id < 2; id++ ) { + for ( var i = 0; i < storage[ id ].data.length; i++ ) { + if ( storage[ id ].data[ i ].slide.h === indices.h && storage[ id ].data[ i ].slide.v === indices.v && storage[ id ].data[ i ].slide.f === indices.f ) { + duration = Math.max( duration, storage[ id ].data[ i ].duration ); + break; + } + } + } +//console.log( duration ); + return duration; + } + +/***************************************************************** + ** Print + ******************************************************************/ + var printMode = ( /print-pdf/gi ).test( window.location.search ); +//console.log("createPrintout" + printMode) + + function addPageNumbers() { + // determine page number for printouts with fragments serialised + var slides = Reveal.getSlides(); + var page = 0; + for ( var i=0; i < slides.length; i++) { + slides[i].setAttribute('data-pdf-page-number',page.toString()); + // add number of fragments without fragment indices + var count = slides[i].querySelectorAll('.fragment:not([data-fragment-index])').length; + var fragments = slides[i].querySelectorAll('.fragment[data-fragment-index]'); + for ( var j=0; j < fragments.length; j++) { + // increasenumber of fragments by highest fragment index (which start at 0) + if ( Number(fragments[j].getAttribute('data-fragment-index')) + 1 > count ) { + count = Number(fragments[j].getAttribute('data-fragment-index')) + 1; + } + } +//console.log(count,fragments.length,( slides[i].querySelector('h1,h2,h3,h4')||{}).innerHTML, page); + page += count + 1; + } + } + + function createPrintout() { + //console.warn(Reveal.getTotalSlides(),Reveal.getSlidesElement()); + if ( storage[ 1 ].data.length == 0 ) return; + console.log( 'Create printout(s) for ' + storage[ 1 ].data.length + " slides" ); + drawingCanvas[ 0 ].container.style.opacity = 0; // do not print notes canvas + drawingCanvas[ 0 ].container.style.visibility = 'hidden'; + + var patImg = new Image(); + patImg.onload = function () { + var slides = Reveal.getSlides(); +//console.log(slides); + for ( var i = storage[ 1 ].data.length - 1; i >= 0; i-- ) { + console.log( 'Create printout for slide ' + storage[ 1 ].data[ i ].slide.h + '.' + storage[ 1 ].data[ i ].slide.v ); + var slideData = getSlideData( storage[ 1 ].data[ i ].slide, 1 ); + var drawings = createDrawings( slideData, patImg ); +//console.log("Page:", storage[ 1 ].data[ i ].page ); +//console.log("Slide:", slides[storage[ 1 ].data[ i ].page] ); + addDrawings( slides[storage[ 1 ].data[ i ].page], drawings ); + + } +// Reveal.sync(); + }; + patImg.src = background[ 1 ]; + } + + + function cloneCanvas( oldCanvas ) { + //create a new canvas + var newCanvas = document.createElement( 'canvas' ); + var context = newCanvas.getContext( '2d' ); + //set dimensions + newCanvas.width = oldCanvas.width; + newCanvas.height = oldCanvas.height; + //apply the old canvas to the new one + context.drawImage( oldCanvas, 0, 0 ); + //return the new canvas + return newCanvas; + } + + function getCanvas( template, container, board ) { + var idx = container.findIndex( element => element.board === board ); + if ( idx === -1 ) { + var canvas = cloneCanvas( template ); + if ( !container.length ) { + idx = 0; + container.push( { + board, + canvas + } ); + } else if ( board < container[ 0 ].board ) { + idx = 0; + container.unshift( { + board, + canvas + } ); + } else if ( board > container[ container.length - 1 ].board ) { + idx = container.length; + container.push( { + board, + canvas + } ); + } + } + + return container[ idx ].canvas; + } + + function createDrawings( slideData, patImg ) { + var width = Reveal.getConfig().width; + var height = Reveal.getConfig().height; + var scale = 1; + var xOffset = 0; + var yOffset = 0; + if ( width != storage[ 1 ].width || height != storage[ 1 ].height ) { + scale = Math.min( width / storage[ 1 ].width, height / storage[ 1 ].height ); + xOffset = ( width - storage[ 1 ].width * scale ) / 2; + yOffset = ( height - storage[ 1 ].height * scale ) / 2; + } + mode = 1; + board = 0; +// console.log( 'Create printout(s) for slide ', slideData ); + + var drawings = []; + var template = document.createElement( 'canvas' ); + template.width = width; + template.height = height; + + var imgCtx = template.getContext( '2d' ); + imgCtx.fillStyle = imgCtx.createPattern( patImg, 'repeat' ); + imgCtx.rect( 0, 0, width, height ); + imgCtx.fill(); + + for ( var j = 0; j < slideData.events.length; j++ ) { + switch ( slideData.events[ j ].type ) { + case 'draw': + draw[ 1 ]( getCanvas( template, drawings, board ).getContext( '2d' ), + xOffset + slideData.events[ j ].x1 * scale, + yOffset + slideData.events[ j ].y1 * scale, + xOffset + slideData.events[ j ].x2 * scale, + yOffset + slideData.events[ j ].y2 * scale, + yOffset + slideData.events[ j ].color + ); + break; + case 'erase': + eraseWithSponge( getCanvas( template, drawings, board ).getContext( '2d' ), + xOffset + slideData.events[ j ].x * scale, + yOffset + slideData.events[ j ].y * scale + ); + break; + case 'selectboard': + selectBoard( slideData.events[ j ].board ); + break; + case 'clear': + getCanvas( template, drawings, board ).getContext( '2d' ).clearRect( 0, 0, width, height ); + getCanvas( template, drawings, board ).getContext( '2d' ).fill(); + break; + default: + break; + } + } + + drawings = drawings.sort( ( a, b ) => a.board > b.board && 1 || -1 ); + + mode = 0; + + return drawings; + } + + function addDrawings( slide, drawings ) { + var parent = slide.parentElement.parentElement; + var nextSlide = slide.parentElement.nextElementSibling; + + for ( var i = 0; i < drawings.length; i++ ) { + var newPDFPage = document.createElement( 'div' ); + newPDFPage.classList.add( 'pdf-page' ); + newPDFPage.style.height = Reveal.getConfig().height; + newPDFPage.append( drawings[ i ].canvas ); +//console.log("Add drawing", newPDFPage); + if ( nextSlide != null ) { + parent.insertBefore( newPDFPage, nextSlide ); + } else { + parent.append( newPDFPage ); + } + } + } + + /***************************************************************** + ** Drawings + ******************************************************************/ + + function drawWithBoardmarker( context, fromX, fromY, toX, toY, colorIdx ) { + if ( colorIdx == undefined ) colorIdx = color[ mode ]; + context.lineWidth = boardmarkerWidth; + context.lineCap = 'round'; + context.strokeStyle = boardmarkers[ colorIdx ].color; + context.beginPath(); + context.moveTo( fromX, fromY ); + context.lineTo( toX, toY ); + context.stroke(); + } + + function drawWithChalk( context, fromX, fromY, toX, toY, colorIdx ) { + if ( colorIdx == undefined ) colorIdx = color[ mode ]; + var brushDiameter = chalkWidth; + context.lineWidth = brushDiameter; + context.lineCap = 'round'; + context.fillStyle = chalks[ colorIdx ].color; // 'rgba(255,255,255,0.5)'; + context.strokeStyle = chalks[ colorIdx ].color; + /*var opacity = Math.min(0.8, Math.max(0,color[1].replace(/^.*,(.+)\)/,'$1') - 0.1)) + Math.random()*0.2;*/ + var opacity = 1.0; + context.strokeStyle = context.strokeStyle.replace( /[\d\.]+\)$/g, opacity + ')' ); + context.beginPath(); + context.moveTo( fromX, fromY ); + context.lineTo( toX, toY ); + context.stroke(); + // Chalk Effect + var length = Math.round( Math.sqrt( Math.pow( toX - fromX, 2 ) + Math.pow( toY - fromY, 2 ) ) / ( 5 / brushDiameter ) ); + var xUnit = ( toX - fromX ) / length; + var yUnit = ( toY - fromY ) / length; + for ( var i = 0; i < length; i++ ) { + if ( chalkEffect > ( Math.random() * 0.9 ) ) { + var xCurrent = fromX + ( i * xUnit ); + var yCurrent = fromY + ( i * yUnit ); + var xRandom = xCurrent + ( Math.random() - 0.5 ) * brushDiameter * 1.2; + var yRandom = yCurrent + ( Math.random() - 0.5 ) * brushDiameter * 1.2; + context.clearRect( xRandom, yRandom, Math.random() * 2 + 2, Math.random() + 1 ); + } + } + } + + function eraseWithSponge( context, x, y ) { + context.save(); + context.beginPath(); + context.arc( x, y, eraser.radius, 0, 2 * Math.PI, false ); + context.clip(); + context.clearRect( x - eraser.radius - 1, y - eraser.radius - 1, eraser.radius * 2 + 2, eraser.radius * 2 + 2 ); + context.restore(); + if ( mode == 1 && grid ) { + redrawGrid( x, y, eraser.radius ); + } + } + + + /** + * Show an overlay for the chalkboard. + */ + function showChalkboard() { +//console.log("showChalkboard"); + clearTimeout( touchTimeout ); + touchTimeout = null; + drawingCanvas[ 0 ].sponge.style.visibility = 'hidden'; // make sure that the sponge from touch events is hidden + drawingCanvas[ 1 ].sponge.style.visibility = 'hidden'; // make sure that the sponge from touch events is hidden + drawingCanvas[ 1 ].container.style.opacity = 1; + drawingCanvas[ 1 ].container.style.visibility = 'visible'; + mode = 1; + } + + + /** + * Closes open chalkboard. + */ + function closeChalkboard() { + clearTimeout( touchTimeout ); + touchTimeout = null; + drawingCanvas[ 0 ].sponge.style.visibility = 'hidden'; // make sure that the sponge from touch events is hidden + drawingCanvas[ 1 ].sponge.style.visibility = 'hidden'; // make sure that the sponge from touch events is hidden + drawingCanvas[ 1 ].container.style.opacity = 0; + drawingCanvas[ 1 ].container.style.visibility = 'hidden'; + lastX = null; + lastY = null; + mode = 0; + } + + /** + * Clear current canvas. + */ + function clearCanvas( id ) { + if ( id == 0 ) clearTimeout( slidechangeTimeout ); + drawingCanvas[ id ].context.clearRect( 0, 0, drawingCanvas[ id ].width, drawingCanvas[ id ].height ); + if ( id == 1 && grid ) drawGrid(); + } + + /** + * Draw grid on background + */ + function drawGrid() { + var context = drawingCanvas[ 1 ].context; + + drawingCanvas[ 1 ].scale = Math.min( drawingCanvas[ 1 ].width / storage[ 1 ].width, drawingCanvas[ 1 ].height / storage[ 1 ].height ); + drawingCanvas[ 1 ].xOffset = ( drawingCanvas[ 1 ].width - storage[ 1 ].width * drawingCanvas[ 1 ].scale ) / 2; + drawingCanvas[ 1 ].yOffset = ( drawingCanvas[ 1 ].height - storage[ 1 ].height * drawingCanvas[ 1 ].scale ) / 2; + + var scale = drawingCanvas[ 1 ].scale; + var xOffset = drawingCanvas[ 1 ].xOffset; + var yOffset = drawingCanvas[ 1 ].yOffset; + + var distance = grid.distance * scale; + + var fromX = drawingCanvas[ 1 ].width / 2 - distance / 2 - Math.floor( ( drawingCanvas[ 1 ].width - distance ) / 2 / distance ) * distance; + for ( var x = fromX; x < drawingCanvas[ 1 ].width; x += distance ) { + context.beginPath(); + context.lineWidth = grid.width * scale; + context.lineCap = 'round'; + context.fillStyle = grid.color; + context.strokeStyle = grid.color; + context.moveTo( x, 0 ); + context.lineTo( x, drawingCanvas[ 1 ].height ); + context.stroke(); + } + var fromY = drawingCanvas[ 1 ].height / 2 - distance / 2 - Math.floor( ( drawingCanvas[ 1 ].height - distance ) / 2 / distance ) * distance; + + for ( var y = fromY; y < drawingCanvas[ 1 ].height; y += distance ) { + context.beginPath(); + context.lineWidth = grid.width * scale; + context.lineCap = 'round'; + context.fillStyle = grid.color; + context.strokeStyle = grid.color; + context.moveTo( 0, y ); + context.lineTo( drawingCanvas[ 1 ].width, y ); + context.stroke(); + } + } + + function redrawGrid( centerX, centerY, diameter ) { + var context = drawingCanvas[ 1 ].context; + + drawingCanvas[ 1 ].scale = Math.min( drawingCanvas[ 1 ].width / storage[ 1 ].width, drawingCanvas[ 1 ].height / storage[ 1 ].height ); + drawingCanvas[ 1 ].xOffset = ( drawingCanvas[ 1 ].width - storage[ 1 ].width * drawingCanvas[ 1 ].scale ) / 2; + drawingCanvas[ 1 ].yOffset = ( drawingCanvas[ 1 ].height - storage[ 1 ].height * drawingCanvas[ 1 ].scale ) / 2; + + var scale = drawingCanvas[ 1 ].scale; + var xOffset = drawingCanvas[ 1 ].xOffset; + var yOffset = drawingCanvas[ 1 ].yOffset; + + var distance = grid.distance * scale; + + var fromX = drawingCanvas[ 1 ].width / 2 - distance / 2 - Math.floor( ( drawingCanvas[ 1 ].width - distance ) / 2 / distance ) * distance; + + for ( var x = fromX + distance * Math.ceil( ( centerX - diameter - fromX ) / distance ); x <= fromX + distance * Math.floor( ( centerX + diameter - fromX ) / distance ); x += distance ) { + context.beginPath(); + context.lineWidth = grid.width * scale; + context.lineCap = 'round'; + context.fillStyle = grid.color; + context.strokeStyle = grid.color; + context.moveTo( x, centerY - Math.sqrt( diameter * diameter - ( centerX - x ) * ( centerX - x ) ) ); + context.lineTo( x, centerY + Math.sqrt( diameter * diameter - ( centerX - x ) * ( centerX - x ) ) ); + context.stroke(); + } + var fromY = drawingCanvas[ 1 ].height / 2 - distance / 2 - Math.floor( ( drawingCanvas[ 1 ].height - distance ) / 2 / distance ) * distance; + for ( var y = fromY + distance * Math.ceil( ( centerY - diameter - fromY ) / distance ); y <= fromY + distance * Math.floor( ( centerY + diameter - fromY ) / distance ); y += distance ) { + context.beginPath(); + context.lineWidth = grid.width * scale; + context.lineCap = 'round'; + context.fillStyle = grid.color; + context.strokeStyle = grid.color; + context.moveTo( centerX - Math.sqrt( diameter * diameter - ( centerY - y ) * ( centerY - y ) ), y ); + context.lineTo( centerX + Math.sqrt( diameter * diameter - ( centerY - y ) * ( centerY - y ) ), y ); + context.stroke(); + } + } + + /** + * Set the color + */ + function setColor( index, record ) { + // protect against out of bounds (this could happen when + // replaying events recorded with different color settings). + if ( index >= pens[ mode ].length ) index = 0; + color[ mode ] = index; + drawingCanvas[ mode ].canvas.style.cursor = pens[ mode ][ color[ mode ] ].cursor; + } + + /** + * Set the board + */ + function selectBoard( boardIdx, record ) { +//console.log("Set board",boardIdx); + if ( board == boardIdx ) return; + + board = boardIdx; + redrawChalkboard( boardIdx ); + if ( record ) { + recordEvent( { type: 'selectboard' } ); + } + } + + function redrawChalkboard( boardIdx ) { + clearCanvas( 1 ); + var slideData = getSlideData( slideIndices, 1 ); + var index = 0; + var play = ( boardIdx == 0 ); + while ( index < slideData.events.length && slideData.events[ index ].time < Date.now() - slideStart ) { + if ( boardIdx == slideData.events[ index ].board ) { + playEvent( 1, slideData.events[ index ], Date.now() - slideStart ); + } + + index++; + } + } + + + /** + * Forward cycle color + */ + function cycleColorNext() { + color[ mode ] = ( color[ mode ] + 1 ) % pens[ mode ].length; + return color[ mode ]; + } + + /** + * Backward cycle color + */ + function cycleColorPrev() { + color[ mode ] = ( color[ mode ] + ( pens[ mode ].length - 1 ) ) % pens[ mode ].length; + return color[ mode ]; + } + +/***************************************************************** + ** Broadcast + ******************************************************************/ + + var eventQueue = []; + + document.addEventListener( 'received', function ( message ) { + if ( message.content && message.content.sender == 'chalkboard-plugin' ) { + // add message to queue + eventQueue.push( message ); + console.log( JSON.stringify( message ) ); + } + if ( eventQueue.length == 1 ) processQueue(); + } ); + + function processQueue() { + // take first message from queue + var message = eventQueue.shift(); + + // synchronize time with seminar host + slideStart = Date.now() - message.content.timestamp; + // set status + if ( mode < message.content.mode ) { + // open chalkboard + showChalkboard(); + } else if ( mode > message.content.mode ) { + // close chalkboard + closeChalkboard(); + } + if ( board != message.content.board ) { + board = message.content.board; + redrawChalkboard( board ); + }; + + switch ( message.content.type ) { + case 'showChalkboard': + showChalkboard(); + break; + case 'closeChalkboard': + closeChalkboard(); + break; + case 'erase': + erasePoint( message.content.x, message.content.y ); + break; + case 'draw': + drawSegment( message.content.fromX, message.content.fromY, message.content.toX, message.content.toY, message.content.color ); + break; + case 'clear': + clearSlide(); + break; + case 'selectboard': + selectBoard( message.content.board, true ); + break; + case 'resetSlide': + resetSlideDrawings(); + break; + case 'init': + storage = message.content.storage; + for ( var id = 0; id < 2; id++ ) { + drawingCanvas[ id ].scale = Math.min( drawingCanvas[ id ].width / storage[ id ].width, drawingCanvas[ id ].height / storage[ id ].height ); + drawingCanvas[ id ].xOffset = ( drawingCanvas[ id ].width - storage[ id ].width * drawingCanvas[ id ].scale ) / 2; + drawingCanvas[ id ].yOffset = ( drawingCanvas[ id ].height - storage[ id ].height * drawingCanvas[ id ].scale ) / 2; + } + clearCanvas( 0 ); + clearCanvas( 1 ); + if ( !playback ) { + slidechangeTimeout = setTimeout( startPlayback, transition, getSlideDuration(), 0 ); + } + if ( mode == 1 && message.content.mode == 0 ) { + setTimeout( closeChalkboard, transition + 50 ); + } + if ( mode == 0 && message.content.mode == 1 ) { + setTimeout( showChalkboard, transition + 50 ); + } + mode = message.content.mode; + board = message.content.board; + break; + default: + break; + } + + // continue with next message if queued + if ( eventQueue.length > 0 ) { + processQueue(); + } else { + storageChanged(); + } + } + + document.addEventListener( 'welcome', function ( user ) { + // broadcast storage + var message = new CustomEvent( messageType ); + message.content = { + sender: 'chalkboard-plugin', + recipient: user.id, + type: 'init', + timestamp: Date.now() - slideStart, + storage: storage, + mode, + board + }; + document.dispatchEvent( message ); + } ); + + /***************************************************************** + ** Playback + ******************************************************************/ + + document.addEventListener( 'seekplayback', function ( event ) { +//console.log('event seekplayback ' + event.timestamp); + stopPlayback(); + if ( !playback || event.timestamp == 0 ) { + // in other cases startplayback fires after seeked + startPlayback( event.timestamp ); + } + //console.log('seeked'); + } ); + + + document.addEventListener( 'startplayback', function ( event ) { +//console.log('event startplayback ' + event.timestamp); + stopPlayback(); + playback = true; + startPlayback( event.timestamp ); + } ); + + document.addEventListener( 'stopplayback', function ( event ) { +//console.log('event stopplayback ' + (Date.now() - slideStart) ); + playback = false; + stopPlayback(); + } ); + + document.addEventListener( 'startrecording', function ( event ) { +//console.log('event startrecording ' + event.timestamp); + startRecording(); + } ); + + + function startRecording() { + resetSlide( true ); + slideStart = Date.now(); + } + + function startPlayback( timestamp, finalMode ) { +//console.log("playback " + timestamp ); + slideStart = Date.now() - timestamp; + closeChalkboard(); + mode = 0; + board = 0; + for ( var id = 0; id < 2; id++ ) { + clearCanvas( id ); + var slideData = getSlideData( slideIndices, id ); +//console.log( timestamp +" / " + JSON.stringify(slideData)); + var index = 0; + while ( index < slideData.events.length && slideData.events[ index ].time < ( Date.now() - slideStart ) ) { + playEvent( id, slideData.events[ index ], timestamp ); + index++; + } + + while ( playback && index < slideData.events.length ) { + timeouts[ id ].push( setTimeout( playEvent, slideData.events[ index ].time - ( Date.now() - slideStart ), id, slideData.events[ index ], timestamp ) ); + index++; + } + } +//console.log("Mode: " + finalMode + "/" + mode ); + if ( finalMode != undefined ) { + mode = finalMode; + } + if ( mode == 1 ) showChalkboard(); +//console.log("playback (ok)"); + + }; + + function stopPlayback() { +//console.log("stopPlayback"); +//console.log("Timeouts: " + timeouts[0].length + "/"+ timeouts[1].length); + for ( var id = 0; id < 2; id++ ) { + for ( var i = 0; i < timeouts[ id ].length; i++ ) { + clearTimeout( timeouts[ id ][ i ] ); + } + timeouts[ id ] = []; + } + }; + + function playEvent( id, event, timestamp ) { +//console.log( timestamp +" / " + JSON.stringify(event)); +//console.log( id + ": " + timestamp +" / " + event.time +" / " + event.type +" / " + mode ); + switch ( event.type ) { + case 'open': + if ( timestamp <= event.time ) { + showChalkboard(); + } else { + mode = 1; + } + + break; + case 'close': + if ( timestamp < event.time ) { + closeChalkboard(); + } else { + mode = 0; + } + break; + case 'clear': + clearCanvas( id ); + break; + case 'selectboard': + selectBoard( event.board ); + break; + case 'draw': + drawLine( id, event, timestamp ); + break; + case 'erase': + eraseCircle( id, event, timestamp ); + break; + } + }; + + function drawLine( id, event, timestamp ) { + var ctx = drawingCanvas[ id ].context; + var scale = drawingCanvas[ id ].scale; + var xOffset = drawingCanvas[ id ].xOffset; + var yOffset = drawingCanvas[ id ].yOffset; + draw[ id ]( ctx, xOffset + event.x1 * scale, yOffset + event.y1 * scale, xOffset + event.x2 * scale, yOffset + event.y2 * scale, event.color ); + }; + + function eraseCircle( id, event, timestamp ) { + var ctx = drawingCanvas[ id ].context; + var scale = drawingCanvas[ id ].scale; + var xOffset = drawingCanvas[ id ].xOffset; + var yOffset = drawingCanvas[ id ].yOffset; + + eraseWithSponge( ctx, xOffset + event.x * scale, yOffset + event.y * scale ); + }; + + function startErasing( x, y ) { + drawing = false; + erasing = true; + drawingCanvas[ mode ].sponge.style.visibility = 'visible'; + erasePoint( x, y ); + } + + function erasePoint( x, y ) { + var ctx = drawingCanvas[ mode ].context; + var scale = drawingCanvas[ mode ].scale; + var xOffset = drawingCanvas[ mode ].xOffset; + var yOffset = drawingCanvas[ mode ].yOffset; + + // move sponge image + drawingCanvas[ mode ].sponge.style.left = ( x * scale + xOffset - eraser.radius ) + 'px'; + drawingCanvas[ mode ].sponge.style.top = ( y * scale + yOffset - 2 * eraser.radius ) + 'px'; + + recordEvent( { + type: 'erase', + x, + y + } ); + + if ( + x * scale + xOffset > 0 && + y * scale + yOffset > 0 && + x * scale + xOffset < drawingCanvas[ mode ].width && + y * scale + yOffset < drawingCanvas[ mode ].height + ) { + eraseWithSponge( ctx, x * scale + xOffset, y * scale + yOffset ); + } + } + + function stopErasing() { + erasing = false; + // hide sponge + drawingCanvas[ mode ].sponge.style.visibility = 'hidden'; + } + + function startDrawing( x, y ) { + drawing = true; + + var ctx = drawingCanvas[ mode ].context; + var scale = drawingCanvas[ mode ].scale; + var xOffset = drawingCanvas[ mode ].xOffset; + var yOffset = drawingCanvas[ mode ].yOffset; + lastX = x * scale + xOffset; + lastY = y * scale + yOffset; + } + + function drawSegment( fromX, fromY, toX, toY, colorIdx ) { + var ctx = drawingCanvas[ mode ].context; + var scale = drawingCanvas[ mode ].scale; + var xOffset = drawingCanvas[ mode ].xOffset; + var yOffset = drawingCanvas[ mode ].yOffset; + + recordEvent( { + type: 'draw', + color: colorIdx, + x1: fromX, + y1: fromY, + x2: toX, + y2: toY + } ); + + if ( + fromX * scale + xOffset > 0 && + fromY * scale + yOffset > 0 && + fromX * scale + xOffset < drawingCanvas[ mode ].width && + fromY * scale + yOffset < drawingCanvas[ mode ].height && + toX * scale + xOffset > 0 && + toY * scale + yOffset > 0 && + toX * scale + xOffset < drawingCanvas[ mode ].width && + toY * scale + yOffset < drawingCanvas[ mode ].height + ) { + draw[ mode ]( ctx, fromX * scale + xOffset, fromY * scale + yOffset, toX * scale + xOffset, toY * scale + yOffset, colorIdx ); + } + } + + function stopDrawing() { + drawing = false; + } + + +/***************************************************************** + ** User interface + ******************************************************************/ + + function setupCanvasEvents( canvas ) { +// TODO: check all touchevents + canvas.addEventListener( 'touchstart', function ( evt ) { + evt.preventDefault(); +//console.log("Touch start"); + if ( !readOnly && evt.target.getAttribute( 'data-chalkboard' ) == mode ) { + var scale = drawingCanvas[ mode ].scale; + var xOffset = drawingCanvas[ mode ].xOffset; + var yOffset = drawingCanvas[ mode ].yOffset; + + var touch = evt.touches[ 0 ]; + mouseX = touch.pageX; + mouseY = touch.pageY; + startDrawing( ( mouseX - xOffset ) / scale, ( mouseY - yOffset ) / scale ); + touchTimeout = setTimeout( startErasing, 500, ( mouseX - xOffset ) / scale, ( mouseY - yOffset ) / scale ); + } + }, passiveSupported ? { + passive: false + } : false ); + + canvas.addEventListener( 'touchmove', function ( evt ) { + evt.preventDefault(); +//console.log("Touch move"); + clearTimeout( touchTimeout ); + touchTimeout = null; + if ( drawing || erasing ) { + var scale = drawingCanvas[ mode ].scale; + var xOffset = drawingCanvas[ mode ].xOffset; + var yOffset = drawingCanvas[ mode ].yOffset; + + var touch = evt.touches[ 0 ]; + mouseX = touch.pageX; + mouseY = touch.pageY; + if ( mouseY < drawingCanvas[ mode ].height && mouseX < drawingCanvas[ mode ].width ) { + // move sponge + if ( event.type == 'erase' ) { + drawingCanvas[ mode ].sponge.style.left = ( mouseX - eraser.radius ) + 'px'; + drawingCanvas[ mode ].sponge.style.top = ( mouseY - eraser.radius ) + 'px'; + } + } + + if ( drawing ) { + drawSegment( ( lastX - xOffset ) / scale, ( lastY - yOffset ) / scale, ( mouseX - xOffset ) / scale, ( mouseY - yOffset ) / scale, color[ mode ] ); + // broadcast + var message = new CustomEvent( messageType ); + message.content = { + sender: 'chalkboard-plugin', + type: 'draw', + timestamp: Date.now() - slideStart, + mode, + board, + fromX: ( lastX - xOffset ) / scale, + fromY: ( lastY - yOffset ) / scale, + toX: ( mouseX - xOffset ) / scale, + toY: ( mouseY - yOffset ) / scale, + color: color[ mode ] + }; + document.dispatchEvent( message ); + + lastX = mouseX; + lastY = mouseY; + } else { + erasePoint( ( mouseX - xOffset ) / scale, ( mouseY - yOffset ) / scale ); + // broadcast + var message = new CustomEvent( messageType ); + message.content = { + sender: 'chalkboard-plugin', + type: 'erase', + timestamp: Date.now() - slideStart, + mode, + board, + x: ( mouseX - xOffset ) / scale, + y: ( mouseY - yOffset ) / scale + }; + document.dispatchEvent( message ); + } + + } + }, false ); + + + canvas.addEventListener( 'touchend', function ( evt ) { + evt.preventDefault(); + clearTimeout( touchTimeout ); + touchTimeout = null; + // hide sponge image + drawingCanvas[ mode ].sponge.style.visibility = 'hidden'; + stopDrawing(); + }, false ); + + canvas.addEventListener( 'mousedown', function ( evt ) { + evt.preventDefault(); + if ( !readOnly && evt.target.getAttribute( 'data-chalkboard' ) == mode ) { +//console.log( "mousedown: " + evt.button ); + var scale = drawingCanvas[ mode ].scale; + var xOffset = drawingCanvas[ mode ].xOffset; + var yOffset = drawingCanvas[ mode ].yOffset; + + mouseX = evt.pageX; + mouseY = evt.pageY; + + if ( evt.button == 2 || evt.button == 1 ) { + startErasing( ( mouseX - xOffset ) / scale, ( mouseY - yOffset ) / scale ); + // broadcast + var message = new CustomEvent( messageType ); + message.content = { + sender: 'chalkboard-plugin', + type: 'erase', + timestamp: Date.now() - slideStart, + mode, + board, + x: ( mouseX - xOffset ) / scale, + y: ( mouseY - yOffset ) / scale + }; + document.dispatchEvent( message ); + } else { + startDrawing( ( mouseX - xOffset ) / scale, ( mouseY - yOffset ) / scale ); + } + } + } ); + + canvas.addEventListener( 'mousemove', function ( evt ) { + evt.preventDefault(); +//console.log("Mouse move"); + if ( drawing || erasing ) { + var scale = drawingCanvas[ mode ].scale; + var xOffset = drawingCanvas[ mode ].xOffset; + var yOffset = drawingCanvas[ mode ].yOffset; + + mouseX = evt.pageX; + mouseY = evt.pageY; + + if ( drawing ) { + drawSegment( ( lastX - xOffset ) / scale, ( lastY - yOffset ) / scale, ( mouseX - xOffset ) / scale, ( mouseY - yOffset ) / scale, color[ mode ] ); + // broadcast + var message = new CustomEvent( messageType ); + message.content = { + sender: 'chalkboard-plugin', + type: 'draw', + timestamp: Date.now() - slideStart, + mode, + board, + fromX: ( lastX - xOffset ) / scale, + fromY: ( lastY - yOffset ) / scale, + toX: ( mouseX - xOffset ) / scale, + toY: ( mouseY - yOffset ) / scale, + color: color[ mode ] + }; + document.dispatchEvent( message ); + + lastX = mouseX; + lastY = mouseY; + } else { + erasePoint( ( mouseX - xOffset ) / scale, ( mouseY - yOffset ) / scale ); + // broadcast + var message = new CustomEvent( messageType ); + message.content = { + sender: 'chalkboard-plugin', + type: 'erase', + timestamp: Date.now() - slideStart, + mode, + board, + x: ( mouseX - xOffset ) / scale, + y: ( mouseY - yOffset ) / scale + }; + document.dispatchEvent( message ); + } + + } + } ); + + + canvas.addEventListener( 'mouseup', function ( evt ) { + evt.preventDefault(); + drawingCanvas[ mode ].canvas.style.cursor = pens[ mode ][ color[ mode ] ].cursor; + if ( drawing || erasing ) { + stopDrawing(); + stopErasing(); + } + } ); + } + + function resize() { +//console.log("resize"); + // Resize the canvas and draw everything again + var timestamp = Date.now() - slideStart; + if ( !playback ) { + timestamp = getSlideDuration(); + } + +//console.log( drawingCanvas[0].scale + "/" + drawingCanvas[0].xOffset + "/" +drawingCanvas[0].yOffset ); + for ( var id = 0; id < 2; id++ ) { + drawingCanvas[ id ].width = window.innerWidth; + drawingCanvas[ id ].height = window.innerHeight; + drawingCanvas[ id ].canvas.width = drawingCanvas[ id ].width; + drawingCanvas[ id ].canvas.height = drawingCanvas[ id ].height; + drawingCanvas[ id ].context.canvas.width = drawingCanvas[ id ].width; + drawingCanvas[ id ].context.canvas.height = drawingCanvas[ id ].height; + + drawingCanvas[ id ].scale = Math.min( drawingCanvas[ id ].width / storage[ id ].width, drawingCanvas[ id ].height / storage[ id ].height ); + drawingCanvas[ id ].xOffset = ( drawingCanvas[ id ].width - storage[ id ].width * drawingCanvas[ id ].scale ) / 2; + drawingCanvas[ id ].yOffset = ( drawingCanvas[ id ].height - storage[ id ].height * drawingCanvas[ id ].scale ) / 2; +//console.log( drawingCanvas[id].scale + "/" + drawingCanvas[id].xOffset + "/" +drawingCanvas[id].yOffset ); + } +//console.log( window.innerWidth + "/" + window.innerHeight); + startPlayback( timestamp, mode, true ); + } + + Reveal.addEventListener( 'pdf-ready', function ( evt ) { +// console.log( "Create printouts when ready" ); + whenLoaded( createPrintout ); + }); + + Reveal.addEventListener( 'ready', function ( evt ) { +//console.log('ready'); + if ( !printMode ) { + window.addEventListener( 'resize', resize ); + + slideStart = Date.now() - getSlideDuration(); + slideIndices = Reveal.getIndices(); + if ( !playback ) { + startPlayback( getSlideDuration(), 0 ); + } + if ( Reveal.isAutoSliding() ) { + var event = new CustomEvent( 'startplayback' ); + event.timestamp = 0; + document.dispatchEvent( event ); + } + updateStorage(); + whenReady( addPageNumbers ); + } + } ); + Reveal.addEventListener( 'slidechanged', function ( evt ) { +// clearTimeout( slidechangeTimeout ); +//console.log('slidechanged'); + if ( !printMode ) { + slideStart = Date.now() - getSlideDuration(); + slideIndices = Reveal.getIndices(); + closeChalkboard(); + board = 0; + clearCanvas( 0 ); + clearCanvas( 1 ); + if ( !playback ) { + slidechangeTimeout = setTimeout( startPlayback, transition, getSlideDuration(), 0 ); + } + if ( Reveal.isAutoSliding() ) { + var event = new CustomEvent( 'startplayback' ); + event.timestamp = 0; + document.dispatchEvent( event ); + } + } + } ); + Reveal.addEventListener( 'fragmentshown', function ( evt ) { +// clearTimeout( slidechangeTimeout ); +//console.log('fragmentshown'); + if ( !printMode ) { + slideStart = Date.now() - getSlideDuration(); + slideIndices = Reveal.getIndices(); + closeChalkboard(); + board = 0; + clearCanvas( 0 ); + clearCanvas( 1 ); + if ( Reveal.isAutoSliding() ) { + var event = new CustomEvent( 'startplayback' ); + event.timestamp = 0; + document.dispatchEvent( event ); + } else if ( !playback ) { + startPlayback( getSlideDuration(), 0 ); +// closeChalkboard(); + } + } + } ); + Reveal.addEventListener( 'fragmenthidden', function ( evt ) { +// clearTimeout( slidechangeTimeout ); +//console.log('fragmenthidden'); + if ( !printMode ) { + slideStart = Date.now() - getSlideDuration(); + slideIndices = Reveal.getIndices(); + closeChalkboard(); + board = 0; + clearCanvas( 0 ); + clearCanvas( 1 ); + if ( Reveal.isAutoSliding() ) { + document.dispatchEvent( new CustomEvent( 'stopplayback' ) ); + } else if ( !playback ) { + startPlayback( getSlideDuration() ); + closeChalkboard(); + } + } + } ); + + Reveal.addEventListener( 'autoslideresumed', function ( evt ) { +//console.log('autoslideresumed'); + var event = new CustomEvent( 'startplayback' ); + event.timestamp = 0; + document.dispatchEvent( event ); + } ); + Reveal.addEventListener( 'autoslidepaused', function ( evt ) { +//console.log('autoslidepaused'); + document.dispatchEvent( new CustomEvent( 'stopplayback' ) ); + + // advance to end of slide +// closeChalkboard(); + startPlayback( getSlideDuration(), 0 ); + } ); + + function toggleNotesCanvas() { + if ( !readOnly ) { + if ( mode == 1 ) { + toggleChalkboard(); + notescanvas.style.background = background[ 0 ]; //'rgba(255,0,0,0.5)'; + notescanvas.style.pointerEvents = 'auto'; + } + else { + if ( notescanvas.style.pointerEvents != 'none' ) { + // hide notes canvas + if ( colorButtons ) { + notescanvas.querySelector( '.palette' ).style.visibility = 'hidden'; + } + notescanvas.style.background = 'rgba(0,0,0,0)'; + notescanvas.style.pointerEvents = 'none'; + } + else { + // show notes canvas + if ( colorButtons ) { + notescanvas.querySelector( '.palette' ).style.visibility = 'visible'; + } + notescanvas.style.background = background[ 0 ]; //'rgba(255,0,0,0.5)'; + notescanvas.style.pointerEvents = 'auto'; + + var idx = 0; + if ( color[ mode ] ) { + idx = color[ mode ]; + } + + setColor( idx, true ); + } + } + } + }; + + function toggleChalkboard() { +//console.log("toggleChalkboard " + mode); + if ( mode == 1 ) { + if ( !readOnly ) { + recordEvent( { type: 'close' } ); + } + closeChalkboard(); + + // broadcast + var message = new CustomEvent( messageType ); + message.content = { + sender: 'chalkboard-plugin', + type: 'closeChalkboard', + timestamp: Date.now() - slideStart, + mode: 0, + board + }; + document.dispatchEvent( message ); + + + } else { + showChalkboard(); + if ( !readOnly ) { + recordEvent( { type: 'open' } ); + // broadcast + var message = new CustomEvent( messageType ); + message.content = { + sender: 'chalkboard-plugin', + type: 'showChalkboard', + timestamp: Date.now() - slideStart, + mode: 1, + board + }; + document.dispatchEvent( message ); + + var idx = 0; + + if ( rememberColor[ mode ] ) { + idx = color[ mode ]; + } + + setColor( idx, true ); + } + } + }; + + function clearSlide() { + recordEvent( { type: 'clear' } ); + clearCanvas( mode ); + } + + function clear() { + if ( !readOnly ) { + clearSlide(); + // broadcast + var message = new CustomEvent( messageType ); + message.content = { + sender: 'chalkboard-plugin', + type: 'clear', + timestamp: Date.now() - slideStart, + mode, + board + }; + document.dispatchEvent( message ); + } + }; + + function colorIndex( idx ) { + if ( !readOnly ) { + setColor( idx, true ); + } + } + + function colorNext() { + if ( !readOnly ) { + let idx = cycleColorNext(); + setColor( idx, true ); + } + } + + function colorPrev() { + if ( !readOnly ) { + let idx = cycleColorPrev(); + setColor( idx, true ); + } + } + + function resetSlideDrawings() { + slideStart = Date.now(); + closeChalkboard(); + + clearCanvas( 0 ); + clearCanvas( 1 ); + + mode = 1; + var slideData = getSlideData(); + slideData.duration = 0; + slideData.events = []; + mode = 0; + var slideData = getSlideData(); + slideData.duration = 0; + slideData.events = []; + + updateStorage(); + } + + function resetSlide( force ) { + var ok = force || confirm( "Please confirm to delete chalkboard drawings on this slide!" ); + if ( ok ) { +//console.log("resetSlide "); + stopPlayback(); + resetSlideDrawings(); + // broadcast + var message = new CustomEvent( messageType ); + message.content = { + sender: 'chalkboard-plugin', + type: 'resetSlide', + timestamp: Date.now() - slideStart, + mode, + board + }; + document.dispatchEvent( message ); + } + }; + + function resetStorage( force ) { + var ok = force || confirm( "Please confirm to delete all chalkboard drawings!" ); + if ( ok ) { + stopPlayback(); + slideStart = Date.now(); + clearCanvas( 0 ); + clearCanvas( 1 ); + if ( mode == 1 ) { + closeChalkboard(); + } + + storage = [ { + width: Reveal.getConfig().width, + height: Reveal.getConfig().height, + data: [] + }, + { + width: Reveal.getConfig().width, + height: Reveal.getConfig().height, + data: [] + } + ]; + + if ( config.storage ) { + sessionStorage.setItem( config.storage, null ) + } + // broadcast + var message = new CustomEvent( messageType ); + message.content = { + sender: 'chalkboard-plugin', + type: 'init', + timestamp: Date.now() - slideStart, + storage, + mode, + board + }; + document.dispatchEvent( message ); + } + }; + + this.toggleNotesCanvas = toggleNotesCanvas; + this.toggleChalkboard = toggleChalkboard; + this.colorIndex = colorIndex; + this.colorNext = colorNext; + this.colorPrev = colorPrev; + this.clear = clear; + this.reset = resetSlide; + this.resetAll = resetStorage; + this.download = downloadData; + this.updateStorage = updateStorage; + this.getData = getData; + this.configure = configure; + + + for ( var key in keyBindings ) { + if ( keyBindings[ key ] ) { + Reveal.addKeyBinding( keyBindings[ key ], RevealChalkboard[ key ] ); + } + }; + + return this; +}; diff --git a/docs/1_Fundamentals/plugin/chalkboard/style.css b/docs/1_Fundamentals/plugin/chalkboard/style.css new file mode 100644 index 0000000..08765e7 --- /dev/null +++ b/docs/1_Fundamentals/plugin/chalkboard/style.css @@ -0,0 +1,44 @@ +div.palette, div.boardhandle { + position: absolute; +/* + height: 260px; + margin: -130px 0 0 0px; +*/ + top: 50%; + transform: translateY(-50%); + font-size: 24px; + border-radius: 10px; + border-top: 4px solid #222; + border-right: 4px solid #222; + border-bottom: 4px solid #222; + background: black; + transition: transform 0.3s; +} + +div.palette { + left: -10px; + padding-left:10px; +} + +div.boardhandle { + right: -10px; + padding-right:10px; +} + +div.palette > ul, +div.boardhandle > ul { + list-style-type: none; + margin: 0; + padding: 0; +} + +div.palette > ul > li, +div.boardhandle > ul > li { + margin: 10px; +} + +@media print { + div.palette, div.boardhandle, .chalkboard-button { + display: none!important; + } +} diff --git a/docs/1_Fundamentals/plugin/chart/README.md b/docs/1_Fundamentals/plugin/chart/README.md new file mode 100644 index 0000000..df13e26 --- /dev/null +++ b/docs/1_Fundamentals/plugin/chart/README.md @@ -0,0 +1,129 @@ +# Chart + +A plugin for [Reveal.js](https://github.com/hakimel/reveal.js) allowing to easily add charts using [Chart.js](http://www.chartjs.org/). + +[Check out the live demo](https://rajgoel.github.io/reveal.js-demos/chart-demo.html) + +## Installation + +Copy the file `plugin.js` into the plugin folder of your reveal.js presentation, i.e. `plugin/chart`. + +Add the plugin and Chart.js to the dependencies in your presentation, as below. + +```html + + + + +``` + +## Configuration + +The plugin has several parameters that you can set for your presentation by providing an `chart` option in the reveal.js initialization options. Note that all configuration parameters are optional and the defaults of Chart.js will be used for parameters that are not specified. + + +```javascript +Reveal.initialize({ + // ... + chart: { + defaults: { + color: 'lightgray', // color of labels + scale: { + beginAtZero: true, + ticks: { stepSize: 1 }, + grid: { color: "lightgray" } , // color of grid lines + }, + }, + line: { borderColor: [ "rgba(20,220,220,.8)" , "rgba(220,120,120,.8)", "rgba(20,120,220,.8)" ], "borderDash": [ [5,10], [0,0] ] }, + bar: { backgroundColor: [ "rgba(20,220,220,.8)" , "rgba(220,120,120,.8)", "rgba(20,120,220,.8)" ]}, + pie: { backgroundColor: [ ["rgba(0,0,0,.8)" , "rgba(220,20,20,.8)", "rgba(20,220,20,.8)", "rgba(220,220,20,.8)", "rgba(20,20,220,.8)"] ]}, + }, + // ... +}); +``` +The `defaults` parameter will overwrite `Chart.defaults`. Furthermore, for any chart type, e.g. line, bar, etc., the parameters for the individual datasets can be specified. Where Chart.js allows to specify a single parameter for a particular dataset, the plugin allows to specify an array of values for this parameter, which will automatically be assigned to the different datasets. Note that if there are more datasets than elements in the array, the plugin will start again with the first value in the array. + + + +## Usage + +A chart can be included in a slide by adding a `canvas` element with the `data-chart` attribute set to the desired chart type. + +The chart can be configured within the canvas body by a JSON string embedded into an HTML comment. + +```html + + + +``` +It is possible to provide the chart data by comma separated values and use the JSON string within the HTML comment to configure the chart layout. + +```html + +My first dataset, 65, 59, 80, 81, 56, 55, 40 + +My second dataset, 28, 48, 40, 19, 86, 27, 90 + + +``` + +The layout configuration provided in `chart` parameter (see Configuration) will be used by default and only those parameters that are specified in a JSON string are used to overwrite the default values. If no JSON string is provided to configure the chart layout the default configuration is used. Note, that if no labels for the data points are provided by a JSON string, the plugin expects that the first row provides table headers. + +```html + +Month, January, February, March, April, May, June, July +My first dataset, 65, 59, 80, 81, 56, 55, 40 +My second dataset, 28, 48, 40, 19, 86, 27, 90 + +``` + +The chart data can also be provided in an external CSV file. To include external data, the filename must be specified using the `data-chart-src` attribute of the `canvas` element. The CSV file is expected to only contain data values, whereas options for drawing the chart can be given as described above. + +```html + + + +``` + + +## License + +MIT licensed + +Copyright (C) 2021 Asvin Goel diff --git a/docs/1_Fundamentals/plugin/chart/chart.min.js b/docs/1_Fundamentals/plugin/chart/chart.min.js new file mode 100644 index 0000000..2b3e998 --- /dev/null +++ b/docs/1_Fundamentals/plugin/chart/chart.min.js @@ -0,0 +1,13 @@ +/*! + * Chart.js v3.7.1 + * https://www.chartjs.org + * (c) 2022 Chart.js Contributors + * Released under the MIT License + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";const t="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function e(e,i,s){const n=s||(t=>Array.prototype.slice.call(t));let o=!1,a=[];return function(...s){a=n(s),o||(o=!0,t.call(window,(()=>{o=!1,e.apply(i,a)})))}}function i(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const s=t=>"start"===t?"left":"end"===t?"right":"center",n=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,o=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;var a=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=t.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}; +/*! + * @kurkle/color v0.1.9 + * https://github.com/kurkle/color#readme + * (c) 2020 Jukka Kurkela + * Released under the MIT License + */const r={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},l="0123456789ABCDEF",h=t=>l[15&t],c=t=>l[(240&t)>>4]+l[15&t],d=t=>(240&t)>>4==(15&t);function u(t){var e=function(t){return d(t.r)&&d(t.g)&&d(t.b)&&d(t.a)}(t)?h:c;return t?"#"+e(t.r)+e(t.g)+e(t.b)+(t.a<255?e(t.a):""):t}function f(t){return t+.5|0}const g=(t,e,i)=>Math.max(Math.min(t,i),e);function p(t){return g(f(2.55*t),0,255)}function m(t){return g(f(255*t),0,255)}function x(t){return g(f(t/2.55)/100,0,1)}function b(t){return g(f(100*t),0,100)}const _=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const y=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function v(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function w(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function M(t,e,i){const s=v(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function k(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=n===e?(i-s)/h+(i>16&255,o>>8&255,255&o]}return t}(),T.transparent=[0,0,0,0]);const e=T[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}function R(t,e,i){if(t){let s=k(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=P(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function E(t,e){return t?Object.assign(e||{},t):t}function I(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=m(t[3]))):(e=E(t,{r:0,g:0,b:0,a:1})).a=m(e.a),e}function z(t){return"r"===t.charAt(0)?function(t){const e=_.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=255&(e[8]?p(t):255*t)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?p(i):i),s=255&(e[4]?p(s):s),n=255&(e[6]?p(n):n),{r:i,g:s,b:n,a:o}}}(t):C(t)}class F{constructor(t){if(t instanceof F)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=I(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*r[s[1]],g:255&17*r[s[2]],b:255&17*r[s[3]],a:5===o?17*r[s[4]]:255}:7!==o&&9!==o||(n={r:r[s[1]]<<4|r[s[2]],g:r[s[3]]<<4|r[s[4]],b:r[s[5]]<<4|r[s[6]],a:9===o?r[s[7]]<<4|r[s[8]]:255})),i=n||L(t)||z(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=E(this._rgb);return t&&(t.a=x(t.a)),t}set rgb(t){this._rgb=I(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${x(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):this._rgb;var t}hexString(){return this._valid?u(this._rgb):this._rgb}hslString(){return this._valid?function(t){if(!t)return;const e=k(t),i=e[0],s=b(e[1]),n=b(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${x(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):this._rgb}mix(t,e){const i=this;if(t){const s=i.rgb,n=t.rgb;let o;const a=e===o?.5:e,r=2*a-1,l=s.a-n.a,h=((r*l==-1?r:(r+l)/(1+r*l))+1)/2;o=1-h,s.r=255&h*s.r+o*n.r+.5,s.g=255&h*s.g+o*n.g+.5,s.b=255&h*s.b+o*n.b+.5,s.a=a*s.a+(1-a)*n.a,i.rgb=s}return i}clone(){return new F(this.rgb)}alpha(t){return this._rgb.a=m(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=f(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return R(this._rgb,2,t),this}darken(t){return R(this._rgb,2,-t),this}saturate(t){return R(this._rgb,1,t),this}desaturate(t){return R(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=k(t);i[0]=D(i[0]+e),i=P(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function B(t){return new F(t)}const V=t=>t instanceof CanvasGradient||t instanceof CanvasPattern;function W(t){return V(t)?t:B(t)}function N(t){return V(t)?t:B(t).saturate(.5).darken(.1).hexString()}function H(){}const j=function(){let t=0;return function(){return t++}}();function $(t){return null==t}function Y(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)}function U(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}const X=t=>("number"==typeof t||t instanceof Number)&&isFinite(+t);function q(t,e){return X(t)?t:e}function K(t,e){return void 0===t?e:t}const G=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:t/e,Z=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function J(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function Q(t,e,i,s){let n,o,a;if(Y(t))if(o=t.length,s)for(n=o-1;n>=0;n--)e.call(i,t[n],n);else for(n=0;ni;)t=t[e.substr(i,s-i)],i=s+1,s=rt(e,i);return t}function ht(t){return t.charAt(0).toUpperCase()+t.slice(1)}const ct=t=>void 0!==t,dt=t=>"function"==typeof t,ut=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function ft(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const gt=Object.create(null),pt=Object.create(null);function mt(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>N(e.backgroundColor),this.hoverBorderColor=(t,e)=>N(e.borderColor),this.hoverColor=(t,e)=>N(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return xt(this,t,e)}get(t){return mt(this,t)}describe(t,e){return xt(pt,t,e)}override(t,e){return xt(gt,t,e)}route(t,e,i,s){const n=mt(this,t),o=mt(this,i),a="_"+e;Object.defineProperties(n,{[a]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=o[s];return U(t)?Object.assign({},e,t):K(t,e)},set(t){this[a]=t}}})}}({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});const _t=Math.PI,yt=2*_t,vt=yt+_t,wt=Number.POSITIVE_INFINITY,Mt=_t/180,kt=_t/2,St=_t/4,Pt=2*_t/3,Dt=Math.log10,Ct=Math.sign;function Ot(t){const e=Math.round(t);t=Lt(t,e,t/1e3)?e:t;const i=Math.pow(10,Math.floor(Dt(t))),s=t/i;return(s<=1?1:s<=2?2:s<=5?5:10)*i}function At(t){const e=[],i=Math.sqrt(t);let s;for(s=1;st-e)).pop(),e}function Tt(t){return!isNaN(parseFloat(t))&&isFinite(t)}function Lt(t,e,i){return Math.abs(t-e)=t}function Et(t,e,i){let s,n,o;for(s=0,n=t.length;sl&&h=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function Ut(t){return!t||$(t.size)||$(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Xt(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function qt(t,e,i,s){let n=(s=s||{}).data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(n=s.data={},o=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let a=0;const r=i.length;let l,h,c,d,u;for(l=0;li.length){for(l=0;l0&&t.stroke()}}function Jt(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==o.strokeColor;let l,h;for(t.save(),t.font=n.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]);$(e.rotation)||t.rotate(e.rotation);e.color&&(t.fillStyle=e.color);e.textAlign&&(t.textAlign=e.textAlign);e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,o),l=0;lt[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const re=(t,e,i)=>ae(t,i,(s=>t[s][e]ae(t,i,(s=>t[s][e]>=i));function he(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n{const i="_onData"+ht(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function ue(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(ce.forEach((e=>{delete t[e]})),delete t._chartjs)}function fe(t){const e=new Set;let i,s;for(i=0,s=t.length;iwindow.getComputedStyle(t,null);function be(t,e){return xe(t).getPropertyValue(e)}const _e=["top","right","bottom","left"];function ye(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=_e[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function ve(t,e){const{canvas:i,currentDevicePixelRatio:s}=e,n=xe(i),o="border-box"===n.boxSizing,a=ye(n,"padding"),r=ye(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.native||t,s=i.touches,n=s&&s.length?s[0]:i,{offsetX:o,offsetY:a}=n;let r,l,h=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(o,a,i.target))r=o,l=a;else{const t=e.getBoundingClientRect();r=n.clientX-t.left,l=n.clientY-t.top,h=!0}return{x:r,y:l,box:h}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const we=t=>Math.round(10*t)/10;function Me(t,e,i,s){const n=xe(t),o=ye(n,"margin"),a=me(n.maxWidth,t,"clientWidth")||wt,r=me(n.maxHeight,t,"clientHeight")||wt,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=pe(t);if(o){const t=o.getBoundingClientRect(),a=xe(o),r=ye(a,"border","width"),l=ye(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=me(a.maxWidth,o,"clientWidth"),n=me(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||wt,maxHeight:n||wt}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=ye(n,"border","width"),e=ye(n,"padding");h-=e.width+t.width,c-=e.height+t.height}return h=Math.max(0,h-o.width),c=Math.max(0,s?Math.floor(h/s):c-o.height),h=we(Math.min(h,a,l.maxWidth)),c=we(Math.min(c,r,l.maxHeight)),h&&!c&&(c=we(h/2)),{width:h,height:c}}function ke(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=n/s,t.width=o/s;const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const Se=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function Pe(t,e){const i=be(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function De(t,e){return"native"in t?{x:t.x,y:t.y}:ve(t,e)}function Ce(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedMeta.iScale;if(r&&e===r.axis&&"r"!==e&&a&&o.length){const t=r._reversePixels?le:re;if(!s)return t(o,e,i);if(n._sharedOptions){const s=o[0],n="function"==typeof s.getRange&&s.getRange(e);if(n){const s=t(o,e,i-n),a=t(o,e,i+n);return{lo:s.lo,hi:a.hi}}}}return{lo:0,hi:o.length-1}}function Oe(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t{t[r](n[a],s)&&o.push({element:t,datasetIndex:e,index:i}),t.inRange(n.x,n.y,s)&&(l=!0)})),i.intersect&&!l?[]:o}var Ee={modes:{index(t,e,i,s){const n=De(e,t),o=i.axis||"x",a=i.intersect?Ae(t,n,o,s):Le(t,n,o,!1,s),r=[];return a.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=a[0].index,i=t.data[e];i&&!i.skip&&r.push({element:i,datasetIndex:t.index,index:e})})),r):[]},dataset(t,e,i,s){const n=De(e,t),o=i.axis||"xy";let a=i.intersect?Ae(t,n,o,s):Le(t,n,o,!1,s);if(a.length>0){const e=a[0].datasetIndex,i=t.getDatasetMeta(e).data;a=[];for(let t=0;tAe(t,De(e,t),i.axis||"xy",s),nearest:(t,e,i,s)=>Le(t,De(e,t),i.axis||"xy",i.intersect,s),x:(t,e,i,s)=>Re(t,e,{axis:"x",intersect:i.intersect},s),y:(t,e,i,s)=>Re(t,e,{axis:"y",intersect:i.intersect},s)}};const Ie=new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/),ze=new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);function Fe(t,e){const i=(""+t).match(Ie);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}function Be(t,e){const i={},s=U(e),n=s?Object.keys(e):e,o=U(t)?s?i=>K(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=+o(t)||0;return i}function Ve(t){return Be(t,{top:"y",right:"x",bottom:"y",left:"x"})}function We(t){return Be(t,["topLeft","topRight","bottomLeft","bottomRight"])}function Ne(t){const e=Ve(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function He(t,e){t=t||{},e=e||bt.font;let i=K(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=K(t.style,e.style);s&&!(""+s).match(ze)&&(console.warn('Invalid font style specified: "'+s+'"'),s="");const n={family:K(t.family,e.family),lineHeight:Fe(K(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:K(t.weight,e.weight),string:""};return n.string=Ut(n),n}function je(t,e,i,s){let n,o,a,r=!0;for(n=0,o=t.length;ni&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Ye(t,e){return Object.assign(Object.create(t),e)}const Ue=["left","top","right","bottom"];function Xe(t,e){return t.filter((t=>t.pos===e))}function qe(t,e){return t.filter((t=>-1===Ue.indexOf(t.pos)&&t.box.axis===e))}function Ke(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function Ge(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!Ue.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function ei(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;ot.box.fullSize)),!0),s=Ke(Xe(e,"left"),!0),n=Ke(Xe(e,"right")),o=Ke(Xe(e,"top"),!0),a=Ke(Xe(e,"bottom")),r=qe(e,"x"),l=qe(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Xe(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;Q(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),u=Object.assign({},n);Je(u,Ne(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Ge(l.concat(h),d);ei(r.fullSize,f,d,g),ei(l,f,d,g),ei(h,f,d,g)&&ei(l,f,d,g),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(f),si(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,si(r.rightAndBottom,f,d,g),t.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},Q(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})}))}};function oi(t,e=[""],i=t,s,n=(()=>t[0])){ct(s)||(s=mi("_fallback",t));const o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:s,_getTarget:n,override:n=>oi([n,...t],e,i,s)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>ci(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=mi(li(o,t),i),ct(n))return hi(t,n)?gi(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>xi(t).includes(e),ownKeys:t=>xi(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function ai(t,e,i,s){const n={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:ri(t,s),setContext:e=>ai(t,e,i,s),override:n=>ai(t.override(n),e,i,s)};return new Proxy(n,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>ci(t,e,(()=>function(t,e,i){const{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=t;let r=s[e];dt(r)&&a.isScriptable(e)&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t),e=e(o,a||s),r.delete(t),hi(t,e)&&(e=gi(n._scopes,n,t,e));return e}(e,r,t,i));Y(r)&&r.length&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=i;if(ct(o.index)&&s(t))e=e[o.index%e.length];else if(U(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const l of i){const i=gi(s,n,t,l);e.push(ai(i,o,a&&a[t],r))}}return e}(e,r,t,a.isIndexable));hi(e,r)&&(r=ai(r,n,o&&o[e],a));return r}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function ri(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:dt(i)?i:()=>i,isIndexable:dt(s)?s:()=>s}}const li=(t,e)=>t?t+ht(e):e,hi=(t,e)=>U(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function ci(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function di(t,e,i){return dt(t)?t(e,i):t}const ui=(t,e)=>!0===t?e:"string"==typeof t?lt(e,t):void 0;function fi(t,e,i,s,n){for(const o of e){const e=ui(i,o);if(e){t.add(e);const o=di(e._fallback,i,n);if(ct(o)&&o!==i&&o!==s)return o}else if(!1===e&&ct(s)&&i!==s)return null}return!1}function gi(t,e,i,s){const n=e._rootScopes,o=di(e._fallback,i,s),a=[...t,...n],r=new Set;r.add(s);let l=pi(r,a,i,o||i,s);return null!==l&&((!ct(o)||o===i||(l=pi(r,a,o,l,s),null!==l))&&oi(Array.from(r),[""],n,o,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const n=s[e];if(Y(n)&&U(i))return i;return n}(e,i,s))))}function pi(t,e,i,s,n){for(;i;)i=fi(t,e,i,s,n);return i}function mi(t,e){for(const i of e){if(!i)continue;const e=i[t];if(ct(e))return e}}function xi(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}const bi=Number.EPSILON||1e-14,_i=(t,e)=>e"x"===t?"y":"x";function vi(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=Vt(o,n),l=Vt(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function wi(t,e="x"){const i=yi(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=_i(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)wi(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o0===t||1===t,Pi=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*yt/i),Di=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*yt/i)+1,Ci={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*kt),easeOutSine:t=>Math.sin(t*kt),easeInOutSine:t=>-.5*(Math.cos(_t*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>Si(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>Si(t)?t:Pi(t,.075,.3),easeOutElastic:t=>Si(t)?t:Di(t,.075,.3),easeInOutElastic(t){const e=.1125;return Si(t)?t:t<.5?.5*Pi(2*t,e,.45):.5+.5*Di(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-Ci.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*Ci.easeInBounce(2*t):.5*Ci.easeOutBounce(2*t-1)+.5};function Oi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function Ai(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function Ti(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=Oi(t,n,i),r=Oi(n,o,i),l=Oi(o,e,i),h=Oi(a,r,i),c=Oi(r,l,i);return Oi(h,c,i)}const Li=new Map;function Ri(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=Li.get(i);return s||(s=new Intl.NumberFormat(t,e),Li.set(i,s)),s}(e,i).format(t)}function Ei(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ii(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function zi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Fi(t){return"angle"===t?{between:Ht,compare:Wt,normalize:Nt}:{between:Yt,compare:(t,e)=>t-e,normalize:t=>t}}function Bi({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Vi(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Fi(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Fi(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;hb||l(n,x,p)&&0!==r(n,x),v=()=>!b||0===r(o,p)||l(o,x,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==x&&(b=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(Bi({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,x=p));return null!==_&&g.push(Bi({start:_,end:d,loop:u,count:a,style:f})),g}function Wi(t,e){const i=[],s=t.segments;for(let n=0;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Hi(t,[{start:a,end:r,loop:o}],i,e);return Hi(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,rnull===t||""===t;const Gi=!!Se&&{passive:!0};function Zi(t,e,i){t.canvas.removeEventListener(e,i,Gi)}function Ji(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function Qi(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Ji(i.addedNodes,s),e=e&&!Ji(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function ts(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Ji(i.removedNodes,s),e=e&&!Ji(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const es=new Map;let is=0;function ss(){const t=window.devicePixelRatio;t!==is&&(is=t,es.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function ns(t,i,s){const n=t.canvas,o=n&&pe(n);if(!o)return;const a=e(((t,e)=>{const i=o.clientWidth;s(t,e),i{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||a(i,s)}));return r.observe(o),function(t,e){es.size||window.addEventListener("resize",ss),es.set(t,e)}(t,a),r}function os(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){es.delete(t),es.size||window.removeEventListener("resize",ss)}(t)}function as(t,i,s){const n=t.canvas,o=e((e=>{null!==t.ctx&&s(function(t,e){const i=qi[t.type]||t.type,{x:s,y:n}=ve(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t,(t=>{const e=t[0];return[e,e.offsetX,e.offsetY]}));return function(t,e,i){t.addEventListener(e,i,Gi)}(n,i,o),o}class rs extends Ui{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t.$chartjs={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",Ki(n)){const e=Pe(t,"width");void 0!==e&&(t.width=e)}if(Ki(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Pe(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;["height","width"].forEach((t=>{const s=i[t];$(s)?e.removeAttribute(t):e.setAttribute(t,s)}));const s=i.style||{};return Object.keys(s).forEach((t=>{e.style[t]=s[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:Qi,detach:ts,resize:ns}[e]||as;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:os,detach:os,resize:os}[e]||Zi)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return Me(t,e,i,s)}isAttached(t){const e=pe(t);return!(!e||!e.isConnected)}}function ls(t){return!ge()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?Xi:rs}var hs=Object.freeze({__proto__:null,_detectPlatform:ls,BasePlatform:Ui,BasicPlatform:Xi,DomPlatform:rs});const cs="transparent",ds={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=W(t||cs),n=s.valid&&W(e||cs);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class us{constructor(t,e,i,s){const n=e[i];s=je([t.to,s,n,t.from]);const o=je([t.from,n,s]);this._active=!0,this._fn=t.fn||ds[t.type||typeof o],this._easing=Ci[t.easing]||Ci.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=je([t.to,e,s,t.from]),this._from=je([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),bt.set("animations",{colors:{type:"color",properties:["color","borderColor","backgroundColor"]},numbers:{type:"number",properties:["x","y","borderWidth","radius","tension"]}}),bt.describe("animations",{_fallback:"animation"}),bt.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}});class gs{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!U(t))return;const e=this._properties;Object.getOwnPropertyNames(t).forEach((i=>{const s=t[i];if(!U(s))return;const n={};for(const t of fs)n[t]=s[t];(Y(s.properties)&&s.properties||[i]).forEach((t=>{t!==i&&e.has(t)||e.set(t,n)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new us(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(a.add(this._chart,i),!0):void 0}}function ps(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function ms(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function vs(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Ms(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i]}}}const ks=t=>"reset"===t||"none"===t,Ss=(t,e)=>e?t:Object.assign({},t);class Ps{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=bs(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&Ms(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=K(i.xAxisID,ws(t,"x")),o=e.yAxisID=K(i.yAxisID,ws(t,"y")),a=e.rAxisID=K(i.rAxisID,ws(t,"r")),r=e.indexAxis,l=e.iAxisID=s(r,n,o,a),h=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(l),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&ue(this._data,this),t._stacked&&Ms(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(U(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,h=s;else{h=Y(s[t])?this.parseArrayData(i,s,t,e):U(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const n=()=>null===l[a]||d&&l[a]t&&!e.hidden&&e._stacked&&{keys:ms(i,!0),values:null})(e,i,this.chart),l={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:h,max:c}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(a);let d,u;function f(){u=s[d];const e=u[a.axis];return!X(u[t.axis])||h>e||c=0;--d)if(!f()){this.updateRangeFromParsed(l,t,u,r);break}return l}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Ss(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new gs(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||ks(t)||this.chart._animationsDisabled}updateElement(t,e,i,s){ks(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!ks(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}Ds.defaults={},Ds.defaultRoutes=void 0;const Cs={values:t=>Y(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=Dt(Math.abs(o)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),Ri(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=t/Math.pow(10,Math.floor(Dt(t)));return 1===s||2===s||5===s?Cs.numeric.call(this,t,e,i):""}};var Os={formatters:Cs};function As(t,e){const i=t.options.ticks,s=i.maxTicksLimit||function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),n=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;is)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nn)return e}return Math.max(n,1)}(n,e,s);if(o>0){let t,i;const s=o>1?Math.round((r-a)/(o-1)):null;for(Ts(e,l,h,$(s)?0:a-s,a),t=0,i=o-1;te.lineWidth,tickColor:(t,e)=>e.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Os.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),bt.route("scale.ticks","color","","color"),bt.route("scale.grid","color","","borderColor"),bt.route("scale.grid","borderColor","","borderColor"),bt.route("scale.title","color","","color"),bt.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t}),bt.describe("scales",{_fallback:"scale"}),bt.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t});const Ls=(t,e,i)=>"top"===e||"left"===e?t[e]+i:t[e]-i;function Rs(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return h}function Is(t){return t.drawTicks?t.tickLength:0}function zs(t,e){if(!t.display)return 0;const i=He(t.font,e),s=Ne(t.padding);return(Y(t.text)?t.text.length:1)*i.lineHeight+s.height}function Fs(t,e,i){let n=s(t);return(i&&"right"!==e||!i&&"right"===e)&&(n=(t=>"left"===t?"right":"right"===t?"left":t)(n)),n}class Bs extends Ds{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=q(t,Number.POSITIVE_INFINITY),e=q(e,Number.NEGATIVE_INFINITY),i=q(i,Number.POSITIVE_INFINITY),s=q(s,Number.NEGATIVE_INFINITY),{min:q(t,i),max:q(e,s),minDefined:X(t),maxDefined:X(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;rs?s:i,s=n&&i>s?i:s,{min:q(i,q(s,i)),max:q(s,q(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){J(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=$e(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=jt(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Is(t.grid)-e.padding-zs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=zt(Math.min(Math.asin(jt((h.highest.height+6)/o,-1,1)),Math.asin(jt(a/r,-1,1))-Math.asin(jt(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){J(this.options.afterCalculateLabelRotation,[this])}beforeFit(){J(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=zs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Is(n)+o):(t.height=this.maxHeight,t.width=Is(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=It(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){J(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:n[t]||0,height:o[t]||0});return{first:v(0),last:v(e-1),widest:v(_),highest:v(y),widths:n,heights:o}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return $t(this._alignToPixels?Kt(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:o}=s,a=n.offset,r=this.isHorizontal(),l=this.ticks.length+(a?1:0),h=Is(n),c=[],d=n.setContext(this.getContext()),u=d.drawBorder?d.borderWidth:0,f=u/2,g=function(t){return Kt(i,t,u)};let p,m,x,b,_,y,v,w,M,k,S,P;if("top"===o)p=g(this.bottom),y=this.bottom-h,w=p-f,k=g(t.top)+f,P=t.bottom;else if("bottom"===o)p=g(this.top),k=t.top,P=g(t.bottom)-f,y=p+f,w=this.top+h;else if("left"===o)p=g(this.right),_=this.right-h,v=p-f,M=g(t.left)+f,S=t.right;else if("right"===o)p=g(this.left),M=t.left,S=g(t.right)-f,_=p+f,v=this.left+h;else if("x"===e){if("center"===o)p=g((t.top+t.bottom)/2+.5);else if(U(o)){const t=Object.keys(o)[0],e=o[t];p=g(this.chart.scales[t].getPixelForValue(e))}k=t.top,P=t.bottom,y=p+f,w=y+h}else if("y"===e){if("center"===o)p=g((t.left+t.right)/2);else if(U(o)){const t=Object.keys(o)[0],e=o[t];p=g(this.chart.scales[t].getPixelForValue(e))}_=p-f,v=_-h,M=t.left,S=t.right}const D=K(s.ticks.maxTicksLimit,l),C=Math.max(1,Math.ceil(l/D));for(m=0;me.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:i+1,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");bt.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&bt.describe(e,t.descriptors)}(t,o,i),this.override&&bt.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in bt[s]&&(delete bt[s][i],this.override&&delete gt[i])}}var Ws=new class{constructor(){this.controllers=new Vs(Ps,"datasets",!0),this.elements=new Vs(Ds,"elements"),this.plugins=new Vs(Object,"plugins"),this.scales=new Vs(Bs,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):Q(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=ht(t);J(i["before"+s],[],i),e[t](i),J(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Hs(t,e){return e||!1!==t?!0===t?{}:t:null}function js(t,e,i,s){const n=t.pluginScopeKeys(e),o=t.getOptionScopes(i,n);return t.createResolver(o,s,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function $s(t,e){const i=bt.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function Ys(t,e){return"x"===t||"y"===t?t:e.axis||("top"===(i=e.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.charAt(0).toLowerCase();var i}function Us(t){const e=t.options||(t.options={});e.plugins=K(e.plugins,{}),e.scales=function(t,e){const i=gt[t.type]||{scales:{}},s=e.scales||{},n=$s(t.type,e),o=Object.create(null),a=Object.create(null);return Object.keys(s).forEach((t=>{const e=s[t];if(!U(e))return console.error(`Invalid scale configuration for scale: ${t}`);if(e._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const r=Ys(t,e),l=function(t,e){return t===e?"_index_":"_value_"}(r,n),h=i.scales||{};o[r]=o[r]||t,a[t]=ot(Object.create(null),[{axis:r},e,h[r],h[l]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,r=i.indexAxis||$s(n,e),l=(gt[n]||{}).scales||{};Object.keys(l).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,r),n=i[e+"AxisID"]||o[e]||e;a[n]=a[n]||Object.create(null),ot(a[n],[{axis:e},s[n],l[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];ot(e,[bt.scales[e.type],bt.scale])})),a}(t,e)}function Xs(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const qs=new Map,Ks=new Set;function Gs(t,e){let i=qs.get(t);return i||(i=e(),qs.set(t,i),Ks.add(i)),i}const Zs=(t,e,i)=>{const s=lt(e,i);void 0!==s&&t.add(s)};class Js{constructor(t){this._config=function(t){return(t=t||{}).data=Xs(t.data),Us(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Xs(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),Us(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Gs(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return Gs(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return Gs(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return Gs(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>Zs(r,t,e)))),e.forEach((t=>Zs(r,s,t))),e.forEach((t=>Zs(r,gt[n]||{},t))),e.forEach((t=>Zs(r,bt,t))),e.forEach((t=>Zs(r,pt,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),Ks.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,gt[e]||{},bt.datasets[e]||{},{type:e},bt,pt]}resolveNamedOptions(t,e,i,s=[""]){const n={$shared:!0},{resolver:o,subPrefixes:a}=Qs(this._resolverCache,t,s);let r=o;if(function(t,e){const{isScriptable:i,isIndexable:s}=ri(t);for(const n of e){const e=i(n),o=s(n),a=(o||e)&&t[n];if(e&&(dt(a)||tn(a))||o&&Y(a))return!0}return!1}(o,e)){n.$shared=!1;r=ai(o,i=dt(i)?i():i,this.createResolver(t,i,a))}for(const t of e)n[t]=r[t];return n}createResolver(t,e,i=[""],s){const{resolver:n}=Qs(this._resolverCache,t,i);return U(e)?ai(n,e,void 0,s):n}}function Qs(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:oi(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const tn=t=>U(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||dt(t[i])),!1);const en=["top","bottom","left","right","chartArea"];function sn(t,e){return"top"===t||"bottom"===t||-1===en.indexOf(t)&&"x"===e}function nn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function on(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),J(i&&i.onComplete,[t],e)}function an(t){const e=t.chart,i=e.options.animation;J(i&&i.onProgress,[t],e)}function rn(t){return ge()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const ln={},hn=t=>{const e=rn(t);return Object.values(ln).filter((t=>t.canvas===e)).pop()};function cn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class dn{constructor(t,e){const s=this.config=new Js(e),n=rn(t),o=hn(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas can be reused.");const r=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||ls(n)),this.platform.updateConfig(s);const l=this.platform.acquireContext(n,r.aspectRatio),h=l&&l.canvas,c=h&&h.height,d=h&&h.width;this.id=j(),this.ctx=l,this.canvas=h,this.width=d,this.height=c,this._options=r,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Ns,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=i((t=>this.update(t)),r.resizeDelay||0),this._dataChanges=[],ln[this.id]=this,l&&h?(a.listen(this,"complete",on),a.listen(this,"progress",an),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:n}=this;return $(t)?e&&n?n:s?i/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ke(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Gt(this.canvas,this.ctx),this}stop(){return a.stop(this),this}resize(t,e){a.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ke(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),J(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){Q(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=Ys(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),Q(n,(e=>{const n=e.options,o=n.id,a=Ys(o,n),r=K(n.type,e.dtype);void 0!==n.position&&sn(n.position,a)===sn(e.dposition)||(n.position=e.dposition),s[o]=!0;let l=null;if(o in i&&i[o].type===r)l=i[o];else{l=new(Ws.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[l.id]=l}l.init(n,t)})),Q(s,((t,e)=>{t||delete i[e]})),Q(i,(t=>{ni.configure(this,t,t.options),ni.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(nn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){Q(this.scales,(t=>{ni.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);ut(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){cn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;ni.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],Q(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&Qt(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&te(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}getElementsAtEventForMode(t,e,i,s){const n=Ee.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Ye(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);ct(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),a.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};Q(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){Q(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},Q(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!tt(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:Jt(t,this.chartArea,this._minPadding)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=ft(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,J(n.onHover,[t,a,this],this),r&&J(n.onClick,[t,a,this],this));const h=!tt(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}const un=()=>Q(dn.instances,(t=>t._plugins.invalidate())),fn=!0;function gn(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}Object.defineProperties(dn,{defaults:{enumerable:fn,value:bt},instances:{enumerable:fn,value:ln},overrides:{enumerable:fn,value:gt},registry:{enumerable:fn,value:Ws},version:{enumerable:fn,value:"3.7.1"},getChart:{enumerable:fn,value:hn},register:{enumerable:fn,value:(...t)=>{Ws.add(...t),un()}},unregister:{enumerable:fn,value:(...t)=>{Ws.remove(...t),un()}}});class pn{constructor(t){this.options=t||{}}formats(){return gn()}parse(t,e){return gn()}format(t,e){return gn()}add(t,e,i){return gn()}diff(t,e,i){return gn()}startOf(t,e,i){return gn()}endOf(t,e){return gn()}}pn.override=function(t){Object.assign(pn.prototype,t)};var mn={_date:pn};function xn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;et-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(ct(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function _n(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;ht.x,i="left",s="right"):(e=t.base=i?1:-1)}(c,e,o)*n,d===o&&(p-=c/2),h=p+c),p===e.getPixelForValue(o)){const t=Ct(c)*e.getLineWidthForValue(o)/2;p+=t,c-=t}return{size:c,base:p,head:h,center:h+c/2}}_calculateBarIndexPixels(t,e){const i=e.scale,s=this.options,n=s.skipNull,o=K(s.maxBarThickness,1/0);let a,r;if(e.grouped){const i=n?this._getStackCount(t):e.stackCount,l="flex"===s.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,{xScale:i,yScale:s}=e,n=this.getParsed(t),o=i.getLabelForValue(n.x),a=s.getLabelForValue(n.y),r=n._custom;return{label:e.label,value:"("+o+", "+a+(r?", "+r:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,r=this.resolveDataElementOptions(e,s),l=this.getSharedOptions(r),h=this.includeOptions(s,l),c=o.axis,d=a.axis;for(let r=e;r""}}}};class Dn extends Ps{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,o,a=t=>+i[t];if(U(i[t])){const{key:t="value"}=this._parsing;a=e=>+lt(i[e],t)}for(n=t,o=t+e;nHt(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Ht(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(kt,c,u),x=g(_t,h,d),b=g(_t+kt,c,u);s=(p-x)/2,n=(m-b)/2,o=-(p+x)/2,a=-(m+b)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(c,h,r),p=(i.width-o)/d,m=(i.height-o)/u,x=Math.max(Math.min(p,m)/2,0),b=Z(this.options.radius,x),_=(b-Math.max(b*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=f*b,this.offsetY=g*b,s.total=this.calculateTotal(),this.outerRadius=b-_*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-_*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/yt)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,f=this.resolveDataElementOptions(e,s),g=this.getSharedOptions(f),p=this.includeOptions(s,g);let m,x=this._getRotation();for(m=0;m0&&!isNaN(t)?yt*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=Ri(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s"spacing"!==t,_indexable:t=>"spacing"!==t},Dn.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>"",label(t){let e=t.label;const i=": "+t.formattedValue;return Y(e)?(e=e.slice(),e[0]+=i):e+=i,e}}}}};class Cn extends Ps{initialize(){this.enableOptionSharing=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:n}=e,o=this.chart._animationsDisabled;let{start:a,count:r}=function(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=jt(Math.min(re(r,a.axis,h).lo,i?s:re(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?jt(Math.max(re(r,a.axis,c).hi+1,i?0:re(e,l,a.getPixelForValue(c)).hi+1),n,s)-n:s-n}return{start:n,count:o}}(e,s,o);this._drawStart=a,this._drawCount=r,function(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}(e)&&(a=0,r=s.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!n._decimated,i.points=s;const l=this.resolveDatasetElementOptions(t);this.options.showLine||(l.borderWidth=0),l.segment=this.options.segment,this.updateElement(i,void 0,{animated:!o,options:l},t),this.updateElements(s,a,r,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a,_stacked:r,_dataset:l}=this._cachedMeta,h=this.resolveDataElementOptions(e,s),c=this.getSharedOptions(h),d=this.includeOptions(s,c),u=o.axis,f=a.axis,{spanGaps:g,segment:p}=this.options,m=Tt(g)?g:Number.POSITIVE_INFINITY,x=this.chart._animationsDisabled||n||"none"===s;let b=e>0&&this.getParsed(e-1);for(let h=e;h0&&i[u]-b[u]>m,p&&(g.parsed=i,g.raw=l.data[h]),d&&(g.options=c||this.resolveDataElementOptions(h,e.active?"active":s)),x||this.updateElement(e,h,g,s),b=i}this.updateSharedOptions(c,s,h)}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}Cn.id="line",Cn.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1},Cn.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};class On extends Ps{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=Ri(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=this.getDataset(),r=o.options.animation,l=this._cachedMeta.rScale,h=l.xCenter,c=l.yCenter,d=l.getIndexAngle(0)-.5*_t;let u,f=d;const g=360/this.countVisibleElements();for(u=0;u{!isNaN(t.data[s])&&this.chart.getDataVisibility(s)&&i++})),i}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?It(this.resolveDataElementOptions(t,e).angle||i):0}}On.id="polarArea",On.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0},On.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>"",label:t=>t.chart.data.labels[t.dataIndex]+": "+t.formattedValue}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};class An extends Dn{}An.id="pie",An.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};class Tn extends Ps{getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this.getDataset(),o=this._cachedMeta.rScale,a="reset"===s;for(let r=e;r"",label:t=>"("+t.label+", "+t.formattedValue+")"}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var Rn=Object.freeze({__proto__:null,BarController:Sn,BubbleController:Pn,DoughnutController:Dn,LineController:Cn,PolarAreaController:On,PieController:An,RadarController:Tn,ScatterController:Ln});function En(t,e,i){const{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=e;let h=n/r;t.beginPath(),t.arc(o,a,r,s-h,i+h),l>n?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+kt,s-kt),t.closePath(),t.clip()}function In(t,e,i,s){const n=Be(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return jt(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:jt(n.innerStart,0,a),innerEnd:jt(n.innerEnd,0,a)}}function zn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Fn(t,e,i,s,n){const{x:o,y:a,startAngle:r,pixelMargin:l,innerRadius:h}=e,c=Math.max(e.outerRadius+s+i-l,0),d=h>0?h+s+i+l:0;let u=0;const f=n-r;if(s){const t=((h>0?h-s:0)+(c>0?c-s:0))/2;u=(f-(0!==t?f*t/(t+s):f))/2}const g=(f-Math.max(.001,f*c-i/_t)/c)/2,p=r+g+u,m=n-g-u,{outerStart:x,outerEnd:b,innerStart:_,innerEnd:y}=In(e,d,c,m-p),v=c-x,w=c-b,M=p+x/v,k=m-b/w,S=d+_,P=d+y,D=p+_/S,C=m-y/P;if(t.beginPath(),t.arc(o,a,c,M,k),b>0){const e=zn(w,k,o,a);t.arc(e.x,e.y,b,k,m+kt)}const O=zn(P,m,o,a);if(t.lineTo(O.x,O.y),y>0){const e=zn(P,C,o,a);t.arc(e.x,e.y,y,m+kt,C+Math.PI)}if(t.arc(o,a,d,m-y/d,p+_/d,!0),_>0){const e=zn(S,D,o,a);t.arc(e.x,e.y,_,D+Math.PI,p-kt)}const A=zn(v,p,o,a);if(t.lineTo(A.x,A.y),x>0){const e=zn(v,M,o,a);t.arc(e.x,e.y,x,p-kt,M)}t.closePath()}function Bn(t,e,i,s,n){const{options:o}=e,{borderWidth:a,borderJoinStyle:r}=o,l="inner"===o.borderAlign;a&&(l?(t.lineWidth=2*a,t.lineJoin=r||"round"):(t.lineWidth=a,t.lineJoin=r||"bevel"),e.fullCircles&&function(t,e,i){const{x:s,y:n,startAngle:o,pixelMargin:a,fullCircles:r}=e,l=Math.max(e.outerRadius-a,0),h=e.innerRadius+a;let c;for(i&&En(t,e,o+yt),t.beginPath(),t.arc(s,n,h,o+yt,o,!0),c=0;c=yt||Ht(n,a,r),f=Yt(o,l+d,h+d);return u&&f}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/2,n=(e.spacing||0)/2;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>yt?Math.floor(i/yt):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();let o=0;if(s){o=s/2;const e=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(e)*o,Math.sin(e)*o),this.circumference>=_t&&(o=s)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;const a=function(t,e,i,s){const{fullCircles:n,startAngle:o,circumference:a}=e;let r=e.endAngle;if(n){Fn(t,e,i,s,o+yt);for(let e=0;er&&o>r;return{count:s,start:l,loop:e.loop,ilen:h(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[b(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[b(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(x*m+e)/++x):(_(),t.lineTo(e,i),u=s,x=0,f=g=i),p=i}_()}function Yn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?$n:jn}Vn.id="arc",Vn.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0},Vn.defaultRoutes={backgroundColor:"backgroundColor"};const Un="function"==typeof Path2D;function Xn(t,e,i,s){Un&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Wn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=Yn(e);for(const r of n)Wn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class qn extends Ds{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;ki(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Ni(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Wi(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?Ai:t.tension||"monotone"===t.cubicInterpolationMode?Ti:Oi}(i);let l,h;for(l=0,h=o.length;l"borderDash"!==t&&"fill"!==t};class Gn extends Ds{constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.options,{x:n,y:o}=this.getProps(["x","y"],i);return Math.pow(t-n,2)+Math.pow(e-o,2){oo(t)}))}var ro={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void ao(t);const s=t.width;t.data.datasets.forEach(((e,n)=>{const{_data:o,indexAxis:a}=e,r=t.getDatasetMeta(n),l=o||e.data;if("y"===je([a,t.options.indexAxis]))return;if("line"!==r.type)return;const h=t.scales[r.xAxisID];if("linear"!==h.type&&"time"!==h.type)return;if(t.options.parsing)return;let{start:c,count:d}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=jt(re(e,o.axis,a).lo,0,i-1)),s=h?jt(re(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(r,l);if(d<=(i.threshold||4*s))return void oo(e);let u;switch($(o)&&(e._data=l,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":u=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;cu&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(l,c,d,s,i);break;case"min-max":u=function(t,e,i,s){let n,o,a,r,l,h,c,d,u,f,g=0,p=0;const m=[],x=e+i-1,b=t[e].x,_=t[x].x-b;for(n=e;nf&&(f=r,c=n),g=(p*g+o.x)/++p;else{const i=n-1;if(!$(h)&&!$(c)){const e=Math.min(h,c),s=Math.max(h,c);e!==d&&e!==i&&m.push({...t[e],x:g}),s!==d&&s!==i&&m.push({...t[s],x:g})}n>0&&i!==d&&m.push(t[i]),m.push(o),l=e,p=0,u=f=r,h=c=d=n}}return m}(l,c,d,s);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=u}))},destroy(t){ao(t)}};function lo(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=K(i&&i.target,i);return void 0===s&&(s=!!e.backgroundColor),!1!==s&&null!==s&&(!0===s?"origin":s)}(t);if(U(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return X(n)&&Math.floor(n)===n?("-"!==s[0]&&"+"!==s[0]||(n=e+n),!(n===e||n<0||n>=i)&&n):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}class ho{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,i){const{x:s,y:n,radius:o}=this;return e=e||{start:0,end:yt},t.arc(s,n,o,e.end,e.start,!0),!i.bounds}interpolate(t){const{x:e,y:i,radius:s}=this,n=t.angle;return{x:e+Math.cos(n)*s,y:i+Math.sin(n)*s,angle:n}}}function co(t){return(t.scale||{}).getPointPositionForValue?function(t){const{scale:e,fill:i}=t,s=e.options,n=e.getLabels().length,o=[],a=s.reverse?e.max:e.min,r=s.reverse?e.min:e.max;let l,h,c;if(c="start"===i?a:"end"===i?r:U(i)?i.value:e.getBaseValue(),s.grid.circular)return h=e.getPointPositionForValue(0,a),new ho({x:h.x,y:h.y,radius:e.getDistanceFromCenterForValue(c)});for(l=0;lt;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function fo(t,e,i){const s=[];for(let n=0;n{e=uo(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new qn({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function xo(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!X(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function bo(t,e,i){const{segments:s,points:n}=e;let o=!0,a=!1;t.beginPath();for(const r of s){const{start:s,end:l}=r,h=n[s],c=n[uo(s,l,n)];o?(t.moveTo(h.x,h.y),o=!1):(t.lineTo(h.x,i),t.lineTo(h.x,h.y)),a=!!e.pathSegment(t,r,{move:a}),a?t.closePath():t.lineTo(c.x,i)}t.lineTo(e.first().x,i),t.closePath(),t.clip()}function _o(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=Nt(n),o=Nt(o)),{property:t,start:n,end:o}}function yo(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function vo(t,e,i){const{top:s,bottom:n}=e.chart.chartArea,{property:o,start:a,end:r}=i||{};"x"===o&&(t.beginPath(),t.rect(a,s,r-a,n-s),t.clip())}function wo(t,e,i,s){const n=e.interpolate(i,s);n&&t.lineTo(n.x,n.y)}function Mo(t,e){const{line:i,target:s,property:n,color:o,scale:a}=e,r=function(t,e,i){const s=t.segments,n=t.points,o=e.points,a=[];for(const t of s){let{start:s,end:r}=t;r=uo(s,r,n);const l=_o(i,n[s],n[r],t.loop);if(!e.segments){a.push({source:t,target:l,start:n[s],end:n[r]});continue}const h=Wi(e,l);for(const e of h){const s=_o(i,o[e.start],o[e.end],e.loop),r=Vi(t,n,s);for(const t of r)a.push({source:t,target:e,start:{[i]:yo(l,s,"start",Math.max)},end:{[i]:yo(l,s,"end",Math.min)}})}}return a}(i,s,n);for(const{source:e,target:l,start:h,end:c}of r){const{style:{backgroundColor:r=o}={}}=e,d=!0!==s;t.save(),t.fillStyle=r,vo(t,a,d&&_o(n,h,c)),t.beginPath();const u=!!i.pathSegment(t,e);let f;if(d){u?t.closePath():wo(t,s,c,n);const e=!!s.pathSegment(t,l,{move:u,reverse:!0});f=u&&e,f||wo(t,s,h,n)}t.closePath(),t.fill(f?"evenodd":"nonzero"),t.restore()}}function ko(t,e,i){const s=po(e),{line:n,scale:o,axis:a}=e,r=n.options,l=r.fill,h=r.backgroundColor,{above:c=h,below:d=h}=l||{};s&&n.points.length&&(Qt(t,i),function(t,e){const{line:i,target:s,above:n,below:o,area:a,scale:r}=e,l=i._loop?"angle":e.axis;t.save(),"x"===l&&o!==n&&(bo(t,s,a.top),Mo(t,{line:i,target:s,color:n,scale:r,property:l}),t.restore(),t.save(),bo(t,s,a.bottom)),Mo(t,{line:i,target:s,color:o,scale:r,property:l}),t.restore()}(t,{line:n,target:s,above:c,below:d,area:i,scale:o,axis:a}),te(t))}var So={id:"filler",afterDatasetsUpdate(t,e,i){const s=(t.data.datasets||[]).length,n=[];let o,a,r,l;for(a=0;a=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&ko(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;i&&ko(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;s&&!1!==s.fill&&"beforeDatasetDraw"===i.drawTime&&ko(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const Po=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class Do extends Ds{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=J(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=He(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=Po(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,n,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const p=i+e/2+n.measureText(t.text).width;o>0&&u+s+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:s},d=Math.max(d,p),u+=s+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:o}}=this,a=Ei(o,this.left,this.width);if(this.isHorizontal()){let o=0,r=n(i,this.left+s,this.right-this.lineWidths[o]);for(const l of e)o!==l.row&&(o=l.row,r=n(i,this.left+s,this.right-this.lineWidths[o])),l.top+=this.top+t+s,l.left=a.leftForLtr(a.x(r),l.width),r+=l.width+s}else{let o=0,r=n(i,this.top+t+s,this.bottom-this.columnSizes[o].height);for(const l of e)l.col!==o&&(o=l.col,r=n(i,this.top+t+s,this.bottom-this.columnSizes[o].height)),l.top=r,l.left+=this.left+s,l.left=a.leftForLtr(a.x(l.left),l.width),r+=l.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Qt(t,this),this._draw(),te(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:a,labels:r}=t,l=bt.color,h=Ei(t.rtl,this.left,this.width),c=He(r.font),{color:d,padding:u}=r,f=c.size,g=f/2;let p;this.drawTitle(),s.textAlign=h.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=c.string;const{boxWidth:m,boxHeight:x,itemHeight:b}=Po(r,f),_=this.isHorizontal(),y=this._computeTitleHeight();p=_?{x:n(a,this.left+u,this.right-i[0]),y:this.top+u+y,line:0}:{x:this.left+u,y:n(a,this.top+y+u,this.bottom-e[0].height),line:0},Ii(this.ctx,t.textDirection);const v=b+u;this.legendItems.forEach(((w,M)=>{s.strokeStyle=w.fontColor||d,s.fillStyle=w.fontColor||d;const k=s.measureText(w.text).width,S=h.textAlign(w.textAlign||(w.textAlign=r.textAlign)),P=m+g+k;let D=p.x,C=p.y;h.setWidth(this.width),_?M>0&&D+P+u>this.right&&(C=p.y+=v,p.line++,D=p.x=n(a,this.left+u,this.right-i[p.line])):M>0&&C+v>this.bottom&&(D=p.x=D+e[p.line].width+u,p.line++,C=p.y=n(a,this.top+y+u,this.bottom-e[p.line].height));!function(t,e,i){if(isNaN(m)||m<=0||isNaN(x)||x<0)return;s.save();const n=K(i.lineWidth,1);if(s.fillStyle=K(i.fillStyle,l),s.lineCap=K(i.lineCap,"butt"),s.lineDashOffset=K(i.lineDashOffset,0),s.lineJoin=K(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=K(i.strokeStyle,l),s.setLineDash(K(i.lineDash,[])),r.usePointStyle){const o={radius:m*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},a=h.xPlus(t,m/2);Zt(s,o,a,e+g)}else{const o=e+Math.max((f-x)/2,0),a=h.leftForLtr(t,m),r=We(i.borderRadius);s.beginPath(),Object.values(r).some((t=>0!==t))?oe(s,{x:a,y:o,w:m,h:x,radius:r}):s.rect(a,o,m,x),s.fill(),0!==n&&s.stroke()}s.restore()}(h.x(D),C,w),D=o(S,D+m+g,_?D+P:this.right,t.rtl),function(t,e,i){se(s,i.text,t,e+b/2,c,{strikethrough:i.hidden,textAlign:h.textAlign(i.textAlign)})}(h.x(D),C,w),_?p.x+=P+u:p.y+=v})),zi(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=He(e.font),o=Ne(e.padding);if(!e.display)return;const a=Ei(t.rtl,this.left,this.width),r=this.ctx,l=e.position,h=i.size/2,c=o.top+h;let d,u=this.left,f=this.width;if(this.isHorizontal())f=Math.max(...this.lineWidths),d=this.top+c,u=n(t.align,u,this.right-f);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);d=c+n(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const g=n(l,u,u+f);r.textAlign=a.textAlign(s(l)),r.textBaseline="middle",r.strokeStyle=e.color,r.fillStyle=e.color,r.font=i.string,se(r,e.text,g,d,i)}_computeTitleHeight(){const t=this.options.title,e=He(t.font),i=Ne(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(Yt(t,this.left,this.right)&&Yt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const a=t.controller.getStyle(i?0:void 0),r=Ne(a.borderWidth);return{text:e[t.index].label,fillStyle:a.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(r.width+r.height)/4,strokeStyle:a.borderColor,pointStyle:s||a.pointStyle,rotation:a.rotation,textAlign:n||a.textAlign,borderRadius:0,datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class Oo extends Ds{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=Y(i.text)?i.text.length:1;this._padding=Ne(i.padding);const n=s*He(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=n:this.width=n}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:o,options:a}=this,r=a.align;let l,h,c,d=0;return this.isHorizontal()?(h=n(r,i,o),c=e+t,l=o-i):("left"===a.position?(h=i+t,c=n(r,s,e),d=-.5*_t):(h=o-t,c=n(r,e,s),d=.5*_t),l=s-e),{titleX:h,titleY:c,maxWidth:l,rotation:d}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=He(e.font),n=i.lineHeight/2+this._padding.top,{titleX:o,titleY:a,maxWidth:r,rotation:l}=this._drawArgs(n);se(t,e.text,0,0,i,{color:e.color,maxWidth:r,rotation:l,textAlign:s(e.align),textBaseline:"middle",translation:[o,a]})}}var Ao={id:"title",_element:Oo,start(t,e,i){!function(t,e){const i=new Oo({ctx:t.ctx,options:e,chart:t});ni.configure(t,i,e),ni.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;ni.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;ni.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const To=new WeakMap;var Lo={id:"subtitle",start(t,e,i){const s=new Oo({ctx:t.ctx,options:i,chart:t});ni.configure(t,s,i),ni.addBox(t,s),To.set(t,s)},stop(t){ni.removeBox(t,To.get(t)),To.delete(t)},beforeUpdate(t,e,i){const s=To.get(t);ni.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Ro={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e-1?t.split("\n"):t}function zo(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Fo(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=He(e.bodyFont),h=He(e.titleFont),c=He(e.footerFont),d=o.length,u=n.length,f=s.length,g=Ne(e.padding);let p=g.height,m=0,x=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,d&&(p+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x){p+=f*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-f)*l.lineHeight+(x-1)*e.bodySpacing}u&&(p+=e.footerMarginTop+u*c.lineHeight+(u-1)*e.footerSpacing);let b=0;const _=function(t){m=Math.max(m,i.measureText(t).width+b)};return i.save(),i.font=h.string,Q(t.title,_),i.font=l.string,Q(t.beforeBody.concat(t.afterBody),_),b=e.displayColors?a+2+e.boxPadding:0,Q(s,(t=>{Q(t.before,_),Q(t.lines,_),Q(t.after,_)})),b=0,i.font=c.string,Q(t.footer,_),i.restore(),m+=g.width,{width:m,height:p}}function Bo(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function Vo(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||Bo(t,e,i,s),yAlign:s}}function Wo(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=We(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:jt(g,0,s.width-e.width),y:jt(p,0,s.height-e.height)}}function No(t,e,i){const s=Ne(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function Ho(t){return Eo([],Io(t))}function jo(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}class $o extends Ds{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&e.options.animation&&i.animations,n=new gs(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(n)),n}getContext(){return this.$context||(this.$context=(t=this.chart.getContext(),e=this,i=this._tooltipItems,Ye(t,{tooltip:e,tooltipItems:i,type:"tooltip"})));var t,e,i}getTitle(t,e){const{callbacks:i}=e,s=i.beforeTitle.apply(this,[t]),n=i.title.apply(this,[t]),o=i.afterTitle.apply(this,[t]);let a=[];return a=Eo(a,Io(s)),a=Eo(a,Io(n)),a=Eo(a,Io(o)),a}getBeforeBody(t,e){return Ho(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){const{callbacks:i}=e,s=[];return Q(t,(t=>{const e={before:[],lines:[],after:[]},n=jo(i,t);Eo(e.before,Io(n.beforeLabel.call(this,t))),Eo(e.lines,n.label.call(this,t)),Eo(e.after,Io(n.afterLabel.call(this,t))),s.push(e)})),s}getAfterBody(t,e){return Ho(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){const{callbacks:i}=e,s=i.beforeFooter.apply(this,[t]),n=i.footer.apply(this,[t]),o=i.afterFooter.apply(this,[t]);let a=[];return a=Eo(a,Io(s)),a=Eo(a,Io(n)),a=Eo(a,Io(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),Q(l,(e=>{const i=jo(t.callbacks,e);s.push(i.labelColor.call(this,e)),n.push(i.labelPointStyle.call(this,e)),o.push(i.labelTextColor.call(this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=Ro[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Fo(this,i),a=Object.assign({},t,e),r=Vo(this.chart,i,a),l=Wo(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=We(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,x,b,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,b=_+o,y=_-o):(p=d+f,m=p+o,b=_-o,y=_+o),x=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(b=u,_=b-o,p=m-o,x=m+o):(b=u+g,_=b+o,p=m+o,x=m-o),y=b),{x1:p,x2:m,x3:x,y1:b,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=Ei(i.rtl,this.x,this.width);for(t.x=No(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=He(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,oe(t,{x:e,y:g,w:l,h:r,radius:a}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),oe(t,{x:i,y:g+1,w:l-2,h:r-2,radius:a}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,g,l,r),t.strokeRect(e,g,l,r),t.fillStyle=o.backgroundColor,t.fillRect(i,g+1,l-2,r-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=He(i.bodyFont);let d=c.lineHeight,u=0;const f=Ei(i.rtl,this.x,this.width),g=function(i){e.fillText(i,f.x(t.x+u),t.y+d/2),t.y+=d+n},p=f.textAlign(o);let m,x,b,_,y,v,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=No(this,p,i),e.fillStyle=i.bodyColor,Q(this.beforeBody,g),u=a&&"right"!==p?"center"===o?l/2+h:l+2+h:0,_=0,v=s.length;_0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=Ro[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Fo(this,t),a=Object.assign({},i,this._size),r=Vo(e,t,a),l=Wo(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=Ne(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),Ii(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),zi(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!tt(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!tt(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=Ro[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}$o.positioners=Ro;var Yo={id:"tooltip",_element:$o,positioners:Ro,afterInit(t,e,i){i&&(t.tooltip=new $o({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip,i={tooltip:e};!1!==t.notifyPlugins("beforeTooltipDraw",i)&&(e&&e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i))},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:H,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},Uo=Object.freeze({__proto__:null,Decimation:ro,Filler:So,Legend:Co,SubTitle:Lo,Title:Ao,Tooltip:Yo});function Xo(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}class qo extends Bs{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if($(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:jt(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:Xo(i,t,K(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){const e=this.getLabels();return t>=0&&te.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}function Ko(t,e,{horizontal:i,minRotation:s}){const n=It(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(""+t).length;return Math.min(e/o,a)}qo.id="category",qo.defaults={ticks:{callback:qo.prototype.getLabelForValue}};class Go extends Bs{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return $(t)||("number"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=Ct(s),e=Ct(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=1;(n>=Number.MAX_SAFE_INTEGER||s<=Number.MIN_SAFE_INTEGER)&&(e=Math.abs(.05*n)),a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s=function(t,e){const i=[],{bounds:s,step:n,min:o,max:a,precision:r,count:l,maxTicks:h,maxDigits:c,includeBounds:d}=t,u=n||1,f=h-1,{min:g,max:p}=e,m=!$(o),x=!$(a),b=!$(l),_=(p-g)/(c+1);let y,v,w,M,k=Ot((p-g)/f/u)*u;if(k<1e-14&&!m&&!x)return[{value:g},{value:p}];M=Math.ceil(p/k)-Math.floor(g/k),M>f&&(k=Ot(M*k/f/u)*u),$(r)||(y=Math.pow(10,r),k=Math.ceil(k*y)/y),"ticks"===s?(v=Math.floor(g/k)*k,w=Math.ceil(p/k)*k):(v=g,w=p),m&&x&&n&&Rt((a-o)/n,k/1e3)?(M=Math.round(Math.min((a-o)/k,h)),k=(a-o)/M,v=o,w=a):b?(v=m?o:v,w=x?a:w,M=l-1,k=(w-v)/M):(M=(w-v)/k,M=Lt(M,Math.round(M),k/1e3)?Math.round(M):Math.ceil(M));const S=Math.max(Ft(k),Ft(v));y=Math.pow(10,$(r)?S:r),v=Math.round(v*y)/y,w=Math.round(w*y)/y;let P=0;for(m&&(d&&v!==o?(i.push({value:o}),v0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=X(t)?Math.max(0,t):null,this.max=X(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t,a=(t,e)=>Math.pow(10,Math.floor(Dt(t))+e);i===s&&(i<=0?(n(1),o(10)):(n(a(i,-1)),o(a(s,1)))),i<=0&&n(a(s,-1)),s<=0&&o(a(i,1)),this._zero&&this.min!==this._suggestedMin&&i===a(this.min,0)&&n(a(i,-1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=function(t,e){const i=Math.floor(Dt(e.max)),s=Math.ceil(e.max/Math.pow(10,i)),n=[];let o=q(t.min,Math.pow(10,Math.floor(Dt(e.min)))),a=Math.floor(Dt(o)),r=Math.floor(o/Math.pow(10,a)),l=a<0?Math.pow(10,Math.abs(a)):1;do{n.push({value:o,major:Jo(o)}),++r,10===r&&(r=1,++a,l=a>=0?1:l),o=Math.round(r*Math.pow(10,a)*l)/l}while(an?{start:e-i,end:e}:{start:e,end:e+i}}function ia(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],n=[],o=t._pointLabels.length,a=t.options.pointLabels,r=a.centerPointLabels?_t/o:0;for(let d=0;de.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.starte.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function na(t){return 0===t||180===t?"center":t<180?"left":"right"}function oa(t,e,i){return"right"===i?t-=e:"center"===i&&(t-=e/2),t}function aa(t,e,i){return 90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e),t}function ra(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,yt);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;o{const i=J(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?ia(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return Nt(t*(yt/(this._pointLabels.length||1))+It(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if($(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if($(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t=0;n--){const e=s.setContext(t.getPointLabelContext(n)),o=He(e.font),{x:a,y:r,textAlign:l,left:h,top:c,right:d,bottom:u}=t._pointLabelItems[n],{backdropColor:f}=e;if(!$(f)){const t=Ne(e.backdropPadding);i.fillStyle=f,i.fillRect(h-t.left,c-t.top,d-h+t.width,u-c+t.height)}se(i,t._pointLabels[n],a,r+o.lineHeight/2,o,{color:e.color,textAlign:l,textBaseline:"middle"})}}(this,n),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e){a=this.getDistanceFromCenterForValue(t.value);!function(t,e,i,s){const n=t.ctx,o=e.circular,{color:a,lineWidth:r}=e;!o&&!s||!a||!r||i<0||(n.save(),n.strokeStyle=a,n.lineWidth=r,n.setLineDash(e.borderDash),n.lineDashOffset=e.borderDashOffset,n.beginPath(),ra(t,i,o,s),n.closePath(),n.stroke(),n.restore())}(this,s.setContext(this.getContext(e-1)),a,n)}})),i.display){for(t.save(),o=n-1;o>=0;o--){const s=i.setContext(this.getPointLabelContext(o)),{color:n,lineWidth:l}=s;l&&n&&(t.lineWidth=l,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,a=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),r=this.getPointPosition(o,a),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(r.x,r.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=He(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=Ne(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}se(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}la.id="radialLinear",la.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Os.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:t=>t,padding:5,centerPointLabels:!1}},la.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"},la.descriptors={angleLines:{_fallback:"grid"}};const ha={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ca=Object.keys(ha);function da(t,e){return t-e}function ua(t,e){if($(e))return null;const i=t._adapter,{parser:s,round:n,isoWeekday:o}=t._parseOpts;let a=e;return"function"==typeof s&&(a=s(a)),X(a)||(a="string"==typeof s?i.parse(a,s):i.parse(a)),null===a?null:(n&&(a="week"!==n||!Tt(o)&&!0!==o?i.startOf(a,n):i.startOf(a,"isoWeek",o)),+a)}function fa(t,e,i,s){const n=ca.length;for(let o=ca.indexOf(t);o=e?i[s]:i[n]]=!0}}else t[e]=!0}function pa(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[l].major=!0);return e}(t,s,n,i):s}class ma extends Bs{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e){const i=t.time||(t.time={}),s=this._adapter=new mn._date(t.adapters.date);ot(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:ua(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:a}=this.getUserBounds();function r(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),a||isNaN(t.max)||(n=Math.max(n,t.max))}o&&a||(r(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||r(this.getMinMax(!1))),s=X(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=X(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=he(s,n,this.max);return this._unit=e.unit||(i.autoSkip?fa(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=ca.length-1;o>=ca.indexOf(i);o--){const i=ca[o];if(ha[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return ca[i?ca.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=ca.indexOf(t)+1,i=ca.length;e1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const f="data"===s.ticks.source&&this.getDataTimestamps();for(c=u,d=0;ct-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.time.displayFormats,a=this._unit,r=this._majorUnit,l=a&&o[a],h=r&&o[r],c=i[e],d=r&&h&&c&&c.major,u=this._adapter.format(t,s||(d?h:l)),f=n.ticks.callback;return f?J(f,[u,e,i],this):u}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=re(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=re(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}ma.id="time",ma.defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",major:{enabled:!1}}};class ba extends ma{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=xa(e,this.min),this._tableRange=xa(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;o/,''); + var config = parseJSON(comments[j]); + if ( config ) { + if ( config.data ) { + mergeRecursive( chartData, config.data); + } + if ( config.options ) { + mergeRecursive( chartOptions, config.options); + } + } + } + + var lines = CSV.split('\n').filter(function(v){return v!==''}); + // if labels are not defined, get them from first line + if ( chartData.labels === null && lines.length > 0 ) { + chartData.labels = lines[0].split(','); + chartData.labels.shift(); + lines.shift(); + } + // get data values + for (var j = 0; j < lines.length; j++ ){ + if (chartData.datasets.length <= j) chartData.datasets[j] = {}; + chartData.datasets[j].data = lines[j].split(','); //.filter(function(v){return v!==''}); + chartData.datasets[j].label = chartData.datasets[j].data[0]; + chartData.datasets[j].data.shift(); + for (var k = 0; k < chartData.datasets[j].data.length; k++ ){ + chartData.datasets[j].data[k] = Number(chartData.datasets[j].data[k]); + } + } + + // add chart options + var config = chartConfig[canvas.getAttribute("data-chart")]; + if ( config ) { + for (var j = 0; j < chartData.datasets.length; j++ ){ + for (var attrname in config) { + if ( !chartData.datasets[j][attrname] ) { + chartData.datasets[j][attrname] = config[attrname][j%config[attrname].length]; + } + } + } + } + + canvas.chart = new Chart(ctx, { type: canvas.getAttribute("data-chart"), data: chartData, options: chartOptions }); + + } + + function updateChart(canvas, idx, data) { + canvas.chart.data.datasets[idx].data = data; + recreateChart( canvas ); + } + + var initializeCharts = function(){ + // Get all canvases + var canvases = document.querySelectorAll("canvas"); + for (var i = 0; i < canvases.length; i++ ){ + // check if canvas has data-chart attribute + if ( canvases[i].hasAttribute("data-chart") ){ + var CSV = canvases[i].innerHTML.trim(); + var comments = CSV.match(//g); + CSV = CSV.replace(//g,'').replace(/^\s*\n/gm, "") + if ( ! canvases[i].hasAttribute("data-chart-src") ) { + createChart(canvases[i], CSV, comments); + } + else { + var canvas = canvases[i]; + var xhr = new XMLHttpRequest(); + xhr.onload = function() { + if (xhr.readyState === 4) { + createChart(canvas, xhr.responseText, comments); + } + else { + console.warn( 'Failed to get file ' + canvas.getAttribute("data-chart-src") +". ReadyState: " + xhr.readyState + ", Status: " + xhr.status); + } + }; + + xhr.open( 'GET', canvas.getAttribute("data-chart-src"), false ); + try { + xhr.send(); + } + catch ( error ) { + console.warn( 'Failed to get file ' + canvas.getAttribute("data-chart-src") + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + error ); + } + } + + } + } + } + + function recreateChart(canvas) { + // clear data to redraw animation + var data = canvas.chart.data.datasets; + canvas.chart.data.datasets = []; + canvas.chart.update(); + canvas.style.visibility = "hidden"; + setTimeout( function(canvas, data) { + canvas.chart.data.datasets = data; + canvas.style.visibility = "visible"; + canvas.chart.update(); + }, 500, canvas, data); // wait for slide transition to re-add data and animation +/* + var config = canvas.chart.config; + canvas.chart.destroy(); + setTimeout( function() { canvas.chart = new Chart(canvas, config);}, 500); // wait for slide transition +*/ + } + + // check if chart option is given or not + var chartConfig = Reveal.getConfig().chart || {}; + + // set global chart options + var config = chartConfig.defaults; + if ( config ) { + mergeRecursive(Chart.defaults, config); + } + + Reveal.addEventListener('ready', function(){ + initializeCharts(); + Reveal.addEventListener('slidechanged', function(){ + var canvases = Reveal.getCurrentSlide().querySelectorAll("canvas[data-chart]"); + for (var i = 0; i < canvases.length; i++ ){ + if ( canvases[i].chart && canvases[i].chart.config.options.animation !== false ) { + recreateChart( canvases[i] ); + } + } + + }); + }); + + this.update = updateChart; + + return this; +}; diff --git a/docs/1_Fundamentals/plugin/customcontrols/README.md b/docs/1_Fundamentals/plugin/customcontrols/README.md new file mode 100644 index 0000000..1486d8d --- /dev/null +++ b/docs/1_Fundamentals/plugin/customcontrols/README.md @@ -0,0 +1,72 @@ +# Custom controls + +This plugin allows to add responsive custom controls to reveal.js which allow arbitrary positioning, layout, and behaviour of the controls. + +[Check out the live demo](https://rajgoel.github.io/reveal.js-demos/customcontrols-demo.html) + + +## Installation + +Copy the files `plugin.js` and `style.css` into the plugin folder of your reveal.js presentation, i.e. ```plugin/customcontrols``` and load the plugin as shown below. + +```html + + + + +``` + +Note, without configuration you need to add + +```javascript + +``` + +between `````` and `````` of your HTML file because the defaults use [Font Awesome](http://fontawesome.io/). + + + +## Configuration + +The plugin can be configured by adding custom controls and changing the layout of the slide number, e.g., by: + + +```javascript +Reveal.initialize({ + // ... + customcontrols: { + controls: [ + { + id: 'toggle-overview', + title: 'Toggle overview (O)', + icon: '', + action: 'Reveal.toggleOverview();' + }, + { icon: '', + title: 'Toggle chalkboard (B)', + action: 'RevealChalkboard.toggleChalkboard();' + }, + { icon: '', + title: 'Toggle notes canvas (C)', + action: 'RevealChalkboard.toggleNotesCanvas();' + } + ] + }, + // ... + +}); +``` + +The `id` and `title` are optional. The configuration should be self explaining and any number of controls can be added. The style file can be altered to control the layout and responsiveness of the custom controls. + +## License + +MIT licensed + +Copyright (C) 2020 Asvin Goel diff --git a/docs/1_Fundamentals/plugin/customcontrols/plugin.js b/docs/1_Fundamentals/plugin/customcontrols/plugin.js new file mode 100644 index 0000000..5ff7865 --- /dev/null +++ b/docs/1_Fundamentals/plugin/customcontrols/plugin.js @@ -0,0 +1,69 @@ +/***************************************************************** +** Author: Asvin Goel, goel@telematique.eu +** +** A plugin replacing the default controls by custom controls. +** +** Version: 2.0.0 +** +** License: MIT license (see LICENSE.md) +** +******************************************************************/ +window.RevealCustomControls = window.RevealCustomControls || { + id: 'RevealCustomControls', + init: function(deck) { + initCustomControls(deck); + } +}; + +const initCustomControls = function(Reveal){ + var config = Reveal.getConfig().customcontrols || {}; + + var collapseIcon = config.collapseIcon || ''; + var expandIcon = config.expandIcon || ''; + var tooltip = config.tooltip || 'Show/hide controls'; + + var div = document.createElement( 'div' ); + div.id = 'customcontrols'; + + var toggleButton = document.createElement( 'button' ); + toggleButton.title = tooltip; + toggleButton.innerHTML = '' + collapseIcon + '' + '' + expandIcon + ''; + + toggleButton.addEventListener('click', function( event ) { + var div = document.querySelector("div#customcontrols"); + if ( div.classList.contains('collapsed') ) { + div.classList.remove('collapsed'); + } + else { + div.classList.add('collapsed'); + } + }); + + div.appendChild(toggleButton); + + var controls = document.createElement( 'ul' ); + for (var i = 0; i < config.controls.length; i++ ) { + var control = document.createElement( 'li' ); + if ( config.controls[i].id ) { + control.id = config.controls[i].id; + } + control.innerHTML = ''; + controls.appendChild( control ); + } + div.appendChild( controls ); + + + document.querySelector(".reveal").appendChild( div ); + + document.addEventListener( 'resize', function( event ) { + // expand controls to make sure they are visible + var div = document.querySelector("div#customcontrols.collapsed"); + if ( div ) { + div.classList.remove('collapsed'); + } + } ); + + return this; + +}; + diff --git a/docs/1_Fundamentals/plugin/customcontrols/style.css b/docs/1_Fundamentals/plugin/customcontrols/style.css new file mode 100644 index 0000000..df77d60 --- /dev/null +++ b/docs/1_Fundamentals/plugin/customcontrols/style.css @@ -0,0 +1,62 @@ +#customcontrols { + z-index: 40; + position: fixed; + left: 70px; + bottom: 30px; + text-align: center; + font-size: 24px; +} + +#customcontrols button { + background: none; + color: var(--r-link-color); + border: none; + padding: 0; + font: inherit; + cursor: pointer; + outline: inherit; + z-index: 40; +} + +#customcontrols button:hover { + color: var(--r-link-color-hover); +} + +#customcontrols > ul { + position: fixed; + left: 54px; + bottom: 64px; + list-style-type: none; + overflow: hidden; + margin: 0; + padding: 0; + border: 1px solid var(--r-link-color); + border-radius: 5px; + padding: 10px; + background-color: var(--r-background-color) +} + +#customcontrols ul > li { + margin: 0px 5px; + padding: 0px 5px; + float: left; +} + +#customcontrols.collapsed #collapse-customcontrols, #customcontrols.collapsed > ul { + display: none; +} + +#customcontrols:not(.collapsed) #expand-customcontrols { + display: none; +} + +@media only screen and (min-width: 500px) { + #customcontrols > button { + display: none; + } + #customcontrols > ul { + bottom: 20px; + border: none; + background: none; + } +} diff --git a/docs/1_Fundamentals/plugin/elapsed-time-bar/elapsed-time-bar.js b/docs/1_Fundamentals/plugin/elapsed-time-bar/elapsed-time-bar.js new file mode 100644 index 0000000..0d7e8b9 --- /dev/null +++ b/docs/1_Fundamentals/plugin/elapsed-time-bar/elapsed-time-bar.js @@ -0,0 +1,144 @@ +var ElapsedTimeBar = { + // default value + barColor: 'rgb(200,0,0)', + pausedBarColor: 'rgba(200,0,0,.6)', + + isPaused: false, + isFinished: false, + + allottedTime: null, + timeProgressBar: null, + startTime: null, + pauseTime: null, + pauseTimeDuration: 0, + + /** + * initialize elements + */ + handleReady() { + var config = Reveal.getConfig(); + + // activate this plugin if config.allottedTime exists. + if (!config.allottedTime) { + console.warn('Failed to start ElapsedTimeBar plugin. "allottedTime" property is required.'); + return; + } + + // set configurations + this.barColor = config.barColor || this.barColor; + this.pausedBarColor = config.pausedBarColor || this.pausedBarColor; + + // calc barHeight from config.barHeight or page-progress container + var barHeight; + var pageProgressContainer = document.querySelector('.progress'); + if (config.progressBarHeight) { + barHeight = parseInt(config.progressBarHeight, 10) + 'px'; + + // override height of page-progress container + pageProgressContainer && (pageProgressContainer.style.height = barHeight); + } else if (config.progress && pageProgressContainer) { + // get height from page-progress container + barHeight = pageProgressContainer.getBoundingClientRect().height + 'px'; + } else { + // default + barHeight = '3px'; + } + + // create container of time-progress + var timeProgressContainer = document.createElement('div'); + timeProgressContainer.classList.add('progress'); + Object.entries({ + display: 'block', + position: 'fixed', + bottom: config.progress ? barHeight : 0, + width: '100%', + height: barHeight + }).forEach(([k, v]) => { + timeProgressContainer.style[k] = v; + }); + document.querySelector('.reveal').appendChild(timeProgressContainer); + + // create content of time-progress + this.timeProgressBar = document.createElement('div'); + Object.entries({ + height: '100%', + willChange: 'width' + }).forEach(([k, v]) => { + this.timeProgressBar.style[k] = v; + }); + timeProgressContainer.appendChild(this.timeProgressBar); + + // start timer + this.start(config.allottedTime); + }, + + /** + * update repeatedly using requestAnimationFrame. + */ + loop() { + if (this.isPaused) return; + var now = +new Date(); + var elapsedTime = now - this.startTime - this.pauseTimeDuration; + if (elapsedTime > this.allottedTime) { + this.timeProgressBar.style.width = '100%'; + this.isFinished = true; + } else { + this.timeProgressBar.style.width = elapsedTime / this.allottedTime * 100 + '%'; + requestAnimationFrame(this.loop.bind(this)); + } + }, + + /** + * set color of progress bar + */ + setBarColor() { + if (this.isPaused) { + this.timeProgressBar.style.backgroundColor = this.pausedBarColor; + } else { + this.timeProgressBar.style.backgroundColor = this.barColor; + } + }, + + /** + * start(reset) timer with new allotted time. + * @param {number} allottedTime + * @param {number} [elapsedTime=0] + */ + start(allottedTime, elapsedTime = 0) { + this.isFinished = false; + this.isPaused = false; + this.allottedTime = allottedTime; + this.startTime = +new Date() - elapsedTime; + this.pauseTimeDuration = 0; + this.setBarColor(); + this.loop(); + }, + + reset() { + this.start(this.allottedTime); + }, + + pause() { + if (this.isPaused) return; + this.isPaused = true; + this.pauseTime = +new Date(); + this.setBarColor(); + }, + + resume() { + if (!this.isPaused) return; + + // add paused time duration + this.isPaused = false; + this.pauseTimeDuration += new Date() - this.pauseTime; + this.pauseTime = null; + this.setBarColor(); + this.loop(); + } +}; + +if (Reveal.isReady()) { + ElapsedTimeBar.handleReady(); +} else { + Reveal.addEventListener('ready', () => ElapsedTimeBar.handleReady()); +} diff --git a/docs/1_Fundamentals/plugin/highlight/highlight.esm.js b/docs/1_Fundamentals/plugin/highlight/highlight.esm.js new file mode 100644 index 0000000..20f35d7 --- /dev/null +++ b/docs/1_Fundamentals/plugin/highlight/highlight.esm.js @@ -0,0 +1,5 @@ +function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,a=new Array(t);n=74)&&(z=se.match(/Chrome\/(\d+)/))&&(W=z[1]);var de=W&&+W,ue=de,me=E,pe=!!Object.getOwnPropertySymbols&&!me((function(){return!String(Symbol())||!Symbol.sham&&ue&&ue<41})),ge=pe&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,Ee=p,Se=g.exports,be=Z,Te=te,fe=pe,Ce=ge,Ne=Se("wks"),Re=Ee.Symbol,ve=Ce?Re:Re&&Re.withoutSetter||Te,Oe=function(e){return be(Ne,e)&&(fe||"string"==typeof Ne[e])||(fe&&be(Re,e)?Ne[e]=Re[e]:Ne[e]=ve("Symbol."+e)),Ne[e]},he={};he[Oe("toStringTag")]="z";var ye="[object z]"===String(he),Ie={exports:{}},Ae=V,De=Function.toString;"function"!=typeof Ae.inspectSource&&(Ae.inspectSource=function(e){return De.call(e)});var Me,Le,we,xe=Ae.inspectSource,Pe=xe,ke=p.WeakMap,Ue="function"==typeof ke&&/native code/.test(Pe(ke)),Fe=g.exports,Be=te,Ge=Fe("keys"),Ye=function(e){return Ge[e]||(Ge[e]=Be(e))},He={},Ve=Ue,qe=T,ze=F,We=Z,$e=V,Qe=Ye,Ke=He,je=p.WeakMap;if(Ve||$e.state){var Xe=$e.state||($e.state=new je),Ze=Xe.get,Je=Xe.has,et=Xe.set;Me=function(e,t){if(Je.call(Xe,e))throw new TypeError("Object already initialized");return t.facade=e,et.call(Xe,e,t),t},Le=function(e){return Ze.call(Xe,e)||{}},we=function(e){return Je.call(Xe,e)}}else{var tt=Qe("state");Ke[tt]=!0,Me=function(e,t){if(We(e,tt))throw new TypeError("Object already initialized");return t.facade=e,ze(e,tt,t),t},Le=function(e){return We(e,tt)?e[tt]:{}},we=function(e){return We(e,tt)}}var nt={set:Me,get:Le,has:we,enforce:function(e){return we(e)?Le(e):Me(e,{})},getterFor:function(e){return function(t){var n;if(!qe(t)||(n=Le(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}},at=p,rt=F,it=Z,ot=Y,st=xe,lt=nt.get,ct=nt.enforce,_t=String(String).split("String");(Ie.exports=function(e,t,n,a){var r,i=!!a&&!!a.unsafe,o=!!a&&!!a.enumerable,s=!!a&&!!a.noTargetGet;"function"==typeof n&&("string"!=typeof t||it(n,"name")||rt(n,"name",t),(r=ct(n)).source||(r.source=_t.join("string"==typeof t?t:""))),e!==at?(i?!s&&e[t]&&(o=!0):delete e[t],o?e[t]=n:rt(e,t,n)):o?e[t]=n:ot(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&<(this).source||st(this)}));var dt={}.toString,ut=function(e){return dt.call(e).slice(8,-1)},mt=ye,pt=ut,gt=Oe("toStringTag"),Et="Arguments"==pt(function(){return arguments}()),St=mt?pt:function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),gt))?n:Et?pt(t):"Object"==(a=pt(t))&&"function"==typeof t.callee?"Arguments":a},bt=St,Tt=ye?{}.toString:function(){return"[object "+bt(this)+"]"},ft=ye,Ct=Ie.exports,Nt=Tt;ft||Ct(Object.prototype,"toString",Nt,{unsafe:!0});var Rt=y,vt=function(){var e=Rt(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},Ot=Ie.exports,ht=y,yt=E,It=vt,At=RegExp.prototype,Dt=At.toString,Mt=yt((function(){return"/a/b"!=Dt.call({source:"a",flags:"b"})})),Lt="toString"!=Dt.name;(Mt||Lt)&&Ot(RegExp.prototype,"toString",(function(){var e=ht(this),t=String(e.source),n=e.flags;return"/"+t+"/"+String(void 0===n&&e instanceof RegExp&&!("flags"in At)?It.call(e):n)}),{unsafe:!0});var wt={},xt={},Pt={}.propertyIsEnumerable,kt=Object.getOwnPropertyDescriptor,Ut=kt&&!Pt.call({1:2},1);xt.f=Ut?function(e){var t=kt(this,e);return!!t&&t.enumerable}:Pt;var Ft=ut,Bt="".split,Gt=E((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==Ft(e)?Bt.call(e,""):Object(e)}:Object,Yt=Gt,Ht=$,Vt=function(e){return Yt(Ht(e))},qt=S,zt=xt,Wt=P,$t=Vt,Qt=A,Kt=Z,jt=O,Xt=Object.getOwnPropertyDescriptor;wt.f=qt?Xt:function(e,t){if(e=$t(e),t=Qt(t,!0),jt)try{return Xt(e,t)}catch(e){}if(Kt(e,t))return Wt(!zt.f.call(e,t),e[t])};var Zt={},Jt=Math.ceil,en=Math.floor,tn=function(e){return isNaN(e=+e)?0:(e>0?en:Jt)(e)},nn=tn,an=Math.min,rn=function(e){return e>0?an(nn(e),9007199254740991):0},on=tn,sn=Math.max,ln=Math.min,cn=function(e,t){var n=on(e);return n<0?sn(n+t,0):ln(n,t)},_n=Vt,dn=rn,un=cn,mn=function(e){return function(t,n,a){var r,i=_n(t),o=dn(i.length),s=un(a,o);if(e&&n!=n){for(;o>s;)if((r=i[s++])!=r)return!0}else for(;o>s;s++)if((e||s in i)&&i[s]===n)return e||s||0;return!e&&-1}},pn={includes:mn(!0),indexOf:mn(!1)},gn=Z,En=Vt,Sn=pn.indexOf,bn=He,Tn=function(e,t){var n,a=En(e),r=0,i=[];for(n in a)!gn(bn,n)&&gn(a,n)&&i.push(n);for(;t.length>r;)gn(a,n=t[r++])&&(~Sn(i,n)||i.push(n));return i},fn=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Cn=Tn,Nn=fn.concat("length","prototype");Zt.f=Object.getOwnPropertyNames||function(e){return Cn(e,Nn)};var Rn={};Rn.f=Object.getOwnPropertySymbols;var vn=Zt,On=Rn,hn=y,yn=oe("Reflect","ownKeys")||function(e){var t=vn.f(hn(e)),n=On.f;return n?t.concat(n(e)):t},In=Z,An=yn,Dn=wt,Mn=b,Ln=function(e,t){for(var n=An(t),a=Mn.f,r=Dn.f,i=0;i=51||!ta((function(){var t=[];return(t.constructor={})[aa]=function(){return{foo:1}},1!==t[e](Boolean).foo}))},ia=Qn,oa=T,sa=jn,la=cn,ca=rn,_a=Vt,da=ea,ua=Oe,ma=ra("slice"),pa=ua("species"),ga=[].slice,Ea=Math.max;ia({target:"Array",proto:!0,forced:!ma},{slice:function(e,t){var n,a,r,i=_a(this),o=ca(i.length),s=la(e,o),l=la(void 0===t?o:t,o);if(sa(i)&&("function"!=typeof(n=i.constructor)||n!==Array&&!sa(n.prototype)?oa(n)&&null===(n=n[pa])&&(n=void 0):n=void 0,n===Array||void 0===n))return ga.call(i,s,l);for(a=new(void 0===n?Array:n)(Ea(l-s,0)),r=0;si;)Ia.f(e,n=a[i++],t[n]);return e},La=oe("document","documentElement"),wa=y,xa=Ma,Pa=fn,ka=He,Ua=La,Fa=R,Ba=Ye("IE_PROTO"),Ga=function(){},Ya=function(e){return"' ); + + var leadingWs = text.match( /^\n?(\s*)/ )[1].length, + leadingTabs = text.match( /^\n?(\t*)/ )[1].length; + + if( leadingTabs > 0 ) { + text = text.replace( new RegExp('\\n?\\t{' + leadingTabs + '}','g'), '\n' ); + } + else if( leadingWs > 1 ) { + text = text.replace( new RegExp('\\n? {' + leadingWs + '}', 'g'), '\n' ); + } + + return text; + + } + + /** + * Given a markdown slide section element, this will + * return all arguments that aren't related to markdown + * parsing. Used to forward any other user-defined arguments + * to the output markdown slide. + */ + function getForwardedAttributes( section ) { + + var attributes = section.attributes; + var result = []; + + for( var i = 0, len = attributes.length; i < len; i++ ) { + var name = attributes[i].name, + value = attributes[i].value; + + // disregard attributes that are used for markdown loading/parsing + if( /data\-(markdown|separator|vertical|notes)/gi.test( name ) ) continue; + + if( value ) { + result.push( name + '="' + value + '"' ); + } + else { + result.push( name ); + } + } + + return result.join( ' ' ); + + } + + /** + * Inspects the given options and fills out default + * values for what's not defined. + */ + function getSlidifyOptions( options ) { + + options = options || {}; + options.separator = options.separator || DEFAULT_SLIDE_SEPARATOR; + options.notesSeparator = options.notesSeparator || DEFAULT_NOTES_SEPARATOR; + options.attributes = options.attributes || ''; + + return options; + + } + + /** + * Helper function for constructing a markdown slide. + */ + function createMarkdownSlide( content, options ) { + + options = getSlidifyOptions( options ); + + var notesMatch = content.split( new RegExp( options.notesSeparator, 'mgi' ) ); + + if( notesMatch.length === 2 ) { + content = notesMatch[0] + ''; + } + + // prevent script end tags in the content from interfering + // with parsing + content = content.replace( /<\/script>/g, SCRIPT_END_PLACEHOLDER ); + + return ''; + + } + + /** + * Parses a data string into multiple slides based + * on the passed in separator arguments. + */ + function slidify( markdown, options ) { + + options = getSlidifyOptions( options ); + + var separatorRegex = new RegExp( options.separator + ( options.verticalSeparator ? '|' + options.verticalSeparator : '' ), 'mg' ), + horizontalSeparatorRegex = new RegExp( options.separator ); + + var matches, + lastIndex = 0, + isHorizontal, + wasHorizontal = true, + content, + sectionStack = []; + + // iterate until all blocks between separators are stacked up + while( matches = separatorRegex.exec( markdown ) ) { + var notes = null; + + // determine direction (horizontal by default) + isHorizontal = horizontalSeparatorRegex.test( matches[0] ); + + if( !isHorizontal && wasHorizontal ) { + // create vertical stack + sectionStack.push( [] ); + } + + // pluck slide content from markdown input + content = markdown.substring( lastIndex, matches.index ); + + if( isHorizontal && wasHorizontal ) { + // add to horizontal stack + sectionStack.push( content ); + } + else { + // add to vertical stack + sectionStack[sectionStack.length-1].push( content ); + } + + lastIndex = separatorRegex.lastIndex; + wasHorizontal = isHorizontal; + } + + // add the remaining slide + ( wasHorizontal ? sectionStack : sectionStack[sectionStack.length-1] ).push( markdown.substring( lastIndex ) ); + + var markdownSections = ''; + + // flatten the hierarchical stack, and insert
tags + for( var i = 0, len = sectionStack.length; i < len; i++ ) { + // vertical + if( sectionStack[i] instanceof Array ) { + markdownSections += '
'; + + sectionStack[i].forEach( function( child ) { + markdownSections += '
' + createMarkdownSlide( child, options ) + '
'; + } ); + + markdownSections += '
'; + } + else { + markdownSections += '
' + createMarkdownSlide( sectionStack[i], options ) + '
'; + } + } + + return markdownSections; + + } + + /** + * Parses any current data-markdown slides, splits + * multi-slide markdown into separate sections and + * handles loading of external markdown. + */ + function processSlides( scope ) { + + return new Promise( function( resolve ) { + + var externalPromises = []; + + [].slice.call( scope.querySelectorAll( 'section[data-markdown]:not([data-markdown-parsed])') ).forEach( function( section, i ) { + + if( section.getAttribute( 'data-markdown' ).length ) { + + externalPromises.push( loadExternalMarkdown( section ).then( + + // Finished loading external file + function( xhr, url ) { + section.outerHTML = slidify( xhr.responseText, { + separator: section.getAttribute( 'data-separator' ), + verticalSeparator: section.getAttribute( 'data-separator-vertical' ), + notesSeparator: section.getAttribute( 'data-separator-notes' ), + attributes: getForwardedAttributes( section ) + }); + }, + + // Failed to load markdown + function( xhr, url ) { + section.outerHTML = '
' + + 'ERROR: The attempt to fetch ' + url + ' failed with HTTP status ' + xhr.status + '.' + + 'Check your browser\'s JavaScript console for more details.' + + '

Remember that you need to serve the presentation HTML from a HTTP server.

' + + '
'; + } + + ) ); + + } + else { + + section.outerHTML = slidify( getMarkdownFromSlide( section ), { + separator: section.getAttribute( 'data-separator' ), + verticalSeparator: section.getAttribute( 'data-separator-vertical' ), + notesSeparator: section.getAttribute( 'data-separator-notes' ), + attributes: getForwardedAttributes( section ) + }); + + } + + }); + + Promise.all( externalPromises ).then( resolve ); + + } ); + + } + + function loadExternalMarkdown( section ) { + + return new Promise( function( resolve, reject ) { + + var xhr = new XMLHttpRequest(), + url = section.getAttribute( 'data-markdown' ); + + var datacharset = section.getAttribute( 'data-charset' ); + + // see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes + if( datacharset != null && datacharset != '' ) { + xhr.overrideMimeType( 'text/html; charset=' + datacharset ); + } + + xhr.onreadystatechange = function( section, xhr ) { + if( xhr.readyState === 4 ) { + // file protocol yields status code 0 (useful for local debug, mobile applications etc.) + if ( ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status === 0 ) { + + resolve( xhr, url ); + + } + else { + + reject( xhr, url ); + + } + } + }.bind( this, section, xhr ); + + xhr.open( 'GET', url, true ); + + try { + xhr.send(); + } + catch ( e ) { + console.warn( 'Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e ); + resolve( xhr, url ); + } + + } ); + + } + + /** + * Check if a node value has the attributes pattern. + * If yes, extract it and add that value as one or several attributes + * to the target element. + * + * You need Cache Killer on Chrome to see the effect on any FOM transformation + * directly on refresh (F5) + * http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development/7000899#answer-11786277 + */ + function addAttributeInElement( node, elementTarget, separator ) { + + var mardownClassesInElementsRegex = new RegExp( separator, 'mg' ); + var mardownClassRegex = new RegExp( "([^\"= ]+?)=\"([^\"]+?)\"|(data-[^\"= ]+?)(?=[\" ])", 'mg' ); + var nodeValue = node.nodeValue; + var matches, + matchesClass; + if( matches = mardownClassesInElementsRegex.exec( nodeValue ) ) { + + var classes = matches[1]; + nodeValue = nodeValue.substring( 0, matches.index ) + nodeValue.substring( mardownClassesInElementsRegex.lastIndex ); + node.nodeValue = nodeValue; + while( matchesClass = mardownClassRegex.exec( classes ) ) { + if( matchesClass[2] ) { + elementTarget.setAttribute( matchesClass[1], matchesClass[2] ); + } else { + elementTarget.setAttribute( matchesClass[3], "" ); + } + } + return true; + } + return false; + } + + /** + * Add attributes to the parent element of a text node, + * or the element of an attribute node. + */ + function addAttributes( section, element, previousElement, separatorElementAttributes, separatorSectionAttributes ) { + + if ( element != null && element.childNodes != undefined && element.childNodes.length > 0 ) { + var previousParentElement = element; + for( var i = 0; i < element.childNodes.length; i++ ) { + var childElement = element.childNodes[i]; + if ( i > 0 ) { + var j = i - 1; + while ( j >= 0 ) { + var aPreviousChildElement = element.childNodes[j]; + if ( typeof aPreviousChildElement.setAttribute == 'function' && aPreviousChildElement.tagName != "BR" ) { + previousParentElement = aPreviousChildElement; + break; + } + j = j - 1; + } + } + var parentSection = section; + if( childElement.nodeName == "section" ) { + parentSection = childElement ; + previousParentElement = childElement ; + } + if ( typeof childElement.setAttribute == 'function' || childElement.nodeType == Node.COMMENT_NODE ) { + addAttributes( parentSection, childElement, previousParentElement, separatorElementAttributes, separatorSectionAttributes ); + } + } + } + + if ( element.nodeType == Node.COMMENT_NODE ) { + if ( addAttributeInElement( element, previousElement, separatorElementAttributes ) == false ) { + addAttributeInElement( element, section, separatorSectionAttributes ); + } + } + } + + /** + * Converts any current data-markdown slides in the + * DOM to HTML. + */ + function convertSlides() { + + var sections = deck.getRevealElement().querySelectorAll( '[data-markdown]:not([data-markdown-parsed])'); + + [].slice.call( sections ).forEach( function( section ) { + + section.setAttribute( 'data-markdown-parsed', true ) + + var notes = section.querySelector( 'aside.notes' ); + var markdown = getMarkdownFromSlide( section ); + + section.innerHTML = marked( markdown ); + addAttributes( section, section, null, section.getAttribute( 'data-element-attributes' ) || + section.parentNode.getAttribute( 'data-element-attributes' ) || + DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR, + section.getAttribute( 'data-attributes' ) || + section.parentNode.getAttribute( 'data-attributes' ) || + DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR); + + // If there were notes, we need to re-add them after + // having overwritten the section's HTML + if( notes ) { + section.appendChild( notes ); + } + + } ); + + return Promise.resolve(); + + } + + function escapeForHTML( input ) { + + return input.replace( /([&<>'"])/g, char => HTML_ESCAPE_MAP[char] ); + + } + + return { + id: 'markdown', + + /** + * Starts processing and converting Markdown within the + * current reveal.js deck. + */ + init: function( reveal ) { + + deck = reveal; + + let { renderer, animateLists, ...markedOptions } = deck.getConfig().markdown || {}; + + if( !renderer ) { + renderer = new marked.Renderer(); + + renderer.code = ( code, language ) => { + + // Off by default + let lineNumbers = ''; + + // Users can opt in to show line numbers and highlight + // specific lines. + // ```javascript [] show line numbers + // ```javascript [1,4-8] highlights lines 1 and 4-8 + if( CODE_LINE_NUMBER_REGEX.test( language ) ) { + lineNumbers = language.match( CODE_LINE_NUMBER_REGEX )[1].trim(); + lineNumbers = `data-line-numbers="${lineNumbers}"`; + language = language.replace( CODE_LINE_NUMBER_REGEX, '' ).trim(); + } + + // Escape before this gets injected into the DOM to + // avoid having the HTML parser alter our code before + // highlight.js is able to read it + code = escapeForHTML( code ); + + return `
${code}
`; + }; + } + + if( animateLists === true ) { + renderer.listitem = text => `
  • ${text}
  • `; + } + + marked.setOptions( { + renderer, + ...markedOptions + } ); + + return processSlides( deck.getRevealElement() ).then( convertSlides ); + + }, + + // TODO: Do these belong in the API? + processSlides: processSlides, + convertSlides: convertSlides, + slidify: slidify, + marked: marked + } + +}; + +export default Plugin; diff --git a/docs/1_Fundamentals/plugin/math/katex.js b/docs/1_Fundamentals/plugin/math/katex.js new file mode 100644 index 0000000..a8b47c4 --- /dev/null +++ b/docs/1_Fundamentals/plugin/math/katex.js @@ -0,0 +1,96 @@ +/** + * A plugin which enables rendering of math equations inside + * of reveal.js slides. Essentially a thin wrapper for KaTeX. + * + * @author Hakim El Hattab + * @author Gerhard Burger + */ +export const KaTeX = () => { + let deck; + + let defaultOptions = { + version: 'latest', + delimiters: [ + {left: '$$', right: '$$', display: true}, // Note: $$ has to come before $ + {left: '$', right: '$', display: false}, + {left: '\\(', right: '\\)', display: false}, + {left: '\\[', right: '\\]', display: true} + ], + ignoredTags: ['script', 'noscript', 'style', 'textarea', 'pre'] + } + + const loadCss = src => { + let link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = src; + document.head.appendChild(link); + }; + + /** + * Loads a JavaScript file and returns a Promise for when it is loaded + * Credits: https://aaronsmith.online/easily-load-an-external-script-using-javascript/ + */ + const loadScript = src => { + return new Promise((resolve, reject) => { + const script = document.createElement('script') + script.type = 'text/javascript' + script.onload = resolve + script.onerror = reject + script.src = src + document.head.append(script) + }) + }; + + async function loadScripts(urls) { + for(const url of urls) { + await loadScript(url); + } + } + + return { + id: 'katex', + + init: function (reveal) { + + deck = reveal; + + let revealOptions = deck.getConfig().katex || {}; + + let options = {...defaultOptions, ...revealOptions}; + const {local, version, extensions, ...katexOptions} = options; + + let baseUrl = options.local || 'https://cdn.jsdelivr.net/npm/katex'; + let versionString = options.local ? '' : '@' + options.version; + + let cssUrl = baseUrl + versionString + '/dist/katex.min.css'; + let katexUrl = baseUrl + versionString + '/dist/katex.min.js'; + let mhchemUrl = baseUrl + versionString + '/dist/contrib/mhchem.min.js' + let karUrl = baseUrl + versionString + '/dist/contrib/auto-render.min.js'; + + let katexScripts = [katexUrl]; + if(options.extensions && options.extensions.includes("mhchem")) { + katexScripts.push(mhchemUrl); + } + katexScripts.push(karUrl); + + const renderMath = () => { + renderMathInElement(reveal.getSlidesElement(), katexOptions); + deck.layout(); + } + + loadCss(cssUrl); + + // For some reason dynamically loading with defer attribute doesn't result in the expected behavior, the below code does + loadScripts(katexScripts).then(() => { + if( deck.isReady() ) { + renderMath(); + } + else { + deck.on( 'ready', renderMath.bind( this ) ); + } + }); + + } + } + +}; diff --git a/docs/1_Fundamentals/plugin/math/math.esm.js b/docs/1_Fundamentals/plugin/math/math.esm.js new file mode 100644 index 0000000..a0d1468 --- /dev/null +++ b/docs/1_Fundamentals/plugin/math/math.esm.js @@ -0,0 +1 @@ +var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e=function(t){return t&&t.Math==Math&&t},n=e("object"==typeof globalThis&&globalThis)||e("object"==typeof window&&window)||e("object"==typeof self&&self)||e("object"==typeof t&&t)||function(){return this}()||Function("return this")(),r={},o=function(t){try{return!!t()}catch(t){return!0}},i=!o((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),a={},c={}.propertyIsEnumerable,u=Object.getOwnPropertyDescriptor,f=u&&!c.call({1:2},1);a.f=f?function(t){var e=u(this,t);return!!e&&e.enumerable}:c;var s=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},l={}.toString,p=function(t){return l.call(t).slice(8,-1)},h=p,v="".split,d=o((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==h(t)?v.call(t,""):Object(t)}:Object,y=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},g=d,m=y,b=function(t){return g(m(t))},w=function(t){return"object"==typeof t?null!==t:"function"==typeof t},j=w,x=function(t,e){if(!j(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!j(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!j(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!j(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")},O=y,E=function(t){return Object(O(t))},S=E,T={}.hasOwnProperty,P=function(t,e){return T.call(S(t),e)},_=w,k=n.document,L=_(k)&&_(k.createElement),M=function(t){return L?k.createElement(t):{}},A=M,I=!i&&!o((function(){return 7!=Object.defineProperty(A("div"),"a",{get:function(){return 7}}).a})),R=i,C=a,N=s,F=b,J=x,D=P,$=I,G=Object.getOwnPropertyDescriptor;r.f=R?G:function(t,e){if(t=F(t),e=J(e,!0),$)try{return G(t,e)}catch(t){}if(D(t,e))return N(!C.f.call(t,e),t[e])};var H={},z=w,W=function(t){if(!z(t))throw TypeError(String(t)+" is not an object");return t},q=i,U=I,K=W,Q=x,X=Object.defineProperty;H.f=q?X:function(t,e,n){if(K(t),e=Q(e,!0),K(n),U)try{return X(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t};var Y=H,B=s,V=i?function(t,e,n){return Y.f(t,e,B(1,n))}:function(t,e,n){return t[e]=n,t},Z={exports:{}},tt=n,et=V,nt=function(t,e){try{et(tt,t,e)}catch(n){tt[t]=e}return e},rt=nt,ot=n["__core-js_shared__"]||rt("__core-js_shared__",{}),it=ot,at=Function.toString;"function"!=typeof it.inspectSource&&(it.inspectSource=function(t){return at.call(t)});var ct=it.inspectSource,ut=ct,ft=n.WeakMap,st="function"==typeof ft&&/native code/.test(ut(ft)),lt={exports:{}},pt=ot;(lt.exports=function(t,e){return pt[t]||(pt[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.12.1",mode:"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"});var ht,vt,dt,yt=0,gt=Math.random(),mt=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++yt+gt).toString(36)},bt=lt.exports,wt=mt,jt=bt("keys"),xt=function(t){return jt[t]||(jt[t]=wt(t))},Ot={},Et=st,St=w,Tt=V,Pt=P,_t=ot,kt=xt,Lt=Ot,Mt=n.WeakMap;if(Et||_t.state){var At=_t.state||(_t.state=new Mt),It=At.get,Rt=At.has,Ct=At.set;ht=function(t,e){if(Rt.call(At,t))throw new TypeError("Object already initialized");return e.facade=t,Ct.call(At,t,e),e},vt=function(t){return It.call(At,t)||{}},dt=function(t){return Rt.call(At,t)}}else{var Nt=kt("state");Lt[Nt]=!0,ht=function(t,e){if(Pt(t,Nt))throw new TypeError("Object already initialized");return e.facade=t,Tt(t,Nt,e),e},vt=function(t){return Pt(t,Nt)?t[Nt]:{}},dt=function(t){return Pt(t,Nt)}}var Ft={set:ht,get:vt,has:dt,enforce:function(t){return dt(t)?vt(t):ht(t,{})},getterFor:function(t){return function(e){var n;if(!St(e)||(n=vt(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}},Jt=n,Dt=V,$t=P,Gt=nt,Ht=ct,zt=Ft.get,Wt=Ft.enforce,qt=String(String).split("String");(Z.exports=function(t,e,n,r){var o,i=!!r&&!!r.unsafe,a=!!r&&!!r.enumerable,c=!!r&&!!r.noTargetGet;"function"==typeof n&&("string"!=typeof e||$t(n,"name")||Dt(n,"name",e),(o=Wt(n)).source||(o.source=qt.join("string"==typeof e?e:""))),t!==Jt?(i?!c&&t[e]&&(a=!0):delete t[e],a?t[e]=n:Dt(t,e,n)):a?t[e]=n:Gt(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&zt(this).source||Ht(this)}));var Ut=n,Kt=n,Qt=function(t){return"function"==typeof t?t:void 0},Xt=function(t,e){return arguments.length<2?Qt(Ut[t])||Qt(Kt[t]):Ut[t]&&Ut[t][e]||Kt[t]&&Kt[t][e]},Yt={},Bt=Math.ceil,Vt=Math.floor,Zt=function(t){return isNaN(t=+t)?0:(t>0?Vt:Bt)(t)},te=Zt,ee=Math.min,ne=function(t){return t>0?ee(te(t),9007199254740991):0},re=Zt,oe=Math.max,ie=Math.min,ae=b,ce=ne,ue=function(t,e){var n=re(t);return n<0?oe(n+e,0):ie(n,e)},fe=function(t){return function(e,n,r){var o,i=ae(e),a=ce(i.length),c=ue(r,a);if(t&&n!=n){for(;a>c;)if((o=i[c++])!=o)return!0}else for(;a>c;c++)if((t||c in i)&&i[c]===n)return t||c||0;return!t&&-1}},se={includes:fe(!0),indexOf:fe(!1)},le=P,pe=b,he=se.indexOf,ve=Ot,de=function(t,e){var n,r=pe(t),o=0,i=[];for(n in r)!le(ve,n)&&le(r,n)&&i.push(n);for(;e.length>o;)le(r,n=e[o++])&&(~he(i,n)||i.push(n));return i},ye=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],ge=de,me=ye.concat("length","prototype");Yt.f=Object.getOwnPropertyNames||function(t){return ge(t,me)};var be={};be.f=Object.getOwnPropertySymbols;var we=Yt,je=be,xe=W,Oe=Xt("Reflect","ownKeys")||function(t){var e=we.f(xe(t)),n=je.f;return n?e.concat(n(t)):e},Ee=P,Se=Oe,Te=r,Pe=H,_e=o,ke=/#|\.prototype\./,Le=function(t,e){var n=Ae[Me(t)];return n==Re||n!=Ie&&("function"==typeof e?_e(e):!!e)},Me=Le.normalize=function(t){return String(t).replace(ke,".").toLowerCase()},Ae=Le.data={},Ie=Le.NATIVE="N",Re=Le.POLYFILL="P",Ce=Le,Ne=n,Fe=r.f,Je=V,De=Z.exports,$e=nt,Ge=function(t,e){for(var n=Se(e),r=Pe.f,o=Te.f,i=0;io;)for(var c,u=Ze(arguments[o++]),f=i?Xe(u).concat(i(u)):Xe(u),s=f.length,l=0;s>l;)c=f[l++],Ke&&!a.call(u,c)||(n[c]=u[c]);return n}:tn;function rn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function on(t){for(var e=1;e=0||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}function sn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,c=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return a=t.done,t},e:function(t){c=!0,i=t},f:function(){try{a||null==n.return||n.return()}finally{if(c)throw i}}}}ze({target:"Object",stat:!0,forced:Object.assign!==nn},{assign:nn});!function(t){var e=function(t){var e,n=Object.prototype,r=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,n){return t[e]=n}}function f(t,e,n,r){var o=e&&e.prototype instanceof y?e:y,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(t,e,n){var r=l;return function(o,i){if(r===h)throw new Error("Generator is already running");if(r===v){if("throw"===o)throw i;return L()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var c=S(a,n);if(c){if(c===d)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===l)throw r=v,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=h;var u=s(t,e,n);if("normal"===u.type){if(r=n.done?v:p,u.arg===d)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r=v,n.method="throw",n.arg=u.arg)}}}(t,n,a),i}function s(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=f;var l="suspendedStart",p="suspendedYield",h="executing",v="completed",d={};function y(){}function g(){}function m(){}var b={};b[i]=function(){return this};var w=Object.getPrototypeOf,j=w&&w(w(k([])));j&&j!==n&&r.call(j,i)&&(b=j);var x=m.prototype=y.prototype=Object.create(b);function O(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){function n(o,i,a,c){var u=s(t[o],t,i);if("throw"!==u.type){var f=u.arg,l=f.value;return l&&"object"==typeof l&&r.call(l,"__await")?e.resolve(l.__await).then((function(t){n("next",t,a,c)}),(function(t){n("throw",t,a,c)})):e.resolve(l).then((function(t){f.value=t,a(f)}),(function(t){return n("throw",t,a,c)}))}c(u.arg)}var o;this._invoke=function(t,r){function i(){return new e((function(e,o){n(t,r,e,o)}))}return o=o?o.then(i,i):i()}}function S(t,n){var r=t.iterator[n.method];if(r===e){if(n.delegate=null,"throw"===n.method){if(t.iterator.return&&(n.method="return",n.arg=e,S(t,n),"throw"===n.method))return d;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var o=s(r,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,d;var i=o.arg;return i?i.done?(n[t.resultName]=i.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,d):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,d)}function T(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function P(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function _(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(T,this),this.reset(!0)}function k(t){if(t){var n=t[i];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function n(){for(;++o=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=r.call(a,"catchLoc"),f=r.call(a,"finallyLoc");if(u&&f){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),P(n),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;P(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:k(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),d}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function("r","regeneratorRuntime = r")(e)}}({exports:{}});var pn,hn,vn=Xt("navigator","userAgent")||"",dn=vn,yn=n.process,gn=yn&&yn.versions,mn=gn&&gn.v8;mn?hn=(pn=mn.split("."))[0]<4?1:pn[0]+pn[1]:dn&&(!(pn=dn.match(/Edge\/(\d+)/))||pn[1]>=74)&&(pn=dn.match(/Chrome\/(\d+)/))&&(hn=pn[1]);var bn=hn&&+hn,wn=bn,jn=o,xn=!!Object.getOwnPropertySymbols&&!jn((function(){return!String(Symbol())||!Symbol.sham&&wn&&wn<41})),On=xn&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,En=n,Sn=lt.exports,Tn=P,Pn=mt,_n=xn,kn=On,Ln=Sn("wks"),Mn=En.Symbol,An=kn?Mn:Mn&&Mn.withoutSetter||Pn,In=function(t){return Tn(Ln,t)&&(_n||"string"==typeof Ln[t])||(_n&&Tn(Mn,t)?Ln[t]=Mn[t]:Ln[t]=An("Symbol."+t)),Ln[t]},Rn={};Rn[In("toStringTag")]="z";var Cn="[object z]"===String(Rn),Nn=Cn,Fn=p,Jn=In("toStringTag"),Dn="Arguments"==Fn(function(){return arguments}()),$n=Nn?Fn:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),Jn))?n:Dn?Fn(e):"Object"==(r=Fn(e))&&"function"==typeof e.callee?"Arguments":r},Gn=$n,Hn=Cn?{}.toString:function(){return"[object "+Gn(this)+"]"},zn=Cn,Wn=Z.exports,qn=Hn;zn||Wn(Object.prototype,"toString",qn,{unsafe:!0});var Un=n.Promise,Kn=Z.exports,Qn=w,Xn=W,Yn=function(t){if(!Qn(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t},Bn=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,n={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),e=n instanceof Array}catch(t){}return function(n,r){return Xn(n),Yn(r),e?t.call(n,r):n.__proto__=r,n}}():void 0),Vn=H.f,Zn=P,tr=In("toStringTag"),er=Xt,nr=H,rr=i,or=In("species"),ir=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t},ar={},cr=ar,ur=In("iterator"),fr=Array.prototype,sr=ir,lr=function(t,e,n){if(sr(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}},pr=$n,hr=ar,vr=In("iterator"),dr=W,yr=W,gr=function(t){return void 0!==t&&(cr.Array===t||fr[ur]===t)},mr=ne,br=lr,wr=function(t){if(null!=t)return t[vr]||t["@@iterator"]||hr[pr(t)]},jr=function(t){var e=t.return;if(void 0!==e)return dr(e.call(t)).value},xr=function(t,e){this.stopped=t,this.result=e},Or=In("iterator"),Er=!1;try{var Sr=0,Tr={next:function(){return{done:!!Sr++}},return:function(){Er=!0}};Tr[Or]=function(){return this},Array.from(Tr,(function(){throw 2}))}catch(t){}var Pr,_r,kr,Lr=W,Mr=ir,Ar=In("species"),Ir=Xt("document","documentElement"),Rr=/(?:iphone|ipod|ipad).*applewebkit/i.test(vn),Cr="process"==p(n.process),Nr=n,Fr=o,Jr=lr,Dr=Ir,$r=M,Gr=Rr,Hr=Cr,zr=Nr.location,Wr=Nr.setImmediate,qr=Nr.clearImmediate,Ur=Nr.process,Kr=Nr.MessageChannel,Qr=Nr.Dispatch,Xr=0,Yr={},Br=function(t){if(Yr.hasOwnProperty(t)){var e=Yr[t];delete Yr[t],e()}},Vr=function(t){return function(){Br(t)}},Zr=function(t){Br(t.data)},to=function(t){Nr.postMessage(t+"",zr.protocol+"//"+zr.host)};Wr&&qr||(Wr=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return Yr[++Xr]=function(){("function"==typeof t?t:Function(t)).apply(void 0,e)},Pr(Xr),Xr},qr=function(t){delete Yr[t]},Hr?Pr=function(t){Ur.nextTick(Vr(t))}:Qr&&Qr.now?Pr=function(t){Qr.now(Vr(t))}:Kr&&!Gr?(kr=(_r=new Kr).port2,_r.port1.onmessage=Zr,Pr=Jr(kr.postMessage,kr,1)):Nr.addEventListener&&"function"==typeof postMessage&&!Nr.importScripts&&zr&&"file:"!==zr.protocol&&!Fr(to)?(Pr=to,Nr.addEventListener("message",Zr,!1)):Pr="onreadystatechange"in $r("script")?function(t){Dr.appendChild($r("script")).onreadystatechange=function(){Dr.removeChild(this),Br(t)}}:function(t){setTimeout(Vr(t),0)});var eo,no,ro,oo,io,ao,co,uo,fo={set:Wr,clear:qr},so=/web0s(?!.*chrome)/i.test(vn),lo=n,po=r.f,ho=fo.set,vo=Rr,yo=so,go=Cr,mo=lo.MutationObserver||lo.WebKitMutationObserver,bo=lo.document,wo=lo.process,jo=lo.Promise,xo=po(lo,"queueMicrotask"),Oo=xo&&xo.value;Oo||(eo=function(){var t,e;for(go&&(t=wo.domain)&&t.exit();no;){e=no.fn,no=no.next;try{e()}catch(t){throw no?oo():ro=void 0,t}}ro=void 0,t&&t.enter()},vo||go||yo||!mo||!bo?jo&&jo.resolve?((co=jo.resolve(void 0)).constructor=jo,uo=co.then,oo=function(){uo.call(co,eo)}):oo=go?function(){wo.nextTick(eo)}:function(){ho.call(lo,eo)}:(io=!0,ao=bo.createTextNode(""),new mo(eo).observe(ao,{characterData:!0}),oo=function(){ao.data=io=!io}));var Eo=Oo||function(t){var e={fn:t,next:void 0};ro&&(ro.next=e),no||(no=e,oo()),ro=e},So={},To=ir,Po=function(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r})),this.resolve=To(e),this.reject=To(n)};So.f=function(t){return new Po(t)};var _o,ko,Lo,Mo,Ao=W,Io=w,Ro=So,Co=n,No="object"==typeof window,Fo=ze,Jo=n,Do=Xt,$o=Un,Go=Z.exports,Ho=function(t,e,n){for(var r in e)Kn(t,r,e[r],n);return t},zo=Bn,Wo=function(t,e,n){t&&!Zn(t=n?t:t.prototype,tr)&&Vn(t,tr,{configurable:!0,value:e})},qo=function(t){var e=er(t),n=nr.f;rr&&e&&!e[or]&&n(e,or,{configurable:!0,get:function(){return this}})},Uo=w,Ko=ir,Qo=function(t,e,n){if(!(t instanceof e))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return t},Xo=ct,Yo=function(t,e,n){var r,o,i,a,c,u,f,s=n&&n.that,l=!(!n||!n.AS_ENTRIES),p=!(!n||!n.IS_ITERATOR),h=!(!n||!n.INTERRUPTED),v=br(e,s,1+l+h),d=function(t){return r&&jr(r),new xr(!0,t)},y=function(t){return l?(yr(t),h?v(t[0],t[1],d):v(t[0],t[1])):h?v(t,d):v(t)};if(p)r=t;else{if("function"!=typeof(o=wr(t)))throw TypeError("Target is not iterable");if(gr(o)){for(i=0,a=mr(t.length);a>i;i++)if((c=y(t[i]))&&c instanceof xr)return c;return new xr(!1)}r=o.call(t)}for(u=r.next;!(f=u.call(r)).done;){try{c=y(f.value)}catch(t){throw jr(r),t}if("object"==typeof c&&c&&c instanceof xr)return c}return new xr(!1)},Bo=function(t,e){if(!e&&!Er)return!1;var n=!1;try{var r={};r[Or]=function(){return{next:function(){return{done:n=!0}}}},t(r)}catch(t){}return n},Vo=function(t,e){var n,r=Lr(t).constructor;return void 0===r||null==(n=Lr(r)[Ar])?e:Mr(n)},Zo=fo.set,ti=Eo,ei=function(t,e){if(Ao(t),Io(e)&&e.constructor===t)return e;var n=Ro.f(t);return(0,n.resolve)(e),n.promise},ni=function(t,e){var n=Co.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,e))},ri=So,oi=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}},ii=Ft,ai=Ce,ci=No,ui=Cr,fi=bn,si=In("species"),li="Promise",pi=ii.get,hi=ii.set,vi=ii.getterFor(li),di=$o&&$o.prototype,yi=$o,gi=di,mi=Jo.TypeError,bi=Jo.document,wi=Jo.process,ji=ri.f,xi=ji,Oi=!!(bi&&bi.createEvent&&Jo.dispatchEvent),Ei="function"==typeof PromiseRejectionEvent,Si=!1,Ti=ai(li,(function(){var t=Xo(yi)!==String(yi);if(!t&&66===fi)return!0;if(fi>=51&&/native code/.test(yi))return!1;var e=new yi((function(t){t(1)})),n=function(t){t((function(){}),(function(){}))};return(e.constructor={})[si]=n,!(Si=e.then((function(){}))instanceof n)||!t&&ci&&!Ei})),Pi=Ti||!Bo((function(t){yi.all(t).catch((function(){}))})),_i=function(t){var e;return!(!Uo(t)||"function"!=typeof(e=t.then))&&e},ki=function(t,e){if(!t.notified){t.notified=!0;var n=t.reactions;ti((function(){for(var r=t.value,o=1==t.state,i=0;n.length>i;){var a,c,u,f=n[i++],s=o?f.ok:f.fail,l=f.resolve,p=f.reject,h=f.domain;try{s?(o||(2===t.rejection&&Ii(t),t.rejection=1),!0===s?a=r:(h&&h.enter(),a=s(r),h&&(h.exit(),u=!0)),a===f.promise?p(mi("Promise-chain cycle")):(c=_i(a))?c.call(a,l,p):l(a)):p(r)}catch(t){h&&!u&&h.exit(),p(t)}}t.reactions=[],t.notified=!1,e&&!t.rejection&&Mi(t)}))}},Li=function(t,e,n){var r,o;Oi?((r=bi.createEvent("Event")).promise=e,r.reason=n,r.initEvent(t,!1,!0),Jo.dispatchEvent(r)):r={promise:e,reason:n},!Ei&&(o=Jo["on"+t])?o(r):"unhandledrejection"===t&&ni("Unhandled promise rejection",n)},Mi=function(t){Zo.call(Jo,(function(){var e,n=t.facade,r=t.value;if(Ai(t)&&(e=oi((function(){ui?wi.emit("unhandledRejection",r,n):Li("unhandledrejection",n,r)})),t.rejection=ui||Ai(t)?2:1,e.error))throw e.value}))},Ai=function(t){return 1!==t.rejection&&!t.parent},Ii=function(t){Zo.call(Jo,(function(){var e=t.facade;ui?wi.emit("rejectionHandled",e):Li("rejectionhandled",e,t.value)}))},Ri=function(t,e,n){return function(r){t(e,r,n)}},Ci=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,ki(t,!0))},Ni=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw mi("Promise can't be resolved itself");var r=_i(e);r?ti((function(){var n={done:!1};try{r.call(e,Ri(Ni,n,t),Ri(Ci,n,t))}catch(e){Ci(n,e,t)}})):(t.value=e,t.state=1,ki(t,!1))}catch(e){Ci({done:!1},e,t)}}};if(Ti&&(gi=(yi=function(t){Qo(this,yi,li),Ko(t),_o.call(this);var e=pi(this);try{t(Ri(Ni,e),Ri(Ci,e))}catch(t){Ci(e,t)}}).prototype,(_o=function(t){hi(this,{type:li,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=Ho(gi,{then:function(t,e){var n=vi(this),r=ji(Vo(this,yi));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=ui?wi.domain:void 0,n.parent=!0,n.reactions.push(r),0!=n.state&&ki(n,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),ko=function(){var t=new _o,e=pi(t);this.promise=t,this.resolve=Ri(Ni,e),this.reject=Ri(Ci,e)},ri.f=ji=function(t){return t===yi||t===Lo?new ko(t):xi(t)},"function"==typeof $o&&di!==Object.prototype)){Mo=di.then,Si||(Go(di,"then",(function(t,e){var n=this;return new yi((function(t,e){Mo.call(n,t,e)})).then(t,e)}),{unsafe:!0}),Go(di,"catch",gi.catch,{unsafe:!0}));try{delete di.constructor}catch(t){}zo&&zo(di,gi)}Fo({global:!0,wrap:!0,forced:Ti},{Promise:yi}),Wo(yi,li,!1),qo(li),Lo=Do(li),Fo({target:li,stat:!0,forced:Ti},{reject:function(t){var e=ji(this);return e.reject.call(void 0,t),e.promise}}),Fo({target:li,stat:!0,forced:Ti},{resolve:function(t){return ei(this,t)}}),Fo({target:li,stat:!0,forced:Pi},{all:function(t){var e=this,n=ji(e),r=n.resolve,o=n.reject,i=oi((function(){var n=Ko(e.resolve),i=[],a=0,c=1;Yo(t,(function(t){var u=a++,f=!1;i.push(void 0),c++,n.call(e,t).then((function(t){f||(f=!0,i[u]=t,--c||r(i))}),o)})),--c||r(i)}));return i.error&&o(i.value),n.promise},race:function(t){var e=this,n=ji(e),r=n.reject,o=oi((function(){var o=Ko(e.resolve);Yo(t,(function(t){o.call(e,t).then(n.resolve,r)}))}));return o.error&&r(o.value),n.promise}});var Fi,Ji=H,Di=W,$i=Ue,Gi=i?Object.defineProperties:function(t,e){Di(t);for(var n,r=$i(e),o=r.length,i=0;o>i;)Ji.f(t,n=r[i++],e[n]);return t},Hi=W,zi=Gi,Wi=ye,qi=Ot,Ui=Ir,Ki=M,Qi=xt("IE_PROTO"),Xi=function(){},Yi=function(t){return" + +``` + +### npm + +Download and install the package in your project: + +`npm install --save reveal.js-menu` + +Add the plugin to your presentation, as below. + +```javascript + + +``` + +### Manual + +Copy this repository into the plugins folder of your reveal.js presentation, ie `plugins/menu`. + +Add the plugin to the dependencies in your presentation, as below. + +```javascript + + +``` + +## Configuration + +You can configure the menu for your presentation by providing a `menu` option in the reveal.js initialization options. Note that all config values are optional and will default as specified below. + +```javascript +Reveal.initialize({ + // ... + + menu: { + // Specifies which side of the presentation the menu will + // be shown. Use 'left' or 'right'. + side: 'left', + + // Specifies the width of the menu. + // Can be one of the following: + // 'normal', 'wide', 'third', 'half', 'full', or + // any valid css length value + width: 'normal', + + // Add slide numbers to the titles in the slide list. + // Use 'true' or format string (same as reveal.js slide numbers) + numbers: false, + + // Specifies which slide elements will be used for generating + // the slide titles in the menu. The default selects the first + // heading element found in the slide, but you can specify any + // valid css selector and the text from the first matching + // element will be used. + // Note: that a section data-menu-title attribute or an element + // with a menu-title class will take precedence over this option + titleSelector: 'h1, h2, h3, h4, h5, h6', + + // If slides do not have a matching title, attempt to use the + // start of the text content as the title instead + useTextContentForMissingTitles: false, + + // Hide slides from the menu that do not have a title. + // Set to 'true' to only list slides with titles. + hideMissingTitles: false, + + // Adds markers to the slide titles to indicate the + // progress through the presentation. Set to 'false' + // to hide the markers. + markers: true, + + // Specify custom panels to be included in the menu, by + // providing an array of objects with 'title', 'icon' + // properties, and either a 'src' or 'content' property. + custom: false, + + // Specifies the themes that will be available in the themes + // menu panel. Set to 'true' to show the themes menu panel + // with the default themes list. Alternatively, provide an + // array to specify the themes to make available in the + // themes menu panel, for example... + // + // [ + // { name: 'Black', theme: 'dist/theme/black.css' }, + // { name: 'White', theme: 'dist/theme/white.css' }, + // { name: 'League', theme: 'dist/theme/league.css' }, + // { + // name: 'Dark', + // theme: 'lib/reveal.js/dist/theme/black.css', + // highlightTheme: 'lib/reveal.js/plugin/highlight/monokai.css' + // }, + // { + // name: 'Code: Zenburn', + // highlightTheme: 'lib/reveal.js/plugin/highlight/zenburn.css' + // } + // ] + // + // Note: specifying highlightTheme without a theme will + // change the code highlight theme while leaving the + // presentation theme unchanged. + themes: false, + + // Specifies the path to the default theme files. If your + // presentation uses a different path to the standard reveal + // layout then you need to provide this option, but only + // when 'themes' is set to 'true'. If you provide your own + // list of themes or 'themes' is set to 'false' the + // 'themesPath' option is ignored. + themesPath: 'dist/theme/', + + // Specifies if the transitions menu panel will be shown. + // Set to 'true' to show the transitions menu panel with + // the default transitions list. Alternatively, provide an + // array to specify the transitions to make available in + // the transitions panel, for example... + // ['None', 'Fade', 'Slide'] + transitions: false, + + // Adds a menu button to the slides to open the menu panel. + // Set to 'false' to hide the button. + openButton: true, + + // If 'true' allows the slide number in the presentation to + // open the menu panel. The reveal.js slideNumber option must + // be displayed for this to take effect + openSlideNumber: false, + + // If true allows the user to open and navigate the menu using + // the keyboard. Standard keyboard interaction with reveal + // will be disabled while the menu is open. + keyboard: true, + + // Normally the menu will close on user actions such as + // selecting a menu item, or clicking the presentation area. + // If 'true', the sticky option will leave the menu open + // until it is explicitly closed, that is, using the close + // button or pressing the ESC or m key (when the keyboard + // interaction option is enabled). + sticky: false, + + // If 'true' standard menu items will be automatically opened + // when navigating using the keyboard. Note: this only takes + // effect when both the 'keyboard' and 'sticky' options are enabled. + autoOpen: true, + + // If 'true' the menu will not be created until it is explicitly + // requested by calling RevealMenu.init(). Note this will delay + // the creation of all menu panels, including custom panels, and + // the menu button. + delayInit: false, + + // If 'true' the menu will be shown when the menu is initialised. + openOnInit: false, + + // By default the menu will load it's own font-awesome library + // icons. If your presentation needs to load a different + // font-awesome library the 'loadIcons' option can be set to false + // and the menu will not attempt to load the font-awesome library. + loadIcons: true + } +}); +``` + +### Themes Stylesheet + +If you are using the themes panel you need to ensure the theme stylesheet in the presentation uses the `id="theme"` attribute. For example... + +```html + +``` + +If your themes configuration includes code highlight themes you need to ensure the highlights theme stylesheet in the presentation uses the `id="highlight-theme"` attribute. For example... + +```html + +``` + +## Slide Titles + +The slide titles used in the menu can be supplied explicitly or are taken directly from the presentation, using the following rules... + +###### 1. The section's `data-menu-title` attribute. + +If the slide's section element contains a `data-menu-title` attribute this will be used for the slide title in the menu. For example... + +```html +
    +

    Title

    +

    ...

    +
    +``` + +###### 2. Any element with the class `menu-title`. + +If the slide's section contains an element with the class `menu-title` then the element's text will be used for the title. The first such element found will be used if there are more than one. Note the element need not be displayed to be used. For example... + +```html +
    +

    Title

    + +

    ...

    +
    +``` + +###### 3. The first heading found or a custom element selector + +The `titleSelector` option can be used to customise the elements that will be used to generate the slide titles in the menu. The default option selects the first heading element found in the slide. For example... + +```html +
    +

    This will be the slide title in the menu

    +

    Title

    +

    ...

    +
    +``` + +Any valid CSS selector should work but note the selector will only be applied to elements contained within the slide section. You could use the `'h1'` selector to only use level 1 headings or `'p'` to use the first paragraph element. For example, `titleSelector: 'p.lead'` would be used like this... + +```html +
    +

    Title

    +

    This will be the slide title in the menu

    +

    ...

    +
    +``` + +Using `titleSelector: ''` will ignore all elements and no title will be provided, unless the slide section contains a `data-menu-title` attribute or an element with the `menu-title` class. + +###### 4. No title is provided + +If no title can be found using the above methods, a default title incorporating the slide number will be used. For example, the following would result in a slide title in the format of 'Slide 12'... + +```html +
    +

    ...

    +
    +``` + +If the `hideMissingTitles` option is set to `true`, however, the slide will not be listed in the menu. + +## Custom Menu Panels + +Additional custom panels can be added the menu using the `custom` option. + +```javascript +Reveal.initialize({ + // ... + + menu: { + // ... + + custom: [ + { + title: 'Links', + icon: '', + src: 'links.html' + }, + { + title: 'About', + icon: '', + content: '

    This slidedeck is created with reveal.js

    ' + } + ] + } +}); +``` + +`title` and `icon` are used for the toolbar buttons at the top of the menu. There are two approaches you can use to provide content for the panels... + +- You can provide a URL in `src` to load html from another file. +- Alternatively, you can provide html in `content` and this will be added to the custom panel. + +###### Custom slide menu items + +You can provide menu items in your custom panels using the following format. This allows you to define your own navigation links for your presentation. + +```html +

    Links

    + +``` + +You are not limited to linking to presentation slides. You can provide any link you wish. + +```html +

    External Links

    + +``` + +Using menu items enables keyboard navigation of your links as with the other panels. However, you don't have to use menu items for your links. You can simply provide standard links and unordered lists in your html. Notice you can provide your custom menu items mixed with other html if you wish. + +## Ready Event + +A 'menu-ready' event is fired when reveal.js-menu has loaded all non-async dependencies and is ready to start navigating. + +```javascript +Reveal.addEventListener('menu-ready', function (event) { + // your code +}); +``` + +## API + +The `RevealMenu` object exposes a JavaScript API for controlling the menu: + +| Function | Description | +| ----------------------- | ------------------------------------------------------------------------------------------------------------ | +| toggle(event) | Toggles the open state of the menu, ie open if it is closed, and close if it is open | +| openMenu(event) | Opens the menu | +| closeMenu(event, force) | Closes the menu. To force the menu to close (ie when `sticky` option is `true`) call `closeMenu(null, true)` | +| openPanel(event, ref) | Opens the menu to a specific panel, passing the name of the panel or the panel element itself | +| isOpen() | Returns true if the menu is open | +| initialiseMenu() | Initialises the menu if it has not already been initialised. Used in conjunction with the `delayInit` option | +| isMenuInitialised() | Returns true if the menu has been initialised | + +## Compatibility + +reveal.js-menu v2.0 is built for reveal.js v4. It will not work with reveal.js v3. If you require a menu for reveal.js v3 you will need to install reveal.js-menu v1.2.0. + +v2.0 also introduces API changes that are not backwards compatible. `init()` has been renamed to `initMenu()` to deconflict with the reveal.js v4 plugin API. `isInit()` has also been changed to `isMenuInitialised()`. + +## License + +MIT licensed + +Copyright (C) 2020 Greg Denehy diff --git a/docs/1_Fundamentals/plugin/menu/bower.json b/docs/1_Fundamentals/plugin/menu/bower.json new file mode 100644 index 0000000..df8e88e --- /dev/null +++ b/docs/1_Fundamentals/plugin/menu/bower.json @@ -0,0 +1,10 @@ +{ + "name": "reveal.js-menu", + "version": "2.1.0", + "homepage": "https://denehyg.github.io/reveal.js-menu", + "authors": ["Greg Denehy"], + "description": "A slideout menu for navigating reveal.js presentations", + "keywords": ["reveal", "menu"], + "license": "MIT, Copyright (C) 2020 Greg Denehy", + "ignore": ["**/.*", "node_modules", "bower_components", "test", "tests"] +} diff --git a/docs/1_Fundamentals/plugin/menu/gulpfile.js b/docs/1_Fundamentals/plugin/menu/gulpfile.js new file mode 100644 index 0000000..145736e --- /dev/null +++ b/docs/1_Fundamentals/plugin/menu/gulpfile.js @@ -0,0 +1,99 @@ +const pkg = require('./package.json'); + +const { rollup } = require('rollup'); +const { terser } = require('rollup-plugin-terser'); +const babel = require('@rollup/plugin-babel').default; +const commonjs = require('@rollup/plugin-commonjs'); +const resolve = require('@rollup/plugin-node-resolve').default; + +const gulp = require('gulp'); + +const banner = `/*! +* reveal.js-menu ${pkg.version} +* ${pkg.homepage} +* MIT licensed +* +* Copyright (C) 2016 Greg Denehy +*/\n`; + +const babelConfig = { + babelHelpers: 'bundled', + ignore: ['node_modules'], + compact: false, + extensions: ['.js', '.html'], + plugins: ['transform-html-import-to-string'], + presets: [ + [ + '@babel/preset-env', + { + corejs: 3, + useBuiltIns: 'usage', + modules: false + } + ] + ] +}; + +// Our ES module bundle only targets newer browsers with +// module support. Browsers are targeted explicitly instead +// of using the "esmodule: true" target since that leads to +// polyfilling older browsers and a larger bundle. +const babelConfigESM = JSON.parse(JSON.stringify(babelConfig)); +babelConfigESM.presets[0][1].targets = { + browsers: [ + 'last 2 Chrome versions', + 'not Chrome < 60', + 'last 2 Safari versions', + 'not Safari < 10.1', + 'last 2 iOS versions', + 'not iOS < 10.3', + 'last 2 Firefox versions', + 'not Firefox < 60', + 'last 2 Edge versions', + 'not Edge < 16' + ] +}; + +let cache = {}; + +// Creates a UMD and ES module bundle for each plugin +gulp.task('build', () => { + return Promise.all( + [ + { + name: 'RevealMenu', + input: './plugin.js', + output: './menu' + } + ].map(plugin => { + return rollup({ + cache: cache[plugin.input], + input: plugin.input, + plugins: [ + resolve(), + commonjs(), + babel({ + ...babelConfig, + ignore: [/node_modules\/.*/] + }), + terser() + ] + }).then(bundle => { + cache[plugin.input] = bundle.cache; + bundle.write({ + file: plugin.output + '.esm.js', + name: plugin.name, + format: 'es' + }); + + bundle.write({ + file: plugin.output + '.js', + name: plugin.name, + format: 'umd' + }); + }); + }) + ); +}); + +gulp.task('default', gulp.series('build')); diff --git a/docs/1_Fundamentals/plugin/menu/menu.css b/docs/1_Fundamentals/plugin/menu/menu.css new file mode 100644 index 0000000..5a300fd --- /dev/null +++ b/docs/1_Fundamentals/plugin/menu/menu.css @@ -0,0 +1,346 @@ +.slide-menu-wrapper { + font-family: 'Source Sans Pro', Helvetica, sans-serif; +} + +.slide-menu-wrapper .slide-menu { + background-color: #333; + z-index: 200; + position: fixed; + top: 0; + width: 300px; + height: 100%; + /*overflow-y: scroll;*/ + transition: transform 0.3s; + font-size: 16px; + font-weight: normal; +} + +.slide-menu-wrapper .slide-menu.slide-menu--wide { + width: 500px; +} + +.slide-menu-wrapper .slide-menu.slide-menu--third { + width: 33%; +} + +.slide-menu-wrapper .slide-menu.slide-menu--half { + width: 50%; +} + +.slide-menu-wrapper .slide-menu.slide-menu--full { + width: 95%; +} + +/* + * Slides menu + */ + +.slide-menu-wrapper .slide-menu-items { + margin: 0; + padding: 0; + width: 100%; + border-bottom: solid 1px #555; +} + +.slide-menu-wrapper .slide-menu-item, +.slide-menu-wrapper .slide-menu-item-vertical { + display: block; + text-align: left; + padding: 10px 18px; + color: #aaa; + cursor: pointer; +} + +.slide-menu-wrapper .slide-menu-item-vertical { + padding-left: 30px; +} + +.slide-menu-wrapper .slide-menu--wide .slide-menu-item-vertical, +.slide-menu-wrapper .slide-menu--third .slide-menu-item-vertical, +.slide-menu-wrapper .slide-menu--half .slide-menu-item-vertical, +.slide-menu-wrapper .slide-menu--full .slide-menu-item-vertical, +.slide-menu-wrapper .slide-menu--custom .slide-menu-item-vertical { + padding-left: 50px; +} + +.slide-menu-wrapper .slide-menu-item { + border-top: solid 1px #555; +} + +.slide-menu-wrapper .active-menu-panel li.selected { + background-color: #222; + color: white; +} + +.slide-menu-wrapper .active-menu-panel li.active { + color: #eee; +} + +.slide-menu-wrapper .slide-menu-item.no-title .slide-menu-item-title, +.slide-menu-wrapper .slide-menu-item-vertical.no-title .slide-menu-item-title { + font-style: italic; +} + +.slide-menu-wrapper .slide-menu-item-number { + color: #999; + padding-right: 6px; +} + +.slide-menu-wrapper .slide-menu-item i.far, +.slide-menu-wrapper .slide-menu-item i.fas, +.slide-menu-wrapper .slide-menu-item-vertical i.far, +.slide-menu-wrapper .slide-menu-item-vertical i.fas, +.slide-menu-wrapper .slide-menu-item svg.svg-inline--fa, +.slide-menu-wrapper .slide-menu-item-vertical svg.svg-inline--fa { + padding-right: 12px; + display: none; +} + +.slide-menu-wrapper .slide-menu-item.past i.fas.past, +.slide-menu-wrapper .slide-menu-item-vertical.past i.fas.past, +.slide-menu-wrapper .slide-menu-item.active i.fas.active, +.slide-menu-wrapper .slide-menu-item-vertical.active i.fas.active, +.slide-menu-wrapper .slide-menu-item.future i.far.future, +.slide-menu-wrapper .slide-menu-item-vertical.future i.far.future, +.slide-menu-wrapper .slide-menu-item.past svg.svg-inline--fa.past, +.slide-menu-wrapper .slide-menu-item-vertical.past svg.svg-inline--fa.past, +.slide-menu-wrapper .slide-menu-item.active svg.svg-inline--fa.active, +.slide-menu-wrapper .slide-menu-item-vertical.active svg.svg-inline--fa.active, +.slide-menu-wrapper .slide-menu-item.future svg.svg-inline--fa.future, +.slide-menu-wrapper .slide-menu-item-vertical.future svg.svg-inline--fa.future { + display: inline-block; +} + +.slide-menu-wrapper .slide-menu-item.past i.fas.past, +.slide-menu-wrapper .slide-menu-item-vertical.past i.fas.past, +.slide-menu-wrapper .slide-menu-item.future i.far.future, +.slide-menu-wrapper .slide-menu-item-vertical.future i.far.future, +.slide-menu-wrapper .slide-menu-item.past svg.svg-inline--fa.past, +.slide-menu-wrapper .slide-menu-item-vertical.past svg.svg-inline--fa.past, +.slide-menu-wrapper .slide-menu-item.future svg.svg-inline--fa.future, +.slide-menu-wrapper .slide-menu-item-vertical.future svg.svg-inline--fa.future { + opacity: 0.4; +} + +.slide-menu-wrapper .slide-menu-item.active i.fas.active, +.slide-menu-wrapper .slide-menu-item-vertical.active i.fas.active, +.slide-menu-wrapper .slide-menu-item.active svg.svg-inline--fa.active, +.slide-menu-wrapper .slide-menu-item-vertical.active svg.svg-inline--fa.active { + opacity: 0.8; +} + +.slide-menu-wrapper .slide-menu--left { + left: 0; + -webkit-transform: translateX(-100%); + -ms-transform: translateX(-100%); + transform: translateX(-100%); +} + +.slide-menu-wrapper .slide-menu--left.active { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); +} + +.slide-menu-wrapper .slide-menu--right { + right: 0; + -webkit-transform: translateX(100%); + -ms-transform: translateX(100%); + transform: translateX(100%); +} + +.slide-menu-wrapper .slide-menu--right.active { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); +} + +.slide-menu-wrapper { + transition: transform 0.3s; +} + +/* + * Toolbar + */ +.slide-menu-wrapper .slide-menu-toolbar { + height: 60px; + width: 100%; + font-size: 12px; + display: table; + table-layout: fixed; /* ensures equal width */ + margin: 0; + padding: 0; + border-bottom: solid 2px #666; +} + +.slide-menu-wrapper .slide-menu-toolbar > li { + display: table-cell; + line-height: 150%; + text-align: center; + vertical-align: middle; + cursor: pointer; + color: #aaa; + border-radius: 3px; +} + +.slide-menu-wrapper .slide-menu-toolbar > li.toolbar-panel-button i, +.slide-menu-wrapper + .slide-menu-toolbar + > li.toolbar-panel-button + svg.svg-inline--fa { + font-size: 1.7em; +} + +.slide-menu-wrapper .slide-menu-toolbar > li.active-toolbar-button { + color: white; + text-shadow: 0 1px black; + text-decoration: underline; +} + +.slide-menu-toolbar > li.toolbar-panel-button:hover { + color: white; +} + +.slide-menu-toolbar + > li.toolbar-panel-button:hover + span.slide-menu-toolbar-label, +.slide-menu-wrapper + .slide-menu-toolbar + > li.active-toolbar-button + span.slide-menu-toolbar-label { + visibility: visible; +} + +/* + * Panels + */ +.slide-menu-wrapper .slide-menu-panel { + position: absolute; + width: 100%; + visibility: hidden; + height: calc(100% - 60px); + overflow-x: hidden; + overflow-y: auto; + color: #aaa; +} + +.slide-menu-wrapper .slide-menu-panel.active-menu-panel { + visibility: visible; +} + +.slide-menu-wrapper .slide-menu-panel h1, +.slide-menu-wrapper .slide-menu-panel h2, +.slide-menu-wrapper .slide-menu-panel h3, +.slide-menu-wrapper .slide-menu-panel h4, +.slide-menu-wrapper .slide-menu-panel h5, +.slide-menu-wrapper .slide-menu-panel h6 { + margin: 20px 0 10px 0; + color: #fff; + line-height: 1.2; + letter-spacing: normal; + text-shadow: none; +} + +.slide-menu-wrapper .slide-menu-panel h1 { + font-size: 1.6em; +} +.slide-menu-wrapper .slide-menu-panel h2 { + font-size: 1.4em; +} +.slide-menu-wrapper .slide-menu-panel h3 { + font-size: 1.3em; +} +.slide-menu-wrapper .slide-menu-panel h4 { + font-size: 1.1em; +} +.slide-menu-wrapper .slide-menu-panel h5 { + font-size: 1em; +} +.slide-menu-wrapper .slide-menu-panel h6 { + font-size: 0.9em; +} + +.slide-menu-wrapper .slide-menu-panel p { + margin: 10px 0 5px 0; +} + +.slide-menu-wrapper .slide-menu-panel a { + color: #ccc; + text-decoration: underline; +} + +.slide-menu-wrapper .slide-menu-panel a:hover { + color: white; +} + +.slide-menu-wrapper .slide-menu-item a { + text-decoration: none; +} + +.slide-menu-wrapper .slide-menu-custom-panel { + width: calc(100% - 20px); + padding-left: 10px; + padding-right: 10px; +} + +.slide-menu-wrapper .slide-menu-custom-panel .slide-menu-items { + width: calc(100% + 20px); + margin-left: -10px; + margin-right: 10px; +} + +/* + * Theme and Transitions buttons + */ + +.slide-menu-wrapper div[data-panel='Themes'] li, +.slide-menu-wrapper div[data-panel='Transitions'] li { + display: block; + text-align: left; + cursor: pointer; + color: #848484; +} + +/* + * Menu controls + */ +.reveal .slide-menu-button { + position: fixed; + left: 30px; + bottom: 30px; + z-index: 30; + font-size: 24px; +} + +/* + * Menu overlay + */ + +.slide-menu-wrapper .slide-menu-overlay { + position: fixed; + z-index: 199; + top: 0; + left: 0; + overflow: hidden; + width: 0; + height: 0; + background-color: #000; + opacity: 0; + transition: opacity 0.3s, width 0s 0.3s, height 0s 0.3s; +} + +.slide-menu-wrapper .slide-menu-overlay.active { + width: 100%; + height: 100%; + opacity: 0.7; + transition: opacity 0.3s; +} + +/* + * Hide menu for pdf printing + */ +body.print-pdf .slide-menu-wrapper .slide-menu, +body.print-pdf .reveal .slide-menu-button, +body.print-pdf .slide-menu-wrapper .slide-menu-overlay { + display: none; +} diff --git a/docs/1_Fundamentals/plugin/menu/menu.esm.js b/docs/1_Fundamentals/plugin/menu/menu.esm.js new file mode 100644 index 0000000..e58b5d2 --- /dev/null +++ b/docs/1_Fundamentals/plugin/menu/menu.esm.js @@ -0,0 +1 @@ +var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t,n){return e(n={path:t,exports:{},require:function(e,t){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==t&&n.path)}},n.exports),n.exports}var n=function(e){return e&&e.Math==Math&&e},i=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||Function("return this")(),r=function(e){try{return!!e()}catch(e){return!0}},a=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),o={}.propertyIsEnumerable,s=Object.getOwnPropertyDescriptor,l={f:s&&!o.call({1:2},1)?function(e){var t=s(this,e);return!!t&&t.enumerable}:o},c=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},u={}.toString,f=function(e){return u.call(e).slice(8,-1)},d="".split,p=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==f(e)?d.call(e,""):Object(e)}:Object,h=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},m=function(e){return p(h(e))},v=function(e){return"object"==typeof e?null!==e:"function"==typeof e},g=function(e,t){if(!v(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!v(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!v(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!v(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},y={}.hasOwnProperty,b=function(e,t){return y.call(e,t)},S=i.document,E=v(S)&&v(S.createElement),x=!a&&!r((function(){return 7!=Object.defineProperty((e="div",E?S.createElement(e):{}),"a",{get:function(){return 7}}).a;var e})),w=Object.getOwnPropertyDescriptor,L={f:a?w:function(e,t){if(e=m(e),t=g(t,!0),x)try{return w(e,t)}catch(e){}if(b(e,t))return c(!l.f.call(e,t),e[t])}},T=function(e){if(!v(e))throw TypeError(String(e)+" is not an object");return e},C=Object.defineProperty,O={f:a?C:function(e,t,n){if(T(e),t=g(t,!0),T(n),x)try{return C(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},A=a?function(e,t,n){return O.f(e,t,c(1,n))}:function(e,t,n){return e[t]=n,e},k=function(e,t){try{A(i,e,t)}catch(n){i[e]=t}return t},I=i["__core-js_shared__"]||k("__core-js_shared__",{}),P=Function.toString;"function"!=typeof I.inspectSource&&(I.inspectSource=function(e){return P.call(e)});var M,N,R,j,_=I.inspectSource,F=i.WeakMap,W="function"==typeof F&&/native code/.test(_(F)),H=t((function(e){(e.exports=function(e,t){return I[e]||(I[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.6.5",mode:"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})})),$=0,D=Math.random(),B=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++$+D).toString(36)},q=H("keys"),U={},G=i.WeakMap;if(W){var V=new G,K=V.get,z=V.has,X=V.set;M=function(e,t){return X.call(V,e,t),t},N=function(e){return K.call(V,e)||{}},R=function(e){return z.call(V,e)}}else{var Y=q[j="state"]||(q[j]=B(j));U[Y]=!0,M=function(e,t){return A(e,Y,t),t},N=function(e){return b(e,Y)?e[Y]:{}},R=function(e){return b(e,Y)}}var J={set:M,get:N,has:R,enforce:function(e){return R(e)?N(e):M(e,{})},getterFor:function(e){return function(t){var n;if(!v(t)||(n=N(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}},Z=t((function(e){var t=J.get,n=J.enforce,r=String(String).split("String");(e.exports=function(e,t,a,o){var s=!!o&&!!o.unsafe,l=!!o&&!!o.enumerable,c=!!o&&!!o.noTargetGet;"function"==typeof a&&("string"!=typeof t||b(a,"name")||A(a,"name",t),n(a).source=r.join("string"==typeof t?t:"")),e!==i?(s?!c&&e[t]&&(l=!0):delete e[t],l?e[t]=a:A(e,t,a)):l?e[t]=a:k(t,a)})(Function.prototype,"toString",(function(){return"function"==typeof this&&t(this).source||_(this)}))})),Q=i,ee=function(e){return"function"==typeof e?e:void 0},te=function(e,t){return arguments.length<2?ee(Q[e])||ee(i[e]):Q[e]&&Q[e][t]||i[e]&&i[e][t]},ne=Math.ceil,ie=Math.floor,re=function(e){return isNaN(e=+e)?0:(e>0?ie:ne)(e)},ae=Math.min,oe=function(e){return e>0?ae(re(e),9007199254740991):0},se=Math.max,le=Math.min,ce=function(e,t){var n=re(e);return n<0?se(n+t,0):le(n,t)},ue=function(e){return function(t,n,i){var r,a=m(t),o=oe(a.length),s=ce(i,o);if(e&&n!=n){for(;o>s;)if((r=a[s++])!=r)return!0}else for(;o>s;s++)if((e||s in a)&&a[s]===n)return e||s||0;return!e&&-1}},fe={includes:ue(!0),indexOf:ue(!1)},de=fe.indexOf,pe=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"].concat("length","prototype"),he={f:Object.getOwnPropertyNames||function(e){return function(e,t){var n,i=m(e),r=0,a=[];for(n in i)!b(U,n)&&b(i,n)&&a.push(n);for(;t.length>r;)b(i,n=t[r++])&&(~de(a,n)||a.push(n));return a}(e,pe)}},me={f:Object.getOwnPropertySymbols},ve=te("Reflect","ownKeys")||function(e){var t=he.f(T(e)),n=me.f;return n?t.concat(n(e)):t},ge=function(e,t){for(var n=ve(t),i=O.f,r=L.f,a=0;ay;y++)if((o||y in m)&&(d=v(f=m[y],y,h),e))if(t)S[y]=d;else if(d)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:We.call(S,f)}else if(r)return!1;return a?-1:i||r?r:S}},$e={forEach:He(0),map:He(1),filter:He(2),some:He(3),every:He(4),find:He(5),findIndex:He(6)},De=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){throw 1},1)}))},Be=Object.defineProperty,qe={},Ue=function(e){throw e},Ge=function(e,t){if(b(qe,e))return qe[e];t||(t={});var n=[][e],i=!!b(t,"ACCESSORS")&&t.ACCESSORS,o=b(t,0)?t[0]:Ue,s=b(t,1)?t[1]:void 0;return qe[e]=!!n&&!r((function(){if(i&&!a)return!0;var e={length:-1};i?Be(e,1,{enumerable:!0,get:Ue}):e[1]=1,n.call(e,o,s)}))},Ve=$e.every,Ke=De("every"),ze=Ge("every");Ce({target:"Array",proto:!0,forced:!Ke||!ze},{every:function(e){return Ve(this,e,arguments.length>1?arguments[1]:void 0)}});var Xe,Ye,Je=te("navigator","userAgent")||"",Ze=i.process,Qe=Ze&&Ze.versions,et=Qe&&Qe.v8;et?Ye=(Xe=et.split("."))[0]+Xe[1]:Je&&(!(Xe=Je.match(/Edge\/(\d+)/))||Xe[1]>=74)&&(Xe=Je.match(/Chrome\/(\d+)/))&&(Ye=Xe[1]);var tt=Ye&&+Ye,nt=je("species"),it=function(e){return tt>=51||!r((function(){var t=[];return(t.constructor={})[nt]=function(){return{foo:1}},1!==t[e](Boolean).foo}))},rt=$e.filter,at=it("filter"),ot=Ge("filter");Ce({target:"Array",proto:!0,forced:!at||!ot},{filter:function(e){return rt(this,e,arguments.length>1?arguments[1]:void 0)}});var st=$e.forEach,lt=De("forEach"),ct=Ge("forEach"),ut=lt&&ct?[].forEach:function(e){return st(this,e,arguments.length>1?arguments[1]:void 0)};Ce({target:"Array",proto:!0,forced:[].forEach!=ut},{forEach:ut});var ft=fe.indexOf,dt=[].indexOf,pt=!!dt&&1/[1].indexOf(1,-0)<0,ht=De("indexOf"),mt=Ge("indexOf",{ACCESSORS:!0,1:0});Ce({target:"Array",proto:!0,forced:pt||!ht||!mt},{indexOf:function(e){return pt?dt.apply(this,arguments)||0:ft(this,e,arguments.length>1?arguments[1]:void 0)}}),Ce({target:"Array",stat:!0},{isArray:ke});var vt=[].join,gt=p!=Object,yt=De("join",",");Ce({target:"Array",proto:!0,forced:gt||!yt},{join:function(e){return vt.call(m(this),void 0===e?",":e)}});var bt=Math.min,St=[].lastIndexOf,Et=!!St&&1/[1].lastIndexOf(1,-0)<0,xt=De("lastIndexOf"),wt=Ge("indexOf",{ACCESSORS:!0,1:0}),Lt=Et||!xt||!wt?function(e){if(Et)return St.apply(this,arguments)||0;var t=m(this),n=oe(t.length),i=n-1;for(arguments.length>1&&(i=bt(i,re(arguments[1]))),i<0&&(i=n+i);i>=0;i--)if(i in t&&t[i]===e)return i||0;return-1}:St;Ce({target:"Array",proto:!0,forced:Lt!==[].lastIndexOf},{lastIndexOf:Lt});var Tt=$e.map,Ct=it("map"),Ot=Ge("map");Ce({target:"Array",proto:!0,forced:!Ct||!Ot},{map:function(e){return Tt(this,e,arguments.length>1?arguments[1]:void 0)}});var At=function(e,t,n){var i=g(t);i in e?O.f(e,i,c(0,n)):e[i]=n},kt=it("slice"),It=Ge("slice",{ACCESSORS:!0,0:0,1:2}),Pt=je("species"),Mt=[].slice,Nt=Math.max;Ce({target:"Array",proto:!0,forced:!kt||!It},{slice:function(e,t){var n,i,r,a=m(this),o=oe(a.length),s=ce(e,o),l=ce(void 0===t?o:t,o);if(ke(a)&&("function"!=typeof(n=a.constructor)||n!==Array&&!ke(n.prototype)?v(n)&&null===(n=n[Pt])&&(n=void 0):n=void 0,n===Array||void 0===n))return Mt.call(a,s,l);for(i=new(void 0===n?Array:n)(Nt(l-s,0)),r=0;s>>0||(Qt.test(n)?16:10))}:Zt;Ce({global:!0,forced:parseInt!=en},{parseInt:en});var tn=function(){var e=T(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t};function nn(e,t){return RegExp(e,t)}var rn,an,on={UNSUPPORTED_Y:r((function(){var e=nn("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),BROKEN_CARET:r((function(){var e=nn("^r","gy");return e.lastIndex=2,null!=e.exec("str")}))},sn=RegExp.prototype.exec,ln=String.prototype.replace,cn=sn,un=(rn=/a/,an=/b*/g,sn.call(rn,"a"),sn.call(an,"a"),0!==rn.lastIndex||0!==an.lastIndex),fn=on.UNSUPPORTED_Y||on.BROKEN_CARET,dn=void 0!==/()??/.exec("")[1];(un||dn||fn)&&(cn=function(e){var t,n,i,r,a=this,o=fn&&a.sticky,s=tn.call(a),l=a.source,c=0,u=e;return o&&(-1===(s=s.replace("y","")).indexOf("g")&&(s+="g"),u=String(e).slice(a.lastIndex),a.lastIndex>0&&(!a.multiline||a.multiline&&"\n"!==e[a.lastIndex-1])&&(l="(?: "+l+")",u=" "+u,c++),n=new RegExp("^(?:"+l+")",s)),dn&&(n=new RegExp("^"+l+"$(?!\\s)",s)),un&&(t=a.lastIndex),i=sn.call(o?n:a,u),o?i?(i.input=i.input.slice(c),i[0]=i[0].slice(c),i.index=a.lastIndex,a.lastIndex+=i[0].length):a.lastIndex=0:un&&i&&(a.lastIndex=a.global?i.index+i[0].length:t),dn&&i&&i.length>1&&ln.call(i[0],n,(function(){for(r=1;r1?arguments[1]:void 0,i=oe(t.length),r=void 0===n?i:xn(oe(n),i),a=String(e);return En?En.call(t,a,r):t.slice(r-a.length,r)===a}});var Ln=je("species"),Tn=!r((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")})),Cn="$0"==="a".replace(/./,"$0"),On=je("replace"),An=!!/./[On]&&""===/./[On]("a","$0"),kn=!r((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]})),In=function(e,t,n,i){var a=je(e),o=!r((function(){var t={};return t[a]=function(){return 7},7!=""[e](t)})),s=o&&!r((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[Ln]=function(){return n},n.flags="",n[a]=/./[a]),n.exec=function(){return t=!0,null},n[a](""),!t}));if(!o||!s||"replace"===e&&(!Tn||!Cn||An)||"split"===e&&!kn){var l=/./[a],c=n(a,""[e],(function(e,t,n,i,r){return t.exec===pn?o&&!r?{done:!0,value:l.call(t,n,i)}:{done:!0,value:e.call(n,t,i)}:{done:!1}}),{REPLACE_KEEPS_$0:Cn,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:An}),u=c[0],f=c[1];Z(String.prototype,e,u),Z(RegExp.prototype,a,2==t?function(e,t){return f.call(e,this,t)}:function(e){return f.call(e,this)})}i&&A(RegExp.prototype[a],"sham",!0)},Pn=function(e){return function(t,n){var i,r,a=String(h(t)),o=re(n),s=a.length;return o<0||o>=s?e?"":void 0:(i=a.charCodeAt(o))<55296||i>56319||o+1===s||(r=a.charCodeAt(o+1))<56320||r>57343?e?a.charAt(o):i:e?a.slice(o,o+2):r-56320+(i-55296<<10)+65536}},Mn={codeAt:Pn(!1),charAt:Pn(!0)}.charAt,Nn=function(e,t,n){return t+(n?Mn(e,t).length:1)},Rn=function(e,t){var n=e.exec;if("function"==typeof n){var i=n.call(e,t);if("object"!=typeof i)throw TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==f(e))throw TypeError("RegExp#exec called on incompatible receiver");return pn.call(e,t)},jn=Math.max,_n=Math.min,Fn=Math.floor,Wn=/\$([$&'`]|\d\d?|<[^>]*>)/g,Hn=/\$([$&'`]|\d\d?)/g;In("replace",2,(function(e,t,n,i){var r=i.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,a=i.REPLACE_KEEPS_$0,o=r?"$":"$0";return[function(n,i){var r=h(this),a=null==n?void 0:n[e];return void 0!==a?a.call(n,r,i):t.call(String(r),n,i)},function(e,i){if(!r&&a||"string"==typeof i&&-1===i.indexOf(o)){var l=n(t,e,this,i);if(l.done)return l.value}var c=T(e),u=String(this),f="function"==typeof i;f||(i=String(i));var d=c.global;if(d){var p=c.unicode;c.lastIndex=0}for(var h=[];;){var m=Rn(c,u);if(null===m)break;if(h.push(m),!d)break;""===String(m[0])&&(c.lastIndex=Nn(u,oe(c.lastIndex),p))}for(var v,g="",y=0,b=0;b=y&&(g+=u.slice(y,E)+O,y=E+S.length)}return g+u.slice(y)}];function s(e,n,i,r,a,o){var s=i+e.length,l=r.length,c=Hn;return void 0!==a&&(a=Ae(a),c=Wn),t.call(o,c,(function(t,o){var c;switch(o.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,i);case"'":return n.slice(s);case"<":c=a[o.slice(1,-1)];break;default:var u=+o;if(0===u)return t;if(u>l){var f=Fn(u/10);return 0===f?t:f<=l?void 0===r[f-1]?o.charAt(1):r[f-1]+o.charAt(1):t}c=r[u-1]}return void 0===c?"":c}))}}));var $n=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};In("search",1,(function(e,t,n){return[function(t){var n=h(this),i=null==t?void 0:t[e];return void 0!==i?i.call(t,n):new RegExp(t)[e](String(n))},function(e){var i=n(t,e,this);if(i.done)return i.value;var r=T(e),a=String(this),o=r.lastIndex;$n(o,0)||(r.lastIndex=0);var s=Rn(r,a);return $n(r.lastIndex,o)||(r.lastIndex=o),null===s?-1:s.index}]}));var Dn=je("species"),Bn=[].push,qn=Math.min,Un=!r((function(){return!RegExp(4294967295,"y")}));In("split",2,(function(e,t,n){var i;return i="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var i=String(h(this)),r=void 0===n?4294967295:n>>>0;if(0===r)return[];if(void 0===e)return[i];if(!vn(e))return t.call(i,e,r);for(var a,o,s,l=[],c=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),u=0,f=new RegExp(e.source,c+"g");(a=pn.call(f,i))&&!((o=f.lastIndex)>u&&(l.push(i.slice(u,a.index)),a.length>1&&a.index=r));)f.lastIndex===a.index&&f.lastIndex++;return u===i.length?!s&&f.test("")||l.push(""):l.push(i.slice(u)),l.length>r?l.slice(0,r):l}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var r=h(this),a=null==t?void 0:t[e];return void 0!==a?a.call(t,r,n):i.call(String(r),t,n)},function(e,r){var a=n(i,e,this,r,i!==t);if(a.done)return a.value;var o=T(e),s=String(this),l=function(e,t){var n,i=T(e).constructor;return void 0===i||null==(n=T(i)[Dn])?t:Oe(n)}(o,RegExp),c=o.unicode,u=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(Un?"y":"g"),f=new l(Un?o:"^(?:"+o.source+")",u),d=void 0===r?4294967295:r>>>0;if(0===d)return[];if(0===s.length)return null===Rn(f,s)?[s]:[];for(var p=0,h=0,m=[];h1?arguments[1]:void 0,t.length)),i=String(e);return Vn?Vn.call(t,i,n):t.slice(n,n+i.length)===i}});var Xn,Yn=Kt.trim;Ce({target:"String",proto:!0,forced:(Xn="trim",r((function(){return!!Bt[Xn]()||"​…᠎"!="​…᠎"[Xn]()||Bt[Xn].name!==Xn})))},{trim:function(){return Yn(this)}});for(var Jn in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var Zn=i[Jn],Qn=Zn&&Zn.prototype;if(Qn&&Qn.forEach!==ut)try{A(Qn,"forEach",ut)}catch(e){Qn.forEach=ut}}var ei=[].slice,ti=function(e){return function(t,n){var i=arguments.length>2,r=i?ei.call(arguments,2):void 0;return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};Ce({global:!0,bind:!0,forced:/MSIE .\./.test(Je)},{setTimeout:ti(i.setTimeout),setInterval:ti(i.setInterval)});String.prototype.startsWith||(String.prototype.startsWith=function(e,t){return this.substr(t||0,e.length)===e}),String.prototype.endsWith||(String.prototype.endsWith=function(e,t){return(void 0===t||t>this.length)&&(t=this.length),this.substring(t-e.length,t)===e});export default function(){var e,t,n,i,r=(e=/(msie) ([\w.]+)/.exec(window.navigator.userAgent.toLowerCase()))&&"msie"===e[1]?parseFloat(e[2]):null,a=!1;function o(e){(i=e.menu||{}).path=i.path||function(){var e;if(document.querySelector('script[src$="menu.js"]')){var t=document.querySelector('script[src$="menu.js"]');t&&(e=t.src.slice(0,-7))}else e=import.meta.url.slice(0,import.meta.url.lastIndexOf("/")+1);return e}()||"plugin/menu/",i.path.endsWith("/")||(i.path+="/"),void 0===i.side&&(i.side="left"),void 0===i.numbers&&(i.numbers=!1),"string"!=typeof i.titleSelector&&(i.titleSelector="h1, h2, h3, h4, h5"),void 0===i.hideMissingTitles&&(i.hideMissingTitles=!1),void 0===i.useTextContentForMissingTitles&&(i.useTextContentForMissingTitles=!1),void 0===i.markers&&(i.markers=!0),"string"!=typeof i.themesPath&&(i.themesPath="dist/theme/"),i.themesPath.endsWith("/")||(i.themesPath+="/"),O("link#theme")||(i.themes=!1),!0===i.themes?i.themes=[{name:"Black",theme:i.themesPath+"black.css"},{name:"White",theme:i.themesPath+"white.css"},{name:"League",theme:i.themesPath+"league.css"},{name:"Sky",theme:i.themesPath+"sky.css"},{name:"Beige",theme:i.themesPath+"beige.css"},{name:"Simple",theme:i.themesPath+"simple.css"},{name:"Serif",theme:i.themesPath+"serif.css"},{name:"Blood",theme:i.themesPath+"blood.css"},{name:"Night",theme:i.themesPath+"night.css"},{name:"Moon",theme:i.themesPath+"moon.css"},{name:"Solarized",theme:i.themesPath+"solarized.css"}]:Array.isArray(i.themes)||(i.themes=!1),void 0===i.transitions&&(i.transitions=!1),!0===i.transitions?i.transitions=["None","Fade","Slide","Convex","Concave","Zoom"]:!1===i.transitions||Array.isArray(i.transitions)&&i.transitions.every((function(e){return"string"==typeof e}))||(console.error("reveal.js-menu error: transitions config value must be 'true' or an array of strings, eg ['None', 'Fade', 'Slide')"),i.transitions=!1),r&&r<=9&&(i.transitions=!1),void 0===i.openButton&&(i.openButton=!0),void 0===i.openSlideNumber&&(i.openSlideNumber=!1),void 0===i.keyboard&&(i.keyboard=!0),void 0===i.sticky&&(i.sticky=!1),void 0===i.autoOpen&&(i.autoOpen=!0),void 0===i.delayInit&&(i.delayInit=!1),void 0===i.openOnInit&&(i.openOnInit=!1)}var s=!0;function l(){s=!1}function c(){O("nav.slide-menu").addEventListener("mousemove",(function e(t){O("nav.slide-menu").removeEventListener("mousemove",e),s=!0}))}function u(e){var t=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-e.scrollLeft,n+=e.offsetTop-e.scrollTop,e=e.offsetParent;return{top:n,left:t}}(e).top-e.offsetParent.offsetTop;if(t<0)return-t;var n=e.offsetParent.offsetHeight-(e.offsetTop-e.offsetParent.scrollTop+e.offsetHeight);return n<0?n:0}function f(e){var t=u(e);t&&(l(),e.scrollIntoView(t>0),c())}function d(e){l(),e.offsetParent.scrollTop=e.offsetTop,c()}function p(e){l(),e.offsetParent.scrollTop=e.offsetTop-e.offsetParent.offsetHeight+e.offsetHeight,c()}function h(e){e.classList.add("selected"),f(e),i.sticky&&i.autoOpen&&E(e)}function m(e){if(b())switch(e.stopImmediatePropagation(),e.keyCode){case 72:case 37:!function(){var e=parseInt(O(".active-toolbar-button").getAttribute("data-button"))-1;e<0&&(e=T-1);S(null,O('.toolbar-panel-button[data-button="'+e+'"]').getAttribute("data-panel"))}();break;case 76:case 39:l=(parseInt(O(".active-toolbar-button").getAttribute("data-button"))+1)%T,S(null,O('.toolbar-panel-button[data-button="'+l+'"]').getAttribute("data-panel"));break;case 75:case 38:if(s=O(".active-menu-panel .slide-menu-items li.selected")||O(".active-menu-panel .slide-menu-items li.active"))A(".active-menu-panel .slide-menu-items li").forEach((function(e){e.classList.remove("selected")})),h(O('.active-menu-panel .slide-menu-items li[data-item="'+(parseInt(s.getAttribute("data-item"))-1)+'"]')||s);else(o=O(".active-menu-panel .slide-menu-items li.slide-menu-item"))&&h(o);break;case 74:case 40:if(s=O(".active-menu-panel .slide-menu-items li.selected")||O(".active-menu-panel .slide-menu-items li.active"))A(".active-menu-panel .slide-menu-items li").forEach((function(e){e.classList.remove("selected")})),h(O('.active-menu-panel .slide-menu-items li[data-item="'+(parseInt(s.getAttribute("data-item"))+1)+'"]')||s);else(o=O(".active-menu-panel .slide-menu-items li.slide-menu-item"))&&h(o);break;case 33:case 85:var t=A(".active-menu-panel .slide-menu-items li").filter((function(e){return u(e)>0})),n=A(".active-menu-panel .slide-menu-items li").filter((function(e){return 0==u(e)})),i=t.length>0&&Math.abs(u(t[t.length-1]))0&&(p(i),i=(n=A(".active-menu-panel .slide-menu-items li").filter((function(e){return 0==u(e)})))[0]==i?t[t.length-1]:n[0]),A(".active-menu-panel .slide-menu-items li").forEach((function(e){e.classList.remove("selected")})),h(i),d(i));break;case 34:case 68:n=A(".active-menu-panel .slide-menu-items li").filter((function(e){return 0==u(e)}));var r=A(".active-menu-panel .slide-menu-items li").filter((function(e){return u(e)<0})),a=r.length>0&&Math.abs(u(r[0]))0&&(d(a),a=(n=A(".active-menu-panel .slide-menu-items li").filter((function(e){return 0==u(e)})))[n.length-1]==a?r[0]:n[n.length-1]),A(".active-menu-panel .slide-menu-items li").forEach((function(e){e.classList.remove("selected")})),h(a),p(a));break;case 36:A(".active-menu-panel .slide-menu-items li").forEach((function(e){e.classList.remove("selected")})),(o=O(".active-menu-panel .slide-menu-items li:first-of-type"))&&(o.classList.add("selected"),f(o));break;case 35:var o;A(".active-menu-panel .slide-menu-items li").forEach((function(e){e.classList.remove("selected")})),(o=O(".active-menu-panel .slide-menu-items:last-of-type li:last-of-type"))&&(o.classList.add("selected"),f(o));break;case 32:case 13:var s;(s=O(".active-menu-panel .slide-menu-items li.selected"))&&E(s,!0);break;case 27:g(null,!0)}var l}function v(e){(e&&e.preventDefault(),b())||(O("body").classList.add("slide-menu-active"),O(".reveal").classList.add("has-"+i.effect+"-"+i.side),O(".slide-menu").classList.add("active"),O(".slide-menu-overlay").classList.add("active"),i.themes&&(A('div[data-panel="Themes"] li').forEach((function(e){e.classList.remove("active")})),A('li[data-theme="'+O("link#theme").getAttribute("href")+'"]').forEach((function(e){e.classList.add("active")}))),i.transitions&&(A('div[data-panel="Transitions"] li').forEach((function(e){e.classList.remove("active")})),A('li[data-transition="'+n.transition+'"]').forEach((function(e){e.classList.add("active")}))),A(".slide-menu-panel li.active").forEach((function(e){e.classList.add("selected"),f(e)})))}function g(e,t){e&&e.preventDefault(),i.sticky&&!t||(O("body").classList.remove("slide-menu-active"),O(".reveal").classList.remove("has-"+i.effect+"-"+i.side),O(".slide-menu").classList.remove("active"),O(".slide-menu-overlay").classList.remove("active"),A(".slide-menu-panel li.selected").forEach((function(e){e.classList.remove("selected")})))}function y(e){b()?g(e,!0):v(e)}function b(){return O("body").classList.contains("slide-menu-active")}function S(e,t){v(e);var n=t;"string"!=typeof t&&(n=e.currentTarget.getAttribute("data-panel")),O(".slide-menu-toolbar > li.active-toolbar-button").classList.remove("active-toolbar-button"),O('li[data-panel="'+n+'"]').classList.add("active-toolbar-button"),O(".slide-menu-panel.active-menu-panel").classList.remove("active-menu-panel"),O('div[data-panel="'+n+'"]').classList.add("active-menu-panel")}function E(e,n){var r=parseInt(e.getAttribute("data-slide-h")),a=parseInt(e.getAttribute("data-slide-v")),o=e.getAttribute("data-theme"),s=e.getAttribute("data-highlight-theme"),l=e.getAttribute("data-transition");isNaN(r)||isNaN(a)||t.slide(r,a),o&&I("theme",o),s&&I("highlight-theme",s),l&&t.configure({transition:l});var c=O("a",e);c&&(n||!i.sticky||i.autoOpen&&c.href.startsWith("#")||c.href.startsWith(window.location.origin+window.location.pathname+"#"))&&c.click(),g()}function x(e){"A"!==e.target.nodeName&&e.preventDefault(),E(e.currentTarget)}function w(){var e=t.getState();A("li.slide-menu-item, li.slide-menu-item-vertical").forEach((function(t){t.classList.remove("past"),t.classList.remove("active"),t.classList.remove("future");var n=parseInt(t.getAttribute("data-slide-h")),i=parseInt(t.getAttribute("data-slide-v"));n",s.appendChild(k("br"),O("i",s)),s.appendChild(k("span",{class:"slide-menu-toolbar-label"},e),O("i",s)),s.onclick=r,d.appendChild(s),s},r=function(e,r,a,o,s){function l(e,t){if(""===e)return null;var n=t?O(e,r):O(e);return n?n.textContent:null}var c=r.getAttribute("data-menu-title")||l(".menu-title",r)||l(i.titleSelector,r);if(!c&&i.useTextContentForMissingTitles&&(c=r.textContent.trim())&&(c=c.split("\n").map((function(e){return e.trim()})).join(" ").trim().replace(/^(.{16}[^\s]*).*/,"$1").replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")+"..."),!c){if(i.hideMissingTitles)return"";e+=" no-title",c="Slide "+(a+1)}var u=k("li",{class:e,"data-item":a,"data-slide-h":o,"data-slide-v":void 0===s?0:s});if(i.markers&&(u.appendChild(k("i",{class:"fas fa-check-circle fa-fw past"})),u.appendChild(k("i",{class:"fas fa-arrow-alt-circle-right fa-fw active"})),u.appendChild(k("i",{class:"far fa-circle fa-fw future"}))),i.numbers){var f=[],d="h.v";switch("string"==typeof i.numbers?d=i.numbers:"string"==typeof n.slideNumber&&(d=n.slideNumber),d){case"c":f.push(a+1);break;case"c/t":f.push(a+1,"/",t.getTotalSlides());break;case"h/v":f.push(o+1),"number"!=typeof s||isNaN(s)||f.push("/",s+1);break;default:f.push(o+1),"number"!=typeof s||isNaN(s)||f.push(".",s+1)}u.appendChild(k("span",{class:"slide-menu-item-number"},f.join("")+". "))}return u.appendChild(k("span",{class:"slide-menu-item-title"},c)),u},o=function(e){s&&(A(".active-menu-panel .slide-menu-items li.selected").forEach((function(e){e.classList.remove("selected")})),e.currentTarget.classList.add("selected"))},l=O(".reveal").parentElement,c=k("div",{class:"slide-menu-wrapper"});l.appendChild(c);var u=k("nav",{class:"slide-menu slide-menu--"+i.side});"string"==typeof i.width&&(-1!=["normal","wide","third","half","full"].indexOf(i.width)?u.classList.add("slide-menu--"+i.width):(u.classList.add("slide-menu--custom"),u.style.width=i.width)),c.appendChild(u),L();var f=k("div",{class:"slide-menu-overlay"});c.appendChild(f),f.onclick=function(){g(null,!0)};var d=k("ol",{class:"slide-menu-toolbar"});O(".slide-menu").appendChild(d),e("Slides","Slides","fa-images","fas",S,!0),i.custom&&i.custom.forEach((function(t,n,i){e(t.title,"Custom"+n,t.icon,null,S)})),i.themes&&e("Themes","Themes","fa-adjust","fas",S),i.transitions&&e("Transitions","Transitions","fa-sticky-note","fas",S);var p=k("li",{id:"close",class:"toolbar-panel-button"});if(p.appendChild(k("i",{class:"fas fa-times"})),p.appendChild(k("br")),p.appendChild(k("span",{class:"slide-menu-toolbar-label"},"Close")),p.onclick=function(){g(null,!0)},d.appendChild(p),function e(){if(document.querySelector("section[data-markdown]:not([data-markdown-parsed])"))setTimeout(e,100);else{var t=k("div",{"data-panel":"Slides",class:"slide-menu-panel active-menu-panel"});t.appendChild(k("ul",{class:"slide-menu-items"})),u.appendChild(t);var n=O('.slide-menu-panel[data-panel="Slides"] > .slide-menu-items'),i=0;A(".slides > section").forEach((function(e,t){var a=A("section",e);if(a.length>0)a.forEach((function(e,a){var o=r(0===a?"slide-menu-item":"slide-menu-item-vertical",e,i,t,a);o&&n.appendChild(o),i++}));else{var o=r("slide-menu-item",e,i,t);o&&n.appendChild(o),i++}})),A(".slide-menu-item, .slide-menu-item-vertical").forEach((function(e){e.onclick=x})),w()}}(),t.addEventListener("slidechanged",w),i.custom){var h=function(){this.status>=200&&this.status<300?(this.panel.innerHTML=this.responseText,C(this.panel)):I(this)},E=function(){I(this)},C=function(e){A("ul.slide-menu-items li.slide-menu-item",e).forEach((function(e,t){e.setAttribute("data-item",t+1),e.onclick=x,e.addEventListener("mouseenter",o)}))},I=function(e){var t="

    ERROR: The attempt to fetch "+e.responseURL+" failed with HTTP status "+e.status+" ("+e.statusText+").

    Remember that you need to serve the presentation HTML from a HTTP server.

    ";e.panel.innerHTML=t};i.custom.forEach((function(e,t,n){var i=k("div",{"data-panel":"Custom"+t,class:"slide-menu-panel slide-menu-custom-panel"});e.content?(i.innerHTML=e.content,C(i)):e.src&&function(e,t){var n=new XMLHttpRequest;n.panel=e,n.arguments=Array.prototype.slice.call(arguments,2),n.onload=h,n.onerror=E,n.open("get",t,!0),n.send(null)}(i,e.src),u.appendChild(i)}))}if(i.themes){var P=k("div",{class:"slide-menu-panel","data-panel":"Themes"});u.appendChild(P);var M=k("ul",{class:"slide-menu-items"});P.appendChild(M),i.themes.forEach((function(e,t){var n={class:"slide-menu-item","data-item":""+(t+1)};e.theme&&(n["data-theme"]=e.theme),e.highlightTheme&&(n["data-highlight-theme"]=e.highlightTheme);var i=k("li",n,e.name);M.appendChild(i),i.onclick=x}))}if(i.transitions){P=k("div",{class:"slide-menu-panel","data-panel":"Transitions"});u.appendChild(P);M=k("ul",{class:"slide-menu-items"});P.appendChild(M),i.transitions.forEach((function(e,t){var n=k("li",{class:"slide-menu-item","data-transition":e.toLowerCase(),"data-item":""+(t+1)},e);M.appendChild(n),n.onclick=x}))}if(i.openButton){var N=k("div",{class:"slide-menu-button"}),R=k("a",{href:"#"});R.appendChild(k("i",{class:"fas fa-bars"})),N.appendChild(R),O(".reveal").appendChild(N),N.onclick=v}if(i.openSlideNumber)O("div.slide-number").onclick=v;A(".slide-menu-panel .slide-menu-items li").forEach((function(e){e.addEventListener("mouseenter",o)}))}if(i.keyboard){if(document.addEventListener("keydown",m,!1),window.addEventListener("message",(function(e){var t;try{t=JSON.parse(e.data)}catch(e){}t&&"triggerKey"===t.method&&m({keyCode:t.args[0],stopImmediatePropagation:function(){}})})),n.keyboardCondition&&"function"==typeof n.keyboardCondition){var j=n.keyboardCondition;n.keyboardCondition=function(e){return j(e)&&(!b()||77==e.keyCode)}}else n.keyboardCondition=function(e){return!b()||77==e.keyCode};t.addKeyBinding({keyCode:77,key:"M",description:"Toggle menu"},y)}i.openOnInit&&v(),a=!0}function O(e,t){return t||(t=document),t.querySelector(e)}function A(e,t){return t||(t=document),Array.prototype.slice.call(t.querySelectorAll(e))}function k(e,t,n){var i=document.createElement(e);return t&&Object.getOwnPropertyNames(t).forEach((function(e){i.setAttribute(e,t[e])})),n&&(i.innerHTML=n),i}function I(e,t){var n=O("link#"+e),i=n.parentElement,r=n.nextElementSibling;n.remove();var a=n.cloneNode();a.setAttribute("href",t),a.onload=function(){L()},i.insertBefore(a,r)}function P(e,t,n){var i,r=document.querySelector("head");"script"===t?((i=document.createElement("script")).type="text/javascript",i.src=e):"stylesheet"===t&&((i=document.createElement("link")).rel="stylesheet",i.href=e);var a=function(){"function"==typeof n&&(n.call(),n=null)};i.onload=a,i.onreadystatechange=function(){"loaded"===this.readyState&&a()},r.appendChild(i)}function M(){var e,a,o,s=!r||r>=9;t.isSpeakerNotes()&&window.location.search.endsWith("controls=false")&&(s=!1),s&&(i.delayInit||C(),e="menu-ready",(o=document.createEvent("HTMLEvents",1,2)).initEvent(e,!0,!0),function(e,t){for(var n in t)e[n]=t[n]}(o,a),document.querySelector(".reveal").dispatchEvent(o),n.postMessageEvents&&window.parent!==window.self&&window.parent.postMessage(JSON.stringify({namespace:"reveal",eventName:e,state:t.getState()}),"*"))}return{id:"menu",init:function(e){o(n=(t=e).getConfig()),P(i.path+"menu.css","stylesheet",(function(){void 0===i.loadIcons||i.loadIcons?P(i.path+"font-awesome/css/all.css","stylesheet",M):M()}))},toggle:y,openMenu:v,closeMenu:g,openPanel:S,isOpen:b,initialiseMenu:C,isMenuInitialised:function(){return a}}} diff --git a/docs/1_Fundamentals/plugin/menu/menu.js b/docs/1_Fundamentals/plugin/menu/menu.js new file mode 100644 index 0000000..dfec193 --- /dev/null +++ b/docs/1_Fundamentals/plugin/menu/menu.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).RevealMenu=t()}(this,(function(){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t,n){return e(n={path:t,exports:{},require:function(e,t){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==t&&n.path)}},n.exports),n.exports}var n=function(e){return e&&e.Math==Math&&e},r=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||Function("return this")(),i=function(e){try{return!!e()}catch(e){return!0}},a=!i((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),o={}.propertyIsEnumerable,s=Object.getOwnPropertyDescriptor,l={f:s&&!o.call({1:2},1)?function(e){var t=s(this,e);return!!t&&t.enumerable}:o},c=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},u={}.toString,f=function(e){return u.call(e).slice(8,-1)},d="".split,p=i((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==f(e)?d.call(e,""):Object(e)}:Object,h=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},m=function(e){return p(h(e))},v=function(e){return"object"==typeof e?null!==e:"function"==typeof e},g=function(e,t){if(!v(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!v(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!v(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!v(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")},y={}.hasOwnProperty,b=function(e,t){return y.call(e,t)},S=r.document,E=v(S)&&v(S.createElement),x=!a&&!i((function(){return 7!=Object.defineProperty((e="div",E?S.createElement(e):{}),"a",{get:function(){return 7}}).a;var e})),w=Object.getOwnPropertyDescriptor,L={f:a?w:function(e,t){if(e=m(e),t=g(t,!0),x)try{return w(e,t)}catch(e){}if(b(e,t))return c(!l.f.call(e,t),e[t])}},T=function(e){if(!v(e))throw TypeError(String(e)+" is not an object");return e},C=Object.defineProperty,O={f:a?C:function(e,t,n){if(T(e),t=g(t,!0),T(n),x)try{return C(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},A=a?function(e,t,n){return O.f(e,t,c(1,n))}:function(e,t,n){return e[t]=n,e},k=function(e,t){try{A(r,e,t)}catch(n){r[e]=t}return t},I=r["__core-js_shared__"]||k("__core-js_shared__",{}),P=Function.toString;"function"!=typeof I.inspectSource&&(I.inspectSource=function(e){return P.call(e)});var M,R,j,N,_=I.inspectSource,F=r.WeakMap,W="function"==typeof F&&/native code/.test(_(F)),H=t((function(e){(e.exports=function(e,t){return I[e]||(I[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.6.5",mode:"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})})),U=0,$=Math.random(),D=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++U+$).toString(36)},q=H("keys"),B={},G=r.WeakMap;if(W){var V=new G,K=V.get,z=V.has,X=V.set;M=function(e,t){return X.call(V,e,t),t},R=function(e){return K.call(V,e)||{}},j=function(e){return z.call(V,e)}}else{var Y=q[N="state"]||(q[N]=D(N));B[Y]=!0,M=function(e,t){return A(e,Y,t),t},R=function(e){return b(e,Y)?e[Y]:{}},j=function(e){return b(e,Y)}}var J={set:M,get:R,has:j,enforce:function(e){return j(e)?R(e):M(e,{})},getterFor:function(e){return function(t){var n;if(!v(t)||(n=R(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}},Z=t((function(e){var t=J.get,n=J.enforce,i=String(String).split("String");(e.exports=function(e,t,a,o){var s=!!o&&!!o.unsafe,l=!!o&&!!o.enumerable,c=!!o&&!!o.noTargetGet;"function"==typeof a&&("string"!=typeof t||b(a,"name")||A(a,"name",t),n(a).source=i.join("string"==typeof t?t:"")),e!==r?(s?!c&&e[t]&&(l=!0):delete e[t],l?e[t]=a:A(e,t,a)):l?e[t]=a:k(t,a)})(Function.prototype,"toString",(function(){return"function"==typeof this&&t(this).source||_(this)}))})),Q=r,ee=function(e){return"function"==typeof e?e:void 0},te=function(e,t){return arguments.length<2?ee(Q[e])||ee(r[e]):Q[e]&&Q[e][t]||r[e]&&r[e][t]},ne=Math.ceil,re=Math.floor,ie=function(e){return isNaN(e=+e)?0:(e>0?re:ne)(e)},ae=Math.min,oe=function(e){return e>0?ae(ie(e),9007199254740991):0},se=Math.max,le=Math.min,ce=function(e,t){var n=ie(e);return n<0?se(n+t,0):le(n,t)},ue=function(e){return function(t,n,r){var i,a=m(t),o=oe(a.length),s=ce(r,o);if(e&&n!=n){for(;o>s;)if((i=a[s++])!=i)return!0}else for(;o>s;s++)if((e||s in a)&&a[s]===n)return e||s||0;return!e&&-1}},fe={includes:ue(!0),indexOf:ue(!1)},de=fe.indexOf,pe=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"].concat("length","prototype"),he={f:Object.getOwnPropertyNames||function(e){return function(e,t){var n,r=m(e),i=0,a=[];for(n in r)!b(B,n)&&b(r,n)&&a.push(n);for(;t.length>i;)b(r,n=t[i++])&&(~de(a,n)||a.push(n));return a}(e,pe)}},me={f:Object.getOwnPropertySymbols},ve=te("Reflect","ownKeys")||function(e){var t=he.f(T(e)),n=me.f;return n?t.concat(n(e)):t},ge=function(e,t){for(var n=ve(t),r=O.f,i=L.f,a=0;ay;y++)if((o||y in m)&&(d=v(f=m[y],y,h),e))if(t)S[y]=d;else if(d)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:We.call(S,f)}else if(i)return!1;return a?-1:r||i?i:S}},Ue={forEach:He(0),map:He(1),filter:He(2),some:He(3),every:He(4),find:He(5),findIndex:He(6)},$e=function(e,t){var n=[][e];return!!n&&i((function(){n.call(null,t||function(){throw 1},1)}))},De=Object.defineProperty,qe={},Be=function(e){throw e},Ge=function(e,t){if(b(qe,e))return qe[e];t||(t={});var n=[][e],r=!!b(t,"ACCESSORS")&&t.ACCESSORS,o=b(t,0)?t[0]:Be,s=b(t,1)?t[1]:void 0;return qe[e]=!!n&&!i((function(){if(r&&!a)return!0;var e={length:-1};r?De(e,1,{enumerable:!0,get:Be}):e[1]=1,n.call(e,o,s)}))},Ve=Ue.every,Ke=$e("every"),ze=Ge("every");Ce({target:"Array",proto:!0,forced:!Ke||!ze},{every:function(e){return Ve(this,e,arguments.length>1?arguments[1]:void 0)}});var Xe,Ye,Je=te("navigator","userAgent")||"",Ze=r.process,Qe=Ze&&Ze.versions,et=Qe&&Qe.v8;et?Ye=(Xe=et.split("."))[0]+Xe[1]:Je&&(!(Xe=Je.match(/Edge\/(\d+)/))||Xe[1]>=74)&&(Xe=Je.match(/Chrome\/(\d+)/))&&(Ye=Xe[1]);var tt=Ye&&+Ye,nt=Ne("species"),rt=function(e){return tt>=51||!i((function(){var t=[];return(t.constructor={})[nt]=function(){return{foo:1}},1!==t[e](Boolean).foo}))},it=Ue.filter,at=rt("filter"),ot=Ge("filter");Ce({target:"Array",proto:!0,forced:!at||!ot},{filter:function(e){return it(this,e,arguments.length>1?arguments[1]:void 0)}});var st=Ue.forEach,lt=$e("forEach"),ct=Ge("forEach"),ut=lt&&ct?[].forEach:function(e){return st(this,e,arguments.length>1?arguments[1]:void 0)};Ce({target:"Array",proto:!0,forced:[].forEach!=ut},{forEach:ut});var ft=fe.indexOf,dt=[].indexOf,pt=!!dt&&1/[1].indexOf(1,-0)<0,ht=$e("indexOf"),mt=Ge("indexOf",{ACCESSORS:!0,1:0});Ce({target:"Array",proto:!0,forced:pt||!ht||!mt},{indexOf:function(e){return pt?dt.apply(this,arguments)||0:ft(this,e,arguments.length>1?arguments[1]:void 0)}}),Ce({target:"Array",stat:!0},{isArray:ke});var vt=[].join,gt=p!=Object,yt=$e("join",",");Ce({target:"Array",proto:!0,forced:gt||!yt},{join:function(e){return vt.call(m(this),void 0===e?",":e)}});var bt=Math.min,St=[].lastIndexOf,Et=!!St&&1/[1].lastIndexOf(1,-0)<0,xt=$e("lastIndexOf"),wt=Ge("indexOf",{ACCESSORS:!0,1:0}),Lt=Et||!xt||!wt?function(e){if(Et)return St.apply(this,arguments)||0;var t=m(this),n=oe(t.length),r=n-1;for(arguments.length>1&&(r=bt(r,ie(arguments[1]))),r<0&&(r=n+r);r>=0;r--)if(r in t&&t[r]===e)return r||0;return-1}:St;Ce({target:"Array",proto:!0,forced:Lt!==[].lastIndexOf},{lastIndexOf:Lt});var Tt=Ue.map,Ct=rt("map"),Ot=Ge("map");Ce({target:"Array",proto:!0,forced:!Ct||!Ot},{map:function(e){return Tt(this,e,arguments.length>1?arguments[1]:void 0)}});var At=function(e,t,n){var r=g(t);r in e?O.f(e,r,c(0,n)):e[r]=n},kt=rt("slice"),It=Ge("slice",{ACCESSORS:!0,0:0,1:2}),Pt=Ne("species"),Mt=[].slice,Rt=Math.max;Ce({target:"Array",proto:!0,forced:!kt||!It},{slice:function(e,t){var n,r,i,a=m(this),o=oe(a.length),s=ce(e,o),l=ce(void 0===t?o:t,o);if(ke(a)&&("function"!=typeof(n=a.constructor)||n!==Array&&!ke(n.prototype)?v(n)&&null===(n=n[Pt])&&(n=void 0):n=void 0,n===Array||void 0===n))return Mt.call(a,s,l);for(r=new(void 0===n?Array:n)(Rt(l-s,0)),i=0;s>>0||(Qt.test(n)?16:10))}:Zt;Ce({global:!0,forced:parseInt!=en},{parseInt:en});var tn=function(){var e=T(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t};function nn(e,t){return RegExp(e,t)}var rn,an,on={UNSUPPORTED_Y:i((function(){var e=nn("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),BROKEN_CARET:i((function(){var e=nn("^r","gy");return e.lastIndex=2,null!=e.exec("str")}))},sn=RegExp.prototype.exec,ln=String.prototype.replace,cn=sn,un=(rn=/a/,an=/b*/g,sn.call(rn,"a"),sn.call(an,"a"),0!==rn.lastIndex||0!==an.lastIndex),fn=on.UNSUPPORTED_Y||on.BROKEN_CARET,dn=void 0!==/()??/.exec("")[1];(un||dn||fn)&&(cn=function(e){var t,n,r,i,a=this,o=fn&&a.sticky,s=tn.call(a),l=a.source,c=0,u=e;return o&&(-1===(s=s.replace("y","")).indexOf("g")&&(s+="g"),u=String(e).slice(a.lastIndex),a.lastIndex>0&&(!a.multiline||a.multiline&&"\n"!==e[a.lastIndex-1])&&(l="(?: "+l+")",u=" "+u,c++),n=new RegExp("^(?:"+l+")",s)),dn&&(n=new RegExp("^"+l+"$(?!\\s)",s)),un&&(t=a.lastIndex),r=sn.call(o?n:a,u),o?r?(r.input=r.input.slice(c),r[0]=r[0].slice(c),r.index=a.lastIndex,a.lastIndex+=r[0].length):a.lastIndex=0:un&&r&&(a.lastIndex=a.global?r.index+r[0].length:t),dn&&r&&r.length>1&&ln.call(r[0],n,(function(){for(i=1;i1?arguments[1]:void 0,r=oe(t.length),i=void 0===n?r:xn(oe(n),r),a=String(e);return En?En.call(t,a,i):t.slice(i-a.length,i)===a}});var Ln=Ne("species"),Tn=!i((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$
    ")})),Cn="$0"==="a".replace(/./,"$0"),On=Ne("replace"),An=!!/./[On]&&""===/./[On]("a","$0"),kn=!i((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]})),In=function(e,t,n,r){var a=Ne(e),o=!i((function(){var t={};return t[a]=function(){return 7},7!=""[e](t)})),s=o&&!i((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[Ln]=function(){return n},n.flags="",n[a]=/./[a]),n.exec=function(){return t=!0,null},n[a](""),!t}));if(!o||!s||"replace"===e&&(!Tn||!Cn||An)||"split"===e&&!kn){var l=/./[a],c=n(a,""[e],(function(e,t,n,r,i){return t.exec===pn?o&&!i?{done:!0,value:l.call(t,n,r)}:{done:!0,value:e.call(n,t,r)}:{done:!1}}),{REPLACE_KEEPS_$0:Cn,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:An}),u=c[0],f=c[1];Z(String.prototype,e,u),Z(RegExp.prototype,a,2==t?function(e,t){return f.call(e,this,t)}:function(e){return f.call(e,this)})}r&&A(RegExp.prototype[a],"sham",!0)},Pn=function(e){return function(t,n){var r,i,a=String(h(t)),o=ie(n),s=a.length;return o<0||o>=s?e?"":void 0:(r=a.charCodeAt(o))<55296||r>56319||o+1===s||(i=a.charCodeAt(o+1))<56320||i>57343?e?a.charAt(o):r:e?a.slice(o,o+2):i-56320+(r-55296<<10)+65536}},Mn={codeAt:Pn(!1),charAt:Pn(!0)}.charAt,Rn=function(e,t,n){return t+(n?Mn(e,t).length:1)},jn=function(e,t){var n=e.exec;if("function"==typeof n){var r=n.call(e,t);if("object"!=typeof r)throw TypeError("RegExp exec method returned something other than an Object or null");return r}if("RegExp"!==f(e))throw TypeError("RegExp#exec called on incompatible receiver");return pn.call(e,t)},Nn=Math.max,_n=Math.min,Fn=Math.floor,Wn=/\$([$&'`]|\d\d?|<[^>]*>)/g,Hn=/\$([$&'`]|\d\d?)/g;In("replace",2,(function(e,t,n,r){var i=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,a=r.REPLACE_KEEPS_$0,o=i?"$":"$0";return[function(n,r){var i=h(this),a=null==n?void 0:n[e];return void 0!==a?a.call(n,i,r):t.call(String(i),n,r)},function(e,r){if(!i&&a||"string"==typeof r&&-1===r.indexOf(o)){var l=n(t,e,this,r);if(l.done)return l.value}var c=T(e),u=String(this),f="function"==typeof r;f||(r=String(r));var d=c.global;if(d){var p=c.unicode;c.lastIndex=0}for(var h=[];;){var m=jn(c,u);if(null===m)break;if(h.push(m),!d)break;""===String(m[0])&&(c.lastIndex=Rn(u,oe(c.lastIndex),p))}for(var v,g="",y=0,b=0;b=y&&(g+=u.slice(y,E)+O,y=E+S.length)}return g+u.slice(y)}];function s(e,n,r,i,a,o){var s=r+e.length,l=i.length,c=Hn;return void 0!==a&&(a=Ae(a),c=Wn),t.call(o,c,(function(t,o){var c;switch(o.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,r);case"'":return n.slice(s);case"<":c=a[o.slice(1,-1)];break;default:var u=+o;if(0===u)return t;if(u>l){var f=Fn(u/10);return 0===f?t:f<=l?void 0===i[f-1]?o.charAt(1):i[f-1]+o.charAt(1):t}c=i[u-1]}return void 0===c?"":c}))}}));var Un=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};In("search",1,(function(e,t,n){return[function(t){var n=h(this),r=null==t?void 0:t[e];return void 0!==r?r.call(t,n):new RegExp(t)[e](String(n))},function(e){var r=n(t,e,this);if(r.done)return r.value;var i=T(e),a=String(this),o=i.lastIndex;Un(o,0)||(i.lastIndex=0);var s=jn(i,a);return Un(i.lastIndex,o)||(i.lastIndex=o),null===s?-1:s.index}]}));var $n=Ne("species"),Dn=[].push,qn=Math.min,Bn=!i((function(){return!RegExp(4294967295,"y")}));In("split",2,(function(e,t,n){var r;return r="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var r=String(h(this)),i=void 0===n?4294967295:n>>>0;if(0===i)return[];if(void 0===e)return[r];if(!vn(e))return t.call(r,e,i);for(var a,o,s,l=[],c=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),u=0,f=new RegExp(e.source,c+"g");(a=pn.call(f,r))&&!((o=f.lastIndex)>u&&(l.push(r.slice(u,a.index)),a.length>1&&a.index=i));)f.lastIndex===a.index&&f.lastIndex++;return u===r.length?!s&&f.test("")||l.push(""):l.push(r.slice(u)),l.length>i?l.slice(0,i):l}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var i=h(this),a=null==t?void 0:t[e];return void 0!==a?a.call(t,i,n):r.call(String(i),t,n)},function(e,i){var a=n(r,e,this,i,r!==t);if(a.done)return a.value;var o=T(e),s=String(this),l=function(e,t){var n,r=T(e).constructor;return void 0===r||null==(n=T(r)[$n])?t:Oe(n)}(o,RegExp),c=o.unicode,u=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(Bn?"y":"g"),f=new l(Bn?o:"^(?:"+o.source+")",u),d=void 0===i?4294967295:i>>>0;if(0===d)return[];if(0===s.length)return null===jn(f,s)?[s]:[];for(var p=0,h=0,m=[];h1?arguments[1]:void 0,t.length)),r=String(e);return Vn?Vn.call(t,r,n):t.slice(n,n+r.length)===r}});var Xn,Yn=Kt.trim;Ce({target:"String",proto:!0,forced:(Xn="trim",i((function(){return!!Dt[Xn]()||"​…᠎"!="​…᠎"[Xn]()||Dt[Xn].name!==Xn})))},{trim:function(){return Yn(this)}});for(var Jn in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}){var Zn=r[Jn],Qn=Zn&&Zn.prototype;if(Qn&&Qn.forEach!==ut)try{A(Qn,"forEach",ut)}catch(e){Qn.forEach=ut}}var er=[].slice,tr=function(e){return function(t,n){var r=arguments.length>2,i=r?er.call(arguments,2):void 0;return e(r?function(){("function"==typeof t?t:Function(t)).apply(this,i)}:t,n)}};Ce({global:!0,bind:!0,forced:/MSIE .\./.test(Je)},{setTimeout:tr(r.setTimeout),setInterval:tr(r.setInterval)});return String.prototype.startsWith||(String.prototype.startsWith=function(e,t){return this.substr(t||0,e.length)===e}),String.prototype.endsWith||(String.prototype.endsWith=function(e,t){return(void 0===t||t>this.length)&&(t=this.length),this.substring(t-e.length,t)===e}),function(){var e,t,n,r,i=(e=/(msie) ([\w.]+)/.exec(window.navigator.userAgent.toLowerCase()))&&"msie"===e[1]?parseFloat(e[2]):null,a=!1;function o(e){(r=e.menu||{}).path=r.path||function(){var e;if(document.querySelector('script[src$="menu.js"]')){var t=document.querySelector('script[src$="menu.js"]');t&&(e=t.src.slice(0,-7))}else e=("undefined"==typeof document?new(require("url").URL)("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("menu.js",document.baseURI).href).slice(0,("undefined"==typeof document?new(require("url").URL)("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("menu.js",document.baseURI).href).lastIndexOf("/")+1);return e}()||"plugin/menu/",r.path.endsWith("/")||(r.path+="/"),void 0===r.side&&(r.side="left"),void 0===r.numbers&&(r.numbers=!1),"string"!=typeof r.titleSelector&&(r.titleSelector="h1, h2, h3, h4, h5"),void 0===r.hideMissingTitles&&(r.hideMissingTitles=!1),void 0===r.useTextContentForMissingTitles&&(r.useTextContentForMissingTitles=!1),void 0===r.markers&&(r.markers=!0),"string"!=typeof r.themesPath&&(r.themesPath="dist/theme/"),r.themesPath.endsWith("/")||(r.themesPath+="/"),O("link#theme")||(r.themes=!1),!0===r.themes?r.themes=[{name:"Black",theme:r.themesPath+"black.css"},{name:"White",theme:r.themesPath+"white.css"},{name:"League",theme:r.themesPath+"league.css"},{name:"Sky",theme:r.themesPath+"sky.css"},{name:"Beige",theme:r.themesPath+"beige.css"},{name:"Simple",theme:r.themesPath+"simple.css"},{name:"Serif",theme:r.themesPath+"serif.css"},{name:"Blood",theme:r.themesPath+"blood.css"},{name:"Night",theme:r.themesPath+"night.css"},{name:"Moon",theme:r.themesPath+"moon.css"},{name:"Solarized",theme:r.themesPath+"solarized.css"}]:Array.isArray(r.themes)||(r.themes=!1),void 0===r.transitions&&(r.transitions=!1),!0===r.transitions?r.transitions=["None","Fade","Slide","Convex","Concave","Zoom"]:!1===r.transitions||Array.isArray(r.transitions)&&r.transitions.every((function(e){return"string"==typeof e}))||(console.error("reveal.js-menu error: transitions config value must be 'true' or an array of strings, eg ['None', 'Fade', 'Slide')"),r.transitions=!1),i&&i<=9&&(r.transitions=!1),void 0===r.openButton&&(r.openButton=!0),void 0===r.openSlideNumber&&(r.openSlideNumber=!1),void 0===r.keyboard&&(r.keyboard=!0),void 0===r.sticky&&(r.sticky=!1),void 0===r.autoOpen&&(r.autoOpen=!0),void 0===r.delayInit&&(r.delayInit=!1),void 0===r.openOnInit&&(r.openOnInit=!1)}var s=!0;function l(){s=!1}function c(){O("nav.slide-menu").addEventListener("mousemove",(function e(t){O("nav.slide-menu").removeEventListener("mousemove",e),s=!0}))}function u(e){var t=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-e.scrollLeft,n+=e.offsetTop-e.scrollTop,e=e.offsetParent;return{top:n,left:t}}(e).top-e.offsetParent.offsetTop;if(t<0)return-t;var n=e.offsetParent.offsetHeight-(e.offsetTop-e.offsetParent.scrollTop+e.offsetHeight);return n<0?n:0}function f(e){var t=u(e);t&&(l(),e.scrollIntoView(t>0),c())}function d(e){l(),e.offsetParent.scrollTop=e.offsetTop,c()}function p(e){l(),e.offsetParent.scrollTop=e.offsetTop-e.offsetParent.offsetHeight+e.offsetHeight,c()}function h(e){e.classList.add("selected"),f(e),r.sticky&&r.autoOpen&&E(e)}function m(e){if(b())switch(e.stopImmediatePropagation(),e.keyCode){case 72:case 37:!function(){var e=parseInt(O(".active-toolbar-button").getAttribute("data-button"))-1;e<0&&(e=T-1);S(null,O('.toolbar-panel-button[data-button="'+e+'"]').getAttribute("data-panel"))}();break;case 76:case 39:l=(parseInt(O(".active-toolbar-button").getAttribute("data-button"))+1)%T,S(null,O('.toolbar-panel-button[data-button="'+l+'"]').getAttribute("data-panel"));break;case 75:case 38:if(s=O(".active-menu-panel .slide-menu-items li.selected")||O(".active-menu-panel .slide-menu-items li.active"))A(".active-menu-panel .slide-menu-items li").forEach((function(e){e.classList.remove("selected")})),h(O('.active-menu-panel .slide-menu-items li[data-item="'+(parseInt(s.getAttribute("data-item"))-1)+'"]')||s);else(o=O(".active-menu-panel .slide-menu-items li.slide-menu-item"))&&h(o);break;case 74:case 40:if(s=O(".active-menu-panel .slide-menu-items li.selected")||O(".active-menu-panel .slide-menu-items li.active"))A(".active-menu-panel .slide-menu-items li").forEach((function(e){e.classList.remove("selected")})),h(O('.active-menu-panel .slide-menu-items li[data-item="'+(parseInt(s.getAttribute("data-item"))+1)+'"]')||s);else(o=O(".active-menu-panel .slide-menu-items li.slide-menu-item"))&&h(o);break;case 33:case 85:var t=A(".active-menu-panel .slide-menu-items li").filter((function(e){return u(e)>0})),n=A(".active-menu-panel .slide-menu-items li").filter((function(e){return 0==u(e)})),r=t.length>0&&Math.abs(u(t[t.length-1]))0&&(p(r),r=(n=A(".active-menu-panel .slide-menu-items li").filter((function(e){return 0==u(e)})))[0]==r?t[t.length-1]:n[0]),A(".active-menu-panel .slide-menu-items li").forEach((function(e){e.classList.remove("selected")})),h(r),d(r));break;case 34:case 68:n=A(".active-menu-panel .slide-menu-items li").filter((function(e){return 0==u(e)}));var i=A(".active-menu-panel .slide-menu-items li").filter((function(e){return u(e)<0})),a=i.length>0&&Math.abs(u(i[0]))0&&(d(a),a=(n=A(".active-menu-panel .slide-menu-items li").filter((function(e){return 0==u(e)})))[n.length-1]==a?i[0]:n[n.length-1]),A(".active-menu-panel .slide-menu-items li").forEach((function(e){e.classList.remove("selected")})),h(a),p(a));break;case 36:A(".active-menu-panel .slide-menu-items li").forEach((function(e){e.classList.remove("selected")})),(o=O(".active-menu-panel .slide-menu-items li:first-of-type"))&&(o.classList.add("selected"),f(o));break;case 35:var o;A(".active-menu-panel .slide-menu-items li").forEach((function(e){e.classList.remove("selected")})),(o=O(".active-menu-panel .slide-menu-items:last-of-type li:last-of-type"))&&(o.classList.add("selected"),f(o));break;case 32:case 13:var s;(s=O(".active-menu-panel .slide-menu-items li.selected"))&&E(s,!0);break;case 27:g(null,!0)}var l}function v(e){(e&&e.preventDefault(),b())||(O("body").classList.add("slide-menu-active"),O(".reveal").classList.add("has-"+r.effect+"-"+r.side),O(".slide-menu").classList.add("active"),O(".slide-menu-overlay").classList.add("active"),r.themes&&(A('div[data-panel="Themes"] li').forEach((function(e){e.classList.remove("active")})),A('li[data-theme="'+O("link#theme").getAttribute("href")+'"]').forEach((function(e){e.classList.add("active")}))),r.transitions&&(A('div[data-panel="Transitions"] li').forEach((function(e){e.classList.remove("active")})),A('li[data-transition="'+n.transition+'"]').forEach((function(e){e.classList.add("active")}))),A(".slide-menu-panel li.active").forEach((function(e){e.classList.add("selected"),f(e)})))}function g(e,t){e&&e.preventDefault(),r.sticky&&!t||(O("body").classList.remove("slide-menu-active"),O(".reveal").classList.remove("has-"+r.effect+"-"+r.side),O(".slide-menu").classList.remove("active"),O(".slide-menu-overlay").classList.remove("active"),A(".slide-menu-panel li.selected").forEach((function(e){e.classList.remove("selected")})))}function y(e){b()?g(e,!0):v(e)}function b(){return O("body").classList.contains("slide-menu-active")}function S(e,t){v(e);var n=t;"string"!=typeof t&&(n=e.currentTarget.getAttribute("data-panel")),O(".slide-menu-toolbar > li.active-toolbar-button").classList.remove("active-toolbar-button"),O('li[data-panel="'+n+'"]').classList.add("active-toolbar-button"),O(".slide-menu-panel.active-menu-panel").classList.remove("active-menu-panel"),O('div[data-panel="'+n+'"]').classList.add("active-menu-panel")}function E(e,n){var i=parseInt(e.getAttribute("data-slide-h")),a=parseInt(e.getAttribute("data-slide-v")),o=e.getAttribute("data-theme"),s=e.getAttribute("data-highlight-theme"),l=e.getAttribute("data-transition");isNaN(i)||isNaN(a)||t.slide(i,a),o&&I("theme",o),s&&I("highlight-theme",s),l&&t.configure({transition:l});var c=O("a",e);c&&(n||!r.sticky||r.autoOpen&&c.href.startsWith("#")||c.href.startsWith(window.location.origin+window.location.pathname+"#"))&&c.click(),g()}function x(e){"A"!==e.target.nodeName&&e.preventDefault(),E(e.currentTarget)}function w(){var e=t.getState();A("li.slide-menu-item, li.slide-menu-item-vertical").forEach((function(t){t.classList.remove("past"),t.classList.remove("active"),t.classList.remove("future");var n=parseInt(t.getAttribute("data-slide-h")),r=parseInt(t.getAttribute("data-slide-v"));n",s.appendChild(k("br"),O("i",s)),s.appendChild(k("span",{class:"slide-menu-toolbar-label"},e),O("i",s)),s.onclick=i,d.appendChild(s),s},i=function(e,i,a,o,s){function l(e,t){if(""===e)return null;var n=t?O(e,i):O(e);return n?n.textContent:null}var c=i.getAttribute("data-menu-title")||l(".menu-title",i)||l(r.titleSelector,i);if(!c&&r.useTextContentForMissingTitles&&(c=i.textContent.trim())&&(c=c.split("\n").map((function(e){return e.trim()})).join(" ").trim().replace(/^(.{16}[^\s]*).*/,"$1").replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")+"..."),!c){if(r.hideMissingTitles)return"";e+=" no-title",c="Slide "+(a+1)}var u=k("li",{class:e,"data-item":a,"data-slide-h":o,"data-slide-v":void 0===s?0:s});if(r.markers&&(u.appendChild(k("i",{class:"fas fa-check-circle fa-fw past"})),u.appendChild(k("i",{class:"fas fa-arrow-alt-circle-right fa-fw active"})),u.appendChild(k("i",{class:"far fa-circle fa-fw future"}))),r.numbers){var f=[],d="h.v";switch("string"==typeof r.numbers?d=r.numbers:"string"==typeof n.slideNumber&&(d=n.slideNumber),d){case"c":f.push(a+1);break;case"c/t":f.push(a+1,"/",t.getTotalSlides());break;case"h/v":f.push(o+1),"number"!=typeof s||isNaN(s)||f.push("/",s+1);break;default:f.push(o+1),"number"!=typeof s||isNaN(s)||f.push(".",s+1)}u.appendChild(k("span",{class:"slide-menu-item-number"},f.join("")+". "))}return u.appendChild(k("span",{class:"slide-menu-item-title"},c)),u},o=function(e){s&&(A(".active-menu-panel .slide-menu-items li.selected").forEach((function(e){e.classList.remove("selected")})),e.currentTarget.classList.add("selected"))},l=O(".reveal").parentElement,c=k("div",{class:"slide-menu-wrapper"});l.appendChild(c);var u=k("nav",{class:"slide-menu slide-menu--"+r.side});"string"==typeof r.width&&(-1!=["normal","wide","third","half","full"].indexOf(r.width)?u.classList.add("slide-menu--"+r.width):(u.classList.add("slide-menu--custom"),u.style.width=r.width)),c.appendChild(u),L();var f=k("div",{class:"slide-menu-overlay"});c.appendChild(f),f.onclick=function(){g(null,!0)};var d=k("ol",{class:"slide-menu-toolbar"});O(".slide-menu").appendChild(d),e("Slides","Slides","fa-images","fas",S,!0),r.custom&&r.custom.forEach((function(t,n,r){e(t.title,"Custom"+n,t.icon,null,S)})),r.themes&&e("Themes","Themes","fa-adjust","fas",S),r.transitions&&e("Transitions","Transitions","fa-sticky-note","fas",S);var p=k("li",{id:"close",class:"toolbar-panel-button"});if(p.appendChild(k("i",{class:"fas fa-times"})),p.appendChild(k("br")),p.appendChild(k("span",{class:"slide-menu-toolbar-label"},"Close")),p.onclick=function(){g(null,!0)},d.appendChild(p),function e(){if(document.querySelector("section[data-markdown]:not([data-markdown-parsed])"))setTimeout(e,100);else{var t=k("div",{"data-panel":"Slides",class:"slide-menu-panel active-menu-panel"});t.appendChild(k("ul",{class:"slide-menu-items"})),u.appendChild(t);var n=O('.slide-menu-panel[data-panel="Slides"] > .slide-menu-items'),r=0;A(".slides > section").forEach((function(e,t){var a=A("section",e);if(a.length>0)a.forEach((function(e,a){var o=i(0===a?"slide-menu-item":"slide-menu-item-vertical",e,r,t,a);o&&n.appendChild(o),r++}));else{var o=i("slide-menu-item",e,r,t);o&&n.appendChild(o),r++}})),A(".slide-menu-item, .slide-menu-item-vertical").forEach((function(e){e.onclick=x})),w()}}(),t.addEventListener("slidechanged",w),r.custom){var h=function(){this.status>=200&&this.status<300?(this.panel.innerHTML=this.responseText,C(this.panel)):I(this)},E=function(){I(this)},C=function(e){A("ul.slide-menu-items li.slide-menu-item",e).forEach((function(e,t){e.setAttribute("data-item",t+1),e.onclick=x,e.addEventListener("mouseenter",o)}))},I=function(e){var t="

    ERROR: The attempt to fetch "+e.responseURL+" failed with HTTP status "+e.status+" ("+e.statusText+").

    Remember that you need to serve the presentation HTML from a HTTP server.

    ";e.panel.innerHTML=t};r.custom.forEach((function(e,t,n){var r=k("div",{"data-panel":"Custom"+t,class:"slide-menu-panel slide-menu-custom-panel"});e.content?(r.innerHTML=e.content,C(r)):e.src&&function(e,t){var n=new XMLHttpRequest;n.panel=e,n.arguments=Array.prototype.slice.call(arguments,2),n.onload=h,n.onerror=E,n.open("get",t,!0),n.send(null)}(r,e.src),u.appendChild(r)}))}if(r.themes){var P=k("div",{class:"slide-menu-panel","data-panel":"Themes"});u.appendChild(P);var M=k("ul",{class:"slide-menu-items"});P.appendChild(M),r.themes.forEach((function(e,t){var n={class:"slide-menu-item","data-item":""+(t+1)};e.theme&&(n["data-theme"]=e.theme),e.highlightTheme&&(n["data-highlight-theme"]=e.highlightTheme);var r=k("li",n,e.name);M.appendChild(r),r.onclick=x}))}if(r.transitions){P=k("div",{class:"slide-menu-panel","data-panel":"Transitions"});u.appendChild(P);M=k("ul",{class:"slide-menu-items"});P.appendChild(M),r.transitions.forEach((function(e,t){var n=k("li",{class:"slide-menu-item","data-transition":e.toLowerCase(),"data-item":""+(t+1)},e);M.appendChild(n),n.onclick=x}))}if(r.openButton){var R=k("div",{class:"slide-menu-button"}),j=k("a",{href:"#"});j.appendChild(k("i",{class:"fas fa-bars"})),R.appendChild(j),O(".reveal").appendChild(R),R.onclick=v}if(r.openSlideNumber)O("div.slide-number").onclick=v;A(".slide-menu-panel .slide-menu-items li").forEach((function(e){e.addEventListener("mouseenter",o)}))}if(r.keyboard){if(document.addEventListener("keydown",m,!1),window.addEventListener("message",(function(e){var t;try{t=JSON.parse(e.data)}catch(e){}t&&"triggerKey"===t.method&&m({keyCode:t.args[0],stopImmediatePropagation:function(){}})})),n.keyboardCondition&&"function"==typeof n.keyboardCondition){var N=n.keyboardCondition;n.keyboardCondition=function(e){return N(e)&&(!b()||77==e.keyCode)}}else n.keyboardCondition=function(e){return!b()||77==e.keyCode};t.addKeyBinding({keyCode:77,key:"M",description:"Toggle menu"},y)}r.openOnInit&&v(),a=!0}function O(e,t){return t||(t=document),t.querySelector(e)}function A(e,t){return t||(t=document),Array.prototype.slice.call(t.querySelectorAll(e))}function k(e,t,n){var r=document.createElement(e);return t&&Object.getOwnPropertyNames(t).forEach((function(e){r.setAttribute(e,t[e])})),n&&(r.innerHTML=n),r}function I(e,t){var n=O("link#"+e),r=n.parentElement,i=n.nextElementSibling;n.remove();var a=n.cloneNode();a.setAttribute("href",t),a.onload=function(){L()},r.insertBefore(a,i)}function P(e,t,n){var r,i=document.querySelector("head");"script"===t?((r=document.createElement("script")).type="text/javascript",r.src=e):"stylesheet"===t&&((r=document.createElement("link")).rel="stylesheet",r.href=e);var a=function(){"function"==typeof n&&(n.call(),n=null)};r.onload=a,r.onreadystatechange=function(){"loaded"===this.readyState&&a()},i.appendChild(r)}function M(){var e,a,o,s=!i||i>=9;t.isSpeakerNotes()&&window.location.search.endsWith("controls=false")&&(s=!1),s&&(r.delayInit||C(),e="menu-ready",(o=document.createEvent("HTMLEvents",1,2)).initEvent(e,!0,!0),function(e,t){for(var n in t)e[n]=t[n]}(o,a),document.querySelector(".reveal").dispatchEvent(o),n.postMessageEvents&&window.parent!==window.self&&window.parent.postMessage(JSON.stringify({namespace:"reveal",eventName:e,state:t.getState()}),"*"))}return{id:"menu",init:function(e){o(n=(t=e).getConfig()),P(r.path+"menu.css","stylesheet",(function(){void 0===r.loadIcons||r.loadIcons?P(r.path+"font-awesome/css/all.css","stylesheet",M):M()}))},toggle:y,openMenu:v,closeMenu:g,openPanel:S,isOpen:b,initialiseMenu:C,isMenuInitialised:function(){return a}}}})); diff --git a/docs/1_Fundamentals/plugin/menu/package.json b/docs/1_Fundamentals/plugin/menu/package.json new file mode 100644 index 0000000..161691b --- /dev/null +++ b/docs/1_Fundamentals/plugin/menu/package.json @@ -0,0 +1,35 @@ +{ + "name": "reveal.js-menu", + "version": "2.1.0", + "description": "A slideout menu for navigating reveal.js presentations", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "gulp" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/denehyg/reveal.js-menu.git" + }, + "keywords": [ + "reveal", + "menu" + ], + "author": "Greg Denehy", + "license": "MIT, Copyright (C) 2020 Greg Denehy", + "bugs": { + "url": "https://github.com/denehyg/reveal.js-menu/issues" + }, + "homepage": "https://github.com/denehyg/reveal.js-menu#readme", + "devDependencies": { + "@babel/core": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@rollup/plugin-babel": "^5.0.4", + "@rollup/plugin-commonjs": "^13.0.0", + "@rollup/plugin-node-resolve": "^8.1.0", + "babel-plugin-transform-html-import-to-string": "0.0.1", + "core-js": "^3.6.5", + "gulp": "^4.0.2", + "rollup": "^2.21.0", + "rollup-plugin-terser": "^6.1.0" + } +} diff --git a/docs/1_Fundamentals/plugin/menu/plugin.js b/docs/1_Fundamentals/plugin/menu/plugin.js new file mode 100644 index 0000000..b7939e5 --- /dev/null +++ b/docs/1_Fundamentals/plugin/menu/plugin.js @@ -0,0 +1,1252 @@ +/* + * Reveal.js menu plugin + * MIT licensed + * (c) Greg Denehy 2020 + */ + +const Plugin = () => { + const ieVersion = (function () { + let browser = /(msie) ([\w.]+)/.exec( + window.navigator.userAgent.toLowerCase() + ); + if (browser && browser[1] === 'msie') { + return parseFloat(browser[2]); + } + return null; + })(); + + var deck; + var config; + var options; + var initialised = false; + + function scriptPath() { + // obtain plugin path from the script element + var path; + + const script = document.querySelector('script[src$="menu.js"]'); + if (script) { + var sel = document.querySelector('script[src$="menu.js"]'); + if (sel) { + path = sel.src.slice(0, -7); + } + } else { + path = import.meta.url.slice(0, import.meta.url.lastIndexOf('/') + 1); + } + + return path; + } + + function initOptions(config) { + options = config.menu || {}; + options.path = options.path || scriptPath() || 'plugin/menu/'; + if (!options.path.endsWith('/')) { + options.path += '/'; + } + + // Set defaults + if (options.side === undefined) options.side = 'left'; + + if (options.numbers === undefined) options.numbers = false; + + if (typeof options.titleSelector !== 'string') + options.titleSelector = 'h1, h2, h3, h4, h5'; + + if (options.hideMissingTitles === undefined) + options.hideMissingTitles = false; + + if (options.useTextContentForMissingTitles === undefined) + options.useTextContentForMissingTitles = false; + + if (options.markers === undefined) options.markers = true; + + if (typeof options.themesPath !== 'string') + options.themesPath = 'dist/theme/'; + if (!options.themesPath.endsWith('/')) options.themesPath += '/'; + + if (!select('link#theme')) options.themes = false; + if (options.themes === true) { + options.themes = [ + { name: 'Black', theme: options.themesPath + 'black.css' }, + { name: 'White', theme: options.themesPath + 'white.css' }, + { name: 'League', theme: options.themesPath + 'league.css' }, + { name: 'Sky', theme: options.themesPath + 'sky.css' }, + { name: 'Beige', theme: options.themesPath + 'beige.css' }, + { name: 'Simple', theme: options.themesPath + 'simple.css' }, + { name: 'Serif', theme: options.themesPath + 'serif.css' }, + { name: 'Blood', theme: options.themesPath + 'blood.css' }, + { name: 'Night', theme: options.themesPath + 'night.css' }, + { name: 'Moon', theme: options.themesPath + 'moon.css' }, + { name: 'Solarized', theme: options.themesPath + 'solarized.css' } + ]; + } else if (!Array.isArray(options.themes)) { + options.themes = false; + } + + if (options.transitions === undefined) options.transitions = false; + if (options.transitions === true) { + options.transitions = [ + 'None', + 'Fade', + 'Slide', + 'Convex', + 'Concave', + 'Zoom' + ]; + } else if ( + options.transitions !== false && + (!Array.isArray(options.transitions) || + !options.transitions.every(function (e) { + return typeof e === 'string'; + })) + ) { + console.error( + "reveal.js-menu error: transitions config value must be 'true' or an array of strings, eg ['None', 'Fade', 'Slide')" + ); + options.transitions = false; + } + if (ieVersion && ieVersion <= 9) { + // transitions aren't support in IE9 anyway, so no point in showing them + options.transitions = false; + } + + if (typeof options.openButton === 'undefined') options.openButton = true; + + if (typeof options.openSlideNumber === 'undefined') + options.openSlideNumber = false; + + if (typeof options.keyboard === 'undefined') options.keyboard = true; + + if (typeof options.sticky === 'undefined') options.sticky = false; + + if (typeof options.autoOpen === 'undefined') options.autoOpen = true; + + if (typeof options.delayInit === 'undefined') options.delayInit = false; + + if (typeof options.openOnInit === 'undefined') options.openOnInit = false; + } + + var mouseSelectionEnabled = true; + function disableMouseSelection() { + mouseSelectionEnabled = false; + } + + function reenableMouseSelection() { + // wait until the mouse has moved before re-enabling mouse selection + // to avoid selections on scroll + select('nav.slide-menu').addEventListener('mousemove', function fn(e) { + select('nav.slide-menu').removeEventListener('mousemove', fn); + //XXX this should select the item under the mouse + mouseSelectionEnabled = true; + }); + } + + // + // Keyboard handling + // + function getOffset(el) { + var _x = 0; + var _y = 0; + while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) { + _x += el.offsetLeft - el.scrollLeft; + _y += el.offsetTop - el.scrollTop; + el = el.offsetParent; + } + return { top: _y, left: _x }; + } + + function visibleOffset(el) { + var offsetFromTop = getOffset(el).top - el.offsetParent.offsetTop; + if (offsetFromTop < 0) return -offsetFromTop; + var offsetFromBottom = + el.offsetParent.offsetHeight - + (el.offsetTop - el.offsetParent.scrollTop + el.offsetHeight); + if (offsetFromBottom < 0) return offsetFromBottom; + return 0; + } + + function keepVisible(el) { + var offset = visibleOffset(el); + if (offset) { + disableMouseSelection(); + el.scrollIntoView(offset > 0); + reenableMouseSelection(); + } + } + + function scrollItemToTop(el) { + disableMouseSelection(); + el.offsetParent.scrollTop = el.offsetTop; + reenableMouseSelection(); + } + + function scrollItemToBottom(el) { + disableMouseSelection(); + el.offsetParent.scrollTop = + el.offsetTop - el.offsetParent.offsetHeight + el.offsetHeight; + reenableMouseSelection(); + } + + function selectItem(el) { + el.classList.add('selected'); + keepVisible(el); + if (options.sticky && options.autoOpen) openItem(el); + } + + function onDocumentKeyDown(event) { + // opening menu is handled by registering key binding with Reveal below + if (isOpen()) { + event.stopImmediatePropagation(); + switch (event.keyCode) { + // case 77: + // closeMenu(); + // break; + // h, left - change panel + case 72: + case 37: + prevPanel(); + break; + // l, right - change panel + case 76: + case 39: + nextPanel(); + break; + // k, up + case 75: + case 38: + var currItem = + select('.active-menu-panel .slide-menu-items li.selected') || + select('.active-menu-panel .slide-menu-items li.active'); + if (currItem) { + selectAll('.active-menu-panel .slide-menu-items li').forEach( + function (item) { + item.classList.remove('selected'); + } + ); + var nextItem = + select( + '.active-menu-panel .slide-menu-items li[data-item="' + + (parseInt(currItem.getAttribute('data-item')) - 1) + + '"]' + ) || currItem; + selectItem(nextItem); + } else { + var item = select( + '.active-menu-panel .slide-menu-items li.slide-menu-item' + ); + if (item) selectItem(item); + } + break; + // j, down + case 74: + case 40: + var currItem = + select('.active-menu-panel .slide-menu-items li.selected') || + select('.active-menu-panel .slide-menu-items li.active'); + if (currItem) { + selectAll('.active-menu-panel .slide-menu-items li').forEach( + function (item) { + item.classList.remove('selected'); + } + ); + var nextItem = + select( + '.active-menu-panel .slide-menu-items li[data-item="' + + (parseInt(currItem.getAttribute('data-item')) + 1) + + '"]' + ) || currItem; + selectItem(nextItem); + } else { + var item = select( + '.active-menu-panel .slide-menu-items li.slide-menu-item' + ); + if (item) selectItem(item); + } + break; + // pageup, u + case 33: + case 85: + var itemsAbove = selectAll( + '.active-menu-panel .slide-menu-items li' + ).filter(function (item) { + return visibleOffset(item) > 0; + }); + var visibleItems = selectAll( + '.active-menu-panel .slide-menu-items li' + ).filter(function (item) { + return visibleOffset(item) == 0; + }); + + var firstVisible = + itemsAbove.length > 0 && + Math.abs(visibleOffset(itemsAbove[itemsAbove.length - 1])) < + itemsAbove[itemsAbove.length - 1].clientHeight + ? itemsAbove[itemsAbove.length - 1] + : visibleItems[0]; + if (firstVisible) { + if ( + firstVisible.classList.contains('selected') && + itemsAbove.length > 0 + ) { + // at top of viewport already, page scroll (if not at start) + // ...move selected item to bottom, and change selection to last fully visible item at top + scrollItemToBottom(firstVisible); + visibleItems = selectAll( + '.active-menu-panel .slide-menu-items li' + ).filter(function (item) { + return visibleOffset(item) == 0; + }); + if (visibleItems[0] == firstVisible) { + // prev item is still beyond the viewport (for custom panels) + firstVisible = itemsAbove[itemsAbove.length - 1]; + } else { + firstVisible = visibleItems[0]; + } + } + selectAll('.active-menu-panel .slide-menu-items li').forEach( + function (item) { + item.classList.remove('selected'); + } + ); + selectItem(firstVisible); + // ensure selected item is positioned at the top of the viewport + scrollItemToTop(firstVisible); + } + break; + // pagedown, d + case 34: + case 68: + var visibleItems = selectAll( + '.active-menu-panel .slide-menu-items li' + ).filter(function (item) { + return visibleOffset(item) == 0; + }); + var itemsBelow = selectAll( + '.active-menu-panel .slide-menu-items li' + ).filter(function (item) { + return visibleOffset(item) < 0; + }); + + var lastVisible = + itemsBelow.length > 0 && + Math.abs(visibleOffset(itemsBelow[0])) < itemsBelow[0].clientHeight + ? itemsBelow[0] + : visibleItems[visibleItems.length - 1]; + if (lastVisible) { + if ( + lastVisible.classList.contains('selected') && + itemsBelow.length > 0 + ) { + // at bottom of viewport already, page scroll (if not at end) + // ...move selected item to top, and change selection to last fully visible item at bottom + scrollItemToTop(lastVisible); + visibleItems = selectAll( + '.active-menu-panel .slide-menu-items li' + ).filter(function (item) { + return visibleOffset(item) == 0; + }); + if (visibleItems[visibleItems.length - 1] == lastVisible) { + // next item is still beyond the viewport (for custom panels) + lastVisible = itemsBelow[0]; + } else { + lastVisible = visibleItems[visibleItems.length - 1]; + } + } + selectAll('.active-menu-panel .slide-menu-items li').forEach( + function (item) { + item.classList.remove('selected'); + } + ); + selectItem(lastVisible); + // ensure selected item is positioned at the bottom of the viewport + scrollItemToBottom(lastVisible); + } + break; + // home + case 36: + selectAll('.active-menu-panel .slide-menu-items li').forEach( + function (item) { + item.classList.remove('selected'); + } + ); + var item = select( + '.active-menu-panel .slide-menu-items li:first-of-type' + ); + if (item) { + item.classList.add('selected'); + keepVisible(item); + } + break; + // end + case 35: + selectAll('.active-menu-panel .slide-menu-items li').forEach( + function (item) { + item.classList.remove('selected'); + } + ); + var item = select( + '.active-menu-panel .slide-menu-items:last-of-type li:last-of-type' + ); + if (item) { + item.classList.add('selected'); + keepVisible(item); + } + break; + // space, return + case 32: + case 13: + var currItem = select( + '.active-menu-panel .slide-menu-items li.selected' + ); + if (currItem) { + openItem(currItem, true); + } + break; + // esc + case 27: + closeMenu(null, true); + break; + } + } + } + + // + // Utilty functions + // + + function openMenu(event) { + if (event) event.preventDefault(); + if (!isOpen()) { + select('body').classList.add('slide-menu-active'); + select('.reveal').classList.add( + 'has-' + options.effect + '-' + options.side + ); + select('.slide-menu').classList.add('active'); + select('.slide-menu-overlay').classList.add('active'); + + // identify active theme + if (options.themes) { + selectAll('div[data-panel="Themes"] li').forEach(function (i) { + i.classList.remove('active'); + }); + selectAll( + 'li[data-theme="' + select('link#theme').getAttribute('href') + '"]' + ).forEach(function (i) { + i.classList.add('active'); + }); + } + + // identify active transition + if (options.transitions) { + selectAll('div[data-panel="Transitions"] li').forEach(function (i) { + i.classList.remove('active'); + }); + selectAll('li[data-transition="' + config.transition + '"]').forEach( + function (i) { + i.classList.add('active'); + } + ); + } + + // set item selections to match active items + var items = selectAll('.slide-menu-panel li.active'); + items.forEach(function (i) { + i.classList.add('selected'); + keepVisible(i); + }); + } + } + + function closeMenu(event, force) { + if (event) event.preventDefault(); + if (!options.sticky || force) { + select('body').classList.remove('slide-menu-active'); + select('.reveal').classList.remove( + 'has-' + options.effect + '-' + options.side + ); + select('.slide-menu').classList.remove('active'); + select('.slide-menu-overlay').classList.remove('active'); + selectAll('.slide-menu-panel li.selected').forEach(function (i) { + i.classList.remove('selected'); + }); + } + } + + function toggleMenu(event) { + if (isOpen()) { + closeMenu(event, true); + } else { + openMenu(event); + } + } + + function isOpen() { + return select('body').classList.contains('slide-menu-active'); + } + + function openPanel(event, ref) { + openMenu(event); + var panel = ref; + if (typeof ref !== 'string') { + panel = event.currentTarget.getAttribute('data-panel'); + } + select('.slide-menu-toolbar > li.active-toolbar-button').classList.remove( + 'active-toolbar-button' + ); + select('li[data-panel="' + panel + '"]').classList.add( + 'active-toolbar-button' + ); + select('.slide-menu-panel.active-menu-panel').classList.remove( + 'active-menu-panel' + ); + select('div[data-panel="' + panel + '"]').classList.add( + 'active-menu-panel' + ); + } + + function nextPanel() { + var next = + (parseInt(select('.active-toolbar-button').getAttribute('data-button')) + + 1) % + buttons; + openPanel( + null, + select('.toolbar-panel-button[data-button="' + next + '"]').getAttribute( + 'data-panel' + ) + ); + } + + function prevPanel() { + var next = + parseInt(select('.active-toolbar-button').getAttribute('data-button')) - + 1; + if (next < 0) { + next = buttons - 1; + } + openPanel( + null, + select('.toolbar-panel-button[data-button="' + next + '"]').getAttribute( + 'data-panel' + ) + ); + } + + function openItem(item, force) { + var h = parseInt(item.getAttribute('data-slide-h')); + var v = parseInt(item.getAttribute('data-slide-v')); + var theme = item.getAttribute('data-theme'); + var highlightTheme = item.getAttribute('data-highlight-theme'); + var transition = item.getAttribute('data-transition'); + + if (!isNaN(h) && !isNaN(v)) { + deck.slide(h, v); + } + + if (theme) { + changeStylesheet('theme', theme); + } + + if (highlightTheme) { + changeStylesheet('highlight-theme', highlightTheme); + } + + if (transition) { + deck.configure({ transition: transition }); + } + + var link = select('a', item); + if (link) { + if ( + force || + !options.sticky || + (options.autoOpen && link.href.startsWith('#')) || + link.href.startsWith( + window.location.origin + window.location.pathname + '#' + ) + ) { + link.click(); + } + } + + closeMenu(); + } + + function clicked(event) { + if (event.target.nodeName !== 'A') { + event.preventDefault(); + } + openItem(event.currentTarget); + } + + function highlightCurrentSlide() { + var state = deck.getState(); + selectAll('li.slide-menu-item, li.slide-menu-item-vertical').forEach( + function (item) { + item.classList.remove('past'); + item.classList.remove('active'); + item.classList.remove('future'); + + var h = parseInt(item.getAttribute('data-slide-h')); + var v = parseInt(item.getAttribute('data-slide-v')); + if (h < state.indexh || (h === state.indexh && v < state.indexv)) { + item.classList.add('past'); + } else if (h === state.indexh && v === state.indexv) { + item.classList.add('active'); + } else { + item.classList.add('future'); + } + } + ); + } + + function matchRevealStyle() { + var revealStyle = window.getComputedStyle(select('.reveal')); + var element = select('.slide-menu'); + element.style.fontFamily = revealStyle.fontFamily; + //XXX could adjust the complete menu style to match the theme, ie colors, etc + } + + var buttons = 0; + function initMenu() { + if (!initialised) { + var parent = select('.reveal').parentElement; + var top = create('div', { class: 'slide-menu-wrapper' }); + parent.appendChild(top); + var panels = create('nav', { + class: 'slide-menu slide-menu--' + options.side + }); + if (typeof options.width === 'string') { + if ( + ['normal', 'wide', 'third', 'half', 'full'].indexOf(options.width) != + -1 + ) { + panels.classList.add('slide-menu--' + options.width); + } else { + panels.classList.add('slide-menu--custom'); + panels.style.width = options.width; + } + } + top.appendChild(panels); + matchRevealStyle(); + var overlay = create('div', { class: 'slide-menu-overlay' }); + top.appendChild(overlay); + overlay.onclick = function () { + closeMenu(null, true); + }; + + var toolbar = create('ol', { class: 'slide-menu-toolbar' }); + select('.slide-menu').appendChild(toolbar); + + function addToolbarButton(title, ref, icon, style, fn, active) { + var attrs = { + 'data-button': '' + buttons++, + class: + 'toolbar-panel-button' + (active ? ' active-toolbar-button' : '') + }; + if (ref) { + attrs['data-panel'] = ref; + } + var button = create('li', attrs); + + if (icon.startsWith('fa-')) { + button.appendChild(create('i', { class: style + ' ' + icon })); + } else { + button.innerHTML = icon + '
    '; + } + button.appendChild(create('br'), select('i', button)); + button.appendChild( + create('span', { class: 'slide-menu-toolbar-label' }, title), + select('i', button) + ); + button.onclick = fn; + toolbar.appendChild(button); + return button; + } + + addToolbarButton('Slides', 'Slides', 'fa-images', 'fas', openPanel, true); + + if (options.custom) { + options.custom.forEach(function (element, index, array) { + addToolbarButton( + element.title, + 'Custom' + index, + element.icon, + null, + openPanel + ); + }); + } + + if (options.themes) { + addToolbarButton('Themes', 'Themes', 'fa-adjust', 'fas', openPanel); + } + if (options.transitions) { + addToolbarButton( + 'Transitions', + 'Transitions', + 'fa-sticky-note', + 'fas', + openPanel + ); + } + var button = create('li', { + id: 'close', + class: 'toolbar-panel-button' + }); + button.appendChild(create('i', { class: 'fas fa-times' })); + button.appendChild(create('br')); + button.appendChild( + create('span', { class: 'slide-menu-toolbar-label' }, 'Close') + ); + button.onclick = function () { + closeMenu(null, true); + }; + toolbar.appendChild(button); + + // + // Slide links + // + function generateItem(type, section, i, h, v) { + var link = '/#/' + h; + if (typeof v === 'number' && !isNaN(v)) link += '/' + v; + + function text(selector, parent) { + if (selector === '') return null; + var el = parent ? select(selector, section) : select(selector); + if (el) return el.textContent; + return null; + } + var title = + section.getAttribute('data-menu-title') || + text('.menu-title', section) || + text(options.titleSelector, section); + + if (!title && options.useTextContentForMissingTitles) { + // attempt to figure out a title based on the text in the slide + title = section.textContent.trim(); + if (title) { + title = + title + .split('\n') + .map(function (t) { + return t.trim(); + }) + .join(' ') + .trim() + .replace(/^(.{16}[^\s]*).*/, '$1') // limit to 16 chars plus any consecutive non-whitespace chars (to avoid breaking words) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, ''') + '...'; + } + } + + if (!title) { + if (options.hideMissingTitles) return ''; + type += ' no-title'; + title = 'Slide ' + (i + 1); + } + + var item = create('li', { + class: type, + 'data-item': i, + 'data-slide-h': h, + 'data-slide-v': v === undefined ? 0 : v + }); + + if (options.markers) { + item.appendChild( + create('i', { class: 'fas fa-check-circle fa-fw past' }) + ); + item.appendChild( + create('i', { + class: 'fas fa-arrow-alt-circle-right fa-fw active' + }) + ); + item.appendChild( + create('i', { class: 'far fa-circle fa-fw future' }) + ); + } + + if (options.numbers) { + // Number formatting taken from reveal.js + var value = []; + var format = 'h.v'; + + // Check if a custom number format is available + if (typeof options.numbers === 'string') { + format = options.numbers; + } else if (typeof config.slideNumber === 'string') { + // Take user defined number format for slides + format = config.slideNumber; + } + + switch (format) { + case 'c': + value.push(i + 1); + break; + case 'c/t': + value.push(i + 1, '/', deck.getTotalSlides()); + break; + case 'h/v': + value.push(h + 1); + if (typeof v === 'number' && !isNaN(v)) value.push('/', v + 1); + break; + default: + value.push(h + 1); + if (typeof v === 'number' && !isNaN(v)) value.push('.', v + 1); + } + + item.appendChild( + create( + 'span', + { class: 'slide-menu-item-number' }, + value.join('') + '. ' + ) + ); + } + + item.appendChild( + create('span', { class: 'slide-menu-item-title' }, title) + ); + + return item; + } + + function createSlideMenu() { + if ( + !document.querySelector( + 'section[data-markdown]:not([data-markdown-parsed])' + ) + ) { + var panel = create('div', { + 'data-panel': 'Slides', + class: 'slide-menu-panel active-menu-panel' + }); + panel.appendChild(create('ul', { class: 'slide-menu-items' })); + panels.appendChild(panel); + var items = select( + '.slide-menu-panel[data-panel="Slides"] > .slide-menu-items' + ); + var slideCount = 0; + selectAll('.slides > section').forEach(function (section, h) { + var subsections = selectAll('section', section); + if (subsections.length > 0) { + subsections.forEach(function (subsection, v) { + var type = + v === 0 ? 'slide-menu-item' : 'slide-menu-item-vertical'; + var item = generateItem(type, subsection, slideCount, h, v); + if (item) { + items.appendChild(item); + } + slideCount++; + }); + } else { + var item = generateItem( + 'slide-menu-item', + section, + slideCount, + h + ); + if (item) { + items.appendChild(item); + } + slideCount++; + } + }); + selectAll('.slide-menu-item, .slide-menu-item-vertical').forEach( + function (i) { + i.onclick = clicked; + } + ); + highlightCurrentSlide(); + } else { + // wait for markdown to be loaded and parsed + setTimeout(createSlideMenu, 100); + } + } + + createSlideMenu(); + deck.addEventListener('slidechanged', highlightCurrentSlide); + + // + // Custom menu panels + // + if (options.custom) { + function xhrSuccess() { + if (this.status >= 200 && this.status < 300) { + this.panel.innerHTML = this.responseText; + enableCustomLinks(this.panel); + } else { + showErrorMsg(this); + } + } + function xhrError() { + showErrorMsg(this); + } + function loadCustomPanelContent(panel, sURL) { + var oReq = new XMLHttpRequest(); + oReq.panel = panel; + oReq.arguments = Array.prototype.slice.call(arguments, 2); + oReq.onload = xhrSuccess; + oReq.onerror = xhrError; + oReq.open('get', sURL, true); + oReq.send(null); + } + function enableCustomLinks(panel) { + selectAll('ul.slide-menu-items li.slide-menu-item', panel).forEach( + function (item, i) { + item.setAttribute('data-item', i + 1); + item.onclick = clicked; + item.addEventListener('mouseenter', handleMouseHighlight); + } + ); + } + + function showErrorMsg(response) { + var msg = + '

    ERROR: The attempt to fetch ' + + response.responseURL + + ' failed with HTTP status ' + + response.status + + ' (' + + response.statusText + + ').

    ' + + '

    Remember that you need to serve the presentation HTML from a HTTP server.

    '; + response.panel.innerHTML = msg; + } + + options.custom.forEach(function (element, index, array) { + var panel = create('div', { + 'data-panel': 'Custom' + index, + class: 'slide-menu-panel slide-menu-custom-panel' + }); + if (element.content) { + panel.innerHTML = element.content; + enableCustomLinks(panel); + } else if (element.src) { + loadCustomPanelContent(panel, element.src); + } + panels.appendChild(panel); + }); + } + + // + // Themes + // + if (options.themes) { + var panel = create('div', { + class: 'slide-menu-panel', + 'data-panel': 'Themes' + }); + panels.appendChild(panel); + var menu = create('ul', { class: 'slide-menu-items' }); + panel.appendChild(menu); + options.themes.forEach(function (t, i) { + var attrs = { + class: 'slide-menu-item', + 'data-item': '' + (i + 1) + }; + if (t.theme) { + attrs['data-theme'] = t.theme; + } + if (t.highlightTheme) { + attrs['data-highlight-theme'] = t.highlightTheme; + } + var item = create('li', attrs, t.name); + menu.appendChild(item); + item.onclick = clicked; + }); + } + + // + // Transitions + // + if (options.transitions) { + var panel = create('div', { + class: 'slide-menu-panel', + 'data-panel': 'Transitions' + }); + panels.appendChild(panel); + var menu = create('ul', { class: 'slide-menu-items' }); + panel.appendChild(menu); + options.transitions.forEach(function (name, i) { + var item = create( + 'li', + { + class: 'slide-menu-item', + 'data-transition': name.toLowerCase(), + 'data-item': '' + (i + 1) + }, + name + ); + menu.appendChild(item); + item.onclick = clicked; + }); + } + + // + // Open menu options + // + if (options.openButton) { + // add menu button + var div = create('div', { class: 'slide-menu-button' }); + var link = create('a', { href: '#' }); + link.appendChild(create('i', { class: 'fas fa-bars' })); + div.appendChild(link); + select('.reveal').appendChild(div); + div.onclick = openMenu; + } + + if (options.openSlideNumber) { + var slideNumber = select('div.slide-number'); + slideNumber.onclick = openMenu; + } + + // + // Handle mouse overs + // + selectAll('.slide-menu-panel .slide-menu-items li').forEach(function ( + item + ) { + item.addEventListener('mouseenter', handleMouseHighlight); + }); + + function handleMouseHighlight(event) { + if (mouseSelectionEnabled) { + selectAll('.active-menu-panel .slide-menu-items li.selected').forEach( + function (i) { + i.classList.remove('selected'); + } + ); + event.currentTarget.classList.add('selected'); + } + } + } + + if (options.keyboard) { + //XXX add keyboard option for custom key codes, etc. + + document.addEventListener('keydown', onDocumentKeyDown, false); + + // handle key presses within speaker notes + window.addEventListener('message', function (event) { + var data; + try { + data = JSON.parse(event.data); + } catch (e) {} + if (data && data.method === 'triggerKey') { + onDocumentKeyDown({ + keyCode: data.args[0], + stopImmediatePropagation: function () {} + }); + } + }); + + // Prevent reveal from processing keyboard events when the menu is open + if ( + config.keyboardCondition && + typeof config.keyboardCondition === 'function' + ) { + // combine user defined keyboard condition with the menu's own condition + var userCondition = config.keyboardCondition; + config.keyboardCondition = function (event) { + return userCondition(event) && (!isOpen() || event.keyCode == 77); + }; + } else { + config.keyboardCondition = function (event) { + return !isOpen() || event.keyCode == 77; + }; + } + + deck.addKeyBinding( + { keyCode: 77, key: 'M', description: 'Toggle menu' }, + toggleMenu + ); + } + + if (options.openOnInit) { + openMenu(); + } + + initialised = true; + } + + /** + * Extend object a with the properties of object b. + * If there's a conflict, object b takes precedence. + */ + function extend(a, b) { + for (var i in b) { + a[i] = b[i]; + } + } + + /** + * Dispatches an event of the specified type from the + * reveal DOM element. + */ + function dispatchEvent(type, args) { + var event = document.createEvent('HTMLEvents', 1, 2); + event.initEvent(type, true, true); + extend(event, args); + document.querySelector('.reveal').dispatchEvent(event); + + // If we're in an iframe, post each reveal.js event to the + // parent window. Used by the notes plugin + if (config.postMessageEvents && window.parent !== window.self) { + window.parent.postMessage( + JSON.stringify({ + namespace: 'reveal', + eventName: type, + state: deck.getState() + }), + '*' + ); + } + } + + function select(selector, el) { + if (!el) { + el = document; + } + return el.querySelector(selector); + } + + function selectAll(selector, el) { + if (!el) { + el = document; + } + return Array.prototype.slice.call(el.querySelectorAll(selector)); + } + + function create(tagName, attrs, content) { + var el = document.createElement(tagName); + if (attrs) { + Object.getOwnPropertyNames(attrs).forEach(function (n) { + el.setAttribute(n, attrs[n]); + }); + } + if (content) el.innerHTML = content; + return el; + } + + function changeStylesheet(id, href) { + // take note of the previous theme and remove it, then create a new stylesheet reference and insert it + // this is required to force a load event so we can change the menu style to match the new style + var stylesheet = select('link#' + id); + var parent = stylesheet.parentElement; + var sibling = stylesheet.nextElementSibling; + stylesheet.remove(); + + var newStylesheet = stylesheet.cloneNode(); + newStylesheet.setAttribute('href', href); + newStylesheet.onload = function () { + matchRevealStyle(); + }; + parent.insertBefore(newStylesheet, sibling); + } + + // modified from math plugin + function loadResource(url, type, callback) { + var head = document.querySelector('head'); + var resource; + + if (type === 'script') { + resource = document.createElement('script'); + resource.type = 'text/javascript'; + resource.src = url; + } else if (type === 'stylesheet') { + resource = document.createElement('link'); + resource.rel = 'stylesheet'; + resource.href = url; + } + + // Wrapper for callback to make sure it only fires once + var finish = function () { + if (typeof callback === 'function') { + callback.call(); + callback = null; + } + }; + + resource.onload = finish; + + // IE + resource.onreadystatechange = function () { + if (this.readyState === 'loaded') { + finish(); + } + }; + + // Normal browsers + head.appendChild(resource); + } + + function loadPlugin() { + // does not support IE8 or below + var supported = !ieVersion || ieVersion >= 9; + + // do not load the menu in the upcoming slide panel in the speaker notes + if ( + deck.isSpeakerNotes() && + window.location.search.endsWith('controls=false') + ) { + supported = false; + } + + if (supported) { + if (!options.delayInit) initMenu(); + dispatchEvent('menu-ready'); + } + } + + return { + id: 'menu', + init: reveal => { + deck = reveal; + config = deck.getConfig(); + initOptions(config); + loadResource(options.path + 'menu.css', 'stylesheet', function () { + if (options.loadIcons === undefined || options.loadIcons) { + loadResource( + options.path + 'font-awesome/css/all.css', + 'stylesheet', + loadPlugin + ); + } else { + loadPlugin(); + } + }); + }, + + toggle: toggleMenu, + openMenu: openMenu, + closeMenu: closeMenu, + openPanel: openPanel, + isOpen: isOpen, + initialiseMenu: initMenu, + isMenuInitialised: function () { + return initialised; + } + }; +}; + +// polyfill +if (!String.prototype.startsWith) { + String.prototype.startsWith = function (searchString, position) { + return this.substr(position || 0, searchString.length) === searchString; + }; +} +if (!String.prototype.endsWith) { + String.prototype.endsWith = function (search, this_len) { + if (this_len === undefined || this_len > this.length) { + this_len = this.length; + } + return this.substring(this_len - search.length, this_len) === search; + }; +} + +export default Plugin; diff --git a/docs/1_Fundamentals/plugin/mermaid/mermaid.esm.js b/docs/1_Fundamentals/plugin/mermaid/mermaid.esm.js new file mode 100644 index 0000000..0126f6d --- /dev/null +++ b/docs/1_Fundamentals/plugin/mermaid/mermaid.esm.js @@ -0,0 +1,5 @@ +/*! For license information please see mermaid.esm.min.mjs.LICENSE.txt */ +var t={2536:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,6],n=[1,7],r=[1,8],i=[1,9],a=[1,16],o=[1,11],s=[1,12],l=[1,13],u=[1,14],h=[1,15],d=[1,27],f=[1,33],p=[1,34],g=[1,35],y=[1,36],m=[1,37],b=[1,72],v=[1,73],_=[1,74],x=[1,75],k=[1,76],w=[1,77],T=[1,78],E=[1,38],C=[1,39],S=[1,40],A=[1,41],M=[1,42],N=[1,43],O=[1,44],D=[1,45],B=[1,46],L=[1,47],I=[1,48],F=[1,49],R=[1,50],P=[1,51],j=[1,52],z=[1,53],Y=[1,54],U=[1,55],$=[1,56],W=[1,57],q=[1,59],H=[1,60],V=[1,61],G=[1,62],X=[1,63],Z=[1,64],Q=[1,65],K=[1,66],J=[1,67],tt=[1,68],et=[1,69],nt=[24,52],rt=[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],it=[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],at=[1,94],ot=[1,95],st=[1,96],ct=[1,97],lt=[15,24,52],ut=[7,8,9,10,18,22,25,26,27,28],ht=[15,24,43,52],dt=[15,24,43,52,86,87,89,90],ft=[15,43],pt=[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],gt={trace:function(){},yy:{},symbols_:{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},terminals_:{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"},productions_:[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]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:r.setDirection("TB");break;case 5:r.setDirection("BT");break;case 6:r.setDirection("RL");break;case 7:r.setDirection("LR");break;case 11:console.log("open_directive: ",a[s]),r.parseDirective("%%{","open_directive");break;case 12:break;case 13:a[s]=a[s].trim().replace(/'/g,'"'),console.log("arg_directive: ",a[s]),r.parseDirective(a[s],"arg_directive");break;case 14:console.log("close_directive: ",a[s]),r.parseDirective("}%%","close_directive","c4Context");break;case 15:case 16:case 17:case 18:case 19:r.setC4Type(a[s-3]);break;case 26:r.setTitle(a[s].substring(6)),this.$=a[s].substring(6);break;case 27:r.setAccDescription(a[s].substring(15)),this.$=a[s].substring(15);break;case 28:this.$=a[s].trim(),r.setTitle(this.$);break;case 29:case 30:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 35:case 36:console.log(a[s-1],JSON.stringify(a[s])),a[s].splice(2,0,"ENTERPRISE"),r.addPersonOrSystemBoundary(...a[s]),this.$=a[s];break;case 37:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystemBoundary(...a[s]),this.$=a[s];break;case 38:console.log(a[s-1],JSON.stringify(a[s])),a[s].splice(2,0,"CONTAINER"),r.addContainerBoundary(...a[s]),this.$=a[s];break;case 39:console.log(a[s-1],JSON.stringify(a[s])),r.addDeploymentNode("node",...a[s]),this.$=a[s];break;case 40:console.log(a[s-1],JSON.stringify(a[s])),r.addDeploymentNode("nodeL",...a[s]),this.$=a[s];break;case 41:console.log(a[s-1],JSON.stringify(a[s])),r.addDeploymentNode("nodeR",...a[s]),this.$=a[s];break;case 42:r.popBoundaryParseStack();break;case 46:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("person",...a[s]),this.$=a[s];break;case 47:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("external_person",...a[s]),this.$=a[s];break;case 48:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("system",...a[s]),this.$=a[s];break;case 49:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("system_db",...a[s]),this.$=a[s];break;case 50:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("system_queue",...a[s]),this.$=a[s];break;case 51:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("external_system",...a[s]),this.$=a[s];break;case 52:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("external_system_db",...a[s]),this.$=a[s];break;case 53:console.log(a[s-1],JSON.stringify(a[s])),r.addPersonOrSystem("external_system_queue",...a[s]),this.$=a[s];break;case 54:console.log(a[s-1],JSON.stringify(a[s])),r.addContainer("container",...a[s]),this.$=a[s];break;case 55:console.log(a[s-1],JSON.stringify(a[s])),r.addContainer("container_db",...a[s]),this.$=a[s];break;case 56:console.log(a[s-1],JSON.stringify(a[s])),r.addContainer("container_queue",...a[s]),this.$=a[s];break;case 57:console.log(a[s-1],JSON.stringify(a[s])),r.addContainer("external_container",...a[s]),this.$=a[s];break;case 58:console.log(a[s-1],JSON.stringify(a[s])),r.addContainer("external_container_db",...a[s]),this.$=a[s];break;case 59:console.log(a[s-1],JSON.stringify(a[s])),r.addContainer("external_container_queue",...a[s]),this.$=a[s];break;case 60:console.log(a[s-1],JSON.stringify(a[s])),r.addComponent("component",...a[s]),this.$=a[s];break;case 61:console.log(a[s-1],JSON.stringify(a[s])),r.addComponent("component_db",...a[s]),this.$=a[s];break;case 62:console.log(a[s-1],JSON.stringify(a[s])),r.addComponent("component_queue",...a[s]),this.$=a[s];break;case 63:console.log(a[s-1],JSON.stringify(a[s])),r.addComponent("external_component",...a[s]),this.$=a[s];break;case 64:console.log(a[s-1],JSON.stringify(a[s])),r.addComponent("external_component_db",...a[s]),this.$=a[s];break;case 65:console.log(a[s-1],JSON.stringify(a[s])),r.addComponent("external_component_queue",...a[s]),this.$=a[s];break;case 67:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("rel",...a[s]),this.$=a[s];break;case 68:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("birel",...a[s]),this.$=a[s];break;case 69:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("rel_u",...a[s]),this.$=a[s];break;case 70:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("rel_d",...a[s]),this.$=a[s];break;case 71:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("rel_l",...a[s]),this.$=a[s];break;case 72:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("rel_r",...a[s]),this.$=a[s];break;case 73:console.log(a[s-1],JSON.stringify(a[s])),r.addRel("rel_b",...a[s]),this.$=a[s];break;case 74:console.log(a[s-1],JSON.stringify(a[s])),a[s].splice(0,1),r.addRel("rel",...a[s]),this.$=a[s];break;case 75:console.log(a[s-1],JSON.stringify(a[s])),r.updateElStyle("update_el_style",...a[s]),this.$=a[s];break;case 76:console.log(a[s-1],JSON.stringify(a[s])),r.updateRelStyle("update_rel_style",...a[s]),this.$=a[s];break;case 77:console.log(a[s-1],JSON.stringify(a[s])),r.updateLayoutConfig("update_layout_config",...a[s]),this.$=a[s];break;case 78:console.log("PUSH ATTRIBUTE: ",a[s]),this.$=[a[s]];break;case 79:console.log("PUSH ATTRIBUTE: ",a[s-1]),a[s].unshift(a[s-1]),this.$=a[s];break;case 80:case 82:this.$=a[s].trim();break;case 81:console.log("kv: ",a[s-1],a[s]);let t={};t[a[s-1].trim()]=a[s].trim(),this.$=t;break;case 83:this.$=""}},table:[{3:1,4:2,5:3,6:4,7:e,8:n,9:r,10:i,11:5,12:10,18:a,22:o,25:s,26:l,27:u,28:h},{1:[3]},{1:[2,1]},{1:[2,2]},{3:17,4:2,5:3,6:4,7:e,8:n,9:r,10:i,11:5,12:10,18:a,22:o,25:s,26:l,27:u,28:h},{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:d},t([16,21],[2,12]),{23:28,29:29,30:30,31:31,32:f,33:p,34:g,36:y,38:m,39:58,40:70,42:71,44:b,46:v,47:_,48:x,49:k,50:w,51:T,53:32,54:E,55:C,56:S,57:A,58:M,59:N,60:O,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et},{23:79,29:29,30:30,31:31,32:f,33:p,34:g,36:y,38:m,39:58,40:70,42:71,44:b,46:v,47:_,48:x,49:k,50:w,51:T,53:32,54:E,55:C,56:S,57:A,58:M,59:N,60:O,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et},{23:80,29:29,30:30,31:31,32:f,33:p,34:g,36:y,38:m,39:58,40:70,42:71,44:b,46:v,47:_,48:x,49:k,50:w,51:T,53:32,54:E,55:C,56:S,57:A,58:M,59:N,60:O,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et},{23:81,29:29,30:30,31:31,32:f,33:p,34:g,36:y,38:m,39:58,40:70,42:71,44:b,46:v,47:_,48:x,49:k,50:w,51:T,53:32,54:E,55:C,56:S,57:A,58:M,59:N,60:O,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et},{23:82,29:29,30:30,31:31,32:f,33:p,34:g,36:y,38:m,39:58,40:70,42:71,44:b,46:v,47:_,48:x,49:k,50:w,51:T,53:32,54:E,55:C,56:S,57:A,58:M,59:N,60:O,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et},{15:[1,83]},{17:84,20:[1,85]},{15:[2,14]},{24:[1,86]},t(nt,[2,20],{53:32,39:58,40:70,42:71,30:87,44:b,46:v,47:_,48:x,49:k,50:w,51:T,54:E,55:C,56:S,57:A,58:M,59:N,60:O,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et}),t(nt,[2,21]),t(rt,[2,23],{15:[1,88]}),t(nt,[2,43],{15:[1,89]}),t(it,[2,26]),t(it,[2,27]),{35:[1,90]},{37:[1,91]},t(it,[2,30]),{45:92,85:93,86:at,87:ot,89:st,90:ct},{45:98,85:93,86:at,87:ot,89:st,90:ct},{45:99,85:93,86:at,87:ot,89:st,90:ct},{45:100,85:93,86:at,87:ot,89:st,90:ct},{45:101,85:93,86:at,87:ot,89:st,90:ct},{45:102,85:93,86:at,87:ot,89:st,90:ct},{45:103,85:93,86:at,87:ot,89:st,90:ct},{45:104,85:93,86:at,87:ot,89:st,90:ct},{45:105,85:93,86:at,87:ot,89:st,90:ct},{45:106,85:93,86:at,87:ot,89:st,90:ct},{45:107,85:93,86:at,87:ot,89:st,90:ct},{45:108,85:93,86:at,87:ot,89:st,90:ct},{45:109,85:93,86:at,87:ot,89:st,90:ct},{45:110,85:93,86:at,87:ot,89:st,90:ct},{45:111,85:93,86:at,87:ot,89:st,90:ct},{45:112,85:93,86:at,87:ot,89:st,90:ct},{45:113,85:93,86:at,87:ot,89:st,90:ct},{45:114,85:93,86:at,87:ot,89:st,90:ct},{45:115,85:93,86:at,87:ot,89:st,90:ct},{45:116,85:93,86:at,87:ot,89:st,90:ct},t(lt,[2,66]),{45:117,85:93,86:at,87:ot,89:st,90:ct},{45:118,85:93,86:at,87:ot,89:st,90:ct},{45:119,85:93,86:at,87:ot,89:st,90:ct},{45:120,85:93,86:at,87:ot,89:st,90:ct},{45:121,85:93,86:at,87:ot,89:st,90:ct},{45:122,85:93,86:at,87:ot,89:st,90:ct},{45:123,85:93,86:at,87:ot,89:st,90:ct},{45:124,85:93,86:at,87:ot,89:st,90:ct},{45:125,85:93,86:at,87:ot,89:st,90:ct},{45:126,85:93,86:at,87:ot,89:st,90:ct},{45:127,85:93,86:at,87:ot,89:st,90:ct},{30:128,39:58,40:70,42:71,44:b,46:v,47:_,48:x,49:k,50:w,51:T,53:32,54:E,55:C,56:S,57:A,58:M,59:N,60:O,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et},{15:[1,130],43:[1,129]},{45:131,85:93,86:at,87:ot,89:st,90:ct},{45:132,85:93,86:at,87:ot,89:st,90:ct},{45:133,85:93,86:at,87:ot,89:st,90:ct},{45:134,85:93,86:at,87:ot,89:st,90:ct},{45:135,85:93,86:at,87:ot,89:st,90:ct},{45:136,85:93,86:at,87:ot,89:st,90:ct},{45:137,85:93,86:at,87:ot,89:st,90:ct},{24:[1,138]},{24:[1,139]},{24:[1,140]},{24:[1,141]},t(ut,[2,9]),{14:142,21:d},{21:[2,13]},{1:[2,15]},t(nt,[2,22]),t(rt,[2,24],{31:31,29:143,32:f,33:p,34:g,36:y,38:m}),t(nt,[2,44],{29:29,30:30,31:31,53:32,39:58,40:70,42:71,23:144,32:f,33:p,34:g,36:y,38:m,44:b,46:v,47:_,48:x,49:k,50:w,51:T,54:E,55:C,56:S,57:A,58:M,59:N,60:O,61:D,62:B,63:L,64:I,65:F,66:R,67:P,68:j,69:z,70:Y,71:U,72:$,73:W,74:q,75:H,76:V,77:G,78:X,79:Z,80:Q,81:K,82:J,83:tt,84:et}),t(it,[2,28]),t(it,[2,29]),t(lt,[2,46]),t(ht,[2,78],{85:93,45:145,86:at,87:ot,89:st,90:ct}),t(dt,[2,80]),{88:[1,146]},t(dt,[2,82]),t(dt,[2,83]),t(lt,[2,47]),t(lt,[2,48]),t(lt,[2,49]),t(lt,[2,50]),t(lt,[2,51]),t(lt,[2,52]),t(lt,[2,53]),t(lt,[2,54]),t(lt,[2,55]),t(lt,[2,56]),t(lt,[2,57]),t(lt,[2,58]),t(lt,[2,59]),t(lt,[2,60]),t(lt,[2,61]),t(lt,[2,62]),t(lt,[2,63]),t(lt,[2,64]),t(lt,[2,65]),t(lt,[2,67]),t(lt,[2,68]),t(lt,[2,69]),t(lt,[2,70]),t(lt,[2,71]),t(lt,[2,72]),t(lt,[2,73]),t(lt,[2,74]),t(lt,[2,75]),t(lt,[2,76]),t(lt,[2,77]),{41:147,52:[1,148]},{15:[1,149]},{43:[1,150]},t(ft,[2,35]),t(ft,[2,36]),t(ft,[2,37]),t(ft,[2,38]),t(ft,[2,39]),t(ft,[2,40]),t(ft,[2,41]),{1:[2,16]},{1:[2,17]},{1:[2,18]},{1:[2,19]},{15:[1,151]},t(rt,[2,25]),t(nt,[2,45]),t(ht,[2,79]),t(dt,[2,81]),t(lt,[2,31]),t(lt,[2,42]),t(pt,[2,32]),t(pt,[2,33],{15:[1,152]}),t(ut,[2,10]),t(pt,[2,34])],defaultActions:{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]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=2,h=1,d=a.slice.call(arguments,1),f=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);f.setInput(t,p.yy),p.yy.lexer=f,p.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var y=f.yylloc;a.push(y);var m=f.options&&f.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||f.lex()||h)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,_,x,k,w,T,E,C,S,A={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=b()),k=o[x]&&o[x][v]),void 0===k||!k.length||!k[0]){var M="";for(T in S=[],o[x])this.terminals_[T]&&T>u&&S.push("'"+this.terminals_[T]+"'");M=f.showPosition?"Parse error on line "+(c+1)+":\n"+f.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:f.match,token:this.terminals_[v]||v,line:f.yylineno,loc:y,expected:S})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),i.push(f.yytext),a.push(f.yylloc),n.push(k[1]),v=null,_?(v=_,_=null):(l=f.yyleng,s=f.yytext,c=f.yylineno,y=f.yylloc);break;case 2:if(E=this.productions_[k[1]][1],A.$=i[i.length-E],A._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},m&&(A._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[s,l,c,p.yy,k[1],i,a].concat(d))))return w;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[k[1]][0]),i.push(A.$),a.push(A._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},yt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):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(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:return 32;case 10:return 33;case 11:return this.begin("acc_title"),34;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),36;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:case 21:break;case 19:c;break;case 20:return 15;case 22:return 22;case 23:return 25;case 24:return 26;case 25:return 27;case 26:return 28;case 27:return this.begin("person_ext"),console.log("begin person_ext"),55;case 28:return this.begin("person"),console.log("begin person"),54;case 29:return this.begin("system_ext_queue"),console.log("begin system_ext_queue"),61;case 30:return this.begin("system_ext_db"),console.log("begin system_ext_db"),60;case 31:return this.begin("system_ext"),console.log("begin system_ext"),59;case 32:return this.begin("system_queue"),console.log("begin system_queue"),58;case 33:return this.begin("system_db"),console.log("begin system_db"),57;case 34:return this.begin("system"),console.log("begin system"),56;case 35:return this.begin("boundary"),console.log("begin boundary"),47;case 36:return this.begin("enterprise_boundary"),console.log("begin enterprise_boundary"),44;case 37:return this.begin("system_boundary"),console.log("begin system_boundary"),46;case 38:return this.begin("container_ext_queue"),console.log("begin container_ext_queue"),67;case 39:return this.begin("container_ext_db"),console.log("begin container_ext_db"),66;case 40:return this.begin("container_ext"),console.log("begin container_ext"),65;case 41:return this.begin("container_queue"),console.log("begin container_queue"),64;case 42:return this.begin("container_db"),console.log("begin container_db"),63;case 43:return this.begin("container"),console.log("begin container"),62;case 44:return this.begin("container_boundary"),console.log("begin container_boundary"),48;case 45:return this.begin("component_ext_queue"),console.log("begin component_ext_queue"),73;case 46:return this.begin("component_ext_db"),console.log("begin component_ext_db"),72;case 47:return this.begin("component_ext"),console.log("begin component_ext"),71;case 48:return this.begin("component_queue"),console.log("begin component_queue"),70;case 49:return this.begin("component_db"),console.log("begin component_db"),69;case 50:return this.begin("component"),console.log("begin component"),68;case 51:case 52:return this.begin("node"),console.log("begin node"),49;case 53:return this.begin("node_l"),console.log("begin node_l"),50;case 54:return this.begin("node_r"),console.log("begin node_r"),51;case 55:return this.begin("rel"),console.log("begin rel"),74;case 56:return this.begin("birel"),console.log("begin birel"),75;case 57:case 58:return this.begin("rel_u"),console.log("begin rel_u"),76;case 59:case 60:return this.begin("rel_d"),console.log("begin rel_d"),77;case 61:case 62:return this.begin("rel_l"),console.log("begin rel_l"),78;case 63:case 64:return this.begin("rel_r"),console.log("begin rel_r"),79;case 65:return this.begin("rel_b"),console.log("begin rel_b"),80;case 66:return this.begin("rel_index"),console.log("begin rel_index"),81;case 67:return this.begin("update_el_style"),console.log("begin update_el_style"),82;case 68:return this.begin("update_rel_style"),console.log("begin update_rel_style"),83;case 69:return this.begin("update_layout_config"),console.log("begin update_layout_config"),84;case 70:return"EOF_IN_STRUCT";case 71:return console.log("begin attribute with ATTRIBUTE_EMPTY"),this.begin("attribute"),"ATTRIBUTE_EMPTY";case 72:console.log("begin attribute"),this.begin("attribute");break;case 73:console.log("STOP attribute"),this.popState(),console.log("STOP diagram"),this.popState();break;case 74:return console.log(",,"),90;case 75:console.log(",");break;case 76:return console.log("ATTRIBUTE_EMPTY"),90;case 77:console.log("begin string"),this.begin("string");break;case 78:console.log("STOP string"),this.popState();break;case 79:return console.log("STR"),"STR";case 80:console.log("begin string_kv"),this.begin("string_kv");break;case 81:return console.log("STR_KEY"),this.begin("string_kv_key"),"STR_KEY";case 82:console.log("begin string_kv_value"),this.popState(),this.begin("string_kv_value");break;case 83:return console.log("STR_VALUE"),"STR_VALUE";case 84:console.log("STOP string_kv_value"),this.popState(),this.popState();break;case 85:return console.log("not STR"),"STR";case 86:return console.log("begin boundary block"),"LBRACE";case 87:return console.log("STOP boundary block"),"RBRACE";case 88:return"SPACE";case 89:return"EOL";case 90:return 24}},rules:[/^(?:%%\{)/,/^(?:.*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]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},string_kv_value:{rules:[83,84],inclusive:!1},string_kv_key:{rules:[82],inclusive:!1},string_kv:{rules:[81],inclusive:!1},string:{rules:[78,79],inclusive:!1},attribute:{rules:[73,74,75,76,77,80,85],inclusive:!1},update_layout_config:{rules:[70,71,72,73],inclusive:!1},update_rel_style:{rules:[70,71,72,73],inclusive:!1},update_el_style:{rules:[70,71,72,73],inclusive:!1},rel_b:{rules:[70,71,72,73],inclusive:!1},rel_r:{rules:[70,71,72,73],inclusive:!1},rel_l:{rules:[70,71,72,73],inclusive:!1},rel_d:{rules:[70,71,72,73],inclusive:!1},rel_u:{rules:[70,71,72,73],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[70,71,72,73],inclusive:!1},node_r:{rules:[70,71,72,73],inclusive:!1},node_l:{rules:[70,71,72,73],inclusive:!1},node:{rules:[70,71,72,73],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[70,71,72,73],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[70,71,72,73],inclusive:!1},component_ext:{rules:[70,71,72,73],inclusive:!1},component_queue:{rules:[70,71,72,73],inclusive:!1},component_db:{rules:[70,71,72,73],inclusive:!1},component:{rules:[70,71,72,73],inclusive:!1},container_boundary:{rules:[70,71,72,73],inclusive:!1},container_ext_queue:{rules:[],inclusive:!1},container_ext_db:{rules:[70,71,72,73],inclusive:!1},container_ext:{rules:[70,71,72,73],inclusive:!1},container_queue:{rules:[70,71,72,73],inclusive:!1},container_db:{rules:[70,71,72,73],inclusive:!1},container:{rules:[70,71,72,73],inclusive:!1},birel:{rules:[70,71,72,73],inclusive:!1},system_boundary:{rules:[70,71,72,73],inclusive:!1},enterprise_boundary:{rules:[70,71,72,73],inclusive:!1},boundary:{rules:[70,71,72,73],inclusive:!1},system_ext_queue:{rules:[70,71,72,73],inclusive:!1},system_ext_db:{rules:[70,71,72,73],inclusive:!1},system_ext:{rules:[70,71,72,73],inclusive:!1},system_queue:{rules:[70,71,72,73],inclusive:!1},system_db:{rules:[70,71,72,73],inclusive:!1},system:{rules:[70,71,72,73],inclusive:!1},person_ext:{rules:[70,71,72,73],inclusive:!1},person:{rules:[70,71,72,73],inclusive:!1},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:!0}}};function mt(){this.yy={}}return gt.lexer=yt,mt.prototype=gt,gt.Parser=mt,new mt}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(555).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},1362:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,7],r=[1,8],i=[1,9],a=[1,10],o=[1,13],s=[1,12],c=[1,16,25],l=[1,20],u=[1,31],h=[1,32],d=[1,33],f=[1,35],p=[1,38],g=[1,36],y=[1,37],m=[1,39],b=[1,40],v=[1,41],_=[1,42],x=[1,45],k=[1,46],w=[1,47],T=[1,48],E=[16,25],C=[1,62],S=[1,63],A=[1,64],M=[1,65],N=[1,66],O=[1,67],D=[1,68],B=[16,25,32,44,45,53,56,57,58,59,60,61,62,67,69],L=[16,25,30,32,44,45,49,53,56,57,58,59,60,61,62,67,69,84,85,86,87],I=[5,8,9,10,11,16,19,23,25],F=[53,84,85,86,87],R=[53,61,62,84,85,86,87],P=[53,56,57,58,59,60,84,85,86,87],j=[16,25,32],z=[1,100],Y={trace:function(){},yy:{},symbols_:{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,LOLLIPOP:60,LINE:61,DOTTED_LINE:62,CALLBACK:63,LINK:64,LINK_TARGET:65,CLICK:66,CALLBACK_NAME:67,CALLBACK_ARGS:68,HREF:69,CSSCLASS:70,commentToken:71,textToken:72,graphCodeTokens:73,textNoTagsToken: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:87,$accept:0,$end:1},terminals_:{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:"LOLLIPOP",61:"LINE",62:"DOTTED_LINE",63:"CALLBACK",64:"LINK",65:"LINK_TARGET",66:"CLICK",67:"CALLBACK_NAME",68:"CALLBACK_ARGS",69:"HREF",70:"CSSCLASS",73:"graphCodeTokens",75:"TAGSTART",76:"TAGEND",77:"==",78:"--",79:"PCT",80:"DEFAULT",81:"SPACE",82:"MINUS",83:"keywords",84:"UNICODE_TEXT",85:"NUM",86:"ALPHA",87:"BQUOTE_STR"},productions_:[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],[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],[71,1],[71,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[74,1],[74,1],[74,1],[74,1],[28,1],[28,1],[28,1],[29,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 5:r.setDirection("TB");break;case 6:r.setDirection("BT");break;case 7:r.setDirection("RL");break;case 8:r.setDirection("LR");break;case 12:r.parseDirective("%%{","open_directive");break;case 13:r.parseDirective(a[s],"type_directive");break;case 14:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 15:r.parseDirective("}%%","close_directive","class");break;case 20:case 21:this.$=a[s];break;case 22:this.$=a[s-1]+a[s];break;case 23:case 24:this.$=a[s-1]+"~"+a[s];break;case 25:r.addRelation(a[s]);break;case 26:a[s-1].title=r.cleanupLabel(a[s]),r.addRelation(a[s-1]);break;case 34:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 35:case 36:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 37:r.addClass(a[s]);break;case 38:r.addClass(a[s-2]),r.setCssClass(a[s-2],a[s]);break;case 39:r.addClass(a[s-3]),r.addMembers(a[s-3],a[s-1]);break;case 40:r.addClass(a[s-5]),r.setCssClass(a[s-5],a[s-3]),r.addMembers(a[s-5],a[s-1]);break;case 41:r.addAnnotation(a[s],a[s-2]);break;case 42:this.$=[a[s]];break;case 43:a[s].push(a[s-1]),this.$=a[s];break;case 44:case 46:case 47:break;case 45:r.addMember(a[s-1],r.cleanupLabel(a[s]));break;case 48:this.$={id1:a[s-2],id2:a[s],relation:a[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 49:this.$={id1:a[s-3],id2:a[s],relation:a[s-1],relationTitle1:a[s-2],relationTitle2:"none"};break;case 50:this.$={id1:a[s-3],id2:a[s],relation:a[s-2],relationTitle1:"none",relationTitle2:a[s-1]};break;case 51:this.$={id1:a[s-4],id2:a[s],relation:a[s-2],relationTitle1:a[s-3],relationTitle2:a[s-1]};break;case 52:this.$={type1:a[s-2],type2:a[s],lineType:a[s-1]};break;case 53:this.$={type1:"none",type2:a[s],lineType:a[s-1]};break;case 54:this.$={type1:a[s-1],type2:"none",lineType:a[s]};break;case 55:this.$={type1:"none",type2:"none",lineType:a[s]};break;case 56:this.$=r.relationType.AGGREGATION;break;case 57:this.$=r.relationType.EXTENSION;break;case 58:this.$=r.relationType.COMPOSITION;break;case 59:this.$=r.relationType.DEPENDENCY;break;case 60:this.$=r.relationType.LOLLIPOP;break;case 61:this.$=r.lineType.LINE;break;case 62:this.$=r.lineType.DOTTED_LINE;break;case 63:case 69:this.$=a[s-2],r.setClickEvent(a[s-1],a[s]);break;case 64:case 70:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 65:case 73:this.$=a[s-2],r.setLink(a[s-1],a[s]);break;case 66:case 74:this.$=a[s-3],r.setLink(a[s-2],a[s-1],a[s]);break;case 67:case 75:this.$=a[s-3],r.setLink(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 68:case 76:this.$=a[s-4],r.setLink(a[s-3],a[s-2],a[s]),r.setTooltip(a[s-3],a[s-1]);break;case 71:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 72:this.$=a[s-4],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setTooltip(a[s-3],a[s]);break;case 77:r.setCssClass(a[s-1],a[s])}},table:[{3:1,4:2,5:e,6:4,7:5,8:n,9:r,10:i,11:a,12:6,13:11,19:o,23:s},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{3:14,4:2,5:e,6:4,7:5,8:n,9:r,10:i,11:a,12:6,13:11,19:o,23:s},{1:[2,9]},t(c,[2,5]),t(c,[2,6]),t(c,[2,7]),t(c,[2,8]),{14:15,20:[1,16]},{16:[1,17]},{20:[2,12]},{1:[2,4]},{15:18,17:[1,19],22:l},t([17,22],[2,13]),{6:30,7:29,8:n,9:r,10:i,11:a,13:11,19:o,24:21,26:22,27:34,28:43,29:44,31:23,33:24,34:25,35:26,36:27,37:28,38:u,40:h,42:d,43:f,48:p,50:g,51:y,63:m,64:b,66:v,70:_,84:x,85:k,86:w,87:T},{16:[1,49]},{18:50,21:[1,51]},{16:[2,15]},{25:[1,52]},{16:[1,53],25:[2,17]},t(E,[2,25],{32:[1,54]}),t(E,[2,27]),t(E,[2,28]),t(E,[2,29]),t(E,[2,30]),t(E,[2,31]),t(E,[2,32]),t(E,[2,33]),{39:[1,55]},{41:[1,56]},t(E,[2,36]),t(E,[2,44],{52:57,54:60,55:61,32:[1,59],53:[1,58],56:C,57:S,58:A,59:M,60:N,61:O,62:D}),{27:69,28:43,29:44,84:x,85:k,86:w,87:T},t(E,[2,46]),t(E,[2,47]),{28:70,84:x,85:k,86:w},{27:71,28:43,29:44,84:x,85:k,86:w,87:T},{27:72,28:43,29:44,84:x,85:k,86:w,87:T},{27:73,28:43,29:44,84:x,85:k,86:w,87:T},{53:[1,74]},t(B,[2,20],{28:43,29:44,27:75,30:[1,76],84:x,85:k,86:w,87:T}),t(B,[2,21],{30:[1,77]}),t(L,[2,91]),t(L,[2,92]),t(L,[2,93]),t([16,25,30,32,44,45,53,56,57,58,59,60,61,62,67,69],[2,94]),t(I,[2,10]),{15:78,22:l},{22:[2,14]},{1:[2,16]},{6:30,7:29,8:n,9:r,10:i,11:a,13:11,19:o,24:79,25:[2,18],26:22,27:34,28:43,29:44,31:23,33:24,34:25,35:26,36:27,37:28,38:u,40:h,42:d,43:f,48:p,50:g,51:y,63:m,64:b,66:v,70:_,84:x,85:k,86:w,87:T},t(E,[2,26]),t(E,[2,34]),t(E,[2,35]),{27:80,28:43,29:44,53:[1,81],84:x,85:k,86:w,87:T},{52:82,54:60,55:61,56:C,57:S,58:A,59:M,60:N,61:O,62:D},t(E,[2,45]),{55:83,61:O,62:D},t(F,[2,55],{54:84,56:C,57:S,58:A,59:M,60:N}),t(R,[2,56]),t(R,[2,57]),t(R,[2,58]),t(R,[2,59]),t(R,[2,60]),t(P,[2,61]),t(P,[2,62]),t(E,[2,37],{44:[1,85],45:[1,86]}),{49:[1,87]},{53:[1,88]},{53:[1,89]},{67:[1,90],69:[1,91]},{28:92,84:x,85:k,86:w},t(B,[2,22]),t(B,[2,23]),t(B,[2,24]),{16:[1,93]},{25:[2,19]},t(j,[2,48]),{27:94,28:43,29:44,84:x,85:k,86:w,87:T},{27:95,28:43,29:44,53:[1,96],84:x,85:k,86:w,87:T},t(F,[2,54],{54:97,56:C,57:S,58:A,59:M,60:N}),t(F,[2,53]),{28:98,84:x,85:k,86:w},{46:99,50:z},{27:101,28:43,29:44,84:x,85:k,86:w,87:T},t(E,[2,63],{53:[1,102]}),t(E,[2,65],{53:[1,104],65:[1,103]}),t(E,[2,69],{53:[1,105],68:[1,106]}),t(E,[2,73],{53:[1,108],65:[1,107]}),t(E,[2,77]),t(I,[2,11]),t(j,[2,50]),t(j,[2,49]),{27:109,28:43,29:44,84:x,85:k,86:w,87:T},t(F,[2,52]),t(E,[2,38],{45:[1,110]}),{47:[1,111]},{46:112,47:[2,42],50:z},t(E,[2,41]),t(E,[2,64]),t(E,[2,66]),t(E,[2,67],{65:[1,113]}),t(E,[2,70]),t(E,[2,71],{53:[1,114]}),t(E,[2,74]),t(E,[2,75],{65:[1,115]}),t(j,[2,51]),{46:116,50:z},t(E,[2,39]),{47:[2,43]},t(E,[2,68]),t(E,[2,72]),t(E,[2,76]),{47:[1,117]},t(E,[2,40])],defaultActions:{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],79:[2,19],112:[2,43]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=2,h=1,d=a.slice.call(arguments,1),f=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);f.setInput(t,p.yy),p.yy.lexer=f,p.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var y=f.yylloc;a.push(y);var m=f.options&&f.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||f.lex()||h)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,_,x,k,w,T,E,C,S,A={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=b()),k=o[x]&&o[x][v]),void 0===k||!k.length||!k[0]){var M="";for(T in S=[],o[x])this.terminals_[T]&&T>u&&S.push("'"+this.terminals_[T]+"'");M=f.showPosition?"Parse error on line "+(c+1)+":\n"+f.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:f.match,token:this.terminals_[v]||v,line:f.yylineno,loc:y,expected:S})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),i.push(f.yytext),a.push(f.yylloc),n.push(k[1]),v=null,_?(v=_,_=null):(l=f.yyleng,s=f.yytext,c=f.yylineno,y=f.yylloc);break;case 2:if(E=this.productions_[k[1]][1],A.$=i[i.length-E],A._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},m&&(A._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[s,l,c,p.yy,k[1],i,a].concat(d))))return w;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[k[1]][0]),i.push(A.$),a.push(A._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},U={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):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(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),19;case 1:return 8;case 2:return 9;case 3:return 10;case 4:return 11;case 5:return this.begin("type_directive"),20;case 6:return this.popState(),this.begin("arg_directive"),17;case 7:return this.popState(),this.popState(),22;case 8:return 21;case 9:case 10:case 19:case 27:break;case 11:return this.begin("acc_title"),38;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),40;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:case 37:case 40:case 43:case 46:case 49:case 52:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:return 16;case 20:case 21:return 23;case 22:return this.begin("struct"),45;case 23:return"EDGE_STATE";case 24:return"EOF_IN_STRUCT";case 25:return"OPEN_IN_STRUCT";case 26:return this.popState(),47;case 28:return"MEMBER";case 29:return 43;case 30:return 70;case 31:return 63;case 32:return 64;case 33:return 66;case 34:return 48;case 35:return 49;case 36:this.begin("generic");break;case 38:return"GENERICTYPE";case 39:this.begin("string");break;case 41:return"STR";case 42:this.begin("bqstring");break;case 44:return"BQUOTE_STR";case 45:this.begin("href");break;case 47:return 69;case 48:this.begin("callback_name");break;case 50:this.popState(),this.begin("callback_args");break;case 51:return 67;case 53:return 68;case 54:case 55:case 56:case 57:return 65;case 58:case 59:return 57;case 60:case 61:return 59;case 62:return 58;case 63:return 56;case 64:return 60;case 65:return 61;case 66:return 62;case 67:return 32;case 68:return 44;case 69:return 82;case 70:return"DOT";case 71:return"PLUS";case 72:return 79;case 73:case 74:return"EQUALS";case 75:return 86;case 76:return"PUNCTUATION";case 77:return 85;case 78:return 84;case 79:return 81;case 80:return 25}},rules:[/^(?:%%\{)/,/^(?:.*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)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{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)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},callback_args:{rules:[52,53],inclusive:!1},callback_name:{rules:[49,50,51],inclusive:!1},href:{rules:[46,47],inclusive:!1},struct:{rules:[23,24,25,26,27,28],inclusive:!1},generic:{rules:[37,38],inclusive:!1},bqstring:{rules:[43,44],inclusive:!1},string:{rules:[40,41],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,29,30,31,32,33,34,35,36,39,42,45,48,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],inclusive:!0}}};function $(){this.yy={}}return Y.lexer=U,$.prototype=Y,Y.Parser=$,new $}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8218).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},5890:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,23,25,27,29,30,49],i=[1,17],a=[1,18],o=[1,19],s=[1,20],c=[1,21],l=[1,24],u=[1,29],h=[1,30],d=[1,31],f=[1,32],p=[6,9,11,15,20,23,25,27,29,30,42,43,44,45,49],g=[1,45],y=[30,46,47],m=[4,6,9,11,23,25,27,29,30,49],b=[42,43,44,45],v=[22,37],_=[1,64],x={trace:function(){},yy:{},symbols_:{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},terminals_:{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"},productions_:[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]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:break;case 3:case 7:case 8:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:case 20:case 28:case 29:case 30:case 40:this.$=a[s];break;case 12:r.addEntity(a[s-4]),r.addEntity(a[s-2]),r.addRelationship(a[s-4],a[s],a[s-2],a[s-3]);break;case 13:r.addEntity(a[s-3]),r.addAttributes(a[s-3],a[s-1]);break;case 14:r.addEntity(a[s-2]);break;case 15:r.addEntity(a[s]);break;case 16:case 17:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 18:case 19:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 21:this.$=a[s-2]+a[s-1]+a[s];break;case 22:this.$=[a[s]];break;case 23:a[s].push(a[s-1]),this.$=a[s];break;case 24:this.$={attributeType:a[s-1],attributeName:a[s]};break;case 25:this.$={attributeType:a[s-2],attributeName:a[s-1],attributeKeyType:a[s]};break;case 26:this.$={attributeType:a[s-2],attributeName:a[s-1],attributeComment:a[s]};break;case 27:this.$={attributeType:a[s-3],attributeName:a[s-2],attributeKeyType:a[s-1],attributeComment:a[s]};break;case 31:case 39:this.$=a[s].replace(/"/g,"");break;case 32:this.$={cardA:a[s],relType:a[s-1],cardB:a[s-2]};break;case 33:this.$=r.Cardinality.ZERO_OR_ONE;break;case 34:this.$=r.Cardinality.ZERO_OR_MORE;break;case 35:this.$=r.Cardinality.ONE_OR_MORE;break;case 36:this.$=r.Cardinality.ONLY_ONE;break;case 37:this.$=r.Identification.NON_IDENTIFYING;break;case 38:this.$=r.Identification.IDENTIFYING;break;case 41:r.parseDirective("%%{","open_directive");break;case 42:r.parseDirective(a[s],"type_directive");break;case 43:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 44:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,49:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,49:n},{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:i,25:a,27:o,29:s,30:c,49:n},{1:[2,2]},{14:22,15:[1,23],52:l},t([15,52],[2,42]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:15,10:25,12:4,17:16,23:i,25:a,27:o,29:s,30:c,49:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,15],{18:26,40:28,20:[1,27],42:u,43:h,44:d,45:f}),{24:[1,33]},{26:[1,34]},{28:[1,35]},t(r,[2,19]),t(p,[2,20],{31:[1,36]}),{11:[1,37]},{16:38,51:[1,39]},{11:[2,44]},t(r,[2,5]),{17:40,30:c},{21:41,22:[1,42],32:43,33:44,37:g},{41:46,46:[1,47],47:[1,48]},t(y,[2,33]),t(y,[2,34]),t(y,[2,35]),t(y,[2,36]),t(r,[2,16]),t(r,[2,17]),t(r,[2,18]),{17:49,30:c},t(m,[2,9]),{14:50,52:l},{52:[2,43]},{15:[1,51]},{22:[1,52]},t(r,[2,14]),{21:53,22:[2,22],32:43,33:44,37:g},{34:54,37:[1,55]},{37:[2,28]},{40:56,42:u,43:h,44:d,45:f},t(b,[2,37]),t(b,[2,38]),t(p,[2,21]),{11:[1,57]},{19:58,30:[1,60],48:[1,59]},t(r,[2,13]),{22:[2,23]},t(v,[2,24],{35:61,36:62,38:[1,63],39:_}),t([22,37,38,39],[2,29]),{30:[2,32]},t(m,[2,10]),t(r,[2,12]),t(r,[2,39]),t(r,[2,40]),t(v,[2,25],{36:65,39:_}),t(v,[2,26]),t([22,37,39],[2,30]),t(v,[2,31]),t(v,[2,27])],defaultActions:{5:[2,41],7:[2,2],24:[2,44],39:[2,43],45:[2,28],53:[2,23],56:[2,32]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=2,h=1,d=a.slice.call(arguments,1),f=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);f.setInput(t,p.yy),p.yy.lexer=f,p.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var y=f.yylloc;a.push(y);var m=f.options&&f.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||f.lex()||h)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,_,x,k,w,T,E,C,S,A={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=b()),k=o[x]&&o[x][v]),void 0===k||!k.length||!k[0]){var M="";for(T in S=[],o[x])this.terminals_[T]&&T>u&&S.push("'"+this.terminals_[T]+"'");M=f.showPosition?"Parse error on line "+(c+1)+":\n"+f.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:f.match,token:this.terminals_[v]||v,line:f.yylineno,loc:y,expected:S})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),i.push(f.yytext),a.push(f.yylloc),n.push(k[1]),v=null,_?(v=_,_=null):(l=f.yyleng,s=f.yytext,c=f.yylineno,y=f.yylloc);break;case 2:if(E=this.productions_[k[1]][1],A.$=i[i.length-E],A._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},m&&(A._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[s,l,c,p.yy,k[1],i,a].concat(d))))return w;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[k[1]][0]),i.push(A.$),a.push(A._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},k={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):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(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("acc_title"),25;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),27;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.begin("open_directive"),49;case 8:return this.begin("type_directive"),50;case 9:return this.popState(),this.begin("arg_directive"),15;case 10:return this.popState(),this.popState(),52;case 11:return 51;case 12:case 13:case 15:case 20:case 25:break;case 14:return 11;case 16:return 9;case 17:return 48;case 18:return 4;case 19:return this.begin("block"),20;case 21:return 38;case 22:case 23:return 37;case 24:return 39;case 26:return this.popState(),22;case 27:case 40:return e.yytext[0];case 28:case 32:return 42;case 29:case 33:return 43;case 30:case 34:return 44;case 31:return 45;case 35:case 37:case 38:return 46;case 36:return 47;case 39:return 30;case 41:return 6}},rules:[/^(?: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,/^(?:(.*?)[~](.*?)*[~])/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],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},open_directive:{rules:[8],inclusive:!1},type_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[10,11],inclusive:!1},block:{rules:[20,21,22,23,24,25,26,27],inclusive:!1},INITIAL:{rules:[0,2,4,7,12,13,14,15,16,17,18,19,28,29,30,31,32,33,34,35,36,37,38,39,40,41],inclusive:!0}}};function w(){this.yy={}}return x.lexer=k,w.prototype=x,x.Parser=w,new w}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8009).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},3602:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,9],n=[1,7],r=[1,6],i=[1,8],a=[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],o=[2,10],s=[1,20],c=[1,21],l=[1,22],u=[1,23],h=[1,30],d=[1,32],f=[1,33],p=[1,34],g=[1,62],y=[1,48],m=[1,52],b=[1,36],v=[1,37],_=[1,38],x=[1,39],k=[1,40],w=[1,56],T=[1,63],E=[1,51],C=[1,53],S=[1,55],A=[1,59],M=[1,60],N=[1,41],O=[1,42],D=[1,43],B=[1,44],L=[1,61],I=[1,50],F=[1,54],R=[1,57],P=[1,58],j=[1,49],z=[1,66],Y=[1,71],U=[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],$=[1,75],W=[1,74],q=[1,76],H=[20,21,23,81,82],V=[1,99],G=[1,104],X=[1,107],Z=[1,108],Q=[1,101],K=[1,106],J=[1,109],tt=[1,102],et=[1,114],nt=[1,113],rt=[1,103],it=[1,105],at=[1,110],ot=[1,111],st=[1,112],ct=[1,115],lt=[20,21,22,23,81,82],ut=[20,21,22,23,53,81,82],ht=[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],dt=[20,21,23],ft=[20,21,23,52,66,67,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],pt=[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],gt=[52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],yt=[1,149],mt=[1,157],bt=[1,158],vt=[1,159],_t=[1,160],xt=[1,144],kt=[1,145],wt=[1,141],Tt=[1,152],Et=[1,153],Ct=[1,154],St=[1,155],At=[1,156],Mt=[1,161],Nt=[1,162],Ot=[1,147],Dt=[1,150],Bt=[1,146],Lt=[1,143],It=[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],Ft=[1,165],Rt=[20,21,22,23,26,52,66,67,91,105,106,109,111,112,122,123,124,125,126,127],Pt=[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],jt=[12,21,22,24],zt=[22,106],Yt=[1,250],Ut=[1,245],$t=[1,246],Wt=[1,254],qt=[1,251],Ht=[1,248],Vt=[1,247],Gt=[1,249],Xt=[1,252],Zt=[1,253],Qt=[1,255],Kt=[1,273],Jt=[20,21,23,106],te=[20,21,22,23,66,67,86,102,105,106,109,110,111,112,113],ee={trace:function(){},yy:{},symbols_:{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},terminals_:{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"},productions_:[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]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 5:r.parseDirective("%%{","open_directive");break;case 6:r.parseDirective(a[s],"type_directive");break;case 7:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 8:r.parseDirective("}%%","close_directive","flowchart");break;case 10:case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 11:a[s]!==[]&&a[s-1].push(a[s]),this.$=a[s-1];break;case 12:case 82:case 84:case 96:case 152:case 154:case 155:case 78:case 150:this.$=a[s];break;case 19:r.setDirection("TB"),this.$="TB";break;case 20:r.setDirection(a[s-1]),this.$=a[s-1];break;case 35:this.$=a[s-1].nodes;break;case 41:this.$=r.addSubGraph(a[s-6],a[s-1],a[s-4]);break;case 42:this.$=r.addSubGraph(a[s-3],a[s-1],a[s-3]);break;case 43:this.$=r.addSubGraph(void 0,a[s-1],void 0);break;case 45:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 46:case 47:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 51:r.addLink(a[s-2].stmt,a[s],a[s-1]),this.$={stmt:a[s],nodes:a[s].concat(a[s-2].nodes)};break;case 52:r.addLink(a[s-3].stmt,a[s-1],a[s-2]),this.$={stmt:a[s-1],nodes:a[s-1].concat(a[s-3].nodes)};break;case 53:this.$={stmt:a[s-1],nodes:a[s-1]};break;case 54:this.$={stmt:a[s],nodes:a[s]};break;case 55:case 123:case 125:this.$=[a[s]];break;case 56:this.$=a[s-4].concat(a[s]);break;case 57:this.$=[a[s-2]],r.setClass(a[s-2],a[s]);break;case 58:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"square");break;case 59:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"doublecircle");break;case 60:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"circle");break;case 61:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"ellipse");break;case 62:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"stadium");break;case 63:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"subroutine");break;case 64:this.$=a[s-7],r.addVertex(a[s-7],a[s-1],"rect",void 0,void 0,void 0,Object.fromEntries([[a[s-5],a[s-3]]]));break;case 65:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"cylinder");break;case 66:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"round");break;case 67:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"diamond");break;case 68:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"hexagon");break;case 69:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"odd");break;case 70:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"trapezoid");break;case 71:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"inv_trapezoid");break;case 72:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_right");break;case 73:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_left");break;case 74:this.$=a[s],r.addVertex(a[s]);break;case 75:a[s-1].text=a[s],this.$=a[s-1];break;case 76:case 77:a[s-2].text=a[s-1],this.$=a[s-2];break;case 79:var c=r.destructLink(a[s],a[s-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:a[s-1]};break;case 80:c=r.destructLink(a[s]),this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 81:this.$=a[s-1];break;case 83:case 97:case 153:case 151:this.$=a[s-1]+""+a[s];break;case 98:case 99:this.$=a[s-4],r.addClass(a[s-2],a[s]);break;case 100:this.$=a[s-4],r.setClass(a[s-2],a[s]);break;case 101:case 109:this.$=a[s-1],r.setClickEvent(a[s-1],a[s]);break;case 102:case 110:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 103:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 104:this.$=a[s-4],r.setClickEvent(a[s-4],a[s-3],a[s-2]),r.setTooltip(a[s-4],a[s]);break;case 105:case 111:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 106:case 112:this.$=a[s-3],r.setLink(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 107:case 113:this.$=a[s-3],r.setLink(a[s-3],a[s-2],a[s]);break;case 108:case 114:this.$=a[s-5],r.setLink(a[s-5],a[s-4],a[s]),r.setTooltip(a[s-5],a[s-2]);break;case 115:this.$=a[s-4],r.addVertex(a[s-2],void 0,void 0,a[s]);break;case 116:case 118:this.$=a[s-4],r.updateLink(a[s-2],a[s]);break;case 117:this.$=a[s-4],r.updateLink([a[s-2]],a[s]);break;case 119:this.$=a[s-8],r.updateLinkInterpolate([a[s-6]],a[s-2]),r.updateLink([a[s-6]],a[s]);break;case 120:this.$=a[s-8],r.updateLinkInterpolate(a[s-6],a[s-2]),r.updateLink(a[s-6],a[s]);break;case 121:this.$=a[s-6],r.updateLinkInterpolate([a[s-4]],a[s]);break;case 122:this.$=a[s-6],r.updateLinkInterpolate(a[s-4],a[s]);break;case 124:case 126:a[s-2].push(a[s]),this.$=a[s-2];break;case 128:this.$=a[s-1]+a[s];break;case 156:this.$="v";break;case 157:this.$="-";break;case 158:this.$={stmt:"dir",value:"TB"};break;case 159:this.$={stmt:"dir",value:"BT"};break;case 160:this.$={stmt:"dir",value:"RL"};break;case 161:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},t(a,o,{17:11}),{7:12,13:[1,13]},{16:14,21:n,22:r,24:i},{16:15,21:n,22:r,24:i},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:s,21:c,22:l,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:31,44:d,46:f,48:p,50:35,51:45,52:g,54:46,66:y,67:m,86:b,87:v,88:_,89:x,90:k,91:w,95:T,105:E,106:C,109:S,111:A,112:M,116:47,118:N,119:O,120:D,121:B,122:L,123:I,124:F,125:R,126:P,127:j},{8:64,10:[1,65],15:z},t([10,15],[2,6]),t(a,[2,17]),t(a,[2,18]),t(a,[2,19]),{20:[1,68],21:[1,69],22:Y,27:67,30:70},t(U,[2,11]),t(U,[2,12]),t(U,[2,13]),t(U,[2,14]),t(U,[2,15]),t(U,[2,16]),{9:72,20:$,21:W,23:q,49:73,78:77,81:[1,78],82:[1,79]},{9:80,20:$,21:W,23:q},{9:81,20:$,21:W,23:q},{9:82,20:$,21:W,23:q},{9:83,20:$,21:W,23:q},{9:84,20:$,21:W,23:q},{9:86,20:$,21:W,22:[1,85],23:q},t(U,[2,44]),{45:[1,87]},{47:[1,88]},t(U,[2,47]),t(H,[2,54],{30:89,22:Y}),{22:[1,90]},{22:[1,91]},{22:[1,92]},{22:[1,93]},{26:V,52:G,66:X,67:Z,84:[1,97],91:Q,97:96,98:[1,94],100:[1,95],105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(U,[2,158]),t(U,[2,159]),t(U,[2,160]),t(U,[2,161]),t(lt,[2,55],{53:[1,116]}),t(ut,[2,74],{116:129,40:[1,117],52:g,55:[1,118],57:[1,119],59:[1,120],61:[1,121],63:[1,122],65:[1,123],66:y,67:m,69:[1,124],71:[1,125],73:[1,126],74:[1,127],76:[1,128],91:w,95:T,105:E,106:C,109:S,111:A,112:M,122:L,123:I,124:F,125:R,126:P,127:j}),t(ht,[2,150]),t(ht,[2,175]),t(ht,[2,176]),t(ht,[2,177]),t(ht,[2,178]),t(ht,[2,179]),t(ht,[2,180]),t(ht,[2,181]),t(ht,[2,182]),t(ht,[2,183]),t(ht,[2,184]),t(ht,[2,185]),t(ht,[2,186]),t(ht,[2,187]),t(ht,[2,188]),t(ht,[2,189]),t(ht,[2,190]),{9:130,20:$,21:W,23:q},{11:131,14:[1,132]},t(dt,[2,8]),t(a,[2,20]),t(a,[2,26]),t(a,[2,27]),{21:[1,133]},t(ft,[2,34],{30:134,22:Y}),t(U,[2,35]),{50:135,51:45,52:g,54:46,66:y,67:m,91:w,95:T,105:E,106:C,109:S,111:A,112:M,116:47,122:L,123:I,124:F,125:R,126:P,127:j},t(pt,[2,48]),t(pt,[2,49]),t(pt,[2,50]),t(gt,[2,78],{79:136,68:[1,138],80:[1,137]}),{22:yt,24:mt,26:bt,38:vt,39:139,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t([52,66,67,68,80,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,80]),t(U,[2,36]),t(U,[2,37]),t(U,[2,38]),t(U,[2,39]),t(U,[2,40]),{22:yt,24:mt,26:bt,38:vt,39:163,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(It,o,{17:164}),t(U,[2,45]),t(U,[2,46]),t(H,[2,53],{52:Ft}),{26:V,52:G,66:X,67:Z,91:Q,97:166,102:[1,167],105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},{95:[1,168],103:169,105:[1,170]},{26:V,52:G,66:X,67:Z,91:Q,95:[1,171],97:172,105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},{26:V,52:G,66:X,67:Z,91:Q,97:173,105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(dt,[2,101],{22:[1,174],99:[1,175]}),t(dt,[2,105],{22:[1,176]}),t(dt,[2,109],{115:100,117:178,22:[1,177],26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,122:rt,123:it,124:at,125:ot,126:st,127:ct}),t(dt,[2,111],{22:[1,179]}),t(Rt,[2,152]),t(Rt,[2,154]),t(Rt,[2,155]),t(Rt,[2,156]),t(Rt,[2,157]),t(Pt,[2,162]),t(Pt,[2,163]),t(Pt,[2,164]),t(Pt,[2,165]),t(Pt,[2,166]),t(Pt,[2,167]),t(Pt,[2,168]),t(Pt,[2,169]),t(Pt,[2,170]),t(Pt,[2,171]),t(Pt,[2,172]),t(Pt,[2,173]),t(Pt,[2,174]),{52:g,54:180,66:y,67:m,91:w,95:T,105:E,106:C,109:S,111:A,112:M,116:47,122:L,123:I,124:F,125:R,126:P,127:j},{22:yt,24:mt,26:bt,38:vt,39:181,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:182,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:184,42:_t,52:G,57:[1,183],66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:185,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:186,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:187,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{66:[1,188]},{22:yt,24:mt,26:bt,38:vt,39:189,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:190,42:_t,52:G,66:X,67:Z,71:[1,191],73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:192,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:193,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:194,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(ht,[2,151]),t(jt,[2,3]),{8:195,15:z},{15:[2,7]},t(a,[2,28]),t(ft,[2,33]),t(H,[2,51],{30:196,22:Y}),t(gt,[2,75],{22:[1,197]}),{22:[1,198]},{22:yt,24:mt,26:bt,38:vt,39:199,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,73:xt,81:kt,82:[1,200],83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(Pt,[2,82]),t(Pt,[2,84]),t(Pt,[2,140]),t(Pt,[2,141]),t(Pt,[2,142]),t(Pt,[2,143]),t(Pt,[2,144]),t(Pt,[2,145]),t(Pt,[2,146]),t(Pt,[2,147]),t(Pt,[2,148]),t(Pt,[2,149]),t(Pt,[2,85]),t(Pt,[2,86]),t(Pt,[2,87]),t(Pt,[2,88]),t(Pt,[2,89]),t(Pt,[2,90]),t(Pt,[2,91]),t(Pt,[2,92]),t(Pt,[2,93]),t(Pt,[2,94]),t(Pt,[2,95]),{9:203,20:$,21:W,22:yt,23:q,24:mt,26:bt,38:vt,40:[1,202],42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{18:18,19:19,20:s,21:c,22:l,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,204],43:31,44:d,46:f,48:p,50:35,51:45,52:g,54:46,66:y,67:m,86:b,87:v,88:_,89:x,90:k,91:w,95:T,105:E,106:C,109:S,111:A,112:M,116:47,118:N,119:O,120:D,121:B,122:L,123:I,124:F,125:R,126:P,127:j},{22:Y,30:205},{22:[1,206],26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,115:100,117:178,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:[1,207]},{22:[1,208]},{22:[1,209],106:[1,210]},t(zt,[2,123]),{22:[1,211]},{22:[1,212],26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,115:100,117:178,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:[1,213],26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,115:100,117:178,122:rt,123:it,124:at,125:ot,126:st,127:ct},{84:[1,214]},t(dt,[2,103],{22:[1,215]}),{84:[1,216],101:[1,217]},{84:[1,218]},t(Rt,[2,153]),{84:[1,219],101:[1,220]},t(lt,[2,57],{116:129,52:g,66:y,67:m,91:w,95:T,105:E,106:C,109:S,111:A,112:M,122:L,123:I,124:F,125:R,126:P,127:j}),{22:yt,24:mt,26:bt,38:vt,41:[1,221],42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,56:[1,222],66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:223,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,58:[1,224],66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,60:[1,225],66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,62:[1,226],66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,64:[1,227],66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{67:[1,228]},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,70:[1,229],73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,72:[1,230],73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,39:231,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,41:[1,232],42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,73:xt,75:[1,233],77:[1,234],81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,73:xt,75:[1,236],77:[1,235],81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{9:237,20:$,21:W,23:q},t(H,[2,52],{52:Ft}),t(gt,[2,77]),t(gt,[2,76]),{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,68:[1,238],73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(gt,[2,79]),t(Pt,[2,83]),{22:yt,24:mt,26:bt,38:vt,39:239,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(It,o,{17:240}),t(U,[2,43]),{51:241,52:g,54:46,66:y,67:m,91:w,95:T,105:E,106:C,109:S,111:A,112:M,116:47,122:L,123:I,124:F,125:R,126:P,127:j},{22:Yt,66:Ut,67:$t,86:Wt,96:242,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{22:Yt,66:Ut,67:$t,86:Wt,96:256,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{22:Yt,66:Ut,67:$t,86:Wt,96:257,102:qt,104:[1,258],105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{22:Yt,66:Ut,67:$t,86:Wt,96:259,102:qt,104:[1,260],105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{105:[1,261]},{22:Yt,66:Ut,67:$t,86:Wt,96:262,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{22:Yt,66:Ut,67:$t,86:Wt,96:263,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{26:V,52:G,66:X,67:Z,91:Q,97:264,105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(dt,[2,102]),{84:[1,265]},t(dt,[2,106],{22:[1,266]}),t(dt,[2,107]),t(dt,[2,110]),t(dt,[2,112],{22:[1,267]}),t(dt,[2,113]),t(ut,[2,58]),t(ut,[2,59]),{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,58:[1,268],66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(ut,[2,66]),t(ut,[2,61]),t(ut,[2,62]),t(ut,[2,63]),{66:[1,269]},t(ut,[2,65]),t(ut,[2,67]),{22:yt,24:mt,26:bt,38:vt,42:_t,52:G,66:X,67:Z,72:[1,270],73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(ut,[2,69]),t(ut,[2,70]),t(ut,[2,72]),t(ut,[2,71]),t(ut,[2,73]),t(jt,[2,4]),t([22,52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,81]),{22:yt,24:mt,26:bt,38:vt,41:[1,271],42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{18:18,19:19,20:s,21:c,22:l,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,272],43:31,44:d,46:f,48:p,50:35,51:45,52:g,54:46,66:y,67:m,86:b,87:v,88:_,89:x,90:k,91:w,95:T,105:E,106:C,109:S,111:A,112:M,116:47,118:N,119:O,120:D,121:B,122:L,123:I,124:F,125:R,126:P,127:j},t(lt,[2,56]),t(dt,[2,115],{106:Kt}),t(Jt,[2,125],{108:274,22:Yt,66:Ut,67:$t,86:Wt,102:qt,105:Ht,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt}),t(te,[2,127]),t(te,[2,129]),t(te,[2,130]),t(te,[2,131]),t(te,[2,132]),t(te,[2,133]),t(te,[2,134]),t(te,[2,135]),t(te,[2,136]),t(te,[2,137]),t(te,[2,138]),t(te,[2,139]),t(dt,[2,116],{106:Kt}),t(dt,[2,117],{106:Kt}),{22:[1,275]},t(dt,[2,118],{106:Kt}),{22:[1,276]},t(zt,[2,124]),t(dt,[2,98],{106:Kt}),t(dt,[2,99],{106:Kt}),t(dt,[2,100],{115:100,117:178,26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,122:rt,123:it,124:at,125:ot,126:st,127:ct}),t(dt,[2,104]),{101:[1,277]},{101:[1,278]},{58:[1,279]},{68:[1,280]},{72:[1,281]},{9:282,20:$,21:W,23:q},t(U,[2,42]),{22:Yt,66:Ut,67:$t,86:Wt,102:qt,105:Ht,107:283,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},t(te,[2,128]),{26:V,52:G,66:X,67:Z,91:Q,97:284,105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},{26:V,52:G,66:X,67:Z,91:Q,97:285,105:K,106:J,109:tt,111:et,112:nt,115:100,117:98,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(dt,[2,108]),t(dt,[2,114]),t(ut,[2,60]),{22:yt,24:mt,26:bt,38:vt,39:286,42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:140,84:wt,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},t(ut,[2,68]),t(It,o,{17:287}),t(Jt,[2,126],{108:274,22:Yt,66:Ut,67:$t,86:Wt,102:qt,105:Ht,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt}),t(dt,[2,121],{115:100,117:178,22:[1,288],26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,122:rt,123:it,124:at,125:ot,126:st,127:ct}),t(dt,[2,122],{115:100,117:178,22:[1,289],26:V,52:G,66:X,67:Z,91:Q,105:K,106:J,109:tt,111:et,112:nt,122:rt,123:it,124:at,125:ot,126:st,127:ct}),{22:yt,24:mt,26:bt,38:vt,41:[1,290],42:_t,52:G,66:X,67:Z,73:xt,81:kt,83:201,85:151,86:Tt,87:Et,88:Ct,89:St,90:At,91:Mt,92:Nt,94:142,95:Ot,105:K,106:J,109:Dt,111:et,112:nt,113:Bt,114:Lt,115:148,122:rt,123:it,124:at,125:ot,126:st,127:ct},{18:18,19:19,20:s,21:c,22:l,23:u,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,291],43:31,44:d,46:f,48:p,50:35,51:45,52:g,54:46,66:y,67:m,86:b,87:v,88:_,89:x,90:k,91:w,95:T,105:E,106:C,109:S,111:A,112:M,116:47,118:N,119:O,120:D,121:B,122:L,123:I,124:F,125:R,126:P,127:j},{22:Yt,66:Ut,67:$t,86:Wt,96:292,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},{22:Yt,66:Ut,67:$t,86:Wt,96:293,102:qt,105:Ht,107:243,108:244,109:Vt,110:Gt,111:Xt,112:Zt,113:Qt},t(ut,[2,64]),t(U,[2,41]),t(dt,[2,119],{106:Kt}),t(dt,[2,120],{106:Kt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],132:[2,7]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=2,h=1,d=a.slice.call(arguments,1),f=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);f.setInput(t,p.yy),p.yy.lexer=f,p.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var y=f.yylloc;a.push(y);var m=f.options&&f.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||f.lex()||h)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,_,x,k,w,T,E,C,S,A={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=b()),k=o[x]&&o[x][v]),void 0===k||!k.length||!k[0]){var M="";for(T in S=[],o[x])this.terminals_[T]&&T>u&&S.push("'"+this.terminals_[T]+"'");M=f.showPosition?"Parse error on line "+(c+1)+":\n"+f.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:f.match,token:this.terminals_[v]||v,line:f.yylineno,loc:y,expected:S})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),i.push(f.yytext),a.push(f.yylloc),n.push(k[1]),v=null,_?(v=_,_=null):(l=f.yyleng,s=f.yytext,c=f.yylineno,y=f.yylloc);break;case 2:if(E=this.productions_[k[1]][1],A.$=i[i.length-E],A._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},m&&(A._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[s,l,c,p.yy,k[1],i,a].concat(d))))return w;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[k[1]][0]),i.push(A.$),a.push(A._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},ne={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):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(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:return this.begin("acc_title"),44;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),46;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:case 15:case 24:case 27:case 30:case 33:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 16:return"STR";case 17:return 86;case 18:return 95;case 19:return 87;case 20:return 104;case 21:return 88;case 22:return 89;case 23:this.begin("href");break;case 25:return 100;case 26:this.begin("callbackname");break;case 28:this.popState(),this.begin("callbackargs");break;case 29:return 98;case 31:return 99;case 32:this.begin("click");break;case 34:return 90;case 35:case 36:return t.lex.firstGraph()&&this.begin("dir"),24;case 37:return 38;case 38:return 42;case 39:case 40:case 41:case 42:return 101;case 43:return this.popState(),25;case 44:case 45:case 46:case 47:case 48:case 49:case 50:case 51:case 52:case 53:return this.popState(),26;case 54:return 118;case 55:return 119;case 56:return 120;case 57:return 121;case 58:return 105;case 59:return 111;case 60:return 53;case 61:return 67;case 62:return 52;case 63:return 20;case 64:return 106;case 65:return 126;case 66:case 67:case 68:return 82;case 69:case 70:case 71:return 81;case 72:return 59;case 73:return 60;case 74:return 61;case 75:return 62;case 76:return 63;case 77:return 64;case 78:return 65;case 79:return 69;case 80:return 70;case 81:return 55;case 82:return 56;case 83:return 109;case 84:return 112;case 85:return 127;case 86:return 124;case 87:return 113;case 88:case 89:return 125;case 90:return 114;case 91:return 73;case 92:return 92;case 93:return"SEP";case 94:return 91;case 95:return 66;case 96:return 75;case 97:return 74;case 98:return 77;case 99:return 76;case 100:return 122;case 101:return 123;case 102:return 68;case 103:return 57;case 104:return 58;case 105:return 40;case 106:return 41;case 107:return 71;case 108:return 72;case 109:return 133;case 110:return 21;case 111:return 22;case 112:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\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)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[30,31],inclusive:!1},callbackname:{rules:[27,28,29],inclusive:!1},href:{rules:[24,25],inclusive:!1},click:{rules:[33,34],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[43,44,45,46,47,48,49,50,51,52,53],inclusive:!1},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},string:{rules:[15,16],inclusive:!1},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:!0}}};function re(){this.yy={}}return ee.lexer=ne,re.prototype=ee,ee.Parser=re,new re}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(5354).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},9959:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[7,9,11,12,13,14,15,16,17,18,19,20,22,24,25,27,34,39],i=[1,15],a=[1,16],o=[1,17],s=[1,18],c=[1,19],l=[1,20],u=[1,21],h=[1,22],d=[1,23],f=[1,24],p=[1,25],g=[1,26],y=[1,28],m=[1,30],b=[1,33],v=[5,7,9,11,12,13,14,15,16,17,18,19,20,22,24,25,27,34,39],_={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,topAxis:14,axisFormat:15,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},terminals_:{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"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,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]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 2:return a[s-1];case 3:case 7:case 8:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 9:r.setDateFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 10:r.enableInclusiveEndDates(),this.$=a[s].substr(18);break;case 11:r.TopAxis(),this.$=a[s].substr(8);break;case 12:r.setAxisFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 13:r.setExcludes(a[s].substr(9)),this.$=a[s].substr(9);break;case 14:r.setIncludes(a[s].substr(9)),this.$=a[s].substr(9);break;case 15:r.setTodayMarker(a[s].substr(12)),this.$=a[s].substr(12);break;case 16:r.setDiagramTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 17:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 18:case 19:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 20:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 22:r.addTask(a[s-1],a[s]),this.$="task";break;case 26:this.$=a[s-1],r.setClickEvent(a[s-1],a[s],null);break;case 27:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 28:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],null),r.setLink(a[s-2],a[s]);break;case 29:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setLink(a[s-3],a[s]);break;case 30:this.$=a[s-2],r.setClickEvent(a[s-2],a[s],null),r.setLink(a[s-2],a[s-1]);break;case 31:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-1],a[s]),r.setLink(a[s-3],a[s-2]);break;case 32:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 33:case 39:this.$=a[s-1]+" "+a[s];break;case 34:case 35:case 37:this.$=a[s-2]+" "+a[s-1]+" "+a[s];break;case 36:case 38:this.$=a[s-3]+" "+a[s-2]+" "+a[s-1]+" "+a[s];break;case 40:r.parseDirective("%%{","open_directive");break;case 41:r.parseDirective(a[s],"type_directive");break;case 42:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 43:r.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:e,29:4,39:n},{1:[3]},{3:6,4:2,5:e,29:4,39:n},t(r,[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:i,13:a,14:o,15:s,16:c,17:l,18:u,19:h,20:d,22:f,24:p,25:g,26:27,27:y,29:4,34:m,39:n},{31:31,32:[1,32],42:b},t([32,42],[2,41]),t(r,[2,8],{1:[2,2]}),t(r,[2,4]),{4:29,10:34,12:i,13:a,14:o,15:s,16:c,17:l,18:u,19:h,20:d,22:f,24:p,25:g,26:27,27:y,29:4,34:m,39:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,9]),t(r,[2,10]),t(r,[2,11]),t(r,[2,12]),t(r,[2,13]),t(r,[2,14]),t(r,[2,15]),t(r,[2,16]),{21:[1,35]},{23:[1,36]},t(r,[2,19]),t(r,[2,20]),t(r,[2,21]),{28:[1,37]},t(r,[2,23]),{35:[1,38],37:[1,39]},{11:[1,40]},{33:41,41:[1,42]},{11:[2,43]},t(r,[2,5]),t(r,[2,17]),t(r,[2,18]),t(r,[2,22]),t(r,[2,26],{36:[1,43],37:[1,44]}),t(r,[2,32],{35:[1,45]}),t(v,[2,24]),{31:46,42:b},{42:[2,42]},t(r,[2,27],{37:[1,47]}),t(r,[2,28]),t(r,[2,30],{36:[1,48]}),{11:[1,49]},t(r,[2,29]),t(r,[2,31]),t(v,[2,25])],defaultActions:{5:[2,40],6:[2,1],33:[2,43],42:[2,42]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=2,h=1,d=a.slice.call(arguments,1),f=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);f.setInput(t,p.yy),p.yy.lexer=f,p.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var y=f.yylloc;a.push(y);var m=f.options&&f.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||f.lex()||h)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,_,x,k,w,T,E,C,S,A={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=b()),k=o[x]&&o[x][v]),void 0===k||!k.length||!k[0]){var M="";for(T in S=[],o[x])this.terminals_[T]&&T>u&&S.push("'"+this.terminals_[T]+"'");M=f.showPosition?"Parse error on line "+(c+1)+":\n"+f.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:f.match,token:this.terminals_[v]||v,line:f.yylineno,loc:y,expected:S})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),i.push(f.yytext),a.push(f.yylloc),n.push(k[1]),v=null,_?(v=_,_=null):(l=f.yyleng,s=f.yytext,c=f.yylineno,y=f.yylloc);break;case 2:if(E=this.productions_[k[1]][1],A.$=i[i.length-E],A._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},m&&(A._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[s,l,c,p.yy,k[1],i,a].concat(d))))return w;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[k[1]][0]),i.push(A.$),a.push(A._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},x={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):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(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),39;case 1:return this.begin("type_directive"),40;case 2:return this.popState(),this.begin("arg_directive"),32;case 3:return this.popState(),this.popState(),42;case 4:return 41;case 5:return this.begin("acc_title"),20;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),22;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 20:case 23:case 26:case 29:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:case 13:case 14:case 16:case 17:case 18:break;case 15:return 11;case 19:this.begin("href");break;case 21:return 37;case 22:this.begin("callbackname");break;case 24:this.popState(),this.begin("callbackargs");break;case 25:return 35;case 27:return 36;case 28:this.begin("click");break;case 30:return 34;case 31:return 5;case 32:return 12;case 33:return 13;case 34:return 14;case 35:return 15;case 36:return 17;case 37:return 16;case 38:return 18;case 39:return"date";case 40:return 19;case 41:return"accDescription";case 42:return 25;case 43:return 27;case 44:return 28;case 45:return 32;case 46:return 7;case 47:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[26,27],inclusive:!1},callbackname:{rules:[23,24,25],inclusive:!1},href:{rules:[20,21],inclusive:!1},click:{rules:[29,30],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,22,28,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],inclusive:!0}}};function k(){this.yy={}}return _.lexer=x,k.prototype=_,_.Parser=k,new k}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(6878).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},2553:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,7],r=[1,5],i=[1,9],a=[1,6],o=[2,6],s=[1,16],c=[6,8,14,20,22,24,25,27,29,32,35,39,49,53],l=[8,14,20,22,24,25,27,29,32,35,39],u=[8,13,14,20,22,24,25,27,29,32,35,39],h=[1,26],d=[6,8,14,49,53],f=[8,14,53],p=[1,64],g=[1,65],y=[1,66],m=[8,14,33,38,41,53],b={trace:function(){},yy:{},symbols_:{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_TYPE:36,commitType:37,COMMIT_TAG:38,COMMIT:39,commit_arg: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},terminals_:{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_TYPE",38:"COMMIT_TAG",39:"COMMIT",41:"COMMIT_MSG",42:"NORMAL",43:"REVERSE",44:"HIGHLIGHT",49:"open_directive",50:"type_directive",51:"arg_directive",52:"close_directive",53:";"},productions_:[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],[18,4],[18,4],[18,6],[18,6],[18,6],[18,6],[18,6],[18,6],[18,8],[18,8],[18,8],[18,8],[18,8],[18,8],[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],[40,0],[40,1],[37,1],[37,1],[37,1],[5,3],[5,5],[45,1],[46,1],[48,1],[47,1],[4,1],[4,1],[4,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 3:return a[s];case 4:return a[s-1];case 5:return r.setDirection(a[s-3]),a[s-1];case 7:r.setOptions(a[s-1]),this.$=a[s];break;case 8:a[s-1]+=a[s],this.$=a[s-1];break;case 10:this.$=[];break;case 11:a[s-1].push(a[s]),this.$=a[s-1];break;case 12:this.$=a[s-1];break;case 17:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 18:case 19:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 20:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 22:r.checkout(a[s]);break;case 23:r.branch(a[s]);break;case 24:r.branch(a[s-2],a[s]);break;case 25:r.cherryPick(a[s]);break;case 26:r.merge(a[s],"","","");break;case 27:r.merge(a[s-2],a[s],"","");break;case 28:r.merge(a[s-2],"",a[s],"");break;case 29:r.merge(a[s-2],"","",a[s]);break;case 30:r.merge(a[s-4],a[s],"",a[s-2]);break;case 31:r.merge(a[s-4],"",a[s],a[s-2]);break;case 32:r.merge(a[s-4],"",a[s-2],a[s]);break;case 33:r.merge(a[s-4],a[s-2],a[s],"");break;case 34:r.merge(a[s-4],a[s-2],"",a[s]);break;case 35:r.merge(a[s-4],a[s],a[s-2],"");break;case 36:r.merge(a[s-6],a[s-4],a[s-2],a[s]);break;case 37:r.merge(a[s-6],a[s],a[s-4],a[s-2]);break;case 38:r.merge(a[s-6],a[s-4],a[s],a[s-2]);break;case 39:r.merge(a[s-6],a[s-2],a[s-4],a[s]);break;case 40:r.merge(a[s-6],a[s],a[s-2],a[s-4]);break;case 41:r.merge(a[s-6],a[s-2],a[s],a[s-4]);break;case 42:r.commit(a[s]);break;case 43:r.commit("","",r.commitType.NORMAL,a[s]);break;case 44:r.commit("","",a[s],"");break;case 45:r.commit("","",a[s],a[s-2]);break;case 46:r.commit("","",a[s-2],a[s]);break;case 47:r.commit("",a[s],r.commitType.NORMAL,"");break;case 48:r.commit("",a[s-2],r.commitType.NORMAL,a[s]);break;case 49:r.commit("",a[s],r.commitType.NORMAL,a[s-2]);break;case 50:r.commit("",a[s-2],a[s],"");break;case 51:r.commit("",a[s],a[s-2],"");break;case 52:r.commit("",a[s-4],a[s-2],a[s]);break;case 53:r.commit("",a[s-4],a[s],a[s-2]);break;case 54:r.commit("",a[s-2],a[s-4],a[s]);break;case 55:r.commit("",a[s],a[s-4],a[s-2]);break;case 56:r.commit("",a[s],a[s-2],a[s-4]);break;case 57:r.commit("",a[s-2],a[s],a[s-4]);break;case 58:r.commit(a[s],"",r.commitType.NORMAL,"");break;case 59:r.commit(a[s],"",r.commitType.NORMAL,a[s-2]);break;case 60:r.commit(a[s-2],"",r.commitType.NORMAL,a[s]);break;case 61:r.commit(a[s-2],"",a[s],"");break;case 62:r.commit(a[s],"",a[s-2],"");break;case 63:r.commit(a[s],a[s-2],r.commitType.NORMAL,"");break;case 64:r.commit(a[s-2],a[s],r.commitType.NORMAL,"");break;case 65:r.commit(a[s-4],"",a[s-2],a[s]);break;case 66:r.commit(a[s-4],"",a[s],a[s-2]);break;case 67:r.commit(a[s-2],"",a[s-4],a[s]);break;case 68:r.commit(a[s],"",a[s-4],a[s-2]);break;case 69:r.commit(a[s],"",a[s-2],a[s-4]);break;case 70:r.commit(a[s-2],"",a[s],a[s-4]);break;case 71:r.commit(a[s-4],a[s],a[s-2],"");break;case 72:r.commit(a[s-4],a[s-2],a[s],"");break;case 73:r.commit(a[s-2],a[s],a[s-4],"");break;case 74:r.commit(a[s],a[s-2],a[s-4],"");break;case 75:r.commit(a[s],a[s-4],a[s-2],"");break;case 76:r.commit(a[s-2],a[s-4],a[s],"");break;case 77:r.commit(a[s-4],a[s],r.commitType.NORMAL,a[s-2]);break;case 78:r.commit(a[s-4],a[s-2],r.commitType.NORMAL,a[s]);break;case 79:r.commit(a[s-2],a[s],r.commitType.NORMAL,a[s-4]);break;case 80:r.commit(a[s],a[s-2],r.commitType.NORMAL,a[s-4]);break;case 81:r.commit(a[s],a[s-4],r.commitType.NORMAL,a[s-2]);break;case 82:r.commit(a[s-2],a[s-4],r.commitType.NORMAL,a[s]);break;case 83:r.commit(a[s-6],a[s-4],a[s-2],a[s]);break;case 84:r.commit(a[s-6],a[s-4],a[s],a[s-2]);break;case 85:r.commit(a[s-6],a[s-2],a[s-4],a[s]);break;case 86:r.commit(a[s-6],a[s],a[s-4],a[s-2]);break;case 87:r.commit(a[s-6],a[s-2],a[s],a[s-4]);break;case 88:r.commit(a[s-6],a[s],a[s-2],a[s-4]);break;case 89:r.commit(a[s-4],a[s-6],a[s-2],a[s]);break;case 90:r.commit(a[s-4],a[s-6],a[s],a[s-2]);break;case 91:r.commit(a[s-2],a[s-6],a[s-4],a[s]);break;case 92:r.commit(a[s],a[s-6],a[s-4],a[s-2]);break;case 93:r.commit(a[s-2],a[s-6],a[s],a[s-4]);break;case 94:r.commit(a[s],a[s-6],a[s-2],a[s-4]);break;case 95:r.commit(a[s],a[s-4],a[s-2],a[s-6]);break;case 96:r.commit(a[s-2],a[s-4],a[s],a[s-6]);break;case 97:r.commit(a[s],a[s-2],a[s-4],a[s-6]);break;case 98:r.commit(a[s-2],a[s],a[s-4],a[s-6]);break;case 99:r.commit(a[s-4],a[s-2],a[s],a[s-6]);break;case 100:r.commit(a[s-4],a[s],a[s-2],a[s-6]);break;case 101:r.commit(a[s-2],a[s-4],a[s-6],a[s]);break;case 102:r.commit(a[s],a[s-4],a[s-6],a[s-2]);break;case 103:r.commit(a[s-2],a[s],a[s-6],a[s-4]);break;case 104:r.commit(a[s],a[s-2],a[s-6],a[s-4]);break;case 105:r.commit(a[s-4],a[s-2],a[s-6],a[s]);break;case 106:r.commit(a[s-4],a[s],a[s-6],a[s-2]);break;case 107:this.$="";break;case 108:this.$=a[s];break;case 109:this.$=r.commitType.NORMAL;break;case 110:this.$=r.commitType.REVERSE;break;case 111:this.$=r.commitType.HIGHLIGHT;break;case 114:r.parseDirective("%%{","open_directive");break;case 115:r.parseDirective(a[s],"type_directive");break;case 116:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 117:r.parseDirective("}%%","close_directive","gitGraph")}},table:[{3:1,4:2,5:3,6:e,8:n,14:r,45:8,49:i,53:a},{1:[3]},{3:10,4:2,5:3,6:e,8:n,14:r,45:8,49:i,53:a},{3:11,4:2,5:3,6:e,8:n,14:r,45:8,49:i,53:a},{7:12,8:o,9:[1,13],10:[1,14],11:15,14:s},t(c,[2,118]),t(c,[2,119]),t(c,[2,120]),{46:17,50:[1,18]},{50:[2,114]},{1:[2,1]},{1:[2,2]},{8:[1,19]},{7:20,8:o,11:15,14:s},{9:[1,21]},t(l,[2,10],{12:22,13:[1,23]}),t(u,[2,9]),{9:[1,25],47:24,52:h},t([9,52],[2,115]),{1:[2,3]},{8:[1,27]},{7:28,8:o,11:15,14:s},{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],39:[1,41]},t(u,[2,8]),t(d,[2,112]),{48:45,51:[1,46]},t(d,[2,117]),{1:[2,4]},{8:[1,47]},t(l,[2,11]),{4:48,8:n,14:r,53:a},t(l,[2,13]),t(f,[2,14]),t(f,[2,15]),t(f,[2,16]),{21:[1,49]},{23:[1,50]},t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),{28:[1,51]},t(f,[2,107],{40:52,33:[1,55],34:[1,57],36:[1,54],38:[1,53],41:[1,56]}),{28:[1,58]},{33:[1,59]},{28:[1,60]},{47:61,52:h},{52:[2,116]},{1:[2,5]},t(l,[2,12]),t(f,[2,17]),t(f,[2,18]),t(f,[2,22]),t(f,[2,42]),{34:[1,62]},{37:63,42:p,43:g,44:y},{34:[1,67]},{34:[1,68]},t(f,[2,108]),t(f,[2,26],{33:[1,69],36:[1,70],38:[1,71]}),{34:[1,72]},t(f,[2,23],{30:[1,73]}),t(d,[2,113]),t(f,[2,43],{33:[1,75],36:[1,74],41:[1,76]}),t(f,[2,44],{33:[1,78],38:[1,77],41:[1,79]}),t(m,[2,109]),t(m,[2,110]),t(m,[2,111]),t(f,[2,47],{36:[1,81],38:[1,80],41:[1,82]}),t(f,[2,58],{33:[1,85],36:[1,84],38:[1,83]}),{34:[1,86]},{37:87,42:p,43:g,44:y},{34:[1,88]},t(f,[2,25]),{31:[1,89]},{37:90,42:p,43:g,44:y},{34:[1,91]},{34:[1,92]},{34:[1,93]},{34:[1,94]},{34:[1,95]},{34:[1,96]},{37:97,42:p,43:g,44:y},{34:[1,98]},{34:[1,99]},{37:100,42:p,43:g,44:y},{34:[1,101]},t(f,[2,27],{36:[1,102],38:[1,103]}),t(f,[2,28],{33:[1,105],38:[1,104]}),t(f,[2,29],{33:[1,106],36:[1,107]}),t(f,[2,24]),t(f,[2,45],{33:[1,108],41:[1,109]}),t(f,[2,49],{36:[1,110],41:[1,111]}),t(f,[2,59],{33:[1,113],36:[1,112]}),t(f,[2,46],{33:[1,114],41:[1,115]}),t(f,[2,51],{38:[1,116],41:[1,117]}),t(f,[2,62],{33:[1,119],38:[1,118]}),t(f,[2,48],{36:[1,120],41:[1,121]}),t(f,[2,50],{38:[1,122],41:[1,123]}),t(f,[2,63],{36:[1,124],38:[1,125]}),t(f,[2,60],{33:[1,127],36:[1,126]}),t(f,[2,61],{33:[1,129],38:[1,128]}),t(f,[2,64],{36:[1,130],38:[1,131]}),{37:132,42:p,43:g,44:y},{34:[1,133]},{34:[1,134]},{34:[1,135]},{34:[1,136]},{37:137,42:p,43:g,44:y},{34:[1,138]},{34:[1,139]},{37:140,42:p,43:g,44:y},{34:[1,141]},{37:142,42:p,43:g,44:y},{34:[1,143]},{34:[1,144]},{34:[1,145]},{34:[1,146]},{34:[1,147]},{34:[1,148]},{34:[1,149]},{37:150,42:p,43:g,44:y},{34:[1,151]},{34:[1,152]},{34:[1,153]},{37:154,42:p,43:g,44:y},{34:[1,155]},{37:156,42:p,43:g,44:y},{34:[1,157]},{34:[1,158]},{34:[1,159]},{37:160,42:p,43:g,44:y},{34:[1,161]},t(f,[2,33],{38:[1,162]}),t(f,[2,34],{36:[1,163]}),t(f,[2,32],{33:[1,164]}),t(f,[2,35],{38:[1,165]}),t(f,[2,30],{36:[1,166]}),t(f,[2,31],{33:[1,167]}),t(f,[2,56],{41:[1,168]}),t(f,[2,69],{33:[1,169]}),t(f,[2,57],{41:[1,170]}),t(f,[2,80],{36:[1,171]}),t(f,[2,70],{33:[1,172]}),t(f,[2,79],{36:[1,173]}),t(f,[2,55],{41:[1,174]}),t(f,[2,68],{33:[1,175]}),t(f,[2,54],{41:[1,176]}),t(f,[2,74],{38:[1,177]}),t(f,[2,67],{33:[1,178]}),t(f,[2,73],{38:[1,179]}),t(f,[2,53],{41:[1,180]}),t(f,[2,81],{36:[1,181]}),t(f,[2,52],{41:[1,182]}),t(f,[2,75],{38:[1,183]}),t(f,[2,76],{38:[1,184]}),t(f,[2,82],{36:[1,185]}),t(f,[2,66],{33:[1,186]}),t(f,[2,77],{36:[1,187]}),t(f,[2,65],{33:[1,188]}),t(f,[2,71],{38:[1,189]}),t(f,[2,72],{38:[1,190]}),t(f,[2,78],{36:[1,191]}),{34:[1,192]},{37:193,42:p,43:g,44:y},{34:[1,194]},{34:[1,195]},{37:196,42:p,43:g,44:y},{34:[1,197]},{34:[1,198]},{34:[1,199]},{34:[1,200]},{37:201,42:p,43:g,44:y},{34:[1,202]},{37:203,42:p,43:g,44:y},{34:[1,204]},{34:[1,205]},{34:[1,206]},{34:[1,207]},{34:[1,208]},{34:[1,209]},{34:[1,210]},{37:211,42:p,43:g,44:y},{34:[1,212]},{34:[1,213]},{34:[1,214]},{37:215,42:p,43:g,44:y},{34:[1,216]},{37:217,42:p,43:g,44:y},{34:[1,218]},{34:[1,219]},{34:[1,220]},{37:221,42:p,43:g,44:y},t(f,[2,36]),t(f,[2,38]),t(f,[2,37]),t(f,[2,39]),t(f,[2,41]),t(f,[2,40]),t(f,[2,97]),t(f,[2,98]),t(f,[2,95]),t(f,[2,96]),t(f,[2,100]),t(f,[2,99]),t(f,[2,104]),t(f,[2,103]),t(f,[2,102]),t(f,[2,101]),t(f,[2,106]),t(f,[2,105]),t(f,[2,94]),t(f,[2,93]),t(f,[2,92]),t(f,[2,91]),t(f,[2,89]),t(f,[2,90]),t(f,[2,88]),t(f,[2,87]),t(f,[2,86]),t(f,[2,85]),t(f,[2,83]),t(f,[2,84])],defaultActions:{9:[2,114],10:[2,1],11:[2,2],19:[2,3],27:[2,4],46:[2,116],47:[2,5]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=2,h=1,d=a.slice.call(arguments,1),f=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);f.setInput(t,p.yy),p.yy.lexer=f,p.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var y=f.yylloc;a.push(y);var m=f.options&&f.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||f.lex()||h)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,_,x,k,w,T,E,C,S,A={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=b()),k=o[x]&&o[x][v]),void 0===k||!k.length||!k[0]){var M="";for(T in S=[],o[x])this.terminals_[T]&&T>u&&S.push("'"+this.terminals_[T]+"'");M=f.showPosition?"Parse error on line "+(c+1)+":\n"+f.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:f.match,token:this.terminals_[v]||v,line:f.yylineno,loc:y,expected:S})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),i.push(f.yytext),a.push(f.yylloc),n.push(k[1]),v=null,_?(v=_,_=null):(l=f.yyleng,s=f.yytext,c=f.yylineno,y=f.yylloc);break;case 2:if(E=this.productions_[k[1]][1],A.$=i[i.length-E],A._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},m&&(A._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[s,l,c,p.yy,k[1],i,a].concat(d))))return w;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[k[1]][0]),i.push(A.$),a.push(A._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},v={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):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(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),49;case 1:return this.begin("type_directive"),50;case 2:return this.popState(),this.begin("arg_directive"),9;case 3:return this.popState(),this.popState(),52;case 4:return 51;case 5:return this.begin("acc_title"),20;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),22;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:case 35:case 38:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:return 14;case 13:case 14:case 15:break;case 16:return 6;case 17:return 39;case 18:return 33;case 19:return 36;case 20:return 41;case 21:return 42;case 22:return 43;case 23:return 44;case 24:return 38;case 25:return 29;case 26:return 30;case 27:return 35;case 28:return 32;case 29:return 27;case 30:case 31:return 10;case 32:return 9;case 33:return"CARET";case 34:this.begin("options");break;case 36:return 13;case 37:this.begin("string");break;case 39:return 34;case 40:return 31;case 41:return 28;case 42:return 8}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\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],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},options:{rules:[35,36],inclusive:!1},string:{rules:[38,39],inclusive:!1},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:!0}}};function _(){this.yy={}}return b.lexer=v,_.prototype=b,b.Parser=_,new _}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8183).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},6765:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,r,i,a,o){switch(a.length,i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(e,[2,3]),t(e,[2,4]),t(e,[2,5]),t(e,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=2,h=1,d=a.slice.call(arguments,1),f=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);f.setInput(t,p.yy),p.yy.lexer=f,p.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var y=f.yylloc;a.push(y);var m=f.options&&f.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||f.lex()||h)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,_,x,k,w,T,E,C,S,A={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=b()),k=o[x]&&o[x][v]),void 0===k||!k.length||!k[0]){var M="";for(T in S=[],o[x])this.terminals_[T]&&T>u&&S.push("'"+this.terminals_[T]+"'");M=f.showPosition?"Parse error on line "+(c+1)+":\n"+f.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:f.match,token:this.terminals_[v]||v,line:f.yylineno,loc:y,expected:S})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),i.push(f.yytext),a.push(f.yylloc),n.push(k[1]),v=null,_?(v=_,_=null):(l=f.yyleng,s=f.yytext,c=f.yylineno,y=f.yylloc);break;case 2:if(E=this.productions_[k[1]][1],A.$=i[i.length-E],A._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},m&&(A._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[s,l,c,p.yy,k[1],i,a].concat(d))))return w;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[k[1]][0]),i.push(A.$),a.push(A._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):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(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function i(){this.yy={}}return n.lexer=r,i.prototype=n,n.Parser=i,new i}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(1428).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},7062:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,5],r=[1,6],i=[1,7],a=[1,9],o=[1,11,13,15,17,19,20,26,27,28,29],s=[2,5],c=[1,6,11,13,15,17,19,20,26,27,28,29],l=[26,27,28],u=[2,8],h=[1,18],d=[1,19],f=[1,20],p=[1,21],g=[1,22],y=[1,23],m=[1,28],b=[6,26,27,28,29],v={trace:function(){},yy:{},symbols_:{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},terminals_:{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"},productions_:[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]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:r.setShowData(!0);break;case 7:this.$=a[s-1];break;case 9:r.addSection(a[s-1],r.cleanupValue(a[s]));break;case 10:this.$=a[s].trim(),r.setDiagramTitle(this.$);break;case 11:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 12:case 13:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 14:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 21:r.parseDirective("%%{","open_directive");break;case 22:r.parseDirective(a[s],"type_directive");break;case 23:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 24:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,21:8,26:n,27:r,28:i,29:a},{1:[3]},{3:10,4:2,5:3,6:e,21:8,26:n,27:r,28:i,29:a},{3:11,4:2,5:3,6:e,21:8,26:n,27:r,28:i,29:a},t(o,s,{7:12,8:[1,13]}),t(c,[2,18]),t(c,[2,19]),t(c,[2,20]),{22:14,30:[1,15]},{30:[2,21]},{1:[2,1]},{1:[2,2]},t(l,u,{21:8,9:16,10:17,5:24,1:[2,3],11:h,13:d,15:f,17:p,19:g,20:y,29:a}),t(o,s,{7:25}),{23:26,24:[1,27],32:m},t([24,32],[2,22]),t(o,[2,6]),{4:29,26:n,27:r,28:i},{12:[1,30]},{14:[1,31]},{16:[1,32]},{18:[1,33]},t(l,[2,13]),t(l,[2,14]),t(l,[2,15]),t(l,u,{21:8,9:16,10:17,5:24,1:[2,4],11:h,13:d,15:f,17:p,19:g,20:y,29:a}),t(b,[2,16]),{25:34,31:[1,35]},t(b,[2,24]),t(o,[2,7]),t(l,[2,9]),t(l,[2,10]),t(l,[2,11]),t(l,[2,12]),{23:36,32:m},{32:[2,23]},t(b,[2,17])],defaultActions:{9:[2,21],10:[2,1],11:[2,2],35:[2,23]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=2,h=1,d=a.slice.call(arguments,1),f=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);f.setInput(t,p.yy),p.yy.lexer=f,p.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var y=f.yylloc;a.push(y);var m=f.options&&f.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||f.lex()||h)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,_,x,k,w,T,E,C,S,A={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=b()),k=o[x]&&o[x][v]),void 0===k||!k.length||!k[0]){var M="";for(T in S=[],o[x])this.terminals_[T]&&T>u&&S.push("'"+this.terminals_[T]+"'");M=f.showPosition?"Parse error on line "+(c+1)+":\n"+f.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:f.match,token:this.terminals_[v]||v,line:f.yylineno,loc:y,expected:S})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),i.push(f.yytext),a.push(f.yylloc),n.push(k[1]),v=null,_?(v=_,_=null):(l=f.yyleng,s=f.yytext,c=f.yylineno,y=f.yylloc);break;case 2:if(E=this.productions_[k[1]][1],A.$=i[i.length-E],A._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},m&&(A._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[s,l,c,p.yy,k[1],i,a].concat(d))))return w;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[k[1]][0]),i.push(A.$),a.push(A._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},_={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):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(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),29;case 1:return this.begin("type_directive"),30;case 2:return this.popState(),this.begin("arg_directive"),24;case 3:return this.popState(),this.popState(),32;case 4:return 31;case 5:case 6:case 8:case 9:break;case 7:return 26;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:return this.begin("acc_title"),15;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),17;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:case 20:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:this.begin("string");break;case 21:return"txt";case 22:return 6;case 23:return 8;case 24:return"value";case 25:return 28}},rules:[/^(?:%%\{)/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],conditions:{acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[20,21],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,14,16,19,22,23,24,25],inclusive:!0}}};function x(){this.yy={}}return v.lexer=_,x.prototype=v,v.Parser=x,new x}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(4551).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},3176:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[1,6],i=[1,7],a=[1,8],o=[5,6,8,14,16,18,19,40,41,42,43,44,45,53,71,72],s=[1,22],c=[2,13],l=[1,26],u=[1,27],h=[1,28],d=[1,29],f=[1,30],p=[1,31],g=[1,24],y=[1,32],m=[1,33],b=[1,36],v=[71,72],_=[5,8,14,16,18,19,40,41,42,43,44,45,53,60,62,71,72],x=[1,56],k=[1,57],w=[1,58],T=[1,59],E=[1,60],C=[1,61],S=[1,62],A=[62,63],M=[1,74],N=[1,70],O=[1,71],D=[1,72],B=[1,73],L=[1,75],I=[1,79],F=[1,80],R=[1,77],P=[1,78],j=[5,8,14,16,18,19,40,41,42,43,44,45,53,71,72],z={trace:function(){},yy:{},symbols_:{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},terminals_:{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"},productions_:[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]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 7:case 8:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 9:r.parseDirective("%%{","open_directive");break;case 10:r.parseDirective(a[s],"type_directive");break;case 11:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 12:r.parseDirective("}%%","close_directive","pie");break;case 13:this.$=[];break;case 19:r.addRequirement(a[s-3],a[s-4]);break;case 20:r.setNewReqId(a[s-2]);break;case 21:r.setNewReqText(a[s-2]);break;case 22:r.setNewReqRisk(a[s-2]);break;case 23:r.setNewReqVerifyMethod(a[s-2]);break;case 26:this.$=r.RequirementType.REQUIREMENT;break;case 27:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 28:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 29:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 30:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 31:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 32:this.$=r.RiskLevel.LOW_RISK;break;case 33:this.$=r.RiskLevel.MED_RISK;break;case 34:this.$=r.RiskLevel.HIGH_RISK;break;case 35:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 36:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 37:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 38:this.$=r.VerifyType.VERIFY_TEST;break;case 39:r.addElement(a[s-3]);break;case 40:r.setNewElementType(a[s-2]);break;case 41:r.setNewElementDocRef(a[s-2]);break;case 44:r.addRelationship(a[s-2],a[s],a[s-4]);break;case 45:r.addRelationship(a[s-2],a[s-4],a[s]);break;case 46:this.$=r.Relationships.CONTAINS;break;case 47:this.$=r.Relationships.COPIES;break;case 48:this.$=r.Relationships.DERIVES;break;case 49:this.$=r.Relationships.SATISFIES;break;case 50:this.$=r.Relationships.VERIFIES;break;case 51:this.$=r.Relationships.REFINES;break;case 52:this.$=r.Relationships.TRACES}},table:[{3:1,4:2,6:e,9:4,14:n,16:r,18:i,19:a},{1:[3]},{3:10,4:2,5:[1,9],6:e,9:4,14:n,16:r,18:i,19:a},{5:[1,11]},{10:12,20:[1,13]},{15:[1,14]},{17:[1,15]},t(o,[2,8]),{20:[2,9]},{3:16,4:2,6:e,9:4,14:n,16:r,18:i,19:a},{1:[2,2]},{4:21,5:s,7:17,8:c,9:4,14:n,16:r,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:l,41:u,42:h,43:d,44:f,45:p,53:g,71:y,72:m},{11:34,12:[1,35],22:b},t([12,22],[2,10]),t(o,[2,6]),t(o,[2,7]),{1:[2,1]},{8:[1,37]},{4:21,5:s,7:38,8:c,9:4,14:n,16:r,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:l,41:u,42:h,43:d,44:f,45:p,53:g,71:y,72:m},{4:21,5:s,7:39,8:c,9:4,14:n,16:r,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:l,41:u,42:h,43:d,44:f,45:p,53:g,71:y,72:m},{4:21,5:s,7:40,8:c,9:4,14:n,16:r,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:l,41:u,42:h,43:d,44:f,45:p,53:g,71:y,72:m},{4:21,5:s,7:41,8:c,9:4,14:n,16:r,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:l,41:u,42:h,43:d,44:f,45:p,53:g,71:y,72:m},{4:21,5:s,7:42,8:c,9:4,14:n,16:r,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:l,41:u,42:h,43:d,44:f,45:p,53:g,71:y,72:m},{27:43,71:[1,44],72:[1,45]},{54:46,71:[1,47],72:[1,48]},{60:[1,49],62:[1,50]},t(v,[2,26]),t(v,[2,27]),t(v,[2,28]),t(v,[2,29]),t(v,[2,30]),t(v,[2,31]),t(_,[2,55]),t(_,[2,56]),t(o,[2,4]),{13:51,21:[1,52]},t(o,[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:x,65:k,66:w,67:T,68:E,69:C,70:S},{61:63,64:x,65:k,66:w,67:T,68:E,69:C,70:S},{11:64,22:b},{22:[2,11]},{5:[1,65]},{5:[1,66]},{62:[1,67]},t(A,[2,46]),t(A,[2,47]),t(A,[2,48]),t(A,[2,49]),t(A,[2,50]),t(A,[2,51]),t(A,[2,52]),{63:[1,68]},t(o,[2,5]),{5:M,29:69,30:N,33:O,35:D,37:B,39:L},{5:I,39:F,55:76,56:R,58:P},{32:81,71:y,72:m},{32:82,71:y,72:m},t(j,[2,19]),{31:[1,83]},{31:[1,84]},{31:[1,85]},{31:[1,86]},{5:M,29:87,30:N,33:O,35:D,37:B,39:L},t(j,[2,25]),t(j,[2,39]),{31:[1,88]},{31:[1,89]},{5:I,39:F,55:90,56:R,58:P},t(j,[2,43]),t(j,[2,44]),t(j,[2,45]),{32:91,71:y,72:m},{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]},t(j,[2,24]),{57:104,71:[1,105],72:[1,106]},{59:107,71:[1,108],72:[1,109]},t(j,[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:M,29:116,30:N,33:O,35:D,37:B,39:L},{5:M,29:117,30:N,33:O,35:D,37:B,39:L},{5:M,29:118,30:N,33:O,35:D,37:B,39:L},{5:M,29:119,30:N,33:O,35:D,37:B,39:L},{5:I,39:F,55:120,56:R,58:P},{5:I,39:F,55:121,56:R,58:P},t(j,[2,20]),t(j,[2,21]),t(j,[2,22]),t(j,[2,23]),t(j,[2,40]),t(j,[2,41])],defaultActions:{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]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=2,h=1,d=a.slice.call(arguments,1),f=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);f.setInput(t,p.yy),p.yy.lexer=f,p.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var y=f.yylloc;a.push(y);var m=f.options&&f.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||f.lex()||h)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,_,x,k,w,T,E,C,S,A={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=b()),k=o[x]&&o[x][v]),void 0===k||!k.length||!k[0]){var M="";for(T in S=[],o[x])this.terminals_[T]&&T>u&&S.push("'"+this.terminals_[T]+"'");M=f.showPosition?"Parse error on line "+(c+1)+":\n"+f.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:f.match,token:this.terminals_[v]||v,line:f.yylineno,loc:y,expected:S})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),i.push(f.yytext),a.push(f.yylloc),n.push(k[1]),v=null,_?(v=_,_=null):(l=f.yyleng,s=f.yytext,c=f.yylineno,y=f.yylloc);break;case 2:if(E=this.productions_[k[1]][1],A.$=i[i.length-E],A._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},m&&(A._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[s,l,c,p.yy,k[1],i,a].concat(d))))return w;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[k[1]][0]),i.push(A.$),a.push(A._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},Y={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):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(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),19;case 1:return this.begin("type_directive"),20;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),22;case 4:return 21;case 5:return"title";case 6:return this.begin("acc_title"),14;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),16;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:case 53:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 5;case 14:case 15:case 16:break;case 17:return 8;case 18:return 6;case 19:return 28;case 20:return 39;case 21:return 31;case 22:return 30;case 23:return 33;case 24:return 35;case 25:return 37;case 26:return 40;case 27:return 41;case 28:return 42;case 29:return 43;case 30:return 44;case 31:return 45;case 32:return 46;case 33:return 47;case 34:return 48;case 35:return 49;case 36:return 50;case 37:return 51;case 38:return 52;case 39:return 53;case 40:return 64;case 41:return 65;case 42:return 66;case 43:return 67;case 44:return 68;case 45:return 69;case 46:return 70;case 47:return 56;case 48:return 58;case 49:return 60;case 50:return 63;case 51:return 62;case 52:this.begin("string");break;case 54:return"qString";case 55:return e.yytext=e.yytext.trim(),71}},rules:[/^(?:%%\{)/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],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[53,54],inclusive:!1},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:!0}}};function U(){this.yy={}}return z.lexer=Y,U.prototype=z,z.Parser=U,new U}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(8800).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},6876:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,18],l=[1,19],u=[1,21],h=[1,22],d=[1,23],f=[1,29],p=[1,30],g=[1,31],y=[1,32],m=[1,33],b=[1,34],v=[1,35],_=[1,36],x=[1,37],k=[1,38],w=[1,39],T=[1,40],E=[1,43],C=[1,44],S=[1,45],A=[1,46],M=[1,47],N=[1,48],O=[1,51],D=[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],B=[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],L=[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],I=[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],F=[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],R=[67,68,69],P=[1,121],j=[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],z={trace:function(){},yy:{},symbols_:{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},terminals_:{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"},productions_:[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]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.apply(a[s]),a[s];case 5:case 9:this.$=[];break;case 6:a[s-1].push(a[s]),this.$=a[s-1];break;case 7:case 8:case 56:this.$=a[s];break;case 12:a[s-3].type="addParticipant",a[s-3].description=r.parseMessage(a[s-1]),this.$=a[s-3];break;case 13:a[s-1].type="addParticipant",this.$=a[s-1];break;case 14:a[s-3].type="addActor",a[s-3].description=r.parseMessage(a[s-1]),this.$=a[s-3];break;case 15:a[s-1].type="addActor",this.$=a[s-1];break;case 17:this.$={type:"sequenceIndex",sequenceIndex:Number(a[s-2]),sequenceIndexStep:Number(a[s-1]),sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(a[s-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:r.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:r.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[s-1]};break;case 22:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[s-1]};break;case 28:r.setDiagramTitle(a[s].substring(6)),this.$=a[s].substring(6);break;case 29:r.setDiagramTitle(a[s].substring(7)),this.$=a[s].substring(7);break;case 30:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 31:case 32:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 33:a[s-1].unshift({type:"loopStart",loopText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.LOOP_START}),a[s-1].push({type:"loopEnd",loopText:a[s-2],signalType:r.LINETYPE.LOOP_END}),this.$=a[s-1];break;case 34:a[s-1].unshift({type:"rectStart",color:r.parseMessage(a[s-2]),signalType:r.LINETYPE.RECT_START}),a[s-1].push({type:"rectEnd",color:r.parseMessage(a[s-2]),signalType:r.LINETYPE.RECT_END}),this.$=a[s-1];break;case 35:a[s-1].unshift({type:"optStart",optText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.OPT_START}),a[s-1].push({type:"optEnd",optText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.OPT_END}),this.$=a[s-1];break;case 36:a[s-1].unshift({type:"altStart",altText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.ALT_START}),a[s-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=a[s-1];break;case 37:a[s-1].unshift({type:"parStart",parText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.PAR_START}),a[s-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=a[s-1];break;case 38:a[s-1].unshift({type:"criticalStart",criticalText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.CRITICAL_START}),a[s-1].push({type:"criticalEnd",signalType:r.LINETYPE.CRITICAL_END}),this.$=a[s-1];break;case 39:a[s-1].unshift({type:"breakStart",breakText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.BREAK_START}),a[s-1].push({type:"breakEnd",optText:r.parseMessage(a[s-2]),signalType:r.LINETYPE.BREAK_END}),this.$=a[s-1];break;case 42:this.$=a[s-3].concat([{type:"option",optionText:r.parseMessage(a[s-1]),signalType:r.LINETYPE.CRITICAL_OPTION},a[s]]);break;case 44:this.$=a[s-3].concat([{type:"and",parText:r.parseMessage(a[s-1]),signalType:r.LINETYPE.PAR_AND},a[s]]);break;case 46:this.$=a[s-3].concat([{type:"else",altText:r.parseMessage(a[s-1]),signalType:r.LINETYPE.ALT_ELSE},a[s]]);break;case 47:this.$=[a[s-1],{type:"addNote",placement:a[s-2],actor:a[s-1].actor,text:a[s]}];break;case 48:a[s-2]=[].concat(a[s-1],a[s-1]).slice(0,2),a[s-2][0]=a[s-2][0].actor,a[s-2][1]=a[s-2][1].actor,this.$=[a[s-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:a[s-2].slice(0,2),text:a[s]}];break;case 49:this.$=[a[s-1],{type:"addLinks",actor:a[s-1].actor,text:a[s]}];break;case 50:this.$=[a[s-1],{type:"addALink",actor:a[s-1].actor,text:a[s]}];break;case 51:this.$=[a[s-1],{type:"addProperties",actor:a[s-1].actor,text:a[s]}];break;case 52:this.$=[a[s-1],{type:"addDetails",actor:a[s-1].actor,text:a[s]}];break;case 55:this.$=[a[s-2],a[s]];break;case 57:this.$=r.PLACEMENT.LEFTOF;break;case 58:this.$=r.PLACEMENT.RIGHTOF;break;case 59:this.$=[a[s-4],a[s-1],{type:"addMessage",from:a[s-4].actor,to:a[s-1].actor,signalType:a[s-3],msg:a[s]},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[s-1]}];break;case 60:this.$=[a[s-4],a[s-1],{type:"addMessage",from:a[s-4].actor,to:a[s-1].actor,signalType:a[s-3],msg:a[s]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[s-4]}];break;case 61:this.$=[a[s-3],a[s-1],{type:"addMessage",from:a[s-3].actor,to:a[s-1].actor,signalType:a[s-2],msg:a[s]}];break;case 62:this.$={type:"addParticipant",actor:a[s]};break;case 63:this.$=r.LINETYPE.SOLID_OPEN;break;case 64:this.$=r.LINETYPE.DOTTED_OPEN;break;case 65:this.$=r.LINETYPE.SOLID;break;case 66:this.$=r.LINETYPE.DOTTED;break;case 67:this.$=r.LINETYPE.SOLID_CROSS;break;case 68:this.$=r.LINETYPE.DOTTED_CROSS;break;case 69:this.$=r.LINETYPE.SOLID_POINT;break;case 70:this.$=r.LINETYPE.DOTTED_POINT;break;case 71:this.$=r.parseMessage(a[s].trim().substring(1));break;case 72:r.parseDirective("%%{","open_directive");break;case 73:r.parseDirective(a[s],"type_directive");break;case 74:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 75:r.parseDirective("}%%","close_directive","sequence")}},table:[{3:1,4:e,5:n,6:4,7:r,11:6,79:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,11:6,79:i},{3:9,4:e,5:n,6:4,7:r,11:6,79:i},{3:10,4:e,5:n,6:4,7:r,11:6,79:i},t([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],a,{8:11}),{12:12,80:[1,13]},{80:[2,72]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,41:v,42:_,43:x,45:k,47:w,49:T,53:E,58:C,59:S,60:A,61:M,69:N,79:i},{13:49,14:[1,50],82:O},t([14,82],[2,73]),t(D,[2,6]),{6:41,10:52,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,41:v,42:_,43:x,45:k,47:w,49:T,53:E,58:C,59:S,60:A,61:M,69:N,79:i},t(D,[2,8]),t(D,[2,9]),{17:53,69:N},{17:54,69:N},{5:[1,55]},{5:[1,58],23:[1,56],24:[1,57]},{17:59,69:N},{17:60,69:N},{5:[1,61]},{5:[1,62]},{5:[1,63]},{5:[1,64]},{5:[1,65]},t(D,[2,28]),t(D,[2,29]),{35:[1,66]},{37:[1,67]},t(D,[2,32]),{19:[1,68]},{19:[1,69]},{19:[1,70]},{19:[1,71]},{19:[1,72]},{19:[1,73]},{19:[1,74]},t(D,[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:N},{17:89,69:N},{17:90,69:N},{17:91,69:N},t([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]},t(D,[2,7]),{5:[1,96],18:[1,95]},{5:[1,98],18:[1,97]},t(D,[2,16]),{5:[1,100],23:[1,99]},{5:[1,101]},t(D,[2,20]),{5:[1,102]},{5:[1,103]},t(D,[2,23]),t(D,[2,24]),t(D,[2,25]),t(D,[2,26]),t(D,[2,27]),t(D,[2,30]),t(D,[2,31]),t(B,a,{8:104}),t(B,a,{8:105}),t(B,a,{8:106}),t(L,a,{44:107,8:108}),t(I,a,{46:109,8:110}),t(F,a,{48:111,8:112}),t(B,a,{8:113}),{17:116,67:[1,114],68:[1,115],69:N},t(R,[2,63]),t(R,[2,64]),t(R,[2,65]),t(R,[2,66]),t(R,[2,67]),t(R,[2,68]),t(R,[2,69]),t(R,[2,70]),{17:117,69:N},{17:119,57:118,69:N},{69:[2,57]},{69:[2,58]},{55:120,78:P},{55:122,78:P},{55:123,78:P},{55:124,78:P},t(j,[2,10]),{13:125,82:O},{82:[2,74]},{19:[1,126]},t(D,[2,13]),{19:[1,127]},t(D,[2,15]),{5:[1,128]},t(D,[2,18]),t(D,[2,19]),t(D,[2,21]),t(D,[2,22]),{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[1,129],41:v,42:_,43:x,45:k,47:w,49:T,53:E,58:C,59:S,60:A,61:M,69:N,79:i},{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[1,130],41:v,42:_,43:x,45:k,47:w,49:T,53:E,58:C,59:S,60:A,61:M,69:N,79:i},{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[1,131],41:v,42:_,43:x,45:k,47:w,49:T,53:E,58:C,59:S,60:A,61:M,69:N,79:i},{40:[1,132]},{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[2,45],41:v,42:_,43:x,45:k,47:w,49:T,52:[1,133],53:E,58:C,59:S,60:A,61:M,69:N,79:i},{40:[1,134]},{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[2,43],41:v,42:_,43:x,45:k,47:w,49:T,51:[1,135],53:E,58:C,59:S,60:A,61:M,69:N,79:i},{40:[1,136]},{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[2,41],41:v,42:_,43:x,45:k,47:w,49:T,50:[1,137],53:E,58:C,59:S,60:A,61:M,69:N,79:i},{4:o,5:s,6:41,9:14,10:16,11:6,16:c,17:42,20:l,21:20,22:u,25:h,26:d,27:24,28:25,29:26,30:27,31:28,32:f,33:p,34:g,36:y,38:m,39:b,40:[1,138],41:v,42:_,43:x,45:k,47:w,49:T,53:E,58:C,59:S,60:A,61:M,69:N,79:i},{17:139,69:N},{17:140,69:N},{55:141,78:P},{55:142,78:P},{55:143,78:P},{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]},t(D,[2,17]),t(D,[2,33]),t(D,[2,34]),t(D,[2,35]),t(D,[2,36]),{19:[1,148]},t(D,[2,37]),{19:[1,149]},t(D,[2,38]),{19:[1,150]},t(D,[2,39]),{55:151,78:P},{55:152,78:P},{5:[2,61]},{5:[2,47]},{5:[2,48]},{17:153,69:N},t(j,[2,11]),t(D,[2,12]),t(D,[2,14]),t(L,a,{8:108,44:154}),t(I,a,{8:110,46:155}),t(F,a,{8:112,48:156}),{5:[2,59]},{5:[2,60]},{78:[2,55]},{40:[2,46]},{40:[2,44]},{40:[2,42]}],defaultActions:{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]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=2,h=1,d=a.slice.call(arguments,1),f=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);f.setInput(t,p.yy),p.yy.lexer=f,p.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var y=f.yylloc;a.push(y);var m=f.options&&f.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||f.lex()||h)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,_,x,k,w,T,E,C,S,A={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=b()),k=o[x]&&o[x][v]),void 0===k||!k.length||!k[0]){var M="";for(T in S=[],o[x])this.terminals_[T]&&T>u&&S.push("'"+this.terminals_[T]+"'");M=f.showPosition?"Parse error on line "+(c+1)+":\n"+f.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:f.match,token:this.terminals_[v]||v,line:f.yylineno,loc:y,expected:S})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),i.push(f.yytext),a.push(f.yylloc),n.push(k[1]),v=null,_?(v=_,_=null):(l=f.yyleng,s=f.yytext,c=f.yylineno,y=f.yylloc);break;case 2:if(E=this.productions_[k[1]][1],A.$=i[i.length-E],A._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},m&&(A._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[s,l,c,p.yy,k[1],i,a].concat(d))))return w;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[k[1]][0]),i.push(A.$),a.push(A._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},Y={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):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(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),79;case 1:return this.begin("type_directive"),80;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),82;case 4:return 81;case 5:case 52:case 65:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return 23;case 12:return this.begin("ID"),16;case 13:return this.begin("ID"),20;case 14:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),69;case 15:return this.popState(),this.popState(),this.begin("LINE"),18;case 16:return this.popState(),this.popState(),5;case 17:return this.begin("LINE"),39;case 18:return this.begin("LINE"),41;case 19:return this.begin("LINE"),42;case 20:return this.begin("LINE"),43;case 21:return this.begin("LINE"),52;case 22:return this.begin("LINE"),45;case 23:return this.begin("LINE"),51;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),50;case 26:return this.begin("LINE"),49;case 27:return this.popState(),19;case 28:return 40;case 29:return 64;case 30:return 65;case 31:return 58;case 32:return 59;case 33:return 60;case 34:return 61;case 35:return 56;case 36:return 53;case 37:return this.begin("ID"),25;case 38:return this.begin("ID"),26;case 39:return 32;case 40:return 33;case 41:return this.begin("acc_title"),34;case 42:return this.popState(),"acc_title_value";case 43:return this.begin("acc_descr"),36;case 44:return this.popState(),"acc_descr_value";case 45:this.begin("acc_descr_multiline");break;case 46:this.popState();break;case 47:return"acc_descr_multiline_value";case 48:return 7;case 49:return 22;case 50:return 24;case 51:return 63;case 53:return e.yytext=e.yytext.trim(),69;case 54:return 72;case 55:return 73;case 56:return 70;case 57:return 71;case 58:return 74;case 59:return 75;case 60:return 76;case 61:return 77;case 62:return 78;case 63:return 67;case 64:return 68;case 66:return"INVALID"}},rules:[/^(?:%%\{)/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],conditions:{acc_descr_multiline:{rules:[46,47],inclusive:!1},acc_descr:{rules:[44],inclusive:!1},acc_title:{rules:[42],inclusive:!1},open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,14],inclusive:!1},ALIAS:{rules:[7,8,15,16],inclusive:!1},LINE:{rules:[7,8,27],inclusive:!1},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:!0}}};function U(){this.yy={}}return z.lexer=Y,U.prototype=z,z.Parser=U,new U}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(1993).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},3584:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,19],l=[1,20],u=[1,21],h=[1,22],d=[1,33],f=[1,23],p=[1,24],g=[1,25],y=[1,26],m=[1,27],b=[1,30],v=[1,31],_=[1,32],x=[1,35],k=[1,36],w=[1,37],T=[1,38],E=[1,34],C=[1,41],S=[1,4,5,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],A=[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],M=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],N=[4,5,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],O={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,idStatement:11,DESCR:12,"--\x3e":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},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",12:"DESCR",13:"--\x3e",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"},productions_:[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]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.setRootDoc(a[s]),a[s];case 5:this.$=[];break;case 6:"nl"!=a[s]&&(a[s-1].push(a[s]),this.$=a[s-1]);break;case 7:case 8:case 39:case 40:this.$=a[s];break;case 9:this.$="nl";break;case 10:this.$={stmt:"state",id:a[s],type:"default",description:""};break;case 11:this.$={stmt:"state",id:a[s-1],type:"default",description:r.trimColon(a[s])};break;case 12:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-2],type:"default",description:""},state2:{stmt:"state",id:a[s],type:"default",description:""}};break;case 13:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-3],type:"default",description:""},state2:{stmt:"state",id:a[s-1],type:"default",description:""},description:a[s].substr(1).trim()};break;case 17:this.$={stmt:"state",id:a[s-3],type:"default",description:"",doc:a[s-1]};break;case 18:var c=a[s],l=a[s-2].trim();if(a[s].match(":")){var u=a[s].split(":");c=u[0],l=[l,u[1]]}this.$={stmt:"state",id:c,type:"default",description:l};break;case 19:this.$={stmt:"state",id:a[s-3],type:"default",description:a[s-5],doc:a[s-1]};break;case 20:this.$={stmt:"state",id:a[s],type:"fork"};break;case 21:this.$={stmt:"state",id:a[s],type:"join"};break;case 22:this.$={stmt:"state",id:a[s],type:"choice"};break;case 23:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 24:this.$={stmt:"state",id:a[s-1].trim(),note:{position:a[s-2].trim(),text:a[s].trim()}};break;case 28:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 29:case 30:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 33:r.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 34:r.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 35:r.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 36:r.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 43:r.parseDirective("%%{","open_directive");break;case 44:r.parseDirective(a[s],"type_directive");break;case 45:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 46:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:n,6:4,7:r,36:6,50:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,36:6,50:i},{3:9,4:e,5:n,6:4,7:r,36:6,50:i},{3:10,4:e,5:n,6:4,7:r,36:6,50:i},t([1,4,5,14,15,17,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],a,{8:11}),{37:12,51:[1,13]},{51:[2,43]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:l,17:u,20:h,22:d,23:f,24:p,25:g,26:y,27:m,30:29,31:b,33:v,35:_,36:6,41:x,42:k,43:w,44:T,47:E,50:i},{38:39,39:[1,40],53:C},t([39,53],[2,44]),t(S,[2,6]),{6:28,10:42,11:18,14:c,15:l,17:u,20:h,22:d,23:f,24:p,25:g,26:y,27:m,30:29,31:b,33:v,35:_,36:6,41:x,42:k,43:w,44:T,47:E,50:i},t(S,[2,8]),t(S,[2,9]),t(S,[2,10],{12:[1,43],13:[1,44]}),t(S,[2,14]),{16:[1,45]},t(S,[2,16],{18:[1,46]}),{21:[1,47]},t(S,[2,20]),t(S,[2,21]),t(S,[2,22]),t(S,[2,23]),{28:48,29:[1,49],48:[1,50],49:[1,51]},t(S,[2,26]),t(S,[2,27]),{32:[1,52]},{34:[1,53]},t(S,[2,30]),t(A,[2,39]),t(A,[2,40]),t(S,[2,33]),t(S,[2,34]),t(S,[2,35]),t(S,[2,36]),t(M,[2,31]),{40:54,52:[1,55]},t(M,[2,46]),t(S,[2,7]),t(S,[2,11]),{11:56,22:d,47:E},t(S,[2,15]),t(N,a,{8:57}),{22:[1,58]},{22:[1,59]},{21:[1,60]},{22:[2,41]},{22:[2,42]},t(S,[2,28]),t(S,[2,29]),{38:61,53:C},{53:[2,45]},t(S,[2,12],{12:[1,62]}),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:l,17:u,19:[1,63],20:h,22:d,23:f,24:p,25:g,26:y,27:m,30:29,31:b,33:v,35:_,36:6,41:x,42:k,43:w,44:T,47:E,50:i},t(S,[2,18],{18:[1,64]}),{29:[1,65]},{22:[1,66]},t(M,[2,32]),t(S,[2,13]),t(S,[2,17]),t(N,a,{8:67}),t(S,[2,24]),t(S,[2,25]),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:l,17:u,19:[1,68],20:h,22:d,23:f,24:p,25:g,26:y,27:m,30:29,31:b,33:v,35:_,36:6,41:x,42:k,43:w,44:T,47:E,50:i},t(S,[2,19])],defaultActions:{7:[2,43],8:[2,1],9:[2,2],10:[2,3],50:[2,41],51:[2,42],55:[2,45]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=2,h=1,d=a.slice.call(arguments,1),f=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);f.setInput(t,p.yy),p.yy.lexer=f,p.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var y=f.yylloc;a.push(y);var m=f.options&&f.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||f.lex()||h)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,_,x,k,w,T,E,C,S,A={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=b()),k=o[x]&&o[x][v]),void 0===k||!k.length||!k[0]){var M="";for(T in S=[],o[x])this.terminals_[T]&&T>u&&S.push("'"+this.terminals_[T]+"'");M=f.showPosition?"Parse error on line "+(c+1)+":\n"+f.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:f.match,token:this.terminals_[v]||v,line:f.yylineno,loc:y,expected:S})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),i.push(f.yytext),a.push(f.yylloc),n.push(k[1]),v=null,_?(v=_,_=null):(l=f.yyleng,s=f.yytext,c=f.yylineno,y=f.yylloc);break;case 2:if(E=this.productions_[k[1]][1],A.$=i[i.length-E],A._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},m&&(A._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[s,l,c,p.yy,k[1],i,a].concat(d))))return w;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[k[1]][0]),i.push(A.$),a.push(A._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},D={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):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(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:case 33:return 41;case 1:case 34:return 42;case 2:case 35:return 43;case 3:case 36:return 44;case 4:return this.begin("open_directive"),50;case 5:return this.begin("type_directive"),51;case 6:return this.popState(),this.begin("arg_directive"),39;case 7:return this.popState(),this.popState(),53;case 8:return 52;case 9:case 10:case 12:case 13:case 14:case 15:case 46:case 52:break;case 11:case 66:return 5;case 16:return this.pushState("SCALE"),15;case 17:return 16;case 18:case 24:case 40:case 43:this.popState();break;case 19:return this.begin("acc_title"),31;case 20:return this.popState(),"acc_title_value";case 21:return this.begin("acc_descr"),33;case 22:return this.popState(),"acc_descr_value";case 23:this.begin("acc_descr_multiline");break;case 25:return"acc_descr_multiline_value";case 26:this.pushState("STATE");break;case 27:case 30:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 28:case 31:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 29:case 32:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),25;case 37:this.begin("STATE_STRING");break;case 38:return this.popState(),this.pushState("STATE_ID"),"AS";case 39:case 54:return this.popState(),"ID";case 41:return"STATE_DESCR";case 42:return 17;case 44:return this.popState(),this.pushState("struct"),18;case 45:return this.popState(),19;case 47:return this.begin("NOTE"),27;case 48:return this.popState(),this.pushState("NOTE_ID"),48;case 49:return this.popState(),this.pushState("NOTE_ID"),49;case 50:this.popState(),this.pushState("FLOATING_NOTE");break;case 51:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 53:return"NOTE_TEXT";case 55:return this.popState(),this.pushState("NOTE_TEXT"),22;case 56:return this.popState(),e.yytext=e.yytext.substr(2).trim(),29;case 57:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),29;case 58:case 59:return 7;case 60:return 14;case 61:return 47;case 62:return 22;case 63:return e.yytext=e.yytext.trim(),12;case 64:return 13;case 65:return 26;case 67:return"INVALID"}},rules:[/^(?:.*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,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/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],conditions:{LINE:{rules:[13,14],inclusive:!1},close_directive:{rules:[13,14],inclusive:!1},arg_directive:{rules:[7,8,13,14],inclusive:!1},type_directive:{rules:[6,7,13,14],inclusive:!1},open_directive:{rules:[5,13,14],inclusive:!1},struct:{rules:[13,14,26,33,34,35,36,45,46,47,61,62,63,64,65],inclusive:!1},FLOATING_NOTE_ID:{rules:[54],inclusive:!1},FLOATING_NOTE:{rules:[51,52,53],inclusive:!1},NOTE_TEXT:{rules:[56,57],inclusive:!1},NOTE_ID:{rules:[55],inclusive:!1},NOTE:{rules:[48,49,50],inclusive:!1},acc_descr_multiline:{rules:[24,25],inclusive:!1},acc_descr:{rules:[22],inclusive:!1},acc_title:{rules:[20],inclusive:!1},SCALE:{rules:[17,18],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[39],inclusive:!1},STATE_STRING:{rules:[40,41],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[13,14,27,28,29,30,31,32,37,38,42,43,44],inclusive:!1},ID:{rules:[13,14],inclusive:!1},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:!0}}};function B(){this.yy={}}return O.lexer=D,B.prototype=O,O.Parser=B,new B}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(3069).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},9763:(t,e,n)=>{t=n.nmd(t);var r=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,17,18,20,22,23,24,26],i=[1,15],a=[1,16],o=[1,17],s=[1,18],c=[1,19],l=[1,20],u=[1,24],h=[4,6,9,11,17,18,20,22,23,24,26],d={trace:function(){},yy:{},symbols_:{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},terminals_:{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"},productions_:[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]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 3:case 7:case 8:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 11:r.setDiagramTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 12:this.$=a[s].trim(),r.setAccTitle(this.$);break;case 13:case 14:this.$=a[s].trim(),r.setAccDescription(this.$);break;case 15:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 16:r.addTask(a[s-1],a[s]),this.$="task";break;case 18:r.parseDirective("%%{","open_directive");break;case 19:r.parseDirective(a[s],"type_directive");break;case 20:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 21:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,26:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,26:n},{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:i,18:a,20:o,22:s,23:c,24:l,26:n},{1:[2,2]},{14:22,15:[1,23],29:u},t([15,29],[2,19]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:21,10:25,12:4,17:i,18:a,20:o,22:s,23:c,24:l,26:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),{19:[1,26]},{21:[1,27]},t(r,[2,14]),t(r,[2,15]),{25:[1,28]},t(r,[2,17]),{11:[1,29]},{16:30,28:[1,31]},{11:[2,21]},t(r,[2,5]),t(r,[2,12]),t(r,[2,13]),t(r,[2,16]),t(h,[2,9]),{14:32,29:u},{29:[2,20]},{11:[1,33]},t(h,[2,10])],defaultActions:{5:[2,18],7:[2,2],24:[2,21],31:[2,20]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,l=0,u=2,h=1,d=a.slice.call(arguments,1),f=Object.create(this.lexer),p={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(p.yy[g]=this.yy[g]);f.setInput(t,p.yy),p.yy.lexer=f,p.yy.parser=this,void 0===f.yylloc&&(f.yylloc={});var y=f.yylloc;a.push(y);var m=f.options&&f.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||f.lex()||h)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,_,x,k,w,T,E,C,S,A={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=b()),k=o[x]&&o[x][v]),void 0===k||!k.length||!k[0]){var M="";for(T in S=[],o[x])this.terminals_[T]&&T>u&&S.push("'"+this.terminals_[T]+"'");M=f.showPosition?"Parse error on line "+(c+1)+":\n"+f.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==h?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(M,{text:f.match,token:this.terminals_[v]||v,line:f.yylineno,loc:y,expected:S})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),i.push(f.yytext),a.push(f.yylloc),n.push(k[1]),v=null,_?(v=_,_=null):(l=f.yyleng,s=f.yytext,c=f.yylineno,y=f.yylloc);break;case 2:if(E=this.productions_[k[1]][1],A.$=i[i.length-E],A._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},m&&(A._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(A,[s,l,c,p.yy,k[1],i,a].concat(d))))return w;E&&(n=n.slice(0,-1*E*2),i=i.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[k[1]][0]),i.push(A.$),a.push(A._$),C=o[n[n.length-2]][n[n.length-1]],n.push(C);break;case 3:return!0}}return!0}},f={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):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(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),26;case 1:return this.begin("type_directive"),27;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),29;case 4:return 28;case 5:case 6:case 8:case 9:break;case 7:return 11;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 24;case 21:return 25;case 22:return 15;case 23:return 6;case 24:return"INVALID"}},rules:[/^(?:%%\{)/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],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23,24],inclusive:!0}}};function p(){this.yy={}}return d.lexer=f,p.prototype=d,d.Parser=p,new p}();e.parser=r,e.Parser=r.Parser,e.parse=function(){return r.parse.apply(r,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var r=n(9143).readFileSync(n(6470).normalize(t[1]),"utf8");return e.parser.parse(r)},n.c[n.s]===t&&e.main(process.argv.slice(1))},7967:(t,e)=>{e.N=void 0;var n=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,i=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^([^:]+):/gm,o=[".","/"];e.N=function(t){var e,s=(e=t||"",e.replace(r,(function(t,e){return String.fromCharCode(e)}))).replace(i,"").trim();if(!s)return"about:blank";if(function(t){return o.indexOf(t[0])>-1}(s))return s;var c=s.match(a);if(!c)return s;var l=c[0];return n.test(l)?"about:blank":s}},3841:t=>{t.exports=function(t,e){return t.intersect(e)}},6187:(t,e,n)=>{n.d(e,{Z:()=>Ol});var r=n(1941),i=n.n(r),a={debug:1,info:2,warn:3,error:4,fatal:5},o={debug:function(){},info:function(){},warn:function(){},error:function(){},fatal:function(){}},s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"fatal";isNaN(t)&&(t=t.toLowerCase(),void 0!==a[t]&&(t=a[t])),o.trace=function(){},o.debug=function(){},o.info=function(){},o.warn=function(){},o.error=function(){},o.fatal=function(){},t<=a.fatal&&(o.fatal=console.error?console.error.bind(console,c("FATAL"),"color: orange"):console.log.bind(console,"",c("FATAL"))),t<=a.error&&(o.error=console.error?console.error.bind(console,c("ERROR"),"color: orange"):console.log.bind(console,"",c("ERROR"))),t<=a.warn&&(o.warn=console.warn?console.warn.bind(console,c("WARN"),"color: orange"):console.log.bind(console,"",c("WARN"))),t<=a.info&&(o.info=console.info?console.info.bind(console,c("INFO"),"color: lightblue"):console.log.bind(console,"",c("INFO"))),t<=a.debug&&(o.debug=console.debug?console.debug.bind(console,c("DEBUG"),"color: lightgreen"):console.log.bind(console,"",c("DEBUG")))},c=function(t){var e=i()().format("ss.SSS");return"%c".concat(e," : ").concat(t," : ")},l=n(7543),u="comm",h="rule",d="decl",f=Math.abs,p=String.fromCharCode;function g(t){return t.trim()}function y(t,e,n){return t.replace(e,n)}function m(t,e){return t.indexOf(e)}function b(t,e){return 0|t.charCodeAt(e)}function v(t,e,n){return t.slice(e,n)}function _(t){return t.length}function x(t){return t.length}function k(t,e){return e.push(t),t}function w(t,e){for(var n="",r=x(t),i=0;i0?b(N,--A):0,C--,10===M&&(C=1,E--),M}function B(){return M=A2||R(M)>3?"":" "}function z(t,e){for(;--e&&B()&&!(M<48||M>102||M>57&&M<65||M>70&&M<97););return F(t,I()+(e<6&&32==L()&&32==B()))}function Y(t){for(;B();)switch(M){case t:return A;case 34:case 39:34!==t&&39!==t&&Y(M);break;case 40:41===t&&Y(t);break;case 92:B()}return A}function U(t,e){for(;B()&&t+M!==57&&(t+M!==84||47!==L()););return"/*"+F(e,A-1)+"*"+p(47===t?t:B())}function $(t){for(;!R(L());)B();return F(t,A)}function W(t){return function(t){return N="",t}(q("",null,null,null,[""],t=function(t){return E=C=1,S=_(N=t),A=0,[]}(t),0,[0],t))}function q(t,e,n,r,i,a,o,s,c){for(var l=0,u=0,h=o,d=0,f=0,g=0,b=1,v=1,x=1,w=0,T="",E=i,C=a,S=r,A=T;v;)switch(g=w,w=B()){case 40:if(108!=g&&58==A.charCodeAt(h-1)){-1!=m(A+=y(P(w),"&","&\f"),"&\f")&&(x=-1);break}case 34:case 39:case 91:A+=P(w);break;case 9:case 10:case 13:case 32:A+=j(g);break;case 92:A+=z(I()-1,7);continue;case 47:switch(L()){case 42:case 47:k(V(U(B(),I()),e,n),c);break;default:A+="/"}break;case 123*b:s[l++]=_(A)*x;case 125*b:case 59:case 0:switch(w){case 0:case 125:v=0;case 59+u:f>0&&_(A)-h&&k(f>32?G(A+";",r,n,h-1):G(y(A," ","")+";",r,n,h-2),c);break;case 59:A+=";";default:if(k(S=H(A,e,n,l,u,i,s,T,E=[],C=[],h),a),123===w)if(0===u)q(A,e,S,S,E,a,h,s,C);else switch(d){case 100:case 109:case 115:q(t,S,S,r&&k(H(t,S,S,0,0,i,s,T,i,E=[],h),C),i,C,h,s,r?E:C);break;default:q(A,S,S,S,[""],C,0,s,C)}}l=u=f=0,b=x=1,T=A="",h=o;break;case 58:h=1+_(A),f=g;default:if(b<1)if(123==w)--b;else if(125==w&&0==b++&&125==D())continue;switch(A+=p(w),w*b){case 38:x=u>0?1:(A+="\f",-1);break;case 44:s[l++]=(_(A)-1)*x,x=1;break;case 64:45===L()&&(A+=P(B())),d=L(),u=h=_(T=A+=$(I())),w++;break;case 45:45===g&&2==_(A)&&(b=0)}}return a}function H(t,e,n,r,i,a,o,s,c,l,u){for(var d=i-1,p=0===i?a:[""],m=x(p),b=0,_=0,k=0;b0?p[w]+" "+T:y(T,/&\f/g,p[w])))&&(c[k++]=E);return O(t,e,n,0===i?h:s,c,l,u)}function V(t,e,n){return O(t,e,n,u,p(M),v(t,2,-2),0)}function G(t,e,n,r){return O(t,e,n,d,v(t,0,r),v(t,r+1,-1),r)}const X="9.1.7";function Z(t){return Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Z(t)}const Q=function t(e,n,r){var i=Object.assign({depth:2,clobber:!1},r),a=i.depth,o=i.clobber;return Array.isArray(n)&&!Array.isArray(e)?(n.forEach((function(n){return t(e,n,r)})),e):Array.isArray(n)&&Array.isArray(e)?(n.forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),e):void 0===e||a<=0?null!=e&&"object"===Z(e)&&"object"===Z(n)?Object.assign(e,n):n:(void 0!==n&&"object"===Z(e)&&"object"===Z(n)&&Object.keys(n).forEach((function(r){"object"!==Z(n[r])||void 0!==e[r]&&"object"!==Z(e[r])?(o||"object"!==Z(e[r])&&"object"!==Z(n[r]))&&(e[r]=n[r]):(void 0===e[r]&&(e[r]=Array.isArray(n[r])?[]:{}),e[r]=t(e[r],n[r],{depth:a-1,clobber:o}))})),e)},K={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,n)=>(n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t),hsl2rgb:({h:t,s:e,l:n},r)=>{if(!e)return 2.55*n;t/=360,e/=100;const i=(n/=100)<.5?n*(1+e):n+e-n*e,a=2*n-i;switch(r){case"r":return 255*K.hue2rgb(a,i,t+1/3);case"g":return 255*K.hue2rgb(a,i,t);case"b":return 255*K.hue2rgb(a,i,t-1/3)}},rgb2hsl:({r:t,g:e,b:n},r)=>{t/=255,e/=255,n/=255;const i=Math.max(t,e,n),a=Math.min(t,e,n),o=(i+a)/2;if("l"===r)return 100*o;if(i===a)return 0;const s=i-a;if("s"===r)return 100*(o>.5?s/(2-i-a):s/(i+a));switch(i){case t:return 60*((e-n)/s+(ee>n?Math.min(e,Math.max(n,t)):Math.min(n,Math.max(e,t)),round:t=>Math.round(1e10*t)/1e10},unit:{dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}}},tt={};for(let t=0;t<=255;t++)tt[t]=J.unit.dec2hex(t);const et=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new class{constructor(){this.type=0}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=0}is(t){return this.type===t}}}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=0,this}_ensureHSL(){const t=this.data,{h:e,s:n,l:r}=t;void 0===e&&(t.h=J.channel.rgb2hsl(t,"h")),void 0===n&&(t.s=J.channel.rgb2hsl(t,"s")),void 0===r&&(t.l=J.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:n,b:r}=t;void 0===e&&(t.r=J.channel.hsl2rgb(t,"r")),void 0===n&&(t.g=J.channel.hsl2rgb(t,"g")),void 0===r&&(t.b=J.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(2)||void 0===e?(this._ensureHSL(),J.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(2)||void 0===e?(this._ensureHSL(),J.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(2)||void 0===e?(this._ensureHSL(),J.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(1)||void 0===e?(this._ensureRGB(),J.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(1)||void 0===e?(this._ensureRGB(),J.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(1)||void 0===e?(this._ensureRGB(),J.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(1),this.changed=!0,this.data.r=t}set g(t){this.type.set(1),this.changed=!0,this.data.g=t}set b(t){this.type.set(1),this.changed=!0,this.data.b=t}set h(t){this.type.set(2),this.changed=!0,this.data.h=t}set s(t){this.type.set(2),this.changed=!0,this.data.s=t}set l(t){this.type.set(2),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}({r:0,g:0,b:0,a:0},"transparent"),nt={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(nt.re);if(!e)return;const n=e[1],r=parseInt(n,16),i=n.length,a=i%4==0,o=i>4,s=o?1:17,c=o?8:4,l=a?0:-1,u=o?255:15;return et.set({r:(r>>c*(l+3)&u)*s,g:(r>>c*(l+2)&u)*s,b:(r>>c*(l+1)&u)*s,a:a?(r&u)*s/255:1},t)},stringify:t=>{const{r:e,g:n,b:r,a:i}=t;return i<1?`#${tt[Math.round(e)]}${tt[Math.round(n)]}${tt[Math.round(r)]}${tt[Math.round(255*i)]}`:`#${tt[Math.round(e)]}${tt[Math.round(n)]}${tt[Math.round(r)]}`}},rt=nt,it={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(it.hueRe);if(e){const[,t,n]=e;switch(n){case"grad":return J.channel.clamp.h(.9*parseFloat(t));case"rad":return J.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return J.channel.clamp.h(360*parseFloat(t))}}return J.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const n=t.match(it.re);if(!n)return;const[,r,i,a,o,s]=n;return et.set({h:it._hue2deg(r),s:J.channel.clamp.s(parseFloat(i)),l:J.channel.clamp.l(parseFloat(a)),a:o?J.channel.clamp.a(s?parseFloat(o)/100:parseFloat(o)):1},t)},stringify:t=>{const{h:e,s:n,l:r,a:i}=t;return i<1?`hsla(${J.lang.round(e)}, ${J.lang.round(n)}%, ${J.lang.round(r)}%, ${i})`:`hsl(${J.lang.round(e)}, ${J.lang.round(n)}%, ${J.lang.round(r)}%)`}},at=it,ot={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=ot.colors[t];if(e)return rt.parse(e)},stringify:t=>{const e=rt.stringify(t);for(const t in ot.colors)if(ot.colors[t]===e)return t}},st=ot,ct={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(114!==e&&82!==e)return;const n=t.match(ct.re);if(!n)return;const[,r,i,a,o,s,c,l,u]=n;return et.set({r:J.channel.clamp.r(i?2.55*parseFloat(r):parseFloat(r)),g:J.channel.clamp.g(o?2.55*parseFloat(a):parseFloat(a)),b:J.channel.clamp.b(c?2.55*parseFloat(s):parseFloat(s)),a:l?J.channel.clamp.a(u?parseFloat(l)/100:parseFloat(l)):1},t)},stringify:t=>{const{r:e,g:n,b:r,a:i}=t;return i<1?`rgba(${J.lang.round(e)}, ${J.lang.round(n)}, ${J.lang.round(r)}, ${J.lang.round(i)})`:`rgb(${J.lang.round(e)}, ${J.lang.round(n)}, ${J.lang.round(r)})`}},lt=ct,ut=t=>{if("string"!=typeof t)return t;const e=rt.parse(t)||lt.parse(t)||at.parse(t)||st.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},ht=t=>!t.changed&&t.color?t.color:t.type.is(2)||void 0===t.data.r?at.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?lt.stringify(t):rt.stringify(t),dt=(t,e)=>{const n=ut(t);for(const t in e)n[t]=J.channel.clamp[t](e[t]);return ht(n)},ft=(t,e)=>{const n=ut(t),r={};for(const t in e)e[t]&&(r[t]=n[t]+e[t]);return dt(t,r)},pt=(t,e,n=0,r=1)=>{if("number"!=typeof t)return dt(t,{a:e});const i=et.set({r:J.channel.clamp.r(t),g:J.channel.clamp.g(e),b:J.channel.clamp.b(n),a:J.channel.clamp.a(r)});return ht(i)},gt=(t,e=100)=>{const n=ut(t);return n.r=255-n.r,n.g=255-n.g,n.b=255-n.b,((t,e,n=50)=>{const{r:r,g:i,b:a,a:o}=ut(t),{r:s,g:c,b:l,a:u}=ut(e),h=n/100,d=2*h-1,f=o-u,p=((d*f==-1?d:(d+f)/(1+d*f))+1)/2,g=1-p;return pt(r*p+s*g,i*p+c*g,a*p+l*g,o*h+u*(1-h))})(n,t,e)},yt=(t,e,n)=>{const r=ut(t),i=r[e],a=J.channel.clamp[e](i+n);return i!==a&&(r[e]=a),ht(r)},mt=(t,e)=>yt(t,"l",-e),bt=(t,e)=>yt(t,"l",e);var vt=function(t,e){return ft(t,e?{s:-40,l:10}:{s:-40,l:-10})};function _t(t){return _t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_t(t)}var xt=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.background="#f4f4f4",this.darkMode=!1,this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}var e,n;return e=t,n=[{key:"updateColors",value:function(){this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||ft(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||ft(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||vt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||vt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||gt(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||gt(this.tertiaryColor),this.lineColor=this.lineColor||gt(this.background),this.textColor=this.textColor||this.primaryTextColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?mt(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||mt(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||gt(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||bt(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||ft(this.primaryColor,{h:64}),this.fillType3=this.fillType3||ft(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||ft(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||ft(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||ft(this.primaryColor,{h:128}),this.fillType7=this.fillType7||ft(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||ft(this.primaryColor,{l:-10}),this.pie5=this.pie5||ft(this.secondaryColor,{l:-10}),this.pie6=this.pie6||ft(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||ft(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||ft(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||ft(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||ft(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||ft(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||ft(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?mt(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||ft(this.primaryColor,{h:-30}),this.git4=this.git4||ft(this.primaryColor,{h:-60}),this.git5=this.git5||ft(this.primaryColor,{h:-90}),this.git6=this.git6||ft(this.primaryColor,{h:60}),this.git7=this.git7||ft(this.primaryColor,{h:120}),this.darkMode?(this.git0=bt(this.git0,25),this.git1=bt(this.git1,25),this.git2=bt(this.git2,25),this.git3=bt(this.git3,25),this.git4=bt(this.git4,25),this.git5=bt(this.git5,25),this.git6=bt(this.git6,25),this.git7=bt(this.git7,25)):(this.git0=mt(this.git0,25),this.git1=mt(this.git1,25),this.git2=mt(this.git2,25),this.git3=mt(this.git3,25),this.git4=mt(this.git4,25),this.git5=mt(this.git5,25),this.git6=mt(this.git6,25),this.git7=mt(this.git7,25)),this.gitInv0=this.gitInv0||gt(this.git0),this.gitInv1=this.gitInv1||gt(this.git1),this.gitInv2=this.gitInv2||gt(this.git2),this.gitInv3=this.gitInv3||gt(this.git3),this.gitInv4=this.gitInv4||gt(this.git4),this.gitInv5=this.gitInv5||gt(this.git5),this.gitInv6=this.gitInv6||gt(this.git6),this.gitInv7=this.gitInv7||gt(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px"}},{key:"calculate",value:function(t){var e=this;if("object"===_t(t)){var n=Object.keys(t);n.forEach((function(n){e[n]=t[n]})),this.updateColors(),n.forEach((function(n){e[n]=t[n]}))}else this.updateColors()}}],n&&function(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&void 0!==arguments[1]?arguments[1]:"";return Object.keys(e).reduce((function(r,i){return Array.isArray(e[i])?r:"object"===Bt(e[i])&&null!==e[i]?[].concat(Ot(r),[n+i],Ot(t(e[i],""))):[].concat(Ot(r),[n+i])}),[])}(Lt,"");const Ft=Lt;function Rt(t){return Rt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Rt(t)}var Pt,jt=Object.freeze(Ft),zt=Q({},jt),Yt=[],Ut=Q({},jt),$t=function(t,e){for(var n=Q({},t),r={},i=0;i-1||e[n].indexOf(">")>-1||e[n].indexOf("url(data:")>-1)&&delete e[n],"object"===Rt(e[n])&&t(e[n])}))},Vt=function(t){t.fontFamily&&(t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),Yt.push(t),$t(zt,Yt)},Gt=function(){$t(zt,Yt=[])},Xt=n(7856),Zt=n.n(Xt),Qt=function(t){var e=t.replace(/\\u[\dA-F]{4}/gi,(function(t){return String.fromCharCode(parseInt(t.replace(/\\u/g,""),16))}));return(e=(e=e.replace(/\\x([0-9a-f]{2})/gi,(function(t,e){return String.fromCharCode(parseInt(e,16))}))).replace(/\\[\d\d\d]{3}/gi,(function(t){return String.fromCharCode(parseInt(t.replace(/\\/g,""),8))}))).replace(/\\[\d\d\d]{2}/gi,(function(t){return String.fromCharCode(parseInt(t.replace(/\\/g,""),8))}))},Kt=function(t){for(var e="",n=0;n>=0;){if(!((n=t.indexOf("=0)){e+=t,n=-1;break}e+=t.substr(0,n),(n=(t=t.substr(n+1)).indexOf("<\/script>"))>=0&&(n+=9,t=t.substr(n))}var r=Qt(e);return(r=(r=(r=(r=r.replace(/script>/gi,"#")).replace(/javascript:/gi,"#")).replace(/javascript&colon/gi,"#")).replace(/onerror=/gi,"onerror:")).replace(/')}else"loose"!==s.securityLevel&&(M=Zt().sanitize(M,{ADD_TAGS:["foreignobject"],ADD_ATTR:["dominant-baseline"]}));if(void 0!==n)switch(b){case"flowchart":case"flowchart-v2":n(M,Zi.bindFunctions);break;case"gantt":n(M,to.bindFunctions);break;case"class":case"classDiagram":n(M,ar.bindFunctions);break;default:n(M)}else o.debug("CB = undefined!");is.forEach((function(t){t()})),is=[];var D="sandbox"===s.securityLevel?"#i"+t:"#d"+t,B=(0,l.select)(D).node();if(null!==B&&"function"==typeof B.remove&&(0,l.select)(D).node().remove(),u)throw u;return M},parse:function(t,e){kl||(fl(),kl=!0);var n=!1;try{var r=e||new yl(t);return r.db.clear(),r.parse(t)}catch(t){if(n=!0,!Ol.parseError)throw t;null!=t.str?Ol.parseError(t.str,t.hash):Ol.parseError(t)}return!n},parseDirective:function(t,e,n,r){try{if(void 0!==e)switch(e=e.trim(),n){case"open_directive":Tl={};break;case"type_directive":Tl.type=e.toLowerCase();break;case"arg_directive":Tl.args=JSON.parse(e);break;case"close_directive":(function(t,e,n){switch(o.debug("Directive type=".concat(e.type," with args:"),e.args),e.type){case"init":case"initialize":["config"].forEach((function(t){void 0!==e.args[t]&&("flowchart-v2"===n&&(n="flowchart"),e.args[n]=e.args[t],delete e.args[t])})),o.debug("sanitize in handleDirective",e.args),_n(e.args),o.debug("sanitize in handleDirective (done)",e.args),Vt(e.args);break;case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap("wrap"===e.type);break;case"themeCss":o.warn("themeCss encountered");break;default:o.warn("Unhandled directive: source: '%%{".concat(e.type,": ").concat(JSON.stringify(e.args?e.args:{}),"}%%"),e)}})(t,Tl,r),Tl=null}}catch(t){o.error("Error while rendering sequenceDiagram directive: ".concat(e," jison context: ").concat(n)),o.error(t.message)}},initialize:function(t){var e;null!=t&&t.fontFamily&&(null!==(e=t.themeVariables)&&void 0!==e&&e.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),function(t){Pt=Q({},t)}(t),null!=t&&t.theme&&Nt[t.theme]?t.themeVariables=Nt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Nt.default.getThemeVariables(t.themeVariables));var n="object"===xl(t)?function(t){return zt=Q({},jt),zt=Q(zt,t),t.theme&&Nt[t.theme]&&(zt.themeVariables=Nt[t.theme].getThemeVariables(t.themeVariables)),Ut=$t(zt,Yt),zt}(t):Wt();El(n),s(n.logLevel),kl||(fl(),kl=!0)},getConfig:qt,setConfig:function(t){return Q(Ut,t),qt()},getSiteConfig:Wt,updateSiteConfig:function(t){return zt=Q(zt,t),$t(zt,Yt),zt},reset:function(){Gt()},globalReset:function(){Gt(),El(qt())},defaultConfig:jt});s(qt().logLevel),Gt(qt());const Sl=Cl;var Al=function(){var t,e,n=Sl.getConfig();arguments.length>=2?(void 0!==arguments[0]&&(Nl.sequenceConfig=arguments[0]),t=arguments[1]):t=arguments[0],"function"==typeof arguments[arguments.length-1]?(e=arguments[arguments.length-1],o.debug("Callback function found")):void 0!==n.mermaid&&("function"==typeof n.mermaid.callback?(e=n.mermaid.callback,o.debug("Callback function found")):o.debug("No Callback function found")),t=void 0===t?document.querySelectorAll(".mermaid"):"string"==typeof t?document.querySelectorAll(t):t instanceof window.Node?[t]:t,o.debug("Start On Load before: "+Nl.startOnLoad),void 0!==Nl.startOnLoad&&(o.debug("Start On Load inner: "+Nl.startOnLoad),Sl.updateSiteConfig({startOnLoad:Nl.startOnLoad})),void 0!==Nl.ganttConfig&&Sl.updateSiteConfig({gantt:Nl.ganttConfig});for(var r,i=new kn.initIdGenerator(n.deterministicIds,n.deterministicIDSeed),a=[],s=function(n){o.info("Rendering diagram: "+t[n].id,n);var s=t[n];if(s.getAttribute("data-processed"))return"continue";s.setAttribute("data-processed",!0);var c="mermaid-".concat(i.next());r=s.innerHTML,r=kn.entityDecode(r).trim().replace(//gi,"
    ");var l=kn.detectInit(r);l&&o.debug("Detected early reinit: ",l);try{Sl.render(c,r,(function(t,n){s.innerHTML=t,void 0!==e&&e(c),n&&n(s)}),s)}catch(t){o.warn("Catching Error (bootstrap)",t),"function"==typeof Nl.parseError&&Nl.parseError({error:t,str:t.str,hash:t.hash,message:t.str}),a.push({error:t,str:t.str,hash:t.hash,message:t.str})}},c=0;c0)throw a[0]},Ml=function(){Nl.startOnLoad?Sl.getConfig().startOnLoad&&Nl.init():void 0===Nl.startOnLoad&&(o.debug("In start, no config"),Sl.getConfig().startOnLoad&&Nl.init())};"undefined"!=typeof document&&window.addEventListener("load",(function(){Ml()}),!1);var Nl={startOnLoad:!0,htmlLabels:!0,diagrams:{},mermaidAPI:Sl,parse:null!=Sl?Sl.parse:null,render:null!=Sl?Sl.render:null,init:function(){try{Al.apply(void 0,arguments)}catch(t){o.warn("Syntax Error rendering"),o.warn(t.str)}},initThrowsErrors:Al,initialize:function(t){void 0!==t.mermaid&&(void 0!==t.mermaid.startOnLoad&&(Nl.startOnLoad=t.mermaid.startOnLoad),void 0!==t.mermaid.htmlLabels&&(Nl.htmlLabels="false"!==t.mermaid.htmlLabels&&!1!==t.mermaid.htmlLabels)),Sl.initialize(t)},contentLoaded:Ml,setParseErrorHandler:function(t){Nl.parseError=t}};const Ol=Nl},4949:(t,e,n)=>{t.exports={graphlib:n(6614),dagre:n(6478),intersect:n(8114),render:n(5787),util:n(8355),version:n(5689)}},9144:(t,e,n)=>{var r=n(8355);function i(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])}t.exports={default:i,normal:i,vee:function(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])},undirected:function(t,e,n,i){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(a,n[i+"Style"]),n[i+"Class"]&&a.attr("class",n[i+"Class"])}}},5632:(t,e,n)=>{var r=n(8355),i=n(4322),a=n(1322);t.exports=function(t,e){var n,o=e.nodes().filter((function(t){return r.isSubgraph(e,t)})),s=t.selectAll("g.cluster").data(o,(function(t){return t}));return s.selectAll("*").remove(),s.enter().append("g").attr("class","cluster").attr("id",(function(t){return e.node(t).id})).style("opacity",0),s=t.selectAll("g.cluster"),r.applyTransition(s,e).style("opacity",1),s.each((function(t){var n=e.node(t),r=i.select(this);i.select(this).append("rect");var o=r.append("g").attr("class","label");a(o,n,n.clusterLabelPos)})),s.selectAll("rect").each((function(t){var n=e.node(t),a=i.select(this);r.applyStyle(a,n.style)})),n=s.exit?s.exit():s.selectAll(null),r.applyTransition(n,e).style("opacity",0).remove(),s}},6315:(t,e,n)=>{var r=n(1034),i=n(1322),a=n(8355),o=n(4322);t.exports=function(t,e){var n,s=t.selectAll("g.edgeLabel").data(e.edges(),(function(t){return a.edgeToId(t)})).classed("update",!0);return s.exit().remove(),s.enter().append("g").classed("edgeLabel",!0).style("opacity",0),(s=t.selectAll("g.edgeLabel")).each((function(t){var n=o.select(this);n.select(".label").remove();var a=e.edge(t),s=i(n,e.edge(t),0,0).classed("label",!0),c=s.node().getBBox();a.labelId&&s.attr("id",a.labelId),r.has(a,"width")||(a.width=c.width),r.has(a,"height")||(a.height=c.height)})),n=s.exit?s.exit():s.selectAll(null),a.applyTransition(n,e).style("opacity",0).remove(),s}},940:(t,e,n)=>{var r=n(1034),i=n(3042),a=n(8355),o=n(4322);function s(t,e){var n=(o.line||o.svg.line)().x((function(t){return t.x})).y((function(t){return t.y}));return(n.curve||n.interpolate)(t.curve),n(e)}t.exports=function(t,e,n){var c=t.selectAll("g.edgePath").data(e.edges(),(function(t){return a.edgeToId(t)})).classed("update",!0),l=function(t,e){var n=t.enter().append("g").attr("class","edgePath").style("opacity",0);return n.append("path").attr("class","path").attr("d",(function(t){var n=e.edge(t),i=e.node(t.v).elem;return s(n,r.range(n.points.length).map((function(){return e=(t=i).getBBox(),{x:(n=t.ownerSVGElement.getScreenCTM().inverse().multiply(t.getScreenCTM()).translate(e.width/2,e.height/2)).e,y:n.f};var t,e,n})))})),n.append("defs"),n}(c,e);!function(t,e){var n=t.exit();a.applyTransition(n,e).style("opacity",0).remove()}(c,e);var u=void 0!==c.merge?c.merge(l):c;return a.applyTransition(u,e).style("opacity",1),u.each((function(t){var n=o.select(this),r=e.edge(t);r.elem=this,r.id&&n.attr("id",r.id),a.applyClass(n,r.class,(n.classed("update")?"update ":"")+"edgePath")})),u.selectAll("path.path").each((function(t){var n=e.edge(t);n.arrowheadId=r.uniqueId("arrowhead");var c=o.select(this).attr("marker-end",(function(){return"url("+(t=location.href,e=n.arrowheadId,t.split("#")[0]+"#"+e+")");var t,e})).style("fill","none");a.applyTransition(c,e).attr("d",(function(t){return function(t,e){var n=t.edge(e),r=t.node(e.v),a=t.node(e.w),o=n.points.slice(1,n.points.length-1);return o.unshift(i(r,o[0])),o.push(i(a,o[o.length-1])),s(n,o)}(e,t)})),a.applyStyle(c,n.style)})),u.selectAll("defs *").remove(),u.selectAll("defs").each((function(t){var r=e.edge(t);(0,n[r.arrowhead])(o.select(this),r.arrowheadId,r,"arrowhead")})),u}},607:(t,e,n)=>{var r=n(1034),i=n(1322),a=n(8355),o=n(4322);t.exports=function(t,e,n){var s,c=e.nodes().filter((function(t){return!a.isSubgraph(e,t)})),l=t.selectAll("g.node").data(c,(function(t){return t})).classed("update",!0);return l.exit().remove(),l.enter().append("g").attr("class","node").style("opacity",0),(l=t.selectAll("g.node")).each((function(t){var s=e.node(t),c=o.select(this);a.applyClass(c,s.class,(c.classed("update")?"update ":"")+"node"),c.select("g.label").remove();var l=c.append("g").attr("class","label"),u=i(l,s),h=n[s.shape],d=r.pick(u.node().getBBox(),"width","height");s.elem=this,s.id&&c.attr("id",s.id),s.labelId&&l.attr("id",s.labelId),r.has(s,"width")&&(d.width=s.width),r.has(s,"height")&&(d.height=s.height),d.width+=s.paddingLeft+s.paddingRight,d.height+=s.paddingTop+s.paddingBottom,l.attr("transform","translate("+(s.paddingLeft-s.paddingRight)/2+","+(s.paddingTop-s.paddingBottom)/2+")");var f=o.select(this);f.select(".label-container").remove();var p=h(f,d,s).classed("label-container",!0);a.applyStyle(p,s.style);var g=p.node().getBBox();s.width=g.width,s.height=g.height})),s=l.exit?l.exit():l.selectAll(null),a.applyTransition(s,e).style("opacity",0).remove(),l}},4322:(t,e,n)=>{var r;if(!r)try{r=n(7543)}catch(t){}r||(r=window.d3),t.exports=r},6478:(t,e,n)=>{var r;try{r=n(681)}catch(t){}r||(r=window.dagre),t.exports=r},6614:(t,e,n)=>{var r;try{r=n(8282)}catch(t){}r||(r=window.graphlib),t.exports=r},8114:(t,e,n)=>{t.exports={node:n(3042),circle:n(6587),ellipse:n(3260),polygon:n(5337),rect:n(8049)}},6587:(t,e,n)=>{var r=n(3260);t.exports=function(t,e,n){return r(t,e,e,n)}},3260:t=>{t.exports=function(t,e,n,r){var i=t.x,a=t.y,o=i-r.x,s=a-r.y,c=Math.sqrt(e*e*s*s+n*n*o*o),l=Math.abs(e*n*o/c);r.x{function e(t,e){return t*e>0}t.exports=function(t,n,r,i){var a,o,s,c,l,u,h,d,f,p,g,y,m;if(a=n.y-t.y,s=t.x-n.x,l=n.x*t.y-t.x*n.y,f=a*r.x+s*r.y+l,p=a*i.x+s*i.y+l,!(0!==f&&0!==p&&e(f,p)||(o=i.y-r.y,c=r.x-i.x,u=i.x*r.y-r.x*i.y,h=o*t.x+c*t.y+u,d=o*n.x+c*n.y+u,0!==h&&0!==d&&e(h,d)||0==(g=a*c-o*s))))return y=Math.abs(g/2),{x:(m=s*u-c*l)<0?(m-y)/g:(m+y)/g,y:(m=o*l-a*u)<0?(m-y)/g:(m+y)/g}}},3042:t=>{t.exports=function(t,e){return t.intersect(e)}},5337:(t,e,n)=>{var r=n(6808);t.exports=function(t,e,n){var i=t.x,a=t.y,o=[],s=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY;e.forEach((function(t){s=Math.min(s,t.x),c=Math.min(c,t.y)}));for(var l=i-t.width/2-s,u=a-t.height/2-c,h=0;h1&&o.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return a{t.exports=function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,l=t.height/2;return Math.abs(s)*c>Math.abs(o)*l?(s<0&&(l=-l),n=0===s?0:l*o/s,r=l):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o),{x:i+n,y:a+r}}},8284:(t,e,n)=>{var r=n(8355);t.exports=function(t,e){var n=t.append("foreignObject").attr("width","100000"),i=n.append("xhtml:div");i.attr("xmlns","http://www.w3.org/1999/xhtml");var a=e.label;switch(typeof a){case"function":i.insert(a);break;case"object":i.insert((function(){return a}));break;default:i.html(a)}r.applyStyle(i,e.labelStyle),i.style("display","inline-block"),i.style("white-space","nowrap");var o=i.node().getBoundingClientRect();return n.attr("width",o.width).attr("height",o.height),n}},1322:(t,e,n)=>{var r=n(7318),i=n(8284),a=n(8287);t.exports=function(t,e,n){var o=e.label,s=t.append("g");"svg"===e.labelType?a(s,e):"string"!=typeof o||"html"===e.labelType?i(s,e):r(s,e);var c,l=s.node().getBBox();switch(n){case"top":c=-e.height/2;break;case"bottom":c=e.height/2-l.height;break;default:c=-l.height/2}return s.attr("transform","translate("+-l.width/2+","+c+")"),s}},8287:(t,e,n)=>{var r=n(8355);t.exports=function(t,e){var n=t;return n.node().appendChild(e.label),r.applyStyle(n,e.labelStyle),n}},7318:(t,e,n)=>{var r=n(8355);t.exports=function(t,e){for(var n=t.append("text"),i=function(t){for(var e,n="",r=!1,i=0;i{var r;try{r={defaults:n(1747),each:n(6073),isFunction:n(3560),isPlainObject:n(8630),pick:n(9722),has:n(8721),range:n(6026),uniqueId:n(3955)}}catch(t){}r||(r=window._),t.exports=r},6381:(t,e,n)=>{var r=n(8355),i=n(4322);t.exports=function(t,e){var n=t.filter((function(){return!i.select(this).classed("update")}));function a(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}n.attr("transform",a),r.applyTransition(t,e).style("opacity",1).attr("transform",a),r.applyTransition(n.selectAll("rect"),e).attr("width",(function(t){return e.node(t).width})).attr("height",(function(t){return e.node(t).height})).attr("x",(function(t){return-e.node(t).width/2})).attr("y",(function(t){return-e.node(t).height/2}))}},4577:(t,e,n)=>{var r=n(8355),i=n(4322),a=n(1034);t.exports=function(t,e){function n(t){var n=e.edge(t);return a.has(n,"x")?"translate("+n.x+","+n.y+")":""}t.filter((function(){return!i.select(this).classed("update")})).attr("transform",n),r.applyTransition(t,e).style("opacity",1).attr("transform",n)}},4849:(t,e,n)=>{var r=n(8355),i=n(4322);t.exports=function(t,e){function n(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}t.filter((function(){return!i.select(this).classed("update")})).attr("transform",n),r.applyTransition(t,e).style("opacity",1).attr("transform",n)}},5787:(t,e,n)=>{var r=n(1034),i=n(4322),a=n(6478).layout;t.exports=function(){var t=n(607),e=n(5632),i=n(6315),l=n(940),u=n(4849),h=n(4577),d=n(6381),f=n(4418),p=n(9144),g=function(n,g){!function(t){t.nodes().forEach((function(e){var n=t.node(e);r.has(n,"label")||t.children(e).length||(n.label=e),r.has(n,"paddingX")&&r.defaults(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),r.has(n,"paddingY")&&r.defaults(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),r.has(n,"padding")&&r.defaults(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),r.defaults(n,o),r.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],(function(t){n[t]=Number(n[t])})),r.has(n,"width")&&(n._prevWidth=n.width),r.has(n,"height")&&(n._prevHeight=n.height)})),t.edges().forEach((function(e){var n=t.edge(e);r.has(n,"label")||(n.label=""),r.defaults(n,s)}))}(g);var y=c(n,"output"),m=c(y,"clusters"),b=c(y,"edgePaths"),v=i(c(y,"edgeLabels"),g),_=t(c(y,"nodes"),g,f);a(g),u(_,g),h(v,g),l(b,g,p);var x=e(m,g);d(x,g),function(t){r.each(t.nodes(),(function(e){var n=t.node(e);r.has(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,r.has(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight}))}(g)};return g.createNodes=function(e){return arguments.length?(t=e,g):t},g.createClusters=function(t){return arguments.length?(e=t,g):e},g.createEdgeLabels=function(t){return arguments.length?(i=t,g):i},g.createEdgePaths=function(t){return arguments.length?(l=t,g):l},g.shapes=function(t){return arguments.length?(f=t,g):f},g.arrows=function(t){return arguments.length?(p=t,g):p},g};var o={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},s={arrowhead:"normal",curve:i.curveLinear};function c(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}},4418:(t,e,n)=>{var r=n(8049),i=n(3260),a=n(6587),o=n(5337);t.exports={rect:function(t,e,n){var i=t.insert("rect",":first-child").attr("rx",n.rx).attr("ry",n.ry).attr("x",-e.width/2).attr("y",-e.height/2).attr("width",e.width).attr("height",e.height);return n.intersect=function(t){return r(n,t)},i},ellipse:function(t,e,n){var r=e.width/2,a=e.height/2,o=t.insert("ellipse",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("rx",r).attr("ry",a);return n.intersect=function(t){return i(n,r,a,t)},o},circle:function(t,e,n){var r=Math.max(e.width,e.height)/2,i=t.insert("circle",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("r",r);return n.intersect=function(t){return a(n,r,t)},i},diamond:function(t,e,n){var r=e.width*Math.SQRT2/2,i=e.height*Math.SQRT2/2,a=[{x:0,y:-i},{x:-r,y:0},{x:0,y:i},{x:r,y:0}],s=t.insert("polygon",":first-child").attr("points",a.map((function(t){return t.x+","+t.y})).join(" "));return n.intersect=function(t){return o(n,a,t)},s}}},8355:(t,e,n)=>{var r=n(1034);t.exports={isSubgraph:function(t,e){return!!t.children(e).length},edgeToId:function(t){return a(t.v)+":"+a(t.w)+":"+a(t.name)},applyStyle:function(t,e){e&&t.attr("style",e)},applyClass:function(t,e,n){e&&t.attr("class",e).attr("class",n+" "+t.attr("class"))},applyTransition:function(t,e){var n=e.graph();if(r.isPlainObject(n)){var i=n.transition;if(r.isFunction(i))return i(t)}return t}};var i=/:/g;function a(t){return t?String(t).replace(i,"\\:"):""}},5689:t=>{t.exports="0.6.4"},681:(t,e,n)=>{t.exports={graphlib:n(574),layout:n(8123),debug:n(7570),util:{time:n(1138).time,notime:n(1138).notime},version:n(8177)}},2188:(t,e,n)=>{var r=n(8436),i=n(4079);t.exports={run:function(t){var e="greedy"===t.graph().acyclicer?i(t,function(t){return function(e){return t.edge(e).weight}}(t)):function(t){var e=[],n={},i={};return r.forEach(t.nodes(),(function a(o){r.has(i,o)||(i[o]=!0,n[o]=!0,r.forEach(t.outEdges(o),(function(t){r.has(n,t.w)?e.push(t):a(t.w)})),delete n[o])})),e}(t);r.forEach(e,(function(e){var n=t.edge(e);t.removeEdge(e),n.forwardName=e.name,n.reversed=!0,t.setEdge(e.w,e.v,n,r.uniqueId("rev"))}))},undo:function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(n.reversed){t.removeEdge(e);var r=n.forwardName;delete n.reversed,delete n.forwardName,t.setEdge(e.w,e.v,n,r)}}))}}},1133:(t,e,n)=>{var r=n(8436),i=n(1138);function a(t,e,n,r,a,o){var s={width:0,height:0,rank:o,borderType:e},c=a[e][o-1],l=i.addDummyNode(t,"border",s,n);a[e][o]=l,t.setParent(l,r),c&&t.setEdge(c,l,{weight:1})}t.exports=function(t){r.forEach(t.children(),(function e(n){var i=t.children(n),o=t.node(n);if(i.length&&r.forEach(i,e),r.has(o,"minRank")){o.borderLeft=[],o.borderRight=[];for(var s=o.minRank,c=o.maxRank+1;s{var r=n(8436);function i(t){r.forEach(t.nodes(),(function(e){a(t.node(e))})),r.forEach(t.edges(),(function(e){a(t.edge(e))}))}function a(t){var e=t.width;t.width=t.height,t.height=e}function o(t){t.y=-t.y}function s(t){var e=t.x;t.x=t.y,t.y=e}t.exports={adjust:function(t){var e=t.graph().rankdir.toLowerCase();"lr"!==e&&"rl"!==e||i(t)},undo:function(t){var e=t.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(t){r.forEach(t.nodes(),(function(e){o(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.forEach(n.points,o),r.has(n,"y")&&o(n)}))}(t),"lr"!==e&&"rl"!==e||(function(t){r.forEach(t.nodes(),(function(e){s(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.forEach(n.points,s),r.has(n,"x")&&s(n)}))}(t),i(t))}}},7822:t=>{function e(){var t={};t._next=t._prev=t,this._sentinel=t}function n(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function r(t,e){if("_next"!==t&&"_prev"!==t)return e}t.exports=e,e.prototype.dequeue=function(){var t=this._sentinel,e=t._prev;if(e!==t)return n(e),e},e.prototype.enqueue=function(t){var e=this._sentinel;t._prev&&t._next&&n(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e},e.prototype.toString=function(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,r)),n=n._prev;return"["+t.join(", ")+"]"}},7570:(t,e,n)=>{var r=n(8436),i=n(1138),a=n(574).Graph;t.exports={debugOrdering:function(t){var e=i.buildLayerMatrix(t),n=new a({compound:!0,multigraph:!0}).setGraph({});return r.forEach(t.nodes(),(function(e){n.setNode(e,{label:e}),n.setParent(e,"layer"+t.node(e).rank)})),r.forEach(t.edges(),(function(t){n.setEdge(t.v,t.w,{},t.name)})),r.forEach(e,(function(t,e){var i="layer"+e;n.setNode(i,{rank:"same"}),r.reduce(t,(function(t,e){return n.setEdge(t,e,{style:"invis"}),e}))})),n}}},574:(t,e,n)=>{var r;try{r=n(8282)}catch(t){}r||(r=window.graphlib),t.exports=r},4079:(t,e,n)=>{var r=n(8436),i=n(574).Graph,a=n(7822);t.exports=function(t,e){if(t.nodeCount()<=1)return[];var n=function(t,e){var n=new i,o=0,s=0;r.forEach(t.nodes(),(function(t){n.setNode(t,{v:t,in:0,out:0})})),r.forEach(t.edges(),(function(t){var r=n.edge(t.v,t.w)||0,i=e(t),a=r+i;n.setEdge(t.v,t.w,a),s=Math.max(s,n.node(t.v).out+=i),o=Math.max(o,n.node(t.w).in+=i)}));var l=r.range(s+o+3).map((function(){return new a})),u=o+1;return r.forEach(n.nodes(),(function(t){c(l,u,n.node(t))})),{graph:n,buckets:l,zeroIdx:u}}(t,e||o),l=function(t,e,n){for(var r,i=[],a=e[e.length-1],o=e[0];t.nodeCount();){for(;r=o.dequeue();)s(t,e,n,r);for(;r=a.dequeue();)s(t,e,n,r);if(t.nodeCount())for(var c=e.length-2;c>0;--c)if(r=e[c].dequeue()){i=i.concat(s(t,e,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(l,(function(e){return t.outEdges(e.v,e.w)})),!0)};var o=r.constant(1);function s(t,e,n,i,a){var o=a?[]:void 0;return r.forEach(t.inEdges(i.v),(function(r){var i=t.edge(r),s=t.node(r.v);a&&o.push({v:r.v,w:r.w}),s.out-=i,c(e,n,s)})),r.forEach(t.outEdges(i.v),(function(r){var i=t.edge(r),a=r.w,o=t.node(a);o.in-=i,c(e,n,o)})),t.removeNode(i.v),o}function c(t,e,n){n.out?n.in?t[n.out-n.in+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}},8123:(t,e,n)=>{var r=n(8436),i=n(2188),a=n(5995),o=n(8093),s=n(1138).normalizeRanks,c=n(4219),l=n(1138).removeEmptyRanks,u=n(2981),h=n(1133),d=n(3258),f=n(3408),p=n(7873),g=n(1138),y=n(574).Graph;t.exports=function(t,e){var n=e&&e.debugTiming?g.time:g.notime;n("layout",(function(){var e=n(" buildLayoutGraph",(function(){return function(t){var e=new y({multigraph:!0,compound:!0}),n=C(t.graph());return e.setGraph(r.merge({},b,E(n,m),r.pick(n,v))),r.forEach(t.nodes(),(function(n){var i=C(t.node(n));e.setNode(n,r.defaults(E(i,_),x)),e.setParent(n,t.parent(n))})),r.forEach(t.edges(),(function(n){var i=C(t.edge(n));e.setEdge(n,r.merge({},w,E(i,k),r.pick(i,T)))})),e}(t)}));n(" runLayout",(function(){!function(t,e){e(" makeSpaceForEdgeLabels",(function(){!function(t){var e=t.graph();e.ranksep/=2,r.forEach(t.edges(),(function(n){var r=t.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(t)})),e(" removeSelfEdges",(function(){!function(t){r.forEach(t.edges(),(function(e){if(e.v===e.w){var n=t.node(e.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:e,label:t.edge(e)}),t.removeEdge(e)}}))}(t)})),e(" acyclic",(function(){i.run(t)})),e(" nestingGraph.run",(function(){u.run(t)})),e(" rank",(function(){o(g.asNonCompoundGraph(t))})),e(" injectEdgeLabelProxies",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(n.width&&n.height){var r=t.node(e.v),i={rank:(t.node(e.w).rank-r.rank)/2+r.rank,e:e};g.addDummyNode(t,"edge-proxy",i,"_ep")}}))}(t)})),e(" removeEmptyRanks",(function(){l(t)})),e(" nestingGraph.cleanup",(function(){u.cleanup(t)})),e(" normalizeRanks",(function(){s(t)})),e(" assignRankMinMax",(function(){!function(t){var e=0;r.forEach(t.nodes(),(function(n){var i=t.node(n);i.borderTop&&(i.minRank=t.node(i.borderTop).rank,i.maxRank=t.node(i.borderBottom).rank,e=r.max(e,i.maxRank))})),t.graph().maxRank=e}(t)})),e(" removeEdgeLabelProxies",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))}))}(t)})),e(" normalize.run",(function(){a.run(t)})),e(" parentDummyChains",(function(){c(t)})),e(" addBorderSegments",(function(){h(t)})),e(" order",(function(){f(t)})),e(" insertSelfEdges",(function(){!function(t){var e=g.buildLayerMatrix(t);r.forEach(e,(function(e){var n=0;r.forEach(e,(function(e,i){var a=t.node(e);a.order=i+n,r.forEach(a.selfEdges,(function(e){g.addDummyNode(t,"selfedge",{width:e.label.width,height:e.label.height,rank:a.rank,order:i+ ++n,e:e.e,label:e.label},"_se")})),delete a.selfEdges}))}))}(t)})),e(" adjustCoordinateSystem",(function(){d.adjust(t)})),e(" position",(function(){p(t)})),e(" positionSelfEdges",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);if("selfedge"===n.dummy){var r=t.node(n.e.v),i=r.x+r.width/2,a=r.y,o=n.x-i,s=r.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:i+2*o/3,y:a-s},{x:i+5*o/6,y:a-s},{x:i+o,y:a},{x:i+5*o/6,y:a+s},{x:i+2*o/3,y:a+s}],n.label.x=n.x,n.label.y=n.y}}))}(t)})),e(" removeBorderNodes",(function(){!function(t){r.forEach(t.nodes(),(function(e){if(t.children(e).length){var n=t.node(e),i=t.node(n.borderTop),a=t.node(n.borderBottom),o=t.node(r.last(n.borderLeft)),s=t.node(r.last(n.borderRight));n.width=Math.abs(s.x-o.x),n.height=Math.abs(a.y-i.y),n.x=o.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(t.nodes(),(function(e){"border"===t.node(e).dummy&&t.removeNode(e)}))}(t)})),e(" normalize.undo",(function(){a.undo(t)})),e(" fixupEdgeLabelCoords",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(t)})),e(" undoCoordinateSystem",(function(){d.undo(t)})),e(" translateGraph",(function(){!function(t){var e=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,a=0,o=t.graph(),s=o.marginx||0,c=o.marginy||0;function l(t){var r=t.x,o=t.y,s=t.width,c=t.height;e=Math.min(e,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,o-c/2),a=Math.max(a,o+c/2)}r.forEach(t.nodes(),(function(e){l(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.has(n,"x")&&l(n)})),e-=s,i-=c,r.forEach(t.nodes(),(function(n){var r=t.node(n);r.x-=e,r.y-=i})),r.forEach(t.edges(),(function(n){var a=t.edge(n);r.forEach(a.points,(function(t){t.x-=e,t.y-=i})),r.has(a,"x")&&(a.x-=e),r.has(a,"y")&&(a.y-=i)})),o.width=n-e+s,o.height=a-i+c}(t)})),e(" assignNodeIntersects",(function(){!function(t){r.forEach(t.edges(),(function(e){var n,r,i=t.edge(e),a=t.node(e.v),o=t.node(e.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=o,r=a),i.points.unshift(g.intersectRect(a,n)),i.points.push(g.intersectRect(o,r))}))}(t)})),e(" reversePoints",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);n.reversed&&n.points.reverse()}))}(t)})),e(" acyclic.undo",(function(){i.undo(t)}))}(e,n)})),n(" updateInputGraph",(function(){!function(t,e){r.forEach(t.nodes(),(function(n){var r=t.node(n),i=e.node(n);r&&(r.x=i.x,r.y=i.y,e.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(t.edges(),(function(n){var i=t.edge(n),a=e.edge(n);i.points=a.points,r.has(a,"x")&&(i.x=a.x,i.y=a.y)})),t.graph().width=e.graph().width,t.graph().height=e.graph().height}(t,e)}))}))};var m=["nodesep","edgesep","ranksep","marginx","marginy"],b={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},v=["acyclicer","ranker","rankdir","align"],_=["width","height"],x={width:0,height:0},k=["minlen","weight","width","height","labeloffset"],w={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},T=["labelpos"];function E(t,e){return r.mapValues(r.pick(t,e),Number)}function C(t){var e={};return r.forEach(t,(function(t,n){e[n.toLowerCase()]=t})),e}},8436:(t,e,n)=>{var r;try{r={cloneDeep:n(361),constant:n(5703),defaults:n(1747),each:n(6073),filter:n(3105),find:n(3311),flatten:n(5564),forEach:n(4486),forIn:n(2620),has:n(8721),isUndefined:n(2353),last:n(928),map:n(5161),mapValues:n(6604),max:n(6162),merge:n(3857),min:n(3632),minBy:n(2762),now:n(7771),pick:n(9722),range:n(6026),reduce:n(4061),sortBy:n(9734),uniqueId:n(3955),values:n(2628),zipObject:n(7287)}}catch(t){}r||(r=window._),t.exports=r},2981:(t,e,n)=>{var r=n(8436),i=n(1138);function a(t,e,n,o,s,c,l){var u=t.children(l);if(u.length){var h=i.addBorderNode(t,"_bt"),d=i.addBorderNode(t,"_bb"),f=t.node(l);t.setParent(h,l),f.borderTop=h,t.setParent(d,l),f.borderBottom=d,r.forEach(u,(function(r){a(t,e,n,o,s,c,r);var i=t.node(r),u=i.borderTop?i.borderTop:r,f=i.borderBottom?i.borderBottom:r,p=i.borderTop?o:2*o,g=u!==f?1:s-c[l]+1;t.setEdge(h,u,{weight:p,minlen:g,nestingEdge:!0}),t.setEdge(f,d,{weight:p,minlen:g,nestingEdge:!0})})),t.parent(l)||t.setEdge(e,h,{weight:0,minlen:s+c[l]})}else l!==e&&t.setEdge(e,l,{weight:0,minlen:n})}t.exports={run:function(t){var e=i.addDummyNode(t,"root",{},"_root"),n=function(t){var e={};function n(i,a){var o=t.children(i);o&&o.length&&r.forEach(o,(function(t){n(t,a+1)})),e[i]=a}return r.forEach(t.children(),(function(t){n(t,1)})),e}(t),o=r.max(r.values(n))-1,s=2*o+1;t.graph().nestingRoot=e,r.forEach(t.edges(),(function(e){t.edge(e).minlen*=s}));var c=function(t){return r.reduce(t.edges(),(function(e,n){return e+t.edge(n).weight}),0)}(t)+1;r.forEach(t.children(),(function(r){a(t,e,s,c,o,n,r)})),t.graph().nodeRankFactor=s},cleanup:function(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,r.forEach(t.edges(),(function(e){t.edge(e).nestingEdge&&t.removeEdge(e)}))}}},5995:(t,e,n)=>{var r=n(8436),i=n(1138);t.exports={run:function(t){t.graph().dummyChains=[],r.forEach(t.edges(),(function(e){!function(t,e){var n,r,a,o=e.v,s=t.node(o).rank,c=e.w,l=t.node(c).rank,u=e.name,h=t.edge(e),d=h.labelRank;if(l!==s+1){for(t.removeEdge(e),a=0,++s;s{var r=n(8436);t.exports=function(t,e,n){var i,a={};r.forEach(n,(function(n){for(var r,o,s=t.parent(n);s;){if((r=t.parent(s))?(o=a[r],a[r]=s):(o=i,i=s),o&&o!==s)return void e.setEdge(o,s);s=r}}))}},5439:(t,e,n)=>{var r=n(8436);t.exports=function(t,e){return r.map(e,(function(e){var n=t.inEdges(e);if(n.length){var i=r.reduce(n,(function(e,n){var r=t.edge(n),i=t.node(n.v);return{sum:e.sum+r.weight*i.order,weight:e.weight+r.weight}}),{sum:0,weight:0});return{v:e,barycenter:i.sum/i.weight,weight:i.weight}}return{v:e}}))}},3128:(t,e,n)=>{var r=n(8436),i=n(574).Graph;t.exports=function(t,e,n){var a=function(t){for(var e;t.hasNode(e=r.uniqueId("_root")););return e}(t),o=new i({compound:!0}).setGraph({root:a}).setDefaultNodeLabel((function(e){return t.node(e)}));return r.forEach(t.nodes(),(function(i){var s=t.node(i),c=t.parent(i);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(o.setNode(i),o.setParent(i,c||a),r.forEach(t[n](i),(function(e){var n=e.v===i?e.w:e.v,a=o.edge(n,i),s=r.isUndefined(a)?0:a.weight;o.setEdge(n,i,{weight:t.edge(e).weight+s})})),r.has(s,"minRank")&&o.setNode(i,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))})),o}},6630:(t,e,n)=>{var r=n(8436);function i(t,e,n){for(var i=r.zipObject(n,r.map(n,(function(t,e){return e}))),a=r.flatten(r.map(e,(function(e){return r.sortBy(r.map(t.outEdges(e),(function(e){return{pos:i[e.w],weight:t.edge(e).weight}})),"pos")})),!0),o=1;o0;)e%2&&(n+=c[e+1]),c[e=e-1>>1]+=t.weight;l+=t.weight*n}))),l}t.exports=function(t,e){for(var n=0,r=1;r{var r=n(8436),i=n(2588),a=n(6630),o=n(1026),s=n(3128),c=n(5093),l=n(574).Graph,u=n(1138);function h(t,e,n){return r.map(e,(function(e){return s(t,e,n)}))}function d(t,e){var n=new l;r.forEach(t,(function(t){var i=t.graph().root,a=o(t,i,n,e);r.forEach(a.vs,(function(e,n){t.node(e).order=n})),c(t,n,a.vs)}))}function f(t,e){r.forEach(e,(function(e){r.forEach(e,(function(e,n){t.node(e).order=n}))}))}t.exports=function(t){var e=u.maxRank(t),n=h(t,r.range(1,e+1),"inEdges"),o=h(t,r.range(e-1,-1,-1),"outEdges"),s=i(t);f(t,s);for(var c,l=Number.POSITIVE_INFINITY,p=0,g=0;g<4;++p,++g){d(p%2?n:o,p%4>=2),s=u.buildLayerMatrix(t);var y=a(t,s);y{var r=n(8436);t.exports=function(t){var e={},n=r.filter(t.nodes(),(function(e){return!t.children(e).length})),i=r.max(r.map(n,(function(e){return t.node(e).rank}))),a=r.map(r.range(i+1),(function(){return[]})),o=r.sortBy(n,(function(e){return t.node(e).rank}));return r.forEach(o,(function n(i){if(!r.has(e,i)){e[i]=!0;var o=t.node(i);a[o.rank].push(i),r.forEach(t.successors(i),n)}})),a}},9567:(t,e,n)=>{var r=n(8436);t.exports=function(t,e){var n={};return r.forEach(t,(function(t,e){var i=n[t.v]={indegree:0,in:[],out:[],vs:[t.v],i:e};r.isUndefined(t.barycenter)||(i.barycenter=t.barycenter,i.weight=t.weight)})),r.forEach(e.edges(),(function(t){var e=n[t.v],i=n[t.w];r.isUndefined(e)||r.isUndefined(i)||(i.indegree++,e.out.push(n[t.w]))})),function(t){var e=[];function n(t){return function(e){var n,i,a,o;e.merged||(r.isUndefined(e.barycenter)||r.isUndefined(t.barycenter)||e.barycenter>=t.barycenter)&&(i=e,a=0,o=0,(n=t).weight&&(a+=n.barycenter*n.weight,o+=n.weight),i.weight&&(a+=i.barycenter*i.weight,o+=i.weight),n.vs=i.vs.concat(n.vs),n.barycenter=a/o,n.weight=o,n.i=Math.min(i.i,n.i),i.merged=!0)}}function i(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}for(;t.length;){var a=t.pop();e.push(a),r.forEach(a.in.reverse(),n(a)),r.forEach(a.out,i(a))}return r.map(r.filter(e,(function(t){return!t.merged})),(function(t){return r.pick(t,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(t){return!t.indegree})))}},1026:(t,e,n)=>{var r=n(8436),i=n(5439),a=n(9567),o=n(7304);t.exports=function t(e,n,s,c){var l=e.children(n),u=e.node(n),h=u?u.borderLeft:void 0,d=u?u.borderRight:void 0,f={};h&&(l=r.filter(l,(function(t){return t!==h&&t!==d})));var p=i(e,l);r.forEach(p,(function(n){if(e.children(n.v).length){var i=t(e,n.v,s,c);f[n.v]=i,r.has(i,"barycenter")&&(a=n,o=i,r.isUndefined(a.barycenter)?(a.barycenter=o.barycenter,a.weight=o.weight):(a.barycenter=(a.barycenter*a.weight+o.barycenter*o.weight)/(a.weight+o.weight),a.weight+=o.weight))}var a,o}));var g=a(p,s);!function(t,e){r.forEach(t,(function(t){t.vs=r.flatten(t.vs.map((function(t){return e[t]?e[t].vs:t})),!0)}))}(g,f);var y=o(g,c);if(h&&(y.vs=r.flatten([h,y.vs,d],!0),e.predecessors(h).length)){var m=e.node(e.predecessors(h)[0]),b=e.node(e.predecessors(d)[0]);r.has(y,"barycenter")||(y.barycenter=0,y.weight=0),y.barycenter=(y.barycenter*y.weight+m.order+b.order)/(y.weight+2),y.weight+=2}return y}},7304:(t,e,n)=>{var r=n(8436),i=n(1138);function a(t,e,n){for(var i;e.length&&(i=r.last(e)).i<=n;)e.pop(),t.push(i.vs),n++;return n}t.exports=function(t,e){var n,o=i.partition(t,(function(t){return r.has(t,"barycenter")})),s=o.lhs,c=r.sortBy(o.rhs,(function(t){return-t.i})),l=[],u=0,h=0,d=0;s.sort((n=!!e,function(t,e){return t.barycentere.barycenter?1:n?e.i-t.i:t.i-e.i})),d=a(l,c,d),r.forEach(s,(function(t){d+=t.vs.length,l.push(t.vs),u+=t.barycenter*t.weight,h+=t.weight,d=a(l,c,d)}));var f={vs:r.flatten(l,!0)};return h&&(f.barycenter=u/h,f.weight=h),f}},4219:(t,e,n)=>{var r=n(8436);t.exports=function(t){var e=function(t){var e={},n=0;return r.forEach(t.children(),(function i(a){var o=n;r.forEach(t.children(a),i),e[a]={low:o,lim:n++}})),e}(t);r.forEach(t.graph().dummyChains,(function(n){for(var r=t.node(n),i=r.edgeObj,a=function(t,e,n,r){var i,a,o=[],s=[],c=Math.min(e[n].low,e[r].low),l=Math.max(e[n].lim,e[r].lim);i=n;do{i=t.parent(i),o.push(i)}while(i&&(e[i].low>c||l>e[i].lim));for(a=i,i=r;(i=t.parent(i))!==a;)s.push(i);return{path:o.concat(s.reverse()),lca:a}}(t,e,i.v,i.w),o=a.path,s=a.lca,c=0,l=o[c],u=!0;n!==i.w;){if(r=t.node(n),u){for(;(l=o[c])!==s&&t.node(l).maxRank{var r=n(8436),i=n(574).Graph,a=n(1138);function o(t,e){var n={};return r.reduce(e,(function(e,i){var a=0,o=0,s=e.length,l=r.last(i);return r.forEach(i,(function(e,u){var h=function(t,e){if(t.node(e).dummy)return r.find(t.predecessors(e),(function(e){return t.node(e).dummy}))}(t,e),d=h?t.node(h).order:s;(h||e===l)&&(r.forEach(i.slice(o,u+1),(function(e){r.forEach(t.predecessors(e),(function(r){var i=t.node(r),o=i.order;!(os)&&c(n,e,l)}))}))}return r.reduce(e,(function(e,n){var a,o=-1,s=0;return r.forEach(n,(function(r,c){if("border"===t.node(r).dummy){var l=t.predecessors(r);l.length&&(a=t.node(l[0]).order,i(n,s,c,o,a),s=c,o=a)}i(n,s,n.length,a,e.length)})),n})),n}function c(t,e,n){if(e>n){var r=e;e=n,n=r}var i=t[e];i||(t[e]=i={}),i[n]=!0}function l(t,e,n){if(e>n){var i=e;e=n,n=i}return r.has(t[e],n)}function u(t,e,n,i){var a={},o={},s={};return r.forEach(e,(function(t){r.forEach(t,(function(t,e){a[t]=t,o[t]=t,s[t]=e}))})),r.forEach(e,(function(t){var e=-1;r.forEach(t,(function(t){var c=i(t);if(c.length){c=r.sortBy(c,(function(t){return s[t]}));for(var u=(c.length-1)/2,h=Math.floor(u),d=Math.ceil(u);h<=d;++h){var f=c[h];o[t]===t&&e{var r=n(8436),i=n(1138),a=n(3573).positionX;t.exports=function(t){(function(t){var e=i.buildLayerMatrix(t),n=t.graph().ranksep,a=0;r.forEach(e,(function(e){var i=r.max(r.map(e,(function(e){return t.node(e).height})));r.forEach(e,(function(e){t.node(e).y=a+i/2})),a+=i+n}))})(t=i.asNonCompoundGraph(t)),r.forEach(a(t),(function(e,n){t.node(n).x=e}))}},300:(t,e,n)=>{var r=n(8436),i=n(574).Graph,a=n(6681).slack;function o(t,e){return r.forEach(t.nodes(),(function n(i){r.forEach(e.nodeEdges(i),(function(r){var o=r.v,s=i===o?r.w:o;t.hasNode(s)||a(e,r)||(t.setNode(s,{}),t.setEdge(i,s,{}),n(s))}))})),t.nodeCount()}function s(t,e){return r.minBy(e.edges(),(function(n){if(t.hasNode(n.v)!==t.hasNode(n.w))return a(e,n)}))}function c(t,e,n){r.forEach(t.nodes(),(function(t){e.node(t).rank+=n}))}t.exports=function(t){var e,n,r=new i({directed:!1}),l=t.nodes()[0],u=t.nodeCount();for(r.setNode(l,{});o(r,t){var r=n(6681).longestPath,i=n(300),a=n(2472);t.exports=function(t){switch(t.graph().ranker){case"network-simplex":default:!function(t){a(t)}(t);break;case"tight-tree":!function(t){r(t),i(t)}(t);break;case"longest-path":o(t)}};var o=r},2472:(t,e,n)=>{var r=n(8436),i=n(300),a=n(6681).slack,o=n(6681).longestPath,s=n(574).alg.preorder,c=n(574).alg.postorder,l=n(1138).simplify;function u(t){t=l(t),o(t);var e,n=i(t);for(f(n),h(n,t);e=g(n);)m(n,t,e,y(n,t,e))}function h(t,e){var n=c(t,t.nodes());n=n.slice(0,n.length-1),r.forEach(n,(function(n){!function(t,e,n){var r=t.node(n).parent;t.edge(n,r).cutvalue=d(t,e,n)}(t,e,n)}))}function d(t,e,n){var i=t.node(n).parent,a=!0,o=e.edge(n,i),s=0;return o||(a=!1,o=e.edge(i,n)),s=o.weight,r.forEach(e.nodeEdges(n),(function(r){var o,c,l=r.v===n,u=l?r.w:r.v;if(u!==i){var h=l===a,d=e.edge(r).weight;if(s+=h?d:-d,o=n,c=u,t.hasEdge(o,c)){var f=t.edge(n,u).cutvalue;s+=h?-f:f}}})),s}function f(t,e){arguments.length<2&&(e=t.nodes()[0]),p(t,{},1,e)}function p(t,e,n,i,a){var o=n,s=t.node(i);return e[i]=!0,r.forEach(t.neighbors(i),(function(a){r.has(e,a)||(n=p(t,e,n,a,i))})),s.low=o,s.lim=n++,a?s.parent=a:delete s.parent,n}function g(t){return r.find(t.edges(),(function(e){return t.edge(e).cutvalue<0}))}function y(t,e,n){var i=n.v,o=n.w;e.hasEdge(i,o)||(i=n.w,o=n.v);var s=t.node(i),c=t.node(o),l=s,u=!1;s.lim>c.lim&&(l=c,u=!0);var h=r.filter(e.edges(),(function(e){return u===b(0,t.node(e.v),l)&&u!==b(0,t.node(e.w),l)}));return r.minBy(h,(function(t){return a(e,t)}))}function m(t,e,n,i){var a=n.v,o=n.w;t.removeEdge(a,o),t.setEdge(i.v,i.w,{}),f(t),h(t,e),function(t,e){var n=r.find(t.nodes(),(function(t){return!e.node(t).parent})),i=s(t,n);i=i.slice(1),r.forEach(i,(function(n){var r=t.node(n).parent,i=e.edge(n,r),a=!1;i||(i=e.edge(r,n),a=!0),e.node(n).rank=e.node(r).rank+(a?i.minlen:-i.minlen)}))}(t,e)}function b(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}t.exports=u,u.initLowLimValues=f,u.initCutValues=h,u.calcCutValue=d,u.leaveEdge=g,u.enterEdge=y,u.exchangeEdges=m},6681:(t,e,n)=>{var r=n(8436);t.exports={longestPath:function(t){var e={};r.forEach(t.sources(),(function n(i){var a=t.node(i);if(r.has(e,i))return a.rank;e[i]=!0;var o=r.min(r.map(t.outEdges(i),(function(e){return n(e.w)-t.edge(e).minlen})));return o!==Number.POSITIVE_INFINITY&&null!=o||(o=0),a.rank=o}))},slack:function(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}}},1138:(t,e,n)=>{var r=n(8436),i=n(574).Graph;function a(t,e,n,i){var a;do{a=r.uniqueId(i)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function o(t){return r.max(r.map(t.nodes(),(function(e){var n=t.node(e).rank;if(!r.isUndefined(n))return n})))}t.exports={addDummyNode:a,simplify:function(t){var e=(new i).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),e},asNonCompoundGraph:function(t){var e=new i({multigraph:t.isMultigraph()}).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e},successorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.outEdges(e),(function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},predecessorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.inEdges(e),(function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},intersectRect:function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,l=t.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");return Math.abs(s)*c>Math.abs(o)*l?(s<0&&(l=-l),n=l*o/s,r=l):(o<0&&(c=-c),n=c,r=c*s/o),{x:i+n,y:a+r}},buildLayerMatrix:function(t){var e=r.map(r.range(o(t)+1),(function(){return[]}));return r.forEach(t.nodes(),(function(n){var i=t.node(n),a=i.rank;r.isUndefined(a)||(e[a][i.order]=n)})),e},normalizeRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank})));r.forEach(t.nodes(),(function(n){var i=t.node(n);r.has(i,"rank")&&(i.rank-=e)}))},removeEmptyRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank}))),n=[];r.forEach(t.nodes(),(function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=t.graph().nodeRankFactor;r.forEach(n,(function(e,n){r.isUndefined(e)&&n%a!=0?--i:i&&r.forEach(e,(function(e){t.node(e).rank+=i}))}))},addBorderNode:function(t,e,n,r){var i={width:0,height:0};return arguments.length>=4&&(i.rank=n,i.order=r),a(t,"border",i,e)},maxRank:o,partition:function(t,e){var n={lhs:[],rhs:[]};return r.forEach(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n},time:function(t,e){var n=r.now();try{return e()}finally{console.log(t+" time: "+(r.now()-n)+"ms")}},notime:function(t,e){return e()}}},8177:t=>{t.exports="0.8.5"},7856:function(t){t.exports=function(){function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,n){return e=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},e(t,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function r(t,i,a){return r=n()?Reflect.construct:function(t,n,r){var i=[null];i.push.apply(i,n);var a=new(Function.bind.apply(t,i));return r&&e(a,r.prototype),a},r.apply(null,arguments)}function i(t){return function(t){if(Array.isArray(t))return a(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return a(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n1?n-1:0),i=1;i/gm),q=d(/^data-[\-\w.\u00B7-\uFFFF]/),H=d(/^aria-[\-\w]+$/),V=d(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),G=d(/^(?:\w+script|data):/i),X=d(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Z=d(/^html$/i),Q=function(){return"undefined"==typeof window?null:window},K=function(e,n){if("object"!==t(e)||"function"!=typeof e.createPolicy)return null;var r=null,i="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(i)&&(r=n.currentScript.getAttribute(i));var a="dompurify"+(r?"#"+r:"");try{return e.createPolicy(a,{createHTML:function(t){return t},createScriptURL:function(t){return t}})}catch(t){return console.warn("TrustedTypes policy "+a+" could not be created."),null}};return function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Q(),r=function(t){return e(t)};if(r.version="2.4.0",r.removed=[],!n||!n.document||9!==n.document.nodeType)return r.isSupported=!1,r;var a=n.document,o=n.document,s=n.DocumentFragment,c=n.HTMLTemplateElement,l=n.Node,u=n.Element,d=n.NodeFilter,f=n.NamedNodeMap,p=void 0===f?n.NamedNodeMap||n.MozNamedAttrMap:f,g=n.HTMLFormElement,y=n.DOMParser,m=n.trustedTypes,A=u.prototype,J=O(A,"cloneNode"),tt=O(A,"nextSibling"),et=O(A,"childNodes"),nt=O(A,"parentNode");if("function"==typeof c){var rt=o.createElement("template");rt.content&&rt.content.ownerDocument&&(o=rt.content.ownerDocument)}var it=K(m,a),at=it?it.createHTML(""):"",ot=o,st=ot.implementation,ct=ot.createNodeIterator,lt=ot.createDocumentFragment,ut=ot.getElementsByTagName,ht=a.importNode,dt={};try{dt=N(o).documentMode?o.documentMode:{}}catch(t){}var ft={};r.isSupported="function"==typeof nt&&st&&void 0!==st.createHTMLDocument&&9!==dt;var pt,gt,yt=$,mt=W,bt=q,vt=H,_t=G,xt=X,kt=V,wt=null,Tt=M({},[].concat(i(D),i(B),i(L),i(F),i(P))),Et=null,Ct=M({},[].concat(i(j),i(z),i(Y),i(U))),St=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),At=null,Mt=null,Nt=!0,Ot=!0,Dt=!1,Bt=!1,Lt=!1,It=!1,Ft=!1,Rt=!1,Pt=!1,jt=!1,zt=!0,Yt=!1,Ut="user-content-",$t=!0,Wt=!1,qt={},Ht=null,Vt=M({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Gt=null,Xt=M({},["audio","video","img","source","image","track"]),Zt=null,Qt=M({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Kt="http://www.w3.org/1998/Math/MathML",Jt="http://www.w3.org/2000/svg",te="http://www.w3.org/1999/xhtml",ee=te,ne=!1,re=["application/xhtml+xml","text/html"],ie="text/html",ae=null,oe=o.createElement("form"),se=function(t){return t instanceof RegExp||t instanceof Function},ce=function(e){ae&&ae===e||(e&&"object"===t(e)||(e={}),e=N(e),pt=pt=-1===re.indexOf(e.PARSER_MEDIA_TYPE)?ie:e.PARSER_MEDIA_TYPE,gt="application/xhtml+xml"===pt?function(t){return t}:x,wt="ALLOWED_TAGS"in e?M({},e.ALLOWED_TAGS,gt):Tt,Et="ALLOWED_ATTR"in e?M({},e.ALLOWED_ATTR,gt):Ct,Zt="ADD_URI_SAFE_ATTR"in e?M(N(Qt),e.ADD_URI_SAFE_ATTR,gt):Qt,Gt="ADD_DATA_URI_TAGS"in e?M(N(Xt),e.ADD_DATA_URI_TAGS,gt):Xt,Ht="FORBID_CONTENTS"in e?M({},e.FORBID_CONTENTS,gt):Vt,At="FORBID_TAGS"in e?M({},e.FORBID_TAGS,gt):{},Mt="FORBID_ATTR"in e?M({},e.FORBID_ATTR,gt):{},qt="USE_PROFILES"in e&&e.USE_PROFILES,Nt=!1!==e.ALLOW_ARIA_ATTR,Ot=!1!==e.ALLOW_DATA_ATTR,Dt=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Bt=e.SAFE_FOR_TEMPLATES||!1,Lt=e.WHOLE_DOCUMENT||!1,Rt=e.RETURN_DOM||!1,Pt=e.RETURN_DOM_FRAGMENT||!1,jt=e.RETURN_TRUSTED_TYPE||!1,Ft=e.FORCE_BODY||!1,zt=!1!==e.SANITIZE_DOM,Yt=e.SANITIZE_NAMED_PROPS||!1,$t=!1!==e.KEEP_CONTENT,Wt=e.IN_PLACE||!1,kt=e.ALLOWED_URI_REGEXP||kt,ee=e.NAMESPACE||te,e.CUSTOM_ELEMENT_HANDLING&&se(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(St.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&se(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(St.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(St.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Bt&&(Ot=!1),Pt&&(Rt=!0),qt&&(wt=M({},i(P)),Et=[],!0===qt.html&&(M(wt,D),M(Et,j)),!0===qt.svg&&(M(wt,B),M(Et,z),M(Et,U)),!0===qt.svgFilters&&(M(wt,L),M(Et,z),M(Et,U)),!0===qt.mathMl&&(M(wt,F),M(Et,Y),M(Et,U))),e.ADD_TAGS&&(wt===Tt&&(wt=N(wt)),M(wt,e.ADD_TAGS,gt)),e.ADD_ATTR&&(Et===Ct&&(Et=N(Et)),M(Et,e.ADD_ATTR,gt)),e.ADD_URI_SAFE_ATTR&&M(Zt,e.ADD_URI_SAFE_ATTR,gt),e.FORBID_CONTENTS&&(Ht===Vt&&(Ht=N(Ht)),M(Ht,e.FORBID_CONTENTS,gt)),$t&&(wt["#text"]=!0),Lt&&M(wt,["html","head","body"]),wt.table&&(M(wt,["tbody"]),delete At.tbody),h&&h(e),ae=e)},le=M({},["mi","mo","mn","ms","mtext"]),ue=M({},["foreignobject","desc","title","annotation-xml"]),he=M({},["title","style","font","a","script"]),de=M({},B);M(de,L),M(de,I);var fe=M({},F);M(fe,R);var pe=function(t){var e=nt(t);e&&e.tagName||(e={namespaceURI:te,tagName:"template"});var n=x(t.tagName),r=x(e.tagName);return t.namespaceURI===Jt?e.namespaceURI===te?"svg"===n:e.namespaceURI===Kt?"svg"===n&&("annotation-xml"===r||le[r]):Boolean(de[n]):t.namespaceURI===Kt?e.namespaceURI===te?"math"===n:e.namespaceURI===Jt?"math"===n&&ue[r]:Boolean(fe[n]):t.namespaceURI===te&&!(e.namespaceURI===Jt&&!ue[r])&&!(e.namespaceURI===Kt&&!le[r])&&!fe[n]&&(he[n]||!de[n])},ge=function(t){_(r.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){try{t.outerHTML=at}catch(e){t.remove()}}},ye=function(t,e){try{_(r.removed,{attribute:e.getAttributeNode(t),from:e})}catch(t){_(r.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!Et[t])if(Rt||Pt)try{ge(e)}catch(t){}else try{e.setAttribute(t,"")}catch(t){}},me=function(t){var e,n;if(Ft)t=""+t;else{var r=k(t,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===pt&&(t=''+t+"");var i=it?it.createHTML(t):t;if(ee===te)try{e=(new y).parseFromString(i,pt)}catch(t){}if(!e||!e.documentElement){e=st.createDocument(ee,"template",null);try{e.documentElement.innerHTML=ne?"":i}catch(t){}}var a=e.body||e.documentElement;return t&&n&&a.insertBefore(o.createTextNode(n),a.childNodes[0]||null),ee===te?ut.call(e,Lt?"html":"body")[0]:Lt?e.documentElement:a},be=function(t){return ct.call(t.ownerDocument||t,t,d.SHOW_ELEMENT|d.SHOW_COMMENT|d.SHOW_TEXT,null,!1)},ve=function(t){return t instanceof g&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof p)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore)},_e=function(e){return"object"===t(l)?e instanceof l:e&&"object"===t(e)&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},xe=function(t,e,n){ft[t]&&b(ft[t],(function(t){t.call(r,e,n,ae)}))},ke=function(t){var e;if(xe("beforeSanitizeElements",t,null),ve(t))return ge(t),!0;if(C(/[\u0080-\uFFFF]/,t.nodeName))return ge(t),!0;var n=gt(t.nodeName);if(xe("uponSanitizeElement",t,{tagName:n,allowedTags:wt}),t.hasChildNodes()&&!_e(t.firstElementChild)&&(!_e(t.content)||!_e(t.content.firstElementChild))&&C(/<[/\w]/g,t.innerHTML)&&C(/<[/\w]/g,t.textContent))return ge(t),!0;if("select"===n&&C(/