summaryrefslogtreecommitdiff
path: root/assets
diff options
context:
space:
mode:
authorhref <href@random.sh>2021-09-02 08:06:50 +0200
committerhref <href@random.sh>2021-09-02 08:06:50 +0200
commit1fbd63419355e8ddd482c3cb62641bed1366763b (patch)
tree370ce63fcf19f2fd8b1f5136fc19a317050ba0f3 /assets
parenttxt: don't search in files with dot, display them below in web (diff)
Phoenix 1.6rc0 & Use proper Esbuild/Tailwind/Npm
Diffstat (limited to 'assets')
-rw-r--r--assets/.gitignore1
-rw-r--r--assets/Makefile62
-rw-r--r--assets/alcoolog.js0
-rw-r--r--assets/assets/site.css3
-rw-r--r--assets/assets/site.js31
-rw-r--r--assets/controllers/.gitkeep0
-rw-r--r--assets/package-lock.json4533
-rw-r--r--assets/package.json24
-rw-r--r--assets/postcss.config.js12
-rw-r--r--assets/script/build.alcoolog.js11
-rw-r--r--assets/script/build.site.js11
-rwxr-xr-xassets/script/check-freshness4
-rw-r--r--assets/script/watch.site.js13
-rw-r--r--assets/site.css3
-rw-r--r--assets/site.js6
-rw-r--r--assets/tailwind.config.js104
16 files changed, 4818 insertions, 0 deletions
diff --git a/assets/.gitignore b/assets/.gitignore
new file mode 100644
index 0000000..2ccbe46
--- /dev/null
+++ b/assets/.gitignore
@@ -0,0 +1 @@
+/node_modules/
diff --git a/assets/Makefile b/assets/Makefile
new file mode 100644
index 0000000..02a4048
--- /dev/null
+++ b/assets/Makefile
@@ -0,0 +1,62 @@
+NODE ?= node
+NPM ?= npm
+NPX ?= npx
+RM ?= rm
+GZIP ?= gzip
+TOUCH ?= touch
+BROTLI ?= brotli
+ESBUILD ?= node_modules/esbuild/bin/esbuild
+CONCURRENTLY ?= node_modules/concurrently/bin/concurrently.js
+
+FILES = ../priv/static/assets/site.css ../priv/static/assets/site.js ../priv/static/assets/alcoolog.js
+
+FILES_GZ := $(addsuffix .gz, $(FILES))
+FILES_BR := $(addsuffix .br, $(FILES))
+FILES_CONTROLLERS := $(shell find controllers/ -name '*.js')
+
+.PHONY: all
+all: node_modules $(FILES) $(FILES_GZ) $(FILES_BR)
+
+node_modules: package.json package-lock.json
+ $(NPM) install
+ @$(TOUCH) node_modules
+
+../priv/static/assets/%.css: %.css
+ NODE_ENV=production $(NPX) tailwindcss --postcss --minify -i $< -o $@
+
+../priv/static/assets/%.js: %.js $(FILES_CONTROLLERS) script/build.%.js
+ #NODE_ENV=production $(ESBUILD) $< --bundle --minify --target=es2016 --outfile=$@
+ NODE_ENV=production $(NODE) script/build.$<
+
+../priv/static/assets/%.js.gz: ../priv/static/assets/%.js
+ $(GZIP) --force --best --keep $<
+ @$(TOUCH) $@
+
+../priv/static/assets/%.css.gz: ../priv/static/assets/%.css
+ $(GZIP) --force --best --keep $<
+ @$(TOUCH) $@
+
+../priv/static/assets/%.js.br: ../priv/static/assets/%.js
+ $(BROTLI) --force --best --keep $<
+ @$(TOUCH) $@
+
+../priv/static/assets/%.css.br: ../priv/static/assets/%.css
+ $(BROTLI) --force --best --keep $<
+ @$(TOUCH) $@
+
+.PHONY: clean
+clean:
+ $(RM) $(FILES) $(FILES_GZ) $(FILES_BR)
+
+.PHONY: watch
+watch: #watch_css watch_js
+ $(CONCURRENTLY) --kill-others -n css,js "make watch_css" "make watch_js"
+
+.PHONY: watch_css
+watch_css:
+ NODE_ENV=development $(NPX) tailwindcss --input=site.css --output=assets/site.css --postcss --watch
+
+.PHONY: watch_js
+watch_js:
+ #NODE_ENV=development $(ESBUILD) site.js --bundle --sourcemap=inline --watch --outfile=assets/site.js
+ NODE_ENV=development $(NODE) script/watch.site.js
diff --git a/assets/alcoolog.js b/assets/alcoolog.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/assets/alcoolog.js
diff --git a/assets/assets/site.css b/assets/assets/site.css
new file mode 100644
index 0000000..3010559
--- /dev/null
+++ b/assets/assets/site.css
@@ -0,0 +1,3 @@
+/*! tailwindcss v2.2.9 | MIT License | https://tailwindcss.com*/
+
+/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-webkit-text-size-adjust:100%;line-height:1.15;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;margin:0}hr{color:inherit;height:0}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{border:0 solid;box-sizing:border-box}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#a8a29e;opacity:1}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a8a29e;opacity:1}input::-moz-placeholder, textarea::-moz-placeholder{color:#a8a29e;opacity:1}input:-ms-input-placeholder, textarea:-ms-input-placeholder{color:#a8a29e;opacity:1}input::placeholder,textarea::placeholder{color:#a8a29e;opacity:1}[role=button],button{cursor:pointer}:-moz-focusring{outline:auto}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{color:inherit;line-height:inherit;padding:0}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-border-opacity:1;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-blur:var(--tw-empty,/*!*/ /*!*/);--tw-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-invert:var(--tw-empty,/*!*/ /*!*/);--tw-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-drop-shadow:var(--tw-empty,/*!*/ /*!*/);--tw-filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);--tw-backdrop-blur:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-invert:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-opacity:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);border-color:rgba(231,229,228,var(--tw-border-opacity))}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:#44403c;max-width:65ch}.prose [class~=lead]{color:#57534e;font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose a{color:#1c1917;font-weight:500;text-decoration:underline}.prose strong{color:#1c1917;font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type=A s]{--list-counter-style:upper-alpha}.prose ol[type=a s]{--list-counter-style:lower-alpha}.prose ol[type=I]{--list-counter-style:upper-roman}.prose ol[type=i]{--list-counter-style:lower-roman}.prose ol[type=I s]{--list-counter-style:upper-roman}.prose ol[type=i s]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{padding-left:1.75em;position:relative}.prose ol>li:before{color:#78716c;content:counter(list-item,var(--list-counter-style,decimal)) ".";font-weight:400;left:0;position:absolute}.prose ul>li{padding-left:1.75em;position:relative}.prose ul>li:before{background-color:#d6d3d1;border-radius:50%;content:"";height:.375em;left:.25em;position:absolute;top:.6875em;width:.375em}.prose hr{border-color:#e7e5e4;border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose blockquote{border-left-color:#e7e5e4;border-left-width:.25rem;color:#1c1917;font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-left:1em;quotes:"\201C""\201D""\2018""\2019"}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#1c1917;font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose h2{color:#1c1917;font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose h3{font-size:1.25em;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose h3,.prose h4{color:#1c1917;font-weight:600}.prose h4{line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose figure figcaption{color:#78716c;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#1c1917;font-size:.875em;font-weight:600}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#1c1917}.prose pre{background-color:#292524;border-radius:.375rem;color:#e7e5e4;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding:.8571429em 1.1428571em}.prose pre code{background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:400;line-height:inherit;padding:0}.prose pre code:after,.prose pre code:before{content:none}.prose table{font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:left;width:100%}.prose thead{border-bottom-color:#d6d3d1;border-bottom-width:1px;color:#1c1917;font-weight:600}.prose thead th{padding-bottom:.5714286em;padding-left:.5714286em;padding-right:.5714286em;vertical-align:bottom}.prose tbody tr{border-bottom-color:#e7e5e4;border-bottom-width:1px}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{padding:.5714286em;vertical-align:top}.prose{font-size:1rem;line-height:1.75}.prose p{margin-bottom:1.25em;margin-top:1.25em}.prose figure,.prose img,.prose video{margin-bottom:2em;margin-top:2em}.prose figure>*{margin-bottom:0;margin-top:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol,.prose ul{margin-bottom:1.25em;margin-top:1.25em}.prose li{margin-bottom:.5em;margin-top:.5em}.prose>ul>li p{margin-bottom:.75em;margin-top:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-bottom:.75em;margin-top:.75em}.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm p{margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm [class~=lead]{font-size:1.2857143em;line-height:1.5555556;margin-bottom:.8888889em;margin-top:.8888889em}.prose-sm blockquote{margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.1111111em}.prose-sm h1{font-size:2.1428571em;line-height:1.2;margin-bottom:.8em;margin-top:0}.prose-sm h2{font-size:1.4285714em;line-height:1.4;margin-bottom:.8em;margin-top:1.6em}.prose-sm h3{font-size:1.2857143em;line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.5555556em}.prose-sm h4{line-height:1.4285714;margin-bottom:.5714286em;margin-top:1.4285714em}.prose-sm figure,.prose-sm img,.prose-sm video{margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm figure>*{margin-bottom:0;margin-top:0}.prose-sm figure figcaption{font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm code{font-size:.8571429em}.prose-sm h2 code{font-size:.9em}.prose-sm h3 code{font-size:.8888889em}.prose-sm pre{border-radius:.25rem;font-size:.8571429em;line-height:1.6666667;margin-bottom:1.6666667em;margin-top:1.6666667em;padding:.6666667em 1em}.prose-sm ol,.prose-sm ul{margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm li{margin-bottom:.2857143em;margin-top:.2857143em}.prose-sm ol>li{padding-left:1.5714286em}.prose-sm ol>li:before{left:0}.prose-sm ul>li{padding-left:1.5714286em}.prose-sm ul>li:before{height:.3571429em;left:.2142857em;top:.67857em;width:.3571429em}.prose-sm>ul>li p{margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm>ul>li>:first-child{margin-top:1.1428571em}.prose-sm>ul>li>:last-child{margin-bottom:1.1428571em}.prose-sm>ol>li>:first-child{margin-top:1.1428571em}.prose-sm>ol>li>:last-child{margin-bottom:1.1428571em}.prose-sm ol ol,.prose-sm ol ul,.prose-sm ul ol,.prose-sm ul ul{margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm hr{margin-bottom:2.8571429em;margin-top:2.8571429em}.prose-sm h2+*,.prose-sm h3+*,.prose-sm h4+*,.prose-sm hr+*{margin-top:0}.prose-sm table{font-size:.8571429em;line-height:1.5}.prose-sm thead th{padding-bottom:.6666667em;padding-left:1em;padding-right:1em}.prose-sm thead th:first-child{padding-left:0}.prose-sm thead th:last-child{padding-right:0}.prose-sm tbody td{padding:.6666667em 1em}.prose-sm tbody td:first-child{padding-left:0}.prose-sm tbody td:last-child{padding-right:0}.prose-sm>:first-child{margin-top:0}.prose-sm>:last-child{margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg p{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg [class~=lead]{font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg blockquote{margin-bottom:1.6666667em;margin-top:1.6666667em;padding-left:1em}.prose-lg h1{font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg h2{font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg h3{font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg h4{line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg figure,.prose-lg img,.prose-lg video{margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg figure>*{margin-bottom:0;margin-top:0}.prose-lg figure figcaption{font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg code{font-size:.8888889em}.prose-lg h2 code{font-size:.8666667em}.prose-lg h3 code{font-size:.875em}.prose-lg pre{border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding:1em 1.5em}.prose-lg ol,.prose-lg ul{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg li{margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg ol>li{padding-left:1.6666667em}.prose-lg ol>li:before{left:0}.prose-lg ul>li{padding-left:1.6666667em}.prose-lg ul>li:before{height:.3333333em;left:.2222222em;top:.72222em;width:.3333333em}.prose-lg>ul>li p{margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg>ul>li>:first-child{margin-top:1.3333333em}.prose-lg>ul>li>:last-child{margin-bottom:1.3333333em}.prose-lg>ol>li>:first-child{margin-top:1.3333333em}.prose-lg>ol>li>:last-child{margin-bottom:1.3333333em}.prose-lg ol ol,.prose-lg ol ul,.prose-lg ul ol,.prose-lg ul ul{margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg hr{margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg h2+*,.prose-lg h3+*,.prose-lg h4+*,.prose-lg hr+*{margin-top:0}.prose-lg table{font-size:.8888889em;line-height:1.5}.prose-lg thead th{padding-bottom:.75em;padding-left:.75em;padding-right:.75em}.prose-lg thead th:first-child{padding-left:0}.prose-lg thead th:last-child{padding-right:0}.prose-lg tbody td{padding:.75em}.prose-lg tbody td:first-child{padding-left:0}.prose-lg tbody td:last-child{padding-right:0}.prose-lg>:first-child{margin-top:0}.prose-lg>:last-child{margin-bottom:0}.prose-xl{font-size:1.25rem;line-height:1.8}.prose-xl p{margin-bottom:1.2em;margin-top:1.2em}.prose-xl [class~=lead]{font-size:1.2em;line-height:1.5;margin-bottom:1em;margin-top:1em}.prose-xl blockquote{margin-bottom:1.6em;margin-top:1.6em;padding-left:1.0666667em}.prose-xl h1{font-size:2.8em;line-height:1;margin-bottom:.8571429em;margin-top:0}.prose-xl h2{font-size:1.8em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:1.5555556em}.prose-xl h3{font-size:1.5em;line-height:1.3333333;margin-bottom:.6666667em;margin-top:1.6em}.prose-xl h4{line-height:1.6;margin-bottom:.6em;margin-top:1.8em}.prose-xl figure,.prose-xl img,.prose-xl video{margin-bottom:2em;margin-top:2em}.prose-xl figure>*{margin-bottom:0;margin-top:0}.prose-xl figure figcaption{font-size:.9em;line-height:1.5555556;margin-top:1em}.prose-xl code{font-size:.9em}.prose-xl h2 code{font-size:.8611111em}.prose-xl h3 code,.prose-xl pre{font-size:.9em}.prose-xl pre{border-radius:.5rem;line-height:1.7777778;margin-bottom:2em;margin-top:2em;padding:1.1111111em 1.3333333em}.prose-xl ol,.prose-xl ul{margin-bottom:1.2em;margin-top:1.2em}.prose-xl li{margin-bottom:.6em;margin-top:.6em}.prose-xl ol>li{padding-left:1.8em}.prose-xl ol>li:before{left:0}.prose-xl ul>li{padding-left:1.8em}.prose-xl ul>li:before{height:.35em;left:.25em;top:.725em;width:.35em}.prose-xl>ul>li p{margin-bottom:.8em;margin-top:.8em}.prose-xl>ul>li>:first-child{margin-top:1.2em}.prose-xl>ul>li>:last-child{margin-bottom:1.2em}.prose-xl>ol>li>:first-child{margin-top:1.2em}.prose-xl>ol>li>:last-child{margin-bottom:1.2em}.prose-xl ol ol,.prose-xl ol ul,.prose-xl ul ol,.prose-xl ul ul{margin-bottom:.8em;margin-top:.8em}.prose-xl hr{margin-bottom:2.8em;margin-top:2.8em}.prose-xl h2+*,.prose-xl h3+*,.prose-xl h4+*,.prose-xl hr+*{margin-top:0}.prose-xl table{font-size:.9em;line-height:1.5555556}.prose-xl thead th{padding-bottom:.8888889em;padding-left:.6666667em;padding-right:.6666667em}.prose-xl thead th:first-child{padding-left:0}.prose-xl thead th:last-child{padding-right:0}.prose-xl tbody td{padding:.8888889em .6666667em}.prose-xl tbody td:first-child{padding-left:0}.prose-xl tbody td:last-child{padding-right:0}.prose-xl>:first-child{margin-top:0}.prose-xl>:last-child{margin-bottom:0}.prose-2xl{font-size:1.5rem;line-height:1.6666667}.prose-2xl p{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-2xl [class~=lead]{font-size:1.25em;line-height:1.4666667;margin-bottom:1.0666667em;margin-top:1.0666667em}.prose-2xl blockquote{margin-bottom:1.7777778em;margin-top:1.7777778em;padding-left:1.1111111em}.prose-2xl h1{font-size:2.6666667em;line-height:1;margin-bottom:.875em;margin-top:0}.prose-2xl h2{font-size:2em;line-height:1.0833333;margin-bottom:.8333333em;margin-top:1.5em}.prose-2xl h3{font-size:1.5em;line-height:1.2222222;margin-bottom:.6666667em;margin-top:1.5555556em}.prose-2xl h4{line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-2xl figure,.prose-2xl img,.prose-2xl video{margin-bottom:2em;margin-top:2em}.prose-2xl figure>*{margin-bottom:0;margin-top:0}.prose-2xl figure figcaption{font-size:.8333333em;line-height:1.6;margin-top:1em}.prose-2xl code{font-size:.8333333em}.prose-2xl h2 code{font-size:.875em}.prose-2xl h3 code{font-size:.8888889em}.prose-2xl pre{border-radius:.5rem;font-size:.8333333em;line-height:1.8;margin-bottom:2em;margin-top:2em;padding:1.2em 1.6em}.prose-2xl ol,.prose-2xl ul{margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-2xl li{margin-bottom:.5em;margin-top:.5em}.prose-2xl ol>li{padding-left:1.6666667em}.prose-2xl ol>li:before{left:0}.prose-2xl ul>li{padding-left:1.6666667em}.prose-2xl ul>li:before{height:.3333333em;left:.25em;top:.66667em;width:.3333333em}.prose-2xl>ul>li p{margin-bottom:.8333333em;margin-top:.8333333em}.prose-2xl>ul>li>:first-child{margin-top:1.3333333em}.prose-2xl>ul>li>:last-child{margin-bottom:1.3333333em}.prose-2xl>ol>li>:first-child{margin-top:1.3333333em}.prose-2xl>ol>li>:last-child{margin-bottom:1.3333333em}.prose-2xl ol ol,.prose-2xl ol ul,.prose-2xl ul ol,.prose-2xl ul ul{margin-bottom:.6666667em;margin-top:.6666667em}.prose-2xl hr{margin-bottom:3em;margin-top:3em}.prose-2xl h2+*,.prose-2xl h3+*,.prose-2xl h4+*,.prose-2xl hr+*{margin-top:0}.prose-2xl table{font-size:.8333333em;line-height:1.4}.prose-2xl thead th{padding-bottom:.8em;padding-left:.6em;padding-right:.6em}.prose-2xl thead th:first-child{padding-left:0}.prose-2xl thead th:last-child{padding-right:0}.prose-2xl tbody td{padding:.8em .6em}.prose-2xl tbody td:first-child{padding-left:0}.prose-2xl tbody td:last-child{padding-right:0}.prose-2xl>:first-child{margin-top:0}.prose-2xl>:last-child{margin-bottom:0}.prose-indigo a,.prose-indigo a code{color:#4f46e5}.prose-red a,.prose-red a code{color:#e11d48}.prose-yellow a,.prose-yellow a code{color:#d97706}.prose-blue a,.prose-blue a code{color:#2563eb}.prose-purple a,.prose-purple a code{color:#9333ea}.aspect-none{padding-bottom:0;position:static}.aspect-none>*{bottom:auto;height:auto;left:auto;position:static;right:auto;top:auto;width:auto}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.not-sr-only{clip:auto;height:auto;margin:0;overflow:visible;padding:0;position:static;white-space:normal;width:auto}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.\!visible{visibility:visible!important}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.right-0{right:0}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.col-span-1{grid-column:span 1/span 1}.float-right{float:right}.float-left{float:left}.float-none{float:none}.clear-left{clear:left}.clear-right{clear:right}.clear-both{clear:both}.clear-none{clear:none}.m-4{margin:1rem}.m-3{margin:.75rem}.m-8{margin:2rem}.m-14{margin:3.5rem}.m-16{margin:4rem}.-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.mx-auto{margin-left:auto;margin-right:auto}.ml-3{margin-left:.75rem}.mt-1{margin-top:.25rem}.ml-4{margin-left:1rem}.mt-3{margin-top:.75rem}.mt-12{margin-top:3rem}.mt-24{margin-top:6rem}.ml-10{margin-left:2.5rem}.mt-2{margin-top:.5rem}.-mr-2{margin-right:-.5rem}.-mt-32{margin-top:-8rem}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.inline-table{display:inline-table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row-group{display:table-row-group}.table-row{display:table-row}.flow-root{display:flow-root}.grid{display:grid}.inline-grid{display:inline-grid}.contents{display:contents}.list-item{display:list-item}.hidden{display:none}.h-5{height:1.25rem}.h-16{height:4rem}.h-8{height:2rem}.h-6{height:1.5rem}.h-10{height:2.5rem}.w-1{width:.25rem}.w-5{width:1.25rem}.w-full{width:100%}.w-auto{width:auto}.w-8{width:2rem}.w-6{width:1.5rem}.w-48{width:12rem}.w-10{width:2.5rem}.w-1\/2{width:50%}.w-\[this-is\\\\\]w-\\\\\[weird-but-valid\]{width:this-is\\]w-\\[weird-but-valid}.min-w-full{min-width:100%}.max-w-full{max-width:100%}.max-w-7xl{max-width:80rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-shrink{flex-shrink:1}.flex-grow{flex-grow:1}.table-auto{table-layout:auto}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.border-separate{border-collapse:separate}.origin-top-right{transform-origin:top right}.rotate-90{--tw-rotate:90deg}.rotate-90,.rotate-180{transform:var(--tw-transform)}.rotate-180{--tw-rotate:180deg}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-95,.scale-100{transform:var(--tw-transform)}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.transform{transform:var(--tw-transform)}.\!transform{transform:var(--tw-transform)!important}.transform-cpu{--tw-transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-gpu{--tw-transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-none{transform:none}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.select-auto{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.resize-none{resize:none}.resize-y{resize:vertical}.resize-x{resize:horizontal}.resize{resize:both}.list-inside{list-style-position:inside}.list-outside{list-style-position:outside}.list-decimal{list-style-type:decimal}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-flow-row{grid-auto-flow:row}.grid-flow-col{grid-auto-flow:column}.grid-flow-row-dense{grid-auto-flow:row dense}.grid-flow-col-dense{grid-auto-flow:column dense}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-nowrap{flex-wrap:nowrap}.place-content-center{place-content:center}.place-content-start{place-content:start}.place-content-end{place-content:end}.place-content-between{place-content:space-between}.place-content-around{place-content:space-around}.place-content-evenly{place-content:space-evenly}.place-content-stretch{place-content:stretch}.place-items-start{place-items:start}.place-items-end{place-items:end}.place-items-center{place-items:center}.place-items-stretch{place-items:stretch}.content-center{align-content:center}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-between{align-content:space-between}.content-around{align-content:space-around}.content-evenly{align-content:space-evenly}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.justify-items-start{justify-items:start}.justify-items-end{justify-items:end}.justify-items-center{justify-items:center}.justify-items-stretch{justify-items:stretch}.gap-6{gap:1.5rem}.gap-5{gap:1.25rem}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-reverse>:not([hidden])~:not([hidden]){--tw-space-y-reverse:1}.space-x-reverse>:not([hidden])~:not([hidden]){--tw-space-x-reverse:1}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-reverse))}.divide-y-reverse>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:1}.divide-x-reverse>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:1}.divide-solid>:not([hidden])~:not([hidden]){border-style:solid}.divide-dashed>:not([hidden])~:not([hidden]){border-style:dashed}.divide-dotted>:not([hidden])~:not([hidden]){border-style:dotted}.divide-double>:not([hidden])~:not([hidden]){border-style:double}.divide-none>:not([hidden])~:not([hidden]){border-style:none}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgba(231,229,228,var(--tw-divide-opacity))}.place-self-auto{place-self:auto}.place-self-start{place-self:start}.place-self-end{place-self:end}.place-self-center{place-self:center}.place-self-stretch{place-self:stretch}.self-auto{align-self:auto}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.self-baseline{align-self:baseline}.justify-self-auto{justify-self:auto}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.justify-self-stretch{justify-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.overflow-x-visible{overflow-x:visible}.overflow-y-visible{overflow-y:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.overscroll-auto{-ms-scroll-chaining:chained;overscroll-behavior:auto}.overscroll-contain{-ms-scroll-chaining:none;overscroll-behavior:contain}.overscroll-none{-ms-scroll-chaining:none;overscroll-behavior:none}.overscroll-y-auto{overscroll-behavior-y:auto}.overscroll-y-contain{overscroll-behavior-y:contain}.overscroll-y-none{overscroll-behavior-y:none}.overscroll-x-auto{overscroll-behavior-x:auto}.overscroll-x-contain{overscroll-behavior-x:contain}.overscroll-x-none{overscroll-behavior-x:none}.truncate{overflow:hidden;white-space:nowrap}.overflow-ellipsis,.truncate{text-overflow:ellipsis}.overflow-clip{text-overflow:clip}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded{border-radius:.25rem}.rounded-t{border-top-left-radius:.25rem}.rounded-r,.rounded-t{border-top-right-radius:.25rem}.rounded-b,.rounded-r{border-bottom-right-radius:.25rem}.rounded-b,.rounded-l{border-bottom-left-radius:.25rem}.rounded-l,.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border-2{border-width:2px}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-double{border-style:double}.border-none{border-style:none}.border-gray-200{--tw-border-opacity:1;border-color:rgba(231,229,228,var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgba(68,64,60,var(--tw-border-opacity))}.border-transparent{border-color:transparent}.bg-red-50{--tw-bg-opacity:1;background-color:rgba(255,241,242,var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(250,250,249,var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgba(41,37,36,var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgba(28,25,23,var(--tw-bg-opacity))}.decoration-slice{-webkit-box-decoration-break:slice;box-decoration-break:slice}.decoration-clone{-webkit-box-decoration-break:clone;box-decoration-break:clone}.bg-fixed{background-attachment:fixed}.bg-local{background-attachment:local}.bg-scroll{background-attachment:scroll}.bg-clip-border{background-clip:border-box}.bg-clip-padding{background-clip:padding-box}.bg-clip-content{background-clip:content-box}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-repeat{background-repeat:repeat}.bg-no-repeat{background-repeat:no-repeat}.bg-repeat-x{background-repeat:repeat-x}.bg-repeat-y{background-repeat:repeat-y}.bg-repeat-round{background-repeat:round}.bg-repeat-space{background-repeat:space}.bg-origin-border{background-origin:border-box}.bg-origin-padding{background-origin:padding-box}.bg-origin-content{background-origin:content-box}.fill-\[\#bada55\]{fill:#bada55}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.object-fill{-o-object-fit:fill;object-fit:fill}.object-none{-o-object-fit:none;object-fit:none}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-0{padding-bottom:0;padding-top:0}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-1{padding-left:.25rem;padding-right:.25rem}.pb-32{padding-bottom:8rem}.pt-4{padding-top:1rem}.pb-3{padding-bottom:.75rem}.pb-12{padding-bottom:3rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-justify{text-align:justify}.align-baseline{vertical-align:baseline}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.align-text-top{vertical-align:text-top}.align-text-bottom{vertical-align:text-bottom}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-thin{font-weight:100}.font-bold{font-weight:700}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.italic{font-style:italic}.not-italic{font-style:normal}.diagonal-fractions,.lining-nums,.oldstyle-nums,.ordinal,.proportional-nums,.slashed-zero,.stacked-fractions,.tabular-nums{--tw-ordinal:var(--tw-empty,/*!*/ /*!*/);--tw-slashed-zero:var(--tw-empty,/*!*/ /*!*/);--tw-numeric-figure:var(--tw-empty,/*!*/ /*!*/);--tw-numeric-spacing:var(--tw-empty,/*!*/ /*!*/);--tw-numeric-fraction:var(--tw-empty,/*!*/ /*!*/);font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.normal-nums{font-variant-numeric:normal}.ordinal{--tw-ordinal:ordinal}.slashed-zero{--tw-slashed-zero:slashed-zero}.lining-nums{--tw-numeric-figure:lining-nums}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums}.proportional-nums{--tw-numeric-spacing:proportional-nums}.tabular-nums{--tw-numeric-spacing:tabular-nums}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions}.stacked-fractions{--tw-numeric-fraction:stacked-fractions}.leading-5{line-height:1.25rem}.leading-4{line-height:1rem}.leading-8{line-height:2rem}.leading-loose{line-height:2}.leading-none{line-height:1}.leading-9{line-height:2.25rem}.tracking-wider{letter-spacing:.05em}.tracking-wide{letter-spacing:.025em}.text-red-400{--tw-text-opacity:1;color:rgba(251,113,133,var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgba(159,18,57,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(28,25,23,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(68,64,60,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(120,113,108,var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(87,83,78,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(214,211,209,var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(168,162,158,var(--tw-text-opacity))}.underline{text-decoration:underline}.line-through{text-decoration:line-through}.no-underline{text-decoration:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-0{opacity:0}.opacity-100{opacity:1}.bg-blend-normal{background-blend-mode:normal}.bg-blend-multiply{background-blend-mode:multiply}.bg-blend-screen{background-blend-mode:screen}.bg-blend-overlay{background-blend-mode:overlay}.bg-blend-darken{background-blend-mode:darken}.bg-blend-lighten{background-blend-mode:lighten}.bg-blend-color-dodge{background-blend-mode:color-dodge}.bg-blend-color-burn{background-blend-mode:color-burn}.bg-blend-hard-light{background-blend-mode:hard-light}.bg-blend-soft-light{background-blend-mode:soft-light}.bg-blend-difference{background-blend-mode:difference}.bg-blend-exclusion{background-blend-mode:exclusion}.bg-blend-hue{background-blend-mode:hue}.bg-blend-saturation{background-blend-mode:saturation}.bg-blend-color{background-blend-mode:color}.bg-blend-luminosity{background-blend-mode:luminosity}.mix-blend-normal{mix-blend-mode:normal}.mix-blend-multiply{mix-blend-mode:multiply}.mix-blend-screen{mix-blend-mode:screen}.mix-blend-overlay{mix-blend-mode:overlay}.mix-blend-darken{mix-blend-mode:darken}.mix-blend-lighten{mix-blend-mode:lighten}.mix-blend-color-dodge{mix-blend-mode:color-dodge}.mix-blend-color-burn{mix-blend-mode:color-burn}.mix-blend-hard-light{mix-blend-mode:hard-light}.mix-blend-soft-light{mix-blend-mode:soft-light}.mix-blend-difference{mix-blend-mode:difference}.mix-blend-exclusion{mix-blend-mode:exclusion}.mix-blend-hue{mix-blend-mode:hue}.mix-blend-saturation{mix-blend-mode:saturation}.mix-blend-color{mix-blend-mode:color}.mix-blend-luminosity{mix-blend-mode:luminosity}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06)}.shadow,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,0.05)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.blur{--tw-blur:blur(8px)}.blur,.drop-shadow{filter:var(--tw-filter)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,0.1)) drop-shadow(0 1px 1px rgba(0,0,0,0.06))}.grayscale{--tw-grayscale:grayscale(100%)}.grayscale,.invert{filter:var(--tw-filter)}.invert{--tw-invert:invert(100%)}.sepia{--tw-sepia:sepia(100%)}.filter,.sepia{filter:var(--tw-filter)}.\!filter{filter:var(--tw-filter)!important}.filter-none{filter:none}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-grayscale{-webkit-backdrop-filter:var(--tw-backdrop-filter);backdrop-filter:var(--tw-backdrop-filter)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%)}.backdrop-invert{--tw-backdrop-invert:invert(100%)}.backdrop-invert,.backdrop-sepia{-webkit-backdrop-filter:var(--tw-backdrop-filter);backdrop-filter:var(--tw-backdrop-filter)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-filter);backdrop-filter:var(--tw-backdrop-filter)}.backdrop-filter-none{-webkit-backdrop-filter:none;backdrop-filter:none}.transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition{transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-75{transition-duration:75ms}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.content-\[\"hello\"\],.content-\[\'hello\'\]{content:"hello"}.content-\[\'this-is-also-valid\]-weirdly-enough\'\]{content:"this-is-also-valid]-weirdly-enough"}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgba(68,64,60,var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(245,245,244,var(--tw-bg-opacity))}.hover\:font-bold:hover{font-weight:700}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(68,64,60,var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgba(87,83,78,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.focus\:bg-indigo-50:focus{--tw-bg-opacity:1;background-color:rgba(238,242,255,var(--tw-bg-opacity))}.focus\:bg-gray-700:focus{--tw-bg-opacity:1;background-color:rgba(68,64,60,var(--tw-bg-opacity))}.focus\:text-indigo-600:focus{--tw-text-opacity:1;color:rgba(79,70,229,var(--tw-text-opacity))}.focus\:text-white:focus{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:hover\:text-center:focus:hover,.hover\:focus\:text-center:hover:focus{text-align:center}@media (min-width:640px){.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:block{display:block}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:gap-6{gap:1.5rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}}@media (min-width:768px){.md\:ml-6{margin-left:1.5rem}.md\:block{display:block}.md\:hidden{display:none}}@media (min-width:1024px){.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:px-8{padding-left:2rem;padding-right:2rem}} \ No newline at end of file
diff --git a/assets/assets/site.js b/assets/assets/site.js
new file mode 100644
index 0000000..bec3ce9
--- /dev/null
+++ b/assets/assets/site.js
@@ -0,0 +1,31 @@
+(()=>{(function(){if(window.Reflect===void 0||window.customElements===void 0||window.customElements.polyfillWrapFlushCallback)return;let r=HTMLElement,e={HTMLElement:function(){return Reflect.construct(r,[],this.constructor)}};window.HTMLElement=e.HTMLElement,HTMLElement.prototype=r.prototype,HTMLElement.prototype.constructor=HTMLElement,Object.setPrototypeOf(HTMLElement,r)})();var Z=new WeakMap;function dt(r){let e=r instanceof Element?r:r instanceof Node?r.parentElement:null,t=e?e.closest("input, button"):null;return(t==null?void 0:t.type)=="submit"?t:null}function ft(r){let e=dt(r.target);e&&e.form&&Z.set(e.form,e)}(function(){"SubmitEvent"in window||(addEventListener("click",ft,!0),Object.defineProperty(Event.prototype,"submitter",{get(){if(this.type=="submit"&&this.target instanceof HTMLFormElement)return Z.get(this.target)}}))})();var w;(function(r){r.eager="eager",r.lazy="lazy"})(w||(w={}));var v=class extends HTMLElement{constructor(){super();this.loaded=Promise.resolve(),this.delegate=new v.delegateConstructor(this)}static get observedAttributes(){return["disabled","loading","src"]}connectedCallback(){this.delegate.connect()}disconnectedCallback(){this.delegate.disconnect()}reload(){let{src:e}=this;this.src=null,this.src=e}attributeChangedCallback(e){e=="loading"?this.delegate.loadingStyleChanged():e=="src"?this.delegate.sourceURLChanged():this.delegate.disabledChanged()}get src(){return this.getAttribute("src")}set src(e){e?this.setAttribute("src",e):this.removeAttribute("src")}get loading(){return pt(this.getAttribute("loading")||"")}set loading(e){e?this.setAttribute("loading",e):this.removeAttribute("loading")}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get autoscroll(){return this.hasAttribute("autoscroll")}set autoscroll(e){e?this.setAttribute("autoscroll",""):this.removeAttribute("autoscroll")}get complete(){return!this.delegate.isLoading}get isActive(){return this.ownerDocument===document&&!this.isPreview}get isPreview(){var e,t;return(t=(e=this.ownerDocument)===null||e===void 0?void 0:e.documentElement)===null||t===void 0?void 0:t.hasAttribute("data-turbo-preview")}};function pt(r){switch(r.toLowerCase()){case"lazy":return w.lazy;default:return w.eager}}function m(r){return new URL(r.toString(),document.baseURI)}function P(r){let e;if(r.hash)return r.hash.slice(1);if(e=r.href.match(/#(.*)$/))return e[1]}function mt(r){return(wt(r).match(/\.[^.]*$/)||[])[0]||""}function gt(r){return!!mt(r).match(/^(?:|\.(?:htm|html|xhtml))$/)}function vt(r,e){let t=Et(e);return r.href===m(t).href||r.href.startsWith(t)}function _(r){let e=P(r);return e!=null?r.href.slice(0,-(e.length+1)):r.href}function F(r){return _(r)}function bt(r,e){return m(r).href==m(e).href}function yt(r){return r.pathname.split("/").slice(1)}function wt(r){return yt(r).slice(-1)[0]}function Et(r){return St(r.origin+r.pathname)}function St(r){return r.endsWith("/")?r:r+"/"}var W=class{constructor(e){this.response=e}get succeeded(){return this.response.ok}get failed(){return!this.succeeded}get clientError(){return this.statusCode>=400&&this.statusCode<=499}get serverError(){return this.statusCode>=500&&this.statusCode<=599}get redirected(){return this.response.redirected}get location(){return m(this.response.url)}get isHTML(){return this.contentType&&this.contentType.match(/^(?:text\/([^\s;,]+\b)?html|application\/xhtml\+xml)\b/)}get statusCode(){return this.response.status}get contentType(){return this.header("Content-Type")}get responseText(){return this.response.text()}get responseHTML(){return this.isHTML?this.response.text():Promise.resolve(void 0)}header(e){return this.response.headers.get(e)}};function u(r,{target:e,cancelable:t,detail:n}={}){let i=new CustomEvent(r,{cancelable:t,bubbles:!0,detail:n});return(e||document.documentElement).dispatchEvent(i),i}function B(){return new Promise(r=>requestAnimationFrame(()=>r()))}function At(){return new Promise(r=>setTimeout(()=>r(),0))}function Pt(){return Promise.resolve()}function ee(r=""){return new DOMParser().parseFromString(r,"text/html")}function te(r,...e){let t=Lt(r,e).replace(/^\n/,"").split(`
+`),n=t[0].match(/^\s+/),i=n?n[0].length:0;return t.map(s=>s.slice(i)).join(`
+`)}function Lt(r,e){return r.reduce((t,n,i)=>{let s=e[i]==null?"":e[i];return t+n+s},"")}function k(){return Array.apply(null,{length:36}).map((r,e)=>e==8||e==13||e==18||e==23?"-":e==14?"4":e==19?(Math.floor(Math.random()*4)+8).toString(16):Math.floor(Math.random()*15).toString(16)).join("")}var h;(function(r){r[r.get=0]="get",r[r.post=1]="post",r[r.put=2]="put",r[r.patch=3]="patch",r[r.delete=4]="delete"})(h||(h={}));function Tt(r){switch(r.toLowerCase()){case"get":return h.get;case"post":return h.post;case"put":return h.put;case"patch":return h.patch;case"delete":return h.delete}}var I=class{constructor(e,t,n,i=new URLSearchParams){this.abortController=new AbortController,this.resolveRequestPromise=s=>{},this.delegate=e,this.method=t,this.headers=this.defaultHeaders,this.isIdempotent?this.url=Ct(n,[...i.entries()]):(this.body=i,this.url=n)}get location(){return this.url}get params(){return this.url.searchParams}get entries(){return this.body?Array.from(this.body.entries()):[]}cancel(){this.abortController.abort()}async perform(){var e,t;let{fetchOptions:n}=this;(t=(e=this.delegate).prepareHeadersForRequest)===null||t===void 0||t.call(e,this.headers,this),await this.allowRequestToBeIntercepted(n);try{this.delegate.requestStarted(this);let i=await fetch(this.url.href,n);return await this.receive(i)}catch(i){if(i.name!=="AbortError")throw this.delegate.requestErrored(this,i),i}finally{this.delegate.requestFinished(this)}}async receive(e){let t=new W(e);return u("turbo:before-fetch-response",{cancelable:!0,detail:{fetchResponse:t}}).defaultPrevented?this.delegate.requestPreventedHandlingResponse(this,t):t.succeeded?this.delegate.requestSucceededWithResponse(this,t):this.delegate.requestFailedWithResponse(this,t),t}get fetchOptions(){var e;return{method:h[this.method].toUpperCase(),credentials:"same-origin",headers:this.headers,redirect:"follow",body:this.body,signal:this.abortSignal,referrer:(e=this.delegate.referrer)===null||e===void 0?void 0:e.href}}get defaultHeaders(){return{Accept:"text/html, application/xhtml+xml"}}get isIdempotent(){return this.method==h.get}get abortSignal(){return this.abortController.signal}async allowRequestToBeIntercepted(e){let t=new Promise(i=>this.resolveRequestPromise=i);u("turbo:before-fetch-request",{cancelable:!0,detail:{fetchOptions:e,url:this.url.href,resume:this.resolveRequestPromise}}).defaultPrevented&&await t}};function Ct(r,e){let t=new URLSearchParams(r.search);for(let[n,i]of e)i instanceof File||(t.has(n)?(t.delete(n),r.searchParams.set(n,i)):r.searchParams.append(n,i));return r}var re=class{constructor(e,t){this.started=!1,this.intersect=n=>{let i=n.slice(-1)[0];(i==null?void 0:i.isIntersecting)&&this.delegate.elementAppearedInViewport(this.element)},this.delegate=e,this.element=t,this.intersectionObserver=new IntersectionObserver(this.intersect)}start(){this.started||(this.started=!0,this.intersectionObserver.observe(this.element))}stop(){this.started&&(this.started=!1,this.intersectionObserver.unobserve(this.element))}},L=class{constructor(e){this.templateElement=document.createElement("template"),this.templateElement.innerHTML=e}static wrap(e){return typeof e=="string"?new this(e):e}get fragment(){let e=document.createDocumentFragment();for(let t of this.foreignElements)e.appendChild(document.importNode(t,!0));return e}get foreignElements(){return this.templateChildren.reduce((e,t)=>t.tagName.toLowerCase()=="turbo-stream"?[...e,t]:e,[])}get templateChildren(){return Array.from(this.templateElement.content.children)}};L.contentType="text/vnd.turbo-stream.html";var E;(function(r){r[r.initialized=0]="initialized",r[r.requesting=1]="requesting",r[r.waiting=2]="waiting",r[r.receiving=3]="receiving",r[r.stopping=4]="stopping",r[r.stopped=5]="stopped"})(E||(E={}));var S;(function(r){r.urlEncoded="application/x-www-form-urlencoded",r.multipart="multipart/form-data",r.plain="text/plain"})(S||(S={}));function Ot(r){switch(r.toLowerCase()){case S.multipart:return S.multipart;case S.plain:return S.plain;default:return S.urlEncoded}}var U=class{constructor(e,t,n,i=!1){this.state=E.initialized,this.delegate=e,this.formElement=t,this.submitter=n,this.formData=Rt(t,n),this.fetchRequest=new I(this,this.method,this.location,this.body),this.mustRedirect=i}get method(){var e;let t=((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formmethod"))||this.formElement.getAttribute("method")||"";return Tt(t.toLowerCase())||h.get}get action(){var e;let t=typeof this.formElement.action=="string"?this.formElement.action:null;return((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formaction"))||this.formElement.getAttribute("action")||t||""}get location(){return m(this.action)}get body(){return this.enctype==S.urlEncoded||this.method==h.get?new URLSearchParams(this.stringFormData):this.formData}get enctype(){var e;return Ot(((e=this.submitter)===null||e===void 0?void 0:e.getAttribute("formenctype"))||this.formElement.enctype)}get isIdempotent(){return this.fetchRequest.isIdempotent}get stringFormData(){return[...this.formData].reduce((e,[t,n])=>e.concat(typeof n=="string"?[[t,n]]:[]),[])}async start(){let{initialized:e,requesting:t}=E;if(this.state==e)return this.state=t,this.fetchRequest.perform()}stop(){let{stopping:e,stopped:t}=E;if(this.state!=e&&this.state!=t)return this.state=e,this.fetchRequest.cancel(),!0}prepareHeadersForRequest(e,t){if(!t.isIdempotent){let n=kt(ne("csrf-param"))||ne("csrf-token");n&&(e["X-CSRF-Token"]=n),e.Accept=[L.contentType,e.Accept].join(", ")}}requestStarted(e){this.state=E.waiting,u("turbo:submit-start",{target:this.formElement,detail:{formSubmission:this}}),this.delegate.formSubmissionStarted(this)}requestPreventedHandlingResponse(e,t){this.result={success:t.succeeded,fetchResponse:t}}requestSucceededWithResponse(e,t){if(t.clientError||t.serverError)this.delegate.formSubmissionFailedWithResponse(this,t);else if(this.requestMustRedirect(e)&&Mt(t)){let n=new Error("Form responses must redirect to another location");this.delegate.formSubmissionErrored(this,n)}else this.state=E.receiving,this.result={success:!0,fetchResponse:t},this.delegate.formSubmissionSucceededWithResponse(this,t)}requestFailedWithResponse(e,t){this.result={success:!1,fetchResponse:t},this.delegate.formSubmissionFailedWithResponse(this,t)}requestErrored(e,t){this.result={success:!1,error:t},this.delegate.formSubmissionErrored(this,t)}requestFinished(e){this.state=E.stopped,u("turbo:submit-end",{target:this.formElement,detail:Object.assign({formSubmission:this},this.result)}),this.delegate.formSubmissionFinished(this)}requestMustRedirect(e){return!e.isIdempotent&&this.mustRedirect}};function Rt(r,e){let t=new FormData(r),n=e==null?void 0:e.getAttribute("name"),i=e==null?void 0:e.getAttribute("value");return n&&i!=null&&t.get(n)!=i&&t.append(n,i),t}function kt(r){if(r!=null){let t=(document.cookie?document.cookie.split("; "):[]).find(n=>n.startsWith(r));if(t){let n=t.split("=").slice(1).join("=");return n?decodeURIComponent(n):void 0}}}function ne(r){let e=document.querySelector(`meta[name="${r}"]`);return e&&e.content}function Mt(r){return r.statusCode==200&&!r.redirected}var M=class{constructor(e){this.element=e}get children(){return[...this.element.children]}hasAnchor(e){return this.getElementForAnchor(e)!=null}getElementForAnchor(e){return e?this.element.querySelector(`[id='${e}'], a[name='${e}']`):null}get isConnected(){return this.element.isConnected}get firstAutofocusableElement(){return this.element.querySelector("[autofocus]")}get permanentElements(){return[...this.element.querySelectorAll("[id][data-turbo-permanent]")]}getPermanentElementById(e){return this.element.querySelector(`#${e}[data-turbo-permanent]`)}getPermanentElementMapForSnapshot(e){let t={};for(let n of this.permanentElements){let{id:i}=n,s=e.getPermanentElementById(i);s&&(t[i]=[n,s])}return t}},K=class{constructor(e,t){this.submitBubbled=n=>{if(n.target instanceof HTMLFormElement){let i=n.target,s=n.submitter||void 0;this.delegate.shouldInterceptFormSubmission(i,s)&&(n.preventDefault(),n.stopImmediatePropagation(),this.delegate.formSubmissionIntercepted(i,s))}},this.delegate=e,this.element=t}start(){this.element.addEventListener("submit",this.submitBubbled)}stop(){this.element.removeEventListener("submit",this.submitBubbled)}},z=class{constructor(e,t){this.resolveRenderPromise=n=>{},this.resolveInterceptionPromise=n=>{},this.delegate=e,this.element=t}scrollToAnchor(e){let t=this.snapshot.getElementForAnchor(e);t?(this.scrollToElement(t),this.focusElement(t)):this.scrollToPosition({x:0,y:0})}scrollToAnchorFromLocation(e){this.scrollToAnchor(P(e))}scrollToElement(e){e.scrollIntoView()}focusElement(e){e instanceof HTMLElement&&(e.hasAttribute("tabindex")?e.focus():(e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")))}scrollToPosition({x:e,y:t}){this.scrollRoot.scrollTo(e,t)}scrollToTop(){this.scrollToPosition({x:0,y:0})}get scrollRoot(){return window}async render(e){let{isPreview:t,shouldRender:n,newSnapshot:i}=e;if(n)try{this.renderPromise=new Promise(c=>this.resolveRenderPromise=c),this.renderer=e,this.prepareToRenderSnapshot(e);let s=new Promise(c=>this.resolveInterceptionPromise=c);this.delegate.allowsImmediateRender(i,this.resolveInterceptionPromise)||await s,await this.renderSnapshot(e),this.delegate.viewRenderedSnapshot(i,t),this.finishRenderingSnapshot(e)}finally{delete this.renderer,this.resolveRenderPromise(void 0),delete this.renderPromise}else this.invalidate()}invalidate(){this.delegate.viewInvalidated()}prepareToRenderSnapshot(e){this.markAsPreview(e.isPreview),e.prepareToRender()}markAsPreview(e){e?this.element.setAttribute("data-turbo-preview",""):this.element.removeAttribute("data-turbo-preview")}async renderSnapshot(e){await e.render()}finishRenderingSnapshot(e){e.finishRendering()}},ie=class extends z{invalidate(){this.element.innerHTML=""}get snapshot(){return new M(this.element)}},$=class{constructor(e,t){this.clickBubbled=n=>{this.respondsToEventTarget(n.target)?this.clickEvent=n:delete this.clickEvent},this.linkClicked=n=>{this.clickEvent&&this.respondsToEventTarget(n.target)&&n.target instanceof Element&&this.delegate.shouldInterceptLinkClick(n.target,n.detail.url)&&(this.clickEvent.preventDefault(),n.preventDefault(),this.delegate.linkClickIntercepted(n.target,n.detail.url)),delete this.clickEvent},this.willVisit=()=>{delete this.clickEvent},this.delegate=e,this.element=t}start(){this.element.addEventListener("click",this.clickBubbled),document.addEventListener("turbo:click",this.linkClicked),document.addEventListener("turbo:before-visit",this.willVisit)}stop(){this.element.removeEventListener("click",this.clickBubbled),document.removeEventListener("turbo:click",this.linkClicked),document.removeEventListener("turbo:before-visit",this.willVisit)}respondsToEventTarget(e){let t=e instanceof Element?e:e instanceof Node?e.parentElement:null;return t&&t.closest("turbo-frame, html")==this.element}},se=class{constructor(e){this.permanentElementMap=e}static preservingPermanentElements(e,t){let n=new this(e);n.enter(),t(),n.leave()}enter(){for(let e in this.permanentElementMap){let[,t]=this.permanentElementMap[e];this.replaceNewPermanentElementWithPlaceholder(t)}}leave(){for(let e in this.permanentElementMap){let[t]=this.permanentElementMap[e];this.replaceCurrentPermanentElementWithClone(t),this.replacePlaceholderWithPermanentElement(t)}}replaceNewPermanentElementWithPlaceholder(e){let t=xt(e);e.replaceWith(t)}replaceCurrentPermanentElementWithClone(e){let t=e.cloneNode(!0);e.replaceWith(t)}replacePlaceholderWithPermanentElement(e){let t=this.getPlaceholderById(e.id);t==null||t.replaceWith(e)}getPlaceholderById(e){return this.placeholders.find(t=>t.content==e)}get placeholders(){return[...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")]}};function xt(r){let e=document.createElement("meta");return e.setAttribute("name","turbo-permanent-placeholder"),e.setAttribute("content",r.id),e}var N=class{constructor(e,t,n){this.currentSnapshot=e,this.newSnapshot=t,this.isPreview=n,this.promise=new Promise((i,s)=>this.resolvingFunctions={resolve:i,reject:s})}get shouldRender(){return!0}prepareToRender(){}finishRendering(){this.resolvingFunctions&&(this.resolvingFunctions.resolve(),delete this.resolvingFunctions)}createScriptElement(e){if(e.getAttribute("data-turbo-eval")=="false")return e;{let t=document.createElement("script");return this.cspNonce&&(t.nonce=this.cspNonce),t.textContent=e.textContent,t.async=!1,Ft(t,e),t}}preservingPermanentElements(e){se.preservingPermanentElements(this.permanentElementMap,e)}focusFirstAutofocusableElement(){let e=this.connectedSnapshot.firstAutofocusableElement;Bt(e)&&e.focus()}get connectedSnapshot(){return this.newSnapshot.isConnected?this.newSnapshot:this.currentSnapshot}get currentElement(){return this.currentSnapshot.element}get newElement(){return this.newSnapshot.element}get permanentElementMap(){return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)}get cspNonce(){var e;return(e=document.head.querySelector('meta[name="csp-nonce"]'))===null||e===void 0?void 0:e.getAttribute("content")}};function Ft(r,e){for(let{name:t,value:n}of[...e.attributes])r.setAttribute(t,n)}function Bt(r){return r&&typeof r.focus=="function"}var oe=class extends N{get shouldRender(){return!0}async render(){await B(),this.preservingPermanentElements(()=>{this.loadFrameElement()}),this.scrollFrameIntoView(),await B(),this.focusFirstAutofocusableElement(),await B(),this.activateScriptElements()}loadFrameElement(){var e;let t=document.createRange();t.selectNodeContents(this.currentElement),t.deleteContents();let n=this.newElement,i=(e=n.ownerDocument)===null||e===void 0?void 0:e.createRange();i&&(i.selectNodeContents(n),this.currentElement.appendChild(i.extractContents()))}scrollFrameIntoView(){if(this.currentElement.autoscroll||this.newElement.autoscroll){let e=this.currentElement.firstElementChild,t=It(this.currentElement.getAttribute("data-autoscroll-block"),"end");if(e)return e.scrollIntoView({block:t}),!0}return!1}activateScriptElements(){for(let e of this.newScriptElements){let t=this.createScriptElement(e);e.replaceWith(t)}}get newScriptElements(){return this.currentElement.querySelectorAll("script")}};function It(r,e){return r=="end"||r=="start"||r=="center"||r=="nearest"?r:e}var g=class{constructor(){this.hiding=!1,this.value=0,this.visible=!1,this.trickle=()=>{this.setValue(this.value+Math.random()/100)},this.stylesheetElement=this.createStylesheetElement(),this.progressElement=this.createProgressElement(),this.installStylesheetElement(),this.setValue(0)}static get defaultCSS(){return te`
+ .turbo-progress-bar {
+ position: fixed;
+ display: block;
+ top: 0;
+ left: 0;
+ height: 3px;
+ background: #0076ff;
+ z-index: 9999;
+ transition:
+ width ${g.animationDuration}ms ease-out,
+ opacity ${g.animationDuration/2}ms ${g.animationDuration/2}ms ease-in;
+ transform: translate3d(0, 0, 0);
+ }
+ `}show(){this.visible||(this.visible=!0,this.installProgressElement(),this.startTrickling())}hide(){this.visible&&!this.hiding&&(this.hiding=!0,this.fadeProgressElement(()=>{this.uninstallProgressElement(),this.stopTrickling(),this.visible=!1,this.hiding=!1}))}setValue(e){this.value=e,this.refresh()}installStylesheetElement(){document.head.insertBefore(this.stylesheetElement,document.head.firstChild)}installProgressElement(){this.progressElement.style.width="0",this.progressElement.style.opacity="1",document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()}fadeProgressElement(e){this.progressElement.style.opacity="0",setTimeout(e,g.animationDuration*1.5)}uninstallProgressElement(){this.progressElement.parentNode&&document.documentElement.removeChild(this.progressElement)}startTrickling(){this.trickleInterval||(this.trickleInterval=window.setInterval(this.trickle,g.animationDuration))}stopTrickling(){window.clearInterval(this.trickleInterval),delete this.trickleInterval}refresh(){requestAnimationFrame(()=>{this.progressElement.style.width=`${10+this.value*90}%`})}createStylesheetElement(){let e=document.createElement("style");return e.type="text/css",e.textContent=g.defaultCSS,e}createProgressElement(){let e=document.createElement("div");return e.className="turbo-progress-bar",e}};g.animationDuration=300;var ae=class extends M{constructor(){super(...arguments);this.detailsByOuterHTML=this.children.filter(e=>!jt(e)).reduce((e,t)=>{let{outerHTML:n}=t,i=n in e?e[n]:{type:Nt(t),tracked:qt(t),elements:[]};return Object.assign(Object.assign({},e),{[n]:Object.assign(Object.assign({},i),{elements:[...i.elements,t]})})},{})}get trackedElementSignature(){return Object.keys(this.detailsByOuterHTML).filter(e=>this.detailsByOuterHTML[e].tracked).join("")}getScriptElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("script",e)}getStylesheetElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("stylesheet",e)}getElementsMatchingTypeNotInSnapshot(e,t){return Object.keys(this.detailsByOuterHTML).filter(n=>!(n in t.detailsByOuterHTML)).map(n=>this.detailsByOuterHTML[n]).filter(({type:n})=>n==e).map(({elements:[n]})=>n)}get provisionalElements(){return Object.keys(this.detailsByOuterHTML).reduce((e,t)=>{let{type:n,tracked:i,elements:s}=this.detailsByOuterHTML[t];return n==null&&!i?[...e,...s]:s.length>1?[...e,...s.slice(1)]:e},[])}getMetaValue(e){let t=this.findMetaElementByName(e);return t?t.getAttribute("content"):null}findMetaElementByName(e){return Object.keys(this.detailsByOuterHTML).reduce((t,n)=>{let{elements:[i]}=this.detailsByOuterHTML[n];return Ht(i,e)?i:t},void 0)}};function Nt(r){if(Vt(r))return"script";if(Dt(r))return"stylesheet"}function qt(r){return r.getAttribute("data-turbo-track")=="reload"}function Vt(r){return r.tagName.toLowerCase()=="script"}function jt(r){return r.tagName.toLowerCase()=="noscript"}function Dt(r){let e=r.tagName.toLowerCase();return e=="style"||e=="link"&&r.getAttribute("rel")=="stylesheet"}function Ht(r,e){return r.tagName.toLowerCase()=="meta"&&r.getAttribute("name")==e}var b=class extends M{constructor(e,t){super(e);this.headSnapshot=t}static fromHTMLString(e=""){return this.fromDocument(ee(e))}static fromElement(e){return this.fromDocument(e.ownerDocument)}static fromDocument({head:e,body:t}){return new this(t,new ae(e))}clone(){return new b(this.element.cloneNode(!0),this.headSnapshot)}get headElement(){return this.headSnapshot.element}get rootLocation(){var e;let t=(e=this.getSetting("root"))!==null&&e!==void 0?e:"/";return m(t)}get cacheControlValue(){return this.getSetting("cache-control")}get isPreviewable(){return this.cacheControlValue!="no-preview"}get isCacheable(){return this.cacheControlValue!="no-cache"}get isVisitable(){return this.getSetting("visit-control")!="reload"}getSetting(e){return this.headSnapshot.getMetaValue(`turbo-${e}`)}},T;(function(r){r.visitStart="visitStart",r.requestStart="requestStart",r.requestEnd="requestEnd",r.visitEnd="visitEnd"})(T||(T={}));var p;(function(r){r.initialized="initialized",r.started="started",r.canceled="canceled",r.failed="failed",r.completed="completed"})(p||(p={}));var _t={action:"advance",historyChanged:!1},A;(function(r){r[r.networkFailure=0]="networkFailure",r[r.timeoutFailure=-1]="timeoutFailure",r[r.contentTypeMismatch=-2]="contentTypeMismatch"})(A||(A={}));var ce=class{constructor(e,t,n,i={}){this.identifier=k(),this.timingMetrics={},this.followedRedirect=!1,this.historyChanged=!1,this.scrolled=!1,this.snapshotCached=!1,this.state=p.initialized,this.delegate=e,this.location=t,this.restorationIdentifier=n||k();let{action:s,historyChanged:o,referrer:c,snapshotHTML:l,response:a}=Object.assign(Object.assign({},_t),i);this.action=s,this.historyChanged=o,this.referrer=c,this.snapshotHTML=l,this.response=a,this.isSamePage=this.delegate.locationWithActionIsSamePage(this.location,this.action)}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get history(){return this.delegate.history}get restorationData(){return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)}get silent(){return this.isSamePage}start(){this.state==p.initialized&&(this.recordTimingMetric(T.visitStart),this.state=p.started,this.adapter.visitStarted(this),this.delegate.visitStarted(this))}cancel(){this.state==p.started&&(this.request&&this.request.cancel(),this.cancelRender(),this.state=p.canceled)}complete(){this.state==p.started&&(this.recordTimingMetric(T.visitEnd),this.state=p.completed,this.adapter.visitCompleted(this),this.delegate.visitCompleted(this),this.followRedirect())}fail(){this.state==p.started&&(this.state=p.failed,this.adapter.visitFailed(this))}changeHistory(){var e;if(!this.historyChanged){let t=this.location.href===((e=this.referrer)===null||e===void 0?void 0:e.href)?"replace":this.action,n=this.getHistoryMethodForAction(t);this.history.update(n,this.location,this.restorationIdentifier),this.historyChanged=!0}}issueRequest(){this.hasPreloadedResponse()?this.simulateRequest():this.shouldIssueRequest()&&!this.request&&(this.request=new I(this,h.get,this.location),this.request.perform())}simulateRequest(){this.response&&(this.startRequest(),this.recordResponse(),this.finishRequest())}startRequest(){this.recordTimingMetric(T.requestStart),this.adapter.visitRequestStarted(this)}recordResponse(e=this.response){if(this.response=e,e){let{statusCode:t}=e;le(t)?this.adapter.visitRequestCompleted(this):this.adapter.visitRequestFailedWithStatusCode(this,t)}}finishRequest(){this.recordTimingMetric(T.requestEnd),this.adapter.visitRequestFinished(this)}loadResponse(){if(this.response){let{statusCode:e,responseHTML:t}=this.response;this.render(async()=>{this.cacheSnapshot(),this.view.renderPromise&&await this.view.renderPromise,le(e)&&t!=null?(await this.view.renderPage(b.fromHTMLString(t)),this.adapter.visitRendered(this),this.complete()):(await this.view.renderError(b.fromHTMLString(t)),this.adapter.visitRendered(this),this.fail())})}}getCachedSnapshot(){let e=this.view.getCachedSnapshotForLocation(this.location)||this.getPreloadedSnapshot();if(e&&(!P(this.location)||e.hasAnchor(P(this.location)))&&(this.action=="restore"||e.isPreviewable))return e}getPreloadedSnapshot(){if(this.snapshotHTML)return b.fromHTMLString(this.snapshotHTML)}hasCachedSnapshot(){return this.getCachedSnapshot()!=null}loadCachedSnapshot(){let e=this.getCachedSnapshot();if(e){let t=this.shouldIssueRequest();this.render(async()=>{this.cacheSnapshot(),this.isSamePage?this.adapter.visitRendered(this):(this.view.renderPromise&&await this.view.renderPromise,await this.view.renderPage(e,t),this.adapter.visitRendered(this),t||this.complete())})}}followRedirect(){this.redirectedToLocation&&!this.followedRedirect&&(this.adapter.visitProposedToLocation(this.redirectedToLocation,{action:"replace",response:this.response}),this.followedRedirect=!0)}goToSamePageAnchor(){this.isSamePage&&this.render(async()=>{this.cacheSnapshot(),this.adapter.visitRendered(this)})}requestStarted(){this.startRequest()}requestPreventedHandlingResponse(e,t){}async requestSucceededWithResponse(e,t){let n=await t.responseHTML;n==null?this.recordResponse({statusCode:A.contentTypeMismatch}):(this.redirectedToLocation=t.redirected?t.location:void 0,this.recordResponse({statusCode:t.statusCode,responseHTML:n}))}async requestFailedWithResponse(e,t){let n=await t.responseHTML;n==null?this.recordResponse({statusCode:A.contentTypeMismatch}):this.recordResponse({statusCode:t.statusCode,responseHTML:n})}requestErrored(e,t){this.recordResponse({statusCode:A.networkFailure})}requestFinished(){this.finishRequest()}performScroll(){this.scrolled||(this.action=="restore"?this.scrollToRestoredPosition()||this.scrollToAnchor()||this.view.scrollToTop():this.scrollToAnchor()||this.view.scrollToTop(),this.isSamePage&&this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation,this.location),this.scrolled=!0)}scrollToRestoredPosition(){let{scrollPosition:e}=this.restorationData;if(e)return this.view.scrollToPosition(e),!0}scrollToAnchor(){let e=P(this.location);if(e!=null)return this.view.scrollToAnchor(e),!0}recordTimingMetric(e){this.timingMetrics[e]=new Date().getTime()}getTimingMetrics(){return Object.assign({},this.timingMetrics)}getHistoryMethodForAction(e){switch(e){case"replace":return history.replaceState;case"advance":case"restore":return history.pushState}}hasPreloadedResponse(){return typeof this.response=="object"}shouldIssueRequest(){return this.isSamePage?!1:this.action=="restore"?!this.hasCachedSnapshot():!0}cacheSnapshot(){this.snapshotCached||(this.view.cacheSnapshot(),this.snapshotCached=!0)}async render(e){this.cancelRender(),await new Promise(t=>{this.frame=requestAnimationFrame(()=>t())}),await e(),delete this.frame,this.performScroll()}cancelRender(){this.frame&&(cancelAnimationFrame(this.frame),delete this.frame)}};function le(r){return r>=200&&r<300}var ue=class{constructor(e){this.progressBar=new g,this.showProgressBar=()=>{this.progressBar.show()},this.session=e}visitProposedToLocation(e,t){this.navigator.startVisit(e,k(),t)}visitStarted(e){e.issueRequest(),e.changeHistory(),e.goToSamePageAnchor(),e.loadCachedSnapshot()}visitRequestStarted(e){this.progressBar.setValue(0),e.hasCachedSnapshot()||e.action!="restore"?this.showVisitProgressBarAfterDelay():this.showProgressBar()}visitRequestCompleted(e){e.loadResponse()}visitRequestFailedWithStatusCode(e,t){switch(t){case A.networkFailure:case A.timeoutFailure:case A.contentTypeMismatch:return this.reload();default:return e.loadResponse()}}visitRequestFinished(e){this.progressBar.setValue(1),this.hideVisitProgressBar()}visitCompleted(e){}pageInvalidated(){this.reload()}visitFailed(e){}visitRendered(e){}formSubmissionStarted(e){this.progressBar.setValue(0),this.showFormProgressBarAfterDelay()}formSubmissionFinished(e){this.progressBar.setValue(1),this.hideFormProgressBar()}showVisitProgressBarAfterDelay(){this.visitProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay)}hideVisitProgressBar(){this.progressBar.hide(),this.visitProgressBarTimeout!=null&&(window.clearTimeout(this.visitProgressBarTimeout),delete this.visitProgressBarTimeout)}showFormProgressBarAfterDelay(){this.formProgressBarTimeout==null&&(this.formProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay))}hideFormProgressBar(){this.progressBar.hide(),this.formProgressBarTimeout!=null&&(window.clearTimeout(this.formProgressBarTimeout),delete this.formProgressBarTimeout)}reload(){window.location.reload()}get navigator(){return this.session.navigator}},he=class{constructor(){this.started=!1}start(){this.started||(this.started=!0,addEventListener("turbo:before-cache",this.removeStaleElements,!1))}stop(){this.started&&(this.started=!1,removeEventListener("turbo:before-cache",this.removeStaleElements,!1))}removeStaleElements(){let e=[...document.querySelectorAll('[data-turbo-cache="false"]')];for(let t of e)t.remove()}},de=class{constructor(e){this.started=!1,this.submitCaptured=()=>{removeEventListener("submit",this.submitBubbled,!1),addEventListener("submit",this.submitBubbled,!1)},this.submitBubbled=t=>{if(!t.defaultPrevented){let n=t.target instanceof HTMLFormElement?t.target:void 0,i=t.submitter||void 0;n&&((i==null?void 0:i.getAttribute("formmethod"))||n.method)!="dialog"&&this.delegate.willSubmitForm(n,i)&&(t.preventDefault(),this.delegate.formSubmitted(n,i))}},this.delegate=e}start(){this.started||(addEventListener("submit",this.submitCaptured,!0),this.started=!0)}stop(){this.started&&(removeEventListener("submit",this.submitCaptured,!0),this.started=!1)}},fe=class{constructor(e){this.element=e,this.linkInterceptor=new $(this,e),this.formInterceptor=new K(this,e)}start(){this.linkInterceptor.start(),this.formInterceptor.start()}stop(){this.linkInterceptor.stop(),this.formInterceptor.stop()}shouldInterceptLinkClick(e,t){return this.shouldRedirect(e)}linkClickIntercepted(e,t){let n=this.findFrameElement(e);n&&(n.setAttribute("reloadable",""),n.src=t)}shouldInterceptFormSubmission(e,t){return this.shouldRedirect(e,t)}formSubmissionIntercepted(e,t){let n=this.findFrameElement(e);n&&(n.removeAttribute("reloadable"),n.delegate.formSubmissionIntercepted(e,t))}shouldRedirect(e,t){let n=this.findFrameElement(e);return n?n!=e.closest("turbo-frame"):!1}findFrameElement(e){let t=e.getAttribute("data-turbo-frame");if(t&&t!="_top"){let n=this.element.querySelector(`#${t}:not([disabled])`);if(n instanceof v)return n}}},pe=class{constructor(e){this.restorationIdentifier=k(),this.restorationData={},this.started=!1,this.pageLoaded=!1,this.onPopState=t=>{if(this.shouldHandlePopState()){let{turbo:n}=t.state||{};if(n){this.location=new URL(window.location.href);let{restorationIdentifier:i}=n;this.restorationIdentifier=i,this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location,i)}}},this.onPageLoad=async t=>{await Pt(),this.pageLoaded=!0},this.delegate=e}start(){this.started||(addEventListener("popstate",this.onPopState,!1),addEventListener("load",this.onPageLoad,!1),this.started=!0,this.replace(new URL(window.location.href)))}stop(){this.started&&(removeEventListener("popstate",this.onPopState,!1),removeEventListener("load",this.onPageLoad,!1),this.started=!1)}push(e,t){this.update(history.pushState,e,t)}replace(e,t){this.update(history.replaceState,e,t)}update(e,t,n=k()){let i={turbo:{restorationIdentifier:n}};e.call(history,i,"",t.href),this.location=t,this.restorationIdentifier=n}getRestorationDataForIdentifier(e){return this.restorationData[e]||{}}updateRestorationData(e){let{restorationIdentifier:t}=this,n=this.restorationData[t];this.restorationData[t]=Object.assign(Object.assign({},n),e)}assumeControlOfScrollRestoration(){var e;this.previousScrollRestoration||(this.previousScrollRestoration=(e=history.scrollRestoration)!==null&&e!==void 0?e:"auto",history.scrollRestoration="manual")}relinquishControlOfScrollRestoration(){this.previousScrollRestoration&&(history.scrollRestoration=this.previousScrollRestoration,delete this.previousScrollRestoration)}shouldHandlePopState(){return this.pageIsLoaded()}pageIsLoaded(){return this.pageLoaded||document.readyState=="complete"}},me=class{constructor(e){this.started=!1,this.clickCaptured=()=>{removeEventListener("click",this.clickBubbled,!1),addEventListener("click",this.clickBubbled,!1)},this.clickBubbled=t=>{if(this.clickEventIsSignificant(t)){let n=t.composedPath&&t.composedPath()[0]||t.target,i=this.findLinkFromClickTarget(n);if(i){let s=this.getLocationForLink(i);this.delegate.willFollowLinkToLocation(i,s)&&(t.preventDefault(),this.delegate.followedLinkToLocation(i,s))}}},this.delegate=e}start(){this.started||(addEventListener("click",this.clickCaptured,!0),this.started=!0)}stop(){this.started&&(removeEventListener("click",this.clickCaptured,!0),this.started=!1)}clickEventIsSignificant(e){return!(e.target&&e.target.isContentEditable||e.defaultPrevented||e.which>1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)}findLinkFromClickTarget(e){if(e instanceof Element)return e.closest("a[href]:not([target^=_]):not([download])")}getLocationForLink(e){return m(e.getAttribute("href")||"")}};function ge(r){return r=="advance"||r=="replace"||r=="restore"}var ve=class{constructor(e){this.delegate=e}proposeVisit(e,t={}){this.delegate.allowsVisitingLocationWithAction(e,t.action)&&this.delegate.visitProposedToLocation(e,t)}startVisit(e,t,n={}){this.stop(),this.currentVisit=new ce(this,m(e),t,Object.assign({referrer:this.location},n)),this.currentVisit.start()}submitForm(e,t){this.stop(),this.formSubmission=new U(this,e,t,!0),this.formSubmission.isIdempotent?this.proposeVisit(this.formSubmission.fetchRequest.url,{action:this.getActionForFormSubmission(this.formSubmission)}):this.formSubmission.start()}stop(){this.formSubmission&&(this.formSubmission.stop(),delete this.formSubmission),this.currentVisit&&(this.currentVisit.cancel(),delete this.currentVisit)}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get history(){return this.delegate.history}formSubmissionStarted(e){typeof this.adapter.formSubmissionStarted=="function"&&this.adapter.formSubmissionStarted(e)}async formSubmissionSucceededWithResponse(e,t){if(e==this.formSubmission){let n=await t.responseHTML;if(n){e.method!=h.get&&this.view.clearSnapshotCache();let{statusCode:i}=t,s={response:{statusCode:i,responseHTML:n}};this.proposeVisit(t.location,s)}}}async formSubmissionFailedWithResponse(e,t){let n=await t.responseHTML;if(n){let i=b.fromHTMLString(n);t.serverError?await this.view.renderError(i):await this.view.renderPage(i),this.view.scrollToTop(),this.view.clearSnapshotCache()}}formSubmissionErrored(e,t){console.error(t)}formSubmissionFinished(e){typeof this.adapter.formSubmissionFinished=="function"&&this.adapter.formSubmissionFinished(e)}visitStarted(e){this.delegate.visitStarted(e)}visitCompleted(e){this.delegate.visitCompleted(e)}locationWithActionIsSamePage(e,t){let n=P(e),i=P(this.view.lastRenderedLocation),s=t==="restore"&&typeof n=="undefined";return t!=="replace"&&_(e)===_(this.view.lastRenderedLocation)&&(s||n!=null&&n!==i)}visitScrolledToSamePageLocation(e,t){this.delegate.visitScrolledToSamePageLocation(e,t)}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}getActionForFormSubmission(e){let{formElement:t,submitter:n}=e,i=(n==null?void 0:n.getAttribute("data-turbo-action"))||t.getAttribute("data-turbo-action");return ge(i)?i:"advance"}},y;(function(r){r[r.initial=0]="initial",r[r.loading=1]="loading",r[r.interactive=2]="interactive",r[r.complete=3]="complete"})(y||(y={}));var be=class{constructor(e){this.stage=y.initial,this.started=!1,this.interpretReadyState=()=>{let{readyState:t}=this;t=="interactive"?this.pageIsInteractive():t=="complete"&&this.pageIsComplete()},this.pageWillUnload=()=>{this.delegate.pageWillUnload()},this.delegate=e}start(){this.started||(this.stage==y.initial&&(this.stage=y.loading),document.addEventListener("readystatechange",this.interpretReadyState,!1),addEventListener("pagehide",this.pageWillUnload,!1),this.started=!0)}stop(){this.started&&(document.removeEventListener("readystatechange",this.interpretReadyState,!1),removeEventListener("pagehide",this.pageWillUnload,!1),this.started=!1)}pageIsInteractive(){this.stage==y.loading&&(this.stage=y.interactive,this.delegate.pageBecameInteractive())}pageIsComplete(){this.pageIsInteractive(),this.stage==y.interactive&&(this.stage=y.complete,this.delegate.pageLoaded())}get readyState(){return document.readyState}},ye=class{constructor(e){this.started=!1,this.onScroll=()=>{this.updatePosition({x:window.pageXOffset,y:window.pageYOffset})},this.delegate=e}start(){this.started||(addEventListener("scroll",this.onScroll,!1),this.onScroll(),this.started=!0)}stop(){this.started&&(removeEventListener("scroll",this.onScroll,!1),this.started=!1)}updatePosition(e){this.delegate.scrollPositionChanged(e)}},we=class{constructor(e){this.sources=new Set,this.started=!1,this.inspectFetchResponse=t=>{let n=Wt(t);n&&Ut(n)&&(t.preventDefault(),this.receiveMessageResponse(n))},this.receiveMessageEvent=t=>{this.started&&typeof t.data=="string"&&this.receiveMessageHTML(t.data)},this.delegate=e}start(){this.started||(this.started=!0,addEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}stop(){this.started&&(this.started=!1,removeEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}connectStreamSource(e){this.streamSourceIsConnected(e)||(this.sources.add(e),e.addEventListener("message",this.receiveMessageEvent,!1))}disconnectStreamSource(e){this.streamSourceIsConnected(e)&&(this.sources.delete(e),e.removeEventListener("message",this.receiveMessageEvent,!1))}streamSourceIsConnected(e){return this.sources.has(e)}async receiveMessageResponse(e){let t=await e.responseHTML;t&&this.receiveMessageHTML(t)}receiveMessageHTML(e){this.delegate.receivedMessageFromStream(new L(e))}};function Wt(r){var e;let t=(e=r.detail)===null||e===void 0?void 0:e.fetchResponse;if(t instanceof W)return t}function Ut(r){var e;return((e=r.contentType)!==null&&e!==void 0?e:"").startsWith(L.contentType)}var Ee=class extends N{async render(){this.replaceHeadAndBody(),this.activateScriptElements()}replaceHeadAndBody(){let{documentElement:e,head:t,body:n}=document;e.replaceChild(this.newHead,t),e.replaceChild(this.newElement,n)}activateScriptElements(){for(let e of this.scriptElements){let t=e.parentNode;if(t){let n=this.createScriptElement(e);t.replaceChild(n,e)}}}get newHead(){return this.newSnapshot.headSnapshot.element}get scriptElements(){return[...document.documentElement.querySelectorAll("script")]}},J=class extends N{get shouldRender(){return this.newSnapshot.isVisitable&&this.trackedElementsAreIdentical}prepareToRender(){this.mergeHead()}async render(){this.replaceBody()}finishRendering(){super.finishRendering(),this.isPreview||this.focusFirstAutofocusableElement()}get currentHeadSnapshot(){return this.currentSnapshot.headSnapshot}get newHeadSnapshot(){return this.newSnapshot.headSnapshot}get newElement(){return this.newSnapshot.element}mergeHead(){this.copyNewHeadStylesheetElements(),this.copyNewHeadScriptElements(),this.removeCurrentHeadProvisionalElements(),this.copyNewHeadProvisionalElements()}replaceBody(){this.preservingPermanentElements(()=>{this.activateNewBody(),this.assignNewBody()})}get trackedElementsAreIdentical(){return this.currentHeadSnapshot.trackedElementSignature==this.newHeadSnapshot.trackedElementSignature}copyNewHeadStylesheetElements(){for(let e of this.newHeadStylesheetElements)document.head.appendChild(e)}copyNewHeadScriptElements(){for(let e of this.newHeadScriptElements)document.head.appendChild(this.createScriptElement(e))}removeCurrentHeadProvisionalElements(){for(let e of this.currentHeadProvisionalElements)document.head.removeChild(e)}copyNewHeadProvisionalElements(){for(let e of this.newHeadProvisionalElements)document.head.appendChild(e)}activateNewBody(){document.adoptNode(this.newElement),this.activateNewBodyScriptElements()}activateNewBodyScriptElements(){for(let e of this.newBodyScriptElements){let t=this.createScriptElement(e);e.replaceWith(t)}}assignNewBody(){document.body&&this.newElement instanceof HTMLBodyElement?document.body.replaceWith(this.newElement):document.documentElement.appendChild(this.newElement)}get newHeadStylesheetElements(){return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)}get newHeadScriptElements(){return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)}get currentHeadProvisionalElements(){return this.currentHeadSnapshot.provisionalElements}get newHeadProvisionalElements(){return this.newHeadSnapshot.provisionalElements}get newBodyScriptElements(){return this.newElement.querySelectorAll("script")}},Se=class{constructor(e){this.keys=[],this.snapshots={},this.size=e}has(e){return F(e)in this.snapshots}get(e){if(this.has(e)){let t=this.read(e);return this.touch(e),t}}put(e,t){return this.write(e,t),this.touch(e),t}clear(){this.snapshots={}}read(e){return this.snapshots[F(e)]}write(e,t){this.snapshots[F(e)]=t}touch(e){let t=F(e),n=this.keys.indexOf(t);n>-1&&this.keys.splice(n,1),this.keys.unshift(t),this.trim()}trim(){for(let e of this.keys.splice(this.size))delete this.snapshots[e]}},Ae=class extends z{constructor(){super(...arguments);this.snapshotCache=new Se(10),this.lastRenderedLocation=new URL(location.href)}renderPage(e,t=!1){let n=new J(this.snapshot,e,t);return this.render(n)}renderError(e){let t=new Ee(this.snapshot,e,!1);return this.render(t)}clearSnapshotCache(){this.snapshotCache.clear()}async cacheSnapshot(){if(this.shouldCacheSnapshot){this.delegate.viewWillCacheSnapshot();let{snapshot:e,lastRenderedLocation:t}=this;await At(),this.snapshotCache.put(t,e.clone())}}getCachedSnapshotForLocation(e){return this.snapshotCache.get(e)}get snapshot(){return b.fromElement(this.element)}get shouldCacheSnapshot(){return this.snapshot.isCacheable}},Pe=class{constructor(){this.navigator=new ve(this),this.history=new pe(this),this.view=new Ae(this,document.documentElement),this.adapter=new ue(this),this.pageObserver=new be(this),this.cacheObserver=new he,this.linkClickObserver=new me(this),this.formSubmitObserver=new de(this),this.scrollObserver=new ye(this),this.streamObserver=new we(this),this.frameRedirector=new fe(document.documentElement),this.drive=!0,this.enabled=!0,this.progressBarDelay=500,this.started=!1}start(){this.started||(this.pageObserver.start(),this.cacheObserver.start(),this.linkClickObserver.start(),this.formSubmitObserver.start(),this.scrollObserver.start(),this.streamObserver.start(),this.frameRedirector.start(),this.history.start(),this.started=!0,this.enabled=!0)}disable(){this.enabled=!1}stop(){this.started&&(this.pageObserver.stop(),this.cacheObserver.stop(),this.linkClickObserver.stop(),this.formSubmitObserver.stop(),this.scrollObserver.stop(),this.streamObserver.stop(),this.frameRedirector.stop(),this.history.stop(),this.started=!1)}registerAdapter(e){this.adapter=e}visit(e,t={}){this.navigator.proposeVisit(m(e),t)}connectStreamSource(e){this.streamObserver.connectStreamSource(e)}disconnectStreamSource(e){this.streamObserver.disconnectStreamSource(e)}renderStreamMessage(e){document.documentElement.appendChild(L.wrap(e).fragment)}clearCache(){this.view.clearSnapshotCache()}setProgressBarDelay(e){this.progressBarDelay=e}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}historyPoppedToLocationWithRestorationIdentifier(e,t){this.enabled?this.navigator.startVisit(e,t,{action:"restore",historyChanged:!0}):this.adapter.pageInvalidated()}scrollPositionChanged(e){this.history.updateRestorationData({scrollPosition:e})}willFollowLinkToLocation(e,t){return this.elementDriveEnabled(e)&&this.locationIsVisitable(t)&&this.applicationAllowsFollowingLinkToLocation(e,t)}followedLinkToLocation(e,t){let n=this.getActionForLink(e);this.convertLinkWithMethodClickToFormSubmission(e)||this.visit(t.href,{action:n})}convertLinkWithMethodClickToFormSubmission(e){let t=e.getAttribute("data-turbo-method");if(t){let n=document.createElement("form");return n.method=t,n.action=e.getAttribute("href")||"undefined",document.body.appendChild(n),u("submit",{cancelable:!0,target:n})}else return!1}allowsVisitingLocationWithAction(e,t){return this.locationWithActionIsSamePage(e,t)||this.applicationAllowsVisitingLocation(e)}visitProposedToLocation(e,t){Le(e),this.adapter.visitProposedToLocation(e,t)}visitStarted(e){Le(e.location),e.silent||this.notifyApplicationAfterVisitingLocation(e.location,e.action)}visitCompleted(e){this.notifyApplicationAfterPageLoad(e.getTimingMetrics())}locationWithActionIsSamePage(e,t){return this.navigator.locationWithActionIsSamePage(e,t)}visitScrolledToSamePageLocation(e,t){this.notifyApplicationAfterVisitingSamePageLocation(e,t)}willSubmitForm(e,t){return this.elementDriveEnabled(e)&&this.elementDriveEnabled(t)}formSubmitted(e,t){this.navigator.submitForm(e,t)}pageBecameInteractive(){this.view.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()}pageLoaded(){this.history.assumeControlOfScrollRestoration()}pageWillUnload(){this.history.relinquishControlOfScrollRestoration()}receivedMessageFromStream(e){this.renderStreamMessage(e)}viewWillCacheSnapshot(){var e;((e=this.navigator.currentVisit)===null||e===void 0?void 0:e.silent)||this.notifyApplicationBeforeCachingSnapshot()}allowsImmediateRender({element:e},t){return!this.notifyApplicationBeforeRender(e,t).defaultPrevented}viewRenderedSnapshot(e,t){this.view.lastRenderedLocation=this.history.location,this.notifyApplicationAfterRender()}viewInvalidated(){this.adapter.pageInvalidated()}frameLoaded(e){this.notifyApplicationAfterFrameLoad(e)}frameRendered(e,t){this.notifyApplicationAfterFrameRender(e,t)}applicationAllowsFollowingLinkToLocation(e,t){return!this.notifyApplicationAfterClickingLinkToLocation(e,t).defaultPrevented}applicationAllowsVisitingLocation(e){return!this.notifyApplicationBeforeVisitingLocation(e).defaultPrevented}notifyApplicationAfterClickingLinkToLocation(e,t){return u("turbo:click",{target:e,detail:{url:t.href},cancelable:!0})}notifyApplicationBeforeVisitingLocation(e){return u("turbo:before-visit",{detail:{url:e.href},cancelable:!0})}notifyApplicationAfterVisitingLocation(e,t){return u("turbo:visit",{detail:{url:e.href,action:t}})}notifyApplicationBeforeCachingSnapshot(){return u("turbo:before-cache")}notifyApplicationBeforeRender(e,t){return u("turbo:before-render",{detail:{newBody:e,resume:t},cancelable:!0})}notifyApplicationAfterRender(){return u("turbo:render")}notifyApplicationAfterPageLoad(e={}){return u("turbo:load",{detail:{url:this.location.href,timing:e}})}notifyApplicationAfterVisitingSamePageLocation(e,t){dispatchEvent(new HashChangeEvent("hashchange",{oldURL:e.toString(),newURL:t.toString()}))}notifyApplicationAfterFrameLoad(e){return u("turbo:frame-load",{target:e})}notifyApplicationAfterFrameRender(e,t){return u("turbo:frame-render",{detail:{fetchResponse:e},target:t,cancelable:!0})}elementDriveEnabled(e){let t=e==null?void 0:e.closest("[data-turbo]");return this.drive?t?t.getAttribute("data-turbo")!="false":!0:t?t.getAttribute("data-turbo")=="true":!1}getActionForLink(e){let t=e.getAttribute("data-turbo-action");return ge(t)?t:"advance"}locationIsVisitable(e){return vt(e,this.snapshot.rootLocation)&&gt(e)}get snapshot(){return this.view.snapshot}};function Le(r){Object.defineProperties(r,Kt)}var Kt={absoluteURL:{get(){return this.toString()}}},d=new Pe,{navigator:zt}=d;function Te(){d.start()}function $t(r){d.registerAdapter(r)}function Jt(r,e){d.visit(r,e)}function Gt(r){d.connectStreamSource(r)}function Qt(r){d.disconnectStreamSource(r)}function Xt(r){d.renderStreamMessage(r)}function Yt(){d.clearCache()}function Zt(r){d.setProgressBarDelay(r)}var er=Object.freeze({__proto__:null,navigator:zt,session:d,PageRenderer:J,PageSnapshot:b,start:Te,registerAdapter:$t,visit:Jt,connectStreamSource:Gt,disconnectStreamSource:Qt,renderStreamMessage:Xt,clearCache:Yt,setProgressBarDelay:Zt}),Ce=class{constructor(e){this.resolveVisitPromise=()=>{},this.connected=!1,this.hasBeenLoaded=!1,this.settingSourceURL=!1,this.element=e,this.view=new ie(this,this.element),this.appearanceObserver=new re(this,this.element),this.linkInterceptor=new $(this,this.element),this.formInterceptor=new K(this,this.element)}connect(){this.connected||(this.connected=!0,this.reloadable=!1,this.loadingStyle==w.lazy&&this.appearanceObserver.start(),this.linkInterceptor.start(),this.formInterceptor.start(),this.sourceURLChanged())}disconnect(){this.connected&&(this.connected=!1,this.appearanceObserver.stop(),this.linkInterceptor.stop(),this.formInterceptor.stop())}disabledChanged(){this.loadingStyle==w.eager&&this.loadSourceURL()}sourceURLChanged(){(this.loadingStyle==w.eager||this.hasBeenLoaded)&&this.loadSourceURL()}loadingStyleChanged(){this.loadingStyle==w.lazy?this.appearanceObserver.start():(this.appearanceObserver.stop(),this.loadSourceURL())}async loadSourceURL(){if(!this.settingSourceURL&&this.enabled&&this.isActive&&(this.reloadable||this.sourceURL!=this.currentURL)){let e=this.currentURL;if(this.currentURL=this.sourceURL,this.sourceURL)try{this.element.loaded=this.visit(this.sourceURL),this.appearanceObserver.stop(),await this.element.loaded,this.hasBeenLoaded=!0,d.frameLoaded(this.element)}catch(t){throw this.currentURL=e,t}}}async loadResponse(e){e.redirected&&(this.sourceURL=e.response.url);try{let t=await e.responseHTML;if(t){let{body:n}=ee(t),i=new M(await this.extractForeignFrameElement(n)),s=new oe(this.view.snapshot,i,!1);this.view.renderPromise&&await this.view.renderPromise,await this.view.render(s),d.frameRendered(e,this.element)}}catch(t){console.error(t),this.view.invalidate()}}elementAppearedInViewport(e){this.loadSourceURL()}shouldInterceptLinkClick(e,t){return e.hasAttribute("data-turbo-method")?!1:this.shouldInterceptNavigation(e)}linkClickIntercepted(e,t){this.reloadable=!0,this.navigateFrame(e,t)}shouldInterceptFormSubmission(e,t){return this.shouldInterceptNavigation(e,t)}formSubmissionIntercepted(e,t){if(this.formSubmission&&this.formSubmission.stop(),this.reloadable=!1,this.formSubmission=new U(this,e,t),this.formSubmission.fetchRequest.isIdempotent)this.navigateFrame(e,this.formSubmission.fetchRequest.url.href);else{let{fetchRequest:n}=this.formSubmission;this.prepareHeadersForRequest(n.headers,n),this.formSubmission.start()}}prepareHeadersForRequest(e,t){e["Turbo-Frame"]=this.id}requestStarted(e){this.element.setAttribute("busy","")}requestPreventedHandlingResponse(e,t){this.resolveVisitPromise()}async requestSucceededWithResponse(e,t){await this.loadResponse(t),this.resolveVisitPromise()}requestFailedWithResponse(e,t){console.error(t),this.resolveVisitPromise()}requestErrored(e,t){console.error(t),this.resolveVisitPromise()}requestFinished(e){this.element.removeAttribute("busy")}formSubmissionStarted(e){this.findFrameElement(e.formElement).setAttribute("busy","")}formSubmissionSucceededWithResponse(e,t){this.findFrameElement(e.formElement).delegate.loadResponse(t)}formSubmissionFailedWithResponse(e,t){this.element.delegate.loadResponse(t)}formSubmissionErrored(e,t){console.error(t)}formSubmissionFinished(e){this.findFrameElement(e.formElement).removeAttribute("busy")}allowsImmediateRender(e,t){return!0}viewRenderedSnapshot(e,t){}viewInvalidated(){}async visit(e){let t=new I(this,h.get,m(e));return new Promise(n=>{this.resolveVisitPromise=()=>{this.resolveVisitPromise=()=>{},n()},t.perform()})}navigateFrame(e,t){let n=this.findFrameElement(e);n.src=t}findFrameElement(e){var t;let n=e.getAttribute("data-turbo-frame")||this.element.getAttribute("target");return(t=Oe(n))!==null&&t!==void 0?t:this.element}async extractForeignFrameElement(e){let t,n=CSS.escape(this.id);try{if(t=Re(e.querySelector(`turbo-frame#${n}`),this.currentURL))return t;if(t=Re(e.querySelector(`turbo-frame[src][recurse~=${n}]`),this.currentURL))return await t.loaded,await this.extractForeignFrameElement(t);console.error(`Response has no matching <turbo-frame id="${n}"> element`)}catch(i){console.error(i)}return new v}shouldInterceptNavigation(e,t){let n=e.getAttribute("data-turbo-frame")||this.element.getAttribute("target");if(!this.enabled||n=="_top")return!1;if(n){let i=Oe(n);if(i)return!i.disabled}return!(!d.elementDriveEnabled(e)||t&&!d.elementDriveEnabled(t))}get id(){return this.element.id}get enabled(){return!this.element.disabled}get sourceURL(){if(this.element.src)return this.element.src}get reloadable(){return this.findFrameElement(this.element).hasAttribute("reloadable")}set reloadable(e){let t=this.findFrameElement(this.element);e?t.setAttribute("reloadable",""):t.removeAttribute("reloadable")}set sourceURL(e){this.settingSourceURL=!0,this.element.src=e??null,this.currentURL=this.element.src,this.settingSourceURL=!1}get loadingStyle(){return this.element.loading}get isLoading(){return this.formSubmission!==void 0||this.resolveVisitPromise()!==void 0}get isActive(){return this.element.isActive&&this.connected}};function Oe(r){if(r!=null){let e=document.getElementById(r);if(e instanceof v)return e}}function Re(r,e){if(r){let t=r.getAttribute("src");if(t!=null&&e!=null&&bt(t,e))throw new Error(`Matching <turbo-frame id="${r.id}"> element has a source URL which references itself`);if(r.ownerDocument!==document&&(r=document.importNode(r,!0)),r instanceof v)return r.connectedCallback(),r}}var tr={after(){this.targetElements.forEach(r=>{var e;return(e=r.parentElement)===null||e===void 0?void 0:e.insertBefore(this.templateContent,r.nextSibling)})},append(){this.removeDuplicateTargetChildren(),this.targetElements.forEach(r=>r.append(this.templateContent))},before(){this.targetElements.forEach(r=>{var e;return(e=r.parentElement)===null||e===void 0?void 0:e.insertBefore(this.templateContent,r)})},prepend(){this.removeDuplicateTargetChildren(),this.targetElements.forEach(r=>r.prepend(this.templateContent))},remove(){this.targetElements.forEach(r=>r.remove())},replace(){this.targetElements.forEach(r=>r.replaceWith(this.templateContent))},update(){this.targetElements.forEach(r=>{r.innerHTML="",r.append(this.templateContent)})}},ke=class extends HTMLElement{async connectedCallback(){try{await this.render()}catch(e){console.error(e)}finally{this.disconnect()}}async render(){var e;return(e=this.renderPromise)!==null&&e!==void 0?e:this.renderPromise=(async()=>{this.dispatchEvent(this.beforeRenderEvent)&&(await B(),this.performAction())})()}disconnect(){try{this.remove()}catch(e){}}removeDuplicateTargetChildren(){this.duplicateChildren.forEach(e=>e.remove())}get duplicateChildren(){var e;let t=this.targetElements.flatMap(i=>[...i.children]).filter(i=>!!i.id),n=[...(e=this.templateContent)===null||e===void 0?void 0:e.children].filter(i=>!!i.id).map(i=>i.id);return t.filter(i=>n.includes(i.id))}get performAction(){if(this.action){let e=tr[this.action];if(e)return e;this.raise("unknown action")}this.raise("action attribute is missing")}get targetElements(){if(this.target)return this.targetElementsById;if(this.targets)return this.targetElementsByQuery;this.raise("target or targets attribute is missing")}get templateContent(){return this.templateElement.content.cloneNode(!0)}get templateElement(){if(this.firstElementChild instanceof HTMLTemplateElement)return this.firstElementChild;this.raise("first child element must be a <template> element")}get action(){return this.getAttribute("action")}get target(){return this.getAttribute("target")}get targets(){return this.getAttribute("targets")}raise(e){throw new Error(`${this.description}: ${e}`)}get description(){var e,t;return(t=((e=this.outerHTML.match(/<[^>]+>/))!==null&&e!==void 0?e:[])[0])!==null&&t!==void 0?t:"<turbo-stream>"}get beforeRenderEvent(){return new CustomEvent("turbo:before-stream-render",{bubbles:!0,cancelable:!0})}get targetElementsById(){var e;let t=(e=this.ownerDocument)===null||e===void 0?void 0:e.getElementById(this.target);return t!==null?[t]:[]}get targetElementsByQuery(){var e;let t=(e=this.ownerDocument)===null||e===void 0?void 0:e.querySelectorAll(this.targets);return t.length!==0?Array.prototype.slice.call(t):[]}};v.delegateConstructor=Ce;customElements.define("turbo-frame",v);customElements.define("turbo-stream",ke);(()=>{let r=document.currentScript;if(!!r&&!r.hasAttribute("data-turbo-suppress-warning")){for(;r=r.parentElement;)if(r==document.body)return console.warn(te`
+ You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!
+
+ Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.
+
+ For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements
+
+ ——
+ Suppress this warning by adding a "data-turbo-suppress-warning" attribute to: %s
+ `,r.outerHTML)}})();window.Turbo=er;Te();var Me=function(){function r(e,t,n){this.eventTarget=e,this.eventName=t,this.eventOptions=n,this.unorderedBindings=new Set}return r.prototype.connect=function(){this.eventTarget.addEventListener(this.eventName,this,this.eventOptions)},r.prototype.disconnect=function(){this.eventTarget.removeEventListener(this.eventName,this,this.eventOptions)},r.prototype.bindingConnected=function(e){this.unorderedBindings.add(e)},r.prototype.bindingDisconnected=function(e){this.unorderedBindings.delete(e)},r.prototype.handleEvent=function(e){for(var t=rr(e),n=0,i=this.bindings;n<i.length;n++){var s=i[n];if(t.immediatePropagationStopped)break;s.handleEvent(t)}},Object.defineProperty(r.prototype,"bindings",{get:function(){return Array.from(this.unorderedBindings).sort(function(e,t){var n=e.index,i=t.index;return n<i?-1:n>i?1:0})},enumerable:!1,configurable:!0}),r}();function rr(r){if("immediatePropagationStopped"in r)return r;var e=r.stopImmediatePropagation;return Object.assign(r,{immediatePropagationStopped:!1,stopImmediatePropagation:function(){this.immediatePropagationStopped=!0,e.call(this)}})}var xe=function(){function r(e){this.application=e,this.eventListenerMaps=new Map,this.started=!1}return r.prototype.start=function(){this.started||(this.started=!0,this.eventListeners.forEach(function(e){return e.connect()}))},r.prototype.stop=function(){this.started&&(this.started=!1,this.eventListeners.forEach(function(e){return e.disconnect()}))},Object.defineProperty(r.prototype,"eventListeners",{get:function(){return Array.from(this.eventListenerMaps.values()).reduce(function(e,t){return e.concat(Array.from(t.values()))},[])},enumerable:!1,configurable:!0}),r.prototype.bindingConnected=function(e){this.fetchEventListenerForBinding(e).bindingConnected(e)},r.prototype.bindingDisconnected=function(e){this.fetchEventListenerForBinding(e).bindingDisconnected(e)},r.prototype.handleError=function(e,t,n){n===void 0&&(n={}),this.application.handleError(e,"Error "+t,n)},r.prototype.fetchEventListenerForBinding=function(e){var t=e.eventTarget,n=e.eventName,i=e.eventOptions;return this.fetchEventListener(t,n,i)},r.prototype.fetchEventListener=function(e,t,n){var i=this.fetchEventListenerMapForEventTarget(e),s=this.cacheKey(t,n),o=i.get(s);return o||(o=this.createEventListener(e,t,n),i.set(s,o)),o},r.prototype.createEventListener=function(e,t,n){var i=new Me(e,t,n);return this.started&&i.connect(),i},r.prototype.fetchEventListenerMapForEventTarget=function(e){var t=this.eventListenerMaps.get(e);return t||(t=new Map,this.eventListenerMaps.set(e,t)),t},r.prototype.cacheKey=function(e,t){var n=[e];return Object.keys(t).sort().forEach(function(i){n.push(""+(t[i]?"":"!")+i)}),n.join(":")},r}();var nr=/^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;function Fe(r){var e=r.trim(),t=e.match(nr)||[];return{eventTarget:ir(t[4]),eventName:t[2],eventOptions:t[9]?sr(t[9]):{},identifier:t[5],methodName:t[7]}}function ir(r){if(r=="window")return window;if(r=="document")return document}function sr(r){return r.split(":").reduce(function(e,t){var n;return Object.assign(e,(n={},n[t.replace(/^!/,"")]=!/^!/.test(t),n))},{})}function Be(r){if(r==window)return"window";if(r==document)return"document"}var Ie=function(){function r(e,t,n){this.element=e,this.index=t,this.eventTarget=n.eventTarget||e,this.eventName=n.eventName||or(e)||G("missing event name"),this.eventOptions=n.eventOptions||{},this.identifier=n.identifier||G("missing identifier"),this.methodName=n.methodName||G("missing method name")}return r.forToken=function(e){return new this(e.element,e.index,Fe(e.content))},r.prototype.toString=function(){var e=this.eventTargetName?"@"+this.eventTargetName:"";return""+this.eventName+e+"->"+this.identifier+"#"+this.methodName},Object.defineProperty(r.prototype,"eventTargetName",{get:function(){return Be(this.eventTarget)},enumerable:!1,configurable:!0}),r}();var Ne={a:function(r){return"click"},button:function(r){return"click"},form:function(r){return"submit"},input:function(r){return r.getAttribute("type")=="submit"?"click":"input"},select:function(r){return"change"},textarea:function(r){return"input"}};function or(r){var e=r.tagName.toLowerCase();if(e in Ne)return Ne[e](r)}function G(r){throw new Error(r)}var qe=function(){function r(e,t){this.context=e,this.action=t}return Object.defineProperty(r.prototype,"index",{get:function(){return this.action.index},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"eventTarget",{get:function(){return this.action.eventTarget},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"eventOptions",{get:function(){return this.action.eventOptions},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.context.identifier},enumerable:!1,configurable:!0}),r.prototype.handleEvent=function(e){this.willBeInvokedByEvent(e)&&this.invokeWithEvent(e)},Object.defineProperty(r.prototype,"eventName",{get:function(){return this.action.eventName},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"method",{get:function(){var e=this.controller[this.methodName];if(typeof e=="function")return e;throw new Error('Action "'+this.action+'" references undefined method "'+this.methodName+'"')},enumerable:!1,configurable:!0}),r.prototype.invokeWithEvent=function(e){try{this.method.call(this.controller,e)}catch(l){var t=this,n=t.identifier,i=t.controller,s=t.element,o=t.index,c={identifier:n,controller:i,element:s,index:o,event:e};this.context.handleError(l,'invoking action "'+this.action+'"',c)}},r.prototype.willBeInvokedByEvent=function(e){var t=e.target;return this.element===t?!0:t instanceof Element&&this.element.contains(t)?this.scope.containsElement(t):this.scope.containsElement(this.action.element)},Object.defineProperty(r.prototype,"controller",{get:function(){return this.context.controller},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"methodName",{get:function(){return this.action.methodName},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"scope",{get:function(){return this.context.scope},enumerable:!1,configurable:!0}),r}();var Ve=function(){function r(e,t){var n=this;this.element=e,this.started=!1,this.delegate=t,this.elements=new Set,this.mutationObserver=new MutationObserver(function(i){return n.processMutations(i)})}return r.prototype.start=function(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0,childList:!0,subtree:!0}),this.refresh())},r.prototype.stop=function(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)},r.prototype.refresh=function(){if(this.started){for(var e=new Set(this.matchElementsInTree()),t=0,n=Array.from(this.elements);t<n.length;t++){var i=n[t];e.has(i)||this.removeElement(i)}for(var s=0,o=Array.from(e);s<o.length;s++){var i=o[s];this.addElement(i)}}},r.prototype.processMutations=function(e){if(this.started)for(var t=0,n=e;t<n.length;t++){var i=n[t];this.processMutation(i)}},r.prototype.processMutation=function(e){e.type=="attributes"?this.processAttributeChange(e.target,e.attributeName):e.type=="childList"&&(this.processRemovedNodes(e.removedNodes),this.processAddedNodes(e.addedNodes))},r.prototype.processAttributeChange=function(e,t){var n=e;this.elements.has(n)?this.delegate.elementAttributeChanged&&this.matchElement(n)?this.delegate.elementAttributeChanged(n,t):this.removeElement(n):this.matchElement(n)&&this.addElement(n)},r.prototype.processRemovedNodes=function(e){for(var t=0,n=Array.from(e);t<n.length;t++){var i=n[t],s=this.elementFromNode(i);s&&this.processTree(s,this.removeElement)}},r.prototype.processAddedNodes=function(e){for(var t=0,n=Array.from(e);t<n.length;t++){var i=n[t],s=this.elementFromNode(i);s&&this.elementIsActive(s)&&this.processTree(s,this.addElement)}},r.prototype.matchElement=function(e){return this.delegate.matchElement(e)},r.prototype.matchElementsInTree=function(e){return e===void 0&&(e=this.element),this.delegate.matchElementsInTree(e)},r.prototype.processTree=function(e,t){for(var n=0,i=this.matchElementsInTree(e);n<i.length;n++){var s=i[n];t.call(this,s)}},r.prototype.elementFromNode=function(e){if(e.nodeType==Node.ELEMENT_NODE)return e},r.prototype.elementIsActive=function(e){return e.isConnected!=this.element.isConnected?!1:this.element.contains(e)},r.prototype.addElement=function(e){this.elements.has(e)||this.elementIsActive(e)&&(this.elements.add(e),this.delegate.elementMatched&&this.delegate.elementMatched(e))},r.prototype.removeElement=function(e){this.elements.has(e)&&(this.elements.delete(e),this.delegate.elementUnmatched&&this.delegate.elementUnmatched(e))},r}();var je=function(){function r(e,t,n){this.attributeName=t,this.delegate=n,this.elementObserver=new Ve(e,this)}return Object.defineProperty(r.prototype,"element",{get:function(){return this.elementObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"selector",{get:function(){return"["+this.attributeName+"]"},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.elementObserver.start()},r.prototype.stop=function(){this.elementObserver.stop()},r.prototype.refresh=function(){this.elementObserver.refresh()},Object.defineProperty(r.prototype,"started",{get:function(){return this.elementObserver.started},enumerable:!1,configurable:!0}),r.prototype.matchElement=function(e){return e.hasAttribute(this.attributeName)},r.prototype.matchElementsInTree=function(e){var t=this.matchElement(e)?[e]:[],n=Array.from(e.querySelectorAll(this.selector));return t.concat(n)},r.prototype.elementMatched=function(e){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(e,this.attributeName)},r.prototype.elementUnmatched=function(e){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(e,this.attributeName)},r.prototype.elementAttributeChanged=function(e,t){this.delegate.elementAttributeValueChanged&&this.attributeName==t&&this.delegate.elementAttributeValueChanged(e,t)},r}();var De=function(){function r(e,t){var n=this;this.element=e,this.delegate=t,this.started=!1,this.stringMap=new Map,this.mutationObserver=new MutationObserver(function(i){return n.processMutations(i)})}return r.prototype.start=function(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0}),this.refresh())},r.prototype.stop=function(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)},r.prototype.refresh=function(){if(this.started)for(var e=0,t=this.knownAttributeNames;e<t.length;e++){var n=t[e];this.refreshAttribute(n)}},r.prototype.processMutations=function(e){if(this.started)for(var t=0,n=e;t<n.length;t++){var i=n[t];this.processMutation(i)}},r.prototype.processMutation=function(e){var t=e.attributeName;t&&this.refreshAttribute(t)},r.prototype.refreshAttribute=function(e){var t=this.delegate.getStringMapKeyForAttribute(e);if(t!=null){this.stringMap.has(e)||this.stringMapKeyAdded(t,e);var n=this.element.getAttribute(e);this.stringMap.get(e)!=n&&this.stringMapValueChanged(n,t),n==null?(this.stringMap.delete(e),this.stringMapKeyRemoved(t,e)):this.stringMap.set(e,n)}},r.prototype.stringMapKeyAdded=function(e,t){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,t)},r.prototype.stringMapValueChanged=function(e,t){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,t)},r.prototype.stringMapKeyRemoved=function(e,t){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,t)},Object.defineProperty(r.prototype,"knownAttributeNames",{get:function(){return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)))},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"currentAttributeNames",{get:function(){return Array.from(this.element.attributes).map(function(e){return e.name})},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"recordedAttributeNames",{get:function(){return Array.from(this.stringMap.keys())},enumerable:!1,configurable:!0}),r}();function q(r,e,t){He(r,e).add(t)}function V(r,e,t){He(r,e).delete(t),ar(r,e)}function He(r,e){var t=r.get(e);return t||(t=new Set,r.set(e,t)),t}function ar(r,e){var t=r.get(e);t!=null&&t.size==0&&r.delete(e)}var C=function(){function r(){this.valuesByKey=new Map}return Object.defineProperty(r.prototype,"values",{get:function(){var e=Array.from(this.valuesByKey.values());return e.reduce(function(t,n){return t.concat(Array.from(n))},[])},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"size",{get:function(){var e=Array.from(this.valuesByKey.values());return e.reduce(function(t,n){return t+n.size},0)},enumerable:!1,configurable:!0}),r.prototype.add=function(e,t){q(this.valuesByKey,e,t)},r.prototype.delete=function(e,t){V(this.valuesByKey,e,t)},r.prototype.has=function(e,t){var n=this.valuesByKey.get(e);return n!=null&&n.has(t)},r.prototype.hasKey=function(e){return this.valuesByKey.has(e)},r.prototype.hasValue=function(e){var t=Array.from(this.valuesByKey.values());return t.some(function(n){return n.has(e)})},r.prototype.getValuesForKey=function(e){var t=this.valuesByKey.get(e);return t?Array.from(t):[]},r.prototype.getKeysForValue=function(e){return Array.from(this.valuesByKey).filter(function(t){var n=t[0],i=t[1];return i.has(e)}).map(function(t){var n=t[0],i=t[1];return n})},r}();var cr=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var s in i)i.hasOwnProperty(s)&&(n[s]=i[s])},r(e,t)};return function(e,t){r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),en=function(r){cr(e,r);function e(){var t=r.call(this)||this;return t.keysByValue=new Map,t}return Object.defineProperty(e.prototype,"values",{get:function(){return Array.from(this.keysByValue.keys())},enumerable:!1,configurable:!0}),e.prototype.add=function(t,n){r.prototype.add.call(this,t,n),q(this.keysByValue,n,t)},e.prototype.delete=function(t,n){r.prototype.delete.call(this,t,n),V(this.keysByValue,n,t)},e.prototype.hasValue=function(t){return this.keysByValue.has(t)},e.prototype.getKeysForValue=function(t){var n=this.keysByValue.get(t);return n?Array.from(n):[]},e}(C);var _e=function(){function r(e,t,n){this.attributeObserver=new je(e,t,this),this.delegate=n,this.tokensByElement=new C}return Object.defineProperty(r.prototype,"started",{get:function(){return this.attributeObserver.started},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.attributeObserver.start()},r.prototype.stop=function(){this.attributeObserver.stop()},r.prototype.refresh=function(){this.attributeObserver.refresh()},Object.defineProperty(r.prototype,"element",{get:function(){return this.attributeObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"attributeName",{get:function(){return this.attributeObserver.attributeName},enumerable:!1,configurable:!0}),r.prototype.elementMatchedAttribute=function(e){this.tokensMatched(this.readTokensForElement(e))},r.prototype.elementAttributeValueChanged=function(e){var t=this.refreshTokensForElement(e),n=t[0],i=t[1];this.tokensUnmatched(n),this.tokensMatched(i)},r.prototype.elementUnmatchedAttribute=function(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))},r.prototype.tokensMatched=function(e){var t=this;e.forEach(function(n){return t.tokenMatched(n)})},r.prototype.tokensUnmatched=function(e){var t=this;e.forEach(function(n){return t.tokenUnmatched(n)})},r.prototype.tokenMatched=function(e){this.delegate.tokenMatched(e),this.tokensByElement.add(e.element,e)},r.prototype.tokenUnmatched=function(e){this.delegate.tokenUnmatched(e),this.tokensByElement.delete(e.element,e)},r.prototype.refreshTokensForElement=function(e){var t=this.tokensByElement.getValuesForKey(e),n=this.readTokensForElement(e),i=ur(t,n).findIndex(function(s){var o=s[0],c=s[1];return!hr(o,c)});return i==-1?[[],[]]:[t.slice(i),n.slice(i)]},r.prototype.readTokensForElement=function(e){var t=this.attributeName,n=e.getAttribute(t)||"";return lr(n,e,t)},r}();function lr(r,e,t){return r.trim().split(/\s+/).filter(function(n){return n.length}).map(function(n,i){return{element:e,attributeName:t,content:n,index:i}})}function ur(r,e){var t=Math.max(r.length,e.length);return Array.from({length:t},function(n,i){return[r[i],e[i]]})}function hr(r,e){return r&&e&&r.index==e.index&&r.content==e.content}var j=function(){function r(e,t,n){this.tokenListObserver=new _e(e,t,this),this.delegate=n,this.parseResultsByToken=new WeakMap,this.valuesByTokenByElement=new WeakMap}return Object.defineProperty(r.prototype,"started",{get:function(){return this.tokenListObserver.started},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.tokenListObserver.start()},r.prototype.stop=function(){this.tokenListObserver.stop()},r.prototype.refresh=function(){this.tokenListObserver.refresh()},Object.defineProperty(r.prototype,"element",{get:function(){return this.tokenListObserver.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"attributeName",{get:function(){return this.tokenListObserver.attributeName},enumerable:!1,configurable:!0}),r.prototype.tokenMatched=function(e){var t=e.element,n=this.fetchParseResultForToken(e).value;n&&(this.fetchValuesByTokenForElement(t).set(e,n),this.delegate.elementMatchedValue(t,n))},r.prototype.tokenUnmatched=function(e){var t=e.element,n=this.fetchParseResultForToken(e).value;n&&(this.fetchValuesByTokenForElement(t).delete(e),this.delegate.elementUnmatchedValue(t,n))},r.prototype.fetchParseResultForToken=function(e){var t=this.parseResultsByToken.get(e);return t||(t=this.parseToken(e),this.parseResultsByToken.set(e,t)),t},r.prototype.fetchValuesByTokenForElement=function(e){var t=this.valuesByTokenByElement.get(e);return t||(t=new Map,this.valuesByTokenByElement.set(e,t)),t},r.prototype.parseToken=function(e){try{var t=this.delegate.parseValueForToken(e);return{value:t}}catch(n){return{error:n}}},r}();var We=function(){function r(e,t){this.context=e,this.delegate=t,this.bindingsByAction=new Map}return r.prototype.start=function(){this.valueListObserver||(this.valueListObserver=new j(this.element,this.actionAttribute,this),this.valueListObserver.start())},r.prototype.stop=function(){this.valueListObserver&&(this.valueListObserver.stop(),delete this.valueListObserver,this.disconnectAllActions())},Object.defineProperty(r.prototype,"element",{get:function(){return this.context.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.context.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"actionAttribute",{get:function(){return this.schema.actionAttribute},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"schema",{get:function(){return this.context.schema},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"bindings",{get:function(){return Array.from(this.bindingsByAction.values())},enumerable:!1,configurable:!0}),r.prototype.connectAction=function(e){var t=new qe(this.context,e);this.bindingsByAction.set(e,t),this.delegate.bindingConnected(t)},r.prototype.disconnectAction=function(e){var t=this.bindingsByAction.get(e);t&&(this.bindingsByAction.delete(e),this.delegate.bindingDisconnected(t))},r.prototype.disconnectAllActions=function(){var e=this;this.bindings.forEach(function(t){return e.delegate.bindingDisconnected(t)}),this.bindingsByAction.clear()},r.prototype.parseValueForToken=function(e){var t=Ie.forToken(e);if(t.identifier==this.identifier)return t},r.prototype.elementMatchedValue=function(e,t){this.connectAction(t)},r.prototype.elementUnmatchedValue=function(e,t){this.disconnectAction(t)},r}();var Ue=function(){function r(e,t){this.context=e,this.receiver=t,this.stringMapObserver=new De(this.element,this),this.valueDescriptorMap=this.controller.valueDescriptorMap,this.invokeChangedCallbacksForDefaultValues()}return r.prototype.start=function(){this.stringMapObserver.start()},r.prototype.stop=function(){this.stringMapObserver.stop()},Object.defineProperty(r.prototype,"element",{get:function(){return this.context.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"controller",{get:function(){return this.context.controller},enumerable:!1,configurable:!0}),r.prototype.getStringMapKeyForAttribute=function(e){if(e in this.valueDescriptorMap)return this.valueDescriptorMap[e].name},r.prototype.stringMapValueChanged=function(e,t){this.invokeChangedCallbackForValue(t)},r.prototype.invokeChangedCallbacksForDefaultValues=function(){for(var e=0,t=this.valueDescriptors;e<t.length;e++){var n=t[e],i=n.key,s=n.name,o=n.defaultValue;o!=null&&!this.controller.data.has(i)&&this.invokeChangedCallbackForValue(s)}},r.prototype.invokeChangedCallbackForValue=function(e){var t=e+"Changed",n=this.receiver[t];if(typeof n=="function"){var i=this.receiver[e];n.call(this.receiver,i)}},Object.defineProperty(r.prototype,"valueDescriptors",{get:function(){var e=this.valueDescriptorMap;return Object.keys(e).map(function(t){return e[t]})},enumerable:!1,configurable:!0}),r}();var Q=function(){function r(e,t){this.module=e,this.scope=t,this.controller=new e.controllerConstructor(this),this.bindingObserver=new We(this,this.dispatcher),this.valueObserver=new Ue(this,this.controller);try{this.controller.initialize()}catch(n){this.handleError(n,"initializing controller")}}return r.prototype.connect=function(){this.bindingObserver.start(),this.valueObserver.start();try{this.controller.connect()}catch(e){this.handleError(e,"connecting controller")}},r.prototype.disconnect=function(){try{this.controller.disconnect()}catch(e){this.handleError(e,"disconnecting controller")}this.valueObserver.stop(),this.bindingObserver.stop()},Object.defineProperty(r.prototype,"application",{get:function(){return this.module.application},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.module.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"schema",{get:function(){return this.application.schema},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"dispatcher",{get:function(){return this.application.dispatcher},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"parentElement",{get:function(){return this.element.parentElement},enumerable:!1,configurable:!0}),r.prototype.handleError=function(e,t,n){n===void 0&&(n={});var i=this,s=i.identifier,o=i.controller,c=i.element;n=Object.assign({identifier:s,controller:o,element:c},n),this.application.handleError(e,"Error "+t,n)},r}();function O(r,e){var t=ze(r);return Array.from(t.reduce(function(n,i){return dr(i,e).forEach(function(s){return n.add(s)}),n},new Set))}function Ke(r,e){var t=ze(r);return t.reduce(function(n,i){return n.push.apply(n,fr(i,e)),n},[])}function ze(r){for(var e=[];r;)e.push(r),r=Object.getPrototypeOf(r);return e.reverse()}function dr(r,e){var t=r[e];return Array.isArray(t)?t:[]}function fr(r,e){var t=r[e];return t?Object.keys(t).map(function(n){return[n,t[n]]}):[]}var pr=function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var s in i)i.hasOwnProperty(s)&&(n[s]=i[s])},r(e,t)};return function(e,t){r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),mr=function(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var n=Array(r),i=0,e=0;e<t;e++)for(var s=arguments[e],o=0,c=s.length;o<c;o++,i++)n[i]=s[o];return n};function $e(r){return gr(r,vr(r))}function gr(r,e){var t=Er(r),n=br(r.prototype,e);return Object.defineProperties(t.prototype,n),t}function vr(r){var e=O(r,"blessings");return e.reduce(function(t,n){var i=n(r);for(var s in i){var o=t[s]||{};t[s]=Object.assign(o,i[s])}return t},{})}function br(r,e){return wr(e).reduce(function(t,n){var i,s=yr(r,e,n);return s&&Object.assign(t,(i={},i[n]=s,i)),t},{})}function yr(r,e,t){var n=Object.getOwnPropertyDescriptor(r,t),i=n&&"value"in n;if(!i){var s=Object.getOwnPropertyDescriptor(e,t).value;return n&&(s.get=n.get||s.get,s.set=n.set||s.set),s}}var wr=function(){return typeof Object.getOwnPropertySymbols=="function"?function(r){return mr(Object.getOwnPropertyNames(r),Object.getOwnPropertySymbols(r))}:Object.getOwnPropertyNames}(),Er=function(){function r(t){function n(){var i=this&&this instanceof n?this.constructor:void 0;return Reflect.construct(t,arguments,i)}return n.prototype=Object.create(t.prototype,{constructor:{value:n}}),Reflect.setPrototypeOf(n,t),n}function e(){var t=function(){this.a.call(this)},n=r(t);return n.prototype.a=function(){},new n}try{return e(),r}catch(t){return function(n){return function(i){pr(s,i);function s(){return i!==null&&i.apply(this,arguments)||this}return s}(n)}}}();function Je(r){return{identifier:r.identifier,controllerConstructor:$e(r.controllerConstructor)}}var Ge=function(){function r(e,t){this.application=e,this.definition=Je(t),this.contextsByScope=new WeakMap,this.connectedContexts=new Set}return Object.defineProperty(r.prototype,"identifier",{get:function(){return this.definition.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"controllerConstructor",{get:function(){return this.definition.controllerConstructor},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"contexts",{get:function(){return Array.from(this.connectedContexts)},enumerable:!1,configurable:!0}),r.prototype.connectContextForScope=function(e){var t=this.fetchContextForScope(e);this.connectedContexts.add(t),t.connect()},r.prototype.disconnectContextForScope=function(e){var t=this.contextsByScope.get(e);t&&(this.connectedContexts.delete(t),t.disconnect())},r.prototype.fetchContextForScope=function(e){var t=this.contextsByScope.get(e);return t||(t=new Q(this,e),this.contextsByScope.set(e,t)),t},r}();var Qe=function(){function r(e){this.scope=e}return r.prototype.has=function(e){return this.data.has(this.getDataKey(e))},r.prototype.get=function(e){return this.data.get(this.getDataKey(e))},r.prototype.getAttributeName=function(e){return this.data.getAttributeNameForKey(this.getDataKey(e))},r.prototype.getDataKey=function(e){return e+"-class"},Object.defineProperty(r.prototype,"data",{get:function(){return this.scope.data},enumerable:!1,configurable:!0}),r}();function Xe(r){return r.replace(/(?:[_-])([a-z0-9])/g,function(e,t){return t.toUpperCase()})}function R(r){return r.charAt(0).toUpperCase()+r.slice(1)}function D(r){return r.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()})}var Ye=function(){function r(e){this.scope=e}return Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),r.prototype.get=function(e){var t=this.getAttributeNameForKey(e);return this.element.getAttribute(t)},r.prototype.set=function(e,t){var n=this.getAttributeNameForKey(e);return this.element.setAttribute(n,t),this.get(e)},r.prototype.has=function(e){var t=this.getAttributeNameForKey(e);return this.element.hasAttribute(t)},r.prototype.delete=function(e){if(this.has(e)){var t=this.getAttributeNameForKey(e);return this.element.removeAttribute(t),!0}else return!1},r.prototype.getAttributeNameForKey=function(e){return"data-"+this.identifier+"-"+D(e)},r}();var Ze=function(){function r(e){this.warnedKeysByObject=new WeakMap,this.logger=e}return r.prototype.warn=function(e,t,n){var i=this.warnedKeysByObject.get(e);i||(i=new Set,this.warnedKeysByObject.set(e,i)),i.has(t)||(i.add(t),this.logger.warn(n,e))},r}();function x(r,e){return"["+r+'~="'+e+'"]'}var Sr=function(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var n=Array(r),i=0,e=0;e<t;e++)for(var s=arguments[e],o=0,c=s.length;o<c;o++,i++)n[i]=s[o];return n},et=function(){function r(e){this.scope=e}return Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"schema",{get:function(){return this.scope.schema},enumerable:!1,configurable:!0}),r.prototype.has=function(e){return this.find(e)!=null},r.prototype.find=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return t.reduce(function(i,s){return i||e.findTarget(s)||e.findLegacyTarget(s)},void 0)},r.prototype.findAll=function(){for(var e=this,t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return t.reduce(function(i,s){return Sr(i,e.findAllTargets(s),e.findAllLegacyTargets(s))},[])},r.prototype.findTarget=function(e){var t=this.getSelectorForTargetName(e);return this.scope.findElement(t)},r.prototype.findAllTargets=function(e){var t=this.getSelectorForTargetName(e);return this.scope.findAllElements(t)},r.prototype.getSelectorForTargetName=function(e){var t="data-"+this.identifier+"-target";return x(t,e)},r.prototype.findLegacyTarget=function(e){var t=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(t),e)},r.prototype.findAllLegacyTargets=function(e){var t=this,n=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(n).map(function(i){return t.deprecate(i,e)})},r.prototype.getLegacySelectorForTargetName=function(e){var t=this.identifier+"."+e;return x(this.schema.targetAttribute,t)},r.prototype.deprecate=function(e,t){if(e){var n=this.identifier,i=this.schema.targetAttribute;this.guide.warn(e,"target:"+t,"Please replace "+i+'="'+n+"."+t+'" with data-'+n+'-target="'+t+'". '+("The "+i+" attribute is deprecated and will be removed in a future version of Stimulus."))}return e},Object.defineProperty(r.prototype,"guide",{get:function(){return this.scope.guide},enumerable:!1,configurable:!0}),r}();var Ar=function(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var n=Array(r),i=0,e=0;e<t;e++)for(var s=arguments[e],o=0,c=s.length;o<c;o++,i++)n[i]=s[o];return n},tt=function(){function r(e,t,n,i){var s=this;this.targets=new et(this),this.classes=new Qe(this),this.data=new Ye(this),this.containsElement=function(o){return o.closest(s.controllerSelector)===s.element},this.schema=e,this.element=t,this.identifier=n,this.guide=new Ze(i)}return r.prototype.findElement=function(e){return this.element.matches(e)?this.element:this.queryElements(e).find(this.containsElement)},r.prototype.findAllElements=function(e){return Ar(this.element.matches(e)?[this.element]:[],this.queryElements(e).filter(this.containsElement))},r.prototype.queryElements=function(e){return Array.from(this.element.querySelectorAll(e))},Object.defineProperty(r.prototype,"controllerSelector",{get:function(){return x(this.schema.controllerAttribute,this.identifier)},enumerable:!1,configurable:!0}),r}();var rt=function(){function r(e,t,n){this.element=e,this.schema=t,this.delegate=n,this.valueListObserver=new j(this.element,this.controllerAttribute,this),this.scopesByIdentifierByElement=new WeakMap,this.scopeReferenceCounts=new WeakMap}return r.prototype.start=function(){this.valueListObserver.start()},r.prototype.stop=function(){this.valueListObserver.stop()},Object.defineProperty(r.prototype,"controllerAttribute",{get:function(){return this.schema.controllerAttribute},enumerable:!1,configurable:!0}),r.prototype.parseValueForToken=function(e){var t=e.element,n=e.content,i=this.fetchScopesByIdentifierForElement(t),s=i.get(n);return s||(s=this.delegate.createScopeForElementAndIdentifier(t,n),i.set(n,s)),s},r.prototype.elementMatchedValue=function(e,t){var n=(this.scopeReferenceCounts.get(t)||0)+1;this.scopeReferenceCounts.set(t,n),n==1&&this.delegate.scopeConnected(t)},r.prototype.elementUnmatchedValue=function(e,t){var n=this.scopeReferenceCounts.get(t);n&&(this.scopeReferenceCounts.set(t,n-1),n==1&&this.delegate.scopeDisconnected(t))},r.prototype.fetchScopesByIdentifierForElement=function(e){var t=this.scopesByIdentifierByElement.get(e);return t||(t=new Map,this.scopesByIdentifierByElement.set(e,t)),t},r}();var nt=function(){function r(e){this.application=e,this.scopeObserver=new rt(this.element,this.schema,this),this.scopesByIdentifier=new C,this.modulesByIdentifier=new Map}return Object.defineProperty(r.prototype,"element",{get:function(){return this.application.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"schema",{get:function(){return this.application.schema},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"logger",{get:function(){return this.application.logger},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"controllerAttribute",{get:function(){return this.schema.controllerAttribute},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"modules",{get:function(){return Array.from(this.modulesByIdentifier.values())},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"contexts",{get:function(){return this.modules.reduce(function(e,t){return e.concat(t.contexts)},[])},enumerable:!1,configurable:!0}),r.prototype.start=function(){this.scopeObserver.start()},r.prototype.stop=function(){this.scopeObserver.stop()},r.prototype.loadDefinition=function(e){this.unloadIdentifier(e.identifier);var t=new Ge(this.application,e);this.connectModule(t)},r.prototype.unloadIdentifier=function(e){var t=this.modulesByIdentifier.get(e);t&&this.disconnectModule(t)},r.prototype.getContextForElementAndIdentifier=function(e,t){var n=this.modulesByIdentifier.get(t);if(n)return n.contexts.find(function(i){return i.element==e})},r.prototype.handleError=function(e,t,n){this.application.handleError(e,t,n)},r.prototype.createScopeForElementAndIdentifier=function(e,t){return new tt(this.schema,e,t,this.logger)},r.prototype.scopeConnected=function(e){this.scopesByIdentifier.add(e.identifier,e);var t=this.modulesByIdentifier.get(e.identifier);t&&t.connectContextForScope(e)},r.prototype.scopeDisconnected=function(e){this.scopesByIdentifier.delete(e.identifier,e);var t=this.modulesByIdentifier.get(e.identifier);t&&t.disconnectContextForScope(e)},r.prototype.connectModule=function(e){this.modulesByIdentifier.set(e.identifier,e);var t=this.scopesByIdentifier.getValuesForKey(e.identifier);t.forEach(function(n){return e.connectContextForScope(n)})},r.prototype.disconnectModule=function(e){this.modulesByIdentifier.delete(e.identifier);var t=this.scopesByIdentifier.getValuesForKey(e.identifier);t.forEach(function(n){return e.disconnectContextForScope(n)})},r}();var X={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target"};var Pr=function(r,e,t,n){function i(s){return s instanceof t?s:new t(function(o){o(s)})}return new(t||(t=Promise))(function(s,o){function c(f){try{a(n.next(f))}catch(H){o(H)}}function l(f){try{a(n.throw(f))}catch(H){o(H)}}function a(f){f.done?s(f.value):i(f.value).then(c,l)}a((n=n.apply(r,e||[])).next())})},Lr=function(r,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},n,i,s,o;return o={next:c(0),throw:c(1),return:c(2)},typeof Symbol=="function"&&(o[Symbol.iterator]=function(){return this}),o;function c(a){return function(f){return l([a,f])}}function l(a){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,i&&(s=a[0]&2?i.return:a[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,a[1])).done)return s;switch(i=0,s&&(a=[a[0]&2,s.value]),a[0]){case 0:case 1:s=a;break;case 4:return t.label++,{value:a[1],done:!1};case 5:t.label++,i=a[1],a=[0];continue;case 7:a=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(a[0]===6||a[0]===2)){t=0;continue}if(a[0]===3&&(!s||a[1]>s[0]&&a[1]<s[3])){t.label=a[1];break}if(a[0]===6&&t.label<s[1]){t.label=s[1],s=a;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(a);break}s[2]&&t.ops.pop(),t.trys.pop();continue}a=e.call(r,t)}catch(f){a=[6,f],i=0}finally{n=s=0}if(a[0]&5)throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}},it=function(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var n=Array(r),i=0,e=0;e<t;e++)for(var s=arguments[e],o=0,c=s.length;o<c;o++,i++)n[i]=s[o];return n},Y=function(){function r(e,t){e===void 0&&(e=document.documentElement),t===void 0&&(t=X),this.logger=console,this.element=e,this.schema=t,this.dispatcher=new xe(this),this.router=new nt(this)}return r.start=function(e,t){var n=new r(e,t);return n.start(),n},r.prototype.start=function(){return Pr(this,void 0,void 0,function(){return Lr(this,function(e){switch(e.label){case 0:return[4,Tr()];case 1:return e.sent(),this.dispatcher.start(),this.router.start(),[2]}})})},r.prototype.stop=function(){this.dispatcher.stop(),this.router.stop()},r.prototype.register=function(e,t){this.load({identifier:e,controllerConstructor:t})},r.prototype.load=function(e){for(var t=this,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];var s=Array.isArray(e)?e:it([e],n);s.forEach(function(o){return t.router.loadDefinition(o)})},r.prototype.unload=function(e){for(var t=this,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];var s=Array.isArray(e)?e:it([e],n);s.forEach(function(o){return t.router.unloadIdentifier(o)})},Object.defineProperty(r.prototype,"controllers",{get:function(){return this.router.contexts.map(function(e){return e.controller})},enumerable:!1,configurable:!0}),r.prototype.getControllerForElementAndIdentifier=function(e,t){var n=this.router.getContextForElementAndIdentifier(e,t);return n?n.controller:null},r.prototype.handleError=function(e,t,n){this.logger.error(`%s
+
+%o
+
+%o`,t,e,n)},r}();function Tr(){return new Promise(function(r){document.readyState=="loading"?document.addEventListener("DOMContentLoaded",r):r()})}function st(r){var e=O(r,"classes");return e.reduce(function(t,n){return Object.assign(t,Cr(n))},{})}function Cr(r){var e,t=r+"Class";return e={},e[t]={get:function(){var n=this.classes;if(n.has(r))return n.get(r);var i=n.getAttributeName(r);throw new Error('Missing attribute "'+i+'"')}},e["has"+R(t)]={get:function(){return this.classes.has(r)}},e}function ot(r){var e=O(r,"targets");return e.reduce(function(t,n){return Object.assign(t,Or(n))},{})}function Or(r){var e;return e={},e[r+"Target"]={get:function(){var t=this.targets.find(r);if(t)return t;throw new Error('Missing target element "'+this.identifier+"."+r+'"')}},e[r+"Targets"]={get:function(){return this.targets.findAll(r)}},e["has"+R(r)+"Target"]={get:function(){return this.targets.has(r)}},e}function at(r){var e=Ke(r,"values"),t={valueDescriptorMap:{get:function(){var n=this;return e.reduce(function(i,s){var o,c=ct(s),l=n.data.getAttributeNameForKey(c.key);return Object.assign(i,(o={},o[l]=c,o))},{})}}};return e.reduce(function(n,i){return Object.assign(n,Rr(i))},t)}function Rr(r){var e,t=ct(r),n=t.type,i=t.key,s=t.name,o=Fr[n],c=lt[n]||lt.default;return e={},e[s]={get:function(){var l=this.data.get(i);return l!==null?o(l):t.defaultValue},set:function(l){l===void 0?this.data.delete(i):this.data.set(i,c(l))}},e["has"+R(s)]={get:function(){return this.data.has(i)}},e}function ct(r){var e=r[0],t=r[1],n=kr(t);return Mr(e,n)}function kr(r){switch(r){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}throw new Error('Unknown value type constant "'+r+'"')}function Mr(r,e){var t=D(r)+"-value";return{type:e,key:t,name:Xe(t),get defaultValue(){return xr[e]}}}var xr={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},Fr={array:function(r){var e=JSON.parse(r);if(!Array.isArray(e))throw new TypeError("Expected array");return e},boolean:function(r){return!(r=="0"||r=="false")},number:function(r){return parseFloat(r)},object:function(r){var e=JSON.parse(r);if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError("Expected object");return e},string:function(r){return r}},lt={default:Br,array:ut,object:ut};function ut(r){return JSON.stringify(r)}function Br(r){return""+r}var Ir=function(){function r(e){this.context=e}return Object.defineProperty(r.prototype,"application",{get:function(){return this.context.application},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"scope",{get:function(){return this.context.scope},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"element",{get:function(){return this.scope.element},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"targets",{get:function(){return this.scope.targets},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"classes",{get:function(){return this.scope.classes},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"data",{get:function(){return this.scope.data},enumerable:!1,configurable:!0}),r.prototype.initialize=function(){},r.prototype.connect=function(){},r.prototype.disconnect=function(){},r.blessings=[st,ot,at],r.targets=[],r.values={},r}();var ht=[];var Nr=Y.start();Nr.load(ht);})();
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL0Bob3R3aXJlZC90dXJiby9kaXN0L3R1cmJvLmVzMjAxNy1lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9ldmVudF9saXN0ZW5lci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2Rpc3BhdGNoZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9hY3Rpb25fZGVzY3JpcHRvci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2FjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2JpbmRpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9tdXRhdGlvbi1vYnNlcnZlcnMvc3JjL2VsZW1lbnRfb2JzZXJ2ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9tdXRhdGlvbi1vYnNlcnZlcnMvc3JjL2F0dHJpYnV0ZV9vYnNlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL211dGF0aW9uLW9ic2VydmVycy9zcmMvc3RyaW5nX21hcF9vYnNlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL211bHRpbWFwL3NyYy9zZXRfb3BlcmF0aW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL211bHRpbWFwL3NyYy9tdWx0aW1hcC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL211bHRpbWFwL3NyYy9pbmRleGVkX211bHRpbWFwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvbXV0YXRpb24tb2JzZXJ2ZXJzL3NyYy90b2tlbl9saXN0X29ic2VydmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvbXV0YXRpb24tb2JzZXJ2ZXJzL3NyYy92YWx1ZV9saXN0X29ic2VydmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvYmluZGluZ19vYnNlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL3ZhbHVlX29ic2VydmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvY29udGV4dC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2luaGVyaXRhYmxlX3N0YXRpY3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9ibGVzc2luZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2RlZmluaXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9tb2R1bGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9jbGFzc19tYXAudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9zdHJpbmdfaGVscGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2RhdGFfbWFwLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvZ3VpZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9zZWxlY3RvcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy90YXJnZXRfc2V0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvc2NvcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzdGltdWx1cy9jb3JlL3NyYy9zY29wZV9vYnNlcnZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL3JvdXRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL3NjaGVtYS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2FwcGxpY2F0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvY2xhc3NfcHJvcGVydGllcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL3RhcmdldF9wcm9wZXJ0aWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac3RpbXVsdXMvY29yZS9zcmMvdmFsdWVfcHJvcGVydGllcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHN0aW11bHVzL2NvcmUvc3JjL2NvbnRyb2xsZXIudHMiLCAic3RpbXVsdXNfbnM6L1VzZXJzL2hyZWYvZGV2L2JvdC9hc3NldHMvY29udHJvbGxlcnMiLCAiLi4vc2l0ZS5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLypcblR1cmJvIDcuMC4wLXJjLjJcbkNvcHlyaWdodCBcdTAwQTkgMjAyMSBCYXNlY2FtcCwgTExDXG4gKi9cbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHdpbmRvdy5SZWZsZWN0ID09PSB1bmRlZmluZWQgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBCdWlsdEluSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudDtcbiAgICBjb25zdCB3cmFwcGVyRm9yVGhlTmFtZSA9IHtcbiAgICAgICAgJ0hUTUxFbGVtZW50JzogZnVuY3Rpb24gSFRNTEVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5jb25zdHJ1Y3QoQnVpbHRJbkhUTUxFbGVtZW50LCBbXSwgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHdpbmRvdy5IVE1MRWxlbWVudCA9XG4gICAgICAgIHdyYXBwZXJGb3JUaGVOYW1lWydIVE1MRWxlbWVudCddO1xuICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZSA9IEJ1aWx0SW5IVE1MRWxlbWVudC5wcm90b3R5cGU7XG4gICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSFRNTEVsZW1lbnQ7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEhUTUxFbGVtZW50LCBCdWlsdEluSFRNTEVsZW1lbnQpO1xufSkoKTtcblxuY29uc3Qgc3VibWl0dGVyc0J5Rm9ybSA9IG5ldyBXZWFrTWFwO1xuZnVuY3Rpb24gZmluZFN1Ym1pdHRlckZyb21DbGlja1RhcmdldCh0YXJnZXQpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCA/IHRhcmdldCA6IHRhcmdldCBpbnN0YW5jZW9mIE5vZGUgPyB0YXJnZXQucGFyZW50RWxlbWVudCA6IG51bGw7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gZWxlbWVudCA/IGVsZW1lbnQuY2xvc2VzdChcImlucHV0LCBidXR0b25cIikgOiBudWxsO1xuICAgIHJldHVybiAoY2FuZGlkYXRlID09PSBudWxsIHx8IGNhbmRpZGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FuZGlkYXRlLnR5cGUpID09IFwic3VibWl0XCIgPyBjYW5kaWRhdGUgOiBudWxsO1xufVxuZnVuY3Rpb24gY2xpY2tDYXB0dXJlZChldmVudCkge1xuICAgIGNvbnN0IHN1Ym1pdHRlciA9IGZpbmRTdWJtaXR0ZXJGcm9tQ2xpY2tUYXJnZXQoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoc3VibWl0dGVyICYmIHN1Ym1pdHRlci5mb3JtKSB7XG4gICAgICAgIHN1Ym1pdHRlcnNCeUZvcm0uc2V0KHN1Ym1pdHRlci5mb3JtLCBzdWJtaXR0ZXIpO1xuICAgIH1cbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFwiU3VibWl0RXZlbnRcIiBpbiB3aW5kb3cpXG4gICAgICAgIHJldHVybjtcbiAgICBhZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY2xpY2tDYXB0dXJlZCwgdHJ1ZSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50LnByb3RvdHlwZSwgXCJzdWJtaXR0ZXJcIiwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09IFwic3VibWl0XCIgJiYgdGhpcy50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VibWl0dGVyc0J5Rm9ybS5nZXQodGhpcy50YXJnZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG52YXIgRnJhbWVMb2FkaW5nU3R5bGU7XG4oZnVuY3Rpb24gKEZyYW1lTG9hZGluZ1N0eWxlKSB7XG4gICAgRnJhbWVMb2FkaW5nU3R5bGVbXCJlYWdlclwiXSA9IFwiZWFnZXJcIjtcbiAgICBGcmFtZUxvYWRpbmdTdHlsZVtcImxhenlcIl0gPSBcImxhenlcIjtcbn0pKEZyYW1lTG9hZGluZ1N0eWxlIHx8IChGcmFtZUxvYWRpbmdTdHlsZSA9IHt9KSk7XG5jbGFzcyBGcmFtZUVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBuZXcgRnJhbWVFbGVtZW50LmRlbGVnYXRlQ29uc3RydWN0b3IodGhpcyk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgICAgICByZXR1cm4gW1wiZGlzYWJsZWRcIiwgXCJsb2FkaW5nXCIsIFwic3JjXCJdO1xuICAgIH1cbiAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5jb25uZWN0KCk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gICAgcmVsb2FkKCkge1xuICAgICAgICBjb25zdCB7IHNyYyB9ID0gdGhpcztcbiAgICAgICAgdGhpcy5zcmMgPSBudWxsO1xuICAgICAgICB0aGlzLnNyYyA9IHNyYztcbiAgICB9XG4gICAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUubG9hZGluZ1N0eWxlQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gXCJzcmNcIikge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5zb3VyY2VVUkxDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmRpc2FibGVkQ2hhbmdlZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzcmMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcInNyY1wiKTtcbiAgICB9XG4gICAgc2V0IHNyYyh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwic3JjXCIsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwic3JjXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBsb2FkaW5nKCkge1xuICAgICAgICByZXR1cm4gZnJhbWVMb2FkaW5nU3R5bGVGcm9tU3RyaW5nKHRoaXMuZ2V0QXR0cmlidXRlKFwibG9hZGluZ1wiKSB8fCBcIlwiKTtcbiAgICB9XG4gICAgc2V0IGxvYWRpbmcodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShcImxvYWRpbmdcIiwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoXCJsb2FkaW5nXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7XG4gICAgfVxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBhdXRvc2Nyb2xsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJhdXRvc2Nyb2xsXCIpO1xuICAgIH1cbiAgICBzZXQgYXV0b3Njcm9sbCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYXV0b3Njcm9sbFwiLCBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiYXV0b3Njcm9sbFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgY29tcGxldGUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5kZWxlZ2F0ZS5pc0xvYWRpbmc7XG4gICAgfVxuICAgIGdldCBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudCA9PT0gZG9jdW1lbnQgJiYgIXRoaXMuaXNQcmV2aWV3O1xuICAgIH1cbiAgICBnZXQgaXNQcmV2aWV3KCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5vd25lckRvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZG9jdW1lbnRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaGFzQXR0cmlidXRlKFwiZGF0YS10dXJiby1wcmV2aWV3XCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZyYW1lTG9hZGluZ1N0eWxlRnJvbVN0cmluZyhzdHlsZSkge1xuICAgIHN3aXRjaCAoc3R5bGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlIFwibGF6eVwiOiByZXR1cm4gRnJhbWVMb2FkaW5nU3R5bGUubGF6eTtcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIEZyYW1lTG9hZGluZ1N0eWxlLmVhZ2VyO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZXhwYW5kVVJMKGxvY2F0YWJsZSkge1xuICAgIHJldHVybiBuZXcgVVJMKGxvY2F0YWJsZS50b1N0cmluZygpLCBkb2N1bWVudC5iYXNlVVJJKTtcbn1cbmZ1bmN0aW9uIGdldEFuY2hvcih1cmwpIHtcbiAgICBsZXQgYW5jaG9yTWF0Y2g7XG4gICAgaWYgKHVybC5oYXNoKSB7XG4gICAgICAgIHJldHVybiB1cmwuaGFzaC5zbGljZSgxKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYW5jaG9yTWF0Y2ggPSB1cmwuaHJlZi5tYXRjaCgvIyguKikkLykpIHtcbiAgICAgICAgcmV0dXJuIGFuY2hvck1hdGNoWzFdO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEV4dGVuc2lvbih1cmwpIHtcbiAgICByZXR1cm4gKGdldExhc3RQYXRoQ29tcG9uZW50KHVybCkubWF0Y2goL1xcLlteLl0qJC8pIHx8IFtdKVswXSB8fCBcIlwiO1xufVxuZnVuY3Rpb24gaXNIVE1MKHVybCkge1xuICAgIHJldHVybiAhIWdldEV4dGVuc2lvbih1cmwpLm1hdGNoKC9eKD86fFxcLig/Omh0bXxodG1sfHhodG1sKSkkLyk7XG59XG5mdW5jdGlvbiBpc1ByZWZpeGVkQnkoYmFzZVVSTCwgdXJsKSB7XG4gICAgY29uc3QgcHJlZml4ID0gZ2V0UHJlZml4KHVybCk7XG4gICAgcmV0dXJuIGJhc2VVUkwuaHJlZiA9PT0gZXhwYW5kVVJMKHByZWZpeCkuaHJlZiB8fCBiYXNlVVJMLmhyZWYuc3RhcnRzV2l0aChwcmVmaXgpO1xufVxuZnVuY3Rpb24gZ2V0UmVxdWVzdFVSTCh1cmwpIHtcbiAgICBjb25zdCBhbmNob3IgPSBnZXRBbmNob3IodXJsKTtcbiAgICByZXR1cm4gYW5jaG9yICE9IG51bGxcbiAgICAgICAgPyB1cmwuaHJlZi5zbGljZSgwLCAtKGFuY2hvci5sZW5ndGggKyAxKSlcbiAgICAgICAgOiB1cmwuaHJlZjtcbn1cbmZ1bmN0aW9uIHRvQ2FjaGVLZXkodXJsKSB7XG4gICAgcmV0dXJuIGdldFJlcXVlc3RVUkwodXJsKTtcbn1cbmZ1bmN0aW9uIHVybHNBcmVFcXVhbChsZWZ0LCByaWdodCkge1xuICAgIHJldHVybiBleHBhbmRVUkwobGVmdCkuaHJlZiA9PSBleHBhbmRVUkwocmlnaHQpLmhyZWY7XG59XG5mdW5jdGlvbiBnZXRQYXRoQ29tcG9uZW50cyh1cmwpIHtcbiAgICByZXR1cm4gdXJsLnBhdGhuYW1lLnNwbGl0KFwiL1wiKS5zbGljZSgxKTtcbn1cbmZ1bmN0aW9uIGdldExhc3RQYXRoQ29tcG9uZW50KHVybCkge1xuICAgIHJldHVybiBnZXRQYXRoQ29tcG9uZW50cyh1cmwpLnNsaWNlKC0xKVswXTtcbn1cbmZ1bmN0aW9uIGdldFByZWZpeCh1cmwpIHtcbiAgICByZXR1cm4gYWRkVHJhaWxpbmdTbGFzaCh1cmwub3JpZ2luICsgdXJsLnBhdGhuYW1lKTtcbn1cbmZ1bmN0aW9uIGFkZFRyYWlsaW5nU2xhc2godmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuZW5kc1dpdGgoXCIvXCIpID8gdmFsdWUgOiB2YWx1ZSArIFwiL1wiO1xufVxuXG5jbGFzcyBGZXRjaFJlc3BvbnNlIHtcbiAgICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgfVxuICAgIGdldCBzdWNjZWVkZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm9rO1xuICAgIH1cbiAgICBnZXQgZmFpbGVkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuc3VjY2VlZGVkO1xuICAgIH1cbiAgICBnZXQgY2xpZW50RXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXR1c0NvZGUgPj0gNDAwICYmIHRoaXMuc3RhdHVzQ29kZSA8PSA0OTk7XG4gICAgfVxuICAgIGdldCBzZXJ2ZXJFcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzQ29kZSA+PSA1MDAgJiYgdGhpcy5zdGF0dXNDb2RlIDw9IDU5OTtcbiAgICB9XG4gICAgZ2V0IHJlZGlyZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLnJlZGlyZWN0ZWQ7XG4gICAgfVxuICAgIGdldCBsb2NhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4cGFuZFVSTCh0aGlzLnJlc3BvbnNlLnVybCk7XG4gICAgfVxuICAgIGdldCBpc0hUTUwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRUeXBlICYmIHRoaXMuY29udGVudFR5cGUubWF0Y2goL14oPzp0ZXh0XFwvKFteXFxzOyxdK1xcYik/aHRtbHxhcHBsaWNhdGlvblxcL3hodG1sXFwreG1sKVxcYi8pO1xuICAgIH1cbiAgICBnZXQgc3RhdHVzQ29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2Uuc3RhdHVzO1xuICAgIH1cbiAgICBnZXQgY29udGVudFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcbiAgICB9XG4gICAgZ2V0IHJlc3BvbnNlVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2UudGV4dCgpO1xuICAgIH1cbiAgICBnZXQgcmVzcG9uc2VIVE1MKCkge1xuICAgICAgICBpZiAodGhpcy5pc0hUTUwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoZWFkZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5oZWFkZXJzLmdldChuYW1lKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoKGV2ZW50TmFtZSwgeyB0YXJnZXQsIGNhbmNlbGFibGUsIGRldGFpbCB9ID0ge30pIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudChldmVudE5hbWUsIHsgY2FuY2VsYWJsZSwgYnViYmxlczogdHJ1ZSwgZGV0YWlsIH0pO1xuICAgIHZvaWQgKHRhcmdldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIHJldHVybiBldmVudDtcbn1cbmZ1bmN0aW9uIG5leHRBbmltYXRpb25GcmFtZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcmVzb2x2ZSgpKSk7XG59XG5mdW5jdGlvbiBuZXh0RXZlbnRMb29wVGljaygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgMCkpO1xufVxuZnVuY3Rpb24gbmV4dE1pY3JvdGFzaygpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5mdW5jdGlvbiBwYXJzZUhUTUxEb2N1bWVudChodG1sID0gXCJcIikge1xuICAgIHJldHVybiBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC9odG1sXCIpO1xufVxuZnVuY3Rpb24gdW5pbmRlbnQoc3RyaW5ncywgLi4udmFsdWVzKSB7XG4gICAgY29uc3QgbGluZXMgPSBpbnRlcnBvbGF0ZShzdHJpbmdzLCB2YWx1ZXMpLnJlcGxhY2UoL15cXG4vLCBcIlwiKS5zcGxpdChcIlxcblwiKTtcbiAgICBjb25zdCBtYXRjaCA9IGxpbmVzWzBdLm1hdGNoKC9eXFxzKy8pO1xuICAgIGNvbnN0IGluZGVudCA9IG1hdGNoID8gbWF0Y2hbMF0ubGVuZ3RoIDogMDtcbiAgICByZXR1cm4gbGluZXMubWFwKGxpbmUgPT4gbGluZS5zbGljZShpbmRlbnQpKS5qb2luKFwiXFxuXCIpO1xufVxuZnVuY3Rpb24gaW50ZXJwb2xhdGUoc3RyaW5ncywgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0cmluZ3MucmVkdWNlKChyZXN1bHQsIHN0cmluZywgaSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXSA9PSB1bmRlZmluZWQgPyBcIlwiIDogdmFsdWVzW2ldO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICsgc3RyaW5nICsgdmFsdWU7XG4gICAgfSwgXCJcIik7XG59XG5mdW5jdGlvbiB1dWlkKCkge1xuICAgIHJldHVybiBBcnJheS5hcHBseShudWxsLCB7IGxlbmd0aDogMzYgfSkubWFwKChfLCBpKSA9PiB7XG4gICAgICAgIGlmIChpID09IDggfHwgaSA9PSAxMyB8fCBpID09IDE4IHx8IGkgPT0gMjMpIHtcbiAgICAgICAgICAgIHJldHVybiBcIi1cIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpID09IDE0KSB7XG4gICAgICAgICAgICByZXR1cm4gXCI0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaSA9PSAxOSkge1xuICAgICAgICAgICAgcmV0dXJuIChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KSArIDgpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNSkudG9TdHJpbmcoMTYpO1xuICAgICAgICB9XG4gICAgfSkuam9pbihcIlwiKTtcbn1cblxudmFyIEZldGNoTWV0aG9kO1xuKGZ1bmN0aW9uIChGZXRjaE1ldGhvZCkge1xuICAgIEZldGNoTWV0aG9kW0ZldGNoTWV0aG9kW1wiZ2V0XCJdID0gMF0gPSBcImdldFwiO1xuICAgIEZldGNoTWV0aG9kW0ZldGNoTWV0aG9kW1wicG9zdFwiXSA9IDFdID0gXCJwb3N0XCI7XG4gICAgRmV0Y2hNZXRob2RbRmV0Y2hNZXRob2RbXCJwdXRcIl0gPSAyXSA9IFwicHV0XCI7XG4gICAgRmV0Y2hNZXRob2RbRmV0Y2hNZXRob2RbXCJwYXRjaFwiXSA9IDNdID0gXCJwYXRjaFwiO1xuICAgIEZldGNoTWV0aG9kW0ZldGNoTWV0aG9kW1wiZGVsZXRlXCJdID0gNF0gPSBcImRlbGV0ZVwiO1xufSkoRmV0Y2hNZXRob2QgfHwgKEZldGNoTWV0aG9kID0ge30pKTtcbmZ1bmN0aW9uIGZldGNoTWV0aG9kRnJvbVN0cmluZyhtZXRob2QpIHtcbiAgICBzd2l0Y2ggKG1ldGhvZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgXCJnZXRcIjogcmV0dXJuIEZldGNoTWV0aG9kLmdldDtcbiAgICAgICAgY2FzZSBcInBvc3RcIjogcmV0dXJuIEZldGNoTWV0aG9kLnBvc3Q7XG4gICAgICAgIGNhc2UgXCJwdXRcIjogcmV0dXJuIEZldGNoTWV0aG9kLnB1dDtcbiAgICAgICAgY2FzZSBcInBhdGNoXCI6IHJldHVybiBGZXRjaE1ldGhvZC5wYXRjaDtcbiAgICAgICAgY2FzZSBcImRlbGV0ZVwiOiByZXR1cm4gRmV0Y2hNZXRob2QuZGVsZXRlO1xuICAgIH1cbn1cbmNsYXNzIEZldGNoUmVxdWVzdCB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUsIG1ldGhvZCwgbG9jYXRpb24sIGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcjtcbiAgICAgICAgdGhpcy5yZXNvbHZlUmVxdWVzdFByb21pc2UgPSAodmFsdWUpID0+IHsgfTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgaWYgKHRoaXMuaXNJZGVtcG90ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnVybCA9IG1lcmdlRm9ybURhdGFFbnRyaWVzKGxvY2F0aW9uLCBbLi4uYm9keS5lbnRyaWVzKCldKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICB0aGlzLnVybCA9IGxvY2F0aW9uO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBsb2NhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXJsO1xuICAgIH1cbiAgICBnZXQgcGFyYW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy51cmwuc2VhcmNoUGFyYW1zO1xuICAgIH1cbiAgICBnZXQgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9keSA/IEFycmF5LmZyb20odGhpcy5ib2R5LmVudHJpZXMoKSkgOiBbXTtcbiAgICB9XG4gICAgY2FuY2VsKCkge1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIH1cbiAgICBhc3luYyBwZXJmb3JtKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB7IGZldGNoT3B0aW9ucyB9ID0gdGhpcztcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZWxlZ2F0ZSkucHJlcGFyZUhlYWRlcnNGb3JSZXF1ZXN0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdGhpcy5oZWFkZXJzLCB0aGlzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hbGxvd1JlcXVlc3RUb0JlSW50ZXJjZXB0ZWQoZmV0Y2hPcHRpb25zKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUucmVxdWVzdFN0YXJ0ZWQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMudXJsLmhyZWYsIGZldGNoT3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWNlaXZlKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5uYW1lICE9PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnJlcXVlc3RFcnJvcmVkKHRoaXMsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUucmVxdWVzdEZpbmlzaGVkKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJlY2VpdmUocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgZmV0Y2hSZXNwb25zZSA9IG5ldyBGZXRjaFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBkaXNwYXRjaChcInR1cmJvOmJlZm9yZS1mZXRjaC1yZXNwb25zZVwiLCB7IGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogeyBmZXRjaFJlc3BvbnNlIH0gfSk7XG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnJlcXVlc3RQcmV2ZW50ZWRIYW5kbGluZ1Jlc3BvbnNlKHRoaXMsIGZldGNoUmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZldGNoUmVzcG9uc2Uuc3VjY2VlZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnJlcXVlc3RTdWNjZWVkZWRXaXRoUmVzcG9uc2UodGhpcywgZmV0Y2hSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnJlcXVlc3RGYWlsZWRXaXRoUmVzcG9uc2UodGhpcywgZmV0Y2hSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZldGNoUmVzcG9uc2U7XG4gICAgfVxuICAgIGdldCBmZXRjaE9wdGlvbnMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1ldGhvZDogRmV0Y2hNZXRob2RbdGhpcy5tZXRob2RdLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICBjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgcmVkaXJlY3Q6IFwiZm9sbG93XCIsXG4gICAgICAgICAgICBib2R5OiB0aGlzLmJvZHksXG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgICAgICAgICByZWZlcnJlcjogKF9hID0gdGhpcy5kZWxlZ2F0ZS5yZWZlcnJlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhyZWZcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0IGRlZmF1bHRIZWFkZXJzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJ0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3hodG1sK3htbFwiXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldCBpc0lkZW1wb3RlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZCA9PSBGZXRjaE1ldGhvZC5nZXQ7XG4gICAgfVxuICAgIGdldCBhYm9ydFNpZ25hbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcbiAgICB9XG4gICAgYXN5bmMgYWxsb3dSZXF1ZXN0VG9CZUludGVyY2VwdGVkKGZldGNoT3B0aW9ucykge1xuICAgICAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0aW9uID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB0aGlzLnJlc29sdmVSZXF1ZXN0UHJvbWlzZSA9IHJlc29sdmUpO1xuICAgICAgICBjb25zdCBldmVudCA9IGRpc3BhdGNoKFwidHVyYm86YmVmb3JlLWZldGNoLXJlcXVlc3RcIiwgeyBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHsgZmV0Y2hPcHRpb25zLCB1cmw6IHRoaXMudXJsLmhyZWYsIHJlc3VtZTogdGhpcy5yZXNvbHZlUmVxdWVzdFByb21pc2UgfSB9KTtcbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpXG4gICAgICAgICAgICBhd2FpdCByZXF1ZXN0SW50ZXJjZXB0aW9uO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlRm9ybURhdGFFbnRyaWVzKHVybCwgZW50cmllcykge1xuICAgIGNvbnN0IGN1cnJlbnRTZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHVybC5zZWFyY2gpO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGN1cnJlbnRTZWFyY2hQYXJhbXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBjdXJyZW50U2VhcmNoUGFyYW1zLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBBcHBlYXJhbmNlT2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlLCBlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmludGVyc2VjdCA9IGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFzdEVudHJ5ID0gZW50cmllcy5zbGljZSgtMSlbMF07XG4gICAgICAgICAgICBpZiAobGFzdEVudHJ5ID09PSBudWxsIHx8IGxhc3RFbnRyeSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFzdEVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5lbGVtZW50QXBwZWFyZWRJblZpZXdwb3J0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcih0aGlzLmludGVyc2VjdCk7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci51bm9ic2VydmUodGhpcy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU3RyZWFtTWVzc2FnZSB7XG4gICAgY29uc3RydWN0b3IoaHRtbCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICB9XG4gICAgc3RhdGljIHdyYXAobWVzc2FnZSkge1xuICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGZyYWdtZW50KCkge1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZm9yZWlnbkVsZW1lbnRzKSB7XG4gICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5pbXBvcnROb2RlKGVsZW1lbnQsIHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnJhZ21lbnQ7XG4gICAgfVxuICAgIGdldCBmb3JlaWduRWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlQ2hpbGRyZW4ucmVkdWNlKChzdHJlYW1FbGVtZW50cywgY2hpbGQpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gXCJ0dXJiby1zdHJlYW1cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uc3RyZWFtRWxlbWVudHMsIGNoaWxkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW1FbGVtZW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuICAgIH1cbiAgICBnZXQgdGVtcGxhdGVDaGlsZHJlbigpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50ZW1wbGF0ZUVsZW1lbnQuY29udGVudC5jaGlsZHJlbik7XG4gICAgfVxufVxuU3RyZWFtTWVzc2FnZS5jb250ZW50VHlwZSA9IFwidGV4dC92bmQudHVyYm8tc3RyZWFtLmh0bWxcIjtcblxudmFyIEZvcm1TdWJtaXNzaW9uU3RhdGU7XG4oZnVuY3Rpb24gKEZvcm1TdWJtaXNzaW9uU3RhdGUpIHtcbiAgICBGb3JtU3VibWlzc2lvblN0YXRlW0Zvcm1TdWJtaXNzaW9uU3RhdGVbXCJpbml0aWFsaXplZFwiXSA9IDBdID0gXCJpbml0aWFsaXplZFwiO1xuICAgIEZvcm1TdWJtaXNzaW9uU3RhdGVbRm9ybVN1Ym1pc3Npb25TdGF0ZVtcInJlcXVlc3RpbmdcIl0gPSAxXSA9IFwicmVxdWVzdGluZ1wiO1xuICAgIEZvcm1TdWJtaXNzaW9uU3RhdGVbRm9ybVN1Ym1pc3Npb25TdGF0ZVtcIndhaXRpbmdcIl0gPSAyXSA9IFwid2FpdGluZ1wiO1xuICAgIEZvcm1TdWJtaXNzaW9uU3RhdGVbRm9ybVN1Ym1pc3Npb25TdGF0ZVtcInJlY2VpdmluZ1wiXSA9IDNdID0gXCJyZWNlaXZpbmdcIjtcbiAgICBGb3JtU3VibWlzc2lvblN0YXRlW0Zvcm1TdWJtaXNzaW9uU3RhdGVbXCJzdG9wcGluZ1wiXSA9IDRdID0gXCJzdG9wcGluZ1wiO1xuICAgIEZvcm1TdWJtaXNzaW9uU3RhdGVbRm9ybVN1Ym1pc3Npb25TdGF0ZVtcInN0b3BwZWRcIl0gPSA1XSA9IFwic3RvcHBlZFwiO1xufSkoRm9ybVN1Ym1pc3Npb25TdGF0ZSB8fCAoRm9ybVN1Ym1pc3Npb25TdGF0ZSA9IHt9KSk7XG52YXIgRm9ybUVuY3R5cGU7XG4oZnVuY3Rpb24gKEZvcm1FbmN0eXBlKSB7XG4gICAgRm9ybUVuY3R5cGVbXCJ1cmxFbmNvZGVkXCJdID0gXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIjtcbiAgICBGb3JtRW5jdHlwZVtcIm11bHRpcGFydFwiXSA9IFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiO1xuICAgIEZvcm1FbmN0eXBlW1wicGxhaW5cIl0gPSBcInRleHQvcGxhaW5cIjtcbn0pKEZvcm1FbmN0eXBlIHx8IChGb3JtRW5jdHlwZSA9IHt9KSk7XG5mdW5jdGlvbiBmb3JtRW5jdHlwZUZyb21TdHJpbmcoZW5jb2RpbmcpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSBGb3JtRW5jdHlwZS5tdWx0aXBhcnQ6IHJldHVybiBGb3JtRW5jdHlwZS5tdWx0aXBhcnQ7XG4gICAgICAgIGNhc2UgRm9ybUVuY3R5cGUucGxhaW46IHJldHVybiBGb3JtRW5jdHlwZS5wbGFpbjtcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIEZvcm1FbmN0eXBlLnVybEVuY29kZWQ7XG4gICAgfVxufVxuY2xhc3MgRm9ybVN1Ym1pc3Npb24ge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlLCBmb3JtRWxlbWVudCwgc3VibWl0dGVyLCBtdXN0UmVkaXJlY3QgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gRm9ybVN1Ym1pc3Npb25TdGF0ZS5pbml0aWFsaXplZDtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgICAgICB0aGlzLmZvcm1FbGVtZW50ID0gZm9ybUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuc3VibWl0dGVyID0gc3VibWl0dGVyO1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0gYnVpbGRGb3JtRGF0YShmb3JtRWxlbWVudCwgc3VibWl0dGVyKTtcbiAgICAgICAgdGhpcy5mZXRjaFJlcXVlc3QgPSBuZXcgRmV0Y2hSZXF1ZXN0KHRoaXMsIHRoaXMubWV0aG9kLCB0aGlzLmxvY2F0aW9uLCB0aGlzLmJvZHkpO1xuICAgICAgICB0aGlzLm11c3RSZWRpcmVjdCA9IG11c3RSZWRpcmVjdDtcbiAgICB9XG4gICAgZ2V0IG1ldGhvZCgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtZXRob2QgPSAoKF9hID0gdGhpcy5zdWJtaXR0ZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRBdHRyaWJ1dGUoXCJmb3JtbWV0aG9kXCIpKSB8fCB0aGlzLmZvcm1FbGVtZW50LmdldEF0dHJpYnV0ZShcIm1ldGhvZFwiKSB8fCBcIlwiO1xuICAgICAgICByZXR1cm4gZmV0Y2hNZXRob2RGcm9tU3RyaW5nKG1ldGhvZC50b0xvd2VyQ2FzZSgpKSB8fCBGZXRjaE1ldGhvZC5nZXQ7XG4gICAgfVxuICAgIGdldCBhY3Rpb24oKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgZm9ybUVsZW1lbnRBY3Rpb24gPSB0eXBlb2YgdGhpcy5mb3JtRWxlbWVudC5hY3Rpb24gPT09ICdzdHJpbmcnID8gdGhpcy5mb3JtRWxlbWVudC5hY3Rpb24gOiBudWxsO1xuICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMuc3VibWl0dGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0QXR0cmlidXRlKFwiZm9ybWFjdGlvblwiKSkgfHwgdGhpcy5mb3JtRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIikgfHwgZm9ybUVsZW1lbnRBY3Rpb24gfHwgXCJcIjtcbiAgICB9XG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXhwYW5kVVJMKHRoaXMuYWN0aW9uKTtcbiAgICB9XG4gICAgZ2V0IGJvZHkoKSB7XG4gICAgICAgIGlmICh0aGlzLmVuY3R5cGUgPT0gRm9ybUVuY3R5cGUudXJsRW5jb2RlZCB8fCB0aGlzLm1ldGhvZCA9PSBGZXRjaE1ldGhvZC5nZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHRoaXMuc3RyaW5nRm9ybURhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybURhdGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGVuY3R5cGUoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIGZvcm1FbmN0eXBlRnJvbVN0cmluZygoKF9hID0gdGhpcy5zdWJtaXR0ZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRBdHRyaWJ1dGUoXCJmb3JtZW5jdHlwZVwiKSkgfHwgdGhpcy5mb3JtRWxlbWVudC5lbmN0eXBlKTtcbiAgICB9XG4gICAgZ2V0IGlzSWRlbXBvdGVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hSZXF1ZXN0LmlzSWRlbXBvdGVudDtcbiAgICB9XG4gICAgZ2V0IHN0cmluZ0Zvcm1EYXRhKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZm9ybURhdGFdLnJlZHVjZSgoZW50cmllcywgW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVudHJpZXMuY29uY2F0KHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gW1tuYW1lLCB2YWx1ZV1dIDogW10pO1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuICAgIGFzeW5jIHN0YXJ0KCkge1xuICAgICAgICBjb25zdCB7IGluaXRpYWxpemVkLCByZXF1ZXN0aW5nIH0gPSBGb3JtU3VibWlzc2lvblN0YXRlO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PSBpbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHJlcXVlc3Rpbmc7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mZXRjaFJlcXVlc3QucGVyZm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RvcHBpbmcsIHN0b3BwZWQgfSA9IEZvcm1TdWJtaXNzaW9uU3RhdGU7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9IHN0b3BwaW5nICYmIHRoaXMuc3RhdGUgIT0gc3RvcHBlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHN0b3BwaW5nO1xuICAgICAgICAgICAgdGhpcy5mZXRjaFJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlSGVhZGVyc0ZvclJlcXVlc3QoaGVhZGVycywgcmVxdWVzdCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QuaXNJZGVtcG90ZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IGdldENvb2tpZVZhbHVlKGdldE1ldGFDb250ZW50KFwiY3NyZi1wYXJhbVwiKSkgfHwgZ2V0TWV0YUNvbnRlbnQoXCJjc3JmLXRva2VuXCIpO1xuICAgICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1tcIlgtQ1NSRi1Ub2tlblwiXSA9IHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGVhZGVyc1tcIkFjY2VwdFwiXSA9IFtTdHJlYW1NZXNzYWdlLmNvbnRlbnRUeXBlLCBoZWFkZXJzW1wiQWNjZXB0XCJdXS5qb2luKFwiLCBcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVxdWVzdFN0YXJ0ZWQocmVxdWVzdCkge1xuICAgICAgICB0aGlzLnN0YXRlID0gRm9ybVN1Ym1pc3Npb25TdGF0ZS53YWl0aW5nO1xuICAgICAgICBkaXNwYXRjaChcInR1cmJvOnN1Ym1pdC1zdGFydFwiLCB7IHRhcmdldDogdGhpcy5mb3JtRWxlbWVudCwgZGV0YWlsOiB7IGZvcm1TdWJtaXNzaW9uOiB0aGlzIH0gfSk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuZm9ybVN1Ym1pc3Npb25TdGFydGVkKHRoaXMpO1xuICAgIH1cbiAgICByZXF1ZXN0UHJldmVudGVkSGFuZGxpbmdSZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc3VsdCA9IHsgc3VjY2VzczogcmVzcG9uc2Uuc3VjY2VlZGVkLCBmZXRjaFJlc3BvbnNlOiByZXNwb25zZSB9O1xuICAgIH1cbiAgICByZXF1ZXN0U3VjY2VlZGVkV2l0aFJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5jbGllbnRFcnJvciB8fCByZXNwb25zZS5zZXJ2ZXJFcnJvcikge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5mb3JtU3VibWlzc2lvbkZhaWxlZFdpdGhSZXNwb25zZSh0aGlzLCByZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5yZXF1ZXN0TXVzdFJlZGlyZWN0KHJlcXVlc3QpICYmIHJlc3BvbnNlU3VjY2VlZGVkV2l0aG91dFJlZGlyZWN0KHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJGb3JtIHJlc3BvbnNlcyBtdXN0IHJlZGlyZWN0IHRvIGFub3RoZXIgbG9jYXRpb25cIik7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmZvcm1TdWJtaXNzaW9uRXJyb3JlZCh0aGlzLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gRm9ybVN1Ym1pc3Npb25TdGF0ZS5yZWNlaXZpbmc7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHsgc3VjY2VzczogdHJ1ZSwgZmV0Y2hSZXNwb25zZTogcmVzcG9uc2UgfTtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUuZm9ybVN1Ym1pc3Npb25TdWNjZWVkZWRXaXRoUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3RGYWlsZWRXaXRoUmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yZXN1bHQgPSB7IHN1Y2Nlc3M6IGZhbHNlLCBmZXRjaFJlc3BvbnNlOiByZXNwb25zZSB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZvcm1TdWJtaXNzaW9uRmFpbGVkV2l0aFJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmVxdWVzdEVycm9yZWQocmVxdWVzdCwgZXJyb3IpIHtcbiAgICAgICAgdGhpcy5yZXN1bHQgPSB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZvcm1TdWJtaXNzaW9uRXJyb3JlZCh0aGlzLCBlcnJvcik7XG4gICAgfVxuICAgIHJlcXVlc3RGaW5pc2hlZChyZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBGb3JtU3VibWlzc2lvblN0YXRlLnN0b3BwZWQ7XG4gICAgICAgIGRpc3BhdGNoKFwidHVyYm86c3VibWl0LWVuZFwiLCB7IHRhcmdldDogdGhpcy5mb3JtRWxlbWVudCwgZGV0YWlsOiBPYmplY3QuYXNzaWduKHsgZm9ybVN1Ym1pc3Npb246IHRoaXMgfSwgdGhpcy5yZXN1bHQpIH0pO1xuICAgICAgICB0aGlzLmRlbGVnYXRlLmZvcm1TdWJtaXNzaW9uRmluaXNoZWQodGhpcyk7XG4gICAgfVxuICAgIHJlcXVlc3RNdXN0UmVkaXJlY3QocmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gIXJlcXVlc3QuaXNJZGVtcG90ZW50ICYmIHRoaXMubXVzdFJlZGlyZWN0O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJ1aWxkRm9ybURhdGEoZm9ybUVsZW1lbnQsIHN1Ym1pdHRlcikge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm1FbGVtZW50KTtcbiAgICBjb25zdCBuYW1lID0gc3VibWl0dGVyID09PSBudWxsIHx8IHN1Ym1pdHRlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3VibWl0dGVyLmdldEF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgY29uc3QgdmFsdWUgPSBzdWJtaXR0ZXIgPT09IG51bGwgfHwgc3VibWl0dGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdWJtaXR0ZXIuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG4gICAgaWYgKG5hbWUgJiYgdmFsdWUgIT0gbnVsbCAmJiBmb3JtRGF0YS5nZXQobmFtZSkgIT0gdmFsdWUpIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xufVxuZnVuY3Rpb24gZ2V0Q29va2llVmFsdWUoY29va2llTmFtZSkge1xuICAgIGlmIChjb29raWVOYW1lICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZSA/IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjsgXCIpIDogW107XG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IGNvb2tpZXMuZmluZCgoY29va2llKSA9PiBjb29raWUuc3RhcnRzV2l0aChjb29raWVOYW1lKSk7XG4gICAgICAgIGlmIChjb29raWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29va2llLnNwbGl0KFwiPVwiKS5zbGljZSgxKS5qb2luKFwiPVwiKTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBnZXRNZXRhQ29udGVudChuYW1lKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT1cIiR7bmFtZX1cIl1gKTtcbiAgICByZXR1cm4gZWxlbWVudCAmJiBlbGVtZW50LmNvbnRlbnQ7XG59XG5mdW5jdGlvbiByZXNwb25zZVN1Y2NlZWRlZFdpdGhvdXRSZWRpcmVjdChyZXNwb25zZSkge1xuICAgIHJldHVybiByZXNwb25zZS5zdGF0dXNDb2RlID09IDIwMCAmJiAhcmVzcG9uc2UucmVkaXJlY3RlZDtcbn1cblxuY2xhc3MgU25hcHNob3Qge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB9XG4gICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZWxlbWVudC5jaGlsZHJlbl07XG4gICAgfVxuICAgIGhhc0FuY2hvcihhbmNob3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudEZvckFuY2hvcihhbmNob3IpICE9IG51bGw7XG4gICAgfVxuICAgIGdldEVsZW1lbnRGb3JBbmNob3IoYW5jaG9yKSB7XG4gICAgICAgIHJldHVybiBhbmNob3IgPyB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke2FuY2hvcn0nXSwgYVtuYW1lPScke2FuY2hvcn0nXWApIDogbnVsbDtcbiAgICB9XG4gICAgZ2V0IGlzQ29ubmVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmlzQ29ubmVjdGVkO1xuICAgIH1cbiAgICBnZXQgZmlyc3RBdXRvZm9jdXNhYmxlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiW2F1dG9mb2N1c11cIik7XG4gICAgfVxuICAgIGdldCBwZXJtYW5lbnRFbGVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltpZF1bZGF0YS10dXJiby1wZXJtYW5lbnRdXCIpXTtcbiAgICB9XG4gICAgZ2V0UGVybWFuZW50RWxlbWVudEJ5SWQoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHtpZH1bZGF0YS10dXJiby1wZXJtYW5lbnRdYCk7XG4gICAgfVxuICAgIGdldFBlcm1hbmVudEVsZW1lbnRNYXBGb3JTbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICBjb25zdCBwZXJtYW5lbnRFbGVtZW50TWFwID0ge307XG4gICAgICAgIGZvciAoY29uc3QgY3VycmVudFBlcm1hbmVudEVsZW1lbnQgb2YgdGhpcy5wZXJtYW5lbnRFbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gY3VycmVudFBlcm1hbmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXdQZXJtYW5lbnRFbGVtZW50ID0gc25hcHNob3QuZ2V0UGVybWFuZW50RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICAgICAgaWYgKG5ld1Blcm1hbmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBwZXJtYW5lbnRFbGVtZW50TWFwW2lkXSA9IFtjdXJyZW50UGVybWFuZW50RWxlbWVudCwgbmV3UGVybWFuZW50RWxlbWVudF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBlcm1hbmVudEVsZW1lbnRNYXA7XG4gICAgfVxufVxuXG5jbGFzcyBGb3JtSW50ZXJjZXB0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlLCBlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc3VibWl0QnViYmxlZCA9ICgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1Ym1pdHRlciA9IGV2ZW50LnN1Ym1pdHRlciB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVsZWdhdGUuc2hvdWxkSW50ZXJjZXB0Rm9ybVN1Ym1pc3Npb24oZm9ybSwgc3VibWl0dGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5mb3JtU3VibWlzc2lvbkludGVyY2VwdGVkKGZvcm0sIHN1Ym1pdHRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5zdWJtaXRCdWJibGVkKTtcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgdGhpcy5zdWJtaXRCdWJibGVkKTtcbiAgICB9XG59XG5cbmNsYXNzIFZpZXcge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlLCBlbGVtZW50KSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZVJlbmRlclByb21pc2UgPSAodmFsdWUpID0+IHsgfTtcbiAgICAgICAgdGhpcy5yZXNvbHZlSW50ZXJjZXB0aW9uUHJvbWlzZSA9ICh2YWx1ZSkgPT4geyB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICAgIHNjcm9sbFRvQW5jaG9yKGFuY2hvcikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zbmFwc2hvdC5nZXRFbGVtZW50Rm9yQW5jaG9yKGFuY2hvcik7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1Bvc2l0aW9uKHsgeDogMCwgeTogMCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzY3JvbGxUb0FuY2hvckZyb21Mb2NhdGlvbihsb2NhdGlvbikge1xuICAgICAgICB0aGlzLnNjcm9sbFRvQW5jaG9yKGdldEFuY2hvcihsb2NhdGlvbikpO1xuICAgIH1cbiAgICBzY3JvbGxUb0VsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgfVxuICAgIGZvY3VzRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShcInRhYmluZGV4XCIpKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInRhYmluZGV4XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHNjcm9sbFRvUG9zaXRpb24oeyB4LCB5IH0pIHtcbiAgICAgICAgdGhpcy5zY3JvbGxSb290LnNjcm9sbFRvKHgsIHkpO1xuICAgIH1cbiAgICBzY3JvbGxUb1RvcCgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb1Bvc2l0aW9uKHsgeDogMCwgeTogMCB9KTtcbiAgICB9XG4gICAgZ2V0IHNjcm9sbFJvb3QoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuICAgIGFzeW5jIHJlbmRlcihyZW5kZXJlcikge1xuICAgICAgICBjb25zdCB7IGlzUHJldmlldywgc2hvdWxkUmVuZGVyLCBuZXdTbmFwc2hvdDogc25hcHNob3QgfSA9IHJlbmRlcmVyO1xuICAgICAgICBpZiAoc2hvdWxkUmVuZGVyKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gdGhpcy5yZXNvbHZlUmVuZGVyUHJvbWlzZSA9IHJlc29sdmUpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVUb1JlbmRlclNuYXBzaG90KHJlbmRlcmVyKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJJbnRlcmNlcHRpb24gPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHRoaXMucmVzb2x2ZUludGVyY2VwdGlvblByb21pc2UgPSByZXNvbHZlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbW1lZGlhdGVSZW5kZXIgPSB0aGlzLmRlbGVnYXRlLmFsbG93c0ltbWVkaWF0ZVJlbmRlcihzbmFwc2hvdCwgdGhpcy5yZXNvbHZlSW50ZXJjZXB0aW9uUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGVSZW5kZXIpXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlbmRlckludGVyY2VwdGlvbjtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclNuYXBzaG90KHJlbmRlcmVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnZpZXdSZW5kZXJlZFNuYXBzaG90KHNuYXBzaG90LCBpc1ByZXZpZXcpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoUmVuZGVyaW5nU25hcHNob3QocmVuZGVyZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVuZGVyZXI7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlUmVuZGVyUHJvbWlzZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlbmRlclByb21pc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnZhbGlkYXRlKCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnZpZXdJbnZhbGlkYXRlZCgpO1xuICAgIH1cbiAgICBwcmVwYXJlVG9SZW5kZXJTbmFwc2hvdChyZW5kZXJlcikge1xuICAgICAgICB0aGlzLm1hcmtBc1ByZXZpZXcocmVuZGVyZXIuaXNQcmV2aWV3KTtcbiAgICAgICAgcmVuZGVyZXIucHJlcGFyZVRvUmVuZGVyKCk7XG4gICAgfVxuICAgIG1hcmtBc1ByZXZpZXcoaXNQcmV2aWV3KSB7XG4gICAgICAgIGlmIChpc1ByZXZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLXByZXZpZXdcIiwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS10dXJiby1wcmV2aWV3XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJlbmRlclNuYXBzaG90KHJlbmRlcmVyKSB7XG4gICAgICAgIGF3YWl0IHJlbmRlcmVyLnJlbmRlcigpO1xuICAgIH1cbiAgICBmaW5pc2hSZW5kZXJpbmdTbmFwc2hvdChyZW5kZXJlcikge1xuICAgICAgICByZW5kZXJlci5maW5pc2hSZW5kZXJpbmcoKTtcbiAgICB9XG59XG5cbmNsYXNzIEZyYW1lVmlldyBleHRlbmRzIFZpZXcge1xuICAgIGludmFsaWRhdGUoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH1cbiAgICBnZXQgc25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU25hcHNob3QodGhpcy5lbGVtZW50KTtcbiAgICB9XG59XG5cbmNsYXNzIExpbmtJbnRlcmNlcHRvciB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUsIGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5jbGlja0J1YmJsZWQgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbmRzVG9FdmVudFRhcmdldChldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGlja0V2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jbGlja0V2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxpbmtDbGlja2VkID0gKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xpY2tFdmVudCAmJiB0aGlzLnJlc3BvbmRzVG9FdmVudFRhcmdldChldmVudC50YXJnZXQpICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZS5zaG91bGRJbnRlcmNlcHRMaW5rQ2xpY2soZXZlbnQudGFyZ2V0LCBldmVudC5kZXRhaWwudXJsKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaWNrRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5saW5rQ2xpY2tJbnRlcmNlcHRlZChldmVudC50YXJnZXQsIGV2ZW50LmRldGFpbC51cmwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNsaWNrRXZlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLndpbGxWaXNpdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNsaWNrRXZlbnQ7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5jbGlja0J1YmJsZWQpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidHVyYm86Y2xpY2tcIiwgdGhpcy5saW5rQ2xpY2tlZCk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0dXJibzpiZWZvcmUtdmlzaXRcIiwgdGhpcy53aWxsVmlzaXQpO1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuY2xpY2tCdWJibGVkKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInR1cmJvOmNsaWNrXCIsIHRoaXMubGlua0NsaWNrZWQpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidHVyYm86YmVmb3JlLXZpc2l0XCIsIHRoaXMud2lsbFZpc2l0KTtcbiAgICB9XG4gICAgcmVzcG9uZHNUb0V2ZW50VGFyZ2V0KHRhcmdldCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudFxuICAgICAgICAgICAgPyB0YXJnZXRcbiAgICAgICAgICAgIDogdGFyZ2V0IGluc3RhbmNlb2YgTm9kZVxuICAgICAgICAgICAgICAgID8gdGFyZ2V0LnBhcmVudEVsZW1lbnRcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIHJldHVybiBlbGVtZW50ICYmIGVsZW1lbnQuY2xvc2VzdChcInR1cmJvLWZyYW1lLCBodG1sXCIpID09IHRoaXMuZWxlbWVudDtcbiAgICB9XG59XG5cbmNsYXNzIEJhcmRvIHtcbiAgICBjb25zdHJ1Y3RvcihwZXJtYW5lbnRFbGVtZW50TWFwKSB7XG4gICAgICAgIHRoaXMucGVybWFuZW50RWxlbWVudE1hcCA9IHBlcm1hbmVudEVsZW1lbnRNYXA7XG4gICAgfVxuICAgIHN0YXRpYyBwcmVzZXJ2aW5nUGVybWFuZW50RWxlbWVudHMocGVybWFuZW50RWxlbWVudE1hcCwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgYmFyZG8gPSBuZXcgdGhpcyhwZXJtYW5lbnRFbGVtZW50TWFwKTtcbiAgICAgICAgYmFyZG8uZW50ZXIoKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgYmFyZG8ubGVhdmUoKTtcbiAgICB9XG4gICAgZW50ZXIoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5wZXJtYW5lbnRFbGVtZW50TWFwKSB7XG4gICAgICAgICAgICBjb25zdCBbLCBuZXdQZXJtYW5lbnRFbGVtZW50XSA9IHRoaXMucGVybWFuZW50RWxlbWVudE1hcFtpZF07XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VOZXdQZXJtYW5lbnRFbGVtZW50V2l0aFBsYWNlaG9sZGVyKG5ld1Blcm1hbmVudEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxlYXZlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMucGVybWFuZW50RWxlbWVudE1hcCkge1xuICAgICAgICAgICAgY29uc3QgW2N1cnJlbnRQZXJtYW5lbnRFbGVtZW50XSA9IHRoaXMucGVybWFuZW50RWxlbWVudE1hcFtpZF07XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDdXJyZW50UGVybWFuZW50RWxlbWVudFdpdGhDbG9uZShjdXJyZW50UGVybWFuZW50RWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcldpdGhQZXJtYW5lbnRFbGVtZW50KGN1cnJlbnRQZXJtYW5lbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXBsYWNlTmV3UGVybWFuZW50RWxlbWVudFdpdGhQbGFjZWhvbGRlcihwZXJtYW5lbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gY3JlYXRlUGxhY2Vob2xkZXJGb3JQZXJtYW5lbnRFbGVtZW50KHBlcm1hbmVudEVsZW1lbnQpO1xuICAgICAgICBwZXJtYW5lbnRFbGVtZW50LnJlcGxhY2VXaXRoKHBsYWNlaG9sZGVyKTtcbiAgICB9XG4gICAgcmVwbGFjZUN1cnJlbnRQZXJtYW5lbnRFbGVtZW50V2l0aENsb25lKHBlcm1hbmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBwZXJtYW5lbnRFbGVtZW50LmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgcGVybWFuZW50RWxlbWVudC5yZXBsYWNlV2l0aChjbG9uZSk7XG4gICAgfVxuICAgIHJlcGxhY2VQbGFjZWhvbGRlcldpdGhQZXJtYW5lbnRFbGVtZW50KHBlcm1hbmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyQnlJZChwZXJtYW5lbnRFbGVtZW50LmlkKTtcbiAgICAgICAgcGxhY2Vob2xkZXIgPT09IG51bGwgfHwgcGxhY2Vob2xkZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBsYWNlaG9sZGVyLnJlcGxhY2VXaXRoKHBlcm1hbmVudEVsZW1lbnQpO1xuICAgIH1cbiAgICBnZXRQbGFjZWhvbGRlckJ5SWQoaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXJzLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmNvbnRlbnQgPT0gaWQpO1xuICAgIH1cbiAgICBnZXQgcGxhY2Vob2xkZXJzKCkge1xuICAgICAgICByZXR1cm4gWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJtZXRhW25hbWU9dHVyYm8tcGVybWFuZW50LXBsYWNlaG9sZGVyXVtjb250ZW50XVwiKV07XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlUGxhY2Vob2xkZXJGb3JQZXJtYW5lbnRFbGVtZW50KHBlcm1hbmVudEVsZW1lbnQpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1ldGFcIik7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidHVyYm8tcGVybWFuZW50LXBsYWNlaG9sZGVyXCIpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY29udGVudFwiLCBwZXJtYW5lbnRFbGVtZW50LmlkKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbn1cblxuY2xhc3MgUmVuZGVyZXIge1xuICAgIGNvbnN0cnVjdG9yKGN1cnJlbnRTbmFwc2hvdCwgbmV3U25hcHNob3QsIGlzUHJldmlldykge1xuICAgICAgICB0aGlzLmN1cnJlbnRTbmFwc2hvdCA9IGN1cnJlbnRTbmFwc2hvdDtcbiAgICAgICAgdGhpcy5uZXdTbmFwc2hvdCA9IG5ld1NuYXBzaG90O1xuICAgICAgICB0aGlzLmlzUHJldmlldyA9IGlzUHJldmlldztcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5yZXNvbHZpbmdGdW5jdGlvbnMgPSB7IHJlc29sdmUsIHJlamVjdCB9KTtcbiAgICB9XG4gICAgZ2V0IHNob3VsZFJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHByZXBhcmVUb1JlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaW5pc2hSZW5kZXJpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlc29sdmluZ0Z1bmN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZpbmdGdW5jdGlvbnMucmVzb2x2ZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVzb2x2aW5nRnVuY3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZVNjcmlwdEVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLWV2YWxcIikgPT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRTY3JpcHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNzcE5vbmNlKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZFNjcmlwdEVsZW1lbnQubm9uY2UgPSB0aGlzLmNzcE5vbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3JlYXRlZFNjcmlwdEVsZW1lbnQudGV4dENvbnRlbnQgPSBlbGVtZW50LnRleHRDb250ZW50O1xuICAgICAgICAgICAgY3JlYXRlZFNjcmlwdEVsZW1lbnQuYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvcHlFbGVtZW50QXR0cmlidXRlcyhjcmVhdGVkU2NyaXB0RWxlbWVudCwgZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlZFNjcmlwdEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJlc2VydmluZ1Blcm1hbmVudEVsZW1lbnRzKGNhbGxiYWNrKSB7XG4gICAgICAgIEJhcmRvLnByZXNlcnZpbmdQZXJtYW5lbnRFbGVtZW50cyh0aGlzLnBlcm1hbmVudEVsZW1lbnRNYXAsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgZm9jdXNGaXJzdEF1dG9mb2N1c2FibGVFbGVtZW50KCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jb25uZWN0ZWRTbmFwc2hvdC5maXJzdEF1dG9mb2N1c2FibGVFbGVtZW50O1xuICAgICAgICBpZiAoZWxlbWVudElzRm9jdXNhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGNvbm5lY3RlZFNuYXBzaG90KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdTbmFwc2hvdC5pc0Nvbm5lY3RlZCA/IHRoaXMubmV3U25hcHNob3QgOiB0aGlzLmN1cnJlbnRTbmFwc2hvdDtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U25hcHNob3QuZWxlbWVudDtcbiAgICB9XG4gICAgZ2V0IG5ld0VsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ld1NuYXBzaG90LmVsZW1lbnQ7XG4gICAgfVxuICAgIGdldCBwZXJtYW5lbnRFbGVtZW50TWFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U25hcHNob3QuZ2V0UGVybWFuZW50RWxlbWVudE1hcEZvclNuYXBzaG90KHRoaXMubmV3U25hcHNob3QpO1xuICAgIH1cbiAgICBnZXQgY3NwTm9uY2UoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiY3NwLW5vbmNlXCJdJykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNvcHlFbGVtZW50QXR0cmlidXRlcyhkZXN0aW5hdGlvbkVsZW1lbnQsIHNvdXJjZUVsZW1lbnQpIHtcbiAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiBbLi4uc291cmNlRWxlbWVudC5hdHRyaWJ1dGVzXSkge1xuICAgICAgICBkZXN0aW5hdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbGVtZW50SXNGb2N1c2FibGUoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmZvY3VzID09IFwiZnVuY3Rpb25cIjtcbn1cblxuY2xhc3MgRnJhbWVSZW5kZXJlciBleHRlbmRzIFJlbmRlcmVyIHtcbiAgICBnZXQgc2hvdWxkUmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXN5bmMgcmVuZGVyKCkge1xuICAgICAgICBhd2FpdCBuZXh0QW5pbWF0aW9uRnJhbWUoKTtcbiAgICAgICAgdGhpcy5wcmVzZXJ2aW5nUGVybWFuZW50RWxlbWVudHMoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkRnJhbWVFbGVtZW50KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNjcm9sbEZyYW1lSW50b1ZpZXcoKTtcbiAgICAgICAgYXdhaXQgbmV4dEFuaW1hdGlvbkZyYW1lKCk7XG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdEF1dG9mb2N1c2FibGVFbGVtZW50KCk7XG4gICAgICAgIGF3YWl0IG5leHRBbmltYXRpb25GcmFtZSgpO1xuICAgICAgICB0aGlzLmFjdGl2YXRlU2NyaXB0RWxlbWVudHMoKTtcbiAgICB9XG4gICAgbG9hZEZyYW1lRWxlbWVudCgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBkZXN0aW5hdGlvblJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgZGVzdGluYXRpb25SYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5jdXJyZW50RWxlbWVudCk7XG4gICAgICAgIGRlc3RpbmF0aW9uUmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgICAgY29uc3QgZnJhbWVFbGVtZW50ID0gdGhpcy5uZXdFbGVtZW50O1xuICAgICAgICBjb25zdCBzb3VyY2VSYW5nZSA9IChfYSA9IGZyYW1lRWxlbWVudC5vd25lckRvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgaWYgKHNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgICBzb3VyY2VSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZnJhbWVFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoc291cmNlUmFuZ2UuZXh0cmFjdENvbnRlbnRzKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNjcm9sbEZyYW1lSW50b1ZpZXcoKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRFbGVtZW50LmF1dG9zY3JvbGwgfHwgdGhpcy5uZXdFbGVtZW50LmF1dG9zY3JvbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmN1cnJlbnRFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSByZWFkU2Nyb2xsTG9naWNhbFBvc2l0aW9uKHRoaXMuY3VycmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1hdXRvc2Nyb2xsLWJsb2NrXCIpLCBcImVuZFwiKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYWN0aXZhdGVTY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpbmVydFNjcmlwdEVsZW1lbnQgb2YgdGhpcy5uZXdTY3JpcHRFbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZhdGVkU2NyaXB0RWxlbWVudCA9IHRoaXMuY3JlYXRlU2NyaXB0RWxlbWVudChpbmVydFNjcmlwdEVsZW1lbnQpO1xuICAgICAgICAgICAgaW5lcnRTY3JpcHRFbGVtZW50LnJlcGxhY2VXaXRoKGFjdGl2YXRlZFNjcmlwdEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBuZXdTY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInNjcmlwdFwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZWFkU2Nyb2xsTG9naWNhbFBvc2l0aW9uKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJlbmRcIiB8fCB2YWx1ZSA9PSBcInN0YXJ0XCIgfHwgdmFsdWUgPT0gXCJjZW50ZXJcIiB8fCB2YWx1ZSA9PSBcIm5lYXJlc3RcIikge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbn1cblxuY2xhc3MgUHJvZ3Jlc3NCYXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmhpZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudHJpY2tsZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSArIE1hdGgucmFuZG9tKCkgLyAxMDApO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnN0eWxlc2hlZXRFbGVtZW50ID0gdGhpcy5jcmVhdGVTdHlsZXNoZWV0RWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb2dyZXNzRWxlbWVudCA9IHRoaXMuY3JlYXRlUHJvZ3Jlc3NFbGVtZW50KCk7XG4gICAgICAgIHRoaXMuaW5zdGFsbFN0eWxlc2hlZXRFbGVtZW50KCk7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoMCk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgZGVmYXVsdENTUygpIHtcbiAgICAgICAgcmV0dXJuIHVuaW5kZW50IGBcbiAgICAgIC50dXJiby1wcm9ncmVzcy1iYXIge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGhlaWdodDogM3B4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3NmZmO1xuICAgICAgICB6LWluZGV4OiA5OTk5O1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIHdpZHRoICR7UHJvZ3Jlc3NCYXIuYW5pbWF0aW9uRHVyYXRpb259bXMgZWFzZS1vdXQsXG4gICAgICAgICAgb3BhY2l0eSAke1Byb2dyZXNzQmFyLmFuaW1hdGlvbkR1cmF0aW9uIC8gMn1tcyAke1Byb2dyZXNzQmFyLmFuaW1hdGlvbkR1cmF0aW9uIC8gMn1tcyBlYXNlLWluO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICAgICAgfVxuICAgIGA7XG4gICAgfVxuICAgIHNob3coKSB7XG4gICAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pbnN0YWxsUHJvZ3Jlc3NFbGVtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0VHJpY2tsaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGlkZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZSAmJiAhdGhpcy5oaWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZmFkZVByb2dyZXNzRWxlbWVudCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51bmluc3RhbGxQcm9ncmVzc0VsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BUcmlja2xpbmcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0VmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gICAgaW5zdGFsbFN0eWxlc2hlZXRFbGVtZW50KCkge1xuICAgICAgICBkb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZSh0aGlzLnN0eWxlc2hlZXRFbGVtZW50LCBkb2N1bWVudC5oZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICBpbnN0YWxsUHJvZ3Jlc3NFbGVtZW50KCkge1xuICAgICAgICB0aGlzLnByb2dyZXNzRWxlbWVudC5zdHlsZS53aWR0aCA9IFwiMFwiO1xuICAgICAgICB0aGlzLnByb2dyZXNzRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gXCIxXCI7XG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5wcm9ncmVzc0VsZW1lbnQsIGRvY3VtZW50LmJvZHkpO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gICAgZmFkZVByb2dyZXNzRWxlbWVudChjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnByb2dyZXNzRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gXCIwXCI7XG4gICAgICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIFByb2dyZXNzQmFyLmFuaW1hdGlvbkR1cmF0aW9uICogMS41KTtcbiAgICB9XG4gICAgdW5pbnN0YWxsUHJvZ3Jlc3NFbGVtZW50KCkge1xuICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0VsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMucHJvZ3Jlc3NFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGFydFRyaWNrbGluZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRyaWNrbGVJbnRlcnZhbCkge1xuICAgICAgICAgICAgdGhpcy50cmlja2xlSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy50cmlja2xlLCBQcm9ncmVzc0Jhci5hbmltYXRpb25EdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcFRyaWNrbGluZygpIHtcbiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy50cmlja2xlSW50ZXJ2YWwpO1xuICAgICAgICBkZWxldGUgdGhpcy50cmlja2xlSW50ZXJ2YWw7XG4gICAgfVxuICAgIHJlZnJlc2goKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzRWxlbWVudC5zdHlsZS53aWR0aCA9IGAkezEwICsgKHRoaXMudmFsdWUgKiA5MCl9JWA7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjcmVhdGVTdHlsZXNoZWV0RWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgICAgZWxlbWVudC50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gUHJvZ3Jlc3NCYXIuZGVmYXVsdENTUztcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNyZWF0ZVByb2dyZXNzRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gXCJ0dXJiby1wcm9ncmVzcy1iYXJcIjtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxufVxuUHJvZ3Jlc3NCYXIuYW5pbWF0aW9uRHVyYXRpb24gPSAzMDA7XG5cbmNsYXNzIEhlYWRTbmFwc2hvdCBleHRlbmRzIFNuYXBzaG90IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5kZXRhaWxzQnlPdXRlckhUTUwgPSB0aGlzLmNoaWxkcmVuXG4gICAgICAgICAgICAuZmlsdGVyKChlbGVtZW50KSA9PiAhZWxlbWVudElzTm9zY3JpcHQoZWxlbWVudCkpXG4gICAgICAgICAgICAucmVkdWNlKChyZXN1bHQsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3V0ZXJIVE1MIH0gPSBlbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgZGV0YWlscyA9IG91dGVySFRNTCBpbiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHJlc3VsdFtvdXRlckhUTUxdXG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGVsZW1lbnRUeXBlKGVsZW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICB0cmFja2VkOiBlbGVtZW50SXNUcmFja2VkKGVsZW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50czogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdWx0KSwgeyBbb3V0ZXJIVE1MXTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkZXRhaWxzKSwgeyBlbGVtZW50czogWy4uLmRldGFpbHMuZWxlbWVudHMsIGVsZW1lbnRdIH0pIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuICAgIGdldCB0cmFja2VkRWxlbWVudFNpZ25hdHVyZSgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGV0YWlsc0J5T3V0ZXJIVE1MKVxuICAgICAgICAgICAgLmZpbHRlcihvdXRlckhUTUwgPT4gdGhpcy5kZXRhaWxzQnlPdXRlckhUTUxbb3V0ZXJIVE1MXS50cmFja2VkKVxuICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgfVxuICAgIGdldFNjcmlwdEVsZW1lbnRzTm90SW5TbmFwc2hvdChzbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c01hdGNoaW5nVHlwZU5vdEluU25hcHNob3QoXCJzY3JpcHRcIiwgc25hcHNob3QpO1xuICAgIH1cbiAgICBnZXRTdHlsZXNoZWV0RWxlbWVudHNOb3RJblNuYXBzaG90KHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzTWF0Y2hpbmdUeXBlTm90SW5TbmFwc2hvdChcInN0eWxlc2hlZXRcIiwgc25hcHNob3QpO1xuICAgIH1cbiAgICBnZXRFbGVtZW50c01hdGNoaW5nVHlwZU5vdEluU25hcHNob3QobWF0Y2hlZFR5cGUsIHNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRldGFpbHNCeU91dGVySFRNTClcbiAgICAgICAgICAgIC5maWx0ZXIob3V0ZXJIVE1MID0+ICEob3V0ZXJIVE1MIGluIHNuYXBzaG90LmRldGFpbHNCeU91dGVySFRNTCkpXG4gICAgICAgICAgICAubWFwKG91dGVySFRNTCA9PiB0aGlzLmRldGFpbHNCeU91dGVySFRNTFtvdXRlckhUTUxdKVxuICAgICAgICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IHR5cGUgPT0gbWF0Y2hlZFR5cGUpXG4gICAgICAgICAgICAubWFwKCh7IGVsZW1lbnRzOiBbZWxlbWVudF0gfSkgPT4gZWxlbWVudCk7XG4gICAgfVxuICAgIGdldCBwcm92aXNpb25hbEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5kZXRhaWxzQnlPdXRlckhUTUwpLnJlZHVjZSgocmVzdWx0LCBvdXRlckhUTUwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgdHJhY2tlZCwgZWxlbWVudHMgfSA9IHRoaXMuZGV0YWlsc0J5T3V0ZXJIVE1MW291dGVySFRNTF07XG4gICAgICAgICAgICBpZiAodHlwZSA9PSBudWxsICYmICF0cmFja2VkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5yZXN1bHQsIC4uLmVsZW1lbnRzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLnJlc3VsdCwgLi4uZWxlbWVudHMuc2xpY2UoMSldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuICAgIH1cbiAgICBnZXRNZXRhVmFsdWUobmFtZSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5maW5kTWV0YUVsZW1lbnRCeU5hbWUobmFtZSk7XG4gICAgICAgIHJldHVybiBlbGVtZW50XG4gICAgICAgICAgICA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmaW5kTWV0YUVsZW1lbnRCeU5hbWUobmFtZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5kZXRhaWxzQnlPdXRlckhUTUwpLnJlZHVjZSgocmVzdWx0LCBvdXRlckhUTUwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZWxlbWVudHM6IFtlbGVtZW50XSB9ID0gdGhpcy5kZXRhaWxzQnlPdXRlckhUTUxbb3V0ZXJIVE1MXTtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50SXNNZXRhRWxlbWVudFdpdGhOYW1lKGVsZW1lbnQsIG5hbWUpID8gZWxlbWVudCA6IHJlc3VsdDtcbiAgICAgICAgfSwgdW5kZWZpbmVkKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbGVtZW50VHlwZShlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnRJc1NjcmlwdChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gXCJzY3JpcHRcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoZWxlbWVudElzU3R5bGVzaGVldChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gXCJzdHlsZXNoZWV0XCI7XG4gICAgfVxufVxuZnVuY3Rpb24gZWxlbWVudElzVHJhY2tlZChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS10dXJiby10cmFja1wiKSA9PSBcInJlbG9hZFwiO1xufVxuZnVuY3Rpb24gZWxlbWVudElzU2NyaXB0KGVsZW1lbnQpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRhZ05hbWUgPT0gXCJzY3JpcHRcIjtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRJc05vc2NyaXB0KGVsZW1lbnQpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRhZ05hbWUgPT0gXCJub3NjcmlwdFwiO1xufVxuZnVuY3Rpb24gZWxlbWVudElzU3R5bGVzaGVldChlbGVtZW50KSB7XG4gICAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB0YWdOYW1lID09IFwic3R5bGVcIiB8fCAodGFnTmFtZSA9PSBcImxpbmtcIiAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZShcInJlbFwiKSA9PSBcInN0eWxlc2hlZXRcIik7XG59XG5mdW5jdGlvbiBlbGVtZW50SXNNZXRhRWxlbWVudFdpdGhOYW1lKGVsZW1lbnQsIG5hbWUpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRhZ05hbWUgPT0gXCJtZXRhXCIgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpID09IG5hbWU7XG59XG5cbmNsYXNzIFBhZ2VTbmFwc2hvdCBleHRlbmRzIFNuYXBzaG90IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCBoZWFkU25hcHNob3QpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgICAgIHRoaXMuaGVhZFNuYXBzaG90ID0gaGVhZFNuYXBzaG90O1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUhUTUxTdHJpbmcoaHRtbCA9IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbURvY3VtZW50KHBhcnNlSFRNTERvY3VtZW50KGh0bWwpKTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbURvY3VtZW50KGVsZW1lbnQub3duZXJEb2N1bWVudCk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tRG9jdW1lbnQoeyBoZWFkLCBib2R5IH0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGJvZHksIG5ldyBIZWFkU25hcHNob3QoaGVhZCkpO1xuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlU25hcHNob3QodGhpcy5lbGVtZW50LmNsb25lTm9kZSh0cnVlKSwgdGhpcy5oZWFkU25hcHNob3QpO1xuICAgIH1cbiAgICBnZXQgaGVhZEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRTbmFwc2hvdC5lbGVtZW50O1xuICAgIH1cbiAgICBnZXQgcm9vdExvY2F0aW9uKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHJvb3QgPSAoX2EgPSB0aGlzLmdldFNldHRpbmcoXCJyb290XCIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIi9cIjtcbiAgICAgICAgcmV0dXJuIGV4cGFuZFVSTChyb290KTtcbiAgICB9XG4gICAgZ2V0IGNhY2hlQ29udHJvbFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5nKFwiY2FjaGUtY29udHJvbFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzUHJldmlld2FibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlQ29udHJvbFZhbHVlICE9IFwibm8tcHJldmlld1wiO1xuICAgIH1cbiAgICBnZXQgaXNDYWNoZWFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlQ29udHJvbFZhbHVlICE9IFwibm8tY2FjaGVcIjtcbiAgICB9XG4gICAgZ2V0IGlzVmlzaXRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5nKFwidmlzaXQtY29udHJvbFwiKSAhPSBcInJlbG9hZFwiO1xuICAgIH1cbiAgICBnZXRTZXR0aW5nKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZFNuYXBzaG90LmdldE1ldGFWYWx1ZShgdHVyYm8tJHtuYW1lfWApO1xuICAgIH1cbn1cblxudmFyIFRpbWluZ01ldHJpYztcbihmdW5jdGlvbiAoVGltaW5nTWV0cmljKSB7XG4gICAgVGltaW5nTWV0cmljW1widmlzaXRTdGFydFwiXSA9IFwidmlzaXRTdGFydFwiO1xuICAgIFRpbWluZ01ldHJpY1tcInJlcXVlc3RTdGFydFwiXSA9IFwicmVxdWVzdFN0YXJ0XCI7XG4gICAgVGltaW5nTWV0cmljW1wicmVxdWVzdEVuZFwiXSA9IFwicmVxdWVzdEVuZFwiO1xuICAgIFRpbWluZ01ldHJpY1tcInZpc2l0RW5kXCJdID0gXCJ2aXNpdEVuZFwiO1xufSkoVGltaW5nTWV0cmljIHx8IChUaW1pbmdNZXRyaWMgPSB7fSkpO1xudmFyIFZpc2l0U3RhdGU7XG4oZnVuY3Rpb24gKFZpc2l0U3RhdGUpIHtcbiAgICBWaXNpdFN0YXRlW1wiaW5pdGlhbGl6ZWRcIl0gPSBcImluaXRpYWxpemVkXCI7XG4gICAgVmlzaXRTdGF0ZVtcInN0YXJ0ZWRcIl0gPSBcInN0YXJ0ZWRcIjtcbiAgICBWaXNpdFN0YXRlW1wiY2FuY2VsZWRcIl0gPSBcImNhbmNlbGVkXCI7XG4gICAgVmlzaXRTdGF0ZVtcImZhaWxlZFwiXSA9IFwiZmFpbGVkXCI7XG4gICAgVmlzaXRTdGF0ZVtcImNvbXBsZXRlZFwiXSA9IFwiY29tcGxldGVkXCI7XG59KShWaXNpdFN0YXRlIHx8IChWaXNpdFN0YXRlID0ge30pKTtcbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIGFjdGlvbjogXCJhZHZhbmNlXCIsXG4gICAgaGlzdG9yeUNoYW5nZWQ6IGZhbHNlXG59O1xudmFyIFN5c3RlbVN0YXR1c0NvZGU7XG4oZnVuY3Rpb24gKFN5c3RlbVN0YXR1c0NvZGUpIHtcbiAgICBTeXN0ZW1TdGF0dXNDb2RlW1N5c3RlbVN0YXR1c0NvZGVbXCJuZXR3b3JrRmFpbHVyZVwiXSA9IDBdID0gXCJuZXR3b3JrRmFpbHVyZVwiO1xuICAgIFN5c3RlbVN0YXR1c0NvZGVbU3lzdGVtU3RhdHVzQ29kZVtcInRpbWVvdXRGYWlsdXJlXCJdID0gLTFdID0gXCJ0aW1lb3V0RmFpbHVyZVwiO1xuICAgIFN5c3RlbVN0YXR1c0NvZGVbU3lzdGVtU3RhdHVzQ29kZVtcImNvbnRlbnRUeXBlTWlzbWF0Y2hcIl0gPSAtMl0gPSBcImNvbnRlbnRUeXBlTWlzbWF0Y2hcIjtcbn0pKFN5c3RlbVN0YXR1c0NvZGUgfHwgKFN5c3RlbVN0YXR1c0NvZGUgPSB7fSkpO1xuY2xhc3MgVmlzaXQge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlLCBsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gdXVpZCgpO1xuICAgICAgICB0aGlzLnRpbWluZ01ldHJpY3MgPSB7fTtcbiAgICAgICAgdGhpcy5mb2xsb3dlZFJlZGlyZWN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGlzdG9yeUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zY3JvbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNuYXBzaG90Q2FjaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBWaXNpdFN0YXRlLmluaXRpYWxpemVkO1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICAgICAgdGhpcy5yZXN0b3JhdGlvbklkZW50aWZpZXIgPSByZXN0b3JhdGlvbklkZW50aWZpZXIgfHwgdXVpZCgpO1xuICAgICAgICBjb25zdCB7IGFjdGlvbiwgaGlzdG9yeUNoYW5nZWQsIHJlZmVycmVyLCBzbmFwc2hvdEhUTUwsIHJlc3BvbnNlIH0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xuICAgICAgICB0aGlzLmhpc3RvcnlDaGFuZ2VkID0gaGlzdG9yeUNoYW5nZWQ7XG4gICAgICAgIHRoaXMucmVmZXJyZXIgPSByZWZlcnJlcjtcbiAgICAgICAgdGhpcy5zbmFwc2hvdEhUTUwgPSBzbmFwc2hvdEhUTUw7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5pc1NhbWVQYWdlID0gdGhpcy5kZWxlZ2F0ZS5sb2NhdGlvbldpdGhBY3Rpb25Jc1NhbWVQYWdlKHRoaXMubG9jYXRpb24sIHRoaXMuYWN0aW9uKTtcbiAgICB9XG4gICAgZ2V0IGFkYXB0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmFkYXB0ZXI7XG4gICAgfVxuICAgIGdldCB2aWV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS52aWV3O1xuICAgIH1cbiAgICBnZXQgaGlzdG9yeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuaGlzdG9yeTtcbiAgICB9XG4gICAgZ2V0IHJlc3RvcmF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZXRSZXN0b3JhdGlvbkRhdGFGb3JJZGVudGlmaWVyKHRoaXMucmVzdG9yYXRpb25JZGVudGlmaWVyKTtcbiAgICB9XG4gICAgZ2V0IHNpbGVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lUGFnZTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IFZpc2l0U3RhdGUuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkVGltaW5nTWV0cmljKFRpbWluZ01ldHJpYy52aXNpdFN0YXJ0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBWaXNpdFN0YXRlLnN0YXJ0ZWQ7XG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIudmlzaXRTdGFydGVkKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS52aXNpdFN0YXJ0ZWQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FuY2VsKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PSBWaXNpdFN0YXRlLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNhbmNlbFJlbmRlcigpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFZpc2l0U3RhdGUuY2FuY2VsZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29tcGxldGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IFZpc2l0U3RhdGUuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRUaW1pbmdNZXRyaWMoVGltaW5nTWV0cmljLnZpc2l0RW5kKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBWaXNpdFN0YXRlLmNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci52aXNpdENvbXBsZXRlZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUudmlzaXRDb21wbGV0ZWQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmZvbGxvd1JlZGlyZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmFpbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT0gVmlzaXRTdGF0ZS5zdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gVmlzaXRTdGF0ZS5mYWlsZWQ7XG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIudmlzaXRGYWlsZWQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hhbmdlSGlzdG9yeSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuaGlzdG9yeUNoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkZvckhpc3RvcnkgPSB0aGlzLmxvY2F0aW9uLmhyZWYgPT09ICgoX2EgPSB0aGlzLnJlZmVycmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaHJlZikgPyBcInJlcGxhY2VcIiA6IHRoaXMuYWN0aW9uO1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gdGhpcy5nZXRIaXN0b3J5TWV0aG9kRm9yQWN0aW9uKGFjdGlvbkZvckhpc3RvcnkpO1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnVwZGF0ZShtZXRob2QsIHRoaXMubG9jYXRpb24sIHRoaXMucmVzdG9yYXRpb25JZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzc3VlUmVxdWVzdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJlbG9hZGVkUmVzcG9uc2UoKSkge1xuICAgICAgICAgICAgdGhpcy5zaW11bGF0ZVJlcXVlc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnNob3VsZElzc3VlUmVxdWVzdCgpICYmICF0aGlzLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdCA9IG5ldyBGZXRjaFJlcXVlc3QodGhpcywgRmV0Y2hNZXRob2QuZ2V0LCB0aGlzLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdC5wZXJmb3JtKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2ltdWxhdGVSZXF1ZXN0KCkge1xuICAgICAgICBpZiAodGhpcy5yZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkUmVzcG9uc2UoKTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUmVxdWVzdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0UmVxdWVzdCgpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRUaW1pbmdNZXRyaWMoVGltaW5nTWV0cmljLnJlcXVlc3RTdGFydCk7XG4gICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFJlcXVlc3RTdGFydGVkKHRoaXMpO1xuICAgIH1cbiAgICByZWNvcmRSZXNwb25zZShyZXNwb25zZSA9IHRoaXMucmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSB9ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoaXNTdWNjZXNzZnVsKHN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UmVxdWVzdENvbXBsZXRlZCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFJlcXVlc3RGYWlsZWRXaXRoU3RhdHVzQ29kZSh0aGlzLCBzdGF0dXNDb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmaW5pc2hSZXF1ZXN0KCkge1xuICAgICAgICB0aGlzLnJlY29yZFRpbWluZ01ldHJpYyhUaW1pbmdNZXRyaWMucmVxdWVzdEVuZCk7XG4gICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFJlcXVlc3RGaW5pc2hlZCh0aGlzKTtcbiAgICB9XG4gICAgbG9hZFJlc3BvbnNlKCkge1xuICAgICAgICBpZiAodGhpcy5yZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgeyBzdGF0dXNDb2RlLCByZXNwb25zZUhUTUwgfSA9IHRoaXMucmVzcG9uc2U7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVNuYXBzaG90KCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlldy5yZW5kZXJQcm9taXNlKVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnZpZXcucmVuZGVyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTdWNjZXNzZnVsKHN0YXR1c0NvZGUpICYmIHJlc3BvbnNlSFRNTCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXJQYWdlKFBhZ2VTbmFwc2hvdC5mcm9tSFRNTFN0cmluZyhyZXNwb25zZUhUTUwpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UmVuZGVyZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXJFcnJvcihQYWdlU25hcHNob3QuZnJvbUhUTUxTdHJpbmcocmVzcG9uc2VIVE1MKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFJlbmRlcmVkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDYWNoZWRTbmFwc2hvdCgpIHtcbiAgICAgICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLnZpZXcuZ2V0Q2FjaGVkU25hcHNob3RGb3JMb2NhdGlvbih0aGlzLmxvY2F0aW9uKSB8fCB0aGlzLmdldFByZWxvYWRlZFNuYXBzaG90KCk7XG4gICAgICAgIGlmIChzbmFwc2hvdCAmJiAoIWdldEFuY2hvcih0aGlzLmxvY2F0aW9uKSB8fCBzbmFwc2hvdC5oYXNBbmNob3IoZ2V0QW5jaG9yKHRoaXMubG9jYXRpb24pKSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbiA9PSBcInJlc3RvcmVcIiB8fCBzbmFwc2hvdC5pc1ByZXZpZXdhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldFByZWxvYWRlZFNuYXBzaG90KCkge1xuICAgICAgICBpZiAodGhpcy5zbmFwc2hvdEhUTUwpIHtcbiAgICAgICAgICAgIHJldHVybiBQYWdlU25hcHNob3QuZnJvbUhUTUxTdHJpbmcodGhpcy5zbmFwc2hvdEhUTUwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhc0NhY2hlZFNuYXBzaG90KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDYWNoZWRTbmFwc2hvdCgpICE9IG51bGw7XG4gICAgfVxuICAgIGxvYWRDYWNoZWRTbmFwc2hvdCgpIHtcbiAgICAgICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLmdldENhY2hlZFNuYXBzaG90KCk7XG4gICAgICAgIGlmIChzbmFwc2hvdCkge1xuICAgICAgICAgICAgY29uc3QgaXNQcmV2aWV3ID0gdGhpcy5zaG91bGRJc3N1ZVJlcXVlc3QoKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlU25hcHNob3QoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NhbWVQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRhcHRlci52aXNpdFJlbmRlcmVkKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmlldy5yZW5kZXJQcm9taXNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52aWV3LnJlbmRlclByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXJQYWdlKHNuYXBzaG90LCBpc1ByZXZpZXcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIudmlzaXRSZW5kZXJlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ByZXZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvbGxvd1JlZGlyZWN0KCkge1xuICAgICAgICBpZiAodGhpcy5yZWRpcmVjdGVkVG9Mb2NhdGlvbiAmJiAhdGhpcy5mb2xsb3dlZFJlZGlyZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIudmlzaXRQcm9wb3NlZFRvTG9jYXRpb24odGhpcy5yZWRpcmVjdGVkVG9Mb2NhdGlvbiwge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ3JlcGxhY2UnLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlOiB0aGlzLnJlc3BvbnNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZm9sbG93ZWRSZWRpcmVjdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ29Ub1NhbWVQYWdlQW5jaG9yKCkge1xuICAgICAgICBpZiAodGhpcy5pc1NhbWVQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVNuYXBzaG90KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UmVuZGVyZWQodGhpcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXF1ZXN0U3RhcnRlZCgpIHtcbiAgICAgICAgdGhpcy5zdGFydFJlcXVlc3QoKTtcbiAgICB9XG4gICAgcmVxdWVzdFByZXZlbnRlZEhhbmRsaW5nUmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICB9XG4gICAgYXN5bmMgcmVxdWVzdFN1Y2NlZWRlZFdpdGhSZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAgICBjb25zdCByZXNwb25zZUhUTUwgPSBhd2FpdCByZXNwb25zZS5yZXNwb25zZUhUTUw7XG4gICAgICAgIGlmIChyZXNwb25zZUhUTUwgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZFJlc3BvbnNlKHsgc3RhdHVzQ29kZTogU3lzdGVtU3RhdHVzQ29kZS5jb250ZW50VHlwZU1pc21hdGNoIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWRpcmVjdGVkVG9Mb2NhdGlvbiA9IHJlc3BvbnNlLnJlZGlyZWN0ZWQgPyByZXNwb25zZS5sb2NhdGlvbiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkUmVzcG9uc2UoeyBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlLCByZXNwb25zZUhUTUwgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcmVxdWVzdEZhaWxlZFdpdGhSZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAgICBjb25zdCByZXNwb25zZUhUTUwgPSBhd2FpdCByZXNwb25zZS5yZXNwb25zZUhUTUw7XG4gICAgICAgIGlmIChyZXNwb25zZUhUTUwgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZFJlc3BvbnNlKHsgc3RhdHVzQ29kZTogU3lzdGVtU3RhdHVzQ29kZS5jb250ZW50VHlwZU1pc21hdGNoIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRSZXNwb25zZSh7IHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1c0NvZGUsIHJlc3BvbnNlSFRNTCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXF1ZXN0RXJyb3JlZChyZXF1ZXN0LCBlcnJvcikge1xuICAgICAgICB0aGlzLnJlY29yZFJlc3BvbnNlKHsgc3RhdHVzQ29kZTogU3lzdGVtU3RhdHVzQ29kZS5uZXR3b3JrRmFpbHVyZSB9KTtcbiAgICB9XG4gICAgcmVxdWVzdEZpbmlzaGVkKCkge1xuICAgICAgICB0aGlzLmZpbmlzaFJlcXVlc3QoKTtcbiAgICB9XG4gICAgcGVyZm9ybVNjcm9sbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNjcm9sbGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb24gPT0gXCJyZXN0b3JlXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvUmVzdG9yZWRQb3NpdGlvbigpIHx8IHRoaXMuc2Nyb2xsVG9BbmNob3IoKSB8fCB0aGlzLnZpZXcuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BbmNob3IoKSB8fCB0aGlzLnZpZXcuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2FtZVBhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnZpc2l0U2Nyb2xsZWRUb1NhbWVQYWdlTG9jYXRpb24odGhpcy52aWV3Lmxhc3RSZW5kZXJlZExvY2F0aW9uLCB0aGlzLmxvY2F0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNjcm9sbFRvUmVzdG9yZWRQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgeyBzY3JvbGxQb3NpdGlvbiB9ID0gdGhpcy5yZXN0b3JhdGlvbkRhdGE7XG4gICAgICAgIGlmIChzY3JvbGxQb3NpdGlvbikge1xuICAgICAgICAgICAgdGhpcy52aWV3LnNjcm9sbFRvUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2Nyb2xsVG9BbmNob3IoKSB7XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IGdldEFuY2hvcih0aGlzLmxvY2F0aW9uKTtcbiAgICAgICAgaWYgKGFuY2hvciAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXcuc2Nyb2xsVG9BbmNob3IoYW5jaG9yKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlY29yZFRpbWluZ01ldHJpYyhtZXRyaWMpIHtcbiAgICAgICAgdGhpcy50aW1pbmdNZXRyaWNzW21ldHJpY10gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9XG4gICAgZ2V0VGltaW5nTWV0cmljcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMudGltaW5nTWV0cmljcyk7XG4gICAgfVxuICAgIGdldEhpc3RvcnlNZXRob2RGb3JBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIFwicmVwbGFjZVwiOiByZXR1cm4gaGlzdG9yeS5yZXBsYWNlU3RhdGU7XG4gICAgICAgICAgICBjYXNlIFwiYWR2YW5jZVwiOlxuICAgICAgICAgICAgY2FzZSBcInJlc3RvcmVcIjogcmV0dXJuIGhpc3RvcnkucHVzaFN0YXRlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhc1ByZWxvYWRlZFJlc3BvbnNlKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMucmVzcG9uc2UgPT0gXCJvYmplY3RcIjtcbiAgICB9XG4gICAgc2hvdWxkSXNzdWVSZXF1ZXN0KCkge1xuICAgICAgICBpZiAodGhpcy5pc1NhbWVQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5hY3Rpb24gPT0gXCJyZXN0b3JlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5oYXNDYWNoZWRTbmFwc2hvdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FjaGVTbmFwc2hvdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNuYXBzaG90Q2FjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXcuY2FjaGVTbmFwc2hvdCgpO1xuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdENhY2hlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcmVuZGVyKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY2FuY2VsUmVuZGVyKCk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgdGhpcy5mcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgY2FsbGJhY2soKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuZnJhbWU7XG4gICAgICAgIHRoaXMucGVyZm9ybVNjcm9sbCgpO1xuICAgIH1cbiAgICBjYW5jZWxSZW5kZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmZyYW1lKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmZyYW1lKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZyYW1lO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaXNTdWNjZXNzZnVsKHN0YXR1c0NvZGUpIHtcbiAgICByZXR1cm4gc3RhdHVzQ29kZSA+PSAyMDAgJiYgc3RhdHVzQ29kZSA8IDMwMDtcbn1cblxuY2xhc3MgQnJvd3NlckFkYXB0ZXIge1xuICAgIGNvbnN0cnVjdG9yKHNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0JhciA9IG5ldyBQcm9ncmVzc0JhcjtcbiAgICAgICAgdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQmFyLnNob3coKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgICB9XG4gICAgdmlzaXRQcm9wb3NlZFRvTG9jYXRpb24obG9jYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3Iuc3RhcnRWaXNpdChsb2NhdGlvbiwgdXVpZCgpLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdmlzaXRTdGFydGVkKHZpc2l0KSB7XG4gICAgICAgIHZpc2l0Lmlzc3VlUmVxdWVzdCgpO1xuICAgICAgICB2aXNpdC5jaGFuZ2VIaXN0b3J5KCk7XG4gICAgICAgIHZpc2l0LmdvVG9TYW1lUGFnZUFuY2hvcigpO1xuICAgICAgICB2aXNpdC5sb2FkQ2FjaGVkU25hcHNob3QoKTtcbiAgICB9XG4gICAgdmlzaXRSZXF1ZXN0U3RhcnRlZCh2aXNpdCkge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyLnNldFZhbHVlKDApO1xuICAgICAgICBpZiAodmlzaXQuaGFzQ2FjaGVkU25hcHNob3QoKSB8fCB2aXNpdC5hY3Rpb24gIT0gXCJyZXN0b3JlXCIpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1Zpc2l0UHJvZ3Jlc3NCYXJBZnRlckRlbGF5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQcm9ncmVzc0JhcigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0UmVxdWVzdENvbXBsZXRlZCh2aXNpdCkge1xuICAgICAgICB2aXNpdC5sb2FkUmVzcG9uc2UoKTtcbiAgICB9XG4gICAgdmlzaXRSZXF1ZXN0RmFpbGVkV2l0aFN0YXR1c0NvZGUodmlzaXQsIHN0YXR1c0NvZGUpIHtcbiAgICAgICAgc3dpdGNoIChzdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFN5c3RlbVN0YXR1c0NvZGUubmV0d29ya0ZhaWx1cmU6XG4gICAgICAgICAgICBjYXNlIFN5c3RlbVN0YXR1c0NvZGUudGltZW91dEZhaWx1cmU6XG4gICAgICAgICAgICBjYXNlIFN5c3RlbVN0YXR1c0NvZGUuY29udGVudFR5cGVNaXNtYXRjaDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZpc2l0LmxvYWRSZXNwb25zZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0UmVxdWVzdEZpbmlzaGVkKHZpc2l0KSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXIuc2V0VmFsdWUoMSk7XG4gICAgICAgIHRoaXMuaGlkZVZpc2l0UHJvZ3Jlc3NCYXIoKTtcbiAgICB9XG4gICAgdmlzaXRDb21wbGV0ZWQodmlzaXQpIHtcbiAgICB9XG4gICAgcGFnZUludmFsaWRhdGVkKCkge1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cbiAgICB2aXNpdEZhaWxlZCh2aXNpdCkge1xuICAgIH1cbiAgICB2aXNpdFJlbmRlcmVkKHZpc2l0KSB7XG4gICAgfVxuICAgIGZvcm1TdWJtaXNzaW9uU3RhcnRlZChmb3JtU3VibWlzc2lvbikge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyLnNldFZhbHVlKDApO1xuICAgICAgICB0aGlzLnNob3dGb3JtUHJvZ3Jlc3NCYXJBZnRlckRlbGF5KCk7XG4gICAgfVxuICAgIGZvcm1TdWJtaXNzaW9uRmluaXNoZWQoZm9ybVN1Ym1pc3Npb24pIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0Jhci5zZXRWYWx1ZSgxKTtcbiAgICAgICAgdGhpcy5oaWRlRm9ybVByb2dyZXNzQmFyKCk7XG4gICAgfVxuICAgIHNob3dWaXNpdFByb2dyZXNzQmFyQWZ0ZXJEZWxheSgpIHtcbiAgICAgICAgdGhpcy52aXNpdFByb2dyZXNzQmFyVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuc2hvd1Byb2dyZXNzQmFyLCB0aGlzLnNlc3Npb24ucHJvZ3Jlc3NCYXJEZWxheSk7XG4gICAgfVxuICAgIGhpZGVWaXNpdFByb2dyZXNzQmFyKCkge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyLmhpZGUoKTtcbiAgICAgICAgaWYgKHRoaXMudmlzaXRQcm9ncmVzc0JhclRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnZpc2l0UHJvZ3Jlc3NCYXJUaW1lb3V0KTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZpc2l0UHJvZ3Jlc3NCYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHNob3dGb3JtUHJvZ3Jlc3NCYXJBZnRlckRlbGF5KCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtUHJvZ3Jlc3NCYXJUaW1lb3V0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVByb2dyZXNzQmFyVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuc2hvd1Byb2dyZXNzQmFyLCB0aGlzLnNlc3Npb24ucHJvZ3Jlc3NCYXJEZWxheSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGlkZUZvcm1Qcm9ncmVzc0JhcigpIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0Jhci5oaWRlKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm1Qcm9ncmVzc0JhclRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLmZvcm1Qcm9ncmVzc0JhclRpbWVvdXQpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZm9ybVByb2dyZXNzQmFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9XG4gICAgZ2V0IG5hdmlnYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5uYXZpZ2F0b3I7XG4gICAgfVxufVxuXG5jbGFzcyBDYWNoZU9ic2VydmVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoXCJ0dXJibzpiZWZvcmUtY2FjaGVcIiwgdGhpcy5yZW1vdmVTdGFsZUVsZW1lbnRzLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKFwidHVyYm86YmVmb3JlLWNhY2hlXCIsIHRoaXMucmVtb3ZlU3RhbGVFbGVtZW50cywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZVN0YWxlRWxlbWVudHMoKSB7XG4gICAgICAgIGNvbnN0IHN0YWxlRWxlbWVudHMgPSBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdHVyYm8tY2FjaGU9XCJmYWxzZVwiXScpXTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHN0YWxlRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEZvcm1TdWJtaXRPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3VibWl0Q2FwdHVyZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIHRoaXMuc3VibWl0QnViYmxlZCwgZmFsc2UpO1xuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCB0aGlzLnN1Ym1pdEJ1YmJsZWQsIGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zdWJtaXRCdWJibGVkID0gKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybSA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCA/IGV2ZW50LnRhcmdldCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJtaXR0ZXIgPSBldmVudC5zdWJtaXR0ZXIgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IChzdWJtaXR0ZXIgPT09IG51bGwgfHwgc3VibWl0dGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdWJtaXR0ZXIuZ2V0QXR0cmlidXRlKFwiZm9ybW1ldGhvZFwiKSkgfHwgZm9ybS5tZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QgIT0gXCJkaWFsb2dcIiAmJiB0aGlzLmRlbGVnYXRlLndpbGxTdWJtaXRGb3JtKGZvcm0sIHN1Ym1pdHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmZvcm1TdWJtaXR0ZWQoZm9ybSwgc3VibWl0dGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIHRoaXMuc3VibWl0Q2FwdHVyZWQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIHRoaXMuc3VibWl0Q2FwdHVyZWQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEZyYW1lUmVkaXJlY3RvciB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmxpbmtJbnRlcmNlcHRvciA9IG5ldyBMaW5rSW50ZXJjZXB0b3IodGhpcywgZWxlbWVudCk7XG4gICAgICAgIHRoaXMuZm9ybUludGVyY2VwdG9yID0gbmV3IEZvcm1JbnRlcmNlcHRvcih0aGlzLCBlbGVtZW50KTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMubGlua0ludGVyY2VwdG9yLnN0YXJ0KCk7XG4gICAgICAgIHRoaXMuZm9ybUludGVyY2VwdG9yLnN0YXJ0KCk7XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMubGlua0ludGVyY2VwdG9yLnN0b3AoKTtcbiAgICAgICAgdGhpcy5mb3JtSW50ZXJjZXB0b3Iuc3RvcCgpO1xuICAgIH1cbiAgICBzaG91bGRJbnRlcmNlcHRMaW5rQ2xpY2soZWxlbWVudCwgdXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3VsZFJlZGlyZWN0KGVsZW1lbnQpO1xuICAgIH1cbiAgICBsaW5rQ2xpY2tJbnRlcmNlcHRlZChlbGVtZW50LCB1cmwpIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGlmIChmcmFtZSkge1xuICAgICAgICAgICAgZnJhbWUuc2V0QXR0cmlidXRlKFwicmVsb2FkYWJsZVwiLCBcIlwiKTtcbiAgICAgICAgICAgIGZyYW1lLnNyYyA9IHVybDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaG91bGRJbnRlcmNlcHRGb3JtU3VibWlzc2lvbihlbGVtZW50LCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvdWxkUmVkaXJlY3QoZWxlbWVudCwgc3VibWl0dGVyKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25JbnRlcmNlcHRlZChlbGVtZW50LCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGlmIChmcmFtZSkge1xuICAgICAgICAgICAgZnJhbWUucmVtb3ZlQXR0cmlidXRlKFwicmVsb2FkYWJsZVwiKTtcbiAgICAgICAgICAgIGZyYW1lLmRlbGVnYXRlLmZvcm1TdWJtaXNzaW9uSW50ZXJjZXB0ZWQoZWxlbWVudCwgc3VibWl0dGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaG91bGRSZWRpcmVjdChlbGVtZW50LCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLmZpbmRGcmFtZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBmcmFtZSA/IGZyYW1lICE9IGVsZW1lbnQuY2xvc2VzdChcInR1cmJvLWZyYW1lXCIpIDogZmFsc2U7XG4gICAgfVxuICAgIGZpbmRGcmFtZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS10dXJiby1mcmFtZVwiKTtcbiAgICAgICAgaWYgKGlkICYmIGlkICE9IFwiX3RvcFwiKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHtpZH06bm90KFtkaXNhYmxlZF0pYCk7XG4gICAgICAgICAgICBpZiAoZnJhbWUgaW5zdGFuY2VvZiBGcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEhpc3Rvcnkge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMucmVzdG9yYXRpb25JZGVudGlmaWVyID0gdXVpZCgpO1xuICAgICAgICB0aGlzLnJlc3RvcmF0aW9uRGF0YSA9IHt9O1xuICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25Qb3BTdGF0ZSA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlUG9wU3RhdGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdHVyYm8gfSA9IGV2ZW50LnN0YXRlIHx8IHt9O1xuICAgICAgICAgICAgICAgIGlmICh0dXJibykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2F0aW9uID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVzdG9yYXRpb25JZGVudGlmaWVyIH0gPSB0dXJibztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JhdGlvbklkZW50aWZpZXIgPSByZXN0b3JhdGlvbklkZW50aWZpZXI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUuaGlzdG9yeVBvcHBlZFRvTG9jYXRpb25XaXRoUmVzdG9yYXRpb25JZGVudGlmaWVyKHRoaXMubG9jYXRpb24sIHJlc3RvcmF0aW9uSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uUGFnZUxvYWQgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IG5leHRNaWNyb3Rhc2soKTtcbiAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgdGhpcy5vblBvcFN0YXRlLCBmYWxzZSk7XG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCB0aGlzLm9uUGFnZUxvYWQsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2UobmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCB0aGlzLm9uUG9wU3RhdGUsIGZhbHNlKTtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHRoaXMub25QYWdlTG9hZCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVzaChsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyKSB7XG4gICAgICAgIHRoaXMudXBkYXRlKGhpc3RvcnkucHVzaFN0YXRlLCBsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyKTtcbiAgICB9XG4gICAgcmVwbGFjZShsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyKSB7XG4gICAgICAgIHRoaXMudXBkYXRlKGhpc3RvcnkucmVwbGFjZVN0YXRlLCBsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyKTtcbiAgICB9XG4gICAgdXBkYXRlKG1ldGhvZCwgbG9jYXRpb24sIHJlc3RvcmF0aW9uSWRlbnRpZmllciA9IHV1aWQoKSkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHsgdHVyYm86IHsgcmVzdG9yYXRpb25JZGVudGlmaWVyIH0gfTtcbiAgICAgICAgbWV0aG9kLmNhbGwoaGlzdG9yeSwgc3RhdGUsIFwiXCIsIGxvY2F0aW9uLmhyZWYpO1xuICAgICAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgICAgIHRoaXMucmVzdG9yYXRpb25JZGVudGlmaWVyID0gcmVzdG9yYXRpb25JZGVudGlmaWVyO1xuICAgIH1cbiAgICBnZXRSZXN0b3JhdGlvbkRhdGFGb3JJZGVudGlmaWVyKHJlc3RvcmF0aW9uSWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN0b3JhdGlvbkRhdGFbcmVzdG9yYXRpb25JZGVudGlmaWVyXSB8fCB7fTtcbiAgICB9XG4gICAgdXBkYXRlUmVzdG9yYXRpb25EYXRhKGFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgIGNvbnN0IHsgcmVzdG9yYXRpb25JZGVudGlmaWVyIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCByZXN0b3JhdGlvbkRhdGEgPSB0aGlzLnJlc3RvcmF0aW9uRGF0YVtyZXN0b3JhdGlvbklkZW50aWZpZXJdO1xuICAgICAgICB0aGlzLnJlc3RvcmF0aW9uRGF0YVtyZXN0b3JhdGlvbklkZW50aWZpZXJdID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXN0b3JhdGlvbkRhdGEpLCBhZGRpdGlvbmFsRGF0YSk7XG4gICAgfVxuICAgIGFzc3VtZUNvbnRyb2xPZlNjcm9sbFJlc3RvcmF0aW9uKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5wcmV2aW91c1Njcm9sbFJlc3RvcmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzU2Nyb2xsUmVzdG9yYXRpb24gPSAoX2EgPSBoaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcImF1dG9cIjtcbiAgICAgICAgICAgIGhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSBcIm1hbnVhbFwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbGlucXVpc2hDb250cm9sT2ZTY3JvbGxSZXN0b3JhdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNTY3JvbGxSZXN0b3JhdGlvbikge1xuICAgICAgICAgICAgaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IHRoaXMucHJldmlvdXNTY3JvbGxSZXN0b3JhdGlvbjtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnByZXZpb3VzU2Nyb2xsUmVzdG9yYXRpb247XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2hvdWxkSGFuZGxlUG9wU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VJc0xvYWRlZCgpO1xuICAgIH1cbiAgICBwYWdlSXNMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VMb2FkZWQgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PSBcImNvbXBsZXRlXCI7XG4gICAgfVxufVxuXG5jbGFzcyBMaW5rQ2xpY2tPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xpY2tDYXB0dXJlZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmNsaWNrQnViYmxlZCwgZmFsc2UpO1xuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuY2xpY2tCdWJibGVkLCBmYWxzZSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2xpY2tCdWJibGVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbGlja0V2ZW50SXNTaWduaWZpY2FudChldmVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSAoZXZlbnQuY29tcG9zZWRQYXRoICYmIGV2ZW50LmNvbXBvc2VkUGF0aCgpWzBdKSB8fCBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluayA9IHRoaXMuZmluZExpbmtGcm9tQ2xpY2tUYXJnZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZ2V0TG9jYXRpb25Gb3JMaW5rKGxpbmspO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZS53aWxsRm9sbG93TGlua1RvTG9jYXRpb24obGluaywgbG9jYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5mb2xsb3dlZExpbmtUb0xvY2F0aW9uKGxpbmssIGxvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmNsaWNrQ2FwdHVyZWQsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5jbGlja0NhcHR1cmVkLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsaWNrRXZlbnRJc1NpZ25pZmljYW50KGV2ZW50KSB7XG4gICAgICAgIHJldHVybiAhKChldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlKVxuICAgICAgICAgICAgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgICAgICAgICAgfHwgZXZlbnQud2hpY2ggPiAxXG4gICAgICAgICAgICB8fCBldmVudC5hbHRLZXlcbiAgICAgICAgICAgIHx8IGV2ZW50LmN0cmxLZXlcbiAgICAgICAgICAgIHx8IGV2ZW50Lm1ldGFLZXlcbiAgICAgICAgICAgIHx8IGV2ZW50LnNoaWZ0S2V5KTtcbiAgICB9XG4gICAgZmluZExpbmtGcm9tQ2xpY2tUYXJnZXQodGFyZ2V0KSB7XG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmNsb3Nlc3QoXCJhW2hyZWZdOm5vdChbdGFyZ2V0Xj1fXSk6bm90KFtkb3dubG9hZF0pXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldExvY2F0aW9uRm9yTGluayhsaW5rKSB7XG4gICAgICAgIHJldHVybiBleHBhbmRVUkwobGluay5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpIHx8IFwiXCIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNBY3Rpb24oYWN0aW9uKSB7XG4gICAgcmV0dXJuIGFjdGlvbiA9PSBcImFkdmFuY2VcIiB8fCBhY3Rpb24gPT0gXCJyZXBsYWNlXCIgfHwgYWN0aW9uID09IFwicmVzdG9yZVwiO1xufVxuXG5jbGFzcyBOYXZpZ2F0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICB9XG4gICAgcHJvcG9zZVZpc2l0KGxvY2F0aW9uLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHRoaXMuZGVsZWdhdGUuYWxsb3dzVmlzaXRpbmdMb2NhdGlvbldpdGhBY3Rpb24obG9jYXRpb24sIG9wdGlvbnMuYWN0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS52aXNpdFByb3Bvc2VkVG9Mb2NhdGlvbihsb2NhdGlvbiwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhcnRWaXNpdChsb2NhdGFibGUsIHJlc3RvcmF0aW9uSWRlbnRpZmllciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB0aGlzLmN1cnJlbnRWaXNpdCA9IG5ldyBWaXNpdCh0aGlzLCBleHBhbmRVUkwobG9jYXRhYmxlKSwgcmVzdG9yYXRpb25JZGVudGlmaWVyLCBPYmplY3QuYXNzaWduKHsgcmVmZXJyZXI6IHRoaXMubG9jYXRpb24gfSwgb3B0aW9ucykpO1xuICAgICAgICB0aGlzLmN1cnJlbnRWaXNpdC5zdGFydCgpO1xuICAgIH1cbiAgICBzdWJtaXRGb3JtKGZvcm0sIHN1Ym1pdHRlcikge1xuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgdGhpcy5mb3JtU3VibWlzc2lvbiA9IG5ldyBGb3JtU3VibWlzc2lvbih0aGlzLCBmb3JtLCBzdWJtaXR0ZXIsIHRydWUpO1xuICAgICAgICBpZiAodGhpcy5mb3JtU3VibWlzc2lvbi5pc0lkZW1wb3RlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcG9zZVZpc2l0KHRoaXMuZm9ybVN1Ym1pc3Npb24uZmV0Y2hSZXF1ZXN0LnVybCwgeyBhY3Rpb246IHRoaXMuZ2V0QWN0aW9uRm9yRm9ybVN1Ym1pc3Npb24odGhpcy5mb3JtU3VibWlzc2lvbikgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1TdWJtaXNzaW9uLnN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVN1Ym1pc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pc3Npb24uc3RvcCgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZm9ybVN1Ym1pc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpc2l0KSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWaXNpdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRWaXNpdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYWRhcHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuYWRhcHRlcjtcbiAgICB9XG4gICAgZ2V0IHZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnZpZXc7XG4gICAgfVxuICAgIGdldCBoaXN0b3J5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5oaXN0b3J5O1xuICAgIH1cbiAgICBmb3JtU3VibWlzc2lvblN0YXJ0ZWQoZm9ybVN1Ym1pc3Npb24pIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkYXB0ZXIuZm9ybVN1Ym1pc3Npb25TdGFydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZm9ybVN1Ym1pc3Npb25TdGFydGVkKGZvcm1TdWJtaXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBmb3JtU3VibWlzc2lvblN1Y2NlZWRlZFdpdGhSZXNwb25zZShmb3JtU3VibWlzc2lvbiwgZmV0Y2hSZXNwb25zZSkge1xuICAgICAgICBpZiAoZm9ybVN1Ym1pc3Npb24gPT0gdGhpcy5mb3JtU3VibWlzc2lvbikge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VIVE1MID0gYXdhaXQgZmV0Y2hSZXNwb25zZS5yZXNwb25zZUhUTUw7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VIVE1MKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1TdWJtaXNzaW9uLm1ldGhvZCAhPSBGZXRjaE1ldGhvZC5nZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3LmNsZWFyU25hcHNob3RDYWNoZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXR1c0NvZGUgfSA9IGZldGNoUmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaXRPcHRpb25zID0geyByZXNwb25zZTogeyBzdGF0dXNDb2RlLCByZXNwb25zZUhUTUwgfSB9O1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcG9zZVZpc2l0KGZldGNoUmVzcG9uc2UubG9jYXRpb24sIHZpc2l0T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZm9ybVN1Ym1pc3Npb25GYWlsZWRXaXRoUmVzcG9uc2UoZm9ybVN1Ym1pc3Npb24sIGZldGNoUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VIVE1MID0gYXdhaXQgZmV0Y2hSZXNwb25zZS5yZXNwb25zZUhUTUw7XG4gICAgICAgIGlmIChyZXNwb25zZUhUTUwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gUGFnZVNuYXBzaG90LmZyb21IVE1MU3RyaW5nKHJlc3BvbnNlSFRNTCk7XG4gICAgICAgICAgICBpZiAoZmV0Y2hSZXNwb25zZS5zZXJ2ZXJFcnJvcikge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXJFcnJvcihzbmFwc2hvdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnZpZXcucmVuZGVyUGFnZShzbmFwc2hvdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZpZXcuc2Nyb2xsVG9Ub3AoKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5jbGVhclNuYXBzaG90Q2FjaGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3JtU3VibWlzc2lvbkVycm9yZWQoZm9ybVN1Ym1pc3Npb24sIGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBmb3JtU3VibWlzc2lvbkZpbmlzaGVkKGZvcm1TdWJtaXNzaW9uKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGFwdGVyLmZvcm1TdWJtaXNzaW9uRmluaXNoZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5mb3JtU3VibWlzc2lvbkZpbmlzaGVkKGZvcm1TdWJtaXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFN0YXJ0ZWQodmlzaXQpIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS52aXNpdFN0YXJ0ZWQodmlzaXQpO1xuICAgIH1cbiAgICB2aXNpdENvbXBsZXRlZCh2aXNpdCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnZpc2l0Q29tcGxldGVkKHZpc2l0KTtcbiAgICB9XG4gICAgbG9jYXRpb25XaXRoQWN0aW9uSXNTYW1lUGFnZShsb2NhdGlvbiwgYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IGdldEFuY2hvcihsb2NhdGlvbik7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBbmNob3IgPSBnZXRBbmNob3IodGhpcy52aWV3Lmxhc3RSZW5kZXJlZExvY2F0aW9uKTtcbiAgICAgICAgY29uc3QgaXNSZXN0b3JhdGlvblRvVG9wID0gYWN0aW9uID09PSAncmVzdG9yZScgJiYgdHlwZW9mIGFuY2hvciA9PT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgIHJldHVybiBhY3Rpb24gIT09IFwicmVwbGFjZVwiICYmXG4gICAgICAgICAgICBnZXRSZXF1ZXN0VVJMKGxvY2F0aW9uKSA9PT0gZ2V0UmVxdWVzdFVSTCh0aGlzLnZpZXcubGFzdFJlbmRlcmVkTG9jYXRpb24pICYmXG4gICAgICAgICAgICAoaXNSZXN0b3JhdGlvblRvVG9wIHx8IChhbmNob3IgIT0gbnVsbCAmJiBhbmNob3IgIT09IGN1cnJlbnRBbmNob3IpKTtcbiAgICB9XG4gICAgdmlzaXRTY3JvbGxlZFRvU2FtZVBhZ2VMb2NhdGlvbihvbGRVUkwsIG5ld1VSTCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnZpc2l0U2Nyb2xsZWRUb1NhbWVQYWdlTG9jYXRpb24ob2xkVVJMLCBuZXdVUkwpO1xuICAgIH1cbiAgICBnZXQgbG9jYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkubG9jYXRpb247XG4gICAgfVxuICAgIGdldCByZXN0b3JhdGlvbklkZW50aWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkucmVzdG9yYXRpb25JZGVudGlmaWVyO1xuICAgIH1cbiAgICBnZXRBY3Rpb25Gb3JGb3JtU3VibWlzc2lvbihmb3JtU3VibWlzc2lvbikge1xuICAgICAgICBjb25zdCB7IGZvcm1FbGVtZW50LCBzdWJtaXR0ZXIgfSA9IGZvcm1TdWJtaXNzaW9uO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSAoc3VibWl0dGVyID09PSBudWxsIHx8IHN1Ym1pdHRlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3VibWl0dGVyLmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm8tYWN0aW9uXCIpKSB8fCBmb3JtRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLWFjdGlvblwiKTtcbiAgICAgICAgcmV0dXJuIGlzQWN0aW9uKGFjdGlvbikgPyBhY3Rpb24gOiBcImFkdmFuY2VcIjtcbiAgICB9XG59XG5cbnZhciBQYWdlU3RhZ2U7XG4oZnVuY3Rpb24gKFBhZ2VTdGFnZSkge1xuICAgIFBhZ2VTdGFnZVtQYWdlU3RhZ2VbXCJpbml0aWFsXCJdID0gMF0gPSBcImluaXRpYWxcIjtcbiAgICBQYWdlU3RhZ2VbUGFnZVN0YWdlW1wibG9hZGluZ1wiXSA9IDFdID0gXCJsb2FkaW5nXCI7XG4gICAgUGFnZVN0YWdlW1BhZ2VTdGFnZVtcImludGVyYWN0aXZlXCJdID0gMl0gPSBcImludGVyYWN0aXZlXCI7XG4gICAgUGFnZVN0YWdlW1BhZ2VTdGFnZVtcImNvbXBsZXRlXCJdID0gM10gPSBcImNvbXBsZXRlXCI7XG59KShQYWdlU3RhZ2UgfHwgKFBhZ2VTdGFnZSA9IHt9KSk7XG5jbGFzcyBQYWdlT2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuc3RhZ2UgPSBQYWdlU3RhZ2UuaW5pdGlhbDtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW50ZXJwcmV0UmVhZHlTdGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgcmVhZHlTdGF0ZSB9ID0gdGhpcztcbiAgICAgICAgICAgIGlmIChyZWFkeVN0YXRlID09IFwiaW50ZXJhY3RpdmVcIikge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZUlzSW50ZXJhY3RpdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlYWR5U3RhdGUgPT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlSXNDb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBhZ2VXaWxsVW5sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5wYWdlV2lsbFVubG9hZCgpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhZ2UgPT0gUGFnZVN0YWdlLmluaXRpYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlID0gUGFnZVN0YWdlLmxvYWRpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLCB0aGlzLmludGVycHJldFJlYWR5U3RhdGUsIGZhbHNlKTtcbiAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLCB0aGlzLnBhZ2VXaWxsVW5sb2FkLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsIHRoaXMuaW50ZXJwcmV0UmVhZHlTdGF0ZSwgZmFsc2UpO1xuICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBhZ2VoaWRlXCIsIHRoaXMucGFnZVdpbGxVbmxvYWQsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhZ2VJc0ludGVyYWN0aXZlKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFnZSA9PSBQYWdlU3RhZ2UubG9hZGluZykge1xuICAgICAgICAgICAgdGhpcy5zdGFnZSA9IFBhZ2VTdGFnZS5pbnRlcmFjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUucGFnZUJlY2FtZUludGVyYWN0aXZlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFnZUlzQ29tcGxldGUoKSB7XG4gICAgICAgIHRoaXMucGFnZUlzSW50ZXJhY3RpdmUoKTtcbiAgICAgICAgaWYgKHRoaXMuc3RhZ2UgPT0gUGFnZVN0YWdlLmludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLnN0YWdlID0gUGFnZVN0YWdlLmNvbXBsZXRlO1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5wYWdlTG9hZGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHJlYWR5U3RhdGUoKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5yZWFkeVN0YXRlO1xuICAgIH1cbn1cblxuY2xhc3MgU2Nyb2xsT2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbih7IHg6IHdpbmRvdy5wYWdlWE9mZnNldCwgeTogd2luZG93LnBhZ2VZT2Zmc2V0IH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uU2Nyb2xsLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLm9uU2Nyb2xsKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5vblNjcm9sbCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5zY3JvbGxQb3NpdGlvbkNoYW5nZWQocG9zaXRpb24pO1xuICAgIH1cbn1cblxuY2xhc3MgU3RyZWFtT2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuc291cmNlcyA9IG5ldyBTZXQ7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluc3BlY3RGZXRjaFJlc3BvbnNlID0gKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBmZXRjaFJlc3BvbnNlRnJvbUV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiBmZXRjaFJlc3BvbnNlSXNTdHJlYW0ocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY2VpdmVNZXNzYWdlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWNlaXZlTWVzc2FnZUV2ZW50ID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGFydGVkICYmIHR5cGVvZiBldmVudC5kYXRhID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY2VpdmVNZXNzYWdlSFRNTChldmVudC5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKFwidHVyYm86YmVmb3JlLWZldGNoLXJlc3BvbnNlXCIsIHRoaXMuaW5zcGVjdEZldGNoUmVzcG9uc2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0dXJibzpiZWZvcmUtZmV0Y2gtcmVzcG9uc2VcIiwgdGhpcy5pbnNwZWN0RmV0Y2hSZXNwb25zZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbm5lY3RTdHJlYW1Tb3VyY2Uoc291cmNlKSB7XG4gICAgICAgIGlmICghdGhpcy5zdHJlYW1Tb3VyY2VJc0Nvbm5lY3RlZChzb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5yZWNlaXZlTWVzc2FnZUV2ZW50LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGlzY29ubmVjdFN0cmVhbVNvdXJjZShzb3VyY2UpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RyZWFtU291cmNlSXNDb25uZWN0ZWQoc291cmNlKSkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VzLmRlbGV0ZShzb3VyY2UpO1xuICAgICAgICAgICAgc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMucmVjZWl2ZU1lc3NhZ2VFdmVudCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0cmVhbVNvdXJjZUlzQ29ubmVjdGVkKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzLmhhcyhzb3VyY2UpO1xuICAgIH1cbiAgICBhc3luYyByZWNlaXZlTWVzc2FnZVJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCByZXNwb25zZS5yZXNwb25zZUhUTUw7XG4gICAgICAgIGlmIChodG1sKSB7XG4gICAgICAgICAgICB0aGlzLnJlY2VpdmVNZXNzYWdlSFRNTChodG1sKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWNlaXZlTWVzc2FnZUhUTUwoaHRtbCkge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnJlY2VpdmVkTWVzc2FnZUZyb21TdHJlYW0obmV3IFN0cmVhbU1lc3NhZ2UoaHRtbCkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZldGNoUmVzcG9uc2VGcm9tRXZlbnQoZXZlbnQpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgZmV0Y2hSZXNwb25zZSA9IChfYSA9IGV2ZW50LmRldGFpbCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZldGNoUmVzcG9uc2U7XG4gICAgaWYgKGZldGNoUmVzcG9uc2UgaW5zdGFuY2VvZiBGZXRjaFJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybiBmZXRjaFJlc3BvbnNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZldGNoUmVzcG9uc2VJc1N0cmVhbShyZXNwb25zZSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IChfYSA9IHJlc3BvbnNlLmNvbnRlbnRUeXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBcIlwiO1xuICAgIHJldHVybiBjb250ZW50VHlwZS5zdGFydHNXaXRoKFN0cmVhbU1lc3NhZ2UuY29udGVudFR5cGUpO1xufVxuXG5jbGFzcyBFcnJvclJlbmRlcmVyIGV4dGVuZHMgUmVuZGVyZXIge1xuICAgIGFzeW5jIHJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5yZXBsYWNlSGVhZEFuZEJvZHkoKTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVNjcmlwdEVsZW1lbnRzKCk7XG4gICAgfVxuICAgIHJlcGxhY2VIZWFkQW5kQm9keSgpIHtcbiAgICAgICAgY29uc3QgeyBkb2N1bWVudEVsZW1lbnQsIGhlYWQsIGJvZHkgfSA9IGRvY3VtZW50O1xuICAgICAgICBkb2N1bWVudEVsZW1lbnQucmVwbGFjZUNoaWxkKHRoaXMubmV3SGVhZCwgaGVhZCk7XG4gICAgICAgIGRvY3VtZW50RWxlbWVudC5yZXBsYWNlQ2hpbGQodGhpcy5uZXdFbGVtZW50LCBib2R5KTtcbiAgICB9XG4gICAgYWN0aXZhdGVTY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgZm9yIChjb25zdCByZXBsYWNlYWJsZUVsZW1lbnQgb2YgdGhpcy5zY3JpcHRFbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHJlcGxhY2VhYmxlRWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jcmVhdGVTY3JpcHRFbGVtZW50KHJlcGxhY2VhYmxlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZWxlbWVudCwgcmVwbGFjZWFibGVFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgbmV3SGVhZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV3U25hcHNob3QuaGVhZFNuYXBzaG90LmVsZW1lbnQ7XG4gICAgfVxuICAgIGdldCBzY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInNjcmlwdFwiKV07XG4gICAgfVxufVxuXG5jbGFzcyBQYWdlUmVuZGVyZXIgZXh0ZW5kcyBSZW5kZXJlciB7XG4gICAgZ2V0IHNob3VsZFJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV3U25hcHNob3QuaXNWaXNpdGFibGUgJiYgdGhpcy50cmFja2VkRWxlbWVudHNBcmVJZGVudGljYWw7XG4gICAgfVxuICAgIHByZXBhcmVUb1JlbmRlcigpIHtcbiAgICAgICAgdGhpcy5tZXJnZUhlYWQoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLnJlcGxhY2VCb2R5KCk7XG4gICAgfVxuICAgIGZpbmlzaFJlbmRlcmluZygpIHtcbiAgICAgICAgc3VwZXIuZmluaXNoUmVuZGVyaW5nKCk7XG4gICAgICAgIGlmICghdGhpcy5pc1ByZXZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNGaXJzdEF1dG9mb2N1c2FibGVFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRIZWFkU25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTbmFwc2hvdC5oZWFkU25hcHNob3Q7XG4gICAgfVxuICAgIGdldCBuZXdIZWFkU25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ld1NuYXBzaG90LmhlYWRTbmFwc2hvdDtcbiAgICB9XG4gICAgZ2V0IG5ld0VsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ld1NuYXBzaG90LmVsZW1lbnQ7XG4gICAgfVxuICAgIG1lcmdlSGVhZCgpIHtcbiAgICAgICAgdGhpcy5jb3B5TmV3SGVhZFN0eWxlc2hlZXRFbGVtZW50cygpO1xuICAgICAgICB0aGlzLmNvcHlOZXdIZWFkU2NyaXB0RWxlbWVudHMoKTtcbiAgICAgICAgdGhpcy5yZW1vdmVDdXJyZW50SGVhZFByb3Zpc2lvbmFsRWxlbWVudHMoKTtcbiAgICAgICAgdGhpcy5jb3B5TmV3SGVhZFByb3Zpc2lvbmFsRWxlbWVudHMoKTtcbiAgICB9XG4gICAgcmVwbGFjZUJvZHkoKSB7XG4gICAgICAgIHRoaXMucHJlc2VydmluZ1Blcm1hbmVudEVsZW1lbnRzKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVOZXdCb2R5KCk7XG4gICAgICAgICAgICB0aGlzLmFzc2lnbk5ld0JvZHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCB0cmFja2VkRWxlbWVudHNBcmVJZGVudGljYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRIZWFkU25hcHNob3QudHJhY2tlZEVsZW1lbnRTaWduYXR1cmUgPT0gdGhpcy5uZXdIZWFkU25hcHNob3QudHJhY2tlZEVsZW1lbnRTaWduYXR1cmU7XG4gICAgfVxuICAgIGNvcHlOZXdIZWFkU3R5bGVzaGVldEVsZW1lbnRzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5uZXdIZWFkU3R5bGVzaGVldEVsZW1lbnRzKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvcHlOZXdIZWFkU2NyaXB0RWxlbWVudHMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLm5ld0hlYWRTY3JpcHRFbGVtZW50cykge1xuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVNjcmlwdEVsZW1lbnQoZWxlbWVudCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZUN1cnJlbnRIZWFkUHJvdmlzaW9uYWxFbGVtZW50cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuY3VycmVudEhlYWRQcm92aXNpb25hbEVsZW1lbnRzKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvcHlOZXdIZWFkUHJvdmlzaW9uYWxFbGVtZW50cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMubmV3SGVhZFByb3Zpc2lvbmFsRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWN0aXZhdGVOZXdCb2R5KCkge1xuICAgICAgICBkb2N1bWVudC5hZG9wdE5vZGUodGhpcy5uZXdFbGVtZW50KTtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZU5ld0JvZHlTY3JpcHRFbGVtZW50cygpO1xuICAgIH1cbiAgICBhY3RpdmF0ZU5ld0JvZHlTY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpbmVydFNjcmlwdEVsZW1lbnQgb2YgdGhpcy5uZXdCb2R5U2NyaXB0RWxlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2YXRlZFNjcmlwdEVsZW1lbnQgPSB0aGlzLmNyZWF0ZVNjcmlwdEVsZW1lbnQoaW5lcnRTY3JpcHRFbGVtZW50KTtcbiAgICAgICAgICAgIGluZXJ0U2NyaXB0RWxlbWVudC5yZXBsYWNlV2l0aChhY3RpdmF0ZWRTY3JpcHRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3NpZ25OZXdCb2R5KCkge1xuICAgICAgICBpZiAoZG9jdW1lbnQuYm9keSAmJiB0aGlzLm5ld0VsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQm9keUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVwbGFjZVdpdGgodGhpcy5uZXdFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLm5ld0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBuZXdIZWFkU3R5bGVzaGVldEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdIZWFkU25hcHNob3QuZ2V0U3R5bGVzaGVldEVsZW1lbnRzTm90SW5TbmFwc2hvdCh0aGlzLmN1cnJlbnRIZWFkU25hcHNob3QpO1xuICAgIH1cbiAgICBnZXQgbmV3SGVhZFNjcmlwdEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdIZWFkU25hcHNob3QuZ2V0U2NyaXB0RWxlbWVudHNOb3RJblNuYXBzaG90KHRoaXMuY3VycmVudEhlYWRTbmFwc2hvdCk7XG4gICAgfVxuICAgIGdldCBjdXJyZW50SGVhZFByb3Zpc2lvbmFsRWxlbWVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRIZWFkU25hcHNob3QucHJvdmlzaW9uYWxFbGVtZW50cztcbiAgICB9XG4gICAgZ2V0IG5ld0hlYWRQcm92aXNpb25hbEVsZW1lbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdIZWFkU25hcHNob3QucHJvdmlzaW9uYWxFbGVtZW50cztcbiAgICB9XG4gICAgZ2V0IG5ld0JvZHlTY3JpcHRFbGVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic2NyaXB0XCIpO1xuICAgIH1cbn1cblxuY2xhc3MgU25hcHNob3RDYWNoZSB7XG4gICAgY29uc3RydWN0b3Ioc2l6ZSkge1xuICAgICAgICB0aGlzLmtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSB7fTtcbiAgICAgICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgICB9XG4gICAgaGFzKGxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB0b0NhY2hlS2V5KGxvY2F0aW9uKSBpbiB0aGlzLnNuYXBzaG90cztcbiAgICB9XG4gICAgZ2V0KGxvY2F0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmhhcyhsb2NhdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5yZWFkKGxvY2F0aW9uKTtcbiAgICAgICAgICAgIHRoaXMudG91Y2gobG9jYXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1dChsb2NhdGlvbiwgc25hcHNob3QpIHtcbiAgICAgICAgdGhpcy53cml0ZShsb2NhdGlvbiwgc25hcHNob3QpO1xuICAgICAgICB0aGlzLnRvdWNoKGxvY2F0aW9uKTtcbiAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5zbmFwc2hvdHMgPSB7fTtcbiAgICB9XG4gICAgcmVhZChsb2NhdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5zbmFwc2hvdHNbdG9DYWNoZUtleShsb2NhdGlvbildO1xuICAgIH1cbiAgICB3cml0ZShsb2NhdGlvbiwgc25hcHNob3QpIHtcbiAgICAgICAgdGhpcy5zbmFwc2hvdHNbdG9DYWNoZUtleShsb2NhdGlvbildID0gc25hcHNob3Q7XG4gICAgfVxuICAgIHRvdWNoKGxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRvQ2FjaGVLZXkobG9jYXRpb24pO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMua2V5cy5pbmRleE9mKGtleSk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKVxuICAgICAgICAgICAgdGhpcy5rZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMua2V5cy51bnNoaWZ0KGtleSk7XG4gICAgICAgIHRoaXMudHJpbSgpO1xuICAgIH1cbiAgICB0cmltKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmtleXMuc3BsaWNlKHRoaXMuc2l6ZSkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNuYXBzaG90c1trZXldO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBQYWdlVmlldyBleHRlbmRzIFZpZXcge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnNuYXBzaG90Q2FjaGUgPSBuZXcgU25hcHNob3RDYWNoZSgxMCk7XG4gICAgICAgIHRoaXMubGFzdFJlbmRlcmVkTG9jYXRpb24gPSBuZXcgVVJMKGxvY2F0aW9uLmhyZWYpO1xuICAgIH1cbiAgICByZW5kZXJQYWdlKHNuYXBzaG90LCBpc1ByZXZpZXcgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCByZW5kZXJlciA9IG5ldyBQYWdlUmVuZGVyZXIodGhpcy5zbmFwc2hvdCwgc25hcHNob3QsIGlzUHJldmlldyk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcihyZW5kZXJlcik7XG4gICAgfVxuICAgIHJlbmRlckVycm9yKHNuYXBzaG90KSB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IEVycm9yUmVuZGVyZXIodGhpcy5zbmFwc2hvdCwgc25hcHNob3QsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKHJlbmRlcmVyKTtcbiAgICB9XG4gICAgY2xlYXJTbmFwc2hvdENhY2hlKCkge1xuICAgICAgICB0aGlzLnNuYXBzaG90Q2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgYXN5bmMgY2FjaGVTbmFwc2hvdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkQ2FjaGVTbmFwc2hvdCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS52aWV3V2lsbENhY2hlU25hcHNob3QoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc25hcHNob3QsIGxhc3RSZW5kZXJlZExvY2F0aW9uOiBsb2NhdGlvbiB9ID0gdGhpcztcbiAgICAgICAgICAgIGF3YWl0IG5leHRFdmVudExvb3BUaWNrKCk7XG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90Q2FjaGUucHV0KGxvY2F0aW9uLCBzbmFwc2hvdC5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDYWNoZWRTbmFwc2hvdEZvckxvY2F0aW9uKGxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNuYXBzaG90Q2FjaGUuZ2V0KGxvY2F0aW9uKTtcbiAgICB9XG4gICAgZ2V0IHNuYXBzaG90KCkge1xuICAgICAgICByZXR1cm4gUGFnZVNuYXBzaG90LmZyb21FbGVtZW50KHRoaXMuZWxlbWVudCk7XG4gICAgfVxuICAgIGdldCBzaG91bGRDYWNoZVNuYXBzaG90KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbmFwc2hvdC5pc0NhY2hlYWJsZTtcbiAgICB9XG59XG5cbmNsYXNzIFNlc3Npb24ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRvciA9IG5ldyBOYXZpZ2F0b3IodGhpcyk7XG4gICAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIaXN0b3J5KHRoaXMpO1xuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgUGFnZVZpZXcodGhpcywgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTtcbiAgICAgICAgdGhpcy5hZGFwdGVyID0gbmV3IEJyb3dzZXJBZGFwdGVyKHRoaXMpO1xuICAgICAgICB0aGlzLnBhZ2VPYnNlcnZlciA9IG5ldyBQYWdlT2JzZXJ2ZXIodGhpcyk7XG4gICAgICAgIHRoaXMuY2FjaGVPYnNlcnZlciA9IG5ldyBDYWNoZU9ic2VydmVyKCk7XG4gICAgICAgIHRoaXMubGlua0NsaWNrT2JzZXJ2ZXIgPSBuZXcgTGlua0NsaWNrT2JzZXJ2ZXIodGhpcyk7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdE9ic2VydmVyID0gbmV3IEZvcm1TdWJtaXRPYnNlcnZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5zY3JvbGxPYnNlcnZlciA9IG5ldyBTY3JvbGxPYnNlcnZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5zdHJlYW1PYnNlcnZlciA9IG5ldyBTdHJlYW1PYnNlcnZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5mcmFtZVJlZGlyZWN0b3IgPSBuZXcgRnJhbWVSZWRpcmVjdG9yKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgICAgIHRoaXMuZHJpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRGVsYXkgPSA1MDA7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZU9ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIHRoaXMubGlua0NsaWNrT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pdE9ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbE9ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLnN0cmVhbU9ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLmZyYW1lUmVkaXJlY3Rvci5zdGFydCgpO1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZU9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMubGlua0NsaWNrT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtU3VibWl0T2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxPYnNlcnZlci5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLnN0cmVhbU9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMuZnJhbWVSZWRpcmVjdG9yLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWdpc3RlckFkYXB0ZXIoYWRhcHRlcikge1xuICAgICAgICB0aGlzLmFkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIH1cbiAgICB2aXNpdChsb2NhdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMubmF2aWdhdG9yLnByb3Bvc2VWaXNpdChleHBhbmRVUkwobG9jYXRpb24pLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY29ubmVjdFN0cmVhbVNvdXJjZShzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5zdHJlYW1PYnNlcnZlci5jb25uZWN0U3RyZWFtU291cmNlKHNvdXJjZSk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3RTdHJlYW1Tb3VyY2Uoc291cmNlKSB7XG4gICAgICAgIHRoaXMuc3RyZWFtT2JzZXJ2ZXIuZGlzY29ubmVjdFN0cmVhbVNvdXJjZShzb3VyY2UpO1xuICAgIH1cbiAgICByZW5kZXJTdHJlYW1NZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKFN0cmVhbU1lc3NhZ2Uud3JhcChtZXNzYWdlKS5mcmFnbWVudCk7XG4gICAgfVxuICAgIGNsZWFyQ2FjaGUoKSB7XG4gICAgICAgIHRoaXMudmlldy5jbGVhclNuYXBzaG90Q2FjaGUoKTtcbiAgICB9XG4gICAgc2V0UHJvZ3Jlc3NCYXJEZWxheShkZWxheSkge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRGVsYXkgPSBkZWxheTtcbiAgICB9XG4gICAgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5LmxvY2F0aW9uO1xuICAgIH1cbiAgICBnZXQgcmVzdG9yYXRpb25JZGVudGlmaWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oaXN0b3J5LnJlc3RvcmF0aW9uSWRlbnRpZmllcjtcbiAgICB9XG4gICAgaGlzdG9yeVBvcHBlZFRvTG9jYXRpb25XaXRoUmVzdG9yYXRpb25JZGVudGlmaWVyKGxvY2F0aW9uLCByZXN0b3JhdGlvbklkZW50aWZpZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3Iuc3RhcnRWaXNpdChsb2NhdGlvbiwgcmVzdG9yYXRpb25JZGVudGlmaWVyLCB7IGFjdGlvbjogXCJyZXN0b3JlXCIsIGhpc3RvcnlDaGFuZ2VkOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnBhZ2VJbnZhbGlkYXRlZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZChwb3NpdGlvbikge1xuICAgICAgICB0aGlzLmhpc3RvcnkudXBkYXRlUmVzdG9yYXRpb25EYXRhKHsgc2Nyb2xsUG9zaXRpb246IHBvc2l0aW9uIH0pO1xuICAgIH1cbiAgICB3aWxsRm9sbG93TGlua1RvTG9jYXRpb24obGluaywgbG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudERyaXZlRW5hYmxlZChsaW5rKVxuICAgICAgICAgICAgJiYgdGhpcy5sb2NhdGlvbklzVmlzaXRhYmxlKGxvY2F0aW9uKVxuICAgICAgICAgICAgJiYgdGhpcy5hcHBsaWNhdGlvbkFsbG93c0ZvbGxvd2luZ0xpbmtUb0xvY2F0aW9uKGxpbmssIGxvY2F0aW9uKTtcbiAgICB9XG4gICAgZm9sbG93ZWRMaW5rVG9Mb2NhdGlvbihsaW5rLCBsb2NhdGlvbikge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmdldEFjdGlvbkZvckxpbmsobGluayk7XG4gICAgICAgIHRoaXMuY29udmVydExpbmtXaXRoTWV0aG9kQ2xpY2tUb0Zvcm1TdWJtaXNzaW9uKGxpbmspIHx8IHRoaXMudmlzaXQobG9jYXRpb24uaHJlZiwgeyBhY3Rpb24gfSk7XG4gICAgfVxuICAgIGNvbnZlcnRMaW5rV2l0aE1ldGhvZENsaWNrVG9Gb3JtU3VibWlzc2lvbihsaW5rKSB7XG4gICAgICAgIGNvbnN0IGxpbmtNZXRob2QgPSBsaW5rLmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm8tbWV0aG9kXCIpO1xuICAgICAgICBpZiAobGlua01ldGhvZCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuICAgICAgICAgICAgZm9ybS5tZXRob2QgPSBsaW5rTWV0aG9kO1xuICAgICAgICAgICAgZm9ybS5hY3Rpb24gPSBsaW5rLmdldEF0dHJpYnV0ZShcImhyZWZcIikgfHwgXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7XG4gICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2goXCJzdWJtaXRcIiwgeyBjYW5jZWxhYmxlOiB0cnVlLCB0YXJnZXQ6IGZvcm0gfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWxsb3dzVmlzaXRpbmdMb2NhdGlvbldpdGhBY3Rpb24obG9jYXRpb24sIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhdGlvbldpdGhBY3Rpb25Jc1NhbWVQYWdlKGxvY2F0aW9uLCBhY3Rpb24pIHx8IHRoaXMuYXBwbGljYXRpb25BbGxvd3NWaXNpdGluZ0xvY2F0aW9uKGxvY2F0aW9uKTtcbiAgICB9XG4gICAgdmlzaXRQcm9wb3NlZFRvTG9jYXRpb24obG9jYXRpb24sIG9wdGlvbnMpIHtcbiAgICAgICAgZXh0ZW5kVVJMV2l0aERlcHJlY2F0ZWRQcm9wZXJ0aWVzKGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5hZGFwdGVyLnZpc2l0UHJvcG9zZWRUb0xvY2F0aW9uKGxvY2F0aW9uLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdmlzaXRTdGFydGVkKHZpc2l0KSB7XG4gICAgICAgIGV4dGVuZFVSTFdpdGhEZXByZWNhdGVkUHJvcGVydGllcyh2aXNpdC5sb2NhdGlvbik7XG4gICAgICAgIGlmICghdmlzaXQuc2lsZW50KSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJWaXNpdGluZ0xvY2F0aW9uKHZpc2l0LmxvY2F0aW9uLCB2aXNpdC5hY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0Q29tcGxldGVkKHZpc2l0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5QXBwbGljYXRpb25BZnRlclBhZ2VMb2FkKHZpc2l0LmdldFRpbWluZ01ldHJpY3MoKSk7XG4gICAgfVxuICAgIGxvY2F0aW9uV2l0aEFjdGlvbklzU2FtZVBhZ2UobG9jYXRpb24sIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0b3IubG9jYXRpb25XaXRoQWN0aW9uSXNTYW1lUGFnZShsb2NhdGlvbiwgYWN0aW9uKTtcbiAgICB9XG4gICAgdmlzaXRTY3JvbGxlZFRvU2FtZVBhZ2VMb2NhdGlvbihvbGRVUkwsIG5ld1VSTCkge1xuICAgICAgICB0aGlzLm5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJWaXNpdGluZ1NhbWVQYWdlTG9jYXRpb24ob2xkVVJMLCBuZXdVUkwpO1xuICAgIH1cbiAgICB3aWxsU3VibWl0Rm9ybShmb3JtLCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudERyaXZlRW5hYmxlZChmb3JtKSAmJiB0aGlzLmVsZW1lbnREcml2ZUVuYWJsZWQoc3VibWl0dGVyKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pdHRlZChmb3JtLCBzdWJtaXR0ZXIpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3Iuc3VibWl0Rm9ybShmb3JtLCBzdWJtaXR0ZXIpO1xuICAgIH1cbiAgICBwYWdlQmVjYW1lSW50ZXJhY3RpdmUoKSB7XG4gICAgICAgIHRoaXMudmlldy5sYXN0UmVuZGVyZWRMb2NhdGlvbiA9IHRoaXMubG9jYXRpb247XG4gICAgICAgIHRoaXMubm90aWZ5QXBwbGljYXRpb25BZnRlclBhZ2VMb2FkKCk7XG4gICAgfVxuICAgIHBhZ2VMb2FkZWQoKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5hc3N1bWVDb250cm9sT2ZTY3JvbGxSZXN0b3JhdGlvbigpO1xuICAgIH1cbiAgICBwYWdlV2lsbFVubG9hZCgpIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnJlbGlucXVpc2hDb250cm9sT2ZTY3JvbGxSZXN0b3JhdGlvbigpO1xuICAgIH1cbiAgICByZWNlaXZlZE1lc3NhZ2VGcm9tU3RyZWFtKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJTdHJlYW1NZXNzYWdlKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB2aWV3V2lsbENhY2hlU25hcHNob3QoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCEoKF9hID0gdGhpcy5uYXZpZ2F0b3IuY3VycmVudFZpc2l0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2lsZW50KSkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkJlZm9yZUNhY2hpbmdTbmFwc2hvdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFsbG93c0ltbWVkaWF0ZVJlbmRlcih7IGVsZW1lbnQgfSwgcmVzdW1lKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkJlZm9yZVJlbmRlcihlbGVtZW50LCByZXN1bWUpO1xuICAgICAgICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQ7XG4gICAgfVxuICAgIHZpZXdSZW5kZXJlZFNuYXBzaG90KHNuYXBzaG90LCBpc1ByZXZpZXcpIHtcbiAgICAgICAgdGhpcy52aWV3Lmxhc3RSZW5kZXJlZExvY2F0aW9uID0gdGhpcy5oaXN0b3J5LmxvY2F0aW9uO1xuICAgICAgICB0aGlzLm5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJSZW5kZXIoKTtcbiAgICB9XG4gICAgdmlld0ludmFsaWRhdGVkKCkge1xuICAgICAgICB0aGlzLmFkYXB0ZXIucGFnZUludmFsaWRhdGVkKCk7XG4gICAgfVxuICAgIGZyYW1lTG9hZGVkKGZyYW1lKSB7XG4gICAgICAgIHRoaXMubm90aWZ5QXBwbGljYXRpb25BZnRlckZyYW1lTG9hZChmcmFtZSk7XG4gICAgfVxuICAgIGZyYW1lUmVuZGVyZWQoZmV0Y2hSZXNwb25zZSwgZnJhbWUpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkFmdGVyRnJhbWVSZW5kZXIoZmV0Y2hSZXNwb25zZSwgZnJhbWUpO1xuICAgIH1cbiAgICBhcHBsaWNhdGlvbkFsbG93c0ZvbGxvd2luZ0xpbmtUb0xvY2F0aW9uKGxpbmssIGxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkFmdGVyQ2xpY2tpbmdMaW5rVG9Mb2NhdGlvbihsaW5rLCBsb2NhdGlvbik7XG4gICAgICAgIHJldHVybiAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG4gICAgYXBwbGljYXRpb25BbGxvd3NWaXNpdGluZ0xvY2F0aW9uKGxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5ub3RpZnlBcHBsaWNhdGlvbkJlZm9yZVZpc2l0aW5nTG9jYXRpb24obG9jYXRpb24pO1xuICAgICAgICByZXR1cm4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQ7XG4gICAgfVxuICAgIG5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJDbGlja2luZ0xpbmtUb0xvY2F0aW9uKGxpbmssIGxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOmNsaWNrXCIsIHsgdGFyZ2V0OiBsaW5rLCBkZXRhaWw6IHsgdXJsOiBsb2NhdGlvbi5ocmVmIH0sIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgfVxuICAgIG5vdGlmeUFwcGxpY2F0aW9uQmVmb3JlVmlzaXRpbmdMb2NhdGlvbihsb2NhdGlvbikge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2goXCJ0dXJibzpiZWZvcmUtdmlzaXRcIiwgeyBkZXRhaWw6IHsgdXJsOiBsb2NhdGlvbi5ocmVmIH0sIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgfVxuICAgIG5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJWaXNpdGluZ0xvY2F0aW9uKGxvY2F0aW9uLCBhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKFwidHVyYm86dmlzaXRcIiwgeyBkZXRhaWw6IHsgdXJsOiBsb2NhdGlvbi5ocmVmLCBhY3Rpb24gfSB9KTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25CZWZvcmVDYWNoaW5nU25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOmJlZm9yZS1jYWNoZVwiKTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25CZWZvcmVSZW5kZXIobmV3Qm9keSwgcmVzdW1lKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOmJlZm9yZS1yZW5kZXJcIiwgeyBkZXRhaWw6IHsgbmV3Qm9keSwgcmVzdW1lIH0sIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgfVxuICAgIG5vdGlmeUFwcGxpY2F0aW9uQWZ0ZXJSZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOnJlbmRlclwiKTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25BZnRlclBhZ2VMb2FkKHRpbWluZyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOmxvYWRcIiwgeyBkZXRhaWw6IHsgdXJsOiB0aGlzLmxvY2F0aW9uLmhyZWYsIHRpbWluZyB9IH0pO1xuICAgIH1cbiAgICBub3RpZnlBcHBsaWNhdGlvbkFmdGVyVmlzaXRpbmdTYW1lUGFnZUxvY2F0aW9uKG9sZFVSTCwgbmV3VVJMKSB7XG4gICAgICAgIGRpc3BhdGNoRXZlbnQobmV3IEhhc2hDaGFuZ2VFdmVudChcImhhc2hjaGFuZ2VcIiwgeyBvbGRVUkw6IG9sZFVSTC50b1N0cmluZygpLCBuZXdVUkw6IG5ld1VSTC50b1N0cmluZygpIH0pKTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25BZnRlckZyYW1lTG9hZChmcmFtZSkge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2goXCJ0dXJibzpmcmFtZS1sb2FkXCIsIHsgdGFyZ2V0OiBmcmFtZSB9KTtcbiAgICB9XG4gICAgbm90aWZ5QXBwbGljYXRpb25BZnRlckZyYW1lUmVuZGVyKGZldGNoUmVzcG9uc2UsIGZyYW1lKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChcInR1cmJvOmZyYW1lLXJlbmRlclwiLCB7IGRldGFpbDogeyBmZXRjaFJlc3BvbnNlIH0sIHRhcmdldDogZnJhbWUsIGNhbmNlbGFibGU6IHRydWUgfSk7XG4gICAgfVxuICAgIGVsZW1lbnREcml2ZUVuYWJsZWQoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVsZW1lbnQuY2xvc2VzdChcIltkYXRhLXR1cmJvXVwiKTtcbiAgICAgICAgaWYgKHRoaXMuZHJpdmUpIHtcbiAgICAgICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmVyLmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm9cIikgIT0gXCJmYWxzZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvXCIpID09IFwidHJ1ZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldEFjdGlvbkZvckxpbmsobGluaykge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBsaW5rLmdldEF0dHJpYnV0ZShcImRhdGEtdHVyYm8tYWN0aW9uXCIpO1xuICAgICAgICByZXR1cm4gaXNBY3Rpb24oYWN0aW9uKSA/IGFjdGlvbiA6IFwiYWR2YW5jZVwiO1xuICAgIH1cbiAgICBsb2NhdGlvbklzVmlzaXRhYmxlKGxvY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiBpc1ByZWZpeGVkQnkobG9jYXRpb24sIHRoaXMuc25hcHNob3Qucm9vdExvY2F0aW9uKSAmJiBpc0hUTUwobG9jYXRpb24pO1xuICAgIH1cbiAgICBnZXQgc25hcHNob3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXcuc25hcHNob3Q7XG4gICAgfVxufVxuZnVuY3Rpb24gZXh0ZW5kVVJMV2l0aERlcHJlY2F0ZWRQcm9wZXJ0aWVzKHVybCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHVybCwgZGVwcmVjYXRlZExvY2F0aW9uUHJvcGVydHlEZXNjcmlwdG9ycyk7XG59XG5jb25zdCBkZXByZWNhdGVkTG9jYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3JzID0ge1xuICAgIGFic29sdXRlVVJMOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jb25zdCBzZXNzaW9uID0gbmV3IFNlc3Npb247XG5jb25zdCB7IG5hdmlnYXRvciB9ID0gc2Vzc2lvbjtcbmZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgIHNlc3Npb24uc3RhcnQoKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyQWRhcHRlcihhZGFwdGVyKSB7XG4gICAgc2Vzc2lvbi5yZWdpc3RlckFkYXB0ZXIoYWRhcHRlcik7XG59XG5mdW5jdGlvbiB2aXNpdChsb2NhdGlvbiwgb3B0aW9ucykge1xuICAgIHNlc3Npb24udmlzaXQobG9jYXRpb24sIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gY29ubmVjdFN0cmVhbVNvdXJjZShzb3VyY2UpIHtcbiAgICBzZXNzaW9uLmNvbm5lY3RTdHJlYW1Tb3VyY2Uoc291cmNlKTtcbn1cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RTdHJlYW1Tb3VyY2Uoc291cmNlKSB7XG4gICAgc2Vzc2lvbi5kaXNjb25uZWN0U3RyZWFtU291cmNlKHNvdXJjZSk7XG59XG5mdW5jdGlvbiByZW5kZXJTdHJlYW1NZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICBzZXNzaW9uLnJlbmRlclN0cmVhbU1lc3NhZ2UobWVzc2FnZSk7XG59XG5mdW5jdGlvbiBjbGVhckNhY2hlKCkge1xuICAgIHNlc3Npb24uY2xlYXJDYWNoZSgpO1xufVxuZnVuY3Rpb24gc2V0UHJvZ3Jlc3NCYXJEZWxheShkZWxheSkge1xuICAgIHNlc3Npb24uc2V0UHJvZ3Jlc3NCYXJEZWxheShkZWxheSk7XG59XG5cbnZhciBUdXJibyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgbmF2aWdhdG9yOiBuYXZpZ2F0b3IsXG4gICAgc2Vzc2lvbjogc2Vzc2lvbixcbiAgICBQYWdlUmVuZGVyZXI6IFBhZ2VSZW5kZXJlcixcbiAgICBQYWdlU25hcHNob3Q6IFBhZ2VTbmFwc2hvdCxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgcmVnaXN0ZXJBZGFwdGVyOiByZWdpc3RlckFkYXB0ZXIsXG4gICAgdmlzaXQ6IHZpc2l0LFxuICAgIGNvbm5lY3RTdHJlYW1Tb3VyY2U6IGNvbm5lY3RTdHJlYW1Tb3VyY2UsXG4gICAgZGlzY29ubmVjdFN0cmVhbVNvdXJjZTogZGlzY29ubmVjdFN0cmVhbVNvdXJjZSxcbiAgICByZW5kZXJTdHJlYW1NZXNzYWdlOiByZW5kZXJTdHJlYW1NZXNzYWdlLFxuICAgIGNsZWFyQ2FjaGU6IGNsZWFyQ2FjaGUsXG4gICAgc2V0UHJvZ3Jlc3NCYXJEZWxheTogc2V0UHJvZ3Jlc3NCYXJEZWxheVxufSk7XG5cbmNsYXNzIEZyYW1lQ29udHJvbGxlciB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgICAgICB0aGlzLnJlc29sdmVWaXNpdFByb21pc2UgPSAoKSA9PiB7IH07XG4gICAgICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzQmVlbkxvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldHRpbmdTb3VyY2VVUkwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IEZyYW1lVmlldyh0aGlzLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICB0aGlzLmFwcGVhcmFuY2VPYnNlcnZlciA9IG5ldyBBcHBlYXJhbmNlT2JzZXJ2ZXIodGhpcywgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgdGhpcy5saW5rSW50ZXJjZXB0b3IgPSBuZXcgTGlua0ludGVyY2VwdG9yKHRoaXMsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHRoaXMuZm9ybUludGVyY2VwdG9yID0gbmV3IEZvcm1JbnRlcmNlcHRvcih0aGlzLCB0aGlzLmVsZW1lbnQpO1xuICAgIH1cbiAgICBjb25uZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvYWRpbmdTdHlsZSA9PSBGcmFtZUxvYWRpbmdTdHlsZS5sYXp5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlYXJhbmNlT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGlua0ludGVyY2VwdG9yLnN0YXJ0KCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1JbnRlcmNlcHRvci5zdGFydCgpO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VVUkxDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hcHBlYXJhbmNlT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5saW5rSW50ZXJjZXB0b3Iuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtSW50ZXJjZXB0b3Iuc3RvcCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRpc2FibGVkQ2hhbmdlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZGluZ1N0eWxlID09IEZyYW1lTG9hZGluZ1N0eWxlLmVhZ2VyKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRTb3VyY2VVUkwoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VVUkxDaGFuZ2VkKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3R5bGUgPT0gRnJhbWVMb2FkaW5nU3R5bGUuZWFnZXIgfHwgdGhpcy5oYXNCZWVuTG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRTb3VyY2VVUkwoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsb2FkaW5nU3R5bGVDaGFuZ2VkKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3R5bGUgPT0gRnJhbWVMb2FkaW5nU3R5bGUubGF6eSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlYXJhbmNlT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZWFyYW5jZU9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFNvdXJjZVVSTCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGxvYWRTb3VyY2VVUkwoKSB7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nU291cmNlVVJMICYmIHRoaXMuZW5hYmxlZCAmJiB0aGlzLmlzQWN0aXZlICYmICh0aGlzLnJlbG9hZGFibGUgfHwgdGhpcy5zb3VyY2VVUkwgIT0gdGhpcy5jdXJyZW50VVJMKSkge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNVUkwgPSB0aGlzLmN1cnJlbnRVUkw7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVUkwgPSB0aGlzLnNvdXJjZVVSTDtcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVVSTCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5sb2FkZWQgPSB0aGlzLnZpc2l0KHRoaXMuc291cmNlVVJMKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlYXJhbmNlT2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVsZW1lbnQubG9hZGVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0JlZW5Mb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmZyYW1lTG9hZGVkKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVUkwgPSBwcmV2aW91c1VSTDtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGxvYWRSZXNwb25zZShmZXRjaFJlc3BvbnNlKSB7XG4gICAgICAgIGlmIChmZXRjaFJlc3BvbnNlLnJlZGlyZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlVVJMID0gZmV0Y2hSZXNwb25zZS5yZXNwb25zZS51cmw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCBmZXRjaFJlc3BvbnNlLnJlc3BvbnNlSFRNTDtcbiAgICAgICAgICAgIGlmIChodG1sKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBib2R5IH0gPSBwYXJzZUhUTUxEb2N1bWVudChodG1sKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IG5ldyBTbmFwc2hvdChhd2FpdCB0aGlzLmV4dHJhY3RGb3JlaWduRnJhbWVFbGVtZW50KGJvZHkpKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJlciA9IG5ldyBGcmFtZVJlbmRlcmVyKHRoaXMudmlldy5zbmFwc2hvdCwgc25hcHNob3QsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3LnJlbmRlclByb21pc2UpXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXJQcm9taXNlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlldy5yZW5kZXIocmVuZGVyZXIpO1xuICAgICAgICAgICAgICAgIHNlc3Npb24uZnJhbWVSZW5kZXJlZChmZXRjaFJlc3BvbnNlLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsZW1lbnRBcHBlYXJlZEluVmlld3BvcnQoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmxvYWRTb3VyY2VVUkwoKTtcbiAgICB9XG4gICAgc2hvdWxkSW50ZXJjZXB0TGlua0NsaWNrKGVsZW1lbnQsIHVybCkge1xuICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLW1ldGhvZFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvdWxkSW50ZXJjZXB0TmF2aWdhdGlvbihlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsaW5rQ2xpY2tJbnRlcmNlcHRlZChlbGVtZW50LCB1cmwpIHtcbiAgICAgICAgdGhpcy5yZWxvYWRhYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUZyYW1lKGVsZW1lbnQsIHVybCk7XG4gICAgfVxuICAgIHNob3VsZEludGVyY2VwdEZvcm1TdWJtaXNzaW9uKGVsZW1lbnQsIHN1Ym1pdHRlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG91bGRJbnRlcmNlcHROYXZpZ2F0aW9uKGVsZW1lbnQsIHN1Ym1pdHRlcik7XG4gICAgfVxuICAgIGZvcm1TdWJtaXNzaW9uSW50ZXJjZXB0ZWQoZWxlbWVudCwgc3VibWl0dGVyKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1TdWJtaXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1TdWJtaXNzaW9uLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbG9hZGFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb3JtU3VibWlzc2lvbiA9IG5ldyBGb3JtU3VibWlzc2lvbih0aGlzLCBlbGVtZW50LCBzdWJtaXR0ZXIpO1xuICAgICAgICBpZiAodGhpcy5mb3JtU3VibWlzc2lvbi5mZXRjaFJlcXVlc3QuaXNJZGVtcG90ZW50KSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlRnJhbWUoZWxlbWVudCwgdGhpcy5mb3JtU3VibWlzc2lvbi5mZXRjaFJlcXVlc3QudXJsLmhyZWYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBmZXRjaFJlcXVlc3QgfSA9IHRoaXMuZm9ybVN1Ym1pc3Npb247XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVIZWFkZXJzRm9yUmVxdWVzdChmZXRjaFJlcXVlc3QuaGVhZGVycywgZmV0Y2hSZXF1ZXN0KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pc3Npb24uc3RhcnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlSGVhZGVyc0ZvclJlcXVlc3QoaGVhZGVycywgcmVxdWVzdCkge1xuICAgICAgICBoZWFkZXJzW1wiVHVyYm8tRnJhbWVcIl0gPSB0aGlzLmlkO1xuICAgIH1cbiAgICByZXF1ZXN0U3RhcnRlZChyZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJidXN5XCIsIFwiXCIpO1xuICAgIH1cbiAgICByZXF1ZXN0UHJldmVudGVkSGFuZGxpbmdSZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAgICB0aGlzLnJlc29sdmVWaXNpdFByb21pc2UoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVxdWVzdFN1Y2NlZWRlZFdpdGhSZXNwb25zZShyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgIHRoaXMucmVzb2x2ZVZpc2l0UHJvbWlzZSgpO1xuICAgIH1cbiAgICByZXF1ZXN0RmFpbGVkV2l0aFJlc3BvbnNlKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLnJlc29sdmVWaXNpdFByb21pc2UoKTtcbiAgICB9XG4gICAgcmVxdWVzdEVycm9yZWQocmVxdWVzdCwgZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHRoaXMucmVzb2x2ZVZpc2l0UHJvbWlzZSgpO1xuICAgIH1cbiAgICByZXF1ZXN0RmluaXNoZWQocmVxdWVzdCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiYnVzeVwiKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25TdGFydGVkKGZvcm1TdWJtaXNzaW9uKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVFbGVtZW50KGZvcm1TdWJtaXNzaW9uLmZvcm1FbGVtZW50KTtcbiAgICAgICAgZnJhbWUuc2V0QXR0cmlidXRlKFwiYnVzeVwiLCBcIlwiKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25TdWNjZWVkZWRXaXRoUmVzcG9uc2UoZm9ybVN1Ym1pc3Npb24sIHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVFbGVtZW50KGZvcm1TdWJtaXNzaW9uLmZvcm1FbGVtZW50KTtcbiAgICAgICAgZnJhbWUuZGVsZWdhdGUubG9hZFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25GYWlsZWRXaXRoUmVzcG9uc2UoZm9ybVN1Ym1pc3Npb24sIGZldGNoUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50LmRlbGVnYXRlLmxvYWRSZXNwb25zZShmZXRjaFJlc3BvbnNlKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25FcnJvcmVkKGZvcm1TdWJtaXNzaW9uLCBlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgZm9ybVN1Ym1pc3Npb25GaW5pc2hlZChmb3JtU3VibWlzc2lvbikge1xuICAgICAgICBjb25zdCBmcmFtZSA9IHRoaXMuZmluZEZyYW1lRWxlbWVudChmb3JtU3VibWlzc2lvbi5mb3JtRWxlbWVudCk7XG4gICAgICAgIGZyYW1lLnJlbW92ZUF0dHJpYnV0ZShcImJ1c3lcIik7XG4gICAgfVxuICAgIGFsbG93c0ltbWVkaWF0ZVJlbmRlcihzbmFwc2hvdCwgcmVzdW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2aWV3UmVuZGVyZWRTbmFwc2hvdChzbmFwc2hvdCwgaXNQcmV2aWV3KSB7XG4gICAgfVxuICAgIHZpZXdJbnZhbGlkYXRlZCgpIHtcbiAgICB9XG4gICAgYXN5bmMgdmlzaXQodXJsKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgRmV0Y2hSZXF1ZXN0KHRoaXMsIEZldGNoTWV0aG9kLmdldCwgZXhwYW5kVVJMKHVybCkpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVWaXNpdFByb21pc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVmlzaXRQcm9taXNlID0gKCkgPT4geyB9O1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXF1ZXN0LnBlcmZvcm0oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5hdmlnYXRlRnJhbWUoZWxlbWVudCwgdXJsKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBmcmFtZS5zcmMgPSB1cmw7XG4gICAgfVxuICAgIGZpbmRGcmFtZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLWZyYW1lXCIpIHx8IHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIik7XG4gICAgICAgIHJldHVybiAoX2EgPSBnZXRGcmFtZUVsZW1lbnRCeUlkKGlkKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5lbGVtZW50O1xuICAgIH1cbiAgICBhc3luYyBleHRyYWN0Rm9yZWlnbkZyYW1lRWxlbWVudChjb250YWluZXIpIHtcbiAgICAgICAgbGV0IGVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGlkID0gQ1NTLmVzY2FwZSh0aGlzLmlkKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ID0gYWN0aXZhdGVFbGVtZW50KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGB0dXJiby1mcmFtZSMke2lkfWApLCB0aGlzLmN1cnJlbnRVUkwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9IGFjdGl2YXRlRWxlbWVudChjb250YWluZXIucXVlcnlTZWxlY3RvcihgdHVyYm8tZnJhbWVbc3JjXVtyZWN1cnNlfj0ke2lkfV1gKSwgdGhpcy5jdXJyZW50VVJMKSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGVsZW1lbnQubG9hZGVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dHJhY3RGb3JlaWduRnJhbWVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgUmVzcG9uc2UgaGFzIG5vIG1hdGNoaW5nIDx0dXJiby1mcmFtZSBpZD1cIiR7aWR9XCI+IGVsZW1lbnRgKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRnJhbWVFbGVtZW50KCk7XG4gICAgfVxuICAgIHNob3VsZEludGVyY2VwdE5hdmlnYXRpb24oZWxlbWVudCwgc3VibWl0dGVyKSB7XG4gICAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR1cmJvLWZyYW1lXCIpIHx8IHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIik7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8IGlkID09IFwiX3RvcFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnRCeUlkKGlkKTtcbiAgICAgICAgICAgIGlmIChmcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWZyYW1lRWxlbWVudC5kaXNhYmxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlc3Npb24uZWxlbWVudERyaXZlRW5hYmxlZChlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdWJtaXR0ZXIgJiYgIXNlc3Npb24uZWxlbWVudERyaXZlRW5hYmxlZChzdWJtaXR0ZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5pZDtcbiAgICB9XG4gICAgZ2V0IGVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5lbGVtZW50LmRpc2FibGVkO1xuICAgIH1cbiAgICBnZXQgc291cmNlVVJMKCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LnNyYykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5zcmM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHJlbG9hZGFibGUoKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gdGhpcy5maW5kRnJhbWVFbGVtZW50KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBmcmFtZS5oYXNBdHRyaWJ1dGUoXCJyZWxvYWRhYmxlXCIpO1xuICAgIH1cbiAgICBzZXQgcmVsb2FkYWJsZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmcmFtZSA9IHRoaXMuZmluZEZyYW1lRWxlbWVudCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGZyYW1lLnNldEF0dHJpYnV0ZShcInJlbG9hZGFibGVcIiwgXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmcmFtZS5yZW1vdmVBdHRyaWJ1dGUoXCJyZWxvYWRhYmxlXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBzb3VyY2VVUkwoc291cmNlVVJMKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ1NvdXJjZVVSTCA9IHRydWU7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zcmMgPSBzb3VyY2VVUkwgIT09IG51bGwgJiYgc291cmNlVVJMICE9PSB2b2lkIDAgPyBzb3VyY2VVUkwgOiBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRVUkwgPSB0aGlzLmVsZW1lbnQuc3JjO1xuICAgICAgICB0aGlzLnNldHRpbmdTb3VyY2VVUkwgPSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IGxvYWRpbmdTdHlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5sb2FkaW5nO1xuICAgIH1cbiAgICBnZXQgaXNMb2FkaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtU3VibWlzc2lvbiAhPT0gdW5kZWZpbmVkIHx8IHRoaXMucmVzb2x2ZVZpc2l0UHJvbWlzZSgpICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5pc0FjdGl2ZSAmJiB0aGlzLmNvbm5lY3RlZDtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnRCeUlkKGlkKSB7XG4gICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBGcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gYWN0aXZhdGVFbGVtZW50KGVsZW1lbnQsIGN1cnJlbnRVUkwpIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBzcmMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcInNyY1wiKTtcbiAgICAgICAgaWYgKHNyYyAhPSBudWxsICYmIGN1cnJlbnRVUkwgIT0gbnVsbCAmJiB1cmxzQXJlRXF1YWwoc3JjLCBjdXJyZW50VVJMKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYXRjaGluZyA8dHVyYm8tZnJhbWUgaWQ9XCIke2VsZW1lbnQuaWR9XCI+IGVsZW1lbnQgaGFzIGEgc291cmNlIFVSTCB3aGljaCByZWZlcmVuY2VzIGl0c2VsZmApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuaW1wb3J0Tm9kZShlbGVtZW50LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEZyYW1lRWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IFN0cmVhbUFjdGlvbnMgPSB7XG4gICAgYWZ0ZXIoKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0RWxlbWVudHMuZm9yRWFjaChlID0+IHsgdmFyIF9hOyByZXR1cm4gKF9hID0gZS5wYXJlbnRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5zZXJ0QmVmb3JlKHRoaXMudGVtcGxhdGVDb250ZW50LCBlLm5leHRTaWJsaW5nKTsgfSk7XG4gICAgfSxcbiAgICBhcHBlbmQoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRHVwbGljYXRlVGFyZ2V0Q2hpbGRyZW4oKTtcbiAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50cy5mb3JFYWNoKGUgPT4gZS5hcHBlbmQodGhpcy50ZW1wbGF0ZUNvbnRlbnQpKTtcbiAgICB9LFxuICAgIGJlZm9yZSgpIHtcbiAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50cy5mb3JFYWNoKGUgPT4geyB2YXIgX2E7IHJldHVybiAoX2EgPSBlLnBhcmVudEVsZW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pbnNlcnRCZWZvcmUodGhpcy50ZW1wbGF0ZUNvbnRlbnQsIGUpOyB9KTtcbiAgICB9LFxuICAgIHByZXBlbmQoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRHVwbGljYXRlVGFyZ2V0Q2hpbGRyZW4oKTtcbiAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50cy5mb3JFYWNoKGUgPT4gZS5wcmVwZW5kKHRoaXMudGVtcGxhdGVDb250ZW50KSk7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0RWxlbWVudHMuZm9yRWFjaChlID0+IGUucmVtb3ZlKCkpO1xuICAgIH0sXG4gICAgcmVwbGFjZSgpIHtcbiAgICAgICAgdGhpcy50YXJnZXRFbGVtZW50cy5mb3JFYWNoKGUgPT4gZS5yZXBsYWNlV2l0aCh0aGlzLnRlbXBsYXRlQ29udGVudCkpO1xuICAgIH0sXG4gICAgdXBkYXRlKCkge1xuICAgICAgICB0aGlzLnRhcmdldEVsZW1lbnRzLmZvckVhY2goZSA9PiB7XG4gICAgICAgICAgICBlLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBlLmFwcGVuZCh0aGlzLnRlbXBsYXRlQ29udGVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbmNsYXNzIFN0cmVhbUVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyByZW5kZXIoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMucmVuZGVyUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRoaXMucmVuZGVyUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNwYXRjaEV2ZW50KHRoaXMuYmVmb3JlUmVuZGVyRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV4dEFuaW1hdGlvbkZyYW1lKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtQWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCkpO1xuICAgIH1cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHsgfVxuICAgIH1cbiAgICByZW1vdmVEdXBsaWNhdGVUYXJnZXRDaGlsZHJlbigpIHtcbiAgICAgICAgdGhpcy5kdXBsaWNhdGVDaGlsZHJlbi5mb3JFYWNoKGMgPT4gYy5yZW1vdmUoKSk7XG4gICAgfVxuICAgIGdldCBkdXBsaWNhdGVDaGlsZHJlbigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBleGlzdGluZ0NoaWxkcmVuID0gdGhpcy50YXJnZXRFbGVtZW50cy5mbGF0TWFwKGUgPT4gWy4uLmUuY2hpbGRyZW5dKS5maWx0ZXIoYyA9PiAhIWMuaWQpO1xuICAgICAgICBjb25zdCBuZXdDaGlsZHJlbklkcyA9IFsuLi4oX2EgPSB0aGlzLnRlbXBsYXRlQ29udGVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNoaWxkcmVuXS5maWx0ZXIoYyA9PiAhIWMuaWQpLm1hcChjID0+IGMuaWQpO1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdDaGlsZHJlbi5maWx0ZXIoYyA9PiBuZXdDaGlsZHJlbklkcy5pbmNsdWRlcyhjLmlkKSk7XG4gICAgfVxuICAgIGdldCBwZXJmb3JtQWN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5hY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkZ1bmN0aW9uID0gU3RyZWFtQWN0aW9uc1t0aGlzLmFjdGlvbl07XG4gICAgICAgICAgICBpZiAoYWN0aW9uRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uRnVuY3Rpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJhaXNlKFwidW5rbm93biBhY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yYWlzZShcImFjdGlvbiBhdHRyaWJ1dGUgaXMgbWlzc2luZ1wiKTtcbiAgICB9XG4gICAgZ2V0IHRhcmdldEVsZW1lbnRzKCkge1xuICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldEVsZW1lbnRzQnlJZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnRhcmdldHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldEVsZW1lbnRzQnlRdWVyeTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmFpc2UoXCJ0YXJnZXQgb3IgdGFyZ2V0cyBhdHRyaWJ1dGUgaXMgbWlzc2luZ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdGVtcGxhdGVDb250ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZUVsZW1lbnQuY29udGVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgfVxuICAgIGdldCB0ZW1wbGF0ZUVsZW1lbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLmZpcnN0RWxlbWVudENoaWxkIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yYWlzZShcImZpcnN0IGNoaWxkIGVsZW1lbnQgbXVzdCBiZSBhIDx0ZW1wbGF0ZT4gZWxlbWVudFwiKTtcbiAgICB9XG4gICAgZ2V0IGFjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKFwiYWN0aW9uXCIpO1xuICAgIH1cbiAgICBnZXQgdGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIik7XG4gICAgfVxuICAgIGdldCB0YXJnZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRzXCIpO1xuICAgIH1cbiAgICByYWlzZShtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmRlc2NyaXB0aW9ufTogJHttZXNzYWdlfWApO1xuICAgIH1cbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoKF9hID0gdGhpcy5vdXRlckhUTUwubWF0Y2goLzxbXj5dKz4vKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pWzBdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBcIjx0dXJiby1zdHJlYW0+XCI7XG4gICAgfVxuICAgIGdldCBiZWZvcmVSZW5kZXJFdmVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDdXN0b21FdmVudChcInR1cmJvOmJlZm9yZS1zdHJlYW0tcmVuZGVyXCIsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgZ2V0IHRhcmdldEVsZW1lbnRzQnlJZCgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gKF9hID0gdGhpcy5vd25lckRvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0RWxlbWVudEJ5SWQodGhpcy50YXJnZXQpO1xuICAgICAgICBpZiAoZWxlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtlbGVtZW50XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdGFyZ2V0RWxlbWVudHNCeVF1ZXJ5KCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gKF9hID0gdGhpcy5vd25lckRvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucXVlcnlTZWxlY3RvckFsbCh0aGlzLnRhcmdldHMpO1xuICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZWxlbWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5GcmFtZUVsZW1lbnQuZGVsZWdhdGVDb25zdHJ1Y3RvciA9IEZyYW1lQ29udHJvbGxlcjtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInR1cmJvLWZyYW1lXCIsIEZyYW1lRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ0dXJiby1zdHJlYW1cIiwgU3RyZWFtRWxlbWVudCk7XG5cbigoKSA9PiB7XG4gICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0O1xuICAgIGlmICghZWxlbWVudClcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImRhdGEtdHVyYm8tc3VwcHJlc3Mtd2FybmluZ1wiKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50ID09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zb2xlLndhcm4odW5pbmRlbnQgYFxuICAgICAgICBZb3UgYXJlIGxvYWRpbmcgVHVyYm8gZnJvbSBhIDxzY3JpcHQ+IGVsZW1lbnQgaW5zaWRlIHRoZSA8Ym9keT4gZWxlbWVudC4gVGhpcyBpcyBwcm9iYWJseSBub3Qgd2hhdCB5b3UgbWVhbnQgdG8gZG8hXG5cbiAgICAgICAgTG9hZCB5b3VyIGFwcGxpY2F0aW9uXHUyMDE5cyBKYXZhU2NyaXB0IGJ1bmRsZSBpbnNpZGUgdGhlIDxoZWFkPiBlbGVtZW50IGluc3RlYWQuIDxzY3JpcHQ+IGVsZW1lbnRzIGluIDxib2R5PiBhcmUgZXZhbHVhdGVkIHdpdGggZWFjaCBwYWdlIGNoYW5nZS5cblxuICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOiBodHRwczovL3R1cmJvLmhvdHdpcmVkLmRldi9oYW5kYm9vay9idWlsZGluZyN3b3JraW5nLXdpdGgtc2NyaXB0LWVsZW1lbnRzXG5cbiAgICAgICAgXHUyMDE0XHUyMDE0XG4gICAgICAgIFN1cHByZXNzIHRoaXMgd2FybmluZyBieSBhZGRpbmcgYSBcImRhdGEtdHVyYm8tc3VwcHJlc3Mtd2FybmluZ1wiIGF0dHJpYnV0ZSB0bzogJXNcbiAgICAgIGAsIGVsZW1lbnQub3V0ZXJIVE1MKTtcbiAgICAgICAgfVxuICAgIH1cbn0pKCk7XG5cbndpbmRvdy5UdXJibyA9IFR1cmJvO1xuc3RhcnQoKTtcblxuZXhwb3J0IHsgUGFnZVJlbmRlcmVyLCBQYWdlU25hcHNob3QsIGNsZWFyQ2FjaGUsIGNvbm5lY3RTdHJlYW1Tb3VyY2UsIGRpc2Nvbm5lY3RTdHJlYW1Tb3VyY2UsIG5hdmlnYXRvciwgcmVnaXN0ZXJBZGFwdGVyLCByZW5kZXJTdHJlYW1NZXNzYWdlLCBzZXNzaW9uLCBzZXRQcm9ncmVzc0JhckRlbGF5LCBzdGFydCwgdmlzaXQgfTtcbiIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICJleHBvcnQgY29uc3QgZGVmaW5pdGlvbnMgPSBbXG5dO1xuIiwgImltcG9ydCAqIGFzIFR1cmJvIGZyb20gXCJAaG90d2lyZWQvdHVyYm9cIlxuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tIFwic3RpbXVsdXNcIlxuaW1wb3J0IHsgZGVmaW5pdGlvbnMgfSBmcm9tICdzdGltdWx1czouL2NvbnRyb2xsZXJzJztcblxuY29uc3QgYXBwID0gQXBwbGljYXRpb24uc3RhcnQoKTtcbmFwcC5sb2FkKGRlZmluaXRpb25zKTtcbiJdLAogICJtYXBwaW5ncyI6ICJNQUlBLEFBQUMsV0FBWSxDQUNULEdBQUksT0FBTyxVQUFZLFFBQWEsT0FBTyxpQkFBbUIsUUFDMUQsT0FBTyxlQUFlLDBCQUN0QixPQUVKLEdBQU0sR0FBcUIsWUFDckIsRUFBb0IsQ0FDdEIsWUFBZSxVQUF1QixDQUNsQyxNQUFPLFNBQVEsVUFBVSxFQUFvQixHQUFJLEtBQUssZUFHOUQsT0FBTyxZQUNILEVBQWtCLFlBQ3RCLFlBQVksVUFBWSxFQUFtQixVQUMzQyxZQUFZLFVBQVUsWUFBYyxZQUNwQyxPQUFPLGVBQWUsWUFBYSxPQUd2QyxHQUFNLEdBQW1CLEdBQUksU0FDN0IsWUFBc0MsRUFBUSxDQUMxQyxHQUFNLEdBQVUsWUFBa0IsU0FBVSxFQUFTLFlBQWtCLE1BQU8sRUFBTyxjQUFnQixLQUMvRixFQUFZLEVBQVUsRUFBUSxRQUFRLGlCQUFtQixLQUMvRCxNQUFRLElBQWMsS0FBK0IsT0FBUyxFQUFVLE9BQVMsU0FBVyxFQUFZLEtBRTVHLFlBQXVCLEVBQU8sQ0FDMUIsR0FBTSxHQUFZLEdBQTZCLEVBQU0sUUFDckQsQUFBSSxHQUFhLEVBQVUsTUFDdkIsRUFBaUIsSUFBSSxFQUFVLEtBQU0sR0FHN0MsQUFBQyxXQUFZLENBQ1QsQUFBSSxlQUFpQixTQUVyQixrQkFBaUIsUUFBUyxHQUFlLElBQ3pDLE9BQU8sZUFBZSxNQUFNLFVBQVcsWUFBYSxDQUNoRCxLQUFNLENBQ0YsR0FBSSxLQUFLLE1BQVEsVUFBWSxLQUFLLGlCQUFrQixpQkFDaEQsTUFBTyxHQUFpQixJQUFJLEtBQUssZ0JBTWpELEdBQUksR0FDSixBQUFDLFVBQVUsRUFBbUIsQ0FDMUIsRUFBa0IsTUFBVyxRQUM3QixFQUFrQixLQUFVLFNBQzdCLEdBQXNCLEdBQW9CLEtBQzdDLG1CQUEyQixZQUFZLENBQ25DLGFBQWMsQ0FDVixRQUNBLEtBQUssT0FBUyxRQUFRLFVBQ3RCLEtBQUssU0FB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
diff --git a/assets/controllers/.gitkeep b/assets/controllers/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/assets/controllers/.gitkeep
diff --git a/assets/package-lock.json b/assets/package-lock.json
new file mode 100644
index 0000000..4104e1e
--- /dev/null
+++ b/assets/package-lock.json
@@ -0,0 +1,4533 @@
+{
+ "name": "ircbot",
+ "version": "0.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "ircbot",
+ "version": "0.0.0",
+ "dependencies": {
+ "@fortawesome/fontawesome-free": "^5.15.4",
+ "@hotwired/turbo": "^7.0.0-rc.1",
+ "@tailwindcss/typography": "^0.4.1",
+ "stimulus": "^2.0.0"
+ },
+ "devDependencies": {
+ "@tailwindcss/aspect-ratio": "^0.2.1",
+ "autoprefixer": "^10.2.0",
+ "concurrently": "^6.2.1",
+ "cssnano": "^5.0.8",
+ "esbuild": "^0.12.17",
+ "esbuild-plugin-stimulus": "^0.1.0",
+ "postcss": "^8.3.5",
+ "postcss-import": "^14.0.2",
+ "postcss-nested": "^5.0.5",
+ "tailwindcss": "^2.2.7",
+ "yarn": "^1.22.11"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
+ "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+ "dependencies": {
+ "@babel/highlight": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.14.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
+ "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
+ "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.14.5",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@fortawesome/fontawesome-free": {
+ "version": "5.15.4",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz",
+ "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==",
+ "hasInstallScript": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@hotwired/turbo": {
+ "version": "7.0.0-rc.3",
+ "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.0.0-rc.3.tgz",
+ "integrity": "sha512-Xiqtb2fvKcnkc/6cJNx8x2+KHswJeMmNLXPSc8jIE6sYAhnL8pDY2ewiV3x5JS/y+/yWhQSMMHONBwHt8ykYKQ=="
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@stimulus/core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@stimulus/core/-/core-2.0.0.tgz",
+ "integrity": "sha512-ff70GafKtzc8zQ1/cG+UvL06GcifPWovf2wBEdjLMh9xO2GOYURO3y2RYgzIGYUIBefQwyfX2CLfJdZFJrEPTw==",
+ "dependencies": {
+ "@stimulus/mutation-observers": "^2.0.0"
+ }
+ },
+ "node_modules/@stimulus/multimap": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@stimulus/multimap/-/multimap-2.0.0.tgz",
+ "integrity": "sha512-pMBCewkZCFVB3e5mEMoyO9+9aKzHDITmf3OnPun51YWxlcPdHcwbjqm1ylK63fsoduIE+RowBpFwFqd3poEz4w=="
+ },
+ "node_modules/@stimulus/mutation-observers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@stimulus/mutation-observers/-/mutation-observers-2.0.0.tgz",
+ "integrity": "sha512-kx4VAJdPhIGBQKGIoUDC2tupEKorG3A+ckc2b1UiwInKTMAC1axOHU8ebcwhaJIxRqIrs8//4SJo9YAAOx6FEg==",
+ "dependencies": {
+ "@stimulus/multimap": "^2.0.0"
+ }
+ },
+ "node_modules/@stimulus/webpack-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@stimulus/webpack-helpers/-/webpack-helpers-2.0.0.tgz",
+ "integrity": "sha512-D6tJWsAC024MwGEIKlUVYU8Ln87mlrmiwHvYAjipg+s8H4eLxUMQ3PZkWyPevfipH+oR3leuHsjYsK1gN5ViQA=="
+ },
+ "node_modules/@tailwindcss/aspect-ratio": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.2.1.tgz",
+ "integrity": "sha512-aDFi80aHQ3JM3symJ5iKU70lm151ugIGFCI0yRZGpyjgQSDS+Fbe93QwypC1tCEllQE8p0S7TUu20ih1b9IKLA==",
+ "dev": true,
+ "peerDependencies": {
+ "tailwindcss": ">=2.0.0"
+ }
+ },
+ "node_modules/@tailwindcss/typography": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.4.1.tgz",
+ "integrity": "sha512-ovPPLUhs7zAIJfr0y1dbGlyCuPhpuv/jpBoFgqAc658DWGGrOBWBMpAWLw2KlzbNeVk4YBJMzue1ekvIbdw6XA==",
+ "dependencies": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "lodash.uniq": "^4.5.0"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=2.0.0"
+ }
+ },
+ "node_modules/@trysound/sax": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz",
+ "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
+ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+ "dev": true
+ },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
+ },
+ "node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+ "dependencies": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "node_modules/acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
+ "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA=="
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.3.3",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.3.tgz",
+ "integrity": "sha512-yRzjxfnggrP/+qVHlUuZz5FZzEbkT+Yt0/Df6ScEMnbbZBLzYB2W0KLxoQCW+THm1SpOsM1ZPcTHAwuvmibIsQ==",
+ "dependencies": {
+ "browserslist": "^4.16.8",
+ "caniuse-lite": "^1.0.30001252",
+ "colorette": "^1.3.0",
+ "fraction.js": "^4.1.1",
+ "normalize-range": "^0.1.2",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.16.8",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz",
+ "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==",
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001251",
+ "colorette": "^1.3.0",
+ "electron-to-chromium": "^1.3.811",
+ "escalade": "^3.1.1",
+ "node-releases": "^1.1.75"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001252",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz",
+ "integrity": "sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+ "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/color": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz",
+ "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==",
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.6.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/color-string": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz",
+ "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/colord": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.7.0.tgz",
+ "integrity": "sha512-pZJBqsHz+pYyw3zpX6ZRXWoCHM1/cvFikY9TV8G3zcejCaKE0lhankoj8iScyrrePA8C7yJ5FStfA9zbcOnw7Q==",
+ "dev": true
+ },
+ "node_modules/colorette": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
+ "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w=="
+ },
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "node_modules/concurrently": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.1.tgz",
+ "integrity": "sha512-emgwhH+ezkuYKSHZQ+AkgEpoUZZlbpPVYCVv7YZx0r+T7fny1H03r2nYRebpi2DudHR4n1Rgbo2YTxKOxVJ4+g==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "date-fns": "^2.16.1",
+ "lodash": "^4.17.21",
+ "read-pkg": "^5.2.0",
+ "rxjs": "^6.6.3",
+ "spawn-command": "^0.0.2-1",
+ "supports-color": "^8.1.0",
+ "tree-kill": "^1.2.2",
+ "yargs": "^16.2.0"
+ },
+ "bin": {
+ "concurrently": "bin/concurrently.js"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/cosmiconfig": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
+ "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/css-color-names": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz",
+ "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/css-declaration-sorter": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.1.tgz",
+ "integrity": "sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q==",
+ "dev": true,
+ "dependencies": {
+ "timsort": "^0.3.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.9"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
+ "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^5.0.0",
+ "domhandler": "^4.2.0",
+ "domutils": "^2.6.0",
+ "nth-check": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/css-unit-converter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
+ "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA=="
+ },
+ "node_modules/css-what": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz",
+ "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cssnano": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.8.tgz",
+ "integrity": "sha512-Lda7geZU0Yu+RZi2SGpjYuQz4HI4/1Y+BhdD0jL7NXAQ5larCzVn+PUGuZbDMYz904AXXCOgO5L1teSvgu7aFg==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-preset-default": "^5.1.4",
+ "is-resolvable": "^1.1.0",
+ "lilconfig": "^2.0.3",
+ "yaml": "^1.10.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/cssnano"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/cssnano-preset-default": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.4.tgz",
+ "integrity": "sha512-sPpQNDQBI3R/QsYxQvfB4mXeEcWuw0wGtKtmS5eg8wudyStYMgKOQT39G07EbW1LB56AOYrinRS9f0ig4Y3MhQ==",
+ "dev": true,
+ "dependencies": {
+ "css-declaration-sorter": "^6.0.3",
+ "cssnano-utils": "^2.0.1",
+ "postcss-calc": "^8.0.0",
+ "postcss-colormin": "^5.2.0",
+ "postcss-convert-values": "^5.0.1",
+ "postcss-discard-comments": "^5.0.1",
+ "postcss-discard-duplicates": "^5.0.1",
+ "postcss-discard-empty": "^5.0.1",
+ "postcss-discard-overridden": "^5.0.1",
+ "postcss-merge-longhand": "^5.0.2",
+ "postcss-merge-rules": "^5.0.2",
+ "postcss-minify-font-values": "^5.0.1",
+ "postcss-minify-gradients": "^5.0.2",
+ "postcss-minify-params": "^5.0.1",
+ "postcss-minify-selectors": "^5.1.0",
+ "postcss-normalize-charset": "^5.0.1",
+ "postcss-normalize-display-values": "^5.0.1",
+ "postcss-normalize-positions": "^5.0.1",
+ "postcss-normalize-repeat-style": "^5.0.1",
+ "postcss-normalize-string": "^5.0.1",
+ "postcss-normalize-timing-functions": "^5.0.1",
+ "postcss-normalize-unicode": "^5.0.1",
+ "postcss-normalize-url": "^5.0.2",
+ "postcss-normalize-whitespace": "^5.0.1",
+ "postcss-ordered-values": "^5.0.2",
+ "postcss-reduce-initial": "^5.0.1",
+ "postcss-reduce-transforms": "^5.0.1",
+ "postcss-svgo": "^5.0.2",
+ "postcss-unique-selectors": "^5.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/cssnano-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz",
+ "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/csso": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
+ "dev": true,
+ "dependencies": {
+ "css-tree": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/date-fns": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz",
+ "integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.11"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/date-fns"
+ }
+ },
+ "node_modules/defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
+ },
+ "node_modules/detective": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
+ "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
+ "dependencies": {
+ "acorn-node": "^1.6.1",
+ "defined": "^1.0.0",
+ "minimist": "^1.1.1"
+ },
+ "bin": {
+ "detective": "bin/detective.js"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "node_modules/dom-serializer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
+ "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ]
+ },
+ "node_modules/domhandler": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
+ "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.2.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.3.827",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.827.tgz",
+ "integrity": "sha512-ye+4uQOY/jbjRutMcE/EmOcNwUeo1qo9aKL2tPyb09cU3lmxNeyDF4RWiemmkknW+p29h7dyDqy02higTxc9/A=="
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.12.24",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.24.tgz",
+ "integrity": "sha512-C0ibY+HsXzYB6L/pLWEiWjMpghKsIc58Q5yumARwBQsHl9DXPakW+5NI/Y9w4YXiz0PEP6XTGTT/OV4Nnsmb4A==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ }
+ },
+ "node_modules/esbuild-plugin-stimulus": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/esbuild-plugin-stimulus/-/esbuild-plugin-stimulus-0.1.0.tgz",
+ "integrity": "sha512-ZyNLo14N/1oVaorOmE0ksh7srkGLDiWG8YfXqDsSXWNeEe040KWNLUOtv3S6eE6Gc0eNqs3P9jx83v0Bkhg+1A==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/zombiezen"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
+ "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz",
+ "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz",
+ "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==",
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://www.patreon.com/infusion"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
+ "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz",
+ "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "node_modules/html-tags": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz",
+ "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz",
+ "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==",
+ "dependencies": {
+ "import-from": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz",
+ "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==",
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-from/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/is-absolute-url": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
+ "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ },
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz",
+ "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU="
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+ },
+ "node_modules/lodash.topath": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz",
+ "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak="
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+ },
+ "node_modules/mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+ "dev": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "dependencies": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ },
+ "node_modules/modern-normalize": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz",
+ "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.1.25",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/node-emoji": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz",
+ "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==",
+ "dependencies": {
+ "lodash": "^4.17.21"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "1.1.75",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
+ "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
+ },
+ "node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-url": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
+ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz",
+ "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
+ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
+ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz",
+ "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==",
+ "dependencies": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map-js": "^0.6.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ }
+ },
+ "node_modules/postcss-calc": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz",
+ "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==",
+ "dev": true,
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.2"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.2"
+ }
+ },
+ "node_modules/postcss-colormin": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz",
+ "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.16.6",
+ "caniuse-api": "^3.0.0",
+ "colord": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-convert-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz",
+ "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-discard-comments": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz",
+ "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-discard-duplicates": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz",
+ "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-discard-empty": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz",
+ "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-discard-overridden": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz",
+ "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz",
+ "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz",
+ "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==",
+ "dependencies": {
+ "camelcase-css": "^2.0.1",
+ "postcss": "^8.1.6"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz",
+ "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==",
+ "dependencies": {
+ "import-cwd": "^3.0.0",
+ "lilconfig": "^2.0.3",
+ "yaml": "^1.10.2"
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-merge-longhand": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz",
+ "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==",
+ "dev": true,
+ "dependencies": {
+ "css-color-names": "^1.0.1",
+ "postcss-value-parser": "^4.1.0",
+ "stylehacks": "^5.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-merge-rules": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz",
+ "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.16.6",
+ "caniuse-api": "^3.0.0",
+ "cssnano-utils": "^2.0.1",
+ "postcss-selector-parser": "^6.0.5",
+ "vendors": "^1.0.3"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-minify-font-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz",
+ "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-minify-gradients": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.2.tgz",
+ "integrity": "sha512-7Do9JP+wqSD6Prittitt2zDLrfzP9pqKs2EcLX7HJYxsxCOwrrcLt4x/ctQTsiOw+/8HYotAoqNkrzItL19SdQ==",
+ "dev": true,
+ "dependencies": {
+ "colord": "^2.6",
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-minify-params": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz",
+ "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==",
+ "dev": true,
+ "dependencies": {
+ "alphanum-sort": "^1.0.2",
+ "browserslist": "^4.16.0",
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0",
+ "uniqs": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-minify-selectors": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz",
+ "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==",
+ "dev": true,
+ "dependencies": {
+ "alphanum-sort": "^1.0.2",
+ "postcss-selector-parser": "^6.0.5"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
+ "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.6"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-normalize-charset": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz",
+ "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-display-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz",
+ "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-positions": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz",
+ "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-repeat-style": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz",
+ "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-string": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz",
+ "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-timing-functions": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz",
+ "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-unicode": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz",
+ "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.16.0",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-url": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz",
+ "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==",
+ "dev": true,
+ "dependencies": {
+ "is-absolute-url": "^3.0.3",
+ "normalize-url": "^6.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-whitespace": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz",
+ "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-ordered-values": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz",
+ "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-reduce-initial": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz",
+ "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.16.0",
+ "caniuse-api": "^3.0.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-reduce-transforms": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz",
+ "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-svgo": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz",
+ "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.1.0",
+ "svgo": "^2.3.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-unique-selectors": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz",
+ "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==",
+ "dev": true,
+ "dependencies": {
+ "alphanum-sort": "^1.0.2",
+ "postcss-selector-parser": "^6.0.5",
+ "uniqs": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
+ },
+ "node_modules/pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/purgecss": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz",
+ "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==",
+ "dependencies": {
+ "commander": "^6.0.0",
+ "glob": "^7.0.0",
+ "postcss": "^8.2.1",
+ "postcss-selector-parser": "^6.0.2"
+ },
+ "bin": {
+ "purgecss": "bin/purgecss.js"
+ }
+ },
+ "node_modules/purgecss/node_modules/commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/reduce-css-calc": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
+ "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
+ "dependencies": {
+ "css-unit-converter": "^1.1.1",
+ "postcss-value-parser": "^3.3.0"
+ }
+ },
+ "node_modules/reduce-css-calc/node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+ "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "dependencies": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "npm": ">=2.0.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/simple-swizzle/node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
+ "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spawn-command": {
+ "version": "0.0.2-1",
+ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
+ "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=",
+ "dev": true
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz",
+ "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==",
+ "dev": true
+ },
+ "node_modules/stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "dev": true
+ },
+ "node_modules/stimulus": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/stimulus/-/stimulus-2.0.0.tgz",
+ "integrity": "sha512-xipy7BS5TVpg4fX6S8LhrYZp7cmHGjmk09WSAiVx1gF5S5g43IWsuetfUhIk8HfHUG+4MQ9nY0FQz4dRFLs/8w==",
+ "dependencies": {
+ "@stimulus/core": "^2.0.0",
+ "@stimulus/webpack-helpers": "^2.0.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
+ "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/stylehacks": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz",
+ "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.16.0",
+ "postcss-selector-parser": "^6.0.4"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/svgo": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.5.0.tgz",
+ "integrity": "sha512-FSdBOOo271VyF/qZnOn1PgwCdt1v4Dx0Sey+U1jgqm1vqRYjPGdip0RGrFW6ItwtkBB8rHgHk26dlVr0uCs82Q==",
+ "dev": true,
+ "dependencies": {
+ "@trysound/sax": "0.1.1",
+ "colorette": "^1.3.0",
+ "commander": "^7.2.0",
+ "css-select": "^4.1.3",
+ "css-tree": "^1.1.3",
+ "csso": "^4.2.0",
+ "stable": "^0.1.8"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "2.2.9",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.9.tgz",
+ "integrity": "sha512-P8zCKFkEthfUvqcnun8DqGGXw4QqyDw971NAM23e8QQ+m5HW1agp4upq50rFGwGNtphVYvr+0zvVLSXo5/I9Qg==",
+ "dependencies": {
+ "arg": "^5.0.1",
+ "bytes": "^3.0.0",
+ "chalk": "^4.1.2",
+ "chokidar": "^3.5.2",
+ "color": "^4.0.1",
+ "cosmiconfig": "^7.0.1",
+ "detective": "^5.2.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.2.7",
+ "fs-extra": "^10.0.0",
+ "glob-parent": "^6.0.1",
+ "html-tags": "^3.1.0",
+ "is-glob": "^4.0.1",
+ "lodash": "^4.17.21",
+ "lodash.topath": "^4.5.2",
+ "modern-normalize": "^1.1.0",
+ "node-emoji": "^1.11.0",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^2.2.0",
+ "postcss-js": "^3.0.3",
+ "postcss-load-config": "^3.1.0",
+ "postcss-nested": "5.0.6",
+ "postcss-selector-parser": "^6.0.6",
+ "postcss-value-parser": "^4.1.0",
+ "pretty-hrtime": "^1.0.3",
+ "purgecss": "^4.0.3",
+ "quick-lru": "^5.1.1",
+ "reduce-css-calc": "^2.1.8",
+ "resolve": "^1.20.0",
+ "tmp": "^0.2.1"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=12.13.0"
+ },
+ "peerDependencies": {
+ "autoprefixer": "^10.0.2",
+ "postcss": "^8.0.9"
+ }
+ },
+ "node_modules/timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+ "dev": true
+ },
+ "node_modules/tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
+ "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
+ "dependencies": {
+ "rimraf": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.17.0"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
+ "bin": {
+ "tree-kill": "cli.js"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+ "node_modules/universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/vendors": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yarn": {
+ "version": "1.22.11",
+ "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.11.tgz",
+ "integrity": "sha512-AWje4bzqO9RUn3sdnM5N8n4ZJ0BqCc/kqFJvpOI5/EVkINXui0yuvU7NDCEF//+WaxHuNay2uOHxA4+tq1P3cg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "yarn": "bin/yarn.js",
+ "yarnpkg": "bin/yarn.js"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
+ "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+ "requires": {
+ "@babel/highlight": "^7.14.5"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.14.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
+ "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g=="
+ },
+ "@babel/highlight": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
+ "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.14.5",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@fortawesome/fontawesome-free": {
+ "version": "5.15.4",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz",
+ "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg=="
+ },
+ "@hotwired/turbo": {
+ "version": "7.0.0-rc.3",
+ "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.0.0-rc.3.tgz",
+ "integrity": "sha512-Xiqtb2fvKcnkc/6cJNx8x2+KHswJeMmNLXPSc8jIE6sYAhnL8pDY2ewiV3x5JS/y+/yWhQSMMHONBwHt8ykYKQ=="
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@stimulus/core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@stimulus/core/-/core-2.0.0.tgz",
+ "integrity": "sha512-ff70GafKtzc8zQ1/cG+UvL06GcifPWovf2wBEdjLMh9xO2GOYURO3y2RYgzIGYUIBefQwyfX2CLfJdZFJrEPTw==",
+ "requires": {
+ "@stimulus/mutation-observers": "^2.0.0"
+ }
+ },
+ "@stimulus/multimap": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@stimulus/multimap/-/multimap-2.0.0.tgz",
+ "integrity": "sha512-pMBCewkZCFVB3e5mEMoyO9+9aKzHDITmf3OnPun51YWxlcPdHcwbjqm1ylK63fsoduIE+RowBpFwFqd3poEz4w=="
+ },
+ "@stimulus/mutation-observers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@stimulus/mutation-observers/-/mutation-observers-2.0.0.tgz",
+ "integrity": "sha512-kx4VAJdPhIGBQKGIoUDC2tupEKorG3A+ckc2b1UiwInKTMAC1axOHU8ebcwhaJIxRqIrs8//4SJo9YAAOx6FEg==",
+ "requires": {
+ "@stimulus/multimap": "^2.0.0"
+ }
+ },
+ "@stimulus/webpack-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@stimulus/webpack-helpers/-/webpack-helpers-2.0.0.tgz",
+ "integrity": "sha512-D6tJWsAC024MwGEIKlUVYU8Ln87mlrmiwHvYAjipg+s8H4eLxUMQ3PZkWyPevfipH+oR3leuHsjYsK1gN5ViQA=="
+ },
+ "@tailwindcss/aspect-ratio": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.2.1.tgz",
+ "integrity": "sha512-aDFi80aHQ3JM3symJ5iKU70lm151ugIGFCI0yRZGpyjgQSDS+Fbe93QwypC1tCEllQE8p0S7TUu20ih1b9IKLA==",
+ "dev": true,
+ "requires": {}
+ },
+ "@tailwindcss/typography": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.4.1.tgz",
+ "integrity": "sha512-ovPPLUhs7zAIJfr0y1dbGlyCuPhpuv/jpBoFgqAc658DWGGrOBWBMpAWLw2KlzbNeVk4YBJMzue1ekvIbdw6XA==",
+ "requires": {
+ "lodash.castarray": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "@trysound/sax": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz",
+ "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==",
+ "dev": true
+ },
+ "@types/normalize-package-data": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
+ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
+ "dev": true
+ },
+ "@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
+ },
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+ },
+ "acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+ "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+ "requires": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "arg": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
+ "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA=="
+ },
+ "autoprefixer": {
+ "version": "10.3.3",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.3.tgz",
+ "integrity": "sha512-yRzjxfnggrP/+qVHlUuZz5FZzEbkT+Yt0/Df6ScEMnbbZBLzYB2W0KLxoQCW+THm1SpOsM1ZPcTHAwuvmibIsQ==",
+ "requires": {
+ "browserslist": "^4.16.8",
+ "caniuse-lite": "^1.0.30001252",
+ "colorette": "^1.3.0",
+ "fraction.js": "^4.1.1",
+ "normalize-range": "^0.1.2",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browserslist": {
+ "version": "4.16.8",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz",
+ "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==",
+ "requires": {
+ "caniuse-lite": "^1.0.30001251",
+ "colorette": "^1.3.0",
+ "electron-to-chromium": "^1.3.811",
+ "escalade": "^3.1.1",
+ "node-releases": "^1.1.75"
+ }
+ },
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+ },
+ "camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
+ },
+ "caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001252",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz",
+ "integrity": "sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw=="
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "chokidar": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+ "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz",
+ "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==",
+ "requires": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.6.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "color-string": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz",
+ "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==",
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "colord": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.7.0.tgz",
+ "integrity": "sha512-pZJBqsHz+pYyw3zpX6ZRXWoCHM1/cvFikY9TV8G3zcejCaKE0lhankoj8iScyrrePA8C7yJ5FStfA9zbcOnw7Q==",
+ "dev": true
+ },
+ "colorette": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
+ "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w=="
+ },
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concurrently": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.1.tgz",
+ "integrity": "sha512-emgwhH+ezkuYKSHZQ+AkgEpoUZZlbpPVYCVv7YZx0r+T7fny1H03r2nYRebpi2DudHR4n1Rgbo2YTxKOxVJ4+g==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "date-fns": "^2.16.1",
+ "lodash": "^4.17.21",
+ "read-pkg": "^5.2.0",
+ "rxjs": "^6.6.3",
+ "spawn-command": "^0.0.2-1",
+ "supports-color": "^8.1.0",
+ "tree-kill": "^1.2.2",
+ "yargs": "^16.2.0"
+ }
+ },
+ "cosmiconfig": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
+ "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+ "requires": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ }
+ },
+ "css-color-names": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz",
+ "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==",
+ "dev": true
+ },
+ "css-declaration-sorter": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.1.tgz",
+ "integrity": "sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q==",
+ "dev": true,
+ "requires": {
+ "timsort": "^0.3.0"
+ }
+ },
+ "css-select": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
+ "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^5.0.0",
+ "domhandler": "^4.2.0",
+ "domutils": "^2.6.0",
+ "nth-check": "^2.0.0"
+ }
+ },
+ "css-tree": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ }
+ },
+ "css-unit-converter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
+ "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA=="
+ },
+ "css-what": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz",
+ "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==",
+ "dev": true
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+ },
+ "cssnano": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.8.tgz",
+ "integrity": "sha512-Lda7geZU0Yu+RZi2SGpjYuQz4HI4/1Y+BhdD0jL7NXAQ5larCzVn+PUGuZbDMYz904AXXCOgO5L1teSvgu7aFg==",
+ "dev": true,
+ "requires": {
+ "cssnano-preset-default": "^5.1.4",
+ "is-resolvable": "^1.1.0",
+ "lilconfig": "^2.0.3",
+ "yaml": "^1.10.2"
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.4.tgz",
+ "integrity": "sha512-sPpQNDQBI3R/QsYxQvfB4mXeEcWuw0wGtKtmS5eg8wudyStYMgKOQT39G07EbW1LB56AOYrinRS9f0ig4Y3MhQ==",
+ "dev": true,
+ "requires": {
+ "css-declaration-sorter": "^6.0.3",
+ "cssnano-utils": "^2.0.1",
+ "postcss-calc": "^8.0.0",
+ "postcss-colormin": "^5.2.0",
+ "postcss-convert-values": "^5.0.1",
+ "postcss-discard-comments": "^5.0.1",
+ "postcss-discard-duplicates": "^5.0.1",
+ "postcss-discard-empty": "^5.0.1",
+ "postcss-discard-overridden": "^5.0.1",
+ "postcss-merge-longhand": "^5.0.2",
+ "postcss-merge-rules": "^5.0.2",
+ "postcss-minify-font-values": "^5.0.1",
+ "postcss-minify-gradients": "^5.0.2",
+ "postcss-minify-params": "^5.0.1",
+ "postcss-minify-selectors": "^5.1.0",
+ "postcss-normalize-charset": "^5.0.1",
+ "postcss-normalize-display-values": "^5.0.1",
+ "postcss-normalize-positions": "^5.0.1",
+ "postcss-normalize-repeat-style": "^5.0.1",
+ "postcss-normalize-string": "^5.0.1",
+ "postcss-normalize-timing-functions": "^5.0.1",
+ "postcss-normalize-unicode": "^5.0.1",
+ "postcss-normalize-url": "^5.0.2",
+ "postcss-normalize-whitespace": "^5.0.1",
+ "postcss-ordered-values": "^5.0.2",
+ "postcss-reduce-initial": "^5.0.1",
+ "postcss-reduce-transforms": "^5.0.1",
+ "postcss-svgo": "^5.0.2",
+ "postcss-unique-selectors": "^5.0.1"
+ }
+ },
+ "cssnano-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz",
+ "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "csso": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
+ "dev": true,
+ "requires": {
+ "css-tree": "^1.1.2"
+ }
+ },
+ "date-fns": {
+ "version": "2.23.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz",
+ "integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==",
+ "dev": true
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
+ },
+ "detective": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
+ "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
+ "requires": {
+ "acorn-node": "^1.6.1",
+ "defined": "^1.0.0",
+ "minimist": "^1.1.1"
+ }
+ },
+ "didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
+ "dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "dom-serializer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
+ "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
+ "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.2.0"
+ }
+ },
+ "domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.3.827",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.827.tgz",
+ "integrity": "sha512-ye+4uQOY/jbjRutMcE/EmOcNwUeo1qo9aKL2tPyb09cU3lmxNeyDF4RWiemmkknW+p29h7dyDqy02higTxc9/A=="
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "esbuild": {
+ "version": "0.12.24",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.24.tgz",
+ "integrity": "sha512-C0ibY+HsXzYB6L/pLWEiWjMpghKsIc58Q5yumARwBQsHl9DXPakW+5NI/Y9w4YXiz0PEP6XTGTT/OV4Nnsmb4A==",
+ "dev": true
+ },
+ "esbuild-plugin-stimulus": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/esbuild-plugin-stimulus/-/esbuild-plugin-stimulus-0.1.0.tgz",
+ "integrity": "sha512-ZyNLo14N/1oVaorOmE0ksh7srkGLDiWG8YfXqDsSXWNeEe040KWNLUOtv3S6eE6Gc0eNqs3P9jx83v0Bkhg+1A==",
+ "dev": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "fast-glob": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
+ "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fastq": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz",
+ "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==",
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "fraction.js": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz",
+ "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg=="
+ },
+ "fs-extra": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
+ "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.1.tgz",
+ "integrity": "sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "html-tags": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz",
+ "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg=="
+ },
+ "import-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz",
+ "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==",
+ "requires": {
+ "import-from": "^3.0.0"
+ }
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "import-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz",
+ "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==",
+ "requires": {
+ "resolve-from": "^5.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "is-absolute-url": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
+ "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "lilconfig": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz",
+ "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg=="
+ },
+ "lines-and-columns": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash.castarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+ "integrity": "sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+ },
+ "lodash.topath": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz",
+ "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak="
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+ },
+ "mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+ "dev": true
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+ },
+ "micromatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ },
+ "modern-normalize": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz",
+ "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA=="
+ },
+ "nanoid": {
+ "version": "3.1.25",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q=="
+ },
+ "node-emoji": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz",
+ "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==",
+ "requires": {
+ "lodash": "^4.17.21"
+ }
+ },
+ "node-releases": {
+ "version": "1.1.75",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
+ "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw=="
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
+ },
+ "normalize-url": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
+ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
+ "dev": true
+ },
+ "nth-check": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz",
+ "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
+ "object-hash": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
+ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+ },
+ "picomatch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
+ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz",
+ "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==",
+ "requires": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map-js": "^0.6.2"
+ }
+ },
+ "postcss-calc": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz",
+ "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "postcss-colormin": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz",
+ "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.6",
+ "caniuse-api": "^3.0.0",
+ "colord": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz",
+ "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz",
+ "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-discard-duplicates": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz",
+ "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-discard-empty": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz",
+ "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-discard-overridden": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz",
+ "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-import": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz",
+ "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ }
+ },
+ "postcss-js": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz",
+ "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==",
+ "requires": {
+ "camelcase-css": "^2.0.1",
+ "postcss": "^8.1.6"
+ }
+ },
+ "postcss-load-config": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz",
+ "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==",
+ "requires": {
+ "import-cwd": "^3.0.0",
+ "lilconfig": "^2.0.3",
+ "yaml": "^1.10.2"
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz",
+ "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==",
+ "dev": true,
+ "requires": {
+ "css-color-names": "^1.0.1",
+ "postcss-value-parser": "^4.1.0",
+ "stylehacks": "^5.0.1"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz",
+ "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.6",
+ "caniuse-api": "^3.0.0",
+ "cssnano-utils": "^2.0.1",
+ "postcss-selector-parser": "^6.0.5",
+ "vendors": "^1.0.3"
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz",
+ "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.2.tgz",
+ "integrity": "sha512-7Do9JP+wqSD6Prittitt2zDLrfzP9pqKs2EcLX7HJYxsxCOwrrcLt4x/ctQTsiOw+/8HYotAoqNkrzItL19SdQ==",
+ "dev": true,
+ "requires": {
+ "colord": "^2.6",
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz",
+ "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "browserslist": "^4.16.0",
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz",
+ "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "postcss-selector-parser": "^6.0.5"
+ }
+ },
+ "postcss-nested": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
+ "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
+ "requires": {
+ "postcss-selector-parser": "^6.0.6"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz",
+ "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==",
+ "dev": true,
+ "requires": {}
+ },
+ "postcss-normalize-display-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz",
+ "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz",
+ "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz",
+ "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz",
+ "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz",
+ "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz",
+ "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.0",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz",
+ "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^3.0.3",
+ "normalize-url": "^6.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz",
+ "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz",
+ "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz",
+ "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.0",
+ "caniuse-api": "^3.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz",
+ "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "postcss-svgo": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz",
+ "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0",
+ "svgo": "^2.3.0"
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz",
+ "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "postcss-selector-parser": "^6.0.5",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
+ },
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE="
+ },
+ "purgecss": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz",
+ "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==",
+ "requires": {
+ "commander": "^6.0.0",
+ "glob": "^7.0.0",
+ "postcss": "^8.2.1",
+ "postcss-selector-parser": "^6.0.2"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="
+ }
+ }
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+ },
+ "quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
+ },
+ "read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
+ "dev": true,
+ "requires": {
+ "pify": "^2.3.0"
+ }
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "reduce-css-calc": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
+ "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
+ "requires": {
+ "css-unit-converter": "^1.1.1",
+ "postcss-value-parser": "^3.3.0"
+ },
+ "dependencies": {
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ }
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+ "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "requires": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
+ "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug=="
+ },
+ "spawn-command": {
+ "version": "0.0.2-1",
+ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
+ "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz",
+ "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "dev": true
+ },
+ "stimulus": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/stimulus/-/stimulus-2.0.0.tgz",
+ "integrity": "sha512-xipy7BS5TVpg4fX6S8LhrYZp7cmHGjmk09WSAiVx1gF5S5g43IWsuetfUhIk8HfHUG+4MQ9nY0FQz4dRFLs/8w==",
+ "requires": {
+ "@stimulus/core": "^2.0.0",
+ "@stimulus/webpack-helpers": "^2.0.0"
+ }
+ },
+ "string-width": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
+ "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "stylehacks": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz",
+ "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.0",
+ "postcss-selector-parser": "^6.0.4"
+ }
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "svgo": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.5.0.tgz",
+ "integrity": "sha512-FSdBOOo271VyF/qZnOn1PgwCdt1v4Dx0Sey+U1jgqm1vqRYjPGdip0RGrFW6ItwtkBB8rHgHk26dlVr0uCs82Q==",
+ "dev": true,
+ "requires": {
+ "@trysound/sax": "0.1.1",
+ "colorette": "^1.3.0",
+ "commander": "^7.2.0",
+ "css-select": "^4.1.3",
+ "css-tree": "^1.1.3",
+ "csso": "^4.2.0",
+ "stable": "^0.1.8"
+ }
+ },
+ "tailwindcss": {
+ "version": "2.2.9",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.9.tgz",
+ "integrity": "sha512-P8zCKFkEthfUvqcnun8DqGGXw4QqyDw971NAM23e8QQ+m5HW1agp4upq50rFGwGNtphVYvr+0zvVLSXo5/I9Qg==",
+ "requires": {
+ "arg": "^5.0.1",
+ "bytes": "^3.0.0",
+ "chalk": "^4.1.2",
+ "chokidar": "^3.5.2",
+ "color": "^4.0.1",
+ "cosmiconfig": "^7.0.1",
+ "detective": "^5.2.0",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.2.7",
+ "fs-extra": "^10.0.0",
+ "glob-parent": "^6.0.1",
+ "html-tags": "^3.1.0",
+ "is-glob": "^4.0.1",
+ "lodash": "^4.17.21",
+ "lodash.topath": "^4.5.2",
+ "modern-normalize": "^1.1.0",
+ "node-emoji": "^1.11.0",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^2.2.0",
+ "postcss-js": "^3.0.3",
+ "postcss-load-config": "^3.1.0",
+ "postcss-nested": "5.0.6",
+ "postcss-selector-parser": "^6.0.6",
+ "postcss-value-parser": "^4.1.0",
+ "pretty-hrtime": "^1.0.3",
+ "purgecss": "^4.0.3",
+ "quick-lru": "^5.1.1",
+ "reduce-css-calc": "^2.1.8",
+ "resolve": "^1.20.0",
+ "tmp": "^0.2.1"
+ }
+ },
+ "timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
+ "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
+ "requires": {
+ "rimraf": "^3.0.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vendors": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "dev": true
+ },
+ "yarn": {
+ "version": "1.22.11",
+ "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.11.tgz",
+ "integrity": "sha512-AWje4bzqO9RUn3sdnM5N8n4ZJ0BqCc/kqFJvpOI5/EVkINXui0yuvU7NDCEF//+WaxHuNay2uOHxA4+tq1P3cg==",
+ "dev": true
+ }
+ }
+}
diff --git a/assets/package.json b/assets/package.json
new file mode 100644
index 0000000..e674292
--- /dev/null
+++ b/assets/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "ircbot",
+ "version": "0.0.0",
+ "description": "ircbot",
+ "devDependencies": {
+ "@tailwindcss/aspect-ratio": "^0.2.1",
+ "autoprefixer": "^10.2.0",
+ "concurrently": "^6.2.1",
+ "cssnano": "^5.0.8",
+ "esbuild": "^0.12.17",
+ "esbuild-plugin-stimulus": "^0.1.0",
+ "postcss": "^8.3.5",
+ "postcss-import": "^14.0.2",
+ "postcss-nested": "^5.0.5",
+ "tailwindcss": "^2.2.7",
+ "yarn": "^1.22.11"
+ },
+ "dependencies": {
+ "@fortawesome/fontawesome-free": "^5.15.4",
+ "@hotwired/turbo": "^7.0.0-rc.1",
+ "@tailwindcss/typography": "^0.4.1",
+ "stimulus": "^2.0.0"
+ }
+}
diff --git a/assets/postcss.config.js b/assets/postcss.config.js
new file mode 100644
index 0000000..068dbf9
--- /dev/null
+++ b/assets/postcss.config.js
@@ -0,0 +1,12 @@
+module.exports = {
+ plugins: {
+ 'postcss-import': {},
+ 'postcss-nested': {},
+ tailwindcss: {},
+ autoprefixer: {},
+ cssnano: {
+ preset: 'default'
+ },
+ }
+ }
+
diff --git a/assets/script/build.alcoolog.js b/assets/script/build.alcoolog.js
new file mode 100644
index 0000000..fca8633
--- /dev/null
+++ b/assets/script/build.alcoolog.js
@@ -0,0 +1,11 @@
+const esbuild = require('esbuild');
+const { stimulusPlugin } = require('esbuild-plugin-stimulus');
+
+esbuild.build({
+ entryPoints: ['alcoolog.js'],
+ bundle: true,
+ outfile: '../priv/static/assets/alcoolog.js',
+ minify: true,
+ sourcemap: false,
+ plugins: [stimulusPlugin()],
+}).catch(() => process.exit(1));
diff --git a/assets/script/build.site.js b/assets/script/build.site.js
new file mode 100644
index 0000000..fe3cd79
--- /dev/null
+++ b/assets/script/build.site.js
@@ -0,0 +1,11 @@
+const esbuild = require('esbuild');
+const { stimulusPlugin } = require('esbuild-plugin-stimulus');
+
+esbuild.build({
+ entryPoints: ['site.js'],
+ bundle: true,
+ outfile: '../priv/static/assets/site.js',
+ minify: true,
+ sourcemap: false,
+ plugins: [stimulusPlugin()],
+}).catch(() => process.exit(1));
diff --git a/assets/script/check-freshness b/assets/script/check-freshness
new file mode 100755
index 0000000..8971238
--- /dev/null
+++ b/assets/script/check-freshness
@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+
+make -q
+exit $?
diff --git a/assets/script/watch.site.js b/assets/script/watch.site.js
new file mode 100644
index 0000000..c7a3a3a
--- /dev/null
+++ b/assets/script/watch.site.js
@@ -0,0 +1,13 @@
+const esbuild = require('esbuild');
+const { stimulusPlugin } = require('esbuild-plugin-stimulus');
+//site.js --bundle --sourcemap=inline --watch --outfile=assets/site.js
+
+esbuild.build({
+ entryPoints: ['site.js'],
+ bundle: true,
+ outfile: 'assets/site.js',
+ minify: true,
+ sourcemap: "inline",
+ watch: true,
+ plugins: [stimulusPlugin()],
+}).catch(() => process.exit(1));
diff --git a/assets/site.css b/assets/site.css
new file mode 100644
index 0000000..76fcadc
--- /dev/null
+++ b/assets/site.css
@@ -0,0 +1,3 @@
+@import "tailwindcss/base";
+@import "tailwindcss/components";
+@import "tailwindcss/utilities";
diff --git a/assets/site.js b/assets/site.js
new file mode 100644
index 0000000..2a1bdd6
--- /dev/null
+++ b/assets/site.js
@@ -0,0 +1,6 @@
+import * as Turbo from "@hotwired/turbo"
+import { Application } from "stimulus"
+import { definitions } from 'stimulus:./controllers';
+
+const app = Application.start();
+app.load(definitions);
diff --git a/assets/tailwind.config.js b/assets/tailwind.config.js
new file mode 100644
index 0000000..e51919e
--- /dev/null
+++ b/assets/tailwind.config.js
@@ -0,0 +1,104 @@
+const colors = require('tailwindcss/colors');
+const defaultTheme = require('tailwindcss/defaultTheme');
+
+module.exports = {
+ mode: "jit",
+ purge: [
+ './**/*.js',
+ '../lib/*_web/**/*.*ex'
+ ],
+ darkMode: 'media',
+ theme: {
+ colors: {
+ connection: colors.indigo,
+ connect: colors.red,
+ punch: colors.yellow,
+ touch: colors.green,
+ pulse: colors.pink,
+ transparent: 'transparent',
+ current: 'currentColor',
+ black: colors.black,
+ white: colors.white,
+ gray: colors.warmGray,
+ indigo: colors.indigo,
+ red: colors.rose,
+ yellow: colors.amber,
+ blue: colors.blue,
+ purple: colors.purple
+ },
+ extend: {
+ typography: (theme) => ({
+ light: {
+ css: [
+ {
+ color: theme('colors.gray.300', defaultTheme.colors.gray[300]),
+ '[class~="lead"]': {
+ color: theme('colors.gray.300', defaultTheme.colors.gray[300]),
+ },
+ a: {
+ color: theme('colors.gray.200', defaultTheme.colors.gray[200]),
+ },
+ strong: {
+ color: theme('colors.gray.200', defaultTheme.colors.gray[200]),
+ },
+ 'ol > li::before': {
+ color: theme('colors.gray.400', defaultTheme.colors.gray[400]),
+ },
+ 'ul > li::before': {
+ backgroundColor: theme('colors.gray.600', defaultTheme.colors.gray[600]),
+ },
+ hr: {
+ borderColor: theme('colors.gray.700', defaultTheme.colors.gray[700]),
+ },
+ blockquote: {
+ color: theme('colors.gray.200', defaultTheme.colors.gray[200]),
+ borderLeftColor: theme('colors.gray.700', defaultTheme.colors.gray[700]),
+ },
+ h1: {
+ color: theme('colors.gray.200', defaultTheme.colors.gray[200]),
+ },
+ h2: {
+ color: theme('colors.gray.200', defaultTheme.colors.gray[200]),
+ },
+ h3: {
+ color: theme('colors.gray.200', defaultTheme.colors.gray[200]),
+ },
+ h4: {
+ color: theme('colors.gray.200', defaultTheme.colors.gray[200]),
+ },
+ 'figure figcaption': {
+ color: theme('colors.gray.400', defaultTheme.colors.gray[400]),
+ },
+ code: {
+ color: theme('colors.gray.200', defaultTheme.colors.gray[200]),
+ },
+ 'a code': {
+ color: theme('colors.gray.200', defaultTheme.colors.gray[200]),
+ },
+ pre: {
+ color: theme('colors.gray.700', defaultTheme.colors.gray[700]),
+ },
+ thead: {
+ color: theme('colors.gray.200', defaultTheme.colors.gray[200]),
+ borderBottomColor: theme('colors.gray.600', defaultTheme.colors.gray[600]),
+ },
+ 'tbody tr': {
+ borderBottomColor: theme('colors.gray.700', defaultTheme.colors.gray[700]),
+ },
+ },
+ ],
+ },
+ }),
+ },
+ },
+ variants: {
+ extend: {
+ typography: ["dark"],
+ borderWidth: ['first'],
+ }
+ },
+ plugins: [
+ require('@tailwindcss/typography'),
+ require('@tailwindcss/aspect-ratio')
+ ],
+ }