From ac230ca190b682ac3bf9bb0b50d0fe61ab1aa5d0 Mon Sep 17 00:00:00 2001
From: Sebastian Castro <90scastro@gmail.com>
Date: Mon, 13 Aug 2018 14:44:15 +0200
Subject: [PATCH 1/4] Fixs list component was not retrieving elements
---
src/js/modules/ajax.module.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/js/modules/ajax.module.ts b/src/js/modules/ajax.module.ts
index 4676eaa..e2f6f42 100755
--- a/src/js/modules/ajax.module.ts
+++ b/src/js/modules/ajax.module.ts
@@ -193,6 +193,7 @@ export class AjaxModule
complete: () =>
{
this.isRetrievingElements = false;
+ this.currBoundsRetrieving = null;
clearTimeout(this.loaderTimer);
setTimeout( () => $('#directory-loading').hide(), 250);
if (this.requestWaitingToBeExecuted)
From f3e1f438f53c1c91e7825206d3260fce96067960 Mon Sep 17 00:00:00 2001
From: Sebastian Castro <90scastro@gmail.com>
Date: Mon, 13 Aug 2018 15:21:03 +0200
Subject: [PATCH 2/4] Improve transiscope theme
---
src/scss/themes/transiscope/_element.scss | 57 ++--------------------
src/scss/themes/transiscope/_list.scss | 59 ++++++++++++++++++++++-
src/scss/themes/transiscope/_map.scss | 10 ++--
3 files changed, 69 insertions(+), 57 deletions(-)
diff --git a/src/scss/themes/transiscope/_element.scss b/src/scss/themes/transiscope/_element.scss
index 73d56ec..b54fe95 100644
--- a/src/scss/themes/transiscope/_element.scss
+++ b/src/scss/themes/transiscope/_element.scss
@@ -207,7 +207,7 @@
width: auto;
float: right;
border: 2px solid;
- color: $secondary;
+ color: $primary;
padding: 8px 15px;
text-align: center;
border-radius: 20px;
@@ -215,7 +215,7 @@
&:before {
margin-right: 8px;
color: white;
- background-color: $secondary;
+ background-color: $primary;
border-radius: 50%;
padding: 0 4px;
}
@@ -264,59 +264,12 @@
.element-item.active {
.expandLabel.transform-big {
background-color: white;
- color: $secondary;
- &:hover { color: $secondary; }
+ color: $primary;
+ &:hover { color: $primary; }
@media #{$small-only} { padding: 8px 10px; }
}
.collapsible-header { padding-bottom: .8rem; }
.inline-option-values { display: none; }
}
-}
-
-#directory-content-list {
-
- .element-item {
- .inline-option-values {
- width: 100%;
- .inline-option-value:last-child {
- float: right;
- margin-right: 0;
- .option-value { color: $dark; }
- }
- }
-
- .menu-element {
- text-align: right;
- padding: 0;
- padding-right: 10px;
- height: 2.3rem !important;
- .menu-element-item .menu-icon {
- font-size: 18px !important;
- &:before { line-height: 2.3rem !important; }
- }
-
- .menu-element-item-text {
- font-size: 11px;
- line-height: 2.5rem;
- }
- }
-
-
- .expandLabel { display: none }
-
- .location {
- font-weight: normal;
- color: $primary;
- .postalCode { font-size: 14px; }
- }
-
- .collapsible-body-main-content { padding-bottom: 0; }
-
- .collapsible-body .tags-container {
- margin-bottom: 0;
- padding-bottom: 1rem;
- }
-
- }
-}
+}
\ No newline at end of file
diff --git a/src/scss/themes/transiscope/_list.scss b/src/scss/themes/transiscope/_list.scss
index 5fef479..6b220e6 100644
--- a/src/scss/themes/transiscope/_list.scss
+++ b/src/scss/themes/transiscope/_list.scss
@@ -31,10 +31,67 @@
padding-top: 6px;
@include box-shadow-1(none);
- @media #{$large-only} { left: 0px; }
+ @media (min-width: 1500px) { left: 0px; }
}
background-color: $light;
color: $primary;
text-align: left;
+}
+
+#directory-content-list .element-item {
+
+ &:not(.active) { @include box-shadow-1(none); }
+ .collapsible-header { border-bottom: 1px solid $light };
+ .collapsible-body { border-bottom: none; }
+ .section { margin-right: 0; }
+
+ .inline-option-values {
+ width: 100%;
+ .inline-option-value:last-child {
+ float: right;
+ margin-right: 0;
+ .option-value { color: $dark; }
+ }
+ }
+
+ .menu-element {
+ text-align: right;
+ padding: 0;
+ padding-right: 10px;
+ height: 2.3rem !important;
+ .menu-element-item .menu-icon {
+ font-size: 18px !important;
+ &:before { line-height: 2.3rem !important; }
+ }
+
+ .menu-element-item-text {
+ font-size: 11px;
+ line-height: 2.5rem;
+ }
+ }
+
+ .expandLabel { display: none }
+
+ .location {
+ font-weight: normal;
+ color: $primary;
+ .postalCode { font-size: 14px; }
+ }
+
+ .collapsible-body-main-content { padding-bottom: 0; }
+
+ .collapsible-body .tags-container {
+ margin-bottom: 0;
+ padding-bottom: 1rem;
+ }
+
+ .section-taxonomy .category-wrapper:last-child .option-value:last-child { margin-bottom: 0; }
+
+}
+
+#directory-content-list .collapsible.popout > li { margin-bottom: 3px; }
+
+#directory-list-spinner-loader .spinner-layer {
+ border-color: $dark;
}
\ No newline at end of file
diff --git a/src/scss/themes/transiscope/_map.scss b/src/scss/themes/transiscope/_map.scss
index a511360..d33bf35 100644
--- a/src/scss/themes/transiscope/_map.scss
+++ b/src/scss/themes/transiscope/_map.scss
@@ -10,16 +10,18 @@
.leaflet-control-layers { margin-right: 17px !important}
.gogo-map-control {
- background-color: $dark;
- color: white;
- border: none;
text-transform: uppercase;
font-weight: bold;
font-size: 12px !important;
line-height: 22px;
padding: 5px 15px;
- .gogo-icon-list { color: $primary; }
+ background-color: white;
+ color: $secondary;
+ border: 1px solid #d7d7d7;
+ @include box-shadow-1(1px 2px 4px 1px rgba(0, 0, 0, 0.12));
+
+ .gogo-icon-list { color: inherit; }
}
#map-gogo-controls {
From d135aad58bbb6c7efdd8fb236d1c839e22432146 Mon Sep 17 00:00:00 2001
From: Sebastian Castro <90scastro@gmail.com>
Date: Mon, 13 Aug 2018 15:21:52 +0200
Subject: [PATCH 3/4] update dist 13/09
---
dist/gogocarto.css | 101 ++++++++++++++++++++++----------------
dist/gogocarto.js | 97 ++++++++++++++++++------------------
dist/gogocarto.min.css | 4 +-
dist/gogocarto.min.css.gz | Bin 28575 -> 28656 bytes
dist/gogocarto.min.js | 8 +--
dist/gogocarto.min.js.gz | Bin 253388 -> 253406 bytes
6 files changed, 115 insertions(+), 95 deletions(-)
diff --git a/dist/gogocarto.css b/dist/gogocarto.css
index 1804fb5..398f435 100755
--- a/dist/gogocarto.css
+++ b/dist/gogocarto.css
@@ -3889,7 +3889,7 @@ th {
width: auto;
float: right;
border: 2px solid;
- color: #f79900;
+ color: #3bad78;
padding: 8px 15px;
text-align: center;
border-radius: 20px;
@@ -3897,7 +3897,7 @@ th {
.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .expandLabel:before {
margin-right: 8px;
color: white;
- background-color: #f79900;
+ background-color: #3bad78;
border-radius: 50%;
padding: 0 4px; }
.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item.active .expandLabel:before {
@@ -3930,9 +3930,9 @@ th {
padding: 8px 10px; } }
.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .expandLabel.transform-big {
background-color: white;
- color: #f79900; }
+ color: #3bad78; }
.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .expandLabel.transform-big:hover {
- color: #f79900; }
+ color: #3bad78; }
@media only screen and (max-width: 600px) {
.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .expandLabel.transform-big {
padding: 8px 10px; } }
@@ -3940,37 +3940,6 @@ th {
padding-bottom: .8rem; }
.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .inline-option-values {
display: none; }
- .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .inline-option-values {
- width: 100%; }
- .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .inline-option-values .inline-option-value:last-child {
- float: right;
- margin-right: 0; }
- .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .inline-option-values .inline-option-value:last-child .option-value {
- color: #175259; }
- .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element {
- text-align: right;
- padding: 0;
- padding-right: 10px;
- height: 2.3rem !important; }
- .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element .menu-element-item .menu-icon {
- font-size: 18px !important; }
- .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element .menu-element-item .menu-icon:before {
- line-height: 2.3rem !important; }
- .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element .menu-element-item-text {
- font-size: 11px;
- line-height: 2.5rem; }
- .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .expandLabel {
- display: none; }
- .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .location {
- font-weight: normal;
- color: #3bad78; }
- .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .location .postalCode {
- font-size: 14px; }
- .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .collapsible-body-main-content {
- padding-bottom: 0; }
- .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .collapsible-body .tags-container {
- margin-bottom: 0;
- padding-bottom: 1rem; }
.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom-in, .gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom-out, .gogo-load-css .gogo-theme-transiscope.gogocarto-container .feature-button {
color: #175259; }
.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom-in:hover, .gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom-out:hover, .gogo-load-css .gogo-theme-transiscope.gogocarto-container .feature-button:hover {
@@ -3979,16 +3948,19 @@ th {
.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-layers {
margin-right: 17px !important; }
.gogo-load-css .gogo-theme-transiscope.gogocarto-container .gogo-map-control {
- background-color: #175259;
- color: white;
- border: none;
text-transform: uppercase;
font-weight: bold;
font-size: 12px !important;
line-height: 22px;
- padding: 5px 15px; }
+ padding: 5px 15px;
+ background-color: white;
+ color: #f79900;
+ border: 1px solid #d7d7d7;
+ -webkit-box-shadow: 1px 2px 4px 1px rgba(0, 0, 0, 0.12);
+ -moz-box-shadow: 1px 2px 4px 1px rgba(0, 0, 0, 0.12);
+ box-shadow: 1px 2px 4px 1px rgba(0, 0, 0, 0.12); }
.gogo-load-css .gogo-theme-transiscope.gogocarto-container .gogo-map-control .gogo-icon-list {
- color: #3bad78; }
+ color: inherit; }
.gogo-load-css .gogo-theme-transiscope.gogocarto-container #map-gogo-controls {
width: 100%; }
.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom.leaflet-bar.leaflet-control {
@@ -4048,9 +4020,56 @@ th {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none; }
- @media only screen and (min-width: 1201px) {
+ @media (min-width: 1500px) {
.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header .show-directory-menu-button {
left: 0px; } }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item:not(.active) {
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .collapsible-header {
+ border-bottom: 1px solid #f3f6f4; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .collapsible-body {
+ border-bottom: none; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .section {
+ margin-right: 0; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .inline-option-values {
+ width: 100%; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .inline-option-values .inline-option-value:last-child {
+ float: right;
+ margin-right: 0; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .inline-option-values .inline-option-value:last-child .option-value {
+ color: #175259; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element {
+ text-align: right;
+ padding: 0;
+ padding-right: 10px;
+ height: 2.3rem !important; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element .menu-element-item .menu-icon {
+ font-size: 18px !important; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element .menu-element-item .menu-icon:before {
+ line-height: 2.3rem !important; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element .menu-element-item-text {
+ font-size: 11px;
+ line-height: 2.5rem; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .expandLabel {
+ display: none; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .location {
+ font-weight: normal;
+ color: #3bad78; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .location .postalCode {
+ font-size: 14px; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .collapsible-body-main-content {
+ padding-bottom: 0; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .collapsible-body .tags-container {
+ margin-bottom: 0;
+ padding-bottom: 1rem; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .section-taxonomy .category-wrapper:last-child .option-value:last-child {
+ margin-bottom: 0; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .collapsible.popout > li {
+ margin-bottom: 3px; }
+ .gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-list-spinner-loader .spinner-layer {
+ border-color: #175259; }
.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile .feature-button {
margin-right: 0;
float: left; }
diff --git a/dist/gogocarto.js b/dist/gogocarto.js
index 47e2455..7486aac 100644
--- a/dist/gogocarto.js
+++ b/dist/gogocarto.js
@@ -33810,53 +33810,6 @@ root: root
})();
})();
-(function() {(window.nunjucksPrecompiled = window.nunjucksPrecompiled || {})["components/list/list.html.njk"] = (function() {
-function root(env, context, frame, runtime, cb) {
-var lineno = null;
-var colno = null;
-var output = "";
-try {
-var parentTemplate = null;
-output += "
\n\n\n
\n
\n
";
-output += runtime.suppressValue((lineno = 18, colno = 59, runtime.callWrap(runtime.memberLookup((runtime.contextOrFrameLookup(context, frame, "spinnerLoader")),"create"), "spinnerLoader[\"create\"]", context, ["directory-list-spinner-loader"])), env.opts.autoescape);
-output += "\n
\n
Aucun résultat trouvé\n
« L’échec est le fondement de la réussite. » \n
Lao-Tseu\n
\n
\n
";
-if(parentTemplate) {
-parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);
-} else {
-cb(null, output);
-}
-});
-} catch (e) {
- cb(runtime.handleError(e, lineno, colno));
-}
-}
-return {
-root: root
-};
-
-})();
-})();
-
(function() {(window.nunjucksPrecompiled = window.nunjucksPrecompiled || {})["components/element/body.html.njk"] = (function() {
function root(env, context, frame, runtime, cb) {
var lineno = null;
@@ -35435,6 +35388,53 @@ root: root
})();
})();
+(function() {(window.nunjucksPrecompiled = window.nunjucksPrecompiled || {})["components/list/list.html.njk"] = (function() {
+function root(env, context, frame, runtime, cb) {
+var lineno = null;
+var colno = null;
+var output = "";
+try {
+var parentTemplate = null;
+output += "\n\n\n
\n
\n
";
+output += runtime.suppressValue((lineno = 18, colno = 59, runtime.callWrap(runtime.memberLookup((runtime.contextOrFrameLookup(context, frame, "spinnerLoader")),"create"), "spinnerLoader[\"create\"]", context, ["directory-list-spinner-loader"])), env.opts.autoescape);
+output += "\n
\n
Aucun résultat trouvé\n
« L’échec est le fondement de la réussite. » \n
Lao-Tseu\n
\n
\n
";
+if(parentTemplate) {
+parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);
+} else {
+cb(null, output);
+}
+});
+} catch (e) {
+ cb(runtime.handleError(e, lineno, colno));
+}
+}
+return {
+root: root
+};
+
+})();
+})();
+
(function() {(window.nunjucksPrecompiled = window.nunjucksPrecompiled || {})["components/map/info-bar.html.njk"] = (function() {
function root(env, context, frame, runtime, cb) {
var lineno = null;
@@ -42528,6 +42528,7 @@ var AjaxModule = /** @class */function () {
},
complete: function complete() {
_this.isRetrievingElements = false;
+ _this.currBoundsRetrieving = null;
clearTimeout(_this.loaderTimer);
setTimeout(function () {
return $('#directory-loading').hide();
@@ -44908,4 +44909,4 @@ function splitLongText(text, length, size) {
}
},{}]},{},[46])
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvanMvYXBwLmNvbXBvbmVudC50cyIsInNyYy9qcy9hcHAubW9kdWxlLnRzIiwic3JjL2pzL2NsYXNzZXMvY2xhc3Nlcy50cyIsInNyYy9qcy9jbGFzc2VzL2NvbmZpZy9nb2dvLWNvbmZpZy5jbGFzcy50cyIsInNyYy9qcy9jbGFzc2VzL2NvbmZpZy9nb2dvLWRlZmF1bHQtZmVhdHVyZS50cyIsInNyYy9qcy9jbGFzc2VzL2NvbmZpZy9nb2dvLWZlYXR1cmUuY2xhc3MudHMiLCJzcmMvanMvY2xhc3Nlcy9lbGVtZW50L2NhdGVnb3J5LXZhbHVlLmNsYXNzLnRzIiwic3JjL2pzL2NsYXNzZXMvZWxlbWVudC9jb250cmlidXRpb24uY2xhc3MudHMiLCJzcmMvanMvY2xhc3Nlcy9lbGVtZW50L2VsZW1lbnQtYmFzZS5jbGFzcy50cyIsInNyYy9qcy9jbGFzc2VzL2VsZW1lbnQvZWxlbWVudC11cmwuY2xhc3MudHMiLCJzcmMvanMvY2xhc3Nlcy9lbGVtZW50L2VsZW1lbnQuY2xhc3MudHMiLCJzcmMvanMvY2xhc3Nlcy9lbGVtZW50L29wdGlvbi12YWx1ZS5jbGFzcy50cyIsInNyYy9qcy9jbGFzc2VzL2VsZW1lbnQvcG9zdGFsLWFkZHJlc3MuY2xhc3MudHMiLCJzcmMvanMvY2xhc3Nlcy9lbGVtZW50L3N0YW1wLmNsYXNzLnRzIiwic3JjL2pzL2NsYXNzZXMvZWxlbWVudC92b3RlLXJlcG9ydC5jbGFzcy50cyIsInNyYy9qcy9jbGFzc2VzL2V2ZW50LmNsYXNzLnRzIiwic3JjL2pzL2NsYXNzZXMvaGlzdG9yeS1zdGF0ZS5jbGFzcy50cyIsInNyYy9qcy9jbGFzc2VzL21hcC90aWxlLWxheWVyLmNsYXNzLnRzIiwic3JjL2pzL2NsYXNzZXMvbWFwL3ZpZXdwb3J0LmNsYXNzLnRzIiwic3JjL2pzL2NsYXNzZXMvdGF4b25vbXkvY2F0ZWdvcnkuY2xhc3MudHMiLCJzcmMvanMvY2xhc3Nlcy90YXhvbm9teS9vcHRpb24uY2xhc3MudHMiLCJzcmMvanMvY29tcG9uZW50cy9jdXN0b20tcG9wdXAuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvZGlyZWN0b3J5LW1lbnUvY2F0ZWdvcnktb3B0aW9uLXRyZWUtbm9kZS5jbGFzcy50cyIsInNyYy9qcy9jb21wb25lbnRzL2RpcmVjdG9yeS1tZW51L2RpcmVjdG9yeS1tZW51LmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL2RpcmVjdG9yeS1tZW51L2ZpbHRlcnMuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvZWxlbWVudC9lbGVtZW50LW1lbnUuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvZWxlbWVudC9lbGVtZW50LmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL2VsZW1lbnQvaW1hZ2VzLmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL2VsZW1lbnQvaW50ZXJhY3RpdmUtc2VjdGlvbi5jb21wb25lbnQudHMiLCJzcmMvanMvY29tcG9uZW50cy9lbGVtZW50L21vZGVyYXRpb24uY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvZWxlbWVudC9zdGFtcC5jb21wb25lbnQudHMiLCJzcmMvanMvY29tcG9uZW50cy9nb2dvLWNvbnRyb2xzLmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL2xpc3QvZWxlbWVudC1saXN0LmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL21hcC9kaXJlY3Rpb25zLmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL21hcC9pbmZvLWJhci5jb21wb25lbnQudHMiLCJzcmMvanMvY29tcG9uZW50cy9tYXAvbWFwLWNvbnRyb2xzLmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL21hcC9tYXAuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvbWFwL21hcmtlci5jb21wb25lbnQudHMiLCJzcmMvanMvY29tcG9uZW50cy9tb2RhbHMvYWJzdHJhY3QtbW9kYWwuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvbW9kYWxzL2RlbGV0ZS5jb21wb25lbnQudHMiLCJzcmMvanMvY29tcG9uZW50cy9tb2RhbHMvcGljay1hZGRyZXNzLmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL21vZGFscy9yZXBvcnQuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvbW9kYWxzL3NlbmQtZW1haWwuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvbW9kYWxzL3ZvdGUuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvc2VhcmNoLWJhci9zZWFyY2gtYmFyLmNvbXBvbmVudC50cyIsInNyYy9qcy9nb2dvY2FydG8udHMiLCJzcmMvanMvbWFuYWdlcnMvZGF0YS10eXBlLm1hbmFnZXIudHMiLCJzcmMvanMvbWFuYWdlcnMvZWxlbWVudHMubWFuYWdlci50cyIsInNyYy9qcy9tYW5hZ2Vycy9nZW9jb2RpbmcubWFuYWdlci50cyIsInNyYy9qcy9tYW5hZ2Vycy9oaXN0b3J5LXN0YXRlLm1hbmFnZXIudHMiLCJzcmMvanMvbWFuYWdlcnMvbWFwLm1hbmFnZXIudHMiLCJzcmMvanMvbWFuYWdlcnMvbW9kZS5tYW5hZ2VyLnRzIiwic3JjL2pzL21hbmFnZXJzL3N0YXRlLm1hbmFnZXIudHMiLCJzcmMvanMvbW9kdWxlcy9hamF4Lm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2JvdW5kcy5tb2R1bGUudHMiLCJzcmMvanMvbW9kdWxlcy9jb3JlL2RvY3VtZW50LXRpdGxlLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2NvcmUvaGlzdG9yeS5tb2R1bGUudHMiLCJzcmMvanMvbW9kdWxlcy9jb3JlL3JvdXRlci5tb2R1bGUudHMiLCJzcmMvanMvbW9kdWxlcy9jb3JlL3RlbXBsYXRlLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2VsZW1lbnQvZGlmZi5tb2R1bGUudHMiLCJzcmMvanMvbW9kdWxlcy9lbGVtZW50L2VsZW1lbnQtanNvbi1sb2FkZXIubW9kdWxlLnRzIiwic3JjL2pzL21vZHVsZXMvZWxlbWVudC9mb3JtYXRlci5tb2R1bGUudHMiLCJzcmMvanMvbW9kdWxlcy9lbGVtZW50L2ljb25zLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2VsZW1lbnQvb3B0aW9uLXZhbHVlcy5tb2R1bGUudHMiLCJzcmMvanMvbW9kdWxlcy9lbGVtZW50cy9lbGVtZW50cy1qc29uLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2VsZW1lbnRzL2VsZW1lbnRzLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2VsZW1lbnRzL2Zhdm9yaXRlLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2VsZW1lbnRzL3N0YW1wLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2dlb2NvZGVyLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2xvZ2luLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL21hcC9kaXNwbGF5LWVsZW1lbnQtYWxvbmUubW9kdWxlLnRzIiwic3JjL2pzL21vZHVsZXMvdGF4b25vbXkvZmlsdGVyLXJvdXRpbmcubW9kdWxlLnRzIiwic3JjL2pzL21vZHVsZXMvdGF4b25vbXkvZmlsdGVyLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL3RheG9ub215L3RheG9ub215LXNrb3MubW9kdWxlLnRzIiwic3JjL2pzL21vZHVsZXMvdGF4b25vbXkvdGF4b25vbXkubW9kdWxlLnRzIiwic3JjL2pzL3V0aWxzL2Nvb2tpZXMudHMiLCJzcmMvanMvdXRpbHMvcGFyYW1zLnRzIiwic3JjL2pzL3V0aWxzL3BhcnNlci1zdHJpbmctbnVtYmVyLnRzIiwic3JjL2pzL3V0aWxzL3N0cmluZy1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQ1dBOztBQU1BLElBQUEsZUFBQSxhQUFBLFlBQUE7QUFJQyxhQUFBLFlBQUEs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QU8sUUFBUSxRQUFRLE1BQVIsR0FBaUIsQ0FBekIsQ0FBUDtBQUNEO0FBRUssU0FBQSxhQUFBLENBQXdCLElBQXhCLEVBQXVDLE1BQXZDLEVBQXdELElBQXhELEVBQTBFO0FBQWxCLFFBQUEsU0FBQSxLQUFBLENBQUEsRUFBQTtBQUFBLGVBQUEsRUFBQTtBQUFrQjtBQUU5RTtBQUNBLFFBQUksS0FBSyxNQUFMLEdBQWMsU0FBUyxJQUEzQixFQUFpQztBQUMvQixpQkFBUyxTQUFTLElBQWxCO0FBQ0Q7QUFDRCxRQUFJLGNBQWMsU0FBUyxJQUEzQjtBQUNBLFFBQUksU0FBUyxLQUFLLEtBQUwsQ0FBVyxXQUFYLEVBQXdCLE1BQXhCLEVBQWdDLEtBQWhDLENBQXNDLFVBQXRDLEVBQWtELENBQWxELEVBQXFELE1BQWxFO0FBQ0EsUUFBSSxVQUFVLElBQWQsRUFBb0IsU0FBUyxLQUFLLEtBQUwsQ0FBVyxXQUFYLEVBQXdCLE1BQXhCLEVBQWdDLEtBQWhDLENBQXNDLEdBQXRDLEVBQTJDLENBQTNDLEVBQThDLE1BQXZEO0FBQ3BCLGNBQVUsY0FBYyxDQUF4QjtBQUNBLFFBQUksUUFBUSxLQUFLLEtBQUwsQ0FBVyxDQUFYLEVBQWMsTUFBZCxDQUFaO0FBQ0EsUUFBSSxRQUFRLEtBQUssS0FBTCxDQUFXLE1BQVgsQ0FBWjtBQUNBLFdBQU8sRUFBRSxPQUFPLEtBQVQsRUFBZ0IsUUFBUSxLQUF4QixFQUFQO0FBQ0QiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIvKipcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHb0dvQ2FydG8gcHJvamVjdC5cbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNiBTZWJhc3RpYW4gQ2FzdHJvIC0gOTBzY2FzdHJvQGdtYWlsLmNvbVxuICogQGxpY2Vuc2UgR05VIEdQTCB2M1xuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAxNi0xMi0xM1xuICovXG5cbmltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzLCBBcHBNb2RlcyB9IGZyb20gXCIuL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuL2dvZ29jYXJ0b1wiO1xuXG5cbi8vZGVjbGFyZSB2YXIgJDtcbmRlY2xhcmUgbGV0ICQsIHdpbmRvdyA6IGFueSwgTWF0ZXJpYWxpemUgOiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnRcbntcblx0aW5mb3JCYXJBbmltYXRpb25UaW1lcjtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRBcHAuZGlyZWN0b3J5TWVudUNvbXBvbmVudC5vblNob3cuZG8oICgpID0+IHsgdGhpcy5oYW5kbGVEaXJlY3RvcnlNZW51U2hvdygpIH0pO1xuXHRcdEFwcC5kaXJlY3RvcnlNZW51Q29tcG9uZW50Lm9uSGlkZS5kbyggKCkgPT4geyB0aGlzLmhhbmRsZURpcmVjdG9yeU1lbnVIaWRlKCkgfSk7XG5cdH1cblxuXHRpbml0aWFsaXplKClcblx0e1xuXHRcdHRoaXMudXBkYXRlQ29tcG9uZW50c1NpemUoKTtcblxuXHRcdGxldCByZXM7XG5cdFx0d2luZG93Lm9ucmVzaXplID0gKCkgPT5cblx0XHR7XG5cdFx0ICAgaWYgKHJlcykgeyBjbGVhclRpbWVvdXQocmVzKTsgfVxuXHRcdCAgIHJlcyA9IHNldFRpbWVvdXQoICgpID0+IHsgXG5cdFx0ICAgXHRjb25zb2xlLmxvZyhcIk9uIHJlc2l6ZSB1cGRhdGUgY29tcG9uZW50IHNpemVcIik7XG5cdFx0ICAgXHR0aGlzLnVwZGF0ZUNvbXBvbmVudHNTaXplKCk7IFxuXHRcdCAgIFx0QXBwLmRpcmVjdG9yeU1lbnVDb21wb25lbnQudXBkYXRlU2l6ZSgpO1xuXHRcdCAgIH0sMjAwKTtcblx0XHR9O1x0XG5cblx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IHRoaXMudXBkYXRlQ29tcG9uZW50c1NpemUoZmFsc2UpOyB9LCAxMDAwKTtcdFxuXHRcdHNldFRpbWVvdXQoICgpID0+IHsgdGhpcy51cGRhdGVDb21wb25lbnRzU2l6ZShmYWxzZSk7IH0sIDIwMDApO1xuXHRcdHNldFRpbWVvdXQoICgpID0+IHsgdGhpcy51cGRhdGVDb21wb25lbnRzU2l6ZShmYWxzZSk7IH0sIDUwMDApO1xuXHR9XG5cblx0dG9hc3RNZXNzYWdlKCRtZXNzYWdlLCAkZHVyYXRpb24gPSAzMDAwKVxuXHR7XG5cdFx0TWF0ZXJpYWxpemUudG9hc3QoJG1lc3NhZ2UsICRkdXJhdGlvbiwgJ3JvdW5kZWQnKVxuXHR9XG5cblx0aGFuZGxlRGlyZWN0b3J5TWVudVNob3coKVxuXHR7XHRcdFxuXHRcdGlmICghdGhpcy5pc01vYmlsZVNjcmVlbigpKVxuXHRcdHtcblx0XHRcdCQoJyNkaXJlY3RvcnktY29udGVudCcpLnZlbG9jaXR5KHsnbWFyZ2luLWxlZnQnOiBBcHAuZGlyZWN0b3J5TWVudUNvbXBvbmVudC53aWR0aH0sIHtkdXJhdGlvbjogMzAwLCBxdWV1ZTogZmFsc2UsIGVhc2luZzogJ3N3aW5nJ30pO1xuXHRcdFx0JCgnI21hcC1nb2dvLWNvbnRyb2xzJykudmVsb2NpdHkoeydwYWRkaW5nLWxlZnQnOiAnMTBweCd9LCB7ZHVyYXRpb246IDMwMCwgcXVldWU6IGZhbHNlLCBlYXNpbmc6ICdzd2luZyd9KTtcblx0XHRcdCQoJy5zaG93LWRpcmVjdG9yeS1tZW51LWJ1dHRvbicpLmhpZGUoKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4geyAkKCcjZGlyZWN0b3J5LWNvbnRlbnQnKS5jc3MoJ21hcmdpbi1sZWZ0JywgQXBwLmRpcmVjdG9yeU1lbnVDb21wb25lbnQud2lkdGgpOyB9LCA0MDApO1xuXHRcdH1cdFxuXHRcdHNldFRpbWVvdXQoICgpID0+IHsgQXBwLm1hcENvbXBvbmVudC5yZXNpemUoKSB9LCA0MDApO1xuXHR9XG5cblx0aGFuZGxlRGlyZWN0b3J5TWVudUhpZGUoKVxuXHR7XG5cdFx0JCgnLnNob3ctZGlyZWN0b3J5LW1lbnUtYnV0dG9uJykuZmFkZUluKDIwMCk7XG5cdFx0JCgnI2RpcmVjdG9yeS1jb250ZW50JykudmVsb2NpdHkoeydtYXJnaW4tbGVmdCc6JzAnfSwge2R1cmF0aW9uOiAxMDAsIHF1ZXVlOiBmYWxzZSwgZWFzaW5nOiAnc3dpbmcnfSk7XHRcdFxuXHRcdCQoJyNtYXAtZ29nby1jb250cm9scycpLnZlbG9jaXR5KHsncGFkZGluZy1sZWZ0JzogJzBweCd9LCB7ZHVyYXRpb246IDEwMCwgcXVldWU6IGZhbHNlLCBlYXNpbmc6ICdzd2luZyd9KTtcblx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IEFwcC5tYXBDb21wb25lbnQucmVzaXplKCkgfSwgMjAwKTtcblx0fVx0XG5cblx0aXNNb2JpbGVTY3JlZW4oKSB7IHJldHVybiB0aGlzLndpZHRoKCkgPCA4NTA7IH1cblxuXHRtYXBXaWR0aCgpIHsgcmV0dXJuICQoJyNkaXJlY3RvcnktY29udGVudCcpLndpZHRoKCk7IH1cblxuXHR3aWR0aCgpIHsgcmV0dXJuICQoJy5nb2dvY2FydG8tY29udGFpbmVyJykud2lkdGgoKTsgfVxuXG5cdHVwZGF0ZUNvbXBvbmVudHNTaXplKCRyZWZyZXNoSW5mb0JhciA9IHRydWUpXG5cdHtcdFxuXHRcdEFwcC5kaXJlY3RvcnlNZW51Q29tcG9uZW50LnVwZGF0ZVNpemUoKTtcblxuXHRcdEFwcC5zZWFyY2hCYXJDb21wb25lbnQudXBkYXRlKCk7XG5cblx0XHRBcHAuZ29nb0NvbnRyb2xDb21wb25lbnQudXBkYXRlUG9zaXRpb24oKTtcblxuXHRcdC8vIHVwZGF0ZSBpbWcgY29udHJvbHMgZm9yIGVsZW1lbnQgbGlzdFxuXHRcdCQoJyNkaXJlY3RvcnktY29udGVudC1saXN0IC5lbGVtZW50LWl0ZW0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0JCh0aGlzKS5maW5kKCcuaW1nLW92ZXJsYXknKS5jc3MoJ2hlaWdodCcsICQodGhpcykuZmluZCgnLmltZy1jb250YWluZXInKS5oZWlnaHQoKSk7XG5cdFx0fSk7XG5cblx0XHRsZXQgaW5mb0Jhckhhc0NoYW5nZURpc3BsYXlNb2RlID0gZmFsc2U7XG5cdFx0Ly8gc2hvdyBlbGVtZW50IGluZm8gYmFyIGFzaWRlIG9yIGF0IHRoZSBib3R0b20gZGVwZW5kaW5nIG9mIGRpcmVjb3R5LWNvbnRlbnQgd2lkdGhcblx0XHRpZiAodGhpcy5tYXBXaWR0aCgpID4gOTAwKVxuXHRcdHtcblx0XHRcdGlmICghQXBwLmluZm9CYXJDb21wb25lbnQuaXNEaXNwbGF5ZWRBc2lkZSgpKVxuXHRcdFx0e1xuXHRcdFx0XHRBcHAuaW5mb0JhckNvbXBvbmVudC5kaXNwbGF5QXNpZGUoKTtcblx0XHRcdFx0aW5mb0Jhckhhc0NoYW5nZURpc3BsYXlNb2RlID0gdHJ1ZTtcblx0XHRcdH1cdFx0XHRcblx0XHR9XHRcblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0aWYgKCFBcHAuaW5mb0JhckNvbXBvbmVudC5pc0Rpc3BsYXllZEJvdHRvbSgpKVxuXHRcdFx0e1xuXHRcdFx0XHRBcHAuaW5mb0JhckNvbXBvbmVudC5kaXNwbGF5Qm90dG9tKCk7XG5cdFx0XHRcdGluZm9CYXJIYXNDaGFuZ2VEaXNwbGF5TW9kZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHQkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbWFwJykuc3RvcCh0cnVlKS5jc3MoJ21hcmdpbi1yaWdodCcsICcwJyk7XG5cdFx0fVx0XG5cblx0XHRpZiAoQXBwLmluZm9CYXJDb21wb25lbnQuaXNEaXNwbGF5ZWRBc2lkZSgpKVx0XG5cdFx0e1x0XHRcdFxuXHRcdFx0bGV0IGluZm9CYXJXaWR0aDtcblx0XHRcdGlmIChBcHAuY29uZmlnLmluZm9iYXIud2lkdGgpIGluZm9CYXJXaWR0aCA9IEFwcC5jb25maWcuaW5mb2Jhci53aWR0aDtcblx0XHRcdGVsc2UgaW5mb0JhcldpZHRoID0gdGhpcy5tYXBXaWR0aCgpID4gMTEwMCA/ICc1NDBweCcgOiAnNDcwcHgnO1xuXG5cdFx0XHRpZiAoaW5mb0JhcldpZHRoID09ICc0NzBweCcpICQoJyNlbGVtZW50LWluZm8tYmFyJykuYWRkQ2xhc3MoJ3NtYWxsLXdpZHRoJyk7XG5cdFx0XHRlbHNlICQoJyNlbGVtZW50LWluZm8tYmFyJykucmVtb3ZlQ2xhc3MoJ3NtYWxsLXdpZHRoJyk7XG5cblx0XHRcdGlmIChpbmZvQmFySGFzQ2hhbmdlRGlzcGxheU1vZGUpXG5cdFx0XHRcdCQoJyNlbGVtZW50LWluZm8tYmFyJykuY3NzKCd3aWR0aCcsIGluZm9CYXJXaWR0aCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdCQoJyNlbGVtZW50LWluZm8tYmFyJykuYW5pbWF0ZSh7J3dpZHRoJzogaW5mb0JhcldpZHRofSwgMzUwLCBcInN3aW5nXCIpO1xuXHRcdFx0XG5cdFx0XHR0aGlzLnVwZGF0ZURpcmVjdG9yeUNvbnRlbnRNYXJnaW5JZkluZm9CYXJEaXNwbGF5ZWRBc2lkZSghaW5mb0Jhckhhc0NoYW5nZURpc3BsYXlNb2RlLCBpbmZvQmFyV2lkdGgpO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0aWYgKCRyZWZyZXNoSW5mb0JhcikgJCgnI2VsZW1lbnQtaW5mby1iYXInKS5zdG9wKHRydWUpXG5cdFx0XHQkKCcjZWxlbWVudC1pbmZvLWJhcicpLmNzcygnd2lkdGgnLCAnMTAwJScpO1xuXHRcdH1cblxuXHRcdGlmICgkcmVmcmVzaEluZm9CYXIpIHNldFRpbWVvdXQoICgpID0+IHsgQXBwLmluZm9CYXJDb21wb25lbnQucmVmcmVzaCgpOyB9LCAxMDApO1xuXG5cdFx0aWYgKCQoJyNkaXJlY3RvcnktbWVudScpLmlzKCc6dmlzaWJsZScpICYmICF0aGlzLmlzTW9iaWxlU2NyZWVuKCkpXG5cdFx0e1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHsgXG5cdFx0XHRcdCQoJyNkaXJlY3RvcnktY29udGVudCcpLmNzcygnbWFyZ2luLWxlZnQnLCBBcHAuZGlyZWN0b3J5TWVudUNvbXBvbmVudC53aWR0aCk7XG5cdFx0XHR9LDApO1x0XHRcblx0XHR9XG5cdFx0ZWxzZSAkKCcjZGlyZWN0b3J5LWNvbnRlbnQnKS5jc3MoJ21hcmdpbi1sZWZ0JywgMCk7XG5cdH1cblxuXHR1cGRhdGVEaXJlY3RvcnlDb250ZW50TWFyZ2luSWZJbmZvQmFyRGlzcGxheWVkQXNpZGUoYW5pbWF0ZSA6IGJvb2xlYW4gPSBmYWxzZSwgd2lkdGggOiBzdHJpbmcgPSBBcHAuaW5mb0JhckNvbXBvbmVudC53aWR0aCgpKVxuXHR7XHRcdFxuXHRcdGlmICghQXBwLmluZm9CYXJDb21wb25lbnQuaXNWaXNpYmxlKSByZXR1cm47XG5cblx0XHRpZiAoYW5pbWF0ZSkgJCgnI2RpcmVjdG9yeS1jb250ZW50LW1hcCcpLnN0b3AodHJ1ZSkuYW5pbWF0ZSh7J21hcmdpbi1yaWdodCc6IHdpZHRofSwgMzUwLCAnc3dpbmcnKTtcblx0XHRlbHNlICQoJyNkaXJlY3RvcnktY29udGVudC1tYXAnKS5zdG9wKHRydWUpLmNzcygnbWFyZ2luLXJpZ2h0Jywgd2lkdGgpO1xuXHRcdFxuXHRcdEFwcC5jb21wb25lbnQudXBkYXRlTWFwU2l6ZSgpO1xuXHR9XG5cdFxuXHR1cGRhdGVNYXBTaXplKClcblx0e1x0XHRcblx0XHRpZiAoIUFwcC5pbmZvQmFyQ29tcG9uZW50LmlzRGlzcGxheWVkQXNpZGUoKSkgJCgnI2RpcmVjdG9yeS1jb250ZW50LW1hcCcpLnN0b3AodHJ1ZSkuY3NzKCdtYXJnaW4tcmlnaHQnLCAnMCcpO1xuXHRcdGlmIChBcHAubWFwQ29tcG9uZW50KSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBBcHAubWFwQ29tcG9uZW50LnJlc2l6ZSgpOyB9LDApO1xuXHR9XHRcbn1cblxuXG5cblxuXG4iLCIvKipcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHb0dvQ2FydG8gcHJvamVjdC5cbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNiBTZWJhc3RpYW4gQ2FzdHJvIC0gOTBzY2FzdHJvQGdtYWlsLmNvbVxuICogQGxpY2Vuc2UgR05VIEdQTCB2M1xuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAxNi0xMi0xM1xuICovXG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cImxlYWZsZXRcIiAvPlxuXG4vLyBNQU5BR0VSU1xuaW1wb3J0IHsgTW9kZU1hbmFnZXIsIEFwcE1vZGVzIH0gZnJvbSBcIi4vbWFuYWdlcnMvbW9kZS5tYW5hZ2VyXCI7XG5pbXBvcnQgeyBTdGF0ZU1hbmFnZXIsIEFwcFN0YXRlcyB9IGZyb20gXCIuL21hbmFnZXJzL3N0YXRlLm1hbmFnZXJcIjtcbmltcG9ydCB7IERhdGFUeXBlTWFuYWdlciwgQXBwRGF0YVR5cGUgfSBmcm9tIFwiLi9tYW5hZ2Vycy9kYXRhLXR5cGUubWFuYWdlclwiO1xuaW1wb3J0IHsgRWxlbWVudHNNYW5hZ2VyIH0gZnJvbSBcIi4vbWFuYWdlcnMvZWxlbWVudHMubWFuYWdlclwiO1xuaW1wb3J0IHsgSGlzdG9yeVN0YXRlTWFuYWdlciB9IGZyb20gXCIuL21hbmFnZXJzL2hpc3Rvcnktc3RhdGUubWFuYWdlclwiO1xuaW1wb3J0IHsgR2VvY29kaW5nTWFuYWdlciB9IGZyb20gXCIuL21hbmFnZXJzL2dlb2NvZGluZy5tYW5hZ2VyXCI7XG5pbXBvcnQgeyBNYXBNYW5hZ2VyIH0gZnJvbSBcIi4vbWFuYWdlcnMvbWFwLm1hbmFnZXJcIjtcblxuLy8gTU9EVUxFU1xuaW1wb3J0IHsgR2VvY29kZXJNb2R1bGUsIEdlb2NvZGVSZXN1bHQgfSBmcm9tIFwiLi9tb2R1bGVzL2dlb2NvZGVyLm1vZHVsZVwiO1xuaW1wb3J0IHsgRmlsdGVyTW9kdWxlIH0gZnJvbSBcIi4vbW9kdWxlcy90YXhvbm9teS9maWx0ZXIubW9kdWxlXCI7XG5pbXBvcnQgeyBGaWx0ZXJSb3V0aW5nTW9kdWxlIH0gZnJvbSBcIi4vbW9kdWxlcy90YXhvbm9teS9maWx0ZXItcm91dGluZy5tb2R1bGVcIjtcbmltcG9ydCB7IEVsZW1lbnRzTW9kdWxlIH0gZnJvbSBcIi4vbW9kdWxlcy9lbGVtZW50cy9lbGVtZW50cy5tb2R1bGVcIjtcbmltcG9ydCB7IEVsZW1lbnRzSnNvbk1vZHVsZSB9IGZyb20gXCIuL21vZHVsZXMvZWxlbWVudHMvZWxlbWVudHMtanNvbi5tb2R1bGVcIjtcbmltcG9ydCB7IEZhdm9yaXRlTW9kdWxlIH0gZnJvbSBcIi4vbW9kdWxlcy9lbGVtZW50cy9mYXZvcml0ZS5tb2R1bGVcIjtcbmltcG9ydCB7IERpc3BsYXlFbGVtZW50QWxvbmVNb2R1bGUgfSBmcm9tIFwiLi9tb2R1bGVzL21hcC9kaXNwbGF5LWVsZW1lbnQtYWxvbmUubW9kdWxlXCI7XG5pbXBvcnQgeyBBamF4TW9kdWxlIH0gZnJvbSBcIi4vbW9kdWxlcy9hamF4Lm1vZHVsZVwiO1xuaW1wb3J0IHsgVGF4b25vbXlNb2R1bGUgfSBmcm9tICcuL21vZHVsZXMvdGF4b25vbXkvdGF4b25vbXkubW9kdWxlJztcbmltcG9ydCB7IFRheG9ub215U2tvc01vZHVsZSB9IGZyb20gJy4vbW9kdWxlcy90YXhvbm9teS90YXhvbm9teS1za29zLm1vZHVsZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tIFwiLi9tb2R1bGVzL2NvcmUvcm91dGVyLm1vZHVsZVwiO1xuaW1wb3J0IHsgTG9naW5Nb2R1bGUgfSBmcm9tIFwiLi9tb2R1bGVzL2xvZ2luLm1vZHVsZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVNb2R1bGUgfSBmcm9tIFwiLi9tb2R1bGVzL2NvcmUvdGVtcGxhdGUubW9kdWxlXCI7XG5pbXBvcnQgeyBIaXN0b3J5TW9kdWxlIH0gZnJvbSAnLi9tb2R1bGVzL2NvcmUvaGlzdG9yeS5tb2R1bGUnO1xuaW1wb3J0IHsgQm91bmRzTW9kdWxlIH0gZnJvbSAnLi9tb2R1bGVzL2JvdW5kcy5tb2R1bGUnO1xuaW1wb3J0IHsgRG9jdW1lbnRUaXRsZU1vZHVsZSB9IGZyb20gJy4vbW9kdWxlcy9jb3JlL2RvY3VtZW50LXRpdGxlLm1vZHVsZSc7XG5pbXBvcnQgeyBFbGVtZW50SnNvblBhcnNlck1vZHVsZSB9IGZyb20gJy4vbW9kdWxlcy9lbGVtZW50L2VsZW1lbnQtanNvbi1sb2FkZXIubW9kdWxlJztcbmltcG9ydCB7IEVsZW1lbnRGb3JtYXRlck1vZHVsZSB9IGZyb20gJy4vbW9kdWxlcy9lbGVtZW50L2Zvcm1hdGVyLm1vZHVsZSc7XG5pbXBvcnQgeyBFbGVtZW50RGlmZk1vZHVsZSB9IGZyb20gJy4vbW9kdWxlcy9lbGVtZW50L2RpZmYubW9kdWxlJztcbmltcG9ydCB7IEVsZW1lbnRJY29uc01vZHVsZSB9IGZyb20gXCIuL21vZHVsZXMvZWxlbWVudC9pY29ucy5tb2R1bGVcIjtcbmltcG9ydCB7IEVsZW1lbnRPcHRpb25WYWx1ZXNNb2R1bGUgfSBmcm9tIFwiLi9tb2R1bGVzL2VsZW1lbnQvb3B0aW9uLXZhbHVlcy5tb2R1bGVcIjtcbmltcG9ydCB7IFN0YW1wTW9kdWxlIH0gZnJvbSBcIi4vbW9kdWxlcy9lbGVtZW50cy9zdGFtcC5tb2R1bGVcIjtcblxuLy8gQ09NUE9ORU5UU1xuaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JztcbmltcG9ydCB7IEVsZW1lbnRMaXN0Q29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9saXN0L2VsZW1lbnQtbGlzdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IEluZm9CYXJDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL21hcC9pbmZvLWJhci5jb21wb25lbnRcIjtcbmltcG9ydCB7IFNlYXJjaEJhckNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvc2VhcmNoLWJhci9zZWFyY2gtYmFyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRGlyZWN0b3J5TWVudUNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvZGlyZWN0b3J5LW1lbnUvZGlyZWN0b3J5LW1lbnUuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBGaWx0ZXJzQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9kaXJlY3RvcnktbWVudS9maWx0ZXJzLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgR29Hb0NvbnRyb2xDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2dvZ28tY29udHJvbHMuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBNYXBDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL21hcC9tYXAuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBNYXBDb250cm9sc0NvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWFwL21hcC1jb250cm9scy5jb21wb25lbnRcIjtcbmltcG9ydCB7IERpcmVjdGlvbnNDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL21hcC9kaXJlY3Rpb25zLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ3VzdG9tUG9wdXBDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2N1c3RvbS1wb3B1cC5jb21wb25lbnRcIjtcblxuLy8gTU9EQUxTXG5pbXBvcnQgeyBQaWNrQWRkcmVzc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tb2RhbHMvcGljay1hZGRyZXNzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWb3RlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21vZGFscy92b3RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbW9kYWxzL3JlcG9ydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21vZGFscy9kZWxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IFNlbmRFbWFpbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tb2RhbHMvc2VuZC1lbWFpbC5jb21wb25lbnQnO1xuXG4vLyBPVEhFUlNcbmltcG9ydCB7IEdvR29Db25maWcgfSBmcm9tIFwiLi9jbGFzc2VzL2NvbmZpZy9nb2dvLWNvbmZpZy5jbGFzc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgKiBhcyBDb29raWVzIGZyb20gXCIuL3V0aWxzL2Nvb2tpZXNcIjtcblxuLy8gRVhQT1JUIFxuZXhwb3J0IHsgQXBwRGF0YVR5cGUgfSBmcm9tIFwiLi9tYW5hZ2Vycy9kYXRhLXR5cGUubWFuYWdlclwiO1xuZXhwb3J0IHsgQXBwU3RhdGVzIH0gZnJvbSBcIi4vbWFuYWdlcnMvc3RhdGUubWFuYWdlclwiO1xuZXhwb3J0IHsgQXBwTW9kZXMgfSBmcm9tIFwiLi9tYW5hZ2Vycy9tb2RlLm1hbmFnZXJcIjtcblxuLypcbiogQXBwIE1vZHVsZS4gTWFpbiBtb2R1bGUgb2YgdGhlIEFwcCpcbiogQXBwTW9kdWxlIGNyZWF0ZXMgYWxsIG90aGVycyBjb21wb25lbnRzIGFuZCBtb2R1bGVzXG4qL1xuZXhwb3J0IGNsYXNzIEFwcE1vZHVsZVxue1x0XHRcblx0cmVhZG9ubHkgY29uZmlnIDogR29Hb0NvbmZpZztcblx0cmVhZG9ubHkgaXNJZnJhbWUgOiBib29sZWFuID0gZmFsc2U7XG5cdHJlYWRvbmx5IGxvYWRGdWxsVGF4b25vbXkgOiBib29sZWFuID0gdHJ1ZTtcblx0cmVhZG9ubHkgcmVxdWVzdCA6IGFueSA9IHt9O1xuXG5cdG1vZGVNYW5hZ2VyID0gbmV3IE1vZGVNYW5hZ2VyKCk7XG5cdHN0YXRlTWFuYWdlciA9IG5ldyBTdGF0ZU1hbmFnZXIoKTtcblx0ZGF0YVR5cGVNYW5hZ2VyID0gbmV3IERhdGFUeXBlTWFuYWdlcigpO1xuXHRlbGVtZW50c01hbmFnZXIgOiBFbGVtZW50c01hbmFnZXI7XG5cdGhpc3RvcnlTdGF0ZU1hbmFnZXIgPSBuZXcgSGlzdG9yeVN0YXRlTWFuYWdlcigpO1xuXHRnZW9jb2RpbmdNYW5hZ2VyIDogR2VvY29kaW5nTWFuYWdlcjtcblx0bWFwTWFuYWdlciA6IE1hcE1hbmFnZXI7XG5cdFxuXHRnZW9jb2RlciA9IG5ldyBHZW9jb2Rlck1vZHVsZSgpO1xuXHRmaWx0ZXJNb2R1bGUgPSBuZXcgRmlsdGVyTW9kdWxlKCk7XG5cdGZpbHRlclJvdXRpbmdNb2R1bGUgPSBuZXcgRmlsdGVyUm91dGluZ01vZHVsZSgpO1xuXHRlbGVtZW50c01vZHVsZSA9IG5ldyBFbGVtZW50c01vZHVsZSgpO1xuXHRlbGVtZW50c0pzb25Nb2R1bGUgPSBuZXcgRWxlbWVudHNKc29uTW9kdWxlKCk7XG5cdGRpc3BsYXlFbGVtZW50QWxvbmVNb2R1bGUgPSBuZXcgRGlzcGxheUVsZW1lbnRBbG9uZU1vZHVsZSgpO1xuXHRhamF4TW9kdWxlID0gbmV3IEFqYXhNb2R1bGUoKTtcblx0Ym91bmRzTW9kdWxlIDogQm91bmRzTW9kdWxlO1xuXHRyb3V0ZXJNb2R1bGUgPSBuZXcgUm91dGVyTW9kdWxlKCk7XG5cdHRlbXBsYXRlTW9kdWxlID0gbmV3IFRlbXBsYXRlTW9kdWxlKCk7XG5cdGxvZ2luTW9kdWxlIDogTG9naW5Nb2R1bGU7XHRcblx0aGlzdG9yeU1vZHVsZSA9IG5ldyBIaXN0b3J5TW9kdWxlKCk7XG5cdHRheG9ub215TW9kdWxlID0gbmV3IFRheG9ub215TW9kdWxlKCk7XG5cdHRheG9ub215U2tvc01vZHVsZSA9IG5ldyBUYXhvbm9teVNrb3NNb2R1bGUoKTtcblx0ZG9jdW1lbnRUaXRsZU1vZHVsZSA9IG5ldyBEb2N1bWVudFRpdGxlTW9kdWxlKCk7XG5cdGVsZW1lbnRKc29uUGFyc2VyID0gbmV3IEVsZW1lbnRKc29uUGFyc2VyTW9kdWxlKCk7XG5cdGVsZW1lbnRGb3JtYXRlck1vZHVsZSA9IG5ldyBFbGVtZW50Rm9ybWF0ZXJNb2R1bGUoKTtcblx0ZWxlbWVudERpZmZNb2R1bGUgPSBuZXcgRWxlbWVudERpZmZNb2R1bGUoKTtcblx0ZWxlbWVudEljb25zTW9kdWxlID0gbmV3IEVsZW1lbnRJY29uc01vZHVsZSgpO1xuXHRlbGVtZW50T3B0aW9uVmFsdWVzTW9kdWxlID0gbmV3IEVsZW1lbnRPcHRpb25WYWx1ZXNNb2R1bGUoKTtcblx0ZmF2b3JpdGVNb2R1bGUgPSBuZXcgRmF2b3JpdGVNb2R1bGUoKTtcblx0c3RhbXBNb2R1bGUgOiBTdGFtcE1vZHVsZTtcblxuXHRjb21wb25lbnQgOiBBcHBDb21wb25lbnQ7XG5cdGluZm9CYXJDb21wb25lbnQgPSBuZXcgSW5mb0JhckNvbXBvbmVudCgpO1xuXHRtYXBDb21wb25lbnQgID0gbmV3IE1hcENvbXBvbmVudCgpO1xuXHRzZWFyY2hCYXJDb21wb25lbnQgPSBuZXcgU2VhcmNoQmFyQ29tcG9uZW50KCk7XG5cdGVsZW1lbnRMaXN0Q29tcG9uZW50ID0gbmV3IEVsZW1lbnRMaXN0Q29tcG9uZW50KCk7XG5cdGRpcmVjdG9yeU1lbnVDb21wb25lbnQgPSBuZXcgRGlyZWN0b3J5TWVudUNvbXBvbmVudCgpO1xuXHRmaWx0ZXJzQ29tcG9uZW50ID0gbmV3IEZpbHRlcnNDb21wb25lbnQoKTtcdFxuXHRnb2dvQ29udHJvbENvbXBvbmVudCA9IG5ldyBHb0dvQ29udHJvbENvbXBvbmVudCgpO1x0XG5cdGRpcmVjdGlvbnNDb21wb25lbnQgPSBuZXcgRGlyZWN0aW9uc0NvbXBvbmVudCgpO1xuXHRtYXBDb250cm9sc0NvbXBvbmVudCA9IG5ldyBNYXBDb250cm9sc0NvbXBvbmVudCgpO1xuXHRjdXN0b21Qb3B1cENvbXBvbmVudCA9IG5ldyBDdXN0b21Qb3B1cENvbXBvbmVudCgpO1xuXG5cdHBpY2tBZGRyZXNzQ29tcG9uZW50IDogUGlja0FkZHJlc3NDb21wb25lbnQ7XG5cdHZvdGVDb21wb25lbnQgOiBWb3RlQ29tcG9uZW50O1xuXHRyZXBvcnRDb21wb25lbnQgOiBSZXBvcnRDb21wb25lbnQ7XG5cdGRlbGV0ZUNvbXBvbmVudCA6IERlbGV0ZUNvbXBvbmVudDtcblx0c2VuZEVtYWlsQ29tcG9uZW50IDogU2VuZEVtYWlsQ29tcG9uZW50O1xuXHRcblx0Y29uc3RydWN0b3IoJGNvbmZpZyA6IGFueSwgJGlzSWZyYW1lID0gZmFsc2UsICRsb2FkRnVsbFRheG9ub215ID0gdHJ1ZSwgJHJlcXVlc3QgPSB7fSlcblx0e1xuXHRcdHRoaXMuY29uZmlnID0gbmV3IEdvR29Db25maWcoJGNvbmZpZyk7XG5cdFx0dGhpcy5pc0lmcmFtZSA9ICRpc0lmcmFtZTtcblx0XHR0aGlzLmxvYWRGdWxsVGF4b25vbXkgPSAkbG9hZEZ1bGxUYXhvbm9teTtcblx0XHR0aGlzLnJlcXVlc3QgPSAkcmVxdWVzdDtcblx0XHRcblx0XHR0aGlzLmxvZ2luTW9kdWxlID0gbmV3IExvZ2luTW9kdWxlKHRoaXMuY29uZmlnLnNlY3VyaXR5LnVzZXJSb2xlcywgdGhpcy5jb25maWcuc2VjdXJpdHkudXNlckVtYWlsKTtcblx0ICBcdHRoaXMuYm91bmRzTW9kdWxlID0gbmV3IEJvdW5kc01vZHVsZSh0aGlzLmNvbmZpZyk7ICBcdFxuXHQgIFx0dGhpcy5zdGFtcE1vZHVsZSA9IG5ldyBTdGFtcE1vZHVsZSh0aGlzLmNvbmZpZyk7XG5cblx0XHRDb29raWVzLmNyZWF0ZUNvb2tpZSgnZmlyc3RWaXNpdCcsICdkb25lJyk7XHRcdFx0XG5cdH1cblxuXHRpbml0aWFsaXplKClcblx0e1xuXHRcdHRoaXMuY29tcG9uZW50ID0gbmV3IEFwcENvbXBvbmVudCgpO1xuXHRcdHRoaXMuZWxlbWVudHNNYW5hZ2VyID0gbmV3IEVsZW1lbnRzTWFuYWdlcigpO1xuXHRcdHRoaXMuZ2VvY29kaW5nTWFuYWdlciA9IG5ldyBHZW9jb2RpbmdNYW5hZ2VyKCk7XG5cdFx0dGhpcy5tYXBNYW5hZ2VyID0gbmV3IE1hcE1hbmFnZXIoKTtcblxuXHRcdC8vIGludGlhbGl6ZSBtb2RhbHMgY29tcG9uZW50ICh0ZW1wbGF0ZSBhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgQXBwTW9kdWxlKVxuXHRcdHRoaXMucGlja0FkZHJlc3NDb21wb25lbnQgPSBuZXcgUGlja0FkZHJlc3NDb21wb25lbnQoKTtcblx0XHR0aGlzLnZvdGVDb21wb25lbnQgPSBuZXcgVm90ZUNvbXBvbmVudCgpO1xuXHRcdHRoaXMucmVwb3J0Q29tcG9uZW50ID0gbmV3IFJlcG9ydENvbXBvbmVudCgpO1xuXHRcdHRoaXMuZGVsZXRlQ29tcG9uZW50ID0gbmV3IERlbGV0ZUNvbXBvbmVudCgpO1xuXHRcdHRoaXMuc2VuZEVtYWlsQ29tcG9uZW50ID0gbmV3IFNlbmRFbWFpbENvbXBvbmVudCgpO1x0XG5cdH1cblxuXHQvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gR2V0dGVycyAmIFNldHRlcnMgU2hvcnRjdXRzXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdG1hcCgpIDogTC5NYXAgeyByZXR1cm4gdGhpcy5tYXBDb21wb25lbnQ/IHRoaXMubWFwQ29tcG9uZW50LmdldE1hcCgpIDogbnVsbDsgfTtcblxuXHRlbGVtZW50cygpIHsgcmV0dXJuIHRoaXMuZWxlbWVudHNNb2R1bGUuY3VyclZpc2libGVFbGVtZW50cygpOyAgfTtcblxuXHRlbGVtZW50QnlJZChpZCkgeyByZXR1cm4gdGhpcy5lbGVtZW50c01vZHVsZS5nZXRFbGVtZW50QnlJZChpZCk7ICB9O1xuXG5cdGdldCBERUFNb2R1bGUoKSB7IHJldHVybiB0aGlzLmRpc3BsYXlFbGVtZW50QWxvbmVNb2R1bGU7IH1cblxuXHRnZXQgY3Vyck1haW5JZCgpIHsgcmV0dXJuIHRoaXMuZmlsdGVyc0NvbXBvbmVudC5jdXJyZW50QWN0aXZlTWFpbk9wdGlvbklkOyB9XG5cblx0Z2V0IHN0YXRlKCkgeyByZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuc3RhdGU7IH1cblxuXHRzZXRTdGF0ZSgkbmV3U3RhdGUgOiBBcHBTdGF0ZXMsICRvcHRpb25zIDogYW55ID0ge30sICRiYWNrRnJvbUhpc3RvcnkgOiBib29sZWFuID0gZmFsc2UpICB7IHRoaXMuc3RhdGVNYW5hZ2VyLnNldFN0YXRlKCRuZXdTdGF0ZSwgJG9wdGlvbnMsICRiYWNrRnJvbUhpc3RvcnkpfVxuXG5cdGdldCBtb2RlKCkgeyByZXR1cm4gdGhpcy5tb2RlTWFuYWdlci5tb2RlOyB9XG5cblx0c2V0TW9kZSgkbW9kZSA6IEFwcE1vZGVzLCAkYmFja0Zyb21IaXN0b3J5IDogYm9vbGVhbiA9IGZhbHNlLCAkdXBkYXRlVGl0bGVBbmRTdGF0ZSA9IHRydWUpIHsgdGhpcy5tb2RlTWFuYWdlci5zZXRNb2RlKCRtb2RlLCAkYmFja0Zyb21IaXN0b3J5LCAkdXBkYXRlVGl0bGVBbmRTdGF0ZSk7IH1cblxuXHRnZXQgZGF0YVR5cGUoKSB7IHJldHVybiB0aGlzLmRhdGFUeXBlTWFuYWdlci5kYXRhVHlwZTsgfVxuXG5cdHNldERhdGFUeXBlKCRkYXRhVHlwZSA6IEFwcERhdGFUeXBlLCAkYmFja0Zyb21IaXN0b3J5IDogYm9vbGVhbiA9IGZhbHNlLCAkc2VhcmNoUmVzdWx0ID0gbnVsbCkgeyB0aGlzLmRhdGFUeXBlTWFuYWdlci5zZXREYXRhVHlwZSgkZGF0YVR5cGUsICRiYWNrRnJvbUhpc3RvcnksICRzZWFyY2hSZXN1bHQpOyB9XG59IiwiZXhwb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tIFwiLi90YXhvbm9teS9jYXRlZ29yeS5jbGFzc1wiO1xuZXhwb3J0IHsgRWxlbWVudCwgRWxlbWVudFN0YXR1cywgRWxlbWVudE1vZGVyYXRpb25TdGF0ZSB9IGZyb20gXCIuL2VsZW1lbnQvZWxlbWVudC5jbGFzc1wiO1xuZXhwb3J0IHsgRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9lbGVtZW50L2VsZW1lbnQtYmFzZS5jbGFzc1wiO1xuZXhwb3J0IHsgT3B0aW9uIH0gZnJvbSBcIi4vdGF4b25vbXkvb3B0aW9uLmNsYXNzXCI7XG5leHBvcnQgeyBPcHRpb25WYWx1ZSB9IGZyb20gXCIuL2VsZW1lbnQvb3B0aW9uLXZhbHVlLmNsYXNzXCI7XG5leHBvcnQgeyBDYXRlZ29yeVZhbHVlIH0gZnJvbSBcIi4vZWxlbWVudC9jYXRlZ29yeS12YWx1ZS5jbGFzc1wiO1xuZXhwb3J0IHsgVm90ZVJlcG9ydCB9IGZyb20gXCIuL2VsZW1lbnQvdm90ZS1yZXBvcnQuY2xhc3NcIjtcbmV4cG9ydCB7IENvbnRyaWJ1dGlvbiB9IGZyb20gXCIuL2VsZW1lbnQvY29udHJpYnV0aW9uLmNsYXNzXCI7XG5leHBvcnQgeyBIaXN0b3J5U3RhdGUgfSBmcm9tIFwiLi9oaXN0b3J5LXN0YXRlLmNsYXNzXCI7XG5leHBvcnQgeyBWaWV3UG9ydCB9IGZyb20gXCIuL21hcC92aWV3cG9ydC5jbGFzc1wiO1xuZXhwb3J0IHsgRXZlbnQgfSBmcm9tIFwiLi9ldmVudC5jbGFzc1wiO1xuZXhwb3J0IHsgUG9zdGFsQWRkcmVzcyB9IGZyb20gJy4vZWxlbWVudC9wb3N0YWwtYWRkcmVzcy5jbGFzcyc7XG5leHBvcnQgeyBTdGFtcCB9IGZyb20gJy4vZWxlbWVudC9zdGFtcC5jbGFzcyc7XG5leHBvcnQgeyBFbGVtZW50VXJsIH0gZnJvbSAnLi9lbGVtZW50L2VsZW1lbnQtdXJsLmNsYXNzJztcbiIsImltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IFRpbGVMYXllciB9IGZyb20gJy4uL21hcC90aWxlLWxheWVyLmNsYXNzJztcbmltcG9ydCB7IEdvR29GZWF0dXJlIH0gZnJvbSAnLi9nb2dvLWZlYXR1cmUuY2xhc3MnO1xuaW1wb3J0IHsgRWxlbWVudFN0YXR1cyB9IGZyb20gJy4uL2NsYXNzZXMnOyBcbmltcG9ydCB7IERFRkFVTFRfRkVBVFVSRVMgfSBmcm9tICcuL2dvZ28tZGVmYXVsdC1mZWF0dXJlJyA7XG5kZWNsYXJlIHZhciBMIDogYW55O1xuZGVjbGFyZSB2YXIgY29tbW9ubWFyaztcblxuZXhwb3J0IGNsYXNzIEdvR29Db25maWdcbntcbiAgcmVhZG9ubHkgdGV4dCA9XG4gIHtcbiAgICBlbGVtZW50OiAnw6lsw6ltZW50JyxcbiAgICBlbGVtZW50RGVmaW5pdGU6IFwibCfDqWzDqW1lbnRcIixcbiAgICBlbGVtZW50SW5kZWZpbml0ZTogXCJ1biDDqWzDqW1lbnRcIixcbiAgICBlbGVtZW50UGx1cmFsOiAnw6lsw6ltZW50cycsXG4gICAgY29sbGFib3JhdGl2ZU1vZGVyYXRpb246IGA8cD5cbiAgICAgICAgTG9yc3F1J3VuIMOpbMOpbWVudCBlc3QgYWpvdXTDqSBvdSBtb2RpZmnDqSwgbGEgbWlzZSDDoCBqb3VyIGRlcyBkb25uw6llcyBuJ2VzdCBwYXMgaW5zdGFudGFuw6llLiBMJ8OpbMOpbWVudCB2YSBkJ2Fib3JkcyBhcHBhcmHDrnRyZSBcImdyaXPDqVwiIHN1ciBsYSBjYXJ0ZSxcbiAgICAgICAgZXQgaWwgc2VyYSBhbG9ycyBwb3NzaWJsZSDDoCB0b3VzIGxlcyB1dGlsaXNhdGV1cnMgbG9ndcOpIGRlIHZvdGVyIHVuZSBldCB1bmUgc2V1bGUgZm9pcyBwb3VyIGNldCDDqWzDqW1lbnQuIFxuICAgICAgICBDZSB2b3RlIG4nZXN0IHBhcyB1bmUgb3BpbmlvbiwgbWFpcyB1biBwYXJ0YWdlIGRlIGNvbm5haXNzYW5jZS4gXG4gICAgICAgIFNpIHZvdXMgY29ubmFpc3NleiBjZXQgw6lsw6ltZW50LCBvdSBzYXZleiBxdWUgY2V0IMOpbMOpbWVudCBuJ2V4aXN0ZSBwYXMsIGFsb3JzIHZvdHJlIHNhdm9pciBub3VzIGludMOpcmVzc2UgIVxuICAgICAgPC9wPiBcbiAgICAgIDxwPlxuICAgICAgICBBdSBib3V0IGQndW4gY2VydGFpbiBub21icmUgZGUgdm90ZXMsIGwnw6lsw6ltZW50IHBvdXJyYSBhbG9ycyDDqnRyZSBhdXRvbWF0aXF1ZW1lbnQgdmFsaWTDqSBvdSByZWZ1c8OpLiBcbiAgICAgICAgRW4gY2FzIGRlIGxpdGlnZSAoZGVzIHZvdGVzIMOgIGxhIGZvaXMgcG9zaXRpZnMgZXQgbsOpZ2F0aWZzKSwgdW4gbW9kw6lyYXRldXIgaW50ZXJ2aWVuZHJhIGF1IHBsdXMgdml0ZS4gT24gY29tcHRlIHN1ciB2b3VzIVxuICAgICAgPC9wPmBcbiAgfTtcbiAgcmVhZG9ubHkgZGF0YSA9XG4gIHtcbiAgICB0YXhvbm9teTogdW5kZWZpbmVkLFxuICAgIGVsZW1lbnRzOiB1bmRlZmluZWQsXG4gICAgZWxlbWVudHNDb21wYWN0QXBpVXJsOiB1bmRlZmluZWQsXG4gICAgZWxlbWVudEJ5SWRVcmw6IHVuZGVmaW5lZCxcbiAgICByZXF1ZXN0QnlCb3VuZHM6IGZhbHNlLFxuICAgIHJldHJpZXZlRWxlbWVudHNCeUFwaTogZmFsc2UsXG4gICAgc2hvd1BlbmRpbmc6IHRydWUsXG4gIH07XG4gIHJlYWRvbmx5IG1lbnUgPVxuICB7XG4gICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgICBzbWFsbFdpZHRoU3R5bGU6IGZhbHNlLFxuICAgIHNob3dPbmVQYW5lUGVyTWFpbk9wdGlvbjogZmFsc2UsXG4gICAgc2hvd0NoZWNrYm94Rm9yTWFpbkZpbHRlclBhbmU6IHRydWUsXG4gICAgc2hvd0NoZWNrYm94Rm9yU3ViRmlsdGVyUGFuZTogdHJ1ZSwgICAgXG4gIH07XG4gIHJlYWRvbmx5IGluZm9iYXIgPVxuICB7XG4gICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgICBhY3RpdmF0ZTogdHJ1ZSxcbiAgICBib2R5VGVtcGxhdGU6IHVuZGVmaW5lZFxuICB9O1xuICByZWFkb25seSBnZW5lcmFsID1cbiAge1xuICAgIGFjdGl2YXRlSGlzdG9yeVN0YXRlQW5kUm91dGluZzogdHJ1ZVxuICB9O1xuICByZWFkb25seSBtYXAgPVxuICB7XG4gICAgLy8gZnJhbmNlXG4gICAgZGVmYXVsdEJvdW5kcyA6IEwubGF0TG5nQm91bmRzKEwubGF0TG5nKDUyLCAxMCksIEwubGF0TG5nKDQwLCAtNSkpLFxuICAgIGRlZmF1bHRCb3VuZHNQcm92aWRlZCA6IGZhbHNlLFxuICAgIGRlZmF1bHRDZW50ZXIgOiBMLmxhdExuZyg0NiwgMCksXG4gICAgbWF4Qm91bmRzIDogTC5sYXRMbmdCb3VuZHMoTC5sYXRMbmcoLTkwLCAtMTgwKSwgTC5sYXRMbmcoOTAsIDE4MCkpLFxuICAgIHNhdmVWaWV3cG9ydEluQ29va2llcyA6IGZhbHNlLFxuICAgIHNhdmVUaWxlTGF5ZXJJbkNvb2tpZXMgOiBmYWxzZSxcbiAgICBkZWZhdWx0VGlsZUxheWVyIDogJ2NhcnRvZGInLFxuICAgIHRpbGVMYXllcnMgOiBbXG4gICAgICBuZXcgVGlsZUxheWVyKCdtYXBib3gnLCAnaHR0cHM6Ly9hcGkubWFwYm94LmNvbS9zdHlsZXMvdjEvbWFwYm94L3N0cmVldHMtdjEwL3RpbGVzLzI1Ni97en0ve3h9L3t5fT9hY2Nlc3NfdG9rZW49cGsuZXlKMUlqb2ljMlZpWVd4c2IzUWlMQ0poSWpvaVkybDRNR3RuZUdWak1ERjBhREo2Y1dOdGRXRnZjMlkzWVNKOS5uSVpyNkcydDA4ZXRNemZ0X0JISFVRJyksXG4gICAgICBuZXcgVGlsZUxheWVyKCdtYXBib3hsaWdodCcsICdodHRwczovL2FwaS5tYXBib3guY29tL3N0eWxlcy92MS9tYXBib3gvbGlnaHQtdjkvdGlsZXMvMjU2L3t6fS97eH0ve3l9P2FjY2Vzc190b2tlbj1way5leUoxSWpvaWMyVmlZV3hzYjNRaUxDSmhJam9pWTJsNE1HdG5lR1ZqTURGMGFESjZjV050ZFdGdmMyWTNZU0o5Lm5JWnI2RzJ0MDhldE16ZnRfQkhIVVEnKSxcbiAgICAgIG5ldyBUaWxlTGF5ZXIoJ2NhcnRvZGInLCAnaHR0cHM6Ly9jYXJ0b2RiLWJhc2VtYXBzLXtzfS5nbG9iYWwuc3NsLmZhc3RseS5uZXQvbGlnaHRfYWxsL3t6fS97eH0ve3l9LnBuZycpLCBcbiAgICAgIG5ldyBUaWxlTGF5ZXIoJ2h5ZGRhJywgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5zZS9oeWRkYS9mdWxsL3t6fS97eH0ve3l9LnBuZycpLCBcbiAgICAgIG5ldyBUaWxlTGF5ZXIoJ3dpa2ltZWRpYScsICdodHRwczovL21hcHMud2lraW1lZGlhLm9yZy9vc20taW50bC97en0ve3h9L3t5fS5wbmcnKSwgXG4gICAgICBuZXcgVGlsZUxheWVyKCdtb25vY2hyb21lJywgJ2h0dHBzOi8vd3d3LnRvb2xzZXJ2ZXIub3JnL3RpbGVzL2J3LW1hcG5pay97en0ve3h9L3t5fS5wbmcnKSwgXG4gICAgICBuZXcgVGlsZUxheWVyKCdseXJrICcsICdodHRwczovL3RpbGVzLmx5cmsub3JnL2xzL3t6fS97eH0ve3l9P2FwaWtleSA9OTgyYzgyY2M3NjVmNDJjZjk1MGE1N2RlMGQ4OTEwNzYnKSwgXG4gICAgICBuZXcgVGlsZUxheWVyKCdvc21mcicsICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAuZnIvb3NtZnIve3p9L3t4fS97eX0ucG5nJyksXG4gICAgICBuZXcgVGlsZUxheWVyKCdzdGFtZW4nLCAnaHR0cHM6Ly9zdGFtZW4tdGlsZXMte3N9LmEuc3NsLmZhc3RseS5uZXQvdG9uZXItbGl0ZS97en0ve3h9L3t5fS5wbmcnKSxcbiAgICAgIG5ldyBUaWxlTGF5ZXIoJ3N0YW1lblRlcnJhaW4nLCAnaHR0cHM6Ly9zdGFtZW4tdGlsZXMte3N9LmEuc3NsLmZhc3RseS5uZXQvdGVycmFpbi97en0ve3h9L3t5fS5wbmcnKSwgICAgXG4gICAgICBuZXcgVGlsZUxheWVyKCdzdGFtZW5XYXRlckNvbG9yJywgJ2h0dHBzOi8vc3RhbWVuLXRpbGVzLXtzfS5hLnNzbC5mYXN0bHkubmV0L3dhdGVyY29sb3Ive3p9L3t4fS97eX0ucG5nJyksICAgIFxuICAgICAgbmV3IFRpbGVMYXllcignb3BlbnJpdmVyJywgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5mci9vcGVucml2ZXJib2F0bWFwL3t6fS97eH0ve3l9LnBuZycpLFxuICAgICAgbmV3IFRpbGVMYXllcigndGh1bmRlcmZvcmVzdCcsICdodHRwczovL3tzfS50aWxlLnRodW5kZXJmb3Jlc3QuY29tL291dGRvb3JzL3t6fS97eH0ve3l9LnBuZycpLFxuICAgICAgbmV3IFRpbGVMYXllcignUGFzIGRlIGZvbmQnLCAnJykgXVxuICB9O1xuICByZWFkb25seSBmZWF0dXJlcyA9XG4gIHtcbiAgICAvLyBlbGVtZW50IG1lbnVcbiAgICBmYXZvcml0ZTogICAgICAgbmV3IEdvR29GZWF0dXJlKCksXG4gICAgc2hhcmU6ICAgICAgICAgIG5ldyBHb0dvRmVhdHVyZSgpLFxuICAgIGRpcmVjdGlvbnM6ICAgICBuZXcgR29Hb0ZlYXR1cmUoKSxcblxuICAgIC8vIGVsZW1lbnQgY29udGVudFxuICAgIHNlbmRNYWlsOiAgICAgICBuZXcgR29Hb0ZlYXR1cmUoKSxcbiAgICBlbGVtZW50SGlzdG9yeTogbmV3IEdvR29GZWF0dXJlKCksXG5cbiAgICAvLyBnb2dvIGNvbnRyb2xzXG4gICAgbGlzdE1vZGU6IG5ldyBHb0dvRmVhdHVyZSgpLFxuXG4gICAgLy8gbWFwIGNvbnRyb2xzXG4gICAgZXhwb3J0OiAgICAgICAgICBuZXcgR29Hb0ZlYXR1cmUoKSxcbiAgICBsYXllcnM6ICAgICAgICAgIG5ldyBHb0dvRmVhdHVyZSgpLFxuICAgIG1hcGRlZmF1bHR2aWV3OiAgbmV3IEdvR29GZWF0dXJlKCksXG4gICAgXG4gICAgcGVuZGluZzogICAgbmV3IEdvR29GZWF0dXJlKCksICAgIFxuICAgIHNlYXJjaFBsYWNlOiAgICAgIG5ldyBHb0dvRmVhdHVyZSgpLFxuICAgIHNlYXJjaEVsZW1lbnRzOiAgIG5ldyBHb0dvRmVhdHVyZSgpLFxuICAgIHNlYXJjaEdlb2xvY2F0ZTogIG5ldyBHb0dvRmVhdHVyZSgpLFxuXG4gICAgLy8gZWxlbWVudCBpbnRlcmFjdGlvbiAvIG1vZGVyYXRpb25cbiAgICBlZGl0OiAgICAgICBuZXcgR29Hb0ZlYXR1cmUoKSwgICAgICAgICAgXG4gICAgZGVsZXRlOiAgICAgbmV3IEdvR29GZWF0dXJlKCksXG4gICAgcmVwb3J0OiAgICAgbmV3IEdvR29GZWF0dXJlKCksICAgICAgXG4gICAgdm90ZTogICAgICAgbmV3IEdvR29GZWF0dXJlKCksXG4gICAgbW9kZXJhdGlvbjogbmV3IEdvR29GZWF0dXJlKCksXG4gICAgc3RhbXA6ICAgICAgbmV3IEdvR29GZWF0dXJlKCksXG4gICAgZGlyZWN0TW9kZXJhdGlvbjogICAgICAgIG5ldyBHb0dvRmVhdHVyZSgpLFxuXG4gICAgLy8gb3RoZXJzXG4gICAgY3VzdG9tUG9wdXA6IG5ldyBHb0dvRmVhdHVyZSgpLFxuICB9O1xuICByZWFkb25seSBzZWN1cml0eSA9XG4gIHtcbiAgICB1c2VyUm9sZXM6IFsnYW5vbnltb3VzJ10sXG4gICAgdXNlckVtYWlsOiAnJyxcbiAgICBsb2dpbkFjdGlvbjogZnVuY3Rpb24oKSB7IGNvbnNvbGUud2FybihcIltHb0dvQ2FydG9dIFlvdSBuZWVkIGxvZ2luIHRvIGFjY2VzcyB0aGlzIGZlYXR1cmVcIik7IH0sXG5cbiAgICBoaWRlTWFpbHNCeVNob3dpbmdTZW5kTWFpbEJ1dHRvbjogdHJ1ZSxcbiAgfTtcblxuICByZWFkb25seSB0aGVtZSA9ICdkZWZhdWx0JztcbiAgLy8gc2VlIGdvZ28tc3R5bGVzIGZvciBkZWZhdXQgdmFsdWVzXG4gIHJlYWRvbmx5IGNvbG9ycyA9XG4gIHtcbiAgICBuZXV0cmFsRGFyazogdW5kZWZpbmVkICxcbiAgICBuZXV0cmFsRGFya1RyYW5zcGFyZW50OiB1bmRlZmluZWQgLFxuICAgIG5ldXRyYWxTb2Z0RGFyazogdW5kZWZpbmVkICxcbiAgICBuZXV0cmFsOiB1bmRlZmluZWQgLFxuICAgIG5ldXRyYWxMaWdodDogdW5kZWZpbmVkICxcbiAgICBzZWNvbmRhcnk6IHVuZGVmaW5lZCAsXG4gICAgcHJpbWFyeTogdW5kZWZpbmVkICxcbiAgICBiYWNrZ3JvdW5kOiB1bmRlZmluZWQgLFxuXG4gICAgdGV4dENvbG9yOiB1bmRlZmluZWQgLFxuICAgIGRpc2FibGVDb2xvcjogdW5kZWZpbmVkICxcbiAgICBsaXN0VGl0bGU6IHVuZGVmaW5lZCAsXG4gICAgbGlzdFRpdGxlQmFja0J0bjogdW5kZWZpbmVkLFxuICAgIGxpc3RUaXRsZUJhY2tncm91bmQ6IHVuZGVmaW5lZCAsXG4gICAgc2VhcmNoQmFyOiB1bmRlZmluZWQsIFxuICAgIGludGVyYWN0aXZlU2VjdGlvbjogdW5kZWZpbmVkLFxuXG4gICAgbWFpbkZvbnQ6IHVuZGVmaW5lZCAsXG4gICAgdGl0bGVGb250OiB1bmRlZmluZWQgLFxuICAgIHRheG9ub215TWFpblRpdGxlRm9udDogdW5kZWZpbmVkICwgICAgIFxuICB9XG5cbiAgcmVhZG9ubHkgaW1hZ2VzID1cbiAge1xuICAgIGJ1dHRvbk9wZW5NZW51OiB1bmRlZmluZWQsXG4gICAgbWVudVRvcEltYWdlOiB1bmRlZmluZWRcbiAgfVxuXG5cdGNvbnN0cnVjdG9yKGNvbmZpZyA6IGFueSlcblx0e1xuICAgIGlmICghY29uZmlnLmZlYXR1cmVzKSBjb25maWcuZmVhdHVyZXMgPSBERUZBVUxUX0ZFQVRVUkVTO1xuICAgIC8vIENvcHkgYWxsIHRoZSBkZWZpbmVkIG9wdGlvbnNcbiAgICAvLyBBbGwgdGhlIG9wdGlvbnMgbm9uIHNwZWNpZmllZCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLnJlY3Vyc2l2ZUZpbGxQcm9wZXJ0eSh0aGlzLCBjb25maWcpO1xuICAgIHRoaXMuZGF0YS5yZXRyaWV2ZUVsZW1lbnRzQnlBcGkgPSB0eXBlb2YgdGhpcy5kYXRhLmVsZW1lbnRzID09IFwic3RyaW5nXCI7XG4gICAgaWYgKGNvbmZpZy5tYXAgJiYgY29uZmlnLm1hcC5kZWZhdWx0Qm91bmRzKSB0aGlzLm1hcC5kZWZhdWx0Qm91bmRzUHJvdmlkZWQgPSB0cnVlO1xuICAgIGlmICghdGhpcy5mZWF0dXJlc1snc2VuZE1haWwnXS5hY3RpdmUpIHRoaXMuc2VjdXJpdHkuaGlkZU1haWxzQnlTaG93aW5nU2VuZE1haWxCdXR0b24gPSBmYWxzZTtcbiAgICBjb25zb2xlLmxvZyh0aGlzKTtcblx0fVxuICBcbiAgaXNGZWF0dXJlQWN0aXZhdGVkKGZlYXR1cmVOYW1lKSA6IGJvb2xlYW5cbiAge1xuICAgIGlmICghdGhpcy5mZWF0dXJlcy5oYXNPd25Qcm9wZXJ0eShmZWF0dXJlTmFtZSkpIHsgY29uc29sZS53YXJuKGBbR29Hb0NhcnRvSnNdIGZlYXR1cmUgJHtmZWF0dXJlTmFtZX0gZG9lc24ndCBleGlzdGApOyByZXR1cm4gZmFsc2U7IH1cblxuICAgIHJldHVybiB0aGlzLmZlYXR1cmVzW2ZlYXR1cmVOYW1lXS5hY3RpdmUgJiYgKCFBcHAuaXNJZnJhbWUgfHwgdGhpcy5mZWF0dXJlc1tmZWF0dXJlTmFtZV0uaW5JZnJhbWUpO1xuICB9XG5cbiAgLy8gaXMgZmVhdHVyZSBpcyBhY3RpdmF0ZWQgYW5kIHRoZSBhY3R1YWwgdXNlciBpcyBncmFudGVkIHRvIHVzZSBpdFxuICBpc0ZlYXR1cmVBdmFpbGFibGUoZmVhdHVyZU5hbWUpIDogYm9vbGVhblxuICB7XG4gICAgaWYgKCF0aGlzLmZlYXR1cmVzLmhhc093blByb3BlcnR5KGZlYXR1cmVOYW1lKSkgeyBjb25zb2xlLndhcm4oYFtHb0dvQ2FydG9Kc10gZmVhdHVyZSAke2ZlYXR1cmVOYW1lfSBkb2Vzbid0IGV4aXN0YCk7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgbGV0IGZlYXR1cmUgPSB0aGlzLmZlYXR1cmVzW2ZlYXR1cmVOYW1lXTtcblxuICAgIGxldCByb2xlUHJvdmlkZWQgPSB0cnVlO1xuICAgIGlmIChmZWF0dXJlLmhhc093blByb3BlcnR5KCdyb2xlcycpKVxuICAgIHtcbiAgICAgIHJvbGVQcm92aWRlZCA9IGZlYXR1cmUuaGFzUm9sZShBcHAubG9naW5Nb2R1bGUuZ2V0Um9sZXMoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXNGZWF0dXJlQWN0aXZhdGVkKGZlYXR1cmVOYW1lKSAmJiByb2xlUHJvdmlkZWQ7XG4gIH0gXG5cbiAgcHJpdmF0ZSByZWN1cnNpdmVGaWxsUHJvcGVydHkodGhhdCwgb2JqZWN0KVxuICB7XG4gICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBhcHBseSByZWN1cnNpdmVseSBpbnNpZGUgb2JqZWN0cyBwcm9wZXJ0aWVzXG4gICAgbGV0IG9iamVjdHNQcm9wZXJ0aWVzID0gWydyb2xlcycsICdkZWZhdWx0Q2VudGVyJywgJ2RlZmF1bHRCb3VuZHMnLCAndGlsZUxheWVycycsICdvcHRpb25zJ107XG5cbiAgICAvLyBpZiB3ZSBwcm92aWRlIGZlYXR1cmUgY29uZmlnLCB3ZSBlbmFibGUgaXQgYXV0b21hdGljYWxseVxuICAgIGlmICh0aGF0IGluc3RhbmNlb2YgR29Hb0ZlYXR1cmUpIHRoYXQuYWN0aXZlID0gdHJ1ZTtcblxuICAgIGZvcih2YXIgcHJvcCBpbiBvYmplY3QpIFxuICAgIHtcbiAgICAgICAgaWYgKHRoYXQuaGFzT3duUHJvcGVydHkocHJvcCkpXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHRoYXRbcHJvcF0gIT0gJ29iamVjdCcgfHwgb2JqZWN0c1Byb3BlcnRpZXMuaW5kZXhPZihwcm9wKSA+IC0xKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxldCBuZXdfcHJvcDtcbiAgICAgICAgICAgIHN3aXRjaChwcm9wKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRCb3VuZHMnIDogbmV3X3Byb3AgPSBMLmxhdExuZ0JvdW5kcyhvYmplY3RbcHJvcF0pO2JyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdkZWZhdWx0Q2VudGVyJyA6IG5ld19wcm9wID0gTC5sYXRMbmcob2JqZWN0W3Byb3BdKTticmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnYm9keVRlbXBsYXRlJzogXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlciA9IG5ldyBjb21tb25tYXJrLlBhcnNlcigpXG4gICAgICAgICAgICAgICAgbGV0IGh0bWxSZW5kZXJlciA9IG5ldyBjb21tb25tYXJrLkh0bWxSZW5kZXJlcigpO1xuICAgICAgICAgICAgICAgIG5ld19wcm9wID0gaHRtbFJlbmRlcmVyLnJlbmRlcihwYXJzZXIucGFyc2Uob2JqZWN0W3Byb3BdKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6IG5ld19wcm9wID0gb2JqZWN0W3Byb3BdO2JyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhhdFtwcm9wXSA9IG5ld19wcm9wO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnJlY3Vyc2l2ZUZpbGxQcm9wZXJ0eSh0aGF0W3Byb3BdLCBvYmplY3RbcHJvcF0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIltHb0dvQ2FydG9dIENvbmZpZyBvcHRpb24gJ1wiICsgcHJvcCArIFwiJyBkb2VzIG5vdCBleGlzdFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG59IiwiZXhwb3J0IGNvbnN0IERFRkFVTFRfRkVBVFVSRVMgPSB7XG4gIGxpc3RNb2RlOiB7fSxcbiAgc2VhcmNoUGxhY2U6IHsgfSxcbiAgc2VhcmNoR2VvbG9jYXRlOiB7fSxcbiAgZmF2b3JpdGU6IHt9LFxuICBzaGFyZToge30sXG4gIGRpcmVjdGlvbnM6IHt9LCAgICAgICAgICAgXG4gIGxheWVyczoge30sXG4gIG1hcGRlZmF1bHR2aWV3OiB7fVxufTsiLCJleHBvcnQgY2xhc3MgR29Hb0ZlYXR1cmVcbntcbiAgYWN0aXZlIDogYm9vbGVhbiA9IGZhbHNlO1xuICB1cmwgOiBzdHJpbmcgPSAnJztcbiAgcm9sZXMgOiBzdHJpbmdbXSA9IFsnYW5vbnltb3VzJywgJ2Fub255bW91c193aXRoX21haWwnLCAndXNlcicsICdhZG1pbiddO1xuICBpbklmcmFtZSA6IGJvb2xlYW4gPSB0cnVlO1xuICBvcHRpb25zIDogYW55ID0ge307XG5cbiAgaGFzUm9sZShyb2xlcyA6IHN0cmluZ1tdKSB7IFxuICAgIHJldHVybiB0aGlzLnJvbGVzLnNvbWUoIChyb2xlKSA9PiB7XG4gICAgICByZXR1cm4gcm9sZXMuaW5kZXhPZihyb2xlKSA+IC0xO1xuICAgIH0pO1xuICB9XG59IiwiaW1wb3J0IHsgQ2F0ZWdvcnksIE9wdGlvbiwgT3B0aW9uVmFsdWV9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5cbmV4cG9ydCBjbGFzcyBDYXRlZ29yeVZhbHVlXG57XG5cdGNhdGVnb3J5IDogQ2F0ZWdvcnk7XG5cdGNoaWxkcmVuIDogT3B0aW9uVmFsdWVbXSA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKGNhdGVnb3J5IDogQ2F0ZWdvcnkpXG5cdHtcblx0XHR0aGlzLmNhdGVnb3J5ID0gY2F0ZWdvcnk7XHRcblx0fVxuXG5cdGFkZE9wdGlvblZhbHVlKG9wdGlvblZhbHVlIDogT3B0aW9uVmFsdWUpXG5cdHtcblx0XHR0aGlzLmNoaWxkcmVuLnB1c2gob3B0aW9uVmFsdWUpO1xuXHR9XG5cblx0Z2V0IGlzTGFzdENhdGVnb3J5RGVwdGgoKSA6IGJvb2xlYW5cblx0e1xuXHRcdHJldHVybiB0aGlzLmNoaWxkcmVuLmV2ZXJ5KCAob3B0aW9uVmFsdWUpID0+IG9wdGlvblZhbHVlLm9wdGlvbi5zdWJjYXRlZ29yaWVzLmxlbmd0aCA9PSAwKTtcblx0fVxufSIsImV4cG9ydCBjbGFzcyBDb250cmlidXRpb24gXG57IFxuXHR0eXBlIDogbnVtYmVyO1xuXHRzdGF0dXMgOiBudW1iZXI7XG5cdHVzZXIgOiBzdHJpbmc7XG5cdHVzZXJSb2xlIDogbnVtYmVyO1xuXHRyZXNvbHZlZE1lc3NhZ2UgOiBzdHJpbmc7XG5cdHJlc29sdmVkQnkgOiBzdHJpbmc7XG5cdHVwZGF0ZWRBdCA6IHN0cmluZztcblx0Y3JlYXRlZEF0IDogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKGNvbnRyaWJ1dGlvbkpzb24gOiBhbnkpXG5cdHtcblx0XHR0aGlzLnR5cGUgPSBjb250cmlidXRpb25Kc29uLnR5cGU7XG5cdFx0dGhpcy5zdGF0dXMgPSBjb250cmlidXRpb25Kc29uLnN0YXR1cztcblx0XHR0aGlzLnVzZXIgPSBjb250cmlidXRpb25Kc29uLnVzZXI7XG5cdFx0dGhpcy51c2VyUm9sZSA9IGNvbnRyaWJ1dGlvbkpzb24udXNlclJvbGU7XG5cdFx0dGhpcy5yZXNvbHZlZE1lc3NhZ2UgPSBjb250cmlidXRpb25Kc29uLnJlc29sdmVkTWVzc2FnZTtcblx0XHR0aGlzLnJlc29sdmVkQnkgPSBjb250cmlidXRpb25Kc29uLnJlc29sdmVkQnk7XG5cdFx0dGhpcy51cGRhdGVkQXQgPSBjb250cmlidXRpb25Kc29uLnVwZGF0ZWRBdDtcdFxuXHRcdHRoaXMuY3JlYXRlZEF0ID0gY29udHJpYnV0aW9uSnNvbi5jcmVhdGVkQXQ7XG5cdH1cbn0iLCJpbXBvcnQgeyBDb250cmlidXRpb24sIFZvdGVSZXBvcnQsIE9wdGlvblZhbHVlLCBQb3N0YWxBZGRyZXNzLCBPcHRpb24sIENhdGVnb3J5VmFsdWUsIEVsZW1lbnRVcmwgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuXG5leHBvcnQgZW51bSBFbGVtZW50U3RhdHVzIFxue1xuICBNb2RpZmllZEVsZW1lbnQgPSAtNSxcbiAgRGVsZXRlZCA9IC00LFxuICBDb2xsYWJvcmF0aXZlUmVmdXNlZCA9IC0zLFxuICBBZG1pblJlZnVzZWQgPSAtMiwgICAgXG4gIFBlbmRpbmdNb2RpZmljYXRpb24gPSAtMSxcbiAgUGVuZGluZ0FkZCA9IDAsXG4gIEFkbWluVmFsaWRhdGUgPSAxLFxuICBDb2xsYWJvcmF0aXZlVmFsaWRhdGUgPSAyXG59XG5cbmV4cG9ydCBlbnVtIEVsZW1lbnRNb2RlcmF0aW9uU3RhdGVcbntcbiAgR2VvbG9jRXJyb3IgPSAtMixcbiAgTm9PcHRpb25Qcm92aWRlZCA9IC0xLCAgICAgXG4gIE5vdE5lZWRlZCA9IDAsXG4gIFJlcG9ydHNTdWJtaXR0ZWQgPSAxLFxuICBWb3Rlc0NvbmZsaWN0cyA9IDIsIFxuICBQZW5kaW5nRm9yVG9vTG9uZyA9IDMsXG4gIFBvc3NpYmxlRHVwbGljYXRlID0gNCAgXG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50QmFzZVxue1xuICBpZCA6IHN0cmluZztcbiAgbmFtZSA6IHN0cmluZztcbiAgcG9zaXRpb24gOiBMLkxhdExuZztcblxuICBzdGF0dXMgOiBFbGVtZW50U3RhdHVzO1xuICBtb2RlcmF0aW9uU3RhdGUgOiBFbGVtZW50TW9kZXJhdGlvblN0YXRlO1xuICAgXG4gIGFkZHJlc3MgOiBQb3N0YWxBZGRyZXNzO1xuICBkZXNjcmlwdGlvbiA6IHN0cmluZztcbiAgbG9uZ0Rlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGxvbmdEZXNjcmlwdGlvbk1vcmU6IHN0cmluZztcbiAgb3BlbkhvdXJzIDogYW55O1xuXG4gIGNvbW1pdG1lbnQgOiBzdHJpbmc7ICBcbiAgdGVsZXBob25lIDogc3RyaW5nO1xuICB3ZWJzaXRlIDogc3RyaW5nO1xuICBlbWFpbCA6IHN0cmluZztcbiAgXG4gIGZvcm1hdGVkT3BlbkhvdXJzO1xuICBvcGVuSG91cnNNb3JlSW5mb3MgOiBhbnk7XG4gIGltYWdlcyA6IHN0cmluZ1tdO1xuICB1cmxzIDogRWxlbWVudFVybFtdO1xuICB0YWdzIDogc3RyaW5nW107XG4gIFxuICBtb2RpZmllZEVsZW1lbnQgOiBFbGVtZW50QmFzZSA9IG51bGw7XG5cbiAgb3B0aW9uc1ZhbHVlcyA6IE9wdGlvblZhbHVlW10gPSBbXTtcbiAgc3RhbXBzIDogYW55W10gPSBbXTtcblxuICBtYWluT3B0aW9uT3duZXJJZHMgOiBudW1iZXJbXSA9IFtdO1xuXG4gIHJlcG9ydHMgOiBWb3RlUmVwb3J0W107XG4gIGNvbnRyaWJ1dGlvbnMgOiBDb250cmlidXRpb25bXTtcbiAgcGVuZGluZ0NvbnRyaWJ1dGlvbiA6IENvbnRyaWJ1dGlvbjtcbiAgdm90ZXMgOiBWb3RlUmVwb3J0W107XG5cbiAgb3B0aW9uVHJlZSA6IE9wdGlvblZhbHVlOyAgXG5cbiAgc2VhcmNoU2NvcmUgOiBudW1iZXIgPSBudWxsO1xuXG4gIGlzRnVsbHlMb2FkZWQgOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudEpzb24gOiBhbnkpXG4gIHtcbiAgICB0aGlzLnVwZGF0ZVdpdGhKc29uKGVsZW1lbnRKc29uKTsgICAgXG4gIH1cblxuICB1cGRhdGVXaXRoSnNvbihlbGVtZW50SnNvbiA6IGFueSkgXG4gIHtcbiAgICBBcHAuZWxlbWVudEpzb25QYXJzZXIubG9hZChlbGVtZW50SnNvbiwgdGhpcyk7ICAgIFxuICB9ICBcblxuICBjcmVhdGVPcHRpb25zVHJlZSgpXG4gIHtcbiAgICBBcHAuZWxlbWVudE9wdGlvblZhbHVlc01vZHVsZS5jcmVhdGVPcHRpb25zVHJlZSh0aGlzKTtcbiAgfVxuXG4gIGdldE9wdGlvblRyZWUoKVxuICB7XG4gICAgaWYgKHRoaXMub3B0aW9uVHJlZSkgcmV0dXJuIHRoaXMub3B0aW9uVHJlZTtcbiAgICB0aGlzLmNyZWF0ZU9wdGlvbnNUcmVlKCk7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uVHJlZTtcbiAgfVxuXG4gIGdldFJvb3RDYXRlZ29yaWVzVmFsdWVzKCkgOiBDYXRlZ29yeVZhbHVlW11cbiAge1xuICAgIGxldCBvcHRpb25UcmVlID0gdGhpcy5nZXRPcHRpb25UcmVlKCk7XG4gICAgaWYgKG9wdGlvblRyZWUuY2hpbGRyZW4ubGVuZ3RoID09IDApIHJldHVybiBbXTtcbiAgICBpZiAob3B0aW9uVHJlZS5jaGlsZHJlblswXS5jYXRlZ29yeS5pc1Jvb3RDYXRlZ29yeSkgcmV0dXJuIG9wdGlvblRyZWUuY2hpbGRyZW47XG4gICAgcmV0dXJuIG9wdGlvblRyZWUuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW47XG4gIH1cblxuICBnZXRPcHRpb25WYWx1ZUJ5Q2F0ZWdvcnlJZCgkY2F0ZWdvcnlJZClcbiAge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnNWYWx1ZXMuZmlsdGVyKChvVikgPT4gb1YuY2F0ZWdvcnlPd25lci5pZCA9PSAkY2F0ZWdvcnlJZCk7XG4gIH1cblxuICBnZXRPcHRpb25WYWx1ZXNOYW1lcygpXG4gIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zVmFsdWVzLm1hcCggKG92KSA9PiBvdi5vcHRpb24ubmFtZVNob3J0KTtcbiAgfVxuXG4gIGhhdmVPcHRpb24oJG9wdGlvbiA6IE9wdGlvbilcbiAge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnNWYWx1ZXMubWFwKCAob3YpID0+IG92Lm9wdGlvbklkKS5pbmRleE9mKCRvcHRpb24uaWQpID49IDA7XG4gIH1cbn0iLCJleHBvcnQgY2xhc3MgRWxlbWVudFVybFxue1xuICB0eXBlIDogc3RyaW5nID0gJyc7XG4gIHZhbHVlOiBzdHJpbmcgPSAnJztcblxuICBjb25zdHJ1Y3RvcigkZWxlbWVudFVybEpzb24pXG4gIHtcbiAgICBpZiAodHlwZW9mICRlbGVtZW50VXJsSnNvbiA9PT0gJ3N0cmluZycpICRlbGVtZW50VXJsSnNvbiA9IHsga2V5OiAnJywgdmFsdWU6ICRlbGVtZW50VXJsSnNvbiB9O1xuICAgIHRoaXMudHlwZSA9ICRlbGVtZW50VXJsSnNvbi50eXBlIHx8ICcnO1xuICAgIHRoaXMudmFsdWUgPSAkZWxlbWVudFVybEpzb24udmFsdWUgfHwgJyc7ICBcbiAgfVxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cbmltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzLCBBcHBNb2RlcyB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50QmFzZSwgRWxlbWVudFN0YXR1cywgRWxlbWVudE1vZGVyYXRpb25TdGF0ZSB9IGZyb20gJy4vZWxlbWVudC1iYXNlLmNsYXNzJztcbmV4cG9ydCB7IEVsZW1lbnRTdGF0dXMsIEVsZW1lbnRNb2RlcmF0aW9uU3RhdGUgfSBmcm9tICcuL2VsZW1lbnQtYmFzZS5jbGFzcyc7XG5pbXBvcnQgeyBNYXJrZXIgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9tYXAvbWFya2VyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRWxlbWVudENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2VsZW1lbnQvZWxlbWVudC5jb21wb25lbnRcIjtcbmltcG9ydCB7IE9wdGlvblZhbHVlLCBDYXRlZ29yeVZhbHVlLCBPcHRpb24sIENhdGVnb3J5LCBDb250cmlidXRpb24sIFZvdGVSZXBvcnQsIFN0YW1wIH0gZnJvbSBcIi4uL2NsYXNzZXNcIjtcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcblxuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuZGVjbGFyZSB2YXIgJCwgTWFwO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudCBleHRlbmRzIEVsZW1lbnRCYXNlXG57XHRcblx0cHJpdmF0ZSBtYXJrZXJfIDogTWFya2VyID0gbnVsbDtcblx0cHJpdmF0ZSBjb21wb25lbnRfIDogRWxlbWVudENvbXBvbmVudCA9IG51bGw7XHRcblxuXHRjb2xvck9wdGlvbklkIDogYW55O1xuXG5cdHByaXZhdGUgaXNJbml0aWFsaXplZF8gOiBib29sZWFuID0gZmFsc2U7XG5cblx0aWNvbnNUb0Rpc3BsYXkgOiBPcHRpb25WYWx1ZVtdID0gW107XHRcblxuXHRkaXN0YW5jZSA6IG51bWJlcjtcblx0ZGlzdGFuY2VGcm9tQm91bmRzQ2VudGVyIDogbnVtYmVyO1x0XG5cblx0Ly8gZm9yIGVsZW1lbnRzIG1vZHVsZSBhbGdvcml0aG1zXG5cdGlzRGlzcGxheWVkIDogYm9vbGVhbiA9IGZhbHNlO1x0XG5cblx0aXNTaG93bkFsb25lIDogYm9vbGVhbiA9IGZhbHNlO1xuXHRpc0Zhdm9yaXRlIDogYm9vbGVhbiA9IGZhbHNlO1xuXHRuZWVkVG9CZVVwZGF0ZWRXaGVuU2hvd24gOiBib29sZWFuID0gdHJ1ZTtcblxuXHRjb25zdHJ1Y3RvcihlbGVtZW50SnNvbiA6IGFueSlcbiAge1xuICAgIHN1cGVyKGVsZW1lbnRKc29uKTsgIFxuICB9XG5cbiAgdXBkYXRlV2l0aEpzb24oZWxlbWVudEpzb24pXG4gIHtcbiAgXHRzdXBlci51cGRhdGVXaXRoSnNvbihlbGVtZW50SnNvbik7XG4gIFx0dGhpcy5jcmVhdGVPcHRpb25zVHJlZSgpO1xuICAgIHRoaXMudXBkYXRlKHRydWUpO1xuICB9XHRcblxuXHRpbml0aWFsaXplKCkgXG5cdHtcdFx0XG5cdFx0QXBwLmVsZW1lbnRJY29uc01vZHVsZS51cGRhdGVJY29uc1RvRGlzcGxheSh0aGlzKTtcblxuXHRcdHRoaXMubWFya2VyXyA9IG5ldyBNYXJrZXIodGhpcy5pZCwgdGhpcy5wb3NpdGlvbik7XG5cdFx0dGhpcy5pc0luaXRpYWxpemVkXyA9IHRydWU7XHRcblx0fVxuXG5cdHVwZGF0ZSgkZm9yY2UgOiBib29sZWFuID0gZmFsc2UpXG5cdHtcblx0XHQvL2NvbnNvbGUubG9nKFwibWFya2VyIHVwZGF0ZSBuZWVkVG9CZVVwZGF0ZWRcIiwgdGhpcy5uZWVkVG9CZVVwZGF0ZWRXaGVuU2hvd24pO1xuXHRcdGlmICh0aGlzLm5lZWRUb0JlVXBkYXRlZFdoZW5TaG93biB8fCBBcHAubW9kZSA9PSBBcHBNb2Rlcy5MaXN0IHx8ICRmb3JjZSlcblx0XHR7XG5cdFx0XHRBcHAuZWxlbWVudEljb25zTW9kdWxlLnVwZGF0ZUljb25zVG9EaXNwbGF5KHRoaXMpO1xuXHRcdFx0bGV0IG9wdGlvblZhbHVlc1RvVXBkYXRlID0gdGhpcy5nZXRDdXJyT3B0aW9uc1ZhbHVlcygpLmZpbHRlciggKG9wdGlvblZhbHVlKSA9PiBvcHRpb25WYWx1ZS5pc0ZpbGxlZEJ5RmlsdGVycyk7XG5cdFx0XHRvcHRpb25WYWx1ZXNUb1VwZGF0ZS5wdXNoKHRoaXMuZ2V0Q3Vyck1haW5PcHRpb25WYWx1ZSgpKTtcblx0XHRcdGZvcihsZXQgb3B0aW9uVmFsdWUgb2Ygb3B0aW9uVmFsdWVzVG9VcGRhdGUpIEFwcC5lbGVtZW50T3B0aW9uVmFsdWVzTW9kdWxlLnVwZGF0ZU9wdGlvblZhbHVlQ29sb3IodGhpcywgb3B0aW9uVmFsdWUpO1xuXG5cdFx0XHR0aGlzLmNvbG9yT3B0aW9uSWQgPSB0aGlzLmljb25zVG9EaXNwbGF5Lmxlbmd0aCA+IDAgJiYgdGhpcy5nZXRJY29uc1RvRGlzcGxheSgpWzBdID8gdGhpcy5nZXRJY29uc1RvRGlzcGxheSgpWzBdLmNvbG9yT3B0aW9uSWQgOiBudWxsO1x0XG5cblx0XHRcdGlmICh0aGlzLm1hcmtlcikgdGhpcy5tYXJrZXIudXBkYXRlKCk7XG5cdFx0XHR0aGlzLm5lZWRUb0JlVXBkYXRlZFdoZW5TaG93biA9IGZhbHNlO1xuXHRcdH1cdFx0XG5cdH1cblxuXHR1cGRhdGVEaXN0YW5jZSgpXG5cdHtcblx0XHR0aGlzLmRpc3RhbmNlID0gbnVsbDtcblx0XHR0aGlzLmRpc3RhbmNlRnJvbUJvdW5kc0NlbnRlciA9IEFwcC5ib3VuZHNNb2R1bGUuZXh0ZW5kZWRCb3VuZHMgPyBBcHAuYm91bmRzTW9kdWxlLmV4dGVuZGVkQm91bmRzLmdldENlbnRlcigpLmRpc3RhbmNlVG8odGhpcy5wb3NpdGlvbikgLyAxMDAwIDogbnVsbDtcblxuXHRcdGlmIChBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb24oKSkgXG5cdFx0XHR0aGlzLmRpc3RhbmNlID0gQXBwLm1hcENvbXBvbmVudC5kaXN0YW5jZUZyb21Mb2NhdGlvblRvKHRoaXMucG9zaXRpb24pO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuZGlzdGFuY2UgPSB0aGlzLmRpc3RhbmNlRnJvbUJvdW5kc0NlbnRlcjtcblx0XHRcblx0XHQvLyBNYWtpbmcgdGhlIGRpc3RhbmNlIG1vcmUgcmVhbGlzdGljIG11bHRpcGx5aW5nXG5cdFx0dGhpcy5kaXN0YW5jZSA9IHRoaXMuZGlzdGFuY2UgPyBNYXRoLnJvdW5kKDEuMip0aGlzLmRpc3RhbmNlKSA6IG51bGw7XG5cdFx0dGhpcy5kaXN0YW5jZUZyb21Cb3VuZHNDZW50ZXIgPSB0aGlzLmRpc3RhbmNlRnJvbUJvdW5kc0NlbnRlciA/IE1hdGgucm91bmQoMS4yKnRoaXMuZGlzdGFuY2VGcm9tQm91bmRzQ2VudGVyKSA6IG51bGw7XG5cdH1cblxuXHRnZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpXG5cdHtcblx0XHRyZXR1cm4gQXBwLmVsZW1lbnRGb3JtYXRlck1vZHVsZS5nZXRQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eU5hbWUpO1xuXHR9XG5cblx0Z2V0SWNvbnNUb0Rpc3BsYXkoKSA6IE9wdGlvblZhbHVlW11cbiAge1xuICAgIGxldCByZXN1bHQgPSB0aGlzLmljb25zVG9EaXNwbGF5O1xuICAgIHJldHVybiByZXN1bHQuc29ydCggKGEsYikgPT4gYS5pc0ZpbGxlZEJ5RmlsdGVycyA/IC0xIDogMSk7XG4gIH1cblxuXHRnZXRDdXJyT3B0aW9uc1ZhbHVlcygpIDogT3B0aW9uVmFsdWVbXVxuXHR7XG5cdFx0aWYgKEFwcC5jb25maWcubWVudS5zaG93T25lUGFuZVBlck1haW5PcHRpb24pIHJldHVybiB0aGlzLm9wdGlvbnNWYWx1ZXMuZmlsdGVyKCAob3B0aW9uVmFsdWUpID0+IG9wdGlvblZhbHVlLm9wdGlvbi5tYWluT3duZXJJZCA9PSBBcHAuY3Vyck1haW5JZCk7XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9uc1ZhbHVlcztcblx0fVxuXG5cdGdldEN1cnJEZWVwZXN0T3B0aW9uc1ZhbHVlcygpIDogT3B0aW9uVmFsdWVbXVxuXHR7XG5cdFx0bGV0IGN1cnJPcHRpb25WYWx1ZXMgPSB0aGlzLmdldEN1cnJPcHRpb25zVmFsdWVzKCk7XG4gICAgbGV0IGlkc1RvUmVtb3ZlID0gW11cbiAgICBmb3IgKGxldCBvdiBvZiBjdXJyT3B0aW9uVmFsdWVzKSBpZHNUb1JlbW92ZSA9IGlkc1RvUmVtb3ZlLmNvbmNhdChvdi5vcHRpb25fLnBhcmVudE9wdGlvbklkcyk7XG4gICAgbGV0IGRlZXBlc3RPdiA9IGN1cnJPcHRpb25WYWx1ZXMuZmlsdGVyKCAob1YpID0+IGlkc1RvUmVtb3ZlLmluZGV4T2Yob1Yub3B0aW9uXy5pZCkgPT0gLTEpO1xuXG4gIFx0Ly8gZ3JvdXAgYnkgb3duZXJcbiAgXHRsZXQgZ3JvdXBlZEJ5UGFyZW50T3ZzID0ge31cbiAgXHRmb3IgKGxldCBvdiBvZiBkZWVwZXN0T3YpIHsgXG4gIFx0XHRsZXQgcGFyZW50TmFtZSA9IG92Lm9wdGlvbi5wYXJlbnRPcHRpb25OYW1lO1xuICBcdFx0aWYgKHBhcmVudE5hbWUgaW4gZ3JvdXBlZEJ5UGFyZW50T3ZzKSBncm91cGVkQnlQYXJlbnRPdnNbcGFyZW50TmFtZV0ucHVzaChvdik7IFxuICBcdFx0ZWxzZSBncm91cGVkQnlQYXJlbnRPdnNbcGFyZW50TmFtZV0gPSBbb3ZdOyBcbiAgXHR9XG4gIFx0bGV0IGRlZXBlc3RPcmRlcmVkT3YgPSBbXTtcbiAgXHRmb3IgKGxldCBwYXJlbnQgaW4gZ3JvdXBlZEJ5UGFyZW50T3ZzKSB7IGRlZXBlc3RPcmRlcmVkT3YgPSBkZWVwZXN0T3JkZXJlZE92LmNvbmNhdChncm91cGVkQnlQYXJlbnRPdnNbcGFyZW50XSk7IH1cbiAgXHRyZXR1cm4gZGVlcGVzdE9yZGVyZWRPdjtcblx0fVxuXG5cdHByaXZhdGUgZ3JvdXBCeShsaXN0LCBrZXlHZXR0ZXIpIHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgbGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleUdldHRlcihpdGVtKTtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IG1hcC5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCFjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBtYXAuc2V0KGtleSwgW2l0ZW1dKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBtYXA7XG59XG5cblx0Z2V0Q3Vyck1haW5PcHRpb25WYWx1ZSgpIDogT3B0aW9uVmFsdWVcblx0e1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnNWYWx1ZXMuZmlsdGVyKCAob3B0aW9uVmFsdWUpID0+IG9wdGlvblZhbHVlLm9wdGlvbi5pZCA9PSBBcHAuY3Vyck1haW5JZCkuc2hpZnQoKTtcblx0fVxuXG5cdGdldENhdGVnb3JpZXNJZHMoKSA6IG51bWJlcltdXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDdXJyT3B0aW9uc1ZhbHVlcygpLm1hcCggKG9wdGlvblZhbHVlKSA9PiBvcHRpb25WYWx1ZS5jYXRlZ29yeU93bmVyLmlkKS5maWx0ZXIoKHZhbHVlLCBpbmRleCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXgpO1xuXHR9XG5cblx0Z2V0T3B0aW9uc0lkc0luQ2F0ZWdvcmllSWQoY2F0ZWdvcnlJZCkgOiBudW1iZXJbXVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q3Vyck9wdGlvbnNWYWx1ZXMoKS5maWx0ZXIoIChvcHRpb25WYWx1ZSkgPT4gb3B0aW9uVmFsdWUub3B0aW9uLm93bmVySWQgPT0gY2F0ZWdvcnlJZCkubWFwKCAob3B0aW9uVmFsdWUpID0+IG9wdGlvblZhbHVlLm9wdGlvbklkKTtcblx0fVx0XG5cblx0ZGlzcGxheVN0YW1wcygpIDogU3RhbXBbXVxuXHR7XG5cdFx0cmV0dXJuIEFwcC5zdGFtcE1vZHVsZS5nZXRBbGxvd2VkU3RhbXBGb3JFbGVtZW50KHRoaXMpO1xuXHR9XG5cblx0aXNQZW5kaW5nKCkgeyByZXR1cm4gdGhpcy5zdGF0dXMgPT0gRWxlbWVudFN0YXR1cy5QZW5kaW5nQWRkIHx8IHRoaXMuc3RhdHVzID09IEVsZW1lbnRTdGF0dXMuUGVuZGluZ01vZGlmaWNhdGlvbjsgfVxuXHRpc0RlbGV0ZWQoKSB7IHJldHVybiB0aGlzLnN0YXR1cyA8PSBFbGVtZW50U3RhdHVzLkFkbWluUmVmdXNlZCB9XG5cdG5lZWRzTW9kZXJhdGlvbigpIHsgcmV0dXJuIHRoaXMubW9kZXJhdGlvblN0YXRlICE9IEVsZW1lbnRNb2RlcmF0aW9uU3RhdGUuTm90TmVlZGVkIH1cdFxuXG5cdGdldCBtYXJrZXIoKSA6IE1hcmtlciB7IHJldHVybiB0aGlzLm1hcmtlcl87IH1cblx0Z2V0IGNvbXBvbmVudCgpIHsgcmV0dXJuIHRoaXMuY29tcG9uZW50XyB8fCAodGhpcy5jb21wb25lbnRfID0gbmV3IEVsZW1lbnRDb21wb25lbnQodGhpcykpOyB9XHRcblx0Z2V0IGlzSW5pdGlhbGl6ZWQoKSB7IHJldHVybiB0aGlzLmlzSW5pdGlhbGl6ZWRfOyB9XG5cbn1cblxuIiwiaW1wb3J0IHsgQXBwTW9kdWxlIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IENhdGVnb3J5LCBPcHRpb24sIENhdGVnb3J5VmFsdWV9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBwYXJzZVVyaUlkLCBzbHVnaWZ5IH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5cbmV4cG9ydCBjbGFzcyBPcHRpb25WYWx1ZVxue1xuXHRvcHRpb25JZCA6IGFueTtcblx0aW5kZXggOiBudW1iZXI7XG5cdGRlc2NyaXB0aW9uIDogc3RyaW5nO1xuXHRkaWZmIDogc3RyaW5nOyAvLyB1c2UgdG8gY29tcGFyZSB3aXRoIG1vZGlmaWVkIG9wdGlvblZhbHVlLiBWYWx1ZXMgY25hIGJlIFwicmVtb3ZlZFwiLCBcImFkZGVkXCIsIG9yIFwiZXF1YWxzXCJcblx0b3B0aW9uXyA6IE9wdGlvbiA9IG51bGw7XG5cdGlzRmlsbGVkQnlGaWx0ZXJzIDogYm9vbGVhbiA9IHRydWU7XG5cblx0Y2hpbGRyZW4gOiBDYXRlZ29yeVZhbHVlW10gPSBbXTtcblx0Y29sb3JPcHRpb25JZCA6IG51bWJlciA9IG51bGw7XG5cblx0Y29uc3RydWN0b3IoJG9wdGlvblZhbHVlSnNvbiwgJGtleSA9IDApXG5cdHtcblx0XHQvLyBjb25zb2xlLmxvZyhcInZhbHVlIGpzb25cIiwgJG9wdGlvblZhbHVlSnNvbik7XG5cdFx0Ly8gaW4gY2FzZSBvZiBjb21wYWN0IGpzb24sIHRoZSBvcHRpb25zIHZhbHVlcyBhcmUgc3RvcmVkIGluIHNpbXBsZSBhcnJheVxuXHRcdGlmICh0eXBlb2YgJG9wdGlvblZhbHVlSnNvbiA9PSAnbnVtYmVyJyB8fCB0eXBlb2YgJG9wdGlvblZhbHVlSnNvbiA9PSAnc3RyaW5nJylcblx0XHR7XG5cdFx0XHR0aGlzLm9wdGlvbklkID0gJG9wdGlvblZhbHVlSnNvbi50b1N0cmluZygpO1xuXHRcdFx0dGhpcy5pbmRleCA9ICRrZXk7XG5cdFx0XHR0aGlzLmRlc2NyaXB0aW9uID0gJyc7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoJG9wdGlvblZhbHVlSnNvbikgJiYgJG9wdGlvblZhbHVlSnNvbi5sZW5ndGggPj0gMilcblx0XHR7XG5cdFx0XHR0aGlzLm9wdGlvbklkID0gJG9wdGlvblZhbHVlSnNvblswXTtcblx0XHRcdHRoaXMuaW5kZXggPSAka2V5O1xuXHRcdFx0dGhpcy5kZXNjcmlwdGlvbiA9ICRvcHRpb25WYWx1ZUpzb24ubGVuZ3RoID09IDMgPyAgJG9wdGlvblZhbHVlSnNvblsyXSA6ICcnO1xuXHRcdH1cblx0XHRlbHNlIGlmICh0eXBlb2YgJG9wdGlvblZhbHVlSnNvbiA9PSAnb2JqZWN0Jylcblx0XHR7XG5cdFx0XHRpZiAoJG9wdGlvblZhbHVlSnNvbltcIkBpZFwiXSkge1xuXHRcdFx0XHR0aGlzLm9wdGlvbklkID0gcGFyc2VVcmlJZCgkb3B0aW9uVmFsdWVKc29uW1wiQGlkXCJdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMub3B0aW9uSWQgPSAkb3B0aW9uVmFsdWVKc29uLmNhdGVnb3J5SWQgfHwgJG9wdGlvblZhbHVlSnNvbi5vcHRpb25JZDtcblx0XHRcdFx0dGhpcy5pbmRleCA9ICRrZXk7XG5cdFx0XHRcdHRoaXMuZGVzY3JpcHRpb24gPSAkb3B0aW9uVmFsdWVKc29uLmRlc2NyaXB0aW9uIHx8ICcnO1xuXHRcdFx0fVx0XHRcdFxuXHRcdH1cdFxuXHRcdHRoaXMuZGlmZiA9ICRvcHRpb25WYWx1ZUpzb24uZGlmZjtcdFxuXHR9XG5cblx0Z2V0IG9wdGlvbigpIDogT3B0aW9uXG5cdHtcblx0XHRpZiAodGhpcy5vcHRpb25fKSByZXR1cm4gdGhpcy5vcHRpb25fO1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbl8gPSBBcHAudGF4b25vbXlNb2R1bGUuZ2V0T3B0aW9uQnlJZCh0aGlzLm9wdGlvbklkKTtcblx0fVxuXG5cdHNldFJlY3Vyc2l2ZWx5RmlsbGVkQnlGaWx0ZXJzKGJvb2wgOiBib29sZWFuKVxuXHR7XG5cdFx0dGhpcy5pc0ZpbGxlZEJ5RmlsdGVycyA9IGJvb2w7XG5cdFx0Zm9yKGxldCBjYXRlZ29yeVZhbHVlIG9mIHRoaXMuY2hpbGRyZW4pXG5cdFx0e1xuXHRcdFx0Zm9yIChsZXQgc3Vib3B0aW9uVmFsdWUgb2YgY2F0ZWdvcnlWYWx1ZS5jaGlsZHJlbilcblx0XHRcdHtcblx0XHRcdFx0c3Vib3B0aW9uVmFsdWUuc2V0UmVjdXJzaXZlbHlGaWxsZWRCeUZpbHRlcnMoYm9vbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2V0IGNhdGVnb3J5T3duZXIoKSA6IENhdGVnb3J5XG5cdHtcblx0XHRyZXR1cm4gPENhdGVnb3J5PiB0aGlzLm9wdGlvbi5nZXRPd25lcigpO1xuXHR9XG5cblx0YWRkQ2F0ZWdvcnlWYWx1ZShjYXRlZ29yeVZhbHVlIDogQ2F0ZWdvcnlWYWx1ZSlcblx0e1xuXHRcdHRoaXMuY2hpbGRyZW4ucHVzaChjYXRlZ29yeVZhbHVlKTtcblx0fVxufVxuXG4iLCJpbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5cbmV4cG9ydCBjbGFzcyBQb3N0YWxBZGRyZXNzXG57XG4gIHN0cmVldEFkZHJlc3MgOiBzdHJpbmcgPSAnJztcbiAgYWRkcmVzc0xvY2FsaXR5OiBzdHJpbmcgPSAnJztcbiAgcG9zdGFsQ29kZTogc3RyaW5nID0gJyc7XG4gIGZvcm1hdGVkQWRkcmVzcyA6IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKCRhZGRyZXNzSnNvbilcbiAge1xuICAgIGlmICh0eXBlb2YgJGFkZHJlc3NKc29uID09IFwic3RyaW5nXCIpXG4gICAgICB0aGlzLmZvcm1hdGVkQWRkcmVzcyA9ICRhZGRyZXNzSnNvblxuICAgIGVsc2UgaWYgKCRhZGRyZXNzSnNvbilcbiAgICB7XG4gICAgICB0aGlzLnN0cmVldEFkZHJlc3MgPSBjYXBpdGFsaXplKCRhZGRyZXNzSnNvbi5zdHJlZXRBZGRyZXNzIHx8ICcnKTtcbiAgICAgIHRoaXMuYWRkcmVzc0xvY2FsaXR5ID0gY2FwaXRhbGl6ZSgkYWRkcmVzc0pzb24uYWRkcmVzc0xvY2FsaXR5IHx8ICcnKTtcbiAgICAgIHRoaXMucG9zdGFsQ29kZSA9ICRhZGRyZXNzSnNvbi5wb3N0YWxDb2RlO1xuICAgICAgdGhpcy5mb3JtYXRlZEFkZHJlc3MgPSAkYWRkcmVzc0pzb24uY3VzdG9tRm9ybWF0ZWRBZGRyZXNzIHx8ICcnO1xuICAgIH0gICAgICBcbiAgfVxuXG4gIGdldEZvcm1hdGVkQWRkcmVzcygpXG4gIHtcbiAgICBpZiAodGhpcy5mb3JtYXRlZEFkZHJlc3MpIHJldHVybiB0aGlzLmZvcm1hdGVkQWRkcmVzcztcbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBpZiAodGhpcy5zdHJlZXRBZGRyZXNzKSByZXN1bHQgKz0gdGhpcy5zdHJlZXRBZGRyZXNzICsgJywgJztcbiAgICBpZiAodGhpcy5wb3N0YWxDb2RlKSByZXN1bHQgKz0gdGhpcy5wb3N0YWxDb2RlICsgJyAnO1xuICAgIGlmICh0aGlzLmFkZHJlc3NMb2NhbGl0eSkgcmVzdWx0ICs9IHRoaXMuYWRkcmVzc0xvY2FsaXR5O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0iLCJleHBvcnQgY2xhc3MgU3RhbXBcbntcbiAgaWQgOiBhbnk7XG4gIG5hbWUgOiBzdHJpbmcgPSAnJztcbiAgaWNvbiA6IHN0cmluZyA9ICcnO1xuICBlbGVtZW50SWRzIDogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcigkanNvbilcbiAge1xuICAgIHRoaXMuaWQgPSAkanNvbi5pZCB8fCAkanNvbi5uYW1lO1xuICAgIHRoaXMubmFtZSA9ICRqc29uLm5hbWU7XG4gICAgdGhpcy5pY29uID0gJGpzb24uaWNvbjsgIFxuICAgIHRoaXMuZWxlbWVudElkcyA9ICRqc29uLmVsZW1lbnRJZHM7ICBcbiAgfVxufSIsImV4cG9ydCBjbGFzcyBWb3RlUmVwb3J0IFxueyBcblx0dHlwZSA6IG51bWJlcjtcblx0dmFsdWUgOiBudW1iZXI7XG5cdGNvbW1lbnQgOiBzdHJpbmc7XG5cdHVzZXJFbWFpbCA6IHN0cmluZztcblx0dXNlclJvbGUgOiBudW1iZXI7XG5cdGNyZWF0ZWRBdCA6IHN0cmluZztcblxuXHRjb25zdHJ1Y3Rvcih2b3RlUmVwb3J0SnNvbiA6IGFueSlcblx0e1xuXHRcdHRoaXMudHlwZSA9IHZvdGVSZXBvcnRKc29uLnR5cGU7XG5cdFx0dGhpcy52YWx1ZSA9IHZvdGVSZXBvcnRKc29uLnZhbHVlO1xuXHRcdHRoaXMuY29tbWVudCA9IHZvdGVSZXBvcnRKc29uLmNvbW1lbnQ7XG5cdFx0dGhpcy51c2VyRW1haWwgPSB2b3RlUmVwb3J0SnNvbi51c2VyRW1haWw7XG5cdFx0dGhpcy51c2VyUm9sZSA9IHZvdGVSZXBvcnRKc29uLnVzZXJSb2xlO1xuXHRcdHRoaXMuY3JlYXRlZEF0ID0gdm90ZVJlcG9ydEpzb24uY3JlYXRlZEF0O1x0XG5cdH1cbn0iLCJleHBvcnQgaW50ZXJmYWNlIElFdmVudDxUPiB7XG4gICAgZG8oaGFuZGxlcjogeyAoZGF0YT86IFQpOiB2b2lkIH0pIDogdm9pZDtcbiAgICBvZmYoaGFuZGxlcjogeyAoZGF0YT86IFQpOiB2b2lkIH0pIDogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50PFQ+IGltcGxlbWVudHMgSUV2ZW50PFQ+IHtcbiAgICBwcml2YXRlIGhhbmRsZXJzOiB7IChkYXRhPzogVCk6IHZvaWQ7IH1bXSA9IFtdO1xuXG4gICAgcHVibGljIGRvKGhhbmRsZXI6IHsgKGRhdGE/OiBUKTogdm9pZCB9KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMucHVzaChoYW5kbGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmKGhhbmRsZXI6IHsgKGRhdGE/OiBUKTogdm9pZCB9KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzLmZpbHRlcihoID0+IGggIT09IGhhbmRsZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0KGRhdGE/OiBUKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMuc2xpY2UoMCkuZm9yRWFjaChoID0+IGgoZGF0YSkpO1xuICAgIH1cbn0iLCJpbXBvcnQgeyBBcHBNb2R1bGUsIEFwcFN0YXRlcywgQXBwTW9kZXMsIEFwcERhdGFUeXBlIH0gZnJvbSBcIi4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IFZpZXdQb3J0IH0gZnJvbSBcIi4vbWFwL3ZpZXdwb3J0LmNsYXNzXCI7XG5kZWNsYXJlIHZhciBMIDogYW55O1xuXG5leHBvcnQgY2xhc3MgSGlzdG9yeVN0YXRlXG57XG4gIG1vZGU6IEFwcE1vZGVzO1xuICBzdGF0ZSA6IEFwcFN0YXRlcztcbiAgZGF0YVR5cGUgOiBBcHBEYXRhVHlwZTtcbiAgYWRkcmVzcyA6IHN0cmluZztcbiAgdmlld3BvcnQgOiBWaWV3UG9ydDtcbiAgaWQgOiBhbnk7XG4gIHRleHQgOiBzdHJpbmc7XG4gIGZpbHRlcnMgOiBzdHJpbmc7XG5cbiAgcGFyc2UoJGhpc3RvcnlTdGF0ZSA6IGFueSkgOiBIaXN0b3J5U3RhdGVcbiAge1xuICAgIHRoaXMubW9kZSA9ICRoaXN0b3J5U3RhdGUubW9kZSA9PSAnTWFwJyA/IEFwcE1vZGVzLk1hcCA6IEFwcE1vZGVzLkxpc3Q7XG4gICAgdGhpcy5zdGF0ZSA9IHBhcnNlSW50KEFwcFN0YXRlc1skaGlzdG9yeVN0YXRlLnN0YXRlXSk7XG4gICAgdGhpcy5kYXRhVHlwZSA9IHBhcnNlSW50KEFwcERhdGFUeXBlWyRoaXN0b3J5U3RhdGUuZGF0YVR5cGVdKTtcbiAgICB0aGlzLmFkZHJlc3MgPSAkaGlzdG9yeVN0YXRlLmFkZHJlc3M7XG4gICAgdGhpcy52aWV3cG9ydCA9IHR5cGVvZiAkaGlzdG9yeVN0YXRlLnZpZXdwb3J0ID09PSAnc3RyaW5nJyA/IG5ldyBWaWV3UG9ydCgpLmZyb21TdHJpbmcoJGhpc3RvcnlTdGF0ZS52aWV3cG9ydCkgOiAkaGlzdG9yeVN0YXRlLnZpZXdwb3J0O1xuICAgIHRoaXMuaWQgPSAkaGlzdG9yeVN0YXRlLmlkO1xuICAgIHRoaXMudGV4dCA9ICRoaXN0b3J5U3RhdGUudGV4dDtcbiAgICB0aGlzLmZpbHRlcnMgPSAkaGlzdG9yeVN0YXRlLmZpbHRlcnM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn0iLCJleHBvcnQgY2xhc3MgVGlsZUxheWVyXG57XG4gIG5hbWUgOiBzdHJpbmcgPSAnJztcbiAgdXJsIDogc3RyaW5nID0gJyc7XG4gIGF0dHJpYnV0aW9uIDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWUgOiBzdHJpbmcsIHVybCA6IHN0cmluZywgYXR0cmlidXRpb24/IDogc3RyaW5nKSB7IFxuICAgIHRoaXMubmFtZSA9IG5hbWU7IFxuICAgIHRoaXMudXJsID0gdXJsOyBcbiAgICB0aGlzLmF0dHJpYnV0aW9uID0gYXR0cmlidXRpb24gfHwgJ8KpIDxhIGhyZWY9XCJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIj5PcGVuU3RyZWV0TWFwPC9hPidcbiAgfVxufSIsImltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmRlY2xhcmUgdmFyIEw7XG5cbmV4cG9ydCBjbGFzcyBWaWV3UG9ydFxue1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbGF0IDogbnVtYmVyID0gMCwgXG4gICAgICAgICAgcHVibGljIGxuZyA6bnVtYmVyID0gMCwgXG4gICAgICAgICAgcHVibGljIHpvb20gOiBudW1iZXIgPSAwKVxuICB7XG4gICAgdGhpcy5sYXQgPSBsYXQgfHwgMDtcbiAgICB0aGlzLmxuZyA9IGxuZyB8fCAwO1xuICAgIHRoaXMuem9vbSA9IHpvb20gfHwgMDtcbiAgfVxuXG4gIHRvU3RyaW5nKClcbiAge1xuICAgIGxldCBkaWdpdHMgPSB0aGlzLnpvb20gPiAxNCA/IDQgOiB0aGlzLnpvb20gPiAxMCA/IDMgOiAyO1xuICAgIHJldHVybiBgQCR7dGhpcy5sYXQudG9GaXhlZChkaWdpdHMpfSwke3RoaXMubG5nLnRvRml4ZWQoZGlnaXRzKX0sJHt0aGlzLnpvb219emA7XG4gIH1cblxuICBmcm9tU3RyaW5nKHN0cmluZyA6IHN0cmluZylcbiAge1xuICAgIGlmICghc3RyaW5nKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBkZWNvZGUgPSBzdHJpbmcuc3BsaXQoJ0AnKS5wb3AoKS5zcGxpdCgnLCcpO1xuICAgIGlmIChkZWNvZGUubGVuZ3RoICE9IDMpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiVmlld1BvcnQgZnJvbVN0cmluZyBlcnJldXJcIiwgc3RyaW5nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0aGlzLmxhdCA9IHBhcnNlRmxvYXQoZGVjb2RlWzBdKSAlIDM2MDtcbiAgICB0aGlzLmxuZyA9IHBhcnNlRmxvYXQoZGVjb2RlWzFdKSAlIDM2MDtcbiAgICB0aGlzLnpvb20gPSBwYXJzZUludChkZWNvZGVbMl0uc2xpY2UoMCwtMSkpO1xuXG4gICAgLy9jb25zb2xlLmxvZyhcIlZpZXdQb3J0IGZyb21TdHJpbmcgRG9uZVwiLCB0aGlzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9Mb2NhdGlvbigpXG4gIHtcbiAgICByZXR1cm4gTC5sYXRMbmcodGhpcy5sYXQsIHRoaXMubG5nKTtcbiAgfVxufSIsImltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzLCBBcHBNb2RlcyB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tIFwiLi9vcHRpb24uY2xhc3NcIjtcbmltcG9ydCB7IENhdGVnb3J5T3B0aW9uVHJlZU5vZGUsIENhdGVnb3J5T3B0aW9uVHJlZU5vZGVUeXBlIH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZGlyZWN0b3J5LW1lbnUvY2F0ZWdvcnktb3B0aW9uLXRyZWUtbm9kZS5jbGFzc1wiO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuZGVjbGFyZSBsZXQgJCA6IGFueTtcblxuZXhwb3J0IGNsYXNzIENhdGVnb3J5IGV4dGVuZHMgQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZVxueyBcblx0ZW5hYmxlRGVzY3JpcHRpb24gOiBib29sZWFuO1xuXHRkaXNwbGF5U3Vib3B0aW9uc0lubGluZSA6IGJvb2xlYW47XG5cdHVzZUZvckZpbHRlcmluZyA6IGJvb2xlYW47IC8vIGlmIHRydWUsIHRoZSBlbGVtZW50IHdpbGwgYmUgaGlkZGVuIHdoZW4gbm90IGZ1bGxmaWxsaW5nIGF0IGxlYXN0IG9uZSBjaGVja2VkIG9wdGlvbiBvZiB0aGlzIGNhdGVnb3J5XG5cdGlzTWFuZGF0b3J5IDogYm9vbGVhbjsgXHQvLyBpZiB0aGUgZWxlbWVudCBoYXZlIG5vIG9wdGlvbiBpbiB0aGlzIGNhdGVnb3J5LCBpdCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWRcblx0aXNSb290Q2F0ZWdvcnk6IGJvb2xlYW47XG5cblx0Y29uc3RydWN0b3IoJGNhdGVnb3J5SnNvbiA6IGFueSlcblx0e1xuXHRcdHN1cGVyKENhdGVnb3J5T3B0aW9uVHJlZU5vZGVUeXBlLkNhdGVnb3J5LCAnI2NhdGVnb3J5LScsICcjc3ViY2F0ZWdvcmllLWNoZWNrYm94LScsICcub3B0aW9ucy13cmFwcGVyJyk7XG5cblx0XHR0aGlzLmlkID0gJGNhdGVnb3J5SnNvbi5pZDtcblx0XHR0aGlzLm5hbWUgPSBjYXBpdGFsaXplKCRjYXRlZ29yeUpzb24ubmFtZSB8fCBcIlwiKTtcblx0XHR0aGlzLm5hbWVTaG9ydCA9IGNhcGl0YWxpemUoJGNhdGVnb3J5SnNvbi5uYW1lU2hvcnQgfHwgdGhpcy5uYW1lKTtcblxuXHRcdHRoaXMuaXNSb290Q2F0ZWdvcnkgPSAkY2F0ZWdvcnlKc29uLmlzUm9vdENhdGVnb3J5IHx8IGZhbHNlO1xuXG5cdFx0dGhpcy5kaXNwbGF5SW5NZW51ID0gKCRjYXRlZ29yeUpzb24uZGlzcGxheUluTWVudSB8fCB0aGlzLmlzUm9vdENhdGVnb3J5KSAmJiB0aGlzLm5hbWUgIT0gXCJcIjtcblx0XHR0aGlzLmRpc3BsYXlJbkluZm9CYXIgPSAoJGNhdGVnb3J5SnNvbi5kaXNwbGF5SW5JbmZvQmFyIHx8IHRoaXMuaXNSb290Q2F0ZWdvcnkpICYmIHRoaXMubmFtZSAhPSBcIlwiO1xuXG5cdFx0dGhpcy5zaG93RXhwYW5kZWQgPSAkY2F0ZWdvcnlKc29uLnNob3dFeHBhbmRlZCAhPT0gZmFsc2U7XG5cdFx0dGhpcy51bmV4cGFuZGFibGUgPSAkY2F0ZWdvcnlKc29uLnVuZXhwYW5kYWJsZSB8fCBmYWxzZTtcblx0XHRcblx0XHR0aGlzLmVuYWJsZURlc2NyaXB0aW9uID0gJGNhdGVnb3J5SnNvbi5lbmFibGVEZXNjcmlwdGlvbiB8fCBmYWxzZTtcdFxuXHRcdHRoaXMuZGlzcGxheVN1Ym9wdGlvbnNJbmxpbmUgPSAkY2F0ZWdvcnlKc29uLmRpc3BsYXlTdWJvcHRpb25zSW5saW5lIHx8IGZhbHNlO1x0XG5cdFx0dGhpcy5pc01hbmRhdG9yeSA9ICRjYXRlZ29yeUpzb24uaXNNYW5kYXRvcnkgIT09IGZhbHNlO1xuXHRcdHRoaXMudXNlRm9yRmlsdGVyaW5nID0gJGNhdGVnb3J5SnNvbi51c2VGb3JGaWx0ZXJpbmcgIT09IGZhbHNlO1xuXHRcdHRoaXMubWFpbk93bmVySWQgPSAkY2F0ZWdvcnlKc29uLm1haW5Pd25lcklkIHx8IG51bGw7XG5cdH1cblxuXHRhZGRPcHRpb24oJG9wdGlvbiA6IE9wdGlvbikgeyB0aGlzLmNoaWxkcmVuLnB1c2goJG9wdGlvbik7IH1cblxuXHRnZXQgb3B0aW9ucygpIDogT3B0aW9uW10geyByZXR1cm4gPE9wdGlvbltdPiB0aGlzLmNoaWxkcmVuOyB9XG5cblx0Z2V0IGRpc2FibGVkT3B0aW9ucygpIDogT3B0aW9uW10geyByZXR1cm4gPE9wdGlvbltdPiB0aGlzLmRpc2FibGVkQ2hpbGRyZW4oKTsgfVxuXHRnZXQgbm9uRGlzYWJsZWRPcHRpb25zKCkgOiBPcHRpb25bXSB7IHJldHVybiA8T3B0aW9uW10+IHRoaXMubm9uRGlzYWJsZWRDaGlsZHJlbigpOyB9XG5cdGdldCBjaGVja2VkT3B0aW9ucygpIDogT3B0aW9uW10geyByZXR1cm4gPE9wdGlvbltdPiB0aGlzLmNoZWNrZWRDaGlsZHJlbigpOyB9XG59XG4iLCJpbXBvcnQgeyBBcHBNb2R1bGUsIEFwcFN0YXRlcywgQXBwTW9kZXMgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tIFwiLi9jYXRlZ29yeS5jbGFzc1wiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZSwgQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZVR5cGUgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9kaXJlY3RvcnktbWVudS9jYXRlZ29yeS1vcHRpb24tdHJlZS1ub2RlLmNsYXNzXCI7XG5cbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IGNhcGl0YWxpemUsIHNsdWdpZnkgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcbmRlY2xhcmUgbGV0ICQgOiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBPcHRpb24gZXh0ZW5kcyBDYXRlZ29yeU9wdGlvblRyZWVOb2RlXG57IFxuXHRjb2xvciA6IHN0cmluZztcblx0c29mdENvbG9yIDogc3RyaW5nO1xuXHRpY29uIDogc3RyaW5nO1xuXHR1c2VJY29uRm9yTWFya2VyOiBib29sZWFuO1xuXHR1c2VDb2xvckZvck1hcmtlciA6IGJvb2xlYW47XG4gICB0ZXh0SGVscGVyIDogc3RyaW5nO1xuXG4gICBkaXNwbGF5Q2hpbGRyZW5Jbk1lbnUgOiBib29sZWFuO1xuXHRkaXNwbGF5Q2hpbGRyZW5JbkluZm9CYXIgOiBib29sZWFuO1xuICBcbiAgIGludElkIDogbnVtYmVyOyAvLyBBbmQgSWQgYXMgbnVtYmVyLCB1c2VkIGZvciBjcmVhdGluZyB0aGUgb3B0aW9uIHVybFxuXG5cdHBhcmVudE9wdGlvbklkcyA6IG51bWJlcltdID0gW107XG5cblx0Y29uc3RydWN0b3IoJG9wdGlvbkpzb24gOiBhbnkpXG5cdHtcblx0XHRzdXBlcihDYXRlZ29yeU9wdGlvblRyZWVOb2RlVHlwZS5PcHRpb24sICcjb3B0aW9uLScsICcjb3B0aW9uLWNoZWNrYm94LScsICcuc3ViY2F0ZWdvcmllcy13cmFwcGVyJyk7XG5cblx0XHR0aGlzLm5hbWUgPSBjYXBpdGFsaXplKCRvcHRpb25Kc29uLm5hbWUpO1xuXHRcdHRoaXMubmFtZVNob3J0ID0gY2FwaXRhbGl6ZSgkb3B0aW9uSnNvbi5uYW1lU2hvcnQgfHwgdGhpcy5uYW1lKTtcblx0XHR0aGlzLmlkID0gKCdpZCcgaW4gJG9wdGlvbkpzb24pID8gJycgKyAkb3B0aW9uSnNvbi5pZCA6IHNsdWdpZnkodGhpcy5uYW1lU2hvcnQpO1xuXHRcdHRoaXMuaW50SWQgPSB0eXBlb2YgJG9wdGlvbkpzb24uaWQgPT0gJ251bWJlcicgPyAkb3B0aW9uSnNvbi5pZCA6ICRvcHRpb25Kc29uLmludElkO1x0XHRcblxuXHRcdHRoaXMuZGlzcGxheUluTWVudSA9ICRvcHRpb25Kc29uLmRpc3BsYXlJbk1lbnUgIT09IGZhbHNlO1xuXHRcdHRoaXMuZGlzcGxheUluSW5mb0JhciA9ICRvcHRpb25Kc29uLmRpc3BsYXlJbkluZm9CYXIgIT09IGZhbHNlO1xuXHRcdHRoaXMuZGlzcGxheUNoaWxkcmVuSW5NZW51ID0gJG9wdGlvbkpzb24uZGlzcGxheUNoaWxkcmVuSW5NZW51ICE9PSBmYWxzZTtcblx0XHR0aGlzLmRpc3BsYXlDaGlsZHJlbkluSW5mb0JhciA9ICRvcHRpb25Kc29uLmRpc3BsYXlDaGlsZHJlbkluSW5mb0JhciAhPT0gZmFsc2U7XG5cblx0XHR0aGlzLnNob3dFeHBhbmRlZCA9ICRvcHRpb25Kc29uLnNob3dFeHBhbmRlZCB8fCBmYWxzZTtcblx0XHR0aGlzLnVuZXhwYW5kYWJsZSA9ICRvcHRpb25Kc29uLnVuZXhwYW5kYWJsZSB8fCBmYWxzZTtcblx0XHRcblx0XHR0aGlzLmNvbG9yID0gJG9wdGlvbkpzb24uY29sb3I7XG5cdFx0dGhpcy5zb2Z0Q29sb3IgPSAkb3B0aW9uSnNvbi5zb2Z0Q29sb3IgfHwgdGhpcy5jb2xvcjtcblx0XHR0aGlzLmljb24gPSAkb3B0aW9uSnNvbi5pY29uO1xuXHRcdHRoaXMudGV4dEhlbHBlciA9ICRvcHRpb25Kc29uLnRleHRIZWxwZXI7XG5cdFx0dGhpcy51c2VJY29uRm9yTWFya2VyID0gKCd1c2VJY29uRm9yTWFya2VyJyBpbiAkb3B0aW9uSnNvbikgPyAkb3B0aW9uSnNvbi51c2VJY29uRm9yTWFya2VyIDogISF0aGlzLmljb247XG5cdFx0dGhpcy51c2VDb2xvckZvck1hcmtlciA9ICgndXNlQ29sb3JGb3JNYXJrZXInIGluICRvcHRpb25Kc29uKSA/ICRvcHRpb25Kc29uLnVzZUNvbG9yRm9yTWFya2VyIDogISF0aGlzLmNvbG9yO1x0XHRcblx0fVxuXG5cdGFkZENhdGVnb3J5KCRjYXRlZ29yeSA6IENhdGVnb3J5KSB7IHRoaXMuY2hpbGRyZW4ucHVzaCgkY2F0ZWdvcnkpOyAgfVxuXG5cdGlzQ29sbGFwc2libGUoKSA6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5nZXREb20oKS5oYXNDbGFzcygnb3B0aW9uLWNvbGxhcHNpYmxlJyk7IH1cblxuXHRnZXQgc3ViY2F0ZWdvcmllcygpIDogQ2F0ZWdvcnlbXSB7IHJldHVybiA8Q2F0ZWdvcnlbXT4gdGhpcy5jaGlsZHJlbjsgfVxuXG5cdGdldCBhbGxDaGlsZHJlbk9wdGlvbnMoKSA6IE9wdGlvbltdXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5yZWN1cnNpdmVseUdldENoaWxkcmVuT3B0aW9uKHRoaXMpO1xuXHR9XG5cblx0cHJpdmF0ZSByZWN1cnNpdmVseUdldENoaWxkcmVuT3B0aW9uKHBhcmVudE9wdGlvbiA6IE9wdGlvbikgOiBPcHRpb25bXVxuXHR7XG5cdFx0bGV0IHJlc3VsdE9wdGlvbnMgOiBPcHRpb25bXSA9IFtdO1xuXHRcdGZvcihsZXQgY2F0IG9mIHBhcmVudE9wdGlvbi5zdWJjYXRlZ29yaWVzKVxuXHRcdHtcblx0XHRcdHJlc3VsdE9wdGlvbnMgPSByZXN1bHRPcHRpb25zLmNvbmNhdChjYXQub3B0aW9ucyk7XG5cdFx0XHRmb3IobGV0IG9wdGlvbiBvZiBjYXQub3B0aW9ucylcblx0XHRcdHtcblx0XHRcdFx0cmVzdWx0T3B0aW9ucyA9IHJlc3VsdE9wdGlvbnMuY29uY2F0KHRoaXMucmVjdXJzaXZlbHlHZXRDaGlsZHJlbk9wdGlvbihvcHRpb24pKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdE9wdGlvbnM7XG5cdH1cblxuXHRnZXQgcGFyZW50T3B0aW9uTmFtZSgpIDogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0T3duZXIoKSA/IHRoaXMuZ2V0T3duZXIoKS5nZXRPd25lcigpID8gdGhpcy5nZXRPd25lcigpLmdldE93bmVyKCkubmFtZSA6ICcnIDogJyc7IH1cbn0iLCIvKipcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHb0dvQ2FydG8gcHJvamVjdC5cbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNiBTZWJhc3RpYW4gQ2FzdHJvIC0gOTBzY2FzdHJvQGdtYWlsLmNvbVxuICogQGxpY2Vuc2UgR05VIEdQTCB2M1xuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAxNi0xMi0xM1xuICovXG5kZWNsYXJlIGxldCAkLCBqUXVlcnkgOiBhbnk7XG5cbmltcG9ydCB7IEFwcE1vZHVsZSwgQXBwTW9kZXMgfSBmcm9tIFwiLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0ICogYXMgQ29va2llcyBmcm9tIFwiLi4vdXRpbHMvY29va2llc1wiO1xuXG5leHBvcnQgY2xhc3MgQ3VzdG9tUG9wdXBDb21wb25lbnRcbnsgICAgXG4gIG9wdGlvbnMgOiBhbnk7XG5cbiAgaW5pdGlhbGl6ZSgpXG4gIHtcbiAgICBpZiAoIUFwcC5jb25maWcuaXNGZWF0dXJlQXZhaWxhYmxlKCdjdXN0b21Qb3B1cCcpKSByZXR1cm47XG4gICAgdGhpcy5vcHRpb25zID0gQXBwLmNvbmZpZy5mZWF0dXJlcy5jdXN0b21Qb3B1cC5vcHRpb25zO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY29va2llXCIsIHRoaXMuZ2V0Q29va2llSWQoKSwgQ29va2llcy5yZWFkQ29va2llKHRoaXMuZ2V0Q29va2llSWQoKSkpXG4gICAgaWYgKCghdGhpcy5vcHRpb25zLnNob3dPbmx5T25jZSB8fCAhQ29va2llcy5yZWFkQ29va2llKHRoaXMuZ2V0Q29va2llSWQoKSkpICYmIHRoaXMub3B0aW9ucy50ZXh0Lmxlbmd0aCA+IDApIHRoaXMuc2hvdygpO1xuICAgICQoJyNnb2dvLWN1c3RvbS1wb3B1cCAjYnRuLWNsb3NlLWN1c3RvbS1wb3B1cCcpLmNsaWNrKCAoKSA9PiB0aGlzLmhpZGUoKSk7XG4gIH1cblxuICBoaWRlKGRlbGF5IDogbnVtYmVyID0gMjUwKSB7IFxuICAgICQoJyNnb2dvLWN1c3RvbS1wb3B1cCcpLmZhZGVPdXQoZGVsYXkpOyBcbiAgICBDb29raWVzLmNyZWF0ZUNvb2tpZSh0aGlzLmdldENvb2tpZUlkKCksIHRydWUpO1xuICB9XG5cbiAgc2hvdyhkZWxheSA6IG51bWJlciA9IDQwMCkgeyAkKCcjZ29nby1jdXN0b20tcG9wdXAnKS5mYWRlSW4oZGVsYXkpOyB9XG5cbiAgZ2V0SWQoKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5pZCB8fCAwO1xuICB9XG5cbiAgZ2V0Q29va2llSWQoKSA6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBnb2dvQ3VzdG9tUG9wdXAtJHt0aGlzLmdldElkKCl9LUNsb3NlZGBcbiAgfVxufSIsImltcG9ydCB7IEFwcE1vZHVsZSwgQXBwTW9kZXMgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvdGF4b25vbXkvb3B0aW9uLmNsYXNzXCI7XG5cbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmRlY2xhcmUgbGV0ICQgOiBhbnk7XG5cbmV4cG9ydCBlbnVtIENhdGVnb3J5T3B0aW9uVHJlZU5vZGVUeXBlXG57XG5cdE9wdGlvbixcblx0Q2F0ZWdvcnlcbn1cblxuLyoqXG4qIENsYXNzIHJlcHJlc2VudGF0aW5nIGEgTm9kZSBpbiB0aGUgRGlyZWN0b3J5IE1lbnUgVHJlZVxuKlxuKiBBIENhdGVnb3J5T3B0aW9uVHJlZU5vZGUgY2FuIGJlIGEgQ2F0ZWdvcnkgb3IgYW4gT3B0aW9uXG4qL1xuZXhwb3J0IGNsYXNzIENhdGVnb3J5T3B0aW9uVHJlZU5vZGUgXG57XG5cdGlkIDogYW55O1xuXHRuYW1lIDogc3RyaW5nO1xuXHRuYW1lU2hvcnQ6IHN0cmluZztcblxuXHRkaXNwbGF5SW5NZW51IDogYm9vbGVhbjtcblx0ZGlzcGxheUluSW5mb0JhciA6IGJvb2xlYW47XG5cblx0c2hvd0V4cGFuZGVkIDogYm9vbGVhbjtcblx0dW5leHBhbmRhYmxlIDogYm9vbGVhbjtcblxuXHRjaGlsZHJlbiA6IENhdGVnb3J5T3B0aW9uVHJlZU5vZGVbXSA9IFtdO1xuXG5cdC8vIGlzIHRoZSBub2RlIGhhbid0IGJlIHRvdWNoZWQgZm9yIG5vdywgaXQncyBvbiBpdCdzIGZpcnN0IGluaXRpYWxpemVkIHN0YXRlXG5cdGlzUHJpc3RpbmUgOiBib29sZWFuID0gdHJ1ZTtcblxuXHRvd25lcklkIDogbnVtYmVyID0gbnVsbDtcblx0Ly8gbWFpbiBvcHRpb24gSWQsIG9yIFwiYWxsXCJcblx0bWFpbk93bmVySWQgOiBhbnkgPSBudWxsO1xuXG5cdGlzQ2hlY2tlZCA6IGJvb2xlYW4gPSB0cnVlO1xuXHRpc0Rpc2FibGVkIDogYm9vbGVhbiA9IGZhbHNlO1x0XHRcblxuXHRpc01haW5PcHRpb24gOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBUWVBFIDogQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZVR5cGUsIHByaXZhdGUgRE9NX0lEIDogc3RyaW5nLCBwcml2YXRlIERPTV9DSEVDS0JPWF9JRCA6IHN0cmluZywgcHJpdmF0ZSBET01fQ0hJTERSRU5fQ0xBU1MgOiBzdHJpbmcpIHt9O1xuXG5cdGdldERvbSgpIHsgcmV0dXJuICQodGhpcy5ET01fSUQgKyB0aGlzLmlkKTsgfVxuXG5cdGdldERvbUNoZWNrYm94KCkgeyByZXR1cm4gJCh0aGlzLkRPTV9DSEVDS0JPWF9JRCArIHRoaXMuaWQpOyB9XG5cblx0Z2V0RG9tQ2hpbGRyZW4oKSB7IHJldHVybiB0aGlzLmdldERvbSgpLm5leHQodGhpcy5ET01fQ0hJTERSRU5fQ0xBU1MpO31cblxuXHRnZXRPd25lcigpIDogQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZSBcblx0eyBcblx0XHRpZiAodGhpcy5UWVBFID09IENhdGVnb3J5T3B0aW9uVHJlZU5vZGVUeXBlLk9wdGlvbilcblx0XHRcdHJldHVybiBBcHAudGF4b25vbXlNb2R1bGUuZ2V0Q2F0ZWdvcnlCeUlkKHRoaXMub3duZXJJZCk7IFxuXG5cdFx0aWYgKHRoaXMuVFlQRSA9PSBDYXRlZ29yeU9wdGlvblRyZWVOb2RlVHlwZS5DYXRlZ29yeSlcblx0XHRcdHJldHVybiBBcHAudGF4b25vbXlNb2R1bGUuZ2V0T3B0aW9uQnlJZCh0aGlzLm93bmVySWQpOyBcblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHJvdGVjdGVkIGRpc2FibGVkQ2hpbGRyZW4oKSA6IENhdGVnb3J5T3B0aW9uVHJlZU5vZGVbXSB7IHJldHVybiB0aGlzLmNoaWxkcmVuLmZpbHRlciggY2hpbGQgPT4gY2hpbGQuaXNEaXNhYmxlZCk7IH1cblx0cHJvdGVjdGVkIG5vbkRpc2FibGVkQ2hpbGRyZW4oKSA6IENhdGVnb3J5T3B0aW9uVHJlZU5vZGVbXSB7IHJldHVybiB0aGlzLmNoaWxkcmVuLmZpbHRlciggY2hpbGQgPT4gIWNoaWxkLmlzRGlzYWJsZWQpOyB9XG5cdHByb3RlY3RlZCBjaGVja2VkQ2hpbGRyZW4oKSA6IENhdGVnb3J5T3B0aW9uVHJlZU5vZGVbXSB7IHJldHVybiB0aGlzLmNoaWxkcmVuLmZpbHRlciggY2hpbGQgPT4gY2hpbGQuaXNDaGVja2VkKTsgfVxuXG5cdGlzT3B0aW9uKCkgeyByZXR1cm4gdGhpcy5UWVBFID09IENhdGVnb3J5T3B0aW9uVHJlZU5vZGVUeXBlLk9wdGlvbiB9XG5cblx0c2V0Q2hlY2tlZChib29sIDogYm9vbGVhbilcblx0e1xuXHRcdHRoaXMuaXNDaGVja2VkID0gYm9vbDtcblx0XHR0aGlzLmdldERvbSgpLnRvZ2dsZUNsYXNzKFwiY2hlY2tlZFwiLCBib29sKTtcblx0XHR0aGlzLmdldERvbUNoZWNrYm94KCkucHJvcChcImNoZWNrZWRcIiwgYm9vbCk7XG5cdFx0dGhpcy5pc1ByaXN0aW5lID0gZmFsc2U7XG5cdH1cblxuXHRzZXREaXNhYmxlZChib29sIDogYm9vbGVhbilcblx0e1xuXHRcdHRoaXMuaXNEaXNhYmxlZCA9IGJvb2w7XG5cdFx0dGhpcy5nZXREb20oKS50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsIGJvb2wpO1xuXHRcdGlmIChib29sKSB0aGlzLnNldENoZWNrZWQoZmFsc2UpO1x0XHRcdFxuXHRcdHRoaXMuaXNQcmlzdGluZSA9IGZhbHNlO1xuXHR9XG5cblx0dG9nZ2xlKHZhbHVlIDogYm9vbGVhbiA9IG51bGwsIGh1bWFuQWN0aW9uIDogYm9vbGVhbiA9IHRydWUpXG5cdHtcdFx0XG5cdFx0bGV0IGNoZWNrO1xuXHRcdGlmICh2YWx1ZSAhPSBudWxsKSBjaGVjayA9IHZhbHVlO1xuXHRcdGVsc2UgY2hlY2sgPSAhdGhpcy5pc0NoZWNrZWQ7XG5cblx0XHRpZiAodGhpcy5pc09wdGlvbigpICYmIHRoaXMuaXNQcmlzdGluZSAmJiBodW1hbkFjdGlvbilcblx0XHR7XG5cdFx0XHR0aGlzLnJlY3Vyc2l2ZWx5R2V0UHJpc3RpbmUodGhpcykuZm9yRWFjaCggKG5vZGUpID0+IHtcblx0XHRcdFx0bm9kZS50b2dnbGUoZmFsc2UsIGZhbHNlKTtcblx0XHRcdH0pO1xuXHRcdFx0Ly8gZm9yY2UgY2hlY2sgdG8gdHJ1ZSwgYmVjYXN1ZSBpbiBwcmlzdGluZSBtb2RlIGlucHV0IGlzIHVuY2hlY2tlZCBidXQgb3B0aW9uIGNsYXNzIGlzIGNoZWNrZWQgYW5kIG5vdCBkaXNhYmxlZFxuXHRcdFx0Y2hlY2sgPSB0cnVlO1xuXHRcdH1cdFx0XHRcblxuXHRcdHRoaXMuc2V0Q2hlY2tlZChjaGVjayk7XG5cdFx0dGhpcy5zZXREaXNhYmxlZCghY2hlY2spO1xuXG5cdFx0aWYgKCF0aGlzLmlzTWFpbk9wdGlvbiB8fCAhQXBwLmNvbmZpZy5tZW51LnNob3dPbmVQYW5lUGVyTWFpbk9wdGlvbikgXG5cdFx0e1xuXHRcdFx0Zm9yIChsZXQgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikgY2hpbGQudG9nZ2xlKGNoZWNrLCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0aWYoaHVtYW5BY3Rpb24pXG5cdFx0e1xuXHRcdFx0aWYgKHRoaXMuZ2V0T3duZXIoKSkgdGhpcy5nZXRPd25lcigpLnVwZGF0ZVN0YXRlKCk7XG5cdFx0XHRcblx0XHRcdC8vIGRlbGF5IHRoZSB1cGRhdGUgc28gaXQncyBub3QgZnJlZXppbmcgdGhlIFVJXG5cdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7XG5cdFx0XHRcdEFwcC5lbGVtZW50c01vZHVsZS51cGRhdGVFbGVtZW50c1RvRGlzcGxheShjaGVjaywgdHJ1ZSk7XG5cdFx0XHRcdEFwcC5oaXN0b3J5TW9kdWxlLnVwZGF0ZUN1cnJTdGF0ZSgpO1xuXHRcdFx0fSwyMDApO1x0XHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0dG9nZ2xlVmlzaWJpbGl0eSh2YWx1ZSA6IGJvb2xlYW4sIHJlY3Vyc2l2ZSA6IGJvb2xlYW4gPSBmYWxzZSlcblx0e1xuXHRcdC8vY29uc29sZS5sb2coXCJ0b2dnbGUgdmlzaWJpbGl0eSBcIiwgdmFsdWUpO1xuXHRcdHRoaXMuaXNDaGVja2VkID0gdmFsdWU7XG5cblx0XHRpZiAodmFsdWUpIHRoaXMuZ2V0RG9tKCkuc2hvdygpO1xuXHRcdGVsc2UgeyB0aGlzLmdldERvbSgpLmhpZGUoKTt9XG5cblx0XHRpZiAodGhpcy5pc01haW5PcHRpb24pXG5cdFx0e1xuXHRcdFx0JCgnI21haW4tb3B0aW9uLWdvZ28taWNvbi0nICsgdGhpcy5pZCkudG9nZ2xlKHZhbHVlKTtcblx0XHR9XG5cblx0XHRpZiAodmFsdWUgJiYgdGhpcy5nZXRPd25lcigpKSB0aGlzLmdldE93bmVyKCkudG9nZ2xlVmlzaWJpbGl0eSh0cnVlKTtcblxuXHRcdGlmIChyZWN1cnNpdmUpIGZvciAobGV0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4pIGNoaWxkLnRvZ2dsZVZpc2liaWxpdHkodmFsdWUsIHRydWUpO1xuXHR9XG5cblx0dXBkYXRlU3RhdGUocHJvcGFnZSA9IHRydWUpXG5cdHtcblx0XHRpZiAodGhpcy5pc01haW5PcHRpb24gJiYgQXBwLmNvbmZpZy5tZW51LnNob3dPbmVQYW5lUGVyTWFpbk9wdGlvbikgcmV0dXJuO1x0XG5cblx0XHRpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT0gMCkgXG5cdFx0XHR0aGlzLnNldERpc2FibGVkKCF0aGlzLmlzQ2hlY2tlZCk7XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdGxldCBkaXNhYmxlZENoaWxkcmVuQ291bnQgPSB0aGlzLmNoaWxkcmVuLmZpbHRlciggKGNoaWxkIDogQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZSkgPT4gY2hpbGQuaXNEaXNhYmxlZCkubGVuZ3RoO1xuXG5cdFx0XHQvL2NvbnNvbGUubG9nKFwiT3B0aW9uIFwiICsgdGhpcy5uYW1lICsgXCIgdXBkYXRlIHN0YXRlLCBuYnJlIGNoaWxkcmVuIGRpc2FibGVkID0gXCIsIGRpc2FibGVkQ2hpbGRyZW5Db3VudCk7XG5cblx0XHRcdGlmIChkaXNhYmxlZENoaWxkcmVuQ291bnQgPT0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpXG5cdFx0XHRcdHRoaXMuc2V0RGlzYWJsZWQodHJ1ZSk7XHRcblx0XHRcdGVsc2Vcblx0XHRcdFx0dGhpcy5zZXREaXNhYmxlZChmYWxzZSk7XG5cblx0XHRcdGxldCBjaGVja2VkQ2hpbGRyZW5Db3VudCA9IHRoaXMuY2hpbGRyZW4uZmlsdGVyKCAoY2hpbGQgOiBDYXRlZ29yeU9wdGlvblRyZWVOb2RlKSA9PiBjaGlsZC5pc0NoZWNrZWQpLmxlbmd0aDtcblx0XHRcdGlmIChjaGVja2VkQ2hpbGRyZW5Db3VudCA9PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcblx0XHRcdFx0dGhpcy5zZXRDaGVja2VkKHRydWUpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR0aGlzLnNldENoZWNrZWQoZmFsc2UpXG5cdFx0fVx0XHRcblxuXHRcdGlmICh0aGlzLmdldE93bmVyKCkgJiYgcHJvcGFnZSkgdGhpcy5nZXRPd25lcigpLnVwZGF0ZVN0YXRlKCk7XHRcblx0fVxuXG5cdHJlY3Vyc2l2ZWx5VXBkYXRlU3RhdGVzKClcblx0e1xuXHRcdGZvcihsZXQgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbilcblx0XHR7XG5cdFx0XHRjaGlsZC5yZWN1cnNpdmVseVVwZGF0ZVN0YXRlcygpO1xuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlU3RhdGUoKTtcblx0fVxuXG5cdGlzRXhwYW5kZWQoKSA6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5nZXREb20oKS5oYXNDbGFzcygnZXhwYW5kZWQnKTsgfVxuXHRpc1VuZXhwYW5kYWJsZSgpIDogYm9vbGVhbiB7IHJldHVybiB0aGlzLmdldERvbSgpLmhhc0NsYXNzKCd1bmV4cGFuZGFibGUnKTsgfVxuXG5cdHRvZ2dsZUNoaWxkcmVuRGV0YWlsKClcblx0e1xuXHRcdGlmICh0aGlzLmlzVW5leHBhbmRhYmxlKCkpIHJldHVybjtcblxuXHRcdGlmICh0aGlzLmlzRXhwYW5kZWQoKSlcblx0XHR7XG5cdFx0XHR0aGlzLmdldERvbUNoaWxkcmVuKCkuc3RvcCh0cnVlLGZhbHNlKS5zbGlkZVVwKHsgZHVyYXRpb246IDM1MCwgZWFzaW5nOiBcImVhc2VPdXRRdWFydFwiLCBxdWV1ZTogZmFsc2UsIGNvbXBsZXRlOiBmdW5jdGlvbigpIHskKHRoaXMpLmNzcygnaGVpZ2h0JywgJycpO319KTtcblx0XHRcdHRoaXMuZ2V0RG9tKCkucmVtb3ZlQ2xhc3MoJ2V4cGFuZGVkJyk7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHR0aGlzLmdldERvbUNoaWxkcmVuKCkuc3RvcCh0cnVlLGZhbHNlKS5zbGlkZURvd24oeyBkdXJhdGlvbjogMzUwLCBlYXNpbmc6IFwiZWFzZU91dFF1YXJ0XCIsIHF1ZXVlOiBmYWxzZSwgY29tcGxldGU6IGZ1bmN0aW9uKCkgeyQodGhpcykuY3NzKCdoZWlnaHQnLCAnJyk7fX0pO1xuXHRcdFx0dGhpcy5nZXREb20oKS5hZGRDbGFzcygnZXhwYW5kZWQnKTtcblx0XHR9XG5cdH1cblxuXHRnZXRTaWJsaW5nc1ByaXN0aW5lKCkgOiBDYXRlZ29yeU9wdGlvblRyZWVOb2RlW11cblx0e1xuXHRcdHJldHVybiB0aGlzLmdldE93bmVyKCkuY2hpbGRyZW4uZmlsdGVyKCAobm9kZSkgPT4gbm9kZS5pc1ByaXN0aW5lICYmIG5vZGUuaWQgIT0gdGhpcy5pZCk7IFxuXHR9XG5cblx0cHJpdmF0ZSByZWN1cnNpdmVseUdldFByaXN0aW5lKGN1cnJPcHRpb24gOiBDYXRlZ29yeU9wdGlvblRyZWVOb2RlKVxuXHR7XG5cdFx0bGV0IHJlc3VsdE5vZGVzID0gW107XG5cdFx0cmVzdWx0Tm9kZXMgPSByZXN1bHROb2Rlcy5jb25jYXQoY3Vyck9wdGlvbi5nZXRTaWJsaW5nc1ByaXN0aW5lKCkpO1xuXHRcdGxldCBwYXJlbnRPcHRpb24gPSBjdXJyT3B0aW9uLmdldE93bmVyKCkuZ2V0T3duZXIoKTtcblx0XHRpZiAodGhpcy5pc01haW5PcHRpb24gfHwgQXBwLmNvbmZpZy5tZW51LnNob3dPbmVQYW5lUGVyTWFpbk9wdGlvbiAmJiBwYXJlbnRPcHRpb24uaXNNYWluT3B0aW9uKSByZXR1cm4gcmVzdWx0Tm9kZXM7XG5cdFx0ZWxzZSBpZiAocGFyZW50T3B0aW9uKSByZXN1bHROb2RlcyA9IHJlc3VsdE5vZGVzLmNvbmNhdCh0aGlzLnJlY3Vyc2l2ZWx5R2V0UHJpc3RpbmUocGFyZW50T3B0aW9uKSk7XHRcdFxuXG5cdFx0cmV0dXJuIHJlc3VsdE5vZGVzO1xuXHR9XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMTItMTNcbiAqL1xuZGVjbGFyZSBsZXQgJCwgalF1ZXJ5IDogYW55O1xuXG5pbXBvcnQgeyBBcHBNb2R1bGUgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnksIE9wdGlvbiB9IGZyb20gXCIuLi8uLi9tb2R1bGVzL3RheG9ub215L3RheG9ub215Lm1vZHVsZVwiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgRXZlbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cbmV4cG9ydCBjbGFzcyBEaXJlY3RvcnlNZW51Q29tcG9uZW50XG57XHRcdFxuXHRvcGVuTWVudSA6IGJvb2xlYW4gPSBmYWxzZTtcblx0d2lkdGggOiBudW1iZXI7XG5cdGRvbTtcblxuXHRpc1Bhbm5pbmcgOiBib29sZWFuID0gZmFsc2U7XG5cdGRyYWdUYXJnZXQ7XG5cdG92ZXJsYXk7XG5cbiAgb25TaG93ID0gbmV3IEV2ZW50PGFueT4oKTtcbiAgb25IaWRlID0gbmV3IEV2ZW50PGFueT4oKTtcblxuXHRBTklNXzUwID0ge2R1cmF0aW9uOiA1MCwgcXVldWU6IGZhbHNlLCBlYXNpbmc6ICdlYXNlT3V0RWxhc3RpYyd9O1xuXHRBTklNXzIwMCA9IHtkdXJhdGlvbjogMjAwLCBxdWV1ZTogZmFsc2UsIGVhc2luZzogJ2Vhc2VPdXRFbGFzdGljJ307XG5cdEFOSU1fMzAwID0ge2R1cmF0aW9uOiAzMDAsIHF1ZXVlOiBmYWxzZSwgZWFzaW5nOiAnZWFzZU91dEVsYXN0aWMnfTtcbiAgQU5JTV80MDAgPSB7ZHVyYXRpb246IDMwMCwgcXVldWU6IGZhbHNlLCBlYXNpbmc6ICdlYXNlT3V0RWxhc3RpYyd9O1xuXG5cdGNvbnN0cnVjdG9yKCkgeyB9XG5cblx0aW5pdGlhbGl6ZSgpXG5cdHtcdFx0XHRcdFxuXHRcdHRoaXMuZG9tID0gJCgnI2RpcmVjdG9yeS1tZW51Jyk7XG4gICAgdGhpcy5kcmFnVGFyZ2V0ID0gICQoJy5kaXJlY3RvcnktbWVudS1kcmFnLXRhcmdldCcpO1xuICAgIHRoaXMub3ZlcmxheSA9ICQoJyNkaXJlY3RvcnktbWVudS1vdmVybGF5Jyk7XG5cbiAgICB0aGlzLmRyYWdUYXJnZXQuY3NzKHsnbGVmdCc6IDB9KTsgICAgXG5cbiAgICB0aGlzLmRyYWdUYXJnZXQuY2xpY2soKCkgPT4geyB0aGlzLmhpZGUoKTsgfSk7XG4gICAgdGhpcy5vdmVybGF5LmNsaWNrKCgpID0+IHsgdGhpcy5oaWRlKCk7IH0pO1x0XG5cblx0XHQkKCcuYnRuLWNsb3NlLW1lbnUubGFyZ2Utc2NyZWVuJykudG9vbHRpcCgpO1xuXG4gICAgaWYgKEFwcC5jb21wb25lbnQuaXNNb2JpbGVTY3JlZW4oKSkge1xuICAgICAgdGhpcy5pbml0VG91Y2hNZW51KCk7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuXHR9XHRcblxuXHRzaG93KCkgXG5cdHsgICAgXG4gICAgdGhpcy5kb20uc2hvdygpO1xuICAgIHRoaXMub25TaG93LmVtaXQoKTsgICAgXG5cbiAgICB0aGlzLmRvbS52ZWxvY2l0eSh7bGVmdDogMH0sIHRoaXMuQU5JTV8yMDApOyBcbiAgICB0aGlzLm92ZXJsYXkuc2hvdygpLnZlbG9jaXR5KHtvcGFjaXR5OiAxfSwgdGhpcy5BTklNXzIwMCk7XG5cbiAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgXHRBcHAuZmlsdGVyc0NvbXBvbmVudC51cGRhdGVNYWluT3B0aW9uQmFja2dyb3VuZCgpO1x0XG5cbiAgICBcdGxldCBkcmFnVGFyZ2V0V2lkdGggPSBBcHAuY29tcG9uZW50LndpZHRoKCkgLSB0aGlzLndpZHRoICsgMjA7XG4gICAgICB0aGlzLmRyYWdUYXJnZXQuY3NzKHt3aWR0aDogZHJhZ1RhcmdldFdpZHRoICsgJ3B4JywgcmlnaHQ6IDAsIGxlZnQ6ICcnfSk7XG4gICAgICBBcHAuY29tcG9uZW50LnVwZGF0ZU1hcFNpemUoKTtcblx0XHRcdEFwcC5jb21wb25lbnQudXBkYXRlQ29tcG9uZW50c1NpemUoKTtcbiAgICB9LCA0MDApOyAgICAgXHRcdFx0XG4gIH1cblxuXHRoaWRlKCkgXG4gIHtcbiAgICB0aGlzLm9uSGlkZS5lbWl0KCk7XG5cbiAgICB0aGlzLm92ZXJsYXkudmVsb2NpdHkoe29wYWNpdHk6IDB9LCB0aGlzLkFOSU1fMzAwKTtcbiAgICB0aGlzLmRyYWdUYXJnZXQuY3NzKHt3aWR0aDogJzEwcHgnLCByaWdodDogJycsIGxlZnQ6ICcwJ30pO1xuICAgIHRoaXMuZG9tLnZlbG9jaXR5KHtsZWZ0OiAtMSAqICh0aGlzLndpZHRoICsgMjApfSwgdGhpcy5BTklNXzMwMCk7XG5cbiAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgXHR0aGlzLm92ZXJsYXkuaGlkZSgpO1xuICAgIFx0dGhpcy5kb20uaGlkZSgpOyAgIFxuXHRcdFx0XG5cdFx0XHQkKCcuc2hvdy1kaXJlY3RvcnktbWVudS1idXR0b24nKS5zaG93KCk7XHRcblx0XHRcdHRoaXMuZG9tLmZpbmQoJy50b29sdGlwcGVkJykudG9vbHRpcCgncmVtb3ZlJyk7XG5cdFx0XHQkKCcuYnRuLWNsb3NlLW1lbnUubGFyZ2Utc2NyZWVuJykuaGlkZVRvb2x0aXAoKTtcblxuXHRcdFx0QXBwLmNvbXBvbmVudC51cGRhdGVNYXBTaXplKCk7IFxuXHRcdFx0QXBwLmNvbXBvbmVudC51cGRhdGVDb21wb25lbnRzU2l6ZSgpOyBcbiAgICB9LCA0MDApOyAgICBcbiAgfVxuXG4gIGluaXRUb3VjaE1lbnUoKVxuICB7XG4gIFx0dGhpcy5kcmFnVGFyZ2V0LmhhbW1lcih7XG4gICAgICBwcmV2ZW50X2RlZmF1bHQ6IGZhbHNlXG4gICAgfSkuYmluZCgncGFuJywgKGUpID0+IFxuICAgIHtcbiAgICAgIGlmIChlLmdlc3R1cmUucG9pbnRlclR5cGUgPT0gXCJ0b3VjaFwiKSBcbiAgICAgIHtcbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGUuZ2VzdHVyZS5kaXJlY3Rpb247XG4gICAgICAgIHZhciB4ID0gZS5nZXN0dXJlLmNlbnRlci54O1xuICAgICAgICB2YXIgeSA9IGUuZ2VzdHVyZS5jZW50ZXIueTtcbiAgICAgICAgdmFyIHZlbG9jaXR5WCA9IGUuZ2VzdHVyZS52ZWxvY2l0eVg7ICBcblxuICAgICAgICAvLyBLZWVwIHdpdGhpbiBib3VuZGFyaWVzXG4gICAgICAgIGlmICh4ID4gdGhpcy53aWR0aCkgeyB4ID0gdGhpcy53aWR0aDsgfVxuICAgICAgICBlbHNlIGlmICh4IDwgMCkgeyB4ID0gMDsgfVxuXG4gICAgICAgIGlmICh4IDwgKHRoaXMud2lkdGggLyAyKSkgeyB0aGlzLm9wZW5NZW51ID0gZmFsc2U7IH1cbiAgICAgICAgZWxzZSB7IHRoaXMub3Blbk1lbnUgPSB0cnVlOyB9XG5cbiAgICAgICAgdGhpcy5kb20uY3NzKCdsZWZ0JywgKHggLSB0aGlzLndpZHRoKSkuc2hvdygpO1xuXG4gICAgICAgIC8vIFBlcmNlbnRhZ2Ugb3ZlcmxheVxuICAgICAgICB2YXIgb3ZlcmxheVBlcmM7XG4gICAgICAgIG92ZXJsYXlQZXJjID0geCAvIHRoaXMud2lkdGg7XG4gICAgICAgIHRoaXMub3ZlcmxheS5zaG93KCkudmVsb2NpdHkoe29wYWNpdHk6IG92ZXJsYXlQZXJjIH0sIHRoaXMuQU5JTV81MCk7XG5cdFx0XHR9XG5cbiAgICB9KS5iaW5kKCdwYW5lbmQnLCAoZSkgPT4ge1xuICAgICAgaWYgKGUuZ2VzdHVyZS5wb2ludGVyVHlwZSA9PSBcInRvdWNoXCIpIFxuICAgICAge1xuICAgICAgICB2YXIgdmVsb2NpdHlYID0gZS5nZXN0dXJlLnZlbG9jaXR5WDtcblxuICAgICAgICAvLyBJZiB2ZWxvY2l0eVggPD0gMC4zIHRoZW4gdGhlIHVzZXIgaXMgZmxpbmdpbmcgdGhlIG1lbnUgY2xvc2VkIHNvIGlnbm9yZSB0aGlzLm9wZW5NZW51XG4gICAgICAgIGlmICgodGhpcy5vcGVuTWVudSAmJiB2ZWxvY2l0eVggPD0gMC4zKSB8fCB2ZWxvY2l0eVggPCAtMC41KSB7IHRoaXMuc2hvdygpOyB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLm9wZW5NZW51IHx8IHZlbG9jaXR5WCA+IDAuMykgeyB0aGlzLmhpZGUoKTt9XG4gICAgICB9XG4gICAgIH0pO1xuICB9XG5cdFxuXHR1cGRhdGVTaXplKCkgXG5cdHtcbiAgICAvLyB1cGRhdGUgbWVudSB3aWR0aFxuXHRcdGxldCBtZW51d2lkdGgsIHBhZ2VXaWR0aCA9IEFwcC5jb21wb25lbnQud2lkdGgoKTtcblxuICAgIGxldCBtZW51U21hbGxXaWR0aCA9IEFwcC5jb25maWcubWVudS53aWR0aCA/IEFwcC5jb25maWcubWVudS53aWR0aCA6IDI2MDtcbiAgICBsZXQgbWVudUJpZ1dpZHRoID0gQXBwLmNvbmZpZy5tZW51LndpZHRoID8gQXBwLmNvbmZpZy5tZW51LndpZHRoIDogMjkwO1xuICAgIGlmIChBcHAuY29uZmlnLm1lbnUuc2hvd09uZVBhbmVQZXJNYWluT3B0aW9uKSB7XG4gICAgICBtZW51U21hbGxXaWR0aCArPSA1MDtcbiAgICAgIG1lbnVCaWdXaWR0aCArPSA1MDtcbiAgICB9XG5cdFx0XG5cdFx0aWYgKHBhZ2VXaWR0aCA+IDg1MCkge1xuICAgICAgbWVudXdpZHRoID0gIHBhZ2VXaWR0aCA+IDE0NTAgPyBtZW51QmlnV2lkdGggOiBtZW51U21hbGxXaWR0aDtcblx0XHR9IGVsc2Uge1xuICAgICAgbWVudXdpZHRoID0gIE1hdGgubWluKE1hdGgubWluKE1hdGgubWF4KHBhZ2VXaWR0aCAtIDYwLCBtZW51U21hbGxXaWR0aCksIG1lbnVCaWdXaWR0aCksIHBhZ2VXaWR0aCAtIDIwKTtcblx0XHR9XG5cdFx0XG5cdFx0dGhpcy5kb20uY3NzKCd3aWR0aCcsIG1lbnV3aWR0aCArICdweCcpO1xuXHRcdHRoaXMud2lkdGggPSBtZW51d2lkdGg7XG5cdFx0XG5cdFx0aWYgKG1lbnV3aWR0aCA8IDM0MCB8fCBBcHAuY29uZmlnLm1lbnUuc21hbGxXaWR0aFN0eWxlKSB0aGlzLmRvbS5hZGRDbGFzcygnc21hbGwtd2lkdGgnKTtcblx0XHRlbHNlIHRoaXMuZG9tLnJlbW92ZUNsYXNzKCdzbWFsbC13aWR0aCcpO1x0XG5cdH1cbn1cblxuXG5cblxuXG5cbiIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cbmRlY2xhcmUgbGV0ICQsIGpRdWVyeSA6IGFueTtcblxuaW1wb3J0IHsgQXBwTW9kdWxlIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IENhdGVnb3J5LCBPcHRpb24gfSBmcm9tIFwiLi4vLi4vbW9kdWxlcy90YXhvbm9teS90YXhvbm9teS5tb2R1bGVcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcblxuZXhwb3J0IGNsYXNzIEZpbHRlcnNDb21wb25lbnRcbnsgIFxuICBjdXJyZW50QWN0aXZlTWFpbk9wdGlvbklkID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgaW5pdGlhbGl6ZSgpXG4gIHsgIFxuICAgICQoJy5maWx0ZXItbWVudSAudG9vbHRpcHBlZCcpLnRvb2x0aXAoKTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyAtLS0tLS0tLS0gRkFWT1JJVEUtLS0tLS0tLS0tLS0tXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICQoJyNmaWx0ZXItZmF2b3JpdGUnKS5jbGljayhmdW5jdGlvbihlIDogRXZlbnQpXG4gICAgeyAgICAgIFxuICAgICAgbGV0IGZhdm9yaXRlQ2hlY2tib3ggPSAkKCcjZmF2b3JpdGUtY2hlY2tib3gnKTtcblxuICAgICAgbGV0IGNoZWNrVmFsdWUgPSAhZmF2b3JpdGVDaGVja2JveC5pcygnOmNoZWNrZWQnKTtcbiAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoJ2NoZWNrZWQnLCBjaGVja1ZhbHVlKTtcbiAgICAgIEFwcC5maWx0ZXJNb2R1bGUuc2hvd09ubHlGYXZvcml0ZShjaGVja1ZhbHVlKTtcblxuICAgICAgaWYgKGNoZWNrVmFsdWUpIHtcbiAgICAgICAgQXBwLmZpbHRlck1vZHVsZS5zaG93T25seVBlbmRpbmcoZmFsc2UpO1xuICAgICAgICAkKCcjcGVuZGluZy1jaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLGZhbHNlKTtcbiAgICAgICAgQXBwLmZpbHRlck1vZHVsZS5zaG93T25seU1vZGVyYXRpb24oZmFsc2UpO1xuICAgICAgICAkKCcjbW9kZXJhdGlvbi1jaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgQXBwLmVsZW1lbnRzTW9kdWxlLnVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5KHRydWUpO1xuXG4gICAgICBmYXZvcml0ZUNoZWNrYm94LnByb3AoJ2NoZWNrZWQnLGNoZWNrVmFsdWUpO1xuXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9KTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyAtLS0tLS0tLS0gUEVORElORy0tLS0tLS0tLS0tLS1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgJCgnI2ZpbHRlci1wZW5kaW5nJykuY2xpY2soZnVuY3Rpb24oZSA6IEV2ZW50KVxuICAgIHsgICAgICBcbiAgICAgIGxldCBwZW5kaW5nQ2hlY2tib3ggPSAkKCcjcGVuZGluZy1jaGVja2JveCcpO1xuXG4gICAgICBsZXQgY2hlY2tWYWx1ZSA9ICFwZW5kaW5nQ2hlY2tib3guaXMoJzpjaGVja2VkJyk7XG5cbiAgICAgIEFwcC5maWx0ZXJNb2R1bGUuc2hvd09ubHlQZW5kaW5nKGNoZWNrVmFsdWUpO1xuICAgICAgXG4gICAgICBpZiAoY2hlY2tWYWx1ZSkge1xuICAgICAgICBBcHAuZmlsdGVyTW9kdWxlLnNob3dPbmx5RmF2b3JpdGUoZmFsc2UpO1xuICAgICAgICAkKCcjZmF2b3JpdGUtY2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJyxmYWxzZSk7XG4gICAgICAgIEFwcC5maWx0ZXJNb2R1bGUuc2hvd09ubHlNb2RlcmF0aW9uKGZhbHNlKTtcbiAgICAgICAgJCgnI21vZGVyYXRpb24tY2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJyxmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIEFwcC5lbGVtZW50c01vZHVsZS51cGRhdGVFbGVtZW50c1RvRGlzcGxheSh0cnVlKTtcblxuICAgICAgcGVuZGluZ0NoZWNrYm94LnByb3AoJ2NoZWNrZWQnLGNoZWNrVmFsdWUpO1xuXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9KTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyAtLS0tLS0tLS0gTU9ERVJBSVRPTi0tLS0tLS0tLS0tLS1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgJCgnI2ZpbHRlci1tb2RlcmF0aW9uJykuY2xpY2soZnVuY3Rpb24oZSA6IEV2ZW50KVxuICAgIHsgICAgICBcbiAgICAgIGxldCBtb2RlcmF0aW9uQ2hlY2tib3ggPSAkKCcjbW9kZXJhdGlvbi1jaGVja2JveCcpO1xuXG4gICAgICBsZXQgY2hlY2tWYWx1ZSA9ICFtb2RlcmF0aW9uQ2hlY2tib3guaXMoJzpjaGVja2VkJyk7XG5cbiAgICAgIEFwcC5maWx0ZXJNb2R1bGUuc2hvd09ubHlNb2RlcmF0aW9uKGNoZWNrVmFsdWUpO1xuICAgICAgXG4gICAgICBpZiAoY2hlY2tWYWx1ZSkge1xuICAgICAgICBBcHAuZmlsdGVyTW9kdWxlLnNob3dPbmx5RmF2b3JpdGUoZmFsc2UpO1xuICAgICAgICAkKCcjZmF2b3JpdGUtY2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJyxmYWxzZSk7XG4gICAgICAgIEFwcC5maWx0ZXJNb2R1bGUuc2hvd09ubHlQZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgJCgnI3BlbmRpbmctY2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJyxmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIEFwcC5lbGVtZW50c01vZHVsZS51cGRhdGVFbGVtZW50c1RvRGlzcGxheSh0cnVlKTtcblxuICAgICAgbW9kZXJhdGlvbkNoZWNrYm94LnByb3AoJ2NoZWNrZWQnLGNoZWNrVmFsdWUpO1xuXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9KTtcblxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIC0tLS0tLSBNQUlOIE9QVElPTlMgLS0tLS0tLS0tLS1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgJCgnLm1haW4tY2F0ZWdvcmllcyAubWFpbi1pY29uJykuY2xpY2soIGZ1bmN0aW9uKGUpXG4gICAge1xuICAgICAgbGV0IG9wdGlvbklkID0gJCh0aGlzKS5hdHRyKCdkYXRhLW9wdGlvbi1pZCcpO1xuICAgICAgdGhhdC5zZXRNYWluT3B0aW9uKG9wdGlvbklkKTtcbiAgICB9KTtcblxuICAgIC8vIGZvbGxvdyBtYWluIGFjdGl2ZSBvcHRpb24gYmFja2dyb3VuZCB3aGVuIHVzZXIgc2Nyb2xsIHRocm91Z2ggbWFpbiBvcHRpb25zXG4gICAgJCgnLm1haW4tY2F0ZWdvcmllcycpLm9uKCdzY3JvbGwnLCAoKSA9PlxuICAgIHtcbiAgICAgICQoJyNhY3RpdmUtbWFpbi1vcHRpb24tYmFja2dyb3VuZCcpLmNzcygndG9wJywgJCgnI21haW4tb3B0aW9uLWdvZ28taWNvbi0nICsgdGhpcy5jdXJyZW50QWN0aXZlTWFpbk9wdGlvbklkKS5wb3NpdGlvbigpLnRvcCk7XG4gICAgfSk7XG5cbiAgICBcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyAtLS0tLS0gQ0FURUdPUklFUyAtLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICQoJy5zdWJjYXRlZ29yeS1pdGVtIC5uYW1lLXdyYXBwZXI6bm90KC51bmNoZWNrYWJsZSknKS5jbGljayhmdW5jdGlvbigpXG4gICAgeyAgICBcbiAgICAgIGxldCBjYXRlZ29yeUlkID0gJCh0aGlzKS5hdHRyKCdkYXRhLWNhdGVnb3J5LWlkJyk7XG4gICAgICBBcHAudGF4b25vbXlNb2R1bGUuZ2V0Q2F0ZWdvcnlCeUlkKGNhdGVnb3J5SWQpLnRvZ2dsZUNoaWxkcmVuRGV0YWlsKCk7XG4gICAgfSk7ICBcblxuICAgICQoJy5zdWJjYXRlZ29yeS1pdGVtIC5jaGVja2JveC13cmFwcGVyJykuY2xpY2soZnVuY3Rpb24oZSlcbiAgICB7ICAgIFxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGxldCBjYXRlZ29yeUlkID0gJCh0aGlzKS5hdHRyKCdkYXRhLWNhdGVnb3J5LWlkJyk7XG4gICAgICBBcHAudGF4b25vbXlNb2R1bGUuZ2V0Q2F0ZWdvcnlCeUlkKGNhdGVnb3J5SWQpLnRvZ2dsZSgpO1xuICAgICAgXG4gICAgfSk7ICAgICAgXG5cbiAgICAvLyBBZGQgc3VyYnJpbGxhbmNlIGluIG1haW4tY2F0ZWdvcmllcyBzaWRlYmFyIGZpbHRlcnMgbWVudSB3aGVubiBob3ZlcmluZyBhIG1haW4gY2F0ZWdvcnlcbiAgICAkKCcjbWFpbi1vcHRpb24tYWxsLnNob3ctb25lLXBhbmUtcGVyLW1haW4tb3B0aW9uIC5nb2dvLWljb24tbmFtZS13cmFwcGVyJykuaG92ZXIoIFxuICAgICAgZnVuY3Rpb24oZSA6IEV2ZW50KSB7XG4gICAgICAgIGxldCBvcHRpb25JZCA9ICQodGhpcykuYXR0cignZGF0YS1vcHRpb24taWQnKTtcbiAgICAgICAgbGV0IHNpZGViYXJJY29uID0gJCgnI21haW4tb3B0aW9uLWdvZ28taWNvbi0nICsgb3B0aW9uSWQpO1xuICAgICAgICBpZiAoIXNpZGViYXJJY29uLmhhc0NsYXNzKCdob3ZlcicpKSBzaWRlYmFySWNvbi5hZGRDbGFzcygnaG92ZXInKTtcbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbihlIDogRXZlbnQpIHtcbiAgICAgICAgbGV0IG9wdGlvbklkID0gJCh0aGlzKS5hdHRyKCdkYXRhLW9wdGlvbi1pZCcpO1xuICAgICAgICBsZXQgc2lkZWJhckljb24gPSAkKCcjbWFpbi1vcHRpb24tZ29nby1pY29uLScgKyBvcHRpb25JZCk7XG4gICAgICAgIHNpZGViYXJJY29uLnJlbW92ZUNsYXNzKCdob3ZlcicpO1xuICAgICAgfVxuICAgICk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIC0tLS0tLSBTVUIgT1BUSU9OUyAtLS0tLS0tLS0tLS1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgJCgnLnN1YmNhdGVnb3JpZS1vcHRpb24taXRlbTpub3QoI2ZpbHRlci1mYXZvcml0ZSk6bm90KCNmaWx0ZXItcGVuZGluZyk6bm90KCNmaWx0ZXItbW9kZXJhdGlvbikgLm9wdGlvbi1uYW1lJykuY2xpY2soZnVuY3Rpb24oZSA6IEV2ZW50KVxuICAgIHtcbiAgICAgIGxldCBvcHRpb25Eb20gPSAkKHRoaXMpLmNsb3Nlc3QoJy5zdWJjYXRlZ29yaWUtb3B0aW9uLWl0ZW0nKTtcbiAgICAgIGxldCBvcHRpb25JZCA9IG9wdGlvbkRvbS5hdHRyKCdkYXRhLW9wdGlvbi1pZCcpO1xuICAgICAgbGV0IG9wdGlvbiA9IEFwcC50YXhvbm9teU1vZHVsZS5nZXRPcHRpb25CeUlkKG9wdGlvbklkKTtcblxuICAgICAgaWYgKG9wdGlvbi5pc01haW5PcHRpb24gJiYgQXBwLmNvbmZpZy5tZW51LnNob3dPbmVQYW5lUGVyTWFpbk9wdGlvbikgQXBwLmZpbHRlcnNDb21wb25lbnQuc2V0TWFpbk9wdGlvbihvcHRpb24uaWQpO1xuICAgICAgZWxzZSBpZiAob3B0aW9uRG9tLmhhc0NsYXNzKCd1bmNoZWNrYWJsZScpKSByZXR1cm47XG4gICAgICBlbHNlIGlmIChvcHRpb24uaXNDb2xsYXBzaWJsZSgpKSBvcHRpb24udG9nZ2xlQ2hpbGRyZW5EZXRhaWwoKVxuICAgICAgZWxzZSBvcHRpb24udG9nZ2xlKCk7XG4gICAgfSk7XG5cbiAgICAkKCcuc3ViY2F0ZWdvcmllLW9wdGlvbi1pdGVtOm5vdCgjZmlsdGVyLWZhdm9yaXRlKTpub3QoI2ZpbHRlci1wZW5kaW5nKTpub3QoI2ZpbHRlci1tb2RlcmF0aW9uKScpLmZpbmQoJy5pY29uLCAuY2hlY2tib3gtd3JhcHBlcicpLmNsaWNrKGZ1bmN0aW9uKGUpXG4gICAgeyAgICBcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBsZXQgb3B0aW9uSWQgPSAkKHRoaXMpLmNsb3Nlc3QoJy5zdWJjYXRlZ29yaWUtb3B0aW9uLWl0ZW0nKS5hdHRyKCdkYXRhLW9wdGlvbi1pZCcpO1xuICAgICAgQXBwLnRheG9ub215TW9kdWxlLmdldE9wdGlvbkJ5SWQob3B0aW9uSWQpLnRvZ2dsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0TWFpbk9wdGlvbihvcHRpb25JZClcbiAge1xuICAgIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVNYWluT3B0aW9uSWQgPT0gb3B0aW9uSWQpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVNYWluT3B0aW9uSWQgIT0gbnVsbCkgQXBwLmVsZW1lbnRzTW9kdWxlLmNsZWFyQ3VycmVudHNFbGVtZW50KCk7XG5cbiAgICBsZXQgb2xkSWQgPSB0aGlzLmN1cnJlbnRBY3RpdmVNYWluT3B0aW9uSWQ7XG4gICAgdGhpcy5jdXJyZW50QWN0aXZlTWFpbk9wdGlvbklkID0gb3B0aW9uSWQ7XG5cbiAgICBpZiAob3B0aW9uSWQgPT0gJ2FsbCcpXG4gICAge1xuICAgICAgJCgnI21lbnUtc3ViY2F0ZWdvcmllcy10aXRsZScpLnRleHQoXCJUb3VzIGxlcyBcIiArIEFwcC5jb25maWcudGV4dC5lbGVtZW50UGx1cmFsKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGxldCBtYWluT3B0aW9uID0gQXBwLnRheG9ub215TW9kdWxlLmdldE1haW5PcHRpb25CeUlkKG9wdGlvbklkKTsgICAgICAgIFxuXG4gICAgICAkKCcjbWVudS1zdWJjYXRlZ29yaWVzLXRpdGxlJykudGV4dChtYWluT3B0aW9uLm5hbWUpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTWFpbk9wdGlvbkJhY2tncm91bmQoKTtcblxuICAgIEFwcC5pbmZvQmFyQ29tcG9uZW50LmhpZGUoKTtcblxuICAgIC8vY29uc29sZS5sb2coXCJzZXRNYWluT3B0aW9uSWQgXCIgKyBvcHRpb25JZCArIFwiIC8gb2xkT3B0aW9uIDogXCIgKyBvbGRJZCk7XG4gICAgaWYgKG9sZElkICE9IG51bGwpIEFwcC5oaXN0b3J5TW9kdWxlLnVwZGF0ZUN1cnJTdGF0ZSgpO1xuXG4gICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgQXBwLmVsZW1lbnRMaXN0Q29tcG9uZW50LnJlSW5pdGlhbGl6ZUVsZW1lbnRUb0Rpc3BsYXlMZW5ndGgoKTtcbiAgICBcbiAgICAgIEFwcC5ib3VuZHNNb2R1bGUudXBkYXRlRmlsbGVkQm91bmRzQWNjb3JkaW5nVG9OZXdNYWluT3B0aW9uSWQoKTtcbiAgICAgIEFwcC5lbGVtZW50c01hbmFnZXIuY2hlY2tGb3JOZXdFbGVtZW50c1RvUmV0cmlldmUoKTtcbiAgICAgIEFwcC5lbGVtZW50c01vZHVsZS51cGRhdGVFbGVtZW50c1RvRGlzcGxheSh0cnVlLHRydWUpO1xuICAgIH0sIDQwMCk7ICAgIFxuICB9XG5cbiAgLy8gdGhlIG1haW4gb3B0aW9uIHNlbGVjdGVkIGdvdCBhIHNwZWNpZmljIGJhY2tncm91bmQsIHdobyBjYW4gdmVydGljYWxseSB0cmFuc2xhdGVcbiAgdXBkYXRlTWFpbk9wdGlvbkJhY2tncm91bmQoKVxuICB7XG4gICAgbGV0IG9wdGlvbklkID0gdGhpcy5jdXJyZW50QWN0aXZlTWFpbk9wdGlvbklkOyAgICBcblxuICAgICQoJy5tYWluLW9wdGlvbi1zdWJjYXRlZ29yaWVzLWNvbnRhaW5lcjpub3QoI21haW4tb3B0aW9uLScgKyBvcHRpb25JZCArICcpJykuaGlkZSgpO1xuICAgICQoJyNtYWluLW9wdGlvbi0nICsgb3B0aW9uSWQpLmZhZGVJbig0MDApO1xuXG4gICAgJCgnLm1haW4tY2F0ZWdvcmllcyAubWFpbi1pY29uJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICQoJyNtYWluLW9wdGlvbi1nb2dvLWljb24tJyArIG9wdGlvbklkKS5hZGRDbGFzcygnYWN0aXZlJyk7XG5cbiAgICBpZighJCgnI21haW4tb3B0aW9uLWdvZ28taWNvbi0nICsgb3B0aW9uSWQpLnBvc2l0aW9uKCkpIHsgcmV0dXJuOyB9XG5cbiAgICAkKCcjYWN0aXZlLW1haW4tb3B0aW9uLWJhY2tncm91bmQnKS5hbmltYXRlKHt0b3A6ICQoJyNtYWluLW9wdGlvbi1nb2dvLWljb24tJyArIG9wdGlvbklkKS5wb3NpdGlvbigpLnRvcH0sIDQwMCwgJ2Vhc2VPdXRRdWFydCcpO1xuICB9XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMTItMTNcbiAqL1xuXG5kZWNsYXJlIGxldCBncmVjYXB0Y2hhO1xuZGVjbGFyZSB2YXIgJCA6IGFueTtcbmRlY2xhcmUgbGV0IFJvdXRpbmcgOiBhbnk7XG5cbmltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzLCBBcHBNb2RlcyB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuXG5pbXBvcnQgeyBjYXBpdGFsaXplLCBzbHVnaWZ5IH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5pbXBvcnQgeyBTdGFtcENvbXBvbmVudCB9IGZyb20gJy4vc3RhbXAuY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRNZW51Q29tcG9uZW50XG57XG5cdHByaXZhdGUgZG9tO1xuXHRwcml2YXRlIGVsZW1lbnQgOiBFbGVtZW50O1xuXG5cdGNvbnN0cnVjdG9yKGRvbSA6IGFueSwgZWxlbWVudCA6IEVsZW1lbnQpXG5cdHtcblx0XHR0aGlzLmRvbSA9ICQoZG9tKTsgIFxuXHRcdHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdFx0dGhpcy51cGRhdGVGYXZvcml0ZUljb24oKTtcblx0fVxuXG5cdHVwZGF0ZUZhdm9yaXRlSWNvbigpXG5cdHtcblx0XHR0aGlzLmRvbS5maW5kKCcuaXRlbS1hZGQtZmF2b3JpdGUnKS50b2dnbGUoIXRoaXMuZWxlbWVudC5pc0Zhdm9yaXRlKTtcblx0XHR0aGlzLmRvbS5maW5kKCcuaXRlbS1yZW1vdmUtZmF2b3JpdGUnKS50b2dnbGUodGhpcy5lbGVtZW50LmlzRmF2b3JpdGUpO1xuXHR9XG5cblx0c2hvd0Z1bGxUZXh0TWVudShib29sIDogYm9vbGVhbilcblx0e1xuXHRcdGlmIChib29sKVxuXHRcdHtcblx0XHRcdHRoaXMuZG9tLmFkZENsYXNzKFwiZnVsbC10ZXh0XCIpO1xuXHRcdFx0dGhpcy5kb20uZmluZCgnLnRvb2x0aXBwZWQnKS50b29sdGlwKCdyZW1vdmUnKTtcdFxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0dGhpcy5kb20ucmVtb3ZlQ2xhc3MoXCJmdWxsLXRleHRcIik7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpbml0aWFsaXplKClcblx0e1xuXHRcdHRoaXMuZG9tLmZpbmQoJy50b29sdGlwcGVkJykudG9vbHRpcCgpO1x0XHRcblx0XHRsZXQgdGhhdCA9IHRoaXM7XG5cdFx0XG5cdFx0Ly8gU1RBTVBTXG5cdFx0dGhpcy5kb20uZmluZCgnLml0ZW0tc3RhbXAnKS5lYWNoKCgpID0+IHsgbmV3IFN0YW1wQ29tcG9uZW50KHRoaXMsIHRoYXQuZWxlbWVudCk7IH0pO1xuXG5cdFx0Ly8gREVMRVRFXG5cdFx0dGhpcy5kb20uZmluZCgnLml0ZW0tZGVsZXRlJykuY2xpY2soKCkgPT4geyBBcHAuZGVsZXRlQ29tcG9uZW50Lm9wZW4odGhpcy5lbGVtZW50KTsgfSk7XG5cblx0XHQvLyBSRVBPUlRcblx0XHR0aGlzLmRvbS5maW5kKCcuaXRlbS1yZXBvcnQnKS5jbGljaygoKSA9PiB7IEFwcC5yZXBvcnRDb21wb25lbnQub3Blbih0aGlzLmVsZW1lbnQpOyB9KTtcblxuXHRcdC8vIERJUkVDVElPTlNcblx0XHR0aGlzLmRvbS5maW5kKCcuaXRlbS1kaXJlY3Rpb25zJykuY2xpY2soKCkgPT5cblx0XHR7XG5cdFx0XHR0aGlzLmRvbS5maW5kKCcubWVudS1pY29uJykuaGlkZVRvb2x0aXAoKTtcblxuXHRcdFx0aWYgKCFBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb24oKSkgQXBwLnBpY2tBZGRyZXNzQ29tcG9uZW50Lm9wZW4odGhpcy5lbGVtZW50KTtcblx0XHRcdGVsc2UgQXBwLnNldFN0YXRlKEFwcFN0YXRlcy5TaG93RGlyZWN0aW9ucyx7aWQ6IHRoaXMuZWxlbWVudC5pZH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gU0hPVyBPTiBNQVBcblx0XHR0aGlzLmRvbS5maW5kKCcuaXRlbS1zaG93LW9uLW1hcCcpLmNsaWNrKCgpID0+IFxuXHRcdHtcblx0XHRcdHRoaXMuZG9tLmZpbmQoJy5tZW51LWljb24nKS5oaWRlVG9vbHRpcCgpO1xuXHRcdFx0QXBwLnNldFN0YXRlKEFwcFN0YXRlcy5TaG93RWxlbWVudCAse2lkOiB0aGlzLmVsZW1lbnQuaWR9KTtcblx0XHR9KTtcblxuXHRcdC8vIFNIQVJFXG5cdFx0dGhpcy5kb20uZmluZCgnLml0ZW0tc2hhcmUnKS5jbGljaygoKSA9PlxuXHRcdHtcdFx0XG5cdFx0XHRsZXQgbW9kYWwgPSAkKCcjbW9kYWwtc2hhcmUtZWxlbWVudCcpO1xuXHRcdFx0bW9kYWwuZmluZChcIi5tb2RhbC1mb290ZXJcIikuYXR0cignb3B0aW9uLWlkJywgdGhpcy5lbGVtZW50LmNvbG9yT3B0aW9uSWQpO1xuXG5cdFx0XHRsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSBcblx0XHRcdHVybCArPSBBcHAucm91dGVyTW9kdWxlLmdlbmVyYXRlKCdzaG93X2VsZW1lbnQnLCB7IG5hbWUgOiAgY2FwaXRhbGl6ZShzbHVnaWZ5KHRoaXMuZWxlbWVudC5uYW1lKSksIGlkIDogdGhpcy5lbGVtZW50LmlkIH0sIHRydWUpO1x0XG5cblx0XHRcdG1vZGFsLmZpbmQoJy5pbnB1dC1zaW1wbGUtbW9kYWwnKS52YWwodXJsKTtcblx0XHRcdG1vZGFsLm9wZW5Nb2RhbCgpO1xuXHRcdH0pO1x0XG5cdFx0XG5cdFx0Ly8gRkFWT1JJVEVcblx0XHR0aGlzLmRvbS5maW5kKCcuaXRlbS1hZGQtZmF2b3JpdGUnKS5jbGljaygoKSA9PiBcblx0XHR7XG5cdFx0XHRBcHAuZmF2b3JpdGVNb2R1bGUuYWRkRmF2b3JpdGUodGhpcy5lbGVtZW50LmlkKTtcblx0XHRcdHRoaXMudXBkYXRlRmF2b3JpdGVJY29uKCk7XG5cdFx0XHRpZiAoQXBwLm1vZGUgPT0gQXBwTW9kZXMuTWFwKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQubWFya2VyLnVwZGF0ZSgpO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQubWFya2VyLmFuaW1hdGVEcm9wKCk7XHRcdFx0XG5cdFx0XHR9XHRcdFx0XG5cdFx0fSk7XHRcdFxuXHRcdHRoaXMuZG9tLmZpbmQoJy5pdGVtLXJlbW92ZS1mYXZvcml0ZScpLmNsaWNrKCgpID0+IFxuXHRcdHtcdFx0XG5cdFx0XHRBcHAuZmF2b3JpdGVNb2R1bGUucmVtb3ZlRmF2b3JpdGUodGhpcy5lbGVtZW50LmlkKTtcdFx0XHRcblx0XHRcdHRoaXMudXBkYXRlRmF2b3JpdGVJY29uKCk7XG5cdFx0XHRpZiAoQXBwLm1vZGUgPT0gQXBwTW9kZXMuTWFwKSB0aGlzLmVsZW1lbnQubWFya2VyLnVwZGF0ZSgpO1xuXHRcdH0pO1x0XG5cdH1cdFxufVxuIiwiICBpbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgeyBBcHBNb2R1bGUsIEFwcFN0YXRlcywgQXBwTW9kZXMgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgRWxlbWVudFN0YXR1cywgRWxlbWVudE1vZGVyYXRpb25TdGF0ZSB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCB7IEltYWdlc0NvbXBvbmVudCB9IGZyb20gJy4vaW1hZ2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbGVtZW50TWVudUNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnQtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7IE1vZGVyYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9lbGVtZW50L21vZGVyYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEludGVyYWN0aXZlU2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vaW50ZXJhY3RpdmUtc2VjdGlvbi5jb21wb25lbnQnO1xuZGVjbGFyZSB2YXIgJDtcbmRlY2xhcmUgdmFyIG51bmp1Y2tzO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudENvbXBvbmVudFxue1xuICBlbGVtZW50IDogRWxlbWVudDsgIFxuICBpbWFnZXNDb21wb25lbnQgOiBJbWFnZXNDb21wb25lbnQ7XG4gIG1lbnVDb21wb25lbnQgOiBFbGVtZW50TWVudUNvbXBvbmVudDtcbiAgbW9kZXJhdGlvbkNvbXBvbmVudCA6IE1vZGVyYXRpb25Db21wb25lbnQ7XG4gIGludGVyYWN0aXZlQ29tcG9uZW50IDogSW50ZXJhY3RpdmVTZWN0aW9uQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQgOiBFbGVtZW50KVxuICB7XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgfVxuXG4gIC8vIHVzZSB0ZW1wbGF0ZSBqcyB0byBjcmVhdGUgdGhlIGh0bWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVsZW1lbnRcbiAgLy8gdGhlbiB0aGlzIGh0bWwgcmVwcmVzZW50YXRpb24gaXMgaW5zZXJ0ZWQgaW4gdGhlIGRvbSBieSBhbm90aGVyIGNvbXBvbmVudCAobGlrZSBpbmZvLWJhciwgb3IgbGlzdCBjb21wb25lbnQpXG4gIHJlbmRlcigpIFxuICB7ICBcbiAgICBpZiAoIXRoaXMuZWxlbWVudC5pc0Z1bGx5TG9hZGVkKSB7IHJldHVybjsgfVxuXG4gICAgdGhpcy5lbGVtZW50LnVwZGF0ZSgpO1xuICAgIHRoaXMuZWxlbWVudC51cGRhdGVEaXN0YW5jZSgpO1xuXG4gICAgbGV0IG9wdGlvbnNUb0Rpc3BsYXkgPSB0aGlzLmVsZW1lbnQuZ2V0SWNvbnNUb0Rpc3BsYXkoKTtcblxuICAgIGxldCByb290Q2F0ZWdvcmllc1ZhbHVlcztcbiAgICBpZiAodGhpcy5lbGVtZW50LnN0YXR1cyA9PSBFbGVtZW50U3RhdHVzLlBlbmRpbmdNb2RpZmljYXRpb24gJiYgdGhpcy5lbGVtZW50Lm1vZGlmaWVkRWxlbWVudCkgIFxuICAgICAgcm9vdENhdGVnb3JpZXNWYWx1ZXMgPSB0aGlzLmVsZW1lbnQubW9kaWZpZWRFbGVtZW50LmdldFJvb3RDYXRlZ29yaWVzVmFsdWVzKCk7XG4gICAgZWxzZVxuICAgICAgcm9vdENhdGVnb3JpZXNWYWx1ZXMgPSB0aGlzLmVsZW1lbnQuZ2V0Um9vdENhdGVnb3JpZXNWYWx1ZXMoKTtcbiAgICBcbiAgICBsZXQgb3B0aW9ucyA9IHtcbiAgICAgIGVsZW1lbnQgOiB0aGlzLmVsZW1lbnQsIFxuICAgICAgc2hvd0Rpc3RhbmNlOiBBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb24oKSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGxpc3RpbmdNb2RlOiBBcHAubW9kZSA9PSBBcHBNb2Rlcy5MaXN0LCBcbiAgICAgIG9wdGlvbnNUb0Rpc3BsYXk6IG9wdGlvbnNUb0Rpc3BsYXksXG4gICAgICBtYWluT3B0aW9uVG9EaXNwbGF5OiBvcHRpb25zVG9EaXNwbGF5WzBdLCBcbiAgICAgIG90aGVyT3B0aW9uc1RvRGlzcGxheTogb3B0aW9uc1RvRGlzcGxheS5zbGljZSgxKSwgIFxuICAgICAgY3Vyck9wdGlvbnNWYWx1ZXM6IHRoaXMuZWxlbWVudC5nZXRDdXJyRGVlcGVzdE9wdGlvbnNWYWx1ZXMoKS5maWx0ZXIoIChvVikgPT4gb1Yub3B0aW9uLmRpc3BsYXlJbkluZm9CYXIpLnNvcnQoIChhLGIpID0+IGEuaXNGaWxsZWRCeUZpbHRlcnMgPyAtMSA6IDEpLCAgICAgIFxuICAgICAgcm9vdENhdGVnb3JpZXNWYWx1ZXMgOiByb290Q2F0ZWdvcmllc1ZhbHVlcyxcbiAgICAgIGVkaXRVcmwgOiBBcHAuY29uZmlnLmZlYXR1cmVzLmVkaXQudXJsICsgdGhpcy5lbGVtZW50LmlkLFxuICAgICAgRWxlbWVudFN0YXR1czogRWxlbWVudFN0YXR1cyxcbiAgICAgIEVsZW1lbnRNb2RlcmF0aW9uU3RhdGU6IEVsZW1lbnRNb2RlcmF0aW9uU3RhdGUsXG4gICAgICBpc0lmcmFtZSA6IEFwcC5pc0lmcmFtZSxcbiAgICAgIGlzTWFwTW9kZSA6IEFwcC5tb2RlID09IEFwcE1vZGVzLk1hcCxcbiAgICAgIGNvbmZpZyA6IEFwcC5jb25maWcsXG4gICAgICBzbWFsbFdpZHRoIDogQXBwLm1vZGUgPT0gQXBwTW9kZXMuTWFwICYmIEFwcC5pbmZvQmFyQ29tcG9uZW50LmlzRGlzcGxheWVkQXNpZGUoKSxcbiAgICAgIGFsbG93ZWRTdGFtcHMgOiBBcHAuc3RhbXBNb2R1bGUuYWxsb3dlZFN0YW1wcyxcbiAgICAgIGJvZHkgOiB1bmRlZmluZWRcbiAgICB9O1xuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSBib2R5IHRlbXBsYXRlIGNvbmZpZ3VyZWQsIHRoZW4gd2UgdXNlIGl0LiBXZSB1c2UgdGhlIGRlZmF1bHQgYm9keSBvdGhlcndpc2UuXG4gICAgaWYgKEFwcC5jb25maWcuaW5mb2Jhci5ib2R5VGVtcGxhdGUpIFxuICAgIHtcbiAgICAgIG9wdGlvbnMuYm9keSA9IG51bmp1Y2tzLnJlbmRlclN0cmluZyhBcHAuY29uZmlnLmluZm9iYXIuYm9keVRlbXBsYXRlLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgb3B0aW9ucy5ib2R5ID0gb3B0aW9ucy5ib2R5LnJlcGxhY2UoLyZhbXA7L2csIFwiJlwiKS5yZXBsYWNlKC8mZ3Q7L2csIFwiPlwiKS5yZXBsYWNlKC8mbHQ7L2csIFwiPFwiKS5yZXBsYWNlKC8mcXVvdDsvZywgJ1wiJyk7XG4gICAgfVxuICAgIGVsc2Ugb3B0aW9ucy5ib2R5ID0gbnVuanVja3MucmVuZGVyKCdjb21wb25lbnRzL2VsZW1lbnQvYm9keS5odG1sLm5qaycsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGh0bWwgPSBBcHAudGVtcGxhdGVNb2R1bGUucmVuZGVyKCdlbGVtZW50Jywgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfTtcblxuICBnZXQgZG9tKCkgeyByZXR1cm4gQXBwLm1vZGUgPT0gQXBwTW9kZXMuTGlzdCA/ICQoYCNkaXJlY3RvcnktY29udGVudC1saXN0ICNlbGVtZW50LWluZm8tJHt0aGlzLmVsZW1lbnQuaWR9YCkgOiAkKGAjZWxlbWVudC1pbmZvLSR7dGhpcy5lbGVtZW50LmlkfWApOyB9XG5cbiAgLy8gb25jZSB0aGUgaHRtbCByZW5kZXJlZCBpcyBpbnNlcnRlZCBpbiB0aGUgZG9tLCB3ZSBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QgdG8gaW5pdGlhbGl6IHZhcmlvdXMgaW50ZXJhY3Rpb25zIGFuZCBzdWJjb21wb25lbnRzXG4gIGluaXRpYWxpemUoKVxuICB7XG4gICAgdGhpcy5pbWFnZXNDb21wb25lbnQgPSBuZXcgSW1hZ2VzQ29tcG9uZW50KHRoaXMuZG9tLCB0aGlzLmVsZW1lbnQpOyAgICBcbiAgICB0aGlzLm1lbnVDb21wb25lbnQgPSBuZXcgRWxlbWVudE1lbnVDb21wb25lbnQodGhpcy5kb20uZmluZCgnLm1lbnUtZWxlbWVudCcpLCB0aGlzLmVsZW1lbnQpO1xuICAgIHRoaXMubW9kZXJhdGlvbkNvbXBvbmVudCA9IG5ldyBNb2RlcmF0aW9uQ29tcG9uZW50KHRoaXMuZG9tLmZpbmQoJy5pbnRlcmFjdGl2ZS1zZWN0aW9uJyksIHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNvbXBvbmVudCA9IG5ldyBJbnRlcmFjdGl2ZVNlY3Rpb25Db21wb25lbnQodGhpcy5kb20uZmluZCgnLmludGVyYWN0aXZlLXNlY3Rpb24nKSwgdGhpcy5lbGVtZW50KTtcblxuICAgIHRoaXMuZG9tLmZpbmQoJy5zZW5kLW1haWwtYnRuJykuY2xpY2soICgpID0+IEFwcC5zZW5kRW1haWxDb21wb25lbnQub3Blbih0aGlzLmVsZW1lbnQpKTtcblxuICAgIC8vIFNIT1cgTE9ORyBERVNDUklQVElPTiBCVVRUT05cbiAgICB0aGlzLmRvbS5maW5kKCcuc2hvdy1tb3JlLWRlc2NyaXB0aW9uJykuY2xpY2soIGZ1bmN0aW9uKCkgXG4gICAgeyBcbiAgICAgIGxldCBkZXNjcmlwdGlvbk1vcmUgPSAkKHRoaXMpLnNpYmxpbmdzKCcuZGVzY3JpcHRpb24tbW9yZScpO1xuICAgICAgbGV0IHRleHRCdXR0b24gPSBkZXNjcmlwdGlvbk1vcmUuaXMoXCI6dmlzaWJsZVwiKSA/IFwiQWZmaWNoZXIgcGx1c1wiIDogXCJBZmZpY2hlciBtb2luc1wiO1xuICAgICAgZGVzY3JpcHRpb25Nb3JlLnRvZ2dsZSgpOyAgICBcbiAgICAgICQodGhpcykudGV4dCh0ZXh0QnV0dG9uKTtcbiAgICB9KTtcblxuICAgIC8vIElOSVQgVEFCUyAoZm9yIGFkbWluIHNlY3Rpb24pXG4gICAgc2V0VGltZW91dCggKCkgPT4geyB0aGlzLmRvbS5maW5kKCcuaW5mby1iYXItdGFicycpLnRhYnMoKTsgfSwgMTAwKTtcbiAgfVxuXG4gIGFkZEZsYXNoTWVzc2FnZShtZXNzYWdlKSB7IHRoaXMuaW50ZXJhY3RpdmVDb21wb25lbnQuYWRkRmxhc2hNZXNzYWdlKG1lc3NhZ2UpOyB9XG59IiwiZGVjbGFyZSB2YXIgJCA6IGFueTtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEVsZW1lbnQsIEV2ZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuXG5leHBvcnQgY2xhc3MgSW1hZ2VzQ29tcG9uZW50XG57XG4gIHByaXZhdGUgZG9tO1xuICBwcml2YXRlIGVsZW1lbnQgOiBFbGVtZW50O1xuXG4gIGluZGV4Q3VycmVudEltYWdlIDogbnVtYmVyID0gMDtcbiAgZG9tSW1hZ2VzIDogYW55O1xuICBvbk5ld0ltYWdlRGlzcGxheWVkID0gbmV3IEV2ZW50PGFueT4oKTtcblxuICBjb25zdHJ1Y3Rvcihkb20gOiBhbnksIGVsZW1lbnQgOiBFbGVtZW50KVxuICB7XG4gICAgdGhpcy5kb20gPSAkKGRvbSk7ICBcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBnZXQgY3VycmVudEltYWdlKCkgeyByZXR1cm4gdGhpcy5kb21JbWFnZXMgPyB0aGlzLmRvbUltYWdlcy5lcSh0aGlzLmluZGV4Q3VycmVudEltYWdlKSA6IG51bGw7IH1cblxuICBwcml2YXRlIGluaXRpYWxpemUoKVxuICB7XG4gICAgaWYgKHRoaXMuZWxlbWVudC5pbWFnZXMubGVuZ3RoID4gMCkgdGhpcy5pbml0SW1hZ2VzKCk7XG4gICAgaWYgKHRoaXMuZWxlbWVudC5pbWFnZXMubGVuZ3RoID4gMSkgdGhpcy5pbml0TmF2aWdhdGlvbkJ1dHRvbnMoKTtcbiAgfSAgXG5cbiAgcHJpdmF0ZSBpbml0SW1hZ2VzKClcbiAge1xuICAgIHRoaXMuZG9tSW1hZ2VzID0gdGhpcy5kb20uZmluZCgnLmltZy1jb250YWluZXIgaW1nJyk7ICBcbiAgICAvLyBmaXJzdCB1cGRhdGUgdG8gZGlzcGxheSBmaXJzdCBpbWFnZVxuICAgIHRoaXMudXBkYXRlSW1hZ2UoKTtcblxuICAgIC8vIERpc3BsYXkgYmlnZ2VyIGltYWdlIGluIGEgbW9kYWwgb24gY2xpY2tcbiAgICB0aGlzLmRvbS5maW5kKCcuaW1nLWNsaWNrYWJsZS1hcmVhJykuY2xpY2soKCkgPT5cbiAgICB7XG4gICAgICAvLyBkb24ndCBkaXNwbGF5IG1vZGFsIGluIHNtYWxsIHNjcmVlblxuICAgICAgaWYgKEFwcC5jb21wb25lbnQud2lkdGgoKSA8IDgwMCkgcmV0dXJuO1xuICAgICAgXG4gICAgICAvLyBXaGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgaW1hZ2UsIG9wZW5zIGEgbmV3IG1vZGFsIHdpdGggdGhlIGltYWdlXG4gICAgICBsZXQgbW9kYWwgPSAkKCcjbW9kYWwtaW1hZ2UnKTtcbiAgICAgIG1vZGFsLmZpbmQoXCIubW9kYWwtZm9vdGVyXCIpLmF0dHIoJ29wdGlvbi1pZCcsIHRoaXMuZWxlbWVudC5jb2xvck9wdGlvbklkKTtcbiAgICAgIG1vZGFsLmZpbmQoJ2ltZycpLmF0dHIoJ3NyYycsIHRoaXMuY3VycmVudEltYWdlWzBdLnNyYyk7XG4gICAgICBtb2RhbC5vcGVuTW9kYWwoKTtcbiAgICB9KTsgICBcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE5hdmlnYXRpb25CdXR0b25zKClcbiAge1xuICAgIGxldCBuYXZCdG5zID0gdGhpcy5kb20uZmluZCgnLmltZy1uYXZpZ2F0aW9uLWJ0bi5uZXh0LCAuaW1nLW5hdmlnYXRpb24tYnRuLnByZXYnKTtcbiAgICBuYXZCdG5zLmNzcygnb3BhY2l0eScsIDApLnNob3coKS5hbmltYXRlKHtvcGFjaXR5OiAxfSwgMzAwKTtcblxuICAgIC8vIG5hdmlnYXRpb24gdGhyb3VnaHQgaW1hZ2VzXG4gICAgdGhpcy5kb20uZmluZCgnLmltZy1uYXZpZ2F0aW9uLWJ0bi5uZXh0JykuY2xpY2soKCkgPT4ge1xuICAgICAgdGhpcy5pbmRleEN1cnJlbnRJbWFnZSsrO1xuICAgICAgdGhpcy51cGRhdGVJbWFnZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kb20uZmluZCgnLmltZy1uYXZpZ2F0aW9uLWJ0bi5wcmV2JykuY2xpY2soKCkgPT4ge1xuICAgICAgdGhpcy5pbmRleEN1cnJlbnRJbWFnZS0tO1xuICAgICAgdGhpcy51cGRhdGVJbWFnZSgpO1xuICAgIH0pOyAgICAgICBcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW1hZ2UoKVxuICB7ICAgICAgICAgIFxuICAgIC8vIG1vZHVsbyBpbmRleCBpbnNpZGUgcHJvcGVyIHJhbmdlXG4gICAgdGhpcy5pbmRleEN1cnJlbnRJbWFnZSA9ICh0aGlzLmluZGV4Q3VycmVudEltYWdlICsgdGhpcy5lbGVtZW50LmltYWdlcy5sZW5ndGgpICUgdGhpcy5lbGVtZW50LmltYWdlcy5sZW5ndGg7XG4gICAgLy8gSGlkZSBhbGwgaW1hZ2VzXG4gICAgdGhpcy5kb21JbWFnZXMuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAvLyBEaXNwbGF5IHRoZSBpbWFnZSBvZiB0aGUgZ2l2ZW4gaW5kZXhcbiAgICB0aGlzLmN1cnJlbnRJbWFnZS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsgICAgICAgIFxuXG4gICAgLy8gdHJpZ2dlciBldmVudCB0byB3YXJuIG90aGVyIGNvbXBvbmVudHMgdGhhdCBpbWFnZSBhcyBjaGFuZ2VkXG4gICAgaWYgKHRoaXMuY3VycmVudEltYWdlLmhlaWdodCgpKSB0aGlzLm9uSW1hZ2VEaXNwbGF5ZWQoKTsgICAgXG4gICAgZWxzZSB0aGlzLmN1cnJlbnRJbWFnZS5sb2FkKCgpID0+IHsgdGhpcy5vbkltYWdlRGlzcGxheWVkKCk7IH0pOyAgICAgIFxuICB9O1xuXG4gIHByaXZhdGUgb25JbWFnZURpc3BsYXllZCgpXG4gIHtcbiAgICB0aGlzLm9uTmV3SW1hZ2VEaXNwbGF5ZWQuZW1pdCh0aGlzLmN1cnJlbnRJbWFnZSk7XG4gICAgdGhpcy52ZXJ0aWNhbEFsaWduQ3VycmVudEltYWdlKCk7XG4gIH1cblxuICB2ZXJ0aWNhbEFsaWduQ3VycmVudEltYWdlKClcbiAge1xuICAgIGlmICghdGhpcy5jdXJyZW50SW1hZ2UpIHJldHVybjtcblxuICAgIGxldCBpbWdCYW5uZXJIZWlnaHQgPSB0aGlzLmRvbS5maW5kKCcuaW1nLW92ZXJsYXknKS5oZWlnaHQoKTtcbiAgICAvLyBpZiBjb21wb25lbnQgbm90IHlldCBsb2FkZWQsIHRpbWVvdXQgdGhlIHVwZGF0ZVxuICAgIGlmIChpbWdCYW5uZXJIZWlnaHQgPT0gMCkge1xuICAgICAgc2V0VGltZW91dCggKCkgPT4gdGhpcy52ZXJ0aWNhbEFsaWduQ3VycmVudEltYWdlKCksIDEwMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY3VycmVudEltYWdlLmNzcygnbWFyZ2luLXRvcCcsIDApO1xuICAgIGxldCBtYXJnaW5Ub3AgPSAoaW1nQmFubmVySGVpZ2h0IC0gdGhpcy5jdXJyZW50SW1hZ2UuaGVpZ2h0KCkpIC8gMjtcbiAgICBpZiAobWFyZ2luVG9wID4gMCkgbWFyZ2luVG9wID0gMDtcbiAgICB0aGlzLmN1cnJlbnRJbWFnZS5hbmltYXRlKHttYXJnaW5Ub3A6IGAke21hcmdpblRvcH1weGB9LCA0MDApO1xuICB9XG59IiwiZGVjbGFyZSB2YXIgJCA6IGFueTtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEVsZW1lbnQsIEVsZW1lbnRTdGF0dXMgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGl2ZVNlY3Rpb25Db21wb25lbnRcbntcbiAgcHJpdmF0ZSBkb207XG4gIHByaXZhdGUgZWxlbWVudCA6IEVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoZG9tIDogYW55LCBlbGVtZW50IDogRWxlbWVudClcbiAge1xuICAgIHRoaXMuZG9tID0gJChkb20pOyBcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OyAgXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBhZGRGbGFzaE1lc3NhZ2UobWVzc2FnZSlcbiAge1xuICAgIHRoaXMuZG9tLmZpbmQoXCIubW9kZXJhdGlvbi1zZWN0aW9uXCIpLmZpbmQoJy5iYXNpYy1tZXNzYWdlJykuaGlkZSgpOyBcbiAgICB0aGlzLmRvbS5maW5kKCcucmVzdWx0LW1lc3NhZ2UnKS5odG1sKG1lc3NhZ2UpLnNob3coKTtcbiAgICBBcHAuaW5mb0JhckNvbXBvbmVudC5zaG93KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemUoKVxuICB7XG4gICAgLy8gb3BlbiBhIG1vZGFsIGNvbnRhaW5pbmcgZGVzY3JpcHRpb24gb2YgdGhlIHZhbGlkYXRpb24gcHJvY2Vzc1xuICAgIHRoaXMuZG9tLmZpbmQoJy52YWxpZGF0aW9uLXByb2Nlc3MtaW5mbycpLmNsaWNrKCAoZSkgPT4gXG4gICAge1xuICAgICAgJChcIiNtb2RhbC1jb250cmlidXRpb25cIikub3Blbk1vZGFsKCk7ICBcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRvbS5maW5kKFwiLnZvdGUtYnV0dG9uXCIpLmNsaWNrKCAoZSkgPT5cbiAgICB7XG4gICAgICAvLyByZXN0cmljdCB2b3RlIHRvIHNwZWNpZmljIHJvbGVzXG4gICAgICBpZiAoIUFwcC5jb25maWcuaXNGZWF0dXJlQXZhaWxhYmxlKCd2b3RlJykpIFxuICAgICAge1xuICAgICAgICBBcHAubG9naW5Nb2R1bGUubG9naW5BY3Rpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBBcHAudm90ZUNvbXBvbmVudC5vcGVuKHRoaXMuZWxlbWVudCk7ICAgICAgIFxuICAgICAgfSAgICAgIFxuXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOyBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOyBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSk7ICAgXG4gIH1cbn1cblxuIiwiZGVjbGFyZSB2YXIgJCA6IGFueTtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cbmV4cG9ydCBjbGFzcyBNb2RlcmF0aW9uQ29tcG9uZW50XG57XG4gIHByaXZhdGUgZG9tO1xuICBwcml2YXRlIGVsZW1lbnQgOiBFbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKGRvbSA6IGFueSwgZWxlbWVudCA6IEVsZW1lbnQpXG4gIHtcbiAgICB0aGlzLmRvbSA9ICQoZG9tKTsgXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsgIFxuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplKClcbiAge1xuICAgIC8vIHZvdGUtYnV0dG9uIGlzIGxvY2F0ZWQgb24gdGhlIGVsZW1lbnQtaW5mby1iYXIgb2YgYSBwZW5kaW5nIGVsZW1lbnRcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgdGhpcy5kb20uZmluZChcIi5tYXJrLWFzLW1vZGVyYXRlZC1idG5cIikuY2xpY2soIGZ1bmN0aW9uKGUpXG4gICAge1xuICAgICAgLy8gcmVzdHJpY3Qgdm90ZSB0byBzcGVjaWZpYyByb2xlc1xuICAgICAgaWYgKCFBcHAuY29uZmlnLmlzRmVhdHVyZUF2YWlsYWJsZSgnbW9kZXJhdGlvbicpKSBcbiAgICAgIHtcbiAgICAgICAgQXBwLmxvZ2luTW9kdWxlLmxvZ2luQWN0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgbGV0IGNvbW1lbnQgPSAkKHRoaXMpLnNpYmxpbmdzKCcubW9kZXJhdGlvbi1pbnB1dC1jb21tZW50JykudmFsKCk7ICAgICAgIFxuICAgICAgICBsZXQgcm91dGUgPSBBcHAuY29uZmlnLmZlYXR1cmVzLm1vZGVyYXRpb24udXJsO1xuICAgICAgICBsZXQgZGF0YSA9IHsgZWxlbWVudElkOiB0aGF0LmVsZW1lbnQuaWQsIGNvbW1lbnQ6IGNvbW1lbnQgfTtcbiAgICAgICAgXG4gICAgICAgIEFwcC5hamF4TW9kdWxlLnNlbmRSZXF1ZXN0KHJvdXRlLCAncG9zdCcsIGRhdGEsIChyZXNwb25zZSkgPT5cbiAgICAgICAgeyAgICAgICAgXG4gICAgICAgICAgbGV0IHJlc3BvbnNlTWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNzO1xuICAgICAgICAgIFxuICAgICAgICAgIHRoYXQuZWxlbWVudC51cGRhdGUodHJ1ZSk7XG4gICAgICAgICAgdGhhdC5lbGVtZW50LmlzRnVsbHlMb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICAgIC8vIHJlbG9hZCBFbGVtZW50LCBhbmQgYWRkIGZsYXNoIG1lc3NhZ2VcbiAgICAgICAgICBBcHAuaW5mb0JhckNvbXBvbmVudC5zaG93RWxlbWVudCh0aGF0LmVsZW1lbnQuaWQsICgpID0+IHtcbiAgICAgICAgICAgIHRoYXQuZWxlbWVudC5jb21wb25lbnQuYWRkRmxhc2hNZXNzYWdlKHJlc3BvbnNlTWVzc2FnZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgdGhhdC5lbGVtZW50LmNvbXBvbmVudC5hZGRGbGFzaE1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlKTsgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3JNZXNzYWdlKSA9PiBcbiAgICAgICAge1xuICAgICAgICAgIHRoYXQuZWxlbWVudC5jb21wb25lbnQuYWRkRmxhc2hNZXNzYWdlKGVycm9yTWVzc2FnZSk7ICBcbiAgICAgICAgfSk7ICBcbiAgICAgIH0gICAgICBcblxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO2UucHJldmVudERlZmF1bHQoKTtcbiAgICB9KTtcbiAgfVxufVxuXG4iLCJkZWNsYXJlIHZhciAkIDogYW55O1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcblxuZXhwb3J0IGNsYXNzIFN0YW1wQ29tcG9uZW50XG57XG4gIHByaXZhdGUgZG9tO1xuICBwcml2YXRlIGVsZW1lbnQgOiBFbGVtZW50O1xuXG4gIHByaXZhdGUgc3RhbXBJZDtcbiAgcHJpdmF0ZSB2YWx1ZSA6IGJvb2xlYW4gPSBmYWxzZTsgLy8gd2hldGhlciB0aGUgc3RhbXAgaXMgYWN0aXZhdGVkIGZvciB0aGlzIGVsZW1lbnQgb3Igbm90ICBcblxuICBjb25zdHJ1Y3Rvcihkb20gOiBhbnksIGVsZW1lbnQgOiBFbGVtZW50KVxuICB7XG4gICAgdGhpcy5kb20gPSAkKGRvbSk7XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLnN0YW1wSWQgPSAgIHRoaXMuZG9tLmRhdGEoJ3N0YW1wLWlkJyk7XG4gICAgdGhpcy5zZXRWYWx1ZSh0aGlzLmVsZW1lbnQuc3RhbXBzLmluZGV4T2YodGhpcy5zdGFtcElkKSA+IC0xLCBmYWxzZSk7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemUoKVxuICB7XG4gICAgdGhpcy5kb20uY2xpY2soKCkgPT4gdGhpcy5oYW5kbGVDbGljaygpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ2xpY2soKVxuICB7XG4gICAgbGV0IHJvdXRlID0gQXBwLmNvbmZpZy5mZWF0dXJlcy5zdGFtcC51cmw7XG4gICAgbGV0IGRhdGEgPSB7IGVsZW1lbnRJZDogdGhpcy5lbGVtZW50LmlkLCBzdGFtcElkOiB0aGlzLnN0YW1wSWQsIHZhbHVlOiAhdGhpcy52YWx1ZSB9O1xuXG4gICAgQXBwLmFqYXhNb2R1bGUuc2VuZFJlcXVlc3Qocm91dGUsICdwb3N0JywgZGF0YSwgKHJlc3BvbnNlKSA9PlxuICAgIHsgXG4gICAgICBpZiAocmVzcG9uc2UuZGF0YSkgdGhpcy5lbGVtZW50LnN0YW1wcyA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcykgdGhpcy5zZXRWYWx1ZSghdGhpcy52YWx1ZSk7ICAgICAgXG4gICAgfSk7ICAgICBcbiAgfVxuXG4gIHNldFZhbHVlKHZhbHVlIDogYm9vbGVhbiwgJGFuaW1hdGUgPSB0cnVlKVxuICB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZWxlbWVudC51cGRhdGUodHJ1ZSk7XG4gICAgdGhpcy5kb20udG9nZ2xlQ2xhc3MoXCJmaWxsZWRcIiwgdmFsdWUpOyBcbiAgICBpZiAoJGFuaW1hdGUgJiYgdGhpcy52YWx1ZSkgdGhpcy5lbGVtZW50Lm1hcmtlci5hbmltYXRlRHJvcCgpOyAgXG4gIH1cbn0iLCIvKipcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHb0dvQ2FydG8gcHJvamVjdC5cbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNiBTZWJhc3RpYW4gQ2FzdHJvIC0gOTBzY2FzdHJvQGdtYWlsLmNvbVxuICogQGxpY2Vuc2UgR05VIEdQTCB2M1xuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAxNi0xMi0xM1xuICovXG5kZWNsYXJlIGxldCAkLCBqUXVlcnkgOiBhbnk7XG5cbmltcG9ydCB7IEFwcE1vZHVsZSwgQXBwTW9kZXMgfSBmcm9tIFwiLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uL2dvZ29jYXJ0b1wiO1xuXG5leHBvcnQgY2xhc3MgR29Hb0NvbnRyb2xDb21wb25lbnRcbnsgICAgXG4gIGluaXRpYWxpemUoKVxuICB7XG4gICAgJCgnLnNob3ctZGlyZWN0b3J5LW1lbnUtYnV0dG9uLCAjbW9iaWxlLWZpbHRlcnMtaWNvbicpLmNsaWNrKChlKSA9PiB7IEFwcC5kaXJlY3RvcnlNZW51Q29tcG9uZW50LnNob3coKTsgZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fSk7XG4gICAgJCgnI2RpcmVjdG9yeS1tZW51IC5idG4tY2xvc2UtbWVudScpLmNsaWNrKCgpID0+IEFwcC5kaXJlY3RvcnlNZW51Q29tcG9uZW50LmhpZGUoKSk7XG5cbiAgICAkKCcuc2hvdy1hcy1saXN0LWJ1dHRvbicpLmNsaWNrKChlIDogRXZlbnQpID0+IHsgIFxuICAgICAgQXBwLm1hcE1hbmFnZXIuc2V0VGltZW91dENsaWNraW5nKCk7XG4gICAgICBBcHAuc2V0TW9kZShBcHBNb2Rlcy5MaXN0KTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG5cbiAgICAkKCcjbW9iaWxlLXNlYXJjaC1pY29uJykuY2xpY2soKGUpID0+IHsgXG4gICAgICBBcHAuc2VhcmNoQmFyQ29tcG9uZW50LnNob3dNb2JpbGVTZWFyY2hCYXIoKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG5cbiAgICAkKCcuc2hvdy1hcy1tYXAtYnV0dG9uJykuY2xpY2soKCkgPT4geyAgICBcbiAgICAgIEFwcC5zZXRNb2RlKEFwcE1vZGVzLk1hcCk7XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVQb3NpdGlvbigpXG4gIHtcbiAgICBpZiAoIUFwcC5tb2RlKSByZXR1cm47XG5cbiAgICBpZiAoQXBwLm1vZGUgPT0gQXBwTW9kZXMuTWFwKVxuICAgIHtcbiAgICAgIGxldCB0b3AgPSAxNSArICQoJy5zZWFyY2gtcmVzdWx0czp2aXNpYmxlJykuaGVpZ2h0KCk7XG4gICAgICAkKCcjZ29nby1jb250cm9scy1tb2JpbGUnKS52ZWxvY2l0eSh7dG9wOiB0b3AsIHJpZ2h0OiAwfSwge2R1cmF0aW9uOiAyNTAsIHF1ZXVlOiBmYWxzZSwgZWFzaW5nOiAnZWFzZU91dFF1YWQnfSk7IFxuICAgICAgJCgnI2dvZ28tY29udHJvbHMtbW9iaWxlJykuYWRkQ2xhc3MoJ21hcCcpLnJlbW92ZUNsYXNzKCdsaXN0Jyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBsZXQgdG9wID0gJCgnI2RpcmVjdG9yeS1jb250ZW50JykuaGVpZ2h0KCkgLSAkKCcjZ29nby1jb250cm9scy1tb2JpbGUnKS5oZWlnaHQoKSAtIDU7XG4gICAgICAkKCcjZ29nby1jb250cm9scy1tb2JpbGUnKS52ZWxvY2l0eSh7dG9wOiB0b3AsIHJpZ2h0OiAxNX0sIHtkdXJhdGlvbjogMjUwLCBxdWV1ZTogZmFsc2UsIGVhc2luZzogJ2Vhc2VPdXRRdWFkJ30pOyBcbiAgICAgICQoJyNnb2dvLWNvbnRyb2xzLW1vYmlsZScpLmFkZENsYXNzKCdsaXN0JykucmVtb3ZlQ2xhc3MoJ21hcCcpO1xuICAgIH1cbiAgfSBcblxuICBoaWRlKGRlbGF5IDogbnVtYmVyID0gMjUwKSB7ICQoJyNnb2dvLWNvbnRyb2xzLW1vYmlsZScpLmZhZGVPdXQoZGVsYXkpOyB9XG5cbiAgc2hvdyhkZWxheSA6IG51bWJlciA9IDQwMCkgeyAkKCcjZ29nby1jb250cm9scy1tb2JpbGUnKS5mYWRlSW4oZGVsYXkpOyB9ICBcbn0iLCIvKipcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHb0dvQ2FydG8gcHJvamVjdC5cbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNiBTZWJhc3RpYW4gQ2FzdHJvIC0gOTBzY2FzdHJvQGdtYWlsLmNvbVxuICogQGxpY2Vuc2UgR05VIEdQTCB2M1xuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAxNi0xMi0xM1xuICovXG5pbXBvcnQgeyBBcHBNb2R1bGUsIEFwcFN0YXRlcywgQXBwRGF0YVR5cGUgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgRWxlbWVudHNUb0Rpc3BsYXlDaGFuZ2VkIH0gZnJvbSBcIi4uLy4uL21vZHVsZXMvZWxlbWVudHMvZWxlbWVudHMubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0IHsgRXZlbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9ldmVudC5jbGFzc1wiO1xuXG5kZWNsYXJlIHZhciAkO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudExpc3RDb21wb25lbnRcbntcblx0ZWxlbWVudFRvRGlzcGxheUNvdW50IDogbnVtYmVyID0gMDsgXG5cblx0Ly8gTnVtYmVyIG9mIGVsZW1lbnQgaW4gb25lIGxpc3Rcblx0RUxFTUVOVF9MSVNUX1NJWkVfU1RFUCA6IG51bWJlciA9IDE1O1xuXHQvLyBCYXNpY2x5IHdlIGRpc3BsYXkgMSBFTEVNRU5UX0xJU1RfU0laRV9TVEVQLCBidXQgaWYgdXNlciBuZWVkXG5cdC8vIGZvciwgd2UgZGlzcGxheSBhbiBvdGhlcnMgRUxFTUVOVF9MSVNUX1NJWkVfU1RFUCBtb3JlXG5cdHN0ZXBzQ291bnQgOiBudW1iZXIgPSAxO1xuXHRpc0xpc3RGdWxsIDogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8vIGxhc3QgcmVxdWVzdCB3YXMgc2VuZCB3aXRoIHRoaXMgZGlzdGFuY2Vcblx0bGFzdERpc3RhbmNlUmVxdWVzdCA9IDEwO1xuXG5cdGlzSW5pdGlhbGl6ZWQgOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IoKSB7fVxuXG5cdGluaXRpYWxpemUoKVxuXHR7XG5cdFx0Ly8gZGV0ZWN0IHdoZW4gdXNlciByZWFjaCBib3R0b20gb2YgbGlzdFxuXHRcdHZhciB0aGF0ID0gdGhpcztcblx0XHQkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbGlzdCAuZWxlbWVudHMtY29udGFpbmVyJykub24oJ3Njcm9sbCcsIGZ1bmN0aW9uKGUpIFxuXHRcdHtcblx0XHRcdGlmKCQodGhpcykuc2Nyb2xsVG9wKCkgPiAwKVxuXHRcdFx0XHQkKFwiI2xpc3QtdGl0bGUtc2hhZG93LWJvdHRvbVwiKS5zaG93KCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdCQoXCIjbGlzdC10aXRsZS1zaGFkb3ctYm90dG9tXCIpLmhpZGUoKTtcblxuXHRcdFx0aWYoJCh0aGlzKS5zY3JvbGxUb3AoKSArICQodGhpcykuaW5uZXJIZWlnaHQoKSA+PSAkKHRoaXMpWzBdLnNjcm9sbEhlaWdodCkgeyAgICAgICAgICAgIFxuXHRcdCAgICBcdHRoYXQuaGFuZGxlQm90dG9tKCk7XG5cdFx0ICB9XG5cdFx0fSk7XG5cdH1cblxuXHR1cGRhdGUoJGVsZW1lbnRzVG9EaXNwbGF5IDogRWxlbWVudFtdKSBcblx0e1xuXHRcdC8vY29uc29sZS5sb2coXCJlbGVtZW50TGlzdCB1cGRhdGVcIiwgJGVsZW1lbnRzUmVzdWx0KTtcblx0XHRpZiAoJGVsZW1lbnRzVG9EaXNwbGF5Lmxlbmd0aCA9PSAwKSB0aGlzLnN0ZXBzQ291bnQgPSAxO1xuXG5cdFx0dGhpcy5oaWRlU3Bpbm5lckxvYWRlcigpO1xuXHRcdHRoaXMuY2xlYXIoKTtcdFx0XG5cblx0XHR0aGlzLmRyYXcoJGVsZW1lbnRzVG9EaXNwbGF5LCBmYWxzZSk7XG5cdH1cblxuXHRzZXRUaXRsZSgkdmFsdWUgOiBzdHJpbmcpIHsgJCgnLmVsZW1lbnQtbGlzdC10aXRsZS10ZXh0JykuaHRtbCgkdmFsdWUpOyB9XG5cblx0c2hvdygpIHsgJCgnI2RpcmVjdG9yeS1jb250ZW50LWxpc3QnKS5zaG93KCk7IH1cblx0XG5cdGhpZGUoKSB7ICQoJyNkaXJlY3RvcnktY29udGVudC1saXN0JykuaGlkZSgpOyB9XG5cblx0c2hvd1NwaW5uZXJMb2FkZXIoKSB7ICQoJyNkaXJlY3RvcnktbGlzdC1zcGlubmVyLWxvYWRlcicpLnNob3coKTsgfVxuXG5cdGhpZGVTcGlubmVyTG9hZGVyKCkgeyAkKCcjZGlyZWN0b3J5LWxpc3Qtc3Bpbm5lci1sb2FkZXInKS5oaWRlKCk7IH1cblxuXHRjbGVhcigpIHsgJCgnI2RpcmVjdG9yeS1jb250ZW50LWxpc3QgbGknKS5yZW1vdmUoKTsgfVxuXG5cdHJlSW5pdGlhbGl6ZUVsZW1lbnRUb0Rpc3BsYXlMZW5ndGgoKVxuXHR7XG5cdFx0dGhpcy5jbGVhcigpO1xuXHRcdCQoJyNkaXJlY3RvcnktY29udGVudC1saXN0IC5lbGVtZW50cy1jb250YWluZXInKS5hbmltYXRlKHtzY3JvbGxUb3A6ICcwJ30sIDApO1xuXHRcdHRoaXMuc3RlcHNDb3VudCA9IDE7XG5cdH1cblxuXHRwcml2YXRlIGRyYXcoJGVsZW1lbnRMaXN0IDogRWxlbWVudFtdLCAkYW5pbWF0ZSA9IGZhbHNlKSBcblx0e1xuXHRcdGxldCBlbGVtZW50IDogRWxlbWVudDtcblx0XHRsZXQgZWxlbWVudHNUb0Rpc3BsYXkgOiBFbGVtZW50W10gPSAkZWxlbWVudExpc3QuZmlsdGVyKCAoZWwpID0+IGVsLmlzRnVsbHlMb2FkZWQpOyBcblxuXHRcdHRoaXMuZWxlbWVudFRvRGlzcGxheUNvdW50ID0gZWxlbWVudHNUb0Rpc3BsYXkubGVuZ3RoO1xuXHRcdC8vIGNvbnNvbGUubG9nKCdFbGVtZW50TGlzdCBkcmF3JywgZWxlbWVudHNUb0Rpc3BsYXkubGVuZ3RoKTtcblxuXHRcdGlmIChBcHAuZGF0YVR5cGUgPT0gQXBwRGF0YVR5cGUuQWxsKVxuXHRcdHtcblx0XHRcdGZvcihlbGVtZW50IG9mIGVsZW1lbnRzVG9EaXNwbGF5KSBlbGVtZW50LnVwZGF0ZURpc3RhbmNlKCk7XG5cdFx0XHRlbGVtZW50c1RvRGlzcGxheS5zb3J0KHRoaXMuY29tcGFyZURpc3RhbmNlKTtcblx0XHR9XG5cdFx0ZWxzZSBpZiAoQXBwLmRhdGFUeXBlID09IEFwcERhdGFUeXBlLlNlYXJjaFJlc3VsdHMpXG5cdFx0e1xuXHRcdFx0ZWxlbWVudHNUb0Rpc3BsYXkuc29ydCh0aGlzLmNvbXBhcmVTZWFyY2hTY29yZSk7XG5cdFx0fVx0XHRcblxuXHRcdGxldCBtYXhFbGVtZW50c1RvRGlzcGxheSA9IHRoaXMuRUxFTUVOVF9MSVNUX1NJWkVfU1RFUCAqIHRoaXMuc3RlcHNDb3VudDtcblx0XHRsZXQgZW5kSW5kZXggPSBNYXRoLm1pbihtYXhFbGVtZW50c1RvRGlzcGxheSwgZWxlbWVudHNUb0Rpc3BsYXkubGVuZ3RoKTsgIFxuXG5cdFx0dGhpcy51cGRhdGVSZXN1bHRNZXNzYWdlKCk7XG5cdFx0XG5cdFx0Ly8gaWYgdGhlIGxpc3QgaXMgbm90IGZ1bGwsIHdlIHNlbmQgYWpheCByZXF1ZXN0XG5cdFx0aWYgKGVsZW1lbnRzVG9EaXNwbGF5Lmxlbmd0aCA8IG1heEVsZW1lbnRzVG9EaXNwbGF5KVxuXHRcdHtcblx0XHRcdGlmIChBcHAuZGF0YVR5cGUgPT0gQXBwRGF0YVR5cGUuQWxsKVxuXHRcdFx0e1xuXHRcdFx0XHQvLyBleHBhbmQgYm91bmRzXG5cdFx0XHRcdEFwcC5ib3VuZHNNb2R1bGUuZXh0ZW5kQm91bmRzKDAuNSk7XG5cdFx0XHRcdHRoaXMuc2hvd1NwaW5uZXJMb2FkZXIoKTtcblx0XHRcdFx0QXBwLmVsZW1lbnRzTWFuYWdlci5jaGVja0Zvck5ld0VsZW1lbnRzVG9SZXRyaWV2ZSh0cnVlKTtcdFx0XG5cdFx0XHR9XHRcdFx0XG5cdFx0fVx0XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwibGlzdCBpcyBmdWxsXCIpO1xuXHRcdFx0Ly8gd2FpdGluZyBmb3Igc2Nyb2xsIGJvdHRvbSB0byBhZGQgbW9yZSBlbGVtZW50cyB0byB0aGUgbGlzdFxuXHRcdFx0dGhpcy5pc0xpc3RGdWxsID0gdHJ1ZTtcdFx0XHRcblx0XHR9XG5cdFx0XG5cdFx0bGV0IGxpc3RDb250ZW50RG9tID0gJCgnI2RpcmVjdG9yeS1jb250ZW50LWxpc3QgdWwuY29sbGFwc2libGUnKTtcblx0XHRsZXQgdGhhdCA9IHRoaXM7XG5cblx0XHRmb3IobGV0IGkgPSAwOyBpIDwgZW5kSW5kZXg7IGkrKylcblx0XHR7XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudHNUb0Rpc3BsYXlbaV07XHRcdFx0XG5cdFx0XHRsaXN0Q29udGVudERvbS5hcHBlbmQoZWxlbWVudC5jb21wb25lbnQucmVuZGVyKCkpO1xuXHRcdFx0Ly8gYmluZCBlbGVtZW50IGhlYWRlciBjbGlja1xuXHRcdFx0ZWxlbWVudC5jb21wb25lbnQuZG9tLmZpbmQoJy5jb2xsYXBzaWJsZS1oZWFkZXInKS5jbGljayhmdW5jdGlvbigpIHsgdGhhdC5vbkVsZW1lbnRPcGVuKHRoaXMpOyB9KTtcblx0XHR9XG5cblx0XHRpZiAoJGFuaW1hdGUpICQoJyNkaXJlY3RvcnktY29udGVudC1saXN0IC5lbGVtZW50cy1jb250YWluZXInKS5hbmltYXRlKHtzY3JvbGxUb3A6ICcwJ30sIDUwMCk7XG5cdFx0JCgnI2RpcmVjdG9yeS1jb250ZW50LWxpc3QgdWwnKS5jb2xsYXBzaWJsZSh7YWNjb3JkaW9uIDogdHJ1ZX0pO1x0XHRcblx0fVxuXG5cdHByaXZhdGUgb25FbGVtZW50T3BlbihlbGVtZW50SGVhZGVyRG9tKVxuXHR7XG5cdFx0bGV0IGVsZW1lbnREb20gPSAkKGVsZW1lbnRIZWFkZXJEb20pLmNsb3Nlc3QoJy5lbGVtZW50LWl0ZW0nKTtcblx0XHRsZXQgZWxlbWVudElkID0gZWxlbWVudERvbS5kYXRhKCdlbGVtZW50LWlkJyk7XG5cdFx0bGV0IGVsZW1lbnQgPSAgQXBwLmVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG5cdFx0XG5cdFx0Ly8gaW5pdGlhbGl6ZSBlbGVtZW50IGNvbXBvbmVudFxuXHRcdGlmICghJChlbGVtZW50SGVhZGVyRG9tKS5oYXNDbGFzcygnaW5pdGlhbGl6ZWQnKSlcblx0XHR7XG5cdFx0XHRlbGVtZW50LmNvbXBvbmVudC5pbml0aWFsaXplKCk7XG5cdFx0XHRlbGVtZW50LmNvbXBvbmVudC5pbWFnZXNDb21wb25lbnQub25OZXdJbWFnZURpc3BsYXllZC5kbyggKGltYWdlKSA9PiB7XG5cdFx0XHRcdGVsZW1lbnREb20uZmluZCgnLmltZy1vdmVybGF5JykuY3NzKCdoZWlnaHQnLCBlbGVtZW50RG9tLmZpbmQoJy5pbWctY29udGFpbmVyJykuaGVpZ2h0KCkpO1xuXHRcdFx0fSk7XHRcdFx0XHRcblxuXHRcdFx0c2V0VGltZW91dCggKCkgPT4geyAkKGVsZW1lbnRIZWFkZXJEb20pLmFkZENsYXNzKCdpbml0aWFsaXplZCcpOyB9LCAwKTtcdFx0XHRcdFx0XG5cdFx0fVxuXG5cdFx0Ly8gb24gb3BlbiBhbmltYXRpb24gZW5kXG5cdFx0c2V0VGltZW91dCggKCkgPT4geyB0aGlzLm9uRWxlbWVudEZ1bGx5T3Blbm5lZChlbGVtZW50RG9tKTsgfSwgMzAwKTtcdFx0XHRcblx0fVxuXG5cdHByaXZhdGUgb25FbGVtZW50RnVsbHlPcGVubmVkKGVsZW1lbnREb20pXG5cdHtcblx0XHRsZXQgbGlzdENvbnRhaW5lckRvbSA9ICQoJyNkaXJlY3RvcnktY29udGVudC1saXN0IC5lbGVtZW50cy1jb250YWluZXInKTtcblx0XHRlbGVtZW50RG9tLmZpbmQoJy5pbWctb3ZlcmxheScpLmNzcygnaGVpZ2h0JywgZWxlbWVudERvbS5maW5kKCcuaW1nLWNvbnRhaW5lcicpLmhlaWdodCgpKTtcblxuXHRcdC8vIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG9mIGFuIGl0ZW0gYWZ0ZXIgaXQgaGFzIGJlZW4gZXhwYW5kZWRcblx0XHRsZXQgZWxlbWVudERpc3RhbmNlVG9Ub3AgPSBlbGVtZW50RG9tLm9mZnNldCgpLnRvcCAtIGxpc3RDb250YWluZXJEb20ub2Zmc2V0KCkudG9wO1xuXG5cdFx0Ly8gaWYgZWxlbWVudCBub3QgdmlzaWJsZSBvbiBzY3JlZW5cblx0XHRpZiAoIChlbGVtZW50RG9tLm9mZnNldCgpLnRvcCAtIGxpc3RDb250YWluZXJEb20ub2Zmc2V0KCkudG9wICsgZWxlbWVudERvbS5oZWlnaHQoKSkgPiAobGlzdENvbnRhaW5lckRvbS5vdXRlckhlaWdodCgpICsgMTUwKSlcblx0XHR7XG5cdFx0XHRsaXN0Q29udGFpbmVyRG9tLmFuaW1hdGUoe3Njcm9sbFRvcDogbGlzdENvbnRhaW5lckRvbS5zY3JvbGxUb3AoKSArIGVsZW1lbnREb20ub2Zmc2V0KCkudG9wIC0gbGlzdENvbnRhaW5lckRvbS5vZmZzZXQoKS50b3B9LCA1NTApO1xuXHRcdH1cdFx0XHRcdFx0XG5cdFx0Ly8gaWYgZWxlbWVudCBpcyB0b28gaGlnaFxuXHRcdGVsc2UgaWYgKCBlbGVtZW50RGlzdGFuY2VUb1RvcCA8IDAgKSBcblx0XHR7XG5cdFx0XHRsaXN0Q29udGFpbmVyRG9tLmFuaW1hdGUoe3Njcm9sbFRvcDogbGlzdENvbnRhaW5lckRvbS5zY3JvbGxUb3AoKSArIGVsZW1lbnREaXN0YW5jZVRvVG9wfSwgMzAwKTtcblx0XHR9XG5cdFx0c2V0VGltZW91dCggKCkgPT4gJCgnLmluZm8tYmFyLXRhYnMnKS50YWJzKCksIDApO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVSZXN1bHRNZXNzYWdlKClcblx0e1xuXHRcdCQoJy5uby1yZXN1bHQtbWVzc2FnZScpLmhpZGUoKTtcblx0XHRcblx0XHRpZiAodGhpcy5lbGVtZW50VG9EaXNwbGF5Q291bnQgPiAwKVxuXHRcdHtcdFx0XHRcblx0XHRcdCQoJy5lbGVtZW50LWxpc3QtaGVhZGVyIC50aXRsZS10ZXh0Jykuc2hvdygpO1xuICAgXHRcdCQoJy5lbGVtZW50LWxpc3QtdGl0bGUtbnVtYmVyLXJlc3VsdHMnKS50ZXh0KCcoJyArIHRoaXMuZWxlbWVudFRvRGlzcGxheUNvdW50ICsgJyknKTtcbiAgIFx0fVxuICAgXHRlbHNlXG4gICBcdFx0JCgnLmVsZW1lbnQtbGlzdC1oZWFkZXIgLnRpdGxlLXRleHQnKS5oaWRlKCk7XG5cdH1cblxuXHRoYW5kbGVBbGxFbGVtZW50c1JldHJpZXZlZCgpXG5cdHtcblx0XHR0aGlzLmhpZGVTcGlubmVyTG9hZGVyKCk7XG5cdFx0aWYgKHRoaXMuZWxlbWVudFRvRGlzcGxheUNvdW50ID09IDApXG5cdFx0e1xuXHRcdFx0JCgnLmVsZW1lbnQtbGlzdC10aXRsZS1udW1iZXItcmVzdWx0cycpLnRleHQoJygwKScpO1xuXHRcdFx0JCgnLm5vLXJlc3VsdC1tZXNzYWdlJykuc2hvdygpO1xuXHRcdFx0bGV0IG5vUmVzdWx0SW1nID0gJCgnLm5vLXJlc3VsdC1tZXNzYWdlIGltZycpO1xuXHRcdFx0bm9SZXN1bHRJbWcuYXR0cignc3JjJywgbm9SZXN1bHRJbWcuZGF0YSgnc3JjJykpO1xuXHRcdFx0JCgnLmVsZW1lbnQtbGlzdC1oZWFkZXIgLnRpdGxlLXRleHQnKS5zaG93KCk7XG5cdFx0fVx0XHRcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlQm90dG9tKClcblx0e1xuXHRcdGlmICh0aGlzLmlzTGlzdEZ1bGwpIFxuXHRcdHtcblx0XHRcdHRoaXMuc3RlcHNDb3VudCsrO1xuXHRcdFx0Ly9jb25zb2xlLmxvZyhcImJvdHRvbSByZWFjaGVkXCIpO1xuXHRcdFx0dGhpcy5pc0xpc3RGdWxsID0gZmFsc2U7XG5cdFx0XHR0aGlzLmNsZWFyKCk7XG5cdFx0XHR0aGlzLmRyYXcoQXBwLmVsZW1lbnRzKCkpO1xuXHRcdH1cdFx0XG5cdH1cblxuXHRwcml2YXRlIGNvbXBhcmVEaXN0YW5jZShhOkVsZW1lbnQsYjpFbGVtZW50KSBcblx0eyAgXG5cdCAgaWYgKGEuZGlzdGFuY2VGcm9tQm91bmRzQ2VudGVyID09IGIuZGlzdGFuY2VGcm9tQm91bmRzQ2VudGVyKSByZXR1cm4gMDtcblx0ICByZXR1cm4gYS5kaXN0YW5jZUZyb21Cb3VuZHNDZW50ZXIgPCBiLmRpc3RhbmNlRnJvbUJvdW5kc0NlbnRlciA/IC0xIDogMTtcblx0fVxuXG5cdHByaXZhdGUgY29tcGFyZVNlYXJjaFNjb3JlKGE6RWxlbWVudCxiOkVsZW1lbnQpIFxuXHR7ICBcblx0ICBpZiAoYS5zZWFyY2hTY29yZSA9PSBiLnNlYXJjaFNjb3JlKSByZXR1cm4gMDtcblx0ICByZXR1cm4gYS5zZWFyY2hTY29yZSA8IGIuc2VhcmNoU2NvcmUgPyAxIDogLTE7XG5cdH1cbn1cblxuIiwiZGVjbGFyZSBsZXQgZ29vZ2xlO1xuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmRlY2xhcmUgbGV0ICQsIEw6IGFueTtcblxuZGVjbGFyZSBsZXQgd2luZG93IDogYW55O1xuXG5leHBvcnQgY2xhc3MgRGlyZWN0aW9uc0NvbXBvbmVudFxue1xuXHRyb3V0aW5nQ29udHJvbCA6IGFueTtcdFxuXHRpc0FjdGl2ZSA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9IFxuXG4gIGluaXRpYWxpemUoKVxuICB7XG4gIFx0JCgnI2J0bi1jbG9zZS1kaXJlY3Rpb25zJykuY2xpY2soICgpID0+IFxuXHRcdHtcblx0XHRcdEFwcC5zZXRTdGF0ZShBcHBTdGF0ZXMuU2hvd0VsZW1lbnQsIHsgaWQgOiBBcHAuaW5mb0JhckNvbXBvbmVudC5nZXRDdXJyRWxlbWVudElkKCkgfSk7XG5cdFx0fSk7XG4gIH0gXG5cblx0Y2xlYXIoKVxuXHR7XG5cdFx0aWYgKCF0aGlzLnJvdXRpbmdDb250cm9sKSByZXR1cm47XG5cblx0XHR0aGlzLmNsZWFyUm91dGUoKTtcblx0XHR0aGlzLmhpZGVJdGluZXJhcnlQYW5lbCgpO1xuXG5cdFx0QXBwLkRFQU1vZHVsZS5lbmQoKTtcblxuXHRcdHRoaXMucm91dGluZ0NvbnRyb2wgPSBudWxsO1xuXHRcdHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcblx0fTtcblxuXHRwcml2YXRlIGNsZWFyUm91dGUoKVxuXHR7XG5cdFx0aWYgKHRoaXMucm91dGluZ0NvbnRyb2wpIFxuXHRcdHtcblx0XHRcdHRoaXMucm91dGluZ0NvbnRyb2wuc3BsaWNlV2F5cG9pbnRzKDAsMik7XHRcdFxuXHRcdFx0QXBwLm1hcCgpLnJlbW92ZUNvbnRyb2wodGhpcy5yb3V0aW5nQ29udHJvbCk7XHRcblx0XHR9XG5cdH07XG5cblx0Y2FsY3VsYXRlUm91dGUob3JpZ2luIDogTC5MYXRMbmcsIGVsZW1lbnQgOiBFbGVtZW50KSBcblx0e1xuXHRcdHRoaXMuY2xlYXIoKTtcblxuXHRcdGxldCB3YXlwb2ludHMgPSBbXG5cdFx0ICAgIG9yaWdpbixcblx0XHQgICAgZWxlbWVudC5wb3NpdGlvbixcblx0XHRdO1xuXHRcdC8vY29uc29sZS5sb2coXCJjYWxjdWxhdGUgcm91dGVcIiwgd2F5cG9pbnRzKTtcblxuXHRcdHRoaXMucm91dGluZ0NvbnRyb2wgPSBMLlJvdXRpbmcuY29udHJvbCh7XG5cdFx0XHRyb3V0ZXI6IEwuUm91dGluZy5tYXBib3goJ3BrLmV5SjFJam9pWjI5bmIyTmhjblJ2SWl3aVlTSTZJbU5xWW5oeGVIVXhaekozY0c0ek1uSXlObVppYWpGNmRtd2lmUS4yRzVJTTRyb0lncFVfZnZQQk9wc3N3JyksXG5cdFx0XHRwbGFuOiBMLlJvdXRpbmcucGxhbihcblx0XHRcdFx0d2F5cG9pbnRzLCBcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIGRlbGV0ZWluZyBzdGFydCBhbmQgZW5kIG1hcmtlcnNcblx0XHRcdFx0XHRjcmVhdGVNYXJrZXI6IGZ1bmN0aW9uKGksIHdwKSB7IHJldHVybiBudWxsOyB9LFxuXHRcdFx0XHRcdHJvdXRlV2hpbGVEcmFnZ2luZzogZmFsc2UsXG5cdFx0XHRcdFx0c2hvd0FsdGVybmF0aXZlczogZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0KSxcblx0XHRcdGxhbmd1YWdlOiAnZnInLFxuXHRcdFx0cm91dGVXaGlsZURyYWdnaW5nOiBmYWxzZSxcblx0XHRcdHNob3dBbHRlcm5hdGl2ZXM6IGZhbHNlLFxuXHRcdFx0YWx0TGluZU9wdGlvbnM6IHtcblx0XHRcdFx0c3R5bGVzOiBbXG5cdFx0XHRcdFx0e2NvbG9yOiAnYmxhY2snLCBvcGFjaXR5OiAwLjE1LCB3ZWlnaHQ6IDl9LFxuXHRcdFx0XHRcdHtjb2xvcjogJ3doaXRlJywgb3BhY2l0eTogMC44LCB3ZWlnaHQ6IDZ9LFxuXHRcdFx0XHRcdHtjb2xvcjogJyMwMGIzZmQnLCBvcGFjaXR5OiAwLjUsIHdlaWdodDogMn1cblx0XHRcdFx0XVxuXHRcdFx0fVxuXHRcdH0pLmFkZFRvKEFwcC5tYXAoKSk7XG5cblx0XHQvLyBzaG93IEl0aW5lcmFyeSBwYW5lbCB3aXRob3V0IGl0aW5lcmFyeSwganVzdCB0byBzaG93IHVzZXJcblx0XHQvLyBzb21ldGhpbmdpcyBoYXBwZW5uaW5nIGFuIGRpc3BsYXkgc3Bpbm5lciBsb2FkZXJcblx0XHR0aGlzLnNob3dJdGluZXJhcnlQYW5lbChlbGVtZW50KTtcblxuXHRcdHRoaXMucm91dGluZ0NvbnRyb2wub24oJ3JvdXRlc2ZvdW5kJywgKGV2KSA9PiBcblx0XHR7XG5cdFx0XHR0aGlzLnNob3dJdGluZXJhcnlQYW5lbChlbGVtZW50KTtcblx0XHR9KTtcblxuXHRcdC8vIGZpdCBib3VuZHMgXG5cdFx0dGhpcy5yb3V0aW5nQ29udHJvbC5vbigncm91dGVzZWxlY3RlZCcsIGZ1bmN0aW9uKGUpIFxuXHRcdHtcdCAgICBcblx0ICAgIHZhciByID0gZS5yb3V0ZTtcblx0ICAgIHZhciBsaW5lID0gTC5Sb3V0aW5nLmxpbmUocik7XG5cdCAgICB2YXIgYm91bmRzID0gbGluZS5nZXRCb3VuZHMoKTtcblx0ICAgIEFwcC5tYXAoKS5maXRCb3VuZHMoYm91bmRzKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucm91dGluZ0NvbnRyb2wub24oJ3JvdXRpbmdlcnJvcicsIChldikgPT4gXG5cdFx0e1xuXHRcdFx0JCgnI21vZGFsLWRpcmVjdGlvbnMtZmFpbCcpLm9wZW5Nb2RhbCgpO1xuXHRcdFx0dGhpcy5jbGVhcigpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5pc0FjdGl2ZSA9IHRydWU7XHRcdFx0XG5cdH07XG5cblx0aGlkZUl0aW5lcmFyeVBhbmVsKClcblx0e1xuXHRcdCQoJyNkaXJlY3RvcnktbWVudS1tYWluLWNvbnRhaW5lcicpLnJlbW92ZUNsYXNzKCk7XG5cdH1cblxuXHRzaG93SXRpbmVyYXJ5UGFuZWwoZWxlbWVudCA6IEVsZW1lbnQpXG5cdHtcblx0XHQkKCcjZGlyZWN0b3J5LW1lbnUtbWFpbi1jb250YWluZXInKS5yZW1vdmVDbGFzcygpLmFkZENsYXNzKFwiZGlyZWN0aW9uc1wiKTtcdFxuXHRcdCQoJy5sZWFmbGV0LXJvdXRpbmctY29udGFpbmVyJykucHJlcGVuZFRvKCcuZGlyZWN0b3J5LW1lbnUtY29udGVudCcpO1x0XHRcblx0fVxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cbmltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5cbmltcG9ydCB7IEV2ZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvZXZlbnQuY2xhc3NcIjtcblxuZGVjbGFyZSB2YXIgJDtcblxuZXhwb3J0IGNsYXNzIEluZm9CYXJDb21wb25lbnRcbntcblx0aXNWaXNpYmxlIDogYm9vbGVhbiA9IGZhbHNlO1xuXHRpc0RldGFpbHNWaXNpYmxlID0gZmFsc2U7XG5cblx0ZWxlbWVudFZpc2libGUgOiBFbGVtZW50ID0gbnVsbDtcblxuXHRsb2FkZXJUaW1lciA9IG51bGw7XG5cblx0b25TaG93ID0gbmV3IEV2ZW50PG51bWJlcj4oKTtcblx0b25IaWRlID0gbmV3IEV2ZW50PGJvb2xlYW4+KCk7XG5cblx0Z2V0Q3VyckVsZW1lbnRJZCgpIDogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZWxlbWVudFZpc2libGUgPyB0aGlzLmVsZW1lbnRWaXNpYmxlLmlkIDogbnVsbDsgfVxuXG5cdGdldCBkb20oKSB7IHJldHVybiAkKCcjZWxlbWVudC1pbmZvLWJhcicpOyB9XG5cdGdldCBkb21NZW51KCkgeyByZXR1cm4gdGhpcy5kb20uZmluZCgnLm1lbnUtZWxlbWVudCcpOyB9XG5cdHdpZHRoKCkgOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5kb20ud2lkdGgoKSArICdweCc7IH1cblxuXHRpc0Rpc3BsYXllZEFzaWRlKCkgeyByZXR1cm4gdGhpcy5kb20uaGFzQ2xhc3MoJ2Rpc3BsYXktYXNpZGUnKTsgfVxuXHRpc0Rpc3BsYXllZEJvdHRvbSgpIHsgcmV0dXJuIHRoaXMuZG9tLmhhc0NsYXNzKCdkaXNwbGF5LWJvdHRvbScpOyB9XG5cblx0cmVsb2FkKClcblx0e1xuXHRcdGlmICghdGhpcy5pc1Zpc2libGUpIHJldHVybjtcblx0XHR0aGlzLmVsZW1lbnRWaXNpYmxlLmlzRnVsbHlMb2FkZWQgPSBmYWxzZTtcblx0XHR0aGlzLnNob3dFbGVtZW50KHRoaXMuZWxlbWVudFZpc2libGUuaWQpO1xuXHR9XG5cblx0Ly8gQXBwLmluZm9CYXJDb21wb25lbnQuc2hvd0VsZW1lbnQ7XG5cdHNob3dFbGVtZW50KGVsZW1lbnRJZCwgY2FsbGJhY2sgPSBudWxsKSBcblx0e1xuXHRcdGlmICghQXBwLmNvbmZpZy5pbmZvYmFyLmFjdGl2YXRlKSB7XG5cdFx0XHRBcHAuc3RhdGVNYW5hZ2VyLnNldFN0YXRlKEFwcFN0YXRlcy5Ob3JtYWwpO1x0XHRcdFxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cdFx0XG5cblx0XHRsZXQgZWxlbWVudCA9IEFwcC5lbGVtZW50c01vZHVsZS5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1x0XHRcblx0XHQvLyBjb25zb2xlLmxvZyhcInNob3dFbGVtZW50XCIsIGVsZW1lbnQpO1xuXHRcdFxuXHRcdC8vIGlmIGVsZW1lbnQgYWxyZWFkeSB2aXNpYmxlXG5cdFx0aWYgKHRoaXMuZWxlbWVudFZpc2libGUpIHRoaXMuZWxlbWVudFZpc2libGUubWFya2VyLnNob3dOb3JtYWxTaXplKHRydWUpO1xuXHRcdHRoaXMuZWxlbWVudFZpc2libGUgPSBlbGVtZW50O1x0XG5cblx0XHRpZiAoIWVsZW1lbnQuaXNGdWxseUxvYWRlZClcblx0XHR7XG5cdFx0XHQvL2NvbnNvbGUubG9nKFwiRWxlbWVudCBub3QgZnVsbHkgTG9hZGVkXCIpO1xuXHRcdFx0QXBwLmFqYXhNb2R1bGUuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkLFxuXHRcdFx0KHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQudXBkYXRlV2l0aEpzb24ocmVzcG9uc2UpO1xuXHRcdFx0XHR0aGlzLnNob3dFbGVtZW50KGVsZW1lbnQuaWQpO1xuXHRcdFx0XHRpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG5cdFx0XHR9LFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcIkFqYXggZmFpbHVyZSBmb3IgZWxlbWVudElkXCIsIGVsZW1lbnRJZCk7XG5cdFx0XHR9KTtcdFx0XHRcblxuXHRcdFx0Ly8gaWYgYWpheCByZXRyaWV2aW5nIHRha2UgbW9yZSB0aGFuIDUwMG1zLCB3ZSBzaG93IHNwaW5uZXIgbG9hZGVyXG5cdFx0XHR0aGlzLmxvYWRlclRpbWVyID0gc2V0VGltZW91dCggKCkgPT4gXG5cdFx0XHR7IFxuXHRcdFx0XHQkKCcjaW5mby1iYXItb3ZlcmxheScpLmZhZGVJbigpO1x0XHRcdFx0XHRcblx0XHRcdFx0dGhpcy5zaG93KCk7IFxuXHRcdFx0fSwgNTAwKTsgXHRcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIGNsZWFyaW5nIGxvYWRlclxuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMubG9hZGVyVGltZXIpO1xuXHRcdFx0JCgnI2luZm8tYmFyLW92ZXJsYXknKS5mYWRlT3V0KCk7XG5cblx0XHRcdHRoaXMuZG9tLmZpbmQoJyNlbGVtZW50LWluZm8nKS5odG1sKHRoaXMuZWxlbWVudFZpc2libGUuY29tcG9uZW50LnJlbmRlcigpKTtcdFxuXG5cdFx0XHRpZiAodGhpcy5lbGVtZW50VmlzaWJsZS5pbWFnZXMubGVuZ3RoKSBcblx0XHRcdHtcblx0XHRcdFx0Ly8gQW5pbWF0aW9uIHRvIG1vdmUgaW1nLW5hdmlnYXRpb24tYnRuIHdoZW4gc2Nyb2xsaW5nXG5cdFx0XHRcdHRoaXMuZG9tLmZpbmQoJy5jb2xsYXBzaWJsZS1ib2R5LW1haW4tY29udGFpbmVyJykuc2Nyb2xsKGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRsZXQgc2Nyb2xsVG9wID0gJCh0aGlzKS5zY3JvbGxUb3AoKTtcblx0XHRcdFx0XHQkKHRoaXMpLmZpbmQoJy5pbWctbmF2aWdhdGlvbi1idG4ucHJldicpLmNzcygnbGVmdCcsIC1zY3JvbGxUb3AvNSk7XG5cdFx0XHRcdFx0JCh0aGlzKS5maW5kKCcuaW1nLW5hdmlnYXRpb24tYnRuLm5leHQnKS5jc3MoJ3JpZ2h0JywgLXNjcm9sbFRvcC81KTtcblx0XHRcdFx0XHQkKHRoaXMpLmZpbmQoJy5pbWctbmF2aWdhdGlvbi1idG4ubmV4dCcpLmNzcygndG9wJywgc2Nyb2xsVG9wLzIpO1xuXHRcdFx0XHRcdCQodGhpcykuZmluZCgnLmltZy1uYXZpZ2F0aW9uLWJ0bi5wcmV2JykuY3NzKCd0b3AnLCBzY3JvbGxUb3AvMik7XG5cdFx0XHRcdFx0JCh0aGlzKS5maW5kKCcuaW1nLW92ZXJsYXknKS5jc3MoJ29wYWNpdHknLCAxIC0gc2Nyb2xsVG9wLzIwMCk7XG5cdFx0XHRcdH0pO1x0XHRcdFx0XG5cdFx0XHR9XHRcdFx0XHRcdFx0XG5cblx0XHRcdHRoaXMuZWxlbWVudFZpc2libGUuY29tcG9uZW50LmluaXRpYWxpemUoKTtcdFxuXHRcdFx0dGhpcy51cGRhdGVNZW51KCk7XHRcdFx0XHRcblxuXHRcdFx0dGhpcy5kb20uZmluZCgnI2J0bi1jbG9zZS1iYW5kZWF1LWRldGFpbCcpLmNsaWNrKCgpID0+IHsgdGhpcy5oaWRlKCk7IHJldHVybiBmYWxzZTsgfSk7XG5cdFx0XHRcblx0XHRcdHRoaXMuZG9tLmZpbmQoJy5jb2xsYXBzaWJsZS1oZWFkZXInKS5jbGljaygoKSA9PiB7IHRoaXMudG9nZ2xlRGV0YWlscygpOyB9KTtcdFx0XHRcblx0XHR9XHRcdFx0XHRcdFx0XG5cdFx0XG5cdFx0dGhpcy5zaG93KCk7XHRcdFxuXG5cdFx0ZWxlbWVudC5tYXJrZXIuc2hvd05vcm1hbEhpZGRlbigpO1xuXHRcdGVsZW1lbnQubWFya2VyLnNob3dCaWdTaXplKCk7XG5cblx0XHRzZXRUaW1lb3V0KCAoKSA9PiBcblx0XHR7IFxuXHRcdFx0ZWxlbWVudC5tYXJrZXIuc2hvd05vcm1hbEhpZGRlbigpO1xuXHRcdFx0ZWxlbWVudC5tYXJrZXIuc2hvd0JpZ1NpemUoKTtcblx0XHR9LCA1MDApOyBcdFxuXG5cdFx0dGhpcy5vblNob3cuZW1pdChlbGVtZW50SWQpO1xuXG5cdFx0QXBwLmRvY3VtZW50VGl0bGVNb2R1bGUudXBkYXRlRG9jdW1lbnRUaXRsZSgpO1xuXHR9O1x0XG5cblx0cmVmcmVzaCgpXG5cdHtcdFx0XG5cdFx0aWYgKHRoaXMuaXNWaXNpYmxlKSB7XG5cdFx0XHR0aGlzLnNob3coKTtcblx0XHRcdHNldFRpbWVvdXQoICgpID0+IHsgdGhpcy5zaG93KCk7IH0sIDIwMCk7XG5cdFx0fVxuXHR9XG5cblx0ZGlzcGxheUFzaWRlKClcblx0e1xuXHRcdHRoaXMuZG9tLmFkZENsYXNzKCdkaXNwbGF5LWFzaWRlJyk7XG5cdFx0dGhpcy5kb20ucmVtb3ZlQ2xhc3MoJ2Rpc3BsYXktYm90dG9tJyk7XG5cdFx0dGhpcy51cGRhdGVNZW51KCk7XG5cdH1cblxuXHRkaXNwbGF5Qm90dG9tKClcblx0e1xuXHRcdHRoaXMuZG9tLnJlbW92ZUNsYXNzKCdkaXNwbGF5LWFzaWRlJyk7XG5cdFx0dGhpcy5kb20uYWRkQ2xhc3MoJ2Rpc3BsYXktYm90dG9tJyk7XHRcblx0XHR0aGlzLnVwZGF0ZU1lbnUoKTtcdFx0XG5cdH1cblxuXHR1cGRhdGVNZW51KClcblx0e1xuXHRcdGlmICghdGhpcy5lbGVtZW50VmlzaWJsZSkgcmV0dXJuO1xuXHRcdC8vIG9uIGxhcmdlIHNjcmVlbiBpbmZvIGJhciBpcyBkaXNwbGF5ZWQgYXNpZGUgYW5kIHNvIHdlIGhhdmUgZW5vdWdoIHNwYWNlXG5cdFx0Ly8gdG8gc2hvdyBtZW51IGFjdGlvbnMgZGV0YWlscyBpbiBmdWxsIHRleHRcblx0XHR0aGlzLmVsZW1lbnRWaXNpYmxlLmNvbXBvbmVudC5tZW51Q29tcG9uZW50LnNob3dGdWxsVGV4dE1lbnUodGhpcy5pc0Rpc3BsYXllZEFzaWRlKCkpO1xuXHR9XG5cblx0c2hvdygpXG5cdHtcblx0XHR0aGlzLmhpZGVEZXRhaWxzKCk7XG5cblx0XHRBcHAuc2VhcmNoQmFyQ29tcG9uZW50LmhpZGVNb2JpbGVTZWFyY2hCYXIoKTtcdFx0XG5cdFx0XG5cdFx0aWYgKCF0aGlzLmlzRGlzcGxheWVkQXNpZGUoKSlcblx0XHR7XG5cdFx0XHR0aGlzLmRvbS5zaG93KCk7XG5cblx0XHRcdGxldCBlbGVtZW50SW5mb0Jhcl9uZXdIZWlnaHQgPSB0aGlzLmRvbS5maW5kKCcjZWxlbWVudC1pbmZvJykub3V0ZXJIZWlnaHQodHJ1ZSk7XG5cblx0XHRcdHRoaXMudXBkYXRlSW5mb0JhclNpemUoKTtcblx0XHRcdHRoaXMuZG9tLnN0b3AodHJ1ZSkuYW5pbWF0ZSh7J2hlaWdodCc6IGVsZW1lbnRJbmZvQmFyX25ld0hlaWdodH0sIDM1MCwgJ3N3aW5nJywgKCkgPT4gXG5cdFx0XHR7XG5cdFx0XHRcdEFwcC5jb21wb25lbnQudXBkYXRlTWFwU2l6ZSgpO1xuXHRcdFx0XHR0aGlzLmNoZWNrSWZNYXJrZXJTdGlsbFZpc2libGUoKTtcdFx0ICBcdFx0XG5cdFx0XHR9KTtcblx0XHR9XHRcblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0aWYgKCF0aGlzLmRvbS5pcygnOnZpc2libGUnKSlcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5kb20uY3NzKCdyaWdodCcsJy0nICsgdGhpcy53aWR0aCgpKTtcdFx0XHRcblx0XHRcdFx0dGhpcy5kb20uc2hvdygpLnN0b3AodHJ1ZSkuYW5pbWF0ZSh7J3JpZ2h0JzonMCd9LDM1MCwnc3dpbmcnLCAoKSA9PiB7IFxuXHRcdFx0XHRcdEFwcC5jb21wb25lbnQudXBkYXRlRGlyZWN0b3J5Q29udGVudE1hcmdpbklmSW5mb0JhckRpc3BsYXllZEFzaWRlKCk7XG5cdFx0XHRcdFx0dGhpcy5jaGVja0lmTWFya2VyU3RpbGxWaXNpYmxlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHR0aGlzLnVwZGF0ZUluZm9CYXJTaXplKCk7XG5cdFx0XHR0aGlzLnNob3dCb2R5TWFpblRhYigpO1xuXG5cdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IFxuXHRcdFx0XHQvLyBqdXN0IHRvIGJlIHN1cmUsIHB1dCB0aGUgcmlnaHQgcHJvcGVydHkgdG8gMCBmZXcgbXMgYWZ0ZXJcblx0XHRcdFx0dGhpcy5kb20uc3RvcCh0cnVlKS5jc3MoJ3JpZ2h0JywgJzAnKTsgXHRcdFx0XG5cdFx0XHR9LCA0MDApO1x0XHRcdFx0XG5cdFx0fVx0XG5cblx0XHR0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG5cdH07XHRcblxuXHRjaGVja0lmTWFya2VyU3RpbGxWaXNpYmxlKClcblx0e1xuXHRcdC8vIGFmdGVyIGluZm9iYXIgYW5pbWF0aW9uLCB3ZSBjaGVjayBpZiB0aGUgbWFya2VyIFxuXHRcdC8vIGlzIG5vdCBoaWRkZWQgYnkgdGhlIGluZm8gYmFyXG5cdFx0c2V0VGltZW91dCggKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZWxlbWVudFZpc2libGUgJiYgdGhpcy5pc0N1cnJlbnRNYXJrZXJOb3RWaXNpYmxlT25NYXAoKSAmJiBBcHAuc3RhdGUgIT0gQXBwU3RhdGVzLlNob3dEaXJlY3Rpb25zKVxuXHRcdFx0e1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcImluZm8gYmFyIG1hcmtlciBub3QgdmlzaWJsZVwiLCBBcHBTdGF0ZXNbQXBwLnN0YXRlXSk7XG5cdFx0XHRcdEFwcC5tYXBDb21wb25lbnQucGFuVG9Mb2NhdGlvbih0aGlzLmVsZW1lbnRWaXNpYmxlLnBvc2l0aW9uKTtcblx0XHRcdFx0dGhpcy5lbGVtZW50VmlzaWJsZS5tYXJrZXIuc2hvd0JpZ1NpemUoKTtcblx0XHRcdFx0c2V0VGltZW91dCggKCkgPT4geyB0aGlzLmVsZW1lbnRWaXNpYmxlLm1hcmtlci5zaG93QmlnU2l6ZSgpOyB9LCAyMDApO1xuXHRcdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IHRoaXMuZWxlbWVudFZpc2libGUubWFya2VyLnNob3dCaWdTaXplKCk7IH0sIDEwMDApO1xuXHRcdFx0fVx0XG5cdFx0fSwgMTAwKTtcblx0fVxuXG5cdHByaXZhdGUgaXNDdXJyZW50TWFya2VyTm90VmlzaWJsZU9uTWFwKClcblx0e1xuXHRcdGxldCBtYXJrZXIgPSB0aGlzLmVsZW1lbnRWaXNpYmxlLm1hcmtlci5kb21NYXJrZXIoKTtcblx0XHRyZXR1cm4gKEFwcC5tYXBDb21wb25lbnQuaXNNYXBMb2FkZWQgJiYgIUFwcC5tYXBDb21wb25lbnQuY29udGFpbnModGhpcy5lbGVtZW50VmlzaWJsZS5wb3NpdGlvbikpIHx8XG5cdFx0ICAgICAgICghdGhpcy5pc0Rpc3BsYXllZEFzaWRlKCkgJiYgbWFya2VyICYmIG1hcmtlci5vZmZzZXQoKSAmJiAobWFya2VyLm9mZnNldCgpLnRvcCA+IHRoaXMuZG9tLm9mZnNldCgpLnRvcCAtIDUwKSk7XG5cdH1cblxuXHRoaWRlKGh1bWFuQWN0aW9uIDogYm9vbGVhbiA9IHRydWUpXG5cdHtcblx0XHRpZiAoIXRoaXMuaXNEaXNwbGF5ZWRBc2lkZSgpKVxuXHRcdHtcdFx0XHRcblx0XHRcdHRoaXMuaGlkZURldGFpbHMoKTtcblx0XHRcdHRoaXMuZG9tLmFuaW1hdGUoeydoZWlnaHQnOiAnMCd9LCAzNTAsICdzd2luZycsICgpID0+IFxuXHRcdFx0e1xuXHRcdFx0XHRBcHAuY29tcG9uZW50LnVwZGF0ZU1hcFNpemUoKTtcblx0XHRcdFx0dGhpcy5kb20uaGlkZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbWFwJykuY3NzKCdtYXJnaW4tcmlnaHQnLCcwcHgnKTtcblxuXHRcdFx0aWYgKHRoaXMuZG9tLmlzKCc6dmlzaWJsZScpKVxuXHRcdFx0e1x0XHRcblx0XHRcdFx0dGhpcy5kb20uYW5pbWF0ZSh7J3JpZ2h0JzonLTUwMHB4J30sMzUwLCdzd2luZycsZnVuY3Rpb24oKVxuXHRcdFx0XHR7IFxuXHRcdFx0XHRcdCQodGhpcykuaGlkZSgpOyAgXG5cdCAgXHRcdFx0QXBwLmNvbXBvbmVudC51cGRhdGVNYXBTaXplKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVx0XHRcblx0XHR9XG5cblx0XHRpZiAoaHVtYW5BY3Rpb24pIHRoaXMub25IaWRlLmVtaXQodHJ1ZSk7XHRcdFxuXG5cdFx0c2V0VGltZW91dCggKCkgPT4gdGhpcy5kb20uZmluZCgnI2VsZW1lbnQtaW5mbycpLmh0bWwoJycpLCAzNTApO1xuXG5cdFx0aWYgKHRoaXMuZWxlbWVudFZpc2libGUgJiYgdGhpcy5lbGVtZW50VmlzaWJsZS5tYXJrZXIpIHRoaXMuZWxlbWVudFZpc2libGUubWFya2VyLnNob3dOb3JtYWxTaXplKHRydWUpO1xuXG5cdFx0dGhpcy5lbGVtZW50VmlzaWJsZSA9IG51bGw7XG5cdFx0dGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcdFx0XG5cdH07XG5cblx0dG9nZ2xlRGV0YWlscygpXG5cdHtcdFxuXHRcdGlmICggdGhpcy5kb20uZmluZCgnLm1vcmVEZXRhaWxzJykuaXMoJzp2aXNpYmxlJykgKVxuXHRcdHtcblx0XHRcdHRoaXMuaGlkZURldGFpbHMoKTtcblx0XHRcdHRoaXMuZWxlbWVudFZpc2libGUuY29tcG9uZW50Lm1lbnVDb21wb25lbnQuc2hvd0Z1bGxUZXh0TWVudShmYWxzZSk7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHRpZiAodGhpcy5kb21NZW51LndpZHRoKCkgPj0gdGhpcy5kb21NZW51LmZpbmQoJy5tZW51LWVsZW1lbnQtaXRlbTp2aXNpYmxlJykubGVuZ3RoKjEwMCkgdGhpcy5lbGVtZW50VmlzaWJsZS5jb21wb25lbnQubWVudUNvbXBvbmVudC5zaG93RnVsbFRleHRNZW51KHRydWUpO1xuXG5cdFx0XHR0aGlzLmRvbS5maW5kKCcuZWxlbWVudC1pdGVtJykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1x0XHRcblx0XHRcdHRoaXMuZG9tLmZpbmQoJy5tb3JlRGV0YWlscycpLnNob3coKTtcdFxuXHRcdFx0dGhpcy5kb20uZmluZCgnLm1vcmVEZXRhaWxzLnRhYnMnKS5jc3MoJ2Rpc3BsYXknLCdmbGV4Jyk7XHRcdFxuXHRcdFx0XG5cdFx0XHQvLyBzaG93IHRoZSBleHBhbmQgbGFiZWwgaW4gaGVhZGVyIHdoZW4gaW50ZXJhY3RpdmUgc2VjdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRpZiAodGhpcy5kb20uZmluZCgnLmludGVyYWN0aXZlLXNlY3Rpb24nKS5oZWlnaHQoKSA+IDAgfHwgdGhpcy5kb20uZmluZCgnLmluZm8tYmFyLXRhYnMnKS5oZWlnaHQoKSA+IDApIFxuXHRcdFx0XHR0aGlzLmRvbS5maW5kKCcuZXhwYW5kTGFiZWwnKS5yZW1vdmVDbGFzcygnYmdkU29mdENvbG9yQXMgdHJhbnNmb3JtLWJpZycpO1xuXG5cdFx0XHR0aGlzLmRvbS5hbmltYXRlKHsnaGVpZ2h0JzonMTAwJSd9LDQwMCwnc3dpbmcnKTtcblxuXHRcdCAgIGxldCBoZWlnaHQgPSAgJCgnLmdvZ29jYXJ0by1jb250YWluZXInKS5oZWlnaHQoKTtcblx0XHRcdGhlaWdodCAtPSB0aGlzLmRvbS5maW5kKCcuY29sbGFwc2libGUtaGVhZGVyJykub3V0ZXJIZWlnaHQodHJ1ZSk7XHRcdFx0XG5cdFx0XHRoZWlnaHQgLT0gdGhpcy5kb20uZmluZCgnLmludGVyYWN0aXZlLXNlY3Rpb24nKS5vdXRlckhlaWdodCh0cnVlKTtcdFxuXHRcdFx0aGVpZ2h0IC09IHRoaXMuZG9tLmZpbmQoXCIubWVudS1lbGVtZW50XCIpLm91dGVySGVpZ2h0KHRydWUpO1xuXHRcdFx0aGVpZ2h0IC09IHRoaXMuZG9tLmZpbmQoXCIuaW5mby1iYXItdGFic1wiKS5vdXRlckhlaWdodCh0cnVlKTtcblxuXHRcdCAgdGhpcy5kb20uZmluZCgnLmNvbGxhcHNpYmxlLWJvZHknKS5jc3MoJ2hlaWdodCcsIGhlaWdodCk7XHRcblxuXHRcdCAgdGhpcy5zaG93Qm9keU1haW5UYWIoKTtcblx0XHQgIHRoaXMuZWxlbWVudFZpc2libGUuY29tcG9uZW50LmltYWdlc0NvbXBvbmVudC52ZXJ0aWNhbEFsaWduQ3VycmVudEltYWdlKCk7XG5cdFx0ICBBcHAuZ29nb0NvbnRyb2xDb21wb25lbnQuaGlkZSgpO1xuXHRcdH1cdFxuXHR9O1xuXG5cdGhpZGVEZXRhaWxzKClcblx0e1xuXHRcdEFwcC5nb2dvQ29udHJvbENvbXBvbmVudC5zaG93KCk7XG5cblx0XHRpZiAodGhpcy5kb20uZmluZCgnLm1vcmVEZXRhaWxzJykuaXMoJzp2aXNpYmxlJykpXG5cdFx0e1xuXHRcdFx0dGhpcy5kb20uZmluZCgnLm1vcmVEZXRhaWxzJykuaGlkZSgpO1xuXHRcdFx0dGhpcy5kb20uZmluZCgnLmVsZW1lbnQtaXRlbScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcdFxuXG5cdFx0XHRsZXQgZWxlbWVudEluZm9CYXJfbmV3SGVpZ2h0ID0gdGhpcy5kb20uZmluZCgnI2VsZW1lbnQtaW5mbycpLm91dGVySGVpZ2h0KHRydWUpO1xuXG5cdFx0XHR0aGlzLmRvbS5hbmltYXRlKHsnaGVpZ2h0JzogZWxlbWVudEluZm9CYXJfbmV3SGVpZ2h0fSwgNDAwLCAnc3dpbmcnKTtcblx0XHR9XHRcblx0fTtcblxuXHR1cGRhdGVJbmZvQmFyU2l6ZSgpXG5cdHtcblx0XHRpZiAoIXRoaXMuaXNEaXNwbGF5ZWRBc2lkZSgpKSB0aGlzLmRvbS5maW5kKCcubW9yZURldGFpbHMnKS5jc3MoJ2hlaWdodCcsICdhdXRvJyk7XG5cdFx0ZWxzZSBcblx0XHR7XHRcdFx0XG5cdFx0ICBcdGxldCBlbGVtZW50SW5mb0JhciA9IHRoaXMuZG9tO1xuXHRcdCAgXHRsZXQgaGVpZ2h0ID0gZWxlbWVudEluZm9CYXIub3V0ZXJIZWlnaHQodHJ1ZSk7XG5cdFx0XHRcdGhlaWdodCAtPSBlbGVtZW50SW5mb0Jhci5maW5kKCcuY29sbGFwc2libGUtaGVhZGVyJykub3V0ZXJIZWlnaHQodHJ1ZSk7XG5cdFx0XHRcdGhlaWdodCAtPSBlbGVtZW50SW5mb0Jhci5maW5kKCcuaW50ZXJhY3RpdmUtc2VjdGlvbjp2aXNpYmxlJykub3V0ZXJIZWlnaHQodHJ1ZSk7XG5cdFx0XHRcdGhlaWdodCAtPSBlbGVtZW50SW5mb0Jhci5maW5kKCcuaW5mby1iYXItdGFiczp2aXNpYmxlJykub3V0ZXJIZWlnaHQodHJ1ZSk7XG5cdFx0XHRcdGhlaWdodCAtPSBlbGVtZW50SW5mb0Jhci5maW5kKFwiLm1lbnUtZWxlbWVudFwiKS5vdXRlckhlaWdodCh0cnVlKTtcblxuXHRcdCAgXHR0aGlzLmRvbS5maW5kKCcuY29sbGFwc2libGUtYm9keScpLmNzcygnaGVpZ2h0JywgaGVpZ2h0KTtcblx0XHR9XG5cdH1cdFxuXG5cdHByaXZhdGUgc2hvd0JvZHlNYWluVGFiKCkgeyB0aGlzLmRvbS5maW5kKCcuaW5mby1iYXItdGFicycpLnRhYnMoJ3NlbGVjdF90YWInLCAnYm9keS1tYWluLXRhYi1jb250ZW50Jyk7IH1cbn1cblxuIiwiZGVjbGFyZSBsZXQgJCA6IGFueTtcblxuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBNb2RlcyB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgKiBhcyBDb29raWVzIGZyb20gXCIuLi8uLi91dGlscy9jb29raWVzXCI7XG5cbmV4cG9ydCBjbGFzcyBNYXBDb250cm9sc0NvbXBvbmVudFxueyAgICBcbiAgbGlzdGVuZXJMYXllckNoYW5nZUhhc0JlZW5DcmVhdGVkID0gZmFsc2U7XG5cbiAgaW5pdGlhbGl6ZSgpXG4gIHtcbiAgICAkKCcjZXhwb3J0LWlmcmFtZS1idG4nKS5jbGljayggKCkgPT4gXG4gICAgeyBcbiAgICAgICQoJyNleHBvcnQtaWZyYW1lLWJ0bicpLmhpZGVUb29sdGlwKCk7XG4gICAgICB0aGlzLnVwZGF0ZUlmcmFtZUNvZGUoKTtcbiAgICAgICQoJyNtb2RhbC1pZnJhbWUnKS5vcGVuTW9kYWwoKTsgXG4gICAgfSk7XG5cbiAgICAkKCcjbWFwLWRlZmF1bHQtdmlldy1idG4nKS5jbGljayggKCkgPT5cbiAgICB7XG4gICAgICBBcHAuZ2VvY29kZXIuZ2VvY29kZUFkZHJlc3MoJycsIChyZXN1bHQpID0+IHsgXG4gICAgICAgIEFwcC5tYXBDb21wb25lbnQuZml0Qm91bmRzKEFwcC5nZW9jb2Rlci5nZXRCb3VuZHMoKSwgdHJ1ZSk7IFxuICAgICAgfSk7IFxuICAgIH0pO1xuXG4gICAgJCgnI2dlb2xvY2FsaXplLWJ0bicpLmNsaWNrKCAoKSA9PlxuICAgIHtcbiAgICAgIEFwcC5zZWFyY2hCYXJDb21wb25lbnQuZ2VvbG9jYXRlVXNlcigpO1xuICAgIH0pO1xuXG4gICAgJCgnLmZlYXR1cmUtYnV0dG9uJykudG9vbHRpcCgpO1xuXG4gICAgJCgnI2RpcmVjdG9yeS1jb250ZW50LW1hcCAjY2hhbmdlLWxheWVycycpLmNsaWNrKCAoZSkgPT5cbiAgICB7XG4gICAgICAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbWFwICNjaGFuZ2UtbGF5ZXJzJykuaGlkZVRvb2x0aXAoKTtcbiAgICAgIHRoaXMuc2hvd0NvbnRyb2xMYXllcnMoKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG5cbiAgICAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbWFwICNjbG9zZS1sYXllcnMtcGFuZWwnKS5jbGljayggKGUpID0+XG4gICAgeyAgICBcbiAgICAgIHRoaXMuaGlkZUNvbnRyb2xMYXllcnMoKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7ICBcblxuICAgIC8vIHVwZGF0ZSBpZnJhbWUgY29kZSB3aGVuIHBhcmFtcyBjaGFuZ2VcbiAgICAkKCcjbW9kYWwtaWZyYW1lIC5pZnJhbWUtcGFyYW0nKS5jaGFuZ2UoICgpID0+IHsgdGhpcy51cGRhdGVJZnJhbWVDb2RlKCk7IH0pO1xuXG4gICAgJCgnLmxheWVycy1idXR0b24nKS50b29sdGlwKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUlmcmFtZUNvZGUoKVxuICB7XG4gICAgbGV0IHNyYyA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgc3JjICs9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gubGVuZ3RoID4gMCA/IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggKyAnJicgOiAnPyc7XG4gICAgc3JjICs9ICdpZnJhbWU9MSc7XG4gICAgaWYgKCQoJyNwYXJ0LXRheG9ub215LWNoZWNrYm94JykuaXMoJzpjaGVja2VkJykpIHNyYyArPSAnJmZ1bGxUYXhvbm9teT0wJztcbiAgICBcbiAgICB2YXIgc3RhbXBzSWRzID0gW107XG4gICAgJCgnI21vZGFsLWlmcmFtZSAuaWZyYW1lLXBhcmFtLnN0YW1wLXBhcmFtJykuZWFjaChmdW5jdGlvbigpIFxuICAgIHtcbiAgICAgIGlmICgkKHRoaXMpLmlzKCc6Y2hlY2tlZCcpKSB7IHN0YW1wc0lkcy5wdXNoKCQodGhpcykuZGF0YSgnaWQnKSk7IH1cbiAgICB9KTtcbiAgICBpZiAoc3RhbXBzSWRzLmxlbmd0aCA+IDApIHNyYyArPSAnJnN0YW1wc0lkcz0nICsgc3RhbXBzSWRzLmpvaW4oJywnKTtcbiAgICBcbiAgICBzcmMgKz0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cbiAgICBsZXQgd2lkdGggPSAkKCcjaWZyYW1lLXdpZHRoJykudmFsKCkgPyAkKCcjaWZyYW1lLXdpZHRoJykudmFsKCkgOiAnODAwJztcbiAgICBsZXQgaGVpZ2h0ID0gJCgnI2lmcmFtZS1oZWlnaHQnKS52YWwoKSA/ICQoJyNpZnJhbWUtaGVpZ2h0JykudmFsKCkgOiAnNjAwJztcblxuICAgIGxldCBpZnJhbWVDb2RlID0gYDxpZnJhbWUgd2lkdGg9XCIke3dpZHRofVwiIGhlaWdodD1cIiR7aGVpZ2h0fVwiIHNyYz1cIiR7c3JjfVwiIGZyYW1lYm9yZGVyPVwiMFwiIG1hcmdpbmhlaWdodD1cIjBcIiBtYXJnaW53aWR0aD1cIjBcIj48L2lmcmFtZT5gXG4gICAgJCgnI21vZGFsLWlmcmFtZSAjaWZyYW1lLWNvZGUnKS52YWwoaWZyYW1lQ29kZSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxpc3RlbmVyRm9yTGF5ZXJzKClcbiAge1xuICAgIGlmICh0aGlzLmxpc3RlbmVyTGF5ZXJDaGFuZ2VIYXNCZWVuQ3JlYXRlZCkgcmV0dXJuO1xuICAgIFxuICAgIGlmIChBcHAuY29uZmlnLm1hcC5zYXZlVGlsZUxheWVySW5Db29raWVzKVxuICAgIHtcbiAgICAgIC8vIGxpc3RlbiBmb3IgYmFzZSBsYXllciBzZWxlY3Rpb24sIHRvIHN0b3JlIHZhbHVlIGluIGNvb2tpZVxuICAgICAgJCgnI2RpcmVjdG9yeS1jb250ZW50LW1hcCAubGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvcicpLmNoYW5nZSggZnVuY3Rpb24oZSkgXG4gICAgICB7ICAgIFxuICAgICAgICBDb29raWVzLmNyZWF0ZUNvb2tpZSgnZGVmYXVsdEJhc2VMYXllcicsICQodGhpcykuc2libGluZ3MoJ3NwYW4nKS50ZXh0KCksIDEwMCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmxpc3RlbmVyTGF5ZXJDaGFuZ2VIYXNCZWVuQ3JlYXRlZCA9IHRydWU7XG4gIH1cblxuICBzaG93Q29udHJvbExheWVycygpXG4gIHtcbiAgICAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbWFwIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzJykuc2hvdygpO1xuICAgICQoJyNkaXJlY3RvcnktY29udGVudC1tYXAgI2Nsb3NlLWxheWVycy1wYW5lbCcpLnNob3coKTtcbiAgICB0aGlzLmNyZWF0ZUxpc3RlbmVyRm9yTGF5ZXJzKCk7XG4gIH1cblxuICBoaWRlQ29udHJvbExheWVycygpXG4gIHtcbiAgICAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbWFwIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzJykuaGlkZSgpO1xuICAgICQoJyNkaXJlY3RvcnktY29udGVudC1tYXAgI2Nsb3NlLWxheWVycy1wYW5lbCcpLmhpZGUoKTsgIFxuICB9XG59IiwiaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgVmlld1BvcnQsIEV2ZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0IHsgR2VvY29kZVJlc3VsdCwgUmF3Qm91bmRzIH0gZnJvbSBcIi4uLy4uL21vZHVsZXMvZ2VvY29kZXIubW9kdWxlXCI7XG5pbXBvcnQgKiBhcyBDb29raWVzIGZyb20gXCIuLi8uLi91dGlscy9jb29raWVzXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5kZWNsYXJlIHZhciAkLCBMIDogYW55O1xuXG4vKipcbiogVGhlIE1hcCBDb21wb25lbnQgd2hvIGVuY2Fwc3VsYXRlIHRoZSBtYXBcbipcbiogTWFwQ29tcG9uZW50IHB1YmxpY3MgbWV0aG9kcyBtdXN0IGJlIGFzIGluZGVwZW5kYW50IGFzIHBvc3NpYmxlXG4qIGZyb20gdGVjaG5vbG9neSB1c2VkIGZvciB0aGUgbWFwIChsZWFmbGV0IC4uLilcbipcbiogTWFwIGNvbXBvbmVudCBpcyBsaWtlIGFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBtYXAgYW5kIHRoZSByZXN0IG9mIHRoZSBBcHBcbiovXG5leHBvcnQgY2xhc3MgTWFwQ29tcG9uZW50XG57XG5cdG9uTWFwUmVhZHkgPSBuZXcgRXZlbnQ8YW55PigpO1xuXHRvbk1hcExvYWRlZCA9IG5ldyBFdmVudDxhbnk+KCk7XG5cdG9uQ2xpY2sgPSBuZXcgRXZlbnQ8YW55PigpO1xuXHRvbklkbGUgPSBuZXcgRXZlbnQ8YW55PigpO1xuXG5cdC8vTGVhZmxldCBtYXBcblx0bWFwXyA6IEwuTWFwID0gbnVsbDtcblxuXHRtYXJrZXJDbHVzdGVyZXJHcm91cCA9IG51bGw7XG5cdGlzSW5pdGlhbGl6ZWQgOiBib29sZWFuID0gZmFsc2U7XG5cdGlzTWFwTG9hZGVkIDogYm9vbGVhbiA9IGZhbHNlO1xuXHRvbGRab29tID0gLTE7XG5cdHZpZXdwb3J0IDogVmlld1BvcnQgPSBudWxsO1xuXHQvLyByZXF1ZXN0ZWQgYm91bmRzIHdobyBjb3VsZCBub3QgYmUgZGlzcGxheWVkIHdoZW4gbWFwIG5vdCBpbml0aWFsaXplZCAoc2VlIGZpdGJvdW5kcyBtZXRob2QpXG5cdHdhaXRpbmdCb3VuZHMgOiBMLkxhdExuZ0JvdW5kcyA9IG51bGw7XG5cblx0Z2V0TWFwKCl7IHJldHVybiB0aGlzLm1hcF87IH07IFxuXHRnZXRDZW50ZXIoKSA6IEwuTGF0TG5nIHsgcmV0dXJuIHRoaXMudmlld3BvcnQgPyBMLmxhdExuZyh0aGlzLnZpZXdwb3J0LmxhdCwgdGhpcy52aWV3cG9ydC5sbmcpIDogbnVsbDsgfVxuXHRnZXRCb3VuZHMoKSA6IEwuTGF0TG5nQm91bmRzIHsgcmV0dXJuIHRoaXMuaXNNYXBMb2FkZWQgPyB0aGlzLm1hcF8uZ2V0Qm91bmRzKCkgOiBudWxsOyB9XG5cdGdldFpvb20oKSB7IHJldHVybiB0aGlzLm1hcF8uZ2V0Wm9vbSgpOyB9XG5cdGdldE9sZFpvb20oKSB7IHJldHVybiB0aGlzLm9sZFpvb207IH1cblxuXHRzaG93KCkgeyAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbWFwJykuc2hvdygpOyB9XG5cdFxuXHRoaWRlKCkgeyAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbWFwJykuaGlkZSgpOyB9XG5cblx0aW5pdGlhbGl6ZSgpIFxuXHR7XHRcblx0XHRpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7IHRoaXMucmVzaXplKCk7IHJldHVybjsgfVxuXG5cdFx0bGV0IGNvbmZpZ1RpbGVMYXllcnMgPSBBcHAuY29uZmlnLm1hcC50aWxlTGF5ZXJzO1xuXHRcdGxldCBiYXNlTGF5ZXJzID0ge307XG5cdFx0Zm9yKGxldCB0aWxlTGF5ZXIgb2YgY29uZmlnVGlsZUxheWVycylcblx0XHR7XG5cdFx0XHRiYXNlTGF5ZXJzW3RpbGVMYXllci5uYW1lXSA9IEwudGlsZUxheWVyKHRpbGVMYXllci51cmwsIHthdHRyaWJ1dGlvbjogdGlsZUxheWVyLmF0dHJpYnV0aW9ufSk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IGRlZmF1bHRCYXNlTGF5ZXIgZnJvbSBDb29raWUgaWYgcG9zc2libGVcblx0XHRsZXQgYmFzZUxheWVySWQgPSBBcHAuY29uZmlnLm1hcC5zYXZlVGlsZUxheWVySW5Db29raWVzID8gQ29va2llcy5yZWFkQ29va2llKCdkZWZhdWx0QmFzZUxheWVyJykgOiBudWxsO1xuXHRcdGxldCBkZWZhdWx0QmFzZUxheWVyID0gYmFzZUxheWVycy5oYXNPd25Qcm9wZXJ0eShiYXNlTGF5ZXJJZCkgPyBiYXNlTGF5ZXJzW2Jhc2VMYXllcklkXSA6IGJhc2VMYXllcnNbQXBwLmNvbmZpZy5tYXAuZGVmYXVsdFRpbGVMYXllcl07XG5cblx0XHR0aGlzLm1hcF8gPSBMLm1hcCgnZGlyZWN0b3J5LWNvbnRlbnQtbWFwJywge1xuXHRcdCAgICB6b29tQ29udHJvbDogZmFsc2UsXG5cdFx0ICAgIGxheWVyczogW2RlZmF1bHRCYXNlTGF5ZXJdXG5cdFx0fSk7XG5cblx0XHR0aGlzLm1hcmtlckNsdXN0ZXJlckdyb3VwID0gTC5tYXJrZXJDbHVzdGVyR3JvdXAoe1xuXHRcdCAgICBzcGlkZXJmeU9uTWF4Wm9vbTogdHJ1ZSxcblx0XHQgICAgc2hvd0NvdmVyYWdlT25Ib3ZlcjogZmFsc2UsXG5cdFx0ICAgIHpvb21Ub0JvdW5kc09uQ2xpY2s6IHRydWUsXG5cdFx0ICAgIHNwaWRlcmZ5T25Ib3ZlcjogZmFsc2UsXG5cdFx0ICAgIHNwaWRlcmZ5TWF4Q291bnQ6IEluZmluaXR5LFxuXHRcdCAgICBzcGlkZXJmeURpc3RhbmNlTXVsdGlwbGllcjogMS4xLFxuXHRcdCAgICBjaHVua2VkTG9hZGluZzogdHJ1ZSxcblx0XHQgICAgYW5pbWF0ZTogZmFsc2UsXG5cdFx0ICAgIG1heENsdXN0ZXJSYWRpdXM6ICh6b29tKSA9PlxuXHRcdCAgICB7XG5cdFx0ICAgIFx0aWYgKHpvb20gPiAxMCkgcmV0dXJuIDYwO1xuXHRcdCAgICBcdGlmICh6b29tID4gNykgcmV0dXJuIDcwO1xuXHRcdCAgICBcdGVsc2UgcmV0dXJuIDcwO1xuXHRcdCAgICB9XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1hcmtlckNsdXN0ZXJlckdyb3VwLm9uKCdzcGlkZXJmaWVkJywgKGNsdXN0ZXJzLCBtYXJrZXJzKSA9PlxuXHRcdHtcblx0XHRcdEFwcC5lbGVtZW50c01vZHVsZS51cGRhdGVFbGVtZW50c0ljb25zKHRydWUpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZGRNYXJrZXJDbHVzdGVyR3JvdXAoKTtcdFx0XG5cblx0XHRMLmNvbnRyb2wuem9vbSh7cG9zaXRpb246J3RvcHJpZ2h0J30pLmFkZFRvKHRoaXMubWFwXyk7XHRcdFxuXHRcdEwuY29udHJvbC5sYXllcnMoYmFzZUxheWVycywge30sIHtwb3NpdGlvbjondG9wcmlnaHQnLCBjb2xsYXBzZWQ6IGZhbHNlfSkuYWRkVG8odGhpcy5tYXBfKTtcblxuXHRcdHRoaXMubWFwXy5vbignc2luZ2xlY2xpY2snLCAoZSkgPT4geyB0aGlzLm9uQ2xpY2suZW1pdCgpOyB9KTtcblx0XHR0aGlzLm1hcF8ub24oJ21vdmVlbmQnLCAoZSkgPT4gXG5cdFx0eyBcblx0XHRcdGxldCB2aXNpYmxlTWFya2Vyc0xlbmd0aCA9ICQoJy5sZWFmbGV0LW1hcmtlci1pY29uOnZpc2libGUnKS5sZW5ndGg7XHRcdFxuXHRcdFx0QXBwLmJvdW5kc01vZHVsZS5leHRlbmRNYXBCb3VuZHModGhpcy5vbGRab29tLCB0aGlzLm1hcF8uZ2V0Wm9vbSgpLCB2aXNpYmxlTWFya2Vyc0xlbmd0aCk7XHRcdFx0XG5cdFx0XHRcblx0XHRcdHRoaXMudXBkYXRlVmlld1BvcnQoKTtcblx0XHRcdHRoaXMub25JZGxlLmVtaXQoKTsgXG5cdFx0XHR0aGlzLm9sZFpvb20gPSB0aGlzLm1hcF8uZ2V0Wm9vbSgpO1x0XHRcdFxuXHRcdH0pO1xuXHRcdHRoaXMubWFwXy5vbignbG9hZCcsIChlKSA9PiBcblx0XHR7IFxuXHRcdFx0dGhpcy5pc01hcExvYWRlZCA9IHRydWU7IFxuXHRcdFx0dGhpcy5vbk1hcExvYWRlZC5lbWl0KCk7XHRcdFx0XG5cdFx0fSk7XG5cblx0XHR0aGlzLnJlc2l6ZSgpO1xuXHRcdHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG5cblx0XHQvLyBpZiB3ZSBiZWdhbiB3aXRoIExpc3QgTW9kZSwgd2hlbiB3ZSBpbml0aWFsaXplIG1hcFxuXHRcdC8vIHRoZXJlIGlzIGFscmVhZHkgYW4gYWRkcmVzcyBnZW9jb2RlZCBvciBhIHZpZXdwb3J0IGRlZmluZWRcblx0XHRpZiAodGhpcy53YWl0aW5nQm91bmRzKSB0aGlzLmZpdEJvdW5kcyh0aGlzLndhaXRpbmdCb3VuZHMsIGZhbHNlKTtcblx0XHRlbHNlIGlmICh0aGlzLnZpZXdwb3J0KSBzZXRUaW1lb3V0KCAoKSA9PiB7IHRoaXMuc2V0Vmlld1BvcnQodGhpcy52aWV3cG9ydCk7IH0sMjAwKTtcblx0XHRcblx0XHR0aGlzLm9uTWFwUmVhZHkuZW1pdCgpO1xuXHR9O1xuXG5cdGFkZE1hcmtlckNsdXN0ZXJHcm91cCgpIHsgdGhpcy5tYXBfLmFkZExheWVyKHRoaXMubWFya2VyQ2x1c3RlcmVyR3JvdXApOyB9XG5cblx0cmVzaXplKClcblx0e1xuXHRcdC8vY29uc29sZS5sb2coXCJSZXNpemUsIGN1cnIgdmlld3BvcnQgOlwiKTtcblx0XHQvLyBXYXJuaW5nICFJIGNoYW5nZWQgdGhlIGxlYWZsZXQuanMgZmlsZSBsaWJyYXJ5IG15c2VsZlxuXHRcdC8vIGJlY2F1c2UgdGhlIG9wdGlvbnMgZG9lc24ndCB3b3JrIHByb3Blcmx5XG5cdFx0Ly8gSSBjaGFuZ2VkIGl0IHRvIGF2b2lkIHBhbm5pbmcgd2hlbiByZXNpemluZyB0aGUgbWFwXG5cdFx0Ly8gYmUgY2FyZWZ1bCBpZiB1cGRhdGluZyB0aGUgbGVhZmxldCBsaWJyYXJ5IHRoaXMgd2lsbFxuXHRcdC8vIG5vdCB3b3JrIGFueW1vcmVcblx0XHRpZiAodGhpcy5tYXBfKSB0aGlzLm1hcF8uaW52YWxpZGF0ZVNpemUoZmFsc2UpO1xuXHR9XG5cblx0YWRkTWFya2VyKG1hcmtlciA6IEwuTWFya2VyKVxuXHR7XG5cdFx0dGhpcy5tYXJrZXJDbHVzdGVyZXJHcm91cC5hZGRMYXllcihtYXJrZXIpO1xuXHR9XG5cblx0YWRkTWFya2VycyhtYXJrZXJzIDogTC5NYXJrZXJbXSlcblx0e1xuXHRcdGlmICh0aGlzLm1hcmtlckNsdXN0ZXJlckdyb3VwKSB0aGlzLm1hcmtlckNsdXN0ZXJlckdyb3VwLmFkZExheWVycyhtYXJrZXJzKTtcblx0fVxuXG5cdHJlbW92ZU1hcmtlcihtYXJrZXIgOiBMLk1hcmtlcilcblx0e1xuXHRcdHRoaXMubWFya2VyQ2x1c3RlcmVyR3JvdXAucmVtb3ZlTGF5ZXIobWFya2VyKTtcblx0fVxuXG5cdHJlbW92ZU1hcmtlcnMobWFya2VycyA6IEwuTWFya2VyW10pXG5cdHtcblx0XHRpZiAodGhpcy5tYXJrZXJDbHVzdGVyZXJHcm91cCkgdGhpcy5tYXJrZXJDbHVzdGVyZXJHcm91cC5yZW1vdmVMYXllcnMobWFya2Vycyk7XG5cdH1cblxuXHRjbGVhck1hcmtlcnMoKVxuXHR7XG5cdFx0aWYgKHRoaXMubWFya2VyQ2x1c3RlcmVyR3JvdXApIHRoaXMubWFya2VyQ2x1c3RlcmVyR3JvdXAuY2xlYXJMYXllcnMoKTtcblx0fVxuXG5cdGZpdEVsZW1lbnRzQm91bmRzKGVsZW1lbnRzIDogRWxlbWVudFtdKVxuXHR7XG5cdFx0bGV0IGJvdW5kcyA9IEwubGF0TG5nQm91bmRzKCk7XG5cdFx0Zm9yKGxldCBlbGVtZW50IG9mIGVsZW1lbnRzKSBib3VuZHMuZXh0ZW5kKGVsZW1lbnQucG9zaXRpb24pO1xuXHRcdHRoaXMuZml0Qm91bmRzKGJvdW5kcyk7XG5cdH1cblxuXHQvLyBmaXQgbWFwIHZpZXcgdG8gYm91bmRzXG5cdGZpdEJvdW5kcyhib3VuZHMgOiBMLkxhdExuZ0JvdW5kcywgYW5pbWF0ZSA6IGJvb2xlYW4gPSB0cnVlKVxuXHR7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJmaXRib3VuZHNcIiwgYm91bmRzKTtcblx0XHRpZiAoIXRoaXMuaXNJbml0aWFsaXplZClcblx0XHR7XG5cdFx0XHR0aGlzLndhaXRpbmdCb3VuZHMgPSBib3VuZHM7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8qaWYgKHRoaXMuaXNNYXBMb2FkZWQgJiYgYW5pbWF0ZSkgQXBwLm1hcCgpLmZseVRvQm91bmRzKGJvdW5kcyk7XG5cdFx0ZWxzZSovIEFwcC5tYXAoKS5maXRCb3VuZHMoYm91bmRzKTtcblx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IEFwcC5tYXBNYW5hZ2VyLmhhbmRsZU1hcElkbGUoKTsgY29uc29sZS5sb2coXCJmb3JjZSBpZGxlXCIpOyB9LCA1MDApO1xuXHR9XHRcdFxuXG5cdGZpdERlZmF1bHRCb3VuZHMoKVxuXHR7XG5cdFx0dGhpcy5maXRCb3VuZHMoQXBwLmJvdW5kc01vZHVsZS5kZWZhdWx0Qm91bmRzKTtcblx0fVxuXG5cdHBhblRvTG9jYXRpb24obG9jYXRpb24gOiBMLkxhdExuZywgem9vbT8sIGFuaW1hdGUgOiBib29sZWFuID0gdHJ1ZSlcblx0e1xuXHRcdHpvb20gPSB6b29tIHx8IHRoaXMuZ2V0Wm9vbSgpIHx8IDEyO1xuXHRcdC8vIGNvbnNvbGUubG9nKFwicGFuVG9sb2NhdGlvblwiLCBsb2NhdGlvbik7XG5cblx0XHQvKmlmICh0aGlzLmlzTWFwTG9hZGVkICYmIGFuaW1hdGUpIHRoaXMubWFwXy5mbHlUbyhsb2NhdGlvbiwgem9vbSk7XG5cdFx0ZWxzZSovIHRoaXMubWFwXy5zZXRWaWV3KGxvY2F0aW9uLCB6b29tKTtcblx0fTtcblxuXHQvLyB0aGUgYWN0dWFsIGRpc3BsYXllZCBtYXAgcmFkaXVzIChkaXN0YW5jZSBmcm9tIGNyb25lciB0byBjZW50ZXIpXG5cdG1hcFJhZGl1c0luS20oKSA6IG51bWJlclxuXHR7XG5cdFx0aWYgKCF0aGlzLmlzTWFwTG9hZGVkKSByZXR1cm4gMDtcblx0XHRyZXR1cm4gTWF0aC5mbG9vcih0aGlzLm1hcF8uZ2V0Qm91bmRzKCkuZ2V0Tm9ydGhFYXN0KCkuZGlzdGFuY2VUbyh0aGlzLm1hcF8uZ2V0Q2VudGVyKCkpIC8gMTAwMCk7XG5cdH1cblxuXHQvLyBkaXN0YW5jZSBmcm9tIGxhc3Qgc2F2ZWQgbG9jYXRpb24gdG8gYSBwb3NpdGlvblxuXHRkaXN0YW5jZUZyb21Mb2NhdGlvblRvKHBvc2l0aW9uIDogTC5MYXRMbmcpXG5cdHtcblx0XHRpZiAoIUFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbigpKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gQXBwLmdlb2NvZGVyLmdldExvY2F0aW9uKCkuZGlzdGFuY2VUbyhwb3NpdGlvbikgLyAxMDAwO1xuXHR9XG5cblx0Y29udGFpbnMocG9zaXRpb24gOiBMLkxhdExuZ0V4cHJlc3Npb24pIDogYm9vbGVhblxuXHR7XG5cdFx0aWYgKHBvc2l0aW9uICYmIHRoaXMuaXNNYXBMb2FkZWQpXG5cdFx0e1xuXHRcdFx0IHJldHVybiB0aGlzLm1hcF8uZ2V0Qm91bmRzKCkuY29udGFpbnMocG9zaXRpb24pO1xuXHRcdH1cblx0XHRjb25zb2xlLmxvZyhcIk1hcENvbXBvbmVudC0+Y29udGFpbnMgOiBtYXAgbm90IGxvYWRlZCBvciBlbGVtZW50IHBvc2l0aW9uIHVuZGVmaW5lZFwiKTtcblx0XHRyZXR1cm4gZmFsc2U7XHRcdFxuXHR9XG5cblx0ZXh0ZW5kZWRDb250YWlucyhwb3NpdGlvbiA6IEwuTGF0TG5nRXhwcmVzc2lvbikgOiBib29sZWFuXG5cdHtcblx0XHRpZiAodGhpcy5pc01hcExvYWRlZCAmJiBwb3NpdGlvbilcblx0XHR7XG5cdFx0XHQgcmV0dXJuIEFwcC5ib3VuZHNNb2R1bGUuZXh0ZW5kZWRCb3VuZHMuY29udGFpbnMocG9zaXRpb24pO1xuXHRcdH1cblx0XHQvL2NvbnNvbGUubG9nKFwiTWFwQ29tcG9uZW50LT5jb250YWlucyA6IG1hcCBub3QgbG9hZGVkIG9yIGVsZW1lbnQgcG9zaXRpb24gdW5kZWZpbmVkXCIpO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHVwZGF0ZVZpZXdQb3J0KClcblx0e1xuXHRcdGlmICghdGhpcy52aWV3cG9ydCkgdGhpcy52aWV3cG9ydCA9IG5ldyBWaWV3UG9ydCgpO1xuXHRcdHRoaXMudmlld3BvcnQubGF0ID0gIHRoaXMubWFwXy5nZXRDZW50ZXIoKS5sYXQ7XG5cdFx0dGhpcy52aWV3cG9ydC5sbmcgPSAgdGhpcy5tYXBfLmdldENlbnRlcigpLmxuZztcblx0XHR0aGlzLnZpZXdwb3J0Lnpvb20gPSB0aGlzLmdldFpvb20oKTtcblx0fVx0XG5cblx0c2V0Vmlld1BvcnQoJHZpZXdwb3J0IDogVmlld1BvcnQsICRwYW5NYXBUb1ZpZXdwb3J0IDogYm9vbGVhbiA9IHRydWUpXG5cdHtcdFx0XG5cdFx0aWYgKHRoaXMubWFwXyAmJiAkdmlld3BvcnQgJiYgJHBhbk1hcFRvVmlld3BvcnQpXG5cdFx0e1xuXHRcdFx0Ly9jb25zb2xlLmxvZyhcInNldFZpZXdQb3J0XCIsICR2aWV3cG9ydCk7XG5cdFx0XHRsZXQgdGltZW91dCA9IEFwcC5zdGF0ZSA9PSBBcHBTdGF0ZXMuU2hvd0VsZW1lbnRBbG9uZSA/IDUwMCA6IDA7XG5cdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IHRoaXMubWFwXy5zZXRWaWV3KEwubGF0TG5nKCR2aWV3cG9ydC5sYXQsICR2aWV3cG9ydC5sbmcpLCAkdmlld3BvcnQuem9vbSkgfSwgdGltZW91dCk7XG5cdFx0fVxuXHRcdHRoaXMudmlld3BvcnQgPSAkdmlld3BvcnQ7XG5cdH1cblxuXHRpc01hcEJvdW5kcygpIHsgcmV0dXJuIHRoaXMuZ2V0TWFwKCkgJiYgdGhpcy5nZXRNYXAoKS5nZXRCb3VuZHMoKTsgfVxuXG5cdGhhc1pvb21lZEluKClcbiAge1xuICAgIGxldCB6b29tID0gdGhpcy5nZXRab29tKCk7XG4gICAgbGV0IG9sZF96b29tID0gdGhpcy5nZXRPbGRab29tKCk7XG4gICAgcmV0dXJuICh6b29tICE9IG9sZF96b29tICYmIG9sZF96b29tICE9IC0xICYmIHpvb20gPiBvbGRfem9vbSk7XG4gIH1cbn1cbiIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cbmltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmRlY2xhcmUgbGV0ICQsIEwgOiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBNYXJrZXJcbntcblx0cHJpdmF0ZSBlbGVtZW50SWQgOiBzdHJpbmc7XG5cdHByaXZhdGUgaXNBbmltYXRpbmcgOiBib29sZWFuID0gZmFsc2U7XG5cdC8vIHdlIHVzZSBsZWFmbGV0IG1hcmtlcnMgdG8gZGlzcGxheSBtYXJrZXIgb24gbWFwLiBNYXJrZXIgaXMganVzdCBhIGV4dGVuc2lvbiBvZiBsZWFmbGV0TWFya2VyXG5cdHByaXZhdGUgbGVhZmxldE1hcmtlciA6IEwuTWFya2VyO1xuXHQvLyB3ZSBtYXkgd2FudCB0byBoYWxmIGhpZGRlbiBzb21lcyBtYXJrZXJzIGluIHBhcnRpY3VsYXIgc3RhdGVzIChzZXR0aW5nIG9wYWNpdHkgdG8gLjUpXG5cdHByaXZhdGUgaGFsZkhpZGRlbiA6IGJvb2xlYW4gPSBmYWxzZTtcblx0Ly8gd2UgdW5jbGVzdGVyaXplIHNtYWxsIGNsdXN0ZXJzIHRvIHNob3cgZGlyZWN0bHkgdGhlIG1hcmtlcnMuIEZvciB0aGUgbWFya2VycyB0byBiZSB2aXNpYmxlLCB3aSBpbmNsaW5hdGUgc29tZSBvZiB0aGVtIHRvIHJpZ2h0IG9mIGxlZnRcblx0cHJpdmF0ZSBpbmNsaW5hdGlvbiA9IFwibm9ybWFsXCI7XG5cblx0Y29uc3RydWN0b3IoZWxlbWVudElkIDogc3RyaW5nLCBwb3NpdGlvbl8gOiBMLkxhdExuZykgXG5cdHtcblx0XHR0aGlzLmVsZW1lbnRJZCA9IGVsZW1lbnRJZDtcblxuXHRcdGlmICghcG9zaXRpb25fKVxuXHRcdHtcblx0XHRcdGxldCBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KCk7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gbnVsbCkgY29uc29sZS5sb2coXCJlbGVtZW50IG5vbiBnZW9sb2NhbGl6ZWQgaWQgPSBcIiArIHRoaXMuZWxlbWVudElkKTtcblx0XHRcdGVsc2UgcG9zaXRpb25fID0gZWxlbWVudC5wb3NpdGlvbjtcblx0XHR9IFxuXG5cdFx0dGhpcy5sZWFmbGV0TWFya2VyID0gTC5tYXJrZXIocG9zaXRpb25fLCB7ICdyaXNlT25Ib3ZlcicgOiB0cnVlfSk7XHRcdFx0XHRcblx0XHR0aGlzLmxlYWZsZXRNYXJrZXIub24oJ2NsaWNrJywgKGV2KSA9PiB7IEFwcC5tYXBNYW5hZ2VyLmhhbmRsZU1hcmtlckNsaWNrKHRoaXMpOyB9KTtcdFxuXHRcdHRoaXMubGVhZmxldE1hcmtlci5vbignbW91c2VvdmVyJywgKGV2KSA9PiB7IGlmICghdGhpcy5pc0FuaW1hdGluZykgdGhpcy5zaG93QmlnU2l6ZSgpOyB9KTtcblx0XHR0aGlzLmxlYWZsZXRNYXJrZXIub24oJ21vdXNlb3V0JywgKGV2KSA9PiB7IGlmICghdGhpcy5pc0FuaW1hdGluZykgdGhpcy5zaG93Tm9ybWFsU2l6ZSgpOyB9KTtcblx0XHR0aGlzLmxlYWZsZXRNYXJrZXIuc2V0SWNvbihMLmRpdkljb24oe2NsYXNzTmFtZTogJ2xlYWZsZXQtbWFya2VyLWNvbnRhaW5lcicsIGh0bWw6IFwiPHNwYW4gaWQ9XFxcIm1hcmtlci1cIisgdGhpcy5lbGVtZW50SWQgKyBcIlxcXCIgZ29nby1pY29uLW1hcmtlcj48L3NwYW4+XCJ9KSk7XG5cdH07XHRcdFxuXG5cdHVwZGF0ZSgpIFxuXHR7XHRcdFxuXHRcdGxldCBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KCk7XG5cblx0XHRsZXQgZGlzYWJsZU1hcmtlciA9IGZhbHNlO1xuXHRcdGxldCBzaG93TW9yZUljb24gPSB0cnVlO1xuXG5cdFx0bGV0IG9wdGlvbnNUb0Rpc3BsYXkgPSBlbGVtZW50LmdldEljb25zVG9EaXNwbGF5KCk7XG5cblx0XHRsZXQgaHRtbE1hcmtlciA9IEFwcC50ZW1wbGF0ZU1vZHVsZS5yZW5kZXIoJ21hcmtlcicsIFxuXHRcdHtcblx0XHRcdGVsZW1lbnQgOiBlbGVtZW50LCBcblx0XHRcdG1haW5PcHRpb25Ub0Rpc3BsYXk6IG9wdGlvbnNUb0Rpc3BsYXlbMF0sXG5cdFx0XHRvdGhlck9wdGlvbnNUb0Rpc3BsYXk6IG9wdGlvbnNUb0Rpc3BsYXkuc2xpY2UoMSksIFxuXHRcdFx0c2hvd01vcmVJY29uIDogc2hvd01vcmVJY29uLFxuXHRcdFx0ZGlzYWJsZU1hcmtlciA6IGRpc2FibGVNYXJrZXIsXG5cdFx0XHRwZW5kaW5nQ2xhc3MgOiBlbGVtZW50LmlzUGVuZGluZygpICYmIEFwcC5jb25maWcuaXNGZWF0dXJlQXZhaWxhYmxlKCdwZW5kaW5nJykgPyAncGVuZGluZycgOiAnJyxcblx0XHRcdHNob3dQZW5kaW5nIDogZWxlbWVudC5pc1BlbmRpbmcoKSAmJiBBcHAuY29uZmlnLmlzRmVhdHVyZUF2YWlsYWJsZSgncGVuZGluZycpLFxuXHRcdFx0Y29uZmlnIDogQXBwLmNvbmZpZ1xuXHRcdH0pO1xuXG5cdFx0Ly8gc2F2ZSB0aGUgY2xhc3MgYmVjYXVzZSBpdCBoYXMgYmVlbiBtb2RpZmllZCBieSBtYXJrZXIgY2x1c3RlciBhZGRpbmcgb3Jcblx0XHQvLyByZW1vdmluZyB0aGUgXCJyb3RhdGVcIiBjbGFzc1x0XG5cdFx0bGV0IG9sZENsYXNzTmFtZSA9ICg8YW55PnRoaXMubGVhZmxldE1hcmtlcikuX2ljb24gPyAgKDxhbnk+dGhpcy5sZWFmbGV0TWFya2VyKS5faWNvbi5jbGFzc05hbWUgOiAnbGVhZmxldC1tYXJrZXItY29udGFpbmVyJztcblx0XHRvbGRDbGFzc05hbWUucmVwbGFjZSgnbGVhZmxldC1tYXJrZXItaWNvbicsICcnKTtcbiAgXHR0aGlzLmxlYWZsZXRNYXJrZXIuc2V0SWNvbihMLmRpdkljb24oe2NsYXNzTmFtZTogb2xkQ2xhc3NOYW1lLCBodG1sOiBodG1sTWFya2VyfSkpO1x0XG5cbiAgXHRpZiAodGhpcy5pc0Rpc3BsYXllZE9uRWxlbWVudEluZm9CYXIoKSkgdGhpcy5zaG93QmlnU2l6ZSgpO1xuXHR9O1xuXG5cdGFuaW1hdGVEcm9wKCkgXG5cdHtcblx0XHR0aGlzLmlzQW5pbWF0aW5nID0gdHJ1ZTtcblx0XHR0aGlzLmRvbU1hcmtlcigpLmFuaW1hdGUoe3RvcDogJy09MjVweCd9LCAzMDAsICdlYXNlSW5PdXRDdWJpYycpO1xuXHRcdHRoaXMuZG9tTWFya2VyKCkuYW5pbWF0ZSh7dG9wOiAnKz0yNXB4J30sIDI1MCwgJ2Vhc2VJbk91dEN1YmljJywgKCkgPT4ge3RoaXMuaXNBbmltYXRpbmcgPSBmYWxzZTsgdGhpcy5kb21NYXJrZXIoKS5jc3MoJ3RvcCcsICdhdXRvJyl9ICk7XG5cdH07XHRcblxuXHRzaG93QmlnU2l6ZSgpIFxuXHR7XHRcdFx0XG5cdFx0dGhpcy5hZGRDbGFzc1RvTGVhZmxldE1hcmtlcl8oXCJCaWdTaXplXCIpO1xuXHRcdGxldCBkb21NYXJrZXIgPSB0aGlzLmRvbU1hcmtlcigpO1xuXHRcdGRvbU1hcmtlci5wYXJlbnQoKS5maW5kKCcubWFya2VyLW5hbWUnKS5zaG93KCk7XG5cdFx0ZG9tTWFya2VyLmZpbmQoJy5tb3JlSWNvbkNvbnRhaW5lcicpLnNob3coKTtcblx0XHRkb21NYXJrZXIuZmluZCgnLmdvZ28taWNvbi1wbHVzLWNpcmNsZScpLmhpZGUoKTtcblx0fTtcblxuXHRzaG93Tm9ybWFsU2l6ZSgkZm9yY2UgOiBib29sZWFuID0gZmFsc2UpIFxuXHR7XHRcblx0XHRpZiAoISRmb3JjZSAmJiB0aGlzLmlzRGlzcGxheWVkT25FbGVtZW50SW5mb0JhcigpKSByZXR1cm47XG5cblx0XHRsZXQgZG9tTWFya2VyID0gdGhpcy5kb21NYXJrZXIoKTtcblx0XHR0aGlzLnJlbW92ZUNsYXNzVG9MZWFmbGV0TWFya2VyXyhcIkJpZ1NpemVcIik7XG5cdFx0ZG9tTWFya2VyLnBhcmVudCgpLmZpbmQoJy5tYXJrZXItbmFtZScpLmhpZGUoKTtcblx0XHRkb21NYXJrZXIuZmluZCgnLm1vcmVJY29uQ29udGFpbmVyJykuaGlkZSgpO1xuXHRcdGRvbU1hcmtlci5maW5kKCcuZ29nby1pY29uLXBsdXMtY2lyY2xlJykuc2hvdygpO1xuXHR9O1xuXG5cdHNob3dIYWxmSGlkZGVuKCRmb3JjZSA6IGJvb2xlYW4gPSBmYWxzZSkgXG5cdHtcdFx0XG5cdFx0aWYgKCEkZm9yY2UgJiYgdGhpcy5pc0Rpc3BsYXllZE9uRWxlbWVudEluZm9CYXIoKSkgcmV0dXJuO1xuXG5cdFx0dGhpcy5hZGRDbGFzc1RvTGVhZmxldE1hcmtlcl8oXCJoYWxmSGlkZGVuXCIpO1xuXHRcdGxldCBkb21NYXJrZXIgPSB0aGlzLmRvbU1hcmtlcigpO1xuXHRcdGRvbU1hcmtlci5jc3MoJ3otaW5kZXgnLCcxJyk7XG5cdFx0ZG9tTWFya2VyLmZpbmQoJy5nb2dvLWljb24tcGx1cy1jaXJjbGUnKS5hZGRDbGFzcyhcImhhbGZIaWRkZW5cIik7XG5cdFx0ZG9tTWFya2VyLmZpbmQoJy5tb3JlSWNvbkNvbnRhaW5lcicpLmFkZENsYXNzKFwiaGFsZkhpZGRlblwiKTtcblxuXHRcdHRoaXMuaGFsZkhpZGRlbiA9IHRydWU7XG5cdH07XG5cblx0c2hvd05vcm1hbEhpZGRlbigpIFxuXHR7XHRcdFxuXHRcdHRoaXMucmVtb3ZlQ2xhc3NUb0xlYWZsZXRNYXJrZXJfKFwiaGFsZkhpZGRlblwiKTtcblx0XHRsZXQgZG9tTWFya2VyID0gdGhpcy5kb21NYXJrZXIoKTtcblx0XHRkb21NYXJrZXIuY3NzKCd6LWluZGV4JywnMTAnKTtcblx0XHRkb21NYXJrZXIuZmluZCgnLmdvZ28taWNvbi1wbHVzLWNpcmNsZScpLnJlbW92ZUNsYXNzKFwiaGFsZkhpZGRlblwiKTtcblx0XHRkb21NYXJrZXIuZmluZCgnLm1vcmVJY29uQ29udGFpbmVyJykucmVtb3ZlQ2xhc3MoXCJoYWxmSGlkZGVuXCIpO1xuXG5cdFx0dGhpcy5oYWxmSGlkZGVuID0gZmFsc2U7XG5cdH07XG5cblx0cHJpdmF0ZSBhZGRDbGFzc1RvTGVhZmxldE1hcmtlcl8oY2xhc3NUb0FkZCkgXG5cdHtcdFx0XG5cdFx0dGhpcy5kb21NYXJrZXIoKS5hZGRDbGFzcyhjbGFzc1RvQWRkKTtcblx0XHR0aGlzLmRvbU1hcmtlcigpLnNpYmxpbmdzKCcubWFya2VyLW5hbWUnKS5hZGRDbGFzcyhjbGFzc1RvQWRkKTsgXG5cdH07XG5cblx0cHJpdmF0ZSByZW1vdmVDbGFzc1RvTGVhZmxldE1hcmtlcl8oY2xhc3NUb1JlbW92ZSkgXG5cdHtcdFx0XG5cdFx0dGhpcy5kb21NYXJrZXIoKS5yZW1vdmVDbGFzcyhjbGFzc1RvUmVtb3ZlKTtcblx0XHR0aGlzLmRvbU1hcmtlcigpLnNpYmxpbmdzKCcubWFya2VyLW5hbWUnKS5yZW1vdmVDbGFzcyhjbGFzc1RvUmVtb3ZlKTsgICAgICBcblx0fTtcblxuXHRpc0Rpc3BsYXllZE9uRWxlbWVudEluZm9CYXIoKSB7IHJldHVybiBBcHAuaW5mb0JhckNvbXBvbmVudC5nZXRDdXJyRWxlbWVudElkKCkgPT0gdGhpcy5lbGVtZW50SWQ7IH1cblxuXHRkb21NYXJrZXIoKSB7IHJldHVybiAkKCcjbWFya2VyLScrIHRoaXMuZWxlbWVudElkKTsgfVxuXG5cdGdldElkICgpIDogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZWxlbWVudElkOyB9O1xuXG5cdGdldExlYWZsZXRNYXJrZXIgKCkgOiBMLk1hcmtlciB7IHJldHVybiB0aGlzLmxlYWZsZXRNYXJrZXI7IH07XG5cblx0aXNIYWxmSGlkZGVuKCkgOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaGFsZkhpZGRlbjsgfVxuXG5cdGdldEVsZW1lbnQgKCkgOiBFbGVtZW50IHsgcmV0dXJuIEFwcC5lbGVtZW50c01vZHVsZS5nZXRFbGVtZW50QnlJZCh0aGlzLmVsZW1lbnRJZCk7IH07XG5cblx0Z2V0UG9zaXRpb24gKCkgOiBMLkxhdExuZyB7IHJldHVybiB0aGlzLmxlYWZsZXRNYXJrZXIuZ2V0TGF0TG5nKCk7IH07XG59XG5cbiIsImltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5kZWNsYXJlIHZhciAkIDogYW55O1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RNb2RhbENvbXBvbmVudFxue1xuXHRkb20gOiBhbnk7XG5cdGVsZW1lbnQgOiBFbGVtZW50O1x0XG5cdHByb3RlY3RlZCBhamF4VXJsID0gXCJcIjtcblxuXHRjb25zdHJ1Y3Rvcihkb20gOiBzdHJpbmcpXG5cdHtcblx0XHR0aGlzLmRvbSA9ICQoZG9tKTtcblx0XHR0aGlzLmluaXRpYWxpemUoKTtcblx0XHR0aGlzLmJpbmRzKCk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgaW5pdGlhbGl6ZSgpIHt9XG5cblx0cHJvdGVjdGVkIGJpbmRzKClcblx0e1xuXHRcdHRoaXMuZG9tLmZpbmQoJ2J1dHRvblt0eXBlPXN1Ym1pdF0nKS5jbGljaygoZSkgPT4gdGhpcy5oYW5kbGVTdWJtaXQoZSkpO1xuXHR9XG5cblx0b3BlbihlbGVtZW50IDogRWxlbWVudClcblx0e1x0XHRcblx0XHR0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXHRcdHRoaXMuY2xlYXJMb2FkZXIoKTtcblx0XHR0aGlzLmRvbS5maW5kKCcuZ2VuZXJpYy1lcnJvci1tZXNzYWdlJykuaGlkZSgpO1xuXHRcdHRoaXMuYmVmb3JlT3BlbihlbGVtZW50KTtcblx0XHR0aGlzLmRvbS5vcGVuTW9kYWwoKTtcblx0fVxuXG5cdHByb3RlY3RlZCBiZWZvcmVPcGVuKGVsZW1lbnQgOiBFbGVtZW50KSB7IH1cblxuXHRwcm90ZWN0ZWQgaGFuZGxlU3VibWl0KGUpIFxuXHR7XG5cdFx0aWYgKCF0aGlzLmVsZW1lbnQpIHJldHVybjtcblx0XHR0aGlzLmRpc3BsYXlMb2FkZXIoKTtcblx0XHR0aGlzLnN1Ym1pdCgpO1x0XHRcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHR9XG5cblx0c3VibWl0KCkge31cblxuXHRwcm90ZWN0ZWQgc2VuZFJlcXVlc3QoZGF0YSlcblx0e1xuXHRcdEFwcC5hamF4TW9kdWxlLnNlbmRSZXF1ZXN0KHRoaXMuYWpheFVybCwgJ3Bvc3QnLCBkYXRhLFxuXHRcdCAgKHJlc3BvbnNlKSAgICAgPT4geyBcblx0XHQgIFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB0aGlzLmNsZWFyTG9hZGVyKCksIDUwMCk7IFxuXHRcdCAgXHRcdHRoaXMub25TdWNjZXNzKHJlc3BvbnNlKTtcblx0XHQgIFx0fSxcblx0XHQgIChlcnJvck1lc3NhZ2UpID0+IHsgdGhpcy5jbGVhckxvYWRlcigpOyB0aGlzLm9uRXJyb3IoZXJyb3JNZXNzYWdlKTsgfVxuXHRcdCk7IFxuXHR9XG5cblx0cHJvdGVjdGVkIGRpc3BsYXlMb2FkZXIoKVxuXHR7XG5cdFx0dGhpcy5kb20uZmluZCgnLmNhbmNlbC1idG4nKS5zaG93KCk7XG5cdFx0dGhpcy5kb20uZmluZCgnYnV0dG9uW3R5cGU9c3VibWl0XScpLmhpZGUoKTtcblx0XHR0aGlzLmRvbS5maW5kKCcubG9hZGVyLW92ZXJsYXknKS5mYWRlSW4oODAwKTtcblx0fVxuXG5cdHByb3RlY3RlZCBjbGVhckxvYWRlcigpXG5cdHtcblx0XHR0aGlzLmRvbS5maW5kKCcuY2FuY2VsLWJ0bicpLmhpZGUoKTtcblx0XHR0aGlzLmRvbS5maW5kKCdidXR0b25bdHlwZT1zdWJtaXRdJykuc2hvdygpO1xuXHRcdHRoaXMuZG9tLmZpbmQoJy5sb2FkZXItb3ZlcmxheScpLmhpZGUoKTtcblx0fVxuXG5cdHByb3RlY3RlZCBvblN1Y2Nlc3MocmVzcG9uc2UpXG5cdHtcblx0XHRpZiAocmVzcG9uc2Uuc3VjY2Vzcylcblx0XHR7XG5cdFx0XHR0aGlzLmRvbS5jbG9zZU1vZGFsKCk7XG5cdFx0XHR0aGlzLmVsZW1lbnQuY29tcG9uZW50LmFkZEZsYXNoTWVzc2FnZShyZXNwb25zZS5tZXNzYWdlKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdHRoaXMub25FcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgb25FcnJvcihlcnJvck1lc3NhZ2UpXG5cdHtcblx0XHR0aGlzLmRvbS5maW5kKCcjbWVzc2FnZS1lcnJvcicpLnRleHQoZXJyb3JNZXNzYWdlKS5zaG93KCk7XG5cdH1cbn0iLCJkZWNsYXJlIHZhciAkIDogYW55XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuL2Fic3RyYWN0LW1vZGFsLmNvbXBvbmVudFwiO1xuXG5leHBvcnQgY2xhc3MgRGVsZXRlQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RNb2RhbENvbXBvbmVudFxue1xuXHRjb25zdHJ1Y3RvcigpXG4gICB7XG4gICAgIHN1cGVyKFwiI21vZGFsLWRlbGV0ZVwiKTtcbiAgICAgdGhpcy5hamF4VXJsID0gQXBwLmNvbmZpZy5mZWF0dXJlcy5kZWxldGUudXJsO1xuICAgfVxuXG5cdGJlZm9yZU9wZW4oZWxlbWVudCA6IEVsZW1lbnQpXG5cdHtcblx0XHR0aGlzLmRvbS5maW5kKCcuZWxlbWVudE5hbWUnKS50ZXh0KGNhcGl0YWxpemUoZWxlbWVudC5uYW1lKSk7XG5cdFx0dGhpcy5kb20uZmluZCgnLmlucHV0LWNvbW1lbnQnKS52YWwoJycpO1xuXHRcdHRoaXMuZG9tLmZpbmQoJy5vcHRpb24tcmFkaW8tYnRuOmNoZWNrZWQnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuXHRcdHRoaXMuZG9tLmZpbmQoJyNzZWxlY3QtZXJyb3InKS5oaWRlKCk7XG5cdH1cblxuXHRzdWJtaXQoKVxuXHR7XG5cdFx0bGV0IG1lc3NhZ2UgPSB0aGlzLmRvbS5maW5kKCcuaW5wdXQtY29tbWVudCcpLnZhbCgpO1xuXHRcdGxldCByb3V0ZSA9IEFwcC5jb25maWcuZmVhdHVyZXMuZGVsZXRlLnVybDtcblx0XHRsZXQgZGF0YSA9IHsgZWxlbWVudElkOiB0aGlzLmVsZW1lbnQuaWQsIG1lc3NhZ2U6IG1lc3NhZ2UgfTtcblxuXHRcdHRoaXMuc2VuZFJlcXVlc3QoZGF0YSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgb25TdWNjZXNzKHJlc3BvbnNlKVxuXHR7XG5cdFx0bGV0IHJlc3BvbnNlTWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG5cdFx0bGV0IHN1Y2Nlc3MgPSByZXNwb25zZS5zdWNjZXNzO1xuXG5cdFx0aWYgKHN1Y2Nlc3MpXG5cdFx0e1xuXHRcdFx0dGhpcy5kb20uY2xvc2VNb2RhbCgpO1xuXHRcdFx0QXBwLmluZm9CYXJDb21wb25lbnQuc2hvdygpO1xuXG5cdFx0XHR0aGlzLmVsZW1lbnQudXBkYXRlKHRydWUpO1xuXHRcdFx0dGhpcy5lbGVtZW50LmlzRnVsbHlMb2FkZWQgPSBmYWxzZTtcblxuXHRcdFx0Ly8gcmVsb2FkIEVsZW1lbnQsIGFuZCBhZGQgZmxhc2ggbWVzc2FnZVxuXHRcdFx0QXBwLmluZm9CYXJDb21wb25lbnQuc2hvd0VsZW1lbnQodGhpcy5lbGVtZW50LmlkLCAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5jb21wb25lbnQuYWRkRmxhc2hNZXNzYWdlKHJlc3BvbnNlTWVzc2FnZSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5lbGVtZW50LmNvbXBvbmVudC5hZGRGbGFzaE1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdHRoaXMuZG9tLmZpbmQoJyNzZWxlY3QtZXJyb3InKS50ZXh0KHJlc3BvbnNlTWVzc2FnZSkuc2hvdygpO1xuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCBvbkVycm9yKG1lc3NhZ2UpXG5cdHtcblx0XHR0aGlzLmRvbS5maW5kKCcjc2VsZWN0LWVycm9yJykudGV4dChtZXNzYWdlKS5zaG93KCk7XG5cdH1cbn0iLCJpbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgeyBBcHBTdGF0ZXMgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCB7IEFic3RyYWN0TW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC1tb2RhbC5jb21wb25lbnRcIjtcblxuZGVjbGFyZSB2YXIgJCA6IGFueTtcblxuZXhwb3J0IGNsYXNzIFBpY2tBZGRyZXNzQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RNb2RhbENvbXBvbmVudFxue1xuICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoXCIjbW9kYWwtcGljay1hZGRyZXNzXCIpOyB9XG5cbiAgYmluZHMoKVxuICB7ICAgIFxuICAgIC8vIGJ1dHRvbiB0byBjb25maXJtIGNhbGN1bGF0ZSBpZHJlY3Rpb25zIGluIG1vZGFsIHBpY2sgYWRkcmVzcyBmb3IgZGlyZWN0aW9uc1xuICAgIHRoaXMuZG9tLmZpbmQoJyNidG4tY2FsY3VsYXRlLWRpcmVjdGlvbnMnKS5jbGljaygoKSA9PiB0aGlzLnN1Ym1pdCgpKTtcbiAgICB0aGlzLmRvbS5maW5kKCdpbnB1dCcpLmtleXVwKChlKSA9PiB7IGlmKGUua2V5Q29kZSA9PSAxMykgdGhpcy5zdWJtaXQoKTsgfSk7ICBcbiAgfVxuXG4gIHByb3RlY3RlZCBiZWZvcmVPcGVuKGVsZW1lbnQgOiBFbGVtZW50KVxuICB7XG4gICAgdGhpcy5kb20uZmluZChcIi5tb2RhbC1mb290ZXJcIikuYXR0cignb3B0aW9uLWlkJywgZWxlbWVudC5jb2xvck9wdGlvbklkKTsgICAgXG4gIH1cblxuICBzdWJtaXQoKVxuICB7XG4gICAgbGV0IGFkZHJlc3MgPSB0aGlzLmRvbS5maW5kKCdpbnB1dCcpLnZhbCgpO1xuICAgICAgXG4gICAgaWYgKGFkZHJlc3MpXG4gICAgeyAgICAgIFxuICAgICAgQXBwLnNldFN0YXRlKEFwcFN0YXRlcy5TaG93RGlyZWN0aW9ucyx7aWQ6IHRoaXMuZWxlbWVudC5pZCB9KTtcblxuICAgICAgQXBwLmdlb2NvZGVyLmdlb2NvZGVBZGRyZXNzKGFkZHJlc3MsXG4gICAgICAoc3VjY2VzcykgPT4ge1xuICAgICAgICB0aGlzLmRvbS5maW5kKCcubW9kYWwtZXJyb3ItbXNnJykuaGlkZSgpO1xuICAgICAgICB0aGlzLmRvbS5jbG9zZU1vZGFsKCk7ICAgICAgICBcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5kb20uZmluZCgnLm1vZGFsLWVycm9yLW1zZycpLnNob3coKTtcbiAgICAgIH0pOyAgICAgIFxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgdGhpcy5kb20uZmluZCgnaW5wdXQnKS5hZGRDbGFzcygnaW52YWxpZCcpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cblxuZGVjbGFyZSB2YXIgJCA6IGFueVxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcbmltcG9ydCB7IEFic3RyYWN0TW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC1tb2RhbC5jb21wb25lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFJlcG9ydENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0TW9kYWxDb21wb25lbnRcbntcblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0c3VwZXIoXCIjbW9kYWwtcmVwb3J0XCIpO1xuXHRcdHRoaXMuYWpheFVybCA9IEFwcC5jb25maWcuZmVhdHVyZXMucmVwb3J0LnVybDtcblx0fVxuXG5cdGJlZm9yZU9wZW4oKVxuXHR7XG5cdFx0dGhpcy5kb20uZmluZCgnLmVsZW1lbnROYW1lJykudGV4dChjYXBpdGFsaXplKHRoaXMuZWxlbWVudC5uYW1lKSk7XG5cblx0XHR0aGlzLmRvbS5maW5kKCcuaW5wdXQtY29tbWVudCcpLnZhbCgnJyk7XG5cdFx0dGhpcy5kb20uZmluZCgnLm9wdGlvbi1yYWRpby1idG46Y2hlY2tlZCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG5cdFx0dGhpcy5kb20uZmluZCgnI3NlbGVjdC1lcnJvcicpLmhpZGUoKTtcblx0XHR0aGlzLmRvbS5maW5kKCcjbWFpbC1lcnJvcicpLmhpZGUoKTtcblxuXHRcdGlmIChBcHAubG9naW5Nb2R1bGUuZ2V0VXNlckVtYWlsKCkpIFxuXHRcdHtcblx0XHRcdHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsJykuaGlkZSgpO1xuXHRcdFx0dGhpcy5kb20uZmluZCgnLmlucHV0LW1haWwnKS52YWwoQXBwLmxvZ2luTW9kdWxlLmdldFVzZXJFbWFpbCgpKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsJykudmFsKCcnKTtcblx0XHRcdHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsJykuc2hvdygpO1xuXHRcdH1cblx0fVxuXG5cdHN1Ym1pdCgpXG5cdHtcblx0XHRpZiAoIXRoaXMuZWxlbWVudCkgcmV0dXJuO1xuXG5cdFx0bGV0IHJlcG9ydFZhbHVlID0gdGhpcy5kb20uZmluZCgnLm9wdGlvbi1yYWRpby1idG46Y2hlY2tlZCcpLmF0dHIoJ3ZhbHVlJyk7XG5cdFx0bGV0IHVzZXJFbWFpbCA9IHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsJykudmFsKCk7XG5cblx0XHR0aGlzLmRvbS5maW5kKCcjc2VsZWN0LWVycm9yJykuaGlkZSgpO1xuXHRcdHRoaXMuZG9tLmZpbmQoJyNtYWlsLWVycm9yJykuaGlkZSgpO1xuXG5cdFx0bGV0IGVycm9ycyA9IGZhbHNlO1xuXHRcdGlmICghcmVwb3J0VmFsdWUpXG5cdFx0e1xuXHRcdFx0dGhpcy5kb20uZmluZCgnI3NlbGVjdC1lcnJvcicpLnNob3coKTtcblx0XHRcdGVycm9ycyA9IHRydWU7XG5cdFx0fVxuXHRcdGlmICghdXNlckVtYWlsIHx8IHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsJykuaGFzQ2xhc3MoJ2ludmFsaWQnKSlcblx0XHR7XG5cdFx0XHR0aGlzLmRvbS5maW5kKCcjbWFpbC1lcnJvcicpLnNob3coKTtcblx0XHRcdGVycm9ycyA9IHRydWU7XG5cdFx0fVxuXHRcdGlmICghZXJyb3JzKVxuXHRcdHtcdFx0XHRcblx0XHRcdGxldCBjb21tZW50ID0gdGhpcy5kb20uZmluZCgnLmlucHV0LWNvbW1lbnQnKS52YWwoKTtcblx0XHRcdGxldCByb3V0ZSA9IEFwcC5jb25maWcuZmVhdHVyZXMucmVwb3J0LnVybDtcblx0XHRcdGxldCBkYXRhID0gIHsgZWxlbWVudElkOiB0aGlzLmVsZW1lbnQuaWQsIHZhbHVlOiByZXBvcnRWYWx1ZSwgY29tbWVudDogY29tbWVudCwgdXNlckVtYWlsIDogdXNlckVtYWlsIH07XG5cblx0XHRcdHRoaXMuc2VuZFJlcXVlc3QoZGF0YSk7XHRcdFxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNsZWFyTG9hZGVyKClcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgb25FcnJvcihlcnJvck1lc3NhZ2UpXG5cdHtcblx0XHR0aGlzLmRvbS5maW5kKCcjc2VsZWN0LWVycm9yJykudGV4dChlcnJvck1lc3NhZ2UpLnNob3coKTtcblx0fVxufVx0XG4iLCIvKipcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHb0dvQ2FydG8gcHJvamVjdC5cbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNiBTZWJhc3RpYW4gQ2FzdHJvIC0gOTBzY2FzdHJvQGdtYWlsLmNvbVxuICogQGxpY2Vuc2UgR05VIEdQTCB2M1xuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAxNi0xMi0xM1xuICovXG5cbmRlY2xhcmUgdmFyICQgOiBhbnlcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgeyBBYnN0cmFjdE1vZGFsQ29tcG9uZW50IH0gZnJvbSBcIi4vYWJzdHJhY3QtbW9kYWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5cbmV4cG9ydCBjbGFzcyBTZW5kRW1haWxDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE1vZGFsQ29tcG9uZW50XG57XG4gIGNvbnN0cnVjdG9yKClcbiAge1xuICAgIHN1cGVyKFwiI21vZGFsLXNlbmQtZW1haWxcIik7XG4gICAgdGhpcy5hamF4VXJsID0gQXBwLmNvbmZpZy5mZWF0dXJlcy5zZW5kTWFpbC51cmw7XG4gIH1cblxuICBiZWZvcmVPcGVuKGVsZW1lbnQgOiBFbGVtZW50KVxuICB7XG4gICAgdGhpcy5kb20uZmluZCgnLmVsZW1lbnROYW1lJykudGV4dChjYXBpdGFsaXplKHRoaXMuZWxlbWVudC5uYW1lKSk7XG5cbiAgICB0aGlzLmRvbS5maW5kKCcuaW5wdXQtbWFpbC1jb250ZW50JykudmFsKCcnKTtcbiAgICB0aGlzLmRvbS5maW5kKCcuaW5wdXQtbWFpbC1zdWJqZWN0JykudmFsKCcnKTtcbiAgICB0aGlzLmRvbS5maW5kKCcjY29udGVudC1lcnJvcicpLmhpZGUoKTtcbiAgICB0aGlzLmRvbS5maW5kKCcjbWFpbC1lcnJvcicpLmhpZGUoKTtcblxuICAgIGlmIChBcHAubG9naW5Nb2R1bGUuZ2V0VXNlckVtYWlsKCkpXG4gICAge1xuICAgICAgdGhpcy5kb20uZmluZCgnLmlucHV0LW1haWwnKS5oaWRlKCk7XG4gICAgICB0aGlzLmRvbS5maW5kKCcuaW5wdXQtbWFpbCcpLnZhbChBcHAubG9naW5Nb2R1bGUuZ2V0VXNlckVtYWlsKCkpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgdGhpcy5kb20uZmluZCgnLmlucHV0LW1haWwnKS52YWwoJycpO1xuICAgICAgdGhpcy5kb20uZmluZCgnLmlucHV0LW1haWwnKS5zaG93KCk7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0KClcbiAge1xuICAgIGxldCB1c2VyRW1haWwgPSB0aGlzLmRvbS5maW5kKCcuaW5wdXQtbWFpbCcpLnZhbCgpO1xuICAgIGxldCBtYWlsU3ViamVjdCA9IHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsLXN1YmplY3QnKS52YWwoKTtcbiAgICBsZXQgbWFpbENvbnRlbnQgPSB0aGlzLmRvbS5maW5kKCcuaW5wdXQtbWFpbC1jb250ZW50JykudmFsKCk7XG5cbiAgICB0aGlzLmRvbS5maW5kKCcjbWVzc2FnZS1lcnJvcicpLmhpZGUoKTtcbiAgICB0aGlzLmRvbS5maW5kKCcjY29udGVudC1lcnJvcicpLmhpZGUoKTtcbiAgICB0aGlzLmRvbS5maW5kKCcjbWFpbC1lcnJvcicpLmhpZGUoKTtcblxuICAgIGxldCBlcnJvcnMgPSBmYWxzZTtcbiAgICBpZiAoIW1haWxTdWJqZWN0IHx8ICFtYWlsQ29udGVudClcbiAgICB7XG4gICAgICB0aGlzLmRvbS5maW5kKCcjY29udGVudC1lcnJvcicpLnNob3coKTtcbiAgICAgIGVycm9ycyA9IHRydWU7XG4gICAgfVxuICAgIGlmICghdXNlckVtYWlsIHx8IHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsJykuaGFzQ2xhc3MoJ2ludmFsaWQnKSlcbiAgICB7XG4gICAgICB0aGlzLmRvbS5maW5kKCcjbWFpbC1lcnJvcicpLnNob3coKTtcbiAgICAgIHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsJykuc2hvdygpO1xuICAgICAgZXJyb3JzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWVycm9ycylcbiAgICB7ICAgICAgXG4gICAgICBsZXQgY29tbWVudCA9IHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1jb21tZW50JykudmFsKCk7XG4gICAgICBsZXQgZGF0YSA9IHsgZWxlbWVudElkOiB0aGlzLmVsZW1lbnQuaWQsIHN1YmplY3Q6IG1haWxTdWJqZWN0LCBjb250ZW50OiBtYWlsQ29udGVudCwgdXNlckVtYWlsIDogdXNlckVtYWlsIH07XG4gICAgICB0aGlzLnNlbmRSZXF1ZXN0KGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyTG9hZGVyKClcbiAgICB9XG4gIH0gIFxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cblxuZGVjbGFyZSB2YXIgJCA6IGFueVxuaW1wb3J0IHsgRWxlbWVudCwgRWxlbWVudFN0YXR1cyB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEFwcE1vZGVzIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEFic3RyYWN0TW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC1tb2RhbC5jb21wb25lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFZvdGVDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE1vZGFsQ29tcG9uZW50XG57XG5cdGNvbnN0cnVjdG9yKCkgXG5cdHsgXG5cdFx0c3VwZXIoXCIjbW9kYWwtdm90ZVwiKTsgXG5cdFx0dGhpcy5hamF4VXJsID0gQXBwLmNvbmZpZy5mZWF0dXJlcy52b3RlLnVybDtcbiAgICAgIHRoaXMuZG9tLmZpbmQoJyNzZWxlY3Qtdm90ZScpLm1hdGVyaWFsX3NlbGVjdCgpO1x0XG5cdH1cblxuXHRiZWZvcmVPcGVuKGVsZW1lbnQgOiBFbGVtZW50KVxuXHR7XG5cdFx0Ly8gZHluYW1pY2FsbHkgY3JlYXRlIHZvdGUgdGVtcGxhdGVcblx0XHR0aGlzLmRvbS5maW5kKCcuc3BlY2lmaWMtY29udGVudCcpLmh0bWwoQXBwLnRlbXBsYXRlTW9kdWxlLnJlbmRlcigndm90ZS1tb2RhbC1jb250ZW50JywgeyBcblx0XHRcdGVsZW1lbnQ6IHRoaXMuZWxlbWVudCwgXG5cdFx0XHRFbGVtZW50U3RhdHVzOiBFbGVtZW50U3RhdHVzLFxuXHRcdFx0aXNBZG1pbjogQXBwLmNvbmZpZy5pc0ZlYXR1cmVBdmFpbGFibGUoJ2RpcmVjdE1vZGVyYXRpb24nKSxcblx0XHRcdGVsZGlzcGxheU5hbWU6IEFwcC5jb25maWcudGV4dC5lbGVtZW50RGVmaW5pdGVcblx0XHR9KSk7ICBcblx0fVxuXG5cdHN1Ym1pdCgpXG5cdHtcblx0XHRsZXQgdm90ZVZhbHVlID0gdGhpcy5kb20uZmluZCgnLm9wdGlvbi1yYWRpby1idG46Y2hlY2tlZCcpLmF0dHIoJ3ZhbHVlJyk7XG5cblx0XHR0aGlzLmRvbS5maW5kKCcjc2VsZWN0LWVycm9yJykuaGlkZSgpO1xuXHRcdFxuXHRcdGlmICh2b3RlVmFsdWUpXG5cdFx0e1x0XHRcdFx0XG5cdFx0XHRsZXQgY29tbWVudCA9IHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1jb21tZW50JykudmFsKCk7XG5cdFx0XHRsZXQgcm91dGUgPSBBcHAuY29uZmlnLmZlYXR1cmVzLnZvdGUudXJsO1xuXHRcdFx0bGV0IGRhdGEgPSB7IGVsZW1lbnRJZDogdGhpcy5lbGVtZW50LmlkLCB2YWx1ZTogdm90ZVZhbHVlLCBjb21tZW50OiBjb21tZW50IH07XG5cblx0XHRcdHRoaXMuc2VuZFJlcXVlc3QoZGF0YSk7XHRcdFxuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0dGhpcy5jbGVhckxvYWRlcigpO1xuXHRcdFx0dGhpcy5kb20uZmluZCgnI3NlbGVjdC1lcnJvcicpLnNob3coKTtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgb25TdWNjZXNzKHJlc3BvbnNlKVxuXHR7XG5cdFx0bGV0IHJlc3BvbnNlTWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG5cdFx0bGV0IG5ld3N0YXR1cyA9IHJlc3BvbnNlLmRhdGE7XG5cblx0XHRpZiAoIXJlc3BvbnNlLnN1Y2Nlc3MpIHtcblx0XHRcdHRoaXMub25FcnJvcihyZXNwb25zZU1lc3NhZ2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRcblx0XHQkKCcjbW9kYWwtdm90ZScpLmNsb3NlTW9kYWwoKTtcblxuXHRcdGlmICh0aGlzLmVsZW1lbnQuc3RhdHVzICE9IG5ld3N0YXR1cylcblx0XHR7XG5cdFx0XHR0aGlzLmVsZW1lbnQuc3RhdHVzID0gbmV3c3RhdHVzO1xuXHRcdFx0dGhpcy5lbGVtZW50LnVwZGF0ZSh0cnVlKTtcblx0XHRcdHRoaXMuZWxlbWVudC5pc0Z1bGx5TG9hZGVkID0gZmFsc2U7XG5cblx0XHRcdC8vIHJlbG9hZCBFbGVtZW50LCBhbmQgYWRkIGZsYXNoIG1lc3NhZ2Vcblx0XHRcdGlmIChBcHAubW9kZSA9PSBBcHBNb2Rlcy5NYXApIFxuXHRcdFx0XHRBcHAuaW5mb0JhckNvbXBvbmVudC5zaG93RWxlbWVudCh0aGlzLmVsZW1lbnQuaWQsICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmVsZW1lbnQuY29tcG9uZW50LmFkZEZsYXNoTWVzc2FnZShyZXNwb25zZU1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHRcdGVsc2UgdGhpcy5lbGVtZW50LmNvbXBvbmVudC5hZGRGbGFzaE1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdHRoaXMuZWxlbWVudC5jb21wb25lbnQuYWRkRmxhc2hNZXNzYWdlKHJlc3BvbnNlTWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIG9uRXJyb3IoZXJyb3JNZXNzYWdlKVxuXHR7XG5cdFx0aWYgKCFlcnJvck1lc3NhZ2UgfHwgZXJyb3JNZXNzYWdlLmxlbmd0aCA9PSAwKSBlcnJvck1lc3NhZ2UgPSBcIk91cHMsIHVuZSBlcnJldXIgcydlc3QgcHJvZHVpdGUgISBWZXVpbGxleiByw6llc3NheWVyIHBsdXMgdGFyZCBvdSBub3VzIHNpZ25hbGVyIGxlIHByb2Jsw6htZVwiO1xuXHRcdHRoaXMuZG9tLmZpbmQoJy5nZW5lcmljLWVycm9yLW1lc3NhZ2UnKS5odG1sKGVycm9yTWVzc2FnZSkuc2hvdygpO1xuXHR9XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMDgtMzFcbiAqL1xuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMsIEFwcERhdGFUeXBlLCBBcHBNb2RlcyB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBHZW9jb2RlUmVzdWx0IH0gZnJvbSBcIi4uLy4uL21vZHVsZXMvZ2VvY29kZXIubW9kdWxlXCI7XG5kZWNsYXJlIHZhciAkO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgVmlld1BvcnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cblxuZXhwb3J0IGNsYXNzIFNlYXJjaEJhckNvbXBvbmVudFxue1xuXHRwbGFjZWhvbGRlcnMgPSB7XG5cdFx0ZGVmYXVsdDogXCJcIixcblx0XHRwbGFjZTogXCJcIixcblx0XHRlbGVtZW50OiBcIlwiXG5cdH1cblxuXHRzZWFyY2hJbnB1dCgpIHsgcmV0dXJuICQoJy5zZWFyY2gtYmFyJyk7IH1cblxuXHRwcml2YXRlIGN1cnJTZWFyY2hUZXh0IDogc3RyaW5nID0gJyc7XG5cblx0Y29uc3RydWN0b3IoKSB7fVxuXG5cdGluaXRpYWxpemUoKVxuXHR7XHRcdFxuXHRcdHRoaXMuc2VhcmNoSW5wdXQoKS5rZXl1cCgoZSkgPT5cblx0XHR7ICAgIFxuXHRcdFx0aWYoZS5rZXlDb2RlID09IDEzKSB7IHRoaXMuaGFuZGxlU2VhcmNoQWN0aW9uKCk7IH0gLy8gcHJlc3MgZW50ZXJcblx0XHR9KTtcblxuXHRcdCQoJy5zZWFyY2gtYmFyLWljb24nKS5jbGljaygoKSA9PiB0aGlzLmhhbmRsZVNlYXJjaEFjdGlvbigpKTtcdFxuXG5cdFx0JCgnLnNlYXJjaC1idG4nKS5jbGljaygoKSA9PiB0aGlzLmhhbmRsZVNlYXJjaEFjdGlvbigpKTtcblx0XHQkKCcuc2VhcmNoLWNhbmNlbC1idG4nKS5jbGljaygoKSA9PiB0aGlzLmNsZWFyTG9hZGVyKCkpO1xuXG5cdFx0JCgnI2J0bi1jbG9zZS1zZWFyY2gtcmVzdWx0JykuY2xpY2soKCkgPT4gdGhpcy5jbGVhckVsZW1lbnRTZWFyY2hSZXN1bHQoKSk7XHRcblxuXHRcdCQoJy5zZWFyY2gtZ2VvbG9jYWxpemUnKS50b29sdGlwKCk7XG5cdFx0JCgnLnNlYXJjaC1nZW9sb2NhbGl6ZScpLmNsaWNrKCgpID0+IHRoaXMuZ2VvbG9jYXRlVXNlcigpKTtcblxuXHRcdHRoaXMuc2VhcmNoSW5wdXQoKS5vbignY2xpY2snLCAoZSkgPT4geyBlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTsgfSk7XG5cdFx0dGhpcy5zZWFyY2hJbnB1dCgpLm9uKCdmb2N1cycsICgpID0+IHsgdGhpcy5zaG93U2VhcmNoT3B0aW9ucygpOyB9KTtcblx0XHR0aGlzLnNlYXJjaElucHV0KCkub24oJ2tleXVwJywgKCkgPT4gdGhpcy5zaG93U2VhcmNoT3B0aW9ucygpKTtcblxuXHRcdHRoaXMucGxhY2Vob2xkZXJzID0ge1xuXHRcdFx0ZGVmYXVsdDogXCJSZWNoZXJjaGV6IHVuIGxpZXUsIFwiICsgQXBwLmNvbmZpZy50ZXh0LmVsZW1lbnRJbmRlZmluaXRlICsgXCIuLi5cIixcblx0XHRcdHBsYWNlOiBcIkVudHJleiB1bmUgYWRyZXNzZSwgdW4gQ1AsIHVuZSB2aWxsZS4uLlwiLFxuXHRcdFx0ZWxlbWVudDogXCJFbnRyZXogbGUgbm9tIGQnXCIgKyBBcHAuY29uZmlnLnRleHQuZWxlbWVudEluZGVmaW5pdGVcblx0XHR9XHRcdFxuXG5cdFx0dGhpcy51cGRhdGVTZWFyY2hQbGFjZWhvbGRlcigpO1xuXG5cdFx0JCgnLnNlYXJjaC1vcHRpb24tcmFkaW8tYnRuJykuY2hhbmdlKCAoKSA9PiB0aGlzLnVwZGF0ZVNlYXJjaFBsYWNlaG9sZGVyKCkgKTtcblxuXHRcdCQoJyNkaXJlY3RvcnktY29udGVudCwgLmRpcmVjdG9yeS1tZW51LWNvbnRlbnQsIGhlYWRlcicpLmNsaWNrKCAoKSA9PiB0aGlzLmhpZGVTZWFyY2hPcHRpb25zKCkgKTtcblxuXHRcdCQoJyNzZWFyY2gtb3ZlcmxheS1tb2JpbGUgLm92ZXJsYXknKS5jbGljayggKCkgPT4gdGhpcy5oaWRlTW9iaWxlU2VhcmNoQmFyKCkgKTtcblx0fVxuXG5cdC8vIGhhbmRsZSBhbGwgdmFsaWRhdGlvbiBieSB1c2VyIChpbnB1dCBrZXkgZW50ZXIgcHJlc3NlZCwgaWNvbiBjbGljay4uLilcblx0cHJpdmF0ZSBoYW5kbGVTZWFyY2hBY3Rpb24oKVxuXHR7XG5cdFx0dGhpcy5iZWZvcmVTZWFyY2goKTtcblxuXHRcdGxldCBzZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hJbnB1dCgpLnZhbCgpO1xuXG5cdFx0c3dpdGNoICh0aGlzLnNlYXJjaFR5cGUoKSkgXG4gICAgeyBcbiAgICAgIGNhc2UgXCJwbGFjZVwiOiBcbiAgICAgICAgQXBwLmdlb2NvZGVyLmdlb2NvZGVBZGRyZXNzKHNlYXJjaFRleHQsIFxuICAgICAgICAgIChyZXN1bHQpID0+IHsgXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoUmVzdWx0KGZhbHNlKTsgXG4gICAgICAgICAgICB0aGlzLmhpZGVTZWFyY2hPcHRpb25zKCk7IFxuICAgICAgICAgICAgQXBwLm1hcENvbXBvbmVudC5maXRCb3VuZHMoQXBwLmdlb2NvZGVyLmdldEJvdW5kcygpLCB0cnVlKTsgXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgXHR0aGlzLmNsZWFyTG9hZGVyKCk7XG4gICAgICAgICAgXHQkKCcuc2VhcmNoLW5vLXJlc3VsdCcpLnNob3coKTtcbiAgICAgICAgICB9KTsgXG4gICAgICAgIGJyZWFrOyBcbiAgICAgIGNhc2UgXCJlbGVtZW50XCI6IFxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnNlYXJjaElucHV0KCkudmFsKCk7IFxuICAgICAgICBpZiAodmFsdWUpIFxuICAgICAgICAgIHRoaXMuc2VhcmNoRWxlbWVudHMoc2VhcmNoVGV4dCk7IFxuICAgICAgICBlbHNlIFxuICAgICAgICAgIHRoaXMuY2xlYXJTZWFyY2hSZXN1bHQoKTsgXG4gICAgICAgIGJyZWFrOyBcbiAgICB9IFxuXHR9XG5cblx0aGFuZGxlR2VvY29kZVJlc3VsdCgpXG5cdHtcblx0XHR0aGlzLnNldFZhbHVlKEFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbkFkZHJlc3MoKSk7XG5cdFx0dGhpcy5jbGVhckxvYWRlcigpO1xuXHR9XHRcblxuXHRnZW9sb2NhdGVVc2VyKClcblx0e1xuXHRcdHRoaXMuYmVmb3JlU2VhcmNoKCk7XG5cdFx0QXBwLmdlb2NvZGVyLmdlb2xvY2F0ZVVzZXIoIChyZXN1bHQ6Vmlld1BvcnQpID0+IFxuXHRcdHtcblx0XHRcdHRoaXMuY2xlYXJTZWFyY2hSZXN1bHQodHJ1ZSk7XG5cdFx0XHR0aGlzLnNldFZhbHVlKFwiR2VvbG9jYWxpc8OpXCIpO1xuXHRcdFx0dGhpcy5oaWRlU2VhcmNoT3B0aW9ucygpO1x0XHRcdFxuXHRcdFx0dGhpcy5jbGVhckxvYWRlcigpO1xuXHRcdH0pO1xuXHR9XHRcblxuXHRzZWFyY2hFbGVtZW50cygkdGV4dCA6IHN0cmluZywgJGJhY2tGcm9tSGlzdG9yeSA9IGZhbHNlKVxuXHR7XHRcdFxuXHRcdHRoaXMuc2V0VmFsdWUoJHRleHQpO1xuXHRcdHRoaXMuY3VyclNlYXJjaFRleHQgPSAkdGV4dDtcblxuXHRcdGxldCByb3V0ZSA9IEFwcC5jb25maWcuZmVhdHVyZXMuc2VhcmNoRWxlbWVudHMudXJsO1xuXHRcdGxldCBkYXRhID0gIHsgdGV4dDogJHRleHQgfTsgXG5cblx0XHRpZiAocm91dGUpIHtcblx0XHRcdEFwcC5hamF4TW9kdWxlLnNlbmRSZXF1ZXN0KHJvdXRlLCAnZ2V0JywgZGF0YSxcblx0XHRcdChzZWFyY2hSZXN1bHQpID0+IFxuXHRcdFx0e1xuXHQgICAgICBBcHAuc2V0RGF0YVR5cGUoQXBwRGF0YVR5cGUuU2VhcmNoUmVzdWx0cywgJGJhY2tGcm9tSGlzdG9yeSwgc2VhcmNoUmVzdWx0KTsgICAgICAgXG5cdCBcblx0ICAgICAgdGhpcy5jbGVhckxvYWRlcigpOyAgICAgICBcblx0ICAgICAgdGhpcy5zaG93U2VhcmNoUmVzdWx0TGFiZWwoc2VhcmNoUmVzdWx0LmRhdGEubGVuZ3RoKTsgICBcblx0IFx0XHRcdEFwcC5nb2dvQ29udHJvbENvbXBvbmVudC51cGRhdGVQb3NpdGlvbigpO1xuXHQgXHRcdFx0dGhpcy5oaWRlTW9iaWxlU2VhcmNoQmFyKCk7IFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdChlcnJvcikgPT5cblx0XHRcdHtcblx0XHRcdFx0Ly9BcHAuZ2VvY29kZXIuZ2VvY29kZUFkZHJlc3MoJycpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBUT0RPIHNlYXJjaCB0aHJvdWdoIGFscmVhZHkgcmVjZWl2ZWQgZWxlbWVudHMuXG5cdFx0fVx0XHRcdFxuXHR9XG5cblx0c2hvd01vYmlsZVNlYXJjaEJhcigpIHsgXG5cdFx0JCgnI3NlYXJjaC1vdmVybGF5LW1vYmlsZScpLmZhZGVJbigyNTApO1xuXHRcdCQoJy5zZWFyY2gtYmFyLXdpdGgtb3B0aW9ucy1jb250YWluZXInKS5zaG93KCk7XG5cdFx0JCgnLnNlYXJjaC1iYXInKS5mb2N1cygpO1xuXHRcdEFwcC5nb2dvQ29udHJvbENvbXBvbmVudC5oaWRlKDApO1xuXHR9XG5cblx0aGlkZU1vYmlsZVNlYXJjaEJhcigpIHsgXG5cdFx0Ly8gY29uc29sZS5sb2coXCJoaWRlIG1vYmlsZSBzZWFyY2ggYmFyXCIpO1xuXHRcdCQoJyNzZWFyY2gtb3ZlcmxheS1tb2JpbGUnKS5mYWRlT3V0KDE1MCk7XG5cdFx0JCgnLnNlYXJjaC1iYXItd2l0aC1vcHRpb25zLWNvbnRhaW5lci5tb2JpbGUnKS5oaWRlKCk7XG5cdFx0QXBwLmdvZ29Db250cm9sQ29tcG9uZW50LnNob3coMCk7XG5cdH1cblxuXHR1cGRhdGUoKSB7XG5cdFx0aWYgKEFwcC5jb21wb25lbnQud2lkdGgoKSA8PSA2MDApXG5cdFx0e1xuXHRcdFx0bGV0IG1vYmlsZVNlYXJjaEJhciA9ICQoJy5zZWFyY2gtYmFyLXdpdGgtb3B0aW9ucy1jb250YWluZXInKTtcblx0XHRcdGlmKG1vYmlsZVNlYXJjaEJhci5wYXJlbnQoJyNzZWFyY2gtb3ZlcmxheS1tb2JpbGUnKS5sZW5ndGghPTEpXG5cdFx0XHRcdCQoJy5zZWFyY2gtYmFyLXdpdGgtb3B0aW9ucy1jb250YWluZXInKS5hcHBlbmRUbygnI3NlYXJjaC1vdmVybGF5LW1vYmlsZScpLmFkZENsYXNzKCdtb2JpbGUnKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdFx0JCgnLnNlYXJjaC1iYXItd2l0aC1vcHRpb25zLWNvbnRhaW5lcicpLnJlbW92ZUNsYXNzKCdtb2JpbGUnKS5wcmVwZW5kVG8oJy5kaXJlY3RvcnktbWVudS1oZWFkZXInKS5zaG93KCk7XG5cdH1cblxuXHRzaG93U2VhcmNoT3B0aW9ucygpXG5cdHtcblx0XHQkKCcuc2VhcmNoLW9wdGlvbnMnKS5zbGlkZURvd24oMzUwKTtcblx0XHRpZiAoIXRoaXMuaXNTZWFyY2hPcHRpb25WaXNpYmxlKCkpIFxuXHRcdFx0JCgnI2RpcmVjdG9yeS1tZW51LW1haW4tY29udGFpbmVyIC5kaXJlY3RvcnktbWVudS1oZWFkZXInKS5hZGRDbGFzcyhcImV4cGFuZGVkXCIpO1xuXG5cdFx0dGhpcy51cGRhdGVTZWFyY2hQbGFjZWhvbGRlcigpO1xuXHR9XG5cblx0aGlkZVNlYXJjaE9wdGlvbnMoKVxuXHR7XHRcdFxuXHRcdCQoJyNkaXJlY3RvcnktbWVudS1tYWluLWNvbnRhaW5lciAuZGlyZWN0b3J5LW1lbnUtaGVhZGVyJykucmVtb3ZlQ2xhc3MoXCJleHBhbmRlZFwiKTtcblx0XHR0aGlzLnNlYXJjaElucHV0KCkuYmx1cigpO1xuXHRcdHRoaXMudXBkYXRlU2VhcmNoUGxhY2Vob2xkZXIoKTtcblx0XHQkKCcjZGlyZWN0b3J5LW1lbnUtbWFpbi1jb250YWluZXIgLnNlYXJjaC1vcHRpb25zJykuc2xpZGVVcCgyNTApO1xuXHR9XG5cblx0dXBkYXRlU2VhcmNoUGxhY2Vob2xkZXIoKVxuXHR7XG5cdFx0bGV0IHBsYWNlaG9sZGVyID0gJyc7XG5cdFx0aWYgKCF0aGlzLmlzU2VhcmNoT3B0aW9uVmlzaWJsZSgpKSBwbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXJzLmRlZmF1bHQ7XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdHN3aXRjaCAodGhpcy5zZWFyY2hUeXBlKCkpXG5cdFx0XHR7XG5cdFx0XHRcdGNhc2UgXCJwbGFjZVwiOiAgIHBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlcnMucGxhY2U7ICAgYnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJlbGVtZW50XCI6IHBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlcnMuZWxlbWVudDsgYnJlYWs7XG5cdFx0XHR9XG5cdFx0fVx0XHRcdFxuXG5cdFx0dGhpcy5zZWFyY2hJbnB1dCgpLmF0dHIoXCJwbGFjZWhvbGRlclwiLCBwbGFjZWhvbGRlcik7XG5cdH1cdFxuXG5cdHNob3dTZWFyY2hSZXN1bHRMYWJlbCgkbnVtYmVyIDogbnVtYmVyKVxuXHR7XG5cdFx0JCgnLnNlYXJjaC1yZXN1bHQtbnVtYmVyJykudGV4dCgkbnVtYmVyKTtcblx0XHQkKCcuc2VhcmNoLXJlc3VsdC12YWx1ZScpLnRleHQodGhpcy5jdXJyU2VhcmNoVGV4dCk7XG5cdFx0JCgnLnNlYXJjaC1yZXN1bHRzJykuc2hvdygpO1xuXHRcdCQoJy5zZWFyY2gtb3B0aW9ucycpLmhpZGUoKTtcblx0XHQkKCcjZWxlbWVudC1pbmZvLWJhcicpLmFkZENsYXNzKCd3aXRoLXNlYXJjaC1yZXN1bHQtaGVhZGVyJyk7XG5cdH1cblxuXHRoaWRlU2VhcmNoUmVzdWx0KClcblx0e1xuXHRcdCQoJy5zZWFyY2gtcmVzdWx0cycpLmhpZGUoKTtcblx0XHQkKCcjZWxlbWVudC1pbmZvLWJhcicpLnJlbW92ZUNsYXNzKCd3aXRoLXNlYXJjaC1yZXN1bHQtaGVhZGVyJyk7XG5cdFx0QXBwLmdvZ29Db250cm9sQ29tcG9uZW50LnVwZGF0ZVBvc2l0aW9uKCk7XG5cdH1cblxuXHRjbGVhckVsZW1lbnRTZWFyY2hSZXN1bHQoKSBcblx0e1xuXHRcdHRoaXMuY2xlYXJTZWFyY2hSZXN1bHQoKTtcblx0XHRBcHAuc2V0TW9kZShBcHBNb2Rlcy5NYXApO1xuXHR9XG5cblx0Y2xlYXJTZWFyY2hSZXN1bHQocmVzZXRWYWx1ZSA9IHRydWUpXG5cdHtcblx0XHRBcHAuc2V0RGF0YVR5cGUoQXBwRGF0YVR5cGUuQWxsKTtcdFx0XG5cdFx0dGhpcy5oaWRlU2VhcmNoUmVzdWx0KCk7XHRcdFxuXHRcdHRoaXMuY2xlYXJMb2FkZXIoKTtcdFxuXHRcdHRoaXMuY3VyclNlYXJjaFRleHQgPSAnJztcblx0XHRpZiAocmVzZXRWYWx1ZSkge1xuXHRcdFx0dGhpcy5zZXRWYWx1ZShcIlwiKTtcblx0XHRcdEFwcC5lbGVtZW50TGlzdENvbXBvbmVudC5zZXRUaXRsZShcIlwiKTtcblx0XHR9XHRcdFxuXHRcdHNldFRpbWVvdXQoICgpID0+IHsgdGhpcy5oaWRlU2VhcmNoT3B0aW9ucygpOyB9LCAyMDApO1x0XHRcblx0fVxuXG5cdHNldFZhbHVlKCR2YWx1ZSA6IHN0cmluZylcblx0e1xuXHRcdHRoaXMuc2VhcmNoSW5wdXQoKS52YWwoJHZhbHVlKTtcblx0fSAgXG5cblx0Z2V0Q3VyclNlYXJjaFRleHQoKSB7IHJldHVybiB0aGlzLmN1cnJTZWFyY2hUZXh0OyB9XG5cblx0aXNTZWFyY2hPcHRpb25WaXNpYmxlKCkgOiBib29sZWFuXG5cdHtcblx0XHRyZXR1cm4gJCgnLnNlYXJjaC1vcHRpb25zOnZpc2libGUnKS5sZW5ndGg7XG5cdH1cblxuXHRwcml2YXRlIHNlYXJjaFR5cGUoKSA6IHN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuICQoJy5zZWFyY2gtb3B0aW9uLXJhZGlvLWJ0bjpjaGVja2VkJykuYXR0cignZGF0YS1uYW1lJyk7XG5cdH1cblxuXHRwcml2YXRlIGNsZWFyTG9hZGVyKClcblx0e1xuXHRcdCQoJy5zZWFyY2gtYnRuJykuc2hvdygpO1xuXHRcdCQoJy5zZWFyY2gtY2FuY2VsLWJ0bicpLmhpZGUoKTtcblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlU2VhcmNoKClcblx0e1xuXHRcdCQoJy5zZWFyY2gtbm8tcmVzdWx0JykuaGlkZSgpO1xuXHRcdCQoJy5zZWFyY2gtY2FuY2VsLWJ0bicpLnNob3coKTtcblx0XHQkKCcuc2VhcmNoLWJ0bicpLmhpZGUoKTtcblx0fVxuICAgIFxufSIsImRlY2xhcmUgdmFyICQ7XG5kZWNsYXJlIHZhciBudW5qdWNrcywgZ29Hb0NhcnRvO1xuXG5pbXBvcnQgeyBBcHBNb2R1bGUsIEFwcERhdGFUeXBlLCBBcHBNb2RlcywgQXBwU3RhdGVzIH0gZnJvbSAnLi9hcHAubW9kdWxlJztcbmltcG9ydCB7IGdldFF1ZXJ5UGFyYW1zIH0gZnJvbSBcIi4vdXRpbHMvcGFyYW1zXCI7XG5cbmV4cG9ydCB2YXIgQXBwIDogQXBwTW9kdWxlO1xuXG5leHBvcnQgY2xhc3MgR29Hb0NhcnRvTW9kdWxlXG57XG5cdHByaXZhdGUgb3B0aW9ucztcblx0Ly8gRE9NIENvbnRhaW5lciwgY2FuIGJlIGEgc3RyaW5nIChzZWxlY3Rvcikgb3IgRE9NIG9iamVjdFxuXHRjb250YWluZXIgOiBzdHJpbmcgfCBhbnkgPSAnJztcblx0Ly8gb25seSBmb3IgZGVidWdnaW5nXG5cdGFwcDogQXBwTW9kdWxlO1xuXG5cdGNvbnN0cnVjdG9yKGNvbnRhaW5lciA6IHN0cmluZyB8IGFueSwgb3B0aW9ucyA9IHt9KVxuXHR7XG5cdFx0dGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG5cdFx0dGhpcy5jaGVja0ZvckRpc3RhbnRDb25maWZ1cmF0aW9uKG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqIFxuXHQqIFNldCB0aGUgY3VycmVudCB1c2VyIHJvbGVzXG5cdCogUm9sZSBpcyB1c2VkIHRvIHJlbmRlciBzcGVjaWZpY2FsbHkgY2VydGFpbiB0ZW1wbGF0ZSBhbmQgY29udHJvbFxuXHQqIGNlcnRhaW4gZnVuY3Rpb25hbGl0aWVzXG5cdCovXG5cdHNldFVzZXJSb2xlKCRyb2xlcyA6IHN0cmluZ1tdIHwgc3RyaW5nKSB7IHRoaXMuYXBwLmxvZ2luTW9kdWxlLnNldFJvbGVzKCRyb2xlcyk7IH1cblx0c2V0VXNlclJvbGVzKCRyb2xlcyA6IHN0cmluZ1tdIHwgc3RyaW5nKSB7IHRoaXMuYXBwLmxvZ2luTW9kdWxlLnNldFJvbGVzKCRyb2xlcyk7IH1cblxuXHRzZXRVc2VyRW1haWwoJG1haWwgOiBzdHJpbmcpIHsgdGhpcy5hcHAubG9naW5Nb2R1bGUuc2V0VXNlckVtYWlsKCRtYWlsKTsgfVxuXG5cdC8qKiByZXR1cm4gdGhlIGdpdmVuIGhhc2ggdG8gYWRkIHRvIHVybCBzbyBnb2dvY2FydG8gYXBwIHdpbGwgb3BlbiBvbiBzcGVjaWZpYyBlbGVtZW50ICovXG5cdGdldEVsZW1lbnRSb3V0ZUhhc2goJGVsZW1lbnRJZCwgJGVsZW1lbnROYW1lID0gJ2ZpbmQnKVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuYXBwLnJvdXRlck1vZHVsZS5nZW5lcmF0ZSgnc2hvd19lbGVtZW50JywgeyBpZDogJGVsZW1lbnRJZCwgbmFtZTogJGVsZW1lbnROYW1lIH0pO1xuXHR9XG5cblx0c2hvd0RpcmVjdG9yeU1lbnUoKSB7IHRoaXMuYXBwLmRpcmVjdG9yeU1lbnVDb21wb25lbnQuc2hvdygpOyB9XG5cblx0aGlkZURpcmVjdG9yeU1lbnUoKSB7IHRoaXMuYXBwLmRpcmVjdG9yeU1lbnVDb21wb25lbnQuaGlkZSgpOyB9XG5cblx0cHJpdmF0ZSBjaGVja0ZvckRpc3RhbnRDb25maWZ1cmF0aW9uKG9wdGlvbnMgOiBzdHJpbmd8YW55KVxuXHR7XHRcdFxuXHRcdGlmICggdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnKSB0aGlzLmNoZWNrRm9yRGlzdGFudFRheG9ub215KG9wdGlvbnMpO1xuXHRcdGVsc2Vcblx0XHRcdCQuYWpheCh7XG5cdFx0XHQgIHVybDogb3B0aW9ucyxcblx0XHRcdCAgc3VjY2VzczogKGRhdGEpID0+ICB7IFxuXHRcdFx0ICBcdGlmICggdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcblx0XHRcdCAgXHR0aGlzLmNoZWNrRm9yRGlzdGFudFRheG9ub215KGRhdGEpOyBcblx0XHRcdCAgfSxcblx0XHRcdCAgZXJyb3I6ICgpID0+IHsgY29uc29sZS5lcnJvcihcIkVycm9yIHdoaWxlIGdldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gYXQgdXJsIFwiLCBvcHRpb25zKX1cblx0XHRcdH0pO1xuXHR9O1xuXG5cdHByaXZhdGUgY2hlY2tGb3JEaXN0YW50VGF4b25vbXkob3B0aW9ucyA6IGFueSlcblx0e1xuXHRcdGxldCB0YXhvbm9teSA9IG9wdGlvbnMuZGF0YS50YXhvbm9teTtcblx0XHRpZiAoIXRheG9ub215IHx8ICFvcHRpb25zLmRhdGEuZWxlbWVudHMpXG5cdFx0e1xuXHRcdFx0Y29uc29sZS53YXJuKFwiW0dvR29DYXJ0b10gWW91IG11c3QgcHJvdmlkZSBhIHRheG9ub215IGFuZCBlbGVtZW50cyBkYXRhc2V0IChib3RoIHVybCBvciBKc29uIG9iamVjdClcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlb2YgdGF4b25vbXkgPT09ICdvYmplY3QnKSB0aGlzLmluaXQodGF4b25vbXksIG9wdGlvbnMpO1xuXHRcdGVsc2UgJC5nZXRKU09OKCB0YXhvbm9teSwgKGRhdGEpID0+ICB7IHRoaXMuaW5pdChkYXRhLCBvcHRpb25zKTsgfSk7IFx0XG5cdH07XG5cblx0cHJpdmF0ZSBpbml0KHRheG9ub215LCBvcHRpb25zKVxuXHR7XHRcblx0XHRsZXQgdXJsUGFyYW1zIDogYW55ID0gZ2V0UXVlcnlQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cdFx0bGV0IGlzSWZyYW1lIDogYm9vbGVhbiA9IHVybFBhcmFtcy5pZnJhbWUgPyB1cmxQYXJhbXMuaWZyYW1lID09IDEgOiBmYWxzZTtcblx0XHRsZXQgZnVsbFRheG9ub215IDogYm9vbGVhbiA9IHVybFBhcmFtcy5mdWxsVGF4b25vbXkgPyB1cmxQYXJhbXMuZnVsbFRheG9ub215ID09IDEgOiB0cnVlO1xuXG5cdFx0QXBwID0gbmV3IEFwcE1vZHVsZShvcHRpb25zLCBpc0lmcmFtZSwgZnVsbFRheG9ub215LCB1cmxQYXJhbXMpO1xuXG5cdFx0Ly8gb25seSBmb3IgZGVidWdnaW5nXG5cdFx0dGhpcy5hcHAgPSBBcHA7XHRcdFx0XHRcblxuXHRcdEFwcC50YXhvbm9teU1vZHVsZS5jcmVhdGVUYXhvbm9teUZyb21Kc29uKHRheG9ub215KTtcblxuXHRcdGxldCBsYXlvdXQgPSBBcHAudGVtcGxhdGVNb2R1bGUucmVuZGVyKCdsYXlvdXQnLCBcblx0XHR7IFxuXHRcdFx0cm9vdENhdGVnb3JpZXM6IEFwcC50YXhvbm9teU1vZHVsZS5yb290Q2F0ZWdvcmllcywgXG5cdFx0XHRtYWluQ2F0ZWdvcnk6IEFwcC50YXhvbm9teU1vZHVsZS5tYWluQ2F0ZWdvcnksIFxuXHRcdFx0aXNJZnJhbWU6IGlzSWZyYW1lLCBcblx0XHRcdGZ1bGxUYXhvbm9teTogZnVsbFRheG9ub215LFxuXHRcdFx0Y29uZmlnOiBBcHAuY29uZmlnLFxuXHRcdFx0YWxsb3dlZFN0YW1wczogQXBwLnN0YW1wTW9kdWxlLmFsbG93ZWRTdGFtcHNcblx0XHR9KTtcblx0XHQgICBcblx0XHRpZiAoJCh0aGlzLmNvbnRhaW5lcikubGVuZ3RoID09IDApIGNvbnNvbGUud2FybignW0dvR29DYXJ0b10gVGhlIGNvbnRhaW5lciBcIicgKyB0aGlzLmNvbnRhaW5lciArICdcIiB3YXMgbm90IGZvdW5kJyk7XG5cdFx0ZWxzZSAkKHRoaXMuY29udGFpbmVyKS5hcHBlbmQobGF5b3V0KTtcblxuXHRcdCQodGhpcy5jb250YWluZXIpLnRyaWdnZXIoJ3RlbXBsYXRlTG9hZGVkJyk7XG5cdFx0XG5cdFx0aWYgKEFwcC50YXhvbm9teU1vZHVsZS5vcHRpb25zLmxlbmd0aClcblx0XHR7XG5cdFx0XHRsZXQgc3R5bGVzID0gQXBwLnRlbXBsYXRlTW9kdWxlLnJlbmRlcignZ29nby1zdHlsZXMnLCB7J29wdGlvbkxpc3QnOkFwcC50YXhvbm9teU1vZHVsZS5vcHRpb25zLCAnY29uZmlnJzpBcHAuY29uZmlnfSk7XG5cdFx0XHRsZXQgZG9tVG9BZGRTdHlsZXMgPSAkKCdoZWFkJykubGVuZ3RoID8gJCgnaGVhZCcpIDogJCgnaHRtbCcpO1xuXHRcdFx0aWYgKGRvbVRvQWRkU3R5bGVzLmxlbmd0aCkgZG9tVG9BZGRTdHlsZXMuYXBwZW5kKHN0eWxlcyk7XG5cdFx0XHRlbHNlIFx0Y29uc29sZS53YXJuKFwiW0dvR29DYXJ0b10gQ2Fubm90IGZpbmQgRG9tICdoZWFkJyBvciAnaHRtbCcgdG8gYWRkIHN0eWxlc1wiKTtcblx0XHR9XHRcdFxuXG5cdFx0c2V0VGltZW91dCggKCkgPT4ge1x0XHRcblx0XHRcdEFwcC5pbml0aWFsaXplKCk7XG5cblx0XHRcdEFwcC5lbGVtZW50c01vZHVsZS5pbml0aWFsaXplKCk7XG5cdFx0XHRBcHAuZGlyZWN0b3J5TWVudUNvbXBvbmVudC5pbml0aWFsaXplKCk7XG5cdFx0XHRBcHAuZmlsdGVyc0NvbXBvbmVudC5pbml0aWFsaXplKCk7XG5cdFx0XHRBcHAuYm91bmRzTW9kdWxlLmluaXRpYWxpemUoKTtcdCAgIFxuXHRcdFx0QXBwLmVsZW1lbnRMaXN0Q29tcG9uZW50LmluaXRpYWxpemUoKTtcdFx0XHRcblx0XHRcdEFwcC5zZWFyY2hCYXJDb21wb25lbnQuaW5pdGlhbGl6ZSgpO1x0XHRcdFxuXHRcdFx0QXBwLmdvZ29Db250cm9sQ29tcG9uZW50LmluaXRpYWxpemUoKTtcblx0XHRcdEFwcC5kaXJlY3Rpb25zQ29tcG9uZW50LmluaXRpYWxpemUoKTtcdFxuXHRcdFx0QXBwLm1hcENvbnRyb2xzQ29tcG9uZW50LmluaXRpYWxpemUoKTtcblx0XHRcdEFwcC5jdXN0b21Qb3B1cENvbXBvbmVudC5pbml0aWFsaXplKCk7XG5cdFx0XHRcblx0XHRcdEFwcC5jb21wb25lbnQuaW5pdGlhbGl6ZSgpO1x0XHRcblxuXHRcdFx0QXBwLnJvdXRlck1vZHVsZS5sb2FkSW5pdGlhbFN0YXRlKCk7XG5cblx0XHRcdC8vIHdhaXQgZm9yIGluaXRpYWwgc3RhdGUgdG8gYmUgbG9hZGVkXG5cdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiBBcHAuZWxlbWVudHNKc29uTW9kdWxlLmxvYWRMb2NhbEVsZW1lbnRzKCksIDEwMCk7XG5cblx0XHRcdHRoaXMuYmluZEV2ZW50cygpO1xuXHRcdH0sIDApO1x0IFxuXHR9XG5cblx0cHJpdmF0ZSBiaW5kRXZlbnRzKCkgXG5cdHtcblx0XHR0aGlzLmFwcC5tYXBNYW5hZ2VyLm9uTWFya2VyQ2xpY2suZG8oIChpZCkgPT4gdGhpcy5maXJlRXZlbnQoJ21hcmtlckNsaWNrJywge2lkOiBpZH0pKTtcblx0fVxuXG5cdHByaXZhdGUgZmlyZUV2ZW50KCRldmVudE5hbWUsICRkYXRhKSBcblx0e1xuXHRcdCQodGhpcy5jb250YWluZXIpLnRyaWdnZXIoJGV2ZW50TmFtZSwgJGRhdGEpO1xuXHR9XG59XG5cbi8vIGluc3RhbmNpYXRlIGEgR29Hb0NhcnRvTW9kdWxlXG5nb0dvQ2FydG8gPSBmdW5jdGlvbihjb250YWluZXIsIG9wdGlvbnMpIHsgcmV0dXJuIG5ldyBHb0dvQ2FydG9Nb2R1bGUoY29udGFpbmVyLCBvcHRpb25zKTsgfSIsImltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5pbXBvcnQgeyBBcHBTdGF0ZXMsIEFwcE1vZGVzIH0gZnJvbSBcIi4uL2FwcC5tb2R1bGVcIjtcblxuZXhwb3J0IGVudW0gQXBwRGF0YVR5cGUgXG57XG4gIEFsbCxcbiAgU2VhcmNoUmVzdWx0c1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YVR5cGVNYW5hZ2VyXG57XG4gIHByaXZhdGUgZGF0YVR5cGVfIDogQXBwRGF0YVR5cGUgPSBBcHBEYXRhVHlwZS5BbGw7XG5cbiAgc2V0RGF0YVR5cGUoJGRhdGFUeXBlIDogQXBwRGF0YVR5cGUsICRiYWNrRnJvbUhpc3RvcnkgOiBib29sZWFuID0gZmFsc2UsICRzZWFyY2hSZXN1bHQgPSBudWxsKVxuICB7XG4gICAgLy9jb25zb2xlLmxvZyhcInNldERhdGFUeXBlXCIsIEFwcERhdGFUeXBlWyRkYXRhVHlwZV0pO1xuICAgIHRoaXMuZGF0YVR5cGVfID0gJGRhdGFUeXBlO1xuXG4gICAgaWYgKCRkYXRhVHlwZSA9PSBBcHBEYXRhVHlwZS5TZWFyY2hSZXN1bHRzICYmICRzZWFyY2hSZXN1bHQpIFxuICAgIHtcbiAgICAgIEFwcC5zdGF0ZU1hbmFnZXIuc2V0U3RhdGUoQXBwU3RhdGVzLk5vcm1hbCk7XG4gICAgICBsZXQgZWxlbWVudHMgPSBBcHAuZWxlbWVudHNKc29uTW9kdWxlLmNvbnZlcnRKc29uRWxlbWVudHMoJHNlYXJjaFJlc3VsdC5kYXRhLCB0cnVlLCB0cnVlKS5lbGVtZW50c0NvbnZlcnRlZDsgXG4gICAgICBBcHAuZWxlbWVudHNNb2R1bGUuc2V0U2VhcmNoUmVzdWx0RWxlbWVudChlbGVtZW50cyk7IFxuICAgICAgQXBwLmZpbHRlcnNDb21wb25lbnQuc2V0TWFpbk9wdGlvbignYWxsJyk7IFxuXG4gICAgICBpZiAoJHNlYXJjaFJlc3VsdC5kYXRhLmxlbmd0aCA+IDApIFxuICAgICAgeyBcbiAgICAgICAgQXBwLnNldE1vZGUoQXBwTW9kZXMuTGlzdCk7IFxuICAgICAgICBBcHAubWFwQ29tcG9uZW50LmZpdEVsZW1lbnRzQm91bmRzKGVsZW1lbnRzKTtcbiAgICAgIH0gXG4gICAgfVxuXG4gICAgQXBwLmVsZW1lbnRzTW9kdWxlLmNsZWFyQ3VycmVudHNFbGVtZW50KCk7ICBcbiAgICBBcHAuZWxlbWVudExpc3RDb21wb25lbnQuY2xlYXIoKTtcbiAgICBBcHAuZWxlbWVudHNNb2R1bGUudXBkYXRlRWxlbWVudHNUb0Rpc3BsYXkodHJ1ZSk7ICAgIFxuICAgIEFwcC5lbGVtZW50c01hbmFnZXIuY2hlY2tGb3JOZXdFbGVtZW50c1RvUmV0cmlldmUoKTsgIFxuXG4gICAgaWYgKCEkYmFja0Zyb21IaXN0b3J5KSBBcHAuaGlzdG9yeU1vZHVsZS5wdXNoTmV3U3RhdGUoKTtcbiAgICBBcHAuZG9jdW1lbnRUaXRsZU1vZHVsZS51cGRhdGVEb2N1bWVudFRpdGxlKCk7XG4gIH1cblxuICBnZXQgZGF0YVR5cGUoKSB7IHJldHVybiB0aGlzLmRhdGFUeXBlXzsgfVxufSIsImltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEFwcE1vZGVzLCBBcHBEYXRhVHlwZSB9IGZyb20gXCIuLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50c1RvRGlzcGxheUNoYW5nZWQgfSBmcm9tIFwiLi4vbW9kdWxlcy9lbGVtZW50cy9lbGVtZW50cy5tb2R1bGVcIjtcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRzTWFuYWdlclxue1xuICBjb25zdHJ1Y3RvcigpXG4gIHtcbiAgICBBcHAuYWpheE1vZHVsZS5vbk5ld0VsZW1lbnRzLmRvKCAocmVzdWx0KSA9PiB7IHRoaXMuaGFuZGxlTmV3RWxlbWVudHNSZWNlaXZlZEZyb21TZXJ2ZXIocmVzdWx0KTsgfSk7ICBcbiAgICBBcHAuZWxlbWVudHNKc29uTW9kdWxlLm9uTmV3c0VsZW1lbnRzQ29udmVydGVkLmRvKCAobmV3RWxlbWVudHMpPT4geyBBcHAuZWxlbWVudHNNb2R1bGUuYWRkRWxlbWVudHMobmV3RWxlbWVudHMpOyB9KTsgIFxuICAgIEFwcC5lbGVtZW50c01vZHVsZS5vbkVsZW1lbnRzVG9EaXNwbGF5Q2hhbmdlZC5kbyggKEVsZW1lbnRzVG9EaXNwbGF5Q2hhbmdlZCk9PiB7IHRoaXMuaGFuZGxlRWxlbWVudHNUb0Rpc3BsYXlDaGFuZ2VkKEVsZW1lbnRzVG9EaXNwbGF5Q2hhbmdlZCk7IH0pOyAgICBcbiAgfVxuXG4gIGNoZWNrRm9yTmV3RWxlbWVudHNUb1JldHJpZXZlKCRnZXRGdWxsUmVwcmVzZW50YXRpb24gPSBmYWxzZSlcbiAge1xuICAgIGlmIChBcHAuZGF0YVR5cGUgIT0gQXBwRGF0YVR5cGUuQWxsKSByZXR1cm47XG5cbiAgICBpZiAoQXBwLmNvbmZpZy5kYXRhLnJldHJpZXZlRWxlbWVudHNCeUFwaSlcbiAgICB7XG4gICAgICB0aGlzLnJldHJpZXZlTWlzc2luZ0VsZW1lbnRzVmlhQXBpKCRnZXRGdWxsUmVwcmVzZW50YXRpb24pO1xuICAgIH1cbiAgfSAgIFxuXG4gIHByaXZhdGUgcmV0cmlldmVNaXNzaW5nRWxlbWVudHNWaWFBcGkoJGdldEZ1bGxSZXByZXNlbnRhdGlvbiA6IGJvb2xlYW4pXG4gIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcImNoZWNrRm9yTmV3ZWxlbWVudFRvUmV0cmlldmUsIGZ1bGxSZXByZXNlbnRhdGlvblwiLCAkZ2V0RnVsbFJlcHJlc2VudGF0aW9uKTtcbiAgICBsZXQgcmVzdWx0ID0gQXBwLmJvdW5kc01vZHVsZS5jYWxjdWxhdGVGcmVlQm91bmRzKCRnZXRGdWxsUmVwcmVzZW50YXRpb24pO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY2hlY2tGb3JOZXdlbGVtZW50VG9SZXRyaWV2ZSwgY2FsY3VsYXRlQm91bmRzXCIsIHJlc3VsdCk7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT0gXCJhbGxSZXRyaWV2ZWRcIikgXG4gICAge1xuICAgICAgQXBwLmVsZW1lbnRMaXN0Q29tcG9uZW50LmhhbmRsZUFsbEVsZW1lbnRzUmV0cmlldmVkKCk7XG4gICAgICByZXR1cm47IC8vIG5vdGhpbmcgdG8gZG8sIGFsbCBlbGVtZW50cyBhbHJlYWR5IHJldHJpZXZlZFxuICAgIH1cbiAgICBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09IFwiaW5jbHVkZWRcIilcbiAgICB7XG4gICAgICAvLyBXZSBzaW11bGF0ZSB0aGUgZW5kIG9mIGEgc3VjY2Vzc2VmdWwgYWpheCByZXF1ZXN0IFxuICAgICAgQXBwLmJvdW5kc01vZHVsZS51cGRhdGVGaWxsZWRCb3VuZHNXaXRoQm91bmRzUmVjZWl2ZWQocmVzdWx0LmV4cGVjdGVkRmlsbEJvdW5kcywgQXBwLmN1cnJNYWluSWQsICAkZ2V0RnVsbFJlcHJlc2VudGF0aW9uKTtcbiAgICAgIHRoaXMuaGFuZGxlTmV3RWxlbWVudHNSZWNlaXZlZEZyb21TZXJ2ZXIoeydkYXRhJzogW10sICdmdWxsUmVwcmVzZW50YXRpb24nOiAkZ2V0RnVsbFJlcHJlc2VudGF0aW9ufSk7XG4gICAgICByZXR1cm47XG4gICAgfSAgICBcblxuICAgIC8vIE5vcm1hbCBiZWhhdmlvdXIsIGdldHRpbmcgbWlzc2luZyBlbGVtZW50cyB2aWEgQWpheCByZXF1ZXN0XG4gICAgbGV0IGZyZWVCb3VuZHMgPSByZXN1bHQuZnJlZUJvdW5kcztcbiAgICBsZXQgZXhwZWN0ZWRGaWxsZWRCb3VuZHMgPSByZXN1bHQuZXhwZWN0ZWRGaWxsQm91bmRzO1xuICAgIGlmIChmcmVlQm91bmRzICYmIGZyZWVCb3VuZHMubGVuZ3RoID4gMCkgQXBwLmFqYXhNb2R1bGUuZ2V0RWxlbWVudHNJbkJvdW5kcyhmcmVlQm91bmRzLCAkZ2V0RnVsbFJlcHJlc2VudGF0aW9uLCBleHBlY3RlZEZpbGxlZEJvdW5kcyk7IFxuICB9ICAgXG5cbiAgaGFuZGxlTmV3RWxlbWVudHNSZWNlaXZlZEZyb21TZXJ2ZXIocmVzdWx0KVxuICB7ICAgICAgICBcbiAgICBsZXQgZWxlbWVudHNKc29uID0gcmVzdWx0LmRhdGEgfHwgcmVzdWx0W1wiQGdyYXBoXCJdIHx8IHJlc3VsdDsgXG4gICAgbGV0IGVsZW1lbnRzID0gQXBwLmVsZW1lbnRzSnNvbk1vZHVsZS5jb252ZXJ0SnNvbkVsZW1lbnRzKGVsZW1lbnRzSnNvbiwgdHJ1ZSwgcmVzdWx0LmZ1bGxSZXByZXNlbnRhdGlvbik7XG4gICAgLy8gY29uc29sZS5sb2coXCJuZXcgRWxlbWVudHMgbGVuZ3RoXCIsIGVsZW1lbnRzKTtcbiAgICBcbiAgICAvLyBvbiBhZGQgbWFya2VyQ2x1c3Rlckdyb3VwIGFmdGVyIGZpcnN0IGVsZW1lbnRzIHJlY2VpdmVkXG4gICAgaWYgKGVsZW1lbnRzLm5ld0VsZW1lbnRzTGVuZ3RoID4gMCB8fCBBcHAubW9kZSA9PSBBcHBNb2Rlcy5MaXN0KSBcbiAgICB7XG4gICAgICBBcHAuZWxlbWVudHNNb2R1bGUudXBkYXRlRWxlbWVudHNUb0Rpc3BsYXkodHJ1ZSk7ICBcbiAgICB9XG4gIH07IFxuXG4gIGhhbmRsZUVsZW1lbnRzVG9EaXNwbGF5Q2hhbmdlZChyZXN1bHQgOiBFbGVtZW50c1RvRGlzcGxheUNoYW5nZWQpXG4gIHtcbiAgICBsZXQgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKFwiRGlzcGxheSA9IFwiICsgcmVzdWx0LmVsZW1lbnRzVG9EaXNwbGF5Lmxlbmd0aCArIFwiIC8gcmVtb3ZlID0gXCIgKyByZXN1bHQuZWxlbWVudHNUb1JlbW92ZS5sZW5ndGggKyBcIiAvIGFkZCA9IFwiICsgcmVzdWx0Lm5ld0VsZW1lbnRzLmxlbmd0aCk7XG5cbiAgICBpZiAoQXBwLm1vZGUgPT0gQXBwTW9kZXMuTGlzdClcbiAgICB7XG4gICAgICBBcHAuZWxlbWVudExpc3RDb21wb25lbnQudXBkYXRlKHJlc3VsdC5lbGVtZW50c1RvRGlzcGxheSk7XG4gICAgICBpZiAoQXBwLmFqYXhNb2R1bGUuYWxsRWxlbWVudHNSZWNlaXZlZCkgQXBwLmVsZW1lbnRMaXN0Q29tcG9uZW50LmhhbmRsZUFsbEVsZW1lbnRzUmV0cmlldmVkKCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBpZiAoIUFwcC5tYXBDb21wb25lbnQuaXNJbml0aWFsaXplZCkgeyByZXR1cm47fVxuXG4gICAgICBBcHAubWFwQ29tcG9uZW50Lm1hcmtlckNsdXN0ZXJlckdyb3VwLnJlc3RvcmVVbmNsdXN0ZXJzKHRydWUpOyAgICAgXG5cbiAgICAgIC8vIEluIHNvbWUgY2FzZXMsIG1hcmtlckNsdXN0ZXIgd29ya3MgZmFzdGVyIGNsZWFyaW5nIGFsbHMgbWFya2VycyBhbmQgYWRkaW5nIHRoZW0gYWdhaW5cbiAgICAgIGlmIChyZXN1bHQuZWxlbWVudHNUb1JlbW92ZS5sZW5ndGggKyByZXN1bHQubmV3RWxlbWVudHMubGVuZ3RoID4gcmVzdWx0LmVsZW1lbnRzVG9EaXNwbGF5Lmxlbmd0aClcbiAgICAgIHtcbiAgICAgICAgQXBwLm1hcENvbXBvbmVudC5jbGVhck1hcmtlcnMoKTtcbiAgICAgICAgQXBwLm1hcENvbXBvbmVudC5hZGRNYXJrZXJzKHJlc3VsdC5lbGVtZW50c1RvRGlzcGxheS5tYXAoIChlKSA9PiBlLm1hcmtlci5nZXRMZWFmbGV0TWFya2VyKCkpKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgQXBwLm1hcENvbXBvbmVudC5yZW1vdmVNYXJrZXJzKHJlc3VsdC5lbGVtZW50c1RvUmVtb3ZlLm1hcCggKGUpID0+IGUubWFya2VyLmdldExlYWZsZXRNYXJrZXIoKSkpO1xuICAgICAgICBBcHAubWFwQ29tcG9uZW50LmFkZE1hcmtlcnMocmVzdWx0Lm5ld0VsZW1lbnRzLm1hcCggKGUpID0+IGUubWFya2VyLmdldExlYWZsZXRNYXJrZXIoKSkpO1xuICAgICAgfSAgICAgIFxuXG4gICAgICBBcHAubWFwQ29tcG9uZW50Lm1hcmtlckNsdXN0ZXJlckdyb3VwLmNoZWNrRm9yVW5jbGVzdGVyaW5nKEFwcC5tYXAoKS5nZXRCb3VuZHMoKSk7XG4gICAgfSAgXG5cbiAgICBsZXQgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgLy9jb25zb2xlLmxvZyhcIkVsZW1lbnRzVG9EaXNwbGF5Q2hhbmdlZCBpbiBcIiArIChlbmQtc3RhcnQpICsgXCIgbXNcIik7ICBcbiAgfTsgIFxuXG59IiwiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgQXBwTW9kZXMsIEFwcFN0YXRlcyB9IGZyb20gXCIuLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBjYXBpdGFsaXplLCB1bnNsdWdpZnkgfSBmcm9tIFwiLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcbmltcG9ydCB7IFZpZXdQb3J0IH0gZnJvbSBcIi4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuXG5kZWNsYXJlIHZhciAkO1xuXG5leHBvcnQgY2xhc3MgR2VvY29kaW5nTWFuYWdlclxue1xuICBjb25zdHJ1Y3RvcigpXG4gIHtcbiAgICBBcHAuZ2VvY29kZXIub25HZW9jb2RlUmVzdWx0LmRvKCAoKSA9PiB7IHRoaXMuaGFuZGxlR2VvY29kZVJlc3VsdCgpOyBBcHAuc2VhcmNoQmFyQ29tcG9uZW50LmhhbmRsZUdlb2NvZGVSZXN1bHQoKTsgfSk7XG4gICAgQXBwLmdlb2NvZGVyLm9uR2VvbG9jYWxpemF0aW9uUmVzdWx0LmRvKCAodmlld1BvcnQgOiBWaWV3UG9ydCkgPT4geyB0aGlzLmhhbmRsZUdlb2xvY2FsaXphdGlvblJlc3VsdCh2aWV3UG9ydCk7IH0pO1xuICB9XG5cbiAgaGFuZGxlR2VvY29kZVJlc3VsdCgpXG4gIHtcbiAgICAvL2NvbnNvbGUubG9nKFwiaGFuZGxlR2VvY29kZVJlc3VsdFwiLCBBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb24oKSk7XG4gICAgJCgnI2RpcmVjdG9yeS1zcGlubmVyLWxvYWRlcicpLmhpZGUoKTtcblxuICAgIGlmIChBcHAuc3RhdGUgPT0gQXBwU3RhdGVzLlNob3dEaXJlY3Rpb25zKSAgXG4gICAge1xuICAgICAgLy8gd2UgcmVzdGFydCBkaXJlY3Rpb25zIGZyb20gQXBwIG5ldyBzdGFydCBsb2NhdGlvblxuICAgICAgQXBwLnNldFN0YXRlKEFwcFN0YXRlcy5TaG93RGlyZWN0aW9ucyx7aWQ6IEFwcC5zdGF0ZU1hbmFnZXIuc3RhdGVFbGVtZW50SWQgfSk7XG4gICAgfSAgICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgaWYgKEFwcC5tb2RlID09IEFwcE1vZGVzLk1hcCAmJiBBcHAuc3RhdGUgIT0gQXBwU3RhdGVzLlNob3dFbGVtZW50QWxvbmUpXG4gICAgICB7XG4gICAgICAgIEFwcC5zZXRTdGF0ZShBcHBTdGF0ZXMuTm9ybWFsKTsgICAgICBcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgbGV0IGxvY2F0aW9uID0gQXBwLmdlb2NvZGVyLmdldExvY2F0aW9uKCkgPyBBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb24oKSA6IEFwcC5ib3VuZHNNb2R1bGUuZGVmYXVsdENlbnRlcjtcbiAgICAgICAgQXBwLmJvdW5kc01vZHVsZS5jcmVhdGVCb3VuZHNGcm9tTG9jYXRpb24obG9jYXRpb24pO1xuICAgICAgICBBcHAuZWxlbWVudHNNb2R1bGUuY2xlYXJDdXJyZW50c0VsZW1lbnQoKTtcbiAgICAgICAgQXBwLmVsZW1lbnRzTW9kdWxlLnVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5KHRydWUpO1xuICAgICAgICBsZXQgYWRkcmVzcyA9IEFwcC5nZW9jb2Rlci5sYXN0QWRkcmVzc1JlcXVlc3Q7XG4gICAgICAgIGlmIChBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb24oKSkgXG4gICAgICAgICAgQXBwLmVsZW1lbnRMaXN0Q29tcG9uZW50LnNldFRpdGxlKCcgYXV0b3VyIGRlIDxpPicgKyBjYXBpdGFsaXplKHVuc2x1Z2lmeShhZGRyZXNzKSkpICsgJzwvaT4nO1xuICAgICAgfSAgICAgIFxuXG4gICAgICBBcHAuZG9jdW1lbnRUaXRsZU1vZHVsZS51cGRhdGVEb2N1bWVudFRpdGxlKCk7XG4gICAgfSAgICAgICAgXG4gIH1cblxuICBoYW5kbGVHZW9sb2NhbGl6YXRpb25SZXN1bHQodmlld1BvcnQpXG4gIHtcbiAgICBpZiAoQXBwLm1vZGUgPT0gQXBwTW9kZXMuTWFwKVxuICAgIHtcbiAgICAgIEFwcC5zZXRTdGF0ZShBcHBTdGF0ZXMuTm9ybWFsKTtcbiAgICAgIEFwcC5tYXBDb21wb25lbnQucGFuVG9Mb2NhdGlvbih2aWV3UG9ydC50b0xvY2F0aW9uKCksIHZpZXdQb3J0Lnpvb20sIGZhbHNlKTsgICAgICBcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIEFwcC5ib3VuZHNNb2R1bGUuY3JlYXRlQm91bmRzRnJvbUxvY2F0aW9uKHZpZXdQb3J0LnRvTG9jYXRpb24oKSk7XG4gICAgICBBcHAuZWxlbWVudHNNb2R1bGUuY2xlYXJDdXJyZW50c0VsZW1lbnQoKTtcbiAgICAgIEFwcC5lbGVtZW50c01vZHVsZS51cGRhdGVFbGVtZW50c1RvRGlzcGxheSh0cnVlKTtcbiAgICAgIEFwcC5lbGVtZW50TGlzdENvbXBvbmVudC5zZXRUaXRsZSgnIGF1dG91ciBkZSA8aT5tYSBwb3NpdGlvbjwvaT4nKTtcbiAgICAgIC8vIHNhdmUgdGhlIHZpZXdwb3J0IGlmIHdlIGdvIHRvIG1hcCBhZnRlclxuICAgICAgQXBwLm1hcENvbXBvbmVudC5zZXRWaWV3UG9ydCh2aWV3UG9ydCk7XG4gICAgfSAgICBcbiAgfVxufSIsImltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEFwcERhdGFUeXBlLCBBcHBNb2RlcywgQXBwU3RhdGVzIH0gZnJvbSBcIi4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEhpc3RvcnlTdGF0ZSwgVmlld1BvcnQgfSBmcm9tIFwiLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5pbXBvcnQgKiBhcyBDb29raWVzIGZyb20gXCIuLi91dGlscy9jb29raWVzXCI7XG5kZWNsYXJlIHZhciAkLCBMIDogYW55O1xuXG5leHBvcnQgY2xhc3MgSGlzdG9yeVN0YXRlTWFuYWdlclxue1xuICBsYXN0SGlzdG9yeVN0YXRlIDogSGlzdG9yeVN0YXRlID0gbnVsbDtcbiAgLypcbiAgKiBMb2FkIGluaXRpYWwgc3RhdGUgb3Igc3RhdGUgcG9wcGVkIGJ5IHdpbmRvdyBoaXN0b3J5IG1hbmFnZXJcbiAgKi9cbiAgbG9hZChoaXN0b3J5c3RhdGUgOiBIaXN0b3J5U3RhdGUsICRiYWNrRnJvbUhpc3RvcnkgPSBmYWxzZSlcbiAge1xuICAgIGlmIChoaXN0b3J5c3RhdGUgPT09IG51bGwpIHJldHVybjsgIFxuICAgIHRoaXMubGFzdEhpc3RvcnlTdGF0ZSA9IGhpc3RvcnlzdGF0ZTtcbiAgICBjb25zb2xlLmxvZyhcImxvYWRIaXN0b3J5c3RhdGVcIiwgaGlzdG9yeXN0YXRlKTsgIFxuXG4gICAgaWYgKGhpc3RvcnlzdGF0ZS5kYXRhVHlwZSA9PSBBcHBEYXRhVHlwZS5TZWFyY2hSZXN1bHRzKVxuICAgIHtcbiAgICAgIC8vIGZvcmNlIHNldHRpbmcgZGF0YVR5cGUgYmVmb3JlIHNlYXJjaEJhckNvbXBvbmVudCB0byBhdm9pZCBoaXN0b3J5IGlzc3Vlc1xuICAgICAgQXBwLnNldERhdGFUeXBlKGhpc3RvcnlzdGF0ZS5kYXRhVHlwZSwgdHJ1ZSk7XG4gICAgICBBcHAuc2VhcmNoQmFyQ29tcG9uZW50LnNlYXJjaEVsZW1lbnRzKGhpc3RvcnlzdGF0ZS50ZXh0LCAkYmFja0Zyb21IaXN0b3J5KTtcbiAgICAgICQoJyNkaXJlY3Rvcnktc3Bpbm5lci1sb2FkZXInKS5oaWRlKCk7XG4gICAgfSAgXG4gICAgZWxzZVxuICAgIHtcbiAgICAgIC8vIGNoZWNrIHZpZXdwb3J0IGFuZCBhZGRyZXNzIGZyb20gY29va2llc1xuICAgICAgaWYgKEFwcC5jb25maWcubWFwLnNhdmVWaWV3cG9ydEluQ29va2llcyAmJiAhaGlzdG9yeXN0YXRlLnZpZXdwb3J0ICYmICFoaXN0b3J5c3RhdGUuYWRkcmVzcyAmJiBoaXN0b3J5c3RhdGUuc3RhdGUgPT0gQXBwU3RhdGVzLk5vcm1hbCkgXG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwibm8gdmlld3BvcnQgbm9yIGFkZHJlc3MgcHJvdmlkZWQsIHVzaW5nIGNvb2tpZXMgdmFsdWVzXCIsIENvb2tpZXMucmVhZENvb2tpZSgndmlld3BvcnQnKSwgQ29va2llcy5yZWFkQ29va2llKCdhZGRyZXNzJykpO1xuICAgICAgICBpZiAoQ29va2llcy5yZWFkQ29va2llKCd2aWV3cG9ydCcpKSBoaXN0b3J5c3RhdGUudmlld3BvcnQgPSBuZXcgVmlld1BvcnQoKS5mcm9tU3RyaW5nKENvb2tpZXMucmVhZENvb2tpZSgndmlld3BvcnQnKSk7XG4gICAgICAgIGlmIChDb29raWVzLnJlYWRDb29raWUoJ2FkZHJlc3MnKSkgaGlzdG9yeXN0YXRlLmFkZHJlc3MgPSBDb29raWVzLnJlYWRDb29raWUoJ2FkZHJlc3MnKTtcbiAgICAgICAgaWYgKGhpc3RvcnlzdGF0ZS5hZGRyZXNzKSAkKCcuc2VhcmNoLWJhcicpLnZhbChoaXN0b3J5c3RhdGUuYWRkcmVzcyk7XG4gICAgICB9ICAgIFxuICAgIH0gICAgXG5cbiAgICBpZiAoaGlzdG9yeXN0YXRlLmZpbHRlcnMpIEFwcC5maWx0ZXJSb3V0aW5nTW9kdWxlLmxvYWRGaWx0ZXJzRnJvbVN0cmluZyhoaXN0b3J5c3RhdGUuZmlsdGVycyk7XG4gICAgZWxzZSBBcHAuZmlsdGVyc0NvbXBvbmVudC5zZXRNYWluT3B0aW9uKCdhbGwnKTsgXG5cbiAgICBpZiAoaGlzdG9yeXN0YXRlLmRhdGFUeXBlID09IEFwcERhdGFUeXBlLkFsbCAmJiBoaXN0b3J5c3RhdGUudmlld3BvcnQgJiYgaGlzdG9yeXN0YXRlLnN0YXRlICE9IEFwcFN0YXRlcy5TaG93RWxlbWVudEFsb25lKVxuICAgIHsgICAgICBcbiAgICAgIC8vIGlmIG1hcCBub3QgbG9hZGVkIHdlIGp1c3Qgc2V0IHRoZSBtYXBDb21wb25lbnQgdmlld3BvcnQgd2l0aG91dCBjaGFuZ2luZyB0aGVcbiAgICAgIC8vIGFjdHVhbCB2aWV3cG9ydCBvZiB0aGUgbWFwLCBiZWNhdXNlIGl0IHdpbGwgYmUgZG9uZSBpblxuICAgICAgLy8gbWFwIGluaXRpYWxpc2F0aW9uXG4gICAgICBBcHAubWFwQ29tcG9uZW50LnNldFZpZXdQb3J0KGhpc3RvcnlzdGF0ZS52aWV3cG9ydCwgQXBwLm1hcENvbXBvbmVudC5pc01hcExvYWRlZCk7XG5cbiAgICAgIC8vIG9uIGxpc3QgbW9kZSBpbml0aWFsaXplIGJvdW5kc1xuICAgICAgaWYgKGhpc3RvcnlzdGF0ZS5tb2RlID09IEFwcE1vZGVzLkxpc3QpXG4gICAgICB7XG4gICAgICAgIEFwcC5ib3VuZHNNb2R1bGUuY3JlYXRlQm91bmRzRnJvbUxvY2F0aW9uKEwubGF0TG5nKGhpc3RvcnlzdGF0ZS52aWV3cG9ydC5sYXQsIGhpc3RvcnlzdGF0ZS52aWV3cG9ydC5sbmcpKTtcbiAgICAgIH1cblxuICAgICAgJCgnI2RpcmVjdG9yeS1zcGlubmVyLWxvYWRlcicpLmhpZGUoKTsgIFxuXG4gICAgICBpZiAoaGlzdG9yeXN0YXRlLm1vZGUgPT0gQXBwTW9kZXMuTGlzdCApXG4gICAgICB7XG4gICAgICAgIGxldCBsb2NhdGlvbiA9IEwubGF0TG5nKGhpc3RvcnlzdGF0ZS52aWV3cG9ydC5sYXQsIGhpc3RvcnlzdGF0ZS52aWV3cG9ydC5sbmcpO1xuICAgICAgfSAgXG4gICAgfSAgXG5cbiAgICBBcHAuc2V0TW9kZShoaXN0b3J5c3RhdGUubW9kZSwgJGJhY2tGcm9tSGlzdG9yeSwgZmFsc2UpO1xuICAgIFxuICAgIC8vIGlmIGFkZHJlc3MgaXMgcHJvdmlkZWQgd2UgZ2VvbG9jYWxpemUgdGhpcyBhZGRyZXNzXG4gICAgaWYgKGhpc3RvcnlzdGF0ZS5kYXRhVHlwZSA9PSBBcHBEYXRhVHlwZS5BbGwgJiYgaGlzdG9yeXN0YXRlLmFkZHJlc3MpIFxuICAgIHtcbiAgICAgIGlmIChoaXN0b3J5c3RhdGUuYWRkcmVzcyA9PSBcImdlb2xvY2FsaXplXCIpXG4gICAgICB7XG4gICAgICAgIEFwcC5zZWFyY2hCYXJDb21wb25lbnQuZ2VvbG9jYXRlVXNlcigpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBBcHAuZ2VvY29kZXIuZ2VvY29kZUFkZHJlc3MoXG4gICAgICAgICAgaGlzdG9yeXN0YXRlLmFkZHJlc3MsIFxuICAgICAgICAgIChyZXN1bHRzKSA9PiBcbiAgICAgICAgICB7IFxuICAgICAgICAgICAgLy8gaWYgdmlld3BvcnQgaXMgZ2l2ZW4sIG5vdGhpbmcgdG8gZG8sIHdlIGFscmVhZHkgZGlkIGluaXRpYWxpemF0aW9uIHdpdGggdmlld3BvcnRcbiAgICAgICAgICAgIGlmIChoaXN0b3J5c3RhdGUudmlld3BvcnQgJiYgaGlzdG9yeXN0YXRlLm1vZGUgPT0gQXBwTW9kZXMuTWFwKSByZXR1cm47XG4gICAgICAgICAgICAvLyBmaXQgYm91bmRzIGFueXdheSBzbyB0aGUgbWFwY29tcG9uZW50IHdpbGwgcmVnaXN0ZXIgQXBwIHJlcXVlc3RlZCBib3VuZHMgZm9yIGxhdGVyXG4gICAgICAgICAgICBBcHAubWFwQ29tcG9uZW50LmZpdEJvdW5kcyhBcHAuZ2VvY29kZXIuZ2V0Qm91bmRzKCkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgLy8gZmFpbHVyZSBjYWxsYmFja1xuICAgICAgICAgICAgQXBwLnNlYXJjaEJhckNvbXBvbmVudC5zZXRWYWx1ZShcIlwiKTtcbiAgICAgICAgICAgIGlmICghaGlzdG9yeXN0YXRlLnZpZXdwb3J0KSBcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQXBwLm1hcENvbXBvbmVudC5maXREZWZhdWx0Qm91bmRzKCk7XG4gICAgICAgICAgICAgIEFwcC5jb21wb25lbnQudG9hc3RNZXNzYWdlKFwiRXJyZXVyLCBjZXR0ZSBhZHJlc3NlIG4nYSBwYXMgcHUgw6p0cmUgbG9jYWxpc8OpZSA6IFwiICsgaGlzdG9yeXN0YXRlLmFkZHJlc3MpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAgXG4gICAgICAgICk7XG4gICAgICB9ICAgICAgXG4gICAgfVxuXG4gICAgaWYgKCFoaXN0b3J5c3RhdGUudmlld3BvcnQgJiYgIWhpc3RvcnlzdGF0ZS5hZGRyZXNzICYmIEFwcC5jb25maWcuZGF0YS5yZXRyaWV2ZUVsZW1lbnRzQnlBcGkgJiYgaGlzdG9yeXN0YXRlLnN0YXRlICE9IEFwcFN0YXRlcy5TaG93RWxlbWVudEFsb25lKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImZpdCBkZWZhdWx0IGJvdW5kcyBubyB2aWV3cG9ydCBubyBhZGRyZXNzXCIpO1xuICAgICAgQXBwLm1hcENvbXBvbmVudC5maXREZWZhdWx0Qm91bmRzKCk7XG4gICAgfSBcblxuICAgIGlmIChoaXN0b3J5c3RhdGUuaWQpIFxuICAgIHtcbiAgICAgIHNldFRpbWVvdXQoICgpID0+IHsgXG4gICAgICAgIEFwcC5zZXRTdGF0ZShcbiAgICAgICAgICBoaXN0b3J5c3RhdGUuc3RhdGUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IGhpc3RvcnlzdGF0ZS5pZCwgXG4gICAgICAgICAgICBwYW5Ub0xvY2F0aW9uOiAoaGlzdG9yeXN0YXRlLnZpZXdwb3J0ID09PSBudWxsKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgJGJhY2tGcm9tSGlzdG9yeSk7XG4gICAgICAgICQoJyNkaXJlY3Rvcnktc3Bpbm5lci1sb2FkZXInKS5oaWRlKCk7ICAgIFxuICAgICAgfSwgNDAwKTsgIFxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgQXBwLnNldFN0YXRlKGhpc3RvcnlzdGF0ZS5zdGF0ZSwgbnVsbCwgJGJhY2tGcm9tSGlzdG9yeSk7ICAgIFxuICAgIH0gICAgXG4gIH07ICAgIFxufSIsImltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEFwcE1vZGVzLCBBcHBTdGF0ZXMsIEFwcERhdGFUeXBlIH0gZnJvbSBcIi4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IGNhcGl0YWxpemUsIHVuc2x1Z2lmeSB9IGZyb20gXCIuLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuaW1wb3J0IHsgTWFya2VyIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvbWFwL21hcmtlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSBcIi4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuXG5kZWNsYXJlIHZhciAkO1xuXG5leHBvcnQgY2xhc3MgTWFwTWFuYWdlclxue1xuICAvLyB3aGVuIGNsaWNrIG9uIG1hcmtlciBpdCBhbHNvIHRyaWdlciBjbGljayBvbiBtYXBcbiAgLy8gd2hlbiBjbGljayBvbiBtYXJrZXIgd2UgcHV0IGlzQ2xpY2tpbmcgdG8gdHJ1ZSBkdXJpbmdcbiAgLy8gZmV3IG1pbGxpc2Vjb25kcyBzbyB0aGUgbWFwIGRvbid0IGRvIGFueXRoaW5nIGlzIGNsaWNrIGV2ZW50XG4gIHByaXZhdGUgaXNDbGlja2luZyA9IGZhbHNlO1xuXG4gIG9uTWFya2VyQ2xpY2sgPSBuZXcgRXZlbnQ8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKClcbiAge1xuICAgIEFwcC5tYXBDb21wb25lbnQub25JZGxlLmRvKCAoKSA9PiB7IHRoaXMuaGFuZGxlTWFwSWRsZSgpOyAgfSk7XG4gICAgQXBwLm1hcENvbXBvbmVudC5vbkNsaWNrLmRvKCAoKSA9PiB7IHRoaXMuaGFuZGxlTWFwQ2xpY2soKTsgfSk7ICAgXG4gICAgQXBwLmluZm9CYXJDb21wb25lbnQub25IaWRlLmRvKCAoKT0+IHsgdGhpcy5oYW5kbGVJbmZvQmFySGlkZSgpOyB9KTsgXG4gIH1cblxuICBoYW5kbGVJbmZvQmFySGlkZSgpXG4gIHtcbiAgICBBcHAuc2V0U3RhdGUoQXBwU3RhdGVzLk5vcm1hbCk7XG4gIH07XG5cbiAgc2V0VGltZW91dENsaWNraW5nKCkgXG4gIHsgXG4gICAgdGhpcy5pc0NsaWNraW5nID0gdHJ1ZTtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdGhhdC5pc0NsaWNraW5nID0gZmFsc2U7IH0sIDEwMCk7IFxuICB9O1xuXG4gIGhhbmRsZU1hcmtlckNsaWNrKG1hcmtlciA6IE1hcmtlcilcbiAge1xuICAgIGlmIChBcHAubW9kZSAhPSBBcHBNb2Rlcy5NYXApIHJldHVybjtcblxuICAgIHRoaXMuc2V0VGltZW91dENsaWNraW5nKCk7XG4gICAgdGhpcy5vbk1hcmtlckNsaWNrLmVtaXQobWFya2VyLmdldEVsZW1lbnQoKS5pZCk7XG5cbiAgICBpZiAobWFya2VyLmlzSGFsZkhpZGRlbigpKSBBcHAuc2V0U3RhdGUoQXBwU3RhdGVzLk5vcm1hbCk7ICBcblxuICAgIEFwcC5zZXRTdGF0ZShBcHBTdGF0ZXMuU2hvd0VsZW1lbnQsIHsgaWQ6IG1hcmtlci5nZXRJZCgpIH0pOyAgICBcbiAgfVxuXG4gIGhhbmRsZU1hcElkbGUoKVxuICB7ICAgIFxuICAgIGlmIChBcHAubW9kZSAhPSBBcHBNb2Rlcy5NYXApICAgICByZXR1cm47XG5cbiAgICAvLyB3ZSBuZWVkIG1hcCB0byBiZSBsb2FkZWQgdG8gZ2V0IHRoZSByYWRpdXMgb2YgdGhlIHZpZXdwb3J0XG4gICAgLy8gYW5kIGdldCB0aGUgZWxlbWVudHMgaW5zaWRlXG4gICAgaWYgKCFBcHAubWFwQ29tcG9uZW50LmlzTWFwTG9hZGVkKVxuICAgIHtcbiAgICAgIEFwcC5tYXBDb21wb25lbnQub25NYXBMb2FkZWQuZG8oKCkgPT4ge3RoaXMuaGFuZGxlTWFwSWRsZSgpOyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgdXBkYXRlSW5BbGxFbGVtZW50TGlzdCA9ICFBcHAubWFwQ29tcG9uZW50Lmhhc1pvb21lZEluKCk7XG5cbiAgICBBcHAuZWxlbWVudHNNb2R1bGUudXBkYXRlRWxlbWVudHNUb0Rpc3BsYXkodXBkYXRlSW5BbGxFbGVtZW50TGlzdCk7XG5cbiAgICBpZiAoQXBwLnN0YXRlID09IEFwcFN0YXRlcy5Ob3JtYWwgfHwgQXBwLnN0YXRlID09IEFwcFN0YXRlcy5TaG93RWxlbWVudCkgQXBwLmVsZW1lbnRzTWFuYWdlci5jaGVja0Zvck5ld0VsZW1lbnRzVG9SZXRyaWV2ZSgpO1xuXG4gICAgaWYgKEFwcC5kYXRhVHlwZSA9PSBBcHBEYXRhVHlwZS5BbGwpIEFwcC5oaXN0b3J5TW9kdWxlLnVwZGF0ZUN1cnJTdGF0ZSgpO1xuICB9O1xuXG4gIGhhbmRsZU1hcENsaWNrKClcbiAge1xuICAgIGlmICh0aGlzLmlzQ2xpY2tpbmcpIHJldHVybjtcblxuICAgIC8vY29uc29sZS5sb2coXCJoYW5kbGUgTWFwIENsaWNrXCIsIEFwcFN0YXRlc1tBcHAuc3RhdGVdKTtcbiAgICBcbiAgICBpZiAoQXBwLnN0YXRlID09IEFwcFN0YXRlcy5TaG93RWxlbWVudCB8fCBBcHAuc3RhdGUgPT0gQXBwU3RhdGVzLlNob3dFbGVtZW50QWxvbmUpXG4gICAge1xuICAgICAgQXBwLmluZm9CYXJDb21wb25lbnQuaGlkZSgpOyBcbiAgICAgIEFwcC5zZXRTdGF0ZShBcHBTdGF0ZXMuTm9ybWFsKTsgICAgXG4gICAgfVxuICAgIGVsc2UgaWYgKEFwcC5zdGF0ZSA9PSBBcHBTdGF0ZXMuU2hvd0RpcmVjdGlvbnMpXG4gICAgICBBcHAuc2V0U3RhdGUoQXBwU3RhdGVzLlNob3dFbGVtZW50LCB7IGlkIDogQXBwLmluZm9CYXJDb21wb25lbnQuZ2V0Q3VyckVsZW1lbnRJZCgpIH0pOyAgICBcbiAgICBcbiAgICBBcHAubWFwQ29udHJvbHNDb21wb25lbnQuaGlkZUNvbnRyb2xMYXllcnMoKTtcbiAgfTtcblxuICBcbn0iLCJpbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgeyBBcHBEYXRhVHlwZSB9IGZyb20gXCIuLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBjYXBpdGFsaXplLCB1bnNsdWdpZnkgfSBmcm9tIFwiLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcblxuZXhwb3J0IGVudW0gQXBwTW9kZXNcbntcbiAgTWFwID0gMSxcbiAgTGlzdCA9IDJcbn1cblxuZXhwb3J0IGNsYXNzIE1vZGVNYW5hZ2VyXG57XG4gIHByaXZhdGUgbW9kZV8gOiBBcHBNb2RlcyA9IG51bGw7XG5cbiAgLypcbiAgKiBDaGFuZ2UgQXBwIG1vZGVcbiAgKi9cbiAgc2V0TW9kZSgkbW9kZSA6IEFwcE1vZGVzLCAkYmFja0Zyb21IaXN0b3J5IDogYm9vbGVhbiA9IGZhbHNlLCAkdXBkYXRlVGl0bGVBbmRTdGF0ZSA9IHRydWUpXG4gIHtcbiAgICBBcHAuZWxlbWVudHNNb2R1bGUuY2xlYXJDdXJyZW50c0VsZW1lbnQoKTtcbiAgICBBcHAuZWxlbWVudExpc3RDb21wb25lbnQuY2xlYXIoKTtcblxuICAgIGlmICgkbW9kZSA9PSBBcHBNb2Rlcy5NYXApIHRoaXMuc2V0TWFwTW9kZSgpO1xuICAgIGVsc2UgdGhpcy5zZXRMaXN0TW9kZSgpO1xuXG4gICAgLy8gaWYgcHJldmlvdXMgbW9kZSB3YXNuJ3QgbnVsbCBcbiAgICBsZXQgb2xkTW9kZSA9IHRoaXMubW9kZV87XG4gICAgdGhpcy5tb2RlXyA9ICRtb2RlO1xuXG4gICAgLy8gdXBkYXRlIGhpc3RvcnkgaWYgd2UgbmVlZCB0b1xuICAgIGlmIChvbGRNb2RlICE9IG51bGwgJiYgISRiYWNrRnJvbUhpc3RvcnkpIEFwcC5oaXN0b3J5TW9kdWxlLnB1c2hOZXdTdGF0ZSgpO1xuXG4gICAgQXBwLmdvZ29Db250cm9sQ29tcG9uZW50LnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgXG4gICAgc2V0VGltZW91dCggKCkgPT4gQXBwLmVsZW1lbnRzTW9kdWxlLnVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5KHRydWUpICwgMzAwKTtcblxuICAgIGlmICgkdXBkYXRlVGl0bGVBbmRTdGF0ZSlcbiAgICB7XG4gICAgICBBcHAuZG9jdW1lbnRUaXRsZU1vZHVsZS51cGRhdGVEb2N1bWVudFRpdGxlKCk7ICBcblxuICAgICAgLy8gYWZ0ZXIgY2xlYXJpbmcsIHdlIHNldCB0aGUgY3VycmVudCBzdGF0ZSBhZ2FpblxuICAgICAgaWYgKCRtb2RlID09IEFwcE1vZGVzLk1hcCkgQXBwLnNldFN0YXRlKEFwcC5zdGF0ZSwge2lkIDogQXBwLnN0YXRlTWFuYWdlci5zdGF0ZUVsZW1lbnRJZH0pOyAgXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRNYXBNb2RlKClcbiAge1xuICAgIEFwcC5tYXBDb21wb25lbnQuc2hvdygpO1xuICAgIEFwcC5lbGVtZW50TGlzdENvbXBvbmVudC5oaWRlKCk7ICAgICAgICBcblxuICAgIEFwcC5tYXBDb21wb25lbnQuaW5pdGlhbGl6ZSgpOyAgICBcblxuICAgIGlmIChBcHAubWFwQ29tcG9uZW50LmlzTWFwTG9hZGVkKSBBcHAuYm91bmRzTW9kdWxlLmV4dGVuZEJvdW5kcygwLCBBcHAubWFwQ29tcG9uZW50LmdldEJvdW5kcygpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TGlzdE1vZGUoKVxuICB7XG4gICAgQXBwLm1hcENvbXBvbmVudC5oaWRlKCk7XG4gICAgQXBwLmVsZW1lbnRMaXN0Q29tcG9uZW50LnNob3coKTsgICAgICAgIFxuXG4gICAgLy8gY29uc29sZS5sb2coXCJsaXN0IG1vZGVcIiwgQXBwLmdlb2NvZGVyLmdldExvY2F0aW9uKCkpOyAgICAgIFxuXG4gICAgaWYgKEFwcC5kYXRhVHlwZSA9PSBBcHBEYXRhVHlwZS5BbGwpXG4gICAge1xuICAgICAgbGV0IGNlbnRlckxvY2F0aW9uIDogTC5MYXRMbmc7XG4gICAgICBsZXQgYWRkcmVzcyA9IEFwcC5nZW9jb2Rlci5sYXN0QWRkcmVzc1JlcXVlc3Q7XG5cbiAgICAgIGlmIChBcHAubWFwQ29tcG9uZW50LmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgY2VudGVyTG9jYXRpb24gPSBBcHAubWFwQ29tcG9uZW50LmdldENlbnRlcigpO1xuICAgICAgICBBcHAuZWxlbWVudExpc3RDb21wb25lbnQuc2V0VGl0bGUoJyBhdXRvdXIgZHUgY2VudHJlIGRlIGxhIGNhcnRlJyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb24oKSkgeyAgICAgICAgICBcbiAgICAgICAgY2VudGVyTG9jYXRpb24gPSBBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb24oKTtcbiAgICAgICAgQXBwLmVsZW1lbnRMaXN0Q29tcG9uZW50LnNldFRpdGxlKCcgYXV0b3VyIGRlIDxpPicgKyBjYXBpdGFsaXplKHVuc2x1Z2lmeShhZGRyZXNzKSkgKyAnPC9pPicpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNlbnRlckxvY2F0aW9uID0gQXBwLmJvdW5kc01vZHVsZS5kZWZhdWx0Q2VudGVyO1xuICAgICAgICBBcHAuZWxlbWVudExpc3RDb21wb25lbnQuc2V0VGl0bGUoJycpO1xuICAgICAgfSAgICAgICAgIFxuXG4gICAgICBBcHAuYm91bmRzTW9kdWxlLmNyZWF0ZUJvdW5kc0Zyb21Mb2NhdGlvbihjZW50ZXJMb2NhdGlvbik7XG4gICAgICBBcHAuZWxlbWVudHNNYW5hZ2VyLmNoZWNrRm9yTmV3RWxlbWVudHNUb1JldHJpZXZlKHRydWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcHAuZGF0YVR5cGUgPT0gQXBwRGF0YVR5cGUuU2VhcmNoUmVzdWx0cylcbiAgICB7XG4gICAgICBBcHAuZWxlbWVudHNNb2R1bGUudXBkYXRlRWxlbWVudHNUb0Rpc3BsYXkodHJ1ZSxmYWxzZSk7XG4gICAgICBBcHAuZWxlbWVudExpc3RDb21wb25lbnQuc2V0VGl0bGUoJycpO1xuICAgIH0gICAgICBcbiAgfVxuXG4gIGdldCBtb2RlKCkgeyByZXR1cm4gdGhpcy5tb2RlXzsgfVxufSIsImltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEFwcERhdGFUeXBlLCBBcHBNb2RlcyB9IGZyb20gXCIuLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuXG5leHBvcnQgZW51bSBBcHBTdGF0ZXMgXG57XG4gIE5vcm1hbCxcbiAgU2hvd0VsZW1lbnQsXG4gIFNob3dFbGVtZW50QWxvbmUsXG4gIFNob3dEaXJlY3Rpb25zXG59XG5cbmV4cG9ydCBjbGFzcyBTdGF0ZU1hbmFnZXJcbntcbiAgLy8gY3VyciBzdGF0ZSBvZiB0aGUgYXBwXG4gIHByaXZhdGUgc3RhdGVfIDogQXBwU3RhdGVzID0gbnVsbDsgIFxuXG4gIC8vIHNvbWVzIHN0YXRlcyBuZWVkIGEgZWxlbWVudCBpZCwgd2Ugc3RvcmUgaXQgaW4gdGhpcyBwcm9wZXJ0eVxuICBwcml2YXRlIHN0YXRlRWxlbWVudElkXyA6IG51bWJlciA9IG51bGw7XG5cbiAgZ2V0IHN0YXRlKCkgeyByZXR1cm4gdGhpcy5zdGF0ZV87IH1cbiAgZ2V0IHN0YXRlRWxlbWVudElkKCkgOiBudW1iZXIgeyByZXR1cm4gdGhpcy5zdGF0ZUVsZW1lbnRJZF87IH1cblxuICAvKlxuICAqIENoYW5nZSBBcHAgc3RhdGVcbiAgKi9cbiAgc2V0U3RhdGUoJG5ld1N0YXRlIDogQXBwU3RhdGVzLCBvcHRpb25zIDogYW55ID0ge30sICRiYWNrRnJvbUhpc3RvcnkgOiBib29sZWFuID0gZmFsc2UpIFxuICB7ICAgXG4gICAgLy8gY29uc29sZS5sb2coXCJBcHBNb2R1bGUgc2V0IFN0YXRlIDogXCIgKyBBcHBTdGF0ZXNbJG5ld1N0YXRlXSAgKyAgJywgb3B0aW9ucyA9ICcsb3B0aW9ucyk7XG4gICAgbGV0IGVsZW1lbnQgPSAob3B0aW9ucyAmJiBvcHRpb25zLmlkKSA/IEFwcC5lbGVtZW50QnlJZChvcHRpb25zLmlkKSA6IG51bGw7XG5cbiAgICBsZXQgb2xkU3RhdGVOYW1lID0gdGhpcy5zdGF0ZV87XG4gICAgdGhpcy5zdGF0ZV8gPSAkbmV3U3RhdGU7ICAgICAgXG5cbiAgICBpZiAob2xkU3RhdGVOYW1lID09IEFwcFN0YXRlcy5TaG93RGlyZWN0aW9ucyAmJiBBcHAuZGlyZWN0aW9uc0NvbXBvbmVudCkgXG4gICAgICBBcHAuZGlyZWN0aW9uc0NvbXBvbmVudC5jbGVhcigpO1xuXG4gICAgaWYgKG9sZFN0YXRlTmFtZSA9PSBBcHBTdGF0ZXMuU2hvd0VsZW1lbnRBbG9uZSkgIFxuICAgIHtcbiAgICAgIEFwcC5lbGVtZW50c01vZHVsZS5jbGVhckN1cnJlbnRzRWxlbWVudCgpO1xuICAgICAgQXBwLmRpc3BsYXlFbGVtZW50QWxvbmVNb2R1bGUuZW5kKCk7ICBcbiAgICB9ICBcblxuICAgIHRoaXMuc3RhdGVFbGVtZW50SWRfID0gb3B0aW9ucyA/IG9wdGlvbnMuaWQgOiBudWxsO1xuICAgIFxuICAgIHN3aXRjaCAoJG5ld1N0YXRlKVxuICAgIHtcbiAgICAgIGNhc2UgQXBwU3RhdGVzLk5vcm1hbDogdGhpcy5zZXROb3JtYWxTdGF0ZSgpOyBicmVhaztcbiAgICAgIGNhc2UgQXBwU3RhdGVzLlNob3dFbGVtZW50OiB0aGlzLnNldFNob3dFbGVtZW50U3RhdGUoZWxlbWVudCwgb3B0aW9ucyk7IGJyZWFrOyBcbiAgICAgIGNhc2UgQXBwU3RhdGVzLlNob3dFbGVtZW50QWxvbmU6IHRoaXMuc2V0U2hvd0VsZW1lbnRBbG9uZVN0YXRlKGVsZW1lbnQsIG9wdGlvbnMpOyBicmVhaztcbiAgICAgIGNhc2UgQXBwU3RhdGVzLlNob3dEaXJlY3Rpb25zOiB0aGlzLnNldFNob3dEaXJlY3Rpb25zU3RhdGUoZWxlbWVudCwgb3B0aW9ucyk7YnJlYWs7ICAgICAgXG4gICAgfVxuXG4gICAgaWYgKCEkYmFja0Zyb21IaXN0b3J5ICYmXG4gICAgICAgKCBvbGRTdGF0ZU5hbWUgIT09ICRuZXdTdGF0ZSBcbiAgICAgICAgfHwgJG5ld1N0YXRlID09IEFwcFN0YXRlcy5TaG93RWxlbWVudFxuICAgICAgICB8fCAkbmV3U3RhdGUgPT0gQXBwU3RhdGVzLlNob3dFbGVtZW50QWxvbmVcbiAgICAgICAgfHwgJG5ld1N0YXRlID09IEFwcFN0YXRlcy5TaG93RGlyZWN0aW9ucykgKVxuICAgIHtcbiAgICAgIGlmIChBcHAuZGF0YVR5cGUgPT0gQXBwRGF0YVR5cGUuQWxsKSBBcHAuaGlzdG9yeU1vZHVsZS5wdXNoTmV3U3RhdGUob3B0aW9ucyk7XG4gICAgICBlbHNlIEFwcC5oaXN0b3J5TW9kdWxlLnVwZGF0ZUN1cnJTdGF0ZShvcHRpb25zKTtcbiAgICB9ICAgICBcblxuICAgIEFwcC5kb2N1bWVudFRpdGxlTW9kdWxlLnVwZGF0ZURvY3VtZW50VGl0bGUob3B0aW9ucyk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzZXROb3JtYWxTdGF0ZSgpXG4gIHtcbiAgICBBcHAuaW5mb0JhckNvbXBvbmVudC5oaWRlKGZhbHNlKTtcbiAgfSAgXG5cbiAgcHJpdmF0ZSBzZXRTaG93RWxlbWVudFN0YXRlKGVsZW1lbnQsIG9wdGlvbnMpXG4gIHtcbiAgICBpZiAoQXBwLm1vZGUgPT0gQXBwTW9kZXMuTGlzdClcbiAgICB7XG4gICAgICBpZiAoIUFwcC5tYXBDb21wb25lbnQuaXNJbml0aWFsaXplZClcbiAgICAgIHtcbiAgICAgICAgQXBwLm1hcENvbXBvbmVudC5vbk1hcFJlYWR5LmRvKCgpID0+IFxuICAgICAgICB7XG4gICAgICAgICAgQXBwLm1hcENvbXBvbmVudC5wYW5Ub0xvY2F0aW9uKGVsZW1lbnQucG9zaXRpb24sIDE0LCBmYWxzZSk7XG4gICAgICAgICAgQXBwLmluZm9CYXJDb21wb25lbnQuc2hvd0VsZW1lbnQoZWxlbWVudC5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBBcHAubWFwQ29tcG9uZW50LnBhblRvTG9jYXRpb24oZWxlbWVudC5wb3NpdGlvbiwgMTQsIGZhbHNlKTsgICAgICAgICAgICBcbiAgICAgICAgQXBwLmluZm9CYXJDb21wb25lbnQuc2hvd0VsZW1lbnQoZWxlbWVudC5pZCk7XG4gICAgICB9ICAgICAgICAgICAgXG5cbiAgICAgIEFwcC5zZXRNb2RlKEFwcE1vZGVzLk1hcCwgZmFsc2UsIGZhbHNlKTtcbiAgICB9IFxuICAgIGVsc2UgLy8gQXBwTW9kZVxuICAgIHtcbiAgICAgIEFwcC5pbmZvQmFyQ29tcG9uZW50LnNob3dFbGVtZW50KGVsZW1lbnQuaWQpO1xuICAgIH1cbiAgfSAgXG5cbiAgcHJpdmF0ZSBzZXRTaG93RWxlbWVudEFsb25lU3RhdGUoZWxlbWVudCwgb3B0aW9ucylcbiAge1xuICAgIEFwcC5pbmZvQmFyQ29tcG9uZW50LnNob3coKTtcblxuICAgIGlmIChlbGVtZW50KVxuICAgIHtcbiAgICAgIEFwcC5ERUFNb2R1bGUuYmVnaW4oZWxlbWVudC5pZCwgdHJ1ZSk7ICAgICAgICAgIFxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgQXBwLmFqYXhNb2R1bGUuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5pZCxcbiAgICAgICAgKGVsZW1lbnRKc29uKSA9PiB7XG4gICAgICAgICAgQXBwLmVsZW1lbnRzSnNvbk1vZHVsZS5jb252ZXJ0SnNvbkVsZW1lbnRzKFtlbGVtZW50SnNvbl0sIHRydWUsIHRydWUpO1xuICAgICAgICAgIEFwcC5ERUFNb2R1bGUuYmVnaW4oZWxlbWVudEpzb24uaWQsIHRydWUpO1xuICAgICAgICAgIEFwcC5kb2N1bWVudFRpdGxlTW9kdWxlLnVwZGF0ZURvY3VtZW50VGl0bGUob3B0aW9ucyk7XG4gICAgICAgICAgQXBwLmhpc3RvcnlNb2R1bGUudXBkYXRlQ3VyclN0YXRlKG9wdGlvbnMpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IFxuICAgICAgICB7IFxuICAgICAgICAgIGxldCBoaXN0b3J5c3RhdGUgPSBBcHAuaGlzdG9yeVN0YXRlTWFuYWdlci5sYXN0SGlzdG9yeVN0YXRlO1xuICAgICAgICAgIEFwcC5jb21wb25lbnQudG9hc3RNZXNzYWdlKFwiRXJyZXVyIHBlbmRhbnQgbGUgY2hhcmdlbWVudCBkZSBjZXQgw6lsZW1lbnRcIik7XG4gICAgICAgICAgXG4gICAgICAgICAgQXBwLnNldFN0YXRlKEFwcFN0YXRlcy5Ob3JtYWwpO1xuICAgICAgICAgIGlmIChoaXN0b3J5c3RhdGUudmlld3BvcnQpIEFwcC5tYXBDb21wb25lbnQuc2V0Vmlld1BvcnQoaGlzdG9yeXN0YXRlLnZpZXdwb3J0KTtcbiAgICAgICAgICBlbHNlIEFwcC5tYXBDb21wb25lbnQuZml0RGVmYXVsdEJvdW5kcygpO1xuICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IHsgQXBwLmluZm9CYXJDb21wb25lbnQuaGlkZSgpOyB9LCAyMDApO1xuICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IHsgQXBwLmluZm9CYXJDb21wb25lbnQuaGlkZSgpOyB9LCA1MDApO1xuICAgICAgICB9XG4gICAgICApOyAgICAgICAgICAgIFxuICAgIH0gICAgICBcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2hvd0RpcmVjdGlvbnNTdGF0ZShlbGVtZW50IDogRWxlbWVudCwgb3B0aW9ucylcbiAge1xuICAgIGxldCBvcmlnaW4gPSBBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb24oKTsgXG4gICAgLy8gaWYgbm8gZWxlbWVudCwgd2UgZ2V0IGl0IGZyb20gYWpheCBcbiAgICBpZiAoIWVsZW1lbnQpXG4gICAge1xuICAgICAgaWYgKCFvcHRpb25zLmlkKSByZXR1cm47IFxuICAgICAgQXBwLmFqYXhNb2R1bGUuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5pZCwgKGVsZW1lbnRKc29uKSA9PiBcbiAgICAgIHsgXG4gICAgICAgIEFwcC5lbGVtZW50c0pzb25Nb2R1bGUuY29udmVydEpzb25FbGVtZW50cyhbZWxlbWVudEpzb25dLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZWxlbWVudCA9IEFwcC5lbGVtZW50QnlJZChlbGVtZW50SnNvbi5pZCk7XG4gICAgICAgIEFwcC5kb2N1bWVudFRpdGxlTW9kdWxlLnVwZGF0ZURvY3VtZW50VGl0bGUob3B0aW9ucyk7ICBcbiAgICAgICAgdGhpcy5jaGVja0lmUmVhZHlUb1N0YXJ0RGlyZWN0aW9ucyhlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHsgLypUT0RPKi8gYWxlcnQoXCJObyBlbGVtZW50IHdpdGggQXBwIGlkXCIpOyB9XG4gICAgICApOyAgICAgICAgICAgICAgIFxuICAgIH1cblxuICAgIHRoaXMuY2hlY2tJZlJlYWR5VG9TdGFydERpcmVjdGlvbnMoZWxlbWVudCkgIFxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmUmVhZHlUb1N0YXJ0RGlyZWN0aW9ucyhlbGVtZW50KVxuICB7XG4gICAgbGV0IG9yaWdpbiA9IEFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbigpO1xuICAgICAgXG4gICAgaWYgKCFlbGVtZW50IHx8ICFvcmlnaW4pIHJldHVybjtcbiAgICBcbiAgICBpZiAoQXBwLm1vZGUgPT0gQXBwTW9kZXMuTGlzdClcbiAgICB7XG4gICAgICBpZiAoIUFwcC5tYXBDb21wb25lbnQuaXNJbml0aWFsaXplZClcbiAgICAgIHtcbiAgICAgICAgQXBwLm1hcENvbXBvbmVudC5vbk1hcFJlYWR5LmRvKCgpID0+IHsgdGhpcy5iZWdpbkRpcmVjdGlvbnNDYWxjdWxhdGlvbihvcmlnaW4sIGVsZW1lbnQpOyB9KTtcbiAgICAgIH0gICAgICAgICAgIFxuXG4gICAgICBBcHAuc2V0TW9kZShBcHBNb2Rlcy5NYXAsIGZhbHNlLCBmYWxzZSk7XG4gICAgfSBcbiAgICAgIFxuICAgIHRoaXMuYmVnaW5EaXJlY3Rpb25zQ2FsY3VsYXRpb24ob3JpZ2luLCBlbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYmVnaW5EaXJlY3Rpb25zQ2FsY3VsYXRpb24gPSBmdW5jdGlvbiAob3JpZ2luIDogTC5MYXRMbmcsIGVsZW1lbnQgOiBFbGVtZW50KVxuICB7XG4gICAgaWYgKCFBcHAubWFwQ29tcG9uZW50LmlzSW5pdGlhbGl6ZWQpIHJldHVybjtcblxuICAgIEFwcC5ERUFNb2R1bGUuYmVnaW4oZWxlbWVudC5pZCwgZmFsc2UpO1xuICAgIC8vIHdhaXQgZm9yIHRoZSBpbmZvIGJhciB0byBvcGVuLCBzbyB0aGUgbWFwIGlzIHJlc2l6ZWQgYXQgdGhpcyBmaW5hbCB2aWV3cG9ydFxuICAgIC8vIFRoZW4gd2UgY2FuIGNhbGN1bGF0ZSByb3V0ZSBhbmQgZml0Ym91bmRzIHJlZ2FyZGluZyByb3V0aW5nIHJlc3VsdFxuICAgIHNldFRpbWVvdXQoICgpID0+IHsgQXBwLmRpcmVjdGlvbnNDb21wb25lbnQuY2FsY3VsYXRlUm91dGUob3JpZ2luLCBlbGVtZW50KTsgfSwgNDAwKTsgICAgIFxuICB9O1xufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cblxuaW1wb3J0IHsgRXZlbnQgfSBmcm9tIFwiLi4vY2xhc3Nlcy9ldmVudC5jbGFzc1wiO1xuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMgfSBmcm9tIFwiLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi9jbGFzc2VzL2NsYXNzZXNcIjtcblxuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uL2dvZ29jYXJ0b1wiO1xuZGVjbGFyZSB2YXIgJCA6IGFueSwgTCA6IGFueTtcbmRlY2xhcmUgbGV0IFJvdXRpbmc7XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0XG57XG5cdGNvbnN0cnVjdG9yKHB1YmxpYyByb3V0ZSA6IHN0cmluZywgcHVibGljIGRhdGEgOiBhbnkpIHt9O1xufVxuXG5leHBvcnQgY2xhc3MgQWpheE1vZHVsZVxue1xuXHRvbk5ld0VsZW1lbnRzID0gbmV3IEV2ZW50PGFueVtdPigpO1xuXG5cdGlzUmV0cmlldmluZ0VsZW1lbnRzIDogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdGN1cnJFbGVtZW50SWRSZXRyaWV2aW5nIDogbnVtYmVyO1xuXHRjdXJyQm91bmRzUmV0cmlldmluZyA6IEwuTGF0TG5nQm91bmRzW107XG5cblx0cmVxdWVzdFdhaXRpbmdUb0JlRXhlY3V0ZWQgOiBib29sZWFuID0gZmFsc2U7XG5cdHdhaXRpbmdSZXF1ZXN0RnVsbFJlcHJlc2VudGF0aW9uIDogYm9vbGVhbiA9IG51bGw7XG5cblx0Y3VyclJlcXVlc3QgOiBSZXF1ZXN0ID0gbnVsbDtcblxuXHRsb2FkZXJUaW1lciA9IG51bGw7XG5cblx0YWxsRWxlbWVudHNSZWNlaXZlZCA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yKCkgeyB9ICBcblxuXHRzZW5kUmVxdWVzdChyb3V0ZSA6IHN0cmluZywgbWV0aG9kIDogc3RyaW5nLCBkYXRhIDogYW55LCBjYWxsYmFja1N1Y2Nlc3M/LCBjYWxsYmFja0ZhaWx1cmU/KVxuXHR7XG5cdFx0Ly9jb25zb2xlLmxvZyhcIlNlbmRBamF4UmVxdWVzdCB0byBcIiArIHJvdXRlLCBkYXRhKTtcblx0XHQkLmFqYXgoe1xuXHRcdFx0dXJsOiByb3V0ZSxcblx0XHRcdG1ldGhvZDogbWV0aG9kLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IHJlc3BvbnNlID0+IHsgaWYgKHJlc3BvbnNlICYmIGNhbGxiYWNrU3VjY2VzcykgY2FsbGJhY2tTdWNjZXNzKHJlc3BvbnNlKTsgfSxcblx0XHRcdGVycm9yOiByZXNwb25zZSA9PiB7IGlmIChjYWxsYmFja0ZhaWx1cmUpIGNhbGxiYWNrRmFpbHVyZShyZXNwb25zZS5kYXRhKTsgfVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkLCBjYWxsYmFja1N1Y2Nlc3M/LCBjYWxsYmFja0ZhaWx1cmU/KVxuXHR7XG5cdFx0aWYgKGVsZW1lbnRJZCA9PSB0aGlzLmN1cnJFbGVtZW50SWRSZXRyaWV2aW5nKSByZXR1cm47XHRcdFxuXHRcdHRoaXMuY3VyckVsZW1lbnRJZFJldHJpZXZpbmcgPSBlbGVtZW50SWQ7XG5cdFx0XG5cdFx0JC5hamF4KHtcblx0XHRcdHVybDogdGhpcy5nZXRTaW5nbGVFbGVtZW50QXBpVXJsKGVsZW1lbnRJZCksXG5cdFx0XHRtZXRob2Q6IFwiZ2V0XCIsXG5cdFx0XHRkYXRhOiB7IH0sXG5cdFx0XHRzdWNjZXNzOiByZXNwb25zZSA9PiBcblx0XHRcdHtcdCAgICAgICAgXG5cdFx0XHRcdGlmIChyZXNwb25zZSlcblx0XHRcdFx0e1x0XHRcdFx0XHRcblx0XHRcdFx0XHRsZXQgZWxlbWVudEpzb247XHRcblx0XHRcdFx0XHRpZiAocmVzcG9uc2UuZGF0YSkgZWxlbWVudEpzb24gPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlLmRhdGEpID8gcmVzcG9uc2UuZGF0YVswXSA6IHJlc3BvbnNlLmRhdGE7XHRcdFx0XG5cdFx0XHRcdFx0ZWxzZSBlbGVtZW50SnNvbiA9IHJlc3BvbnNlO1xuXG5cdFx0XHRcdFx0aWYgKGNhbGxiYWNrU3VjY2VzcykgY2FsbGJhY2tTdWNjZXNzKGVsZW1lbnRKc29uKTsgXHRcdFx0XHRcdFxuXHRcdFx0XHR9XHRcblx0XHRcdFx0ZWxzZSBpZiAoY2FsbGJhY2tGYWlsdXJlKSBjYWxsYmFja0ZhaWx1cmUocmVzcG9uc2UpOyBcblx0XHRcdFx0XG5cdFx0XHRcdHRoaXMuY3VyckVsZW1lbnRJZFJldHJpZXZpbmcgPSBudWxsO1x0XHRcdFx0ICAgICAgIFxuXHRcdFx0fSxcblx0XHRcdGVycm9yOiByZXNwb25zZSA9PiB7IGlmIChjYWxsYmFja0ZhaWx1cmUpIGNhbGxiYWNrRmFpbHVyZShyZXNwb25zZSk7IHRoaXMuY3VyckVsZW1lbnRJZFJldHJpZXZpbmcgPSBudWxsOyB9XG5cdFx0fSk7XG5cdH07XG5cblx0Z2V0RWxlbWVudHNJbkJvdW5kcygkYm91bmRzIDogTC5MYXRMbmdCb3VuZHNbXSwgZ2V0RnVsbFJlcHJlc2VudGF0aW9uIDogYm9vbGVhbiA9IGZhbHNlLCBleHBlY3RlZEZpbGxlZEJvdW5kcyA6IEwuTGF0TG5nQm91bmRzKVxuXHR7XG5cdFx0aWYgKHRoaXMuY3VyckJvdW5kc1JldHJpZXZpbmcgJiYgJGJvdW5kc1swXS5lcXVhbHModGhpcy5jdXJyQm91bmRzUmV0cmlldmluZ1swXSkpIHJldHVybjtcdFx0XG5cdFx0dGhpcy5jdXJyQm91bmRzUmV0cmlldmluZyA9ICRib3VuZHM7XG5cblx0XHQvLyBpZiBpbnZhbGlkIGxvY2F0aW9uIHdlIGFib3J0XG5cdFx0aWYgKCEkYm91bmRzIHx8ICRib3VuZHMubGVuZ3RoID09IDAgfHwgISRib3VuZHNbMF0pIHsgcmV0dXJuOyB9XG5cblx0XHRsZXQgYm91bmRzUmVzdWx0ID0gdGhpcy5jb252ZXJ0Qm91bmRzSW50b1BhcmFtcygkYm91bmRzKTtcblxuXHRcdGxldCBibmRzID0gYm91bmRzUmVzdWx0LmJvdW5kc0pzb247XG5cdFx0bGV0IGRhdGFSZXF1ZXN0IDogYW55ID0geyBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJvdW5kcyA6IGJvdW5kc1Jlc3VsdC5ib3VuZHNTdHJpbmcsIFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ym91bmRzSnNvbiA6IEpTT04uc3RyaW5naWZ5KGJvdW5kc1Jlc3VsdC5ib3VuZHNKc29uKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhdGVnb3JpZXMgOiBBcHAuY3Vyck1haW5JZCAhPSBcImFsbFwiID8gW0FwcC5jdXJyTWFpbklkXSA6IG51bGwsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmdWxsUmVwcmVzZW50YXRpb24gOiBnZXRGdWxsUmVwcmVzZW50YXRpb24sIFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b250b2xvZ3kgOiBnZXRGdWxsUmVwcmVzZW50YXRpb24gPyAnZ29nb2Z1bGwnIDogJ2dvZ29jb21wYWN0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0YW1wc0lkcyA6IEFwcC5yZXF1ZXN0LnN0YW1wc0lkc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XHRcdFxuXHRcdGxldCByb3V0ZTtcblx0XHRpZiAoZ2V0RnVsbFJlcHJlc2VudGF0aW9uKSByb3V0ZSA9IEFwcC5jb25maWcuZGF0YS5lbGVtZW50cztcblx0XHRlbHNlIHJvdXRlID0gQXBwLmNvbmZpZy5kYXRhLmVsZW1lbnRzQ29tcGFjdEFwaVVybCB8fCBBcHAuY29uZmlnLmRhdGEuZWxlbWVudHM7XG5cdFx0XG5cdFx0dGhpcy5zZW5kQWpheEVsZW1lbnRSZXF1ZXN0KG5ldyBSZXF1ZXN0KHJvdXRlLCBkYXRhUmVxdWVzdCksIGV4cGVjdGVkRmlsbGVkQm91bmRzKTtcblx0fVx0XG5cblx0cHJpdmF0ZSBjb252ZXJ0Qm91bmRzSW50b1BhcmFtcygkYm91bmRzIDogTC5MYXRMbmdCb3VuZHNbXSkgXG5cdHtcblx0XHRsZXQgc3RyaW5naWZpZWRCb3VuZHMgPSBcIlwiO1xuXHRcdGxldCBkaWdpdHMgPSA1O1xuXHRcdGxldCBib3VuZHNMZXNzRGlnaXRzID0gW107XG5cdFx0Zm9yIChsZXQgYm91bmQgb2YgJGJvdW5kcylcblx0XHR7XG5cdFx0XHRsZXQgc291dGhXZXN0ID0gTC5sYXRMbmcoTC5VdGlsLmZvcm1hdE51bShib3VuZC5nZXRTb3V0aFdlc3QoKS5sYXQsIGRpZ2l0cyksIEwuVXRpbC5mb3JtYXROdW0oYm91bmQuZ2V0U291dGhXZXN0KCkubG5nLCBkaWdpdHMpKVxuXHRcdFx0bGV0IG5vcnRFYXN0ID0gTC5sYXRMbmcoTC5VdGlsLmZvcm1hdE51bShib3VuZC5nZXROb3J0aEVhc3QoKS5sYXQsIGRpZ2l0cyksIEwuVXRpbC5mb3JtYXROdW0oYm91bmQuZ2V0Tm9ydGhFYXN0KCkubG5nLCBkaWdpdHMpKVxuXHRcdFx0Ym91bmQgPSBMLmxhdExuZ0JvdW5kcyhzb3V0aFdlc3QsIG5vcnRFYXN0KTtcblx0XHRcdGJvdW5kc0xlc3NEaWdpdHMucHVzaChib3VuZCk7XG5cdFx0XHRzdHJpbmdpZmllZEJvdW5kcyArPSBib3VuZC50b0JCb3hTdHJpbmcoKSArIFwiO1wiO1xuXHRcdH1cblxuXHRcdC8vIHNvbWUgQVBJIGVuZHBvaW50IG5lZWRzIGEgZml4ZWQgbnVtYmVyIG9mIGJvdW5kcyBlcXVhbHMgdG8gNFxuXHRcdGlmICgkYm91bmRzLmxlbmd0aCA8IDQpXG5cdFx0e1xuXHRcdFx0bGV0IGVtcHR5Qm91bmQgPSBMLmxhdExuZ0JvdW5kcyhMLmxhdExuZygwLDApLCBMLmxhdExuZygwLDApKTtcblx0XHRcdGZvciAodmFyIGkgPSAkYm91bmRzLmxlbmd0aDsgaSA8IDQ7IGkrKykgYm91bmRzTGVzc0RpZ2l0cy5wdXNoKGVtcHR5Qm91bmQpO1x0XHRcdFxuXHRcdH1cblxuXHRcdHJldHVybiB7Ym91bmRzU3RyaW5nOiBzdHJpbmdpZmllZEJvdW5kcywgYm91bmRzSnNvbjogYm91bmRzTGVzc0RpZ2l0c307XG5cdH1cblxuXHRwcml2YXRlIGdldFNpbmdsZUVsZW1lbnRBcGlVcmwoJGVsZW1lbnRJZCA6IGFueSkgOiBzdHJpbmdcblx0e1xuXHRcdGxldCByb3V0ZSA9IFwiXCI7XG5cdFx0aWYgKEFwcC5jb25maWcuZGF0YS5lbGVtZW50QnlJZFVybCkgXG5cdFx0e1xuXHRcdFx0cm91dGUgPSBBcHAuY29uZmlnLmRhdGEuZWxlbWVudEJ5SWRVcmw7XG5cdFx0XHRpZiAocm91dGUuaW5kZXhPZigne0lEfScpID4gMCkgcm91dGUgPSByb3V0ZS5yZXBsYWNlKCd7SUR9JywgJGVsZW1lbnRJZC50b1N0cmluZygpKTtcblx0XHRcdGVsc2UgXG5cdFx0XHR7XG5cdFx0XHRcdGlmIChyb3V0ZS5zbGljZSgtMSkgIT0gJy8nKSByb3V0ZSArPSAnLyc7XG5cdFx0XHRcdHJvdXRlICs9ICRlbGVtZW50SWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Ugcm91dGUgPSBBcHAuY29uZmlnLmRhdGEuZWxlbWVudHMgKyAnLycgKyAkZWxlbWVudElkO1xuXHRcdHJldHVybiByb3V0ZTtcblx0fVxuXG5cdHByaXZhdGUgc2VuZEFqYXhFbGVtZW50UmVxdWVzdCgkcmVxdWVzdCA6IFJlcXVlc3QsICRleHBlY3RlZEZpbGxlZEJvdW5kcyA9IG51bGwpXG5cdHtcblx0XHRpZiAodGhpcy5hbGxFbGVtZW50c1JlY2VpdmVkKSB7IC8qY29uc29sZS5sb2coXCJBbGwgZWxlbWVudHMgYWxyZWFkeSByZWNlaXZlZFwiKTsqLyByZXR1cm47IH1cblxuXHRcdC8vIGNvbnNvbGUubG9nKFwiQWpheCBzZW5kIGVsZW1lbnRzIHJlcXVlc3QgXCIsICRyZXF1ZXN0KTtcblxuXHRcdGlmICh0aGlzLmlzUmV0cmlldmluZ0VsZW1lbnRzKVxuXHRcdHtcdFx0XG5cdFx0XHQvL2NvbnNvbGUubG9nKFwiQWpheCBpc1JldHJpZXZpbmdcIik7XG5cdFx0XHR0aGlzLnJlcXVlc3RXYWl0aW5nVG9CZUV4ZWN1dGVkID0gdHJ1ZTtcblx0XHRcdHRoaXMud2FpdGluZ1JlcXVlc3RGdWxsUmVwcmVzZW50YXRpb24gPSAkcmVxdWVzdC5kYXRhLmZ1bGxSZXByZXNlbnRhdGlvbjtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmlzUmV0cmlldmluZ0VsZW1lbnRzID0gdHJ1ZTtcblx0XHR0aGlzLmN1cnJSZXF1ZXN0ID0gJHJlcXVlc3Q7XG5cdFx0Ly8gbGV0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHRcdFx0XG5cdFx0XG5cdFx0JC5hamF4KHtcblx0XHRcdHVybDogJHJlcXVlc3Qucm91dGUsXG5cdFx0XHRtZXRob2Q6IFwiZ2V0XCIsXG5cdFx0XHRkYXRhOiAkcmVxdWVzdC5kYXRhLFxuXHRcdFx0YmVmb3JlU2VuZDogKCkgPT5cblx0XHRcdHsgXHRcdFx0XHRcblx0XHRcdFx0dGhpcy5sb2FkZXJUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ICQoJyNkaXJlY3RvcnktbG9hZGluZycpLnNob3coKTsgfSwgMTUwMCk7IFxuXHRcdFx0fSxcblx0XHRcdHN1Y2Nlc3M6IHJlc3BvbnNlID0+XG5cdFx0XHR7XHRcblx0XHRcdFx0aWYgKHJlc3BvbnNlLmRhdGEgIT09IG51bGwpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQvLyBsZXQgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwicmVjZWl2ZSBcIiArIHJlc3BvbnNlLmRhdGEubGVuZ3RoICsgXCIgZWxlbWVudHMgaW4gXCIgKyAoZW5kLXN0YXJ0KSArIFwiIG1zLiBmdWxsUmVwcmVzZW50YXRpb25cIiwgcmVzcG9uc2UuZnVsbFJlcHJlc2VudGF0aW9uKTtcdFx0XHRcdFxuXG5cdFx0XHRcdFx0cmVzcG9uc2UuZnVsbFJlcHJlc2VudGF0aW9uID0gcmVzcG9uc2Uub250b2xvZ3kgPT0gXCJnb2dvY29tcGFjdFwiID8gZmFsc2UgOiB0cnVlO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmICgkZXhwZWN0ZWRGaWxsZWRCb3VuZHMpXG5cdFx0XHRcdFx0XHRBcHAuYm91bmRzTW9kdWxlLnVwZGF0ZUZpbGxlZEJvdW5kc1dpdGhCb3VuZHNSZWNlaXZlZCgkZXhwZWN0ZWRGaWxsZWRCb3VuZHMsICRyZXF1ZXN0LmRhdGEubWFpbk9wdGlvbklkLCAgJHJlcXVlc3QuZGF0YS5mdWxsUmVwcmVzZW50YXRpb24pO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlLmFsbEVsZW1lbnRzU2VuZHMgfHwgIUFwcC5jb25maWcuZGF0YS5yZXF1ZXN0QnlCb3VuZHMpIHRoaXMuYWxsRWxlbWVudHNSZWNlaXZlZCA9IHRydWU7XG5cblx0XHRcdFx0XHR0aGlzLm9uTmV3RWxlbWVudHMuZW1pdChyZXNwb25zZSk7XHRcdFx0XHRcblx0XHRcdFx0fVx0XHRcdCAgICAgXG5cdFx0XHR9LFxuXHRcdFx0Y29tcGxldGU6ICgpID0+XG5cdFx0XHR7XG5cdFx0XHQgIHRoaXMuaXNSZXRyaWV2aW5nRWxlbWVudHMgPSBmYWxzZTtcblx0XHRcdCAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGVyVGltZXIpO1xuXHRcdFx0ICBzZXRUaW1lb3V0KCAoKSA9PiAkKCcjZGlyZWN0b3J5LWxvYWRpbmcnKS5oaWRlKCksIDI1MCk7XG5cdFx0XHQgIGlmICh0aGlzLnJlcXVlc3RXYWl0aW5nVG9CZUV4ZWN1dGVkKVxuXHRcdFx0ICB7XG5cdFx0XHQgIFx0IC8vY29uc29sZS5sb2coXCJSRVFVRVNUIFdBSVRJTkcgVE8gQkUgRVhFQ1VURUQsIGZ1bGxSZXByZXNlbnRhdGlvblwiLCB0aGlzLndhaXRpbmdSZXF1ZXN0RnVsbFJlcHJlc2VudGF0aW9uKTtcblx0XHRcdCAgXHQgQXBwLmVsZW1lbnRzTWFuYWdlci5jaGVja0Zvck5ld0VsZW1lbnRzVG9SZXRyaWV2ZSh0aGlzLndhaXRpbmdSZXF1ZXN0RnVsbFJlcHJlc2VudGF0aW9uKTtcblx0XHRcdCAgXHQgdGhpcy5yZXF1ZXN0V2FpdGluZ1RvQmVFeGVjdXRlZCA9IGZhbHNlO1xuXHRcdFx0ICB9XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9O1xufSIsImltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzIH0gZnJvbSBcIi4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5pbXBvcnQgeyBHb0dvQ29uZmlnIH0gZnJvbSBcIi4uL2NsYXNzZXMvY29uZmlnL2dvZ28tY29uZmlnLmNsYXNzXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vZ29nb2NhcnRvXCI7XG5kZWNsYXJlIHZhciBMO1xuXG5leHBvcnQgY2xhc3MgQm91bmRzTW9kdWxlXG57XG5cdC8vIHdlIGV4dGVuZCB2aXNpYmxlIHZpZXhwb3J0IHRvIGxvYWQgZWxlbWVudHMgb24gdGhpcyBhcmVhLCBzbyB0aGUgdXNlciBzZWUgdGhlbSBkaXJlY3RseSB3aGVuIHBhbm5pbmcgb3Igem9vbSBvdXRcblx0ZXh0ZW5kZWRCb3VuZHMgOiBMLkxhdExuZ0JvdW5kcztcblxuXHQvLyB0aGUgYm91bmRzIHdoZXJlIGVsZW1lbnRzIGhhcyBhbHJlYWR5IGJlZW4gcmV0cmlldmVkXG5cdC8vIHdlIHNhdmUgb25lIGZpbGxlZEJvdW5kIHBlciBtYWluT3B0aW9uSWRcblx0Ly8gYW5kIG9uZSBmaWxsZWRCb3VuZCBwZXIgbGV2ZWwgb2YgZWxlbWVudCByZXByZXNlbnRhdGlvblxuXHRmdWxsUmVwcmVzZW50YXRpb25GaWxsZWRCb3VuZCA6IEwuTGF0TG5nQm91bmRzW10gPSBbXTtcblx0Y29tcGFjdFJlcHJlc2VudGF0aW9uRmlsbGVkQm91bmQgOiBMLkxhdExuZ0JvdW5kc1tdID0gW107XG5cblx0Ly8gaW5kaWNhdGUgaWYgd2UgYWxyZWFkeSByZXRyaWV2ZWQgYWxsIGVsZW1lbnRzIG9mIHRoZSBtYXggYm91bmRzXG5cdGZ1bGxSZXByZXNlbnRhdGlvblJldHJpZXZpbmdDb21wbGV0ZSA6IGJvb2xlYW5bXSA9IFtdO1xuXHRjb21wYWN0UmVwcmVzZW50YXRpb25SZXRyaWV2aW5nQ29tcGxldGUgOiBib29sZWFuW10gPSBbXTtcblxuXHQvLyB3ZSBkb24ndCBkb3dubG9hZCBlbGVtZW50cyBvdXRzaWRlIG9mIG1heEJvdW5kc1xuXHRtYXhCb3VuZHMgOiBMLkxhdExuZ0JvdW5kcztcblx0ZGVmYXVsdEJvdW5kcyA6IEwuTGF0TG5nQm91bmRzO1xuXHRkZWZhdWx0Q2VudGVyIDogTC5MYXRMbmc7XG5cblx0Y29uc3RydWN0b3IoY29uZmlnIDogR29Hb0NvbmZpZylcblx0e1xuXHRcdHRoaXMubWF4Qm91bmRzID0gY29uZmlnLm1hcC5tYXhCb3VuZHM7XG5cdFx0dGhpcy5kZWZhdWx0Qm91bmRzID0gY29uZmlnLm1hcC5kZWZhdWx0Qm91bmRzO1xuXHRcdHRoaXMuZGVmYXVsdENlbnRlciA9IGNvbmZpZy5tYXAuZGVmYXVsdENlbnRlcjtcblx0fVxuXG5cdGluaXRpYWxpemUoKVxuXHR7XG5cdFx0Zm9yKGxldCBtYWluT3B0aW9uSWQgb2YgQXBwLnRheG9ub215TW9kdWxlLmdldE1haW5PcHRpb25zSWRzV2l0aEFsbCgpKVxuXHRcdHtcblx0XHRcdHRoaXMuZnVsbFJlcHJlc2VudGF0aW9uRmlsbGVkQm91bmRbbWFpbk9wdGlvbklkXSA9IG51bGw7XG5cdFx0XHR0aGlzLmNvbXBhY3RSZXByZXNlbnRhdGlvbkZpbGxlZEJvdW5kW21haW5PcHRpb25JZF0gPSBudWxsO1xuXHRcdFx0dGhpcy5mdWxsUmVwcmVzZW50YXRpb25SZXRyaWV2aW5nQ29tcGxldGVbbWFpbk9wdGlvbklkXSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5jb21wYWN0UmVwcmVzZW50YXRpb25SZXRyaWV2aW5nQ29tcGxldGVbbWFpbk9wdGlvbklkXSA9IGZhbHNlO1xuXHRcdH1cblx0fVx0XG5cblx0Y3JlYXRlQm91bmRzRnJvbUxvY2F0aW9uKCRsb2NhdGlvbiA6IEwuTGF0TG5nLCAkcmFkaXVzID0gMTApXG5cdHtcblx0XHRsZXQgZGVncmVlID0gJHJhZGl1cyAvIDExMCAvIDI7XG5cdFx0dGhpcy5leHRlbmRlZEJvdW5kcyA9IEwubGF0TG5nQm91bmRzKEwubGF0TG5nKCRsb2NhdGlvbi5sYXQgLSBkZWdyZWUsICRsb2NhdGlvbi5sbmcgLSBkZWdyZWUpLCBMLmxhdExuZygkbG9jYXRpb24ubGF0ICsgZGVncmVlLCAkbG9jYXRpb24ubG5nICsgZGVncmVlKSApO1xuXHRcdC8vY29uc29sZS5sb2coXCJDUkVBVEUgQk9VTkRTIGZyb20gbG9hY3Rpb25cIiwgdGhpcy5leHRlbmRlZEJvdW5kcyk7XG5cdFx0Ly9pZiAodGhpcy5leHRlbmRlZEJvdW5kcykgTC5yZWN0YW5nbGUodGhpcy5leHRlbmRlZEJvdW5kcywge2NvbG9yOiBcImJsdWVcIiwgd2VpZ2h0OiAzfSkuYWRkVG8oQXBwLm1hcCgpKTsgXG5cdH1cblxuXHRleHRlbmRNYXBCb3VuZHMoJG9sZFpvb20sICRuZXdab29tLCAkbnVtYmVyTWFya2VyVmlzaWJsZSlcblx0e1x0XHRcblx0XHRsZXQgcmF0aW87XG5cdFx0aWYgKCRuZXdab29tID09ICRvbGRab29tKVxuXHRcdHtcblx0XHRcdHJhdGlvID0gMC41L01hdGgucG93KCgkbnVtYmVyTWFya2VyVmlzaWJsZS8xMDApLDIpO1xuXHRcdFx0cmF0aW8gPSBNYXRoLm1pbigwLjUsIHJhdGlvKTtcblx0XHRcdHJhdGlvID0gTWF0aC5yb3VuZChyYXRpbyoxMCkvMTA7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHRyYXRpbyA9IDA7XG5cdFx0fVx0XG5cdFx0QXBwLmJvdW5kc01vZHVsZS5leHRlbmRCb3VuZHMocmF0aW8sIEFwcC5tYXAoKS5nZXRCb3VuZHMoKSk7XG5cdH1cblxuXHRleHRlbmRCb3VuZHMoJHJhdGlvIDogbnVtYmVyLCAkYm91bmRzIDogTC5MYXRMbmdCb3VuZHMgPSB0aGlzLmV4dGVuZGVkQm91bmRzKVxuXHR7XHRcdFxuXHRcdGlmICh0aGlzLmN1cnJSZXRyaWV2aW5nQ29tcGxldGUodHJ1ZSkpIHtcblx0XHRcdHRoaXMuZXh0ZW5kZWRCb3VuZHMgPSB0aGlzLm1heEJvdW5kcztcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCEkYm91bmRzKSB7IGNvbnNvbGUubG9nKFwiYm91bmRzIHVuY29ycmVjdFwiLCAkYm91bmRzKTsgcmV0dXJuO31cblx0XHR0aGlzLmV4dGVuZGVkQm91bmRzID0gJGJvdW5kcy5wYWQoJHJhdGlvKTtcblx0fVxuXG5cdHVwZGF0ZUZpbGxlZEJvdW5kc0FjY29yZGluZ1RvTmV3TWFpbk9wdGlvbklkKClcblx0e1xuXHRcdGlmIChBcHAuY3Vyck1haW5JZCA9PSAnYWxsJylcblx0XHR7XG5cdFx0XHQvLyBub3RoaW5nIHRvIGRvXG5cdFx0fVxuXHRcdGVsc2UgXG5cdFx0e1xuXHRcdFx0Ly8gaWYgZmlsbGVib3VuZHMgZm9yIGNhdGVnb3J5ICdhbGwnIGNvbnRhaW5zIHRoZSBmaWxsZWRib3VuZCBvZiBvdGhlciBjYXRlZ29yeVxuXHRcdFx0Ly8gd2Ugc2V0IGZpbGxlYm91bmQgZnJvbSBvdGhlciBjYXRlZ29yeSB0byBmaWxsZWRCb3VuZCBcImFsbFwiXG5cdFx0XHR0aGlzLnRyeVRvRXh0ZW5kRmlsbGVkQm91bmRGcm9tQWxsQ2F0ZWdvcnkodGhpcy5mdWxsUmVwcmVzZW50YXRpb25GaWxsZWRCb3VuZCk7XG5cdFx0XHR0aGlzLnRyeVRvRXh0ZW5kRmlsbGVkQm91bmRGcm9tQWxsQ2F0ZWdvcnkodGhpcy5jb21wYWN0UmVwcmVzZW50YXRpb25GaWxsZWRCb3VuZCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB0cnlUb0V4dGVuZEZpbGxlZEJvdW5kRnJvbUFsbENhdGVnb3J5KCRmaWxsZWRCb3VuZClcblx0e1xuXHRcdGlmICgkZmlsbGVkQm91bmRbJ2FsbCddICYmXG5cdFx0XHRcdCAoISRmaWxsZWRCb3VuZFtBcHAuY3Vyck1haW5JZF0gfHwgJGZpbGxlZEJvdW5kWydhbGwnXS5jb250YWlucygkZmlsbGVkQm91bmRbQXBwLmN1cnJNYWluSWRdKSApKVxuXHRcdFx0e1xuXHRcdFx0XHQkZmlsbGVkQm91bmRbQXBwLmN1cnJNYWluSWRdID0gJGZpbGxlZEJvdW5kWydhbGwnXVxuXHRcdFx0fVxuXHR9XG5cblx0Ly8gV2FpdCBmcm9tIGFqYXggcmVzcG9uc2UgdG8gdXBkYXRlIG5ldyBmaWxsZWRCb3VuZHNcblx0dXBkYXRlRmlsbGVkQm91bmRzV2l0aEJvdW5kc1JlY2VpdmVkKGV4cGVjdGVkQm91bmQgOiBMLkxhdExuZ0JvdW5kcywgbWFpbk9wdGlvbklkIDogbnVtYmVyfHN0cmluZywgZ2V0RnVsbFJlcHJlc2VudGF0aW9uIDogYm9vbGVhbilcblx0e1xuXHRcdC8vY29uc29sZS5sb2coXCJ1cGRhdGVGaWxsZWRCb3VuZHNXaXRoQm91bmRzUmVjZWl2ZWRcIiwgbWFpbk9wdGlvbklkKTtcblx0XHRpZiAobWFpbk9wdGlvbklkID09PSB1bmRlZmluZWQgfHwgQXBwLmNvbmZpZy5tZW51LnNob3dPbmVQYW5lUGVyTWFpbk9wdGlvbikgbWFpbk9wdGlvbklkID0gXCJhbGxcIjtcblx0XHRpZihnZXRGdWxsUmVwcmVzZW50YXRpb24pIHRoaXMuZnVsbFJlcHJlc2VudGF0aW9uRmlsbGVkQm91bmRbbWFpbk9wdGlvbklkXSA9IGV4cGVjdGVkQm91bmQ7XG5cdFx0ZWxzZSB0aGlzLmNvbXBhY3RSZXByZXNlbnRhdGlvbkZpbGxlZEJvdW5kW21haW5PcHRpb25JZF0gPSBleHBlY3RlZEJvdW5kO1xuXG5cdFx0aWYgKHRoaXMubWF4Qm91bmRzICYmIGV4cGVjdGVkQm91bmQuY29udGFpbnModGhpcy5tYXhCb3VuZHMpKVxuXHRcdHtcblx0XHRcdGlmKGdldEZ1bGxSZXByZXNlbnRhdGlvbikgdGhpcy5mdWxsUmVwcmVzZW50YXRpb25SZXRyaWV2aW5nQ29tcGxldGVbbWFpbk9wdGlvbklkXSA9IHRydWU7XG5cdFx0XHRlbHNlIHRoaXMuY29tcGFjdFJlcHJlc2VudGF0aW9uUmV0cmlldmluZ0NvbXBsZXRlW21haW5PcHRpb25JZF0gPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgY3VyckZpbGxlZEJvdW5kKCRnZXRGdWxsUmVwcmVzZW50YXRpb24gOiBib29sZWFuKSA6IEwuTGF0TG5nQm91bmRzXG5cdHsgXG5cdFx0aWYgKCRnZXRGdWxsUmVwcmVzZW50YXRpb24pIFxuXHRcdFx0cmV0dXJuIHRoaXMuZnVsbFJlcHJlc2VudGF0aW9uRmlsbGVkQm91bmRbQXBwLmN1cnJNYWluSWRdO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiB0aGlzLmNvbXBhY3RSZXByZXNlbnRhdGlvbkZpbGxlZEJvdW5kW0FwcC5jdXJyTWFpbklkXTtcblx0fVxuXG5cdHByaXZhdGUgY3VyclJldHJpZXZpbmdDb21wbGV0ZSgkZ2V0RnVsbFJlcHJlc2VudGF0aW9uIDogYm9vbGVhbikgOiBib29sZWFuXG5cdHsgXG5cdFx0aWYgKCRnZXRGdWxsUmVwcmVzZW50YXRpb24pIFxuXHRcdFx0cmV0dXJuIHRoaXMuZnVsbFJlcHJlc2VudGF0aW9uUmV0cmlldmluZ0NvbXBsZXRlW0FwcC5jdXJyTWFpbklkXSB8fCB0aGlzLmZ1bGxSZXByZXNlbnRhdGlvblJldHJpZXZpbmdDb21wbGV0ZVsnYWxsJ107XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIHRoaXMuY29tcGFjdFJlcHJlc2VudGF0aW9uUmV0cmlldmluZ0NvbXBsZXRlW0FwcC5jdXJyTWFpbklkXSB8fCB0aGlzLmNvbXBhY3RSZXByZXNlbnRhdGlvblJldHJpZXZpbmdDb21wbGV0ZVsnYWxsJ107XG5cdH1cblxuXHRjYWxjdWxhdGVGcmVlQm91bmRzKCRnZXRGdWxsUmVwcmVzZW50YXRpb24gPSBmYWxzZSlcblx0e1xuXHRcdGxldCBmcmVlQm91bmRzID0gW107XG5cdFx0bGV0IGV4cGVjdGVkQm91bmRzO1xuXG5cdFx0Ly8gaWYgd2UgYWxyZWFkeSBjb21wbGV0ZSB0aGUgcmV0cmlldmluZyAoaS5lLiBhbGwgZWxlbWVudCBhcmUgYWxyZWFkeSByZWNlaXZlZClcblx0XHRpZiAodGhpcy5jdXJyUmV0cmlldmluZ0NvbXBsZXRlKCRnZXRGdWxsUmVwcmVzZW50YXRpb24pKSByZXR1cm4geyBzdGF0dXM6IFwiYWxsUmV0cmlldmVkXCIsIFwiZnJlZUJvdW5kc1wiIDogbnVsbCwgXCJleHBlY3RlZEZpbGxCb3VuZHNcIiA6IG51bGwgfTtcblxuXHRcdGxldCBjdXJyRmlsbGVkQm91bmQgPSB0aGlzLmN1cnJGaWxsZWRCb3VuZCgkZ2V0RnVsbFJlcHJlc2VudGF0aW9uKTtcblxuXHRcdC8vY29uc29sZS5sb2coXCJjYWxjdWxhdGVGcmVlYm91bmRzIGV4dGVuZGVkQm91bmRzID0gXCIsIHRoaXMuZXh0ZW5kZWRCb3VuZHMpO1xuXG5cdFx0Ly9pZiAoY3VyckZpbGxlZEJvdW5kKSBMLnJlY3RhbmdsZShjdXJyRmlsbGVkQm91bmQsIHtjb2xvcjogXCJyZWRcIiwgd2VpZ2h0OiAzfSkuYWRkVG8oQXBwLm1hcCgpKTsgXG5cdFx0Ly9pZiAodGhpcy5leHRlbmRlZEJvdW5kcykgTC5yZWN0YW5nbGUodGhpcy5leHRlbmRlZEJvdW5kcywge2NvbG9yOiBcImJsdWVcIiwgd2VpZ2h0OiAzfSkuYWRkVG8oQXBwLm1hcCgpKTsgXG5cblx0XHRsZXQgZnJlZUJvdW5kMSwgZnJlZUJvdW5kMiwgZnJlZUJvdW5kMywgZnJlZUJvdW5kNDtcblxuXHRcdGlmICghY3VyckZpbGxlZEJvdW5kIHx8ICFjdXJyRmlsbGVkQm91bmQuaW50ZXJzZWN0cyh0aGlzLmV4dGVuZGVkQm91bmRzKSlcblx0XHR7XG5cdFx0XHQvLyBmaXJzdCBpbml0aWFsaXphdGlvbiBvciBubyBpbnRlcnNlY3Rpb25cblx0XHRcdGZyZWVCb3VuZHMucHVzaCh0aGlzLmV4dGVuZGVkQm91bmRzKTtcblx0XHRcdGV4cGVjdGVkQm91bmRzID0gdGhpcy5leHRlbmRlZEJvdW5kcztcblx0XHR9XHRcdFxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHRpZiAoIWN1cnJGaWxsZWRCb3VuZC5jb250YWlucyh0aGlzLmV4dGVuZGVkQm91bmRzKSlcblx0XHRcdHtcblx0XHRcdFx0aWYgKHRoaXMuZXh0ZW5kZWRCb3VuZHMuY29udGFpbnMoY3VyckZpbGxlZEJvdW5kKSlcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIGV4dGVuZGVkIGNvbnRhaW5zIGZpbGxlZGJvdW5kc1x0XG5cdFx0XHRcdFx0ZnJlZUJvdW5kMSA9IEwubGF0TG5nQm91bmRzKCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldE5vcnRoV2VzdCgpLCBjdXJyRmlsbGVkQm91bmQuZ2V0Tm9ydGhFYXN0KCkgKTtcblx0XHRcdFx0XHRmcmVlQm91bmQyID0gTC5sYXRMbmdCb3VuZHMoIGZyZWVCb3VuZDEuZ2V0Tm9ydGhFYXN0KClcdFx0XHRcdCAsIHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0U291dGhFYXN0KCkgKTtcblx0XHRcdFx0XHRmcmVlQm91bmQzID0gTC5sYXRMbmdCb3VuZHMoIGN1cnJGaWxsZWRCb3VuZC5nZXRTb3V0aEVhc3QoKVx0ICwgdGhpcy5leHRlbmRlZEJvdW5kcy5nZXRTb3V0aFdlc3QoKSApO1xuXHRcdFx0XHRcdGZyZWVCb3VuZDQgPSBMLmxhdExuZ0JvdW5kcyggZnJlZUJvdW5kMS5nZXRTb3V0aFdlc3QoKVx0XHRcdFx0ICwgY3VyckZpbGxlZEJvdW5kLmdldFNvdXRoV2VzdCgpICk7XG5cblx0XHRcdFx0XHRleHBlY3RlZEJvdW5kcyA9IHRoaXMuZXh0ZW5kZWRCb3VuZHM7XG5cdFx0XHRcdFx0ZnJlZUJvdW5kcy5wdXNoKGZyZWVCb3VuZDEsZnJlZUJvdW5kMiwgZnJlZUJvdW5kMywgZnJlZUJvdW5kNCk7XHRcdFx0XHRcdFxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIGV4dGVuZGVkIGNyb3NzIG92ZXIgZmlsbGVkXG5cdFx0XHRcdFx0aWYgKHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0V2VzdCgpID4gY3VyckZpbGxlZEJvdW5kLmdldFdlc3QoKSAmJiB0aGlzLmV4dGVuZGVkQm91bmRzLmdldEVhc3QoKSA8IGN1cnJGaWxsZWRCb3VuZC5nZXRFYXN0KCkpXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0U291dGgoKSA8IGN1cnJGaWxsZWRCb3VuZC5nZXRTb3V0aCgpKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHQvLyBleHRlbmRlZCBjZW50ZXJlZCBzb3V0aCBmcm9tIGZpbGxlZEJvdW5kc1xuXHRcdFx0XHRcdFx0XHRmcmVlQm91bmQxID0gTC5sYXRMbmdCb3VuZHMoIHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0U291dGhXZXN0KCksIGN1cnJGaWxsZWRCb3VuZC5nZXRTb3V0aEVhc3QoKSApO1x0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdC8vIGV4dGVuZGVkIGNlbnRlcmVkIHNvdXRoIGZyb20gZmlsbGVkQm91bmRzXG5cdFx0XHRcdFx0XHRcdGZyZWVCb3VuZDEgPSBMLmxhdExuZ0JvdW5kcyggdGhpcy5leHRlbmRlZEJvdW5kcy5nZXROb3J0aFdlc3QoKSwgY3VyckZpbGxlZEJvdW5kLmdldE5vcnRoRWFzdCgpICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgaWYgKHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0V2VzdCgpIDwgY3VyckZpbGxlZEJvdW5kLmdldFdlc3QoKSlcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5leHRlbmRlZEJvdW5kcy5nZXRTb3V0aCgpID4gY3VyckZpbGxlZEJvdW5kLmdldFNvdXRoKCkgJiYgdGhpcy5leHRlbmRlZEJvdW5kcy5nZXROb3J0aCgpIDwgY3VyckZpbGxlZEJvdW5kLmdldE5vcnRoKCkpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdC8vIGV4dGVuZGVkIGNlbnRlcmVkIGVhc3QgZnJvbSBmaWxsZWRCb3VuZHNcblx0XHRcdFx0XHRcdFx0ZnJlZUJvdW5kMSA9IEwubGF0TG5nQm91bmRzKCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldE5vcnRoV2VzdCgpLCBjdXJyRmlsbGVkQm91bmQuZ2V0U291dGhXZXN0KCkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2UgaWYgKHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0U291dGgoKSA8IGN1cnJGaWxsZWRCb3VuZC5nZXRTb3V0aCgpKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHQvLyBleHRlbmRlZGJvdW5kcyBzb3V0aFdlc3QgZnJvbSBmaWxsZWRCb3VuZHNcblx0XHRcdFx0XHRcdFx0ZnJlZUJvdW5kMSA9IEwubGF0TG5nQm91bmRzKCBjdXJyRmlsbGVkQm91bmQuZ2V0U291dGhFYXN0KCksIHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0U291dGhXZXN0KCkgKTtcblx0XHRcdFx0XHRcdFx0ZnJlZUJvdW5kMiA9IEwubGF0TG5nQm91bmRzKCBjdXJyRmlsbGVkQm91bmQuZ2V0Tm9ydGhXZXN0KCksIGZyZWVCb3VuZDEuZ2V0Tm9ydGhXZXN0KCkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Ly8gZXh0ZW5kZWRib3VuZHMgbm9ydGhXZXN0IGZyb20gZmlsbGVkQm91bmRzXG5cdFx0XHRcdFx0XHRcdGZyZWVCb3VuZDEgPSBMLmxhdExuZ0JvdW5kcyggY3VyckZpbGxlZEJvdW5kLmdldE5vcnRoRWFzdCgpLCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldE5vcnRoV2VzdCgpICk7XG5cdFx0XHRcdFx0XHRcdGZyZWVCb3VuZDIgPSBMLmxhdExuZ0JvdW5kcyggY3VyckZpbGxlZEJvdW5kLmdldFNvdXRoV2VzdCgpLCBmcmVlQm91bmQxLmdldFNvdXRoV2VzdCgpICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5leHRlbmRlZEJvdW5kcy5nZXRTb3V0aCgpID4gY3VyckZpbGxlZEJvdW5kLmdldFNvdXRoKCkgJiYgdGhpcy5leHRlbmRlZEJvdW5kcy5nZXROb3J0aCgpIDwgY3VyckZpbGxlZEJvdW5kLmdldE5vcnRoKCkpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdC8vIGV4dGVuZGVkIGNlbnRlcmVkIHdlc3QgZnJvbSBmaWxsZWRCb3VuZHNcblx0XHRcdFx0XHRcdFx0ZnJlZUJvdW5kMSA9IEwubGF0TG5nQm91bmRzKCBjdXJyRmlsbGVkQm91bmQuZ2V0Tm9ydGhFYXN0KCksIHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0U291dGhFYXN0KCkgKTsgXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIGlmICh0aGlzLmV4dGVuZGVkQm91bmRzLmdldFNvdXRoKCkgPCBjdXJyRmlsbGVkQm91bmQuZ2V0U291dGgoKSlcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Ly8gZXh0ZW5kZWRib3VuZHMgc291dGhlYXN0IGZyb20gZmlsbGVkQm91bmRzXG5cdFx0XHRcdFx0XHRcdGZyZWVCb3VuZDEgPSBMLmxhdExuZ0JvdW5kcyggY3VyckZpbGxlZEJvdW5kLmdldFNvdXRoV2VzdCgpLCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldFNvdXRoRWFzdCgpICk7XG5cdFx0XHRcdFx0XHRcdGZyZWVCb3VuZDIgPSBMLmxhdExuZ0JvdW5kcyggY3VyckZpbGxlZEJvdW5kLmdldE5vcnRoRWFzdCgpLCBmcmVlQm91bmQxLmdldE5vcnRoRWFzdCgpICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR7XHRcblx0XHRcdFx0XHRcdFx0Ly8gZXh0ZW5kZWRib3VuZHMgbm9ydGhFYXN0IGZyb20gZmlsbGVkQm91bmRzXG5cdFx0XHRcdFx0XHRcdGZyZWVCb3VuZDEgPSBMLmxhdExuZ0JvdW5kcyggY3VyckZpbGxlZEJvdW5kLmdldE5vcnRoV2VzdCgpLCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldE5vcnRoRWFzdCgpICk7XG5cdFx0XHRcdFx0XHRcdGZyZWVCb3VuZDIgPSBMLmxhdExuZ0JvdW5kcyggY3VyckZpbGxlZEJvdW5kLmdldFNvdXRoRWFzdCgpLCBmcmVlQm91bmQxLmdldFNvdXRoRWFzdCgpICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVx0XHRcdFx0XHRcblxuXHRcdFx0XHRcdGZyZWVCb3VuZHMucHVzaChmcmVlQm91bmQxKTtcblx0XHRcdFx0XHRpZiAoZnJlZUJvdW5kMikgZnJlZUJvdW5kcy5wdXNoKGZyZWVCb3VuZDIpO1x0XHRcblxuXHRcdFx0XHRcdGV4cGVjdGVkQm91bmRzID0gTC5sYXRMbmdCb3VuZHMoIFxuXHRcdFx0XHRcdFx0TC5sYXRMbmcoXG5cdFx0XHRcdFx0XHRcdE1hdGgubWF4KGN1cnJGaWxsZWRCb3VuZC5nZXROb3J0aCgpLCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldE5vcnRoKCkpLFxuXHRcdFx0XHRcdFx0XHRNYXRoLm1heChjdXJyRmlsbGVkQm91bmQuZ2V0RWFzdCgpLCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldEVhc3QoKSlcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRMLmxhdExuZyhcblx0XHRcdFx0XHRcdFx0TWF0aC5taW4oY3VyckZpbGxlZEJvdW5kLmdldFNvdXRoKCksIHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0U291dGgoKSksXG5cdFx0XHRcdFx0XHRcdE1hdGgubWluKGN1cnJGaWxsZWRCb3VuZC5nZXRXZXN0KCksIHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0V2VzdCgpKSBcblx0XHRcdFx0XHRcdClcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHQpO1x0XHRcblx0XHRcdFx0fVx0XHRcdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0Ly8gZXh0ZW5kZWQgYm91bmRzIGluY2x1ZGVkIGluIGZpbGxlZGJvdW5kc1xuXHRcdFx0XHRyZXR1cm4geyBcInN0YXR1c1wiOiBcImluY2x1ZGVkXCIsIFwiZnJlZUJvdW5kc1wiIDogbnVsbCwgXCJleHBlY3RlZEZpbGxCb3VuZHNcIiA6IGN1cnJGaWxsZWRCb3VuZCB9O1xuXHRcdFx0fVxuXHRcdH1cdFx0XG5cblx0XHRyZXR1cm4geyBcImZyZWVCb3VuZHNcIiA6IGZyZWVCb3VuZHMsIFwiZXhwZWN0ZWRGaWxsQm91bmRzXCIgOiBleHBlY3RlZEJvdW5kcywgXCJzdGF0dXNcIjogXCJzdWNjZXNzXCJ9O1xuXHR9XG59IiwiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgQXBwRGF0YVR5cGUsIEFwcFN0YXRlcywgQXBwTW9kZXMgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSwgdW5zbHVnaWZ5IH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudFRpdGxlTW9kdWxlXG57XG4gIHVwZGF0ZURvY3VtZW50VGl0bGUob3B0aW9ucyA6IGFueSA9IHt9KVxuICB7XG4gICAgLy8gY29uc29sZS5sb2coXCJ1cGRhdGVEb2N1bWVudFRpdGxlXCIsIEFwcC5zdGF0ZU1hbmFnZXIuc3RhdGVFbGVtZW50SWQpO1xuXG4gICAgbGV0IHRpdGxlIDogc3RyaW5nO1xuICAgIGxldCBlbGVtZW50TmFtZSA6IHN0cmluZztcblxuICAgIGlmICggKG9wdGlvbnMgJiYgb3B0aW9ucy5pZCkgfHwgQXBwLnN0YXRlTWFuYWdlci5zdGF0ZUVsZW1lbnRJZCkgXG4gICAgeyAgICAgIFxuICAgICAgbGV0IGVsZW1lbnQgPSBBcHAuZWxlbWVudEJ5SWQoQXBwLnN0YXRlTWFuYWdlci5zdGF0ZUVsZW1lbnRJZCk7XG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVybjtcbiAgICAgIGVsZW1lbnROYW1lID0gY2FwaXRhbGl6ZShlbGVtZW50ID8gZWxlbWVudC5uYW1lIDogJycpO1xuICAgIH1cblxuICAgIGlmIChBcHAuZGF0YVR5cGUgPT0gQXBwRGF0YVR5cGUuU2VhcmNoUmVzdWx0cylcbiAgICB7XG4gICAgICB0aXRsZSA9ICdSZWNoZXJjaGUgOiAnICsgQXBwLnNlYXJjaEJhckNvbXBvbmVudC5nZXRDdXJyU2VhcmNoVGV4dCgpOyAgXG4gICAgfVxuICAgIGVsc2UgaWYgKEFwcC5tb2RlID09IEFwcE1vZGVzLkxpc3QpXG4gICAgeyAgICBcbiAgICAgIHRpdGxlID0gJ0xpc3RlIGRlcyAnICsgQXBwLmNvbmZpZy50ZXh0LmVsZW1lbnRQbHVyYWwgKyAnICcgKyB0aGlzLmdldExvY2F0aW9uQWRkcmVzc0ZvclRpdGxlKCk7ICAgIFxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgc3dpdGNoIChBcHAuc3RhdGUpXG4gICAgICB7XG4gICAgICAgIGNhc2UgQXBwU3RhdGVzLlNob3dFbGVtZW50OiAgICAgICAgXG4gICAgICAgICAgdGl0bGUgPSBjYXBpdGFsaXplKEFwcC5jb25maWcudGV4dC5lbGVtZW50KSArICcgLSAnICsgZWxlbWVudE5hbWU7XG4gICAgICAgICAgYnJlYWs7ICBcblxuICAgICAgICBjYXNlIEFwcFN0YXRlcy5TaG93RWxlbWVudEFsb25lOlxuICAgICAgICAgIHRpdGxlID0gY2FwaXRhbGl6ZShBcHAuY29uZmlnLnRleHQuZWxlbWVudCkgKyAnIC0gJyArIGVsZW1lbnROYW1lO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQXBwU3RhdGVzLlNob3dEaXJlY3Rpb25zOlxuICAgICAgICAgIHRpdGxlID0gJ0l0aW7DqXJhaXJlIC0gJyArIGVsZW1lbnROYW1lO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQXBwU3RhdGVzLk5vcm1hbDogICAgICBcbiAgICAgICAgICB0aXRsZSA9ICdDYXJ0ZSBkZXMgJyArIEFwcC5jb25maWcudGV4dC5lbGVtZW50UGx1cmFsICsgJyAnICsgdGhpcy5nZXRMb2NhdGlvbkFkZHJlc3NGb3JUaXRsZSgpOyAgICAgIFxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LnRpdGxlID0gdGl0bGU7ICBcbiAgfTtcblxuICBwcml2YXRlIGdldExvY2F0aW9uQWRkcmVzc0ZvclRpdGxlKClcbiAge1xuICAgIGlmIChBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb25BZGRyZXNzKCkpXG4gICAge1xuICAgICAgcmV0dXJuIFwiLSBcIiArIEFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbkFkZHJlc3MoKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiLSBGcmFuY2VcIjtcbiAgfVxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cblxuaW1wb3J0IHsgRXZlbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9ldmVudC5jbGFzc1wiO1xuaW1wb3J0IHsgc2x1Z2lmeSwgY2FwaXRhbGl6ZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMsIEFwcE1vZGVzLCBBcHBEYXRhVHlwZSB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50LCBIaXN0b3J5U3RhdGUsIFZpZXdQb3J0IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0ICogYXMgQ29va2llcyBmcm9tIFwiLi4vLi4vdXRpbHMvY29va2llc1wiO1xuXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5kZWNsYXJlIGxldCAkO1xuZGVjbGFyZSBsZXQgUm91dGluZztcblxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKVxue1x0XG4gICAvLyBHZXRzIGhpc3Rvcnkgc3RhdGUgZnJvbSBicm93c2VyXG4gICB3aW5kb3cub25wb3BzdGF0ZSA9IChldmVudCA6IFBvcFN0YXRlRXZlbnQpID0+XG4gICB7XG5cdCAgLy9jb25zb2xlLmxvZyhcIlxcblxcbk9ucG9wU3RhdGUgXCIsIGV2ZW50LnN0YXRlLmZpbHRlcnMpO1xuXHQgIGxldCBoaXN0b3J5c3RhdGUgOiBIaXN0b3J5U3RhdGUgPSBldmVudC5zdGF0ZTtcblx0ICBpZiAoIWhpc3RvcnlzdGF0ZSkgcmV0dXJuO1xuXHQgIC8vIHRyYW5zZm9ybSBqc29uVmlld3BvcnQgaW50byBWaWV3UG9ydCBvYmplY3QgKGlmIHdlIGRvbid0IGRvIHNvLFxuXHQgIC8vIHRoZSBWaWV3UG9ydCBtZXRob2RzIHdpbGwgbm90IGJlIGFjY2Vzc2libGUpXG5cdCAgaGlzdG9yeXN0YXRlLnZpZXdwb3J0ID0gJC5leHRlbmQobmV3IFZpZXdQb3J0KCksIGV2ZW50LnN0YXRlLnZpZXdwb3J0KTtcblx0ICBBcHAuaGlzdG9yeVN0YXRlTWFuYWdlci5sb2FkKGV2ZW50LnN0YXRlLCB0cnVlKTtcblx0fTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgSGlzdG9yeU1vZHVsZVxue1xuXHRjb25zdHJ1Y3RvcigpIHsgfSAgXG5cblx0dXBkYXRlQ3VyclN0YXRlKG9wdGlvbnM/KVxuXHR7XG5cdFx0aWYgKCFoaXN0b3J5LnN0YXRlKSB0aGlzLnB1c2hOZXdTdGF0ZSgpO1xuXHRcdGVsc2UgdGhpcy51cGRhdGVIaXN0b3J5KGZhbHNlLCBvcHRpb25zKTtcblx0fTtcblxuXHRwdXNoTmV3U3RhdGUob3B0aW9ucz8pXG5cdHtcblx0XHRpZiAoaGlzdG9yeS5zdGF0ZSA9PT0gbnVsbCkgdGhpcy51cGRhdGVIaXN0b3J5KGZhbHNlLCBvcHRpb25zKTtcblx0XHRlbHNlIHRoaXMudXBkYXRlSGlzdG9yeSh0cnVlLCBvcHRpb25zKTtcdFx0XG5cdH07XG5cblx0cHJpdmF0ZSB1cGRhdGVIaXN0b3J5KCRwdXNoU3RhdGUgOiBib29sZWFuLCAkb3B0aW9ucz8gOiBhbnkpXG5cdHtcblx0XHRpZiAoIUFwcC5jb25maWcuZ2VuZXJhbC5hY3RpdmF0ZUhpc3RvcnlTdGF0ZUFuZFJvdXRpbmcpIHJldHVybjtcblx0XHRpZiAoQXBwLm1vZGUgPT0gdW5kZWZpbmVkKSByZXR1cm47XG5cblx0XHQkb3B0aW9ucyA9ICRvcHRpb25zIHx8IHt9O1xuXHRcdGxldCBoaXN0b3J5U3RhdGUgPSBuZXcgSGlzdG9yeVN0YXRlO1xuXHRcdGhpc3RvcnlTdGF0ZS5tb2RlID0gQXBwLm1vZGU7XG5cdFx0aGlzdG9yeVN0YXRlLnN0YXRlID0gQXBwLnN0YXRlO1xuXHRcdGhpc3RvcnlTdGF0ZS5kYXRhVHlwZSA9IEFwcC5kYXRhVHlwZTtcblx0XHRoaXN0b3J5U3RhdGUuYWRkcmVzcyA9IEFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvblNsdWcoKTtcblx0XHRoaXN0b3J5U3RhdGUudmlld3BvcnQgPSBBcHAubWFwQ29tcG9uZW50LnZpZXdwb3J0O1xuXHRcdGhpc3RvcnlTdGF0ZS5pZCA9IEFwcC5zdGF0ZU1hbmFnZXIuc3RhdGVFbGVtZW50SWQgfHwgJG9wdGlvbnMuaWQ7XG5cdFx0aGlzdG9yeVN0YXRlLmZpbHRlcnMgPSBBcHAuZmlsdGVyUm91dGluZ01vZHVsZS5nZXRGaWx0ZXJzVG9TdHJpbmcoKTtcblx0XHRoaXN0b3J5U3RhdGUudGV4dCA9IEFwcC5zZWFyY2hCYXJDb21wb25lbnQuZ2V0Q3VyclNlYXJjaFRleHQoKTtcblxuXHRcdC8vIGlmICgkcHVzaFN0YXRlKSBjb25zb2xlLmxvZyhcIk5FVyBTYXRlXCIsIEFwcFN0YXRlc1toaXN0b3J5U3RhdGUuc3RhdGVdKTtcblx0XHQvLyBlbHNlIGNvbnNvbGUubG9nKFwiVVBEQVRFIFN0YXRlXCIsIEFwcFN0YXRlc1toaXN0b3J5U3RhdGUuc3RhdGVdKTtcblxuXHRcdGxldCByb3V0ZSA9IHRoaXMuZ2VuZXJhdGVSb3V0ZShoaXN0b3J5U3RhdGUpO1xuXG5cdFx0aWYgKCFyb3V0ZSkgcmV0dXJuO1xuXG5cdFx0aWYgKCRwdXNoU3RhdGUpIGhpc3RvcnkucHVzaFN0YXRlKGhpc3RvcnlTdGF0ZSwgJycsIHJvdXRlKTtcblx0XHRlbHNlIGhpc3RvcnkucmVwbGFjZVN0YXRlKGhpc3RvcnlTdGF0ZSwgJycsIHJvdXRlKTtcblxuXHRcdGlmIChBcHAuY29uZmlnLm1hcC5zYXZlVmlld3BvcnRJbkNvb2tpZXMpXG5cdFx0e1xuXHRcdFx0Q29va2llcy5jcmVhdGVDb29raWUoJ3ZpZXdwb3J0JyxoaXN0b3J5U3RhdGUudmlld3BvcnQsIDAuMDQpOyAvLyByZW1lbWJlciB0aGlzIG9ubHkgZm9yIDFob3VyXG5cdFx0XHRDb29raWVzLmNyZWF0ZUNvb2tpZSgnYWRkcmVzcycsaGlzdG9yeVN0YXRlLmFkZHJlc3MsIDAuMDQpOyAvLyByZW1lbWJlciB0aGlzIG9ubHkgZm9yIDFob3VyXG5cdFx0fVxuXHR9O1xuXG5cdHByaXZhdGUgZ2VuZXJhdGVSb3V0ZShoaXN0b3J5U3RhdGUgOiBIaXN0b3J5U3RhdGUpXG5cdHtcblx0XHRsZXQgcm91dGU7XG5cdFx0bGV0IG1vZGUgPSBBcHAubW9kZSA9PSBBcHBNb2Rlcy5NYXAgPyAnY2FydGUnIDogJ2xpc3RlJztcblx0XHRsZXQgYWRkcmVzcyA9IGhpc3RvcnlTdGF0ZS5hZGRyZXNzO1xuXHRcdGxldCB2aWV3cG9ydCA9IGhpc3RvcnlTdGF0ZS52aWV3cG9ydDtcblx0XHRsZXQgYWRkcmVzc0FuZFZpZXdwb3J0ID0gJyc7XG5cdFx0aWYgKGFkZHJlc3MpIGFkZHJlc3NBbmRWaWV3cG9ydCArPSBhZGRyZXNzO1xuXHRcdC8vIGluIE1hcCBNb2RlIHdlIGFkZCB2aWV3cG9ydFxuXHRcdC8vIGluIExpc3QgbW9kZSB3ZSBhZGQgdmlld3BvcnQgb25seSB3aGVuIG5vIGFkZHJlc3MgcHJvdmlkZWRcblx0XHRpZiAodmlld3BvcnQgJiYgKEFwcC5tb2RlID09IEFwcE1vZGVzLk1hcCB8fCAhYWRkcmVzcykpIGFkZHJlc3NBbmRWaWV3cG9ydCArPSB2aWV3cG9ydC50b1N0cmluZygpO1xuXG5cdFx0aWYgKEFwcC5kYXRhVHlwZSA9PSBBcHBEYXRhVHlwZS5TZWFyY2hSZXN1bHRzICYmIEFwcC5zdGF0ZSA9PSBBcHBTdGF0ZXMuTm9ybWFsKVxuXHRcdHtcblx0XHRcdHJvdXRlID0gQXBwLnJvdXRlck1vZHVsZS5nZW5lcmF0ZSgnc2VhcmNoJywgeyBtb2RlIDogIG1vZGUsIHRleHQgOiBoaXN0b3J5U3RhdGUudGV4dCB9KTtcdFxuXHRcdH1cdFx0XG5cdFx0ZWxzZSBpZiAoQXBwLm1vZGUgPT0gQXBwTW9kZXMuTGlzdClcblx0XHR7XG5cdFx0XHQvLyBpbiBsaXN0IG1vZGUgd2UgZG9uJ3QgY2FyZSBhYm91dCBzdGF0ZVxuXHRcdFx0cm91dGUgPSBBcHAucm91dGVyTW9kdWxlLmdlbmVyYXRlKCdub3JtYWwnLCB7IG1vZGUgOiAgbW9kZSwgYWRkcmVzc0FuZFZpZXdwb3J0OiBhZGRyZXNzQW5kVmlld3BvcnQgfSk7XHRcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdHN3aXRjaCAoQXBwLnN0YXRlKVxuXHRcdFx0e1xuXHRcdFx0XHRjYXNlIEFwcFN0YXRlcy5Ob3JtYWw6XHRcblx0XHRcdFx0XHRyb3V0ZSA9IEFwcC5yb3V0ZXJNb2R1bGUuZ2VuZXJhdGUoJ25vcm1hbCcsIHsgbW9kZSA6ICBtb2RlLCBhZGRyZXNzQW5kVmlld3BvcnQ6IGFkZHJlc3NBbmRWaWV3cG9ydCB9KTtcdFxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgQXBwU3RhdGVzLlNob3dFbGVtZW50Olx0XG5cdFx0XHRcdGNhc2UgQXBwU3RhdGVzLlNob3dFbGVtZW50QWxvbmU6XG5cdFx0XHRcdGNhc2UgQXBwU3RhdGVzLlNob3dEaXJlY3Rpb25zOlxuXHRcdFx0XHRcdGlmICghaGlzdG9yeVN0YXRlLmlkKSByZXR1cm47XG5cdFx0XHRcdFx0bGV0IGVsZW1lbnQgPSBBcHAuZWxlbWVudEJ5SWQoaGlzdG9yeVN0YXRlLmlkKTtcblx0XHRcdFx0XHRpZiAoIWVsZW1lbnQpIHJldHVybjtcblxuXHRcdFx0XHRcdGlmIChBcHAuc3RhdGUgPT0gQXBwU3RhdGVzLlNob3dEaXJlY3Rpb25zKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHJvdXRlID0gQXBwLnJvdXRlck1vZHVsZS5nZW5lcmF0ZSgnc2hvd19kaXJlY3Rpb25zJywgeyBuYW1lIDogIGNhcGl0YWxpemUoc2x1Z2lmeShlbGVtZW50Lm5hbWUpKSwgaWQgOiBlbGVtZW50LmlkLCBhZGRyZXNzQW5kVmlld3BvcnQ6IGFkZHJlc3NBbmRWaWV3cG9ydCB9KTtcdFxuXHRcdFx0XHRcdH1cdFxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRyb3V0ZSA9IEFwcC5yb3V0ZXJNb2R1bGUuZ2VuZXJhdGUoJ3Nob3dfZWxlbWVudCcsIHsgbmFtZSA6ICBjYXBpdGFsaXplKHNsdWdpZnkoZWxlbWVudC5uYW1lKSksIGlkIDogZWxlbWVudC5pZCwgYWRkcmVzc0FuZFZpZXdwb3J0OiBhZGRyZXNzQW5kVmlld3BvcnQgfSk7XHRcblx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0YnJlYWs7XHRcdFxuXHRcdFx0fVx0XHRcblx0XHR9XG5cblx0XHRpZiAocm91dGUgJiYgaGlzdG9yeVN0YXRlLmZpbHRlcnMpIHJvdXRlICs9ICc/Y2F0PScgKyBoaXN0b3J5U3RhdGUuZmlsdGVycztcblxuXHRcdHJldHVybiByb3V0ZTtcblx0fTtcbn0iLCJpbXBvcnQgeyBBcHBNb2R1bGUsIEFwcFN0YXRlcywgQXBwRGF0YVR5cGUsIEFwcE1vZGVzIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEhpc3RvcnlTdGF0ZSwgVmlld1BvcnQgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NsYXNzZXMnOyBcblxuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuXG5kZWNsYXJlIHZhciByb3V0aWU6IGFueSwgJDtcblxuZXhwb3J0IGNsYXNzIFJvdXRlck1vZHVsZVxue1xuXHRmaWx0ZXJzU2VyaWFsaXplZFBhcmFtIDogc3RyaW5nID0gJyc7XG5cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0cm91dGllKHtcblx0XHRcdCdnZW9sb2NhbGl6ZSAvOm1vZGUvYXV0b3VyLWRlLW1vaSc6IChtb2RlKSA9PlxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgaW5pdGlhbFN0YXRlID0gbmV3IEhpc3RvcnlTdGF0ZSgpO1xuXG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5kYXRhVHlwZSA9IEFwcERhdGFUeXBlLkFsbDtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLm1vZGUgPSBtb2RlID09ICdjYXJ0ZScgPyBBcHBNb2Rlcy5NYXAgOiBBcHBNb2Rlcy5MaXN0O1xuXHRcdFx0XHRpbml0aWFsU3RhdGUuc3RhdGUgPSBBcHBTdGF0ZXMuTm9ybWFsO1x0XHRcdFx0XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5hZGRyZXNzID0gJ2dlb2xvY2FsaXplJztcblx0XHRcdFx0aW5pdGlhbFN0YXRlLmZpbHRlcnMgPSB0aGlzLmZpbHRlcnNTZXJpYWxpemVkUGFyYW07XG5cblx0XHRcdFx0dGhpcy5zdGFydFN0YXRlKGluaXRpYWxTdGF0ZSk7XHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0J25vcm1hbCAvOm1vZGUvOmFkZHJlc3NBbmRWaWV3cG9ydD8nOiAobW9kZSwgYWRkcmVzc0FuZFZpZXdwb3J0ID0gJycpID0+XG5cdFx0XHR7XG5cdFx0XHRcdGxldCBpbml0aWFsU3RhdGUgPSBuZXcgSGlzdG9yeVN0YXRlKCk7XG5cdFx0XHRcdGxldCBwYXJzZWRBZGRyZXNzQW5kVmlld3BvcnQgPSB0aGlzLnBhcnNlQWRkcmVzc1ZpZXdwb3J0KGFkZHJlc3NBbmRWaWV3cG9ydCk7XG5cblx0XHRcdFx0aW5pdGlhbFN0YXRlLmRhdGFUeXBlID0gQXBwRGF0YVR5cGUuQWxsO1xuXHRcdFx0XHRpbml0aWFsU3RhdGUubW9kZSA9IG1vZGUgPT0gJ2NhcnRlJyA/IEFwcE1vZGVzLk1hcCA6IEFwcE1vZGVzLkxpc3Q7XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5zdGF0ZSA9IEFwcFN0YXRlcy5Ob3JtYWw7XHRcdFx0XHRcblx0XHRcdFx0aW5pdGlhbFN0YXRlLmFkZHJlc3MgPSBwYXJzZWRBZGRyZXNzQW5kVmlld3BvcnRbMF07XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS52aWV3cG9ydCA9IG5ldyBWaWV3UG9ydCgpLmZyb21TdHJpbmcocGFyc2VkQWRkcmVzc0FuZFZpZXdwb3J0WzFdKTtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLmZpbHRlcnMgPSB0aGlzLmZpbHRlcnNTZXJpYWxpemVkUGFyYW07XG5cblx0XHRcdFx0dGhpcy5zdGFydFN0YXRlKGluaXRpYWxTdGF0ZSk7XG5cdFx0XHR9LFxuXHRcdFx0J3Nob3dfZWxlbWVudCAvZmljaGUvOm5hbWUvOmlkLzphZGRyZXNzQW5kVmlld3BvcnQ/JzogKG5hbWUsIGlkLCBhZGRyZXNzQW5kVmlld3BvcnQgPSAnJykgPT5cblx0XHRcdHtcblx0XHRcdFx0bGV0IGluaXRpYWxTdGF0ZSA9IG5ldyBIaXN0b3J5U3RhdGUoKTtcblx0XHRcdFx0bGV0IHBhcnNlZEFkZHJlc3NBbmRWaWV3cG9ydCA9IHRoaXMucGFyc2VBZGRyZXNzVmlld3BvcnQoYWRkcmVzc0FuZFZpZXdwb3J0KTtcblxuXHRcdFx0XHRpbml0aWFsU3RhdGUuZGF0YVR5cGUgPSBBcHBEYXRhVHlwZS5BbGw7XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5tb2RlID0gQXBwTW9kZXMuTWFwO1xuXHRcdFx0XHRpbml0aWFsU3RhdGUuc3RhdGUgPSBBcHBTdGF0ZXMuU2hvd0VsZW1lbnRBbG9uZTtcdFx0XHRcdFxuXHRcdFx0XHRpbml0aWFsU3RhdGUuYWRkcmVzcyA9IHBhcnNlZEFkZHJlc3NBbmRWaWV3cG9ydFswXTtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLnZpZXdwb3J0ID0gbmV3IFZpZXdQb3J0KCkuZnJvbVN0cmluZyhwYXJzZWRBZGRyZXNzQW5kVmlld3BvcnRbMV0pO1xuXHRcdFx0XHRpbml0aWFsU3RhdGUuaWQgPSBpZDtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLmZpbHRlcnMgPSB0aGlzLmZpbHRlcnNTZXJpYWxpemVkUGFyYW07XG5cblx0XHRcdFx0dGhpcy5zdGFydFN0YXRlKGluaXRpYWxTdGF0ZSk7XG5cdFx0XHR9LFxuXHRcdFx0J3Nob3dfZGlyZWN0aW9ucyAvaXRpbmVyYWlyZS86bmFtZS86aWQvOmFkZHJlc3NBbmRWaWV3cG9ydD8nOiAobmFtZSwgaWQsIGFkZHJlc3NBbmRWaWV3cG9ydCA9ICcnKSA9PlxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgaW5pdGlhbFN0YXRlID0gbmV3IEhpc3RvcnlTdGF0ZSgpO1xuXHRcdFx0XHRsZXQgcGFyc2VkQWRkcmVzc0FuZFZpZXdwb3J0ID0gdGhpcy5wYXJzZUFkZHJlc3NWaWV3cG9ydChhZGRyZXNzQW5kVmlld3BvcnQpO1xuXG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5kYXRhVHlwZSA9IEFwcERhdGFUeXBlLkFsbDtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLm1vZGUgPSBBcHBNb2Rlcy5NYXA7XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5zdGF0ZSA9IEFwcFN0YXRlcy5TaG93RGlyZWN0aW9ucztcdFx0XHRcdFxuXHRcdFx0XHRpbml0aWFsU3RhdGUuYWRkcmVzcyA9IHBhcnNlZEFkZHJlc3NBbmRWaWV3cG9ydFswXTtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLnZpZXdwb3J0ID0gbmV3IFZpZXdQb3J0KCkuZnJvbVN0cmluZyhwYXJzZWRBZGRyZXNzQW5kVmlld3BvcnRbMV0pO1xuXHRcdFx0XHRpbml0aWFsU3RhdGUuaWQgPSBpZDtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLmZpbHRlcnMgPSB0aGlzLmZpbHRlcnNTZXJpYWxpemVkUGFyYW07XG5cblx0XHRcdFx0dGhpcy5zdGFydFN0YXRlKGluaXRpYWxTdGF0ZSk7XHRcblx0XHRcdH0sXG5cdFx0XHQnc2VhcmNoIC86bW9kZS9yZWNoZXJjaGUvOnRleHQnOiAobW9kZSwgdGV4dCkgPT5cblx0XHRcdHtcblx0XHRcdFx0bGV0IGluaXRpYWxTdGF0ZSA9IG5ldyBIaXN0b3J5U3RhdGUoKTtcblxuXHRcdFx0XHRpbml0aWFsU3RhdGUuZGF0YVR5cGUgPSBBcHBEYXRhVHlwZS5TZWFyY2hSZXN1bHRzO1xuXHRcdFx0XHRpbml0aWFsU3RhdGUubW9kZSA9IEFwcE1vZGVzLk1hcDtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLnN0YXRlID0gQXBwU3RhdGVzLk5vcm1hbDtcdFx0XHRcdFxuXHRcdFx0XHRpbml0aWFsU3RhdGUudGV4dCA9IHRleHQ7XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5maWx0ZXJzID0gdGhpcy5maWx0ZXJzU2VyaWFsaXplZFBhcmFtO1xuXG5cdFx0XHRcdHRoaXMuc3RhcnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuXHRcdFx0fVxuXHRcdH0pO1x0XHRcblx0fVxuXG5cdGxvYWRJbml0aWFsU3RhdGUoKVxuXHR7XHRcdFxuXHRcdGlmIChBcHAuY29uZmlnLmdlbmVyYWwuYWN0aXZhdGVIaXN0b3J5U3RhdGVBbmRSb3V0aW5nKSBcblx0XHR7XHRcdFxuXHRcdFx0Ly8gY2hlY2sgR0VUIHBhcmFtZXRlcnMgaW5zaWRlIHRoZSBoYXNoXG5cdFx0XHRsZXQgc3BsaXRlZCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnNwbGl0KCc/Y2F0PScpO1xuXHRcdFx0XG5cdFx0XHRpZiAoc3BsaXRlZC5sZW5ndGggPiAxKSB0aGlzLmZpbHRlcnNTZXJpYWxpemVkUGFyYW0gPSBzcGxpdGVkWzFdO1xuXG5cdFx0XHRsZXQgcm91dGVIYXNoID0gc3BsaXRlZFswXTtcblxuXHRcdFx0Ly8gaGFuZGxlIHdyb25nIGhhc2hcblx0XHRcdGlmICghcm91dGVIYXNoIHx8IHJvdXRlSGFzaCA9PSAnIy8nIHx8IHJvdXRlSGFzaCA9PSAnIycpIHJvdXRlSGFzaCA9ICcvY2FydGUnO1xuXHRcdFx0cm91dGllLm5hdmlnYXRlKHJvdXRlSGFzaCk7XG5cblx0XHRcdC8vIGxldCB0aGUgaGFzaCBiZWluZyBjaGFuZ2VkIHdpdGggYSB0aW1lT3V0XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHJvdXRpZS5yZWxvYWQoKSwgMTApO1xuXHRcdH1cblx0XHRlbHNlIFxuXHRcdHtcblx0XHRcdGxldCBpbml0aWFsSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0Ly8gbmF2aWdhdGUgdG8gZGVmYXVsdCByb3V0ZVxuXHRcdFx0cm91dGllLm5hdmlnYXRlKCcvY2FydGUnKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4gcm91dGllLnJlbG9hZCgpLCAxMCk7XG5cdFx0XHQvLyByZXN0b3JlIGluaXRpYWwgaGFzaFxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB3aW5kb3cubG9jYXRpb24uaGFzaCA9IGluaXRpYWxIYXNoLCAxMDApO1xuXHRcdH1cblx0fVxuXG5cdGdlbmVyYXRlKHJvdXRlTmFtZSA6IHN0cmluZywgb3B0aW9ucz8gOiBhbnksIGFic29sdXRlVXJsPyA6IGJvb2xlYW4pXG5cdHtcblx0XHRyZXR1cm4gJyMnICsgcm91dGllLmxvb2t1cChyb3V0ZU5hbWUsIG9wdGlvbnMpO1xuXHR9XG5cblx0Ly8gYWRkcmVzcyBhbmQgdmlld3BvcnQgYXJlIGpvaW5lZCBpbnRvIG9uZSBzdHJpbmcsIHNlcGVyYXRlZCBieSBcIkBcIlxuXHRwcml2YXRlIHBhcnNlQWRkcmVzc1ZpZXdwb3J0KCRhZGRyZXNzVmlld3BvcnQpXG4gIHtcbiAgICAvLyBwcmVjYXV0aW9uIGluIGNhc2UgR0VUIHBhcmFtIHN0aWxsIGluIGhhc2hcblx0XHQkYWRkcmVzc1ZpZXdwb3J0ID0gJGFkZHJlc3NWaWV3cG9ydC5zcGxpdCgnPycpWzBdO1xuXG4gICAgbGV0IHNwbGl0ZWQgPSAkYWRkcmVzc1ZpZXdwb3J0LnNwbGl0KCdAJyk7XG5cbiAgICBpZiAoc3BsaXRlZC5sZW5ndGggPT0gMSlcbiAgICB7XG4gICAgICAgIHJldHVybiBbJGFkZHJlc3NWaWV3cG9ydCwgJyddO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICByZXR1cm4gc3BsaXRlZDtcbiAgICB9ICBcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRTdGF0ZShzdGF0ZSA6IEhpc3RvcnlTdGF0ZSlcbiAge1xuXHRcdEFwcC5oaXN0b3J5U3RhdGVNYW5hZ2VyLmxvYWQoc3RhdGUpO1x0XHRcbiAgfVxufSIsImltcG9ydCB7IEFwcE1vZHVsZSB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5cbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmRlY2xhcmUgdmFyIG51bmp1Y2tzO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVNb2R1bGVcbntcblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0Ly8gd2UgY2FuIGNvbmZpZ3VyZSB0aGlzIHBhdGggYW5kIHRoZSB0ZW1wbGF0ZXMgbmFtZXMgZnJvbSBHb0dvQ2FydG9cblx0XHQvLyB0byBvdmVycmlkZSBkZWZhdWx0IHRlbXBsYXRlc1xuXHRcdC8vIEFzIGRlZmF1bHQgdGVtcGxhdGVzIGFyZSBwcmVjb21waWxlZCBpbnRvIGphdmFzY3JpcHQgdGVtcGxhdGVzLmpzIGZpbGVcblx0XHQvLyBpZiB0aGVyZSBpcyBzb21lIHRlbXBsYXRlcyB3ZSBkaWQgbm90IG92ZXJyaWRlLCBudW5qdWNrcyB3aWxsIGdldCB0aGUgcHJlY29tcGlsZWQgb25lXG5cdFx0bnVuanVja3MuY29uZmlndXJlKCcuLi9zcmMvdmlld3MnLCB7IGF1dG9lc2NhcGU6IHRydWUgfSk7XG5cdH1cblxuXHRyZW5kZXIodGVtcGxhdGVOYW1lIDogc3RyaW5nLCBvcHRpb25zIDogYW55ID0ge30pIDogc3RyaW5nXG5cdHtcblx0XHRsZXQgZmlsZVVybCA9ICcnO1xuXG5cdFx0c3dpdGNoKHRlbXBsYXRlTmFtZSlcblx0XHR7XG5cdFx0XHRjYXNlICdsYXlvdXQnOiBmaWxlVXJsID0gJ2xheW91dC5odG1sLm5qayc7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnbWFya2VyJzogZmlsZVVybCA9ICdjb21wb25lbnRzL21hcC9tYXJrZXIuaHRtbC5uamsnOyBicmVhaztcblx0XHRcdGNhc2UgJ2dvZ28tc3R5bGVzJzogZmlsZVVybCA9ICdnb2dvLXN0eWxlcy5odG1sLm5qayc7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnZWxlbWVudCc6IGZpbGVVcmwgPSAnY29tcG9uZW50cy9lbGVtZW50L2VsZW1lbnQuaHRtbC5uamsnOyBicmVhaztcblx0XHRcdGNhc2UgJ3ZvdGUtbW9kYWwtY29udGVudCc6IGZpbGVVcmwgPSAnY29tcG9uZW50cy9tb2RhbHMvZWxlbWVudC92b3RlLWNvbnRlbnQuaHRtbC5uamsnOyBicmVhaztcblx0XHRcdGRlZmF1bHQ6IGNvbnNvbGUud2FybignW0dvR29DYXJ0b10gTm8gdGVtcGxhdGUgYXNzb2NpYXRlZCB0byB0ZW1wbGF0ZU5hbWUnLCB0ZW1wbGF0ZU5hbWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBudW5qdWNrcy5yZW5kZXIoZmlsZVVybCwgb3B0aW9ucyk7XG5cdH1cbn0iLCJpbXBvcnQgeyBPcHRpb25WYWx1ZSB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcbmRlY2xhcmUgdmFyIEpzRGlmZiA6IGFueTtcblxudmFyIGRpZmZDb25maWd1cmF0aW9uID1cbntcbiAgbmFtZTogSnNEaWZmLmRpZmZTZW50ZW5jZXMsXG4gIGRlc2NyaXB0aW9uOiBKc0RpZmYuZGlmZlNlbnRlbmNlcyxcbiAgYWRkcmVzczogSnNEaWZmLmRpZmZTZW50ZW5jZXMsXG4gIGNvbW1pdG1lbnQ6IEpzRGlmZi5kaWZmU2VudGVuY2VzLFxuICB0ZWxlcGhvbmU6IEpzRGlmZi5kaWZmU2VudGVuY2VzLFxuICB3ZWJzaXRlOiBKc0RpZmYuZGlmZlNlbnRlbmNlcyxcbiAgZW1haWw6IEpzRGlmZi5kaWZmU2VudGVuY2VzLFxuICBvcGVuSG91cnNNb3JlSW5mb3M6IEpzRGlmZi5kaWZmU2VudGVuY2VzLFxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudERpZmZNb2R1bGVcbntcbiAgZ2V0RGlmZlZhbHVlKHZhbHVlLCBtb2RpZmllZFZhbHVlLCBwcm9wZXJ0eU5hbWUpXG4gIHtcbiAgICBsZXQgc3BhbkNsYXNzID0gJycsXG4gICAgc3BhbiA9IG51bGw7XG5cbiAgICBsZXQgRGlmZk1ldGhvZCA9IGRpZmZDb25maWd1cmF0aW9uW3Byb3BlcnR5TmFtZV0gPyBkaWZmQ29uZmlndXJhdGlvbltwcm9wZXJ0eU5hbWVdIDogSnNEaWZmLmRpZmZTZW50ZW5jZXNcbiAgICBsZXQgZGlmZiA9IERpZmZNZXRob2QodmFsdWUsIG1vZGlmaWVkVmFsdWUpO1xuICAgIGxldCBkaXNwbGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG4gICAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgZGlmZi5mb3JFYWNoKGZ1bmN0aW9uKHBhcnQpXG4gICAge1xuICAgICAgc3BhbkNsYXNzID0gcGFydC5hZGRlZCA/ICdhZGRlZCcgOiBwYXJ0LnJlbW92ZWQgPyAncmVtb3ZlZCcgOiAnZXF1YWxzJztcbiAgICAgIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICBpZiAoc3BhbkNsYXNzKSBzcGFuLmNsYXNzTmFtZSA9IHNwYW5DbGFzcztcbiAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGFydC52YWx1ZSkpO1xuICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgfSk7XG5cbiAgICBkaXNwbGF5LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuICAgIHJldHVybiBkaXNwbGF5LmlubmVySFRNTDtcbiAgfVxuXG4gIGdldERpZmZPcHRpb25WYWx1ZXMob3B0aW9uVmFsdWVzIDogT3B0aW9uVmFsdWVbXSwgbmV3T3B0aW9uVmFsdWVzIDogT3B0aW9uVmFsdWVbXSlcbiAge1xuICAgIGxldCBkaWZmT3B0aW9uc1ZhbHVlcyA9IFtdO1xuICAgIGxldCBuZXdPVklkcyA9IG5ld09wdGlvblZhbHVlcy5tYXAoKG9iaikgPT4gb2JqLm9wdGlvbklkKTtcbiAgICBsZXQgb2xkT1ZJZHMgPSBvcHRpb25WYWx1ZXMubWFwKChvYmopID0+IG9iai5vcHRpb25JZCk7XG5cbiAgICBmb3IobGV0IG92IG9mIG9wdGlvblZhbHVlcylcbiAgICB7XG4gICAgICBpZiAobmV3T1ZJZHMuaW5kZXhPZihvdi5vcHRpb25JZCkgPT0gLTEpXG4gICAgICB7XG4gICAgICAgIG92LmRpZmYgPSAncmVtb3ZlZCc7XG4gICAgICAgIGRpZmZPcHRpb25zVmFsdWVzLnB1c2gob3YpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IobGV0IG5ld092IG9mIG5ld09wdGlvblZhbHVlcylcbiAgICB7XG4gICAgICBsZXQgaW5kZXggPSBvbGRPVklkcy5pbmRleE9mKG5ld092Lm9wdGlvbklkKTtcbiAgICAgIGlmIChpbmRleCA9PSAtMSlcbiAgICAgIHtcbiAgICAgICAgbmV3T3YuZGlmZiA9ICdhZGRlZCc7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7ICAgICAgICBcbiAgICAgICAgbGV0IG1vZGlmaWVkVmFsdWUgPSBjYXBpdGFsaXplKG5ld092LmRlc2NyaXB0aW9uKTtcbiAgICAgICAgbGV0IHZhbHVlID0gY2FwaXRhbGl6ZShvcHRpb25WYWx1ZXNbaW5kZXhdLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgc3BhbkNsYXNzID0gJycsXG4gICAgICAgIHNwYW4gPSBudWxsO1xuICAgICAgICBsZXQgZGlmZiA9IEpzRGlmZi5kaWZmV29yZHModmFsdWUsIG1vZGlmaWVkVmFsdWUpLFxuICAgICAgICAgICAgZGlzcGxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuICAgICAgICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICAgICAgZGlmZi5mb3JFYWNoKGZ1bmN0aW9uKHBhcnQpXG4gICAgICAgIHtcbiAgICAgICAgICBzcGFuQ2xhc3MgPSBwYXJ0LmFkZGVkID8gJ2FkZGVkJyA6IHBhcnQucmVtb3ZlZCA/ICdyZW1vdmVkJyA6ICdlcXVhbHMnO1xuICAgICAgICAgIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgaWYgKHNwYW5DbGFzcykgc3Bhbi5jbGFzc05hbWUgPSBzcGFuQ2xhc3M7XG4gICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwYXJ0LnZhbHVlKSk7XG4gICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpc3BsYXkuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuXG4gICAgICAgIG5ld092LmRlc2NyaXB0aW9uID0gZGlzcGxheS5pbm5lckhUTUw7XG4gICAgICAgIG5ld092LmRpZmYgPSAnZXF1YWxzJztcbiAgICAgIH1cbiAgICAgIGRpZmZPcHRpb25zVmFsdWVzLnB1c2gobmV3T3YpO1xuICAgIH1cblxuICAgIHJldHVybiBkaWZmT3B0aW9uc1ZhbHVlcztcbiAgfVxufSIsImltcG9ydCB7IEVsZW1lbnQsIEVsZW1lbnRCYXNlLCBFbGVtZW50U3RhdHVzLCBQb3N0YWxBZGRyZXNzLCBFbGVtZW50VXJsIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSwgc2x1Z2lmeSwgc3BsaXRMb25nVGV4dCB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuZGVjbGFyZSB2YXIgJCwgTDtcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRKc29uUGFyc2VyTW9kdWxlXG57XG4gIGxvYWQoZWxlbWVudEpzb24gOiBhbnksIGVsZW1lbnQgOiBFbGVtZW50IHwgRWxlbWVudEJhc2UpXG4gIHtcbiAgICAvLyBwYXRjaCB0byBoYW5kbGUgY29tcGFjdEpzb24gc3RvcmVkIGluc2lkZSBhIFwiY29tcGFjdEpzb25cIiBwcm9wZXJ0eSAodXNlIHdpdGggU2VtYW50aWMgQnVzKVxuICAgIGlmIChlbGVtZW50SnNvbi5jb21wYWN0SnNvbikgXG4gICAge1xuICAgICAgbGV0IGlkID0gZWxlbWVudEpzb24uaWQ7XG4gICAgICBlbGVtZW50SnNvbiA9IGVsZW1lbnRKc29uLmNvbXBhY3RKc29uO1xuICAgICAgZWxlbWVudEpzb24uaWQgPSBpZDtcbiAgICB9XG5cbiAgICAvLyB3aGVuIHdlIGdldCB0aGUgY29tcGFjdCBqc29uIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlbGVtZW50IGZyb20gdGhlIHNlcnZlclxuICAgIC8vIHRoZSBlbGVtZW50SnNvbiBpcyBhIHNpbXBsZSBhcnJheSB3aXRoIHRoZSBtb3JlIGltcG9ydGFudCBlbGVtZW50IGF0dHJpYnV0ZVxuICAgIGlmICgkLmlzQXJyYXkoZWxlbWVudEpzb24pICYmIGVsZW1lbnRKc29uLmxlbmd0aCA+PSA1KVxuICAgICAgdGhpcy5sb2FkRnJvbUNvbXBhY3RKc29uKGVsZW1lbnRKc29uLCBlbGVtZW50KTtcbiAgICBlbHNlIFxuICAgICAgdGhpcy5sb2FkRnJvbUZ1bGxKc29uKGVsZW1lbnRKc29uLCBlbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEZyb21Db21wYWN0SnNvbihlbGVtZW50SnNvbiA6IGFueSwgZWxlbWVudCA6IEVsZW1lbnQgfCBFbGVtZW50QmFzZSlcbiAge1xuICAgIGVsZW1lbnQuaWQgPSBlbGVtZW50SnNvbi5pZDsgLy8gdGhlIGVsZW1lbnQgaGFzIGJlZW4gbW9kaWZpZWQgYmVmb3JlIHRvIGZpeHMgYmFkIGlkcyAgICAgXG4gICAgZWxlbWVudC5uYW1lID0gY2FwaXRhbGl6ZShlbGVtZW50SnNvblsxXSk7XG4gICAgZWxlbWVudC5wb3NpdGlvbiA9IEwubGF0TG5nKGVsZW1lbnRKc29uWzJdLCBlbGVtZW50SnNvblszXSk7ICAgICBcbiAgICBBcHAuZWxlbWVudE9wdGlvblZhbHVlc01vZHVsZS5jcmVhdGVPcHRpb25WYWx1ZXMoZWxlbWVudEpzb25bNF0sIGVsZW1lbnQpOyAgIFxuICAgIGVsZW1lbnQuc3RhdHVzID0gZWxlbWVudEpzb24ubGVuZ3RoID49IDYgPyBlbGVtZW50SnNvbls1XSA6IDE7ICBcbiAgICBlbGVtZW50Lm1vZGVyYXRpb25TdGF0ZSA9IGVsZW1lbnRKc29uLmxlbmd0aCA+PSA3ID8gZWxlbWVudEpzb25bNl0gOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRnJvbUZ1bGxKc29uKGVsZW1lbnRKc29uIDogYW55LCBlbGVtZW50IDogRWxlbWVudCB8IEVsZW1lbnRCYXNlKVxuICB7XG4gICAgLy8gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBwcmVmaWxsZWQgd2l0aCB0aGUgY29tcGFjdCBqc29uIHJlcHJlc2VudGF0aW9uXG4gICAgLy8gd2Ugb3Zld3JpdGUgYW55d2F5IGFsbCBhdHRyaWJ1dGVzIChpdCBjYW4gaGF2ZSBjaGFuZ2VkICEpXG4gICAgZWxlbWVudC5pZCA9IGVsZW1lbnRKc29uLmlkIHx8IGVsZW1lbnRKc29uWydAaWQnXTtcblxuICAgIGVsZW1lbnQucG9zaXRpb24gPSBMLmxhdExuZyhlbGVtZW50SnNvbi5sYXRpdHVkZSB8fCBlbGVtZW50SnNvbi5sYXQgfHwgZWxlbWVudEpzb24uZ2VvICYmIGVsZW1lbnRKc29uLmdlby5sYXRpdHVkZSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRKc29uLmxvbmdpdHVkZSB8fCBlbGVtZW50SnNvbi5sbmcgfHwgZWxlbWVudEpzb24ubG9uZyB8fCBlbGVtZW50SnNvbi5nZW8gJiYgZWxlbWVudEpzb24uZ2VvLmxvbmdpdHVkZSk7XG4gICAgZWxlbWVudC5uYW1lID0gY2FwaXRhbGl6ZShlbGVtZW50SnNvbi5uYW1lIHx8IGVsZW1lbnRKc29uLnRpdGxlKTtcbiAgICBcbiAgICBlbGVtZW50LnN0YXR1cyA9IGVsZW1lbnRKc29uLnN0YXR1cyA9PSB1bmRlZmluZWQgPyAxIDogZWxlbWVudEpzb24uc3RhdHVzO1xuICAgIGVsZW1lbnQubW9kZXJhdGlvblN0YXRlID0gZWxlbWVudEpzb24ubW9kZXJhdGlvblN0YXRlIHx8IDA7XG5cbiAgICB0aGlzLmNyZWF0ZU9wdGlvbnNWYWx1ZXMoZWxlbWVudEpzb24sIGVsZW1lbnQpO1xuXG4gICAgZWxlbWVudC5zdGFtcHMgPSBlbGVtZW50SnNvbi5zdGFtcHMgfHwgW107ICAgIFxuXG4gICAgaWYoZWxlbWVudEpzb24ubW9kaWZpZWRFbGVtZW50ICYmIGVsZW1lbnQuc3RhdHVzICE9IC01KSBcbiAgICB7XG4gICAgICBsZXQgbW9kaWZpZWRFbGVtZW50ID0gbmV3IEVsZW1lbnRCYXNlKGVsZW1lbnRKc29uLm1vZGlmaWVkRWxlbWVudCk7XG4gICAgICBcbiAgICAgIHRoaXMuY3JlYXRlT3B0aW9uc1ZhbHVlcyhlbGVtZW50SnNvbi5tb2RpZmllZEVsZW1lbnQsIG1vZGlmaWVkRWxlbWVudCk7XG4gICAgICBcbiAgICAgIC8vIGNhbGN1bCBhbmQgc3RvcmUgZGlmZiBvcHRpb25zVmFsdWVzIGluIG1vZGlmaWVkIGVsZW1lbnRcbiAgICAgIGxldCBkaWZmT3B0aW9uVmFsdWVzID0gQXBwLmVsZW1lbnREaWZmTW9kdWxlLmdldERpZmZPcHRpb25WYWx1ZXMoZWxlbWVudC5vcHRpb25zVmFsdWVzLCBtb2RpZmllZEVsZW1lbnQub3B0aW9uc1ZhbHVlcyk7XG4gICAgICBtb2RpZmllZEVsZW1lbnQub3B0aW9uc1ZhbHVlcyA9IGRpZmZPcHRpb25WYWx1ZXM7XG5cbiAgICAgIGVsZW1lbnQubW9kaWZpZWRFbGVtZW50ID0gbW9kaWZpZWRFbGVtZW50O1xuICAgIH1cbiAgICBcbiAgICBlbGVtZW50LmRlc2NyaXB0aW9uID0gZWxlbWVudEpzb24uZGVzY3JpcHRpb24gfHwgZWxlbWVudEpzb24uYWJzdHJhY3Q7XG4gICAgZWxlbWVudC5kZXNjcmlwdGlvbiA9IGNhcGl0YWxpemUoZWxlbWVudC5kZXNjcmlwdGlvbiB8fCAnJykgO1xuICAgIGVsZW1lbnQubG9uZ0Rlc2NyaXB0aW9uID0gZWxlbWVudEpzb24uZGVzY3JpcHRpb25Nb3JlO1xuICAgIGVsZW1lbnQubG9uZ0Rlc2NyaXB0aW9uID0gY2FwaXRhbGl6ZShlbGVtZW50LmxvbmdEZXNjcmlwdGlvbiB8fCAnJyk7IFxuICAgIHRoaXMuY2hlY2tGb3JNZXJnZURlc2NyaXB0aW9ucyhlbGVtZW50KTtcbiAgICB0aGlzLmNoZWNrRm9yU3BsaXREZXNjcmlwdGlvbihlbGVtZW50KTtcblxuICAgIGVsZW1lbnQuYWRkcmVzcyA9IG5ldyBQb3N0YWxBZGRyZXNzKGVsZW1lbnRKc29uLmFkZHJlc3MpO1xuXG4gICAgLy8gZWxlbWVudC5yZXBvcnRzID0gZWxlbWVudC5jcmVhdGVPYmplY3RBcnJheUZyb21Kc29uKFZvdGVSZXBvcnQsIGVsZW1lbnRKc29uLnJlcG9ydHMpO1xuICAgIC8vIGVsZW1lbnQuY29udHJpYnV0aW9ucyA9IGVsZW1lbnQuY3JlYXRlT2JqZWN0QXJyYXlGcm9tSnNvbihDb250cmlidXRpb24sIGVsZW1lbnRKc29uLmNvbnRyaWJ1dGlvbnMpO1xuICAgIC8vIGVsZW1lbnQudm90ZXMgPSBlbGVtZW50LmNyZWF0ZU9iamVjdEFycmF5RnJvbUpzb24oVm90ZVJlcG9ydCwgZWxlbWVudEpzb24udm90ZXMpO1xuXG4gICAgZWxlbWVudC5yZXBvcnRzID0gZWxlbWVudEpzb24ucmVwb3J0cztcbiAgICBlbGVtZW50LmNvbnRyaWJ1dGlvbnMgPSBlbGVtZW50SnNvbi5jb250cmlidXRpb25zO1xuICAgIGVsZW1lbnQucGVuZGluZ0NvbnRyaWJ1dGlvbiA9IGVsZW1lbnRKc29uLnBlbmRpbmdDb250cmlidXRpb247XG4gICAgZWxlbWVudC52b3RlcyA9IGVsZW1lbnRKc29uLnZvdGVzO1xuXG4gICAgZWxlbWVudC5jb21taXRtZW50ID0gZWxlbWVudEpzb24uY29tbWl0bWVudCB8fCAnJztcbiAgICBlbGVtZW50LnRlbGVwaG9uZSA9IEFwcC5lbGVtZW50Rm9ybWF0ZXJNb2R1bGUuZ2V0Rm9ybWF0ZWRUZWwoZWxlbWVudEpzb24udGVsZXBob25lKTsgICAgXG4gICAgZWxlbWVudC5lbWFpbCA9IGVsZW1lbnRKc29uLmVtYWlsIHx8IGVsZW1lbnRKc29uLmNvbnRhY3QgfHwgJyc7XG4gICAgZWxlbWVudC5vcGVuSG91cnMgPSBlbGVtZW50SnNvbi5vcGVuSG91cnM7XG4gICAgQXBwLmVsZW1lbnRGb3JtYXRlck1vZHVsZS5jYWxjdWxhdGVGb3JtYXRlZE9wZW5Ib3VycyhlbGVtZW50KTtcbiAgICBlbGVtZW50Lm9wZW5Ib3Vyc01vcmVJbmZvcyA9IGVsZW1lbnRKc29uLm9wZW5Ib3Vyc01vcmVJbmZvcyB8fCBlbGVtZW50SnNvbi5vcGVuSG91cnNTdHJpbmc7IFxuICAgIGVsZW1lbnQuaW1hZ2VzID0gW107XG4gICAgaWYoZWxlbWVudEpzb24uaW1hZ2UpIGVsZW1lbnQuaW1hZ2VzLnB1c2goZWxlbWVudEpzb24uaW1hZ2UpO1xuICAgIGVsc2UgaWYgKGVsZW1lbnRKc29uLmltYWdlcykgZWxlbWVudC5pbWFnZXMgPSBbXS5jb25jYXQoZWxlbWVudEpzb24uaW1hZ2VzKTtcbiAgICBlbGVtZW50LmltYWdlcyA9IGVsZW1lbnQuaW1hZ2VzLmZpbHRlcigoaW1hZ2VVcmwpID0+IGltYWdlVXJsLmxlbmd0aCA+IDApO1xuICAgIFxuICAgIC8vIHVybHNcbiAgICBlbGVtZW50LndlYnNpdGUgPSBlbGVtZW50SnNvbi53ZWJzaXRlIHx8IGVsZW1lbnRKc29uLnNpdGU7XG4gICAgbGV0IHVybHNKc29uID0gZWxlbWVudEpzb24udXJscyB8fCBlbGVtZW50SnNvbi51cmw7XG4gICAgbGV0IHVybHMgOiBFbGVtZW50VXJsW10gPSBbXTtcbiAgICBpZiAgICAgICh0eXBlb2YgdXJsc0pzb24gPT0gJ3N0cmluZycpIHVybHMgPSBbbmV3IEVsZW1lbnRVcmwodXJsc0pzb24pXTsgXG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh1cmxzSnNvbikpICAgICBmb3IobGV0IHVybCBvZiB1cmxzSnNvbikgdXJscy5wdXNoKG5ldyBFbGVtZW50VXJsKHVybCkpICAgXG4gICAgZWxzZSBpZiAodHlwZW9mIHVybHNKc29uID09ICdvYmplY3QnKSBmb3IgKGxldCBrZXkgaW4gdXJsc0pzb24pIHVybHMucHVzaChuZXcgRWxlbWVudFVybCh7dHlwZTprZXksIHZhbHVlOnVybHNKc29uW2tleV19KSk7XG4gICAgXG4gICAgZWxlbWVudC51cmxzID0gdXJscztcbiAgICBlbGVtZW50LnRhZ3MgPSBlbGVtZW50SnNvbi50YWdzO1xuXG4gICAgZWxlbWVudC5zZWFyY2hTY29yZSA9IGVsZW1lbnRKc29uLnNlYXJjaFNjb3JlO1xuICAgIGVsZW1lbnQuaXNGdWxseUxvYWRlZCA9IHRydWVcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3B0aW9uc1ZhbHVlcyhlbGVtZW50SnNvbiA6IGFueSwgZWxlbWVudCA6IEVsZW1lbnQgfCBFbGVtZW50QmFzZSlcbiAge1xuICAgIEFwcC5lbGVtZW50T3B0aW9uVmFsdWVzTW9kdWxlLmNyZWF0ZU9wdGlvblZhbHVlcyhlbGVtZW50SnNvbi5jYXRlZ29yaWVzIHx8IGVsZW1lbnRKc29uLnRheG9ub215IHx8IGVsZW1lbnRKc29uLm9wdGlvblZhbHVlcywgZWxlbWVudCk7XG4gICAgaWYgKGVsZW1lbnRKc29uLmNhdGVnb3JpZXNEZXNjcmlwdGlvbnMpXG4gICAgICBBcHAuZWxlbWVudE9wdGlvblZhbHVlc01vZHVsZS51cGRhdGVPcHRpb25zV2l0aERlc2NyaXB0aW9uKGVsZW1lbnQsIGVsZW1lbnRKc29uLmNhdGVnb3JpZXNEZXNjcmlwdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPYmplY3RBcnJheUZyb21Kc29uKGtsYXNzLCBlbGVtZW50c0pzb24pXG4gIHtcbiAgICBlbGVtZW50c0pzb24gPSBlbGVtZW50c0pzb24gfHwgW107XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIGZvcihsZXQgZWxlbWVudEpzb24gb2YgZWxlbWVudHNKc29uKVxuICAgIHtcbiAgICAgIHJlc3VsdC5wdXNoKG5ldyBrbGFzcyhlbGVtZW50SnNvbikpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IFxuXG4gIC8vIGlmIHRoZSBkZXNjcmlwdGlvbiBhbmQgbG9uZ0Rlc2NyaXB0aW9uIGFyZSBzbWFsbCwgd2UgY2FuIG1lcmdlIHRoZW0gaW50byBvbmUgc2luZ2xlIGRlc2NyaXB0aW9uXG4gIHByaXZhdGUgY2hlY2tGb3JNZXJnZURlc2NyaXB0aW9ucyhlbGVtZW50KVxuICB7XG4gICAgaWYgKCBlbGVtZW50LnN0YXR1cyAhPSBFbGVtZW50U3RhdHVzLlBlbmRpbmdNb2RpZmljYXRpb24gJiZcbiAgICAgICAgIGVsZW1lbnQuc3RhdHVzICE9IEVsZW1lbnRTdGF0dXMuTW9kaWZpZWRFbGVtZW50ICYmXG4gICAgICAgICBlbGVtZW50LmxvbmdEZXNjcmlwdGlvbi5sZW5ndGggPiAwICYmIFxuICAgICAgICAgKGVsZW1lbnQuZGVzY3JpcHRpb24ubGVuZ3RoICsgZWxlbWVudC5sb25nRGVzY3JpcHRpb24ubGVuZ3RoKSA8IDMwMClcbiAgICB7XG4gICAgICBpZiAoZWxlbWVudC5kZXNjcmlwdGlvbi5sZW5ndGggPiAwKSBlbGVtZW50LmRlc2NyaXB0aW9uID0gZWxlbWVudC5kZXNjcmlwdGlvbiArICc8YnIgLz4gJztcbiAgICAgIGVsZW1lbnQuZGVzY3JpcHRpb24gKz0gZWxlbWVudC5sb25nRGVzY3JpcHRpb247XG4gICAgICBlbGVtZW50LmxvbmdEZXNjcmlwdGlvbiA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSBhIHZlcnkgbGFyZ2UgZGVzY3JpcHRpb24gaW4gdGhlIGhlYWRlciwgaW5zdGVhZCB3ZSBzcGxpdCB0aGUgZGVzY3JpcHRpb25cbiAgLy8gaW50byBzbWFsbGVyIG9uZSB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIG9uIGJvZHlcbiAgcHJpdmF0ZSBjaGVja0ZvclNwbGl0RGVzY3JpcHRpb24oZWxlbWVudCA6IEVsZW1lbnRCYXNlKVxuICB7XG4gICAgaWYgKCBlbGVtZW50LnN0YXR1cyAhPSBFbGVtZW50U3RhdHVzLlBlbmRpbmdNb2RpZmljYXRpb24gJiZcbiAgICAgICAgIGVsZW1lbnQuc3RhdHVzICE9IEVsZW1lbnRTdGF0dXMuTW9kaWZpZWRFbGVtZW50KVxuICAgIHtcbiAgICAgIGlmIChlbGVtZW50LmRlc2NyaXB0aW9uLmxlbmd0aCA+IDMwMCkgeyAgICAgICAgXG4gICAgICAgIGxldCByZXN1bHQgPSBzcGxpdExvbmdUZXh0KGVsZW1lbnQuZGVzY3JpcHRpb24sIDMwMCwgODApO1xuICAgICAgICBlbGVtZW50LmRlc2NyaXB0aW9uID0gcmVzdWx0LmZpcnN0ICsgXCIgKFN1aXRlIGF1IGRlc3NvdXMuLi4pXCI7XG4gICAgICAgIGlmIChlbGVtZW50LmxvbmdEZXNjcmlwdGlvbikgcmVzdWx0LnNlY29uZCArPSBcIjwvYnI+XCIgKyBlbGVtZW50LmxvbmdEZXNjcmlwdGlvbjtcbiAgICAgICAgZWxlbWVudC5sb25nRGVzY3JpcHRpb24gPSByZXN1bHQuc2Vjb25kO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5sb25nRGVzY3JpcHRpb24ubGVuZ3RoID4gNTAwKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBzcGxpdExvbmdUZXh0KGVsZW1lbnQubG9uZ0Rlc2NyaXB0aW9uLCA1MDAsIDEwMCk7XG4gICAgICAgIGVsZW1lbnQubG9uZ0Rlc2NyaXB0aW9uID0gcmVzdWx0LmZpcnN0OyBcbiAgICAgICAgZWxlbWVudC5sb25nRGVzY3JpcHRpb25Nb3JlID0gcmVzdWx0LnNlY29uZDsgICAgICAgICAgICAgXG4gICAgICB9ICAgICAgICBcbiAgICB9XG4gIH1cbn0iLCJpbXBvcnQgeyBFbGVtZW50QmFzZSwgRWxlbWVudFN0YXR1cyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY2xhc3Nlcyc7IFxuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuXG52YXIgY2FwaXRhbGl6ZUNvbmZpZ3VyYXRpb24gPVxue1xuICBuYW1lOiB0cnVlLFxuICBkZXNjcmlwdGlvbjogdHJ1ZSxcbiAgbG9uZ0Rlc2NyaXB0aW9uOiB0cnVlLFxuICBhZGRyZXNzOiBmYWxzZSxcbiAgdGVsZXBob25lOiBmYWxzZSxcbiAgd2Vic2l0ZTogZmFsc2UsXG4gIGVtYWlsOiBmYWxzZSxcbiAgb3BlbkhvdXJzTW9yZUluZm9zOiB0cnVlLFxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudEZvcm1hdGVyTW9kdWxlXG57XG4gIGdldEZvcm1hdGVkVGVsKHZhbHVlKVxuICB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMTApIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oLnsyfSkoPyEkKS9nLFwiJDEgXCIpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSAgXG5cbiAgY2FsY3VsYXRlRm9ybWF0ZWRPcGVuSG91cnMoZWxlbWVudCA6IEVsZW1lbnRCYXNlKVxuICB7ICAgICAgICAgXG4gICAgZWxlbWVudC5mb3JtYXRlZE9wZW5Ib3VycyA9IHt9O1xuICAgIGxldCBuZXdfa2V5LCBuZXdfa2V5X3RyYW5zbGF0ZWQsIG5ld0RhaWx5U2xvdDtcbiAgICBmb3IobGV0IGtleSBpbiBlbGVtZW50Lm9wZW5Ib3VycylcbiAgICB7XG4gICAgICBuZXdfa2V5X3RyYW5zbGF0ZWQgPSB0aGlzLnRyYW5zbGF0ZURheUtleShrZXkpOyAgICAgICAgXG4gICAgICBuZXdEYWlseVNsb3QgPSB0aGlzLmZvcm1hdGVEYWlseVRpbWVTbG90KGVsZW1lbnQub3BlbkhvdXJzW2tleV0pO1xuICAgICAgXG4gICAgICBpZiAobmV3RGFpbHlTbG90KSBlbGVtZW50LmZvcm1hdGVkT3BlbkhvdXJzW25ld19rZXlfdHJhbnNsYXRlZF0gPSBuZXdEYWlseVNsb3Q7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJvcGVydHkoZWxlbWVudCA6IEVsZW1lbnRCYXNlLCBwcm9wZXJ0eU5hbWUpXG4gIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmdldEZvcm1hdGVkVmFsdWUoZWxlbWVudCwgcHJvcGVydHlOYW1lKTtcbiAgICBcbiAgICAvLyBpbiBpZnJhbWUgdGhlIHBlbmRpbmcgbW9kaWZpY2F0aW9ucyBhcmUgbm90IGRpc3BsYXllZCwganVzdCB0aGUgb2xkIHZlcnNpb25cbiAgICBpZiAoZWxlbWVudC5zdGF0dXMgIT0gRWxlbWVudFN0YXR1cy5QZW5kaW5nTW9kaWZpY2F0aW9uIHx8ICFBcHAuY29uZmlnLmlzRmVhdHVyZUF2YWlsYWJsZSgncGVuZGluZycpIHx8ICFlbGVtZW50Lm1vZGlmaWVkRWxlbWVudCkgcmV0dXJuIHZhbHVlO1xuXG4gICAgbGV0IG1vZGlmaWVkVmFsdWUgPSB0aGlzLmdldEZvcm1hdGVkVmFsdWUoZWxlbWVudC5tb2RpZmllZEVsZW1lbnQsIHByb3BlcnR5TmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlICYmICFtb2RpZmllZFZhbHVlKSByZXR1cm4gJyc7XG5cbiAgICB2YWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgIG1vZGlmaWVkVmFsdWUgPSBtb2RpZmllZFZhbHVlIHx8ICcnO1xuXG4gICAgcmV0dXJuIEFwcC5lbGVtZW50RGlmZk1vZHVsZS5nZXREaWZmVmFsdWUodmFsdWUsIG1vZGlmaWVkVmFsdWUsIHByb3BlcnR5TmFtZSlcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNsYXRlRGF5S2V5KGRheUtleSlcbiAge1xuICAgIHN3aXRjaChkYXlLZXkpXG4gICAge1xuICAgICAgY2FzZSAnTW8nOiByZXR1cm4gJ2x1bmRpJztcbiAgICAgIGNhc2UgJ1R1JzogcmV0dXJuICdtYXJkaSc7XG4gICAgICBjYXNlICdXZSc6IHJldHVybiAnbWVyY3JlZGknO1xuICAgICAgY2FzZSAnVGgnOiByZXR1cm4gJ2pldWRpJztcbiAgICAgIGNhc2UgJ0ZyJzogcmV0dXJuICd2ZW5kcmVkaSc7XG4gICAgICBjYXNlICdTYSc6IHJldHVybiAnc2FtZWRpJztcbiAgICAgIGNhc2UgJ1N1JzogcmV0dXJuICdkaW1hbmNoZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRlRGFpbHlUaW1lU2xvdChkYWlseVNsb3QpIFxuICB7ICAgIFxuICAgIGlmIChkYWlseVNsb3QgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBkYWlseVNsb3QucmVwbGFjZSgvLS9nLCAnIC0gJykucmVwbGFjZSgvLC9nLCAnIGV0ICcpO1xuICB9OyAgIFxuXG4gIHByaXZhdGUgZ2V0Rm9ybWF0ZWRWYWx1ZShlbGVtZW50IDogRWxlbWVudEJhc2UsIHByb3BlcnR5TmFtZSlcbiAge1xuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAocHJvcGVydHlOYW1lID09ICdhZGRyZXNzJykgdmFsdWUgPSBlbGVtZW50LmFkZHJlc3MuZ2V0Rm9ybWF0ZWRBZGRyZXNzKCk7XG4gICAgZWxzZSB2YWx1ZSA9IGVsZW1lbnRbcHJvcGVydHlOYW1lXVxuICAgIFxuICAgIHZhbHVlID0gY2FwaXRhbGl6ZUNvbmZpZ3VyYXRpb25bcHJvcGVydHlOYW1lXSA/IGNhcGl0YWxpemUodmFsdWUpIDogdmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59IiwiaW1wb3J0IHsgRWxlbWVudCwgT3B0aW9uVmFsdWUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NsYXNzZXMnOyBcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRJY29uc01vZHVsZVxue1xuICB1cGRhdGVJY29uc1RvRGlzcGxheShlbGVtZW50IDogRWxlbWVudCkgXG4gIHsgICAgXG4gICAgdGhpcy5jaGVja0ZvckRpc2FibGVkT3B0aW9uVmFsdWVzKGVsZW1lbnQpO1xuXG4gICAgaWYgKEFwcC5jdXJyTWFpbklkID09ICdhbGwnKVxuICAgICAgZWxlbWVudC5pY29uc1RvRGlzcGxheSA9IHRoaXMucmVjdXJzaXZlbHlTZWFyY2hJY29uc1RvRGlzcGxheShlbGVtZW50LmdldE9wdGlvblRyZWUoKSwgIUFwcC5jb25maWcubWVudS5zaG93T25lUGFuZVBlck1haW5PcHRpb24pO1xuICAgIGVsc2VcbiAgICAgIGVsZW1lbnQuaWNvbnNUb0Rpc3BsYXkgPSB0aGlzLnJlY3Vyc2l2ZWx5U2VhcmNoSWNvbnNUb0Rpc3BsYXkoZWxlbWVudC5nZXRDdXJyTWFpbk9wdGlvblZhbHVlKCkpO1xuXG4gICAgLy8gaW4gY2FzZSBvZiBubyBPcHRpb25WYWx1ZSBpbiB0aGlzIG1haW5PcHRpb24sIHdlIGRpc3BsYXkgdGhlIG1haW5PcHRpb24gSWNvblxuICAgIGlmIChlbGVtZW50Lmljb25zVG9EaXNwbGF5Lmxlbmd0aCA9PSAwKVxuICAgIHtcbiAgICAgIGVsZW1lbnQuaWNvbnNUb0Rpc3BsYXkucHVzaChlbGVtZW50LmdldEN1cnJNYWluT3B0aW9uVmFsdWUoKSk7XG4gICAgfVxuICAgIFxuICAgIC8vIGNvbnNvbGUubG9nKFwiSWNvbnMgdG8gZGlzcGxheSBzb3J0ZWRcIiwgZWxlbWVudC5nZXRJY29uc1RvRGlzcGxheSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjdXJzaXZlbHlTZWFyY2hJY29uc1RvRGlzcGxheShwYXJlbnRPcHRpb25WYWx1ZSA6IE9wdGlvblZhbHVlLCByZWN1cnNpdmUgOiBib29sZWFuID0gdHJ1ZSkgOiBPcHRpb25WYWx1ZVtdXG4gIHsgICAgXG4gICAgaWYgKCFwYXJlbnRPcHRpb25WYWx1ZSkgcmV0dXJuIFtdO1xuICAgIFxuICAgIGxldCByZXN1bHRPcHRpb25zIDogT3B0aW9uVmFsdWVbXSA9IFtdOyAgICBcblxuICAgIGZvcihsZXQgY2F0ZWdvcnlWYWx1ZSBvZiBwYXJlbnRPcHRpb25WYWx1ZS5jaGlsZHJlbilcbiAgICB7XG4gICAgICBmb3IobGV0IG9wdGlvblZhbHVlIG9mIGNhdGVnb3J5VmFsdWUuY2hpbGRyZW4pXG4gICAgICB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgXG4gICAgICAgIGlmIChyZWN1cnNpdmUgfHwgb3B0aW9uVmFsdWUub3B0aW9uSWQgPT0gXCJSb290RmFrZU9wdGlvblwiKVxuICAgICAgICB7XG4gICAgICAgICAgcmVzdWx0ID0gdGhpcy5yZWN1cnNpdmVseVNlYXJjaEljb25zVG9EaXNwbGF5KG9wdGlvblZhbHVlKSB8fCBbXTtcbiAgICAgICAgICByZXN1bHRPcHRpb25zID0gcmVzdWx0T3B0aW9ucy5jb25jYXQocmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09IDAgJiYgb3B0aW9uVmFsdWUub3B0aW9uLnVzZUljb25Gb3JNYXJrZXIpXG4gICAgICAgIHtcbiAgICAgICAgICByZXN1bHRPcHRpb25zLnB1c2gob3B0aW9uVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiByZXN1bHRPcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0ZvckRpc2FibGVkT3B0aW9uVmFsdWVzKGVsZW1lbnQgOiBFbGVtZW50KVxuICB7XG4gICAgdGhpcy5yZWN1cnNpdmVseUNoZWNrRm9yRGlzYWJsZWRPcHRpb25WYWx1ZXMoZWxlbWVudC5nZXRPcHRpb25UcmVlKCksIEFwcC5jdXJyTWFpbklkID09ICdhbGwnKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjdXJzaXZlbHlDaGVja0ZvckRpc2FibGVkT3B0aW9uVmFsdWVzKG9wdGlvblZhbHVlIDogT3B0aW9uVmFsdWUsIG5vUmVjdXJzaXZlIDogYm9vbGVhbiA9IHRydWUpXG4gIHtcbiAgICBsZXQgaXNFdmVyeUNhdGVnb3J5Q29udGFpbnNPbmVPcHRpb25Ob3RkaXNhYmxlZCA9IHRydWU7XG4gICAgLy9jb25zb2xlLmxvZyhcImNoZWNrRm9yRGlzYWJsZWRPcHRpb25WYWx1ZSBOb3JlY3Vyc2l2ZSA6IFwiICsgbm9SZWN1cnNpdmUsIG9wdGlvblZhbHVlKTtcblxuICAgIGZvcihsZXQgY2F0ZWdvcnlWYWx1ZSBvZiBvcHRpb25WYWx1ZS5jaGlsZHJlbilcbiAgICB7XG4gICAgICBsZXQgaXNTb21lT3B0aW9uTm90ZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IHN1Ym9wdGlvblZhbHVlIG9mIGNhdGVnb3J5VmFsdWUuY2hpbGRyZW4pXG4gICAgICB7XG4gICAgICAgIGlmIChzdWJvcHRpb25WYWx1ZS5jaGlsZHJlbi5sZW5ndGggPT0gMCB8fCBub1JlY3Vyc2l2ZSlcbiAgICAgICAge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJib3R0b20gb3B0aW9uIFwiICsgc3Vib3B0aW9uVmFsdWUub3B0aW9uLm5hbWUsc3Vib3B0aW9uVmFsdWUub3B0aW9uLmlzQ2hlY2tlZCApO1xuICAgICAgICAgIHN1Ym9wdGlvblZhbHVlLmlzRmlsbGVkQnlGaWx0ZXJzID0gIXN1Ym9wdGlvblZhbHVlLm9wdGlvbi5pc0Rpc2FibGVkOyAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLnJlY3Vyc2l2ZWx5Q2hlY2tGb3JEaXNhYmxlZE9wdGlvblZhbHVlcyhzdWJvcHRpb25WYWx1ZSwgbm9SZWN1cnNpdmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdWJvcHRpb25WYWx1ZS5pc0ZpbGxlZEJ5RmlsdGVycykgaXNTb21lT3B0aW9uTm90ZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1NvbWVPcHRpb25Ob3RkaXNhYmxlZCkgaXNFdmVyeUNhdGVnb3J5Q29udGFpbnNPbmVPcHRpb25Ob3RkaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgLy9jb25zb2xlLmxvZyhcIkNhdGVnb3J5VmFsdWUgXCIgKyBjYXRlZ29yeVZhbHVlLmNhdGVnb3J5Lm5hbWUgKyBcImlzU29tZU9wdGlvbk5vdGRpc2FibGVkXCIsIGlzU29tZU9wdGlvbk5vdGRpc2FibGVkKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9uVmFsdWUub3B0aW9uKVxuICAgIHtcbiAgICAgIC8vY29uc29sZS5sb2coXCJPcHRpb25WYWx1ZSBcIiArIG9wdGlvblZhbHVlLm9wdGlvbi5uYW1lICsgXCIgOiBpc0V2ZXJ5Q2F0ZWdveXJDb250YWluT25PcHRpb25cIiwgaXNFdmVyeUNhdGVnb3J5Q29udGFpbnNPbmVPcHRpb25Ob3RkaXNhYmxlZCApO1xuICAgICAgb3B0aW9uVmFsdWUuaXNGaWxsZWRCeUZpbHRlcnMgPSBpc0V2ZXJ5Q2F0ZWdvcnlDb250YWluc09uZU9wdGlvbk5vdGRpc2FibGVkO1xuICAgICAgaWYgKCFvcHRpb25WYWx1ZS5pc0ZpbGxlZEJ5RmlsdGVycykgb3B0aW9uVmFsdWUuc2V0UmVjdXJzaXZlbHlGaWxsZWRCeUZpbHRlcnMob3B0aW9uVmFsdWUuaXNGaWxsZWRCeUZpbHRlcnMpO1xuICAgIH1cbiAgfVxufSIsImltcG9ydCB7IEVsZW1lbnQsIEVsZW1lbnRCYXNlLCBPcHRpb25WYWx1ZSwgQ2F0ZWdvcnlWYWx1ZSwgQ2F0ZWdvcnksIE9wdGlvbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY2xhc3Nlcyc7IFxuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudE9wdGlvblZhbHVlc01vZHVsZVxue1xuICBjcmVhdGVPcHRpb25WYWx1ZXMob3B0aW9uc1ZhbHVlc0pzb24gOiBhbnksIGVsZW1lbnQgOiBFbGVtZW50QmFzZSlcbiAge1xuICAgIGVsZW1lbnQub3B0aW9uc1ZhbHVlcyA9IFtdO1xuXG4gICAgaWYoIW9wdGlvbnNWYWx1ZXNKc29uKSByZXR1cm47XG5cbiAgICBmb3IgKGxldCBrZXkgPSAwOyBrZXkgPCBvcHRpb25zVmFsdWVzSnNvbi5sZW5ndGg7ICsra2V5KSBcbiAgICB7XG4gICAgICB0aGlzLmNyZWF0ZU9wdGlvblZhbHVlRm9yRWxlbWVudChvcHRpb25zVmFsdWVzSnNvbltrZXldLCBrZXksIGVsZW1lbnQpO1xuICAgIH0gXG5cbiAgICB0aGlzLmxvb2tmb3JNaXNzaW5nUGFyZW50c09wdGlvbihlbGVtZW50KTsgICAgXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9wdGlvblZhbHVlRm9yRWxlbWVudChvcHRpb25WYWx1ZUpzb24sIGtleSA6IG51bWJlciwgZWxlbWVudCA6IEVsZW1lbnRCYXNlKVxuICB7XG4gICAgbGV0IG5ld09wdGlvbiA9IG5ldyBPcHRpb25WYWx1ZShvcHRpb25WYWx1ZUpzb24sIGtleSk7XG5cbiAgICBpZiAobmV3T3B0aW9uLm9wdGlvbilcbiAgICB7XG4gICAgICBpZiAobmV3T3B0aW9uLm9wdGlvbi5pc01haW5PcHRpb24pIFxuICAgICAgICBlbGVtZW50Lm1haW5PcHRpb25Pd25lcklkcy5wdXNoKG5ld09wdGlvbi5vcHRpb25JZCk7XG5cbiAgICAgIGVsZW1lbnQub3B0aW9uc1ZhbHVlcy5wdXNoKG5ld09wdGlvbik7XG4gICAgfSAgIFxuXG4gICAgcmV0dXJuIG5ld09wdGlvbjsgICBcbiAgfVxuXG4gIHVwZGF0ZU9wdGlvbnNXaXRoRGVzY3JpcHRpb24oZWxlbWVudCA6IEVsZW1lbnRCYXNlLCAkb3B0aW9uVmFsdWVzRGVzY3JpcHRpb24pIHtcbiAgICBlbGVtZW50Lm9wdGlvbnNWYWx1ZXMuZm9yRWFjaCggKG9wdGlvblZhbHVlKSA9PiB7IFxuICAgICAgbGV0IGNvcnJlc3BvbmRpbmdPcHRpb25WYWx1ZXdpdGhEZXNjcmlwdGlvbiA9ICRvcHRpb25WYWx1ZXNEZXNjcmlwdGlvbi5maWx0ZXIoIChvYmplY3QpID0+IG9iamVjdC5jYXRlZ29yeUlkID09IG9wdGlvblZhbHVlLm9wdGlvbklkKVswXTtcbiAgICAgIGlmICghY29ycmVzcG9uZGluZ09wdGlvblZhbHVld2l0aERlc2NyaXB0aW9uKSByZXR1cm47XG4gICAgICBvcHRpb25WYWx1ZS5kZXNjcmlwdGlvbiA9IGNvcnJlc3BvbmRpbmdPcHRpb25WYWx1ZXdpdGhEZXNjcmlwdGlvbi5kZXNjcmlwdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZU9wdGlvbnNUcmVlKGVsZW1lbnQgOiBFbGVtZW50QmFzZSlcbiAge1xuICAgIGxldCBtYWluQ2F0ZWdvcnkgPSBBcHAudGF4b25vbXlNb2R1bGUudGF4b25vbXk7XG4gICAgZWxlbWVudC5vcHRpb25UcmVlID0gdGhpcy5yZWN1c2l2ZWx5Q3JlYXRlT3B0aW9uVHJlZShlbGVtZW50LCBtYWluQ2F0ZWdvcnksIG5ldyBPcHRpb25WYWx1ZSh7fSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWN1c2l2ZWx5Q3JlYXRlT3B0aW9uVHJlZShlbGVtZW50IDogRWxlbWVudEJhc2UsIGNhdGVnb3J5IDogQ2F0ZWdvcnksIG9wdGlvblZhbHVlIDogT3B0aW9uVmFsdWUpXG4gIHtcbiAgICBsZXQgY2F0ZWdvcnlWYWx1ZSA9IG5ldyBDYXRlZ29yeVZhbHVlKGNhdGVnb3J5KTtcblxuICAgIGZvcihsZXQgb3B0aW9uIG9mIGNhdGVnb3J5Lm9wdGlvbnMpXG4gICAgeyAgICAgIFxuICAgICAgbGV0IGNoaWxkT3B0aW9uVmFsdWUgPSB0aGlzLmdldEVsZW1lbnRPcHRpb25WYWx1ZUNvcnJlc3BvbmRpbmdUb09wdGlvbklkKGVsZW1lbnQsIG9wdGlvbi5pZCk7XG4gICAgICBcbiAgICAgIGlmIChjaGlsZE9wdGlvblZhbHVlKVxuICAgICAge1xuICAgICAgICBjYXRlZ29yeVZhbHVlLmFkZE9wdGlvblZhbHVlKGNoaWxkT3B0aW9uVmFsdWUpO1xuICAgICAgICBmb3IobGV0IHN1YmNhdGVnb3J5IG9mIG9wdGlvbi5zdWJjYXRlZ29yaWVzKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5yZWN1c2l2ZWx5Q3JlYXRlT3B0aW9uVHJlZShlbGVtZW50LCBzdWJjYXRlZ29yeSwgY2hpbGRPcHRpb25WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gICAgICBcbiAgICB9XG5cbiAgICBpZiAoY2F0ZWdvcnlWYWx1ZS5jaGlsZHJlbi5sZW5ndGggPiAwKVxuICAgIHtcbiAgICAgIGNhdGVnb3J5VmFsdWUuY2hpbGRyZW4uc29ydCggKGEsYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgb3B0aW9uVmFsdWUuYWRkQ2F0ZWdvcnlWYWx1ZShjYXRlZ29yeVZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uVmFsdWU7IFxuICB9ICBcblxuICBwcml2YXRlIGdldEVsZW1lbnRPcHRpb25WYWx1ZUNvcnJlc3BvbmRpbmdUb09wdGlvbklkKGVsZW1lbnQgOiBFbGVtZW50QmFzZSwgJG9wdGlvbklkIDogbnVtYmVyKSA6IE9wdGlvblZhbHVlXG4gIHtcbiAgICBsZXQgaW5kZXggPSBlbGVtZW50Lm9wdGlvbnNWYWx1ZXMubWFwKCh2YWx1ZSkgPT4gdmFsdWUub3B0aW9uSWQpLmluZGV4T2YoJG9wdGlvbklkLnRvU3RyaW5nKCkpO1xuICAgIGlmIChpbmRleCA9PSAtMSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGVsZW1lbnQub3B0aW9uc1ZhbHVlc1tpbmRleF07XG4gIH1cblxuICAvLyBsb29rIGZvciBtaXNzaW5nIHBhcmVudCBvcHRpb25zIHZhbHVlcy4gaWYgYW4gZWxlbWVudCBjb250YWluc1xuICAvLyBvbmx5IHRoZSBkZWVwZXN0IG9wdGlvbiB2YWx1ZSwgd2UgYWRkIGFsbCB0aGUgcGFyZW50cyBvcHRpb25zXG4gIC8vIG9mIHRob3NlIGRlZXBlc3Qgb3B0aW9ucyBzbyBmaWx0ZXJzIGNhbiB3b3JrcyBwcm9wZXJseVxuICBwcml2YXRlIGxvb2tmb3JNaXNzaW5nUGFyZW50c09wdGlvbihlbGVtZW50IDogRWxlbWVudEJhc2UpXG4gIHtcbiAgICBsZXQgb3B0aW9uVmFsdWVzSWRzID0gZWxlbWVudC5vcHRpb25zVmFsdWVzLm1hcCggKGVsKSA9PiBlbC5vcHRpb25JZCk7XG4gICAgZm9yKGxldCBvcHRpb25WYWx1ZSBvZiBlbGVtZW50Lm9wdGlvbnNWYWx1ZXMpXG4gICAgICBmb3IgKGxldCBwYXJlbnRPcHRpb25JZCBvZiBvcHRpb25WYWx1ZS5vcHRpb24ucGFyZW50T3B0aW9uSWRzKSAgICAgIFxuICAgICAgICBpZiAob3B0aW9uVmFsdWVzSWRzLmluZGV4T2YocGFyZW50T3B0aW9uSWQudG9TdHJpbmcoKSkgPT0gLTEpXG4gICAgICAgIHtcbiAgICAgICAgICBsZXQgbmV3T3B0aW9uID0gdGhpcy5jcmVhdGVPcHRpb25WYWx1ZUZvckVsZW1lbnQocGFyZW50T3B0aW9uSWQsIDAsIGVsZW1lbnQpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiTWlzc2luZyBvcHRpb25cIiwgbmV3T3B0aW9uLm9wdGlvbi5uYW1lU2hvcnQsIGVsZW1lbnQubmFtZSk7XG4gICAgICAgICAgb3B0aW9uVmFsdWVzSWRzLnB1c2gocGFyZW50T3B0aW9uSWQpOyBcbiAgICAgICAgfSBcbiAgfVxuXG4gIHVwZGF0ZU9wdGlvblZhbHVlQ29sb3IoZWxlbWVudCA6IEVsZW1lbnQsICRvcHRpb25WYWx1ZSA6IE9wdGlvblZhbHVlKVxuICB7XG4gICAgaWYgKCEkb3B0aW9uVmFsdWUpIHJldHVybjtcbiAgICAvLyBjb25zb2xlLmxvZyhcInVwZGF0ZU9wdGlvblZhbHVlXCIsICRvcHRpb25WYWx1ZS5vcHRpb24ubmFtZSk7XG4gICAgaWYgKCRvcHRpb25WYWx1ZS5vcHRpb24udXNlQ29sb3JGb3JNYXJrZXIpXG4gICAge1xuICAgICAgJG9wdGlvblZhbHVlLmNvbG9yT3B0aW9uSWQgPSAkb3B0aW9uVmFsdWUub3B0aW9uSWQ7XG4gICAgfSAgICBcbiAgICBlbHNlIFxuICAgIHtcbiAgICAgIGxldCBvcHRpb24gOiBPcHRpb247XG4gICAgICBsZXQgY2F0ZWdvcnkgOiBDYXRlZ29yeTtcbiAgICAgIGxldCBjb2xvcklkIDogbnVtYmVyID0gbnVsbDtcblxuICAgICAgbGV0IHNpYmxpbmdzT3B0aW9uc0ZvckNvbG9yaW5nIDogT3B0aW9uVmFsdWVbXSA9IGVsZW1lbnQuZ2V0Q3Vyck9wdGlvbnNWYWx1ZXMoKS5maWx0ZXIoIFxuICAgICAgICAob3B0aW9uVmFsdWUpID0+IFxuICAgICAgICAgIG9wdGlvblZhbHVlLmlzRmlsbGVkQnlGaWx0ZXJzIFxuICAgICAgICAgICYmIG9wdGlvblZhbHVlLm9wdGlvbi51c2VDb2xvckZvck1hcmtlclxuICAgICAgICAgICYmIG9wdGlvblZhbHVlLm9wdGlvbi5vd25lcklkICE9PSAkb3B0aW9uVmFsdWUub3B0aW9uLm93bmVySWQgXG4gICAgICAgICAgJiYgb3B0aW9uVmFsdWUuY2F0ZWdvcnlPd25lci5vd25lcklkID09ICRvcHRpb25WYWx1ZS5jYXRlZ29yeU93bmVyLm93bmVySWRcbiAgICAgICk7XG5cbiAgICAgIC8vY29uc29sZS5sb2coXCJzaWJsaW5nc09wdGlvbnNGb3JDb2xvcmluZ1wiLCBzaWJsaW5nc09wdGlvbnNGb3JDb2xvcmluZy5tYXAoIChvcCkgPT4gb3Aub3B0aW9uLm5hbWUpKTtcbiAgICAgIGlmIChzaWJsaW5nc09wdGlvbnNGb3JDb2xvcmluZy5sZW5ndGggPiAwKVxuICAgICAge1xuICAgICAgICBvcHRpb24gPSA8T3B0aW9uPiBzaWJsaW5nc09wdGlvbnNGb3JDb2xvcmluZy5zaGlmdCgpLm9wdGlvbjtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIi0+IHNpYmxpbmcgZm91bmQgOiBcIiwgb3B0aW9uLm5hbWUpO1xuICAgICAgICBjb2xvcklkID0gb3B0aW9uLmlkO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBvcHRpb24gPSAkb3B0aW9uVmFsdWUub3B0aW9uO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhvcHRpb24ubmFtZSwgXCJubyBzaWJsaW5ncywgbG9va2luZyBmb3IgcGFyZW50XCIpO1xuICAgICAgICB3aGlsZShjb2xvcklkID09IG51bGwgJiYgb3B0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgY2F0ZWdvcnkgPSA8Q2F0ZWdvcnk+IG9wdGlvbi5nZXRPd25lcigpO1xuICAgICAgICAgIGlmIChjYXRlZ29yeSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvcHRpb24gPSA8T3B0aW9uPiBjYXRlZ29yeS5nZXRPd25lcigpO1xuICAgICAgICAgICAgaWYgKCFvcHRpb24pIGJyZWFrOyAgICAgXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIiAgLT4gcGFyZW50IG9wdGlvblwiICsgb3B0aW9uLm5hbWUgKyBcIiB1c2Vjb2xvckZvck1hcmtlclwiLCBvcHRpb24udXNlQ29sb3JGb3JNYXJrZXIpO1xuICAgICAgICAgICAgY29sb3JJZCA9IG9wdGlvbi51c2VDb2xvckZvck1hcmtlciA/IG9wdGlvbi5pZCA6IG51bGw7XG4gICAgICAgICAgfSAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAkb3B0aW9uVmFsdWUuY29sb3JPcHRpb25JZCA9IGNvbG9ySWQ7XG4gICAgfVxuICB9XG59IiwiaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvZXZlbnQuY2xhc3NcIjtcbmltcG9ydCB7IHNsdWdpZnksIHBhcnNlVXJpSWQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50c0NvbnZlcnRlZFxueyBcbiAgbmV3RWxlbWVudHNMZW5ndGggOiBudW1iZXI7XG4gIGVsZW1lbnRzVXBkYXRlZExlbmd0aCA6IG51bWJlcjtcbiAgbmV3RWxlbWVudHMgOiBFbGVtZW50W107XG4gIGVsZW1lbnRzQ29udmVydGVkIDogRWxlbWVudFtdXG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50c0pzb25Nb2R1bGVcbntcbiAgZWxlbWVudHNDcmVhdGVkQ291bnQgOiBudW1iZXIgPSAwO1xuICBvbk5ld3NFbGVtZW50c0NvbnZlcnRlZCA9IG5ldyBFdmVudDxFbGVtZW50W10+KCk7XG5cbiAgY29udmVydEpzb25FbGVtZW50cyhlbGVtZW50TGlzdCA6IGFueVtdLCBjaGVja0lmQWxyZWFkeUV4aXN0ID0gdHJ1ZSwgaXNGdWxsUmVwcmVzZW50YXRpb24gOiBib29sZWFuID0gdHJ1ZSkgXG4gIHtcbiAgICBpZiAoIWVsZW1lbnRMaXN0KSByZXR1cm4geyBcbiAgICAgIG5ld0VsZW1lbnRzTGVuZ3RoIDogW10sIFxuICAgICAgZWxlbWVudHNVcGRhdGVkTGVuZ3RoIDogMCwgXG4gICAgICBuZXdFbGVtZW50czogW10sIFxuICAgICAgZWxlbWVudHNDb252ZXJ0ZWQ6IFtdLCBcbiAgICB9O1xuXG4gICAgbGV0IGVsZW1lbnQgOiBFbGVtZW50LCBlbGVtZW50SnNvbjtcbiAgICBsZXQgbmV3RWxlbWVudHMgOiBFbGVtZW50W10gPSBbXTtcbiAgICBsZXQgZWxlbWVudHNDb252ZXJ0ZWQgOiBFbGVtZW50W10gPSBbXTtcbiAgICBsZXQgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBcbiAgICB0aGlzLmNoZWtzSWRzQW5kQ3JlYXRlT25lc0lmTmVlZGVkKGVsZW1lbnRMaXN0KTtcbiAgICBcbiAgICBsZXQgbmV3RWxlbWVudHNKc29uID0gZWxlbWVudExpc3QuZmlsdGVyKChvYmopID0+IEFwcC5lbGVtZW50c01vZHVsZS5ldmVyeUVsZW1lbnRzSWQuaW5kZXhPZihvYmouaWQpIDwgMCApO1xuICAgIGxldCBlbGVtZW50c1RvVXBkYXRlSnNvbiA9IFtdO1xuICAgIGlmIChpc0Z1bGxSZXByZXNlbnRhdGlvbilcbiAgICB7ICAgICAgXG4gICAgICBlbGVtZW50c1RvVXBkYXRlSnNvbiA9IGVsZW1lbnRMaXN0LmZpbHRlcigob2JqKSA9PiBBcHAuZWxlbWVudHNNb2R1bGUuZXZlcnlFbGVtZW50c0lkLmluZGV4T2Yob2JqLmlkKSA+PSAwICk7XG4gICAgICBsZXQgaiA9IGVsZW1lbnRzVG9VcGRhdGVKc29uLmxlbmd0aDtcbiAgICAgIHdoaWxlKGotLSlcbiAgICAgIHtcbiAgICAgICAgZWxlbWVudEpzb24gPSBlbGVtZW50c1RvVXBkYXRlSnNvbltqXTtcbiAgICAgICAgZWxlbWVudCA9IEFwcC5lbGVtZW50QnlJZChlbGVtZW50SnNvbi5pZCk7XG4gICAgICAgIGVsZW1lbnQudXBkYXRlV2l0aEpzb24oZWxlbWVudEpzb24pO1xuICAgICAgICBlbGVtZW50c0NvbnZlcnRlZC5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpID0gbmV3RWxlbWVudHNKc29uLmxlbmd0aDtcbiAgICB3aGlsZShpLS0pXG4gICAge1xuICAgICAgZWxlbWVudEpzb24gPSBuZXdFbGVtZW50c0pzb25baV07XG4gICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoZWxlbWVudEpzb24pO1xuICAgICAgZWxlbWVudC5pbml0aWFsaXplKCk7XG4gICAgICBuZXdFbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGVsZW1lbnRzQ29udmVydGVkID0gZWxlbWVudHNDb252ZXJ0ZWQuY29uY2F0KG5ld0VsZW1lbnRzKTsgICAgXG5cbiAgICBsZXQgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgLy9jb25zb2xlLmxvZyhcIkFkZEpzb25FbGVtZW50cyBpbiBcIiArIChlbmQtc3RhcnQpICsgXCIgbXNcIiwgZWxlbWVudEpzb24pOyAgXG5cbiAgICB0aGlzLm9uTmV3c0VsZW1lbnRzQ29udmVydGVkLmVtaXQobmV3RWxlbWVudHMpO1xuXG4gICAgcmV0dXJuIHsgXG4gICAgICBuZXdFbGVtZW50c0xlbmd0aCA6IG5ld0VsZW1lbnRzSnNvbi5sZW5ndGgsIFxuICAgICAgZWxlbWVudHNVcGRhdGVkTGVuZ3RoIDogZWxlbWVudHNUb1VwZGF0ZUpzb24ubGVuZ3RoLCBcbiAgICAgIG5ld0VsZW1lbnRzOiBuZXdFbGVtZW50cywgXG4gICAgICBlbGVtZW50c0NvbnZlcnRlZDogZWxlbWVudHNDb252ZXJ0ZWRcbiAgICB9O1xuICB9O1xuXG4gIGxvYWRMb2NhbEVsZW1lbnRzKClcbiAge1xuICAgIGlmICghQXBwLmNvbmZpZy5kYXRhLnJldHJpZXZlRWxlbWVudHNCeUFwaSlcbiAgICB7XG4gICAgICBsZXQgZWxlbWVudHMgPSBBcHAuY29uZmlnLmRhdGEuZWxlbWVudHM7XG4gICAgICBsZXQgZWxlbWVudEpzb25BcnJheSA9IGVsZW1lbnRzLmxlbmd0aCA/IGVsZW1lbnRzIDogZWxlbWVudHMuZGF0YTtcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmNvbnZlcnRKc29uRWxlbWVudHMoZWxlbWVudEpzb25BcnJheSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBBcHAuYWpheE1vZHVsZS5hbGxFbGVtZW50c1JlY2VpdmVkID0gdHJ1ZTtcbiAgICAgIGlmICghQXBwLmNvbmZpZy5tYXAuZGVmYXVsdEJvdW5kc1Byb3ZpZGVkICYmICFBcHAuaGlzdG9yeVN0YXRlTWFuYWdlci5sYXN0SGlzdG9yeVN0YXRlLnZpZXdwb3J0KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZml0IHRvIGVsZW1lbnRzIGJvdW5kc1wiKTtcbiAgICAgICAgQXBwLm1hcENvbXBvbmVudC5maXRFbGVtZW50c0JvdW5kcyhyZXN1bHQuZWxlbWVudHNDb252ZXJ0ZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpeGluZyBtaXNzaW5nIElkcywgb3IgY29udmVydCBVUkkgaWRzIGFzIHN0YW5kYXJkIElkc1xuICBjaGVrc0lkc0FuZENyZWF0ZU9uZXNJZk5lZWRlZChlbGVtZW50TGlzdClcbiAge1xuICAgIGVsZW1lbnRMaXN0LmZvckVhY2goIChlLCBpbmRleCkgPT4gIHtcbiAgICAgIGxldCBpZCA9IGVbMF0gfHwgZS5pZCB8fCBlW1wiQGlkXCJdIHx8IGUuY29tcGFjdEpzb25bMF07IC8vIGluIGNvbXBhY3Qgd2F5LCBpZCBpcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheVxuICAgICAgaWYgKCFpZCB8fCB0eXBlb2YgaWQgIT0gXCJzdHJpbmdcIikgaWQgPSBcImdlbmVyYXRlZFwiICsgdGhpcy5lbGVtZW50c0NyZWF0ZWRDb3VudCsrO1xuICAgICAgZWxzZSBpZCA9IHBhcnNlVXJpSWQoaWQpO1xuICAgICAgZS5pZCA9IGlkO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMTItMTNcbiAqL1xuXG5pbXBvcnQgeyBBcHBNb2R1bGUsIEFwcFN0YXRlcywgQXBwTW9kZXMsIEFwcERhdGFUeXBlIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmRlY2xhcmUgdmFyICQ7XHRcblxuaW1wb3J0IHsgRXZlbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9ldmVudC5jbGFzc1wiO1xuaW1wb3J0IHsgRWxlbWVudCwgRWxlbWVudFN0YXR1cyB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50c1RvRGlzcGxheUNoYW5nZWRcbnsgXG5cdGVsZW1lbnRzVG9EaXNwbGF5IDogRWxlbWVudFtdO1xuXHRuZXdFbGVtZW50cyA6IEVsZW1lbnRbXTtcblx0ZWxlbWVudHNUb1JlbW92ZSA6IEVsZW1lbnRbXTtcbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRzTW9kdWxlXG57XG5cdG9uRWxlbWVudHNUb0Rpc3BsYXlDaGFuZ2VkID0gbmV3IEV2ZW50PEVsZW1lbnRzVG9EaXNwbGF5Q2hhbmdlZD4oKTtcblxuXHRwcml2YXRlIGV2ZXJ5RWxlbWVudHNfIDogRWxlbWVudFtdW10gPSBbXTtcblx0cHJpdmF0ZSBldmVyeUVsZW1lbnRzSWRfIDogc3RyaW5nW10gPSBbXTtcblx0XG5cdC8vIGN1cnJlbnQgdmlzaWJsZSBlbGVtZW50c1xuXHRwcml2YXRlIHZpc2libGVFbGVtZW50c18gOiBFbGVtZW50W11bXSA9IFtdO1xuXHRwcml2YXRlIHNlYXJjaFJlc3VsdEVsZW1lbnRzXyA6IEVsZW1lbnRbXSA9IFtdO1x0XG5cblx0Zmlyc3RFbGVtZW50c0hhdmVCZWVuZGlzcGxheWVkIDogYm9vbGVhbiA9IGZhbHNlO1x0XG5cblx0aW5pdGlhbGl6ZSgpXG5cdHtcblx0XHR0aGlzLmV2ZXJ5RWxlbWVudHNfWydhbGwnXSA9IFtdO1xuXHRcdHRoaXMudmlzaWJsZUVsZW1lbnRzX1snYWxsJ10gPSBbXTtcblx0XHRmb3IobGV0IG9wdGlvbiBvZiBBcHAudGF4b25vbXlNb2R1bGUuZ2V0TWFpbk9wdGlvbnMoKSlcblx0XHR7XG5cdFx0XHR0aGlzLmV2ZXJ5RWxlbWVudHNfW29wdGlvbi5pZF0gPSBbXTtcblx0XHRcdHRoaXMudmlzaWJsZUVsZW1lbnRzX1tvcHRpb24uaWRdID0gW107XG5cdFx0fVx0XG5cdH1cdFxuXG5cdGFkZEVsZW1lbnRzKG5ld0VsZW1lbnRzIDogRWxlbWVudFtdKVxuXHR7XG5cdFx0Zm9yKGxldCBlbGVtZW50IG9mIG5ld0VsZW1lbnRzKVxuXHRcdHtcblx0XHRcdGZvciAobGV0IG1haW5JZCBvZiBlbGVtZW50Lm1haW5PcHRpb25Pd25lcklkcylcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5ldmVyeUVsZW1lbnRzX1ttYWluSWRdLnB1c2goZWxlbWVudCk7XG5cdFx0XHR9XHRcdFx0XHRcblx0XHRcdHRoaXMuZXZlcnlFbGVtZW50c19bJ2FsbCddLnB1c2goZWxlbWVudCk7XG5cdFx0XHR0aGlzLmV2ZXJ5RWxlbWVudHNJZF8ucHVzaChlbGVtZW50LmlkKTtcblx0XHR9XHRcblxuXHRcdEFwcC5mYXZvcml0ZU1vZHVsZS5jaGVja0Nvb2tpZXMoKTtcdFxuXHRcdEFwcC5zdGFtcE1vZHVsZS5jaGVja0ZvckFkZGluZ1N0YW1wcyhuZXdFbGVtZW50cyk7XG5cdH1cdFxuXG5cdGNsZWFyQ3VycmVudHNFbGVtZW50KClcblx0e1xuXHRcdC8vY29uc29sZS5sb2coXCJjbGVhckN1cnJFbGVtZW50c1wiKTtcblx0XHRsZXQgdmlzaWJsZUVsZW1lbnRzID0gdGhpcy5jdXJyVmlzaWJsZUVsZW1lbnRzKCk7XG5cdFx0aWYgKCF2aXNpYmxlRWxlbWVudHMgfHwgIXZpc2libGVFbGVtZW50cy5sZW5ndGgpIHJldHVybjtcblx0XHRsZXQgbCA9IHZpc2libGVFbGVtZW50cy5sZW5ndGg7XG5cdFx0d2hpbGUobC0tKVxuXHRcdHtcblx0XHRcdHZpc2libGVFbGVtZW50c1tsXS5pc0Rpc3BsYXllZCA9IGZhbHNlO1xuXHRcdH1cblx0XHRsZXQgbWFya2VycyA9IHZpc2libGVFbGVtZW50cy5tYXAoIChlKSA9PiBlLm1hcmtlci5nZXRMZWFmbGV0TWFya2VyKCkpO1xuXHRcdEFwcC5tYXBDb21wb25lbnQucmVtb3ZlTWFya2VycyhtYXJrZXJzKTtcblxuXHRcdHRoaXMuY2xlYXJDdXJyVmlzaWJsZUVsZW1lbnRzKCk7XG5cdH1cdFxuXG5cdC8vIGNoZWNrIGVsZW1lbnRzIGluIGJvdW5kcyBhbmQgd2hvIGFyZSBub3QgZmlsdGVyZWRcblx0dXBkYXRlRWxlbWVudHNUb0Rpc3BsYXkoY2hlY2tJbkFsbEVsZW1lbnRzID0gdHJ1ZSwgZmlsdGVySGFzQ2hhbmdlZCA9IGZhbHNlKSBcblx0e1x0XG5cdFx0aWYgKEFwcC5tb2RlID09IEFwcE1vZGVzLk1hcCAmJiAhQXBwLm1hcENvbXBvbmVudC5pc01hcExvYWRlZCkgcmV0dXJuO1xuXG5cdFx0bGV0IGVsZW1lbnRzIDogRWxlbWVudFtdID0gW107XG5cblx0XHQvLyBHZXR0aW5nIHRoZSBlbGVtZW50IGFycmF5IHRvIHdvcmsgb25cblx0XHRpZiAoIChBcHAuc3RhdGUgPT0gQXBwU3RhdGVzLlNob3dFbGVtZW50QWxvbmUgfHwgQXBwLnN0YXRlID09IEFwcFN0YXRlcy5TaG93RGlyZWN0aW9ucyApICYmIEFwcC5tb2RlID09IEFwcE1vZGVzLk1hcCkgXG5cdFx0XHRlbGVtZW50cyA9IFtBcHAuREVBTW9kdWxlLmdldEVsZW1lbnQoKV07XHRcdFxuXHRcdGVsc2UgaWYgKEFwcC5kYXRhVHlwZSA9PSBBcHBEYXRhVHlwZS5BbGwpXG5cdFx0e1x0XHRcdFxuXHRcdFx0aWYgKGNoZWNrSW5BbGxFbGVtZW50cyB8fCB0aGlzLnZpc2libGVFbGVtZW50c18ubGVuZ3RoID09PSAwKSBcblx0XHRcdFx0XHRlbGVtZW50cyA9IHRoaXMuY3VyckV2ZXJ5RWxlbWVudHMoKTtcblx0XHRcdGVsc2UgZWxlbWVudHMgPSB0aGlzLmN1cnJWaXNpYmxlRWxlbWVudHMoKTtcblx0XHR9XG5cdFx0ZWxzZSBpZiAoQXBwLmRhdGFUeXBlID09IEFwcERhdGFUeXBlLlNlYXJjaFJlc3VsdHMpXG5cdFx0e1xuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLnNlYXJjaFJlc3VsdEVsZW1lbnRzXztcblx0XHR9XHRcdFxuXHRcdFxuXHRcdGlmICghZWxlbWVudHMpIHJldHVybjtcblxuXHRcdGxldCBpIDogbnVtYmVyLCBlbGVtZW50IDogRWxlbWVudDtcblxuXHQgXHRsZXQgbmV3RWxlbWVudHMgOiBFbGVtZW50W10gPSBbXTtcblx0IFx0bGV0IGVsZW1lbnRzVG9SZW1vdmUgOiBFbGVtZW50W10gPSBbXTtcdFx0XG5cdFx0XG5cdFx0aSA9IGVsZW1lbnRzLmxlbmd0aDtcblx0XHRsZXQgZmlsdGVyTW9kdWxlID0gQXBwLmZpbHRlck1vZHVsZTtcdFxuXHRcdGxldCBjdXJyQm91bmRzID0gQXBwLmJvdW5kc01vZHVsZS5leHRlbmRlZEJvdW5kcztcblx0XHRsZXQgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuXHRcdC8vIGNvbnNvbGUubG9nKFwidXBkYXRlRWxlbWVudHNUb0Rpc3BsYXkuIE5icmUgZWxlbWVudCDDoCB0cmFpdGVyIDogXCIgKyBpLCBjaGVja0luQWxsRWxlbWVudHMpO1xuXG5cdFx0d2hpbGUoaS0tKVxuXHRcdHtcblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcblxuXHRcdFx0aWYgKCFlbGVtZW50KSBicmVhaztcblxuXHRcdFx0bGV0IGVsZW1lbnRJbkJvdW5kcyA9IGZhbHNlO1xuXHRcdFx0aWYgKHRoaXMubm9OZWVkVG9DaGVja0JvdW5kcygpKSBlbGVtZW50SW5Cb3VuZHMgPSB0cnVlO1xuXHRcdFx0ZWxzZSBlbGVtZW50SW5Cb3VuZHMgPSBjdXJyQm91bmRzICYmIGVsZW1lbnQucG9zaXRpb24gJiYgY3VyckJvdW5kcy5jb250YWlucyhlbGVtZW50LnBvc2l0aW9uKTtcblxuXHRcdFx0aWYgKCBlbGVtZW50SW5Cb3VuZHMgJiYgZmlsdGVyTW9kdWxlLmNoZWNrSWZFbGVtZW50UGFzc0ZpbHRlcnMoZWxlbWVudCkpXG5cdFx0XHR7XG5cdFx0XHRcdGlmICghZWxlbWVudC5pc0Rpc3BsYXllZClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGVsZW1lbnQuaXNEaXNwbGF5ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuY3VyclZpc2libGVFbGVtZW50cygpLnB1c2goZWxlbWVudCk7XG5cdFx0XHRcdFx0bmV3RWxlbWVudHMucHVzaChlbGVtZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoZWxlbWVudC5pc0Rpc3BsYXllZCkgXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRlbGVtZW50LmlzRGlzcGxheWVkID0gZmFsc2U7XG5cdFx0XHRcdFx0ZWxlbWVudHNUb1JlbW92ZS5wdXNoKGVsZW1lbnQpO1xuXHRcdFx0XHRcdGxldCBpbmRleCA9IHRoaXMuY3VyclZpc2libGVFbGVtZW50cygpLmluZGV4T2YoZWxlbWVudCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4ID4gLTEpIHRoaXMuY3VyclZpc2libGVFbGVtZW50cygpLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgZW5kID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cdFx0bGV0IHRpbWUgPSBlbmQgLSBzdGFydDtcblxuXHRcdC8vd2luZG93LmNvbnNvbGUubG9nKFwiVXBkYXRlRWxlbWVudHNUb0Rpc3BsYXkgZW4gXCIgKyB0aW1lICsgXCIgbXNcIik7XG5cdFx0dGhpcy5vbkVsZW1lbnRzVG9EaXNwbGF5Q2hhbmdlZC5lbWl0KHtcblx0XHRcdGVsZW1lbnRzVG9EaXNwbGF5OiB0aGlzLmN1cnJWaXNpYmxlRWxlbWVudHMoKSwgXG5cdFx0XHRuZXdFbGVtZW50cyA6IG5ld0VsZW1lbnRzLCBcblx0XHRcdGVsZW1lbnRzVG9SZW1vdmUgOiBlbGVtZW50c1RvUmVtb3ZlXG5cdFx0fSk7XG5cblx0XHR0aGlzLnVwZGF0ZUVsZW1lbnRzSWNvbnMoZmlsdGVySGFzQ2hhbmdlZCk7XHRcdFxuXG5cdFx0Ly8gc3RyYW5nZSBidWcsIGF0IGluaXRpYWxpemF0aW9uLCBzb21lIGlzb2xhdGVkIG1hcmtlcnMgYXJlIG5vdCBkaXNwbGF5ZWRcblx0XHQvLyByZWZyZXNoaW5nIHRoZSBlbGVtZW50TW9kdWxlIHNvbHZlIHRoaXMuLi5cblx0XHRpZiAoIXRoaXMuZmlyc3RFbGVtZW50c0hhdmVCZWVuZGlzcGxheWVkICYmIHRoaXMuY3VyclZpc2libGVFbGVtZW50cygpICYmIHRoaXMuY3VyclZpc2libGVFbGVtZW50cygpLmxlbmd0aCA+IDApXHRcdFxuXHRcdHtcblx0XHRcdHRoaXMuZmlyc3RFbGVtZW50c0hhdmVCZWVuZGlzcGxheWVkID0gdHJ1ZTtcblx0XHRcdHNldFRpbWVvdXQoICgpID0+IHsgdGhpcy51cGRhdGVFbGVtZW50c1RvRGlzcGxheSh0cnVlKSB9LCAxMDApO1xuXHRcdH1cdFx0XG5cdH07XG5cblx0cHJpdmF0ZSBub05lZWRUb0NoZWNrQm91bmRzKClcblx0e1xuXHRcdHJldHVybiBBcHAubW9kZSA9PSBBcHBNb2Rlcy5MaXN0ICYmIFxuXHRcdFx0XHRcdChBcHAuZGF0YVR5cGUgIT0gQXBwRGF0YVR5cGUuQWxsIHx8IEFwcC5hamF4TW9kdWxlLmFsbEVsZW1lbnRzUmVjZWl2ZWQpO1xuXHR9XG5cblx0dXBkYXRlRWxlbWVudHNJY29ucyhzb21ldGhpbmdDaGFuZ2VkIDogYm9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cdFx0Ly9jb25zb2xlLmxvZyhcIlVwZGF0ZUN1cnJFbGVtZW50cyBzb21ldGhpbmdDaGFuZ2VkXCIsIHNvbWV0aGluZ0NoYW5nZWQpO1xuXHRcdGxldCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG5cdFx0bGV0IHZpc2libGVFbGVtZW50cyA9IHRoaXMuY3VyclZpc2libGVFbGVtZW50cygpO1xuXHRcdGlmICghdmlzaWJsZUVsZW1lbnRzIHx8ICF2aXNpYmxlRWxlbWVudHMubGVuZ3RoKSByZXR1cm47XG5cdFx0XG5cdFx0bGV0IGwgPSB2aXNpYmxlRWxlbWVudHMubGVuZ3RoO1xuXHRcdGxldCBlbGVtZW50IDogRWxlbWVudDtcblx0XHR3aGlsZShsLS0pXG5cdFx0e1xuXHRcdFx0ZWxlbWVudCA9IHZpc2libGVFbGVtZW50c1tsXTtcblx0XHRcdGlmIChzb21ldGhpbmdDaGFuZ2VkKSBlbGVtZW50Lm5lZWRUb0JlVXBkYXRlZFdoZW5TaG93biA9IHRydWU7XG5cblx0XHRcdC8vIGlmIGRvbU1hcmtlciBub3QgdmlzaWJsZSB0aGF0J3MgbWVhbiB0aGF0IG1hcmtlciBpcyBpbiBhIGNsdXN0ZXJcblx0XHRcdGlmIChlbGVtZW50Lm1hcmtlci5kb21NYXJrZXIoKS5pcygnOnZpc2libGUnKSkgZWxlbWVudC51cGRhdGUoKTtcblx0XHR9XG5cdFx0bGV0IGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXHRcdGxldCB0aW1lID0gZW5kIC0gc3RhcnQ7XG5cdFx0Ly93aW5kb3cuY29uc29sZS5sb2coXCJ1cGRhdGVFbGVtZW50c0ljb25zIFwiICsgdGltZSArIFwiIG1zXCIpO1xuXHR9XG5cblx0c2V0U2VhcmNoUmVzdWx0RWxlbWVudChlbGVtZW50cyA6IEVsZW1lbnRbXSkgeyB0aGlzLnNlYXJjaFJlc3VsdEVsZW1lbnRzXyA9IGVsZW1lbnRzOyB9XG5cdGdldFNlYXJjaEVsZW1lbnRzKCkgOiBFbGVtZW50W10geyByZXR1cm4gdGhpcy5zZWFyY2hSZXN1bHRFbGVtZW50c187IH1cblxuXHRnZXQgZXZlcnlFbGVtZW50cygpICAgICAgICB7IHJldHVybiB0aGlzLmV2ZXJ5RWxlbWVudHNfOyB9XG5cdGdldCBldmVyeUVsZW1lbnRzSWQoKSAgICAgIHsgcmV0dXJuIHRoaXMuZXZlcnlFbGVtZW50c0lkXzsgfVxuXHRnZXQgdmlzaWJsZUVsZW1lbnRzKCkgICAgICB7IHJldHVybiB0aGlzLnZpc2libGVFbGVtZW50c187IH1cblx0Z2V0IHNlYXJjaFJlc3VsdEVsZW1lbnRzKCkgeyByZXR1cm4gdGhpcy5zZWFyY2hSZXN1bHRFbGVtZW50c187IH1cblxuXHRjdXJyVmlzaWJsZUVsZW1lbnRzKCkgICAgICB7IHJldHVybiB0aGlzLnZpc2libGVFbGVtZW50c19bQXBwLmN1cnJNYWluSWRdOyB9XG5cdGN1cnJFdmVyeUVsZW1lbnRzKCkgICAgICAgIHsgcmV0dXJuIHRoaXMuZXZlcnlFbGVtZW50c19bQXBwLmN1cnJNYWluSWRdOyB9XG5cdHNldEN1cnJWaXNpYmxlRWxlbWVudHMoZWxlbWVudHMgOiBFbGVtZW50W10pIHsgdGhpcy52aXNpYmxlRWxlbWVudHNfW0FwcC5jdXJyTWFpbklkXSA9IGVsZW1lbnRzOyB9XG5cblx0cHJpdmF0ZSBjbGVhckN1cnJWaXNpYmxlRWxlbWVudHMoKSB7IHRoaXMudmlzaWJsZUVsZW1lbnRzX1tBcHAuY3Vyck1haW5JZF0gPSBbXTsgfVxuXG5cdGFsbEVsZW1lbnRzKCkgeyByZXR1cm4gdGhpcy5ldmVyeUVsZW1lbnRzX1snYWxsJ107IH1cblxuXHRnZXRFbGVtZW50QnlJZChlbGVtZW50SWQpIDogRWxlbWVudFxuXHR7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmFsbEVsZW1lbnRzKCkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLmFsbEVsZW1lbnRzKClbaV0uaWQgPT0gZWxlbWVudElkKSByZXR1cm4gdGhpcy5hbGxFbGVtZW50cygpW2ldO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcbn0iLCJpbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgKiBhcyBDb29raWVzIGZyb20gXCIuLi8uLi91dGlscy9jb29raWVzXCI7XG5cbmV4cG9ydCBjbGFzcyBGYXZvcml0ZU1vZHVsZVxue1xuICBmYXZvcml0ZUlkc18gPSBbXTtcblxuICBjb25zdHJ1Y3RvcigpXG4gIHtcbiAgICBsZXQgY29va2llcyA9IENvb2tpZXMucmVhZENvb2tpZSgnRmF2b3JpdGVJZHMnKTtcbiAgICB0aGlzLmZhdm9yaXRlSWRzXyA9IGNvb2tpZXMgIT09IG51bGwgPyBKU09OLnBhcnNlKGNvb2tpZXMpIDogW107ICBcbiAgfVxuXG4gIGNoZWNrQ29va2llcygpXG4gIHtcbiAgICBpZiAoQXBwLmNvbmZpZy5pc0ZlYXR1cmVBY3RpdmF0ZWQoJ2Zhdm9yaXRlJykpXG4gICAge1xuICAgICAgZm9yKGxldCBqID0gMDsgaiA8IHRoaXMuZmF2b3JpdGVJZHNfLmxlbmd0aDsgaisrKVxuICAgICAge1xuICAgICAgICB0aGlzLmFkZEZhdm9yaXRlKHRoaXMuZmF2b3JpdGVJZHNfW2pdLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGFkZEZhdm9yaXRlKGZhdm9yaXRlSWQgOiBzdHJpbmcsIG1vZGlmeUNvb2tpZXMgPSB0cnVlKVxuICB7XG4gICAgbGV0IGVsZW1lbnQgPSBBcHAuZWxlbWVudEJ5SWQoZmF2b3JpdGVJZCk7XG4gICAgaWYgKGVsZW1lbnQgPT09IG51bGwpIHJldHVybjtcbiAgICBcbiAgICBlbGVtZW50LmlzRmF2b3JpdGUgPSB0cnVlO1xuICAgIFxuICAgIGlmIChtb2RpZnlDb29raWVzKVxuICAgIHtcbiAgICAgIHRoaXMuZmF2b3JpdGVJZHNfLnB1c2goZmF2b3JpdGVJZCk7XG4gICAgICBDb29raWVzLmNyZWF0ZUNvb2tpZSgnRmF2b3JpdGVJZHMnLEpTT04uc3RyaW5naWZ5KHRoaXMuZmF2b3JpdGVJZHNfKSk7ICAgIFxuICAgIH1cbiAgfTtcblxuICByZW1vdmVGYXZvcml0ZShmYXZvcml0ZUlkIDogc3RyaW5nLCBtb2RpZnlDb29raWVzID0gdHJ1ZSlcbiAge1xuICAgIGxldCBlbGVtZW50ID0gQXBwLmVsZW1lbnRCeUlkKGZhdm9yaXRlSWQpO1xuICAgIGlmIChlbGVtZW50ICE9PSBudWxsKSBlbGVtZW50LmlzRmF2b3JpdGUgPSBmYWxzZTtcbiAgICBcbiAgICBpZiAobW9kaWZ5Q29va2llcylcbiAgICB7XG4gICAgICBsZXQgaW5kZXggPSB0aGlzLmZhdm9yaXRlSWRzXy5pbmRleE9mKGZhdm9yaXRlSWQpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHRoaXMuZmF2b3JpdGVJZHNfLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgIENvb2tpZXMuY3JlYXRlQ29va2llKCdGYXZvcml0ZUlkcycsSlNPTi5zdHJpbmdpZnkodGhpcy5mYXZvcml0ZUlkc18pKTtcbiAgICB9XG4gIH07XG59IiwiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgU3RhbXAsIEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cbmV4cG9ydCBjbGFzcyBTdGFtcE1vZHVsZVxue1xuICBhbGxvd2VkU3RhbXBzIDogU3RhbXBbXSA9IFtdO1xuXG4gIGRlZmF1bHRJY29ucyA9IFsgJ2dvZ28taWNvbi1zdGFtcC0xJywgJ2dvZ28taWNvbi1zdGFtcC0yJ107XG4gIGRlZmF1bHRJY29uID0gJ2dvZ28taWNvbi1zdGFtcC0xJztcblxuICBjb25zdHJ1Y3RvcigkY29uZmlnKVxuICB7XG4gICAgaWYgKCRjb25maWcuZmVhdHVyZXMuc3RhbXAub3B0aW9ucy5hbGxvd2VkU3RhbXBzKVxuICAgICAgZm9yIChsZXQgc3RhbXAgb2YgJGNvbmZpZy5mZWF0dXJlcy5zdGFtcC5vcHRpb25zLmFsbG93ZWRTdGFtcHMpXG4gICAgICB7XG4gICAgICAgIHN0YW1wLmljb24gPSBzdGFtcC5pY29uIHx8IHRoaXMuZ2V0RGVmYXVsdEljb24oKTtcbiAgICAgICAgdGhpcy5hbGxvd2VkU3RhbXBzLnB1c2gobmV3IFN0YW1wKHN0YW1wKSk7XG4gICAgICB9XG4gIH1cblxuICBjaGVja0ZvckFkZGluZ1N0YW1wcyhlbGVtZW50c0FycmF5IDogRWxlbWVudFtdKSAgXG4gIHtcbiAgICBsZXQgZWxlbWVudHNJZHMgPSBlbGVtZW50c0FycmF5Lm1hcCggKGVsKSA9PiBlbC5pZCk7XG4gICAgXG4gICAgZm9yKGxldCBzdGFtcCBvZiB0aGlzLmFsbG93ZWRTdGFtcHMpXG4gICAge1xuICAgICAgbGV0IGVsZW1lbnRzVG9TdGFtcCA9IGVsZW1lbnRzQXJyYXkuZmlsdGVyKCAoZWwpID0+IHN0YW1wLmVsZW1lbnRJZHMuaW5kZXhPZihlbC5pZCkgPiAtMSk7XG4gICAgICBmb3IobGV0IGVsZW1lbnQgb2YgZWxlbWVudHNUb1N0YW1wKSBlbGVtZW50LnN0YW1wcy5wdXNoKHN0YW1wLmlkKVxuICAgIH1cbiAgfVxuXG4gIGdldEFsbG93ZWRTdGFtcEZvckVsZW1lbnQoZWxlbWVudCA6IEVsZW1lbnQpIDogU3RhbXBbXVxuICB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dlZFN0YW1wcy5maWx0ZXIoIChzdGFtcCkgPT4gZWxlbWVudC5zdGFtcHMuaW5kZXhPZihzdGFtcC5pZCkgPiAtMSk7XG4gIH1cblxuICBnZXREZWZhdWx0SWNvbigpIDogc3RyaW5nXG4gIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0SWNvbnMuc2hpZnQoKSB8fCB0aGlzLmRlZmF1bHRJY29uO1xuICB9XG59IiwiZGVjbGFyZSBsZXQgR2VvY29kZXJKUztcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi9nb2dvY2FydG9cIjtcbmRlY2xhcmUgdmFyIEwsICQ7XG5cbmltcG9ydCB7IEFwcE1vZHVsZSB9IGZyb20gXCIuLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBzbHVnaWZ5IH0gZnJvbSBcIi4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5pbXBvcnQgeyBWaWV3UG9ydCwgRXZlbnQgfSBmcm9tIFwiLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cbi8qKiByZXN1bHRzIHR5cGUgcmV0dXJuZWQgYnkgZ2VvY29kZXJKUyAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW9jb2RlUmVzdWx0XG57XG5cdGdldENvb3JkaW5hdGVzKCkgOiBMLkxhdExuZ1R1cGxlO1xuXHRnZXRGb3JtYXR0ZWRBZGRyZXNzKCkgOiBzdHJpbmc7XHRcblx0Z2V0Qm91bmRzKCkgOiBSYXdCb3VuZHM7XG59XG5cbi8vIHNvdXRoLCB3ZXN0LCBub3J0aCwgZWFzdFxuZXhwb3J0IHR5cGUgUmF3Qm91bmRzID0gW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbi8qKlxuKiBJbnRlcmZhY2UgYmV0d2VlbiBHZW9jb2RlckpTIGFuZCB0aGUgQXBwXG4qIEFsbG93IHRvIGNoYW5nZSBnZW9jb2RlIHRlY2hub2xvZ3kgd2l0aG91dCBjaGFuZ2luZyBjb2RlIGluIHRoZSBBcHBcbiovXG5leHBvcnQgY2xhc3MgR2VvY29kZXJNb2R1bGVcbntcblx0Z2VvY29kZXIgOiBhbnkgPSBudWxsO1xuXHRsYXN0QWRkcmVzc1JlcXVlc3QgOiBzdHJpbmcgPSAnJztcblx0bGFzdFJlc3VsdHMgOiBHZW9jb2RlUmVzdWx0W10gPSBudWxsO1xuXHRsYXN0UmVzdWx0Qm91bmRzIDogTC5MYXRMbmdCb3VuZHMgPSBudWxsO1xuXG5cdHByaXZhdGUgbG9jYXRpb24gOiBMLkxhdExuZyA9IG51bGw7XG5cblx0b25HZW9jb2RlUmVzdWx0ID0gbmV3IEV2ZW50PGFueT4oKTtcblx0b25HZW9sb2NhbGl6YXRpb25SZXN1bHQgPSBuZXcgRXZlbnQ8Vmlld1BvcnQ+KCk7XG5cblx0Z2V0TG9jYXRpb24oKSA6IEwuTGF0TG5nXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5sb2NhdGlvbjtcdFx0XG5cdH1cblxuXHRnZXRCb3VuZHMoKSA6IEwuTGF0TG5nQm91bmRzXG5cdHtcblx0XHRpZiAoIXRoaXMubGFzdFJlc3VsdEJvdW5kcykgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIHRoaXMubGFzdFJlc3VsdEJvdW5kcztcblx0fVx0XG5cblx0Z2V0TG9jYXRpb25TbHVnKCkgOiBzdHJpbmcgeyByZXR1cm4gc2x1Z2lmeSh0aGlzLmxhc3RBZGRyZXNzUmVxdWVzdCk7IH1cblx0Z2V0TG9jYXRpb25BZGRyZXNzKCkgOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5sYXN0QWRkcmVzc1JlcXVlc3Q7IH1cblx0c2V0TG9jYXRpb25BZGRyZXNzKCRhZGRyZXNzIDogc3RyaW5nKSB7IHRoaXMubGFzdEFkZHJlc3NSZXF1ZXN0ID0gJGFkZHJlc3M7IH1cblxuXHRwcml2YXRlIGxhdExuZ0JvdW5kc0Zyb21SYXdCb3VuZHMocmF3Ym91bmRzIDogUmF3Qm91bmRzKSA6IEwuTGF0TG5nQm91bmRzXG5cdHtcblx0XHRsZXQgY29ybmVyMSA9IEwubGF0TG5nKHJhd2JvdW5kc1swXSwgcmF3Ym91bmRzWzFdKTtcblx0XHRsZXQgY29ybmVyMiA9IEwubGF0TG5nKHJhd2JvdW5kc1syXSwgcmF3Ym91bmRzWzNdKTtcblx0XHRyZXR1cm4gTC5sYXRMbmdCb3VuZHMoY29ybmVyMSwgY29ybmVyMik7XG5cdH1cblxuXHRjb25zdHJ1Y3RvcigpXG5cdHtcblx0XHR0aGlzLmdlb2NvZGVyID0gR2VvY29kZXJKUy5jcmVhdGVHZW9jb2Rlcih7ICdwcm92aWRlcic6ICdvcGVuc3RyZWV0bWFwJywgJ3VzZVNTTCc6dHJ1ZX0pO1xuXHRcdC8vdGhpcy5nZW9jb2RlciA9IEdlb2NvZGVySlMuY3JlYXRlR2VvY29kZXIoeydwcm92aWRlcic6ICdnb29nbGUnLCAndXNlU1NMJzp0cnVlIH0pO1xuXHR9XG5cblx0Z2VvY29kZUFkZHJlc3MoIGFkZHJlc3MsIGNhbGxiYWNrQ29tcGxldGU/LCBjYWxsYmFja0ZhaWw/ICkgXG5cdHtcblx0XHQvLyBjb25zb2xlLmxvZyhcImdlb2NvZGUgYWRkcmVzcyA6IFwiLCBhZGRyZXNzKTtcblx0XHR0aGlzLmxhc3RBZGRyZXNzUmVxdWVzdCA9IGFkZHJlc3M7XG5cblx0XHQvLyBpZiBubyBhZGRyZXNzLCB3ZSBzaG93IGZyYW5jZVxuXHRcdGlmIChhZGRyZXNzID09ICcnKVxuXHRcdHtcblx0XHRcdGNvbnNvbGUubG9nKFwiZGVmYXVsdCBsb2NhdGlvblwiKTtcblx0XHRcdHRoaXMubGFzdFJlc3VsdHMgPSBbXTtcblx0XHRcdHRoaXMubGFzdFJlc3VsdEJvdW5kcyA9IEFwcC5ib3VuZHNNb2R1bGUuZGVmYXVsdEJvdW5kcztcblxuXHRcdFx0dGhpcy5vbkdlb2NvZGVSZXN1bHQuZW1pdCgpO1xuXG5cdFx0XHQvLyBsZWF2ZSB0aW1lIGZvciBtYXAgdG8gbG9hZFxuXHRcdFx0aWYgKGNhbGxiYWNrQ29tcGxldGUpIHNldFRpbWVvdXQoICgpID0+IHsgY2FsbGJhY2tDb21wbGV0ZSh0aGlzLmxhc3RSZXN1bHRzKTsgfSwgMjAwKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIGZha2UgZ2VvY29kZXIgd2hlbiBubyBpbnRlcm5ldCBjb25uZXhpb25cblx0XHRcdGxldCBmYWtlID0gZmFsc2U7XG5cblx0XHRcdGlmICghZmFrZSlcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5nZW9jb2Rlci5nZW9jb2RlKCBhZGRyZXNzLCAocmVzdWx0cyA6IEdlb2NvZGVSZXN1bHRbXSkgPT5cblx0XHRcdFx0e1x0XHRcdFxuXHRcdFx0XHRcdGlmIChyZXN1bHRzICE9PSBudWxsICYmIHJlc3VsdHMubGVuZ3RoID4gMCkgXG5cdFx0XHRcdFx0e1x0XHRcdFx0XG5cdFx0XHRcdFx0XHR0aGlzLmxhc3RSZXN1bHRzID0gcmVzdWx0cztcblx0XHRcdFx0XHRcdHRoaXMubGFzdFJlc3VsdEJvdW5kcyA9IHRoaXMubGF0TG5nQm91bmRzRnJvbVJhd0JvdW5kcyh0aGlzLmxhc3RSZXN1bHRzWzBdLmdldEJvdW5kcygpKTtcblxuXHRcdFx0XHRcdFx0aWYgKHRoaXMubGFzdFJlc3VsdHMgJiYgdGhpcy5sYXN0UmVzdWx0c1swXSkgdGhpcy5sb2NhdGlvbiA9IEwubGF0TG5nKHRoaXMubGFzdFJlc3VsdHNbMF0uZ2V0Q29vcmRpbmF0ZXMoKSk7XG5cdFx0XHRcdFx0XHRlbHNlIGxvY2F0aW9uID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0dGhpcy5vbkdlb2NvZGVSZXN1bHQuZW1pdCgpO1xuXG5cdFx0XHRcdFx0XHRpZiAoY2FsbGJhY2tDb21wbGV0ZSkgY2FsbGJhY2tDb21wbGV0ZShyZXN1bHRzKTtcdFxuXHRcdFx0XHRcdH0gXHRcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrRmFpbCkgY2FsbGJhY2tGYWlsKCk7XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0bGV0IHJlc3VsdCA9IHtcblx0XHRcdFx0XHRib3VuZHM6IFsuMDY5MTg1LC0wLjY0MTQxNSw0NC4xODQ3MzUxLC0wLjQ2OTk4MzVdLFxuXHRcdFx0XHRcdGNpdHk6ICdMYWJyaXQnLFxuXHRcdFx0XHRcdGZvcm1hdHRlZEFkZHJlc3M6IFwiTGFicml0IDQwNDIwXCIsXG5cdFx0XHRcdFx0bGF0aXR1ZGU6NDQuMTA0OTU2Nyxcblx0XHRcdFx0XHRsb25naXR1ZGU6LTAuNTQ0NTI5Nixcblx0XHRcdFx0XHRwb3N0YWxfY29kZTpcIjQwNDIwXCIsXG5cdFx0XHRcdFx0cmVnaW9uOlwiTm91dmVsbGUtQXF1aXRhaW5lXCIsXG5cdFx0XHRcdFx0Z2V0Qm91bmRzKCkgeyByZXR1cm4gdGhpcy5ib3VuZHM7IH0sXG5cdFx0XHRcdFx0Z2V0Q29vcmRpbmF0ZXMoKSB7IHJldHVybiBbdGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGVdOyB9LFxuXHRcdFx0XHRcdGdldEZvcm1hdHRlZEFkZHJlc3MoKSB7IHJldHVybiB0aGlzLmZvcm1hdHRlZEFkZHJlc3M7IH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCByZXN1bHRzID0gW107XG5cdFx0XHRcdHJlc3VsdHMucHVzaChyZXN1bHQpO1xuXG5cdFx0XHRcdHRoaXMubGFzdFJlc3VsdHMgPSByZXN1bHRzO1xuXHRcdFx0XHR0aGlzLmxhc3RSZXN1bHRCb3VuZHMgPSB0aGlzLmxhdExuZ0JvdW5kc0Zyb21SYXdCb3VuZHModGhpcy5sYXN0UmVzdWx0c1swXS5nZXRCb3VuZHMoKSk7XG5cblx0XHRcdFx0Y2FsbGJhY2tDb21wbGV0ZShyZXN1bHRzKTtcblx0XHRcdH1cdFxuXHRcdH1cdFx0XHRcblx0fVxuXG5cdGdlb2xvY2F0ZVVzZXIoY2FsbGJhY2tDb21wbGV0ZT8pXG5cdHtcblx0XHRpZiAobmF2aWdhdG9yLmdlb2xvY2F0aW9uKVxuXHRcdFx0bmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigocG9zaXRpb24pID0+IHtcblx0XHRcdFx0Ly8gYXNzb2NpYXRlIHpvb20gdG8gYWNjdXJhY3lcblx0XHRcdFx0bGV0IHpvb20gPSAxNyAtIE1hdGgubG9nKHBvc2l0aW9uLmNvb3Jkcy5hY2N1cmFjeSAvIDMwMDApICogTWF0aC5MT0cyRTtcblx0XHRcdFx0em9vbSA9IE1hdGgubWluKHpvb20sIDE2KTtcblx0XHRcdFx0em9vbSA9IE1hdGgubWF4KHpvb20sIDgpO1xuXHRcdFx0XHRsZXQgdmlld1BvcnQgPSBuZXcgVmlld1BvcnQocG9zaXRpb24uY29vcmRzLmxhdGl0dWRlLCBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlLCB6b29tKTtcblx0XHRcdFx0dGhpcy5oYW5kbGVHZW9sb2NhbGlzYXRpb25SZXNwb25zZSh2aWV3UG9ydCwgY2FsbGJhY2tDb21wbGV0ZSk7XG5cdFx0XHR9LCAoKSA9PiB7fSwge2VuYWJsZUhpZ2hBY2N1cmFjeTogdHJ1ZX0pO1xuXHRcdGVsc2Vcblx0XHRcdCQuZ2V0SlNPTihcImh0dHA6Ly9mcmVlZ2VvaXAubmV0L2pzb24vXCIsIChkYXRhKSA9PiB7XG5cdFx0ICAgIGxldCB2aWV3UG9ydCA9IG5ldyBWaWV3UG9ydChkYXRhLmxhdGl0dWRlLCBkYXRhLmxvbmdpdHVkZSwgMTQpO1xuXHRcdCAgICB0aGlzLmhhbmRsZUdlb2xvY2FsaXNhdGlvblJlc3BvbnNlKHZpZXdQb3J0LCBjYWxsYmFja0NvbXBsZXRlKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVHZW9sb2NhbGlzYXRpb25SZXNwb25zZSh2aWV3UG9ydCA6IFZpZXdQb3J0LCBjYWxsYmFja0NvbXBsZXRlKVxuXHR7XG5cdFx0dGhpcy5sb2NhdGlvbiA9IHZpZXdQb3J0LnRvTG9jYXRpb24oKTtcbiAgICB0aGlzLm9uR2VvbG9jYWxpemF0aW9uUmVzdWx0LmVtaXQodmlld1BvcnQpO1xuICAgIGNhbGxiYWNrQ29tcGxldGUodmlld1BvcnQpO1xuXHR9XG59IiwiaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMsIEFwcERhdGFUeXBlLCBBcHBNb2RlcyB9IGZyb20gXCIuLi9hcHAubW9kdWxlXCI7XG5cbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi9nb2dvY2FydG9cIjtcblxuZGVjbGFyZSB2YXIgcm91dGllOiBhbnksICQ7XG5cbmV4cG9ydCBjbGFzcyBMb2dpbk1vZHVsZVxue1xuXHRwcml2YXRlIHJvbGVzXyA6IHN0cmluZ1tdO1xuXHRwcml2YXRlIHVzZXJFbWFpbCA6IHN0cmluZyA9ICcnO1xuXG5cdGNvbnN0cnVjdG9yKCRyb2xlcyA6IHN0cmluZ1tdIHwgc3RyaW5nLCAkdXNlckVtYWlsIDogc3RyaW5nID0gJycpIFxuXHR7IFxuXHRcdHRoaXMuc2V0Um9sZXMoJHJvbGVzKTsgXG5cdFx0dGhpcy5zZXRVc2VyRW1haWwoJHVzZXJFbWFpbCk7XG5cdH1cblxuXHRzZXRSb2xlcygkcm9sZXMgOiBzdHJpbmdbXSB8IHN0cmluZylcblx0eyBcblx0XHRpZiAodHlwZW9mICRyb2xlcyA9PSAnc3RyaW5nJykgdGhpcy5yb2xlc18gPSBbJHJvbGVzXTtcdFxuXHRcdGVsc2UgdGhpcy5yb2xlc18gPSAkcm9sZXM7XG5cdH1cblxuXHRzZXRVc2VyRW1haWwodXNlckVtYWlsKSB7IHRoaXMudXNlckVtYWlsID0gdXNlckVtYWlsOyB9XG5cblx0Z2V0VXNlckVtYWlsKCkgeyByZXR1cm4gdGhpcy51c2VyRW1haWw7IH1cblxuXHRnZXRSb2xlcygpIHsgcmV0dXJuIHRoaXMucm9sZXNfOyB9XG5cbiAgbG9naW5BY3Rpb24oKSB7IEFwcC5jb25maWcuc2VjdXJpdHkubG9naW5BY3Rpb24oKTsgfVxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cblxuaW1wb3J0IHsgQXBwTW9kdWxlIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcblxuZXhwb3J0IGNsYXNzIERpc3BsYXlFbGVtZW50QWxvbmVNb2R1bGVcbntcblx0ZWxlbWVudFNob3duQWxvbmVfID0gbnVsbDtcblxuXHRjb25zdHJ1Y3RvcigpIHt9XG5cblx0Z2V0RWxlbWVudCgpIDogRWxlbWVudCB7IHJldHVybiB0aGlzLmVsZW1lbnRTaG93bkFsb25lXzsgfVxuXG5cdGJlZ2luKGVsZW1lbnRJZCA6IHN0cmluZywgcGFuVG9FbGVtZW50TG9jYXRpb24gOiBib29sZWFuID0gdHJ1ZSkgXG5cdHtcdFxuXHRcdC8vIGNvbnNvbGUubG9nKFwiRGlzcGxheUVsZW1lbnRBbG9uZU1vZHVsZSBiZWdpblwiLCBwYW5Ub0VsZW1lbnRMb2NhdGlvbik7XHRcdFxuXG5cdFx0aWYgKHRoaXMuZWxlbWVudFNob3duQWxvbmVfICE9PSBudWxsKSBcblx0XHR7XG5cdFx0XHR0aGlzLmVsZW1lbnRTaG93bkFsb25lXy5oaWRlKCk7XG5cdFx0XHR0aGlzLmVsZW1lbnRTaG93bkFsb25lXy5pc1Nob3duQWxvbmUgPSBmYWxzZTtcblx0XHR9XG5cblx0XHRsZXQgZWxlbWVudCA9IEFwcC5lbGVtZW50QnlJZChlbGVtZW50SWQpO1x0XG5cdFx0dGhpcy5lbGVtZW50U2hvd25BbG9uZV8gPSBlbGVtZW50O1x0XHRcdFxuXG5cdFx0QXBwLmVsZW1lbnRzTW9kdWxlLmNsZWFyQ3VycmVudHNFbGVtZW50KCk7XG5cblx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7XG5cdFx0XHRBcHAuaW5mb0JhckNvbXBvbmVudC5zaG93RWxlbWVudChlbGVtZW50LmlkKTtcdFxuXG5cdFx0XHQvLyB3ZSBzZXQgYSB0aW1lb3V0IHRvIGxldCB0aGUgaW5mb2JhciBzaG93IHVwXG5cdFx0XHQvLyBpZiB3ZSBub3QgZG8gc28sIHRoZSBtYXAgd2lsbCBub3QgYmUgY2VudGVyZWQgaW4gdGhlIGVsZW1lbnQucG9zaXRpb25cdFxuXHRcdFx0aWYgKHBhblRvRWxlbWVudExvY2F0aW9uKVxuXHRcdFx0e1x0XHRcblx0XHRcdFx0QXBwLm1hcENvbXBvbmVudC5yZXNpemUoKTtcblx0XHRcdFx0QXBwLm1hcENvbXBvbmVudC5wYW5Ub0xvY2F0aW9uKGVsZW1lbnQucG9zaXRpb24sIDEyLCBmYWxzZSk7XG5cdFx0XHRcdHNldFRpbWVvdXQoICgpID0+IHsgQXBwLm1hcENvbXBvbmVudC5yZXNpemUoKTtBcHAubWFwQ29tcG9uZW50LnBhblRvTG9jYXRpb24oZWxlbWVudC5wb3NpdGlvbiwgMTIsIGZhbHNlKTsgfSwgNTAwKTtcblx0XHRcdH1cdFx0XHRcblx0XHR9LCAzMDApO1x0XHRcblx0fTtcblxuXHRlbmQoKSBcblx0e1xuXHRcdGlmICh0aGlzLmVsZW1lbnRTaG93bkFsb25lXyA9PT0gbnVsbCkgcmV0dXJuO1xuXG5cdFx0QXBwLmVsZW1lbnRzTW9kdWxlLnVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5KHRydWUpO1xuXHRcdFxuXHRcdHRoaXMuZWxlbWVudFNob3duQWxvbmVfLmlzU2hvd25BbG9uZSA9IGZhbHNlO1x0XG5cblx0XHR0aGlzLmVsZW1lbnRTaG93bkFsb25lXyA9IG51bGw7XHRcblx0fTtcbn1cblxuIiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMTItMTNcbiAqL1xuXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgeyBwYXJzZUFycmF5TnVtYmVySW50b1N0cmluZywgcGFyc2VTdHJpbmdJbnRvQXJyYXlOdW1iZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGFyc2VyLXN0cmluZy1udW1iZXJcIjtcbmltcG9ydCB7IHNsdWdpZnkgfSBmcm9tICcuLi8uLi91dGlscy9zdHJpbmctaGVscGVycyc7XG5cbmRlY2xhcmUgdmFyICQgOiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJSb3V0aW5nTW9kdWxlXG57XG5cdGxvYWRGaWx0ZXJzRnJvbVN0cmluZyhzdHJpbmcgOiBzdHJpbmcpXG5cdHtcblx0XHRsZXQgc3BsaXRlZCA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdGxldCBtYWluT3B0aW9uU2x1ZyA9IHNwbGl0ZWRbMF07XG5cblx0XHRsZXQgbWFpbk9wdGlvbklkO1xuXHRcdGlmIChtYWluT3B0aW9uU2x1ZyA9PSAnYWxsJykgbWFpbk9wdGlvbklkID0gJ2FsbCc7XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdGxldCBtYWluT3B0aW9uID0gQXBwLnRheG9ub215TW9kdWxlLmdldE1haW5PcHRpb25CeVNsdWcobWFpbk9wdGlvblNsdWcpO1xuXHRcdFx0bWFpbk9wdGlvbklkID0gbWFpbk9wdGlvbiA/IG1haW5PcHRpb24uaWQgOiAnYWxsJztcblx0XHR9IFxuXHRcdEFwcC5maWx0ZXJzQ29tcG9uZW50LnNldE1haW5PcHRpb24obWFpbk9wdGlvbklkKTtcdFx0XG5cblx0XHRsZXQgZmlsdGVyc1N0cmluZyA6IHN0cmluZztcblx0XHRsZXQgYWRkaW5nTW9kZSA6IGJvb2xlYW47XG5cblx0XHRpZiAoc3BsaXRlZC5sZW5ndGggPT0gMilcblx0XHR7XG5cdFx0XHRmaWx0ZXJzU3RyaW5nID0gc3BsaXRlZFsxXTtcblxuXHRcdFx0aWYgKGZpbHRlcnNTdHJpbmdbMF0gPT0gJyEnKSBhZGRpbmdNb2RlID0gZmFsc2U7XG5cdFx0XHRlbHNlIGFkZGluZ01vZGUgPSB0cnVlO1xuXG5cdFx0XHRmaWx0ZXJzU3RyaW5nID0gZmlsdGVyc1N0cmluZy5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHNwbGl0ZWQubGVuZ3RoID4gMilcblx0XHR7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiRXJyb3Igc3BsaXRpbmcgaW4gbG9hZEZpbHRlckZyb21TdHJpbmdcIik7XG5cdFx0fVxuXG5cdFx0bGV0IGZpbHRlcnMgPSBwYXJzZVN0cmluZ0ludG9BcnJheU51bWJlcihmaWx0ZXJzU3RyaW5nKTtcblx0XHQvL2NvbnNvbGUubG9nKCdmaWx0ZXJzJywgZmlsdGVycyk7XHRcdFxuXHRcdGlmICghQXBwLmxvYWRGdWxsVGF4b25vbXkgJiYgbWFpbk9wdGlvblNsdWcgIT0gJ2FsbCcpICQoJy5tYWluLWNhdGVnb3JpZXMnKS5oaWRlKCk7XHRcblxuXHRcdGlmIChmaWx0ZXJzLmxlbmd0aCA+IDApXG5cdFx0e1xuXHRcdFx0Ly8gY29uc29sZS5sb2coJ2FkZGluZ01vZGUnLCBhZGRpbmdNb2RlKTtcblx0XHRcdFxuXHRcdFx0aWYgKG1haW5PcHRpb25TbHVnID09ICdhbGwnKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoQXBwLmxvYWRGdWxsVGF4b25vbXkpIEFwcC50YXhvbm9teU1vZHVsZS50YXhvbm9teS50b2dnbGUoIWFkZGluZ01vZGUsIGZhbHNlKTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Zm9yKGxldCBvcHRpb24gb2YgQXBwLnRheG9ub215TW9kdWxlLnRheG9ub215Lm9wdGlvbnMpIFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdG9wdGlvbi50b2dnbGVWaXNpYmlsaXR5KCFhZGRpbmdNb2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0Zm9yIChsZXQgY2F0IG9mIEFwcC50YXhvbm9teU1vZHVsZS5nZXRNYWluT3B0aW9uQnlTbHVnKG1haW5PcHRpb25TbHVnKS5zdWJjYXRlZ29yaWVzKVxuXHRcdFx0XHRcdGZvcihsZXQgb3B0aW9uIG9mIGNhdC5vcHRpb25zKSBcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpZiAoQXBwLmxvYWRGdWxsVGF4b25vbXkpIG9wdGlvbi50b2dnbGUoIWFkZGluZ01vZGUsIGZhbHNlKTsgXG5cdFx0XHRcdFx0XHRlbHNlIG9wdGlvbi50b2dnbGVWaXNpYmlsaXR5KCFhZGRpbmdNb2RlLCB0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvcihsZXQgZmlsdGVySWQgb2YgZmlsdGVycylcblx0XHRcdHtcblx0XHRcdFx0bGV0IG9wdGlvbiA9IEFwcC50YXhvbm9teU1vZHVsZS5nZXRPcHRpb25CeUludElkKGZpbHRlcklkKTtcblx0XHRcdFx0aWYgKCFvcHRpb24pIGNvbnNvbGUubG9nKFwiRXJyb3IgbG9hZGluZ3MgZmlsdGVycyA6IFwiICsgZmlsdGVySWQpO1xuXHRcdFx0XHRlbHNlIFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWYgKEFwcC5sb2FkRnVsbFRheG9ub215KSAgb3B0aW9uLnRvZ2dsZShhZGRpbmdNb2RlLCBmYWxzZSk7XG5cdFx0XHRcdFx0aWYgKCFBcHAubG9hZEZ1bGxUYXhvbm9teSkgb3B0aW9uLnRvZ2dsZVZpc2liaWxpdHkoYWRkaW5nTW9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKEFwcC5sb2FkRnVsbFRheG9ub215KVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoQXBwLmNvbmZpZy5tZW51LnNob3dPbmVQYW5lUGVyTWFpbk9wdGlvbilcblx0XHRcdFx0XHRpZiAobWFpbk9wdGlvblNsdWcgPT0gJ2FsbCcpIEFwcC50YXhvbm9teU1vZHVsZS50YXhvbm9teS51cGRhdGVTdGF0ZSgpO1xuXHRcdFx0XHRcdGVsc2UgQXBwLnRheG9ub215TW9kdWxlLmdldE1haW5PcHRpb25CeVNsdWcobWFpbk9wdGlvblNsdWcpLnJlY3Vyc2l2ZWx5VXBkYXRlU3RhdGVzKCk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRBcHAudGF4b25vbXlNb2R1bGUudGF4b25vbXkucmVjdXJzaXZlbHlVcGRhdGVTdGF0ZXMoKTtcblx0XHRcdH1cblxuXHRcdFx0QXBwLmVsZW1lbnRzTW9kdWxlLnVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5KHRydWUpO1xuXHRcdFx0Ly9BcHAuaGlzdG9yeU1vZHVsZS51cGRhdGVDdXJyU3RhdGUoKTtcblx0XHR9XG5cdH1cblxuXHRnZXRGaWx0ZXJzVG9TdHJpbmcoKSA6IHN0cmluZ1xuXHR7XG5cdFx0bGV0IG1haW5PcHRpb25JZCA9IEFwcC5jdXJyTWFpbklkO1xuXG5cdFx0bGV0IG1haW5PcHRpb25OYW1lO1xuXHRcdGxldCBjaGVja0FycmF5VG9QYXJzZSwgdW5jaGVja0FycmF5VG9QYXJzZTtcblx0XHRcblx0XHRpZiAobWFpbk9wdGlvbklkID09ICdhbGwnICYmIEFwcC5jb25maWcubWVudS5zaG93T25lUGFuZVBlck1haW5PcHRpb24pXG5cdFx0e1x0XHRcdFxuXHRcdFx0bWFpbk9wdGlvbk5hbWUgPSBcImFsbFwiO1xuXHRcdFx0Y2hlY2tBcnJheVRvUGFyc2UgPSBBcHAudGF4b25vbXlNb2R1bGUudGF4b25vbXkuY2hlY2tlZE9wdGlvbnMubWFwKCAob3B0aW9uKSA9PiBvcHRpb24uaW50SWQpO1xuXHRcdFx0dW5jaGVja0FycmF5VG9QYXJzZSA9IEFwcC50YXhvbm9teU1vZHVsZS50YXhvbm9teS5kaXNhYmxlZE9wdGlvbnMubWFwKCAob3B0aW9uKSA9PiBvcHRpb24uaW50SWQpO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0bGV0IGFsbE9wdGlvbnM7XG5cblx0XHRcdGlmIChBcHAuY29uZmlnLm1lbnUuc2hvd09uZVBhbmVQZXJNYWluT3B0aW9uKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgbWFpbk9wdGlvbiA9IEFwcC50YXhvbm9teU1vZHVsZS5nZXRNYWluT3B0aW9uQnlJZChtYWluT3B0aW9uSWQpO1xuXHRcdFx0XHRtYWluT3B0aW9uTmFtZSA9IHNsdWdpZnkobWFpbk9wdGlvbi5uYW1lU2hvcnQpO1xuXHRcdFx0XHRhbGxPcHRpb25zID0gbWFpbk9wdGlvbi5hbGxDaGlsZHJlbk9wdGlvbnM7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdG1haW5PcHRpb25OYW1lID0gXCJhbGxcIjtcblx0XHRcdFx0YWxsT3B0aW9ucyA9IEFwcC50YXhvbm9teU1vZHVsZS5vcHRpb25zO1xuXHRcdFx0fVx0XHRcdFx0XG5cblx0XHRcdGNoZWNrQXJyYXlUb1BhcnNlID0gYWxsT3B0aW9ucy5maWx0ZXIoIChvcHRpb24pID0+IG9wdGlvbi5pc0NoZWNrZWQgKS5tYXAoIChvcHRpb24pID0+IG9wdGlvbi5pbnRJZCk7XG5cdFx0XHR1bmNoZWNrQXJyYXlUb1BhcnNlID0gYWxsT3B0aW9ucy5maWx0ZXIoIChvcHRpb24pID0+IG9wdGlvbi5pc0Rpc2FibGVkICkubWFwKCAob3B0aW9uKSA9PiBvcHRpb24uaW50SWQpO1x0XHRcdFxuXHRcdH1cblxuXHRcdGxldCBjaGVja2VkSWRzUGFyc2VkID0gcGFyc2VBcnJheU51bWJlckludG9TdHJpbmcoY2hlY2tBcnJheVRvUGFyc2UpO1xuXHRcdGxldCB1bmNoZWNrZWRJZHNQYXJzZWQgPSBwYXJzZUFycmF5TnVtYmVySW50b1N0cmluZyh1bmNoZWNrQXJyYXlUb1BhcnNlKTtcblxuXHRcdGxldCBhZGRpbmdNb2RlID0gKGNoZWNrZWRJZHNQYXJzZWQubGVuZ3RoIDwgdW5jaGVja2VkSWRzUGFyc2VkLmxlbmd0aCk7XG5cblx0XHRsZXQgYWRkaW5nU3ltYm9sID0gYWRkaW5nTW9kZSA/ICcrJyA6ICchJztcblxuXHRcdGxldCBmaWx0ZXJzU3RyaW5nID0gYWRkaW5nTW9kZSA/IGNoZWNrZWRJZHNQYXJzZWQgOiB1bmNoZWNrZWRJZHNQYXJzZWQ7XG5cblx0XHRpZiAoIWFkZGluZ01vZGUgJiYgZmlsdGVyc1N0cmluZyA9PSBcIlwiICkgcmV0dXJuIG1haW5PcHRpb25OYW1lO1xuXG5cdFx0cmV0dXJuIG1haW5PcHRpb25OYW1lICsgJ0AnICsgYWRkaW5nU3ltYm9sICsgZmlsdGVyc1N0cmluZztcblx0fVxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cbmltcG9ydCB7IE9wdGlvbiwgRWxlbWVudCwgRWxlbWVudE1vZGVyYXRpb25TdGF0ZX0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5kZWNsYXJlIHZhciAkIDogYW55O1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyTW9kdWxlXG57XG5cdHNob3dPbmx5RmF2b3JpdGVfIDogYm9vbGVhbiA9IGZhbHNlO1xuXHRzaG93UGVuZGluZ18gOiBib29sZWFuID0gdHJ1ZTtcblx0c2hvd09ubHlQZW5kaW5nXyA6IGJvb2xlYW4gPSBmYWxzZTtcblx0c2hvd09ubHlNb2RlcmF0aW9uXyA6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcdH1cblxuXHRzaG93T25seUZhdm9yaXRlKGJvb2wgOiBib29sZWFuKSB7IHRoaXMuc2hvd09ubHlGYXZvcml0ZV8gPSBib29sOyB9XG5cblx0c2hvd1BlbmRpbmcoYm9vbCA6IGJvb2xlYW4pIHsgdGhpcy5zaG93UGVuZGluZ18gPSBib29sOyB9XG5cblx0c2hvd09ubHlQZW5kaW5nKGJvb2wgOiBib29sZWFuKSB7IHRoaXMuc2hvd09ubHlQZW5kaW5nXyA9IGJvb2w7IH1cblxuXHRzaG93T25seU1vZGVyYXRpb24oYm9vbCA6IGJvb2xlYW4pIHsgdGhpcy5zaG93T25seU1vZGVyYXRpb25fID0gYm9vbDsgfVxuXG5cdGNoZWNrSWZFbGVtZW50UGFzc0ZpbHRlcnMoZWxlbWVudCA6IEVsZW1lbnQpIDogYm9vbGVhblxuXHR7XG5cdFx0aWYgKGVsZW1lbnQub3B0aW9uc1ZhbHVlcy5sZW5ndGggPT0gMCkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0aWYgKHRoaXMuc2hvd09ubHlGYXZvcml0ZV8pIHJldHVybiBlbGVtZW50LmlzRmF2b3JpdGU7XG5cblx0XHRpZiAodGhpcy5zaG93T25seU1vZGVyYXRpb25fICYmICghZWxlbWVudC5uZWVkc01vZGVyYXRpb24oKSB8fCBlbGVtZW50Lm1vZGVyYXRpb25TdGF0ZSA9PSBFbGVtZW50TW9kZXJhdGlvblN0YXRlLlBvc3NpYmxlRHVwbGljYXRlKSkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0aWYgKEFwcC5jb25maWcuaXNGZWF0dXJlQXZhaWxhYmxlKCdwZW5kaW5nJykpXG5cdFx0e1xuXHRcdFx0aWYgKHRoaXMuc2hvd09ubHlQZW5kaW5nXykgcmV0dXJuIGVsZW1lbnQuaXNQZW5kaW5nKCk7XG5cblx0XHRcdGlmKCF0aGlzLnNob3dQZW5kaW5nXyAmJiBlbGVtZW50LmlzUGVuZGluZygpKSByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHRpZihlbGVtZW50LmlzUGVuZGluZygpKSByZXR1cm4gZmFsc2U7XG5cdFx0fVx0XHRcblxuXHRcdGlmICghQXBwLmNvbmZpZy5tZW51LnNob3dPbmVQYW5lUGVyTWFpbk9wdGlvbilcblx0XHR7XG5cdFx0XHRsZXQgY2hlY2tlZE1haW5PcHRpb25zID0gQXBwLnRheG9ub215TW9kdWxlLnRheG9ub215Lm5vbkRpc2FibGVkT3B0aW9ucztcblx0XHRcdGlmIChjaGVja2VkTWFpbk9wdGlvbnMubGVuZ3RoID09IDEpXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlY3Vyc2l2ZWx5Q2hlY2tlZEluT3B0aW9uKGNoZWNrZWRNYWluT3B0aW9uc1swXSwgZWxlbWVudCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJldHVybiBjaGVja2VkTWFpbk9wdGlvbnMuc29tZSggKG1haW5PcHRpb24pID0+IGVsZW1lbnQuaGF2ZU9wdGlvbihtYWluT3B0aW9uKSB8fCB0aGlzLnJlY3Vyc2l2ZWx5Q2hlY2tlZEluT3B0aW9uKG1haW5PcHRpb24sIGVsZW1lbnQpKTtcblx0XHR9XG5cdFx0ZWxzZSBpZiAoQXBwLmN1cnJNYWluSWQgPT0gJ2FsbCcpXG5cdFx0e1xuXHRcdFx0bGV0IGVsZW1lbnRPcHRpb25zID0gZWxlbWVudC5nZXRPcHRpb25WYWx1ZUJ5Q2F0ZWdvcnlJZCggQXBwLnRheG9ub215TW9kdWxlLnRheG9ub215LmlkKTtcblx0XHRcdGxldCBjaGVja2VkT3B0aW9ucyA9IEFwcC50YXhvbm9teU1vZHVsZS50YXhvbm9teS5jaGVja2VkT3B0aW9ucztcblxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJcXG5lbGVtZW50c09wdGlvbnNcIiwgZWxlbWVudE9wdGlvbnMubWFwKCAodmFsdWUpID0+IHZhbHVlLm9wdGlvbi5uYW1lKSk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImNoZWNrZWRPcHRpb25zXCIsIGNoZWNrZWRPcHRpb25zLm1hcCggKHZhbHVlKSA9PiB2YWx1ZS5uYW1lKSk7XG5cblx0XHRcdGxldCByZXN1bHQgPSBlbGVtZW50T3B0aW9ucy5zb21lKG9wdGlvblZhbHVlID0+IGNoZWNrZWRPcHRpb25zLmluZGV4T2Yob3B0aW9uVmFsdWUub3B0aW9uKSA+IC0xKTtcblx0XHRcdHJldHVybiByZXN1bHQgO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0bGV0IG1haW5PcHRpb24gPSBBcHAudGF4b25vbXlNb2R1bGUuZ2V0Q3Vyck1haW5PcHRpb24oKTtcdFx0XHRcblx0XHRcdGxldCBpc1Bhc3NpbmdGaWx0ZXJzID0gdGhpcy5yZWN1cnNpdmVseUNoZWNrZWRJbk9wdGlvbihtYWluT3B0aW9uLCBlbGVtZW50KTtcdFx0XHRcblx0XHRcdHJldHVybiBpc1Bhc3NpbmdGaWx0ZXJzO1xuXHRcdH1cdFx0XG5cdH1cblxuXHRwcml2YXRlIHJlY3Vyc2l2ZWx5Q2hlY2tlZEluT3B0aW9uKG9wdGlvbiA6IE9wdGlvbiwgZWxlbWVudCA6IEVsZW1lbnQpIDogYm9vbGVhblxuXHR7XG5cdFx0bGV0IGxvZyA9IGZhbHNlO1xuXG5cdFx0aWYgKGxvZykgY29uc29sZS5sb2coIFwiQ2hlY2sgZm9yIG9wdGlvbiBcIiwgb3B0aW9uLm5hbWUpO1xuXG5cdFx0bGV0IHJlc3VsdDtcblx0XHRpZiAob3B0aW9uLnN1YmNhdGVnb3JpZXMubGVuZ3RoID09IDAgfHwgKG9wdGlvbi5pc0Rpc2FibGVkICYmICFvcHRpb24uaXNNYWluT3B0aW9uKSApXG5cdFx0e1xuXHRcdFx0aWYgKGxvZykgY29uc29sZS5sb2coIFwiTm8gc3ViY2F0ZWdvcmllcyBcIik7XG5cdFx0XHRyZXN1bHQgPSBvcHRpb24uaXNDaGVja2VkICYmIGVsZW1lbnQuaGF2ZU9wdGlvbihvcHRpb24pO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0cmVzdWx0ID0gb3B0aW9uLnN1YmNhdGVnb3JpZXMuZXZlcnkoIChjYXRlZ29yeSkgPT5cblx0XHRcdHtcblx0XHRcdFx0aWYgKGxvZykgY29uc29sZS5sb2coXCItLVwiICsgXCJDYXRlZ29yeVwiLCBjYXRlZ29yeS5uYW1lKTtcblxuXHRcdFx0XHRpZiAoIWNhdGVnb3J5LnVzZUZvckZpbHRlcmluZykgcmV0dXJuIHRydWU7XG5cdFx0XHRcdGxldCBjaGVja2VkT3B0aW9ucyA9IGNhdGVnb3J5LmNoZWNrZWRPcHRpb25zO1xuXHRcdFx0XHRsZXQgZWxlbWVudE9wdGlvbnMgPSBlbGVtZW50LmdldE9wdGlvblZhbHVlQnlDYXRlZ29yeUlkKGNhdGVnb3J5LmlkKTtcblx0XHRcdFx0aWYgKEFwcC5jb25maWcubWVudS5zaG93T25lUGFuZVBlck1haW5PcHRpb24pIGVsZW1lbnRPcHRpb25zID0gZWxlbWVudE9wdGlvbnMuZmlsdGVyKChvcHRWYWx1ZSkgPT4gb3B0VmFsdWUub3B0aW9uSWQgIT0gQXBwLmN1cnJNYWluSWQpO1xuXG5cdFx0XHRcdC8vIGlmIHRoaXMgZWxlbWVudCBkb24ndCBoYXZlIGFueSBvcHRpb24gaW4gdGhpcyBjYXRlZ29yeSwgZG9uJ3QgbmVlZCB0byBjaGVja1xuXHRcdFx0XHRpZiAoZWxlbWVudE9wdGlvbnMubGVuZ3RoID09IDAgJiYgbG9nKSBjb25zb2xlLmxvZyhcIi0tXCIgKyBcIkVsZW1lbnQgZG9uJ3QgaGF2ZSBvcHRpb25zIGluIHRoaXMgY2F0ZWdvcnkuIENhdGdlb3lyIG1hbmRhdG9yeSA/IFwiLCBjYXRlZ29yeS5pc01hbmRhdG9yeSk7XG5cdFx0XHRcdGlmIChlbGVtZW50T3B0aW9ucy5sZW5ndGggPT0gMCkgcmV0dXJuICFjYXRlZ29yeS5pc01hbmRhdG9yeTtcblxuXHRcdFx0XHRsZXQgaXNTb21lT3B0aW9uSW5DYXRlZ29yeUNoZWNrZWRPcHRpb25zID0gZWxlbWVudE9wdGlvbnMuc29tZShvcHRpb25WYWx1ZSA9PiBjaGVja2VkT3B0aW9ucy5pbmRleE9mKG9wdGlvblZhbHVlLm9wdGlvbikgPiAtMSk7IFxuXG5cdFx0XHRcdGlmIChsb2cpIGNvbnNvbGUubG9nKFwiLS1cIiArIFwiaXNTb21lT3B0aW9uSW5DYXRlZ29yeUNoZWNrZWRPcHRpb25zXCIsIGlzU29tZU9wdGlvbkluQ2F0ZWdvcnlDaGVja2VkT3B0aW9ucyk7XG5cdFx0XHRcdGlmIChpc1NvbWVPcHRpb25JbkNhdGVnb3J5Q2hlY2tlZE9wdGlvbnMpXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0e1x0XHRcdFx0XG5cdFx0XHRcdFx0aWYgKGxvZykgY29uc29sZS5sb2coXCItLVwiICsgXCJTbyB3ZSBjaGVja2VkIGluIHN1Ym9wdGlvbnNcIiwgY2F0ZWdvcnkubmFtZSk7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnRPcHRpb25zLnNvbWUoIChvcHRpb25WYWx1ZSkgPT4gdGhpcy5yZWN1cnNpdmVseUNoZWNrZWRJbk9wdGlvbihvcHRpb25WYWx1ZS5vcHRpb24sIGVsZW1lbnQpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChsb2cpIGNvbnNvbGUubG9nKFwiUmV0dXJuIFwiLCByZXN1bHQpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn0iLCJpbXBvcnQgeyBwYXJzZVVyaUlkIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5cbmV4cG9ydCBjbGFzcyBUYXhvbm9teVNrb3NNb2R1bGVcbntcbiAgY29uY2VwdHMgPSBbXTtcblxuICBjb252ZXJ0U2tvc0ludG9Hb0dvVGF4b25vbXkoJHNrb3NKc29uKVxuICB7XG4gICAgdGhpcy5jb25jZXB0cyA9ICRza29zSnNvblsnQGdyYXBoJ107XG4gICAgbGV0IHJvb3RDb25jZXB0cyA9IHRoaXMuY29uY2VwdHMuZmlsdGVyKCAoY29uY2VwdCkgPT4gIWNvbmNlcHQuYnJvYWRlcik7XG4gICAgbGV0IGNhdGVnb3JpZXMgPSBbXTtcblxuICAgIGZvcihsZXQgcm9vdENvbmNlcHQgb2Ygcm9vdENvbmNlcHRzKVxuICAgIHtcbiAgICAgIGNhdGVnb3JpZXMucHVzaCh0aGlzLnJvb3RTa29zVG9Hb0dvQ2F0ZWdvcnkocm9vdENvbmNlcHQpKTtcbiAgICB9ICBcblxuICAgIGxldCBnb2dvVGF4b25vbXkgPSB7XG4gICAgICBcIm9wdGlvbnNcIjpbICAgIFxuICAgICAgICB7XG4gICAgICAgICAgXCJuYW1lXCI6XCJSYWNpbmVcIixcbiAgICAgICAgICBcImRpc3BsYXlJbkluZm9CYXJcIjogZmFsc2UsXG4gICAgICAgICAgXCJkaXNwbGF5SW5NZW51XCI6IGZhbHNlLFxuICAgICAgICAgIFwic2hvd0V4cGFuZGVkXCI6IHRydWUsXG4gICAgICAgICAgXCJzdWJjYXRlZ29yaWVzXCI6IGNhdGVnb3JpZXMsXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9OyAgICAgXG5cbiAgICBjb25zb2xlLmxvZyhcIlRheG9ub215IFRyZWVcIiwgZ29nb1RheG9ub215KTtcbiAgICByZXR1cm4gZ29nb1RheG9ub215O1xuICB9XG5cbiAgcHJpdmF0ZSByb290U2tvc1RvR29Hb0NhdGVnb3J5KCRza29zSnNvbilcbiAge1xuICAgICRza29zSnNvbi5pZCA9ICRza29zSnNvbltcIkBpZFwiXTtcbiAgICAkc2tvc0pzb24ubmFtZSA9ICRza29zSnNvbltcInByZWZMYWJlbFwiXTtcbiAgICAkc2tvc0pzb24uZGlzcGxheUluTWVudSA9IGZhbHNlO1xuICAgICRza29zSnNvbi5kaXNwbGF5SW5JbmZvQmFyID0gZmFsc2U7XG4gICAgJHNrb3NKc29uLnNob3dFeHBhbmRlZCA9IHRydWU7XG4gICAgJHNrb3NKc29uLnN1Ym9wdGlvbnMgPSB0aGlzLnJlY3Vyc2l2ZWx5Q3JlYXRlU3ViT3B0aW9uT2YoJHNrb3NKc29uKTtcblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAkc2tvc0pzb25bXCJwcmVmTGFiZWxcIl0sXG4gICAgICBzaG93RXhwYW5kZWQ6IHRydWUsXG4gICAgICBpc1Jvb3RDYXRlZ29yeTogdHJ1ZSxcbiAgICAgIHVuZXhwYW5kYWJsZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnMgOiBbJHNrb3NKc29uXVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3ViQ29uY2VwdE9mKGNvbmNlcHRJZClcbiAge1xuICAgIHJldHVybiB0aGlzLmNvbmNlcHRzLmZpbHRlciggKGNvbmNlcHQpID0+IGNvbmNlcHQuYnJvYWRlciA9PSBjb25jZXB0SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWN1cnNpdmVseUNyZWF0ZVN1Yk9wdGlvbk9mKGN1cnJlbnRDb25jZXB0KVxuICB7XG4gICAgbGV0IHN1YkNvbmNlcHRzVG9BZGQgPSB0aGlzLmdldFN1YkNvbmNlcHRPZihjdXJyZW50Q29uY2VwdFsnQGlkJ10pO1xuICAgIGxldCBvcHRpb25zID0gW107XG4gICAgZm9yKGxldCBjb25jZXB0IG9mIHN1YkNvbmNlcHRzVG9BZGQpIFxuICAgIHtcbiAgICAgIGxldCBnb2dvTm9kZSA9IHRoaXMuc2tvc1RvR29Hb09wdGlvbihjb25jZXB0KTtcbiAgICAgIGxldCBzdWJvcHRpb25zID0gdGhpcy5yZWN1cnNpdmVseUNyZWF0ZVN1Yk9wdGlvbk9mKGNvbmNlcHQpO1xuICAgICAgaWYgKHN1Ym9wdGlvbnMubGVuZ3RoID4gMCkgZ29nb05vZGUuc3Vib3B0aW9ucyA9IHN1Ym9wdGlvbnM7XG4gICAgICBvcHRpb25zLnB1c2goZ29nb05vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgc2tvc1RvR29Hb09wdGlvbigkc2tvc0pzb24pIFxuICB7XG4gICAgJHNrb3NKc29uLmlkID0gcGFyc2VVcmlJZCgkc2tvc0pzb25bXCJAaWRcIl0pO1xuICAgICRza29zSnNvbi5uYW1lID0gJHNrb3NKc29uW1wicHJlZkxhYmVsXCJdOyAgICBcbiAgICByZXR1cm4gJHNrb3NKc29uO1xuICB9XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMTItMTNcbiAqL1xuXG5pbXBvcnQgeyBBcHBNb2R1bGUsIEFwcFN0YXRlcywgQXBwTW9kZXMgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgT3B0aW9uLCBDYXRlZ29yeSB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmV4cG9ydCB7IE9wdGlvbiwgQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5pbXBvcnQgeyBzbHVnaWZ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnMnO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuZGVjbGFyZSBsZXQgJCA6IGFueTtcblxuXG5leHBvcnQgY2xhc3MgVGF4b25vbXlNb2R1bGVcbntcblx0Y2F0ZWdvcmllcyA6IENhdGVnb3J5W10gPSBbXTtcblx0b3B0aW9ucyA6IE9wdGlvbltdID0gW107XG5cblx0Ly8gdGhlIGZ1bGwgaGllcmFjaGljIHRheG9ub215XG5cdHRheG9ub215IDogQ2F0ZWdvcnk7XG5cdFxuXHRyb290Q2F0ZWdvcmllcyA6IENhdGVnb3J5W107XG5cblx0Y2F0ZWdvcmllc0NyZWF0ZWRDb3VudCA6IG51bWJlciA9IDE7XG5cdG9wdGlvbnNDcmVhdGVkQ291bnQgOiBudW1iZXIgPSAxO1xuXG5cdGNvbnN0cnVjdG9yKCkgXG5cdHtcblx0XHR0aGlzLm9wdGlvbnMgPSBbXTtcblx0XHR0aGlzLmNhdGVnb3JpZXMgPSBbXTtcblx0fVxuXG5cdGNyZWF0ZVRheG9ub215RnJvbUpzb24odGF4b25vbXlKc29uKVxuXHR7XG5cdFx0bGV0IGlzU2tvc1RheG9ub215ID0gdGF4b25vbXlKc29uWydAZ3JhcGgnXTtcblx0XHRpZiAoaXNTa29zVGF4b25vbXkpIHRheG9ub215SnNvbiA9IEFwcC50YXhvbm9teVNrb3NNb2R1bGUuY29udmVydFNrb3NJbnRvR29Hb1RheG9ub215KHRheG9ub215SnNvbik7XG5cdFx0XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodGF4b25vbXlKc29uKSAmJiB0YXhvbm9teUpzb24ubGVuZ3RoID09IDEpIHRheG9ub215SnNvbiA9IHRheG9ub215SnNvblswXTtcblx0XHRcblx0XHQvLyBJZiBtdWx0aXBsZSByb290IGNhdGVnb3JpZXMsIHdlIGVuY2Fwc3VsYXRlIHRoZW0gaW50byBhIHNpbmdsZSBmYWtlIGNhdGVnb3J5ICYgcm9vdCBvcHRpb25cblx0XHRpZiAoQXJyYXkuaXNBcnJheSh0YXhvbm9teUpzb24pICYmIHRheG9ub215SnNvbi5sZW5ndGggPiAxKSB7XG5cdFx0XHRmb3IgKGxldCBqc29uIG9mIHRheG9ub215SnNvbikganNvbi5pc1Jvb3RDYXRlZ29yeSA9IHRydWU7XG5cdFx0XHR0YXhvbm9teUpzb24gPSB7XG5cdCAgICAgIFwib3B0aW9uc1wiOlsgICAgXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgXCJuYW1lXCI6XCJSb290RmFrZU9wdGlvblwiLFxuXHQgICAgICAgICAgXCJkaXNwbGF5SW5JbmZvQmFyXCI6IGZhbHNlLFxuXHQgICAgICAgICAgXCJkaXNwbGF5SW5NZW51XCI6IGZhbHNlLFxuXHQgICAgICAgICAgXCJzaG93RXhwYW5kZWRcIjogdHJ1ZSxcblx0ICAgICAgICAgIFwic3ViY2F0ZWdvcmllc1wiOiB0YXhvbm9teUpzb24sXG5cdCAgICAgICAgfVxuXHQgICAgICBdXG5cdCAgICB9O1x0ICAgIFxuXHRcdH1cblx0XHRlbHNlIGlmICghaXNTa29zVGF4b25vbXkpIHRheG9ub215SnNvbi5pc1Jvb3RDYXRlZ29yeSA9IHRydWU7XG5cblx0XHR0aGlzLnRheG9ub215ID0gdGhpcy5yZWN1cnNpdmVseUNyZWF0ZUNhdGVnb3J5QW5kT3B0aW9ucyh0YXhvbm9teUpzb24pO1xuXHRcdHRoaXMucm9vdENhdGVnb3JpZXMgPSB0aGlzLmZpbmRSb290Q2F0ZWdvcmllcygpO1xuXHRcdGZvcihsZXQgb3B0aW9uIG9mIHRoaXMubWFpbkNhdGVnb3J5LmNoaWxkcmVuKSBvcHRpb24uaXNNYWluT3B0aW9uID0gdHJ1ZTtcblx0XHRcblx0XHRpZiAodGhpcy5yb290Q2F0ZWdvcmllcy5sZW5ndGggPiAxKVxuXHRcdFx0Zm9yKGxldCByb290Q2F0ZWdvcnkgb2YgdGhpcy5yb290Q2F0ZWdvcmllcykgdGhpcy5yZWN1cnNpdmVseUNhbGN1bGF0ZVBhcmVudHNPcHRpb25JZHMocm9vdENhdGVnb3J5LCB0aGlzLnRheG9ub215Lm9wdGlvbnNbMF0pO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMucmVjdXJzaXZlbHlDYWxjdWxhdGVQYXJlbnRzT3B0aW9uSWRzKHRoaXMubWFpbkNhdGVnb3J5KTtcblx0fVx0XG5cblx0cHJpdmF0ZSBmaW5kUm9vdENhdGVnb3JpZXMoKSA6IENhdGVnb3J5W11cblx0e1xuXHRcdGlmICh0aGlzLnRheG9ub215LmRpc3BsYXlJbk1lbnUpIHJldHVybiBbdGhpcy50YXhvbm9teV07XG5cdFx0cmV0dXJuIHRoaXMudGF4b25vbXkub3B0aW9uc1swXS5zdWJjYXRlZ29yaWVzO1xuXHR9XG5cblx0cHJpdmF0ZSByZWN1cnNpdmVseUNyZWF0ZUNhdGVnb3J5QW5kT3B0aW9ucyhjYXRlZ29yeUpzb24gOiBhbnkpIDogQ2F0ZWdvcnlcblx0e1xuXHRcdHJldHVybiB0aGlzLnJlY3Vyc2l2ZWx5Q3JlYXRlQ2F0ZWdvcnkoY2F0ZWdvcnlKc29uKTtcblx0fVxuXG5cdHByaXZhdGUgcmVjdXJzaXZlbHlDcmVhdGVDYXRlZ29yeShjYXRlZ29yeUpzb24gOiBhbnkpIDogQ2F0ZWdvcnlcblx0e1xuXHRcdGlmICghY2F0ZWdvcnlKc29uLmlkKSBjYXRlZ29yeUpzb24uaWQgPSB0aGlzLmNhdGVnb3JpZXNDcmVhdGVkQ291bnQrKztcblx0XHRcblx0XHRsZXQgY2F0ZWdvcnkgPSBuZXcgQ2F0ZWdvcnkoY2F0ZWdvcnlKc29uKTtcblxuXHRcdGlmIChjYXRlZ29yeUpzb24ub3B0aW9ucylcblx0XHRcdGZvcihsZXQgb3B0aW9uSnNvbiBvZiBjYXRlZ29yeUpzb24ub3B0aW9ucykgdGhpcy5yZWN1cnNpdmVseUNyZWF0ZU9wdGlvbihvcHRpb25Kc29uLCBjYXRlZ29yeSlcblx0XHRlbHNlIGlmIChjYXRlZ29yeUpzb24uc3ViY2F0ZWdvcmllcylcblx0XHRcdHRoaXMucmVjdXJzaXZlbHlDcmVhdGVPcHRpb24oe3N1YmNhdGVnb3JpZXM6IGNhdGVnb3J5SnNvbi5zdWJjYXRlZ29yaWVzLCBzaG93RXhwYW5kZWQ6IHRydWUsIGRpc3BsYXlJbk1lbnU6IGZhbHNlLCBkaXNwbGF5SW5JbmZvQmFyOiBmYWxzZX0sIGNhdGVnb3J5KVxuXG5cdFx0dGhpcy5jYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkpO1xuXG5cdFx0cmV0dXJuIGNhdGVnb3J5O1xuXHR9XG5cblx0cHJpdmF0ZSByZWN1cnNpdmVseUNyZWF0ZU9wdGlvbihvcHRpb25Kc29uIDogYW55LCBwYXJlbnRDYXRnZW9yeSA6IENhdGVnb3J5KVxuXHR7XG5cdFx0b3B0aW9uSnNvbi5pbnRJZCA9IHRoaXMub3B0aW9uc0NyZWF0ZWRDb3VudCsrO1xuXHRcdGxldCBvcHRpb24gPSBuZXcgT3B0aW9uKG9wdGlvbkpzb24pO1xuXHRcdG9wdGlvbi5vd25lcklkID0gcGFyZW50Q2F0Z2VvcnkuaWQ7XG5cblx0XHRpZiAob3B0aW9uSnNvbi5zdWJjYXRlZ29yaWVzKVxuXHRcdFx0Zm9yKGxldCBzdWJjYXRlZ29yeUpzb24gb2Ygb3B0aW9uSnNvbi5zdWJjYXRlZ29yaWVzKVxuXHRcdFx0e1x0XHRcdFx0XG5cdFx0XHRcdGxldCBzdWJjYXRlZ29yeSA9IHRoaXMucmVjdXJzaXZlbHlDcmVhdGVDYXRlZ29yeUFuZE9wdGlvbnMoc3ViY2F0ZWdvcnlKc29uKTtcblx0XHRcdFx0c3ViY2F0ZWdvcnkub3duZXJJZCA9IG9wdGlvbi5pZDtcblx0XHRcdFx0b3B0aW9uLmFkZENhdGVnb3J5KHN1YmNhdGVnb3J5KTtcblx0XHRcdH1cblx0XHRlbHNlIGlmIChvcHRpb25Kc29uLnN1Ym9wdGlvbnMpXG5cdFx0e1xuXHRcdFx0bGV0IHN1YmNhdGVnb3J5ID0gdGhpcy5yZWN1cnNpdmVseUNyZWF0ZUNhdGVnb3J5QW5kT3B0aW9ucyh7b3B0aW9uczogb3B0aW9uSnNvbi5zdWJvcHRpb25zLCBzaG93RXhwYW5kZWQ6IG9wdGlvbkpzb24uc2hvd0V4cGFuZGVkfSk7XG5cdFx0XHRzdWJjYXRlZ29yeS5vd25lcklkID0gb3B0aW9uLmlkO1xuXHRcdFx0b3B0aW9uLmFkZENhdGVnb3J5KHN1YmNhdGVnb3J5KTtcblx0XHR9XG5cblx0XHRwYXJlbnRDYXRnZW9yeS5hZGRPcHRpb24ob3B0aW9uKTtcdFxuXHRcdHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbik7XHRcblx0fVxuXG5cdC8vIFdlIHdhbnQgZXZlcnkgb3B0aW9uIHRvIGtub3cgYWxsIHRob3NlIHBhcmVudHMgT3B0aW9uIGlkc1xuXHQvLyB0aGlzIG1ldGhvZCBjYWxjdWxhdGUgdGhvc2UgZm9yIGFsbCBvcHRpb25zXG5cdHByaXZhdGUgcmVjdXJzaXZlbHlDYWxjdWxhdGVQYXJlbnRzT3B0aW9uSWRzKGNhdGVnb3J5OiBDYXRlZ29yeSwgcGFyZW50T3B0aW9uIDogT3B0aW9uID0gbnVsbClcblx0e1xuXHRcdGZvcihsZXQgb3B0aW9uIG9mIGNhdGVnb3J5LmNoaWxkcmVuKVxuXHRcdHtcblx0XHRcdGlmIChvcHRpb24uaXNNYWluT3B0aW9uIHx8IHBhcmVudE9wdGlvbiA9PT0gbnVsbCkgb3B0aW9uLm1haW5Pd25lcklkID0gXCJhbGxcIjtcblx0XHRcdGVsc2UgaWYgKHBhcmVudE9wdGlvbi5pc01haW5PcHRpb24pIG9wdGlvbi5tYWluT3duZXJJZCA9IHBhcmVudE9wdGlvbi5pZDtcblx0XHRcdGVsc2Ugb3B0aW9uLm1haW5Pd25lcklkID0gcGFyZW50T3B0aW9uLm1haW5Pd25lcklkO1xuXG5cdFx0XHRpZiAocGFyZW50T3B0aW9uKSAoPE9wdGlvbj5vcHRpb24pLnBhcmVudE9wdGlvbklkcyA9IHBhcmVudE9wdGlvbi5wYXJlbnRPcHRpb25JZHMuY29uY2F0KFtwYXJlbnRPcHRpb24uaWRdKTtcblxuXHRcdFx0Zm9yKGxldCBzdWJjYXRlZ29yeSBvZiBvcHRpb24uY2hpbGRyZW4pXG5cdFx0XHR7XHRcdFx0XHRcblx0XHRcdFx0dGhpcy5yZWN1cnNpdmVseUNhbGN1bGF0ZVBhcmVudHNPcHRpb25JZHMoPENhdGVnb3J5PnN1YmNhdGVnb3J5LCA8T3B0aW9uPm9wdGlvbik7XG5cdFx0XHR9XHRcdFx0XG5cdFx0fVxuXHR9XG5cblx0Z2V0TWFpbk9wdGlvbnMoKSA6IE9wdGlvbltdXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5tYWluQ2F0ZWdvcnkub3B0aW9ucztcblx0fVxuXG5cdGdldE1haW5PcHRpb25zSWRzV2l0aEFsbCgpIDogYW55W11cblx0e1xuXHRcdGxldCBvcHRpb25JZHMgOiBhbnlbXSA9IHRoaXMuZ2V0TWFpbk9wdGlvbnNJZHMoKTtcblx0XHRvcHRpb25JZHMucHVzaChcImFsbFwiKTtcblx0XHRyZXR1cm4gb3B0aW9uSWRzO1xuXHR9XG5cblx0Z2V0TWFpbk9wdGlvbnNJZHMoKSA6IG51bWJlcltdXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNYWluT3B0aW9ucygpLm1hcCggKG9wdGlvbikgPT4gb3B0aW9uLmlkKTtcblx0fVxuXG5cdGdldEN1cnJNYWluT3B0aW9uKCkgOiBPcHRpb25cblx0e1xuXHRcdHJldHVybiBBcHAuY3Vyck1haW5JZCA9PSAnYWxsJyA/IG51bGwgOiB0aGlzLmdldE1haW5PcHRpb25CeUlkKEFwcC5jdXJyTWFpbklkKTtcblx0fVxuXG5cdGdldE1haW5PcHRpb25CeVNsdWcoJHNsdWcpIDogT3B0aW9uXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNYWluT3B0aW9ucygpLmZpbHRlciggKG9wdGlvbiA6IE9wdGlvbikgPT4gc2x1Z2lmeShvcHRpb24ubmFtZVNob3J0KSA9PSAkc2x1Zykuc2hpZnQoKTtcblx0fVxuXG5cdGdldE1haW5PcHRpb25CeUlkICgkaWQpIDogT3B0aW9uXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNYWluT3B0aW9ucygpLmZpbHRlciggKG9wdGlvbiA6IE9wdGlvbikgPT4gb3B0aW9uLmlkID09ICRpZCkuc2hpZnQoKTtcblx0fTtcblxuXHRnZXRDYXRlZ29yeUJ5SWQgKCRpZCkgOiBDYXRlZ29yeVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuY2F0ZWdvcmllcy5maWx0ZXIoIChjYXRlZ29yeSA6IENhdGVnb3J5KSA9PiBjYXRlZ29yeS5pZCA9PSAkaWQpLnNoaWZ0KCk7XG5cdH07XG5cblx0Z2V0T3B0aW9uQnlJZCAoJGlkKSA6IE9wdGlvblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoIChvcHRpb24gOiBPcHRpb24pID0+IG9wdGlvbi5pZCA9PSAkaWQpLnNoaWZ0KCk7XG5cdH07XG5cblx0Z2V0T3B0aW9uQnlJbnRJZCAoJGlkKSA6IE9wdGlvblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoIChvcHRpb24gOiBPcHRpb24pID0+IG9wdGlvbi5pbnRJZCA9PSAkaWQpLnNoaWZ0KCk7XG5cdH07XG5cblx0Z2V0Q3Vyck9wdGlvbnMoKSA6IE9wdGlvbltdXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmZpbHRlciggKG9wdGlvbiA6IE9wdGlvbikgPT4gb3B0aW9uLm1haW5Pd25lcklkID09IEFwcC5jdXJyTWFpbklkKTtcblx0fVxuXG5cdGdldFJvb3RDYXRlZ29yaWVzKCkgOiBDYXRlZ29yeVtdXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5jYXRlZ29yaWVzLmZpbHRlciggKGNhdGVnb3J5IDogQ2F0ZWdvcnkpID0+IGNhdGVnb3J5LmlzUm9vdENhdGVnb3J5KTtcblx0fVxuXG5cdC8vIHRoZSBtYWluIGNhdGVnb3J5IDogaS5lLiB0aGUgZmlyc3Qgcm9vdCBjYXRlZ29yeSAoY291bGQgaGF2ZSBtYW55IHJvb3QgY2F0ZWdvcmllcykgXG5cdGdldCBtYWluQ2F0ZWdvcnkoKSB7IHJldHVybiB0aGlzLnJvb3RDYXRlZ29yaWVzWzBdOyB9XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMDgtMzFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvb2tpZShuYW1lLCB2YWx1ZSwgZGF5cyA9IDEwMCkgXG57XG5cdGxldCBkYXRlID0gbmV3IERhdGUoKTtcblx0ZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpKyhkYXlzKjI0KjYwKjYwKjEwMDApKTtcblx0bGV0IGV4cGlyZXMgPSBcIjsgZXhwaXJlcz1cIitkYXRlLnRvVVRDU3RyaW5nKCk7XG5cdFxuXHRkb2N1bWVudC5jb29raWUgPSBuYW1lK1wiPVwiK3ZhbHVlK2V4cGlyZXMrXCI7IHBhdGg9L1wiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZENvb2tpZShuYW1lKSB7XG5cdGxldCBuYW1lRVEgPSBuYW1lICsgXCI9XCI7XG5cdGxldCBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuXHRmb3IobGV0IGk9MDtpIDwgY2EubGVuZ3RoO2krKykge1xuXHRcdGxldCBjID0gY2FbaV07XG5cdFx0d2hpbGUgKGMuY2hhckF0KDApID09ICcgJykgYyA9IGMuc3Vic3RyaW5nKDEsYy5sZW5ndGgpO1xuXHRcdGlmIChjLmluZGV4T2YobmFtZUVRKSA9PT0gMCkgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWVFUS5sZW5ndGgsYy5sZW5ndGgpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJhc2VDb29raWUobmFtZSkge1xuXHRjcmVhdGVDb29raWUobmFtZSxcIlwiKTtcbn0iLCJleHBvcnQgZnVuY3Rpb24gZ2V0UXVlcnlQYXJhbXMocXMpIFxue1xuICBxcyA9IHFzLnNwbGl0KFwiK1wiKS5qb2luKFwiIFwiKTtcbiAgdmFyIHBhcmFtcyA9IHt9LFxuICAgICAgdG9rZW5zLFxuICAgICAgcmUgPSAvWz8mXT8oW149XSspPShbXiZdKikvZztcblxuICB3aGlsZSAoKHRva2VucyA9IHJlLmV4ZWMocXMpKSkge1xuICAgICAgcGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudCh0b2tlbnNbMV0pXSA9IGRlY29kZVVSSUNvbXBvbmVudCh0b2tlbnNbMl0pO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcztcbn0iLCJleHBvcnQgZnVuY3Rpb24gcGFyc2VBcnJheU51bWJlckludG9TdHJpbmcoYXJyYXkgOiBudW1iZXJbXSkgOiBzdHJpbmdcbntcbiAgbGV0IHJlc3VsdCAgPSAnJztcbiAgbGV0IGkgPSAwO1xuXG4gIGZvcihsZXQgbnVtYmVyIG9mIGFycmF5KVxuICB7XG4gICAgaWYgKG51bWJlcilcbiAgICB7XG4gICAgICAgIGlmIChpICUgMiA9PSAwKSByZXN1bHQgKz0gcGFyc2VOdW1iZXJUb1N0cmluZyhudW1iZXIpO1xuICAgICAgICBlbHNlIHJlc3VsdCArPSBudW1iZXIudG9TdHJpbmcoKTtcbiAgICAgICAgaSsrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTnVtYmVyVG9TdHJpbmcobnVtYmVyIDogbnVtYmVyKSA6IHN0cmluZ1xueyAgXG4gIGxldCBiYXNlMjYgPSBudW1iZXIudG9TdHJpbmcoMjYpO1xuICBsZXQgaSA9IDA7IFxuICBsZXQgbGVuZ3RoID0gYmFzZTI2Lmxlbmd0aDtcblxuICBsZXQgcmVzdWx0ID0gJyc7XG5cbiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBcbiAge1xuICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDk2ICsgcGFyc2VJbnQoYmFzZTI2W2ldLDI2KSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBwYXJzZVN0cmluZ1RvTnVtYmVyKHN0cmluZyA6IHN0cmluZykgOiBudW1iZXJcbnsgIFxuICBsZXQgaSA9IDA7IFxuICBsZXQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblxuICBsZXQgcmVzdWx0ID0gMDtcblxuICBmb3IgKGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkgXG4gIHtcbiAgICByZXN1bHQgKz0gKHN0cmluZy5jaGFyQ29kZUF0KGkpIC0gOTYpICogTWF0aC5wb3coMjYsIGxlbmd0aCAtIGkgLSAxKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZ0ludG9BcnJheU51bWJlcihzdHJpbmcgOiBzdHJpbmcpIDogbnVtYmVyW11cbntcbiAgbGV0IHJlc3VsdCA6IG51bWJlcltdID0gW107XG5cbiAgaWYgKCFzdHJpbmcpIHJldHVybiByZXN1bHQ7XG5cbiAgbGV0IGFycmF5ID0gc3RyaW5nLm1hdGNoKC9bYS16XSt8WzAtOV0rL2cpO1xuXG4gIGZvcihsZXQgZWxlbWVudCBvZiBhcnJheSlcbiAge1xuICAgIGlmIChwYXJzZUludChlbGVtZW50KSkgcmVzdWx0LnB1c2gocGFyc2VJbnQoZWxlbWVudCkpO1xuICAgIGVsc2UgcmVzdWx0LnB1c2gocGFyc2VTdHJpbmdUb051bWJlcihlbGVtZW50KSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufSIsImV4cG9ydCBmdW5jdGlvbiBzbHVnaWZ5KHRleHQpIDogc3RyaW5nXG57XG4gIGlmICghdGV4dCkgcmV0dXJuICcnO1xuICB2YXIgZnJvbSA9IFwiw6PDoMOhw6TDouG6vcOow6nDq8Oqw6zDrcOvw67DtcOyw7PDtsO0w7nDusO8w7vDscOnwrcvXyw6O1wiO1xuICB2YXIgdG8gICA9IFwiYWFhYWFlZWVlZWlpaWlvb29vb3V1dXVuYy0tLS0tLVwiO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gZnJvbS5sZW5ndGg7IGkgPCBsZW47IGkrKylcbiAge1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UobmV3IFJlZ0V4cChmcm9tLmNoYXJBdChpKSwgJ2cnKSwgdG8uY2hhckF0KGkpKTtcbiAgfVxuICByZXR1cm4gdGV4dFxuICAgICAgLnRvU3RyaW5nKCkgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0IHRvIHN0cmluZ1xuICAgICAgLy8gLnRvTG93ZXJDYXNlKCkgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBzdHJpbmcgdG8gbG93ZXJjYXNlIGxldHRlcnNcbiAgICAgIC50cmltKCkgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHdoaXRlc3BhY2UgZnJvbSBib3RoIHNpZGVzIG9mIGEgc3RyaW5nXG4gICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpICAgICAgICAgICAvLyBSZXBsYWNlIHNwYWNlcyB3aXRoIC1cbiAgICAgIC5yZXBsYWNlKC8mL2csICcteS0nKSAgICAgICAgICAgLy8gUmVwbGFjZSAmIHdpdGggJ2FuZCdcbiAgICAgIC5yZXBsYWNlKC9bXlxcd1xcLV0rL2csICcnKSAgICAgICAvLyBSZW1vdmUgYWxsIG5vbi13b3JkIGNoYXJzXG4gICAgICAucmVwbGFjZSgvXFwtXFwtKy9nLCAnLScpOyAgICAgICAgLy8gUmVwbGFjZSBtdWx0aXBsZSAtIHdpdGggc2luZ2xlIC1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2x1Z2lmeSh0ZXh0IDogc3RyaW5nKSA6IHN0cmluZ1xue1xuICBpZiAoIXRleHQpIHJldHVybiAnJztcbiAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXC0rL2csICcgJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplKHRleHQgOiBzdHJpbmcpIDogc3RyaW5nXG57XG4gIGlmICghdGV4dCkgcmV0dXJuIFwiXCI7XG4gIHJldHVybiB0ZXh0Lmxlbmd0aCA+IDEgPyB0ZXh0LnN1YnN0cigwLDEpLnRvVXBwZXJDYXNlKCkrdGV4dC5zdWJzdHIoMSx0ZXh0Lmxlbmd0aCkgOiB0ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVcmlJZCgkdXJpSWQgOiBzdHJpbmcpIDogc3RyaW5nXG57XG4gIGlmICghJHVyaUlkKSByZXR1cm4gXCJcIjtcbiAgbGV0IHNwbGl0ZWQgPSAkdXJpSWQudG9TdHJpbmcoKS5zcGxpdCgnLycpO1xuICByZXR1cm4gc3BsaXRlZFtzcGxpdGVkLmxlbmd0aCAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRMb25nVGV4dCh0ZXh0IDogc3RyaW5nLCBsZW5ndGggOiBudW1iZXIsIHNpemUgOiBudW1iZXIgPSA1MCkgXG57XG4gIC8vIGlmIHRoZSB0ZXh0IGlzIGp1c3QgYSBiaXQgbG9uZ2VyIHRoYW4gdGhlIGxlbmd0aCwgd2UgY3V0IGl0IG1vcmUgc28gdGhlIHRleHQyIGlzIG5vdCBzbyBzaG9ydFxuICBpZiAodGV4dC5sZW5ndGggPCBsZW5ndGggKyBzaXplKSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoIC0gc2l6ZTtcbiAgfVxuICBsZXQgc3RhcnRPZmZzZXQgPSBsZW5ndGggLSBzaXplO1xuICBsZXQgb2Zmc2V0ID0gdGV4dC5zbGljZShzdGFydE9mZnNldCwgbGVuZ3RoKS5zcGxpdCgvXFwufCF8XFw/L2cpWzBdLmxlbmd0aDtcbiAgaWYgKG9mZnNldCA9PSBzaXplKSBvZmZzZXQgPSB0ZXh0LnNsaWNlKHN0YXJ0T2Zmc2V0LCBsZW5ndGgpLnNwbGl0KCcgJylbMF0ubGVuZ3RoO1xuICBvZmZzZXQgKz0gc3RhcnRPZmZzZXQgKyAxO1xuICBsZXQgdGV4dDEgPSB0ZXh0LnNsaWNlKDAsIG9mZnNldCk7XG4gIGxldCB0ZXh0MiA9IHRleHQuc2xpY2Uob2Zmc2V0KTtcbiAgcmV0dXJuIHsgZmlyc3Q6IHRleHQxLCBzZWNvbmQ6IHRleHQyIH07XG59Il19
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvanMvYXBwLmNvbXBvbmVudC50cyIsInNyYy9qcy9hcHAubW9kdWxlLnRzIiwic3JjL2pzL2NsYXNzZXMvY2xhc3Nlcy50cyIsInNyYy9qcy9jbGFzc2VzL2NvbmZpZy9nb2dvLWNvbmZpZy5jbGFzcy50cyIsInNyYy9qcy9jbGFzc2VzL2NvbmZpZy9nb2dvLWRlZmF1bHQtZmVhdHVyZS50cyIsInNyYy9qcy9jbGFzc2VzL2NvbmZpZy9nb2dvLWZlYXR1cmUuY2xhc3MudHMiLCJzcmMvanMvY2xhc3Nlcy9lbGVtZW50L2NhdGVnb3J5LXZhbHVlLmNsYXNzLnRzIiwic3JjL2pzL2NsYXNzZXMvZWxlbWVudC9jb250cmlidXRpb24uY2xhc3MudHMiLCJzcmMvanMvY2xhc3Nlcy9lbGVtZW50L2VsZW1lbnQtYmFzZS5jbGFzcy50cyIsInNyYy9qcy9jbGFzc2VzL2VsZW1lbnQvZWxlbWVudC11cmwuY2xhc3MudHMiLCJzcmMvanMvY2xhc3Nlcy9lbGVtZW50L2VsZW1lbnQuY2xhc3MudHMiLCJzcmMvanMvY2xhc3Nlcy9lbGVtZW50L29wdGlvbi12YWx1ZS5jbGFzcy50cyIsInNyYy9qcy9jbGFzc2VzL2VsZW1lbnQvcG9zdGFsLWFkZHJlc3MuY2xhc3MudHMiLCJzcmMvanMvY2xhc3Nlcy9lbGVtZW50L3N0YW1wLmNsYXNzLnRzIiwic3JjL2pzL2NsYXNzZXMvZWxlbWVudC92b3RlLXJlcG9ydC5jbGFzcy50cyIsInNyYy9qcy9jbGFzc2VzL2V2ZW50LmNsYXNzLnRzIiwic3JjL2pzL2NsYXNzZXMvaGlzdG9yeS1zdGF0ZS5jbGFzcy50cyIsInNyYy9qcy9jbGFzc2VzL21hcC90aWxlLWxheWVyLmNsYXNzLnRzIiwic3JjL2pzL2NsYXNzZXMvbWFwL3ZpZXdwb3J0LmNsYXNzLnRzIiwic3JjL2pzL2NsYXNzZXMvdGF4b25vbXkvY2F0ZWdvcnkuY2xhc3MudHMiLCJzcmMvanMvY2xhc3Nlcy90YXhvbm9teS9vcHRpb24uY2xhc3MudHMiLCJzcmMvanMvY29tcG9uZW50cy9jdXN0b20tcG9wdXAuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvZGlyZWN0b3J5LW1lbnUvY2F0ZWdvcnktb3B0aW9uLXRyZWUtbm9kZS5jbGFzcy50cyIsInNyYy9qcy9jb21wb25lbnRzL2RpcmVjdG9yeS1tZW51L2RpcmVjdG9yeS1tZW51LmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL2RpcmVjdG9yeS1tZW51L2ZpbHRlcnMuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvZWxlbWVudC9lbGVtZW50LW1lbnUuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvZWxlbWVudC9lbGVtZW50LmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL2VsZW1lbnQvaW1hZ2VzLmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL2VsZW1lbnQvaW50ZXJhY3RpdmUtc2VjdGlvbi5jb21wb25lbnQudHMiLCJzcmMvanMvY29tcG9uZW50cy9lbGVtZW50L21vZGVyYXRpb24uY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvZWxlbWVudC9zdGFtcC5jb21wb25lbnQudHMiLCJzcmMvanMvY29tcG9uZW50cy9nb2dvLWNvbnRyb2xzLmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL2xpc3QvZWxlbWVudC1saXN0LmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL21hcC9kaXJlY3Rpb25zLmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL21hcC9pbmZvLWJhci5jb21wb25lbnQudHMiLCJzcmMvanMvY29tcG9uZW50cy9tYXAvbWFwLWNvbnRyb2xzLmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL21hcC9tYXAuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvbWFwL21hcmtlci5jb21wb25lbnQudHMiLCJzcmMvanMvY29tcG9uZW50cy9tb2RhbHMvYWJzdHJhY3QtbW9kYWwuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvbW9kYWxzL2RlbGV0ZS5jb21wb25lbnQudHMiLCJzcmMvanMvY29tcG9uZW50cy9tb2RhbHMvcGljay1hZGRyZXNzLmNvbXBvbmVudC50cyIsInNyYy9qcy9jb21wb25lbnRzL21vZGFscy9yZXBvcnQuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvbW9kYWxzL3NlbmQtZW1haWwuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvbW9kYWxzL3ZvdGUuY29tcG9uZW50LnRzIiwic3JjL2pzL2NvbXBvbmVudHMvc2VhcmNoLWJhci9zZWFyY2gtYmFyLmNvbXBvbmVudC50cyIsInNyYy9qcy9nb2dvY2FydG8udHMiLCJzcmMvanMvbWFuYWdlcnMvZGF0YS10eXBlLm1hbmFnZXIudHMiLCJzcmMvanMvbWFuYWdlcnMvZWxlbWVudHMubWFuYWdlci50cyIsInNyYy9qcy9tYW5hZ2Vycy9nZW9jb2RpbmcubWFuYWdlci50cyIsInNyYy9qcy9tYW5hZ2Vycy9oaXN0b3J5LXN0YXRlLm1hbmFnZXIudHMiLCJzcmMvanMvbWFuYWdlcnMvbWFwLm1hbmFnZXIudHMiLCJzcmMvanMvbWFuYWdlcnMvbW9kZS5tYW5hZ2VyLnRzIiwic3JjL2pzL21hbmFnZXJzL3N0YXRlLm1hbmFnZXIudHMiLCJzcmMvanMvbW9kdWxlcy9hamF4Lm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2JvdW5kcy5tb2R1bGUudHMiLCJzcmMvanMvbW9kdWxlcy9jb3JlL2RvY3VtZW50LXRpdGxlLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2NvcmUvaGlzdG9yeS5tb2R1bGUudHMiLCJzcmMvanMvbW9kdWxlcy9jb3JlL3JvdXRlci5tb2R1bGUudHMiLCJzcmMvanMvbW9kdWxlcy9jb3JlL3RlbXBsYXRlLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2VsZW1lbnQvZGlmZi5tb2R1bGUudHMiLCJzcmMvanMvbW9kdWxlcy9lbGVtZW50L2VsZW1lbnQtanNvbi1sb2FkZXIubW9kdWxlLnRzIiwic3JjL2pzL21vZHVsZXMvZWxlbWVudC9mb3JtYXRlci5tb2R1bGUudHMiLCJzcmMvanMvbW9kdWxlcy9lbGVtZW50L2ljb25zLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2VsZW1lbnQvb3B0aW9uLXZhbHVlcy5tb2R1bGUudHMiLCJzcmMvanMvbW9kdWxlcy9lbGVtZW50cy9lbGVtZW50cy1qc29uLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2VsZW1lbnRzL2VsZW1lbnRzLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2VsZW1lbnRzL2Zhdm9yaXRlLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2VsZW1lbnRzL3N0YW1wLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2dlb2NvZGVyLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL2xvZ2luLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL21hcC9kaXNwbGF5LWVsZW1lbnQtYWxvbmUubW9kdWxlLnRzIiwic3JjL2pzL21vZHVsZXMvdGF4b25vbXkvZmlsdGVyLXJvdXRpbmcubW9kdWxlLnRzIiwic3JjL2pzL21vZHVsZXMvdGF4b25vbXkvZmlsdGVyLm1vZHVsZS50cyIsInNyYy9qcy9tb2R1bGVzL3RheG9ub215L3RheG9ub215LXNrb3MubW9kdWxlLnRzIiwic3JjL2pzL21vZHVsZXMvdGF4b25vbXkvdGF4b25vbXkubW9kdWxlLnRzIiwic3JjL2pzL3V0aWxzL2Nvb2tpZXMudHMiLCJzcmMvanMvdXRpbHMvcGFyYW1zLnRzIiwic3JjL2pzL3V0aWxzL3BhcnNlci1zdHJpbmctbnVtYmVyLnRzIiwic3JjL2pzL3V0aWxzL3N0cmluZy1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQ1dBOztBQU1BLElBQUEsZUFBQSxhQUFBLFlBQUE7QUFJQyxhQUFBLFlBQUEs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QUFsQixDQUF3QixHQUF4QixDQUFkO0FBQ0EsV0FBTyxRQUFRLFFBQVEsTUFBUixHQUFpQixDQUF6QixDQUFQO0FBQ0Q7QUFFSyxTQUFBLGFBQUEsQ0FBd0IsSUFBeEIsRUFBdUMsTUFBdkMsRUFBd0QsSUFBeEQsRUFBMEU7QUFBbEIsUUFBQSxTQUFBLEtBQUEsQ0FBQSxFQUFBO0FBQUEsZUFBQSxFQUFBO0FBQWtCO0FBRTlFO0FBQ0EsUUFBSSxLQUFLLE1BQUwsR0FBYyxTQUFTLElBQTNCLEVBQWlDO0FBQy9CLGlCQUFTLFNBQVMsSUFBbEI7QUFDRDtBQUNELFFBQUksY0FBYyxTQUFTLElBQTNCO0FBQ0EsUUFBSSxTQUFTLEtBQUssS0FBTCxDQUFXLFdBQVgsRUFBd0IsTUFBeEIsRUFBZ0MsS0FBaEMsQ0FBc0MsVUFBdEMsRUFBa0QsQ0FBbEQsRUFBcUQsTUFBbEU7QUFDQSxRQUFJLFVBQVUsSUFBZCxFQUFvQixTQUFTLEtBQUssS0FBTCxDQUFXLFdBQVgsRUFBd0IsTUFBeEIsRUFBZ0MsS0FBaEMsQ0FBc0MsR0FBdEMsRUFBMkMsQ0FBM0MsRUFBOEMsTUFBdkQ7QUFDcEIsY0FBVSxjQUFjLENBQXhCO0FBQ0EsUUFBSSxRQUFRLEtBQUssS0FBTCxDQUFXLENBQVgsRUFBYyxNQUFkLENBQVo7QUFDQSxRQUFJLFFBQVEsS0FBSyxLQUFMLENBQVcsTUFBWCxDQUFaO0FBQ0EsV0FBTyxFQUFFLE9BQU8sS0FBVCxFQUFnQixRQUFRLEtBQXhCLEVBQVA7QUFDRCIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cblxuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMsIEFwcE1vZGVzIH0gZnJvbSBcIi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4vZ29nb2NhcnRvXCI7XG5cblxuLy9kZWNsYXJlIHZhciAkO1xuZGVjbGFyZSBsZXQgJCwgd2luZG93IDogYW55LCBNYXRlcmlhbGl6ZSA6IGFueTtcblxuZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudFxue1xuXHRpbmZvckJhckFuaW1hdGlvblRpbWVyO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdEFwcC5kaXJlY3RvcnlNZW51Q29tcG9uZW50Lm9uU2hvdy5kbyggKCkgPT4geyB0aGlzLmhhbmRsZURpcmVjdG9yeU1lbnVTaG93KCkgfSk7XG5cdFx0QXBwLmRpcmVjdG9yeU1lbnVDb21wb25lbnQub25IaWRlLmRvKCAoKSA9PiB7IHRoaXMuaGFuZGxlRGlyZWN0b3J5TWVudUhpZGUoKSB9KTtcblx0fVxuXG5cdGluaXRpYWxpemUoKVxuXHR7XG5cdFx0dGhpcy51cGRhdGVDb21wb25lbnRzU2l6ZSgpO1xuXG5cdFx0bGV0IHJlcztcblx0XHR3aW5kb3cub25yZXNpemUgPSAoKSA9PlxuXHRcdHtcblx0XHQgICBpZiAocmVzKSB7IGNsZWFyVGltZW91dChyZXMpOyB9XG5cdFx0ICAgcmVzID0gc2V0VGltZW91dCggKCkgPT4geyBcblx0XHQgICBcdGNvbnNvbGUubG9nKFwiT24gcmVzaXplIHVwZGF0ZSBjb21wb25lbnQgc2l6ZVwiKTtcblx0XHQgICBcdHRoaXMudXBkYXRlQ29tcG9uZW50c1NpemUoKTsgXG5cdFx0ICAgXHRBcHAuZGlyZWN0b3J5TWVudUNvbXBvbmVudC51cGRhdGVTaXplKCk7XG5cdFx0ICAgfSwyMDApO1xuXHRcdH07XHRcblxuXHRcdHNldFRpbWVvdXQoICgpID0+IHsgdGhpcy51cGRhdGVDb21wb25lbnRzU2l6ZShmYWxzZSk7IH0sIDEwMDApO1x0XG5cdFx0c2V0VGltZW91dCggKCkgPT4geyB0aGlzLnVwZGF0ZUNvbXBvbmVudHNTaXplKGZhbHNlKTsgfSwgMjAwMCk7XG5cdFx0c2V0VGltZW91dCggKCkgPT4geyB0aGlzLnVwZGF0ZUNvbXBvbmVudHNTaXplKGZhbHNlKTsgfSwgNTAwMCk7XG5cdH1cblxuXHR0b2FzdE1lc3NhZ2UoJG1lc3NhZ2UsICRkdXJhdGlvbiA9IDMwMDApXG5cdHtcblx0XHRNYXRlcmlhbGl6ZS50b2FzdCgkbWVzc2FnZSwgJGR1cmF0aW9uLCAncm91bmRlZCcpXG5cdH1cblxuXHRoYW5kbGVEaXJlY3RvcnlNZW51U2hvdygpXG5cdHtcdFx0XG5cdFx0aWYgKCF0aGlzLmlzTW9iaWxlU2NyZWVuKCkpXG5cdFx0e1xuXHRcdFx0JCgnI2RpcmVjdG9yeS1jb250ZW50JykudmVsb2NpdHkoeydtYXJnaW4tbGVmdCc6IEFwcC5kaXJlY3RvcnlNZW51Q29tcG9uZW50LndpZHRofSwge2R1cmF0aW9uOiAzMDAsIHF1ZXVlOiBmYWxzZSwgZWFzaW5nOiAnc3dpbmcnfSk7XG5cdFx0XHQkKCcjbWFwLWdvZ28tY29udHJvbHMnKS52ZWxvY2l0eSh7J3BhZGRpbmctbGVmdCc6ICcxMHB4J30sIHtkdXJhdGlvbjogMzAwLCBxdWV1ZTogZmFsc2UsIGVhc2luZzogJ3N3aW5nJ30pO1xuXHRcdFx0JCgnLnNob3ctZGlyZWN0b3J5LW1lbnUtYnV0dG9uJykuaGlkZSgpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7ICQoJyNkaXJlY3RvcnktY29udGVudCcpLmNzcygnbWFyZ2luLWxlZnQnLCBBcHAuZGlyZWN0b3J5TWVudUNvbXBvbmVudC53aWR0aCk7IH0sIDQwMCk7XG5cdFx0fVx0XG5cdFx0c2V0VGltZW91dCggKCkgPT4geyBBcHAubWFwQ29tcG9uZW50LnJlc2l6ZSgpIH0sIDQwMCk7XG5cdH1cblxuXHRoYW5kbGVEaXJlY3RvcnlNZW51SGlkZSgpXG5cdHtcblx0XHQkKCcuc2hvdy1kaXJlY3RvcnktbWVudS1idXR0b24nKS5mYWRlSW4oMjAwKTtcblx0XHQkKCcjZGlyZWN0b3J5LWNvbnRlbnQnKS52ZWxvY2l0eSh7J21hcmdpbi1sZWZ0JzonMCd9LCB7ZHVyYXRpb246IDEwMCwgcXVldWU6IGZhbHNlLCBlYXNpbmc6ICdzd2luZyd9KTtcdFx0XG5cdFx0JCgnI21hcC1nb2dvLWNvbnRyb2xzJykudmVsb2NpdHkoeydwYWRkaW5nLWxlZnQnOiAnMHB4J30sIHtkdXJhdGlvbjogMTAwLCBxdWV1ZTogZmFsc2UsIGVhc2luZzogJ3N3aW5nJ30pO1xuXHRcdHNldFRpbWVvdXQoICgpID0+IHsgQXBwLm1hcENvbXBvbmVudC5yZXNpemUoKSB9LCAyMDApO1xuXHR9XHRcblxuXHRpc01vYmlsZVNjcmVlbigpIHsgcmV0dXJuIHRoaXMud2lkdGgoKSA8IDg1MDsgfVxuXG5cdG1hcFdpZHRoKCkgeyByZXR1cm4gJCgnI2RpcmVjdG9yeS1jb250ZW50Jykud2lkdGgoKTsgfVxuXG5cdHdpZHRoKCkgeyByZXR1cm4gJCgnLmdvZ29jYXJ0by1jb250YWluZXInKS53aWR0aCgpOyB9XG5cblx0dXBkYXRlQ29tcG9uZW50c1NpemUoJHJlZnJlc2hJbmZvQmFyID0gdHJ1ZSlcblx0e1x0XG5cdFx0QXBwLmRpcmVjdG9yeU1lbnVDb21wb25lbnQudXBkYXRlU2l6ZSgpO1xuXG5cdFx0QXBwLnNlYXJjaEJhckNvbXBvbmVudC51cGRhdGUoKTtcblxuXHRcdEFwcC5nb2dvQ29udHJvbENvbXBvbmVudC51cGRhdGVQb3NpdGlvbigpO1xuXG5cdFx0Ly8gdXBkYXRlIGltZyBjb250cm9scyBmb3IgZWxlbWVudCBsaXN0XG5cdFx0JCgnI2RpcmVjdG9yeS1jb250ZW50LWxpc3QgLmVsZW1lbnQtaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHQkKHRoaXMpLmZpbmQoJy5pbWctb3ZlcmxheScpLmNzcygnaGVpZ2h0JywgJCh0aGlzKS5maW5kKCcuaW1nLWNvbnRhaW5lcicpLmhlaWdodCgpKTtcblx0XHR9KTtcblxuXHRcdGxldCBpbmZvQmFySGFzQ2hhbmdlRGlzcGxheU1vZGUgPSBmYWxzZTtcblx0XHQvLyBzaG93IGVsZW1lbnQgaW5mbyBiYXIgYXNpZGUgb3IgYXQgdGhlIGJvdHRvbSBkZXBlbmRpbmcgb2YgZGlyZWNvdHktY29udGVudCB3aWR0aFxuXHRcdGlmICh0aGlzLm1hcFdpZHRoKCkgPiA5MDApXG5cdFx0e1xuXHRcdFx0aWYgKCFBcHAuaW5mb0JhckNvbXBvbmVudC5pc0Rpc3BsYXllZEFzaWRlKCkpXG5cdFx0XHR7XG5cdFx0XHRcdEFwcC5pbmZvQmFyQ29tcG9uZW50LmRpc3BsYXlBc2lkZSgpO1xuXHRcdFx0XHRpbmZvQmFySGFzQ2hhbmdlRGlzcGxheU1vZGUgPSB0cnVlO1xuXHRcdFx0fVx0XHRcdFxuXHRcdH1cdFxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHRpZiAoIUFwcC5pbmZvQmFyQ29tcG9uZW50LmlzRGlzcGxheWVkQm90dG9tKCkpXG5cdFx0XHR7XG5cdFx0XHRcdEFwcC5pbmZvQmFyQ29tcG9uZW50LmRpc3BsYXlCb3R0b20oKTtcblx0XHRcdFx0aW5mb0Jhckhhc0NoYW5nZURpc3BsYXlNb2RlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdCQoJyNkaXJlY3RvcnktY29udGVudC1tYXAnKS5zdG9wKHRydWUpLmNzcygnbWFyZ2luLXJpZ2h0JywgJzAnKTtcblx0XHR9XHRcblxuXHRcdGlmIChBcHAuaW5mb0JhckNvbXBvbmVudC5pc0Rpc3BsYXllZEFzaWRlKCkpXHRcblx0XHR7XHRcdFx0XG5cdFx0XHRsZXQgaW5mb0JhcldpZHRoO1xuXHRcdFx0aWYgKEFwcC5jb25maWcuaW5mb2Jhci53aWR0aCkgaW5mb0JhcldpZHRoID0gQXBwLmNvbmZpZy5pbmZvYmFyLndpZHRoO1xuXHRcdFx0ZWxzZSBpbmZvQmFyV2lkdGggPSB0aGlzLm1hcFdpZHRoKCkgPiAxMTAwID8gJzU0MHB4JyA6ICc0NzBweCc7XG5cblx0XHRcdGlmIChpbmZvQmFyV2lkdGggPT0gJzQ3MHB4JykgJCgnI2VsZW1lbnQtaW5mby1iYXInKS5hZGRDbGFzcygnc21hbGwtd2lkdGgnKTtcblx0XHRcdGVsc2UgJCgnI2VsZW1lbnQtaW5mby1iYXInKS5yZW1vdmVDbGFzcygnc21hbGwtd2lkdGgnKTtcblxuXHRcdFx0aWYgKGluZm9CYXJIYXNDaGFuZ2VEaXNwbGF5TW9kZSlcblx0XHRcdFx0JCgnI2VsZW1lbnQtaW5mby1iYXInKS5jc3MoJ3dpZHRoJywgaW5mb0JhcldpZHRoKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0JCgnI2VsZW1lbnQtaW5mby1iYXInKS5hbmltYXRlKHsnd2lkdGgnOiBpbmZvQmFyV2lkdGh9LCAzNTAsIFwic3dpbmdcIik7XG5cdFx0XHRcblx0XHRcdHRoaXMudXBkYXRlRGlyZWN0b3J5Q29udGVudE1hcmdpbklmSW5mb0JhckRpc3BsYXllZEFzaWRlKCFpbmZvQmFySGFzQ2hhbmdlRGlzcGxheU1vZGUsIGluZm9CYXJXaWR0aCk7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHRpZiAoJHJlZnJlc2hJbmZvQmFyKSAkKCcjZWxlbWVudC1pbmZvLWJhcicpLnN0b3AodHJ1ZSlcblx0XHRcdCQoJyNlbGVtZW50LWluZm8tYmFyJykuY3NzKCd3aWR0aCcsICcxMDAlJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCRyZWZyZXNoSW5mb0Jhcikgc2V0VGltZW91dCggKCkgPT4geyBBcHAuaW5mb0JhckNvbXBvbmVudC5yZWZyZXNoKCk7IH0sIDEwMCk7XG5cblx0XHRpZiAoJCgnI2RpcmVjdG9yeS1tZW51JykuaXMoJzp2aXNpYmxlJykgJiYgIXRoaXMuaXNNb2JpbGVTY3JlZW4oKSlcblx0XHR7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBcblx0XHRcdFx0JCgnI2RpcmVjdG9yeS1jb250ZW50JykuY3NzKCdtYXJnaW4tbGVmdCcsIEFwcC5kaXJlY3RvcnlNZW51Q29tcG9uZW50LndpZHRoKTtcblx0XHRcdH0sMCk7XHRcdFxuXHRcdH1cblx0XHRlbHNlICQoJyNkaXJlY3RvcnktY29udGVudCcpLmNzcygnbWFyZ2luLWxlZnQnLCAwKTtcblx0fVxuXG5cdHVwZGF0ZURpcmVjdG9yeUNvbnRlbnRNYXJnaW5JZkluZm9CYXJEaXNwbGF5ZWRBc2lkZShhbmltYXRlIDogYm9vbGVhbiA9IGZhbHNlLCB3aWR0aCA6IHN0cmluZyA9IEFwcC5pbmZvQmFyQ29tcG9uZW50LndpZHRoKCkpXG5cdHtcdFx0XG5cdFx0aWYgKCFBcHAuaW5mb0JhckNvbXBvbmVudC5pc1Zpc2libGUpIHJldHVybjtcblxuXHRcdGlmIChhbmltYXRlKSAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbWFwJykuc3RvcCh0cnVlKS5hbmltYXRlKHsnbWFyZ2luLXJpZ2h0Jzogd2lkdGh9LCAzNTAsICdzd2luZycpO1xuXHRcdGVsc2UgJCgnI2RpcmVjdG9yeS1jb250ZW50LW1hcCcpLnN0b3AodHJ1ZSkuY3NzKCdtYXJnaW4tcmlnaHQnLCB3aWR0aCk7XG5cdFx0XG5cdFx0QXBwLmNvbXBvbmVudC51cGRhdGVNYXBTaXplKCk7XG5cdH1cblx0XG5cdHVwZGF0ZU1hcFNpemUoKVxuXHR7XHRcdFxuXHRcdGlmICghQXBwLmluZm9CYXJDb21wb25lbnQuaXNEaXNwbGF5ZWRBc2lkZSgpKSAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbWFwJykuc3RvcCh0cnVlKS5jc3MoJ21hcmdpbi1yaWdodCcsICcwJyk7XG5cdFx0aWYgKEFwcC5tYXBDb21wb25lbnQpIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IEFwcC5tYXBDb21wb25lbnQucmVzaXplKCk7IH0sMCk7XG5cdH1cdFxufVxuXG5cblxuXG5cbiIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwibGVhZmxldFwiIC8+XG5cbi8vIE1BTkFHRVJTXG5pbXBvcnQgeyBNb2RlTWFuYWdlciwgQXBwTW9kZXMgfSBmcm9tIFwiLi9tYW5hZ2Vycy9tb2RlLm1hbmFnZXJcIjtcbmltcG9ydCB7IFN0YXRlTWFuYWdlciwgQXBwU3RhdGVzIH0gZnJvbSBcIi4vbWFuYWdlcnMvc3RhdGUubWFuYWdlclwiO1xuaW1wb3J0IHsgRGF0YVR5cGVNYW5hZ2VyLCBBcHBEYXRhVHlwZSB9IGZyb20gXCIuL21hbmFnZXJzL2RhdGEtdHlwZS5tYW5hZ2VyXCI7XG5pbXBvcnQgeyBFbGVtZW50c01hbmFnZXIgfSBmcm9tIFwiLi9tYW5hZ2Vycy9lbGVtZW50cy5tYW5hZ2VyXCI7XG5pbXBvcnQgeyBIaXN0b3J5U3RhdGVNYW5hZ2VyIH0gZnJvbSBcIi4vbWFuYWdlcnMvaGlzdG9yeS1zdGF0ZS5tYW5hZ2VyXCI7XG5pbXBvcnQgeyBHZW9jb2RpbmdNYW5hZ2VyIH0gZnJvbSBcIi4vbWFuYWdlcnMvZ2VvY29kaW5nLm1hbmFnZXJcIjtcbmltcG9ydCB7IE1hcE1hbmFnZXIgfSBmcm9tIFwiLi9tYW5hZ2Vycy9tYXAubWFuYWdlclwiO1xuXG4vLyBNT0RVTEVTXG5pbXBvcnQgeyBHZW9jb2Rlck1vZHVsZSwgR2VvY29kZVJlc3VsdCB9IGZyb20gXCIuL21vZHVsZXMvZ2VvY29kZXIubW9kdWxlXCI7XG5pbXBvcnQgeyBGaWx0ZXJNb2R1bGUgfSBmcm9tIFwiLi9tb2R1bGVzL3RheG9ub215L2ZpbHRlci5tb2R1bGVcIjtcbmltcG9ydCB7IEZpbHRlclJvdXRpbmdNb2R1bGUgfSBmcm9tIFwiLi9tb2R1bGVzL3RheG9ub215L2ZpbHRlci1yb3V0aW5nLm1vZHVsZVwiO1xuaW1wb3J0IHsgRWxlbWVudHNNb2R1bGUgfSBmcm9tIFwiLi9tb2R1bGVzL2VsZW1lbnRzL2VsZW1lbnRzLm1vZHVsZVwiO1xuaW1wb3J0IHsgRWxlbWVudHNKc29uTW9kdWxlIH0gZnJvbSBcIi4vbW9kdWxlcy9lbGVtZW50cy9lbGVtZW50cy1qc29uLm1vZHVsZVwiO1xuaW1wb3J0IHsgRmF2b3JpdGVNb2R1bGUgfSBmcm9tIFwiLi9tb2R1bGVzL2VsZW1lbnRzL2Zhdm9yaXRlLm1vZHVsZVwiO1xuaW1wb3J0IHsgRGlzcGxheUVsZW1lbnRBbG9uZU1vZHVsZSB9IGZyb20gXCIuL21vZHVsZXMvbWFwL2Rpc3BsYXktZWxlbWVudC1hbG9uZS5tb2R1bGVcIjtcbmltcG9ydCB7IEFqYXhNb2R1bGUgfSBmcm9tIFwiLi9tb2R1bGVzL2FqYXgubW9kdWxlXCI7XG5pbXBvcnQgeyBUYXhvbm9teU1vZHVsZSB9IGZyb20gJy4vbW9kdWxlcy90YXhvbm9teS90YXhvbm9teS5tb2R1bGUnO1xuaW1wb3J0IHsgVGF4b25vbXlTa29zTW9kdWxlIH0gZnJvbSAnLi9tb2R1bGVzL3RheG9ub215L3RheG9ub215LXNrb3MubW9kdWxlJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gXCIuL21vZHVsZXMvY29yZS9yb3V0ZXIubW9kdWxlXCI7XG5pbXBvcnQgeyBMb2dpbk1vZHVsZSB9IGZyb20gXCIuL21vZHVsZXMvbG9naW4ubW9kdWxlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1vZHVsZSB9IGZyb20gXCIuL21vZHVsZXMvY29yZS90ZW1wbGF0ZS5tb2R1bGVcIjtcbmltcG9ydCB7IEhpc3RvcnlNb2R1bGUgfSBmcm9tICcuL21vZHVsZXMvY29yZS9oaXN0b3J5Lm1vZHVsZSc7XG5pbXBvcnQgeyBCb3VuZHNNb2R1bGUgfSBmcm9tICcuL21vZHVsZXMvYm91bmRzLm1vZHVsZSc7XG5pbXBvcnQgeyBEb2N1bWVudFRpdGxlTW9kdWxlIH0gZnJvbSAnLi9tb2R1bGVzL2NvcmUvZG9jdW1lbnQtdGl0bGUubW9kdWxlJztcbmltcG9ydCB7IEVsZW1lbnRKc29uUGFyc2VyTW9kdWxlIH0gZnJvbSAnLi9tb2R1bGVzL2VsZW1lbnQvZWxlbWVudC1qc29uLWxvYWRlci5tb2R1bGUnO1xuaW1wb3J0IHsgRWxlbWVudEZvcm1hdGVyTW9kdWxlIH0gZnJvbSAnLi9tb2R1bGVzL2VsZW1lbnQvZm9ybWF0ZXIubW9kdWxlJztcbmltcG9ydCB7IEVsZW1lbnREaWZmTW9kdWxlIH0gZnJvbSAnLi9tb2R1bGVzL2VsZW1lbnQvZGlmZi5tb2R1bGUnO1xuaW1wb3J0IHsgRWxlbWVudEljb25zTW9kdWxlIH0gZnJvbSBcIi4vbW9kdWxlcy9lbGVtZW50L2ljb25zLm1vZHVsZVwiO1xuaW1wb3J0IHsgRWxlbWVudE9wdGlvblZhbHVlc01vZHVsZSB9IGZyb20gXCIuL21vZHVsZXMvZWxlbWVudC9vcHRpb24tdmFsdWVzLm1vZHVsZVwiO1xuaW1wb3J0IHsgU3RhbXBNb2R1bGUgfSBmcm9tIFwiLi9tb2R1bGVzL2VsZW1lbnRzL3N0YW1wLm1vZHVsZVwiO1xuXG4vLyBDT01QT05FTlRTXG5pbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWxlbWVudExpc3RDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2xpc3QvZWxlbWVudC1saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSW5mb0JhckNvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWFwL2luZm8tYmFyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9zZWFyY2gtYmFyL3NlYXJjaC1iYXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEaXJlY3RvcnlNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9kaXJlY3RvcnktbWVudS9kaXJlY3RvcnktbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEZpbHRlcnNDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2RpcmVjdG9yeS1tZW51L2ZpbHRlcnMuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBHb0dvQ29udHJvbENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvZ29nby1jb250cm9scy5jb21wb25lbnRcIjtcbmltcG9ydCB7IE1hcENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWFwL21hcC5jb21wb25lbnRcIjtcbmltcG9ydCB7IE1hcENvbnRyb2xzQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9tYXAvbWFwLWNvbnRyb2xzLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRGlyZWN0aW9uc0NvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWFwL2RpcmVjdGlvbnMuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDdXN0b21Qb3B1cENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvY3VzdG9tLXBvcHVwLmNvbXBvbmVudFwiO1xuXG4vLyBNT0RBTFNcbmltcG9ydCB7IFBpY2tBZGRyZXNzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21vZGFscy9waWNrLWFkZHJlc3MuY29tcG9uZW50JztcbmltcG9ydCB7IFZvdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbW9kYWxzL3ZvdGUuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tb2RhbHMvcmVwb3J0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWxldGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbW9kYWxzL2RlbGV0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VuZEVtYWlsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21vZGFscy9zZW5kLWVtYWlsLmNvbXBvbmVudCc7XG5cbi8vIE9USEVSU1xuaW1wb3J0IHsgR29Hb0NvbmZpZyB9IGZyb20gXCIuL2NsYXNzZXMvY29uZmlnL2dvZ28tY29uZmlnLmNsYXNzXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi9nb2dvY2FydG9cIjtcbmltcG9ydCAqIGFzIENvb2tpZXMgZnJvbSBcIi4vdXRpbHMvY29va2llc1wiO1xuXG4vLyBFWFBPUlQgXG5leHBvcnQgeyBBcHBEYXRhVHlwZSB9IGZyb20gXCIuL21hbmFnZXJzL2RhdGEtdHlwZS5tYW5hZ2VyXCI7XG5leHBvcnQgeyBBcHBTdGF0ZXMgfSBmcm9tIFwiLi9tYW5hZ2Vycy9zdGF0ZS5tYW5hZ2VyXCI7XG5leHBvcnQgeyBBcHBNb2RlcyB9IGZyb20gXCIuL21hbmFnZXJzL21vZGUubWFuYWdlclwiO1xuXG4vKlxuKiBBcHAgTW9kdWxlLiBNYWluIG1vZHVsZSBvZiB0aGUgQXBwKlxuKiBBcHBNb2R1bGUgY3JlYXRlcyBhbGwgb3RoZXJzIGNvbXBvbmVudHMgYW5kIG1vZHVsZXNcbiovXG5leHBvcnQgY2xhc3MgQXBwTW9kdWxlXG57XHRcdFxuXHRyZWFkb25seSBjb25maWcgOiBHb0dvQ29uZmlnO1xuXHRyZWFkb25seSBpc0lmcmFtZSA6IGJvb2xlYW4gPSBmYWxzZTtcblx0cmVhZG9ubHkgbG9hZEZ1bGxUYXhvbm9teSA6IGJvb2xlYW4gPSB0cnVlO1xuXHRyZWFkb25seSByZXF1ZXN0IDogYW55ID0ge307XG5cblx0bW9kZU1hbmFnZXIgPSBuZXcgTW9kZU1hbmFnZXIoKTtcblx0c3RhdGVNYW5hZ2VyID0gbmV3IFN0YXRlTWFuYWdlcigpO1xuXHRkYXRhVHlwZU1hbmFnZXIgPSBuZXcgRGF0YVR5cGVNYW5hZ2VyKCk7XG5cdGVsZW1lbnRzTWFuYWdlciA6IEVsZW1lbnRzTWFuYWdlcjtcblx0aGlzdG9yeVN0YXRlTWFuYWdlciA9IG5ldyBIaXN0b3J5U3RhdGVNYW5hZ2VyKCk7XG5cdGdlb2NvZGluZ01hbmFnZXIgOiBHZW9jb2RpbmdNYW5hZ2VyO1xuXHRtYXBNYW5hZ2VyIDogTWFwTWFuYWdlcjtcblx0XG5cdGdlb2NvZGVyID0gbmV3IEdlb2NvZGVyTW9kdWxlKCk7XG5cdGZpbHRlck1vZHVsZSA9IG5ldyBGaWx0ZXJNb2R1bGUoKTtcblx0ZmlsdGVyUm91dGluZ01vZHVsZSA9IG5ldyBGaWx0ZXJSb3V0aW5nTW9kdWxlKCk7XG5cdGVsZW1lbnRzTW9kdWxlID0gbmV3IEVsZW1lbnRzTW9kdWxlKCk7XG5cdGVsZW1lbnRzSnNvbk1vZHVsZSA9IG5ldyBFbGVtZW50c0pzb25Nb2R1bGUoKTtcblx0ZGlzcGxheUVsZW1lbnRBbG9uZU1vZHVsZSA9IG5ldyBEaXNwbGF5RWxlbWVudEFsb25lTW9kdWxlKCk7XG5cdGFqYXhNb2R1bGUgPSBuZXcgQWpheE1vZHVsZSgpO1xuXHRib3VuZHNNb2R1bGUgOiBCb3VuZHNNb2R1bGU7XG5cdHJvdXRlck1vZHVsZSA9IG5ldyBSb3V0ZXJNb2R1bGUoKTtcblx0dGVtcGxhdGVNb2R1bGUgPSBuZXcgVGVtcGxhdGVNb2R1bGUoKTtcblx0bG9naW5Nb2R1bGUgOiBMb2dpbk1vZHVsZTtcdFxuXHRoaXN0b3J5TW9kdWxlID0gbmV3IEhpc3RvcnlNb2R1bGUoKTtcblx0dGF4b25vbXlNb2R1bGUgPSBuZXcgVGF4b25vbXlNb2R1bGUoKTtcblx0dGF4b25vbXlTa29zTW9kdWxlID0gbmV3IFRheG9ub215U2tvc01vZHVsZSgpO1xuXHRkb2N1bWVudFRpdGxlTW9kdWxlID0gbmV3IERvY3VtZW50VGl0bGVNb2R1bGUoKTtcblx0ZWxlbWVudEpzb25QYXJzZXIgPSBuZXcgRWxlbWVudEpzb25QYXJzZXJNb2R1bGUoKTtcblx0ZWxlbWVudEZvcm1hdGVyTW9kdWxlID0gbmV3IEVsZW1lbnRGb3JtYXRlck1vZHVsZSgpO1xuXHRlbGVtZW50RGlmZk1vZHVsZSA9IG5ldyBFbGVtZW50RGlmZk1vZHVsZSgpO1xuXHRlbGVtZW50SWNvbnNNb2R1bGUgPSBuZXcgRWxlbWVudEljb25zTW9kdWxlKCk7XG5cdGVsZW1lbnRPcHRpb25WYWx1ZXNNb2R1bGUgPSBuZXcgRWxlbWVudE9wdGlvblZhbHVlc01vZHVsZSgpO1xuXHRmYXZvcml0ZU1vZHVsZSA9IG5ldyBGYXZvcml0ZU1vZHVsZSgpO1xuXHRzdGFtcE1vZHVsZSA6IFN0YW1wTW9kdWxlO1xuXG5cdGNvbXBvbmVudCA6IEFwcENvbXBvbmVudDtcblx0aW5mb0JhckNvbXBvbmVudCA9IG5ldyBJbmZvQmFyQ29tcG9uZW50KCk7XG5cdG1hcENvbXBvbmVudCAgPSBuZXcgTWFwQ29tcG9uZW50KCk7XG5cdHNlYXJjaEJhckNvbXBvbmVudCA9IG5ldyBTZWFyY2hCYXJDb21wb25lbnQoKTtcblx0ZWxlbWVudExpc3RDb21wb25lbnQgPSBuZXcgRWxlbWVudExpc3RDb21wb25lbnQoKTtcblx0ZGlyZWN0b3J5TWVudUNvbXBvbmVudCA9IG5ldyBEaXJlY3RvcnlNZW51Q29tcG9uZW50KCk7XG5cdGZpbHRlcnNDb21wb25lbnQgPSBuZXcgRmlsdGVyc0NvbXBvbmVudCgpO1x0XG5cdGdvZ29Db250cm9sQ29tcG9uZW50ID0gbmV3IEdvR29Db250cm9sQ29tcG9uZW50KCk7XHRcblx0ZGlyZWN0aW9uc0NvbXBvbmVudCA9IG5ldyBEaXJlY3Rpb25zQ29tcG9uZW50KCk7XG5cdG1hcENvbnRyb2xzQ29tcG9uZW50ID0gbmV3IE1hcENvbnRyb2xzQ29tcG9uZW50KCk7XG5cdGN1c3RvbVBvcHVwQ29tcG9uZW50ID0gbmV3IEN1c3RvbVBvcHVwQ29tcG9uZW50KCk7XG5cblx0cGlja0FkZHJlc3NDb21wb25lbnQgOiBQaWNrQWRkcmVzc0NvbXBvbmVudDtcblx0dm90ZUNvbXBvbmVudCA6IFZvdGVDb21wb25lbnQ7XG5cdHJlcG9ydENvbXBvbmVudCA6IFJlcG9ydENvbXBvbmVudDtcblx0ZGVsZXRlQ29tcG9uZW50IDogRGVsZXRlQ29tcG9uZW50O1xuXHRzZW5kRW1haWxDb21wb25lbnQgOiBTZW5kRW1haWxDb21wb25lbnQ7XG5cdFxuXHRjb25zdHJ1Y3RvcigkY29uZmlnIDogYW55LCAkaXNJZnJhbWUgPSBmYWxzZSwgJGxvYWRGdWxsVGF4b25vbXkgPSB0cnVlLCAkcmVxdWVzdCA9IHt9KVxuXHR7XG5cdFx0dGhpcy5jb25maWcgPSBuZXcgR29Hb0NvbmZpZygkY29uZmlnKTtcblx0XHR0aGlzLmlzSWZyYW1lID0gJGlzSWZyYW1lO1xuXHRcdHRoaXMubG9hZEZ1bGxUYXhvbm9teSA9ICRsb2FkRnVsbFRheG9ub215O1xuXHRcdHRoaXMucmVxdWVzdCA9ICRyZXF1ZXN0O1xuXHRcdFxuXHRcdHRoaXMubG9naW5Nb2R1bGUgPSBuZXcgTG9naW5Nb2R1bGUodGhpcy5jb25maWcuc2VjdXJpdHkudXNlclJvbGVzLCB0aGlzLmNvbmZpZy5zZWN1cml0eS51c2VyRW1haWwpO1xuXHQgIFx0dGhpcy5ib3VuZHNNb2R1bGUgPSBuZXcgQm91bmRzTW9kdWxlKHRoaXMuY29uZmlnKTsgIFx0XG5cdCAgXHR0aGlzLnN0YW1wTW9kdWxlID0gbmV3IFN0YW1wTW9kdWxlKHRoaXMuY29uZmlnKTtcblxuXHRcdENvb2tpZXMuY3JlYXRlQ29va2llKCdmaXJzdFZpc2l0JywgJ2RvbmUnKTtcdFx0XHRcblx0fVxuXG5cdGluaXRpYWxpemUoKVxuXHR7XG5cdFx0dGhpcy5jb21wb25lbnQgPSBuZXcgQXBwQ29tcG9uZW50KCk7XG5cdFx0dGhpcy5lbGVtZW50c01hbmFnZXIgPSBuZXcgRWxlbWVudHNNYW5hZ2VyKCk7XG5cdFx0dGhpcy5nZW9jb2RpbmdNYW5hZ2VyID0gbmV3IEdlb2NvZGluZ01hbmFnZXIoKTtcblx0XHR0aGlzLm1hcE1hbmFnZXIgPSBuZXcgTWFwTWFuYWdlcigpO1xuXG5cdFx0Ly8gaW50aWFsaXplIG1vZGFscyBjb21wb25lbnQgKHRlbXBsYXRlIGFzIGJlZW4gY3JlYXRlZCBhZnRlciBBcHBNb2R1bGUpXG5cdFx0dGhpcy5waWNrQWRkcmVzc0NvbXBvbmVudCA9IG5ldyBQaWNrQWRkcmVzc0NvbXBvbmVudCgpO1xuXHRcdHRoaXMudm90ZUNvbXBvbmVudCA9IG5ldyBWb3RlQ29tcG9uZW50KCk7XG5cdFx0dGhpcy5yZXBvcnRDb21wb25lbnQgPSBuZXcgUmVwb3J0Q29tcG9uZW50KCk7XG5cdFx0dGhpcy5kZWxldGVDb21wb25lbnQgPSBuZXcgRGVsZXRlQ29tcG9uZW50KCk7XG5cdFx0dGhpcy5zZW5kRW1haWxDb21wb25lbnQgPSBuZXcgU2VuZEVtYWlsQ29tcG9uZW50KCk7XHRcblx0fVxuXG5cdC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXHQvLyBHZXR0ZXJzICYgU2V0dGVycyBTaG9ydGN1dHNcblx0Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0bWFwKCkgOiBMLk1hcCB7IHJldHVybiB0aGlzLm1hcENvbXBvbmVudD8gdGhpcy5tYXBDb21wb25lbnQuZ2V0TWFwKCkgOiBudWxsOyB9O1xuXG5cdGVsZW1lbnRzKCkgeyByZXR1cm4gdGhpcy5lbGVtZW50c01vZHVsZS5jdXJyVmlzaWJsZUVsZW1lbnRzKCk7ICB9O1xuXG5cdGVsZW1lbnRCeUlkKGlkKSB7IHJldHVybiB0aGlzLmVsZW1lbnRzTW9kdWxlLmdldEVsZW1lbnRCeUlkKGlkKTsgIH07XG5cblx0Z2V0IERFQU1vZHVsZSgpIHsgcmV0dXJuIHRoaXMuZGlzcGxheUVsZW1lbnRBbG9uZU1vZHVsZTsgfVxuXG5cdGdldCBjdXJyTWFpbklkKCkgeyByZXR1cm4gdGhpcy5maWx0ZXJzQ29tcG9uZW50LmN1cnJlbnRBY3RpdmVNYWluT3B0aW9uSWQ7IH1cblxuXHRnZXQgc3RhdGUoKSB7IHJldHVybiB0aGlzLnN0YXRlTWFuYWdlci5zdGF0ZTsgfVxuXG5cdHNldFN0YXRlKCRuZXdTdGF0ZSA6IEFwcFN0YXRlcywgJG9wdGlvbnMgOiBhbnkgPSB7fSwgJGJhY2tGcm9tSGlzdG9yeSA6IGJvb2xlYW4gPSBmYWxzZSkgIHsgdGhpcy5zdGF0ZU1hbmFnZXIuc2V0U3RhdGUoJG5ld1N0YXRlLCAkb3B0aW9ucywgJGJhY2tGcm9tSGlzdG9yeSl9XG5cblx0Z2V0IG1vZGUoKSB7IHJldHVybiB0aGlzLm1vZGVNYW5hZ2VyLm1vZGU7IH1cblxuXHRzZXRNb2RlKCRtb2RlIDogQXBwTW9kZXMsICRiYWNrRnJvbUhpc3RvcnkgOiBib29sZWFuID0gZmFsc2UsICR1cGRhdGVUaXRsZUFuZFN0YXRlID0gdHJ1ZSkgeyB0aGlzLm1vZGVNYW5hZ2VyLnNldE1vZGUoJG1vZGUsICRiYWNrRnJvbUhpc3RvcnksICR1cGRhdGVUaXRsZUFuZFN0YXRlKTsgfVxuXG5cdGdldCBkYXRhVHlwZSgpIHsgcmV0dXJuIHRoaXMuZGF0YVR5cGVNYW5hZ2VyLmRhdGFUeXBlOyB9XG5cblx0c2V0RGF0YVR5cGUoJGRhdGFUeXBlIDogQXBwRGF0YVR5cGUsICRiYWNrRnJvbUhpc3RvcnkgOiBib29sZWFuID0gZmFsc2UsICRzZWFyY2hSZXN1bHQgPSBudWxsKSB7IHRoaXMuZGF0YVR5cGVNYW5hZ2VyLnNldERhdGFUeXBlKCRkYXRhVHlwZSwgJGJhY2tGcm9tSGlzdG9yeSwgJHNlYXJjaFJlc3VsdCk7IH1cbn0iLCJleHBvcnQgeyBDYXRlZ29yeSB9IGZyb20gXCIuL3RheG9ub215L2NhdGVnb3J5LmNsYXNzXCI7XG5leHBvcnQgeyBFbGVtZW50LCBFbGVtZW50U3RhdHVzLCBFbGVtZW50TW9kZXJhdGlvblN0YXRlIH0gZnJvbSBcIi4vZWxlbWVudC9lbGVtZW50LmNsYXNzXCI7XG5leHBvcnQgeyBFbGVtZW50QmFzZSB9IGZyb20gXCIuL2VsZW1lbnQvZWxlbWVudC1iYXNlLmNsYXNzXCI7XG5leHBvcnQgeyBPcHRpb24gfSBmcm9tIFwiLi90YXhvbm9teS9vcHRpb24uY2xhc3NcIjtcbmV4cG9ydCB7IE9wdGlvblZhbHVlIH0gZnJvbSBcIi4vZWxlbWVudC9vcHRpb24tdmFsdWUuY2xhc3NcIjtcbmV4cG9ydCB7IENhdGVnb3J5VmFsdWUgfSBmcm9tIFwiLi9lbGVtZW50L2NhdGVnb3J5LXZhbHVlLmNsYXNzXCI7XG5leHBvcnQgeyBWb3RlUmVwb3J0IH0gZnJvbSBcIi4vZWxlbWVudC92b3RlLXJlcG9ydC5jbGFzc1wiO1xuZXhwb3J0IHsgQ29udHJpYnV0aW9uIH0gZnJvbSBcIi4vZWxlbWVudC9jb250cmlidXRpb24uY2xhc3NcIjtcbmV4cG9ydCB7IEhpc3RvcnlTdGF0ZSB9IGZyb20gXCIuL2hpc3Rvcnktc3RhdGUuY2xhc3NcIjtcbmV4cG9ydCB7IFZpZXdQb3J0IH0gZnJvbSBcIi4vbWFwL3ZpZXdwb3J0LmNsYXNzXCI7XG5leHBvcnQgeyBFdmVudCB9IGZyb20gXCIuL2V2ZW50LmNsYXNzXCI7XG5leHBvcnQgeyBQb3N0YWxBZGRyZXNzIH0gZnJvbSAnLi9lbGVtZW50L3Bvc3RhbC1hZGRyZXNzLmNsYXNzJztcbmV4cG9ydCB7IFN0YW1wIH0gZnJvbSAnLi9lbGVtZW50L3N0YW1wLmNsYXNzJztcbmV4cG9ydCB7IEVsZW1lbnRVcmwgfSBmcm9tICcuL2VsZW1lbnQvZWxlbWVudC11cmwuY2xhc3MnO1xuIiwiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgVGlsZUxheWVyIH0gZnJvbSAnLi4vbWFwL3RpbGUtbGF5ZXIuY2xhc3MnO1xuaW1wb3J0IHsgR29Hb0ZlYXR1cmUgfSBmcm9tICcuL2dvZ28tZmVhdHVyZS5jbGFzcyc7XG5pbXBvcnQgeyBFbGVtZW50U3RhdHVzIH0gZnJvbSAnLi4vY2xhc3Nlcyc7IFxuaW1wb3J0IHsgREVGQVVMVF9GRUFUVVJFUyB9IGZyb20gJy4vZ29nby1kZWZhdWx0LWZlYXR1cmUnIDtcbmRlY2xhcmUgdmFyIEwgOiBhbnk7XG5kZWNsYXJlIHZhciBjb21tb25tYXJrO1xuXG5leHBvcnQgY2xhc3MgR29Hb0NvbmZpZ1xue1xuICByZWFkb25seSB0ZXh0ID1cbiAge1xuICAgIGVsZW1lbnQ6ICfDqWzDqW1lbnQnLFxuICAgIGVsZW1lbnREZWZpbml0ZTogXCJsJ8OpbMOpbWVudFwiLFxuICAgIGVsZW1lbnRJbmRlZmluaXRlOiBcInVuIMOpbMOpbWVudFwiLFxuICAgIGVsZW1lbnRQbHVyYWw6ICfDqWzDqW1lbnRzJyxcbiAgICBjb2xsYWJvcmF0aXZlTW9kZXJhdGlvbjogYDxwPlxuICAgICAgICBMb3JzcXUndW4gw6lsw6ltZW50IGVzdCBham91dMOpIG91IG1vZGlmacOpLCBsYSBtaXNlIMOgIGpvdXIgZGVzIGRvbm7DqWVzIG4nZXN0IHBhcyBpbnN0YW50YW7DqWUuIEwnw6lsw6ltZW50IHZhIGQnYWJvcmRzIGFwcGFyYcOudHJlIFwiZ3Jpc8OpXCIgc3VyIGxhIGNhcnRlLFxuICAgICAgICBldCBpbCBzZXJhIGFsb3JzIHBvc3NpYmxlIMOgIHRvdXMgbGVzIHV0aWxpc2F0ZXVycyBsb2d1w6kgZGUgdm90ZXIgdW5lIGV0IHVuZSBzZXVsZSBmb2lzIHBvdXIgY2V0IMOpbMOpbWVudC4gXG4gICAgICAgIENlIHZvdGUgbidlc3QgcGFzIHVuZSBvcGluaW9uLCBtYWlzIHVuIHBhcnRhZ2UgZGUgY29ubmFpc3NhbmNlLiBcbiAgICAgICAgU2kgdm91cyBjb25uYWlzc2V6IGNldCDDqWzDqW1lbnQsIG91IHNhdmV6IHF1ZSBjZXQgw6lsw6ltZW50IG4nZXhpc3RlIHBhcywgYWxvcnMgdm90cmUgc2F2b2lyIG5vdXMgaW50w6lyZXNzZSAhXG4gICAgICA8L3A+IFxuICAgICAgPHA+XG4gICAgICAgIEF1IGJvdXQgZCd1biBjZXJ0YWluIG5vbWJyZSBkZSB2b3RlcywgbCfDqWzDqW1lbnQgcG91cnJhIGFsb3JzIMOqdHJlIGF1dG9tYXRpcXVlbWVudCB2YWxpZMOpIG91IHJlZnVzw6kuIFxuICAgICAgICBFbiBjYXMgZGUgbGl0aWdlIChkZXMgdm90ZXMgw6AgbGEgZm9pcyBwb3NpdGlmcyBldCBuw6lnYXRpZnMpLCB1biBtb2TDqXJhdGV1ciBpbnRlcnZpZW5kcmEgYXUgcGx1cyB2aXRlLiBPbiBjb21wdGUgc3VyIHZvdXMhXG4gICAgICA8L3A+YFxuICB9O1xuICByZWFkb25seSBkYXRhID1cbiAge1xuICAgIHRheG9ub215OiB1bmRlZmluZWQsXG4gICAgZWxlbWVudHM6IHVuZGVmaW5lZCxcbiAgICBlbGVtZW50c0NvbXBhY3RBcGlVcmw6IHVuZGVmaW5lZCxcbiAgICBlbGVtZW50QnlJZFVybDogdW5kZWZpbmVkLFxuICAgIHJlcXVlc3RCeUJvdW5kczogZmFsc2UsXG4gICAgcmV0cmlldmVFbGVtZW50c0J5QXBpOiBmYWxzZSxcbiAgICBzaG93UGVuZGluZzogdHJ1ZSxcbiAgfTtcbiAgcmVhZG9ubHkgbWVudSA9XG4gIHtcbiAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgIHNtYWxsV2lkdGhTdHlsZTogZmFsc2UsXG4gICAgc2hvd09uZVBhbmVQZXJNYWluT3B0aW9uOiBmYWxzZSxcbiAgICBzaG93Q2hlY2tib3hGb3JNYWluRmlsdGVyUGFuZTogdHJ1ZSxcbiAgICBzaG93Q2hlY2tib3hGb3JTdWJGaWx0ZXJQYW5lOiB0cnVlLCAgICBcbiAgfTtcbiAgcmVhZG9ubHkgaW5mb2JhciA9XG4gIHtcbiAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgIGFjdGl2YXRlOiB0cnVlLFxuICAgIGJvZHlUZW1wbGF0ZTogdW5kZWZpbmVkXG4gIH07XG4gIHJlYWRvbmx5IGdlbmVyYWwgPVxuICB7XG4gICAgYWN0aXZhdGVIaXN0b3J5U3RhdGVBbmRSb3V0aW5nOiB0cnVlXG4gIH07XG4gIHJlYWRvbmx5IG1hcCA9XG4gIHtcbiAgICAvLyBmcmFuY2VcbiAgICBkZWZhdWx0Qm91bmRzIDogTC5sYXRMbmdCb3VuZHMoTC5sYXRMbmcoNTIsIDEwKSwgTC5sYXRMbmcoNDAsIC01KSksXG4gICAgZGVmYXVsdEJvdW5kc1Byb3ZpZGVkIDogZmFsc2UsXG4gICAgZGVmYXVsdENlbnRlciA6IEwubGF0TG5nKDQ2LCAwKSxcbiAgICBtYXhCb3VuZHMgOiBMLmxhdExuZ0JvdW5kcyhMLmxhdExuZygtOTAsIC0xODApLCBMLmxhdExuZyg5MCwgMTgwKSksXG4gICAgc2F2ZVZpZXdwb3J0SW5Db29raWVzIDogZmFsc2UsXG4gICAgc2F2ZVRpbGVMYXllckluQ29va2llcyA6IGZhbHNlLFxuICAgIGRlZmF1bHRUaWxlTGF5ZXIgOiAnY2FydG9kYicsXG4gICAgdGlsZUxheWVycyA6IFtcbiAgICAgIG5ldyBUaWxlTGF5ZXIoJ21hcGJveCcsICdodHRwczovL2FwaS5tYXBib3guY29tL3N0eWxlcy92MS9tYXBib3gvc3RyZWV0cy12MTAvdGlsZXMvMjU2L3t6fS97eH0ve3l9P2FjY2Vzc190b2tlbj1way5leUoxSWpvaWMyVmlZV3hzYjNRaUxDSmhJam9pWTJsNE1HdG5lR1ZqTURGMGFESjZjV050ZFdGdmMyWTNZU0o5Lm5JWnI2RzJ0MDhldE16ZnRfQkhIVVEnKSxcbiAgICAgIG5ldyBUaWxlTGF5ZXIoJ21hcGJveGxpZ2h0JywgJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20vc3R5bGVzL3YxL21hcGJveC9saWdodC12OS90aWxlcy8yNTYve3p9L3t4fS97eX0/YWNjZXNzX3Rva2VuPXBrLmV5SjFJam9pYzJWaVlXeHNiM1FpTENKaElqb2lZMmw0TUd0bmVHVmpNREYwYURKNmNXTnRkV0Z2YzJZM1lTSjkubklacjZHMnQwOGV0TXpmdF9CSEhVUScpLFxuICAgICAgbmV3IFRpbGVMYXllcignY2FydG9kYicsICdodHRwczovL2NhcnRvZGItYmFzZW1hcHMte3N9Lmdsb2JhbC5zc2wuZmFzdGx5Lm5ldC9saWdodF9hbGwve3p9L3t4fS97eX0ucG5nJyksIFxuICAgICAgbmV3IFRpbGVMYXllcignaHlkZGEnLCAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLnNlL2h5ZGRhL2Z1bGwve3p9L3t4fS97eX0ucG5nJyksIFxuICAgICAgbmV3IFRpbGVMYXllcignd2lraW1lZGlhJywgJ2h0dHBzOi8vbWFwcy53aWtpbWVkaWEub3JnL29zbS1pbnRsL3t6fS97eH0ve3l9LnBuZycpLCBcbiAgICAgIG5ldyBUaWxlTGF5ZXIoJ21vbm9jaHJvbWUnLCAnaHR0cHM6Ly93d3cudG9vbHNlcnZlci5vcmcvdGlsZXMvYnctbWFwbmlrL3t6fS97eH0ve3l9LnBuZycpLCBcbiAgICAgIG5ldyBUaWxlTGF5ZXIoJ2x5cmsgJywgJ2h0dHBzOi8vdGlsZXMubHlyay5vcmcvbHMve3p9L3t4fS97eX0/YXBpa2V5ID05ODJjODJjYzc2NWY0MmNmOTUwYTU3ZGUwZDg5MTA3NicpLCBcbiAgICAgIG5ldyBUaWxlTGF5ZXIoJ29zbWZyJywgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5mci9vc21mci97en0ve3h9L3t5fS5wbmcnKSxcbiAgICAgIG5ldyBUaWxlTGF5ZXIoJ3N0YW1lbicsICdodHRwczovL3N0YW1lbi10aWxlcy17c30uYS5zc2wuZmFzdGx5Lm5ldC90b25lci1saXRlL3t6fS97eH0ve3l9LnBuZycpLFxuICAgICAgbmV3IFRpbGVMYXllcignc3RhbWVuVGVycmFpbicsICdodHRwczovL3N0YW1lbi10aWxlcy17c30uYS5zc2wuZmFzdGx5Lm5ldC90ZXJyYWluL3t6fS97eH0ve3l9LnBuZycpLCAgICBcbiAgICAgIG5ldyBUaWxlTGF5ZXIoJ3N0YW1lbldhdGVyQ29sb3InLCAnaHR0cHM6Ly9zdGFtZW4tdGlsZXMte3N9LmEuc3NsLmZhc3RseS5uZXQvd2F0ZXJjb2xvci97en0ve3h9L3t5fS5wbmcnKSwgICAgXG4gICAgICBuZXcgVGlsZUxheWVyKCdvcGVucml2ZXInLCAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLmZyL29wZW5yaXZlcmJvYXRtYXAve3p9L3t4fS97eX0ucG5nJyksXG4gICAgICBuZXcgVGlsZUxheWVyKCd0aHVuZGVyZm9yZXN0JywgJ2h0dHBzOi8ve3N9LnRpbGUudGh1bmRlcmZvcmVzdC5jb20vb3V0ZG9vcnMve3p9L3t4fS97eX0ucG5nJyksXG4gICAgICBuZXcgVGlsZUxheWVyKCdQYXMgZGUgZm9uZCcsICcnKSBdXG4gIH07XG4gIHJlYWRvbmx5IGZlYXR1cmVzID1cbiAge1xuICAgIC8vIGVsZW1lbnQgbWVudVxuICAgIGZhdm9yaXRlOiAgICAgICBuZXcgR29Hb0ZlYXR1cmUoKSxcbiAgICBzaGFyZTogICAgICAgICAgbmV3IEdvR29GZWF0dXJlKCksXG4gICAgZGlyZWN0aW9uczogICAgIG5ldyBHb0dvRmVhdHVyZSgpLFxuXG4gICAgLy8gZWxlbWVudCBjb250ZW50XG4gICAgc2VuZE1haWw6ICAgICAgIG5ldyBHb0dvRmVhdHVyZSgpLFxuICAgIGVsZW1lbnRIaXN0b3J5OiBuZXcgR29Hb0ZlYXR1cmUoKSxcblxuICAgIC8vIGdvZ28gY29udHJvbHNcbiAgICBsaXN0TW9kZTogbmV3IEdvR29GZWF0dXJlKCksXG5cbiAgICAvLyBtYXAgY29udHJvbHNcbiAgICBleHBvcnQ6ICAgICAgICAgIG5ldyBHb0dvRmVhdHVyZSgpLFxuICAgIGxheWVyczogICAgICAgICAgbmV3IEdvR29GZWF0dXJlKCksXG4gICAgbWFwZGVmYXVsdHZpZXc6ICBuZXcgR29Hb0ZlYXR1cmUoKSxcbiAgICBcbiAgICBwZW5kaW5nOiAgICBuZXcgR29Hb0ZlYXR1cmUoKSwgICAgXG4gICAgc2VhcmNoUGxhY2U6ICAgICAgbmV3IEdvR29GZWF0dXJlKCksXG4gICAgc2VhcmNoRWxlbWVudHM6ICAgbmV3IEdvR29GZWF0dXJlKCksXG4gICAgc2VhcmNoR2VvbG9jYXRlOiAgbmV3IEdvR29GZWF0dXJlKCksXG5cbiAgICAvLyBlbGVtZW50IGludGVyYWN0aW9uIC8gbW9kZXJhdGlvblxuICAgIGVkaXQ6ICAgICAgIG5ldyBHb0dvRmVhdHVyZSgpLCAgICAgICAgICBcbiAgICBkZWxldGU6ICAgICBuZXcgR29Hb0ZlYXR1cmUoKSxcbiAgICByZXBvcnQ6ICAgICBuZXcgR29Hb0ZlYXR1cmUoKSwgICAgICBcbiAgICB2b3RlOiAgICAgICBuZXcgR29Hb0ZlYXR1cmUoKSxcbiAgICBtb2RlcmF0aW9uOiBuZXcgR29Hb0ZlYXR1cmUoKSxcbiAgICBzdGFtcDogICAgICBuZXcgR29Hb0ZlYXR1cmUoKSxcbiAgICBkaXJlY3RNb2RlcmF0aW9uOiAgICAgICAgbmV3IEdvR29GZWF0dXJlKCksXG5cbiAgICAvLyBvdGhlcnNcbiAgICBjdXN0b21Qb3B1cDogbmV3IEdvR29GZWF0dXJlKCksXG4gIH07XG4gIHJlYWRvbmx5IHNlY3VyaXR5ID1cbiAge1xuICAgIHVzZXJSb2xlczogWydhbm9ueW1vdXMnXSxcbiAgICB1c2VyRW1haWw6ICcnLFxuICAgIGxvZ2luQWN0aW9uOiBmdW5jdGlvbigpIHsgY29uc29sZS53YXJuKFwiW0dvR29DYXJ0b10gWW91IG5lZWQgbG9naW4gdG8gYWNjZXNzIHRoaXMgZmVhdHVyZVwiKTsgfSxcblxuICAgIGhpZGVNYWlsc0J5U2hvd2luZ1NlbmRNYWlsQnV0dG9uOiB0cnVlLFxuICB9O1xuXG4gIHJlYWRvbmx5IHRoZW1lID0gJ2RlZmF1bHQnO1xuICAvLyBzZWUgZ29nby1zdHlsZXMgZm9yIGRlZmF1dCB2YWx1ZXNcbiAgcmVhZG9ubHkgY29sb3JzID1cbiAge1xuICAgIG5ldXRyYWxEYXJrOiB1bmRlZmluZWQgLFxuICAgIG5ldXRyYWxEYXJrVHJhbnNwYXJlbnQ6IHVuZGVmaW5lZCAsXG4gICAgbmV1dHJhbFNvZnREYXJrOiB1bmRlZmluZWQgLFxuICAgIG5ldXRyYWw6IHVuZGVmaW5lZCAsXG4gICAgbmV1dHJhbExpZ2h0OiB1bmRlZmluZWQgLFxuICAgIHNlY29uZGFyeTogdW5kZWZpbmVkICxcbiAgICBwcmltYXJ5OiB1bmRlZmluZWQgLFxuICAgIGJhY2tncm91bmQ6IHVuZGVmaW5lZCAsXG5cbiAgICB0ZXh0Q29sb3I6IHVuZGVmaW5lZCAsXG4gICAgZGlzYWJsZUNvbG9yOiB1bmRlZmluZWQgLFxuICAgIGxpc3RUaXRsZTogdW5kZWZpbmVkICxcbiAgICBsaXN0VGl0bGVCYWNrQnRuOiB1bmRlZmluZWQsXG4gICAgbGlzdFRpdGxlQmFja2dyb3VuZDogdW5kZWZpbmVkICxcbiAgICBzZWFyY2hCYXI6IHVuZGVmaW5lZCwgXG4gICAgaW50ZXJhY3RpdmVTZWN0aW9uOiB1bmRlZmluZWQsXG5cbiAgICBtYWluRm9udDogdW5kZWZpbmVkICxcbiAgICB0aXRsZUZvbnQ6IHVuZGVmaW5lZCAsXG4gICAgdGF4b25vbXlNYWluVGl0bGVGb250OiB1bmRlZmluZWQgLCAgICAgXG4gIH1cblxuICByZWFkb25seSBpbWFnZXMgPVxuICB7XG4gICAgYnV0dG9uT3Blbk1lbnU6IHVuZGVmaW5lZCxcbiAgICBtZW51VG9wSW1hZ2U6IHVuZGVmaW5lZFxuICB9XG5cblx0Y29uc3RydWN0b3IoY29uZmlnIDogYW55KVxuXHR7XG4gICAgaWYgKCFjb25maWcuZmVhdHVyZXMpIGNvbmZpZy5mZWF0dXJlcyA9IERFRkFVTFRfRkVBVFVSRVM7XG4gICAgLy8gQ29weSBhbGwgdGhlIGRlZmluZWQgb3B0aW9uc1xuICAgIC8vIEFsbCB0aGUgb3B0aW9ucyBub24gc3BlY2lmaWVkIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICAgIHRoaXMucmVjdXJzaXZlRmlsbFByb3BlcnR5KHRoaXMsIGNvbmZpZyk7XG4gICAgdGhpcy5kYXRhLnJldHJpZXZlRWxlbWVudHNCeUFwaSA9IHR5cGVvZiB0aGlzLmRhdGEuZWxlbWVudHMgPT0gXCJzdHJpbmdcIjtcbiAgICBpZiAoY29uZmlnLm1hcCAmJiBjb25maWcubWFwLmRlZmF1bHRCb3VuZHMpIHRoaXMubWFwLmRlZmF1bHRCb3VuZHNQcm92aWRlZCA9IHRydWU7XG4gICAgaWYgKCF0aGlzLmZlYXR1cmVzWydzZW5kTWFpbCddLmFjdGl2ZSkgdGhpcy5zZWN1cml0eS5oaWRlTWFpbHNCeVNob3dpbmdTZW5kTWFpbEJ1dHRvbiA9IGZhbHNlO1xuICAgIGNvbnNvbGUubG9nKHRoaXMpO1xuXHR9XG4gIFxuICBpc0ZlYXR1cmVBY3RpdmF0ZWQoZmVhdHVyZU5hbWUpIDogYm9vbGVhblxuICB7XG4gICAgaWYgKCF0aGlzLmZlYXR1cmVzLmhhc093blByb3BlcnR5KGZlYXR1cmVOYW1lKSkgeyBjb25zb2xlLndhcm4oYFtHb0dvQ2FydG9Kc10gZmVhdHVyZSAke2ZlYXR1cmVOYW1lfSBkb2Vzbid0IGV4aXN0YCk7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmVhdHVyZXNbZmVhdHVyZU5hbWVdLmFjdGl2ZSAmJiAoIUFwcC5pc0lmcmFtZSB8fCB0aGlzLmZlYXR1cmVzW2ZlYXR1cmVOYW1lXS5pbklmcmFtZSk7XG4gIH1cblxuICAvLyBpcyBmZWF0dXJlIGlzIGFjdGl2YXRlZCBhbmQgdGhlIGFjdHVhbCB1c2VyIGlzIGdyYW50ZWQgdG8gdXNlIGl0XG4gIGlzRmVhdHVyZUF2YWlsYWJsZShmZWF0dXJlTmFtZSkgOiBib29sZWFuXG4gIHtcbiAgICBpZiAoIXRoaXMuZmVhdHVyZXMuaGFzT3duUHJvcGVydHkoZmVhdHVyZU5hbWUpKSB7IGNvbnNvbGUud2FybihgW0dvR29DYXJ0b0pzXSBmZWF0dXJlICR7ZmVhdHVyZU5hbWV9IGRvZXNuJ3QgZXhpc3RgKTsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgICBsZXQgZmVhdHVyZSA9IHRoaXMuZmVhdHVyZXNbZmVhdHVyZU5hbWVdO1xuXG4gICAgbGV0IHJvbGVQcm92aWRlZCA9IHRydWU7XG4gICAgaWYgKGZlYXR1cmUuaGFzT3duUHJvcGVydHkoJ3JvbGVzJykpXG4gICAge1xuICAgICAgcm9sZVByb3ZpZGVkID0gZmVhdHVyZS5oYXNSb2xlKEFwcC5sb2dpbk1vZHVsZS5nZXRSb2xlcygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pc0ZlYXR1cmVBY3RpdmF0ZWQoZmVhdHVyZU5hbWUpICYmIHJvbGVQcm92aWRlZDtcbiAgfSBcblxuICBwcml2YXRlIHJlY3Vyc2l2ZUZpbGxQcm9wZXJ0eSh0aGF0LCBvYmplY3QpXG4gIHtcbiAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGFwcGx5IHJlY3Vyc2l2ZWx5IGluc2lkZSBvYmplY3RzIHByb3BlcnRpZXNcbiAgICBsZXQgb2JqZWN0c1Byb3BlcnRpZXMgPSBbJ3JvbGVzJywgJ2RlZmF1bHRDZW50ZXInLCAnZGVmYXVsdEJvdW5kcycsICd0aWxlTGF5ZXJzJywgJ29wdGlvbnMnXTtcblxuICAgIC8vIGlmIHdlIHByb3ZpZGUgZmVhdHVyZSBjb25maWcsIHdlIGVuYWJsZSBpdCBhdXRvbWF0aWNhbGx5XG4gICAgaWYgKHRoYXQgaW5zdGFuY2VvZiBHb0dvRmVhdHVyZSkgdGhhdC5hY3RpdmUgPSB0cnVlO1xuXG4gICAgZm9yKHZhciBwcm9wIGluIG9iamVjdCkgXG4gICAge1xuICAgICAgICBpZiAodGhhdC5oYXNPd25Qcm9wZXJ0eShwcm9wKSlcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgdGhhdFtwcm9wXSAhPSAnb2JqZWN0JyB8fCBvYmplY3RzUHJvcGVydGllcy5pbmRleE9mKHByb3ApID4gLTEpXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGV0IG5ld19wcm9wO1xuICAgICAgICAgICAgc3dpdGNoKHByb3ApIHtcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdEJvdW5kcycgOiBuZXdfcHJvcCA9IEwubGF0TG5nQm91bmRzKG9iamVjdFtwcm9wXSk7YnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRDZW50ZXInIDogbmV3X3Byb3AgPSBMLmxhdExuZyhvYmplY3RbcHJvcF0pO2JyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdib2R5VGVtcGxhdGUnOiBcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VyID0gbmV3IGNvbW1vbm1hcmsuUGFyc2VyKClcbiAgICAgICAgICAgICAgICBsZXQgaHRtbFJlbmRlcmVyID0gbmV3IGNvbW1vbm1hcmsuSHRtbFJlbmRlcmVyKCk7XG4gICAgICAgICAgICAgICAgbmV3X3Byb3AgPSBodG1sUmVuZGVyZXIucmVuZGVyKHBhcnNlci5wYXJzZShvYmplY3RbcHJvcF0pKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDogbmV3X3Byb3AgPSBvYmplY3RbcHJvcF07YnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGF0W3Byb3BdID0gbmV3X3Byb3A7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMucmVjdXJzaXZlRmlsbFByb3BlcnR5KHRoYXRbcHJvcF0sIG9iamVjdFtwcm9wXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW0dvR29DYXJ0b10gQ29uZmlnIG9wdGlvbiAnXCIgKyBwcm9wICsgXCInIGRvZXMgbm90IGV4aXN0XCIpO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbn0iLCJleHBvcnQgY29uc3QgREVGQVVMVF9GRUFUVVJFUyA9IHtcbiAgbGlzdE1vZGU6IHt9LFxuICBzZWFyY2hQbGFjZTogeyB9LFxuICBzZWFyY2hHZW9sb2NhdGU6IHt9LFxuICBmYXZvcml0ZToge30sXG4gIHNoYXJlOiB7fSxcbiAgZGlyZWN0aW9uczoge30sICAgICAgICAgICBcbiAgbGF5ZXJzOiB7fSxcbiAgbWFwZGVmYXVsdHZpZXc6IHt9XG59OyIsImV4cG9ydCBjbGFzcyBHb0dvRmVhdHVyZVxue1xuICBhY3RpdmUgOiBib29sZWFuID0gZmFsc2U7XG4gIHVybCA6IHN0cmluZyA9ICcnO1xuICByb2xlcyA6IHN0cmluZ1tdID0gWydhbm9ueW1vdXMnLCAnYW5vbnltb3VzX3dpdGhfbWFpbCcsICd1c2VyJywgJ2FkbWluJ107XG4gIGluSWZyYW1lIDogYm9vbGVhbiA9IHRydWU7XG4gIG9wdGlvbnMgOiBhbnkgPSB7fTtcblxuICBoYXNSb2xlKHJvbGVzIDogc3RyaW5nW10pIHsgXG4gICAgcmV0dXJuIHRoaXMucm9sZXMuc29tZSggKHJvbGUpID0+IHtcbiAgICAgIHJldHVybiByb2xlcy5pbmRleE9mKHJvbGUpID4gLTE7XG4gICAgfSk7XG4gIH1cbn0iLCJpbXBvcnQgeyBDYXRlZ29yeSwgT3B0aW9uLCBPcHRpb25WYWx1ZX0gZnJvbSBcIi4uL2NsYXNzZXNcIjtcblxuZXhwb3J0IGNsYXNzIENhdGVnb3J5VmFsdWVcbntcblx0Y2F0ZWdvcnkgOiBDYXRlZ29yeTtcblx0Y2hpbGRyZW4gOiBPcHRpb25WYWx1ZVtdID0gW107XG5cblx0Y29uc3RydWN0b3IoY2F0ZWdvcnkgOiBDYXRlZ29yeSlcblx0e1xuXHRcdHRoaXMuY2F0ZWdvcnkgPSBjYXRlZ29yeTtcdFxuXHR9XG5cblx0YWRkT3B0aW9uVmFsdWUob3B0aW9uVmFsdWUgOiBPcHRpb25WYWx1ZSlcblx0e1xuXHRcdHRoaXMuY2hpbGRyZW4ucHVzaChvcHRpb25WYWx1ZSk7XG5cdH1cblxuXHRnZXQgaXNMYXN0Q2F0ZWdvcnlEZXB0aCgpIDogYm9vbGVhblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuY2hpbGRyZW4uZXZlcnkoIChvcHRpb25WYWx1ZSkgPT4gb3B0aW9uVmFsdWUub3B0aW9uLnN1YmNhdGVnb3JpZXMubGVuZ3RoID09IDApO1xuXHR9XG59IiwiZXhwb3J0IGNsYXNzIENvbnRyaWJ1dGlvbiBcbnsgXG5cdHR5cGUgOiBudW1iZXI7XG5cdHN0YXR1cyA6IG51bWJlcjtcblx0dXNlciA6IHN0cmluZztcblx0dXNlclJvbGUgOiBudW1iZXI7XG5cdHJlc29sdmVkTWVzc2FnZSA6IHN0cmluZztcblx0cmVzb2x2ZWRCeSA6IHN0cmluZztcblx0dXBkYXRlZEF0IDogc3RyaW5nO1xuXHRjcmVhdGVkQXQgOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IoY29udHJpYnV0aW9uSnNvbiA6IGFueSlcblx0e1xuXHRcdHRoaXMudHlwZSA9IGNvbnRyaWJ1dGlvbkpzb24udHlwZTtcblx0XHR0aGlzLnN0YXR1cyA9IGNvbnRyaWJ1dGlvbkpzb24uc3RhdHVzO1xuXHRcdHRoaXMudXNlciA9IGNvbnRyaWJ1dGlvbkpzb24udXNlcjtcblx0XHR0aGlzLnVzZXJSb2xlID0gY29udHJpYnV0aW9uSnNvbi51c2VyUm9sZTtcblx0XHR0aGlzLnJlc29sdmVkTWVzc2FnZSA9IGNvbnRyaWJ1dGlvbkpzb24ucmVzb2x2ZWRNZXNzYWdlO1xuXHRcdHRoaXMucmVzb2x2ZWRCeSA9IGNvbnRyaWJ1dGlvbkpzb24ucmVzb2x2ZWRCeTtcblx0XHR0aGlzLnVwZGF0ZWRBdCA9IGNvbnRyaWJ1dGlvbkpzb24udXBkYXRlZEF0O1x0XG5cdFx0dGhpcy5jcmVhdGVkQXQgPSBjb250cmlidXRpb25Kc29uLmNyZWF0ZWRBdDtcblx0fVxufSIsImltcG9ydCB7IENvbnRyaWJ1dGlvbiwgVm90ZVJlcG9ydCwgT3B0aW9uVmFsdWUsIFBvc3RhbEFkZHJlc3MsIE9wdGlvbiwgQ2F0ZWdvcnlWYWx1ZSwgRWxlbWVudFVybCB9IGZyb20gXCIuLi9jbGFzc2VzXCI7XG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5cbmV4cG9ydCBlbnVtIEVsZW1lbnRTdGF0dXMgXG57XG4gIE1vZGlmaWVkRWxlbWVudCA9IC01LFxuICBEZWxldGVkID0gLTQsXG4gIENvbGxhYm9yYXRpdmVSZWZ1c2VkID0gLTMsXG4gIEFkbWluUmVmdXNlZCA9IC0yLCAgICBcbiAgUGVuZGluZ01vZGlmaWNhdGlvbiA9IC0xLFxuICBQZW5kaW5nQWRkID0gMCxcbiAgQWRtaW5WYWxpZGF0ZSA9IDEsXG4gIENvbGxhYm9yYXRpdmVWYWxpZGF0ZSA9IDJcbn1cblxuZXhwb3J0IGVudW0gRWxlbWVudE1vZGVyYXRpb25TdGF0ZVxue1xuICBHZW9sb2NFcnJvciA9IC0yLFxuICBOb09wdGlvblByb3ZpZGVkID0gLTEsICAgICBcbiAgTm90TmVlZGVkID0gMCxcbiAgUmVwb3J0c1N1Ym1pdHRlZCA9IDEsXG4gIFZvdGVzQ29uZmxpY3RzID0gMiwgXG4gIFBlbmRpbmdGb3JUb29Mb25nID0gMyxcbiAgUG9zc2libGVEdXBsaWNhdGUgPSA0ICBcbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRCYXNlXG57XG4gIGlkIDogc3RyaW5nO1xuICBuYW1lIDogc3RyaW5nO1xuICBwb3NpdGlvbiA6IEwuTGF0TG5nO1xuXG4gIHN0YXR1cyA6IEVsZW1lbnRTdGF0dXM7XG4gIG1vZGVyYXRpb25TdGF0ZSA6IEVsZW1lbnRNb2RlcmF0aW9uU3RhdGU7XG4gICBcbiAgYWRkcmVzcyA6IFBvc3RhbEFkZHJlc3M7XG4gIGRlc2NyaXB0aW9uIDogc3RyaW5nO1xuICBsb25nRGVzY3JpcHRpb246IHN0cmluZztcbiAgbG9uZ0Rlc2NyaXB0aW9uTW9yZTogc3RyaW5nO1xuICBvcGVuSG91cnMgOiBhbnk7XG5cbiAgY29tbWl0bWVudCA6IHN0cmluZzsgIFxuICB0ZWxlcGhvbmUgOiBzdHJpbmc7XG4gIHdlYnNpdGUgOiBzdHJpbmc7XG4gIGVtYWlsIDogc3RyaW5nO1xuICBcbiAgZm9ybWF0ZWRPcGVuSG91cnM7XG4gIG9wZW5Ib3Vyc01vcmVJbmZvcyA6IGFueTtcbiAgaW1hZ2VzIDogc3RyaW5nW107XG4gIHVybHMgOiBFbGVtZW50VXJsW107XG4gIHRhZ3MgOiBzdHJpbmdbXTtcbiAgXG4gIG1vZGlmaWVkRWxlbWVudCA6IEVsZW1lbnRCYXNlID0gbnVsbDtcblxuICBvcHRpb25zVmFsdWVzIDogT3B0aW9uVmFsdWVbXSA9IFtdO1xuICBzdGFtcHMgOiBhbnlbXSA9IFtdO1xuXG4gIG1haW5PcHRpb25Pd25lcklkcyA6IG51bWJlcltdID0gW107XG5cbiAgcmVwb3J0cyA6IFZvdGVSZXBvcnRbXTtcbiAgY29udHJpYnV0aW9ucyA6IENvbnRyaWJ1dGlvbltdO1xuICBwZW5kaW5nQ29udHJpYnV0aW9uIDogQ29udHJpYnV0aW9uO1xuICB2b3RlcyA6IFZvdGVSZXBvcnRbXTtcblxuICBvcHRpb25UcmVlIDogT3B0aW9uVmFsdWU7ICBcblxuICBzZWFyY2hTY29yZSA6IG51bWJlciA9IG51bGw7XG5cbiAgaXNGdWxseUxvYWRlZCA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50SnNvbiA6IGFueSlcbiAge1xuICAgIHRoaXMudXBkYXRlV2l0aEpzb24oZWxlbWVudEpzb24pOyAgICBcbiAgfVxuXG4gIHVwZGF0ZVdpdGhKc29uKGVsZW1lbnRKc29uIDogYW55KSBcbiAge1xuICAgIEFwcC5lbGVtZW50SnNvblBhcnNlci5sb2FkKGVsZW1lbnRKc29uLCB0aGlzKTsgICAgXG4gIH0gIFxuXG4gIGNyZWF0ZU9wdGlvbnNUcmVlKClcbiAge1xuICAgIEFwcC5lbGVtZW50T3B0aW9uVmFsdWVzTW9kdWxlLmNyZWF0ZU9wdGlvbnNUcmVlKHRoaXMpO1xuICB9XG5cbiAgZ2V0T3B0aW9uVHJlZSgpXG4gIHtcbiAgICBpZiAodGhpcy5vcHRpb25UcmVlKSByZXR1cm4gdGhpcy5vcHRpb25UcmVlO1xuICAgIHRoaXMuY3JlYXRlT3B0aW9uc1RyZWUoKTtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25UcmVlO1xuICB9XG5cbiAgZ2V0Um9vdENhdGVnb3JpZXNWYWx1ZXMoKSA6IENhdGVnb3J5VmFsdWVbXVxuICB7XG4gICAgbGV0IG9wdGlvblRyZWUgPSB0aGlzLmdldE9wdGlvblRyZWUoKTtcbiAgICBpZiAob3B0aW9uVHJlZS5jaGlsZHJlbi5sZW5ndGggPT0gMCkgcmV0dXJuIFtdO1xuICAgIGlmIChvcHRpb25UcmVlLmNoaWxkcmVuWzBdLmNhdGVnb3J5LmlzUm9vdENhdGVnb3J5KSByZXR1cm4gb3B0aW9uVHJlZS5jaGlsZHJlbjtcbiAgICByZXR1cm4gb3B0aW9uVHJlZS5jaGlsZHJlblswXS5jaGlsZHJlblswXS5jaGlsZHJlbjtcbiAgfVxuXG4gIGdldE9wdGlvblZhbHVlQnlDYXRlZ29yeUlkKCRjYXRlZ29yeUlkKVxuICB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1ZhbHVlcy5maWx0ZXIoKG9WKSA9PiBvVi5jYXRlZ29yeU93bmVyLmlkID09ICRjYXRlZ29yeUlkKTtcbiAgfVxuXG4gIGdldE9wdGlvblZhbHVlc05hbWVzKClcbiAge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnNWYWx1ZXMubWFwKCAob3YpID0+IG92Lm9wdGlvbi5uYW1lU2hvcnQpO1xuICB9XG5cbiAgaGF2ZU9wdGlvbigkb3B0aW9uIDogT3B0aW9uKVxuICB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uc1ZhbHVlcy5tYXAoIChvdikgPT4gb3Yub3B0aW9uSWQpLmluZGV4T2YoJG9wdGlvbi5pZCkgPj0gMDtcbiAgfVxufSIsImV4cG9ydCBjbGFzcyBFbGVtZW50VXJsXG57XG4gIHR5cGUgOiBzdHJpbmcgPSAnJztcbiAgdmFsdWU6IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKCRlbGVtZW50VXJsSnNvbilcbiAge1xuICAgIGlmICh0eXBlb2YgJGVsZW1lbnRVcmxKc29uID09PSAnc3RyaW5nJykgJGVsZW1lbnRVcmxKc29uID0geyBrZXk6ICcnLCB2YWx1ZTogJGVsZW1lbnRVcmxKc29uIH07XG4gICAgdGhpcy50eXBlID0gJGVsZW1lbnRVcmxKc29uLnR5cGUgfHwgJyc7XG4gICAgdGhpcy52YWx1ZSA9ICRlbGVtZW50VXJsSnNvbi52YWx1ZSB8fCAnJzsgIFxuICB9XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMTItMTNcbiAqL1xuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMsIEFwcE1vZGVzIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEVsZW1lbnRCYXNlLCBFbGVtZW50U3RhdHVzLCBFbGVtZW50TW9kZXJhdGlvblN0YXRlIH0gZnJvbSAnLi9lbGVtZW50LWJhc2UuY2xhc3MnO1xuZXhwb3J0IHsgRWxlbWVudFN0YXR1cywgRWxlbWVudE1vZGVyYXRpb25TdGF0ZSB9IGZyb20gJy4vZWxlbWVudC1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE1hcmtlciB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL21hcC9tYXJrZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBFbGVtZW50Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvZWxlbWVudC9lbGVtZW50LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgT3B0aW9uVmFsdWUsIENhdGVnb3J5VmFsdWUsIE9wdGlvbiwgQ2F0ZWdvcnksIENvbnRyaWJ1dGlvbiwgVm90ZVJlcG9ydCwgU3RhbXAgfSBmcm9tIFwiLi4vY2xhc3Nlc1wiO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5kZWNsYXJlIHZhciAkLCBNYXA7XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50IGV4dGVuZHMgRWxlbWVudEJhc2VcbntcdFxuXHRwcml2YXRlIG1hcmtlcl8gOiBNYXJrZXIgPSBudWxsO1xuXHRwcml2YXRlIGNvbXBvbmVudF8gOiBFbGVtZW50Q29tcG9uZW50ID0gbnVsbDtcdFxuXG5cdGNvbG9yT3B0aW9uSWQgOiBhbnk7XG5cblx0cHJpdmF0ZSBpc0luaXRpYWxpemVkXyA6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRpY29uc1RvRGlzcGxheSA6IE9wdGlvblZhbHVlW10gPSBbXTtcdFxuXG5cdGRpc3RhbmNlIDogbnVtYmVyO1xuXHRkaXN0YW5jZUZyb21Cb3VuZHNDZW50ZXIgOiBudW1iZXI7XHRcblxuXHQvLyBmb3IgZWxlbWVudHMgbW9kdWxlIGFsZ29yaXRobXNcblx0aXNEaXNwbGF5ZWQgOiBib29sZWFuID0gZmFsc2U7XHRcblxuXHRpc1Nob3duQWxvbmUgOiBib29sZWFuID0gZmFsc2U7XG5cdGlzRmF2b3JpdGUgOiBib29sZWFuID0gZmFsc2U7XG5cdG5lZWRUb0JlVXBkYXRlZFdoZW5TaG93biA6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnRKc29uIDogYW55KVxuICB7XG4gICAgc3VwZXIoZWxlbWVudEpzb24pOyAgXG4gIH1cblxuICB1cGRhdGVXaXRoSnNvbihlbGVtZW50SnNvbilcbiAge1xuICBcdHN1cGVyLnVwZGF0ZVdpdGhKc29uKGVsZW1lbnRKc29uKTtcbiAgXHR0aGlzLmNyZWF0ZU9wdGlvbnNUcmVlKCk7XG4gICAgdGhpcy51cGRhdGUodHJ1ZSk7XG4gIH1cdFxuXG5cdGluaXRpYWxpemUoKSBcblx0e1x0XHRcblx0XHRBcHAuZWxlbWVudEljb25zTW9kdWxlLnVwZGF0ZUljb25zVG9EaXNwbGF5KHRoaXMpO1xuXG5cdFx0dGhpcy5tYXJrZXJfID0gbmV3IE1hcmtlcih0aGlzLmlkLCB0aGlzLnBvc2l0aW9uKTtcblx0XHR0aGlzLmlzSW5pdGlhbGl6ZWRfID0gdHJ1ZTtcdFxuXHR9XG5cblx0dXBkYXRlKCRmb3JjZSA6IGJvb2xlYW4gPSBmYWxzZSlcblx0e1xuXHRcdC8vY29uc29sZS5sb2coXCJtYXJrZXIgdXBkYXRlIG5lZWRUb0JlVXBkYXRlZFwiLCB0aGlzLm5lZWRUb0JlVXBkYXRlZFdoZW5TaG93bik7XG5cdFx0aWYgKHRoaXMubmVlZFRvQmVVcGRhdGVkV2hlblNob3duIHx8IEFwcC5tb2RlID09IEFwcE1vZGVzLkxpc3QgfHwgJGZvcmNlKVxuXHRcdHtcblx0XHRcdEFwcC5lbGVtZW50SWNvbnNNb2R1bGUudXBkYXRlSWNvbnNUb0Rpc3BsYXkodGhpcyk7XG5cdFx0XHRsZXQgb3B0aW9uVmFsdWVzVG9VcGRhdGUgPSB0aGlzLmdldEN1cnJPcHRpb25zVmFsdWVzKCkuZmlsdGVyKCAob3B0aW9uVmFsdWUpID0+IG9wdGlvblZhbHVlLmlzRmlsbGVkQnlGaWx0ZXJzKTtcblx0XHRcdG9wdGlvblZhbHVlc1RvVXBkYXRlLnB1c2godGhpcy5nZXRDdXJyTWFpbk9wdGlvblZhbHVlKCkpO1xuXHRcdFx0Zm9yKGxldCBvcHRpb25WYWx1ZSBvZiBvcHRpb25WYWx1ZXNUb1VwZGF0ZSkgQXBwLmVsZW1lbnRPcHRpb25WYWx1ZXNNb2R1bGUudXBkYXRlT3B0aW9uVmFsdWVDb2xvcih0aGlzLCBvcHRpb25WYWx1ZSk7XG5cblx0XHRcdHRoaXMuY29sb3JPcHRpb25JZCA9IHRoaXMuaWNvbnNUb0Rpc3BsYXkubGVuZ3RoID4gMCAmJiB0aGlzLmdldEljb25zVG9EaXNwbGF5KClbMF0gPyB0aGlzLmdldEljb25zVG9EaXNwbGF5KClbMF0uY29sb3JPcHRpb25JZCA6IG51bGw7XHRcblxuXHRcdFx0aWYgKHRoaXMubWFya2VyKSB0aGlzLm1hcmtlci51cGRhdGUoKTtcblx0XHRcdHRoaXMubmVlZFRvQmVVcGRhdGVkV2hlblNob3duID0gZmFsc2U7XG5cdFx0fVx0XHRcblx0fVxuXG5cdHVwZGF0ZURpc3RhbmNlKClcblx0e1xuXHRcdHRoaXMuZGlzdGFuY2UgPSBudWxsO1xuXHRcdHRoaXMuZGlzdGFuY2VGcm9tQm91bmRzQ2VudGVyID0gQXBwLmJvdW5kc01vZHVsZS5leHRlbmRlZEJvdW5kcyA/IEFwcC5ib3VuZHNNb2R1bGUuZXh0ZW5kZWRCb3VuZHMuZ2V0Q2VudGVyKCkuZGlzdGFuY2VUbyh0aGlzLnBvc2l0aW9uKSAvIDEwMDAgOiBudWxsO1xuXG5cdFx0aWYgKEFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbigpKSBcblx0XHRcdHRoaXMuZGlzdGFuY2UgPSBBcHAubWFwQ29tcG9uZW50LmRpc3RhbmNlRnJvbUxvY2F0aW9uVG8odGhpcy5wb3NpdGlvbik7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy5kaXN0YW5jZSA9IHRoaXMuZGlzdGFuY2VGcm9tQm91bmRzQ2VudGVyO1xuXHRcdFxuXHRcdC8vIE1ha2luZyB0aGUgZGlzdGFuY2UgbW9yZSByZWFsaXN0aWMgbXVsdGlwbHlpbmdcblx0XHR0aGlzLmRpc3RhbmNlID0gdGhpcy5kaXN0YW5jZSA/IE1hdGgucm91bmQoMS4yKnRoaXMuZGlzdGFuY2UpIDogbnVsbDtcblx0XHR0aGlzLmRpc3RhbmNlRnJvbUJvdW5kc0NlbnRlciA9IHRoaXMuZGlzdGFuY2VGcm9tQm91bmRzQ2VudGVyID8gTWF0aC5yb3VuZCgxLjIqdGhpcy5kaXN0YW5jZUZyb21Cb3VuZHNDZW50ZXIpIDogbnVsbDtcblx0fVxuXG5cdGdldFByb3BlcnR5KHByb3BlcnR5TmFtZSlcblx0e1xuXHRcdHJldHVybiBBcHAuZWxlbWVudEZvcm1hdGVyTW9kdWxlLmdldFByb3BlcnR5KHRoaXMsIHByb3BlcnR5TmFtZSk7XG5cdH1cblxuXHRnZXRJY29uc1RvRGlzcGxheSgpIDogT3B0aW9uVmFsdWVbXVxuICB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuaWNvbnNUb0Rpc3BsYXk7XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCAoYSxiKSA9PiBhLmlzRmlsbGVkQnlGaWx0ZXJzID8gLTEgOiAxKTtcbiAgfVxuXG5cdGdldEN1cnJPcHRpb25zVmFsdWVzKCkgOiBPcHRpb25WYWx1ZVtdXG5cdHtcblx0XHRpZiAoQXBwLmNvbmZpZy5tZW51LnNob3dPbmVQYW5lUGVyTWFpbk9wdGlvbikgcmV0dXJuIHRoaXMub3B0aW9uc1ZhbHVlcy5maWx0ZXIoIChvcHRpb25WYWx1ZSkgPT4gb3B0aW9uVmFsdWUub3B0aW9uLm1haW5Pd25lcklkID09IEFwcC5jdXJyTWFpbklkKTtcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zVmFsdWVzO1xuXHR9XG5cblx0Z2V0Q3VyckRlZXBlc3RPcHRpb25zVmFsdWVzKCkgOiBPcHRpb25WYWx1ZVtdXG5cdHtcblx0XHRsZXQgY3Vyck9wdGlvblZhbHVlcyA9IHRoaXMuZ2V0Q3Vyck9wdGlvbnNWYWx1ZXMoKTtcbiAgICBsZXQgaWRzVG9SZW1vdmUgPSBbXVxuICAgIGZvciAobGV0IG92IG9mIGN1cnJPcHRpb25WYWx1ZXMpIGlkc1RvUmVtb3ZlID0gaWRzVG9SZW1vdmUuY29uY2F0KG92Lm9wdGlvbl8ucGFyZW50T3B0aW9uSWRzKTtcbiAgICBsZXQgZGVlcGVzdE92ID0gY3Vyck9wdGlvblZhbHVlcy5maWx0ZXIoIChvVikgPT4gaWRzVG9SZW1vdmUuaW5kZXhPZihvVi5vcHRpb25fLmlkKSA9PSAtMSk7XG5cbiAgXHQvLyBncm91cCBieSBvd25lclxuICBcdGxldCBncm91cGVkQnlQYXJlbnRPdnMgPSB7fVxuICBcdGZvciAobGV0IG92IG9mIGRlZXBlc3RPdikgeyBcbiAgXHRcdGxldCBwYXJlbnROYW1lID0gb3Yub3B0aW9uLnBhcmVudE9wdGlvbk5hbWU7XG4gIFx0XHRpZiAocGFyZW50TmFtZSBpbiBncm91cGVkQnlQYXJlbnRPdnMpIGdyb3VwZWRCeVBhcmVudE92c1twYXJlbnROYW1lXS5wdXNoKG92KTsgXG4gIFx0XHRlbHNlIGdyb3VwZWRCeVBhcmVudE92c1twYXJlbnROYW1lXSA9IFtvdl07IFxuICBcdH1cbiAgXHRsZXQgZGVlcGVzdE9yZGVyZWRPdiA9IFtdO1xuICBcdGZvciAobGV0IHBhcmVudCBpbiBncm91cGVkQnlQYXJlbnRPdnMpIHsgZGVlcGVzdE9yZGVyZWRPdiA9IGRlZXBlc3RPcmRlcmVkT3YuY29uY2F0KGdyb3VwZWRCeVBhcmVudE92c1twYXJlbnRdKTsgfVxuICBcdHJldHVybiBkZWVwZXN0T3JkZXJlZE92O1xuXHR9XG5cblx0cHJpdmF0ZSBncm91cEJ5KGxpc3QsIGtleUdldHRlcikge1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICBsaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5R2V0dGVyKGl0ZW0pO1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gbWFwLmdldChrZXkpO1xuICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIG1hcC5zZXQoa2V5LCBbaXRlbV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1hcDtcbn1cblxuXHRnZXRDdXJyTWFpbk9wdGlvblZhbHVlKCkgOiBPcHRpb25WYWx1ZVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9uc1ZhbHVlcy5maWx0ZXIoIChvcHRpb25WYWx1ZSkgPT4gb3B0aW9uVmFsdWUub3B0aW9uLmlkID09IEFwcC5jdXJyTWFpbklkKS5zaGlmdCgpO1xuXHR9XG5cblx0Z2V0Q2F0ZWdvcmllc0lkcygpIDogbnVtYmVyW11cblx0e1xuXHRcdHJldHVybiB0aGlzLmdldEN1cnJPcHRpb25zVmFsdWVzKCkubWFwKCAob3B0aW9uVmFsdWUpID0+IG9wdGlvblZhbHVlLmNhdGVnb3J5T3duZXIuaWQpLmZpbHRlcigodmFsdWUsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleCk7XG5cdH1cblxuXHRnZXRPcHRpb25zSWRzSW5DYXRlZ29yaWVJZChjYXRlZ29yeUlkKSA6IG51bWJlcltdXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDdXJyT3B0aW9uc1ZhbHVlcygpLmZpbHRlciggKG9wdGlvblZhbHVlKSA9PiBvcHRpb25WYWx1ZS5vcHRpb24ub3duZXJJZCA9PSBjYXRlZ29yeUlkKS5tYXAoIChvcHRpb25WYWx1ZSkgPT4gb3B0aW9uVmFsdWUub3B0aW9uSWQpO1xuXHR9XHRcblxuXHRkaXNwbGF5U3RhbXBzKCkgOiBTdGFtcFtdXG5cdHtcblx0XHRyZXR1cm4gQXBwLnN0YW1wTW9kdWxlLmdldEFsbG93ZWRTdGFtcEZvckVsZW1lbnQodGhpcyk7XG5cdH1cblxuXHRpc1BlbmRpbmcoKSB7IHJldHVybiB0aGlzLnN0YXR1cyA9PSBFbGVtZW50U3RhdHVzLlBlbmRpbmdBZGQgfHwgdGhpcy5zdGF0dXMgPT0gRWxlbWVudFN0YXR1cy5QZW5kaW5nTW9kaWZpY2F0aW9uOyB9XG5cdGlzRGVsZXRlZCgpIHsgcmV0dXJuIHRoaXMuc3RhdHVzIDw9IEVsZW1lbnRTdGF0dXMuQWRtaW5SZWZ1c2VkIH1cblx0bmVlZHNNb2RlcmF0aW9uKCkgeyByZXR1cm4gdGhpcy5tb2RlcmF0aW9uU3RhdGUgIT0gRWxlbWVudE1vZGVyYXRpb25TdGF0ZS5Ob3ROZWVkZWQgfVx0XG5cblx0Z2V0IG1hcmtlcigpIDogTWFya2VyIHsgcmV0dXJuIHRoaXMubWFya2VyXzsgfVxuXHRnZXQgY29tcG9uZW50KCkgeyByZXR1cm4gdGhpcy5jb21wb25lbnRfIHx8ICh0aGlzLmNvbXBvbmVudF8gPSBuZXcgRWxlbWVudENvbXBvbmVudCh0aGlzKSk7IH1cdFxuXHRnZXQgaXNJbml0aWFsaXplZCgpIHsgcmV0dXJuIHRoaXMuaXNJbml0aWFsaXplZF87IH1cblxufVxuXG4iLCJpbXBvcnQgeyBBcHBNb2R1bGUgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnksIE9wdGlvbiwgQ2F0ZWdvcnlWYWx1ZX0gZnJvbSBcIi4uL2NsYXNzZXNcIjtcbmltcG9ydCB7IHBhcnNlVXJpSWQsIHNsdWdpZnkgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcblxuZXhwb3J0IGNsYXNzIE9wdGlvblZhbHVlXG57XG5cdG9wdGlvbklkIDogYW55O1xuXHRpbmRleCA6IG51bWJlcjtcblx0ZGVzY3JpcHRpb24gOiBzdHJpbmc7XG5cdGRpZmYgOiBzdHJpbmc7IC8vIHVzZSB0byBjb21wYXJlIHdpdGggbW9kaWZpZWQgb3B0aW9uVmFsdWUuIFZhbHVlcyBjbmEgYmUgXCJyZW1vdmVkXCIsIFwiYWRkZWRcIiwgb3IgXCJlcXVhbHNcIlxuXHRvcHRpb25fIDogT3B0aW9uID0gbnVsbDtcblx0aXNGaWxsZWRCeUZpbHRlcnMgOiBib29sZWFuID0gdHJ1ZTtcblxuXHRjaGlsZHJlbiA6IENhdGVnb3J5VmFsdWVbXSA9IFtdO1xuXHRjb2xvck9wdGlvbklkIDogbnVtYmVyID0gbnVsbDtcblxuXHRjb25zdHJ1Y3Rvcigkb3B0aW9uVmFsdWVKc29uLCAka2V5ID0gMClcblx0e1xuXHRcdC8vIGNvbnNvbGUubG9nKFwidmFsdWUganNvblwiLCAkb3B0aW9uVmFsdWVKc29uKTtcblx0XHQvLyBpbiBjYXNlIG9mIGNvbXBhY3QganNvbiwgdGhlIG9wdGlvbnMgdmFsdWVzIGFyZSBzdG9yZWQgaW4gc2ltcGxlIGFycmF5XG5cdFx0aWYgKHR5cGVvZiAkb3B0aW9uVmFsdWVKc29uID09ICdudW1iZXInIHx8IHR5cGVvZiAkb3B0aW9uVmFsdWVKc29uID09ICdzdHJpbmcnKVxuXHRcdHtcblx0XHRcdHRoaXMub3B0aW9uSWQgPSAkb3B0aW9uVmFsdWVKc29uLnRvU3RyaW5nKCk7XG5cdFx0XHR0aGlzLmluZGV4ID0gJGtleTtcblx0XHRcdHRoaXMuZGVzY3JpcHRpb24gPSAnJztcblx0XHR9XG5cdFx0ZWxzZSBpZiAoQXJyYXkuaXNBcnJheSgkb3B0aW9uVmFsdWVKc29uKSAmJiAkb3B0aW9uVmFsdWVKc29uLmxlbmd0aCA+PSAyKVxuXHRcdHtcblx0XHRcdHRoaXMub3B0aW9uSWQgPSAkb3B0aW9uVmFsdWVKc29uWzBdO1xuXHRcdFx0dGhpcy5pbmRleCA9ICRrZXk7XG5cdFx0XHR0aGlzLmRlc2NyaXB0aW9uID0gJG9wdGlvblZhbHVlSnNvbi5sZW5ndGggPT0gMyA/ICAkb3B0aW9uVmFsdWVKc29uWzJdIDogJyc7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHR5cGVvZiAkb3B0aW9uVmFsdWVKc29uID09ICdvYmplY3QnKVxuXHRcdHtcblx0XHRcdGlmICgkb3B0aW9uVmFsdWVKc29uW1wiQGlkXCJdKSB7XG5cdFx0XHRcdHRoaXMub3B0aW9uSWQgPSBwYXJzZVVyaUlkKCRvcHRpb25WYWx1ZUpzb25bXCJAaWRcIl0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5vcHRpb25JZCA9ICRvcHRpb25WYWx1ZUpzb24uY2F0ZWdvcnlJZCB8fCAkb3B0aW9uVmFsdWVKc29uLm9wdGlvbklkO1xuXHRcdFx0XHR0aGlzLmluZGV4ID0gJGtleTtcblx0XHRcdFx0dGhpcy5kZXNjcmlwdGlvbiA9ICRvcHRpb25WYWx1ZUpzb24uZGVzY3JpcHRpb24gfHwgJyc7XG5cdFx0XHR9XHRcdFx0XG5cdFx0fVx0XG5cdFx0dGhpcy5kaWZmID0gJG9wdGlvblZhbHVlSnNvbi5kaWZmO1x0XG5cdH1cblxuXHRnZXQgb3B0aW9uKCkgOiBPcHRpb25cblx0e1xuXHRcdGlmICh0aGlzLm9wdGlvbl8pIHJldHVybiB0aGlzLm9wdGlvbl87XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9uXyA9IEFwcC50YXhvbm9teU1vZHVsZS5nZXRPcHRpb25CeUlkKHRoaXMub3B0aW9uSWQpO1xuXHR9XG5cblx0c2V0UmVjdXJzaXZlbHlGaWxsZWRCeUZpbHRlcnMoYm9vbCA6IGJvb2xlYW4pXG5cdHtcblx0XHR0aGlzLmlzRmlsbGVkQnlGaWx0ZXJzID0gYm9vbDtcblx0XHRmb3IobGV0IGNhdGVnb3J5VmFsdWUgb2YgdGhpcy5jaGlsZHJlbilcblx0XHR7XG5cdFx0XHRmb3IgKGxldCBzdWJvcHRpb25WYWx1ZSBvZiBjYXRlZ29yeVZhbHVlLmNoaWxkcmVuKVxuXHRcdFx0e1xuXHRcdFx0XHRzdWJvcHRpb25WYWx1ZS5zZXRSZWN1cnNpdmVseUZpbGxlZEJ5RmlsdGVycyhib29sKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnZXQgY2F0ZWdvcnlPd25lcigpIDogQ2F0ZWdvcnlcblx0e1xuXHRcdHJldHVybiA8Q2F0ZWdvcnk+IHRoaXMub3B0aW9uLmdldE93bmVyKCk7XG5cdH1cblxuXHRhZGRDYXRlZ29yeVZhbHVlKGNhdGVnb3J5VmFsdWUgOiBDYXRlZ29yeVZhbHVlKVxuXHR7XG5cdFx0dGhpcy5jaGlsZHJlbi5wdXNoKGNhdGVnb3J5VmFsdWUpO1xuXHR9XG59XG5cbiIsImltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcblxuZXhwb3J0IGNsYXNzIFBvc3RhbEFkZHJlc3NcbntcbiAgc3RyZWV0QWRkcmVzcyA6IHN0cmluZyA9ICcnO1xuICBhZGRyZXNzTG9jYWxpdHk6IHN0cmluZyA9ICcnO1xuICBwb3N0YWxDb2RlOiBzdHJpbmcgPSAnJztcbiAgZm9ybWF0ZWRBZGRyZXNzIDogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoJGFkZHJlc3NKc29uKVxuICB7XG4gICAgaWYgKHR5cGVvZiAkYWRkcmVzc0pzb24gPT0gXCJzdHJpbmdcIilcbiAgICAgIHRoaXMuZm9ybWF0ZWRBZGRyZXNzID0gJGFkZHJlc3NKc29uXG4gICAgZWxzZSBpZiAoJGFkZHJlc3NKc29uKVxuICAgIHtcbiAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IGNhcGl0YWxpemUoJGFkZHJlc3NKc29uLnN0cmVldEFkZHJlc3MgfHwgJycpO1xuICAgICAgdGhpcy5hZGRyZXNzTG9jYWxpdHkgPSBjYXBpdGFsaXplKCRhZGRyZXNzSnNvbi5hZGRyZXNzTG9jYWxpdHkgfHwgJycpO1xuICAgICAgdGhpcy5wb3N0YWxDb2RlID0gJGFkZHJlc3NKc29uLnBvc3RhbENvZGU7XG4gICAgICB0aGlzLmZvcm1hdGVkQWRkcmVzcyA9ICRhZGRyZXNzSnNvbi5jdXN0b21Gb3JtYXRlZEFkZHJlc3MgfHwgJyc7XG4gICAgfSAgICAgIFxuICB9XG5cbiAgZ2V0Rm9ybWF0ZWRBZGRyZXNzKClcbiAge1xuICAgIGlmICh0aGlzLmZvcm1hdGVkQWRkcmVzcykgcmV0dXJuIHRoaXMuZm9ybWF0ZWRBZGRyZXNzO1xuICAgIGxldCByZXN1bHQgPSBcIlwiO1xuICAgIGlmICh0aGlzLnN0cmVldEFkZHJlc3MpIHJlc3VsdCArPSB0aGlzLnN0cmVldEFkZHJlc3MgKyAnLCAnO1xuICAgIGlmICh0aGlzLnBvc3RhbENvZGUpIHJlc3VsdCArPSB0aGlzLnBvc3RhbENvZGUgKyAnICc7XG4gICAgaWYgKHRoaXMuYWRkcmVzc0xvY2FsaXR5KSByZXN1bHQgKz0gdGhpcy5hZGRyZXNzTG9jYWxpdHk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSIsImV4cG9ydCBjbGFzcyBTdGFtcFxue1xuICBpZCA6IGFueTtcbiAgbmFtZSA6IHN0cmluZyA9ICcnO1xuICBpY29uIDogc3RyaW5nID0gJyc7XG4gIGVsZW1lbnRJZHMgOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCRqc29uKVxuICB7XG4gICAgdGhpcy5pZCA9ICRqc29uLmlkIHx8ICRqc29uLm5hbWU7XG4gICAgdGhpcy5uYW1lID0gJGpzb24ubmFtZTtcbiAgICB0aGlzLmljb24gPSAkanNvbi5pY29uOyAgXG4gICAgdGhpcy5lbGVtZW50SWRzID0gJGpzb24uZWxlbWVudElkczsgIFxuICB9XG59IiwiZXhwb3J0IGNsYXNzIFZvdGVSZXBvcnQgXG57IFxuXHR0eXBlIDogbnVtYmVyO1xuXHR2YWx1ZSA6IG51bWJlcjtcblx0Y29tbWVudCA6IHN0cmluZztcblx0dXNlckVtYWlsIDogc3RyaW5nO1xuXHR1c2VyUm9sZSA6IG51bWJlcjtcblx0Y3JlYXRlZEF0IDogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKHZvdGVSZXBvcnRKc29uIDogYW55KVxuXHR7XG5cdFx0dGhpcy50eXBlID0gdm90ZVJlcG9ydEpzb24udHlwZTtcblx0XHR0aGlzLnZhbHVlID0gdm90ZVJlcG9ydEpzb24udmFsdWU7XG5cdFx0dGhpcy5jb21tZW50ID0gdm90ZVJlcG9ydEpzb24uY29tbWVudDtcblx0XHR0aGlzLnVzZXJFbWFpbCA9IHZvdGVSZXBvcnRKc29uLnVzZXJFbWFpbDtcblx0XHR0aGlzLnVzZXJSb2xlID0gdm90ZVJlcG9ydEpzb24udXNlclJvbGU7XG5cdFx0dGhpcy5jcmVhdGVkQXQgPSB2b3RlUmVwb3J0SnNvbi5jcmVhdGVkQXQ7XHRcblx0fVxufSIsImV4cG9ydCBpbnRlcmZhY2UgSUV2ZW50PFQ+IHtcbiAgICBkbyhoYW5kbGVyOiB7IChkYXRhPzogVCk6IHZvaWQgfSkgOiB2b2lkO1xuICAgIG9mZihoYW5kbGVyOiB7IChkYXRhPzogVCk6IHZvaWQgfSkgOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgRXZlbnQ8VD4gaW1wbGVtZW50cyBJRXZlbnQ8VD4ge1xuICAgIHByaXZhdGUgaGFuZGxlcnM6IHsgKGRhdGE/OiBUKTogdm9pZDsgfVtdID0gW107XG5cbiAgICBwdWJsaWMgZG8oaGFuZGxlcjogeyAoZGF0YT86IFQpOiB2b2lkIH0pIHtcbiAgICAgICAgdGhpcy5oYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmYoaGFuZGxlcjogeyAoZGF0YT86IFQpOiB2b2lkIH0pIHtcbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IHRoaXMuaGFuZGxlcnMuZmlsdGVyKGggPT4gaCAhPT0gaGFuZGxlcik7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXQoZGF0YT86IFQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVycy5zbGljZSgwKS5mb3JFYWNoKGggPT4gaChkYXRhKSk7XG4gICAgfVxufSIsImltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzLCBBcHBNb2RlcywgQXBwRGF0YVR5cGUgfSBmcm9tIFwiLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgVmlld1BvcnQgfSBmcm9tIFwiLi9tYXAvdmlld3BvcnQuY2xhc3NcIjtcbmRlY2xhcmUgdmFyIEwgOiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBIaXN0b3J5U3RhdGVcbntcbiAgbW9kZTogQXBwTW9kZXM7XG4gIHN0YXRlIDogQXBwU3RhdGVzO1xuICBkYXRhVHlwZSA6IEFwcERhdGFUeXBlO1xuICBhZGRyZXNzIDogc3RyaW5nO1xuICB2aWV3cG9ydCA6IFZpZXdQb3J0O1xuICBpZCA6IGFueTtcbiAgdGV4dCA6IHN0cmluZztcbiAgZmlsdGVycyA6IHN0cmluZztcblxuICBwYXJzZSgkaGlzdG9yeVN0YXRlIDogYW55KSA6IEhpc3RvcnlTdGF0ZVxuICB7XG4gICAgdGhpcy5tb2RlID0gJGhpc3RvcnlTdGF0ZS5tb2RlID09ICdNYXAnID8gQXBwTW9kZXMuTWFwIDogQXBwTW9kZXMuTGlzdDtcbiAgICB0aGlzLnN0YXRlID0gcGFyc2VJbnQoQXBwU3RhdGVzWyRoaXN0b3J5U3RhdGUuc3RhdGVdKTtcbiAgICB0aGlzLmRhdGFUeXBlID0gcGFyc2VJbnQoQXBwRGF0YVR5cGVbJGhpc3RvcnlTdGF0ZS5kYXRhVHlwZV0pO1xuICAgIHRoaXMuYWRkcmVzcyA9ICRoaXN0b3J5U3RhdGUuYWRkcmVzcztcbiAgICB0aGlzLnZpZXdwb3J0ID0gdHlwZW9mICRoaXN0b3J5U3RhdGUudmlld3BvcnQgPT09ICdzdHJpbmcnID8gbmV3IFZpZXdQb3J0KCkuZnJvbVN0cmluZygkaGlzdG9yeVN0YXRlLnZpZXdwb3J0KSA6ICRoaXN0b3J5U3RhdGUudmlld3BvcnQ7XG4gICAgdGhpcy5pZCA9ICRoaXN0b3J5U3RhdGUuaWQ7XG4gICAgdGhpcy50ZXh0ID0gJGhpc3RvcnlTdGF0ZS50ZXh0O1xuICAgIHRoaXMuZmlsdGVycyA9ICRoaXN0b3J5U3RhdGUuZmlsdGVycztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufSIsImV4cG9ydCBjbGFzcyBUaWxlTGF5ZXJcbntcbiAgbmFtZSA6IHN0cmluZyA9ICcnO1xuICB1cmwgOiBzdHJpbmcgPSAnJztcbiAgYXR0cmlidXRpb24gOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZSA6IHN0cmluZywgdXJsIDogc3RyaW5nLCBhdHRyaWJ1dGlvbj8gOiBzdHJpbmcpIHsgXG4gICAgdGhpcy5uYW1lID0gbmFtZTsgXG4gICAgdGhpcy51cmwgPSB1cmw7IFxuICAgIHRoaXMuYXR0cmlidXRpb24gPSBhdHRyaWJ1dGlvbiB8fCAnwqkgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiPk9wZW5TdHJlZXRNYXA8L2E+J1xuICB9XG59IiwiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuZGVjbGFyZSB2YXIgTDtcblxuZXhwb3J0IGNsYXNzIFZpZXdQb3J0XG57XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBsYXQgOiBudW1iZXIgPSAwLCBcbiAgICAgICAgICBwdWJsaWMgbG5nIDpudW1iZXIgPSAwLCBcbiAgICAgICAgICBwdWJsaWMgem9vbSA6IG51bWJlciA9IDApXG4gIHtcbiAgICB0aGlzLmxhdCA9IGxhdCB8fCAwO1xuICAgIHRoaXMubG5nID0gbG5nIHx8IDA7XG4gICAgdGhpcy56b29tID0gem9vbSB8fCAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKVxuICB7XG4gICAgbGV0IGRpZ2l0cyA9IHRoaXMuem9vbSA+IDE0ID8gNCA6IHRoaXMuem9vbSA+IDEwID8gMyA6IDI7XG4gICAgcmV0dXJuIGBAJHt0aGlzLmxhdC50b0ZpeGVkKGRpZ2l0cyl9LCR7dGhpcy5sbmcudG9GaXhlZChkaWdpdHMpfSwke3RoaXMuem9vbX16YDtcbiAgfVxuXG4gIGZyb21TdHJpbmcoc3RyaW5nIDogc3RyaW5nKVxuICB7XG4gICAgaWYgKCFzdHJpbmcpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IGRlY29kZSA9IHN0cmluZy5zcGxpdCgnQCcpLnBvcCgpLnNwbGl0KCcsJyk7XG4gICAgaWYgKGRlY29kZS5sZW5ndGggIT0gMykge1xuICAgICAgY29uc29sZS5sb2coXCJWaWV3UG9ydCBmcm9tU3RyaW5nIGVycmV1clwiLCBzdHJpbmcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRoaXMubGF0ID0gcGFyc2VGbG9hdChkZWNvZGVbMF0pICUgMzYwO1xuICAgIHRoaXMubG5nID0gcGFyc2VGbG9hdChkZWNvZGVbMV0pICUgMzYwO1xuICAgIHRoaXMuem9vbSA9IHBhcnNlSW50KGRlY29kZVsyXS5zbGljZSgwLC0xKSk7XG5cbiAgICAvL2NvbnNvbGUubG9nKFwiVmlld1BvcnQgZnJvbVN0cmluZyBEb25lXCIsIHRoaXMpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0b0xvY2F0aW9uKClcbiAge1xuICAgIHJldHVybiBMLmxhdExuZyh0aGlzLmxhdCwgdGhpcy5sbmcpO1xuICB9XG59IiwiaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMsIEFwcE1vZGVzIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gXCIuL29wdGlvbi5jbGFzc1wiO1xuaW1wb3J0IHsgQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZSwgQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZVR5cGUgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9kaXJlY3RvcnktbWVudS9jYXRlZ29yeS1vcHRpb24tdHJlZS1ub2RlLmNsYXNzXCI7XG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5kZWNsYXJlIGxldCAkIDogYW55O1xuXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcnkgZXh0ZW5kcyBDYXRlZ29yeU9wdGlvblRyZWVOb2RlXG57IFxuXHRlbmFibGVEZXNjcmlwdGlvbiA6IGJvb2xlYW47XG5cdGRpc3BsYXlTdWJvcHRpb25zSW5saW5lIDogYm9vbGVhbjtcblx0dXNlRm9yRmlsdGVyaW5nIDogYm9vbGVhbjsgLy8gaWYgdHJ1ZSwgdGhlIGVsZW1lbnQgd2lsbCBiZSBoaWRkZW4gd2hlbiBub3QgZnVsbGZpbGxpbmcgYXQgbGVhc3Qgb25lIGNoZWNrZWQgb3B0aW9uIG9mIHRoaXMgY2F0ZWdvcnlcblx0aXNNYW5kYXRvcnkgOiBib29sZWFuOyBcdC8vIGlmIHRoZSBlbGVtZW50IGhhdmUgbm8gb3B0aW9uIGluIHRoaXMgY2F0ZWdvcnksIGl0IHdpbGwgbm90IGJlIGRpc3BsYXllZFxuXHRpc1Jvb3RDYXRlZ29yeTogYm9vbGVhbjtcblxuXHRjb25zdHJ1Y3RvcigkY2F0ZWdvcnlKc29uIDogYW55KVxuXHR7XG5cdFx0c3VwZXIoQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZVR5cGUuQ2F0ZWdvcnksICcjY2F0ZWdvcnktJywgJyNzdWJjYXRlZ29yaWUtY2hlY2tib3gtJywgJy5vcHRpb25zLXdyYXBwZXInKTtcblxuXHRcdHRoaXMuaWQgPSAkY2F0ZWdvcnlKc29uLmlkO1xuXHRcdHRoaXMubmFtZSA9IGNhcGl0YWxpemUoJGNhdGVnb3J5SnNvbi5uYW1lIHx8IFwiXCIpO1xuXHRcdHRoaXMubmFtZVNob3J0ID0gY2FwaXRhbGl6ZSgkY2F0ZWdvcnlKc29uLm5hbWVTaG9ydCB8fCB0aGlzLm5hbWUpO1xuXG5cdFx0dGhpcy5pc1Jvb3RDYXRlZ29yeSA9ICRjYXRlZ29yeUpzb24uaXNSb290Q2F0ZWdvcnkgfHwgZmFsc2U7XG5cblx0XHR0aGlzLmRpc3BsYXlJbk1lbnUgPSAoJGNhdGVnb3J5SnNvbi5kaXNwbGF5SW5NZW51IHx8IHRoaXMuaXNSb290Q2F0ZWdvcnkpICYmIHRoaXMubmFtZSAhPSBcIlwiO1xuXHRcdHRoaXMuZGlzcGxheUluSW5mb0JhciA9ICgkY2F0ZWdvcnlKc29uLmRpc3BsYXlJbkluZm9CYXIgfHwgdGhpcy5pc1Jvb3RDYXRlZ29yeSkgJiYgdGhpcy5uYW1lICE9IFwiXCI7XG5cblx0XHR0aGlzLnNob3dFeHBhbmRlZCA9ICRjYXRlZ29yeUpzb24uc2hvd0V4cGFuZGVkICE9PSBmYWxzZTtcblx0XHR0aGlzLnVuZXhwYW5kYWJsZSA9ICRjYXRlZ29yeUpzb24udW5leHBhbmRhYmxlIHx8IGZhbHNlO1xuXHRcdFxuXHRcdHRoaXMuZW5hYmxlRGVzY3JpcHRpb24gPSAkY2F0ZWdvcnlKc29uLmVuYWJsZURlc2NyaXB0aW9uIHx8IGZhbHNlO1x0XG5cdFx0dGhpcy5kaXNwbGF5U3Vib3B0aW9uc0lubGluZSA9ICRjYXRlZ29yeUpzb24uZGlzcGxheVN1Ym9wdGlvbnNJbmxpbmUgfHwgZmFsc2U7XHRcblx0XHR0aGlzLmlzTWFuZGF0b3J5ID0gJGNhdGVnb3J5SnNvbi5pc01hbmRhdG9yeSAhPT0gZmFsc2U7XG5cdFx0dGhpcy51c2VGb3JGaWx0ZXJpbmcgPSAkY2F0ZWdvcnlKc29uLnVzZUZvckZpbHRlcmluZyAhPT0gZmFsc2U7XG5cdFx0dGhpcy5tYWluT3duZXJJZCA9ICRjYXRlZ29yeUpzb24ubWFpbk93bmVySWQgfHwgbnVsbDtcblx0fVxuXG5cdGFkZE9wdGlvbigkb3B0aW9uIDogT3B0aW9uKSB7IHRoaXMuY2hpbGRyZW4ucHVzaCgkb3B0aW9uKTsgfVxuXG5cdGdldCBvcHRpb25zKCkgOiBPcHRpb25bXSB7IHJldHVybiA8T3B0aW9uW10+IHRoaXMuY2hpbGRyZW47IH1cblxuXHRnZXQgZGlzYWJsZWRPcHRpb25zKCkgOiBPcHRpb25bXSB7IHJldHVybiA8T3B0aW9uW10+IHRoaXMuZGlzYWJsZWRDaGlsZHJlbigpOyB9XG5cdGdldCBub25EaXNhYmxlZE9wdGlvbnMoKSA6IE9wdGlvbltdIHsgcmV0dXJuIDxPcHRpb25bXT4gdGhpcy5ub25EaXNhYmxlZENoaWxkcmVuKCk7IH1cblx0Z2V0IGNoZWNrZWRPcHRpb25zKCkgOiBPcHRpb25bXSB7IHJldHVybiA8T3B0aW9uW10+IHRoaXMuY2hlY2tlZENoaWxkcmVuKCk7IH1cbn1cbiIsImltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzLCBBcHBNb2RlcyB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBDYXRlZ29yeSB9IGZyb20gXCIuL2NhdGVnb3J5LmNsYXNzXCI7XG5pbXBvcnQgeyBDYXRlZ29yeU9wdGlvblRyZWVOb2RlLCBDYXRlZ29yeU9wdGlvblRyZWVOb2RlVHlwZSB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2RpcmVjdG9yeS1tZW51L2NhdGVnb3J5LW9wdGlvbi10cmVlLW5vZGUuY2xhc3NcIjtcblxuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSwgc2x1Z2lmeSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuZGVjbGFyZSBsZXQgJCA6IGFueTtcblxuZXhwb3J0IGNsYXNzIE9wdGlvbiBleHRlbmRzIENhdGVnb3J5T3B0aW9uVHJlZU5vZGVcbnsgXG5cdGNvbG9yIDogc3RyaW5nO1xuXHRzb2Z0Q29sb3IgOiBzdHJpbmc7XG5cdGljb24gOiBzdHJpbmc7XG5cdHVzZUljb25Gb3JNYXJrZXI6IGJvb2xlYW47XG5cdHVzZUNvbG9yRm9yTWFya2VyIDogYm9vbGVhbjtcbiAgIHRleHRIZWxwZXIgOiBzdHJpbmc7XG5cbiAgIGRpc3BsYXlDaGlsZHJlbkluTWVudSA6IGJvb2xlYW47XG5cdGRpc3BsYXlDaGlsZHJlbkluSW5mb0JhciA6IGJvb2xlYW47XG4gIFxuICAgaW50SWQgOiBudW1iZXI7IC8vIEFuZCBJZCBhcyBudW1iZXIsIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBvcHRpb24gdXJsXG5cblx0cGFyZW50T3B0aW9uSWRzIDogbnVtYmVyW10gPSBbXTtcblxuXHRjb25zdHJ1Y3Rvcigkb3B0aW9uSnNvbiA6IGFueSlcblx0e1xuXHRcdHN1cGVyKENhdGVnb3J5T3B0aW9uVHJlZU5vZGVUeXBlLk9wdGlvbiwgJyNvcHRpb24tJywgJyNvcHRpb24tY2hlY2tib3gtJywgJy5zdWJjYXRlZ29yaWVzLXdyYXBwZXInKTtcblxuXHRcdHRoaXMubmFtZSA9IGNhcGl0YWxpemUoJG9wdGlvbkpzb24ubmFtZSk7XG5cdFx0dGhpcy5uYW1lU2hvcnQgPSBjYXBpdGFsaXplKCRvcHRpb25Kc29uLm5hbWVTaG9ydCB8fCB0aGlzLm5hbWUpO1xuXHRcdHRoaXMuaWQgPSAoJ2lkJyBpbiAkb3B0aW9uSnNvbikgPyAnJyArICRvcHRpb25Kc29uLmlkIDogc2x1Z2lmeSh0aGlzLm5hbWVTaG9ydCk7XG5cdFx0dGhpcy5pbnRJZCA9IHR5cGVvZiAkb3B0aW9uSnNvbi5pZCA9PSAnbnVtYmVyJyA/ICRvcHRpb25Kc29uLmlkIDogJG9wdGlvbkpzb24uaW50SWQ7XHRcdFxuXG5cdFx0dGhpcy5kaXNwbGF5SW5NZW51ID0gJG9wdGlvbkpzb24uZGlzcGxheUluTWVudSAhPT0gZmFsc2U7XG5cdFx0dGhpcy5kaXNwbGF5SW5JbmZvQmFyID0gJG9wdGlvbkpzb24uZGlzcGxheUluSW5mb0JhciAhPT0gZmFsc2U7XG5cdFx0dGhpcy5kaXNwbGF5Q2hpbGRyZW5Jbk1lbnUgPSAkb3B0aW9uSnNvbi5kaXNwbGF5Q2hpbGRyZW5Jbk1lbnUgIT09IGZhbHNlO1xuXHRcdHRoaXMuZGlzcGxheUNoaWxkcmVuSW5JbmZvQmFyID0gJG9wdGlvbkpzb24uZGlzcGxheUNoaWxkcmVuSW5JbmZvQmFyICE9PSBmYWxzZTtcblxuXHRcdHRoaXMuc2hvd0V4cGFuZGVkID0gJG9wdGlvbkpzb24uc2hvd0V4cGFuZGVkIHx8IGZhbHNlO1xuXHRcdHRoaXMudW5leHBhbmRhYmxlID0gJG9wdGlvbkpzb24udW5leHBhbmRhYmxlIHx8IGZhbHNlO1xuXHRcdFxuXHRcdHRoaXMuY29sb3IgPSAkb3B0aW9uSnNvbi5jb2xvcjtcblx0XHR0aGlzLnNvZnRDb2xvciA9ICRvcHRpb25Kc29uLnNvZnRDb2xvciB8fCB0aGlzLmNvbG9yO1xuXHRcdHRoaXMuaWNvbiA9ICRvcHRpb25Kc29uLmljb247XG5cdFx0dGhpcy50ZXh0SGVscGVyID0gJG9wdGlvbkpzb24udGV4dEhlbHBlcjtcblx0XHR0aGlzLnVzZUljb25Gb3JNYXJrZXIgPSAoJ3VzZUljb25Gb3JNYXJrZXInIGluICRvcHRpb25Kc29uKSA/ICRvcHRpb25Kc29uLnVzZUljb25Gb3JNYXJrZXIgOiAhIXRoaXMuaWNvbjtcblx0XHR0aGlzLnVzZUNvbG9yRm9yTWFya2VyID0gKCd1c2VDb2xvckZvck1hcmtlcicgaW4gJG9wdGlvbkpzb24pID8gJG9wdGlvbkpzb24udXNlQ29sb3JGb3JNYXJrZXIgOiAhIXRoaXMuY29sb3I7XHRcdFxuXHR9XG5cblx0YWRkQ2F0ZWdvcnkoJGNhdGVnb3J5IDogQ2F0ZWdvcnkpIHsgdGhpcy5jaGlsZHJlbi5wdXNoKCRjYXRlZ29yeSk7ICB9XG5cblx0aXNDb2xsYXBzaWJsZSgpIDogYm9vbGVhbiB7IHJldHVybiB0aGlzLmdldERvbSgpLmhhc0NsYXNzKCdvcHRpb24tY29sbGFwc2libGUnKTsgfVxuXG5cdGdldCBzdWJjYXRlZ29yaWVzKCkgOiBDYXRlZ29yeVtdIHsgcmV0dXJuIDxDYXRlZ29yeVtdPiB0aGlzLmNoaWxkcmVuOyB9XG5cblx0Z2V0IGFsbENoaWxkcmVuT3B0aW9ucygpIDogT3B0aW9uW11cblx0e1xuXHRcdHJldHVybiB0aGlzLnJlY3Vyc2l2ZWx5R2V0Q2hpbGRyZW5PcHRpb24odGhpcyk7XG5cdH1cblxuXHRwcml2YXRlIHJlY3Vyc2l2ZWx5R2V0Q2hpbGRyZW5PcHRpb24ocGFyZW50T3B0aW9uIDogT3B0aW9uKSA6IE9wdGlvbltdXG5cdHtcblx0XHRsZXQgcmVzdWx0T3B0aW9ucyA6IE9wdGlvbltdID0gW107XG5cdFx0Zm9yKGxldCBjYXQgb2YgcGFyZW50T3B0aW9uLnN1YmNhdGVnb3JpZXMpXG5cdFx0e1xuXHRcdFx0cmVzdWx0T3B0aW9ucyA9IHJlc3VsdE9wdGlvbnMuY29uY2F0KGNhdC5vcHRpb25zKTtcblx0XHRcdGZvcihsZXQgb3B0aW9uIG9mIGNhdC5vcHRpb25zKVxuXHRcdFx0e1xuXHRcdFx0XHRyZXN1bHRPcHRpb25zID0gcmVzdWx0T3B0aW9ucy5jb25jYXQodGhpcy5yZWN1cnNpdmVseUdldENoaWxkcmVuT3B0aW9uKG9wdGlvbikpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0T3B0aW9ucztcblx0fVxuXG5cdGdldCBwYXJlbnRPcHRpb25OYW1lKCkgOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5nZXRPd25lcigpID8gdGhpcy5nZXRPd25lcigpLmdldE93bmVyKCkgPyB0aGlzLmdldE93bmVyKCkuZ2V0T3duZXIoKS5uYW1lIDogJycgOiAnJzsgfVxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cbmRlY2xhcmUgbGV0ICQsIGpRdWVyeSA6IGFueTtcblxuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBNb2RlcyB9IGZyb20gXCIuLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgKiBhcyBDb29raWVzIGZyb20gXCIuLi91dGlscy9jb29raWVzXCI7XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21Qb3B1cENvbXBvbmVudFxueyAgICBcbiAgb3B0aW9ucyA6IGFueTtcblxuICBpbml0aWFsaXplKClcbiAge1xuICAgIGlmICghQXBwLmNvbmZpZy5pc0ZlYXR1cmVBdmFpbGFibGUoJ2N1c3RvbVBvcHVwJykpIHJldHVybjtcbiAgICB0aGlzLm9wdGlvbnMgPSBBcHAuY29uZmlnLmZlYXR1cmVzLmN1c3RvbVBvcHVwLm9wdGlvbnM7XG4gICAgLy8gY29uc29sZS5sb2coXCJjb29raWVcIiwgdGhpcy5nZXRDb29raWVJZCgpLCBDb29raWVzLnJlYWRDb29raWUodGhpcy5nZXRDb29raWVJZCgpKSlcbiAgICBpZiAoKCF0aGlzLm9wdGlvbnMuc2hvd09ubHlPbmNlIHx8ICFDb29raWVzLnJlYWRDb29raWUodGhpcy5nZXRDb29raWVJZCgpKSkgJiYgdGhpcy5vcHRpb25zLnRleHQubGVuZ3RoID4gMCkgdGhpcy5zaG93KCk7XG4gICAgJCgnI2dvZ28tY3VzdG9tLXBvcHVwICNidG4tY2xvc2UtY3VzdG9tLXBvcHVwJykuY2xpY2soICgpID0+IHRoaXMuaGlkZSgpKTtcbiAgfVxuXG4gIGhpZGUoZGVsYXkgOiBudW1iZXIgPSAyNTApIHsgXG4gICAgJCgnI2dvZ28tY3VzdG9tLXBvcHVwJykuZmFkZU91dChkZWxheSk7IFxuICAgIENvb2tpZXMuY3JlYXRlQ29va2llKHRoaXMuZ2V0Q29va2llSWQoKSwgdHJ1ZSk7XG4gIH1cblxuICBzaG93KGRlbGF5IDogbnVtYmVyID0gNDAwKSB7ICQoJyNnb2dvLWN1c3RvbS1wb3B1cCcpLmZhZGVJbihkZWxheSk7IH1cblxuICBnZXRJZCgpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmlkIHx8IDA7XG4gIH1cblxuICBnZXRDb29raWVJZCgpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gYGdvZ29DdXN0b21Qb3B1cC0ke3RoaXMuZ2V0SWQoKX0tQ2xvc2VkYFxuICB9XG59IiwiaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBNb2RlcyB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy90YXhvbm9teS9vcHRpb24uY2xhc3NcIjtcblxuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuZGVjbGFyZSBsZXQgJCA6IGFueTtcblxuZXhwb3J0IGVudW0gQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZVR5cGVcbntcblx0T3B0aW9uLFxuXHRDYXRlZ29yeVxufVxuXG4vKipcbiogQ2xhc3MgcmVwcmVzZW50YXRpbmcgYSBOb2RlIGluIHRoZSBEaXJlY3RvcnkgTWVudSBUcmVlXG4qXG4qIEEgQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZSBjYW4gYmUgYSBDYXRlZ29yeSBvciBhbiBPcHRpb25cbiovXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZSBcbntcblx0aWQgOiBhbnk7XG5cdG5hbWUgOiBzdHJpbmc7XG5cdG5hbWVTaG9ydDogc3RyaW5nO1xuXG5cdGRpc3BsYXlJbk1lbnUgOiBib29sZWFuO1xuXHRkaXNwbGF5SW5JbmZvQmFyIDogYm9vbGVhbjtcblxuXHRzaG93RXhwYW5kZWQgOiBib29sZWFuO1xuXHR1bmV4cGFuZGFibGUgOiBib29sZWFuO1xuXG5cdGNoaWxkcmVuIDogQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZVtdID0gW107XG5cblx0Ly8gaXMgdGhlIG5vZGUgaGFuJ3QgYmUgdG91Y2hlZCBmb3Igbm93LCBpdCdzIG9uIGl0J3MgZmlyc3QgaW5pdGlhbGl6ZWQgc3RhdGVcblx0aXNQcmlzdGluZSA6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdG93bmVySWQgOiBudW1iZXIgPSBudWxsO1xuXHQvLyBtYWluIG9wdGlvbiBJZCwgb3IgXCJhbGxcIlxuXHRtYWluT3duZXJJZCA6IGFueSA9IG51bGw7XG5cblx0aXNDaGVja2VkIDogYm9vbGVhbiA9IHRydWU7XG5cdGlzRGlzYWJsZWQgOiBib29sZWFuID0gZmFsc2U7XHRcdFxuXG5cdGlzTWFpbk9wdGlvbiA6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIFRZUEUgOiBDYXRlZ29yeU9wdGlvblRyZWVOb2RlVHlwZSwgcHJpdmF0ZSBET01fSUQgOiBzdHJpbmcsIHByaXZhdGUgRE9NX0NIRUNLQk9YX0lEIDogc3RyaW5nLCBwcml2YXRlIERPTV9DSElMRFJFTl9DTEFTUyA6IHN0cmluZykge307XG5cblx0Z2V0RG9tKCkgeyByZXR1cm4gJCh0aGlzLkRPTV9JRCArIHRoaXMuaWQpOyB9XG5cblx0Z2V0RG9tQ2hlY2tib3goKSB7IHJldHVybiAkKHRoaXMuRE9NX0NIRUNLQk9YX0lEICsgdGhpcy5pZCk7IH1cblxuXHRnZXREb21DaGlsZHJlbigpIHsgcmV0dXJuIHRoaXMuZ2V0RG9tKCkubmV4dCh0aGlzLkRPTV9DSElMRFJFTl9DTEFTUyk7fVxuXG5cdGdldE93bmVyKCkgOiBDYXRlZ29yeU9wdGlvblRyZWVOb2RlIFxuXHR7IFxuXHRcdGlmICh0aGlzLlRZUEUgPT0gQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZVR5cGUuT3B0aW9uKVxuXHRcdFx0cmV0dXJuIEFwcC50YXhvbm9teU1vZHVsZS5nZXRDYXRlZ29yeUJ5SWQodGhpcy5vd25lcklkKTsgXG5cblx0XHRpZiAodGhpcy5UWVBFID09IENhdGVnb3J5T3B0aW9uVHJlZU5vZGVUeXBlLkNhdGVnb3J5KVxuXHRcdFx0cmV0dXJuIEFwcC50YXhvbm9teU1vZHVsZS5nZXRPcHRpb25CeUlkKHRoaXMub3duZXJJZCk7IFxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcm90ZWN0ZWQgZGlzYWJsZWRDaGlsZHJlbigpIDogQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZVtdIHsgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZmlsdGVyKCBjaGlsZCA9PiBjaGlsZC5pc0Rpc2FibGVkKTsgfVxuXHRwcm90ZWN0ZWQgbm9uRGlzYWJsZWRDaGlsZHJlbigpIDogQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZVtdIHsgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZmlsdGVyKCBjaGlsZCA9PiAhY2hpbGQuaXNEaXNhYmxlZCk7IH1cblx0cHJvdGVjdGVkIGNoZWNrZWRDaGlsZHJlbigpIDogQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZVtdIHsgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZmlsdGVyKCBjaGlsZCA9PiBjaGlsZC5pc0NoZWNrZWQpOyB9XG5cblx0aXNPcHRpb24oKSB7IHJldHVybiB0aGlzLlRZUEUgPT0gQ2F0ZWdvcnlPcHRpb25UcmVlTm9kZVR5cGUuT3B0aW9uIH1cblxuXHRzZXRDaGVja2VkKGJvb2wgOiBib29sZWFuKVxuXHR7XG5cdFx0dGhpcy5pc0NoZWNrZWQgPSBib29sO1xuXHRcdHRoaXMuZ2V0RG9tKCkudG9nZ2xlQ2xhc3MoXCJjaGVja2VkXCIsIGJvb2wpO1xuXHRcdHRoaXMuZ2V0RG9tQ2hlY2tib3goKS5wcm9wKFwiY2hlY2tlZFwiLCBib29sKTtcblx0XHR0aGlzLmlzUHJpc3RpbmUgPSBmYWxzZTtcblx0fVxuXG5cdHNldERpc2FibGVkKGJvb2wgOiBib29sZWFuKVxuXHR7XG5cdFx0dGhpcy5pc0Rpc2FibGVkID0gYm9vbDtcblx0XHR0aGlzLmdldERvbSgpLnRvZ2dsZUNsYXNzKFwiZGlzYWJsZWRcIiwgYm9vbCk7XG5cdFx0aWYgKGJvb2wpIHRoaXMuc2V0Q2hlY2tlZChmYWxzZSk7XHRcdFx0XG5cdFx0dGhpcy5pc1ByaXN0aW5lID0gZmFsc2U7XG5cdH1cblxuXHR0b2dnbGUodmFsdWUgOiBib29sZWFuID0gbnVsbCwgaHVtYW5BY3Rpb24gOiBib29sZWFuID0gdHJ1ZSlcblx0e1x0XHRcblx0XHRsZXQgY2hlY2s7XG5cdFx0aWYgKHZhbHVlICE9IG51bGwpIGNoZWNrID0gdmFsdWU7XG5cdFx0ZWxzZSBjaGVjayA9ICF0aGlzLmlzQ2hlY2tlZDtcblxuXHRcdGlmICh0aGlzLmlzT3B0aW9uKCkgJiYgdGhpcy5pc1ByaXN0aW5lICYmIGh1bWFuQWN0aW9uKVxuXHRcdHtcblx0XHRcdHRoaXMucmVjdXJzaXZlbHlHZXRQcmlzdGluZSh0aGlzKS5mb3JFYWNoKCAobm9kZSkgPT4ge1xuXHRcdFx0XHRub2RlLnRvZ2dsZShmYWxzZSwgZmFsc2UpO1xuXHRcdFx0fSk7XG5cdFx0XHQvLyBmb3JjZSBjaGVjayB0byB0cnVlLCBiZWNhc3VlIGluIHByaXN0aW5lIG1vZGUgaW5wdXQgaXMgdW5jaGVja2VkIGJ1dCBvcHRpb24gY2xhc3MgaXMgY2hlY2tlZCBhbmQgbm90IGRpc2FibGVkXG5cdFx0XHRjaGVjayA9IHRydWU7XG5cdFx0fVx0XHRcdFxuXG5cdFx0dGhpcy5zZXRDaGVja2VkKGNoZWNrKTtcblx0XHR0aGlzLnNldERpc2FibGVkKCFjaGVjayk7XG5cblx0XHRpZiAoIXRoaXMuaXNNYWluT3B0aW9uIHx8ICFBcHAuY29uZmlnLm1lbnUuc2hvd09uZVBhbmVQZXJNYWluT3B0aW9uKSBcblx0XHR7XG5cdFx0XHRmb3IgKGxldCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVuKSBjaGlsZC50b2dnbGUoY2hlY2ssIGZhbHNlKTtcblx0XHR9XG5cblx0XHRpZihodW1hbkFjdGlvbilcblx0XHR7XG5cdFx0XHRpZiAodGhpcy5nZXRPd25lcigpKSB0aGlzLmdldE93bmVyKCkudXBkYXRlU3RhdGUoKTtcblx0XHRcdFxuXHRcdFx0Ly8gZGVsYXkgdGhlIHVwZGF0ZSBzbyBpdCdzIG5vdCBmcmVlemluZyB0aGUgVUlcblx0XHRcdHNldFRpbWVvdXQoICgpID0+IHtcblx0XHRcdFx0QXBwLmVsZW1lbnRzTW9kdWxlLnVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5KGNoZWNrLCB0cnVlKTtcblx0XHRcdFx0QXBwLmhpc3RvcnlNb2R1bGUudXBkYXRlQ3VyclN0YXRlKCk7XG5cdFx0XHR9LDIwMCk7XHRcdFx0XHRcblx0XHR9XG5cdH1cblxuXHR0b2dnbGVWaXNpYmlsaXR5KHZhbHVlIDogYm9vbGVhbiwgcmVjdXJzaXZlIDogYm9vbGVhbiA9IGZhbHNlKVxuXHR7XG5cdFx0Ly9jb25zb2xlLmxvZyhcInRvZ2dsZSB2aXNpYmlsaXR5IFwiLCB2YWx1ZSk7XG5cdFx0dGhpcy5pc0NoZWNrZWQgPSB2YWx1ZTtcblxuXHRcdGlmICh2YWx1ZSkgdGhpcy5nZXREb20oKS5zaG93KCk7XG5cdFx0ZWxzZSB7IHRoaXMuZ2V0RG9tKCkuaGlkZSgpO31cblxuXHRcdGlmICh0aGlzLmlzTWFpbk9wdGlvbilcblx0XHR7XG5cdFx0XHQkKCcjbWFpbi1vcHRpb24tZ29nby1pY29uLScgKyB0aGlzLmlkKS50b2dnbGUodmFsdWUpO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZSAmJiB0aGlzLmdldE93bmVyKCkpIHRoaXMuZ2V0T3duZXIoKS50b2dnbGVWaXNpYmlsaXR5KHRydWUpO1xuXG5cdFx0aWYgKHJlY3Vyc2l2ZSkgZm9yIChsZXQgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikgY2hpbGQudG9nZ2xlVmlzaWJpbGl0eSh2YWx1ZSwgdHJ1ZSk7XG5cdH1cblxuXHR1cGRhdGVTdGF0ZShwcm9wYWdlID0gdHJ1ZSlcblx0e1xuXHRcdGlmICh0aGlzLmlzTWFpbk9wdGlvbiAmJiBBcHAuY29uZmlnLm1lbnUuc2hvd09uZVBhbmVQZXJNYWluT3B0aW9uKSByZXR1cm47XHRcblxuXHRcdGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSBcblx0XHRcdHRoaXMuc2V0RGlzYWJsZWQoIXRoaXMuaXNDaGVja2VkKTtcblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0bGV0IGRpc2FibGVkQ2hpbGRyZW5Db3VudCA9IHRoaXMuY2hpbGRyZW4uZmlsdGVyKCAoY2hpbGQgOiBDYXRlZ29yeU9wdGlvblRyZWVOb2RlKSA9PiBjaGlsZC5pc0Rpc2FibGVkKS5sZW5ndGg7XG5cblx0XHRcdC8vY29uc29sZS5sb2coXCJPcHRpb24gXCIgKyB0aGlzLm5hbWUgKyBcIiB1cGRhdGUgc3RhdGUsIG5icmUgY2hpbGRyZW4gZGlzYWJsZWQgPSBcIiwgZGlzYWJsZWRDaGlsZHJlbkNvdW50KTtcblxuXHRcdFx0aWYgKGRpc2FibGVkQ2hpbGRyZW5Db3VudCA9PSB0aGlzLmNoaWxkcmVuLmxlbmd0aClcblx0XHRcdFx0dGhpcy5zZXREaXNhYmxlZCh0cnVlKTtcdFxuXHRcdFx0ZWxzZVxuXHRcdFx0XHR0aGlzLnNldERpc2FibGVkKGZhbHNlKTtcblxuXHRcdFx0bGV0IGNoZWNrZWRDaGlsZHJlbkNvdW50ID0gdGhpcy5jaGlsZHJlbi5maWx0ZXIoIChjaGlsZCA6IENhdGVnb3J5T3B0aW9uVHJlZU5vZGUpID0+IGNoaWxkLmlzQ2hlY2tlZCkubGVuZ3RoO1xuXHRcdFx0aWYgKGNoZWNrZWRDaGlsZHJlbkNvdW50ID09IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKVxuXHRcdFx0XHR0aGlzLnNldENoZWNrZWQodHJ1ZSk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHRoaXMuc2V0Q2hlY2tlZChmYWxzZSlcblx0XHR9XHRcdFxuXG5cdFx0aWYgKHRoaXMuZ2V0T3duZXIoKSAmJiBwcm9wYWdlKSB0aGlzLmdldE93bmVyKCkudXBkYXRlU3RhdGUoKTtcdFxuXHR9XG5cblx0cmVjdXJzaXZlbHlVcGRhdGVTdGF0ZXMoKVxuXHR7XG5cdFx0Zm9yKGxldCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVuKVxuXHRcdHtcblx0XHRcdGNoaWxkLnJlY3Vyc2l2ZWx5VXBkYXRlU3RhdGVzKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy51cGRhdGVTdGF0ZSgpO1xuXHR9XG5cblx0aXNFeHBhbmRlZCgpIDogYm9vbGVhbiB7IHJldHVybiB0aGlzLmdldERvbSgpLmhhc0NsYXNzKCdleHBhbmRlZCcpOyB9XG5cdGlzVW5leHBhbmRhYmxlKCkgOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZ2V0RG9tKCkuaGFzQ2xhc3MoJ3VuZXhwYW5kYWJsZScpOyB9XG5cblx0dG9nZ2xlQ2hpbGRyZW5EZXRhaWwoKVxuXHR7XG5cdFx0aWYgKHRoaXMuaXNVbmV4cGFuZGFibGUoKSkgcmV0dXJuO1xuXG5cdFx0aWYgKHRoaXMuaXNFeHBhbmRlZCgpKVxuXHRcdHtcblx0XHRcdHRoaXMuZ2V0RG9tQ2hpbGRyZW4oKS5zdG9wKHRydWUsZmFsc2UpLnNsaWRlVXAoeyBkdXJhdGlvbjogMzUwLCBlYXNpbmc6IFwiZWFzZU91dFF1YXJ0XCIsIHF1ZXVlOiBmYWxzZSwgY29tcGxldGU6IGZ1bmN0aW9uKCkgeyQodGhpcykuY3NzKCdoZWlnaHQnLCAnJyk7fX0pO1xuXHRcdFx0dGhpcy5nZXREb20oKS5yZW1vdmVDbGFzcygnZXhwYW5kZWQnKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdHRoaXMuZ2V0RG9tQ2hpbGRyZW4oKS5zdG9wKHRydWUsZmFsc2UpLnNsaWRlRG93bih7IGR1cmF0aW9uOiAzNTAsIGVhc2luZzogXCJlYXNlT3V0UXVhcnRcIiwgcXVldWU6IGZhbHNlLCBjb21wbGV0ZTogZnVuY3Rpb24oKSB7JCh0aGlzKS5jc3MoJ2hlaWdodCcsICcnKTt9fSk7XG5cdFx0XHR0aGlzLmdldERvbSgpLmFkZENsYXNzKCdleHBhbmRlZCcpO1xuXHRcdH1cblx0fVxuXG5cdGdldFNpYmxpbmdzUHJpc3RpbmUoKSA6IENhdGVnb3J5T3B0aW9uVHJlZU5vZGVbXVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3duZXIoKS5jaGlsZHJlbi5maWx0ZXIoIChub2RlKSA9PiBub2RlLmlzUHJpc3RpbmUgJiYgbm9kZS5pZCAhPSB0aGlzLmlkKTsgXG5cdH1cblxuXHRwcml2YXRlIHJlY3Vyc2l2ZWx5R2V0UHJpc3RpbmUoY3Vyck9wdGlvbiA6IENhdGVnb3J5T3B0aW9uVHJlZU5vZGUpXG5cdHtcblx0XHRsZXQgcmVzdWx0Tm9kZXMgPSBbXTtcblx0XHRyZXN1bHROb2RlcyA9IHJlc3VsdE5vZGVzLmNvbmNhdChjdXJyT3B0aW9uLmdldFNpYmxpbmdzUHJpc3RpbmUoKSk7XG5cdFx0bGV0IHBhcmVudE9wdGlvbiA9IGN1cnJPcHRpb24uZ2V0T3duZXIoKS5nZXRPd25lcigpO1xuXHRcdGlmICh0aGlzLmlzTWFpbk9wdGlvbiB8fCBBcHAuY29uZmlnLm1lbnUuc2hvd09uZVBhbmVQZXJNYWluT3B0aW9uICYmIHBhcmVudE9wdGlvbi5pc01haW5PcHRpb24pIHJldHVybiByZXN1bHROb2Rlcztcblx0XHRlbHNlIGlmIChwYXJlbnRPcHRpb24pIHJlc3VsdE5vZGVzID0gcmVzdWx0Tm9kZXMuY29uY2F0KHRoaXMucmVjdXJzaXZlbHlHZXRQcmlzdGluZShwYXJlbnRPcHRpb24pKTtcdFx0XG5cblx0XHRyZXR1cm4gcmVzdWx0Tm9kZXM7XG5cdH1cbn0iLCIvKipcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHb0dvQ2FydG8gcHJvamVjdC5cbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNiBTZWJhc3RpYW4gQ2FzdHJvIC0gOTBzY2FzdHJvQGdtYWlsLmNvbVxuICogQGxpY2Vuc2UgR05VIEdQTCB2M1xuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAxNi0xMi0xM1xuICovXG5kZWNsYXJlIGxldCAkLCBqUXVlcnkgOiBhbnk7XG5cbmltcG9ydCB7IEFwcE1vZHVsZSB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBDYXRlZ29yeSwgT3B0aW9uIH0gZnJvbSBcIi4uLy4uL21vZHVsZXMvdGF4b25vbXkvdGF4b25vbXkubW9kdWxlXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgeyBFdmVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcblxuZXhwb3J0IGNsYXNzIERpcmVjdG9yeU1lbnVDb21wb25lbnRcbntcdFx0XG5cdG9wZW5NZW51IDogYm9vbGVhbiA9IGZhbHNlO1xuXHR3aWR0aCA6IG51bWJlcjtcblx0ZG9tO1xuXG5cdGlzUGFubmluZyA6IGJvb2xlYW4gPSBmYWxzZTtcblx0ZHJhZ1RhcmdldDtcblx0b3ZlcmxheTtcblxuICBvblNob3cgPSBuZXcgRXZlbnQ8YW55PigpO1xuICBvbkhpZGUgPSBuZXcgRXZlbnQ8YW55PigpO1xuXG5cdEFOSU1fNTAgPSB7ZHVyYXRpb246IDUwLCBxdWV1ZTogZmFsc2UsIGVhc2luZzogJ2Vhc2VPdXRFbGFzdGljJ307XG5cdEFOSU1fMjAwID0ge2R1cmF0aW9uOiAyMDAsIHF1ZXVlOiBmYWxzZSwgZWFzaW5nOiAnZWFzZU91dEVsYXN0aWMnfTtcblx0QU5JTV8zMDAgPSB7ZHVyYXRpb246IDMwMCwgcXVldWU6IGZhbHNlLCBlYXNpbmc6ICdlYXNlT3V0RWxhc3RpYyd9O1xuICBBTklNXzQwMCA9IHtkdXJhdGlvbjogMzAwLCBxdWV1ZTogZmFsc2UsIGVhc2luZzogJ2Vhc2VPdXRFbGFzdGljJ307XG5cblx0Y29uc3RydWN0b3IoKSB7IH1cblxuXHRpbml0aWFsaXplKClcblx0e1x0XHRcdFx0XG5cdFx0dGhpcy5kb20gPSAkKCcjZGlyZWN0b3J5LW1lbnUnKTtcbiAgICB0aGlzLmRyYWdUYXJnZXQgPSAgJCgnLmRpcmVjdG9yeS1tZW51LWRyYWctdGFyZ2V0Jyk7XG4gICAgdGhpcy5vdmVybGF5ID0gJCgnI2RpcmVjdG9yeS1tZW51LW92ZXJsYXknKTtcblxuICAgIHRoaXMuZHJhZ1RhcmdldC5jc3MoeydsZWZ0JzogMH0pOyAgICBcblxuICAgIHRoaXMuZHJhZ1RhcmdldC5jbGljaygoKSA9PiB7IHRoaXMuaGlkZSgpOyB9KTtcbiAgICB0aGlzLm92ZXJsYXkuY2xpY2soKCkgPT4geyB0aGlzLmhpZGUoKTsgfSk7XHRcblxuXHRcdCQoJy5idG4tY2xvc2UtbWVudS5sYXJnZS1zY3JlZW4nKS50b29sdGlwKCk7XG5cbiAgICBpZiAoQXBwLmNvbXBvbmVudC5pc01vYmlsZVNjcmVlbigpKSB7XG4gICAgICB0aGlzLmluaXRUb3VjaE1lbnUoKTtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9XG5cdH1cdFxuXG5cdHNob3coKSBcblx0eyAgICBcbiAgICB0aGlzLmRvbS5zaG93KCk7XG4gICAgdGhpcy5vblNob3cuZW1pdCgpOyAgICBcblxuICAgIHRoaXMuZG9tLnZlbG9jaXR5KHtsZWZ0OiAwfSwgdGhpcy5BTklNXzIwMCk7IFxuICAgIHRoaXMub3ZlcmxheS5zaG93KCkudmVsb2NpdHkoe29wYWNpdHk6IDF9LCB0aGlzLkFOSU1fMjAwKTtcblxuICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICBcdEFwcC5maWx0ZXJzQ29tcG9uZW50LnVwZGF0ZU1haW5PcHRpb25CYWNrZ3JvdW5kKCk7XHRcblxuICAgIFx0bGV0IGRyYWdUYXJnZXRXaWR0aCA9IEFwcC5jb21wb25lbnQud2lkdGgoKSAtIHRoaXMud2lkdGggKyAyMDtcbiAgICAgIHRoaXMuZHJhZ1RhcmdldC5jc3Moe3dpZHRoOiBkcmFnVGFyZ2V0V2lkdGggKyAncHgnLCByaWdodDogMCwgbGVmdDogJyd9KTtcbiAgICAgIEFwcC5jb21wb25lbnQudXBkYXRlTWFwU2l6ZSgpO1xuXHRcdFx0QXBwLmNvbXBvbmVudC51cGRhdGVDb21wb25lbnRzU2l6ZSgpO1xuICAgIH0sIDQwMCk7ICAgICBcdFx0XHRcbiAgfVxuXG5cdGhpZGUoKSBcbiAge1xuICAgIHRoaXMub25IaWRlLmVtaXQoKTtcblxuICAgIHRoaXMub3ZlcmxheS52ZWxvY2l0eSh7b3BhY2l0eTogMH0sIHRoaXMuQU5JTV8zMDApO1xuICAgIHRoaXMuZHJhZ1RhcmdldC5jc3Moe3dpZHRoOiAnMTBweCcsIHJpZ2h0OiAnJywgbGVmdDogJzAnfSk7XG4gICAgdGhpcy5kb20udmVsb2NpdHkoe2xlZnQ6IC0xICogKHRoaXMud2lkdGggKyAyMCl9LCB0aGlzLkFOSU1fMzAwKTtcblxuICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICBcdHRoaXMub3ZlcmxheS5oaWRlKCk7XG4gICAgXHR0aGlzLmRvbS5oaWRlKCk7ICAgXG5cdFx0XHRcblx0XHRcdCQoJy5zaG93LWRpcmVjdG9yeS1tZW51LWJ1dHRvbicpLnNob3coKTtcdFxuXHRcdFx0dGhpcy5kb20uZmluZCgnLnRvb2x0aXBwZWQnKS50b29sdGlwKCdyZW1vdmUnKTtcblx0XHRcdCQoJy5idG4tY2xvc2UtbWVudS5sYXJnZS1zY3JlZW4nKS5oaWRlVG9vbHRpcCgpO1xuXG5cdFx0XHRBcHAuY29tcG9uZW50LnVwZGF0ZU1hcFNpemUoKTsgXG5cdFx0XHRBcHAuY29tcG9uZW50LnVwZGF0ZUNvbXBvbmVudHNTaXplKCk7IFxuICAgIH0sIDQwMCk7ICAgIFxuICB9XG5cbiAgaW5pdFRvdWNoTWVudSgpXG4gIHtcbiAgXHR0aGlzLmRyYWdUYXJnZXQuaGFtbWVyKHtcbiAgICAgIHByZXZlbnRfZGVmYXVsdDogZmFsc2VcbiAgICB9KS5iaW5kKCdwYW4nLCAoZSkgPT4gXG4gICAge1xuICAgICAgaWYgKGUuZ2VzdHVyZS5wb2ludGVyVHlwZSA9PSBcInRvdWNoXCIpIFxuICAgICAge1xuICAgICAgICB2YXIgZGlyZWN0aW9uID0gZS5nZXN0dXJlLmRpcmVjdGlvbjtcbiAgICAgICAgdmFyIHggPSBlLmdlc3R1cmUuY2VudGVyLng7XG4gICAgICAgIHZhciB5ID0gZS5nZXN0dXJlLmNlbnRlci55O1xuICAgICAgICB2YXIgdmVsb2NpdHlYID0gZS5nZXN0dXJlLnZlbG9jaXR5WDsgIFxuXG4gICAgICAgIC8vIEtlZXAgd2l0aGluIGJvdW5kYXJpZXNcbiAgICAgICAgaWYgKHggPiB0aGlzLndpZHRoKSB7IHggPSB0aGlzLndpZHRoOyB9XG4gICAgICAgIGVsc2UgaWYgKHggPCAwKSB7IHggPSAwOyB9XG5cbiAgICAgICAgaWYgKHggPCAodGhpcy53aWR0aCAvIDIpKSB7IHRoaXMub3Blbk1lbnUgPSBmYWxzZTsgfVxuICAgICAgICBlbHNlIHsgdGhpcy5vcGVuTWVudSA9IHRydWU7IH1cblxuICAgICAgICB0aGlzLmRvbS5jc3MoJ2xlZnQnLCAoeCAtIHRoaXMud2lkdGgpKS5zaG93KCk7XG5cbiAgICAgICAgLy8gUGVyY2VudGFnZSBvdmVybGF5XG4gICAgICAgIHZhciBvdmVybGF5UGVyYztcbiAgICAgICAgb3ZlcmxheVBlcmMgPSB4IC8gdGhpcy53aWR0aDtcbiAgICAgICAgdGhpcy5vdmVybGF5LnNob3coKS52ZWxvY2l0eSh7b3BhY2l0eTogb3ZlcmxheVBlcmMgfSwgdGhpcy5BTklNXzUwKTtcblx0XHRcdH1cblxuICAgIH0pLmJpbmQoJ3BhbmVuZCcsIChlKSA9PiB7XG4gICAgICBpZiAoZS5nZXN0dXJlLnBvaW50ZXJUeXBlID09IFwidG91Y2hcIikgXG4gICAgICB7XG4gICAgICAgIHZhciB2ZWxvY2l0eVggPSBlLmdlc3R1cmUudmVsb2NpdHlYO1xuXG4gICAgICAgIC8vIElmIHZlbG9jaXR5WCA8PSAwLjMgdGhlbiB0aGUgdXNlciBpcyBmbGluZ2luZyB0aGUgbWVudSBjbG9zZWQgc28gaWdub3JlIHRoaXMub3Blbk1lbnVcbiAgICAgICAgaWYgKCh0aGlzLm9wZW5NZW51ICYmIHZlbG9jaXR5WCA8PSAwLjMpIHx8IHZlbG9jaXR5WCA8IC0wLjUpIHsgdGhpcy5zaG93KCk7IH1cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMub3Blbk1lbnUgfHwgdmVsb2NpdHlYID4gMC4zKSB7IHRoaXMuaGlkZSgpO31cbiAgICAgIH1cbiAgICAgfSk7XG4gIH1cblx0XG5cdHVwZGF0ZVNpemUoKSBcblx0e1xuICAgIC8vIHVwZGF0ZSBtZW51IHdpZHRoXG5cdFx0bGV0IG1lbnV3aWR0aCwgcGFnZVdpZHRoID0gQXBwLmNvbXBvbmVudC53aWR0aCgpO1xuXG4gICAgbGV0IG1lbnVTbWFsbFdpZHRoID0gQXBwLmNvbmZpZy5tZW51LndpZHRoID8gQXBwLmNvbmZpZy5tZW51LndpZHRoIDogMjYwO1xuICAgIGxldCBtZW51QmlnV2lkdGggPSBBcHAuY29uZmlnLm1lbnUud2lkdGggPyBBcHAuY29uZmlnLm1lbnUud2lkdGggOiAyOTA7XG4gICAgaWYgKEFwcC5jb25maWcubWVudS5zaG93T25lUGFuZVBlck1haW5PcHRpb24pIHtcbiAgICAgIG1lbnVTbWFsbFdpZHRoICs9IDUwO1xuICAgICAgbWVudUJpZ1dpZHRoICs9IDUwO1xuICAgIH1cblx0XHRcblx0XHRpZiAocGFnZVdpZHRoID4gODUwKSB7XG4gICAgICBtZW51d2lkdGggPSAgcGFnZVdpZHRoID4gMTQ1MCA/IG1lbnVCaWdXaWR0aCA6IG1lbnVTbWFsbFdpZHRoO1xuXHRcdH0gZWxzZSB7XG4gICAgICBtZW51d2lkdGggPSAgTWF0aC5taW4oTWF0aC5taW4oTWF0aC5tYXgocGFnZVdpZHRoIC0gNjAsIG1lbnVTbWFsbFdpZHRoKSwgbWVudUJpZ1dpZHRoKSwgcGFnZVdpZHRoIC0gMjApO1xuXHRcdH1cblx0XHRcblx0XHR0aGlzLmRvbS5jc3MoJ3dpZHRoJywgbWVudXdpZHRoICsgJ3B4Jyk7XG5cdFx0dGhpcy53aWR0aCA9IG1lbnV3aWR0aDtcblx0XHRcblx0XHRpZiAobWVudXdpZHRoIDwgMzQwIHx8IEFwcC5jb25maWcubWVudS5zbWFsbFdpZHRoU3R5bGUpIHRoaXMuZG9tLmFkZENsYXNzKCdzbWFsbC13aWR0aCcpO1xuXHRcdGVsc2UgdGhpcy5kb20ucmVtb3ZlQ2xhc3MoJ3NtYWxsLXdpZHRoJyk7XHRcblx0fVxufVxuXG5cblxuXG5cblxuIiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMTItMTNcbiAqL1xuZGVjbGFyZSBsZXQgJCwgalF1ZXJ5IDogYW55O1xuXG5pbXBvcnQgeyBBcHBNb2R1bGUgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgQ2F0ZWdvcnksIE9wdGlvbiB9IGZyb20gXCIuLi8uLi9tb2R1bGVzL3RheG9ub215L3RheG9ub215Lm1vZHVsZVwiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyc0NvbXBvbmVudFxueyAgXG4gIGN1cnJlbnRBY3RpdmVNYWluT3B0aW9uSWQgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBpbml0aWFsaXplKClcbiAgeyAgXG4gICAgJCgnLmZpbHRlci1tZW51IC50b29sdGlwcGVkJykudG9vbHRpcCgpO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIC0tLS0tLS0tLSBGQVZPUklURS0tLS0tLS0tLS0tLS1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgJCgnI2ZpbHRlci1mYXZvcml0ZScpLmNsaWNrKGZ1bmN0aW9uKGUgOiBFdmVudClcbiAgICB7ICAgICAgXG4gICAgICBsZXQgZmF2b3JpdGVDaGVja2JveCA9ICQoJyNmYXZvcml0ZS1jaGVja2JveCcpO1xuXG4gICAgICBsZXQgY2hlY2tWYWx1ZSA9ICFmYXZvcml0ZUNoZWNrYm94LmlzKCc6Y2hlY2tlZCcpO1xuICAgICAgJCh0aGlzKS50b2dnbGVDbGFzcygnY2hlY2tlZCcsIGNoZWNrVmFsdWUpO1xuICAgICAgQXBwLmZpbHRlck1vZHVsZS5zaG93T25seUZhdm9yaXRlKGNoZWNrVmFsdWUpO1xuXG4gICAgICBpZiAoY2hlY2tWYWx1ZSkge1xuICAgICAgICBBcHAuZmlsdGVyTW9kdWxlLnNob3dPbmx5UGVuZGluZyhmYWxzZSk7XG4gICAgICAgICQoJyNwZW5kaW5nLWNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsZmFsc2UpO1xuICAgICAgICBBcHAuZmlsdGVyTW9kdWxlLnNob3dPbmx5TW9kZXJhdGlvbihmYWxzZSk7XG4gICAgICAgICQoJyNtb2RlcmF0aW9uLWNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsZmFsc2UpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBBcHAuZWxlbWVudHNNb2R1bGUudXBkYXRlRWxlbWVudHNUb0Rpc3BsYXkodHJ1ZSk7XG5cbiAgICAgIGZhdm9yaXRlQ2hlY2tib3gucHJvcCgnY2hlY2tlZCcsY2hlY2tWYWx1ZSk7XG5cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0pO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIC0tLS0tLS0tLSBQRU5ESU5HLS0tLS0tLS0tLS0tLVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAkKCcjZmlsdGVyLXBlbmRpbmcnKS5jbGljayhmdW5jdGlvbihlIDogRXZlbnQpXG4gICAgeyAgICAgIFxuICAgICAgbGV0IHBlbmRpbmdDaGVja2JveCA9ICQoJyNwZW5kaW5nLWNoZWNrYm94Jyk7XG5cbiAgICAgIGxldCBjaGVja1ZhbHVlID0gIXBlbmRpbmdDaGVja2JveC5pcygnOmNoZWNrZWQnKTtcblxuICAgICAgQXBwLmZpbHRlck1vZHVsZS5zaG93T25seVBlbmRpbmcoY2hlY2tWYWx1ZSk7XG4gICAgICBcbiAgICAgIGlmIChjaGVja1ZhbHVlKSB7XG4gICAgICAgIEFwcC5maWx0ZXJNb2R1bGUuc2hvd09ubHlGYXZvcml0ZShmYWxzZSk7XG4gICAgICAgICQoJyNmYXZvcml0ZS1jaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLGZhbHNlKTtcbiAgICAgICAgQXBwLmZpbHRlck1vZHVsZS5zaG93T25seU1vZGVyYXRpb24oZmFsc2UpO1xuICAgICAgICAkKCcjbW9kZXJhdGlvbi1jaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgQXBwLmVsZW1lbnRzTW9kdWxlLnVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5KHRydWUpO1xuXG4gICAgICBwZW5kaW5nQ2hlY2tib3gucHJvcCgnY2hlY2tlZCcsY2hlY2tWYWx1ZSk7XG5cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0pO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIC0tLS0tLS0tLSBNT0RFUkFJVE9OLS0tLS0tLS0tLS0tLVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAkKCcjZmlsdGVyLW1vZGVyYXRpb24nKS5jbGljayhmdW5jdGlvbihlIDogRXZlbnQpXG4gICAgeyAgICAgIFxuICAgICAgbGV0IG1vZGVyYXRpb25DaGVja2JveCA9ICQoJyNtb2RlcmF0aW9uLWNoZWNrYm94Jyk7XG5cbiAgICAgIGxldCBjaGVja1ZhbHVlID0gIW1vZGVyYXRpb25DaGVja2JveC5pcygnOmNoZWNrZWQnKTtcblxuICAgICAgQXBwLmZpbHRlck1vZHVsZS5zaG93T25seU1vZGVyYXRpb24oY2hlY2tWYWx1ZSk7XG4gICAgICBcbiAgICAgIGlmIChjaGVja1ZhbHVlKSB7XG4gICAgICAgIEFwcC5maWx0ZXJNb2R1bGUuc2hvd09ubHlGYXZvcml0ZShmYWxzZSk7XG4gICAgICAgICQoJyNmYXZvcml0ZS1jaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLGZhbHNlKTtcbiAgICAgICAgQXBwLmZpbHRlck1vZHVsZS5zaG93T25seVBlbmRpbmcoZmFsc2UpO1xuICAgICAgICAkKCcjcGVuZGluZy1jaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgQXBwLmVsZW1lbnRzTW9kdWxlLnVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5KHRydWUpO1xuXG4gICAgICBtb2RlcmF0aW9uQ2hlY2tib3gucHJvcCgnY2hlY2tlZCcsY2hlY2tWYWx1ZSk7XG5cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0pO1xuXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gLS0tLS0tIE1BSU4gT1BUSU9OUyAtLS0tLS0tLS0tLVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAkKCcubWFpbi1jYXRlZ29yaWVzIC5tYWluLWljb24nKS5jbGljayggZnVuY3Rpb24oZSlcbiAgICB7XG4gICAgICBsZXQgb3B0aW9uSWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtb3B0aW9uLWlkJyk7XG4gICAgICB0aGF0LnNldE1haW5PcHRpb24ob3B0aW9uSWQpO1xuICAgIH0pO1xuXG4gICAgLy8gZm9sbG93IG1haW4gYWN0aXZlIG9wdGlvbiBiYWNrZ3JvdW5kIHdoZW4gdXNlciBzY3JvbGwgdGhyb3VnaCBtYWluIG9wdGlvbnNcbiAgICAkKCcubWFpbi1jYXRlZ29yaWVzJykub24oJ3Njcm9sbCcsICgpID0+XG4gICAge1xuICAgICAgJCgnI2FjdGl2ZS1tYWluLW9wdGlvbi1iYWNrZ3JvdW5kJykuY3NzKCd0b3AnLCAkKCcjbWFpbi1vcHRpb24tZ29nby1pY29uLScgKyB0aGlzLmN1cnJlbnRBY3RpdmVNYWluT3B0aW9uSWQpLnBvc2l0aW9uKCkudG9wKTtcbiAgICB9KTtcblxuICAgIFxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIC0tLS0tLSBDQVRFR09SSUVTIC0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgJCgnLnN1YmNhdGVnb3J5LWl0ZW0gLm5hbWUtd3JhcHBlcjpub3QoLnVuY2hlY2thYmxlKScpLmNsaWNrKGZ1bmN0aW9uKClcbiAgICB7ICAgIFxuICAgICAgbGV0IGNhdGVnb3J5SWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtY2F0ZWdvcnktaWQnKTtcbiAgICAgIEFwcC50YXhvbm9teU1vZHVsZS5nZXRDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCkudG9nZ2xlQ2hpbGRyZW5EZXRhaWwoKTtcbiAgICB9KTsgIFxuXG4gICAgJCgnLnN1YmNhdGVnb3J5LWl0ZW0gLmNoZWNrYm94LXdyYXBwZXInKS5jbGljayhmdW5jdGlvbihlKVxuICAgIHsgICAgXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgbGV0IGNhdGVnb3J5SWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtY2F0ZWdvcnktaWQnKTtcbiAgICAgIEFwcC50YXhvbm9teU1vZHVsZS5nZXRDYXRlZ29yeUJ5SWQoY2F0ZWdvcnlJZCkudG9nZ2xlKCk7XG4gICAgICBcbiAgICB9KTsgICAgICBcblxuICAgIC8vIEFkZCBzdXJicmlsbGFuY2UgaW4gbWFpbi1jYXRlZ29yaWVzIHNpZGViYXIgZmlsdGVycyBtZW51IHdoZW5uIGhvdmVyaW5nIGEgbWFpbiBjYXRlZ29yeVxuICAgICQoJyNtYWluLW9wdGlvbi1hbGwuc2hvdy1vbmUtcGFuZS1wZXItbWFpbi1vcHRpb24gLmdvZ28taWNvbi1uYW1lLXdyYXBwZXInKS5ob3ZlciggXG4gICAgICBmdW5jdGlvbihlIDogRXZlbnQpIHtcbiAgICAgICAgbGV0IG9wdGlvbklkID0gJCh0aGlzKS5hdHRyKCdkYXRhLW9wdGlvbi1pZCcpO1xuICAgICAgICBsZXQgc2lkZWJhckljb24gPSAkKCcjbWFpbi1vcHRpb24tZ29nby1pY29uLScgKyBvcHRpb25JZCk7XG4gICAgICAgIGlmICghc2lkZWJhckljb24uaGFzQ2xhc3MoJ2hvdmVyJykpIHNpZGViYXJJY29uLmFkZENsYXNzKCdob3ZlcicpO1xuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uKGUgOiBFdmVudCkge1xuICAgICAgICBsZXQgb3B0aW9uSWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtb3B0aW9uLWlkJyk7XG4gICAgICAgIGxldCBzaWRlYmFySWNvbiA9ICQoJyNtYWluLW9wdGlvbi1nb2dvLWljb24tJyArIG9wdGlvbklkKTtcbiAgICAgICAgc2lkZWJhckljb24ucmVtb3ZlQ2xhc3MoJ2hvdmVyJyk7XG4gICAgICB9XG4gICAgKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gLS0tLS0tIFNVQiBPUFRJT05TIC0tLS0tLS0tLS0tLVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAkKCcuc3ViY2F0ZWdvcmllLW9wdGlvbi1pdGVtOm5vdCgjZmlsdGVyLWZhdm9yaXRlKTpub3QoI2ZpbHRlci1wZW5kaW5nKTpub3QoI2ZpbHRlci1tb2RlcmF0aW9uKSAub3B0aW9uLW5hbWUnKS5jbGljayhmdW5jdGlvbihlIDogRXZlbnQpXG4gICAge1xuICAgICAgbGV0IG9wdGlvbkRvbSA9ICQodGhpcykuY2xvc2VzdCgnLnN1YmNhdGVnb3JpZS1vcHRpb24taXRlbScpO1xuICAgICAgbGV0IG9wdGlvbklkID0gb3B0aW9uRG9tLmF0dHIoJ2RhdGEtb3B0aW9uLWlkJyk7XG4gICAgICBsZXQgb3B0aW9uID0gQXBwLnRheG9ub215TW9kdWxlLmdldE9wdGlvbkJ5SWQob3B0aW9uSWQpO1xuXG4gICAgICBpZiAob3B0aW9uLmlzTWFpbk9wdGlvbiAmJiBBcHAuY29uZmlnLm1lbnUuc2hvd09uZVBhbmVQZXJNYWluT3B0aW9uKSBBcHAuZmlsdGVyc0NvbXBvbmVudC5zZXRNYWluT3B0aW9uKG9wdGlvbi5pZCk7XG4gICAgICBlbHNlIGlmIChvcHRpb25Eb20uaGFzQ2xhc3MoJ3VuY2hlY2thYmxlJykpIHJldHVybjtcbiAgICAgIGVsc2UgaWYgKG9wdGlvbi5pc0NvbGxhcHNpYmxlKCkpIG9wdGlvbi50b2dnbGVDaGlsZHJlbkRldGFpbCgpXG4gICAgICBlbHNlIG9wdGlvbi50b2dnbGUoKTtcbiAgICB9KTtcblxuICAgICQoJy5zdWJjYXRlZ29yaWUtb3B0aW9uLWl0ZW06bm90KCNmaWx0ZXItZmF2b3JpdGUpOm5vdCgjZmlsdGVyLXBlbmRpbmcpOm5vdCgjZmlsdGVyLW1vZGVyYXRpb24pJykuZmluZCgnLmljb24sIC5jaGVja2JveC13cmFwcGVyJykuY2xpY2soZnVuY3Rpb24oZSlcbiAgICB7ICAgIFxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGxldCBvcHRpb25JZCA9ICQodGhpcykuY2xvc2VzdCgnLnN1YmNhdGVnb3JpZS1vcHRpb24taXRlbScpLmF0dHIoJ2RhdGEtb3B0aW9uLWlkJyk7XG4gICAgICBBcHAudGF4b25vbXlNb2R1bGUuZ2V0T3B0aW9uQnlJZChvcHRpb25JZCkudG9nZ2xlKCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRNYWluT3B0aW9uKG9wdGlvbklkKVxuICB7XG4gICAgaWYgKHRoaXMuY3VycmVudEFjdGl2ZU1haW5PcHRpb25JZCA9PSBvcHRpb25JZCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEFjdGl2ZU1haW5PcHRpb25JZCAhPSBudWxsKSBBcHAuZWxlbWVudHNNb2R1bGUuY2xlYXJDdXJyZW50c0VsZW1lbnQoKTtcblxuICAgIGxldCBvbGRJZCA9IHRoaXMuY3VycmVudEFjdGl2ZU1haW5PcHRpb25JZDtcbiAgICB0aGlzLmN1cnJlbnRBY3RpdmVNYWluT3B0aW9uSWQgPSBvcHRpb25JZDtcblxuICAgIGlmIChvcHRpb25JZCA9PSAnYWxsJylcbiAgICB7XG4gICAgICAkKCcjbWVudS1zdWJjYXRlZ29yaWVzLXRpdGxlJykudGV4dChcIlRvdXMgbGVzIFwiICsgQXBwLmNvbmZpZy50ZXh0LmVsZW1lbnRQbHVyYWwpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgbGV0IG1haW5PcHRpb24gPSBBcHAudGF4b25vbXlNb2R1bGUuZ2V0TWFpbk9wdGlvbkJ5SWQob3B0aW9uSWQpOyAgICAgICAgXG5cbiAgICAgICQoJyNtZW51LXN1YmNhdGVnb3JpZXMtdGl0bGUnKS50ZXh0KG1haW5PcHRpb24ubmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVNYWluT3B0aW9uQmFja2dyb3VuZCgpO1xuXG4gICAgQXBwLmluZm9CYXJDb21wb25lbnQuaGlkZSgpO1xuXG4gICAgLy9jb25zb2xlLmxvZyhcInNldE1haW5PcHRpb25JZCBcIiArIG9wdGlvbklkICsgXCIgLyBvbGRPcHRpb24gOiBcIiArIG9sZElkKTtcbiAgICBpZiAob2xkSWQgIT0gbnVsbCkgQXBwLmhpc3RvcnlNb2R1bGUudXBkYXRlQ3VyclN0YXRlKCk7XG5cbiAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XG4gICAgICBBcHAuZWxlbWVudExpc3RDb21wb25lbnQucmVJbml0aWFsaXplRWxlbWVudFRvRGlzcGxheUxlbmd0aCgpO1xuICAgIFxuICAgICAgQXBwLmJvdW5kc01vZHVsZS51cGRhdGVGaWxsZWRCb3VuZHNBY2NvcmRpbmdUb05ld01haW5PcHRpb25JZCgpO1xuICAgICAgQXBwLmVsZW1lbnRzTWFuYWdlci5jaGVja0Zvck5ld0VsZW1lbnRzVG9SZXRyaWV2ZSgpO1xuICAgICAgQXBwLmVsZW1lbnRzTW9kdWxlLnVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5KHRydWUsdHJ1ZSk7XG4gICAgfSwgNDAwKTsgICAgXG4gIH1cblxuICAvLyB0aGUgbWFpbiBvcHRpb24gc2VsZWN0ZWQgZ290IGEgc3BlY2lmaWMgYmFja2dyb3VuZCwgd2hvIGNhbiB2ZXJ0aWNhbGx5IHRyYW5zbGF0ZVxuICB1cGRhdGVNYWluT3B0aW9uQmFja2dyb3VuZCgpXG4gIHtcbiAgICBsZXQgb3B0aW9uSWQgPSB0aGlzLmN1cnJlbnRBY3RpdmVNYWluT3B0aW9uSWQ7ICAgIFxuXG4gICAgJCgnLm1haW4tb3B0aW9uLXN1YmNhdGVnb3JpZXMtY29udGFpbmVyOm5vdCgjbWFpbi1vcHRpb24tJyArIG9wdGlvbklkICsgJyknKS5oaWRlKCk7XG4gICAgJCgnI21haW4tb3B0aW9uLScgKyBvcHRpb25JZCkuZmFkZUluKDQwMCk7XG5cbiAgICAkKCcubWFpbi1jYXRlZ29yaWVzIC5tYWluLWljb24nKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgJCgnI21haW4tb3B0aW9uLWdvZ28taWNvbi0nICsgb3B0aW9uSWQpLmFkZENsYXNzKCdhY3RpdmUnKTtcblxuICAgIGlmKCEkKCcjbWFpbi1vcHRpb24tZ29nby1pY29uLScgKyBvcHRpb25JZCkucG9zaXRpb24oKSkgeyByZXR1cm47IH1cblxuICAgICQoJyNhY3RpdmUtbWFpbi1vcHRpb24tYmFja2dyb3VuZCcpLmFuaW1hdGUoe3RvcDogJCgnI21haW4tb3B0aW9uLWdvZ28taWNvbi0nICsgb3B0aW9uSWQpLnBvc2l0aW9uKCkudG9wfSwgNDAwLCAnZWFzZU91dFF1YXJ0Jyk7XG4gIH1cbn0iLCIvKipcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHb0dvQ2FydG8gcHJvamVjdC5cbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNiBTZWJhc3RpYW4gQ2FzdHJvIC0gOTBzY2FzdHJvQGdtYWlsLmNvbVxuICogQGxpY2Vuc2UgR05VIEdQTCB2M1xuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAxNi0xMi0xM1xuICovXG5cbmRlY2xhcmUgbGV0IGdyZWNhcHRjaGE7XG5kZWNsYXJlIHZhciAkIDogYW55O1xuZGVjbGFyZSBsZXQgUm91dGluZyA6IGFueTtcblxuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMsIEFwcE1vZGVzIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5cbmltcG9ydCB7IGNhcGl0YWxpemUsIHNsdWdpZnkgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcbmltcG9ydCB7IFN0YW1wQ29tcG9uZW50IH0gZnJvbSAnLi9zdGFtcC5jb21wb25lbnQnO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudE1lbnVDb21wb25lbnRcbntcblx0cHJpdmF0ZSBkb207XG5cdHByaXZhdGUgZWxlbWVudCA6IEVsZW1lbnQ7XG5cblx0Y29uc3RydWN0b3IoZG9tIDogYW55LCBlbGVtZW50IDogRWxlbWVudClcblx0e1xuXHRcdHRoaXMuZG9tID0gJChkb20pOyAgXG5cdFx0dGhpcy5lbGVtZW50ID0gZWxlbWVudDtcblx0XHR0aGlzLmluaXRpYWxpemUoKTtcblx0XHR0aGlzLnVwZGF0ZUZhdm9yaXRlSWNvbigpO1xuXHR9XG5cblx0dXBkYXRlRmF2b3JpdGVJY29uKClcblx0e1xuXHRcdHRoaXMuZG9tLmZpbmQoJy5pdGVtLWFkZC1mYXZvcml0ZScpLnRvZ2dsZSghdGhpcy5lbGVtZW50LmlzRmF2b3JpdGUpO1xuXHRcdHRoaXMuZG9tLmZpbmQoJy5pdGVtLXJlbW92ZS1mYXZvcml0ZScpLnRvZ2dsZSh0aGlzLmVsZW1lbnQuaXNGYXZvcml0ZSk7XG5cdH1cblxuXHRzaG93RnVsbFRleHRNZW51KGJvb2wgOiBib29sZWFuKVxuXHR7XG5cdFx0aWYgKGJvb2wpXG5cdFx0e1xuXHRcdFx0dGhpcy5kb20uYWRkQ2xhc3MoXCJmdWxsLXRleHRcIik7XG5cdFx0XHR0aGlzLmRvbS5maW5kKCcudG9vbHRpcHBlZCcpLnRvb2x0aXAoJ3JlbW92ZScpO1x0XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHR0aGlzLmRvbS5yZW1vdmVDbGFzcyhcImZ1bGwtdGV4dFwiKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGluaXRpYWxpemUoKVxuXHR7XG5cdFx0dGhpcy5kb20uZmluZCgnLnRvb2x0aXBwZWQnKS50b29sdGlwKCk7XHRcdFxuXHRcdGxldCB0aGF0ID0gdGhpcztcblx0XHRcblx0XHQvLyBTVEFNUFNcblx0XHR0aGlzLmRvbS5maW5kKCcuaXRlbS1zdGFtcCcpLmVhY2goKCkgPT4geyBuZXcgU3RhbXBDb21wb25lbnQodGhpcywgdGhhdC5lbGVtZW50KTsgfSk7XG5cblx0XHQvLyBERUxFVEVcblx0XHR0aGlzLmRvbS5maW5kKCcuaXRlbS1kZWxldGUnKS5jbGljaygoKSA9PiB7IEFwcC5kZWxldGVDb21wb25lbnQub3Blbih0aGlzLmVsZW1lbnQpOyB9KTtcblxuXHRcdC8vIFJFUE9SVFxuXHRcdHRoaXMuZG9tLmZpbmQoJy5pdGVtLXJlcG9ydCcpLmNsaWNrKCgpID0+IHsgQXBwLnJlcG9ydENvbXBvbmVudC5vcGVuKHRoaXMuZWxlbWVudCk7IH0pO1xuXG5cdFx0Ly8gRElSRUNUSU9OU1xuXHRcdHRoaXMuZG9tLmZpbmQoJy5pdGVtLWRpcmVjdGlvbnMnKS5jbGljaygoKSA9PlxuXHRcdHtcblx0XHRcdHRoaXMuZG9tLmZpbmQoJy5tZW51LWljb24nKS5oaWRlVG9vbHRpcCgpO1xuXG5cdFx0XHRpZiAoIUFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbigpKSBBcHAucGlja0FkZHJlc3NDb21wb25lbnQub3Blbih0aGlzLmVsZW1lbnQpO1xuXHRcdFx0ZWxzZSBBcHAuc2V0U3RhdGUoQXBwU3RhdGVzLlNob3dEaXJlY3Rpb25zLHtpZDogdGhpcy5lbGVtZW50LmlkfSk7XG5cdFx0fSk7XG5cblx0XHQvLyBTSE9XIE9OIE1BUFxuXHRcdHRoaXMuZG9tLmZpbmQoJy5pdGVtLXNob3ctb24tbWFwJykuY2xpY2soKCkgPT4gXG5cdFx0e1xuXHRcdFx0dGhpcy5kb20uZmluZCgnLm1lbnUtaWNvbicpLmhpZGVUb29sdGlwKCk7XG5cdFx0XHRBcHAuc2V0U3RhdGUoQXBwU3RhdGVzLlNob3dFbGVtZW50ICx7aWQ6IHRoaXMuZWxlbWVudC5pZH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gU0hBUkVcblx0XHR0aGlzLmRvbS5maW5kKCcuaXRlbS1zaGFyZScpLmNsaWNrKCgpID0+XG5cdFx0e1x0XHRcblx0XHRcdGxldCBtb2RhbCA9ICQoJyNtb2RhbC1zaGFyZS1lbGVtZW50Jyk7XG5cdFx0XHRtb2RhbC5maW5kKFwiLm1vZGFsLWZvb3RlclwiKS5hdHRyKCdvcHRpb24taWQnLCB0aGlzLmVsZW1lbnQuY29sb3JPcHRpb25JZCk7XG5cblx0XHRcdGxldCB1cmwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lIFxuXHRcdFx0dXJsICs9IEFwcC5yb3V0ZXJNb2R1bGUuZ2VuZXJhdGUoJ3Nob3dfZWxlbWVudCcsIHsgbmFtZSA6ICBjYXBpdGFsaXplKHNsdWdpZnkodGhpcy5lbGVtZW50Lm5hbWUpKSwgaWQgOiB0aGlzLmVsZW1lbnQuaWQgfSwgdHJ1ZSk7XHRcblxuXHRcdFx0bW9kYWwuZmluZCgnLmlucHV0LXNpbXBsZS1tb2RhbCcpLnZhbCh1cmwpO1xuXHRcdFx0bW9kYWwub3Blbk1vZGFsKCk7XG5cdFx0fSk7XHRcblx0XHRcblx0XHQvLyBGQVZPUklURVxuXHRcdHRoaXMuZG9tLmZpbmQoJy5pdGVtLWFkZC1mYXZvcml0ZScpLmNsaWNrKCgpID0+IFxuXHRcdHtcblx0XHRcdEFwcC5mYXZvcml0ZU1vZHVsZS5hZGRGYXZvcml0ZSh0aGlzLmVsZW1lbnQuaWQpO1xuXHRcdFx0dGhpcy51cGRhdGVGYXZvcml0ZUljb24oKTtcblx0XHRcdGlmIChBcHAubW9kZSA9PSBBcHBNb2Rlcy5NYXApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5tYXJrZXIudXBkYXRlKCk7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5tYXJrZXIuYW5pbWF0ZURyb3AoKTtcdFx0XHRcblx0XHRcdH1cdFx0XHRcblx0XHR9KTtcdFx0XG5cdFx0dGhpcy5kb20uZmluZCgnLml0ZW0tcmVtb3ZlLWZhdm9yaXRlJykuY2xpY2soKCkgPT4gXG5cdFx0e1x0XHRcblx0XHRcdEFwcC5mYXZvcml0ZU1vZHVsZS5yZW1vdmVGYXZvcml0ZSh0aGlzLmVsZW1lbnQuaWQpO1x0XHRcdFxuXHRcdFx0dGhpcy51cGRhdGVGYXZvcml0ZUljb24oKTtcblx0XHRcdGlmIChBcHAubW9kZSA9PSBBcHBNb2Rlcy5NYXApIHRoaXMuZWxlbWVudC5tYXJrZXIudXBkYXRlKCk7XG5cdFx0fSk7XHRcblx0fVx0XG59XG4iLCIgIGltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzLCBBcHBNb2RlcyB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50LCBFbGVtZW50U3RhdHVzLCBFbGVtZW50TW9kZXJhdGlvblN0YXRlIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0IHsgSW1hZ2VzQ29tcG9uZW50IH0gZnJvbSAnLi9pbWFnZXMuY29tcG9uZW50JztcbmltcG9ydCB7IEVsZW1lbnRNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudC1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTW9kZXJhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2VsZW1lbnQvbW9kZXJhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW50ZXJhY3RpdmVTZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9pbnRlcmFjdGl2ZS1zZWN0aW9uLmNvbXBvbmVudCc7XG5kZWNsYXJlIHZhciAkO1xuZGVjbGFyZSB2YXIgbnVuanVja3M7XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50Q29tcG9uZW50XG57XG4gIGVsZW1lbnQgOiBFbGVtZW50OyAgXG4gIGltYWdlc0NvbXBvbmVudCA6IEltYWdlc0NvbXBvbmVudDtcbiAgbWVudUNvbXBvbmVudCA6IEVsZW1lbnRNZW51Q29tcG9uZW50O1xuICBtb2RlcmF0aW9uQ29tcG9uZW50IDogTW9kZXJhdGlvbkNvbXBvbmVudDtcbiAgaW50ZXJhY3RpdmVDb21wb25lbnQgOiBJbnRlcmFjdGl2ZVNlY3Rpb25Db21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudCA6IEVsZW1lbnQpXG4gIHtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICB9XG5cbiAgLy8gdXNlIHRlbXBsYXRlIGpzIHRvIGNyZWF0ZSB0aGUgaHRtbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWxlbWVudFxuICAvLyB0aGVuIHRoaXMgaHRtbCByZXByZXNlbnRhdGlvbiBpcyBpbnNlcnRlZCBpbiB0aGUgZG9tIGJ5IGFub3RoZXIgY29tcG9uZW50IChsaWtlIGluZm8tYmFyLCBvciBsaXN0IGNvbXBvbmVudClcbiAgcmVuZGVyKCkgXG4gIHsgIFxuICAgIGlmICghdGhpcy5lbGVtZW50LmlzRnVsbHlMb2FkZWQpIHsgcmV0dXJuOyB9XG5cbiAgICB0aGlzLmVsZW1lbnQudXBkYXRlKCk7XG4gICAgdGhpcy5lbGVtZW50LnVwZGF0ZURpc3RhbmNlKCk7XG5cbiAgICBsZXQgb3B0aW9uc1RvRGlzcGxheSA9IHRoaXMuZWxlbWVudC5nZXRJY29uc1RvRGlzcGxheSgpO1xuXG4gICAgbGV0IHJvb3RDYXRlZ29yaWVzVmFsdWVzO1xuICAgIGlmICh0aGlzLmVsZW1lbnQuc3RhdHVzID09IEVsZW1lbnRTdGF0dXMuUGVuZGluZ01vZGlmaWNhdGlvbiAmJiB0aGlzLmVsZW1lbnQubW9kaWZpZWRFbGVtZW50KSAgXG4gICAgICByb290Q2F0ZWdvcmllc1ZhbHVlcyA9IHRoaXMuZWxlbWVudC5tb2RpZmllZEVsZW1lbnQuZ2V0Um9vdENhdGVnb3JpZXNWYWx1ZXMoKTtcbiAgICBlbHNlXG4gICAgICByb290Q2F0ZWdvcmllc1ZhbHVlcyA9IHRoaXMuZWxlbWVudC5nZXRSb290Q2F0ZWdvcmllc1ZhbHVlcygpO1xuICAgIFxuICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgZWxlbWVudCA6IHRoaXMuZWxlbWVudCwgXG4gICAgICBzaG93RGlzdGFuY2U6IEFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbigpID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgbGlzdGluZ01vZGU6IEFwcC5tb2RlID09IEFwcE1vZGVzLkxpc3QsIFxuICAgICAgb3B0aW9uc1RvRGlzcGxheTogb3B0aW9uc1RvRGlzcGxheSxcbiAgICAgIG1haW5PcHRpb25Ub0Rpc3BsYXk6IG9wdGlvbnNUb0Rpc3BsYXlbMF0sIFxuICAgICAgb3RoZXJPcHRpb25zVG9EaXNwbGF5OiBvcHRpb25zVG9EaXNwbGF5LnNsaWNlKDEpLCAgXG4gICAgICBjdXJyT3B0aW9uc1ZhbHVlczogdGhpcy5lbGVtZW50LmdldEN1cnJEZWVwZXN0T3B0aW9uc1ZhbHVlcygpLmZpbHRlciggKG9WKSA9PiBvVi5vcHRpb24uZGlzcGxheUluSW5mb0Jhcikuc29ydCggKGEsYikgPT4gYS5pc0ZpbGxlZEJ5RmlsdGVycyA/IC0xIDogMSksICAgICAgXG4gICAgICByb290Q2F0ZWdvcmllc1ZhbHVlcyA6IHJvb3RDYXRlZ29yaWVzVmFsdWVzLFxuICAgICAgZWRpdFVybCA6IEFwcC5jb25maWcuZmVhdHVyZXMuZWRpdC51cmwgKyB0aGlzLmVsZW1lbnQuaWQsXG4gICAgICBFbGVtZW50U3RhdHVzOiBFbGVtZW50U3RhdHVzLFxuICAgICAgRWxlbWVudE1vZGVyYXRpb25TdGF0ZTogRWxlbWVudE1vZGVyYXRpb25TdGF0ZSxcbiAgICAgIGlzSWZyYW1lIDogQXBwLmlzSWZyYW1lLFxuICAgICAgaXNNYXBNb2RlIDogQXBwLm1vZGUgPT0gQXBwTW9kZXMuTWFwLFxuICAgICAgY29uZmlnIDogQXBwLmNvbmZpZyxcbiAgICAgIHNtYWxsV2lkdGggOiBBcHAubW9kZSA9PSBBcHBNb2Rlcy5NYXAgJiYgQXBwLmluZm9CYXJDb21wb25lbnQuaXNEaXNwbGF5ZWRBc2lkZSgpLFxuICAgICAgYWxsb3dlZFN0YW1wcyA6IEFwcC5zdGFtcE1vZHVsZS5hbGxvd2VkU3RhbXBzLFxuICAgICAgYm9keSA6IHVuZGVmaW5lZFxuICAgIH07XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIGJvZHkgdGVtcGxhdGUgY29uZmlndXJlZCwgdGhlbiB3ZSB1c2UgaXQuIFdlIHVzZSB0aGUgZGVmYXVsdCBib2R5IG90aGVyd2lzZS5cbiAgICBpZiAoQXBwLmNvbmZpZy5pbmZvYmFyLmJvZHlUZW1wbGF0ZSkgXG4gICAge1xuICAgICAgb3B0aW9ucy5ib2R5ID0gbnVuanVja3MucmVuZGVyU3RyaW5nKEFwcC5jb25maWcuaW5mb2Jhci5ib2R5VGVtcGxhdGUsIHRoaXMuZWxlbWVudCk7XG4gICAgICBvcHRpb25zLmJvZHkgPSBvcHRpb25zLmJvZHkucmVwbGFjZSgvJmFtcDsvZywgXCImXCIpLnJlcGxhY2UoLyZndDsvZywgXCI+XCIpLnJlcGxhY2UoLyZsdDsvZywgXCI8XCIpLnJlcGxhY2UoLyZxdW90Oy9nLCAnXCInKTtcbiAgICB9XG4gICAgZWxzZSBvcHRpb25zLmJvZHkgPSBudW5qdWNrcy5yZW5kZXIoJ2NvbXBvbmVudHMvZWxlbWVudC9ib2R5Lmh0bWwubmprJywgb3B0aW9ucyk7XG5cbiAgICBsZXQgaHRtbCA9IEFwcC50ZW1wbGF0ZU1vZHVsZS5yZW5kZXIoJ2VsZW1lbnQnLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBodG1sO1xuICB9O1xuXG4gIGdldCBkb20oKSB7IHJldHVybiBBcHAubW9kZSA9PSBBcHBNb2Rlcy5MaXN0ID8gJChgI2RpcmVjdG9yeS1jb250ZW50LWxpc3QgI2VsZW1lbnQtaW5mby0ke3RoaXMuZWxlbWVudC5pZH1gKSA6ICQoYCNlbGVtZW50LWluZm8tJHt0aGlzLmVsZW1lbnQuaWR9YCk7IH1cblxuICAvLyBvbmNlIHRoZSBodG1sIHJlbmRlcmVkIGlzIGluc2VydGVkIGluIHRoZSBkb20sIHdlIG5lZWQgdG8gY2FsbCB0aGlzIG1ldGhvZCB0byBpbml0aWFsaXogdmFyaW91cyBpbnRlcmFjdGlvbnMgYW5kIHN1YmNvbXBvbmVudHNcbiAgaW5pdGlhbGl6ZSgpXG4gIHtcbiAgICB0aGlzLmltYWdlc0NvbXBvbmVudCA9IG5ldyBJbWFnZXNDb21wb25lbnQodGhpcy5kb20sIHRoaXMuZWxlbWVudCk7ICAgIFxuICAgIHRoaXMubWVudUNvbXBvbmVudCA9IG5ldyBFbGVtZW50TWVudUNvbXBvbmVudCh0aGlzLmRvbS5maW5kKCcubWVudS1lbGVtZW50JyksIHRoaXMuZWxlbWVudCk7XG4gICAgdGhpcy5tb2RlcmF0aW9uQ29tcG9uZW50ID0gbmV3IE1vZGVyYXRpb25Db21wb25lbnQodGhpcy5kb20uZmluZCgnLmludGVyYWN0aXZlLXNlY3Rpb24nKSwgdGhpcy5lbGVtZW50KTtcbiAgICB0aGlzLmludGVyYWN0aXZlQ29tcG9uZW50ID0gbmV3IEludGVyYWN0aXZlU2VjdGlvbkNvbXBvbmVudCh0aGlzLmRvbS5maW5kKCcuaW50ZXJhY3RpdmUtc2VjdGlvbicpLCB0aGlzLmVsZW1lbnQpO1xuXG4gICAgdGhpcy5kb20uZmluZCgnLnNlbmQtbWFpbC1idG4nKS5jbGljayggKCkgPT4gQXBwLnNlbmRFbWFpbENvbXBvbmVudC5vcGVuKHRoaXMuZWxlbWVudCkpO1xuXG4gICAgLy8gU0hPVyBMT05HIERFU0NSSVBUSU9OIEJVVFRPTlxuICAgIHRoaXMuZG9tLmZpbmQoJy5zaG93LW1vcmUtZGVzY3JpcHRpb24nKS5jbGljayggZnVuY3Rpb24oKSBcbiAgICB7IFxuICAgICAgbGV0IGRlc2NyaXB0aW9uTW9yZSA9ICQodGhpcykuc2libGluZ3MoJy5kZXNjcmlwdGlvbi1tb3JlJyk7XG4gICAgICBsZXQgdGV4dEJ1dHRvbiA9IGRlc2NyaXB0aW9uTW9yZS5pcyhcIjp2aXNpYmxlXCIpID8gXCJBZmZpY2hlciBwbHVzXCIgOiBcIkFmZmljaGVyIG1vaW5zXCI7XG4gICAgICBkZXNjcmlwdGlvbk1vcmUudG9nZ2xlKCk7ICAgIFxuICAgICAgJCh0aGlzKS50ZXh0KHRleHRCdXR0b24pO1xuICAgIH0pO1xuXG4gICAgLy8gSU5JVCBUQUJTIChmb3IgYWRtaW4gc2VjdGlvbilcbiAgICBzZXRUaW1lb3V0KCAoKSA9PiB7IHRoaXMuZG9tLmZpbmQoJy5pbmZvLWJhci10YWJzJykudGFicygpOyB9LCAxMDApO1xuICB9XG5cbiAgYWRkRmxhc2hNZXNzYWdlKG1lc3NhZ2UpIHsgdGhpcy5pbnRlcmFjdGl2ZUNvbXBvbmVudC5hZGRGbGFzaE1lc3NhZ2UobWVzc2FnZSk7IH1cbn0iLCJkZWNsYXJlIHZhciAkIDogYW55O1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgRWxlbWVudCwgRXZlbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cbmV4cG9ydCBjbGFzcyBJbWFnZXNDb21wb25lbnRcbntcbiAgcHJpdmF0ZSBkb207XG4gIHByaXZhdGUgZWxlbWVudCA6IEVsZW1lbnQ7XG5cbiAgaW5kZXhDdXJyZW50SW1hZ2UgOiBudW1iZXIgPSAwO1xuICBkb21JbWFnZXMgOiBhbnk7XG4gIG9uTmV3SW1hZ2VEaXNwbGF5ZWQgPSBuZXcgRXZlbnQ8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKGRvbSA6IGFueSwgZWxlbWVudCA6IEVsZW1lbnQpXG4gIHtcbiAgICB0aGlzLmRvbSA9ICQoZG9tKTsgIFxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50SW1hZ2UoKSB7IHJldHVybiB0aGlzLmRvbUltYWdlcyA/IHRoaXMuZG9tSW1hZ2VzLmVxKHRoaXMuaW5kZXhDdXJyZW50SW1hZ2UpIDogbnVsbDsgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSgpXG4gIHtcbiAgICBpZiAodGhpcy5lbGVtZW50LmltYWdlcy5sZW5ndGggPiAwKSB0aGlzLmluaXRJbWFnZXMoKTtcbiAgICBpZiAodGhpcy5lbGVtZW50LmltYWdlcy5sZW5ndGggPiAxKSB0aGlzLmluaXROYXZpZ2F0aW9uQnV0dG9ucygpO1xuICB9ICBcblxuICBwcml2YXRlIGluaXRJbWFnZXMoKVxuICB7XG4gICAgdGhpcy5kb21JbWFnZXMgPSB0aGlzLmRvbS5maW5kKCcuaW1nLWNvbnRhaW5lciBpbWcnKTsgIFxuICAgIC8vIGZpcnN0IHVwZGF0ZSB0byBkaXNwbGF5IGZpcnN0IGltYWdlXG4gICAgdGhpcy51cGRhdGVJbWFnZSgpO1xuXG4gICAgLy8gRGlzcGxheSBiaWdnZXIgaW1hZ2UgaW4gYSBtb2RhbCBvbiBjbGlja1xuICAgIHRoaXMuZG9tLmZpbmQoJy5pbWctY2xpY2thYmxlLWFyZWEnKS5jbGljaygoKSA9PlxuICAgIHtcbiAgICAgIC8vIGRvbid0IGRpc3BsYXkgbW9kYWwgaW4gc21hbGwgc2NyZWVuXG4gICAgICBpZiAoQXBwLmNvbXBvbmVudC53aWR0aCgpIDwgODAwKSByZXR1cm47XG4gICAgICBcbiAgICAgIC8vIFdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBpbWFnZSwgb3BlbnMgYSBuZXcgbW9kYWwgd2l0aCB0aGUgaW1hZ2VcbiAgICAgIGxldCBtb2RhbCA9ICQoJyNtb2RhbC1pbWFnZScpO1xuICAgICAgbW9kYWwuZmluZChcIi5tb2RhbC1mb290ZXJcIikuYXR0cignb3B0aW9uLWlkJywgdGhpcy5lbGVtZW50LmNvbG9yT3B0aW9uSWQpO1xuICAgICAgbW9kYWwuZmluZCgnaW1nJykuYXR0cignc3JjJywgdGhpcy5jdXJyZW50SW1hZ2VbMF0uc3JjKTtcbiAgICAgIG1vZGFsLm9wZW5Nb2RhbCgpO1xuICAgIH0pOyAgIFxuICB9XG5cbiAgcHJpdmF0ZSBpbml0TmF2aWdhdGlvbkJ1dHRvbnMoKVxuICB7XG4gICAgbGV0IG5hdkJ0bnMgPSB0aGlzLmRvbS5maW5kKCcuaW1nLW5hdmlnYXRpb24tYnRuLm5leHQsIC5pbWctbmF2aWdhdGlvbi1idG4ucHJldicpO1xuICAgIG5hdkJ0bnMuY3NzKCdvcGFjaXR5JywgMCkuc2hvdygpLmFuaW1hdGUoe29wYWNpdHk6IDF9LCAzMDApO1xuXG4gICAgLy8gbmF2aWdhdGlvbiB0aHJvdWdodCBpbWFnZXNcbiAgICB0aGlzLmRvbS5maW5kKCcuaW1nLW5hdmlnYXRpb24tYnRuLm5leHQnKS5jbGljaygoKSA9PiB7XG4gICAgICB0aGlzLmluZGV4Q3VycmVudEltYWdlKys7XG4gICAgICB0aGlzLnVwZGF0ZUltYWdlKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRvbS5maW5kKCcuaW1nLW5hdmlnYXRpb24tYnRuLnByZXYnKS5jbGljaygoKSA9PiB7XG4gICAgICB0aGlzLmluZGV4Q3VycmVudEltYWdlLS07XG4gICAgICB0aGlzLnVwZGF0ZUltYWdlKCk7XG4gICAgfSk7ICAgICAgIFxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbWFnZSgpXG4gIHsgICAgICAgICAgXG4gICAgLy8gbW9kdWxvIGluZGV4IGluc2lkZSBwcm9wZXIgcmFuZ2VcbiAgICB0aGlzLmluZGV4Q3VycmVudEltYWdlID0gKHRoaXMuaW5kZXhDdXJyZW50SW1hZ2UgKyB0aGlzLmVsZW1lbnQuaW1hZ2VzLmxlbmd0aCkgJSB0aGlzLmVsZW1lbnQuaW1hZ2VzLmxlbmd0aDtcbiAgICAvLyBIaWRlIGFsbCBpbWFnZXNcbiAgICB0aGlzLmRvbUltYWdlcy5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgIC8vIERpc3BsYXkgdGhlIGltYWdlIG9mIHRoZSBnaXZlbiBpbmRleFxuICAgIHRoaXMuY3VycmVudEltYWdlLmNzcygnZGlzcGxheScsICdibG9jaycpOyAgICAgICAgXG5cbiAgICAvLyB0cmlnZ2VyIGV2ZW50IHRvIHdhcm4gb3RoZXIgY29tcG9uZW50cyB0aGF0IGltYWdlIGFzIGNoYW5nZWRcbiAgICBpZiAodGhpcy5jdXJyZW50SW1hZ2UuaGVpZ2h0KCkpIHRoaXMub25JbWFnZURpc3BsYXllZCgpOyAgICBcbiAgICBlbHNlIHRoaXMuY3VycmVudEltYWdlLmxvYWQoKCkgPT4geyB0aGlzLm9uSW1hZ2VEaXNwbGF5ZWQoKTsgfSk7ICAgICAgXG4gIH07XG5cbiAgcHJpdmF0ZSBvbkltYWdlRGlzcGxheWVkKClcbiAge1xuICAgIHRoaXMub25OZXdJbWFnZURpc3BsYXllZC5lbWl0KHRoaXMuY3VycmVudEltYWdlKTtcbiAgICB0aGlzLnZlcnRpY2FsQWxpZ25DdXJyZW50SW1hZ2UoKTtcbiAgfVxuXG4gIHZlcnRpY2FsQWxpZ25DdXJyZW50SW1hZ2UoKVxuICB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRJbWFnZSkgcmV0dXJuO1xuXG4gICAgbGV0IGltZ0Jhbm5lckhlaWdodCA9IHRoaXMuZG9tLmZpbmQoJy5pbWctb3ZlcmxheScpLmhlaWdodCgpO1xuICAgIC8vIGlmIGNvbXBvbmVudCBub3QgeWV0IGxvYWRlZCwgdGltZW91dCB0aGUgdXBkYXRlXG4gICAgaWYgKGltZ0Jhbm5lckhlaWdodCA9PSAwKSB7XG4gICAgICBzZXRUaW1lb3V0KCAoKSA9PiB0aGlzLnZlcnRpY2FsQWxpZ25DdXJyZW50SW1hZ2UoKSwgMTAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50SW1hZ2UuY3NzKCdtYXJnaW4tdG9wJywgMCk7XG4gICAgbGV0IG1hcmdpblRvcCA9IChpbWdCYW5uZXJIZWlnaHQgLSB0aGlzLmN1cnJlbnRJbWFnZS5oZWlnaHQoKSkgLyAyO1xuICAgIGlmIChtYXJnaW5Ub3AgPiAwKSBtYXJnaW5Ub3AgPSAwO1xuICAgIHRoaXMuY3VycmVudEltYWdlLmFuaW1hdGUoe21hcmdpblRvcDogYCR7bWFyZ2luVG9wfXB4YH0sIDQwMCk7XG4gIH1cbn0iLCJkZWNsYXJlIHZhciAkIDogYW55O1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgRWxlbWVudCwgRWxlbWVudFN0YXR1cyB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcblxuZXhwb3J0IGNsYXNzIEludGVyYWN0aXZlU2VjdGlvbkNvbXBvbmVudFxue1xuICBwcml2YXRlIGRvbTtcbiAgcHJpdmF0ZSBlbGVtZW50IDogRWxlbWVudDtcblxuICBjb25zdHJ1Y3Rvcihkb20gOiBhbnksIGVsZW1lbnQgOiBFbGVtZW50KVxuICB7XG4gICAgdGhpcy5kb20gPSAkKGRvbSk7IFxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7ICBcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGFkZEZsYXNoTWVzc2FnZShtZXNzYWdlKVxuICB7XG4gICAgdGhpcy5kb20uZmluZChcIi5tb2RlcmF0aW9uLXNlY3Rpb25cIikuZmluZCgnLmJhc2ljLW1lc3NhZ2UnKS5oaWRlKCk7IFxuICAgIHRoaXMuZG9tLmZpbmQoJy5yZXN1bHQtbWVzc2FnZScpLmh0bWwobWVzc2FnZSkuc2hvdygpO1xuICAgIEFwcC5pbmZvQmFyQ29tcG9uZW50LnNob3coKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSgpXG4gIHtcbiAgICAvLyBvcGVuIGEgbW9kYWwgY29udGFpbmluZyBkZXNjcmlwdGlvbiBvZiB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzXG4gICAgdGhpcy5kb20uZmluZCgnLnZhbGlkYXRpb24tcHJvY2Vzcy1pbmZvJykuY2xpY2soIChlKSA9PiBcbiAgICB7XG4gICAgICAkKFwiI21vZGFsLWNvbnRyaWJ1dGlvblwiKS5vcGVuTW9kYWwoKTsgIFxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO2UucHJldmVudERlZmF1bHQoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZG9tLmZpbmQoXCIudm90ZS1idXR0b25cIikuY2xpY2soIChlKSA9PlxuICAgIHtcbiAgICAgIC8vIHJlc3RyaWN0IHZvdGUgdG8gc3BlY2lmaWMgcm9sZXNcbiAgICAgIGlmICghQXBwLmNvbmZpZy5pc0ZlYXR1cmVBdmFpbGFibGUoJ3ZvdGUnKSkgXG4gICAgICB7XG4gICAgICAgIEFwcC5sb2dpbk1vZHVsZS5sb2dpbkFjdGlvbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIEFwcC52b3RlQ29tcG9uZW50Lm9wZW4odGhpcy5lbGVtZW50KTsgICAgICAgXG4gICAgICB9ICAgICAgXG5cbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7IGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7IGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9KTsgICBcbiAgfVxufVxuXG4iLCJkZWNsYXJlIHZhciAkIDogYW55O1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcblxuZXhwb3J0IGNsYXNzIE1vZGVyYXRpb25Db21wb25lbnRcbntcbiAgcHJpdmF0ZSBkb207XG4gIHByaXZhdGUgZWxlbWVudCA6IEVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoZG9tIDogYW55LCBlbGVtZW50IDogRWxlbWVudClcbiAge1xuICAgIHRoaXMuZG9tID0gJChkb20pOyBcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OyAgXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemUoKVxuICB7XG4gICAgLy8gdm90ZS1idXR0b24gaXMgbG9jYXRlZCBvbiB0aGUgZWxlbWVudC1pbmZvLWJhciBvZiBhIHBlbmRpbmcgZWxlbWVudFxuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICB0aGlzLmRvbS5maW5kKFwiLm1hcmstYXMtbW9kZXJhdGVkLWJ0blwiKS5jbGljayggZnVuY3Rpb24oZSlcbiAgICB7XG4gICAgICAvLyByZXN0cmljdCB2b3RlIHRvIHNwZWNpZmljIHJvbGVzXG4gICAgICBpZiAoIUFwcC5jb25maWcuaXNGZWF0dXJlQXZhaWxhYmxlKCdtb2RlcmF0aW9uJykpIFxuICAgICAge1xuICAgICAgICBBcHAubG9naW5Nb2R1bGUubG9naW5BY3Rpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBsZXQgY29tbWVudCA9ICQodGhpcykuc2libGluZ3MoJy5tb2RlcmF0aW9uLWlucHV0LWNvbW1lbnQnKS52YWwoKTsgICAgICAgXG4gICAgICAgIGxldCByb3V0ZSA9IEFwcC5jb25maWcuZmVhdHVyZXMubW9kZXJhdGlvbi51cmw7XG4gICAgICAgIGxldCBkYXRhID0geyBlbGVtZW50SWQ6IHRoYXQuZWxlbWVudC5pZCwgY29tbWVudDogY29tbWVudCB9O1xuICAgICAgICBcbiAgICAgICAgQXBwLmFqYXhNb2R1bGUuc2VuZFJlcXVlc3Qocm91dGUsICdwb3N0JywgZGF0YSwgKHJlc3BvbnNlKSA9PlxuICAgICAgICB7ICAgICAgICBcbiAgICAgICAgICBsZXQgcmVzcG9uc2VNZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7XG4gICAgICAgICAgXG4gICAgICAgICAgdGhhdC5lbGVtZW50LnVwZGF0ZSh0cnVlKTtcbiAgICAgICAgICB0aGF0LmVsZW1lbnQuaXNGdWxseUxvYWRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgLy8gcmVsb2FkIEVsZW1lbnQsIGFuZCBhZGQgZmxhc2ggbWVzc2FnZVxuICAgICAgICAgIEFwcC5pbmZvQmFyQ29tcG9uZW50LnNob3dFbGVtZW50KHRoYXQuZWxlbWVudC5pZCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhhdC5lbGVtZW50LmNvbXBvbmVudC5hZGRGbGFzaE1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgICB0aGF0LmVsZW1lbnQuY29tcG9uZW50LmFkZEZsYXNoTWVzc2FnZShyZXNwb25zZU1lc3NhZ2UpOyAgICAgICAgXG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvck1lc3NhZ2UpID0+IFxuICAgICAgICB7XG4gICAgICAgICAgdGhhdC5lbGVtZW50LmNvbXBvbmVudC5hZGRGbGFzaE1lc3NhZ2UoZXJyb3JNZXNzYWdlKTsgIFxuICAgICAgICB9KTsgIFxuICAgICAgfSAgICAgIFxuXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0pO1xuICB9XG59XG5cbiIsImRlY2xhcmUgdmFyICQgOiBhbnk7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuXG5leHBvcnQgY2xhc3MgU3RhbXBDb21wb25lbnRcbntcbiAgcHJpdmF0ZSBkb207XG4gIHByaXZhdGUgZWxlbWVudCA6IEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSBzdGFtcElkO1xuICBwcml2YXRlIHZhbHVlIDogYm9vbGVhbiA9IGZhbHNlOyAvLyB3aGV0aGVyIHRoZSBzdGFtcCBpcyBhY3RpdmF0ZWQgZm9yIHRoaXMgZWxlbWVudCBvciBub3QgIFxuXG4gIGNvbnN0cnVjdG9yKGRvbSA6IGFueSwgZWxlbWVudCA6IEVsZW1lbnQpXG4gIHtcbiAgICB0aGlzLmRvbSA9ICQoZG9tKTtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuc3RhbXBJZCA9ICAgdGhpcy5kb20uZGF0YSgnc3RhbXAtaWQnKTtcbiAgICB0aGlzLnNldFZhbHVlKHRoaXMuZWxlbWVudC5zdGFtcHMuaW5kZXhPZih0aGlzLnN0YW1wSWQpID4gLTEsIGZhbHNlKTtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSgpXG4gIHtcbiAgICB0aGlzLmRvbS5jbGljaygoKSA9PiB0aGlzLmhhbmRsZUNsaWNrKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbGljaygpXG4gIHtcbiAgICBsZXQgcm91dGUgPSBBcHAuY29uZmlnLmZlYXR1cmVzLnN0YW1wLnVybDtcbiAgICBsZXQgZGF0YSA9IHsgZWxlbWVudElkOiB0aGlzLmVsZW1lbnQuaWQsIHN0YW1wSWQ6IHRoaXMuc3RhbXBJZCwgdmFsdWU6ICF0aGlzLnZhbHVlIH07XG5cbiAgICBBcHAuYWpheE1vZHVsZS5zZW5kUmVxdWVzdChyb3V0ZSwgJ3Bvc3QnLCBkYXRhLCAocmVzcG9uc2UpID0+XG4gICAgeyBcbiAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB0aGlzLmVsZW1lbnQuc3RhbXBzID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB0aGlzLnNldFZhbHVlKCF0aGlzLnZhbHVlKTsgICAgICBcbiAgICB9KTsgICAgIFxuICB9XG5cbiAgc2V0VmFsdWUodmFsdWUgOiBib29sZWFuLCAkYW5pbWF0ZSA9IHRydWUpXG4gIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5lbGVtZW50LnVwZGF0ZSh0cnVlKTtcbiAgICB0aGlzLmRvbS50b2dnbGVDbGFzcyhcImZpbGxlZFwiLCB2YWx1ZSk7IFxuICAgIGlmICgkYW5pbWF0ZSAmJiB0aGlzLnZhbHVlKSB0aGlzLmVsZW1lbnQubWFya2VyLmFuaW1hdGVEcm9wKCk7ICBcbiAgfVxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cbmRlY2xhcmUgbGV0ICQsIGpRdWVyeSA6IGFueTtcblxuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBNb2RlcyB9IGZyb20gXCIuLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vZ29nb2NhcnRvXCI7XG5cbmV4cG9ydCBjbGFzcyBHb0dvQ29udHJvbENvbXBvbmVudFxueyAgICBcbiAgaW5pdGlhbGl6ZSgpXG4gIHtcbiAgICAkKCcuc2hvdy1kaXJlY3RvcnktbWVudS1idXR0b24sICNtb2JpbGUtZmlsdGVycy1pY29uJykuY2xpY2soKGUpID0+IHsgQXBwLmRpcmVjdG9yeU1lbnVDb21wb25lbnQuc2hvdygpOyBlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9KTtcbiAgICAkKCcjZGlyZWN0b3J5LW1lbnUgLmJ0bi1jbG9zZS1tZW51JykuY2xpY2soKCkgPT4gQXBwLmRpcmVjdG9yeU1lbnVDb21wb25lbnQuaGlkZSgpKTtcblxuICAgICQoJy5zaG93LWFzLWxpc3QtYnV0dG9uJykuY2xpY2soKGUgOiBFdmVudCkgPT4geyAgXG4gICAgICBBcHAubWFwTWFuYWdlci5zZXRUaW1lb3V0Q2xpY2tpbmcoKTtcbiAgICAgIEFwcC5zZXRNb2RlKEFwcE1vZGVzLkxpc3QpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgICQoJyNtb2JpbGUtc2VhcmNoLWljb24nKS5jbGljaygoZSkgPT4geyBcbiAgICAgIEFwcC5zZWFyY2hCYXJDb21wb25lbnQuc2hvd01vYmlsZVNlYXJjaEJhcigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgICQoJy5zaG93LWFzLW1hcC1idXR0b24nKS5jbGljaygoKSA9PiB7ICAgIFxuICAgICAgQXBwLnNldE1vZGUoQXBwTW9kZXMuTWFwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZVBvc2l0aW9uKClcbiAge1xuICAgIGlmICghQXBwLm1vZGUpIHJldHVybjtcblxuICAgIGlmIChBcHAubW9kZSA9PSBBcHBNb2Rlcy5NYXApXG4gICAge1xuICAgICAgbGV0IHRvcCA9IDE1ICsgJCgnLnNlYXJjaC1yZXN1bHRzOnZpc2libGUnKS5oZWlnaHQoKTtcbiAgICAgICQoJyNnb2dvLWNvbnRyb2xzLW1vYmlsZScpLnZlbG9jaXR5KHt0b3A6IHRvcCwgcmlnaHQ6IDB9LCB7ZHVyYXRpb246IDI1MCwgcXVldWU6IGZhbHNlLCBlYXNpbmc6ICdlYXNlT3V0UXVhZCd9KTsgXG4gICAgICAkKCcjZ29nby1jb250cm9scy1tb2JpbGUnKS5hZGRDbGFzcygnbWFwJykucmVtb3ZlQ2xhc3MoJ2xpc3QnKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGxldCB0b3AgPSAkKCcjZGlyZWN0b3J5LWNvbnRlbnQnKS5oZWlnaHQoKSAtICQoJyNnb2dvLWNvbnRyb2xzLW1vYmlsZScpLmhlaWdodCgpIC0gNTtcbiAgICAgICQoJyNnb2dvLWNvbnRyb2xzLW1vYmlsZScpLnZlbG9jaXR5KHt0b3A6IHRvcCwgcmlnaHQ6IDE1fSwge2R1cmF0aW9uOiAyNTAsIHF1ZXVlOiBmYWxzZSwgZWFzaW5nOiAnZWFzZU91dFF1YWQnfSk7IFxuICAgICAgJCgnI2dvZ28tY29udHJvbHMtbW9iaWxlJykuYWRkQ2xhc3MoJ2xpc3QnKS5yZW1vdmVDbGFzcygnbWFwJyk7XG4gICAgfVxuICB9IFxuXG4gIGhpZGUoZGVsYXkgOiBudW1iZXIgPSAyNTApIHsgJCgnI2dvZ28tY29udHJvbHMtbW9iaWxlJykuZmFkZU91dChkZWxheSk7IH1cblxuICBzaG93KGRlbGF5IDogbnVtYmVyID0gNDAwKSB7ICQoJyNnb2dvLWNvbnRyb2xzLW1vYmlsZScpLmZhZGVJbihkZWxheSk7IH0gIFxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cbmltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzLCBBcHBEYXRhVHlwZSB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgeyBFbGVtZW50c1RvRGlzcGxheUNoYW5nZWQgfSBmcm9tIFwiLi4vLi4vbW9kdWxlcy9lbGVtZW50cy9lbGVtZW50cy5tb2R1bGVcIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5pbXBvcnQgeyBFdmVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2V2ZW50LmNsYXNzXCI7XG5cbmRlY2xhcmUgdmFyICQ7XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50TGlzdENvbXBvbmVudFxue1xuXHRlbGVtZW50VG9EaXNwbGF5Q291bnQgOiBudW1iZXIgPSAwOyBcblxuXHQvLyBOdW1iZXIgb2YgZWxlbWVudCBpbiBvbmUgbGlzdFxuXHRFTEVNRU5UX0xJU1RfU0laRV9TVEVQIDogbnVtYmVyID0gMTU7XG5cdC8vIEJhc2ljbHkgd2UgZGlzcGxheSAxIEVMRU1FTlRfTElTVF9TSVpFX1NURVAsIGJ1dCBpZiB1c2VyIG5lZWRcblx0Ly8gZm9yLCB3ZSBkaXNwbGF5IGFuIG90aGVycyBFTEVNRU5UX0xJU1RfU0laRV9TVEVQIG1vcmVcblx0c3RlcHNDb3VudCA6IG51bWJlciA9IDE7XG5cdGlzTGlzdEZ1bGwgOiBib29sZWFuID0gZmFsc2U7XG5cblx0Ly8gbGFzdCByZXF1ZXN0IHdhcyBzZW5kIHdpdGggdGhpcyBkaXN0YW5jZVxuXHRsYXN0RGlzdGFuY2VSZXF1ZXN0ID0gMTA7XG5cblx0aXNJbml0aWFsaXplZCA6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3RvcigpIHt9XG5cblx0aW5pdGlhbGl6ZSgpXG5cdHtcblx0XHQvLyBkZXRlY3Qgd2hlbiB1c2VyIHJlYWNoIGJvdHRvbSBvZiBsaXN0XG5cdFx0dmFyIHRoYXQgPSB0aGlzO1xuXHRcdCQoJyNkaXJlY3RvcnktY29udGVudC1saXN0IC5lbGVtZW50cy1jb250YWluZXInKS5vbignc2Nyb2xsJywgZnVuY3Rpb24oZSkgXG5cdFx0e1xuXHRcdFx0aWYoJCh0aGlzKS5zY3JvbGxUb3AoKSA+IDApXG5cdFx0XHRcdCQoXCIjbGlzdC10aXRsZS1zaGFkb3ctYm90dG9tXCIpLnNob3coKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0JChcIiNsaXN0LXRpdGxlLXNoYWRvdy1ib3R0b21cIikuaGlkZSgpO1xuXG5cdFx0XHRpZigkKHRoaXMpLnNjcm9sbFRvcCgpICsgJCh0aGlzKS5pbm5lckhlaWdodCgpID49ICQodGhpcylbMF0uc2Nyb2xsSGVpZ2h0KSB7ICAgICAgICAgICAgXG5cdFx0ICAgIFx0dGhhdC5oYW5kbGVCb3R0b20oKTtcblx0XHQgIH1cblx0XHR9KTtcblx0fVxuXG5cdHVwZGF0ZSgkZWxlbWVudHNUb0Rpc3BsYXkgOiBFbGVtZW50W10pIFxuXHR7XG5cdFx0Ly9jb25zb2xlLmxvZyhcImVsZW1lbnRMaXN0IHVwZGF0ZVwiLCAkZWxlbWVudHNSZXN1bHQpO1xuXHRcdGlmICgkZWxlbWVudHNUb0Rpc3BsYXkubGVuZ3RoID09IDApIHRoaXMuc3RlcHNDb3VudCA9IDE7XG5cblx0XHR0aGlzLmhpZGVTcGlubmVyTG9hZGVyKCk7XG5cdFx0dGhpcy5jbGVhcigpO1x0XHRcblxuXHRcdHRoaXMuZHJhdygkZWxlbWVudHNUb0Rpc3BsYXksIGZhbHNlKTtcblx0fVxuXG5cdHNldFRpdGxlKCR2YWx1ZSA6IHN0cmluZykgeyAkKCcuZWxlbWVudC1saXN0LXRpdGxlLXRleHQnKS5odG1sKCR2YWx1ZSk7IH1cblxuXHRzaG93KCkgeyAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbGlzdCcpLnNob3coKTsgfVxuXHRcblx0aGlkZSgpIHsgJCgnI2RpcmVjdG9yeS1jb250ZW50LWxpc3QnKS5oaWRlKCk7IH1cblxuXHRzaG93U3Bpbm5lckxvYWRlcigpIHsgJCgnI2RpcmVjdG9yeS1saXN0LXNwaW5uZXItbG9hZGVyJykuc2hvdygpOyB9XG5cblx0aGlkZVNwaW5uZXJMb2FkZXIoKSB7ICQoJyNkaXJlY3RvcnktbGlzdC1zcGlubmVyLWxvYWRlcicpLmhpZGUoKTsgfVxuXG5cdGNsZWFyKCkgeyAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbGlzdCBsaScpLnJlbW92ZSgpOyB9XG5cblx0cmVJbml0aWFsaXplRWxlbWVudFRvRGlzcGxheUxlbmd0aCgpXG5cdHtcblx0XHR0aGlzLmNsZWFyKCk7XG5cdFx0JCgnI2RpcmVjdG9yeS1jb250ZW50LWxpc3QgLmVsZW1lbnRzLWNvbnRhaW5lcicpLmFuaW1hdGUoe3Njcm9sbFRvcDogJzAnfSwgMCk7XG5cdFx0dGhpcy5zdGVwc0NvdW50ID0gMTtcblx0fVxuXG5cdHByaXZhdGUgZHJhdygkZWxlbWVudExpc3QgOiBFbGVtZW50W10sICRhbmltYXRlID0gZmFsc2UpIFxuXHR7XG5cdFx0bGV0IGVsZW1lbnQgOiBFbGVtZW50O1xuXHRcdGxldCBlbGVtZW50c1RvRGlzcGxheSA6IEVsZW1lbnRbXSA9ICRlbGVtZW50TGlzdC5maWx0ZXIoIChlbCkgPT4gZWwuaXNGdWxseUxvYWRlZCk7IFxuXG5cdFx0dGhpcy5lbGVtZW50VG9EaXNwbGF5Q291bnQgPSBlbGVtZW50c1RvRGlzcGxheS5sZW5ndGg7XG5cdFx0Ly8gY29uc29sZS5sb2coJ0VsZW1lbnRMaXN0IGRyYXcnLCBlbGVtZW50c1RvRGlzcGxheS5sZW5ndGgpO1xuXG5cdFx0aWYgKEFwcC5kYXRhVHlwZSA9PSBBcHBEYXRhVHlwZS5BbGwpXG5cdFx0e1xuXHRcdFx0Zm9yKGVsZW1lbnQgb2YgZWxlbWVudHNUb0Rpc3BsYXkpIGVsZW1lbnQudXBkYXRlRGlzdGFuY2UoKTtcblx0XHRcdGVsZW1lbnRzVG9EaXNwbGF5LnNvcnQodGhpcy5jb21wYXJlRGlzdGFuY2UpO1xuXHRcdH1cblx0XHRlbHNlIGlmIChBcHAuZGF0YVR5cGUgPT0gQXBwRGF0YVR5cGUuU2VhcmNoUmVzdWx0cylcblx0XHR7XG5cdFx0XHRlbGVtZW50c1RvRGlzcGxheS5zb3J0KHRoaXMuY29tcGFyZVNlYXJjaFNjb3JlKTtcblx0XHR9XHRcdFxuXG5cdFx0bGV0IG1heEVsZW1lbnRzVG9EaXNwbGF5ID0gdGhpcy5FTEVNRU5UX0xJU1RfU0laRV9TVEVQICogdGhpcy5zdGVwc0NvdW50O1xuXHRcdGxldCBlbmRJbmRleCA9IE1hdGgubWluKG1heEVsZW1lbnRzVG9EaXNwbGF5LCBlbGVtZW50c1RvRGlzcGxheS5sZW5ndGgpOyAgXG5cblx0XHR0aGlzLnVwZGF0ZVJlc3VsdE1lc3NhZ2UoKTtcblx0XHRcblx0XHQvLyBpZiB0aGUgbGlzdCBpcyBub3QgZnVsbCwgd2Ugc2VuZCBhamF4IHJlcXVlc3Rcblx0XHRpZiAoZWxlbWVudHNUb0Rpc3BsYXkubGVuZ3RoIDwgbWF4RWxlbWVudHNUb0Rpc3BsYXkpXG5cdFx0e1xuXHRcdFx0aWYgKEFwcC5kYXRhVHlwZSA9PSBBcHBEYXRhVHlwZS5BbGwpXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGV4cGFuZCBib3VuZHNcblx0XHRcdFx0QXBwLmJvdW5kc01vZHVsZS5leHRlbmRCb3VuZHMoMC41KTtcblx0XHRcdFx0dGhpcy5zaG93U3Bpbm5lckxvYWRlcigpO1xuXHRcdFx0XHRBcHAuZWxlbWVudHNNYW5hZ2VyLmNoZWNrRm9yTmV3RWxlbWVudHNUb1JldHJpZXZlKHRydWUpO1x0XHRcblx0XHRcdH1cdFx0XHRcblx0XHR9XHRcblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJsaXN0IGlzIGZ1bGxcIik7XG5cdFx0XHQvLyB3YWl0aW5nIGZvciBzY3JvbGwgYm90dG9tIHRvIGFkZCBtb3JlIGVsZW1lbnRzIHRvIHRoZSBsaXN0XG5cdFx0XHR0aGlzLmlzTGlzdEZ1bGwgPSB0cnVlO1x0XHRcdFxuXHRcdH1cblx0XHRcblx0XHRsZXQgbGlzdENvbnRlbnREb20gPSAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbGlzdCB1bC5jb2xsYXBzaWJsZScpO1xuXHRcdGxldCB0aGF0ID0gdGhpcztcblxuXHRcdGZvcihsZXQgaSA9IDA7IGkgPCBlbmRJbmRleDsgaSsrKVxuXHRcdHtcblx0XHRcdGVsZW1lbnQgPSBlbGVtZW50c1RvRGlzcGxheVtpXTtcdFx0XHRcblx0XHRcdGxpc3RDb250ZW50RG9tLmFwcGVuZChlbGVtZW50LmNvbXBvbmVudC5yZW5kZXIoKSk7XG5cdFx0XHQvLyBiaW5kIGVsZW1lbnQgaGVhZGVyIGNsaWNrXG5cdFx0XHRlbGVtZW50LmNvbXBvbmVudC5kb20uZmluZCgnLmNvbGxhcHNpYmxlLWhlYWRlcicpLmNsaWNrKGZ1bmN0aW9uKCkgeyB0aGF0Lm9uRWxlbWVudE9wZW4odGhpcyk7IH0pO1xuXHRcdH1cblxuXHRcdGlmICgkYW5pbWF0ZSkgJCgnI2RpcmVjdG9yeS1jb250ZW50LWxpc3QgLmVsZW1lbnRzLWNvbnRhaW5lcicpLmFuaW1hdGUoe3Njcm9sbFRvcDogJzAnfSwgNTAwKTtcblx0XHQkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbGlzdCB1bCcpLmNvbGxhcHNpYmxlKHthY2NvcmRpb24gOiB0cnVlfSk7XHRcdFxuXHR9XG5cblx0cHJpdmF0ZSBvbkVsZW1lbnRPcGVuKGVsZW1lbnRIZWFkZXJEb20pXG5cdHtcblx0XHRsZXQgZWxlbWVudERvbSA9ICQoZWxlbWVudEhlYWRlckRvbSkuY2xvc2VzdCgnLmVsZW1lbnQtaXRlbScpO1xuXHRcdGxldCBlbGVtZW50SWQgPSBlbGVtZW50RG9tLmRhdGEoJ2VsZW1lbnQtaWQnKTtcblx0XHRsZXQgZWxlbWVudCA9ICBBcHAuZWxlbWVudEJ5SWQoZWxlbWVudElkKTtcblx0XHRcblx0XHQvLyBpbml0aWFsaXplIGVsZW1lbnQgY29tcG9uZW50XG5cdFx0aWYgKCEkKGVsZW1lbnRIZWFkZXJEb20pLmhhc0NsYXNzKCdpbml0aWFsaXplZCcpKVxuXHRcdHtcblx0XHRcdGVsZW1lbnQuY29tcG9uZW50LmluaXRpYWxpemUoKTtcblx0XHRcdGVsZW1lbnQuY29tcG9uZW50LmltYWdlc0NvbXBvbmVudC5vbk5ld0ltYWdlRGlzcGxheWVkLmRvKCAoaW1hZ2UpID0+IHtcblx0XHRcdFx0ZWxlbWVudERvbS5maW5kKCcuaW1nLW92ZXJsYXknKS5jc3MoJ2hlaWdodCcsIGVsZW1lbnREb20uZmluZCgnLmltZy1jb250YWluZXInKS5oZWlnaHQoKSk7XG5cdFx0XHR9KTtcdFx0XHRcdFxuXG5cdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7ICQoZWxlbWVudEhlYWRlckRvbSkuYWRkQ2xhc3MoJ2luaXRpYWxpemVkJyk7IH0sIDApO1x0XHRcdFx0XHRcblx0XHR9XG5cblx0XHQvLyBvbiBvcGVuIGFuaW1hdGlvbiBlbmRcblx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IHRoaXMub25FbGVtZW50RnVsbHlPcGVubmVkKGVsZW1lbnREb20pOyB9LCAzMDApO1x0XHRcdFxuXHR9XG5cblx0cHJpdmF0ZSBvbkVsZW1lbnRGdWxseU9wZW5uZWQoZWxlbWVudERvbSlcblx0e1xuXHRcdGxldCBsaXN0Q29udGFpbmVyRG9tID0gJCgnI2RpcmVjdG9yeS1jb250ZW50LWxpc3QgLmVsZW1lbnRzLWNvbnRhaW5lcicpO1xuXHRcdGVsZW1lbnREb20uZmluZCgnLmltZy1vdmVybGF5JykuY3NzKCdoZWlnaHQnLCBlbGVtZW50RG9tLmZpbmQoJy5pbWctY29udGFpbmVyJykuaGVpZ2h0KCkpO1xuXG5cdFx0Ly8gY2hlY2sgdGhlIHZpc2liaWxpdHkgb2YgYW4gaXRlbSBhZnRlciBpdCBoYXMgYmVlbiBleHBhbmRlZFxuXHRcdGxldCBlbGVtZW50RGlzdGFuY2VUb1RvcCA9IGVsZW1lbnREb20ub2Zmc2V0KCkudG9wIC0gbGlzdENvbnRhaW5lckRvbS5vZmZzZXQoKS50b3A7XG5cblx0XHQvLyBpZiBlbGVtZW50IG5vdCB2aXNpYmxlIG9uIHNjcmVlblxuXHRcdGlmICggKGVsZW1lbnREb20ub2Zmc2V0KCkudG9wIC0gbGlzdENvbnRhaW5lckRvbS5vZmZzZXQoKS50b3AgKyBlbGVtZW50RG9tLmhlaWdodCgpKSA+IChsaXN0Q29udGFpbmVyRG9tLm91dGVySGVpZ2h0KCkgKyAxNTApKVxuXHRcdHtcblx0XHRcdGxpc3RDb250YWluZXJEb20uYW5pbWF0ZSh7c2Nyb2xsVG9wOiBsaXN0Q29udGFpbmVyRG9tLnNjcm9sbFRvcCgpICsgZWxlbWVudERvbS5vZmZzZXQoKS50b3AgLSBsaXN0Q29udGFpbmVyRG9tLm9mZnNldCgpLnRvcH0sIDU1MCk7XG5cdFx0fVx0XHRcdFx0XHRcblx0XHQvLyBpZiBlbGVtZW50IGlzIHRvbyBoaWdoXG5cdFx0ZWxzZSBpZiAoIGVsZW1lbnREaXN0YW5jZVRvVG9wIDwgMCApIFxuXHRcdHtcblx0XHRcdGxpc3RDb250YWluZXJEb20uYW5pbWF0ZSh7c2Nyb2xsVG9wOiBsaXN0Q29udGFpbmVyRG9tLnNjcm9sbFRvcCgpICsgZWxlbWVudERpc3RhbmNlVG9Ub3B9LCAzMDApO1xuXHRcdH1cblx0XHRzZXRUaW1lb3V0KCAoKSA9PiAkKCcuaW5mby1iYXItdGFicycpLnRhYnMoKSwgMCk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVJlc3VsdE1lc3NhZ2UoKVxuXHR7XG5cdFx0JCgnLm5vLXJlc3VsdC1tZXNzYWdlJykuaGlkZSgpO1xuXHRcdFxuXHRcdGlmICh0aGlzLmVsZW1lbnRUb0Rpc3BsYXlDb3VudCA+IDApXG5cdFx0e1x0XHRcdFxuXHRcdFx0JCgnLmVsZW1lbnQtbGlzdC1oZWFkZXIgLnRpdGxlLXRleHQnKS5zaG93KCk7XG4gICBcdFx0JCgnLmVsZW1lbnQtbGlzdC10aXRsZS1udW1iZXItcmVzdWx0cycpLnRleHQoJygnICsgdGhpcy5lbGVtZW50VG9EaXNwbGF5Q291bnQgKyAnKScpO1xuICAgXHR9XG4gICBcdGVsc2VcbiAgIFx0XHQkKCcuZWxlbWVudC1saXN0LWhlYWRlciAudGl0bGUtdGV4dCcpLmhpZGUoKTtcblx0fVxuXG5cdGhhbmRsZUFsbEVsZW1lbnRzUmV0cmlldmVkKClcblx0e1xuXHRcdHRoaXMuaGlkZVNwaW5uZXJMb2FkZXIoKTtcblx0XHRpZiAodGhpcy5lbGVtZW50VG9EaXNwbGF5Q291bnQgPT0gMClcblx0XHR7XG5cdFx0XHQkKCcuZWxlbWVudC1saXN0LXRpdGxlLW51bWJlci1yZXN1bHRzJykudGV4dCgnKDApJyk7XG5cdFx0XHQkKCcubm8tcmVzdWx0LW1lc3NhZ2UnKS5zaG93KCk7XG5cdFx0XHRsZXQgbm9SZXN1bHRJbWcgPSAkKCcubm8tcmVzdWx0LW1lc3NhZ2UgaW1nJyk7XG5cdFx0XHRub1Jlc3VsdEltZy5hdHRyKCdzcmMnLCBub1Jlc3VsdEltZy5kYXRhKCdzcmMnKSk7XG5cdFx0XHQkKCcuZWxlbWVudC1saXN0LWhlYWRlciAudGl0bGUtdGV4dCcpLnNob3coKTtcblx0XHR9XHRcdFxuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVCb3R0b20oKVxuXHR7XG5cdFx0aWYgKHRoaXMuaXNMaXN0RnVsbCkgXG5cdFx0e1xuXHRcdFx0dGhpcy5zdGVwc0NvdW50Kys7XG5cdFx0XHQvL2NvbnNvbGUubG9nKFwiYm90dG9tIHJlYWNoZWRcIik7XG5cdFx0XHR0aGlzLmlzTGlzdEZ1bGwgPSBmYWxzZTtcblx0XHRcdHRoaXMuY2xlYXIoKTtcblx0XHRcdHRoaXMuZHJhdyhBcHAuZWxlbWVudHMoKSk7XG5cdFx0fVx0XHRcblx0fVxuXG5cdHByaXZhdGUgY29tcGFyZURpc3RhbmNlKGE6RWxlbWVudCxiOkVsZW1lbnQpIFxuXHR7ICBcblx0ICBpZiAoYS5kaXN0YW5jZUZyb21Cb3VuZHNDZW50ZXIgPT0gYi5kaXN0YW5jZUZyb21Cb3VuZHNDZW50ZXIpIHJldHVybiAwO1xuXHQgIHJldHVybiBhLmRpc3RhbmNlRnJvbUJvdW5kc0NlbnRlciA8IGIuZGlzdGFuY2VGcm9tQm91bmRzQ2VudGVyID8gLTEgOiAxO1xuXHR9XG5cblx0cHJpdmF0ZSBjb21wYXJlU2VhcmNoU2NvcmUoYTpFbGVtZW50LGI6RWxlbWVudCkgXG5cdHsgIFxuXHQgIGlmIChhLnNlYXJjaFNjb3JlID09IGIuc2VhcmNoU2NvcmUpIHJldHVybiAwO1xuXHQgIHJldHVybiBhLnNlYXJjaFNjb3JlIDwgYi5zZWFyY2hTY29yZSA/IDEgOiAtMTtcblx0fVxufVxuXG4iLCJkZWNsYXJlIGxldCBnb29nbGU7XG5pbXBvcnQgeyBBcHBNb2R1bGUsIEFwcFN0YXRlcyB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuZGVjbGFyZSBsZXQgJCwgTDogYW55O1xuXG5kZWNsYXJlIGxldCB3aW5kb3cgOiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBEaXJlY3Rpb25zQ29tcG9uZW50XG57XG5cdHJvdXRpbmdDb250cm9sIDogYW55O1x0XG5cdGlzQWN0aXZlIDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge30gXG5cbiAgaW5pdGlhbGl6ZSgpXG4gIHtcbiAgXHQkKCcjYnRuLWNsb3NlLWRpcmVjdGlvbnMnKS5jbGljayggKCkgPT4gXG5cdFx0e1xuXHRcdFx0QXBwLnNldFN0YXRlKEFwcFN0YXRlcy5TaG93RWxlbWVudCwgeyBpZCA6IEFwcC5pbmZvQmFyQ29tcG9uZW50LmdldEN1cnJFbGVtZW50SWQoKSB9KTtcblx0XHR9KTtcbiAgfSBcblxuXHRjbGVhcigpXG5cdHtcblx0XHRpZiAoIXRoaXMucm91dGluZ0NvbnRyb2wpIHJldHVybjtcblxuXHRcdHRoaXMuY2xlYXJSb3V0ZSgpO1xuXHRcdHRoaXMuaGlkZUl0aW5lcmFyeVBhbmVsKCk7XG5cblx0XHRBcHAuREVBTW9kdWxlLmVuZCgpO1xuXG5cdFx0dGhpcy5yb3V0aW5nQ29udHJvbCA9IG51bGw7XG5cdFx0dGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXHR9O1xuXG5cdHByaXZhdGUgY2xlYXJSb3V0ZSgpXG5cdHtcblx0XHRpZiAodGhpcy5yb3V0aW5nQ29udHJvbCkgXG5cdFx0e1xuXHRcdFx0dGhpcy5yb3V0aW5nQ29udHJvbC5zcGxpY2VXYXlwb2ludHMoMCwyKTtcdFx0XG5cdFx0XHRBcHAubWFwKCkucmVtb3ZlQ29udHJvbCh0aGlzLnJvdXRpbmdDb250cm9sKTtcdFxuXHRcdH1cblx0fTtcblxuXHRjYWxjdWxhdGVSb3V0ZShvcmlnaW4gOiBMLkxhdExuZywgZWxlbWVudCA6IEVsZW1lbnQpIFxuXHR7XG5cdFx0dGhpcy5jbGVhcigpO1xuXG5cdFx0bGV0IHdheXBvaW50cyA9IFtcblx0XHQgICAgb3JpZ2luLFxuXHRcdCAgICBlbGVtZW50LnBvc2l0aW9uLFxuXHRcdF07XG5cdFx0Ly9jb25zb2xlLmxvZyhcImNhbGN1bGF0ZSByb3V0ZVwiLCB3YXlwb2ludHMpO1xuXG5cdFx0dGhpcy5yb3V0aW5nQ29udHJvbCA9IEwuUm91dGluZy5jb250cm9sKHtcblx0XHRcdHJvdXRlcjogTC5Sb3V0aW5nLm1hcGJveCgncGsuZXlKMUlqb2laMjluYjJOaGNuUnZJaXdpWVNJNkltTnFZbmh4ZUhVeFp6SjNjRzR6TW5JeU5tWmlhakY2ZG13aWZRLjJHNUlNNHJvSWdwVV9mdlBCT3Bzc3cnKSxcblx0XHRcdHBsYW46IEwuUm91dGluZy5wbGFuKFxuXHRcdFx0XHR3YXlwb2ludHMsIFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Ly8gZGVsZXRlaW5nIHN0YXJ0IGFuZCBlbmQgbWFya2Vyc1xuXHRcdFx0XHRcdGNyZWF0ZU1hcmtlcjogZnVuY3Rpb24oaSwgd3ApIHsgcmV0dXJuIG51bGw7IH0sXG5cdFx0XHRcdFx0cm91dGVXaGlsZURyYWdnaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRzaG93QWx0ZXJuYXRpdmVzOiBmYWxzZVxuXHRcdFx0XHR9XG5cdFx0XHQpLFxuXHRcdFx0bGFuZ3VhZ2U6ICdmcicsXG5cdFx0XHRyb3V0ZVdoaWxlRHJhZ2dpbmc6IGZhbHNlLFxuXHRcdFx0c2hvd0FsdGVybmF0aXZlczogZmFsc2UsXG5cdFx0XHRhbHRMaW5lT3B0aW9uczoge1xuXHRcdFx0XHRzdHlsZXM6IFtcblx0XHRcdFx0XHR7Y29sb3I6ICdibGFjaycsIG9wYWNpdHk6IDAuMTUsIHdlaWdodDogOX0sXG5cdFx0XHRcdFx0e2NvbG9yOiAnd2hpdGUnLCBvcGFjaXR5OiAwLjgsIHdlaWdodDogNn0sXG5cdFx0XHRcdFx0e2NvbG9yOiAnIzAwYjNmZCcsIG9wYWNpdHk6IDAuNSwgd2VpZ2h0OiAyfVxuXHRcdFx0XHRdXG5cdFx0XHR9XG5cdFx0fSkuYWRkVG8oQXBwLm1hcCgpKTtcblxuXHRcdC8vIHNob3cgSXRpbmVyYXJ5IHBhbmVsIHdpdGhvdXQgaXRpbmVyYXJ5LCBqdXN0IHRvIHNob3cgdXNlclxuXHRcdC8vIHNvbWV0aGluZ2lzIGhhcHBlbm5pbmcgYW4gZGlzcGxheSBzcGlubmVyIGxvYWRlclxuXHRcdHRoaXMuc2hvd0l0aW5lcmFyeVBhbmVsKGVsZW1lbnQpO1xuXG5cdFx0dGhpcy5yb3V0aW5nQ29udHJvbC5vbigncm91dGVzZm91bmQnLCAoZXYpID0+IFxuXHRcdHtcblx0XHRcdHRoaXMuc2hvd0l0aW5lcmFyeVBhbmVsKGVsZW1lbnQpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gZml0IGJvdW5kcyBcblx0XHR0aGlzLnJvdXRpbmdDb250cm9sLm9uKCdyb3V0ZXNlbGVjdGVkJywgZnVuY3Rpb24oZSkgXG5cdFx0e1x0ICAgIFxuXHQgICAgdmFyIHIgPSBlLnJvdXRlO1xuXHQgICAgdmFyIGxpbmUgPSBMLlJvdXRpbmcubGluZShyKTtcblx0ICAgIHZhciBib3VuZHMgPSBsaW5lLmdldEJvdW5kcygpO1xuXHQgICAgQXBwLm1hcCgpLmZpdEJvdW5kcyhib3VuZHMpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5yb3V0aW5nQ29udHJvbC5vbigncm91dGluZ2Vycm9yJywgKGV2KSA9PiBcblx0XHR7XG5cdFx0XHQkKCcjbW9kYWwtZGlyZWN0aW9ucy1mYWlsJykub3Blbk1vZGFsKCk7XG5cdFx0XHR0aGlzLmNsZWFyKCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcdFx0XHRcblx0fTtcblxuXHRoaWRlSXRpbmVyYXJ5UGFuZWwoKVxuXHR7XG5cdFx0JCgnI2RpcmVjdG9yeS1tZW51LW1haW4tY29udGFpbmVyJykucmVtb3ZlQ2xhc3MoKTtcblx0fVxuXG5cdHNob3dJdGluZXJhcnlQYW5lbChlbGVtZW50IDogRWxlbWVudClcblx0e1xuXHRcdCQoJyNkaXJlY3RvcnktbWVudS1tYWluLWNvbnRhaW5lcicpLnJlbW92ZUNsYXNzKCkuYWRkQ2xhc3MoXCJkaXJlY3Rpb25zXCIpO1x0XG5cdFx0JCgnLmxlYWZsZXQtcm91dGluZy1jb250YWluZXInKS5wcmVwZW5kVG8oJy5kaXJlY3RvcnktbWVudS1jb250ZW50Jyk7XHRcdFxuXHR9XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMTItMTNcbiAqL1xuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcblxuaW1wb3J0IHsgRXZlbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9ldmVudC5jbGFzc1wiO1xuXG5kZWNsYXJlIHZhciAkO1xuXG5leHBvcnQgY2xhc3MgSW5mb0JhckNvbXBvbmVudFxue1xuXHRpc1Zpc2libGUgOiBib29sZWFuID0gZmFsc2U7XG5cdGlzRGV0YWlsc1Zpc2libGUgPSBmYWxzZTtcblxuXHRlbGVtZW50VmlzaWJsZSA6IEVsZW1lbnQgPSBudWxsO1xuXG5cdGxvYWRlclRpbWVyID0gbnVsbDtcblxuXHRvblNob3cgPSBuZXcgRXZlbnQ8bnVtYmVyPigpO1xuXHRvbkhpZGUgPSBuZXcgRXZlbnQ8Ym9vbGVhbj4oKTtcblxuXHRnZXRDdXJyRWxlbWVudElkKCkgOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5lbGVtZW50VmlzaWJsZSA/IHRoaXMuZWxlbWVudFZpc2libGUuaWQgOiBudWxsOyB9XG5cblx0Z2V0IGRvbSgpIHsgcmV0dXJuICQoJyNlbGVtZW50LWluZm8tYmFyJyk7IH1cblx0Z2V0IGRvbU1lbnUoKSB7IHJldHVybiB0aGlzLmRvbS5maW5kKCcubWVudS1lbGVtZW50Jyk7IH1cblx0d2lkdGgoKSA6IHN0cmluZyB7IHJldHVybiB0aGlzLmRvbS53aWR0aCgpICsgJ3B4JzsgfVxuXG5cdGlzRGlzcGxheWVkQXNpZGUoKSB7IHJldHVybiB0aGlzLmRvbS5oYXNDbGFzcygnZGlzcGxheS1hc2lkZScpOyB9XG5cdGlzRGlzcGxheWVkQm90dG9tKCkgeyByZXR1cm4gdGhpcy5kb20uaGFzQ2xhc3MoJ2Rpc3BsYXktYm90dG9tJyk7IH1cblxuXHRyZWxvYWQoKVxuXHR7XG5cdFx0aWYgKCF0aGlzLmlzVmlzaWJsZSkgcmV0dXJuO1xuXHRcdHRoaXMuZWxlbWVudFZpc2libGUuaXNGdWxseUxvYWRlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc2hvd0VsZW1lbnQodGhpcy5lbGVtZW50VmlzaWJsZS5pZCk7XG5cdH1cblxuXHQvLyBBcHAuaW5mb0JhckNvbXBvbmVudC5zaG93RWxlbWVudDtcblx0c2hvd0VsZW1lbnQoZWxlbWVudElkLCBjYWxsYmFjayA9IG51bGwpIFxuXHR7XG5cdFx0aWYgKCFBcHAuY29uZmlnLmluZm9iYXIuYWN0aXZhdGUpIHtcblx0XHRcdEFwcC5zdGF0ZU1hbmFnZXIuc2V0U3RhdGUoQXBwU3RhdGVzLk5vcm1hbCk7XHRcdFx0XG5cdFx0XHRyZXR1cm47XG5cdFx0fVx0XHRcblxuXHRcdGxldCBlbGVtZW50ID0gQXBwLmVsZW1lbnRzTW9kdWxlLmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XHRcdFxuXHRcdC8vIGNvbnNvbGUubG9nKFwic2hvd0VsZW1lbnRcIiwgZWxlbWVudCk7XG5cdFx0XG5cdFx0Ly8gaWYgZWxlbWVudCBhbHJlYWR5IHZpc2libGVcblx0XHRpZiAodGhpcy5lbGVtZW50VmlzaWJsZSkgdGhpcy5lbGVtZW50VmlzaWJsZS5tYXJrZXIuc2hvd05vcm1hbFNpemUodHJ1ZSk7XG5cdFx0dGhpcy5lbGVtZW50VmlzaWJsZSA9IGVsZW1lbnQ7XHRcblxuXHRcdGlmICghZWxlbWVudC5pc0Z1bGx5TG9hZGVkKVxuXHRcdHtcblx0XHRcdC8vY29uc29sZS5sb2coXCJFbGVtZW50IG5vdCBmdWxseSBMb2FkZWRcIik7XG5cdFx0XHRBcHAuYWpheE1vZHVsZS5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQsXG5cdFx0XHQocmVzcG9uc2UpID0+IHtcblx0XHRcdFx0ZWxlbWVudC51cGRhdGVXaXRoSnNvbihyZXNwb25zZSk7XG5cdFx0XHRcdHRoaXMuc2hvd0VsZW1lbnQoZWxlbWVudC5pZCk7XG5cdFx0XHRcdGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcblx0XHRcdH0sXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiQWpheCBmYWlsdXJlIGZvciBlbGVtZW50SWRcIiwgZWxlbWVudElkKTtcblx0XHRcdH0pO1x0XHRcdFxuXG5cdFx0XHQvLyBpZiBhamF4IHJldHJpZXZpbmcgdGFrZSBtb3JlIHRoYW4gNTAwbXMsIHdlIHNob3cgc3Bpbm5lciBsb2FkZXJcblx0XHRcdHRoaXMubG9hZGVyVGltZXIgPSBzZXRUaW1lb3V0KCAoKSA9PiBcblx0XHRcdHsgXG5cdFx0XHRcdCQoJyNpbmZvLWJhci1vdmVybGF5JykuZmFkZUluKCk7XHRcdFx0XHRcdFxuXHRcdFx0XHR0aGlzLnNob3coKTsgXG5cdFx0XHR9LCA1MDApOyBcdFxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gY2xlYXJpbmcgbG9hZGVyXG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5sb2FkZXJUaW1lcik7XG5cdFx0XHQkKCcjaW5mby1iYXItb3ZlcmxheScpLmZhZGVPdXQoKTtcblxuXHRcdFx0dGhpcy5kb20uZmluZCgnI2VsZW1lbnQtaW5mbycpLmh0bWwodGhpcy5lbGVtZW50VmlzaWJsZS5jb21wb25lbnQucmVuZGVyKCkpO1x0XG5cblx0XHRcdGlmICh0aGlzLmVsZW1lbnRWaXNpYmxlLmltYWdlcy5sZW5ndGgpIFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBBbmltYXRpb24gdG8gbW92ZSBpbWctbmF2aWdhdGlvbi1idG4gd2hlbiBzY3JvbGxpbmdcblx0XHRcdFx0dGhpcy5kb20uZmluZCgnLmNvbGxhcHNpYmxlLWJvZHktbWFpbi1jb250YWluZXInKS5zY3JvbGwoZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdGxldCBzY3JvbGxUb3AgPSAkKHRoaXMpLnNjcm9sbFRvcCgpO1xuXHRcdFx0XHRcdCQodGhpcykuZmluZCgnLmltZy1uYXZpZ2F0aW9uLWJ0bi5wcmV2JykuY3NzKCdsZWZ0JywgLXNjcm9sbFRvcC81KTtcblx0XHRcdFx0XHQkKHRoaXMpLmZpbmQoJy5pbWctbmF2aWdhdGlvbi1idG4ubmV4dCcpLmNzcygncmlnaHQnLCAtc2Nyb2xsVG9wLzUpO1xuXHRcdFx0XHRcdCQodGhpcykuZmluZCgnLmltZy1uYXZpZ2F0aW9uLWJ0bi5uZXh0JykuY3NzKCd0b3AnLCBzY3JvbGxUb3AvMik7XG5cdFx0XHRcdFx0JCh0aGlzKS5maW5kKCcuaW1nLW5hdmlnYXRpb24tYnRuLnByZXYnKS5jc3MoJ3RvcCcsIHNjcm9sbFRvcC8yKTtcblx0XHRcdFx0XHQkKHRoaXMpLmZpbmQoJy5pbWctb3ZlcmxheScpLmNzcygnb3BhY2l0eScsIDEgLSBzY3JvbGxUb3AvMjAwKTtcblx0XHRcdFx0fSk7XHRcdFx0XHRcblx0XHRcdH1cdFx0XHRcdFx0XHRcblxuXHRcdFx0dGhpcy5lbGVtZW50VmlzaWJsZS5jb21wb25lbnQuaW5pdGlhbGl6ZSgpO1x0XG5cdFx0XHR0aGlzLnVwZGF0ZU1lbnUoKTtcdFx0XHRcdFxuXG5cdFx0XHR0aGlzLmRvbS5maW5kKCcjYnRuLWNsb3NlLWJhbmRlYXUtZGV0YWlsJykuY2xpY2soKCkgPT4geyB0aGlzLmhpZGUoKTsgcmV0dXJuIGZhbHNlOyB9KTtcblx0XHRcdFxuXHRcdFx0dGhpcy5kb20uZmluZCgnLmNvbGxhcHNpYmxlLWhlYWRlcicpLmNsaWNrKCgpID0+IHsgdGhpcy50b2dnbGVEZXRhaWxzKCk7IH0pO1x0XHRcdFxuXHRcdH1cdFx0XHRcdFx0XHRcblx0XHRcblx0XHR0aGlzLnNob3coKTtcdFx0XG5cblx0XHRlbGVtZW50Lm1hcmtlci5zaG93Tm9ybWFsSGlkZGVuKCk7XG5cdFx0ZWxlbWVudC5tYXJrZXIuc2hvd0JpZ1NpemUoKTtcblxuXHRcdHNldFRpbWVvdXQoICgpID0+IFxuXHRcdHsgXG5cdFx0XHRlbGVtZW50Lm1hcmtlci5zaG93Tm9ybWFsSGlkZGVuKCk7XG5cdFx0XHRlbGVtZW50Lm1hcmtlci5zaG93QmlnU2l6ZSgpO1xuXHRcdH0sIDUwMCk7IFx0XG5cblx0XHR0aGlzLm9uU2hvdy5lbWl0KGVsZW1lbnRJZCk7XG5cblx0XHRBcHAuZG9jdW1lbnRUaXRsZU1vZHVsZS51cGRhdGVEb2N1bWVudFRpdGxlKCk7XG5cdH07XHRcblxuXHRyZWZyZXNoKClcblx0e1x0XHRcblx0XHRpZiAodGhpcy5pc1Zpc2libGUpIHtcblx0XHRcdHRoaXMuc2hvdygpO1xuXHRcdFx0c2V0VGltZW91dCggKCkgPT4geyB0aGlzLnNob3coKTsgfSwgMjAwKTtcblx0XHR9XG5cdH1cblxuXHRkaXNwbGF5QXNpZGUoKVxuXHR7XG5cdFx0dGhpcy5kb20uYWRkQ2xhc3MoJ2Rpc3BsYXktYXNpZGUnKTtcblx0XHR0aGlzLmRvbS5yZW1vdmVDbGFzcygnZGlzcGxheS1ib3R0b20nKTtcblx0XHR0aGlzLnVwZGF0ZU1lbnUoKTtcblx0fVxuXG5cdGRpc3BsYXlCb3R0b20oKVxuXHR7XG5cdFx0dGhpcy5kb20ucmVtb3ZlQ2xhc3MoJ2Rpc3BsYXktYXNpZGUnKTtcblx0XHR0aGlzLmRvbS5hZGRDbGFzcygnZGlzcGxheS1ib3R0b20nKTtcdFxuXHRcdHRoaXMudXBkYXRlTWVudSgpO1x0XHRcblx0fVxuXG5cdHVwZGF0ZU1lbnUoKVxuXHR7XG5cdFx0aWYgKCF0aGlzLmVsZW1lbnRWaXNpYmxlKSByZXR1cm47XG5cdFx0Ly8gb24gbGFyZ2Ugc2NyZWVuIGluZm8gYmFyIGlzIGRpc3BsYXllZCBhc2lkZSBhbmQgc28gd2UgaGF2ZSBlbm91Z2ggc3BhY2Vcblx0XHQvLyB0byBzaG93IG1lbnUgYWN0aW9ucyBkZXRhaWxzIGluIGZ1bGwgdGV4dFxuXHRcdHRoaXMuZWxlbWVudFZpc2libGUuY29tcG9uZW50Lm1lbnVDb21wb25lbnQuc2hvd0Z1bGxUZXh0TWVudSh0aGlzLmlzRGlzcGxheWVkQXNpZGUoKSk7XG5cdH1cblxuXHRzaG93KClcblx0e1xuXHRcdHRoaXMuaGlkZURldGFpbHMoKTtcblxuXHRcdEFwcC5zZWFyY2hCYXJDb21wb25lbnQuaGlkZU1vYmlsZVNlYXJjaEJhcigpO1x0XHRcblx0XHRcblx0XHRpZiAoIXRoaXMuaXNEaXNwbGF5ZWRBc2lkZSgpKVxuXHRcdHtcblx0XHRcdHRoaXMuZG9tLnNob3coKTtcblxuXHRcdFx0bGV0IGVsZW1lbnRJbmZvQmFyX25ld0hlaWdodCA9IHRoaXMuZG9tLmZpbmQoJyNlbGVtZW50LWluZm8nKS5vdXRlckhlaWdodCh0cnVlKTtcblxuXHRcdFx0dGhpcy51cGRhdGVJbmZvQmFyU2l6ZSgpO1xuXHRcdFx0dGhpcy5kb20uc3RvcCh0cnVlKS5hbmltYXRlKHsnaGVpZ2h0JzogZWxlbWVudEluZm9CYXJfbmV3SGVpZ2h0fSwgMzUwLCAnc3dpbmcnLCAoKSA9PiBcblx0XHRcdHtcblx0XHRcdFx0QXBwLmNvbXBvbmVudC51cGRhdGVNYXBTaXplKCk7XG5cdFx0XHRcdHRoaXMuY2hlY2tJZk1hcmtlclN0aWxsVmlzaWJsZSgpO1x0XHQgIFx0XHRcblx0XHRcdH0pO1xuXHRcdH1cdFxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHRpZiAoIXRoaXMuZG9tLmlzKCc6dmlzaWJsZScpKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmRvbS5jc3MoJ3JpZ2h0JywnLScgKyB0aGlzLndpZHRoKCkpO1x0XHRcdFxuXHRcdFx0XHR0aGlzLmRvbS5zaG93KCkuc3RvcCh0cnVlKS5hbmltYXRlKHsncmlnaHQnOicwJ30sMzUwLCdzd2luZycsICgpID0+IHsgXG5cdFx0XHRcdFx0QXBwLmNvbXBvbmVudC51cGRhdGVEaXJlY3RvcnlDb250ZW50TWFyZ2luSWZJbmZvQmFyRGlzcGxheWVkQXNpZGUoKTtcblx0XHRcdFx0XHR0aGlzLmNoZWNrSWZNYXJrZXJTdGlsbFZpc2libGUoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdHRoaXMudXBkYXRlSW5mb0JhclNpemUoKTtcblx0XHRcdHRoaXMuc2hvd0JvZHlNYWluVGFiKCk7XG5cblx0XHRcdHNldFRpbWVvdXQoICgpID0+IHsgXG5cdFx0XHRcdC8vIGp1c3QgdG8gYmUgc3VyZSwgcHV0IHRoZSByaWdodCBwcm9wZXJ0eSB0byAwIGZldyBtcyBhZnRlclxuXHRcdFx0XHR0aGlzLmRvbS5zdG9wKHRydWUpLmNzcygncmlnaHQnLCAnMCcpOyBcdFx0XHRcblx0XHRcdH0sIDQwMCk7XHRcdFx0XHRcblx0XHR9XHRcblxuXHRcdHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcblx0fTtcdFxuXG5cdGNoZWNrSWZNYXJrZXJTdGlsbFZpc2libGUoKVxuXHR7XG5cdFx0Ly8gYWZ0ZXIgaW5mb2JhciBhbmltYXRpb24sIHdlIGNoZWNrIGlmIHRoZSBtYXJrZXIgXG5cdFx0Ly8gaXMgbm90IGhpZGRlZCBieSB0aGUgaW5mbyBiYXJcblx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5lbGVtZW50VmlzaWJsZSAmJiB0aGlzLmlzQ3VycmVudE1hcmtlck5vdFZpc2libGVPbk1hcCgpICYmIEFwcC5zdGF0ZSAhPSBBcHBTdGF0ZXMuU2hvd0RpcmVjdGlvbnMpXG5cdFx0XHR7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiaW5mbyBiYXIgbWFya2VyIG5vdCB2aXNpYmxlXCIsIEFwcFN0YXRlc1tBcHAuc3RhdGVdKTtcblx0XHRcdFx0QXBwLm1hcENvbXBvbmVudC5wYW5Ub0xvY2F0aW9uKHRoaXMuZWxlbWVudFZpc2libGUucG9zaXRpb24pO1xuXHRcdFx0XHR0aGlzLmVsZW1lbnRWaXNpYmxlLm1hcmtlci5zaG93QmlnU2l6ZSgpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IHRoaXMuZWxlbWVudFZpc2libGUubWFya2VyLnNob3dCaWdTaXplKCk7IH0sIDIwMCk7XG5cdFx0XHRcdHNldFRpbWVvdXQoICgpID0+IHsgdGhpcy5lbGVtZW50VmlzaWJsZS5tYXJrZXIuc2hvd0JpZ1NpemUoKTsgfSwgMTAwMCk7XG5cdFx0XHR9XHRcblx0XHR9LCAxMDApO1xuXHR9XG5cblx0cHJpdmF0ZSBpc0N1cnJlbnRNYXJrZXJOb3RWaXNpYmxlT25NYXAoKVxuXHR7XG5cdFx0bGV0IG1hcmtlciA9IHRoaXMuZWxlbWVudFZpc2libGUubWFya2VyLmRvbU1hcmtlcigpO1xuXHRcdHJldHVybiAoQXBwLm1hcENvbXBvbmVudC5pc01hcExvYWRlZCAmJiAhQXBwLm1hcENvbXBvbmVudC5jb250YWlucyh0aGlzLmVsZW1lbnRWaXNpYmxlLnBvc2l0aW9uKSkgfHxcblx0XHQgICAgICAgKCF0aGlzLmlzRGlzcGxheWVkQXNpZGUoKSAmJiBtYXJrZXIgJiYgbWFya2VyLm9mZnNldCgpICYmIChtYXJrZXIub2Zmc2V0KCkudG9wID4gdGhpcy5kb20ub2Zmc2V0KCkudG9wIC0gNTApKTtcblx0fVxuXG5cdGhpZGUoaHVtYW5BY3Rpb24gOiBib29sZWFuID0gdHJ1ZSlcblx0e1xuXHRcdGlmICghdGhpcy5pc0Rpc3BsYXllZEFzaWRlKCkpXG5cdFx0e1x0XHRcdFxuXHRcdFx0dGhpcy5oaWRlRGV0YWlscygpO1xuXHRcdFx0dGhpcy5kb20uYW5pbWF0ZSh7J2hlaWdodCc6ICcwJ30sIDM1MCwgJ3N3aW5nJywgKCkgPT4gXG5cdFx0XHR7XG5cdFx0XHRcdEFwcC5jb21wb25lbnQudXBkYXRlTWFwU2l6ZSgpO1xuXHRcdFx0XHR0aGlzLmRvbS5oaWRlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdCQoJyNkaXJlY3RvcnktY29udGVudC1tYXAnKS5jc3MoJ21hcmdpbi1yaWdodCcsJzBweCcpO1xuXG5cdFx0XHRpZiAodGhpcy5kb20uaXMoJzp2aXNpYmxlJykpXG5cdFx0XHR7XHRcdFxuXHRcdFx0XHR0aGlzLmRvbS5hbmltYXRlKHsncmlnaHQnOictNTAwcHgnfSwzNTAsJ3N3aW5nJyxmdW5jdGlvbigpXG5cdFx0XHRcdHsgXG5cdFx0XHRcdFx0JCh0aGlzKS5oaWRlKCk7ICBcblx0ICBcdFx0XHRBcHAuY29tcG9uZW50LnVwZGF0ZU1hcFNpemUoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XHRcdFxuXHRcdH1cblxuXHRcdGlmIChodW1hbkFjdGlvbikgdGhpcy5vbkhpZGUuZW1pdCh0cnVlKTtcdFx0XG5cblx0XHRzZXRUaW1lb3V0KCAoKSA9PiB0aGlzLmRvbS5maW5kKCcjZWxlbWVudC1pbmZvJykuaHRtbCgnJyksIDM1MCk7XG5cblx0XHRpZiAodGhpcy5lbGVtZW50VmlzaWJsZSAmJiB0aGlzLmVsZW1lbnRWaXNpYmxlLm1hcmtlcikgdGhpcy5lbGVtZW50VmlzaWJsZS5tYXJrZXIuc2hvd05vcm1hbFNpemUodHJ1ZSk7XG5cblx0XHR0aGlzLmVsZW1lbnRWaXNpYmxlID0gbnVsbDtcblx0XHR0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1x0XHRcblx0fTtcblxuXHR0b2dnbGVEZXRhaWxzKClcblx0e1x0XG5cdFx0aWYgKCB0aGlzLmRvbS5maW5kKCcubW9yZURldGFpbHMnKS5pcygnOnZpc2libGUnKSApXG5cdFx0e1xuXHRcdFx0dGhpcy5oaWRlRGV0YWlscygpO1xuXHRcdFx0dGhpcy5lbGVtZW50VmlzaWJsZS5jb21wb25lbnQubWVudUNvbXBvbmVudC5zaG93RnVsbFRleHRNZW51KGZhbHNlKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdGlmICh0aGlzLmRvbU1lbnUud2lkdGgoKSA+PSB0aGlzLmRvbU1lbnUuZmluZCgnLm1lbnUtZWxlbWVudC1pdGVtOnZpc2libGUnKS5sZW5ndGgqMTAwKSB0aGlzLmVsZW1lbnRWaXNpYmxlLmNvbXBvbmVudC5tZW51Q29tcG9uZW50LnNob3dGdWxsVGV4dE1lbnUodHJ1ZSk7XG5cblx0XHRcdHRoaXMuZG9tLmZpbmQoJy5lbGVtZW50LWl0ZW0nKS5hZGRDbGFzcygnYWN0aXZlJyk7XHRcdFxuXHRcdFx0dGhpcy5kb20uZmluZCgnLm1vcmVEZXRhaWxzJykuc2hvdygpO1x0XG5cdFx0XHR0aGlzLmRvbS5maW5kKCcubW9yZURldGFpbHMudGFicycpLmNzcygnZGlzcGxheScsJ2ZsZXgnKTtcdFx0XG5cdFx0XHRcblx0XHRcdC8vIHNob3cgdGhlIGV4cGFuZCBsYWJlbCBpbiBoZWFkZXIgd2hlbiBpbnRlcmFjdGl2ZSBzZWN0aW9uIGlzIHZpc2libGVcblx0XHRcdGlmICh0aGlzLmRvbS5maW5kKCcuaW50ZXJhY3RpdmUtc2VjdGlvbicpLmhlaWdodCgpID4gMCB8fCB0aGlzLmRvbS5maW5kKCcuaW5mby1iYXItdGFicycpLmhlaWdodCgpID4gMCkgXG5cdFx0XHRcdHRoaXMuZG9tLmZpbmQoJy5leHBhbmRMYWJlbCcpLnJlbW92ZUNsYXNzKCdiZ2RTb2Z0Q29sb3JBcyB0cmFuc2Zvcm0tYmlnJyk7XG5cblx0XHRcdHRoaXMuZG9tLmFuaW1hdGUoeydoZWlnaHQnOicxMDAlJ30sNDAwLCdzd2luZycpO1xuXG5cdFx0ICAgbGV0IGhlaWdodCA9ICAkKCcuZ29nb2NhcnRvLWNvbnRhaW5lcicpLmhlaWdodCgpO1xuXHRcdFx0aGVpZ2h0IC09IHRoaXMuZG9tLmZpbmQoJy5jb2xsYXBzaWJsZS1oZWFkZXInKS5vdXRlckhlaWdodCh0cnVlKTtcdFx0XHRcblx0XHRcdGhlaWdodCAtPSB0aGlzLmRvbS5maW5kKCcuaW50ZXJhY3RpdmUtc2VjdGlvbicpLm91dGVySGVpZ2h0KHRydWUpO1x0XG5cdFx0XHRoZWlnaHQgLT0gdGhpcy5kb20uZmluZChcIi5tZW51LWVsZW1lbnRcIikub3V0ZXJIZWlnaHQodHJ1ZSk7XG5cdFx0XHRoZWlnaHQgLT0gdGhpcy5kb20uZmluZChcIi5pbmZvLWJhci10YWJzXCIpLm91dGVySGVpZ2h0KHRydWUpO1xuXG5cdFx0ICB0aGlzLmRvbS5maW5kKCcuY29sbGFwc2libGUtYm9keScpLmNzcygnaGVpZ2h0JywgaGVpZ2h0KTtcdFxuXG5cdFx0ICB0aGlzLnNob3dCb2R5TWFpblRhYigpO1xuXHRcdCAgdGhpcy5lbGVtZW50VmlzaWJsZS5jb21wb25lbnQuaW1hZ2VzQ29tcG9uZW50LnZlcnRpY2FsQWxpZ25DdXJyZW50SW1hZ2UoKTtcblx0XHQgIEFwcC5nb2dvQ29udHJvbENvbXBvbmVudC5oaWRlKCk7XG5cdFx0fVx0XG5cdH07XG5cblx0aGlkZURldGFpbHMoKVxuXHR7XG5cdFx0QXBwLmdvZ29Db250cm9sQ29tcG9uZW50LnNob3coKTtcblxuXHRcdGlmICh0aGlzLmRvbS5maW5kKCcubW9yZURldGFpbHMnKS5pcygnOnZpc2libGUnKSlcblx0XHR7XG5cdFx0XHR0aGlzLmRvbS5maW5kKCcubW9yZURldGFpbHMnKS5oaWRlKCk7XG5cdFx0XHR0aGlzLmRvbS5maW5kKCcuZWxlbWVudC1pdGVtJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1x0XG5cblx0XHRcdGxldCBlbGVtZW50SW5mb0Jhcl9uZXdIZWlnaHQgPSB0aGlzLmRvbS5maW5kKCcjZWxlbWVudC1pbmZvJykub3V0ZXJIZWlnaHQodHJ1ZSk7XG5cblx0XHRcdHRoaXMuZG9tLmFuaW1hdGUoeydoZWlnaHQnOiBlbGVtZW50SW5mb0Jhcl9uZXdIZWlnaHR9LCA0MDAsICdzd2luZycpO1xuXHRcdH1cdFxuXHR9O1xuXG5cdHVwZGF0ZUluZm9CYXJTaXplKClcblx0e1xuXHRcdGlmICghdGhpcy5pc0Rpc3BsYXllZEFzaWRlKCkpIHRoaXMuZG9tLmZpbmQoJy5tb3JlRGV0YWlscycpLmNzcygnaGVpZ2h0JywgJ2F1dG8nKTtcblx0XHRlbHNlIFxuXHRcdHtcdFx0XHRcblx0XHQgIFx0bGV0IGVsZW1lbnRJbmZvQmFyID0gdGhpcy5kb207XG5cdFx0ICBcdGxldCBoZWlnaHQgPSBlbGVtZW50SW5mb0Jhci5vdXRlckhlaWdodCh0cnVlKTtcblx0XHRcdFx0aGVpZ2h0IC09IGVsZW1lbnRJbmZvQmFyLmZpbmQoJy5jb2xsYXBzaWJsZS1oZWFkZXInKS5vdXRlckhlaWdodCh0cnVlKTtcblx0XHRcdFx0aGVpZ2h0IC09IGVsZW1lbnRJbmZvQmFyLmZpbmQoJy5pbnRlcmFjdGl2ZS1zZWN0aW9uOnZpc2libGUnKS5vdXRlckhlaWdodCh0cnVlKTtcblx0XHRcdFx0aGVpZ2h0IC09IGVsZW1lbnRJbmZvQmFyLmZpbmQoJy5pbmZvLWJhci10YWJzOnZpc2libGUnKS5vdXRlckhlaWdodCh0cnVlKTtcblx0XHRcdFx0aGVpZ2h0IC09IGVsZW1lbnRJbmZvQmFyLmZpbmQoXCIubWVudS1lbGVtZW50XCIpLm91dGVySGVpZ2h0KHRydWUpO1xuXG5cdFx0ICBcdHRoaXMuZG9tLmZpbmQoJy5jb2xsYXBzaWJsZS1ib2R5JykuY3NzKCdoZWlnaHQnLCBoZWlnaHQpO1xuXHRcdH1cblx0fVx0XG5cblx0cHJpdmF0ZSBzaG93Qm9keU1haW5UYWIoKSB7IHRoaXMuZG9tLmZpbmQoJy5pbmZvLWJhci10YWJzJykudGFicygnc2VsZWN0X3RhYicsICdib2R5LW1haW4tdGFiLWNvbnRlbnQnKTsgfVxufVxuXG4iLCJkZWNsYXJlIGxldCAkIDogYW55O1xuXG5pbXBvcnQgeyBBcHBNb2R1bGUsIEFwcE1vZGVzIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCAqIGFzIENvb2tpZXMgZnJvbSBcIi4uLy4uL3V0aWxzL2Nvb2tpZXNcIjtcblxuZXhwb3J0IGNsYXNzIE1hcENvbnRyb2xzQ29tcG9uZW50XG57ICAgIFxuICBsaXN0ZW5lckxheWVyQ2hhbmdlSGFzQmVlbkNyZWF0ZWQgPSBmYWxzZTtcblxuICBpbml0aWFsaXplKClcbiAge1xuICAgICQoJyNleHBvcnQtaWZyYW1lLWJ0bicpLmNsaWNrKCAoKSA9PiBcbiAgICB7IFxuICAgICAgJCgnI2V4cG9ydC1pZnJhbWUtYnRuJykuaGlkZVRvb2x0aXAoKTtcbiAgICAgIHRoaXMudXBkYXRlSWZyYW1lQ29kZSgpO1xuICAgICAgJCgnI21vZGFsLWlmcmFtZScpLm9wZW5Nb2RhbCgpOyBcbiAgICB9KTtcblxuICAgICQoJyNtYXAtZGVmYXVsdC12aWV3LWJ0bicpLmNsaWNrKCAoKSA9PlxuICAgIHtcbiAgICAgIEFwcC5nZW9jb2Rlci5nZW9jb2RlQWRkcmVzcygnJywgKHJlc3VsdCkgPT4geyBcbiAgICAgICAgQXBwLm1hcENvbXBvbmVudC5maXRCb3VuZHMoQXBwLmdlb2NvZGVyLmdldEJvdW5kcygpLCB0cnVlKTsgXG4gICAgICB9KTsgXG4gICAgfSk7XG5cbiAgICAkKCcjZ2VvbG9jYWxpemUtYnRuJykuY2xpY2soICgpID0+XG4gICAge1xuICAgICAgQXBwLnNlYXJjaEJhckNvbXBvbmVudC5nZW9sb2NhdGVVc2VyKCk7XG4gICAgfSk7XG5cbiAgICAkKCcuZmVhdHVyZS1idXR0b24nKS50b29sdGlwKCk7XG5cbiAgICAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbWFwICNjaGFuZ2UtbGF5ZXJzJykuY2xpY2soIChlKSA9PlxuICAgIHtcbiAgICAgICQoJyNkaXJlY3RvcnktY29udGVudC1tYXAgI2NoYW5nZS1sYXllcnMnKS5oaWRlVG9vbHRpcCgpO1xuICAgICAgdGhpcy5zaG93Q29udHJvbExheWVycygpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgICQoJyNkaXJlY3RvcnktY29udGVudC1tYXAgI2Nsb3NlLWxheWVycy1wYW5lbCcpLmNsaWNrKCAoZSkgPT5cbiAgICB7ICAgIFxuICAgICAgdGhpcy5oaWRlQ29udHJvbExheWVycygpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTsgIFxuXG4gICAgLy8gdXBkYXRlIGlmcmFtZSBjb2RlIHdoZW4gcGFyYW1zIGNoYW5nZVxuICAgICQoJyNtb2RhbC1pZnJhbWUgLmlmcmFtZS1wYXJhbScpLmNoYW5nZSggKCkgPT4geyB0aGlzLnVwZGF0ZUlmcmFtZUNvZGUoKTsgfSk7XG5cbiAgICAkKCcubGF5ZXJzLWJ1dHRvbicpLnRvb2x0aXAoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSWZyYW1lQ29kZSgpXG4gIHtcbiAgICBsZXQgc3JjID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICBzcmMgKz0gd2luZG93LmxvY2F0aW9uLnNlYXJjaC5sZW5ndGggPiAwID8gd2luZG93LmxvY2F0aW9uLnNlYXJjaCArICcmJyA6ICc/JztcbiAgICBzcmMgKz0gJ2lmcmFtZT0xJztcbiAgICBpZiAoJCgnI3BhcnQtdGF4b25vbXktY2hlY2tib3gnKS5pcygnOmNoZWNrZWQnKSkgc3JjICs9ICcmZnVsbFRheG9ub215PTAnO1xuICAgIFxuICAgIHZhciBzdGFtcHNJZHMgPSBbXTtcbiAgICAkKCcjbW9kYWwtaWZyYW1lIC5pZnJhbWUtcGFyYW0uc3RhbXAtcGFyYW0nKS5lYWNoKGZ1bmN0aW9uKCkgXG4gICAge1xuICAgICAgaWYgKCQodGhpcykuaXMoJzpjaGVja2VkJykpIHsgc3RhbXBzSWRzLnB1c2goJCh0aGlzKS5kYXRhKCdpZCcpKTsgfVxuICAgIH0pO1xuICAgIGlmIChzdGFtcHNJZHMubGVuZ3RoID4gMCkgc3JjICs9ICcmc3RhbXBzSWRzPScgKyBzdGFtcHNJZHMuam9pbignLCcpO1xuICAgIFxuICAgIHNyYyArPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblxuICAgIGxldCB3aWR0aCA9ICQoJyNpZnJhbWUtd2lkdGgnKS52YWwoKSA/ICQoJyNpZnJhbWUtd2lkdGgnKS52YWwoKSA6ICc4MDAnO1xuICAgIGxldCBoZWlnaHQgPSAkKCcjaWZyYW1lLWhlaWdodCcpLnZhbCgpID8gJCgnI2lmcmFtZS1oZWlnaHQnKS52YWwoKSA6ICc2MDAnO1xuXG4gICAgbGV0IGlmcmFtZUNvZGUgPSBgPGlmcmFtZSB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiJHtoZWlnaHR9XCIgc3JjPVwiJHtzcmN9XCIgZnJhbWVib3JkZXI9XCIwXCIgbWFyZ2luaGVpZ2h0PVwiMFwiIG1hcmdpbndpZHRoPVwiMFwiPjwvaWZyYW1lPmBcbiAgICAkKCcjbW9kYWwtaWZyYW1lICNpZnJhbWUtY29kZScpLnZhbChpZnJhbWVDb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGlzdGVuZXJGb3JMYXllcnMoKVxuICB7XG4gICAgaWYgKHRoaXMubGlzdGVuZXJMYXllckNoYW5nZUhhc0JlZW5DcmVhdGVkKSByZXR1cm47XG4gICAgXG4gICAgaWYgKEFwcC5jb25maWcubWFwLnNhdmVUaWxlTGF5ZXJJbkNvb2tpZXMpXG4gICAge1xuICAgICAgLy8gbGlzdGVuIGZvciBiYXNlIGxheWVyIHNlbGVjdGlvbiwgdG8gc3RvcmUgdmFsdWUgaW4gY29va2llXG4gICAgICAkKCcjZGlyZWN0b3J5LWNvbnRlbnQtbWFwIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNlbGVjdG9yJykuY2hhbmdlKCBmdW5jdGlvbihlKSBcbiAgICAgIHsgICAgXG4gICAgICAgIENvb2tpZXMuY3JlYXRlQ29va2llKCdkZWZhdWx0QmFzZUxheWVyJywgJCh0aGlzKS5zaWJsaW5ncygnc3BhbicpLnRleHQoKSwgMTAwKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMubGlzdGVuZXJMYXllckNoYW5nZUhhc0JlZW5DcmVhdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHNob3dDb250cm9sTGF5ZXJzKClcbiAge1xuICAgICQoJyNkaXJlY3RvcnktY29udGVudC1tYXAgLmxlYWZsZXQtY29udHJvbC1sYXllcnMnKS5zaG93KCk7XG4gICAgJCgnI2RpcmVjdG9yeS1jb250ZW50LW1hcCAjY2xvc2UtbGF5ZXJzLXBhbmVsJykuc2hvdygpO1xuICAgIHRoaXMuY3JlYXRlTGlzdGVuZXJGb3JMYXllcnMoKTtcbiAgfVxuXG4gIGhpZGVDb250cm9sTGF5ZXJzKClcbiAge1xuICAgICQoJyNkaXJlY3RvcnktY29udGVudC1tYXAgLmxlYWZsZXQtY29udHJvbC1sYXllcnMnKS5oaWRlKCk7XG4gICAgJCgnI2RpcmVjdG9yeS1jb250ZW50LW1hcCAjY2xvc2UtbGF5ZXJzLXBhbmVsJykuaGlkZSgpOyAgXG4gIH1cbn0iLCJpbXBvcnQgeyBBcHBNb2R1bGUsIEFwcFN0YXRlcyB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50LCBWaWV3UG9ydCwgRXZlbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5pbXBvcnQgeyBHZW9jb2RlUmVzdWx0LCBSYXdCb3VuZHMgfSBmcm9tIFwiLi4vLi4vbW9kdWxlcy9nZW9jb2Rlci5tb2R1bGVcIjtcbmltcG9ydCAqIGFzIENvb2tpZXMgZnJvbSBcIi4uLy4uL3V0aWxzL2Nvb2tpZXNcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmRlY2xhcmUgdmFyICQsIEwgOiBhbnk7XG5cbi8qKlxuKiBUaGUgTWFwIENvbXBvbmVudCB3aG8gZW5jYXBzdWxhdGUgdGhlIG1hcFxuKlxuKiBNYXBDb21wb25lbnQgcHVibGljcyBtZXRob2RzIG11c3QgYmUgYXMgaW5kZXBlbmRhbnQgYXMgcG9zc2libGVcbiogZnJvbSB0ZWNobm9sb2d5IHVzZWQgZm9yIHRoZSBtYXAgKGxlYWZsZXQgLi4uKVxuKlxuKiBNYXAgY29tcG9uZW50IGlzIGxpa2UgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIG1hcCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEFwcFxuKi9cbmV4cG9ydCBjbGFzcyBNYXBDb21wb25lbnRcbntcblx0b25NYXBSZWFkeSA9IG5ldyBFdmVudDxhbnk+KCk7XG5cdG9uTWFwTG9hZGVkID0gbmV3IEV2ZW50PGFueT4oKTtcblx0b25DbGljayA9IG5ldyBFdmVudDxhbnk+KCk7XG5cdG9uSWRsZSA9IG5ldyBFdmVudDxhbnk+KCk7XG5cblx0Ly9MZWFmbGV0IG1hcFxuXHRtYXBfIDogTC5NYXAgPSBudWxsO1xuXG5cdG1hcmtlckNsdXN0ZXJlckdyb3VwID0gbnVsbDtcblx0aXNJbml0aWFsaXplZCA6IGJvb2xlYW4gPSBmYWxzZTtcblx0aXNNYXBMb2FkZWQgOiBib29sZWFuID0gZmFsc2U7XG5cdG9sZFpvb20gPSAtMTtcblx0dmlld3BvcnQgOiBWaWV3UG9ydCA9IG51bGw7XG5cdC8vIHJlcXVlc3RlZCBib3VuZHMgd2hvIGNvdWxkIG5vdCBiZSBkaXNwbGF5ZWQgd2hlbiBtYXAgbm90IGluaXRpYWxpemVkIChzZWUgZml0Ym91bmRzIG1ldGhvZClcblx0d2FpdGluZ0JvdW5kcyA6IEwuTGF0TG5nQm91bmRzID0gbnVsbDtcblxuXHRnZXRNYXAoKXsgcmV0dXJuIHRoaXMubWFwXzsgfTsgXG5cdGdldENlbnRlcigpIDogTC5MYXRMbmcgeyByZXR1cm4gdGhpcy52aWV3cG9ydCA/IEwubGF0TG5nKHRoaXMudmlld3BvcnQubGF0LCB0aGlzLnZpZXdwb3J0LmxuZykgOiBudWxsOyB9XG5cdGdldEJvdW5kcygpIDogTC5MYXRMbmdCb3VuZHMgeyByZXR1cm4gdGhpcy5pc01hcExvYWRlZCA/IHRoaXMubWFwXy5nZXRCb3VuZHMoKSA6IG51bGw7IH1cblx0Z2V0Wm9vbSgpIHsgcmV0dXJuIHRoaXMubWFwXy5nZXRab29tKCk7IH1cblx0Z2V0T2xkWm9vbSgpIHsgcmV0dXJuIHRoaXMub2xkWm9vbTsgfVxuXG5cdHNob3coKSB7ICQoJyNkaXJlY3RvcnktY29udGVudC1tYXAnKS5zaG93KCk7IH1cblx0XG5cdGhpZGUoKSB7ICQoJyNkaXJlY3RvcnktY29udGVudC1tYXAnKS5oaWRlKCk7IH1cblxuXHRpbml0aWFsaXplKCkgXG5cdHtcdFxuXHRcdGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHsgdGhpcy5yZXNpemUoKTsgcmV0dXJuOyB9XG5cblx0XHRsZXQgY29uZmlnVGlsZUxheWVycyA9IEFwcC5jb25maWcubWFwLnRpbGVMYXllcnM7XG5cdFx0bGV0IGJhc2VMYXllcnMgPSB7fTtcblx0XHRmb3IobGV0IHRpbGVMYXllciBvZiBjb25maWdUaWxlTGF5ZXJzKVxuXHRcdHtcblx0XHRcdGJhc2VMYXllcnNbdGlsZUxheWVyLm5hbWVdID0gTC50aWxlTGF5ZXIodGlsZUxheWVyLnVybCwge2F0dHJpYnV0aW9uOiB0aWxlTGF5ZXIuYXR0cmlidXRpb259KTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZGVmYXVsdEJhc2VMYXllciBmcm9tIENvb2tpZSBpZiBwb3NzaWJsZVxuXHRcdGxldCBiYXNlTGF5ZXJJZCA9IEFwcC5jb25maWcubWFwLnNhdmVUaWxlTGF5ZXJJbkNvb2tpZXMgPyBDb29raWVzLnJlYWRDb29raWUoJ2RlZmF1bHRCYXNlTGF5ZXInKSA6IG51bGw7XG5cdFx0bGV0IGRlZmF1bHRCYXNlTGF5ZXIgPSBiYXNlTGF5ZXJzLmhhc093blByb3BlcnR5KGJhc2VMYXllcklkKSA/IGJhc2VMYXllcnNbYmFzZUxheWVySWRdIDogYmFzZUxheWVyc1tBcHAuY29uZmlnLm1hcC5kZWZhdWx0VGlsZUxheWVyXTtcblxuXHRcdHRoaXMubWFwXyA9IEwubWFwKCdkaXJlY3RvcnktY29udGVudC1tYXAnLCB7XG5cdFx0ICAgIHpvb21Db250cm9sOiBmYWxzZSxcblx0XHQgICAgbGF5ZXJzOiBbZGVmYXVsdEJhc2VMYXllcl1cblx0XHR9KTtcblxuXHRcdHRoaXMubWFya2VyQ2x1c3RlcmVyR3JvdXAgPSBMLm1hcmtlckNsdXN0ZXJHcm91cCh7XG5cdFx0ICAgIHNwaWRlcmZ5T25NYXhab29tOiB0cnVlLFxuXHRcdCAgICBzaG93Q292ZXJhZ2VPbkhvdmVyOiBmYWxzZSxcblx0XHQgICAgem9vbVRvQm91bmRzT25DbGljazogdHJ1ZSxcblx0XHQgICAgc3BpZGVyZnlPbkhvdmVyOiBmYWxzZSxcblx0XHQgICAgc3BpZGVyZnlNYXhDb3VudDogSW5maW5pdHksXG5cdFx0ICAgIHNwaWRlcmZ5RGlzdGFuY2VNdWx0aXBsaWVyOiAxLjEsXG5cdFx0ICAgIGNodW5rZWRMb2FkaW5nOiB0cnVlLFxuXHRcdCAgICBhbmltYXRlOiBmYWxzZSxcblx0XHQgICAgbWF4Q2x1c3RlclJhZGl1czogKHpvb20pID0+XG5cdFx0ICAgIHtcblx0XHQgICAgXHRpZiAoem9vbSA+IDEwKSByZXR1cm4gNjA7XG5cdFx0ICAgIFx0aWYgKHpvb20gPiA3KSByZXR1cm4gNzA7XG5cdFx0ICAgIFx0ZWxzZSByZXR1cm4gNzA7XG5cdFx0ICAgIH1cblx0XHR9KTtcblxuXHRcdHRoaXMubWFya2VyQ2x1c3RlcmVyR3JvdXAub24oJ3NwaWRlcmZpZWQnLCAoY2x1c3RlcnMsIG1hcmtlcnMpID0+XG5cdFx0e1xuXHRcdFx0QXBwLmVsZW1lbnRzTW9kdWxlLnVwZGF0ZUVsZW1lbnRzSWNvbnModHJ1ZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmFkZE1hcmtlckNsdXN0ZXJHcm91cCgpO1x0XHRcblxuXHRcdEwuY29udHJvbC56b29tKHtwb3NpdGlvbjondG9wcmlnaHQnfSkuYWRkVG8odGhpcy5tYXBfKTtcdFx0XG5cdFx0TC5jb250cm9sLmxheWVycyhiYXNlTGF5ZXJzLCB7fSwge3Bvc2l0aW9uOid0b3ByaWdodCcsIGNvbGxhcHNlZDogZmFsc2V9KS5hZGRUbyh0aGlzLm1hcF8pO1xuXG5cdFx0dGhpcy5tYXBfLm9uKCdzaW5nbGVjbGljaycsIChlKSA9PiB7IHRoaXMub25DbGljay5lbWl0KCk7IH0pO1xuXHRcdHRoaXMubWFwXy5vbignbW92ZWVuZCcsIChlKSA9PiBcblx0XHR7IFxuXHRcdFx0bGV0IHZpc2libGVNYXJrZXJzTGVuZ3RoID0gJCgnLmxlYWZsZXQtbWFya2VyLWljb246dmlzaWJsZScpLmxlbmd0aDtcdFx0XG5cdFx0XHRBcHAuYm91bmRzTW9kdWxlLmV4dGVuZE1hcEJvdW5kcyh0aGlzLm9sZFpvb20sIHRoaXMubWFwXy5nZXRab29tKCksIHZpc2libGVNYXJrZXJzTGVuZ3RoKTtcdFx0XHRcblx0XHRcdFxuXHRcdFx0dGhpcy51cGRhdGVWaWV3UG9ydCgpO1xuXHRcdFx0dGhpcy5vbklkbGUuZW1pdCgpOyBcblx0XHRcdHRoaXMub2xkWm9vbSA9IHRoaXMubWFwXy5nZXRab29tKCk7XHRcdFx0XG5cdFx0fSk7XG5cdFx0dGhpcy5tYXBfLm9uKCdsb2FkJywgKGUpID0+IFxuXHRcdHsgXG5cdFx0XHR0aGlzLmlzTWFwTG9hZGVkID0gdHJ1ZTsgXG5cdFx0XHR0aGlzLm9uTWFwTG9hZGVkLmVtaXQoKTtcdFx0XHRcblx0XHR9KTtcblxuXHRcdHRoaXMucmVzaXplKCk7XG5cdFx0dGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcblxuXHRcdC8vIGlmIHdlIGJlZ2FuIHdpdGggTGlzdCBNb2RlLCB3aGVuIHdlIGluaXRpYWxpemUgbWFwXG5cdFx0Ly8gdGhlcmUgaXMgYWxyZWFkeSBhbiBhZGRyZXNzIGdlb2NvZGVkIG9yIGEgdmlld3BvcnQgZGVmaW5lZFxuXHRcdGlmICh0aGlzLndhaXRpbmdCb3VuZHMpIHRoaXMuZml0Qm91bmRzKHRoaXMud2FpdGluZ0JvdW5kcywgZmFsc2UpO1xuXHRcdGVsc2UgaWYgKHRoaXMudmlld3BvcnQpIHNldFRpbWVvdXQoICgpID0+IHsgdGhpcy5zZXRWaWV3UG9ydCh0aGlzLnZpZXdwb3J0KTsgfSwyMDApO1xuXHRcdFxuXHRcdHRoaXMub25NYXBSZWFkeS5lbWl0KCk7XG5cdH07XG5cblx0YWRkTWFya2VyQ2x1c3Rlckdyb3VwKCkgeyB0aGlzLm1hcF8uYWRkTGF5ZXIodGhpcy5tYXJrZXJDbHVzdGVyZXJHcm91cCk7IH1cblxuXHRyZXNpemUoKVxuXHR7XG5cdFx0Ly9jb25zb2xlLmxvZyhcIlJlc2l6ZSwgY3VyciB2aWV3cG9ydCA6XCIpO1xuXHRcdC8vIFdhcm5pbmcgIUkgY2hhbmdlZCB0aGUgbGVhZmxldC5qcyBmaWxlIGxpYnJhcnkgbXlzZWxmXG5cdFx0Ly8gYmVjYXVzZSB0aGUgb3B0aW9ucyBkb2Vzbid0IHdvcmsgcHJvcGVybHlcblx0XHQvLyBJIGNoYW5nZWQgaXQgdG8gYXZvaWQgcGFubmluZyB3aGVuIHJlc2l6aW5nIHRoZSBtYXBcblx0XHQvLyBiZSBjYXJlZnVsIGlmIHVwZGF0aW5nIHRoZSBsZWFmbGV0IGxpYnJhcnkgdGhpcyB3aWxsXG5cdFx0Ly8gbm90IHdvcmsgYW55bW9yZVxuXHRcdGlmICh0aGlzLm1hcF8pIHRoaXMubWFwXy5pbnZhbGlkYXRlU2l6ZShmYWxzZSk7XG5cdH1cblxuXHRhZGRNYXJrZXIobWFya2VyIDogTC5NYXJrZXIpXG5cdHtcblx0XHR0aGlzLm1hcmtlckNsdXN0ZXJlckdyb3VwLmFkZExheWVyKG1hcmtlcik7XG5cdH1cblxuXHRhZGRNYXJrZXJzKG1hcmtlcnMgOiBMLk1hcmtlcltdKVxuXHR7XG5cdFx0aWYgKHRoaXMubWFya2VyQ2x1c3RlcmVyR3JvdXApIHRoaXMubWFya2VyQ2x1c3RlcmVyR3JvdXAuYWRkTGF5ZXJzKG1hcmtlcnMpO1xuXHR9XG5cblx0cmVtb3ZlTWFya2VyKG1hcmtlciA6IEwuTWFya2VyKVxuXHR7XG5cdFx0dGhpcy5tYXJrZXJDbHVzdGVyZXJHcm91cC5yZW1vdmVMYXllcihtYXJrZXIpO1xuXHR9XG5cblx0cmVtb3ZlTWFya2VycyhtYXJrZXJzIDogTC5NYXJrZXJbXSlcblx0e1xuXHRcdGlmICh0aGlzLm1hcmtlckNsdXN0ZXJlckdyb3VwKSB0aGlzLm1hcmtlckNsdXN0ZXJlckdyb3VwLnJlbW92ZUxheWVycyhtYXJrZXJzKTtcblx0fVxuXG5cdGNsZWFyTWFya2VycygpXG5cdHtcblx0XHRpZiAodGhpcy5tYXJrZXJDbHVzdGVyZXJHcm91cCkgdGhpcy5tYXJrZXJDbHVzdGVyZXJHcm91cC5jbGVhckxheWVycygpO1xuXHR9XG5cblx0Zml0RWxlbWVudHNCb3VuZHMoZWxlbWVudHMgOiBFbGVtZW50W10pXG5cdHtcblx0XHRsZXQgYm91bmRzID0gTC5sYXRMbmdCb3VuZHMoKTtcblx0XHRmb3IobGV0IGVsZW1lbnQgb2YgZWxlbWVudHMpIGJvdW5kcy5leHRlbmQoZWxlbWVudC5wb3NpdGlvbik7XG5cdFx0dGhpcy5maXRCb3VuZHMoYm91bmRzKTtcblx0fVxuXG5cdC8vIGZpdCBtYXAgdmlldyB0byBib3VuZHNcblx0Zml0Qm91bmRzKGJvdW5kcyA6IEwuTGF0TG5nQm91bmRzLCBhbmltYXRlIDogYm9vbGVhbiA9IHRydWUpXG5cdHtcblx0XHQvLyBjb25zb2xlLmxvZyhcImZpdGJvdW5kc1wiLCBib3VuZHMpO1xuXHRcdGlmICghdGhpcy5pc0luaXRpYWxpemVkKVxuXHRcdHtcblx0XHRcdHRoaXMud2FpdGluZ0JvdW5kcyA9IGJvdW5kcztcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0LyppZiAodGhpcy5pc01hcExvYWRlZCAmJiBhbmltYXRlKSBBcHAubWFwKCkuZmx5VG9Cb3VuZHMoYm91bmRzKTtcblx0XHRlbHNlKi8gQXBwLm1hcCgpLmZpdEJvdW5kcyhib3VuZHMpO1xuXHRcdHNldFRpbWVvdXQoICgpID0+IHsgQXBwLm1hcE1hbmFnZXIuaGFuZGxlTWFwSWRsZSgpOyBjb25zb2xlLmxvZyhcImZvcmNlIGlkbGVcIik7IH0sIDUwMCk7XG5cdH1cdFx0XG5cblx0Zml0RGVmYXVsdEJvdW5kcygpXG5cdHtcblx0XHR0aGlzLmZpdEJvdW5kcyhBcHAuYm91bmRzTW9kdWxlLmRlZmF1bHRCb3VuZHMpO1xuXHR9XG5cblx0cGFuVG9Mb2NhdGlvbihsb2NhdGlvbiA6IEwuTGF0TG5nLCB6b29tPywgYW5pbWF0ZSA6IGJvb2xlYW4gPSB0cnVlKVxuXHR7XG5cdFx0em9vbSA9IHpvb20gfHwgdGhpcy5nZXRab29tKCkgfHwgMTI7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJwYW5Ub2xvY2F0aW9uXCIsIGxvY2F0aW9uKTtcblxuXHRcdC8qaWYgKHRoaXMuaXNNYXBMb2FkZWQgJiYgYW5pbWF0ZSkgdGhpcy5tYXBfLmZseVRvKGxvY2F0aW9uLCB6b29tKTtcblx0XHRlbHNlKi8gdGhpcy5tYXBfLnNldFZpZXcobG9jYXRpb24sIHpvb20pO1xuXHR9O1xuXG5cdC8vIHRoZSBhY3R1YWwgZGlzcGxheWVkIG1hcCByYWRpdXMgKGRpc3RhbmNlIGZyb20gY3JvbmVyIHRvIGNlbnRlcilcblx0bWFwUmFkaXVzSW5LbSgpIDogbnVtYmVyXG5cdHtcblx0XHRpZiAoIXRoaXMuaXNNYXBMb2FkZWQpIHJldHVybiAwO1xuXHRcdHJldHVybiBNYXRoLmZsb29yKHRoaXMubWFwXy5nZXRCb3VuZHMoKS5nZXROb3J0aEVhc3QoKS5kaXN0YW5jZVRvKHRoaXMubWFwXy5nZXRDZW50ZXIoKSkgLyAxMDAwKTtcblx0fVxuXG5cdC8vIGRpc3RhbmNlIGZyb20gbGFzdCBzYXZlZCBsb2NhdGlvbiB0byBhIHBvc2l0aW9uXG5cdGRpc3RhbmNlRnJvbUxvY2F0aW9uVG8ocG9zaXRpb24gOiBMLkxhdExuZylcblx0e1xuXHRcdGlmICghQXBwLmdlb2NvZGVyLmdldExvY2F0aW9uKCkpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiBBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb24oKS5kaXN0YW5jZVRvKHBvc2l0aW9uKSAvIDEwMDA7XG5cdH1cblxuXHRjb250YWlucyhwb3NpdGlvbiA6IEwuTGF0TG5nRXhwcmVzc2lvbikgOiBib29sZWFuXG5cdHtcblx0XHRpZiAocG9zaXRpb24gJiYgdGhpcy5pc01hcExvYWRlZClcblx0XHR7XG5cdFx0XHQgcmV0dXJuIHRoaXMubWFwXy5nZXRCb3VuZHMoKS5jb250YWlucyhwb3NpdGlvbik7XG5cdFx0fVxuXHRcdGNvbnNvbGUubG9nKFwiTWFwQ29tcG9uZW50LT5jb250YWlucyA6IG1hcCBub3QgbG9hZGVkIG9yIGVsZW1lbnQgcG9zaXRpb24gdW5kZWZpbmVkXCIpO1xuXHRcdHJldHVybiBmYWxzZTtcdFx0XG5cdH1cblxuXHRleHRlbmRlZENvbnRhaW5zKHBvc2l0aW9uIDogTC5MYXRMbmdFeHByZXNzaW9uKSA6IGJvb2xlYW5cblx0e1xuXHRcdGlmICh0aGlzLmlzTWFwTG9hZGVkICYmIHBvc2l0aW9uKVxuXHRcdHtcblx0XHRcdCByZXR1cm4gQXBwLmJvdW5kc01vZHVsZS5leHRlbmRlZEJvdW5kcy5jb250YWlucyhwb3NpdGlvbik7XG5cdFx0fVxuXHRcdC8vY29uc29sZS5sb2coXCJNYXBDb21wb25lbnQtPmNvbnRhaW5zIDogbWFwIG5vdCBsb2FkZWQgb3IgZWxlbWVudCBwb3NpdGlvbiB1bmRlZmluZWRcIik7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0dXBkYXRlVmlld1BvcnQoKVxuXHR7XG5cdFx0aWYgKCF0aGlzLnZpZXdwb3J0KSB0aGlzLnZpZXdwb3J0ID0gbmV3IFZpZXdQb3J0KCk7XG5cdFx0dGhpcy52aWV3cG9ydC5sYXQgPSAgdGhpcy5tYXBfLmdldENlbnRlcigpLmxhdDtcblx0XHR0aGlzLnZpZXdwb3J0LmxuZyA9ICB0aGlzLm1hcF8uZ2V0Q2VudGVyKCkubG5nO1xuXHRcdHRoaXMudmlld3BvcnQuem9vbSA9IHRoaXMuZ2V0Wm9vbSgpO1xuXHR9XHRcblxuXHRzZXRWaWV3UG9ydCgkdmlld3BvcnQgOiBWaWV3UG9ydCwgJHBhbk1hcFRvVmlld3BvcnQgOiBib29sZWFuID0gdHJ1ZSlcblx0e1x0XHRcblx0XHRpZiAodGhpcy5tYXBfICYmICR2aWV3cG9ydCAmJiAkcGFuTWFwVG9WaWV3cG9ydClcblx0XHR7XG5cdFx0XHQvL2NvbnNvbGUubG9nKFwic2V0Vmlld1BvcnRcIiwgJHZpZXdwb3J0KTtcblx0XHRcdGxldCB0aW1lb3V0ID0gQXBwLnN0YXRlID09IEFwcFN0YXRlcy5TaG93RWxlbWVudEFsb25lID8gNTAwIDogMDtcblx0XHRcdHNldFRpbWVvdXQoICgpID0+IHsgdGhpcy5tYXBfLnNldFZpZXcoTC5sYXRMbmcoJHZpZXdwb3J0LmxhdCwgJHZpZXdwb3J0LmxuZyksICR2aWV3cG9ydC56b29tKSB9LCB0aW1lb3V0KTtcblx0XHR9XG5cdFx0dGhpcy52aWV3cG9ydCA9ICR2aWV3cG9ydDtcblx0fVxuXG5cdGlzTWFwQm91bmRzKCkgeyByZXR1cm4gdGhpcy5nZXRNYXAoKSAmJiB0aGlzLmdldE1hcCgpLmdldEJvdW5kcygpOyB9XG5cblx0aGFzWm9vbWVkSW4oKVxuICB7XG4gICAgbGV0IHpvb20gPSB0aGlzLmdldFpvb20oKTtcbiAgICBsZXQgb2xkX3pvb20gPSB0aGlzLmdldE9sZFpvb20oKTtcbiAgICByZXR1cm4gKHpvb20gIT0gb2xkX3pvb20gJiYgb2xkX3pvb20gIT0gLTEgJiYgem9vbSA+IG9sZF96b29tKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMTItMTNcbiAqL1xuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcblxuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuZGVjbGFyZSBsZXQgJCwgTCA6IGFueTtcblxuZXhwb3J0IGNsYXNzIE1hcmtlclxue1xuXHRwcml2YXRlIGVsZW1lbnRJZCA6IHN0cmluZztcblx0cHJpdmF0ZSBpc0FuaW1hdGluZyA6IGJvb2xlYW4gPSBmYWxzZTtcblx0Ly8gd2UgdXNlIGxlYWZsZXQgbWFya2VycyB0byBkaXNwbGF5IG1hcmtlciBvbiBtYXAuIE1hcmtlciBpcyBqdXN0IGEgZXh0ZW5zaW9uIG9mIGxlYWZsZXRNYXJrZXJcblx0cHJpdmF0ZSBsZWFmbGV0TWFya2VyIDogTC5NYXJrZXI7XG5cdC8vIHdlIG1heSB3YW50IHRvIGhhbGYgaGlkZGVuIHNvbWVzIG1hcmtlcnMgaW4gcGFydGljdWxhciBzdGF0ZXMgKHNldHRpbmcgb3BhY2l0eSB0byAuNSlcblx0cHJpdmF0ZSBoYWxmSGlkZGVuIDogYm9vbGVhbiA9IGZhbHNlO1xuXHQvLyB3ZSB1bmNsZXN0ZXJpemUgc21hbGwgY2x1c3RlcnMgdG8gc2hvdyBkaXJlY3RseSB0aGUgbWFya2Vycy4gRm9yIHRoZSBtYXJrZXJzIHRvIGJlIHZpc2libGUsIHdpIGluY2xpbmF0ZSBzb21lIG9mIHRoZW0gdG8gcmlnaHQgb2YgbGVmdFxuXHRwcml2YXRlIGluY2xpbmF0aW9uID0gXCJub3JtYWxcIjtcblxuXHRjb25zdHJ1Y3RvcihlbGVtZW50SWQgOiBzdHJpbmcsIHBvc2l0aW9uXyA6IEwuTGF0TG5nKSBcblx0e1xuXHRcdHRoaXMuZWxlbWVudElkID0gZWxlbWVudElkO1xuXG5cdFx0aWYgKCFwb3NpdGlvbl8pXG5cdFx0e1xuXHRcdFx0bGV0IGVsZW1lbnQgPSB0aGlzLmdldEVsZW1lbnQoKTtcblx0XHRcdGlmIChlbGVtZW50ID09PSBudWxsKSBjb25zb2xlLmxvZyhcImVsZW1lbnQgbm9uIGdlb2xvY2FsaXplZCBpZCA9IFwiICsgdGhpcy5lbGVtZW50SWQpO1xuXHRcdFx0ZWxzZSBwb3NpdGlvbl8gPSBlbGVtZW50LnBvc2l0aW9uO1xuXHRcdH0gXG5cblx0XHR0aGlzLmxlYWZsZXRNYXJrZXIgPSBMLm1hcmtlcihwb3NpdGlvbl8sIHsgJ3Jpc2VPbkhvdmVyJyA6IHRydWV9KTtcdFx0XHRcdFxuXHRcdHRoaXMubGVhZmxldE1hcmtlci5vbignY2xpY2snLCAoZXYpID0+IHsgQXBwLm1hcE1hbmFnZXIuaGFuZGxlTWFya2VyQ2xpY2sodGhpcyk7IH0pO1x0XG5cdFx0dGhpcy5sZWFmbGV0TWFya2VyLm9uKCdtb3VzZW92ZXInLCAoZXYpID0+IHsgaWYgKCF0aGlzLmlzQW5pbWF0aW5nKSB0aGlzLnNob3dCaWdTaXplKCk7IH0pO1xuXHRcdHRoaXMubGVhZmxldE1hcmtlci5vbignbW91c2VvdXQnLCAoZXYpID0+IHsgaWYgKCF0aGlzLmlzQW5pbWF0aW5nKSB0aGlzLnNob3dOb3JtYWxTaXplKCk7IH0pO1xuXHRcdHRoaXMubGVhZmxldE1hcmtlci5zZXRJY29uKEwuZGl2SWNvbih7Y2xhc3NOYW1lOiAnbGVhZmxldC1tYXJrZXItY29udGFpbmVyJywgaHRtbDogXCI8c3BhbiBpZD1cXFwibWFya2VyLVwiKyB0aGlzLmVsZW1lbnRJZCArIFwiXFxcIiBnb2dvLWljb24tbWFya2VyPjwvc3Bhbj5cIn0pKTtcblx0fTtcdFx0XG5cblx0dXBkYXRlKCkgXG5cdHtcdFx0XG5cdFx0bGV0IGVsZW1lbnQgPSB0aGlzLmdldEVsZW1lbnQoKTtcblxuXHRcdGxldCBkaXNhYmxlTWFya2VyID0gZmFsc2U7XG5cdFx0bGV0IHNob3dNb3JlSWNvbiA9IHRydWU7XG5cblx0XHRsZXQgb3B0aW9uc1RvRGlzcGxheSA9IGVsZW1lbnQuZ2V0SWNvbnNUb0Rpc3BsYXkoKTtcblxuXHRcdGxldCBodG1sTWFya2VyID0gQXBwLnRlbXBsYXRlTW9kdWxlLnJlbmRlcignbWFya2VyJywgXG5cdFx0e1xuXHRcdFx0ZWxlbWVudCA6IGVsZW1lbnQsIFxuXHRcdFx0bWFpbk9wdGlvblRvRGlzcGxheTogb3B0aW9uc1RvRGlzcGxheVswXSxcblx0XHRcdG90aGVyT3B0aW9uc1RvRGlzcGxheTogb3B0aW9uc1RvRGlzcGxheS5zbGljZSgxKSwgXG5cdFx0XHRzaG93TW9yZUljb24gOiBzaG93TW9yZUljb24sXG5cdFx0XHRkaXNhYmxlTWFya2VyIDogZGlzYWJsZU1hcmtlcixcblx0XHRcdHBlbmRpbmdDbGFzcyA6IGVsZW1lbnQuaXNQZW5kaW5nKCkgJiYgQXBwLmNvbmZpZy5pc0ZlYXR1cmVBdmFpbGFibGUoJ3BlbmRpbmcnKSA/ICdwZW5kaW5nJyA6ICcnLFxuXHRcdFx0c2hvd1BlbmRpbmcgOiBlbGVtZW50LmlzUGVuZGluZygpICYmIEFwcC5jb25maWcuaXNGZWF0dXJlQXZhaWxhYmxlKCdwZW5kaW5nJyksXG5cdFx0XHRjb25maWcgOiBBcHAuY29uZmlnXG5cdFx0fSk7XG5cblx0XHQvLyBzYXZlIHRoZSBjbGFzcyBiZWNhdXNlIGl0IGhhcyBiZWVuIG1vZGlmaWVkIGJ5IG1hcmtlciBjbHVzdGVyIGFkZGluZyBvclxuXHRcdC8vIHJlbW92aW5nIHRoZSBcInJvdGF0ZVwiIGNsYXNzXHRcblx0XHRsZXQgb2xkQ2xhc3NOYW1lID0gKDxhbnk+dGhpcy5sZWFmbGV0TWFya2VyKS5faWNvbiA/ICAoPGFueT50aGlzLmxlYWZsZXRNYXJrZXIpLl9pY29uLmNsYXNzTmFtZSA6ICdsZWFmbGV0LW1hcmtlci1jb250YWluZXInO1xuXHRcdG9sZENsYXNzTmFtZS5yZXBsYWNlKCdsZWFmbGV0LW1hcmtlci1pY29uJywgJycpO1xuICBcdHRoaXMubGVhZmxldE1hcmtlci5zZXRJY29uKEwuZGl2SWNvbih7Y2xhc3NOYW1lOiBvbGRDbGFzc05hbWUsIGh0bWw6IGh0bWxNYXJrZXJ9KSk7XHRcblxuICBcdGlmICh0aGlzLmlzRGlzcGxheWVkT25FbGVtZW50SW5mb0JhcigpKSB0aGlzLnNob3dCaWdTaXplKCk7XG5cdH07XG5cblx0YW5pbWF0ZURyb3AoKSBcblx0e1xuXHRcdHRoaXMuaXNBbmltYXRpbmcgPSB0cnVlO1xuXHRcdHRoaXMuZG9tTWFya2VyKCkuYW5pbWF0ZSh7dG9wOiAnLT0yNXB4J30sIDMwMCwgJ2Vhc2VJbk91dEN1YmljJyk7XG5cdFx0dGhpcy5kb21NYXJrZXIoKS5hbmltYXRlKHt0b3A6ICcrPTI1cHgnfSwgMjUwLCAnZWFzZUluT3V0Q3ViaWMnLCAoKSA9PiB7dGhpcy5pc0FuaW1hdGluZyA9IGZhbHNlOyB0aGlzLmRvbU1hcmtlcigpLmNzcygndG9wJywgJ2F1dG8nKX0gKTtcblx0fTtcdFxuXG5cdHNob3dCaWdTaXplKCkgXG5cdHtcdFx0XHRcblx0XHR0aGlzLmFkZENsYXNzVG9MZWFmbGV0TWFya2VyXyhcIkJpZ1NpemVcIik7XG5cdFx0bGV0IGRvbU1hcmtlciA9IHRoaXMuZG9tTWFya2VyKCk7XG5cdFx0ZG9tTWFya2VyLnBhcmVudCgpLmZpbmQoJy5tYXJrZXItbmFtZScpLnNob3coKTtcblx0XHRkb21NYXJrZXIuZmluZCgnLm1vcmVJY29uQ29udGFpbmVyJykuc2hvdygpO1xuXHRcdGRvbU1hcmtlci5maW5kKCcuZ29nby1pY29uLXBsdXMtY2lyY2xlJykuaGlkZSgpO1xuXHR9O1xuXG5cdHNob3dOb3JtYWxTaXplKCRmb3JjZSA6IGJvb2xlYW4gPSBmYWxzZSkgXG5cdHtcdFxuXHRcdGlmICghJGZvcmNlICYmIHRoaXMuaXNEaXNwbGF5ZWRPbkVsZW1lbnRJbmZvQmFyKCkpIHJldHVybjtcblxuXHRcdGxldCBkb21NYXJrZXIgPSB0aGlzLmRvbU1hcmtlcigpO1xuXHRcdHRoaXMucmVtb3ZlQ2xhc3NUb0xlYWZsZXRNYXJrZXJfKFwiQmlnU2l6ZVwiKTtcblx0XHRkb21NYXJrZXIucGFyZW50KCkuZmluZCgnLm1hcmtlci1uYW1lJykuaGlkZSgpO1xuXHRcdGRvbU1hcmtlci5maW5kKCcubW9yZUljb25Db250YWluZXInKS5oaWRlKCk7XG5cdFx0ZG9tTWFya2VyLmZpbmQoJy5nb2dvLWljb24tcGx1cy1jaXJjbGUnKS5zaG93KCk7XG5cdH07XG5cblx0c2hvd0hhbGZIaWRkZW4oJGZvcmNlIDogYm9vbGVhbiA9IGZhbHNlKSBcblx0e1x0XHRcblx0XHRpZiAoISRmb3JjZSAmJiB0aGlzLmlzRGlzcGxheWVkT25FbGVtZW50SW5mb0JhcigpKSByZXR1cm47XG5cblx0XHR0aGlzLmFkZENsYXNzVG9MZWFmbGV0TWFya2VyXyhcImhhbGZIaWRkZW5cIik7XG5cdFx0bGV0IGRvbU1hcmtlciA9IHRoaXMuZG9tTWFya2VyKCk7XG5cdFx0ZG9tTWFya2VyLmNzcygnei1pbmRleCcsJzEnKTtcblx0XHRkb21NYXJrZXIuZmluZCgnLmdvZ28taWNvbi1wbHVzLWNpcmNsZScpLmFkZENsYXNzKFwiaGFsZkhpZGRlblwiKTtcblx0XHRkb21NYXJrZXIuZmluZCgnLm1vcmVJY29uQ29udGFpbmVyJykuYWRkQ2xhc3MoXCJoYWxmSGlkZGVuXCIpO1xuXG5cdFx0dGhpcy5oYWxmSGlkZGVuID0gdHJ1ZTtcblx0fTtcblxuXHRzaG93Tm9ybWFsSGlkZGVuKCkgXG5cdHtcdFx0XG5cdFx0dGhpcy5yZW1vdmVDbGFzc1RvTGVhZmxldE1hcmtlcl8oXCJoYWxmSGlkZGVuXCIpO1xuXHRcdGxldCBkb21NYXJrZXIgPSB0aGlzLmRvbU1hcmtlcigpO1xuXHRcdGRvbU1hcmtlci5jc3MoJ3otaW5kZXgnLCcxMCcpO1xuXHRcdGRvbU1hcmtlci5maW5kKCcuZ29nby1pY29uLXBsdXMtY2lyY2xlJykucmVtb3ZlQ2xhc3MoXCJoYWxmSGlkZGVuXCIpO1xuXHRcdGRvbU1hcmtlci5maW5kKCcubW9yZUljb25Db250YWluZXInKS5yZW1vdmVDbGFzcyhcImhhbGZIaWRkZW5cIik7XG5cblx0XHR0aGlzLmhhbGZIaWRkZW4gPSBmYWxzZTtcblx0fTtcblxuXHRwcml2YXRlIGFkZENsYXNzVG9MZWFmbGV0TWFya2VyXyhjbGFzc1RvQWRkKSBcblx0e1x0XHRcblx0XHR0aGlzLmRvbU1hcmtlcigpLmFkZENsYXNzKGNsYXNzVG9BZGQpO1xuXHRcdHRoaXMuZG9tTWFya2VyKCkuc2libGluZ3MoJy5tYXJrZXItbmFtZScpLmFkZENsYXNzKGNsYXNzVG9BZGQpOyBcblx0fTtcblxuXHRwcml2YXRlIHJlbW92ZUNsYXNzVG9MZWFmbGV0TWFya2VyXyhjbGFzc1RvUmVtb3ZlKSBcblx0e1x0XHRcblx0XHR0aGlzLmRvbU1hcmtlcigpLnJlbW92ZUNsYXNzKGNsYXNzVG9SZW1vdmUpO1xuXHRcdHRoaXMuZG9tTWFya2VyKCkuc2libGluZ3MoJy5tYXJrZXItbmFtZScpLnJlbW92ZUNsYXNzKGNsYXNzVG9SZW1vdmUpOyAgICAgIFxuXHR9O1xuXG5cdGlzRGlzcGxheWVkT25FbGVtZW50SW5mb0JhcigpIHsgcmV0dXJuIEFwcC5pbmZvQmFyQ29tcG9uZW50LmdldEN1cnJFbGVtZW50SWQoKSA9PSB0aGlzLmVsZW1lbnRJZDsgfVxuXG5cdGRvbU1hcmtlcigpIHsgcmV0dXJuICQoJyNtYXJrZXItJysgdGhpcy5lbGVtZW50SWQpOyB9XG5cblx0Z2V0SWQgKCkgOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5lbGVtZW50SWQ7IH07XG5cblx0Z2V0TGVhZmxldE1hcmtlciAoKSA6IEwuTWFya2VyIHsgcmV0dXJuIHRoaXMubGVhZmxldE1hcmtlcjsgfTtcblxuXHRpc0hhbGZIaWRkZW4oKSA6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5oYWxmSGlkZGVuOyB9XG5cblx0Z2V0RWxlbWVudCAoKSA6IEVsZW1lbnQgeyByZXR1cm4gQXBwLmVsZW1lbnRzTW9kdWxlLmdldEVsZW1lbnRCeUlkKHRoaXMuZWxlbWVudElkKTsgfTtcblxuXHRnZXRQb3NpdGlvbiAoKSA6IEwuTGF0TG5nIHsgcmV0dXJuIHRoaXMubGVhZmxldE1hcmtlci5nZXRMYXRMbmcoKTsgfTtcbn1cblxuIiwiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmRlY2xhcmUgdmFyICQgOiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdE1vZGFsQ29tcG9uZW50XG57XG5cdGRvbSA6IGFueTtcblx0ZWxlbWVudCA6IEVsZW1lbnQ7XHRcblx0cHJvdGVjdGVkIGFqYXhVcmwgPSBcIlwiO1xuXG5cdGNvbnN0cnVjdG9yKGRvbSA6IHN0cmluZylcblx0e1xuXHRcdHRoaXMuZG9tID0gJChkb20pO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZSgpO1xuXHRcdHRoaXMuYmluZHMoKTtcblx0fVxuXG5cdHByb3RlY3RlZCBpbml0aWFsaXplKCkge31cblxuXHRwcm90ZWN0ZWQgYmluZHMoKVxuXHR7XG5cdFx0dGhpcy5kb20uZmluZCgnYnV0dG9uW3R5cGU9c3VibWl0XScpLmNsaWNrKChlKSA9PiB0aGlzLmhhbmRsZVN1Ym1pdChlKSk7XG5cdH1cblxuXHRvcGVuKGVsZW1lbnQgOiBFbGVtZW50KVxuXHR7XHRcdFxuXHRcdHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cdFx0dGhpcy5jbGVhckxvYWRlcigpO1xuXHRcdHRoaXMuZG9tLmZpbmQoJy5nZW5lcmljLWVycm9yLW1lc3NhZ2UnKS5oaWRlKCk7XG5cdFx0dGhpcy5iZWZvcmVPcGVuKGVsZW1lbnQpO1xuXHRcdHRoaXMuZG9tLm9wZW5Nb2RhbCgpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGJlZm9yZU9wZW4oZWxlbWVudCA6IEVsZW1lbnQpIHsgfVxuXG5cdHByb3RlY3RlZCBoYW5kbGVTdWJtaXQoZSkgXG5cdHtcblx0XHRpZiAoIXRoaXMuZWxlbWVudCkgcmV0dXJuO1xuXHRcdHRoaXMuZGlzcGxheUxvYWRlcigpO1xuXHRcdHRoaXMuc3VibWl0KCk7XHRcdFxuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtlLnByZXZlbnREZWZhdWx0KCk7XG5cdH1cblxuXHRzdWJtaXQoKSB7fVxuXG5cdHByb3RlY3RlZCBzZW5kUmVxdWVzdChkYXRhKVxuXHR7XG5cdFx0QXBwLmFqYXhNb2R1bGUuc2VuZFJlcXVlc3QodGhpcy5hamF4VXJsLCAncG9zdCcsIGRhdGEsXG5cdFx0ICAocmVzcG9uc2UpICAgICA9PiB7IFxuXHRcdCAgXHRcdHNldFRpbWVvdXQoICgpID0+IHRoaXMuY2xlYXJMb2FkZXIoKSwgNTAwKTsgXG5cdFx0ICBcdFx0dGhpcy5vblN1Y2Nlc3MocmVzcG9uc2UpO1xuXHRcdCAgXHR9LFxuXHRcdCAgKGVycm9yTWVzc2FnZSkgPT4geyB0aGlzLmNsZWFyTG9hZGVyKCk7IHRoaXMub25FcnJvcihlcnJvck1lc3NhZ2UpOyB9XG5cdFx0KTsgXG5cdH1cblxuXHRwcm90ZWN0ZWQgZGlzcGxheUxvYWRlcigpXG5cdHtcblx0XHR0aGlzLmRvbS5maW5kKCcuY2FuY2VsLWJ0bicpLnNob3coKTtcblx0XHR0aGlzLmRvbS5maW5kKCdidXR0b25bdHlwZT1zdWJtaXRdJykuaGlkZSgpO1xuXHRcdHRoaXMuZG9tLmZpbmQoJy5sb2FkZXItb3ZlcmxheScpLmZhZGVJbig4MDApO1xuXHR9XG5cblx0cHJvdGVjdGVkIGNsZWFyTG9hZGVyKClcblx0e1xuXHRcdHRoaXMuZG9tLmZpbmQoJy5jYW5jZWwtYnRuJykuaGlkZSgpO1xuXHRcdHRoaXMuZG9tLmZpbmQoJ2J1dHRvblt0eXBlPXN1Ym1pdF0nKS5zaG93KCk7XG5cdFx0dGhpcy5kb20uZmluZCgnLmxvYWRlci1vdmVybGF5JykuaGlkZSgpO1xuXHR9XG5cblx0cHJvdGVjdGVkIG9uU3VjY2VzcyhyZXNwb25zZSlcblx0e1xuXHRcdGlmIChyZXNwb25zZS5zdWNjZXNzKVxuXHRcdHtcblx0XHRcdHRoaXMuZG9tLmNsb3NlTW9kYWwoKTtcblx0XHRcdHRoaXMuZWxlbWVudC5jb21wb25lbnQuYWRkRmxhc2hNZXNzYWdlKHJlc3BvbnNlLm1lc3NhZ2UpO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0dGhpcy5vbkVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCBvbkVycm9yKGVycm9yTWVzc2FnZSlcblx0e1xuXHRcdHRoaXMuZG9tLmZpbmQoJyNtZXNzYWdlLWVycm9yJykudGV4dChlcnJvck1lc3NhZ2UpLnNob3coKTtcblx0fVxufSIsImRlY2xhcmUgdmFyICQgOiBhbnlcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdE1vZGFsQ29tcG9uZW50IH0gZnJvbSBcIi4vYWJzdHJhY3QtbW9kYWwuY29tcG9uZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE1vZGFsQ29tcG9uZW50XG57XG5cdGNvbnN0cnVjdG9yKClcbiAgIHtcbiAgICAgc3VwZXIoXCIjbW9kYWwtZGVsZXRlXCIpO1xuICAgICB0aGlzLmFqYXhVcmwgPSBBcHAuY29uZmlnLmZlYXR1cmVzLmRlbGV0ZS51cmw7XG4gICB9XG5cblx0YmVmb3JlT3BlbihlbGVtZW50IDogRWxlbWVudClcblx0e1xuXHRcdHRoaXMuZG9tLmZpbmQoJy5lbGVtZW50TmFtZScpLnRleHQoY2FwaXRhbGl6ZShlbGVtZW50Lm5hbWUpKTtcblx0XHR0aGlzLmRvbS5maW5kKCcuaW5wdXQtY29tbWVudCcpLnZhbCgnJyk7XG5cdFx0dGhpcy5kb20uZmluZCgnLm9wdGlvbi1yYWRpby1idG46Y2hlY2tlZCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG5cdFx0dGhpcy5kb20uZmluZCgnI3NlbGVjdC1lcnJvcicpLmhpZGUoKTtcblx0fVxuXG5cdHN1Ym1pdCgpXG5cdHtcblx0XHRsZXQgbWVzc2FnZSA9IHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1jb21tZW50JykudmFsKCk7XG5cdFx0bGV0IHJvdXRlID0gQXBwLmNvbmZpZy5mZWF0dXJlcy5kZWxldGUudXJsO1xuXHRcdGxldCBkYXRhID0geyBlbGVtZW50SWQ6IHRoaXMuZWxlbWVudC5pZCwgbWVzc2FnZTogbWVzc2FnZSB9O1xuXG5cdFx0dGhpcy5zZW5kUmVxdWVzdChkYXRhKTtcblx0fVxuXG5cdHByb3RlY3RlZCBvblN1Y2Nlc3MocmVzcG9uc2UpXG5cdHtcblx0XHRsZXQgcmVzcG9uc2VNZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcblx0XHRsZXQgc3VjY2VzcyA9IHJlc3BvbnNlLnN1Y2Nlc3M7XG5cblx0XHRpZiAoc3VjY2Vzcylcblx0XHR7XG5cdFx0XHR0aGlzLmRvbS5jbG9zZU1vZGFsKCk7XG5cdFx0XHRBcHAuaW5mb0JhckNvbXBvbmVudC5zaG93KCk7XG5cblx0XHRcdHRoaXMuZWxlbWVudC51cGRhdGUodHJ1ZSk7XG5cdFx0XHR0aGlzLmVsZW1lbnQuaXNGdWxseUxvYWRlZCA9IGZhbHNlO1xuXG5cdFx0XHQvLyByZWxvYWQgRWxlbWVudCwgYW5kIGFkZCBmbGFzaCBtZXNzYWdlXG5cdFx0XHRBcHAuaW5mb0JhckNvbXBvbmVudC5zaG93RWxlbWVudCh0aGlzLmVsZW1lbnQuaWQsICgpID0+IHtcblx0XHRcdFx0dGhpcy5lbGVtZW50LmNvbXBvbmVudC5hZGRGbGFzaE1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmVsZW1lbnQuY29tcG9uZW50LmFkZEZsYXNoTWVzc2FnZShyZXNwb25zZU1lc3NhZ2UpO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0dGhpcy5kb20uZmluZCgnI3NlbGVjdC1lcnJvcicpLnRleHQocmVzcG9uc2VNZXNzYWdlKS5zaG93KCk7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIG9uRXJyb3IobWVzc2FnZSlcblx0e1xuXHRcdHRoaXMuZG9tLmZpbmQoJyNzZWxlY3QtZXJyb3InKS50ZXh0KG1lc3NhZ2UpLnNob3coKTtcblx0fVxufSIsImltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEFwcFN0YXRlcyB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuL2Fic3RyYWN0LW1vZGFsLmNvbXBvbmVudFwiO1xuXG5kZWNsYXJlIHZhciAkIDogYW55O1xuXG5leHBvcnQgY2xhc3MgUGlja0FkZHJlc3NDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE1vZGFsQ29tcG9uZW50XG57XG4gIGNvbnN0cnVjdG9yKCkgeyBzdXBlcihcIiNtb2RhbC1waWNrLWFkZHJlc3NcIik7IH1cblxuICBiaW5kcygpXG4gIHsgICAgXG4gICAgLy8gYnV0dG9uIHRvIGNvbmZpcm0gY2FsY3VsYXRlIGlkcmVjdGlvbnMgaW4gbW9kYWwgcGljayBhZGRyZXNzIGZvciBkaXJlY3Rpb25zXG4gICAgdGhpcy5kb20uZmluZCgnI2J0bi1jYWxjdWxhdGUtZGlyZWN0aW9ucycpLmNsaWNrKCgpID0+IHRoaXMuc3VibWl0KCkpO1xuICAgIHRoaXMuZG9tLmZpbmQoJ2lucHV0Jykua2V5dXAoKGUpID0+IHsgaWYoZS5rZXlDb2RlID09IDEzKSB0aGlzLnN1Ym1pdCgpOyB9KTsgIFxuICB9XG5cbiAgcHJvdGVjdGVkIGJlZm9yZU9wZW4oZWxlbWVudCA6IEVsZW1lbnQpXG4gIHtcbiAgICB0aGlzLmRvbS5maW5kKFwiLm1vZGFsLWZvb3RlclwiKS5hdHRyKCdvcHRpb24taWQnLCBlbGVtZW50LmNvbG9yT3B0aW9uSWQpOyAgICBcbiAgfVxuXG4gIHN1Ym1pdCgpXG4gIHtcbiAgICBsZXQgYWRkcmVzcyA9IHRoaXMuZG9tLmZpbmQoJ2lucHV0JykudmFsKCk7XG4gICAgICBcbiAgICBpZiAoYWRkcmVzcylcbiAgICB7ICAgICAgXG4gICAgICBBcHAuc2V0U3RhdGUoQXBwU3RhdGVzLlNob3dEaXJlY3Rpb25zLHtpZDogdGhpcy5lbGVtZW50LmlkIH0pO1xuXG4gICAgICBBcHAuZ2VvY29kZXIuZ2VvY29kZUFkZHJlc3MoYWRkcmVzcyxcbiAgICAgIChzdWNjZXNzKSA9PiB7XG4gICAgICAgIHRoaXMuZG9tLmZpbmQoJy5tb2RhbC1lcnJvci1tc2cnKS5oaWRlKCk7XG4gICAgICAgIHRoaXMuZG9tLmNsb3NlTW9kYWwoKTsgICAgICAgIFxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmRvbS5maW5kKCcubW9kYWwtZXJyb3ItbXNnJykuc2hvdygpO1xuICAgICAgfSk7ICAgICAgXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICB0aGlzLmRvbS5maW5kKCdpbnB1dCcpLmFkZENsYXNzKCdpbnZhbGlkJyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMTItMTNcbiAqL1xuXG5kZWNsYXJlIHZhciAkIDogYW55XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuL2Fic3RyYWN0LW1vZGFsLmNvbXBvbmVudFwiO1xuXG5leHBvcnQgY2xhc3MgUmVwb3J0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RNb2RhbENvbXBvbmVudFxue1xuXHRjb25zdHJ1Y3RvcigpXG5cdHtcblx0XHRzdXBlcihcIiNtb2RhbC1yZXBvcnRcIik7XG5cdFx0dGhpcy5hamF4VXJsID0gQXBwLmNvbmZpZy5mZWF0dXJlcy5yZXBvcnQudXJsO1xuXHR9XG5cblx0YmVmb3JlT3BlbigpXG5cdHtcblx0XHR0aGlzLmRvbS5maW5kKCcuZWxlbWVudE5hbWUnKS50ZXh0KGNhcGl0YWxpemUodGhpcy5lbGVtZW50Lm5hbWUpKTtcblxuXHRcdHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1jb21tZW50JykudmFsKCcnKTtcblx0XHR0aGlzLmRvbS5maW5kKCcub3B0aW9uLXJhZGlvLWJ0bjpjaGVja2VkJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcblx0XHR0aGlzLmRvbS5maW5kKCcjc2VsZWN0LWVycm9yJykuaGlkZSgpO1xuXHRcdHRoaXMuZG9tLmZpbmQoJyNtYWlsLWVycm9yJykuaGlkZSgpO1xuXG5cdFx0aWYgKEFwcC5sb2dpbk1vZHVsZS5nZXRVc2VyRW1haWwoKSkgXG5cdFx0e1xuXHRcdFx0dGhpcy5kb20uZmluZCgnLmlucHV0LW1haWwnKS5oaWRlKCk7XG5cdFx0XHR0aGlzLmRvbS5maW5kKCcuaW5wdXQtbWFpbCcpLnZhbChBcHAubG9naW5Nb2R1bGUuZ2V0VXNlckVtYWlsKCkpO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0dGhpcy5kb20uZmluZCgnLmlucHV0LW1haWwnKS52YWwoJycpO1xuXHRcdFx0dGhpcy5kb20uZmluZCgnLmlucHV0LW1haWwnKS5zaG93KCk7XG5cdFx0fVxuXHR9XG5cblx0c3VibWl0KClcblx0e1xuXHRcdGlmICghdGhpcy5lbGVtZW50KSByZXR1cm47XG5cblx0XHRsZXQgcmVwb3J0VmFsdWUgPSB0aGlzLmRvbS5maW5kKCcub3B0aW9uLXJhZGlvLWJ0bjpjaGVja2VkJykuYXR0cigndmFsdWUnKTtcblx0XHRsZXQgdXNlckVtYWlsID0gdGhpcy5kb20uZmluZCgnLmlucHV0LW1haWwnKS52YWwoKTtcblxuXHRcdHRoaXMuZG9tLmZpbmQoJyNzZWxlY3QtZXJyb3InKS5oaWRlKCk7XG5cdFx0dGhpcy5kb20uZmluZCgnI21haWwtZXJyb3InKS5oaWRlKCk7XG5cblx0XHRsZXQgZXJyb3JzID0gZmFsc2U7XG5cdFx0aWYgKCFyZXBvcnRWYWx1ZSlcblx0XHR7XG5cdFx0XHR0aGlzLmRvbS5maW5kKCcjc2VsZWN0LWVycm9yJykuc2hvdygpO1xuXHRcdFx0ZXJyb3JzID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKCF1c2VyRW1haWwgfHwgdGhpcy5kb20uZmluZCgnLmlucHV0LW1haWwnKS5oYXNDbGFzcygnaW52YWxpZCcpKVxuXHRcdHtcblx0XHRcdHRoaXMuZG9tLmZpbmQoJyNtYWlsLWVycm9yJykuc2hvdygpO1xuXHRcdFx0ZXJyb3JzID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKCFlcnJvcnMpXG5cdFx0e1x0XHRcdFxuXHRcdFx0bGV0IGNvbW1lbnQgPSB0aGlzLmRvbS5maW5kKCcuaW5wdXQtY29tbWVudCcpLnZhbCgpO1xuXHRcdFx0bGV0IHJvdXRlID0gQXBwLmNvbmZpZy5mZWF0dXJlcy5yZXBvcnQudXJsO1xuXHRcdFx0bGV0IGRhdGEgPSAgeyBlbGVtZW50SWQ6IHRoaXMuZWxlbWVudC5pZCwgdmFsdWU6IHJlcG9ydFZhbHVlLCBjb21tZW50OiBjb21tZW50LCB1c2VyRW1haWwgOiB1c2VyRW1haWwgfTtcblxuXHRcdFx0dGhpcy5zZW5kUmVxdWVzdChkYXRhKTtcdFx0XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY2xlYXJMb2FkZXIoKVxuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCBvbkVycm9yKGVycm9yTWVzc2FnZSlcblx0e1xuXHRcdHRoaXMuZG9tLmZpbmQoJyNzZWxlY3QtZXJyb3InKS50ZXh0KGVycm9yTWVzc2FnZSkuc2hvdygpO1xuXHR9XG59XHRcbiIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cblxuZGVjbGFyZSB2YXIgJCA6IGFueVxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEFic3RyYWN0TW9kYWxDb21wb25lbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC1tb2RhbC5jb21wb25lbnRcIjtcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcblxuZXhwb3J0IGNsYXNzIFNlbmRFbWFpbENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0TW9kYWxDb21wb25lbnRcbntcbiAgY29uc3RydWN0b3IoKVxuICB7XG4gICAgc3VwZXIoXCIjbW9kYWwtc2VuZC1lbWFpbFwiKTtcbiAgICB0aGlzLmFqYXhVcmwgPSBBcHAuY29uZmlnLmZlYXR1cmVzLnNlbmRNYWlsLnVybDtcbiAgfVxuXG4gIGJlZm9yZU9wZW4oZWxlbWVudCA6IEVsZW1lbnQpXG4gIHtcbiAgICB0aGlzLmRvbS5maW5kKCcuZWxlbWVudE5hbWUnKS50ZXh0KGNhcGl0YWxpemUodGhpcy5lbGVtZW50Lm5hbWUpKTtcblxuICAgIHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsLWNvbnRlbnQnKS52YWwoJycpO1xuICAgIHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsLXN1YmplY3QnKS52YWwoJycpO1xuICAgIHRoaXMuZG9tLmZpbmQoJyNjb250ZW50LWVycm9yJykuaGlkZSgpO1xuICAgIHRoaXMuZG9tLmZpbmQoJyNtYWlsLWVycm9yJykuaGlkZSgpO1xuXG4gICAgaWYgKEFwcC5sb2dpbk1vZHVsZS5nZXRVc2VyRW1haWwoKSlcbiAgICB7XG4gICAgICB0aGlzLmRvbS5maW5kKCcuaW5wdXQtbWFpbCcpLmhpZGUoKTtcbiAgICAgIHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsJykudmFsKEFwcC5sb2dpbk1vZHVsZS5nZXRVc2VyRW1haWwoKSk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICB0aGlzLmRvbS5maW5kKCcuaW5wdXQtbWFpbCcpLnZhbCgnJyk7XG4gICAgICB0aGlzLmRvbS5maW5kKCcuaW5wdXQtbWFpbCcpLnNob3coKTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXQoKVxuICB7XG4gICAgbGV0IHVzZXJFbWFpbCA9IHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsJykudmFsKCk7XG4gICAgbGV0IG1haWxTdWJqZWN0ID0gdGhpcy5kb20uZmluZCgnLmlucHV0LW1haWwtc3ViamVjdCcpLnZhbCgpO1xuICAgIGxldCBtYWlsQ29udGVudCA9IHRoaXMuZG9tLmZpbmQoJy5pbnB1dC1tYWlsLWNvbnRlbnQnKS52YWwoKTtcblxuICAgIHRoaXMuZG9tLmZpbmQoJyNtZXNzYWdlLWVycm9yJykuaGlkZSgpO1xuICAgIHRoaXMuZG9tLmZpbmQoJyNjb250ZW50LWVycm9yJykuaGlkZSgpO1xuICAgIHRoaXMuZG9tLmZpbmQoJyNtYWlsLWVycm9yJykuaGlkZSgpO1xuXG4gICAgbGV0IGVycm9ycyA9IGZhbHNlO1xuICAgIGlmICghbWFpbFN1YmplY3QgfHwgIW1haWxDb250ZW50KVxuICAgIHtcbiAgICAgIHRoaXMuZG9tLmZpbmQoJyNjb250ZW50LWVycm9yJykuc2hvdygpO1xuICAgICAgZXJyb3JzID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF1c2VyRW1haWwgfHwgdGhpcy5kb20uZmluZCgnLmlucHV0LW1haWwnKS5oYXNDbGFzcygnaW52YWxpZCcpKVxuICAgIHtcbiAgICAgIHRoaXMuZG9tLmZpbmQoJyNtYWlsLWVycm9yJykuc2hvdygpO1xuICAgICAgdGhpcy5kb20uZmluZCgnLmlucHV0LW1haWwnKS5zaG93KCk7XG4gICAgICBlcnJvcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghZXJyb3JzKVxuICAgIHsgICAgICBcbiAgICAgIGxldCBjb21tZW50ID0gdGhpcy5kb20uZmluZCgnLmlucHV0LWNvbW1lbnQnKS52YWwoKTtcbiAgICAgIGxldCBkYXRhID0geyBlbGVtZW50SWQ6IHRoaXMuZWxlbWVudC5pZCwgc3ViamVjdDogbWFpbFN1YmplY3QsIGNvbnRlbnQ6IG1haWxDb250ZW50LCB1c2VyRW1haWwgOiB1c2VyRW1haWwgfTtcbiAgICAgIHRoaXMuc2VuZFJlcXVlc3QoZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJMb2FkZXIoKVxuICAgIH1cbiAgfSAgXG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMTItMTNcbiAqL1xuXG5kZWNsYXJlIHZhciAkIDogYW55XG5pbXBvcnQgeyBFbGVtZW50LCBFbGVtZW50U3RhdHVzIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgQXBwTW9kZXMgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgQWJzdHJhY3RNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuL2Fic3RyYWN0LW1vZGFsLmNvbXBvbmVudFwiO1xuXG5leHBvcnQgY2xhc3MgVm90ZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0TW9kYWxDb21wb25lbnRcbntcblx0Y29uc3RydWN0b3IoKSBcblx0eyBcblx0XHRzdXBlcihcIiNtb2RhbC12b3RlXCIpOyBcblx0XHR0aGlzLmFqYXhVcmwgPSBBcHAuY29uZmlnLmZlYXR1cmVzLnZvdGUudXJsO1xuICAgICAgdGhpcy5kb20uZmluZCgnI3NlbGVjdC12b3RlJykubWF0ZXJpYWxfc2VsZWN0KCk7XHRcblx0fVxuXG5cdGJlZm9yZU9wZW4oZWxlbWVudCA6IEVsZW1lbnQpXG5cdHtcblx0XHQvLyBkeW5hbWljYWxseSBjcmVhdGUgdm90ZSB0ZW1wbGF0ZVxuXHRcdHRoaXMuZG9tLmZpbmQoJy5zcGVjaWZpYy1jb250ZW50JykuaHRtbChBcHAudGVtcGxhdGVNb2R1bGUucmVuZGVyKCd2b3RlLW1vZGFsLWNvbnRlbnQnLCB7IFxuXHRcdFx0ZWxlbWVudDogdGhpcy5lbGVtZW50LCBcblx0XHRcdEVsZW1lbnRTdGF0dXM6IEVsZW1lbnRTdGF0dXMsXG5cdFx0XHRpc0FkbWluOiBBcHAuY29uZmlnLmlzRmVhdHVyZUF2YWlsYWJsZSgnZGlyZWN0TW9kZXJhdGlvbicpLFxuXHRcdFx0ZWxkaXNwbGF5TmFtZTogQXBwLmNvbmZpZy50ZXh0LmVsZW1lbnREZWZpbml0ZVxuXHRcdH0pKTsgIFxuXHR9XG5cblx0c3VibWl0KClcblx0e1xuXHRcdGxldCB2b3RlVmFsdWUgPSB0aGlzLmRvbS5maW5kKCcub3B0aW9uLXJhZGlvLWJ0bjpjaGVja2VkJykuYXR0cigndmFsdWUnKTtcblxuXHRcdHRoaXMuZG9tLmZpbmQoJyNzZWxlY3QtZXJyb3InKS5oaWRlKCk7XG5cdFx0XG5cdFx0aWYgKHZvdGVWYWx1ZSlcblx0XHR7XHRcdFx0XHRcblx0XHRcdGxldCBjb21tZW50ID0gdGhpcy5kb20uZmluZCgnLmlucHV0LWNvbW1lbnQnKS52YWwoKTtcblx0XHRcdGxldCByb3V0ZSA9IEFwcC5jb25maWcuZmVhdHVyZXMudm90ZS51cmw7XG5cdFx0XHRsZXQgZGF0YSA9IHsgZWxlbWVudElkOiB0aGlzLmVsZW1lbnQuaWQsIHZhbHVlOiB2b3RlVmFsdWUsIGNvbW1lbnQ6IGNvbW1lbnQgfTtcblxuXHRcdFx0dGhpcy5zZW5kUmVxdWVzdChkYXRhKTtcdFx0XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHR0aGlzLmNsZWFyTG9hZGVyKCk7XG5cdFx0XHR0aGlzLmRvbS5maW5kKCcjc2VsZWN0LWVycm9yJykuc2hvdygpO1xuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCBvblN1Y2Nlc3MocmVzcG9uc2UpXG5cdHtcblx0XHRsZXQgcmVzcG9uc2VNZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcblx0XHRsZXQgbmV3c3RhdHVzID0gcmVzcG9uc2UuZGF0YTtcblxuXHRcdGlmICghcmVzcG9uc2Uuc3VjY2Vzcykge1xuXHRcdFx0dGhpcy5vbkVycm9yKHJlc3BvbnNlTWVzc2FnZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdFxuXHRcdCQoJyNtb2RhbC12b3RlJykuY2xvc2VNb2RhbCgpO1xuXG5cdFx0aWYgKHRoaXMuZWxlbWVudC5zdGF0dXMgIT0gbmV3c3RhdHVzKVxuXHRcdHtcblx0XHRcdHRoaXMuZWxlbWVudC5zdGF0dXMgPSBuZXdzdGF0dXM7XG5cdFx0XHR0aGlzLmVsZW1lbnQudXBkYXRlKHRydWUpO1xuXHRcdFx0dGhpcy5lbGVtZW50LmlzRnVsbHlMb2FkZWQgPSBmYWxzZTtcblxuXHRcdFx0Ly8gcmVsb2FkIEVsZW1lbnQsIGFuZCBhZGQgZmxhc2ggbWVzc2FnZVxuXHRcdFx0aWYgKEFwcC5tb2RlID09IEFwcE1vZGVzLk1hcCkgXG5cdFx0XHRcdEFwcC5pbmZvQmFyQ29tcG9uZW50LnNob3dFbGVtZW50KHRoaXMuZWxlbWVudC5pZCwgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZWxlbWVudC5jb21wb25lbnQuYWRkRmxhc2hNZXNzYWdlKHJlc3BvbnNlTWVzc2FnZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0ZWxzZSB0aGlzLmVsZW1lbnQuY29tcG9uZW50LmFkZEZsYXNoTWVzc2FnZShyZXNwb25zZU1lc3NhZ2UpO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0dGhpcy5lbGVtZW50LmNvbXBvbmVudC5hZGRGbGFzaE1lc3NhZ2UocmVzcG9uc2VNZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgb25FcnJvcihlcnJvck1lc3NhZ2UpXG5cdHtcblx0XHRpZiAoIWVycm9yTWVzc2FnZSB8fCBlcnJvck1lc3NhZ2UubGVuZ3RoID09IDApIGVycm9yTWVzc2FnZSA9IFwiT3VwcywgdW5lIGVycmV1ciBzJ2VzdCBwcm9kdWl0ZSAhIFZldWlsbGV6IHLDqWVzc2F5ZXIgcGx1cyB0YXJkIG91IG5vdXMgc2lnbmFsZXIgbGUgcHJvYmzDqG1lXCI7XG5cdFx0dGhpcy5kb20uZmluZCgnLmdlbmVyaWMtZXJyb3ItbWVzc2FnZScpLmh0bWwoZXJyb3JNZXNzYWdlKS5zaG93KCk7XG5cdH1cbn0iLCIvKipcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHb0dvQ2FydG8gcHJvamVjdC5cbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNiBTZWJhc3RpYW4gQ2FzdHJvIC0gOTBzY2FzdHJvQGdtYWlsLmNvbVxuICogQGxpY2Vuc2UgR05VIEdQTCB2M1xuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAxNi0wOC0zMVxuICovXG5pbXBvcnQgeyBBcHBNb2R1bGUsIEFwcFN0YXRlcywgQXBwRGF0YVR5cGUsIEFwcE1vZGVzIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEdlb2NvZGVSZXN1bHQgfSBmcm9tIFwiLi4vLi4vbW9kdWxlcy9nZW9jb2Rlci5tb2R1bGVcIjtcbmRlY2xhcmUgdmFyICQ7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgeyBWaWV3UG9ydCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcblxuXG5leHBvcnQgY2xhc3MgU2VhcmNoQmFyQ29tcG9uZW50XG57XG5cdHBsYWNlaG9sZGVycyA9IHtcblx0XHRkZWZhdWx0OiBcIlwiLFxuXHRcdHBsYWNlOiBcIlwiLFxuXHRcdGVsZW1lbnQ6IFwiXCJcblx0fVxuXG5cdHNlYXJjaElucHV0KCkgeyByZXR1cm4gJCgnLnNlYXJjaC1iYXInKTsgfVxuXG5cdHByaXZhdGUgY3VyclNlYXJjaFRleHQgOiBzdHJpbmcgPSAnJztcblxuXHRjb25zdHJ1Y3RvcigpIHt9XG5cblx0aW5pdGlhbGl6ZSgpXG5cdHtcdFx0XG5cdFx0dGhpcy5zZWFyY2hJbnB1dCgpLmtleXVwKChlKSA9PlxuXHRcdHsgICAgXG5cdFx0XHRpZihlLmtleUNvZGUgPT0gMTMpIHsgdGhpcy5oYW5kbGVTZWFyY2hBY3Rpb24oKTsgfSAvLyBwcmVzcyBlbnRlclxuXHRcdH0pO1xuXG5cdFx0JCgnLnNlYXJjaC1iYXItaWNvbicpLmNsaWNrKCgpID0+IHRoaXMuaGFuZGxlU2VhcmNoQWN0aW9uKCkpO1x0XG5cblx0XHQkKCcuc2VhcmNoLWJ0bicpLmNsaWNrKCgpID0+IHRoaXMuaGFuZGxlU2VhcmNoQWN0aW9uKCkpO1xuXHRcdCQoJy5zZWFyY2gtY2FuY2VsLWJ0bicpLmNsaWNrKCgpID0+IHRoaXMuY2xlYXJMb2FkZXIoKSk7XG5cblx0XHQkKCcjYnRuLWNsb3NlLXNlYXJjaC1yZXN1bHQnKS5jbGljaygoKSA9PiB0aGlzLmNsZWFyRWxlbWVudFNlYXJjaFJlc3VsdCgpKTtcdFxuXG5cdFx0JCgnLnNlYXJjaC1nZW9sb2NhbGl6ZScpLnRvb2x0aXAoKTtcblx0XHQkKCcuc2VhcmNoLWdlb2xvY2FsaXplJykuY2xpY2soKCkgPT4gdGhpcy5nZW9sb2NhdGVVc2VyKCkpO1xuXG5cdFx0dGhpcy5zZWFyY2hJbnB1dCgpLm9uKCdjbGljaycsIChlKSA9PiB7IGUucHJldmVudERlZmF1bHQoKTtlLnN0b3BQcm9wYWdhdGlvbigpOyB9KTtcblx0XHR0aGlzLnNlYXJjaElucHV0KCkub24oJ2ZvY3VzJywgKCkgPT4geyB0aGlzLnNob3dTZWFyY2hPcHRpb25zKCk7IH0pO1xuXHRcdHRoaXMuc2VhcmNoSW5wdXQoKS5vbigna2V5dXAnLCAoKSA9PiB0aGlzLnNob3dTZWFyY2hPcHRpb25zKCkpO1xuXG5cdFx0dGhpcy5wbGFjZWhvbGRlcnMgPSB7XG5cdFx0XHRkZWZhdWx0OiBcIlJlY2hlcmNoZXogdW4gbGlldSwgXCIgKyBBcHAuY29uZmlnLnRleHQuZWxlbWVudEluZGVmaW5pdGUgKyBcIi4uLlwiLFxuXHRcdFx0cGxhY2U6IFwiRW50cmV6IHVuZSBhZHJlc3NlLCB1biBDUCwgdW5lIHZpbGxlLi4uXCIsXG5cdFx0XHRlbGVtZW50OiBcIkVudHJleiBsZSBub20gZCdcIiArIEFwcC5jb25maWcudGV4dC5lbGVtZW50SW5kZWZpbml0ZVxuXHRcdH1cdFx0XG5cblx0XHR0aGlzLnVwZGF0ZVNlYXJjaFBsYWNlaG9sZGVyKCk7XG5cblx0XHQkKCcuc2VhcmNoLW9wdGlvbi1yYWRpby1idG4nKS5jaGFuZ2UoICgpID0+IHRoaXMudXBkYXRlU2VhcmNoUGxhY2Vob2xkZXIoKSApO1xuXG5cdFx0JCgnI2RpcmVjdG9yeS1jb250ZW50LCAuZGlyZWN0b3J5LW1lbnUtY29udGVudCwgaGVhZGVyJykuY2xpY2soICgpID0+IHRoaXMuaGlkZVNlYXJjaE9wdGlvbnMoKSApO1xuXG5cdFx0JCgnI3NlYXJjaC1vdmVybGF5LW1vYmlsZSAub3ZlcmxheScpLmNsaWNrKCAoKSA9PiB0aGlzLmhpZGVNb2JpbGVTZWFyY2hCYXIoKSApO1xuXHR9XG5cblx0Ly8gaGFuZGxlIGFsbCB2YWxpZGF0aW9uIGJ5IHVzZXIgKGlucHV0IGtleSBlbnRlciBwcmVzc2VkLCBpY29uIGNsaWNrLi4uKVxuXHRwcml2YXRlIGhhbmRsZVNlYXJjaEFjdGlvbigpXG5cdHtcblx0XHR0aGlzLmJlZm9yZVNlYXJjaCgpO1xuXG5cdFx0bGV0IHNlYXJjaFRleHQgPSB0aGlzLnNlYXJjaElucHV0KCkudmFsKCk7XG5cblx0XHRzd2l0Y2ggKHRoaXMuc2VhcmNoVHlwZSgpKSBcbiAgICB7IFxuICAgICAgY2FzZSBcInBsYWNlXCI6IFxuICAgICAgICBBcHAuZ2VvY29kZXIuZ2VvY29kZUFkZHJlc3Moc2VhcmNoVGV4dCwgXG4gICAgICAgICAgKHJlc3VsdCkgPT4geyBcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWFyY2hSZXN1bHQoZmFsc2UpOyBcbiAgICAgICAgICAgIHRoaXMuaGlkZVNlYXJjaE9wdGlvbnMoKTsgXG4gICAgICAgICAgICBBcHAubWFwQ29tcG9uZW50LmZpdEJvdW5kcyhBcHAuZ2VvY29kZXIuZ2V0Qm91bmRzKCksIHRydWUpOyBcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICBcdHRoaXMuY2xlYXJMb2FkZXIoKTtcbiAgICAgICAgICBcdCQoJy5zZWFyY2gtbm8tcmVzdWx0Jykuc2hvdygpO1xuICAgICAgICAgIH0pOyBcbiAgICAgICAgYnJlYWs7IFxuICAgICAgY2FzZSBcImVsZW1lbnRcIjogXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuc2VhcmNoSW5wdXQoKS52YWwoKTsgXG4gICAgICAgIGlmICh2YWx1ZSkgXG4gICAgICAgICAgdGhpcy5zZWFyY2hFbGVtZW50cyhzZWFyY2hUZXh0KTsgXG4gICAgICAgIGVsc2UgXG4gICAgICAgICAgdGhpcy5jbGVhclNlYXJjaFJlc3VsdCgpOyBcbiAgICAgICAgYnJlYWs7IFxuICAgIH0gXG5cdH1cblxuXHRoYW5kbGVHZW9jb2RlUmVzdWx0KClcblx0e1xuXHRcdHRoaXMuc2V0VmFsdWUoQXBwLmdlb2NvZGVyLmdldExvY2F0aW9uQWRkcmVzcygpKTtcblx0XHR0aGlzLmNsZWFyTG9hZGVyKCk7XG5cdH1cdFxuXG5cdGdlb2xvY2F0ZVVzZXIoKVxuXHR7XG5cdFx0dGhpcy5iZWZvcmVTZWFyY2goKTtcblx0XHRBcHAuZ2VvY29kZXIuZ2VvbG9jYXRlVXNlciggKHJlc3VsdDpWaWV3UG9ydCkgPT4gXG5cdFx0e1xuXHRcdFx0dGhpcy5jbGVhclNlYXJjaFJlc3VsdCh0cnVlKTtcblx0XHRcdHRoaXMuc2V0VmFsdWUoXCJHZW9sb2NhbGlzw6lcIik7XG5cdFx0XHR0aGlzLmhpZGVTZWFyY2hPcHRpb25zKCk7XHRcdFx0XG5cdFx0XHR0aGlzLmNsZWFyTG9hZGVyKCk7XG5cdFx0fSk7XG5cdH1cdFxuXG5cdHNlYXJjaEVsZW1lbnRzKCR0ZXh0IDogc3RyaW5nLCAkYmFja0Zyb21IaXN0b3J5ID0gZmFsc2UpXG5cdHtcdFx0XG5cdFx0dGhpcy5zZXRWYWx1ZSgkdGV4dCk7XG5cdFx0dGhpcy5jdXJyU2VhcmNoVGV4dCA9ICR0ZXh0O1xuXG5cdFx0bGV0IHJvdXRlID0gQXBwLmNvbmZpZy5mZWF0dXJlcy5zZWFyY2hFbGVtZW50cy51cmw7XG5cdFx0bGV0IGRhdGEgPSAgeyB0ZXh0OiAkdGV4dCB9OyBcblxuXHRcdGlmIChyb3V0ZSkge1xuXHRcdFx0QXBwLmFqYXhNb2R1bGUuc2VuZFJlcXVlc3Qocm91dGUsICdnZXQnLCBkYXRhLFxuXHRcdFx0KHNlYXJjaFJlc3VsdCkgPT4gXG5cdFx0XHR7XG5cdCAgICAgIEFwcC5zZXREYXRhVHlwZShBcHBEYXRhVHlwZS5TZWFyY2hSZXN1bHRzLCAkYmFja0Zyb21IaXN0b3J5LCBzZWFyY2hSZXN1bHQpOyAgICAgICBcblx0IFxuXHQgICAgICB0aGlzLmNsZWFyTG9hZGVyKCk7ICAgICAgIFxuXHQgICAgICB0aGlzLnNob3dTZWFyY2hSZXN1bHRMYWJlbChzZWFyY2hSZXN1bHQuZGF0YS5sZW5ndGgpOyAgIFxuXHQgXHRcdFx0QXBwLmdvZ29Db250cm9sQ29tcG9uZW50LnVwZGF0ZVBvc2l0aW9uKCk7XG5cdCBcdFx0XHR0aGlzLmhpZGVNb2JpbGVTZWFyY2hCYXIoKTsgXHRcdFx0XG5cdFx0XHR9LFxuXHRcdFx0KGVycm9yKSA9PlxuXHRcdFx0e1xuXHRcdFx0XHQvL0FwcC5nZW9jb2Rlci5nZW9jb2RlQWRkcmVzcygnJyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIFRPRE8gc2VhcmNoIHRocm91Z2ggYWxyZWFkeSByZWNlaXZlZCBlbGVtZW50cy5cblx0XHR9XHRcdFx0XG5cdH1cblxuXHRzaG93TW9iaWxlU2VhcmNoQmFyKCkgeyBcblx0XHQkKCcjc2VhcmNoLW92ZXJsYXktbW9iaWxlJykuZmFkZUluKDI1MCk7XG5cdFx0JCgnLnNlYXJjaC1iYXItd2l0aC1vcHRpb25zLWNvbnRhaW5lcicpLnNob3coKTtcblx0XHQkKCcuc2VhcmNoLWJhcicpLmZvY3VzKCk7XG5cdFx0QXBwLmdvZ29Db250cm9sQ29tcG9uZW50LmhpZGUoMCk7XG5cdH1cblxuXHRoaWRlTW9iaWxlU2VhcmNoQmFyKCkgeyBcblx0XHQvLyBjb25zb2xlLmxvZyhcImhpZGUgbW9iaWxlIHNlYXJjaCBiYXJcIik7XG5cdFx0JCgnI3NlYXJjaC1vdmVybGF5LW1vYmlsZScpLmZhZGVPdXQoMTUwKTtcblx0XHQkKCcuc2VhcmNoLWJhci13aXRoLW9wdGlvbnMtY29udGFpbmVyLm1vYmlsZScpLmhpZGUoKTtcblx0XHRBcHAuZ29nb0NvbnRyb2xDb21wb25lbnQuc2hvdygwKTtcblx0fVxuXG5cdHVwZGF0ZSgpIHtcblx0XHRpZiAoQXBwLmNvbXBvbmVudC53aWR0aCgpIDw9IDYwMClcblx0XHR7XG5cdFx0XHRsZXQgbW9iaWxlU2VhcmNoQmFyID0gJCgnLnNlYXJjaC1iYXItd2l0aC1vcHRpb25zLWNvbnRhaW5lcicpO1xuXHRcdFx0aWYobW9iaWxlU2VhcmNoQmFyLnBhcmVudCgnI3NlYXJjaC1vdmVybGF5LW1vYmlsZScpLmxlbmd0aCE9MSlcblx0XHRcdFx0JCgnLnNlYXJjaC1iYXItd2l0aC1vcHRpb25zLWNvbnRhaW5lcicpLmFwcGVuZFRvKCcjc2VhcmNoLW92ZXJsYXktbW9iaWxlJykuYWRkQ2xhc3MoJ21vYmlsZScpO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0XHQkKCcuc2VhcmNoLWJhci13aXRoLW9wdGlvbnMtY29udGFpbmVyJykucmVtb3ZlQ2xhc3MoJ21vYmlsZScpLnByZXBlbmRUbygnLmRpcmVjdG9yeS1tZW51LWhlYWRlcicpLnNob3coKTtcblx0fVxuXG5cdHNob3dTZWFyY2hPcHRpb25zKClcblx0e1xuXHRcdCQoJy5zZWFyY2gtb3B0aW9ucycpLnNsaWRlRG93bigzNTApO1xuXHRcdGlmICghdGhpcy5pc1NlYXJjaE9wdGlvblZpc2libGUoKSkgXG5cdFx0XHQkKCcjZGlyZWN0b3J5LW1lbnUtbWFpbi1jb250YWluZXIgLmRpcmVjdG9yeS1tZW51LWhlYWRlcicpLmFkZENsYXNzKFwiZXhwYW5kZWRcIik7XG5cblx0XHR0aGlzLnVwZGF0ZVNlYXJjaFBsYWNlaG9sZGVyKCk7XG5cdH1cblxuXHRoaWRlU2VhcmNoT3B0aW9ucygpXG5cdHtcdFx0XG5cdFx0JCgnI2RpcmVjdG9yeS1tZW51LW1haW4tY29udGFpbmVyIC5kaXJlY3RvcnktbWVudS1oZWFkZXInKS5yZW1vdmVDbGFzcyhcImV4cGFuZGVkXCIpO1xuXHRcdHRoaXMuc2VhcmNoSW5wdXQoKS5ibHVyKCk7XG5cdFx0dGhpcy51cGRhdGVTZWFyY2hQbGFjZWhvbGRlcigpO1xuXHRcdCQoJyNkaXJlY3RvcnktbWVudS1tYWluLWNvbnRhaW5lciAuc2VhcmNoLW9wdGlvbnMnKS5zbGlkZVVwKDI1MCk7XG5cdH1cblxuXHR1cGRhdGVTZWFyY2hQbGFjZWhvbGRlcigpXG5cdHtcblx0XHRsZXQgcGxhY2Vob2xkZXIgPSAnJztcblx0XHRpZiAoIXRoaXMuaXNTZWFyY2hPcHRpb25WaXNpYmxlKCkpIHBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlcnMuZGVmYXVsdDtcblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0c3dpdGNoICh0aGlzLnNlYXJjaFR5cGUoKSlcblx0XHRcdHtcblx0XHRcdFx0Y2FzZSBcInBsYWNlXCI6ICAgcGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVycy5wbGFjZTsgICBicmVhaztcblx0XHRcdFx0Y2FzZSBcImVsZW1lbnRcIjogcGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVycy5lbGVtZW50OyBicmVhaztcblx0XHRcdH1cblx0XHR9XHRcdFx0XG5cblx0XHR0aGlzLnNlYXJjaElucHV0KCkuYXR0cihcInBsYWNlaG9sZGVyXCIsIHBsYWNlaG9sZGVyKTtcblx0fVx0XG5cblx0c2hvd1NlYXJjaFJlc3VsdExhYmVsKCRudW1iZXIgOiBudW1iZXIpXG5cdHtcblx0XHQkKCcuc2VhcmNoLXJlc3VsdC1udW1iZXInKS50ZXh0KCRudW1iZXIpO1xuXHRcdCQoJy5zZWFyY2gtcmVzdWx0LXZhbHVlJykudGV4dCh0aGlzLmN1cnJTZWFyY2hUZXh0KTtcblx0XHQkKCcuc2VhcmNoLXJlc3VsdHMnKS5zaG93KCk7XG5cdFx0JCgnLnNlYXJjaC1vcHRpb25zJykuaGlkZSgpO1xuXHRcdCQoJyNlbGVtZW50LWluZm8tYmFyJykuYWRkQ2xhc3MoJ3dpdGgtc2VhcmNoLXJlc3VsdC1oZWFkZXInKTtcblx0fVxuXG5cdGhpZGVTZWFyY2hSZXN1bHQoKVxuXHR7XG5cdFx0JCgnLnNlYXJjaC1yZXN1bHRzJykuaGlkZSgpO1xuXHRcdCQoJyNlbGVtZW50LWluZm8tYmFyJykucmVtb3ZlQ2xhc3MoJ3dpdGgtc2VhcmNoLXJlc3VsdC1oZWFkZXInKTtcblx0XHRBcHAuZ29nb0NvbnRyb2xDb21wb25lbnQudXBkYXRlUG9zaXRpb24oKTtcblx0fVxuXG5cdGNsZWFyRWxlbWVudFNlYXJjaFJlc3VsdCgpIFxuXHR7XG5cdFx0dGhpcy5jbGVhclNlYXJjaFJlc3VsdCgpO1xuXHRcdEFwcC5zZXRNb2RlKEFwcE1vZGVzLk1hcCk7XG5cdH1cblxuXHRjbGVhclNlYXJjaFJlc3VsdChyZXNldFZhbHVlID0gdHJ1ZSlcblx0e1xuXHRcdEFwcC5zZXREYXRhVHlwZShBcHBEYXRhVHlwZS5BbGwpO1x0XHRcblx0XHR0aGlzLmhpZGVTZWFyY2hSZXN1bHQoKTtcdFx0XG5cdFx0dGhpcy5jbGVhckxvYWRlcigpO1x0XG5cdFx0dGhpcy5jdXJyU2VhcmNoVGV4dCA9ICcnO1xuXHRcdGlmIChyZXNldFZhbHVlKSB7XG5cdFx0XHR0aGlzLnNldFZhbHVlKFwiXCIpO1xuXHRcdFx0QXBwLmVsZW1lbnRMaXN0Q29tcG9uZW50LnNldFRpdGxlKFwiXCIpO1xuXHRcdH1cdFx0XG5cdFx0c2V0VGltZW91dCggKCkgPT4geyB0aGlzLmhpZGVTZWFyY2hPcHRpb25zKCk7IH0sIDIwMCk7XHRcdFxuXHR9XG5cblx0c2V0VmFsdWUoJHZhbHVlIDogc3RyaW5nKVxuXHR7XG5cdFx0dGhpcy5zZWFyY2hJbnB1dCgpLnZhbCgkdmFsdWUpO1xuXHR9ICBcblxuXHRnZXRDdXJyU2VhcmNoVGV4dCgpIHsgcmV0dXJuIHRoaXMuY3VyclNlYXJjaFRleHQ7IH1cblxuXHRpc1NlYXJjaE9wdGlvblZpc2libGUoKSA6IGJvb2xlYW5cblx0e1xuXHRcdHJldHVybiAkKCcuc2VhcmNoLW9wdGlvbnM6dmlzaWJsZScpLmxlbmd0aDtcblx0fVxuXG5cdHByaXZhdGUgc2VhcmNoVHlwZSgpIDogc3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gJCgnLnNlYXJjaC1vcHRpb24tcmFkaW8tYnRuOmNoZWNrZWQnKS5hdHRyKCdkYXRhLW5hbWUnKTtcblx0fVxuXG5cdHByaXZhdGUgY2xlYXJMb2FkZXIoKVxuXHR7XG5cdFx0JCgnLnNlYXJjaC1idG4nKS5zaG93KCk7XG5cdFx0JCgnLnNlYXJjaC1jYW5jZWwtYnRuJykuaGlkZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBiZWZvcmVTZWFyY2goKVxuXHR7XG5cdFx0JCgnLnNlYXJjaC1uby1yZXN1bHQnKS5oaWRlKCk7XG5cdFx0JCgnLnNlYXJjaC1jYW5jZWwtYnRuJykuc2hvdygpO1xuXHRcdCQoJy5zZWFyY2gtYnRuJykuaGlkZSgpO1xuXHR9XG4gICAgXG59IiwiZGVjbGFyZSB2YXIgJDtcbmRlY2xhcmUgdmFyIG51bmp1Y2tzLCBnb0dvQ2FydG87XG5cbmltcG9ydCB7IEFwcE1vZHVsZSwgQXBwRGF0YVR5cGUsIEFwcE1vZGVzLCBBcHBTdGF0ZXMgfSBmcm9tICcuL2FwcC5tb2R1bGUnO1xuaW1wb3J0IHsgZ2V0UXVlcnlQYXJhbXMgfSBmcm9tIFwiLi91dGlscy9wYXJhbXNcIjtcblxuZXhwb3J0IHZhciBBcHAgOiBBcHBNb2R1bGU7XG5cbmV4cG9ydCBjbGFzcyBHb0dvQ2FydG9Nb2R1bGVcbntcblx0cHJpdmF0ZSBvcHRpb25zO1xuXHQvLyBET00gQ29udGFpbmVyLCBjYW4gYmUgYSBzdHJpbmcgKHNlbGVjdG9yKSBvciBET00gb2JqZWN0XG5cdGNvbnRhaW5lciA6IHN0cmluZyB8IGFueSA9ICcnO1xuXHQvLyBvbmx5IGZvciBkZWJ1Z2dpbmdcblx0YXBwOiBBcHBNb2R1bGU7XG5cblx0Y29uc3RydWN0b3IoY29udGFpbmVyIDogc3RyaW5nIHwgYW55LCBvcHRpb25zID0ge30pXG5cdHtcblx0XHR0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcblx0XHR0aGlzLmNoZWNrRm9yRGlzdGFudENvbmZpZnVyYXRpb24ob3B0aW9ucyk7XG5cdH1cblxuXHQvKiogXG5cdCogU2V0IHRoZSBjdXJyZW50IHVzZXIgcm9sZXNcblx0KiBSb2xlIGlzIHVzZWQgdG8gcmVuZGVyIHNwZWNpZmljYWxseSBjZXJ0YWluIHRlbXBsYXRlIGFuZCBjb250cm9sXG5cdCogY2VydGFpbiBmdW5jdGlvbmFsaXRpZXNcblx0Ki9cblx0c2V0VXNlclJvbGUoJHJvbGVzIDogc3RyaW5nW10gfCBzdHJpbmcpIHsgdGhpcy5hcHAubG9naW5Nb2R1bGUuc2V0Um9sZXMoJHJvbGVzKTsgfVxuXHRzZXRVc2VyUm9sZXMoJHJvbGVzIDogc3RyaW5nW10gfCBzdHJpbmcpIHsgdGhpcy5hcHAubG9naW5Nb2R1bGUuc2V0Um9sZXMoJHJvbGVzKTsgfVxuXG5cdHNldFVzZXJFbWFpbCgkbWFpbCA6IHN0cmluZykgeyB0aGlzLmFwcC5sb2dpbk1vZHVsZS5zZXRVc2VyRW1haWwoJG1haWwpOyB9XG5cblx0LyoqIHJldHVybiB0aGUgZ2l2ZW4gaGFzaCB0byBhZGQgdG8gdXJsIHNvIGdvZ29jYXJ0byBhcHAgd2lsbCBvcGVuIG9uIHNwZWNpZmljIGVsZW1lbnQgKi9cblx0Z2V0RWxlbWVudFJvdXRlSGFzaCgkZWxlbWVudElkLCAkZWxlbWVudE5hbWUgPSAnZmluZCcpXG5cdHtcblx0XHRyZXR1cm4gdGhpcy5hcHAucm91dGVyTW9kdWxlLmdlbmVyYXRlKCdzaG93X2VsZW1lbnQnLCB7IGlkOiAkZWxlbWVudElkLCBuYW1lOiAkZWxlbWVudE5hbWUgfSk7XG5cdH1cblxuXHRzaG93RGlyZWN0b3J5TWVudSgpIHsgdGhpcy5hcHAuZGlyZWN0b3J5TWVudUNvbXBvbmVudC5zaG93KCk7IH1cblxuXHRoaWRlRGlyZWN0b3J5TWVudSgpIHsgdGhpcy5hcHAuZGlyZWN0b3J5TWVudUNvbXBvbmVudC5oaWRlKCk7IH1cblxuXHRwcml2YXRlIGNoZWNrRm9yRGlzdGFudENvbmZpZnVyYXRpb24ob3B0aW9ucyA6IHN0cmluZ3xhbnkpXG5cdHtcdFx0XG5cdFx0aWYgKCB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcpIHRoaXMuY2hlY2tGb3JEaXN0YW50VGF4b25vbXkob3B0aW9ucyk7XG5cdFx0ZWxzZVxuXHRcdFx0JC5hamF4KHtcblx0XHRcdCAgdXJsOiBvcHRpb25zLFxuXHRcdFx0ICBzdWNjZXNzOiAoZGF0YSkgPT4gIHsgXG5cdFx0XHQgIFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuXHRcdFx0ICBcdHRoaXMuY2hlY2tGb3JEaXN0YW50VGF4b25vbXkoZGF0YSk7IFxuXHRcdFx0ICB9LFxuXHRcdFx0ICBlcnJvcjogKCkgPT4geyBjb25zb2xlLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiBhdCB1cmwgXCIsIG9wdGlvbnMpfVxuXHRcdFx0fSk7XG5cdH07XG5cblx0cHJpdmF0ZSBjaGVja0ZvckRpc3RhbnRUYXhvbm9teShvcHRpb25zIDogYW55KVxuXHR7XG5cdFx0bGV0IHRheG9ub215ID0gb3B0aW9ucy5kYXRhLnRheG9ub215O1xuXHRcdGlmICghdGF4b25vbXkgfHwgIW9wdGlvbnMuZGF0YS5lbGVtZW50cylcblx0XHR7XG5cdFx0XHRjb25zb2xlLndhcm4oXCJbR29Hb0NhcnRvXSBZb3UgbXVzdCBwcm92aWRlIGEgdGF4b25vbXkgYW5kIGVsZW1lbnRzIGRhdGFzZXQgKGJvdGggdXJsIG9yIEpzb24gb2JqZWN0KVwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGVvZiB0YXhvbm9teSA9PT0gJ29iamVjdCcpIHRoaXMuaW5pdCh0YXhvbm9teSwgb3B0aW9ucyk7XG5cdFx0ZWxzZSAkLmdldEpTT04oIHRheG9ub215LCAoZGF0YSkgPT4gIHsgdGhpcy5pbml0KGRhdGEsIG9wdGlvbnMpOyB9KTsgXHRcblx0fTtcblxuXHRwcml2YXRlIGluaXQodGF4b25vbXksIG9wdGlvbnMpXG5cdHtcdFxuXHRcdGxldCB1cmxQYXJhbXMgOiBhbnkgPSBnZXRRdWVyeVBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblx0XHRsZXQgaXNJZnJhbWUgOiBib29sZWFuID0gdXJsUGFyYW1zLmlmcmFtZSA/IHVybFBhcmFtcy5pZnJhbWUgPT0gMSA6IGZhbHNlO1xuXHRcdGxldCBmdWxsVGF4b25vbXkgOiBib29sZWFuID0gdXJsUGFyYW1zLmZ1bGxUYXhvbm9teSA/IHVybFBhcmFtcy5mdWxsVGF4b25vbXkgPT0gMSA6IHRydWU7XG5cblx0XHRBcHAgPSBuZXcgQXBwTW9kdWxlKG9wdGlvbnMsIGlzSWZyYW1lLCBmdWxsVGF4b25vbXksIHVybFBhcmFtcyk7XG5cblx0XHQvLyBvbmx5IGZvciBkZWJ1Z2dpbmdcblx0XHR0aGlzLmFwcCA9IEFwcDtcdFx0XHRcdFxuXG5cdFx0QXBwLnRheG9ub215TW9kdWxlLmNyZWF0ZVRheG9ub215RnJvbUpzb24odGF4b25vbXkpO1xuXG5cdFx0bGV0IGxheW91dCA9IEFwcC50ZW1wbGF0ZU1vZHVsZS5yZW5kZXIoJ2xheW91dCcsIFxuXHRcdHsgXG5cdFx0XHRyb290Q2F0ZWdvcmllczogQXBwLnRheG9ub215TW9kdWxlLnJvb3RDYXRlZ29yaWVzLCBcblx0XHRcdG1haW5DYXRlZ29yeTogQXBwLnRheG9ub215TW9kdWxlLm1haW5DYXRlZ29yeSwgXG5cdFx0XHRpc0lmcmFtZTogaXNJZnJhbWUsIFxuXHRcdFx0ZnVsbFRheG9ub215OiBmdWxsVGF4b25vbXksXG5cdFx0XHRjb25maWc6IEFwcC5jb25maWcsXG5cdFx0XHRhbGxvd2VkU3RhbXBzOiBBcHAuc3RhbXBNb2R1bGUuYWxsb3dlZFN0YW1wc1xuXHRcdH0pO1xuXHRcdCAgIFxuXHRcdGlmICgkKHRoaXMuY29udGFpbmVyKS5sZW5ndGggPT0gMCkgY29uc29sZS53YXJuKCdbR29Hb0NhcnRvXSBUaGUgY29udGFpbmVyIFwiJyArIHRoaXMuY29udGFpbmVyICsgJ1wiIHdhcyBub3QgZm91bmQnKTtcblx0XHRlbHNlICQodGhpcy5jb250YWluZXIpLmFwcGVuZChsYXlvdXQpO1xuXG5cdFx0JCh0aGlzLmNvbnRhaW5lcikudHJpZ2dlcigndGVtcGxhdGVMb2FkZWQnKTtcblx0XHRcblx0XHRpZiAoQXBwLnRheG9ub215TW9kdWxlLm9wdGlvbnMubGVuZ3RoKVxuXHRcdHtcblx0XHRcdGxldCBzdHlsZXMgPSBBcHAudGVtcGxhdGVNb2R1bGUucmVuZGVyKCdnb2dvLXN0eWxlcycsIHsnb3B0aW9uTGlzdCc6QXBwLnRheG9ub215TW9kdWxlLm9wdGlvbnMsICdjb25maWcnOkFwcC5jb25maWd9KTtcblx0XHRcdGxldCBkb21Ub0FkZFN0eWxlcyA9ICQoJ2hlYWQnKS5sZW5ndGggPyAkKCdoZWFkJykgOiAkKCdodG1sJyk7XG5cdFx0XHRpZiAoZG9tVG9BZGRTdHlsZXMubGVuZ3RoKSBkb21Ub0FkZFN0eWxlcy5hcHBlbmQoc3R5bGVzKTtcblx0XHRcdGVsc2UgXHRjb25zb2xlLndhcm4oXCJbR29Hb0NhcnRvXSBDYW5ub3QgZmluZCBEb20gJ2hlYWQnIG9yICdodG1sJyB0byBhZGQgc3R5bGVzXCIpO1xuXHRcdH1cdFx0XG5cblx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7XHRcdFxuXHRcdFx0QXBwLmluaXRpYWxpemUoKTtcblxuXHRcdFx0QXBwLmVsZW1lbnRzTW9kdWxlLmluaXRpYWxpemUoKTtcblx0XHRcdEFwcC5kaXJlY3RvcnlNZW51Q29tcG9uZW50LmluaXRpYWxpemUoKTtcblx0XHRcdEFwcC5maWx0ZXJzQ29tcG9uZW50LmluaXRpYWxpemUoKTtcblx0XHRcdEFwcC5ib3VuZHNNb2R1bGUuaW5pdGlhbGl6ZSgpO1x0ICAgXG5cdFx0XHRBcHAuZWxlbWVudExpc3RDb21wb25lbnQuaW5pdGlhbGl6ZSgpO1x0XHRcdFxuXHRcdFx0QXBwLnNlYXJjaEJhckNvbXBvbmVudC5pbml0aWFsaXplKCk7XHRcdFx0XG5cdFx0XHRBcHAuZ29nb0NvbnRyb2xDb21wb25lbnQuaW5pdGlhbGl6ZSgpO1xuXHRcdFx0QXBwLmRpcmVjdGlvbnNDb21wb25lbnQuaW5pdGlhbGl6ZSgpO1x0XG5cdFx0XHRBcHAubWFwQ29udHJvbHNDb21wb25lbnQuaW5pdGlhbGl6ZSgpO1xuXHRcdFx0QXBwLmN1c3RvbVBvcHVwQ29tcG9uZW50LmluaXRpYWxpemUoKTtcblx0XHRcdFxuXHRcdFx0QXBwLmNvbXBvbmVudC5pbml0aWFsaXplKCk7XHRcdFxuXG5cdFx0XHRBcHAucm91dGVyTW9kdWxlLmxvYWRJbml0aWFsU3RhdGUoKTtcblxuXHRcdFx0Ly8gd2FpdCBmb3IgaW5pdGlhbCBzdGF0ZSB0byBiZSBsb2FkZWRcblx0XHRcdHNldFRpbWVvdXQoICgpID0+IEFwcC5lbGVtZW50c0pzb25Nb2R1bGUubG9hZExvY2FsRWxlbWVudHMoKSwgMTAwKTtcblxuXHRcdFx0dGhpcy5iaW5kRXZlbnRzKCk7XG5cdFx0fSwgMCk7XHQgXG5cdH1cblxuXHRwcml2YXRlIGJpbmRFdmVudHMoKSBcblx0e1xuXHRcdHRoaXMuYXBwLm1hcE1hbmFnZXIub25NYXJrZXJDbGljay5kbyggKGlkKSA9PiB0aGlzLmZpcmVFdmVudCgnbWFya2VyQ2xpY2snLCB7aWQ6IGlkfSkpO1xuXHR9XG5cblx0cHJpdmF0ZSBmaXJlRXZlbnQoJGV2ZW50TmFtZSwgJGRhdGEpIFxuXHR7XG5cdFx0JCh0aGlzLmNvbnRhaW5lcikudHJpZ2dlcigkZXZlbnROYW1lLCAkZGF0YSk7XG5cdH1cbn1cblxuLy8gaW5zdGFuY2lhdGUgYSBHb0dvQ2FydG9Nb2R1bGVcbmdvR29DYXJ0byA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgb3B0aW9ucykgeyByZXR1cm4gbmV3IEdvR29DYXJ0b01vZHVsZShjb250YWluZXIsIG9wdGlvbnMpOyB9IiwiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCIuLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCB7IEFwcFN0YXRlcywgQXBwTW9kZXMgfSBmcm9tIFwiLi4vYXBwLm1vZHVsZVwiO1xuXG5leHBvcnQgZW51bSBBcHBEYXRhVHlwZSBcbntcbiAgQWxsLFxuICBTZWFyY2hSZXN1bHRzXG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhVHlwZU1hbmFnZXJcbntcbiAgcHJpdmF0ZSBkYXRhVHlwZV8gOiBBcHBEYXRhVHlwZSA9IEFwcERhdGFUeXBlLkFsbDtcblxuICBzZXREYXRhVHlwZSgkZGF0YVR5cGUgOiBBcHBEYXRhVHlwZSwgJGJhY2tGcm9tSGlzdG9yeSA6IGJvb2xlYW4gPSBmYWxzZSwgJHNlYXJjaFJlc3VsdCA9IG51bGwpXG4gIHtcbiAgICAvL2NvbnNvbGUubG9nKFwic2V0RGF0YVR5cGVcIiwgQXBwRGF0YVR5cGVbJGRhdGFUeXBlXSk7XG4gICAgdGhpcy5kYXRhVHlwZV8gPSAkZGF0YVR5cGU7XG5cbiAgICBpZiAoJGRhdGFUeXBlID09IEFwcERhdGFUeXBlLlNlYXJjaFJlc3VsdHMgJiYgJHNlYXJjaFJlc3VsdCkgXG4gICAge1xuICAgICAgQXBwLnN0YXRlTWFuYWdlci5zZXRTdGF0ZShBcHBTdGF0ZXMuTm9ybWFsKTtcbiAgICAgIGxldCBlbGVtZW50cyA9IEFwcC5lbGVtZW50c0pzb25Nb2R1bGUuY29udmVydEpzb25FbGVtZW50cygkc2VhcmNoUmVzdWx0LmRhdGEsIHRydWUsIHRydWUpLmVsZW1lbnRzQ29udmVydGVkOyBcbiAgICAgIEFwcC5lbGVtZW50c01vZHVsZS5zZXRTZWFyY2hSZXN1bHRFbGVtZW50KGVsZW1lbnRzKTsgXG4gICAgICBBcHAuZmlsdGVyc0NvbXBvbmVudC5zZXRNYWluT3B0aW9uKCdhbGwnKTsgXG5cbiAgICAgIGlmICgkc2VhcmNoUmVzdWx0LmRhdGEubGVuZ3RoID4gMCkgXG4gICAgICB7IFxuICAgICAgICBBcHAuc2V0TW9kZShBcHBNb2Rlcy5MaXN0KTsgXG4gICAgICAgIEFwcC5tYXBDb21wb25lbnQuZml0RWxlbWVudHNCb3VuZHMoZWxlbWVudHMpO1xuICAgICAgfSBcbiAgICB9XG5cbiAgICBBcHAuZWxlbWVudHNNb2R1bGUuY2xlYXJDdXJyZW50c0VsZW1lbnQoKTsgIFxuICAgIEFwcC5lbGVtZW50TGlzdENvbXBvbmVudC5jbGVhcigpO1xuICAgIEFwcC5lbGVtZW50c01vZHVsZS51cGRhdGVFbGVtZW50c1RvRGlzcGxheSh0cnVlKTsgICAgXG4gICAgQXBwLmVsZW1lbnRzTWFuYWdlci5jaGVja0Zvck5ld0VsZW1lbnRzVG9SZXRyaWV2ZSgpOyAgXG5cbiAgICBpZiAoISRiYWNrRnJvbUhpc3RvcnkpIEFwcC5oaXN0b3J5TW9kdWxlLnB1c2hOZXdTdGF0ZSgpO1xuICAgIEFwcC5kb2N1bWVudFRpdGxlTW9kdWxlLnVwZGF0ZURvY3VtZW50VGl0bGUoKTtcbiAgfVxuXG4gIGdldCBkYXRhVHlwZSgpIHsgcmV0dXJuIHRoaXMuZGF0YVR5cGVfOyB9XG59IiwiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgQXBwTW9kZXMsIEFwcERhdGFUeXBlIH0gZnJvbSBcIi4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEVsZW1lbnRzVG9EaXNwbGF5Q2hhbmdlZCB9IGZyb20gXCIuLi9tb2R1bGVzL2VsZW1lbnRzL2VsZW1lbnRzLm1vZHVsZVwiO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudHNNYW5hZ2VyXG57XG4gIGNvbnN0cnVjdG9yKClcbiAge1xuICAgIEFwcC5hamF4TW9kdWxlLm9uTmV3RWxlbWVudHMuZG8oIChyZXN1bHQpID0+IHsgdGhpcy5oYW5kbGVOZXdFbGVtZW50c1JlY2VpdmVkRnJvbVNlcnZlcihyZXN1bHQpOyB9KTsgIFxuICAgIEFwcC5lbGVtZW50c0pzb25Nb2R1bGUub25OZXdzRWxlbWVudHNDb252ZXJ0ZWQuZG8oIChuZXdFbGVtZW50cyk9PiB7IEFwcC5lbGVtZW50c01vZHVsZS5hZGRFbGVtZW50cyhuZXdFbGVtZW50cyk7IH0pOyAgXG4gICAgQXBwLmVsZW1lbnRzTW9kdWxlLm9uRWxlbWVudHNUb0Rpc3BsYXlDaGFuZ2VkLmRvKCAoRWxlbWVudHNUb0Rpc3BsYXlDaGFuZ2VkKT0+IHsgdGhpcy5oYW5kbGVFbGVtZW50c1RvRGlzcGxheUNoYW5nZWQoRWxlbWVudHNUb0Rpc3BsYXlDaGFuZ2VkKTsgfSk7ICAgIFxuICB9XG5cbiAgY2hlY2tGb3JOZXdFbGVtZW50c1RvUmV0cmlldmUoJGdldEZ1bGxSZXByZXNlbnRhdGlvbiA9IGZhbHNlKVxuICB7XG4gICAgaWYgKEFwcC5kYXRhVHlwZSAhPSBBcHBEYXRhVHlwZS5BbGwpIHJldHVybjtcblxuICAgIGlmIChBcHAuY29uZmlnLmRhdGEucmV0cmlldmVFbGVtZW50c0J5QXBpKVxuICAgIHtcbiAgICAgIHRoaXMucmV0cmlldmVNaXNzaW5nRWxlbWVudHNWaWFBcGkoJGdldEZ1bGxSZXByZXNlbnRhdGlvbik7XG4gICAgfVxuICB9ICAgXG5cbiAgcHJpdmF0ZSByZXRyaWV2ZU1pc3NpbmdFbGVtZW50c1ZpYUFwaSgkZ2V0RnVsbFJlcHJlc2VudGF0aW9uIDogYm9vbGVhbilcbiAge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY2hlY2tGb3JOZXdlbGVtZW50VG9SZXRyaWV2ZSwgZnVsbFJlcHJlc2VudGF0aW9uXCIsICRnZXRGdWxsUmVwcmVzZW50YXRpb24pO1xuICAgIGxldCByZXN1bHQgPSBBcHAuYm91bmRzTW9kdWxlLmNhbGN1bGF0ZUZyZWVCb3VuZHMoJGdldEZ1bGxSZXByZXNlbnRhdGlvbik7XG4gICAgLy8gY29uc29sZS5sb2coXCJjaGVja0Zvck5ld2VsZW1lbnRUb1JldHJpZXZlLCBjYWxjdWxhdGVCb3VuZHNcIiwgcmVzdWx0KTtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PSBcImFsbFJldHJpZXZlZFwiKSBcbiAgICB7XG4gICAgICBBcHAuZWxlbWVudExpc3RDb21wb25lbnQuaGFuZGxlQWxsRWxlbWVudHNSZXRyaWV2ZWQoKTtcbiAgICAgIHJldHVybjsgLy8gbm90aGluZyB0byBkbywgYWxsIGVsZW1lbnRzIGFscmVhZHkgcmV0cmlldmVkXG4gICAgfVxuICAgIGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT0gXCJpbmNsdWRlZFwiKVxuICAgIHtcbiAgICAgIC8vIFdlIHNpbXVsYXRlIHRoZSBlbmQgb2YgYSBzdWNjZXNzZWZ1bCBhamF4IHJlcXVlc3QgXG4gICAgICBBcHAuYm91bmRzTW9kdWxlLnVwZGF0ZUZpbGxlZEJvdW5kc1dpdGhCb3VuZHNSZWNlaXZlZChyZXN1bHQuZXhwZWN0ZWRGaWxsQm91bmRzLCBBcHAuY3Vyck1haW5JZCwgICRnZXRGdWxsUmVwcmVzZW50YXRpb24pO1xuICAgICAgdGhpcy5oYW5kbGVOZXdFbGVtZW50c1JlY2VpdmVkRnJvbVNlcnZlcih7J2RhdGEnOiBbXSwgJ2Z1bGxSZXByZXNlbnRhdGlvbic6ICRnZXRGdWxsUmVwcmVzZW50YXRpb259KTtcbiAgICAgIHJldHVybjtcbiAgICB9ICAgIFxuXG4gICAgLy8gTm9ybWFsIGJlaGF2aW91ciwgZ2V0dGluZyBtaXNzaW5nIGVsZW1lbnRzIHZpYSBBamF4IHJlcXVlc3RcbiAgICBsZXQgZnJlZUJvdW5kcyA9IHJlc3VsdC5mcmVlQm91bmRzO1xuICAgIGxldCBleHBlY3RlZEZpbGxlZEJvdW5kcyA9IHJlc3VsdC5leHBlY3RlZEZpbGxCb3VuZHM7XG4gICAgaWYgKGZyZWVCb3VuZHMgJiYgZnJlZUJvdW5kcy5sZW5ndGggPiAwKSBBcHAuYWpheE1vZHVsZS5nZXRFbGVtZW50c0luQm91bmRzKGZyZWVCb3VuZHMsICRnZXRGdWxsUmVwcmVzZW50YXRpb24sIGV4cGVjdGVkRmlsbGVkQm91bmRzKTsgXG4gIH0gICBcblxuICBoYW5kbGVOZXdFbGVtZW50c1JlY2VpdmVkRnJvbVNlcnZlcihyZXN1bHQpXG4gIHsgICAgICAgIFxuICAgIGxldCBlbGVtZW50c0pzb24gPSByZXN1bHQuZGF0YSB8fCByZXN1bHRbXCJAZ3JhcGhcIl0gfHwgcmVzdWx0OyBcbiAgICBsZXQgZWxlbWVudHMgPSBBcHAuZWxlbWVudHNKc29uTW9kdWxlLmNvbnZlcnRKc29uRWxlbWVudHMoZWxlbWVudHNKc29uLCB0cnVlLCByZXN1bHQuZnVsbFJlcHJlc2VudGF0aW9uKTtcbiAgICAvLyBjb25zb2xlLmxvZyhcIm5ldyBFbGVtZW50cyBsZW5ndGhcIiwgZWxlbWVudHMpO1xuICAgIFxuICAgIC8vIG9uIGFkZCBtYXJrZXJDbHVzdGVyR3JvdXAgYWZ0ZXIgZmlyc3QgZWxlbWVudHMgcmVjZWl2ZWRcbiAgICBpZiAoZWxlbWVudHMubmV3RWxlbWVudHNMZW5ndGggPiAwIHx8IEFwcC5tb2RlID09IEFwcE1vZGVzLkxpc3QpIFxuICAgIHtcbiAgICAgIEFwcC5lbGVtZW50c01vZHVsZS51cGRhdGVFbGVtZW50c1RvRGlzcGxheSh0cnVlKTsgIFxuICAgIH1cbiAgfTsgXG5cbiAgaGFuZGxlRWxlbWVudHNUb0Rpc3BsYXlDaGFuZ2VkKHJlc3VsdCA6IEVsZW1lbnRzVG9EaXNwbGF5Q2hhbmdlZClcbiAge1xuICAgIGxldCBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gICAgLy8gY29uc29sZS5sb2coXCJEaXNwbGF5ID0gXCIgKyByZXN1bHQuZWxlbWVudHNUb0Rpc3BsYXkubGVuZ3RoICsgXCIgLyByZW1vdmUgPSBcIiArIHJlc3VsdC5lbGVtZW50c1RvUmVtb3ZlLmxlbmd0aCArIFwiIC8gYWRkID0gXCIgKyByZXN1bHQubmV3RWxlbWVudHMubGVuZ3RoKTtcblxuICAgIGlmIChBcHAubW9kZSA9PSBBcHBNb2Rlcy5MaXN0KVxuICAgIHtcbiAgICAgIEFwcC5lbGVtZW50TGlzdENvbXBvbmVudC51cGRhdGUocmVzdWx0LmVsZW1lbnRzVG9EaXNwbGF5KTtcbiAgICAgIGlmIChBcHAuYWpheE1vZHVsZS5hbGxFbGVtZW50c1JlY2VpdmVkKSBBcHAuZWxlbWVudExpc3RDb21wb25lbnQuaGFuZGxlQWxsRWxlbWVudHNSZXRyaWV2ZWQoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGlmICghQXBwLm1hcENvbXBvbmVudC5pc0luaXRpYWxpemVkKSB7IHJldHVybjt9XG5cbiAgICAgIEFwcC5tYXBDb21wb25lbnQubWFya2VyQ2x1c3RlcmVyR3JvdXAucmVzdG9yZVVuY2x1c3RlcnModHJ1ZSk7ICAgICBcblxuICAgICAgLy8gSW4gc29tZSBjYXNlcywgbWFya2VyQ2x1c3RlciB3b3JrcyBmYXN0ZXIgY2xlYXJpbmcgYWxscyBtYXJrZXJzIGFuZCBhZGRpbmcgdGhlbSBhZ2FpblxuICAgICAgaWYgKHJlc3VsdC5lbGVtZW50c1RvUmVtb3ZlLmxlbmd0aCArIHJlc3VsdC5uZXdFbGVtZW50cy5sZW5ndGggPiByZXN1bHQuZWxlbWVudHNUb0Rpc3BsYXkubGVuZ3RoKVxuICAgICAge1xuICAgICAgICBBcHAubWFwQ29tcG9uZW50LmNsZWFyTWFya2VycygpO1xuICAgICAgICBBcHAubWFwQ29tcG9uZW50LmFkZE1hcmtlcnMocmVzdWx0LmVsZW1lbnRzVG9EaXNwbGF5Lm1hcCggKGUpID0+IGUubWFya2VyLmdldExlYWZsZXRNYXJrZXIoKSkpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBBcHAubWFwQ29tcG9uZW50LnJlbW92ZU1hcmtlcnMocmVzdWx0LmVsZW1lbnRzVG9SZW1vdmUubWFwKCAoZSkgPT4gZS5tYXJrZXIuZ2V0TGVhZmxldE1hcmtlcigpKSk7XG4gICAgICAgIEFwcC5tYXBDb21wb25lbnQuYWRkTWFya2VycyhyZXN1bHQubmV3RWxlbWVudHMubWFwKCAoZSkgPT4gZS5tYXJrZXIuZ2V0TGVhZmxldE1hcmtlcigpKSk7XG4gICAgICB9ICAgICAgXG5cbiAgICAgIEFwcC5tYXBDb21wb25lbnQubWFya2VyQ2x1c3RlcmVyR3JvdXAuY2hlY2tGb3JVbmNsZXN0ZXJpbmcoQXBwLm1hcCgpLmdldEJvdW5kcygpKTtcbiAgICB9ICBcblxuICAgIGxldCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAvL2NvbnNvbGUubG9nKFwiRWxlbWVudHNUb0Rpc3BsYXlDaGFuZ2VkIGluIFwiICsgKGVuZC1zdGFydCkgKyBcIiBtc1wiKTsgIFxuICB9OyAgXG5cbn0iLCJpbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgeyBBcHBNb2RlcywgQXBwU3RhdGVzIH0gZnJvbSBcIi4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IGNhcGl0YWxpemUsIHVuc2x1Z2lmeSB9IGZyb20gXCIuLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuaW1wb3J0IHsgVmlld1BvcnQgfSBmcm9tIFwiLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cbmRlY2xhcmUgdmFyICQ7XG5cbmV4cG9ydCBjbGFzcyBHZW9jb2RpbmdNYW5hZ2VyXG57XG4gIGNvbnN0cnVjdG9yKClcbiAge1xuICAgIEFwcC5nZW9jb2Rlci5vbkdlb2NvZGVSZXN1bHQuZG8oICgpID0+IHsgdGhpcy5oYW5kbGVHZW9jb2RlUmVzdWx0KCk7IEFwcC5zZWFyY2hCYXJDb21wb25lbnQuaGFuZGxlR2VvY29kZVJlc3VsdCgpOyB9KTtcbiAgICBBcHAuZ2VvY29kZXIub25HZW9sb2NhbGl6YXRpb25SZXN1bHQuZG8oICh2aWV3UG9ydCA6IFZpZXdQb3J0KSA9PiB7IHRoaXMuaGFuZGxlR2VvbG9jYWxpemF0aW9uUmVzdWx0KHZpZXdQb3J0KTsgfSk7XG4gIH1cblxuICBoYW5kbGVHZW9jb2RlUmVzdWx0KClcbiAge1xuICAgIC8vY29uc29sZS5sb2coXCJoYW5kbGVHZW9jb2RlUmVzdWx0XCIsIEFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbigpKTtcbiAgICAkKCcjZGlyZWN0b3J5LXNwaW5uZXItbG9hZGVyJykuaGlkZSgpO1xuXG4gICAgaWYgKEFwcC5zdGF0ZSA9PSBBcHBTdGF0ZXMuU2hvd0RpcmVjdGlvbnMpICBcbiAgICB7XG4gICAgICAvLyB3ZSByZXN0YXJ0IGRpcmVjdGlvbnMgZnJvbSBBcHAgbmV3IHN0YXJ0IGxvY2F0aW9uXG4gICAgICBBcHAuc2V0U3RhdGUoQXBwU3RhdGVzLlNob3dEaXJlY3Rpb25zLHtpZDogQXBwLnN0YXRlTWFuYWdlci5zdGF0ZUVsZW1lbnRJZCB9KTtcbiAgICB9ICAgIFxuICAgIGVsc2VcbiAgICB7XG4gICAgICBpZiAoQXBwLm1vZGUgPT0gQXBwTW9kZXMuTWFwICYmIEFwcC5zdGF0ZSAhPSBBcHBTdGF0ZXMuU2hvd0VsZW1lbnRBbG9uZSlcbiAgICAgIHtcbiAgICAgICAgQXBwLnNldFN0YXRlKEFwcFN0YXRlcy5Ob3JtYWwpOyAgICAgIFxuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBsZXQgbG9jYXRpb24gPSBBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb24oKSA/IEFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbigpIDogQXBwLmJvdW5kc01vZHVsZS5kZWZhdWx0Q2VudGVyO1xuICAgICAgICBBcHAuYm91bmRzTW9kdWxlLmNyZWF0ZUJvdW5kc0Zyb21Mb2NhdGlvbihsb2NhdGlvbik7XG4gICAgICAgIEFwcC5lbGVtZW50c01vZHVsZS5jbGVhckN1cnJlbnRzRWxlbWVudCgpO1xuICAgICAgICBBcHAuZWxlbWVudHNNb2R1bGUudXBkYXRlRWxlbWVudHNUb0Rpc3BsYXkodHJ1ZSk7XG4gICAgICAgIGxldCBhZGRyZXNzID0gQXBwLmdlb2NvZGVyLmxhc3RBZGRyZXNzUmVxdWVzdDtcbiAgICAgICAgaWYgKEFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbigpKSBcbiAgICAgICAgICBBcHAuZWxlbWVudExpc3RDb21wb25lbnQuc2V0VGl0bGUoJyBhdXRvdXIgZGUgPGk+JyArIGNhcGl0YWxpemUodW5zbHVnaWZ5KGFkZHJlc3MpKSkgKyAnPC9pPic7XG4gICAgICB9ICAgICAgXG5cbiAgICAgIEFwcC5kb2N1bWVudFRpdGxlTW9kdWxlLnVwZGF0ZURvY3VtZW50VGl0bGUoKTtcbiAgICB9ICAgICAgICBcbiAgfVxuXG4gIGhhbmRsZUdlb2xvY2FsaXphdGlvblJlc3VsdCh2aWV3UG9ydClcbiAge1xuICAgIGlmIChBcHAubW9kZSA9PSBBcHBNb2Rlcy5NYXApXG4gICAge1xuICAgICAgQXBwLnNldFN0YXRlKEFwcFN0YXRlcy5Ob3JtYWwpO1xuICAgICAgQXBwLm1hcENvbXBvbmVudC5wYW5Ub0xvY2F0aW9uKHZpZXdQb3J0LnRvTG9jYXRpb24oKSwgdmlld1BvcnQuem9vbSwgZmFsc2UpOyAgICAgIFxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgQXBwLmJvdW5kc01vZHVsZS5jcmVhdGVCb3VuZHNGcm9tTG9jYXRpb24odmlld1BvcnQudG9Mb2NhdGlvbigpKTtcbiAgICAgIEFwcC5lbGVtZW50c01vZHVsZS5jbGVhckN1cnJlbnRzRWxlbWVudCgpO1xuICAgICAgQXBwLmVsZW1lbnRzTW9kdWxlLnVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5KHRydWUpO1xuICAgICAgQXBwLmVsZW1lbnRMaXN0Q29tcG9uZW50LnNldFRpdGxlKCcgYXV0b3VyIGRlIDxpPm1hIHBvc2l0aW9uPC9pPicpO1xuICAgICAgLy8gc2F2ZSB0aGUgdmlld3BvcnQgaWYgd2UgZ28gdG8gbWFwIGFmdGVyXG4gICAgICBBcHAubWFwQ29tcG9uZW50LnNldFZpZXdQb3J0KHZpZXdQb3J0KTtcbiAgICB9ICAgIFxuICB9XG59IiwiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgQXBwRGF0YVR5cGUsIEFwcE1vZGVzLCBBcHBTdGF0ZXMgfSBmcm9tIFwiLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgSGlzdG9yeVN0YXRlLCBWaWV3UG9ydCB9IGZyb20gXCIuLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCAqIGFzIENvb2tpZXMgZnJvbSBcIi4uL3V0aWxzL2Nvb2tpZXNcIjtcbmRlY2xhcmUgdmFyICQsIEwgOiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBIaXN0b3J5U3RhdGVNYW5hZ2VyXG57XG4gIGxhc3RIaXN0b3J5U3RhdGUgOiBIaXN0b3J5U3RhdGUgPSBudWxsO1xuICAvKlxuICAqIExvYWQgaW5pdGlhbCBzdGF0ZSBvciBzdGF0ZSBwb3BwZWQgYnkgd2luZG93IGhpc3RvcnkgbWFuYWdlclxuICAqL1xuICBsb2FkKGhpc3RvcnlzdGF0ZSA6IEhpc3RvcnlTdGF0ZSwgJGJhY2tGcm9tSGlzdG9yeSA9IGZhbHNlKVxuICB7XG4gICAgaWYgKGhpc3RvcnlzdGF0ZSA9PT0gbnVsbCkgcmV0dXJuOyAgXG4gICAgdGhpcy5sYXN0SGlzdG9yeVN0YXRlID0gaGlzdG9yeXN0YXRlO1xuICAgIGNvbnNvbGUubG9nKFwibG9hZEhpc3RvcnlzdGF0ZVwiLCBoaXN0b3J5c3RhdGUpOyAgXG5cbiAgICBpZiAoaGlzdG9yeXN0YXRlLmRhdGFUeXBlID09IEFwcERhdGFUeXBlLlNlYXJjaFJlc3VsdHMpXG4gICAge1xuICAgICAgLy8gZm9yY2Ugc2V0dGluZyBkYXRhVHlwZSBiZWZvcmUgc2VhcmNoQmFyQ29tcG9uZW50IHRvIGF2b2lkIGhpc3RvcnkgaXNzdWVzXG4gICAgICBBcHAuc2V0RGF0YVR5cGUoaGlzdG9yeXN0YXRlLmRhdGFUeXBlLCB0cnVlKTtcbiAgICAgIEFwcC5zZWFyY2hCYXJDb21wb25lbnQuc2VhcmNoRWxlbWVudHMoaGlzdG9yeXN0YXRlLnRleHQsICRiYWNrRnJvbUhpc3RvcnkpO1xuICAgICAgJCgnI2RpcmVjdG9yeS1zcGlubmVyLWxvYWRlcicpLmhpZGUoKTtcbiAgICB9ICBcbiAgICBlbHNlXG4gICAge1xuICAgICAgLy8gY2hlY2sgdmlld3BvcnQgYW5kIGFkZHJlc3MgZnJvbSBjb29raWVzXG4gICAgICBpZiAoQXBwLmNvbmZpZy5tYXAuc2F2ZVZpZXdwb3J0SW5Db29raWVzICYmICFoaXN0b3J5c3RhdGUudmlld3BvcnQgJiYgIWhpc3RvcnlzdGF0ZS5hZGRyZXNzICYmIGhpc3RvcnlzdGF0ZS5zdGF0ZSA9PSBBcHBTdGF0ZXMuTm9ybWFsKSBcbiAgICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJubyB2aWV3cG9ydCBub3IgYWRkcmVzcyBwcm92aWRlZCwgdXNpbmcgY29va2llcyB2YWx1ZXNcIiwgQ29va2llcy5yZWFkQ29va2llKCd2aWV3cG9ydCcpLCBDb29raWVzLnJlYWRDb29raWUoJ2FkZHJlc3MnKSk7XG4gICAgICAgIGlmIChDb29raWVzLnJlYWRDb29raWUoJ3ZpZXdwb3J0JykpIGhpc3RvcnlzdGF0ZS52aWV3cG9ydCA9IG5ldyBWaWV3UG9ydCgpLmZyb21TdHJpbmcoQ29va2llcy5yZWFkQ29va2llKCd2aWV3cG9ydCcpKTtcbiAgICAgICAgaWYgKENvb2tpZXMucmVhZENvb2tpZSgnYWRkcmVzcycpKSBoaXN0b3J5c3RhdGUuYWRkcmVzcyA9IENvb2tpZXMucmVhZENvb2tpZSgnYWRkcmVzcycpO1xuICAgICAgICBpZiAoaGlzdG9yeXN0YXRlLmFkZHJlc3MpICQoJy5zZWFyY2gtYmFyJykudmFsKGhpc3RvcnlzdGF0ZS5hZGRyZXNzKTtcbiAgICAgIH0gICAgXG4gICAgfSAgICBcblxuICAgIGlmIChoaXN0b3J5c3RhdGUuZmlsdGVycykgQXBwLmZpbHRlclJvdXRpbmdNb2R1bGUubG9hZEZpbHRlcnNGcm9tU3RyaW5nKGhpc3RvcnlzdGF0ZS5maWx0ZXJzKTtcbiAgICBlbHNlIEFwcC5maWx0ZXJzQ29tcG9uZW50LnNldE1haW5PcHRpb24oJ2FsbCcpOyBcblxuICAgIGlmIChoaXN0b3J5c3RhdGUuZGF0YVR5cGUgPT0gQXBwRGF0YVR5cGUuQWxsICYmIGhpc3RvcnlzdGF0ZS52aWV3cG9ydCAmJiBoaXN0b3J5c3RhdGUuc3RhdGUgIT0gQXBwU3RhdGVzLlNob3dFbGVtZW50QWxvbmUpXG4gICAgeyAgICAgIFxuICAgICAgLy8gaWYgbWFwIG5vdCBsb2FkZWQgd2UganVzdCBzZXQgdGhlIG1hcENvbXBvbmVudCB2aWV3cG9ydCB3aXRob3V0IGNoYW5naW5nIHRoZVxuICAgICAgLy8gYWN0dWFsIHZpZXdwb3J0IG9mIHRoZSBtYXAsIGJlY2F1c2UgaXQgd2lsbCBiZSBkb25lIGluXG4gICAgICAvLyBtYXAgaW5pdGlhbGlzYXRpb25cbiAgICAgIEFwcC5tYXBDb21wb25lbnQuc2V0Vmlld1BvcnQoaGlzdG9yeXN0YXRlLnZpZXdwb3J0LCBBcHAubWFwQ29tcG9uZW50LmlzTWFwTG9hZGVkKTtcblxuICAgICAgLy8gb24gbGlzdCBtb2RlIGluaXRpYWxpemUgYm91bmRzXG4gICAgICBpZiAoaGlzdG9yeXN0YXRlLm1vZGUgPT0gQXBwTW9kZXMuTGlzdClcbiAgICAgIHtcbiAgICAgICAgQXBwLmJvdW5kc01vZHVsZS5jcmVhdGVCb3VuZHNGcm9tTG9jYXRpb24oTC5sYXRMbmcoaGlzdG9yeXN0YXRlLnZpZXdwb3J0LmxhdCwgaGlzdG9yeXN0YXRlLnZpZXdwb3J0LmxuZykpO1xuICAgICAgfVxuXG4gICAgICAkKCcjZGlyZWN0b3J5LXNwaW5uZXItbG9hZGVyJykuaGlkZSgpOyAgXG5cbiAgICAgIGlmIChoaXN0b3J5c3RhdGUubW9kZSA9PSBBcHBNb2Rlcy5MaXN0IClcbiAgICAgIHtcbiAgICAgICAgbGV0IGxvY2F0aW9uID0gTC5sYXRMbmcoaGlzdG9yeXN0YXRlLnZpZXdwb3J0LmxhdCwgaGlzdG9yeXN0YXRlLnZpZXdwb3J0LmxuZyk7XG4gICAgICB9ICBcbiAgICB9ICBcblxuICAgIEFwcC5zZXRNb2RlKGhpc3RvcnlzdGF0ZS5tb2RlLCAkYmFja0Zyb21IaXN0b3J5LCBmYWxzZSk7XG4gICAgXG4gICAgLy8gaWYgYWRkcmVzcyBpcyBwcm92aWRlZCB3ZSBnZW9sb2NhbGl6ZSB0aGlzIGFkZHJlc3NcbiAgICBpZiAoaGlzdG9yeXN0YXRlLmRhdGFUeXBlID09IEFwcERhdGFUeXBlLkFsbCAmJiBoaXN0b3J5c3RhdGUuYWRkcmVzcykgXG4gICAge1xuICAgICAgaWYgKGhpc3RvcnlzdGF0ZS5hZGRyZXNzID09IFwiZ2VvbG9jYWxpemVcIilcbiAgICAgIHtcbiAgICAgICAgQXBwLnNlYXJjaEJhckNvbXBvbmVudC5nZW9sb2NhdGVVc2VyKCk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIEFwcC5nZW9jb2Rlci5nZW9jb2RlQWRkcmVzcyhcbiAgICAgICAgICBoaXN0b3J5c3RhdGUuYWRkcmVzcywgXG4gICAgICAgICAgKHJlc3VsdHMpID0+IFxuICAgICAgICAgIHsgXG4gICAgICAgICAgICAvLyBpZiB2aWV3cG9ydCBpcyBnaXZlbiwgbm90aGluZyB0byBkbywgd2UgYWxyZWFkeSBkaWQgaW5pdGlhbGl6YXRpb24gd2l0aCB2aWV3cG9ydFxuICAgICAgICAgICAgaWYgKGhpc3RvcnlzdGF0ZS52aWV3cG9ydCAmJiBoaXN0b3J5c3RhdGUubW9kZSA9PSBBcHBNb2Rlcy5NYXApIHJldHVybjtcbiAgICAgICAgICAgIC8vIGZpdCBib3VuZHMgYW55d2F5IHNvIHRoZSBtYXBjb21wb25lbnQgd2lsbCByZWdpc3RlciBBcHAgcmVxdWVzdGVkIGJvdW5kcyBmb3IgbGF0ZXJcbiAgICAgICAgICAgIEFwcC5tYXBDb21wb25lbnQuZml0Qm91bmRzKEFwcC5nZW9jb2Rlci5nZXRCb3VuZHMoKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAvLyBmYWlsdXJlIGNhbGxiYWNrXG4gICAgICAgICAgICBBcHAuc2VhcmNoQmFyQ29tcG9uZW50LnNldFZhbHVlKFwiXCIpO1xuICAgICAgICAgICAgaWYgKCFoaXN0b3J5c3RhdGUudmlld3BvcnQpIFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBcHAubWFwQ29tcG9uZW50LmZpdERlZmF1bHRCb3VuZHMoKTtcbiAgICAgICAgICAgICAgQXBwLmNvbXBvbmVudC50b2FzdE1lc3NhZ2UoXCJFcnJldXIsIGNldHRlIGFkcmVzc2UgbidhIHBhcyBwdSDDqnRyZSBsb2NhbGlzw6llIDogXCIgKyBoaXN0b3J5c3RhdGUuYWRkcmVzcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9ICBcbiAgICAgICAgKTtcbiAgICAgIH0gICAgICBcbiAgICB9XG5cbiAgICBpZiAoIWhpc3RvcnlzdGF0ZS52aWV3cG9ydCAmJiAhaGlzdG9yeXN0YXRlLmFkZHJlc3MgJiYgQXBwLmNvbmZpZy5kYXRhLnJldHJpZXZlRWxlbWVudHNCeUFwaSAmJiBoaXN0b3J5c3RhdGUuc3RhdGUgIT0gQXBwU3RhdGVzLlNob3dFbGVtZW50QWxvbmUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiZml0IGRlZmF1bHQgYm91bmRzIG5vIHZpZXdwb3J0IG5vIGFkZHJlc3NcIik7XG4gICAgICBBcHAubWFwQ29tcG9uZW50LmZpdERlZmF1bHRCb3VuZHMoKTtcbiAgICB9IFxuXG4gICAgaWYgKGhpc3RvcnlzdGF0ZS5pZCkgXG4gICAge1xuICAgICAgc2V0VGltZW91dCggKCkgPT4geyBcbiAgICAgICAgQXBwLnNldFN0YXRlKFxuICAgICAgICAgIGhpc3RvcnlzdGF0ZS5zdGF0ZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogaGlzdG9yeXN0YXRlLmlkLCBcbiAgICAgICAgICAgIHBhblRvTG9jYXRpb246IChoaXN0b3J5c3RhdGUudmlld3BvcnQgPT09IG51bGwpXG4gICAgICAgICAgfSxcbiAgICAgICAgICAkYmFja0Zyb21IaXN0b3J5KTtcbiAgICAgICAgJCgnI2RpcmVjdG9yeS1zcGlubmVyLWxvYWRlcicpLmhpZGUoKTsgICAgXG4gICAgICB9LCA0MDApOyAgXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBBcHAuc2V0U3RhdGUoaGlzdG9yeXN0YXRlLnN0YXRlLCBudWxsLCAkYmFja0Zyb21IaXN0b3J5KTsgICAgXG4gICAgfSAgICBcbiAgfTsgICAgXG59IiwiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgQXBwTW9kZXMsIEFwcFN0YXRlcywgQXBwRGF0YVR5cGUgfSBmcm9tIFwiLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSwgdW5zbHVnaWZ5IH0gZnJvbSBcIi4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5pbXBvcnQgeyBNYXJrZXIgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9tYXAvbWFya2VyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRXZlbnQgfSBmcm9tIFwiLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cbmRlY2xhcmUgdmFyICQ7XG5cbmV4cG9ydCBjbGFzcyBNYXBNYW5hZ2VyXG57XG4gIC8vIHdoZW4gY2xpY2sgb24gbWFya2VyIGl0IGFsc28gdHJpZ2VyIGNsaWNrIG9uIG1hcFxuICAvLyB3aGVuIGNsaWNrIG9uIG1hcmtlciB3ZSBwdXQgaXNDbGlja2luZyB0byB0cnVlIGR1cmluZ1xuICAvLyBmZXcgbWlsbGlzZWNvbmRzIHNvIHRoZSBtYXAgZG9uJ3QgZG8gYW55dGhpbmcgaXMgY2xpY2sgZXZlbnRcbiAgcHJpdmF0ZSBpc0NsaWNraW5nID0gZmFsc2U7XG5cbiAgb25NYXJrZXJDbGljayA9IG5ldyBFdmVudDxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoKVxuICB7XG4gICAgQXBwLm1hcENvbXBvbmVudC5vbklkbGUuZG8oICgpID0+IHsgdGhpcy5oYW5kbGVNYXBJZGxlKCk7ICB9KTtcbiAgICBBcHAubWFwQ29tcG9uZW50Lm9uQ2xpY2suZG8oICgpID0+IHsgdGhpcy5oYW5kbGVNYXBDbGljaygpOyB9KTsgICBcbiAgICBBcHAuaW5mb0JhckNvbXBvbmVudC5vbkhpZGUuZG8oICgpPT4geyB0aGlzLmhhbmRsZUluZm9CYXJIaWRlKCk7IH0pOyBcbiAgfVxuXG4gIGhhbmRsZUluZm9CYXJIaWRlKClcbiAge1xuICAgIEFwcC5zZXRTdGF0ZShBcHBTdGF0ZXMuTm9ybWFsKTtcbiAgfTtcblxuICBzZXRUaW1lb3V0Q2xpY2tpbmcoKSBcbiAgeyBcbiAgICB0aGlzLmlzQ2xpY2tpbmcgPSB0cnVlO1xuICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0aGF0LmlzQ2xpY2tpbmcgPSBmYWxzZTsgfSwgMTAwKTsgXG4gIH07XG5cbiAgaGFuZGxlTWFya2VyQ2xpY2sobWFya2VyIDogTWFya2VyKVxuICB7XG4gICAgaWYgKEFwcC5tb2RlICE9IEFwcE1vZGVzLk1hcCkgcmV0dXJuO1xuXG4gICAgdGhpcy5zZXRUaW1lb3V0Q2xpY2tpbmcoKTtcbiAgICB0aGlzLm9uTWFya2VyQ2xpY2suZW1pdChtYXJrZXIuZ2V0RWxlbWVudCgpLmlkKTtcblxuICAgIGlmIChtYXJrZXIuaXNIYWxmSGlkZGVuKCkpIEFwcC5zZXRTdGF0ZShBcHBTdGF0ZXMuTm9ybWFsKTsgIFxuXG4gICAgQXBwLnNldFN0YXRlKEFwcFN0YXRlcy5TaG93RWxlbWVudCwgeyBpZDogbWFya2VyLmdldElkKCkgfSk7ICAgIFxuICB9XG5cbiAgaGFuZGxlTWFwSWRsZSgpXG4gIHsgICAgXG4gICAgaWYgKEFwcC5tb2RlICE9IEFwcE1vZGVzLk1hcCkgICAgIHJldHVybjtcblxuICAgIC8vIHdlIG5lZWQgbWFwIHRvIGJlIGxvYWRlZCB0byBnZXQgdGhlIHJhZGl1cyBvZiB0aGUgdmlld3BvcnRcbiAgICAvLyBhbmQgZ2V0IHRoZSBlbGVtZW50cyBpbnNpZGVcbiAgICBpZiAoIUFwcC5tYXBDb21wb25lbnQuaXNNYXBMb2FkZWQpXG4gICAge1xuICAgICAgQXBwLm1hcENvbXBvbmVudC5vbk1hcExvYWRlZC5kbygoKSA9PiB7dGhpcy5oYW5kbGVNYXBJZGxlKCk7IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB1cGRhdGVJbkFsbEVsZW1lbnRMaXN0ID0gIUFwcC5tYXBDb21wb25lbnQuaGFzWm9vbWVkSW4oKTtcblxuICAgIEFwcC5lbGVtZW50c01vZHVsZS51cGRhdGVFbGVtZW50c1RvRGlzcGxheSh1cGRhdGVJbkFsbEVsZW1lbnRMaXN0KTtcblxuICAgIGlmIChBcHAuc3RhdGUgPT0gQXBwU3RhdGVzLk5vcm1hbCB8fCBBcHAuc3RhdGUgPT0gQXBwU3RhdGVzLlNob3dFbGVtZW50KSBBcHAuZWxlbWVudHNNYW5hZ2VyLmNoZWNrRm9yTmV3RWxlbWVudHNUb1JldHJpZXZlKCk7XG5cbiAgICBpZiAoQXBwLmRhdGFUeXBlID09IEFwcERhdGFUeXBlLkFsbCkgQXBwLmhpc3RvcnlNb2R1bGUudXBkYXRlQ3VyclN0YXRlKCk7XG4gIH07XG5cbiAgaGFuZGxlTWFwQ2xpY2soKVxuICB7XG4gICAgaWYgKHRoaXMuaXNDbGlja2luZykgcmV0dXJuO1xuXG4gICAgLy9jb25zb2xlLmxvZyhcImhhbmRsZSBNYXAgQ2xpY2tcIiwgQXBwU3RhdGVzW0FwcC5zdGF0ZV0pO1xuICAgIFxuICAgIGlmIChBcHAuc3RhdGUgPT0gQXBwU3RhdGVzLlNob3dFbGVtZW50IHx8IEFwcC5zdGF0ZSA9PSBBcHBTdGF0ZXMuU2hvd0VsZW1lbnRBbG9uZSlcbiAgICB7XG4gICAgICBBcHAuaW5mb0JhckNvbXBvbmVudC5oaWRlKCk7IFxuICAgICAgQXBwLnNldFN0YXRlKEFwcFN0YXRlcy5Ob3JtYWwpOyAgICBcbiAgICB9XG4gICAgZWxzZSBpZiAoQXBwLnN0YXRlID09IEFwcFN0YXRlcy5TaG93RGlyZWN0aW9ucylcbiAgICAgIEFwcC5zZXRTdGF0ZShBcHBTdGF0ZXMuU2hvd0VsZW1lbnQsIHsgaWQgOiBBcHAuaW5mb0JhckNvbXBvbmVudC5nZXRDdXJyRWxlbWVudElkKCkgfSk7ICAgIFxuICAgIFxuICAgIEFwcC5tYXBDb250cm9sc0NvbXBvbmVudC5oaWRlQ29udHJvbExheWVycygpO1xuICB9O1xuXG4gIFxufSIsImltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEFwcERhdGFUeXBlIH0gZnJvbSBcIi4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IGNhcGl0YWxpemUsIHVuc2x1Z2lmeSB9IGZyb20gXCIuLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuXG5leHBvcnQgZW51bSBBcHBNb2Rlc1xue1xuICBNYXAgPSAxLFxuICBMaXN0ID0gMlxufVxuXG5leHBvcnQgY2xhc3MgTW9kZU1hbmFnZXJcbntcbiAgcHJpdmF0ZSBtb2RlXyA6IEFwcE1vZGVzID0gbnVsbDtcblxuICAvKlxuICAqIENoYW5nZSBBcHAgbW9kZVxuICAqL1xuICBzZXRNb2RlKCRtb2RlIDogQXBwTW9kZXMsICRiYWNrRnJvbUhpc3RvcnkgOiBib29sZWFuID0gZmFsc2UsICR1cGRhdGVUaXRsZUFuZFN0YXRlID0gdHJ1ZSlcbiAge1xuICAgIEFwcC5lbGVtZW50c01vZHVsZS5jbGVhckN1cnJlbnRzRWxlbWVudCgpO1xuICAgIEFwcC5lbGVtZW50TGlzdENvbXBvbmVudC5jbGVhcigpO1xuXG4gICAgaWYgKCRtb2RlID09IEFwcE1vZGVzLk1hcCkgdGhpcy5zZXRNYXBNb2RlKCk7XG4gICAgZWxzZSB0aGlzLnNldExpc3RNb2RlKCk7XG5cbiAgICAvLyBpZiBwcmV2aW91cyBtb2RlIHdhc24ndCBudWxsIFxuICAgIGxldCBvbGRNb2RlID0gdGhpcy5tb2RlXztcbiAgICB0aGlzLm1vZGVfID0gJG1vZGU7XG5cbiAgICAvLyB1cGRhdGUgaGlzdG9yeSBpZiB3ZSBuZWVkIHRvXG4gICAgaWYgKG9sZE1vZGUgIT0gbnVsbCAmJiAhJGJhY2tGcm9tSGlzdG9yeSkgQXBwLmhpc3RvcnlNb2R1bGUucHVzaE5ld1N0YXRlKCk7XG5cbiAgICBBcHAuZ29nb0NvbnRyb2xDb21wb25lbnQudXBkYXRlUG9zaXRpb24oKTtcbiAgICBcbiAgICBzZXRUaW1lb3V0KCAoKSA9PiBBcHAuZWxlbWVudHNNb2R1bGUudXBkYXRlRWxlbWVudHNUb0Rpc3BsYXkodHJ1ZSkgLCAzMDApO1xuXG4gICAgaWYgKCR1cGRhdGVUaXRsZUFuZFN0YXRlKVxuICAgIHtcbiAgICAgIEFwcC5kb2N1bWVudFRpdGxlTW9kdWxlLnVwZGF0ZURvY3VtZW50VGl0bGUoKTsgIFxuXG4gICAgICAvLyBhZnRlciBjbGVhcmluZywgd2Ugc2V0IHRoZSBjdXJyZW50IHN0YXRlIGFnYWluXG4gICAgICBpZiAoJG1vZGUgPT0gQXBwTW9kZXMuTWFwKSBBcHAuc2V0U3RhdGUoQXBwLnN0YXRlLCB7aWQgOiBBcHAuc3RhdGVNYW5hZ2VyLnN0YXRlRWxlbWVudElkfSk7ICBcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE1hcE1vZGUoKVxuICB7XG4gICAgQXBwLm1hcENvbXBvbmVudC5zaG93KCk7XG4gICAgQXBwLmVsZW1lbnRMaXN0Q29tcG9uZW50LmhpZGUoKTsgICAgICAgIFxuXG4gICAgQXBwLm1hcENvbXBvbmVudC5pbml0aWFsaXplKCk7ICAgIFxuXG4gICAgaWYgKEFwcC5tYXBDb21wb25lbnQuaXNNYXBMb2FkZWQpIEFwcC5ib3VuZHNNb2R1bGUuZXh0ZW5kQm91bmRzKDAsIEFwcC5tYXBDb21wb25lbnQuZ2V0Qm91bmRzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRMaXN0TW9kZSgpXG4gIHtcbiAgICBBcHAubWFwQ29tcG9uZW50LmhpZGUoKTtcbiAgICBBcHAuZWxlbWVudExpc3RDb21wb25lbnQuc2hvdygpOyAgICAgICAgXG5cbiAgICAvLyBjb25zb2xlLmxvZyhcImxpc3QgbW9kZVwiLCBBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb24oKSk7ICAgICAgXG5cbiAgICBpZiAoQXBwLmRhdGFUeXBlID09IEFwcERhdGFUeXBlLkFsbClcbiAgICB7XG4gICAgICBsZXQgY2VudGVyTG9jYXRpb24gOiBMLkxhdExuZztcbiAgICAgIGxldCBhZGRyZXNzID0gQXBwLmdlb2NvZGVyLmxhc3RBZGRyZXNzUmVxdWVzdDtcblxuICAgICAgaWYgKEFwcC5tYXBDb21wb25lbnQuaXNJbml0aWFsaXplZCkge1xuICAgICAgICBjZW50ZXJMb2NhdGlvbiA9IEFwcC5tYXBDb21wb25lbnQuZ2V0Q2VudGVyKCk7XG4gICAgICAgIEFwcC5lbGVtZW50TGlzdENvbXBvbmVudC5zZXRUaXRsZSgnIGF1dG91ciBkdSBjZW50cmUgZGUgbGEgY2FydGUnKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKEFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbigpKSB7ICAgICAgICAgIFxuICAgICAgICBjZW50ZXJMb2NhdGlvbiA9IEFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbigpO1xuICAgICAgICBBcHAuZWxlbWVudExpc3RDb21wb25lbnQuc2V0VGl0bGUoJyBhdXRvdXIgZGUgPGk+JyArIGNhcGl0YWxpemUodW5zbHVnaWZ5KGFkZHJlc3MpKSArICc8L2k+Jyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2VudGVyTG9jYXRpb24gPSBBcHAuYm91bmRzTW9kdWxlLmRlZmF1bHRDZW50ZXI7XG4gICAgICAgIEFwcC5lbGVtZW50TGlzdENvbXBvbmVudC5zZXRUaXRsZSgnJyk7XG4gICAgICB9ICAgICAgICAgXG5cbiAgICAgIEFwcC5ib3VuZHNNb2R1bGUuY3JlYXRlQm91bmRzRnJvbUxvY2F0aW9uKGNlbnRlckxvY2F0aW9uKTtcbiAgICAgIEFwcC5lbGVtZW50c01hbmFnZXIuY2hlY2tGb3JOZXdFbGVtZW50c1RvUmV0cmlldmUodHJ1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKEFwcC5kYXRhVHlwZSA9PSBBcHBEYXRhVHlwZS5TZWFyY2hSZXN1bHRzKVxuICAgIHtcbiAgICAgIEFwcC5lbGVtZW50c01vZHVsZS51cGRhdGVFbGVtZW50c1RvRGlzcGxheSh0cnVlLGZhbHNlKTtcbiAgICAgIEFwcC5lbGVtZW50TGlzdENvbXBvbmVudC5zZXRUaXRsZSgnJyk7XG4gICAgfSAgICAgIFxuICB9XG5cbiAgZ2V0IG1vZGUoKSB7IHJldHVybiB0aGlzLm1vZGVfOyB9XG59IiwiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgQXBwRGF0YVR5cGUsIEFwcE1vZGVzIH0gZnJvbSBcIi4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cbmV4cG9ydCBlbnVtIEFwcFN0YXRlcyBcbntcbiAgTm9ybWFsLFxuICBTaG93RWxlbWVudCxcbiAgU2hvd0VsZW1lbnRBbG9uZSxcbiAgU2hvd0RpcmVjdGlvbnNcbn1cblxuZXhwb3J0IGNsYXNzIFN0YXRlTWFuYWdlclxue1xuICAvLyBjdXJyIHN0YXRlIG9mIHRoZSBhcHBcbiAgcHJpdmF0ZSBzdGF0ZV8gOiBBcHBTdGF0ZXMgPSBudWxsOyAgXG5cbiAgLy8gc29tZXMgc3RhdGVzIG5lZWQgYSBlbGVtZW50IGlkLCB3ZSBzdG9yZSBpdCBpbiB0aGlzIHByb3BlcnR5XG4gIHByaXZhdGUgc3RhdGVFbGVtZW50SWRfIDogbnVtYmVyID0gbnVsbDtcblxuICBnZXQgc3RhdGUoKSB7IHJldHVybiB0aGlzLnN0YXRlXzsgfVxuICBnZXQgc3RhdGVFbGVtZW50SWQoKSA6IG51bWJlciB7IHJldHVybiB0aGlzLnN0YXRlRWxlbWVudElkXzsgfVxuXG4gIC8qXG4gICogQ2hhbmdlIEFwcCBzdGF0ZVxuICAqL1xuICBzZXRTdGF0ZSgkbmV3U3RhdGUgOiBBcHBTdGF0ZXMsIG9wdGlvbnMgOiBhbnkgPSB7fSwgJGJhY2tGcm9tSGlzdG9yeSA6IGJvb2xlYW4gPSBmYWxzZSkgXG4gIHsgICBcbiAgICAvLyBjb25zb2xlLmxvZyhcIkFwcE1vZHVsZSBzZXQgU3RhdGUgOiBcIiArIEFwcFN0YXRlc1skbmV3U3RhdGVdICArICAnLCBvcHRpb25zID0gJyxvcHRpb25zKTtcbiAgICBsZXQgZWxlbWVudCA9IChvcHRpb25zICYmIG9wdGlvbnMuaWQpID8gQXBwLmVsZW1lbnRCeUlkKG9wdGlvbnMuaWQpIDogbnVsbDtcblxuICAgIGxldCBvbGRTdGF0ZU5hbWUgPSB0aGlzLnN0YXRlXztcbiAgICB0aGlzLnN0YXRlXyA9ICRuZXdTdGF0ZTsgICAgICBcblxuICAgIGlmIChvbGRTdGF0ZU5hbWUgPT0gQXBwU3RhdGVzLlNob3dEaXJlY3Rpb25zICYmIEFwcC5kaXJlY3Rpb25zQ29tcG9uZW50KSBcbiAgICAgIEFwcC5kaXJlY3Rpb25zQ29tcG9uZW50LmNsZWFyKCk7XG5cbiAgICBpZiAob2xkU3RhdGVOYW1lID09IEFwcFN0YXRlcy5TaG93RWxlbWVudEFsb25lKSAgXG4gICAge1xuICAgICAgQXBwLmVsZW1lbnRzTW9kdWxlLmNsZWFyQ3VycmVudHNFbGVtZW50KCk7XG4gICAgICBBcHAuZGlzcGxheUVsZW1lbnRBbG9uZU1vZHVsZS5lbmQoKTsgIFxuICAgIH0gIFxuXG4gICAgdGhpcy5zdGF0ZUVsZW1lbnRJZF8gPSBvcHRpb25zID8gb3B0aW9ucy5pZCA6IG51bGw7XG4gICAgXG4gICAgc3dpdGNoICgkbmV3U3RhdGUpXG4gICAge1xuICAgICAgY2FzZSBBcHBTdGF0ZXMuTm9ybWFsOiB0aGlzLnNldE5vcm1hbFN0YXRlKCk7IGJyZWFrO1xuICAgICAgY2FzZSBBcHBTdGF0ZXMuU2hvd0VsZW1lbnQ6IHRoaXMuc2V0U2hvd0VsZW1lbnRTdGF0ZShlbGVtZW50LCBvcHRpb25zKTsgYnJlYWs7IFxuICAgICAgY2FzZSBBcHBTdGF0ZXMuU2hvd0VsZW1lbnRBbG9uZTogdGhpcy5zZXRTaG93RWxlbWVudEFsb25lU3RhdGUoZWxlbWVudCwgb3B0aW9ucyk7IGJyZWFrO1xuICAgICAgY2FzZSBBcHBTdGF0ZXMuU2hvd0RpcmVjdGlvbnM6IHRoaXMuc2V0U2hvd0RpcmVjdGlvbnNTdGF0ZShlbGVtZW50LCBvcHRpb25zKTticmVhazsgICAgICBcbiAgICB9XG5cbiAgICBpZiAoISRiYWNrRnJvbUhpc3RvcnkgJiZcbiAgICAgICAoIG9sZFN0YXRlTmFtZSAhPT0gJG5ld1N0YXRlIFxuICAgICAgICB8fCAkbmV3U3RhdGUgPT0gQXBwU3RhdGVzLlNob3dFbGVtZW50XG4gICAgICAgIHx8ICRuZXdTdGF0ZSA9PSBBcHBTdGF0ZXMuU2hvd0VsZW1lbnRBbG9uZVxuICAgICAgICB8fCAkbmV3U3RhdGUgPT0gQXBwU3RhdGVzLlNob3dEaXJlY3Rpb25zKSApXG4gICAge1xuICAgICAgaWYgKEFwcC5kYXRhVHlwZSA9PSBBcHBEYXRhVHlwZS5BbGwpIEFwcC5oaXN0b3J5TW9kdWxlLnB1c2hOZXdTdGF0ZShvcHRpb25zKTtcbiAgICAgIGVsc2UgQXBwLmhpc3RvcnlNb2R1bGUudXBkYXRlQ3VyclN0YXRlKG9wdGlvbnMpO1xuICAgIH0gICAgIFxuXG4gICAgQXBwLmRvY3VtZW50VGl0bGVNb2R1bGUudXBkYXRlRG9jdW1lbnRUaXRsZShvcHRpb25zKTtcbiAgfTtcblxuICBwcml2YXRlIHNldE5vcm1hbFN0YXRlKClcbiAge1xuICAgIEFwcC5pbmZvQmFyQ29tcG9uZW50LmhpZGUoZmFsc2UpO1xuICB9ICBcblxuICBwcml2YXRlIHNldFNob3dFbGVtZW50U3RhdGUoZWxlbWVudCwgb3B0aW9ucylcbiAge1xuICAgIGlmIChBcHAubW9kZSA9PSBBcHBNb2Rlcy5MaXN0KVxuICAgIHtcbiAgICAgIGlmICghQXBwLm1hcENvbXBvbmVudC5pc0luaXRpYWxpemVkKVxuICAgICAge1xuICAgICAgICBBcHAubWFwQ29tcG9uZW50Lm9uTWFwUmVhZHkuZG8oKCkgPT4gXG4gICAgICAgIHtcbiAgICAgICAgICBBcHAubWFwQ29tcG9uZW50LnBhblRvTG9jYXRpb24oZWxlbWVudC5wb3NpdGlvbiwgMTQsIGZhbHNlKTtcbiAgICAgICAgICBBcHAuaW5mb0JhckNvbXBvbmVudC5zaG93RWxlbWVudChlbGVtZW50LmlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIEFwcC5tYXBDb21wb25lbnQucGFuVG9Mb2NhdGlvbihlbGVtZW50LnBvc2l0aW9uLCAxNCwgZmFsc2UpOyAgICAgICAgICAgIFxuICAgICAgICBBcHAuaW5mb0JhckNvbXBvbmVudC5zaG93RWxlbWVudChlbGVtZW50LmlkKTtcbiAgICAgIH0gICAgICAgICAgICBcblxuICAgICAgQXBwLnNldE1vZGUoQXBwTW9kZXMuTWFwLCBmYWxzZSwgZmFsc2UpO1xuICAgIH0gXG4gICAgZWxzZSAvLyBBcHBNb2RlXG4gICAge1xuICAgICAgQXBwLmluZm9CYXJDb21wb25lbnQuc2hvd0VsZW1lbnQoZWxlbWVudC5pZCk7XG4gICAgfVxuICB9ICBcblxuICBwcml2YXRlIHNldFNob3dFbGVtZW50QWxvbmVTdGF0ZShlbGVtZW50LCBvcHRpb25zKVxuICB7XG4gICAgQXBwLmluZm9CYXJDb21wb25lbnQuc2hvdygpO1xuXG4gICAgaWYgKGVsZW1lbnQpXG4gICAge1xuICAgICAgQXBwLkRFQU1vZHVsZS5iZWdpbihlbGVtZW50LmlkLCB0cnVlKTsgICAgICAgICAgXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBBcHAuYWpheE1vZHVsZS5nZXRFbGVtZW50QnlJZChvcHRpb25zLmlkLFxuICAgICAgICAoZWxlbWVudEpzb24pID0+IHtcbiAgICAgICAgICBBcHAuZWxlbWVudHNKc29uTW9kdWxlLmNvbnZlcnRKc29uRWxlbWVudHMoW2VsZW1lbnRKc29uXSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgQXBwLkRFQU1vZHVsZS5iZWdpbihlbGVtZW50SnNvbi5pZCwgdHJ1ZSk7XG4gICAgICAgICAgQXBwLmRvY3VtZW50VGl0bGVNb2R1bGUudXBkYXRlRG9jdW1lbnRUaXRsZShvcHRpb25zKTtcbiAgICAgICAgICBBcHAuaGlzdG9yeU1vZHVsZS51cGRhdGVDdXJyU3RhdGUob3B0aW9ucyk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4gXG4gICAgICAgIHsgXG4gICAgICAgICAgbGV0IGhpc3RvcnlzdGF0ZSA9IEFwcC5oaXN0b3J5U3RhdGVNYW5hZ2VyLmxhc3RIaXN0b3J5U3RhdGU7XG4gICAgICAgICAgQXBwLmNvbXBvbmVudC50b2FzdE1lc3NhZ2UoXCJFcnJldXIgcGVuZGFudCBsZSBjaGFyZ2VtZW50IGRlIGNldCDDqWxlbWVudFwiKTtcbiAgICAgICAgICBcbiAgICAgICAgICBBcHAuc2V0U3RhdGUoQXBwU3RhdGVzLk5vcm1hbCk7XG4gICAgICAgICAgaWYgKGhpc3RvcnlzdGF0ZS52aWV3cG9ydCkgQXBwLm1hcENvbXBvbmVudC5zZXRWaWV3UG9ydChoaXN0b3J5c3RhdGUudmlld3BvcnQpO1xuICAgICAgICAgIGVsc2UgQXBwLm1hcENvbXBvbmVudC5maXREZWZhdWx0Qm91bmRzKCk7XG4gICAgICAgICAgc2V0VGltZW91dCggKCkgPT4geyBBcHAuaW5mb0JhckNvbXBvbmVudC5oaWRlKCk7IH0sIDIwMCk7XG4gICAgICAgICAgc2V0VGltZW91dCggKCkgPT4geyBBcHAuaW5mb0JhckNvbXBvbmVudC5oaWRlKCk7IH0sIDUwMCk7XG4gICAgICAgIH1cbiAgICAgICk7ICAgICAgICAgICAgXG4gICAgfSAgICAgIFxuICB9XG5cbiAgcHJpdmF0ZSBzZXRTaG93RGlyZWN0aW9uc1N0YXRlKGVsZW1lbnQgOiBFbGVtZW50LCBvcHRpb25zKVxuICB7XG4gICAgbGV0IG9yaWdpbiA9IEFwcC5nZW9jb2Rlci5nZXRMb2NhdGlvbigpOyBcbiAgICAvLyBpZiBubyBlbGVtZW50LCB3ZSBnZXQgaXQgZnJvbSBhamF4IFxuICAgIGlmICghZWxlbWVudClcbiAgICB7XG4gICAgICBpZiAoIW9wdGlvbnMuaWQpIHJldHVybjsgXG4gICAgICBBcHAuYWpheE1vZHVsZS5nZXRFbGVtZW50QnlJZChvcHRpb25zLmlkLCAoZWxlbWVudEpzb24pID0+IFxuICAgICAgeyBcbiAgICAgICAgQXBwLmVsZW1lbnRzSnNvbk1vZHVsZS5jb252ZXJ0SnNvbkVsZW1lbnRzKFtlbGVtZW50SnNvbl0sIHRydWUsIHRydWUpO1xuICAgICAgICBlbGVtZW50ID0gQXBwLmVsZW1lbnRCeUlkKGVsZW1lbnRKc29uLmlkKTtcbiAgICAgICAgQXBwLmRvY3VtZW50VGl0bGVNb2R1bGUudXBkYXRlRG9jdW1lbnRUaXRsZShvcHRpb25zKTsgIFxuICAgICAgICB0aGlzLmNoZWNrSWZSZWFkeVRvU3RhcnREaXJlY3Rpb25zKGVsZW1lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4geyAvKlRPRE8qLyBhbGVydChcIk5vIGVsZW1lbnQgd2l0aCBBcHAgaWRcIik7IH1cbiAgICAgICk7ICAgICAgICAgICAgICAgXG4gICAgfVxuXG4gICAgdGhpcy5jaGVja0lmUmVhZHlUb1N0YXJ0RGlyZWN0aW9ucyhlbGVtZW50KSAgXG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZSZWFkeVRvU3RhcnREaXJlY3Rpb25zKGVsZW1lbnQpXG4gIHtcbiAgICBsZXQgb3JpZ2luID0gQXBwLmdlb2NvZGVyLmdldExvY2F0aW9uKCk7XG4gICAgICBcbiAgICBpZiAoIWVsZW1lbnQgfHwgIW9yaWdpbikgcmV0dXJuO1xuICAgIFxuICAgIGlmIChBcHAubW9kZSA9PSBBcHBNb2Rlcy5MaXN0KVxuICAgIHtcbiAgICAgIGlmICghQXBwLm1hcENvbXBvbmVudC5pc0luaXRpYWxpemVkKVxuICAgICAge1xuICAgICAgICBBcHAubWFwQ29tcG9uZW50Lm9uTWFwUmVhZHkuZG8oKCkgPT4geyB0aGlzLmJlZ2luRGlyZWN0aW9uc0NhbGN1bGF0aW9uKG9yaWdpbiwgZWxlbWVudCk7IH0pO1xuICAgICAgfSAgICAgICAgICAgXG5cbiAgICAgIEFwcC5zZXRNb2RlKEFwcE1vZGVzLk1hcCwgZmFsc2UsIGZhbHNlKTtcbiAgICB9IFxuICAgICAgXG4gICAgdGhpcy5iZWdpbkRpcmVjdGlvbnNDYWxjdWxhdGlvbihvcmlnaW4sIGVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBiZWdpbkRpcmVjdGlvbnNDYWxjdWxhdGlvbiA9IGZ1bmN0aW9uIChvcmlnaW4gOiBMLkxhdExuZywgZWxlbWVudCA6IEVsZW1lbnQpXG4gIHtcbiAgICBpZiAoIUFwcC5tYXBDb21wb25lbnQuaXNJbml0aWFsaXplZCkgcmV0dXJuO1xuXG4gICAgQXBwLkRFQU1vZHVsZS5iZWdpbihlbGVtZW50LmlkLCBmYWxzZSk7XG4gICAgLy8gd2FpdCBmb3IgdGhlIGluZm8gYmFyIHRvIG9wZW4sIHNvIHRoZSBtYXAgaXMgcmVzaXplZCBhdCB0aGlzIGZpbmFsIHZpZXdwb3J0XG4gICAgLy8gVGhlbiB3ZSBjYW4gY2FsY3VsYXRlIHJvdXRlIGFuZCBmaXRib3VuZHMgcmVnYXJkaW5nIHJvdXRpbmcgcmVzdWx0XG4gICAgc2V0VGltZW91dCggKCkgPT4geyBBcHAuZGlyZWN0aW9uc0NvbXBvbmVudC5jYWxjdWxhdGVSb3V0ZShvcmlnaW4sIGVsZW1lbnQpOyB9LCA0MDApOyAgICAgXG4gIH07XG59IiwiLyoqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR29Hb0NhcnRvIHByb2plY3QuXG4gKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRVxuICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuXG4gKlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTYgU2ViYXN0aWFuIENhc3RybyAtIDkwc2Nhc3Ryb0BnbWFpbC5jb21cbiAqIEBsaWNlbnNlIEdOVSBHUEwgdjNcbiAqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMTYtMTItMTNcbiAqL1xuXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gXCIuLi9jbGFzc2VzL2V2ZW50LmNsYXNzXCI7XG5pbXBvcnQgeyBBcHBNb2R1bGUsIEFwcFN0YXRlcyB9IGZyb20gXCIuLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vZ29nb2NhcnRvXCI7XG5kZWNsYXJlIHZhciAkIDogYW55LCBMIDogYW55O1xuZGVjbGFyZSBsZXQgUm91dGluZztcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3Rcbntcblx0Y29uc3RydWN0b3IocHVibGljIHJvdXRlIDogc3RyaW5nLCBwdWJsaWMgZGF0YSA6IGFueSkge307XG59XG5cbmV4cG9ydCBjbGFzcyBBamF4TW9kdWxlXG57XG5cdG9uTmV3RWxlbWVudHMgPSBuZXcgRXZlbnQ8YW55W10+KCk7XG5cblx0aXNSZXRyaWV2aW5nRWxlbWVudHMgOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y3VyckVsZW1lbnRJZFJldHJpZXZpbmcgOiBudW1iZXI7XG5cdGN1cnJCb3VuZHNSZXRyaWV2aW5nIDogTC5MYXRMbmdCb3VuZHNbXTtcblxuXHRyZXF1ZXN0V2FpdGluZ1RvQmVFeGVjdXRlZCA6IGJvb2xlYW4gPSBmYWxzZTtcblx0d2FpdGluZ1JlcXVlc3RGdWxsUmVwcmVzZW50YXRpb24gOiBib29sZWFuID0gbnVsbDtcblxuXHRjdXJyUmVxdWVzdCA6IFJlcXVlc3QgPSBudWxsO1xuXG5cdGxvYWRlclRpbWVyID0gbnVsbDtcblxuXHRhbGxFbGVtZW50c1JlY2VpdmVkID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IoKSB7IH0gIFxuXG5cdHNlbmRSZXF1ZXN0KHJvdXRlIDogc3RyaW5nLCBtZXRob2QgOiBzdHJpbmcsIGRhdGEgOiBhbnksIGNhbGxiYWNrU3VjY2Vzcz8sIGNhbGxiYWNrRmFpbHVyZT8pXG5cdHtcblx0XHQvL2NvbnNvbGUubG9nKFwiU2VuZEFqYXhSZXF1ZXN0IHRvIFwiICsgcm91dGUsIGRhdGEpO1xuXHRcdCQuYWpheCh7XG5cdFx0XHR1cmw6IHJvdXRlLFxuXHRcdFx0bWV0aG9kOiBtZXRob2QsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogcmVzcG9uc2UgPT4geyBpZiAocmVzcG9uc2UgJiYgY2FsbGJhY2tTdWNjZXNzKSBjYWxsYmFja1N1Y2Nlc3MocmVzcG9uc2UpOyB9LFxuXHRcdFx0ZXJyb3I6IHJlc3BvbnNlID0+IHsgaWYgKGNhbGxiYWNrRmFpbHVyZSkgY2FsbGJhY2tGYWlsdXJlKHJlc3BvbnNlLmRhdGEpOyB9XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRFbGVtZW50QnlJZChlbGVtZW50SWQsIGNhbGxiYWNrU3VjY2Vzcz8sIGNhbGxiYWNrRmFpbHVyZT8pXG5cdHtcblx0XHRpZiAoZWxlbWVudElkID09IHRoaXMuY3VyckVsZW1lbnRJZFJldHJpZXZpbmcpIHJldHVybjtcdFx0XG5cdFx0dGhpcy5jdXJyRWxlbWVudElkUmV0cmlldmluZyA9IGVsZW1lbnRJZDtcblx0XHRcblx0XHQkLmFqYXgoe1xuXHRcdFx0dXJsOiB0aGlzLmdldFNpbmdsZUVsZW1lbnRBcGlVcmwoZWxlbWVudElkKSxcblx0XHRcdG1ldGhvZDogXCJnZXRcIixcblx0XHRcdGRhdGE6IHsgfSxcblx0XHRcdHN1Y2Nlc3M6IHJlc3BvbnNlID0+IFxuXHRcdFx0e1x0ICAgICAgICBcblx0XHRcdFx0aWYgKHJlc3BvbnNlKVxuXHRcdFx0XHR7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGxldCBlbGVtZW50SnNvbjtcdFxuXHRcdFx0XHRcdGlmIChyZXNwb25zZS5kYXRhKSBlbGVtZW50SnNvbiA9IEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZGF0YSkgPyByZXNwb25zZS5kYXRhWzBdIDogcmVzcG9uc2UuZGF0YTtcdFx0XHRcblx0XHRcdFx0XHRlbHNlIGVsZW1lbnRKc29uID0gcmVzcG9uc2U7XG5cblx0XHRcdFx0XHRpZiAoY2FsbGJhY2tTdWNjZXNzKSBjYWxsYmFja1N1Y2Nlc3MoZWxlbWVudEpzb24pOyBcdFx0XHRcdFx0XG5cdFx0XHRcdH1cdFxuXHRcdFx0XHRlbHNlIGlmIChjYWxsYmFja0ZhaWx1cmUpIGNhbGxiYWNrRmFpbHVyZShyZXNwb25zZSk7IFxuXHRcdFx0XHRcblx0XHRcdFx0dGhpcy5jdXJyRWxlbWVudElkUmV0cmlldmluZyA9IG51bGw7XHRcdFx0XHQgICAgICAgXG5cdFx0XHR9LFxuXHRcdFx0ZXJyb3I6IHJlc3BvbnNlID0+IHsgaWYgKGNhbGxiYWNrRmFpbHVyZSkgY2FsbGJhY2tGYWlsdXJlKHJlc3BvbnNlKTsgdGhpcy5jdXJyRWxlbWVudElkUmV0cmlldmluZyA9IG51bGw7IH1cblx0XHR9KTtcblx0fTtcblxuXHRnZXRFbGVtZW50c0luQm91bmRzKCRib3VuZHMgOiBMLkxhdExuZ0JvdW5kc1tdLCBnZXRGdWxsUmVwcmVzZW50YXRpb24gOiBib29sZWFuID0gZmFsc2UsIGV4cGVjdGVkRmlsbGVkQm91bmRzIDogTC5MYXRMbmdCb3VuZHMpXG5cdHtcblx0XHRpZiAodGhpcy5jdXJyQm91bmRzUmV0cmlldmluZyAmJiAkYm91bmRzWzBdLmVxdWFscyh0aGlzLmN1cnJCb3VuZHNSZXRyaWV2aW5nWzBdKSkgcmV0dXJuO1x0XHRcblx0XHR0aGlzLmN1cnJCb3VuZHNSZXRyaWV2aW5nID0gJGJvdW5kcztcblxuXHRcdC8vIGlmIGludmFsaWQgbG9jYXRpb24gd2UgYWJvcnRcblx0XHRpZiAoISRib3VuZHMgfHwgJGJvdW5kcy5sZW5ndGggPT0gMCB8fCAhJGJvdW5kc1swXSkgeyByZXR1cm47IH1cblxuXHRcdGxldCBib3VuZHNSZXN1bHQgPSB0aGlzLmNvbnZlcnRCb3VuZHNJbnRvUGFyYW1zKCRib3VuZHMpO1xuXG5cdFx0bGV0IGJuZHMgPSBib3VuZHNSZXN1bHQuYm91bmRzSnNvbjtcblx0XHRsZXQgZGF0YVJlcXVlc3QgOiBhbnkgPSB7IFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ym91bmRzIDogYm91bmRzUmVzdWx0LmJvdW5kc1N0cmluZywgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRib3VuZHNKc29uIDogSlNPTi5zdHJpbmdpZnkoYm91bmRzUmVzdWx0LmJvdW5kc0pzb24pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2F0ZWdvcmllcyA6IEFwcC5jdXJyTWFpbklkICE9IFwiYWxsXCIgPyBbQXBwLmN1cnJNYWluSWRdIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZ1bGxSZXByZXNlbnRhdGlvbiA6IGdldEZ1bGxSZXByZXNlbnRhdGlvbiwgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbnRvbG9neSA6IGdldEZ1bGxSZXByZXNlbnRhdGlvbiA/ICdnb2dvZnVsbCcgOiAnZ29nb2NvbXBhY3QnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhbXBzSWRzIDogQXBwLnJlcXVlc3Quc3RhbXBzSWRzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcdFx0XG5cdFx0bGV0IHJvdXRlO1xuXHRcdGlmIChnZXRGdWxsUmVwcmVzZW50YXRpb24pIHJvdXRlID0gQXBwLmNvbmZpZy5kYXRhLmVsZW1lbnRzO1xuXHRcdGVsc2Ugcm91dGUgPSBBcHAuY29uZmlnLmRhdGEuZWxlbWVudHNDb21wYWN0QXBpVXJsIHx8IEFwcC5jb25maWcuZGF0YS5lbGVtZW50cztcblx0XHRcblx0XHR0aGlzLnNlbmRBamF4RWxlbWVudFJlcXVlc3QobmV3IFJlcXVlc3Qocm91dGUsIGRhdGFSZXF1ZXN0KSwgZXhwZWN0ZWRGaWxsZWRCb3VuZHMpO1xuXHR9XHRcblxuXHRwcml2YXRlIGNvbnZlcnRCb3VuZHNJbnRvUGFyYW1zKCRib3VuZHMgOiBMLkxhdExuZ0JvdW5kc1tdKSBcblx0e1xuXHRcdGxldCBzdHJpbmdpZmllZEJvdW5kcyA9IFwiXCI7XG5cdFx0bGV0IGRpZ2l0cyA9IDU7XG5cdFx0bGV0IGJvdW5kc0xlc3NEaWdpdHMgPSBbXTtcblx0XHRmb3IgKGxldCBib3VuZCBvZiAkYm91bmRzKVxuXHRcdHtcblx0XHRcdGxldCBzb3V0aFdlc3QgPSBMLmxhdExuZyhMLlV0aWwuZm9ybWF0TnVtKGJvdW5kLmdldFNvdXRoV2VzdCgpLmxhdCwgZGlnaXRzKSwgTC5VdGlsLmZvcm1hdE51bShib3VuZC5nZXRTb3V0aFdlc3QoKS5sbmcsIGRpZ2l0cykpXG5cdFx0XHRsZXQgbm9ydEVhc3QgPSBMLmxhdExuZyhMLlV0aWwuZm9ybWF0TnVtKGJvdW5kLmdldE5vcnRoRWFzdCgpLmxhdCwgZGlnaXRzKSwgTC5VdGlsLmZvcm1hdE51bShib3VuZC5nZXROb3J0aEVhc3QoKS5sbmcsIGRpZ2l0cykpXG5cdFx0XHRib3VuZCA9IEwubGF0TG5nQm91bmRzKHNvdXRoV2VzdCwgbm9ydEVhc3QpO1xuXHRcdFx0Ym91bmRzTGVzc0RpZ2l0cy5wdXNoKGJvdW5kKTtcblx0XHRcdHN0cmluZ2lmaWVkQm91bmRzICs9IGJvdW5kLnRvQkJveFN0cmluZygpICsgXCI7XCI7XG5cdFx0fVxuXG5cdFx0Ly8gc29tZSBBUEkgZW5kcG9pbnQgbmVlZHMgYSBmaXhlZCBudW1iZXIgb2YgYm91bmRzIGVxdWFscyB0byA0XG5cdFx0aWYgKCRib3VuZHMubGVuZ3RoIDwgNClcblx0XHR7XG5cdFx0XHRsZXQgZW1wdHlCb3VuZCA9IEwubGF0TG5nQm91bmRzKEwubGF0TG5nKDAsMCksIEwubGF0TG5nKDAsMCkpO1xuXHRcdFx0Zm9yICh2YXIgaSA9ICRib3VuZHMubGVuZ3RoOyBpIDwgNDsgaSsrKSBib3VuZHNMZXNzRGlnaXRzLnB1c2goZW1wdHlCb3VuZCk7XHRcdFx0XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtib3VuZHNTdHJpbmc6IHN0cmluZ2lmaWVkQm91bmRzLCBib3VuZHNKc29uOiBib3VuZHNMZXNzRGlnaXRzfTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0U2luZ2xlRWxlbWVudEFwaVVybCgkZWxlbWVudElkIDogYW55KSA6IHN0cmluZ1xuXHR7XG5cdFx0bGV0IHJvdXRlID0gXCJcIjtcblx0XHRpZiAoQXBwLmNvbmZpZy5kYXRhLmVsZW1lbnRCeUlkVXJsKSBcblx0XHR7XG5cdFx0XHRyb3V0ZSA9IEFwcC5jb25maWcuZGF0YS5lbGVtZW50QnlJZFVybDtcblx0XHRcdGlmIChyb3V0ZS5pbmRleE9mKCd7SUR9JykgPiAwKSByb3V0ZSA9IHJvdXRlLnJlcGxhY2UoJ3tJRH0nLCAkZWxlbWVudElkLnRvU3RyaW5nKCkpO1xuXHRcdFx0ZWxzZSBcblx0XHRcdHtcblx0XHRcdFx0aWYgKHJvdXRlLnNsaWNlKC0xKSAhPSAnLycpIHJvdXRlICs9ICcvJztcblx0XHRcdFx0cm91dGUgKz0gJGVsZW1lbnRJZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSByb3V0ZSA9IEFwcC5jb25maWcuZGF0YS5lbGVtZW50cyArICcvJyArICRlbGVtZW50SWQ7XG5cdFx0cmV0dXJuIHJvdXRlO1xuXHR9XG5cblx0cHJpdmF0ZSBzZW5kQWpheEVsZW1lbnRSZXF1ZXN0KCRyZXF1ZXN0IDogUmVxdWVzdCwgJGV4cGVjdGVkRmlsbGVkQm91bmRzID0gbnVsbClcblx0e1xuXHRcdGlmICh0aGlzLmFsbEVsZW1lbnRzUmVjZWl2ZWQpIHsgLypjb25zb2xlLmxvZyhcIkFsbCBlbGVtZW50cyBhbHJlYWR5IHJlY2VpdmVkXCIpOyovIHJldHVybjsgfVxuXG5cdFx0Ly8gY29uc29sZS5sb2coXCJBamF4IHNlbmQgZWxlbWVudHMgcmVxdWVzdCBcIiwgJHJlcXVlc3QpO1xuXG5cdFx0aWYgKHRoaXMuaXNSZXRyaWV2aW5nRWxlbWVudHMpXG5cdFx0e1x0XHRcblx0XHRcdC8vY29uc29sZS5sb2coXCJBamF4IGlzUmV0cmlldmluZ1wiKTtcblx0XHRcdHRoaXMucmVxdWVzdFdhaXRpbmdUb0JlRXhlY3V0ZWQgPSB0cnVlO1xuXHRcdFx0dGhpcy53YWl0aW5nUmVxdWVzdEZ1bGxSZXByZXNlbnRhdGlvbiA9ICRyZXF1ZXN0LmRhdGEuZnVsbFJlcHJlc2VudGF0aW9uO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuaXNSZXRyaWV2aW5nRWxlbWVudHMgPSB0cnVlO1xuXHRcdHRoaXMuY3VyclJlcXVlc3QgPSAkcmVxdWVzdDtcblx0XHQvLyBsZXQgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcdFx0XHRcblx0XHRcblx0XHQkLmFqYXgoe1xuXHRcdFx0dXJsOiAkcmVxdWVzdC5yb3V0ZSxcblx0XHRcdG1ldGhvZDogXCJnZXRcIixcblx0XHRcdGRhdGE6ICRyZXF1ZXN0LmRhdGEsXG5cdFx0XHRiZWZvcmVTZW5kOiAoKSA9PlxuXHRcdFx0eyBcdFx0XHRcdFxuXHRcdFx0XHR0aGlzLmxvYWRlclRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgJCgnI2RpcmVjdG9yeS1sb2FkaW5nJykuc2hvdygpOyB9LCAxNTAwKTsgXG5cdFx0XHR9LFxuXHRcdFx0c3VjY2VzczogcmVzcG9uc2UgPT5cblx0XHRcdHtcdFxuXHRcdFx0XHRpZiAocmVzcG9uc2UuZGF0YSAhPT0gbnVsbClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIGxldCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcdFx0XHRcdFx0XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJyZWNlaXZlIFwiICsgcmVzcG9uc2UuZGF0YS5sZW5ndGggKyBcIiBlbGVtZW50cyBpbiBcIiArIChlbmQtc3RhcnQpICsgXCIgbXMuIGZ1bGxSZXByZXNlbnRhdGlvblwiLCByZXNwb25zZS5mdWxsUmVwcmVzZW50YXRpb24pO1x0XHRcdFx0XG5cblx0XHRcdFx0XHRyZXNwb25zZS5mdWxsUmVwcmVzZW50YXRpb24gPSByZXNwb25zZS5vbnRvbG9neSA9PSBcImdvZ29jb21wYWN0XCIgPyBmYWxzZSA6IHRydWU7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYgKCRleHBlY3RlZEZpbGxlZEJvdW5kcylcblx0XHRcdFx0XHRcdEFwcC5ib3VuZHNNb2R1bGUudXBkYXRlRmlsbGVkQm91bmRzV2l0aEJvdW5kc1JlY2VpdmVkKCRleHBlY3RlZEZpbGxlZEJvdW5kcywgJHJlcXVlc3QuZGF0YS5tYWluT3B0aW9uSWQsICAkcmVxdWVzdC5kYXRhLmZ1bGxSZXByZXNlbnRhdGlvbik7XG5cblx0XHRcdFx0XHRpZiAocmVzcG9uc2UuYWxsRWxlbWVudHNTZW5kcyB8fCAhQXBwLmNvbmZpZy5kYXRhLnJlcXVlc3RCeUJvdW5kcykgdGhpcy5hbGxFbGVtZW50c1JlY2VpdmVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdHRoaXMub25OZXdFbGVtZW50cy5lbWl0KHJlc3BvbnNlKTtcdFx0XHRcdFxuXHRcdFx0XHR9XHRcdFx0ICAgICBcblx0XHRcdH0sXG5cdFx0XHRjb21wbGV0ZTogKCkgPT5cblx0XHRcdHtcblx0XHRcdCAgdGhpcy5pc1JldHJpZXZpbmdFbGVtZW50cyA9IGZhbHNlO1xuXHRcdFx0ICB0aGlzLmN1cnJCb3VuZHNSZXRyaWV2aW5nID0gbnVsbDsgXG5cdFx0XHQgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRlclRpbWVyKTtcblx0XHRcdCAgc2V0VGltZW91dCggKCkgPT4gJCgnI2RpcmVjdG9yeS1sb2FkaW5nJykuaGlkZSgpLCAyNTApO1xuXHRcdFx0ICBpZiAodGhpcy5yZXF1ZXN0V2FpdGluZ1RvQmVFeGVjdXRlZClcblx0XHRcdCAge1xuXHRcdFx0ICBcdCAvL2NvbnNvbGUubG9nKFwiUkVRVUVTVCBXQUlUSU5HIFRPIEJFIEVYRUNVVEVELCBmdWxsUmVwcmVzZW50YXRpb25cIiwgdGhpcy53YWl0aW5nUmVxdWVzdEZ1bGxSZXByZXNlbnRhdGlvbik7XG5cdFx0XHQgIFx0IEFwcC5lbGVtZW50c01hbmFnZXIuY2hlY2tGb3JOZXdFbGVtZW50c1RvUmV0cmlldmUodGhpcy53YWl0aW5nUmVxdWVzdEZ1bGxSZXByZXNlbnRhdGlvbik7XG5cdFx0XHQgIFx0IHRoaXMucmVxdWVzdFdhaXRpbmdUb0JlRXhlY3V0ZWQgPSBmYWxzZTtcblx0XHRcdCAgfVxuXHRcdFx0fSxcblx0XHR9KTtcblx0fTtcbn0iLCJpbXBvcnQgeyBBcHBNb2R1bGUsIEFwcFN0YXRlcyB9IGZyb20gXCIuLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0IHsgR29Hb0NvbmZpZyB9IGZyb20gXCIuLi9jbGFzc2VzL2NvbmZpZy9nb2dvLWNvbmZpZy5jbGFzc1wiO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uL2dvZ29jYXJ0b1wiO1xuZGVjbGFyZSB2YXIgTDtcblxuZXhwb3J0IGNsYXNzIEJvdW5kc01vZHVsZVxue1xuXHQvLyB3ZSBleHRlbmQgdmlzaWJsZSB2aWV4cG9ydCB0byBsb2FkIGVsZW1lbnRzIG9uIHRoaXMgYXJlYSwgc28gdGhlIHVzZXIgc2VlIHRoZW0gZGlyZWN0bHkgd2hlbiBwYW5uaW5nIG9yIHpvb20gb3V0XG5cdGV4dGVuZGVkQm91bmRzIDogTC5MYXRMbmdCb3VuZHM7XG5cblx0Ly8gdGhlIGJvdW5kcyB3aGVyZSBlbGVtZW50cyBoYXMgYWxyZWFkeSBiZWVuIHJldHJpZXZlZFxuXHQvLyB3ZSBzYXZlIG9uZSBmaWxsZWRCb3VuZCBwZXIgbWFpbk9wdGlvbklkXG5cdC8vIGFuZCBvbmUgZmlsbGVkQm91bmQgcGVyIGxldmVsIG9mIGVsZW1lbnQgcmVwcmVzZW50YXRpb25cblx0ZnVsbFJlcHJlc2VudGF0aW9uRmlsbGVkQm91bmQgOiBMLkxhdExuZ0JvdW5kc1tdID0gW107XG5cdGNvbXBhY3RSZXByZXNlbnRhdGlvbkZpbGxlZEJvdW5kIDogTC5MYXRMbmdCb3VuZHNbXSA9IFtdO1xuXG5cdC8vIGluZGljYXRlIGlmIHdlIGFscmVhZHkgcmV0cmlldmVkIGFsbCBlbGVtZW50cyBvZiB0aGUgbWF4IGJvdW5kc1xuXHRmdWxsUmVwcmVzZW50YXRpb25SZXRyaWV2aW5nQ29tcGxldGUgOiBib29sZWFuW10gPSBbXTtcblx0Y29tcGFjdFJlcHJlc2VudGF0aW9uUmV0cmlldmluZ0NvbXBsZXRlIDogYm9vbGVhbltdID0gW107XG5cblx0Ly8gd2UgZG9uJ3QgZG93bmxvYWQgZWxlbWVudHMgb3V0c2lkZSBvZiBtYXhCb3VuZHNcblx0bWF4Qm91bmRzIDogTC5MYXRMbmdCb3VuZHM7XG5cdGRlZmF1bHRCb3VuZHMgOiBMLkxhdExuZ0JvdW5kcztcblx0ZGVmYXVsdENlbnRlciA6IEwuTGF0TG5nO1xuXG5cdGNvbnN0cnVjdG9yKGNvbmZpZyA6IEdvR29Db25maWcpXG5cdHtcblx0XHR0aGlzLm1heEJvdW5kcyA9IGNvbmZpZy5tYXAubWF4Qm91bmRzO1xuXHRcdHRoaXMuZGVmYXVsdEJvdW5kcyA9IGNvbmZpZy5tYXAuZGVmYXVsdEJvdW5kcztcblx0XHR0aGlzLmRlZmF1bHRDZW50ZXIgPSBjb25maWcubWFwLmRlZmF1bHRDZW50ZXI7XG5cdH1cblxuXHRpbml0aWFsaXplKClcblx0e1xuXHRcdGZvcihsZXQgbWFpbk9wdGlvbklkIG9mIEFwcC50YXhvbm9teU1vZHVsZS5nZXRNYWluT3B0aW9uc0lkc1dpdGhBbGwoKSlcblx0XHR7XG5cdFx0XHR0aGlzLmZ1bGxSZXByZXNlbnRhdGlvbkZpbGxlZEJvdW5kW21haW5PcHRpb25JZF0gPSBudWxsO1xuXHRcdFx0dGhpcy5jb21wYWN0UmVwcmVzZW50YXRpb25GaWxsZWRCb3VuZFttYWluT3B0aW9uSWRdID0gbnVsbDtcblx0XHRcdHRoaXMuZnVsbFJlcHJlc2VudGF0aW9uUmV0cmlldmluZ0NvbXBsZXRlW21haW5PcHRpb25JZF0gPSBmYWxzZTtcblx0XHRcdHRoaXMuY29tcGFjdFJlcHJlc2VudGF0aW9uUmV0cmlldmluZ0NvbXBsZXRlW21haW5PcHRpb25JZF0gPSBmYWxzZTtcblx0XHR9XG5cdH1cdFxuXG5cdGNyZWF0ZUJvdW5kc0Zyb21Mb2NhdGlvbigkbG9jYXRpb24gOiBMLkxhdExuZywgJHJhZGl1cyA9IDEwKVxuXHR7XG5cdFx0bGV0IGRlZ3JlZSA9ICRyYWRpdXMgLyAxMTAgLyAyO1xuXHRcdHRoaXMuZXh0ZW5kZWRCb3VuZHMgPSBMLmxhdExuZ0JvdW5kcyhMLmxhdExuZygkbG9jYXRpb24ubGF0IC0gZGVncmVlLCAkbG9jYXRpb24ubG5nIC0gZGVncmVlKSwgTC5sYXRMbmcoJGxvY2F0aW9uLmxhdCArIGRlZ3JlZSwgJGxvY2F0aW9uLmxuZyArIGRlZ3JlZSkgKTtcblx0XHQvL2NvbnNvbGUubG9nKFwiQ1JFQVRFIEJPVU5EUyBmcm9tIGxvYWN0aW9uXCIsIHRoaXMuZXh0ZW5kZWRCb3VuZHMpO1xuXHRcdC8vaWYgKHRoaXMuZXh0ZW5kZWRCb3VuZHMpIEwucmVjdGFuZ2xlKHRoaXMuZXh0ZW5kZWRCb3VuZHMsIHtjb2xvcjogXCJibHVlXCIsIHdlaWdodDogM30pLmFkZFRvKEFwcC5tYXAoKSk7IFxuXHR9XG5cblx0ZXh0ZW5kTWFwQm91bmRzKCRvbGRab29tLCAkbmV3Wm9vbSwgJG51bWJlck1hcmtlclZpc2libGUpXG5cdHtcdFx0XG5cdFx0bGV0IHJhdGlvO1xuXHRcdGlmICgkbmV3Wm9vbSA9PSAkb2xkWm9vbSlcblx0XHR7XG5cdFx0XHRyYXRpbyA9IDAuNS9NYXRoLnBvdygoJG51bWJlck1hcmtlclZpc2libGUvMTAwKSwyKTtcblx0XHRcdHJhdGlvID0gTWF0aC5taW4oMC41LCByYXRpbyk7XG5cdFx0XHRyYXRpbyA9IE1hdGgucm91bmQocmF0aW8qMTApLzEwO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0cmF0aW8gPSAwO1xuXHRcdH1cdFxuXHRcdEFwcC5ib3VuZHNNb2R1bGUuZXh0ZW5kQm91bmRzKHJhdGlvLCBBcHAubWFwKCkuZ2V0Qm91bmRzKCkpO1xuXHR9XG5cblx0ZXh0ZW5kQm91bmRzKCRyYXRpbyA6IG51bWJlciwgJGJvdW5kcyA6IEwuTGF0TG5nQm91bmRzID0gdGhpcy5leHRlbmRlZEJvdW5kcylcblx0e1x0XHRcblx0XHRpZiAodGhpcy5jdXJyUmV0cmlldmluZ0NvbXBsZXRlKHRydWUpKSB7XG5cdFx0XHR0aGlzLmV4dGVuZGVkQm91bmRzID0gdGhpcy5tYXhCb3VuZHM7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghJGJvdW5kcykgeyBjb25zb2xlLmxvZyhcImJvdW5kcyB1bmNvcnJlY3RcIiwgJGJvdW5kcyk7IHJldHVybjt9XG5cdFx0dGhpcy5leHRlbmRlZEJvdW5kcyA9ICRib3VuZHMucGFkKCRyYXRpbyk7XG5cdH1cblxuXHR1cGRhdGVGaWxsZWRCb3VuZHNBY2NvcmRpbmdUb05ld01haW5PcHRpb25JZCgpXG5cdHtcblx0XHRpZiAoQXBwLmN1cnJNYWluSWQgPT0gJ2FsbCcpXG5cdFx0e1xuXHRcdFx0Ly8gbm90aGluZyB0byBkb1xuXHRcdH1cblx0XHRlbHNlIFxuXHRcdHtcblx0XHRcdC8vIGlmIGZpbGxlYm91bmRzIGZvciBjYXRlZ29yeSAnYWxsJyBjb250YWlucyB0aGUgZmlsbGVkYm91bmQgb2Ygb3RoZXIgY2F0ZWdvcnlcblx0XHRcdC8vIHdlIHNldCBmaWxsZWJvdW5kIGZyb20gb3RoZXIgY2F0ZWdvcnkgdG8gZmlsbGVkQm91bmQgXCJhbGxcIlxuXHRcdFx0dGhpcy50cnlUb0V4dGVuZEZpbGxlZEJvdW5kRnJvbUFsbENhdGVnb3J5KHRoaXMuZnVsbFJlcHJlc2VudGF0aW9uRmlsbGVkQm91bmQpO1xuXHRcdFx0dGhpcy50cnlUb0V4dGVuZEZpbGxlZEJvdW5kRnJvbUFsbENhdGVnb3J5KHRoaXMuY29tcGFjdFJlcHJlc2VudGF0aW9uRmlsbGVkQm91bmQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdHJ5VG9FeHRlbmRGaWxsZWRCb3VuZEZyb21BbGxDYXRlZ29yeSgkZmlsbGVkQm91bmQpXG5cdHtcblx0XHRpZiAoJGZpbGxlZEJvdW5kWydhbGwnXSAmJlxuXHRcdFx0XHQgKCEkZmlsbGVkQm91bmRbQXBwLmN1cnJNYWluSWRdIHx8ICRmaWxsZWRCb3VuZFsnYWxsJ10uY29udGFpbnMoJGZpbGxlZEJvdW5kW0FwcC5jdXJyTWFpbklkXSkgKSlcblx0XHRcdHtcblx0XHRcdFx0JGZpbGxlZEJvdW5kW0FwcC5jdXJyTWFpbklkXSA9ICRmaWxsZWRCb3VuZFsnYWxsJ11cblx0XHRcdH1cblx0fVxuXG5cdC8vIFdhaXQgZnJvbSBhamF4IHJlc3BvbnNlIHRvIHVwZGF0ZSBuZXcgZmlsbGVkQm91bmRzXG5cdHVwZGF0ZUZpbGxlZEJvdW5kc1dpdGhCb3VuZHNSZWNlaXZlZChleHBlY3RlZEJvdW5kIDogTC5MYXRMbmdCb3VuZHMsIG1haW5PcHRpb25JZCA6IG51bWJlcnxzdHJpbmcsIGdldEZ1bGxSZXByZXNlbnRhdGlvbiA6IGJvb2xlYW4pXG5cdHtcblx0XHQvL2NvbnNvbGUubG9nKFwidXBkYXRlRmlsbGVkQm91bmRzV2l0aEJvdW5kc1JlY2VpdmVkXCIsIG1haW5PcHRpb25JZCk7XG5cdFx0aWYgKG1haW5PcHRpb25JZCA9PT0gdW5kZWZpbmVkIHx8IEFwcC5jb25maWcubWVudS5zaG93T25lUGFuZVBlck1haW5PcHRpb24pIG1haW5PcHRpb25JZCA9IFwiYWxsXCI7XG5cdFx0aWYoZ2V0RnVsbFJlcHJlc2VudGF0aW9uKSB0aGlzLmZ1bGxSZXByZXNlbnRhdGlvbkZpbGxlZEJvdW5kW21haW5PcHRpb25JZF0gPSBleHBlY3RlZEJvdW5kO1xuXHRcdGVsc2UgdGhpcy5jb21wYWN0UmVwcmVzZW50YXRpb25GaWxsZWRCb3VuZFttYWluT3B0aW9uSWRdID0gZXhwZWN0ZWRCb3VuZDtcblxuXHRcdGlmICh0aGlzLm1heEJvdW5kcyAmJiBleHBlY3RlZEJvdW5kLmNvbnRhaW5zKHRoaXMubWF4Qm91bmRzKSlcblx0XHR7XG5cdFx0XHRpZihnZXRGdWxsUmVwcmVzZW50YXRpb24pIHRoaXMuZnVsbFJlcHJlc2VudGF0aW9uUmV0cmlldmluZ0NvbXBsZXRlW21haW5PcHRpb25JZF0gPSB0cnVlO1xuXHRcdFx0ZWxzZSB0aGlzLmNvbXBhY3RSZXByZXNlbnRhdGlvblJldHJpZXZpbmdDb21wbGV0ZVttYWluT3B0aW9uSWRdID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGN1cnJGaWxsZWRCb3VuZCgkZ2V0RnVsbFJlcHJlc2VudGF0aW9uIDogYm9vbGVhbikgOiBMLkxhdExuZ0JvdW5kc1xuXHR7IFxuXHRcdGlmICgkZ2V0RnVsbFJlcHJlc2VudGF0aW9uKSBcblx0XHRcdHJldHVybiB0aGlzLmZ1bGxSZXByZXNlbnRhdGlvbkZpbGxlZEJvdW5kW0FwcC5jdXJyTWFpbklkXTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gdGhpcy5jb21wYWN0UmVwcmVzZW50YXRpb25GaWxsZWRCb3VuZFtBcHAuY3Vyck1haW5JZF07XG5cdH1cblxuXHRwcml2YXRlIGN1cnJSZXRyaWV2aW5nQ29tcGxldGUoJGdldEZ1bGxSZXByZXNlbnRhdGlvbiA6IGJvb2xlYW4pIDogYm9vbGVhblxuXHR7IFxuXHRcdGlmICgkZ2V0RnVsbFJlcHJlc2VudGF0aW9uKSBcblx0XHRcdHJldHVybiB0aGlzLmZ1bGxSZXByZXNlbnRhdGlvblJldHJpZXZpbmdDb21wbGV0ZVtBcHAuY3Vyck1haW5JZF0gfHwgdGhpcy5mdWxsUmVwcmVzZW50YXRpb25SZXRyaWV2aW5nQ29tcGxldGVbJ2FsbCddO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiB0aGlzLmNvbXBhY3RSZXByZXNlbnRhdGlvblJldHJpZXZpbmdDb21wbGV0ZVtBcHAuY3Vyck1haW5JZF0gfHwgdGhpcy5jb21wYWN0UmVwcmVzZW50YXRpb25SZXRyaWV2aW5nQ29tcGxldGVbJ2FsbCddO1xuXHR9XG5cblx0Y2FsY3VsYXRlRnJlZUJvdW5kcygkZ2V0RnVsbFJlcHJlc2VudGF0aW9uID0gZmFsc2UpXG5cdHtcblx0XHRsZXQgZnJlZUJvdW5kcyA9IFtdO1xuXHRcdGxldCBleHBlY3RlZEJvdW5kcztcblxuXHRcdC8vIGlmIHdlIGFscmVhZHkgY29tcGxldGUgdGhlIHJldHJpZXZpbmcgKGkuZS4gYWxsIGVsZW1lbnQgYXJlIGFscmVhZHkgcmVjZWl2ZWQpXG5cdFx0aWYgKHRoaXMuY3VyclJldHJpZXZpbmdDb21wbGV0ZSgkZ2V0RnVsbFJlcHJlc2VudGF0aW9uKSkgcmV0dXJuIHsgc3RhdHVzOiBcImFsbFJldHJpZXZlZFwiLCBcImZyZWVCb3VuZHNcIiA6IG51bGwsIFwiZXhwZWN0ZWRGaWxsQm91bmRzXCIgOiBudWxsIH07XG5cblx0XHRsZXQgY3VyckZpbGxlZEJvdW5kID0gdGhpcy5jdXJyRmlsbGVkQm91bmQoJGdldEZ1bGxSZXByZXNlbnRhdGlvbik7XG5cblx0XHQvL2NvbnNvbGUubG9nKFwiY2FsY3VsYXRlRnJlZWJvdW5kcyBleHRlbmRlZEJvdW5kcyA9IFwiLCB0aGlzLmV4dGVuZGVkQm91bmRzKTtcblxuXHRcdC8vaWYgKGN1cnJGaWxsZWRCb3VuZCkgTC5yZWN0YW5nbGUoY3VyckZpbGxlZEJvdW5kLCB7Y29sb3I6IFwicmVkXCIsIHdlaWdodDogM30pLmFkZFRvKEFwcC5tYXAoKSk7IFxuXHRcdC8vaWYgKHRoaXMuZXh0ZW5kZWRCb3VuZHMpIEwucmVjdGFuZ2xlKHRoaXMuZXh0ZW5kZWRCb3VuZHMsIHtjb2xvcjogXCJibHVlXCIsIHdlaWdodDogM30pLmFkZFRvKEFwcC5tYXAoKSk7IFxuXG5cdFx0bGV0IGZyZWVCb3VuZDEsIGZyZWVCb3VuZDIsIGZyZWVCb3VuZDMsIGZyZWVCb3VuZDQ7XG5cblx0XHRpZiAoIWN1cnJGaWxsZWRCb3VuZCB8fCAhY3VyckZpbGxlZEJvdW5kLmludGVyc2VjdHModGhpcy5leHRlbmRlZEJvdW5kcykpXG5cdFx0e1xuXHRcdFx0Ly8gZmlyc3QgaW5pdGlhbGl6YXRpb24gb3Igbm8gaW50ZXJzZWN0aW9uXG5cdFx0XHRmcmVlQm91bmRzLnB1c2godGhpcy5leHRlbmRlZEJvdW5kcyk7XG5cdFx0XHRleHBlY3RlZEJvdW5kcyA9IHRoaXMuZXh0ZW5kZWRCb3VuZHM7XG5cdFx0fVx0XHRcblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0aWYgKCFjdXJyRmlsbGVkQm91bmQuY29udGFpbnModGhpcy5leHRlbmRlZEJvdW5kcykpXG5cdFx0XHR7XG5cdFx0XHRcdGlmICh0aGlzLmV4dGVuZGVkQm91bmRzLmNvbnRhaW5zKGN1cnJGaWxsZWRCb3VuZCkpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQvLyBleHRlbmRlZCBjb250YWlucyBmaWxsZWRib3VuZHNcdFxuXHRcdFx0XHRcdGZyZWVCb3VuZDEgPSBMLmxhdExuZ0JvdW5kcyggdGhpcy5leHRlbmRlZEJvdW5kcy5nZXROb3J0aFdlc3QoKSwgY3VyckZpbGxlZEJvdW5kLmdldE5vcnRoRWFzdCgpICk7XG5cdFx0XHRcdFx0ZnJlZUJvdW5kMiA9IEwubGF0TG5nQm91bmRzKCBmcmVlQm91bmQxLmdldE5vcnRoRWFzdCgpXHRcdFx0XHQgLCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldFNvdXRoRWFzdCgpICk7XG5cdFx0XHRcdFx0ZnJlZUJvdW5kMyA9IEwubGF0TG5nQm91bmRzKCBjdXJyRmlsbGVkQm91bmQuZ2V0U291dGhFYXN0KClcdCAsIHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0U291dGhXZXN0KCkgKTtcblx0XHRcdFx0XHRmcmVlQm91bmQ0ID0gTC5sYXRMbmdCb3VuZHMoIGZyZWVCb3VuZDEuZ2V0U291dGhXZXN0KClcdFx0XHRcdCAsIGN1cnJGaWxsZWRCb3VuZC5nZXRTb3V0aFdlc3QoKSApO1xuXG5cdFx0XHRcdFx0ZXhwZWN0ZWRCb3VuZHMgPSB0aGlzLmV4dGVuZGVkQm91bmRzO1xuXHRcdFx0XHRcdGZyZWVCb3VuZHMucHVzaChmcmVlQm91bmQxLGZyZWVCb3VuZDIsIGZyZWVCb3VuZDMsIGZyZWVCb3VuZDQpO1x0XHRcdFx0XHRcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQvLyBleHRlbmRlZCBjcm9zcyBvdmVyIGZpbGxlZFxuXHRcdFx0XHRcdGlmICh0aGlzLmV4dGVuZGVkQm91bmRzLmdldFdlc3QoKSA+IGN1cnJGaWxsZWRCb3VuZC5nZXRXZXN0KCkgJiYgdGhpcy5leHRlbmRlZEJvdW5kcy5nZXRFYXN0KCkgPCBjdXJyRmlsbGVkQm91bmQuZ2V0RWFzdCgpKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmV4dGVuZGVkQm91bmRzLmdldFNvdXRoKCkgPCBjdXJyRmlsbGVkQm91bmQuZ2V0U291dGgoKSlcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Ly8gZXh0ZW5kZWQgY2VudGVyZWQgc291dGggZnJvbSBmaWxsZWRCb3VuZHNcblx0XHRcdFx0XHRcdFx0ZnJlZUJvdW5kMSA9IEwubGF0TG5nQm91bmRzKCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldFNvdXRoV2VzdCgpLCBjdXJyRmlsbGVkQm91bmQuZ2V0U291dGhFYXN0KCkgKTtcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHQvLyBleHRlbmRlZCBjZW50ZXJlZCBzb3V0aCBmcm9tIGZpbGxlZEJvdW5kc1xuXHRcdFx0XHRcdFx0XHRmcmVlQm91bmQxID0gTC5sYXRMbmdCb3VuZHMoIHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0Tm9ydGhXZXN0KCksIGN1cnJGaWxsZWRCb3VuZC5nZXROb3J0aEVhc3QoKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIGlmICh0aGlzLmV4dGVuZGVkQm91bmRzLmdldFdlc3QoKSA8IGN1cnJGaWxsZWRCb3VuZC5nZXRXZXN0KCkpXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0U291dGgoKSA+IGN1cnJGaWxsZWRCb3VuZC5nZXRTb3V0aCgpICYmIHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0Tm9ydGgoKSA8IGN1cnJGaWxsZWRCb3VuZC5nZXROb3J0aCgpKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHQvLyBleHRlbmRlZCBjZW50ZXJlZCBlYXN0IGZyb20gZmlsbGVkQm91bmRzXG5cdFx0XHRcdFx0XHRcdGZyZWVCb3VuZDEgPSBMLmxhdExuZ0JvdW5kcyggdGhpcy5leHRlbmRlZEJvdW5kcy5nZXROb3J0aFdlc3QoKSwgY3VyckZpbGxlZEJvdW5kLmdldFNvdXRoV2VzdCgpICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIGlmICh0aGlzLmV4dGVuZGVkQm91bmRzLmdldFNvdXRoKCkgPCBjdXJyRmlsbGVkQm91bmQuZ2V0U291dGgoKSlcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Ly8gZXh0ZW5kZWRib3VuZHMgc291dGhXZXN0IGZyb20gZmlsbGVkQm91bmRzXG5cdFx0XHRcdFx0XHRcdGZyZWVCb3VuZDEgPSBMLmxhdExuZ0JvdW5kcyggY3VyckZpbGxlZEJvdW5kLmdldFNvdXRoRWFzdCgpLCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldFNvdXRoV2VzdCgpICk7XG5cdFx0XHRcdFx0XHRcdGZyZWVCb3VuZDIgPSBMLmxhdExuZ0JvdW5kcyggY3VyckZpbGxlZEJvdW5kLmdldE5vcnRoV2VzdCgpLCBmcmVlQm91bmQxLmdldE5vcnRoV2VzdCgpICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdC8vIGV4dGVuZGVkYm91bmRzIG5vcnRoV2VzdCBmcm9tIGZpbGxlZEJvdW5kc1xuXHRcdFx0XHRcdFx0XHRmcmVlQm91bmQxID0gTC5sYXRMbmdCb3VuZHMoIGN1cnJGaWxsZWRCb3VuZC5nZXROb3J0aEVhc3QoKSwgdGhpcy5leHRlbmRlZEJvdW5kcy5nZXROb3J0aFdlc3QoKSApO1xuXHRcdFx0XHRcdFx0XHRmcmVlQm91bmQyID0gTC5sYXRMbmdCb3VuZHMoIGN1cnJGaWxsZWRCb3VuZC5nZXRTb3V0aFdlc3QoKSwgZnJlZUJvdW5kMS5nZXRTb3V0aFdlc3QoKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0U291dGgoKSA+IGN1cnJGaWxsZWRCb3VuZC5nZXRTb3V0aCgpICYmIHRoaXMuZXh0ZW5kZWRCb3VuZHMuZ2V0Tm9ydGgoKSA8IGN1cnJGaWxsZWRCb3VuZC5nZXROb3J0aCgpKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHQvLyBleHRlbmRlZCBjZW50ZXJlZCB3ZXN0IGZyb20gZmlsbGVkQm91bmRzXG5cdFx0XHRcdFx0XHRcdGZyZWVCb3VuZDEgPSBMLmxhdExuZ0JvdW5kcyggY3VyckZpbGxlZEJvdW5kLmdldE5vcnRoRWFzdCgpLCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldFNvdXRoRWFzdCgpICk7IFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSBpZiAodGhpcy5leHRlbmRlZEJvdW5kcy5nZXRTb3V0aCgpIDwgY3VyckZpbGxlZEJvdW5kLmdldFNvdXRoKCkpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdC8vIGV4dGVuZGVkYm91bmRzIHNvdXRoZWFzdCBmcm9tIGZpbGxlZEJvdW5kc1xuXHRcdFx0XHRcdFx0XHRmcmVlQm91bmQxID0gTC5sYXRMbmdCb3VuZHMoIGN1cnJGaWxsZWRCb3VuZC5nZXRTb3V0aFdlc3QoKSwgdGhpcy5leHRlbmRlZEJvdW5kcy5nZXRTb3V0aEVhc3QoKSApO1xuXHRcdFx0XHRcdFx0XHRmcmVlQm91bmQyID0gTC5sYXRMbmdCb3VuZHMoIGN1cnJGaWxsZWRCb3VuZC5nZXROb3J0aEVhc3QoKSwgZnJlZUJvdW5kMS5nZXROb3J0aEVhc3QoKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0e1x0XG5cdFx0XHRcdFx0XHRcdC8vIGV4dGVuZGVkYm91bmRzIG5vcnRoRWFzdCBmcm9tIGZpbGxlZEJvdW5kc1xuXHRcdFx0XHRcdFx0XHRmcmVlQm91bmQxID0gTC5sYXRMbmdCb3VuZHMoIGN1cnJGaWxsZWRCb3VuZC5nZXROb3J0aFdlc3QoKSwgdGhpcy5leHRlbmRlZEJvdW5kcy5nZXROb3J0aEVhc3QoKSApO1xuXHRcdFx0XHRcdFx0XHRmcmVlQm91bmQyID0gTC5sYXRMbmdCb3VuZHMoIGN1cnJGaWxsZWRCb3VuZC5nZXRTb3V0aEVhc3QoKSwgZnJlZUJvdW5kMS5nZXRTb3V0aEVhc3QoKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XG5cblx0XHRcdFx0XHRmcmVlQm91bmRzLnB1c2goZnJlZUJvdW5kMSk7XG5cdFx0XHRcdFx0aWYgKGZyZWVCb3VuZDIpIGZyZWVCb3VuZHMucHVzaChmcmVlQm91bmQyKTtcdFx0XG5cblx0XHRcdFx0XHRleHBlY3RlZEJvdW5kcyA9IEwubGF0TG5nQm91bmRzKCBcblx0XHRcdFx0XHRcdEwubGF0TG5nKFxuXHRcdFx0XHRcdFx0XHRNYXRoLm1heChjdXJyRmlsbGVkQm91bmQuZ2V0Tm9ydGgoKSwgdGhpcy5leHRlbmRlZEJvdW5kcy5nZXROb3J0aCgpKSxcblx0XHRcdFx0XHRcdFx0TWF0aC5tYXgoY3VyckZpbGxlZEJvdW5kLmdldEVhc3QoKSwgdGhpcy5leHRlbmRlZEJvdW5kcy5nZXRFYXN0KCkpXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0TC5sYXRMbmcoXG5cdFx0XHRcdFx0XHRcdE1hdGgubWluKGN1cnJGaWxsZWRCb3VuZC5nZXRTb3V0aCgpLCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldFNvdXRoKCkpLFxuXHRcdFx0XHRcdFx0XHRNYXRoLm1pbihjdXJyRmlsbGVkQm91bmQuZ2V0V2VzdCgpLCB0aGlzLmV4dGVuZGVkQm91bmRzLmdldFdlc3QoKSkgXG5cdFx0XHRcdFx0XHQpXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0KTtcdFx0XG5cdFx0XHRcdH1cdFx0XHRcdFx0XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGV4dGVuZGVkIGJvdW5kcyBpbmNsdWRlZCBpbiBmaWxsZWRib3VuZHNcblx0XHRcdFx0cmV0dXJuIHsgXCJzdGF0dXNcIjogXCJpbmNsdWRlZFwiLCBcImZyZWVCb3VuZHNcIiA6IG51bGwsIFwiZXhwZWN0ZWRGaWxsQm91bmRzXCIgOiBjdXJyRmlsbGVkQm91bmQgfTtcblx0XHRcdH1cblx0XHR9XHRcdFxuXG5cdFx0cmV0dXJuIHsgXCJmcmVlQm91bmRzXCIgOiBmcmVlQm91bmRzLCBcImV4cGVjdGVkRmlsbEJvdW5kc1wiIDogZXhwZWN0ZWRCb3VuZHMsIFwic3RhdHVzXCI6IFwic3VjY2Vzc1wifTtcblx0fVxufSIsImltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IEFwcERhdGFUeXBlLCBBcHBTdGF0ZXMsIEFwcE1vZGVzIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IGNhcGl0YWxpemUsIHVuc2x1Z2lmeSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRUaXRsZU1vZHVsZVxue1xuICB1cGRhdGVEb2N1bWVudFRpdGxlKG9wdGlvbnMgOiBhbnkgPSB7fSlcbiAge1xuICAgIC8vIGNvbnNvbGUubG9nKFwidXBkYXRlRG9jdW1lbnRUaXRsZVwiLCBBcHAuc3RhdGVNYW5hZ2VyLnN0YXRlRWxlbWVudElkKTtcblxuICAgIGxldCB0aXRsZSA6IHN0cmluZztcbiAgICBsZXQgZWxlbWVudE5hbWUgOiBzdHJpbmc7XG5cbiAgICBpZiAoIChvcHRpb25zICYmIG9wdGlvbnMuaWQpIHx8IEFwcC5zdGF0ZU1hbmFnZXIuc3RhdGVFbGVtZW50SWQpIFxuICAgIHsgICAgICBcbiAgICAgIGxldCBlbGVtZW50ID0gQXBwLmVsZW1lbnRCeUlkKEFwcC5zdGF0ZU1hbmFnZXIuc3RhdGVFbGVtZW50SWQpO1xuICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm47XG4gICAgICBlbGVtZW50TmFtZSA9IGNhcGl0YWxpemUoZWxlbWVudCA/IGVsZW1lbnQubmFtZSA6ICcnKTtcbiAgICB9XG5cbiAgICBpZiAoQXBwLmRhdGFUeXBlID09IEFwcERhdGFUeXBlLlNlYXJjaFJlc3VsdHMpXG4gICAge1xuICAgICAgdGl0bGUgPSAnUmVjaGVyY2hlIDogJyArIEFwcC5zZWFyY2hCYXJDb21wb25lbnQuZ2V0Q3VyclNlYXJjaFRleHQoKTsgIFxuICAgIH1cbiAgICBlbHNlIGlmIChBcHAubW9kZSA9PSBBcHBNb2Rlcy5MaXN0KVxuICAgIHsgICAgXG4gICAgICB0aXRsZSA9ICdMaXN0ZSBkZXMgJyArIEFwcC5jb25maWcudGV4dC5lbGVtZW50UGx1cmFsICsgJyAnICsgdGhpcy5nZXRMb2NhdGlvbkFkZHJlc3NGb3JUaXRsZSgpOyAgICBcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIHN3aXRjaCAoQXBwLnN0YXRlKVxuICAgICAge1xuICAgICAgICBjYXNlIEFwcFN0YXRlcy5TaG93RWxlbWVudDogICAgICAgIFxuICAgICAgICAgIHRpdGxlID0gY2FwaXRhbGl6ZShBcHAuY29uZmlnLnRleHQuZWxlbWVudCkgKyAnIC0gJyArIGVsZW1lbnROYW1lO1xuICAgICAgICAgIGJyZWFrOyAgXG5cbiAgICAgICAgY2FzZSBBcHBTdGF0ZXMuU2hvd0VsZW1lbnRBbG9uZTpcbiAgICAgICAgICB0aXRsZSA9IGNhcGl0YWxpemUoQXBwLmNvbmZpZy50ZXh0LmVsZW1lbnQpICsgJyAtICcgKyBlbGVtZW50TmFtZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEFwcFN0YXRlcy5TaG93RGlyZWN0aW9uczpcbiAgICAgICAgICB0aXRsZSA9ICdJdGluw6lyYWlyZSAtICcgKyBlbGVtZW50TmFtZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEFwcFN0YXRlcy5Ob3JtYWw6ICAgICAgXG4gICAgICAgICAgdGl0bGUgPSAnQ2FydGUgZGVzICcgKyBBcHAuY29uZmlnLnRleHQuZWxlbWVudFBsdXJhbCArICcgJyArIHRoaXMuZ2V0TG9jYXRpb25BZGRyZXNzRm9yVGl0bGUoKTsgICAgICBcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC50aXRsZSA9IHRpdGxlOyAgXG4gIH07XG5cbiAgcHJpdmF0ZSBnZXRMb2NhdGlvbkFkZHJlc3NGb3JUaXRsZSgpXG4gIHtcbiAgICBpZiAoQXBwLmdlb2NvZGVyLmdldExvY2F0aW9uQWRkcmVzcygpKVxuICAgIHtcbiAgICAgIHJldHVybiBcIi0gXCIgKyBBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb25BZGRyZXNzKCk7XG4gICAgfVxuICAgIHJldHVybiBcIi0gRnJhbmNlXCI7XG4gIH1cbn0iLCIvKipcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHb0dvQ2FydG8gcHJvamVjdC5cbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNiBTZWJhc3RpYW4gQ2FzdHJvIC0gOTBzY2FzdHJvQGdtYWlsLmNvbVxuICogQGxpY2Vuc2UgR05VIEdQTCB2M1xuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAxNi0xMi0xM1xuICovXG5cbmltcG9ydCB7IEV2ZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvZXZlbnQuY2xhc3NcIjtcbmltcG9ydCB7IHNsdWdpZnksIGNhcGl0YWxpemUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcbmltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzLCBBcHBNb2RlcywgQXBwRGF0YVR5cGUgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgSGlzdG9yeVN0YXRlLCBWaWV3UG9ydCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCAqIGFzIENvb2tpZXMgZnJvbSBcIi4uLy4uL3V0aWxzL2Nvb2tpZXNcIjtcblxuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuZGVjbGFyZSBsZXQgJDtcbmRlY2xhcmUgbGV0IFJvdXRpbmc7XG5cbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKClcbntcdFxuICAgLy8gR2V0cyBoaXN0b3J5IHN0YXRlIGZyb20gYnJvd3NlclxuICAgd2luZG93Lm9ucG9wc3RhdGUgPSAoZXZlbnQgOiBQb3BTdGF0ZUV2ZW50KSA9PlxuICAge1xuXHQgIC8vY29uc29sZS5sb2coXCJcXG5cXG5PbnBvcFN0YXRlIFwiLCBldmVudC5zdGF0ZS5maWx0ZXJzKTtcblx0ICBsZXQgaGlzdG9yeXN0YXRlIDogSGlzdG9yeVN0YXRlID0gZXZlbnQuc3RhdGU7XG5cdCAgaWYgKCFoaXN0b3J5c3RhdGUpIHJldHVybjtcblx0ICAvLyB0cmFuc2Zvcm0ganNvblZpZXdwb3J0IGludG8gVmlld1BvcnQgb2JqZWN0IChpZiB3ZSBkb24ndCBkbyBzbyxcblx0ICAvLyB0aGUgVmlld1BvcnQgbWV0aG9kcyB3aWxsIG5vdCBiZSBhY2Nlc3NpYmxlKVxuXHQgIGhpc3RvcnlzdGF0ZS52aWV3cG9ydCA9ICQuZXh0ZW5kKG5ldyBWaWV3UG9ydCgpLCBldmVudC5zdGF0ZS52aWV3cG9ydCk7XG5cdCAgQXBwLmhpc3RvcnlTdGF0ZU1hbmFnZXIubG9hZChldmVudC5zdGF0ZSwgdHJ1ZSk7XG5cdH07XG59KTtcblxuZXhwb3J0IGNsYXNzIEhpc3RvcnlNb2R1bGVcbntcblx0Y29uc3RydWN0b3IoKSB7IH0gIFxuXG5cdHVwZGF0ZUN1cnJTdGF0ZShvcHRpb25zPylcblx0e1xuXHRcdGlmICghaGlzdG9yeS5zdGF0ZSkgdGhpcy5wdXNoTmV3U3RhdGUoKTtcblx0XHRlbHNlIHRoaXMudXBkYXRlSGlzdG9yeShmYWxzZSwgb3B0aW9ucyk7XG5cdH07XG5cblx0cHVzaE5ld1N0YXRlKG9wdGlvbnM/KVxuXHR7XG5cdFx0aWYgKGhpc3Rvcnkuc3RhdGUgPT09IG51bGwpIHRoaXMudXBkYXRlSGlzdG9yeShmYWxzZSwgb3B0aW9ucyk7XG5cdFx0ZWxzZSB0aGlzLnVwZGF0ZUhpc3RvcnkodHJ1ZSwgb3B0aW9ucyk7XHRcdFxuXHR9O1xuXG5cdHByaXZhdGUgdXBkYXRlSGlzdG9yeSgkcHVzaFN0YXRlIDogYm9vbGVhbiwgJG9wdGlvbnM/IDogYW55KVxuXHR7XG5cdFx0aWYgKCFBcHAuY29uZmlnLmdlbmVyYWwuYWN0aXZhdGVIaXN0b3J5U3RhdGVBbmRSb3V0aW5nKSByZXR1cm47XG5cdFx0aWYgKEFwcC5tb2RlID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG5cdFx0JG9wdGlvbnMgPSAkb3B0aW9ucyB8fCB7fTtcblx0XHRsZXQgaGlzdG9yeVN0YXRlID0gbmV3IEhpc3RvcnlTdGF0ZTtcblx0XHRoaXN0b3J5U3RhdGUubW9kZSA9IEFwcC5tb2RlO1xuXHRcdGhpc3RvcnlTdGF0ZS5zdGF0ZSA9IEFwcC5zdGF0ZTtcblx0XHRoaXN0b3J5U3RhdGUuZGF0YVR5cGUgPSBBcHAuZGF0YVR5cGU7XG5cdFx0aGlzdG9yeVN0YXRlLmFkZHJlc3MgPSBBcHAuZ2VvY29kZXIuZ2V0TG9jYXRpb25TbHVnKCk7XG5cdFx0aGlzdG9yeVN0YXRlLnZpZXdwb3J0ID0gQXBwLm1hcENvbXBvbmVudC52aWV3cG9ydDtcblx0XHRoaXN0b3J5U3RhdGUuaWQgPSBBcHAuc3RhdGVNYW5hZ2VyLnN0YXRlRWxlbWVudElkIHx8ICRvcHRpb25zLmlkO1xuXHRcdGhpc3RvcnlTdGF0ZS5maWx0ZXJzID0gQXBwLmZpbHRlclJvdXRpbmdNb2R1bGUuZ2V0RmlsdGVyc1RvU3RyaW5nKCk7XG5cdFx0aGlzdG9yeVN0YXRlLnRleHQgPSBBcHAuc2VhcmNoQmFyQ29tcG9uZW50LmdldEN1cnJTZWFyY2hUZXh0KCk7XG5cblx0XHQvLyBpZiAoJHB1c2hTdGF0ZSkgY29uc29sZS5sb2coXCJORVcgU2F0ZVwiLCBBcHBTdGF0ZXNbaGlzdG9yeVN0YXRlLnN0YXRlXSk7XG5cdFx0Ly8gZWxzZSBjb25zb2xlLmxvZyhcIlVQREFURSBTdGF0ZVwiLCBBcHBTdGF0ZXNbaGlzdG9yeVN0YXRlLnN0YXRlXSk7XG5cblx0XHRsZXQgcm91dGUgPSB0aGlzLmdlbmVyYXRlUm91dGUoaGlzdG9yeVN0YXRlKTtcblxuXHRcdGlmICghcm91dGUpIHJldHVybjtcblxuXHRcdGlmICgkcHVzaFN0YXRlKSBoaXN0b3J5LnB1c2hTdGF0ZShoaXN0b3J5U3RhdGUsICcnLCByb3V0ZSk7XG5cdFx0ZWxzZSBoaXN0b3J5LnJlcGxhY2VTdGF0ZShoaXN0b3J5U3RhdGUsICcnLCByb3V0ZSk7XG5cblx0XHRpZiAoQXBwLmNvbmZpZy5tYXAuc2F2ZVZpZXdwb3J0SW5Db29raWVzKVxuXHRcdHtcblx0XHRcdENvb2tpZXMuY3JlYXRlQ29va2llKCd2aWV3cG9ydCcsaGlzdG9yeVN0YXRlLnZpZXdwb3J0LCAwLjA0KTsgLy8gcmVtZW1iZXIgdGhpcyBvbmx5IGZvciAxaG91clxuXHRcdFx0Q29va2llcy5jcmVhdGVDb29raWUoJ2FkZHJlc3MnLGhpc3RvcnlTdGF0ZS5hZGRyZXNzLCAwLjA0KTsgLy8gcmVtZW1iZXIgdGhpcyBvbmx5IGZvciAxaG91clxuXHRcdH1cblx0fTtcblxuXHRwcml2YXRlIGdlbmVyYXRlUm91dGUoaGlzdG9yeVN0YXRlIDogSGlzdG9yeVN0YXRlKVxuXHR7XG5cdFx0bGV0IHJvdXRlO1xuXHRcdGxldCBtb2RlID0gQXBwLm1vZGUgPT0gQXBwTW9kZXMuTWFwID8gJ2NhcnRlJyA6ICdsaXN0ZSc7XG5cdFx0bGV0IGFkZHJlc3MgPSBoaXN0b3J5U3RhdGUuYWRkcmVzcztcblx0XHRsZXQgdmlld3BvcnQgPSBoaXN0b3J5U3RhdGUudmlld3BvcnQ7XG5cdFx0bGV0IGFkZHJlc3NBbmRWaWV3cG9ydCA9ICcnO1xuXHRcdGlmIChhZGRyZXNzKSBhZGRyZXNzQW5kVmlld3BvcnQgKz0gYWRkcmVzcztcblx0XHQvLyBpbiBNYXAgTW9kZSB3ZSBhZGQgdmlld3BvcnRcblx0XHQvLyBpbiBMaXN0IG1vZGUgd2UgYWRkIHZpZXdwb3J0IG9ubHkgd2hlbiBubyBhZGRyZXNzIHByb3ZpZGVkXG5cdFx0aWYgKHZpZXdwb3J0ICYmIChBcHAubW9kZSA9PSBBcHBNb2Rlcy5NYXAgfHwgIWFkZHJlc3MpKSBhZGRyZXNzQW5kVmlld3BvcnQgKz0gdmlld3BvcnQudG9TdHJpbmcoKTtcblxuXHRcdGlmIChBcHAuZGF0YVR5cGUgPT0gQXBwRGF0YVR5cGUuU2VhcmNoUmVzdWx0cyAmJiBBcHAuc3RhdGUgPT0gQXBwU3RhdGVzLk5vcm1hbClcblx0XHR7XG5cdFx0XHRyb3V0ZSA9IEFwcC5yb3V0ZXJNb2R1bGUuZ2VuZXJhdGUoJ3NlYXJjaCcsIHsgbW9kZSA6ICBtb2RlLCB0ZXh0IDogaGlzdG9yeVN0YXRlLnRleHQgfSk7XHRcblx0XHR9XHRcdFxuXHRcdGVsc2UgaWYgKEFwcC5tb2RlID09IEFwcE1vZGVzLkxpc3QpXG5cdFx0e1xuXHRcdFx0Ly8gaW4gbGlzdCBtb2RlIHdlIGRvbid0IGNhcmUgYWJvdXQgc3RhdGVcblx0XHRcdHJvdXRlID0gQXBwLnJvdXRlck1vZHVsZS5nZW5lcmF0ZSgnbm9ybWFsJywgeyBtb2RlIDogIG1vZGUsIGFkZHJlc3NBbmRWaWV3cG9ydDogYWRkcmVzc0FuZFZpZXdwb3J0IH0pO1x0XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHRzd2l0Y2ggKEFwcC5zdGF0ZSlcblx0XHRcdHtcblx0XHRcdFx0Y2FzZSBBcHBTdGF0ZXMuTm9ybWFsOlx0XG5cdFx0XHRcdFx0cm91dGUgPSBBcHAucm91dGVyTW9kdWxlLmdlbmVyYXRlKCdub3JtYWwnLCB7IG1vZGUgOiAgbW9kZSwgYWRkcmVzc0FuZFZpZXdwb3J0OiBhZGRyZXNzQW5kVmlld3BvcnQgfSk7XHRcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIEFwcFN0YXRlcy5TaG93RWxlbWVudDpcdFxuXHRcdFx0XHRjYXNlIEFwcFN0YXRlcy5TaG93RWxlbWVudEFsb25lOlxuXHRcdFx0XHRjYXNlIEFwcFN0YXRlcy5TaG93RGlyZWN0aW9uczpcblx0XHRcdFx0XHRpZiAoIWhpc3RvcnlTdGF0ZS5pZCkgcmV0dXJuO1xuXHRcdFx0XHRcdGxldCBlbGVtZW50ID0gQXBwLmVsZW1lbnRCeUlkKGhpc3RvcnlTdGF0ZS5pZCk7XG5cdFx0XHRcdFx0aWYgKCFlbGVtZW50KSByZXR1cm47XG5cblx0XHRcdFx0XHRpZiAoQXBwLnN0YXRlID09IEFwcFN0YXRlcy5TaG93RGlyZWN0aW9ucylcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRyb3V0ZSA9IEFwcC5yb3V0ZXJNb2R1bGUuZ2VuZXJhdGUoJ3Nob3dfZGlyZWN0aW9ucycsIHsgbmFtZSA6ICBjYXBpdGFsaXplKHNsdWdpZnkoZWxlbWVudC5uYW1lKSksIGlkIDogZWxlbWVudC5pZCwgYWRkcmVzc0FuZFZpZXdwb3J0OiBhZGRyZXNzQW5kVmlld3BvcnQgfSk7XHRcblx0XHRcdFx0XHR9XHRcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cm91dGUgPSBBcHAucm91dGVyTW9kdWxlLmdlbmVyYXRlKCdzaG93X2VsZW1lbnQnLCB7IG5hbWUgOiAgY2FwaXRhbGl6ZShzbHVnaWZ5KGVsZW1lbnQubmFtZSkpLCBpZCA6IGVsZW1lbnQuaWQsIGFkZHJlc3NBbmRWaWV3cG9ydDogYWRkcmVzc0FuZFZpZXdwb3J0IH0pO1x0XG5cdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrO1x0XHRcblx0XHRcdH1cdFx0XG5cdFx0fVxuXG5cdFx0aWYgKHJvdXRlICYmIGhpc3RvcnlTdGF0ZS5maWx0ZXJzKSByb3V0ZSArPSAnP2NhdD0nICsgaGlzdG9yeVN0YXRlLmZpbHRlcnM7XG5cblx0XHRyZXR1cm4gcm91dGU7XG5cdH07XG59IiwiaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMsIEFwcERhdGFUeXBlLCBBcHBNb2RlcyB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBIaXN0b3J5U3RhdGUsIFZpZXdQb3J0IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jbGFzc2VzJzsgXG5cbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcblxuZGVjbGFyZSB2YXIgcm91dGllOiBhbnksICQ7XG5cbmV4cG9ydCBjbGFzcyBSb3V0ZXJNb2R1bGVcbntcblx0ZmlsdGVyc1NlcmlhbGl6ZWRQYXJhbSA6IHN0cmluZyA9ICcnO1xuXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHJvdXRpZSh7XG5cdFx0XHQnZ2VvbG9jYWxpemUgLzptb2RlL2F1dG91ci1kZS1tb2knOiAobW9kZSkgPT5cblx0XHRcdHtcblx0XHRcdFx0bGV0IGluaXRpYWxTdGF0ZSA9IG5ldyBIaXN0b3J5U3RhdGUoKTtcblxuXHRcdFx0XHRpbml0aWFsU3RhdGUuZGF0YVR5cGUgPSBBcHBEYXRhVHlwZS5BbGw7XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5tb2RlID0gbW9kZSA9PSAnY2FydGUnID8gQXBwTW9kZXMuTWFwIDogQXBwTW9kZXMuTGlzdDtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLnN0YXRlID0gQXBwU3RhdGVzLk5vcm1hbDtcdFx0XHRcdFxuXHRcdFx0XHRpbml0aWFsU3RhdGUuYWRkcmVzcyA9ICdnZW9sb2NhbGl6ZSc7XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5maWx0ZXJzID0gdGhpcy5maWx0ZXJzU2VyaWFsaXplZFBhcmFtO1xuXG5cdFx0XHRcdHRoaXMuc3RhcnRTdGF0ZShpbml0aWFsU3RhdGUpO1x0XHRcdFxuXHRcdFx0fSxcblx0XHRcdCdub3JtYWwgLzptb2RlLzphZGRyZXNzQW5kVmlld3BvcnQ/JzogKG1vZGUsIGFkZHJlc3NBbmRWaWV3cG9ydCA9ICcnKSA9PlxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgaW5pdGlhbFN0YXRlID0gbmV3IEhpc3RvcnlTdGF0ZSgpO1xuXHRcdFx0XHRsZXQgcGFyc2VkQWRkcmVzc0FuZFZpZXdwb3J0ID0gdGhpcy5wYXJzZUFkZHJlc3NWaWV3cG9ydChhZGRyZXNzQW5kVmlld3BvcnQpO1xuXG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5kYXRhVHlwZSA9IEFwcERhdGFUeXBlLkFsbDtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLm1vZGUgPSBtb2RlID09ICdjYXJ0ZScgPyBBcHBNb2Rlcy5NYXAgOiBBcHBNb2Rlcy5MaXN0O1xuXHRcdFx0XHRpbml0aWFsU3RhdGUuc3RhdGUgPSBBcHBTdGF0ZXMuTm9ybWFsO1x0XHRcdFx0XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5hZGRyZXNzID0gcGFyc2VkQWRkcmVzc0FuZFZpZXdwb3J0WzBdO1xuXHRcdFx0XHRpbml0aWFsU3RhdGUudmlld3BvcnQgPSBuZXcgVmlld1BvcnQoKS5mcm9tU3RyaW5nKHBhcnNlZEFkZHJlc3NBbmRWaWV3cG9ydFsxXSk7XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5maWx0ZXJzID0gdGhpcy5maWx0ZXJzU2VyaWFsaXplZFBhcmFtO1xuXG5cdFx0XHRcdHRoaXMuc3RhcnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuXHRcdFx0fSxcblx0XHRcdCdzaG93X2VsZW1lbnQgL2ZpY2hlLzpuYW1lLzppZC86YWRkcmVzc0FuZFZpZXdwb3J0Pyc6IChuYW1lLCBpZCwgYWRkcmVzc0FuZFZpZXdwb3J0ID0gJycpID0+XG5cdFx0XHR7XG5cdFx0XHRcdGxldCBpbml0aWFsU3RhdGUgPSBuZXcgSGlzdG9yeVN0YXRlKCk7XG5cdFx0XHRcdGxldCBwYXJzZWRBZGRyZXNzQW5kVmlld3BvcnQgPSB0aGlzLnBhcnNlQWRkcmVzc1ZpZXdwb3J0KGFkZHJlc3NBbmRWaWV3cG9ydCk7XG5cblx0XHRcdFx0aW5pdGlhbFN0YXRlLmRhdGFUeXBlID0gQXBwRGF0YVR5cGUuQWxsO1xuXHRcdFx0XHRpbml0aWFsU3RhdGUubW9kZSA9IEFwcE1vZGVzLk1hcDtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLnN0YXRlID0gQXBwU3RhdGVzLlNob3dFbGVtZW50QWxvbmU7XHRcdFx0XHRcblx0XHRcdFx0aW5pdGlhbFN0YXRlLmFkZHJlc3MgPSBwYXJzZWRBZGRyZXNzQW5kVmlld3BvcnRbMF07XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS52aWV3cG9ydCA9IG5ldyBWaWV3UG9ydCgpLmZyb21TdHJpbmcocGFyc2VkQWRkcmVzc0FuZFZpZXdwb3J0WzFdKTtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLmlkID0gaWQ7XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5maWx0ZXJzID0gdGhpcy5maWx0ZXJzU2VyaWFsaXplZFBhcmFtO1xuXG5cdFx0XHRcdHRoaXMuc3RhcnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuXHRcdFx0fSxcblx0XHRcdCdzaG93X2RpcmVjdGlvbnMgL2l0aW5lcmFpcmUvOm5hbWUvOmlkLzphZGRyZXNzQW5kVmlld3BvcnQ/JzogKG5hbWUsIGlkLCBhZGRyZXNzQW5kVmlld3BvcnQgPSAnJykgPT5cblx0XHRcdHtcblx0XHRcdFx0bGV0IGluaXRpYWxTdGF0ZSA9IG5ldyBIaXN0b3J5U3RhdGUoKTtcblx0XHRcdFx0bGV0IHBhcnNlZEFkZHJlc3NBbmRWaWV3cG9ydCA9IHRoaXMucGFyc2VBZGRyZXNzVmlld3BvcnQoYWRkcmVzc0FuZFZpZXdwb3J0KTtcblxuXHRcdFx0XHRpbml0aWFsU3RhdGUuZGF0YVR5cGUgPSBBcHBEYXRhVHlwZS5BbGw7XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5tb2RlID0gQXBwTW9kZXMuTWFwO1xuXHRcdFx0XHRpbml0aWFsU3RhdGUuc3RhdGUgPSBBcHBTdGF0ZXMuU2hvd0RpcmVjdGlvbnM7XHRcdFx0XHRcblx0XHRcdFx0aW5pdGlhbFN0YXRlLmFkZHJlc3MgPSBwYXJzZWRBZGRyZXNzQW5kVmlld3BvcnRbMF07XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS52aWV3cG9ydCA9IG5ldyBWaWV3UG9ydCgpLmZyb21TdHJpbmcocGFyc2VkQWRkcmVzc0FuZFZpZXdwb3J0WzFdKTtcblx0XHRcdFx0aW5pdGlhbFN0YXRlLmlkID0gaWQ7XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5maWx0ZXJzID0gdGhpcy5maWx0ZXJzU2VyaWFsaXplZFBhcmFtO1xuXG5cdFx0XHRcdHRoaXMuc3RhcnRTdGF0ZShpbml0aWFsU3RhdGUpO1x0XG5cdFx0XHR9LFxuXHRcdFx0J3NlYXJjaCAvOm1vZGUvcmVjaGVyY2hlLzp0ZXh0JzogKG1vZGUsIHRleHQpID0+XG5cdFx0XHR7XG5cdFx0XHRcdGxldCBpbml0aWFsU3RhdGUgPSBuZXcgSGlzdG9yeVN0YXRlKCk7XG5cblx0XHRcdFx0aW5pdGlhbFN0YXRlLmRhdGFUeXBlID0gQXBwRGF0YVR5cGUuU2VhcmNoUmVzdWx0cztcblx0XHRcdFx0aW5pdGlhbFN0YXRlLm1vZGUgPSBBcHBNb2Rlcy5NYXA7XG5cdFx0XHRcdGluaXRpYWxTdGF0ZS5zdGF0ZSA9IEFwcFN0YXRlcy5Ob3JtYWw7XHRcdFx0XHRcblx0XHRcdFx0aW5pdGlhbFN0YXRlLnRleHQgPSB0ZXh0O1xuXHRcdFx0XHRpbml0aWFsU3RhdGUuZmlsdGVycyA9IHRoaXMuZmlsdGVyc1NlcmlhbGl6ZWRQYXJhbTtcblxuXHRcdFx0XHR0aGlzLnN0YXJ0U3RhdGUoaW5pdGlhbFN0YXRlKTtcblx0XHRcdH1cblx0XHR9KTtcdFx0XG5cdH1cblxuXHRsb2FkSW5pdGlhbFN0YXRlKClcblx0e1x0XHRcblx0XHRpZiAoQXBwLmNvbmZpZy5nZW5lcmFsLmFjdGl2YXRlSGlzdG9yeVN0YXRlQW5kUm91dGluZykgXG5cdFx0e1x0XHRcblx0XHRcdC8vIGNoZWNrIEdFVCBwYXJhbWV0ZXJzIGluc2lkZSB0aGUgaGFzaFxuXHRcdFx0bGV0IHNwbGl0ZWQgPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zcGxpdCgnP2NhdD0nKTtcblx0XHRcdFxuXHRcdFx0aWYgKHNwbGl0ZWQubGVuZ3RoID4gMSkgdGhpcy5maWx0ZXJzU2VyaWFsaXplZFBhcmFtID0gc3BsaXRlZFsxXTtcblxuXHRcdFx0bGV0IHJvdXRlSGFzaCA9IHNwbGl0ZWRbMF07XG5cblx0XHRcdC8vIGhhbmRsZSB3cm9uZyBoYXNoXG5cdFx0XHRpZiAoIXJvdXRlSGFzaCB8fCByb3V0ZUhhc2ggPT0gJyMvJyB8fCByb3V0ZUhhc2ggPT0gJyMnKSByb3V0ZUhhc2ggPSAnL2NhcnRlJztcblx0XHRcdHJvdXRpZS5uYXZpZ2F0ZShyb3V0ZUhhc2gpO1xuXG5cdFx0XHQvLyBsZXQgdGhlIGhhc2ggYmVpbmcgY2hhbmdlZCB3aXRoIGEgdGltZU91dFxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiByb3V0aWUucmVsb2FkKCksIDEwKTtcblx0XHR9XG5cdFx0ZWxzZSBcblx0XHR7XG5cdFx0XHRsZXQgaW5pdGlhbEhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdC8vIG5hdmlnYXRlIHRvIGRlZmF1bHQgcm91dGVcblx0XHRcdHJvdXRpZS5uYXZpZ2F0ZSgnL2NhcnRlJyk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHJvdXRpZS5yZWxvYWQoKSwgMTApO1xuXHRcdFx0Ly8gcmVzdG9yZSBpbml0aWFsIGhhc2hcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4gd2luZG93LmxvY2F0aW9uLmhhc2ggPSBpbml0aWFsSGFzaCwgMTAwKTtcblx0XHR9XG5cdH1cblxuXHRnZW5lcmF0ZShyb3V0ZU5hbWUgOiBzdHJpbmcsIG9wdGlvbnM/IDogYW55LCBhYnNvbHV0ZVVybD8gOiBib29sZWFuKVxuXHR7XG5cdFx0cmV0dXJuICcjJyArIHJvdXRpZS5sb29rdXAocm91dGVOYW1lLCBvcHRpb25zKTtcblx0fVxuXG5cdC8vIGFkZHJlc3MgYW5kIHZpZXdwb3J0IGFyZSBqb2luZWQgaW50byBvbmUgc3RyaW5nLCBzZXBlcmF0ZWQgYnkgXCJAXCJcblx0cHJpdmF0ZSBwYXJzZUFkZHJlc3NWaWV3cG9ydCgkYWRkcmVzc1ZpZXdwb3J0KVxuICB7XG4gICAgLy8gcHJlY2F1dGlvbiBpbiBjYXNlIEdFVCBwYXJhbSBzdGlsbCBpbiBoYXNoXG5cdFx0JGFkZHJlc3NWaWV3cG9ydCA9ICRhZGRyZXNzVmlld3BvcnQuc3BsaXQoJz8nKVswXTtcblxuICAgIGxldCBzcGxpdGVkID0gJGFkZHJlc3NWaWV3cG9ydC5zcGxpdCgnQCcpO1xuXG4gICAgaWYgKHNwbGl0ZWQubGVuZ3RoID09IDEpXG4gICAge1xuICAgICAgICByZXR1cm4gWyRhZGRyZXNzVmlld3BvcnQsICcnXTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHNwbGl0ZWQ7XG4gICAgfSAgXG4gIH1cblxuICBwcml2YXRlIHN0YXJ0U3RhdGUoc3RhdGUgOiBIaXN0b3J5U3RhdGUpXG4gIHtcblx0XHRBcHAuaGlzdG9yeVN0YXRlTWFuYWdlci5sb2FkKHN0YXRlKTtcdFx0XG4gIH1cbn0iLCJpbXBvcnQgeyBBcHBNb2R1bGUgfSBmcm9tIFwiLi4vLi4vYXBwLm1vZHVsZVwiO1xuXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5kZWNsYXJlIHZhciBudW5qdWNrcztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlTW9kdWxlXG57XG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdC8vIHdlIGNhbiBjb25maWd1cmUgdGhpcyBwYXRoIGFuZCB0aGUgdGVtcGxhdGVzIG5hbWVzIGZyb20gR29Hb0NhcnRvXG5cdFx0Ly8gdG8gb3ZlcnJpZGUgZGVmYXVsdCB0ZW1wbGF0ZXNcblx0XHQvLyBBcyBkZWZhdWx0IHRlbXBsYXRlcyBhcmUgcHJlY29tcGlsZWQgaW50byBqYXZhc2NyaXB0IHRlbXBsYXRlcy5qcyBmaWxlXG5cdFx0Ly8gaWYgdGhlcmUgaXMgc29tZSB0ZW1wbGF0ZXMgd2UgZGlkIG5vdCBvdmVycmlkZSwgbnVuanVja3Mgd2lsbCBnZXQgdGhlIHByZWNvbXBpbGVkIG9uZVxuXHRcdG51bmp1Y2tzLmNvbmZpZ3VyZSgnLi4vc3JjL3ZpZXdzJywgeyBhdXRvZXNjYXBlOiB0cnVlIH0pO1xuXHR9XG5cblx0cmVuZGVyKHRlbXBsYXRlTmFtZSA6IHN0cmluZywgb3B0aW9ucyA6IGFueSA9IHt9KSA6IHN0cmluZ1xuXHR7XG5cdFx0bGV0IGZpbGVVcmwgPSAnJztcblxuXHRcdHN3aXRjaCh0ZW1wbGF0ZU5hbWUpXG5cdFx0e1xuXHRcdFx0Y2FzZSAnbGF5b3V0JzogZmlsZVVybCA9ICdsYXlvdXQuaHRtbC5uamsnOyBicmVhaztcblx0XHRcdGNhc2UgJ21hcmtlcic6IGZpbGVVcmwgPSAnY29tcG9uZW50cy9tYXAvbWFya2VyLmh0bWwubmprJzsgYnJlYWs7XG5cdFx0XHRjYXNlICdnb2dvLXN0eWxlcyc6IGZpbGVVcmwgPSAnZ29nby1zdHlsZXMuaHRtbC5uamsnOyBicmVhaztcblx0XHRcdGNhc2UgJ2VsZW1lbnQnOiBmaWxlVXJsID0gJ2NvbXBvbmVudHMvZWxlbWVudC9lbGVtZW50Lmh0bWwubmprJzsgYnJlYWs7XG5cdFx0XHRjYXNlICd2b3RlLW1vZGFsLWNvbnRlbnQnOiBmaWxlVXJsID0gJ2NvbXBvbmVudHMvbW9kYWxzL2VsZW1lbnQvdm90ZS1jb250ZW50Lmh0bWwubmprJzsgYnJlYWs7XG5cdFx0XHRkZWZhdWx0OiBjb25zb2xlLndhcm4oJ1tHb0dvQ2FydG9dIE5vIHRlbXBsYXRlIGFzc29jaWF0ZWQgdG8gdGVtcGxhdGVOYW1lJywgdGVtcGxhdGVOYW1lKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVuanVja3MucmVuZGVyKGZpbGVVcmwsIG9wdGlvbnMpO1xuXHR9XG59IiwiaW1wb3J0IHsgT3B0aW9uVmFsdWUgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5kZWNsYXJlIHZhciBKc0RpZmYgOiBhbnk7XG5cbnZhciBkaWZmQ29uZmlndXJhdGlvbiA9XG57XG4gIG5hbWU6IEpzRGlmZi5kaWZmU2VudGVuY2VzLFxuICBkZXNjcmlwdGlvbjogSnNEaWZmLmRpZmZTZW50ZW5jZXMsXG4gIGFkZHJlc3M6IEpzRGlmZi5kaWZmU2VudGVuY2VzLFxuICBjb21taXRtZW50OiBKc0RpZmYuZGlmZlNlbnRlbmNlcyxcbiAgdGVsZXBob25lOiBKc0RpZmYuZGlmZlNlbnRlbmNlcyxcbiAgd2Vic2l0ZTogSnNEaWZmLmRpZmZTZW50ZW5jZXMsXG4gIGVtYWlsOiBKc0RpZmYuZGlmZlNlbnRlbmNlcyxcbiAgb3BlbkhvdXJzTW9yZUluZm9zOiBKc0RpZmYuZGlmZlNlbnRlbmNlcyxcbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnREaWZmTW9kdWxlXG57XG4gIGdldERpZmZWYWx1ZSh2YWx1ZSwgbW9kaWZpZWRWYWx1ZSwgcHJvcGVydHlOYW1lKVxuICB7XG4gICAgbGV0IHNwYW5DbGFzcyA9ICcnLFxuICAgIHNwYW4gPSBudWxsO1xuXG4gICAgbGV0IERpZmZNZXRob2QgPSBkaWZmQ29uZmlndXJhdGlvbltwcm9wZXJ0eU5hbWVdID8gZGlmZkNvbmZpZ3VyYXRpb25bcHJvcGVydHlOYW1lXSA6IEpzRGlmZi5kaWZmU2VudGVuY2VzXG4gICAgbGV0IGRpZmYgPSBEaWZmTWV0aG9kKHZhbHVlLCBtb2RpZmllZFZhbHVlKTtcbiAgICBsZXQgZGlzcGxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuICAgICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICAgIGRpZmYuZm9yRWFjaChmdW5jdGlvbihwYXJ0KVxuICAgIHtcbiAgICAgIHNwYW5DbGFzcyA9IHBhcnQuYWRkZWQgPyAnYWRkZWQnIDogcGFydC5yZW1vdmVkID8gJ3JlbW92ZWQnIDogJ2VxdWFscyc7XG4gICAgICBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgaWYgKHNwYW5DbGFzcykgc3Bhbi5jbGFzc05hbWUgPSBzcGFuQ2xhc3M7XG4gICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBhcnQudmFsdWUpKTtcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgIH0pO1xuXG4gICAgZGlzcGxheS5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG5cbiAgICByZXR1cm4gZGlzcGxheS5pbm5lckhUTUw7XG4gIH1cblxuICBnZXREaWZmT3B0aW9uVmFsdWVzKG9wdGlvblZhbHVlcyA6IE9wdGlvblZhbHVlW10sIG5ld09wdGlvblZhbHVlcyA6IE9wdGlvblZhbHVlW10pXG4gIHtcbiAgICBsZXQgZGlmZk9wdGlvbnNWYWx1ZXMgPSBbXTtcbiAgICBsZXQgbmV3T1ZJZHMgPSBuZXdPcHRpb25WYWx1ZXMubWFwKChvYmopID0+IG9iai5vcHRpb25JZCk7XG4gICAgbGV0IG9sZE9WSWRzID0gb3B0aW9uVmFsdWVzLm1hcCgob2JqKSA9PiBvYmoub3B0aW9uSWQpO1xuXG4gICAgZm9yKGxldCBvdiBvZiBvcHRpb25WYWx1ZXMpXG4gICAge1xuICAgICAgaWYgKG5ld09WSWRzLmluZGV4T2Yob3Yub3B0aW9uSWQpID09IC0xKVxuICAgICAge1xuICAgICAgICBvdi5kaWZmID0gJ3JlbW92ZWQnO1xuICAgICAgICBkaWZmT3B0aW9uc1ZhbHVlcy5wdXNoKG92KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yKGxldCBuZXdPdiBvZiBuZXdPcHRpb25WYWx1ZXMpXG4gICAge1xuICAgICAgbGV0IGluZGV4ID0gb2xkT1ZJZHMuaW5kZXhPZihuZXdPdi5vcHRpb25JZCk7XG4gICAgICBpZiAoaW5kZXggPT0gLTEpXG4gICAgICB7XG4gICAgICAgIG5ld092LmRpZmYgPSAnYWRkZWQnO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAgeyAgICAgICAgXG4gICAgICAgIGxldCBtb2RpZmllZFZhbHVlID0gY2FwaXRhbGl6ZShuZXdPdi5kZXNjcmlwdGlvbik7XG4gICAgICAgIGxldCB2YWx1ZSA9IGNhcGl0YWxpemUob3B0aW9uVmFsdWVzW2luZGV4XS5kZXNjcmlwdGlvbiksXG4gICAgICAgIHNwYW5DbGFzcyA9ICcnLFxuICAgICAgICBzcGFuID0gbnVsbDtcbiAgICAgICAgbGV0IGRpZmYgPSBKc0RpZmYuZGlmZldvcmRzKHZhbHVlLCBtb2RpZmllZFZhbHVlKSxcbiAgICAgICAgICAgIGRpc3BsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcbiAgICAgICAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgICAgIGRpZmYuZm9yRWFjaChmdW5jdGlvbihwYXJ0KVxuICAgICAgICB7XG4gICAgICAgICAgc3BhbkNsYXNzID0gcGFydC5hZGRlZCA/ICdhZGRlZCcgOiBwYXJ0LnJlbW92ZWQgPyAncmVtb3ZlZCcgOiAnZXF1YWxzJztcbiAgICAgICAgICBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgIGlmIChzcGFuQ2xhc3MpIHNwYW4uY2xhc3NOYW1lID0gc3BhbkNsYXNzO1xuICAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGFydC52YWx1ZSkpO1xuICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkaXNwbGF5LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuICAgICAgICBuZXdPdi5kZXNjcmlwdGlvbiA9IGRpc3BsYXkuaW5uZXJIVE1MO1xuICAgICAgICBuZXdPdi5kaWZmID0gJ2VxdWFscyc7XG4gICAgICB9XG4gICAgICBkaWZmT3B0aW9uc1ZhbHVlcy5wdXNoKG5ld092KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlmZk9wdGlvbnNWYWx1ZXM7XG4gIH1cbn0iLCJpbXBvcnQgeyBFbGVtZW50LCBFbGVtZW50QmFzZSwgRWxlbWVudFN0YXR1cywgUG9zdGFsQWRkcmVzcywgRWxlbWVudFVybCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcbmltcG9ydCB7IGNhcGl0YWxpemUsIHNsdWdpZnksIHNwbGl0TG9uZ1RleHQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmRlY2xhcmUgdmFyICQsIEw7XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50SnNvblBhcnNlck1vZHVsZVxue1xuICBsb2FkKGVsZW1lbnRKc29uIDogYW55LCBlbGVtZW50IDogRWxlbWVudCB8IEVsZW1lbnRCYXNlKVxuICB7XG4gICAgLy8gcGF0Y2ggdG8gaGFuZGxlIGNvbXBhY3RKc29uIHN0b3JlZCBpbnNpZGUgYSBcImNvbXBhY3RKc29uXCIgcHJvcGVydHkgKHVzZSB3aXRoIFNlbWFudGljIEJ1cylcbiAgICBpZiAoZWxlbWVudEpzb24uY29tcGFjdEpzb24pIFxuICAgIHtcbiAgICAgIGxldCBpZCA9IGVsZW1lbnRKc29uLmlkO1xuICAgICAgZWxlbWVudEpzb24gPSBlbGVtZW50SnNvbi5jb21wYWN0SnNvbjtcbiAgICAgIGVsZW1lbnRKc29uLmlkID0gaWQ7XG4gICAgfVxuXG4gICAgLy8gd2hlbiB3ZSBnZXQgdGhlIGNvbXBhY3QganNvbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWxlbWVudCBmcm9tIHRoZSBzZXJ2ZXJcbiAgICAvLyB0aGUgZWxlbWVudEpzb24gaXMgYSBzaW1wbGUgYXJyYXkgd2l0aCB0aGUgbW9yZSBpbXBvcnRhbnQgZWxlbWVudCBhdHRyaWJ1dGVcbiAgICBpZiAoJC5pc0FycmF5KGVsZW1lbnRKc29uKSAmJiBlbGVtZW50SnNvbi5sZW5ndGggPj0gNSlcbiAgICAgIHRoaXMubG9hZEZyb21Db21wYWN0SnNvbihlbGVtZW50SnNvbiwgZWxlbWVudCk7XG4gICAgZWxzZSBcbiAgICAgIHRoaXMubG9hZEZyb21GdWxsSnNvbihlbGVtZW50SnNvbiwgZWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRGcm9tQ29tcGFjdEpzb24oZWxlbWVudEpzb24gOiBhbnksIGVsZW1lbnQgOiBFbGVtZW50IHwgRWxlbWVudEJhc2UpXG4gIHtcbiAgICBlbGVtZW50LmlkID0gZWxlbWVudEpzb24uaWQ7IC8vIHRoZSBlbGVtZW50IGhhcyBiZWVuIG1vZGlmaWVkIGJlZm9yZSB0byBmaXhzIGJhZCBpZHMgICAgIFxuICAgIGVsZW1lbnQubmFtZSA9IGNhcGl0YWxpemUoZWxlbWVudEpzb25bMV0pO1xuICAgIGVsZW1lbnQucG9zaXRpb24gPSBMLmxhdExuZyhlbGVtZW50SnNvblsyXSwgZWxlbWVudEpzb25bM10pOyAgICAgXG4gICAgQXBwLmVsZW1lbnRPcHRpb25WYWx1ZXNNb2R1bGUuY3JlYXRlT3B0aW9uVmFsdWVzKGVsZW1lbnRKc29uWzRdLCBlbGVtZW50KTsgICBcbiAgICBlbGVtZW50LnN0YXR1cyA9IGVsZW1lbnRKc29uLmxlbmd0aCA+PSA2ID8gZWxlbWVudEpzb25bNV0gOiAxOyAgXG4gICAgZWxlbWVudC5tb2RlcmF0aW9uU3RhdGUgPSBlbGVtZW50SnNvbi5sZW5ndGggPj0gNyA/IGVsZW1lbnRKc29uWzZdIDogMDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEZyb21GdWxsSnNvbihlbGVtZW50SnNvbiA6IGFueSwgZWxlbWVudCA6IEVsZW1lbnQgfCBFbGVtZW50QmFzZSlcbiAge1xuICAgIC8vIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgcHJlZmlsbGVkIHdpdGggdGhlIGNvbXBhY3QganNvbiByZXByZXNlbnRhdGlvblxuICAgIC8vIHdlIG92ZXdyaXRlIGFueXdheSBhbGwgYXR0cmlidXRlcyAoaXQgY2FuIGhhdmUgY2hhbmdlZCAhKVxuICAgIGVsZW1lbnQuaWQgPSBlbGVtZW50SnNvbi5pZCB8fCBlbGVtZW50SnNvblsnQGlkJ107XG5cbiAgICBlbGVtZW50LnBvc2l0aW9uID0gTC5sYXRMbmcoZWxlbWVudEpzb24ubGF0aXR1ZGUgfHwgZWxlbWVudEpzb24ubGF0IHx8IGVsZW1lbnRKc29uLmdlbyAmJiBlbGVtZW50SnNvbi5nZW8ubGF0aXR1ZGUsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50SnNvbi5sb25naXR1ZGUgfHwgZWxlbWVudEpzb24ubG5nIHx8IGVsZW1lbnRKc29uLmxvbmcgfHwgZWxlbWVudEpzb24uZ2VvICYmIGVsZW1lbnRKc29uLmdlby5sb25naXR1ZGUpO1xuICAgIGVsZW1lbnQubmFtZSA9IGNhcGl0YWxpemUoZWxlbWVudEpzb24ubmFtZSB8fCBlbGVtZW50SnNvbi50aXRsZSk7XG4gICAgXG4gICAgZWxlbWVudC5zdGF0dXMgPSBlbGVtZW50SnNvbi5zdGF0dXMgPT0gdW5kZWZpbmVkID8gMSA6IGVsZW1lbnRKc29uLnN0YXR1cztcbiAgICBlbGVtZW50Lm1vZGVyYXRpb25TdGF0ZSA9IGVsZW1lbnRKc29uLm1vZGVyYXRpb25TdGF0ZSB8fCAwO1xuXG4gICAgdGhpcy5jcmVhdGVPcHRpb25zVmFsdWVzKGVsZW1lbnRKc29uLCBlbGVtZW50KTtcblxuICAgIGVsZW1lbnQuc3RhbXBzID0gZWxlbWVudEpzb24uc3RhbXBzIHx8IFtdOyAgICBcblxuICAgIGlmKGVsZW1lbnRKc29uLm1vZGlmaWVkRWxlbWVudCAmJiBlbGVtZW50LnN0YXR1cyAhPSAtNSkgXG4gICAge1xuICAgICAgbGV0IG1vZGlmaWVkRWxlbWVudCA9IG5ldyBFbGVtZW50QmFzZShlbGVtZW50SnNvbi5tb2RpZmllZEVsZW1lbnQpO1xuICAgICAgXG4gICAgICB0aGlzLmNyZWF0ZU9wdGlvbnNWYWx1ZXMoZWxlbWVudEpzb24ubW9kaWZpZWRFbGVtZW50LCBtb2RpZmllZEVsZW1lbnQpO1xuICAgICAgXG4gICAgICAvLyBjYWxjdWwgYW5kIHN0b3JlIGRpZmYgb3B0aW9uc1ZhbHVlcyBpbiBtb2RpZmllZCBlbGVtZW50XG4gICAgICBsZXQgZGlmZk9wdGlvblZhbHVlcyA9IEFwcC5lbGVtZW50RGlmZk1vZHVsZS5nZXREaWZmT3B0aW9uVmFsdWVzKGVsZW1lbnQub3B0aW9uc1ZhbHVlcywgbW9kaWZpZWRFbGVtZW50Lm9wdGlvbnNWYWx1ZXMpO1xuICAgICAgbW9kaWZpZWRFbGVtZW50Lm9wdGlvbnNWYWx1ZXMgPSBkaWZmT3B0aW9uVmFsdWVzO1xuXG4gICAgICBlbGVtZW50Lm1vZGlmaWVkRWxlbWVudCA9IG1vZGlmaWVkRWxlbWVudDtcbiAgICB9XG4gICAgXG4gICAgZWxlbWVudC5kZXNjcmlwdGlvbiA9IGVsZW1lbnRKc29uLmRlc2NyaXB0aW9uIHx8IGVsZW1lbnRKc29uLmFic3RyYWN0O1xuICAgIGVsZW1lbnQuZGVzY3JpcHRpb24gPSBjYXBpdGFsaXplKGVsZW1lbnQuZGVzY3JpcHRpb24gfHwgJycpIDtcbiAgICBlbGVtZW50LmxvbmdEZXNjcmlwdGlvbiA9IGVsZW1lbnRKc29uLmRlc2NyaXB0aW9uTW9yZTtcbiAgICBlbGVtZW50LmxvbmdEZXNjcmlwdGlvbiA9IGNhcGl0YWxpemUoZWxlbWVudC5sb25nRGVzY3JpcHRpb24gfHwgJycpOyBcbiAgICB0aGlzLmNoZWNrRm9yTWVyZ2VEZXNjcmlwdGlvbnMoZWxlbWVudCk7XG4gICAgdGhpcy5jaGVja0ZvclNwbGl0RGVzY3JpcHRpb24oZWxlbWVudCk7XG5cbiAgICBlbGVtZW50LmFkZHJlc3MgPSBuZXcgUG9zdGFsQWRkcmVzcyhlbGVtZW50SnNvbi5hZGRyZXNzKTtcblxuICAgIC8vIGVsZW1lbnQucmVwb3J0cyA9IGVsZW1lbnQuY3JlYXRlT2JqZWN0QXJyYXlGcm9tSnNvbihWb3RlUmVwb3J0LCBlbGVtZW50SnNvbi5yZXBvcnRzKTtcbiAgICAvLyBlbGVtZW50LmNvbnRyaWJ1dGlvbnMgPSBlbGVtZW50LmNyZWF0ZU9iamVjdEFycmF5RnJvbUpzb24oQ29udHJpYnV0aW9uLCBlbGVtZW50SnNvbi5jb250cmlidXRpb25zKTtcbiAgICAvLyBlbGVtZW50LnZvdGVzID0gZWxlbWVudC5jcmVhdGVPYmplY3RBcnJheUZyb21Kc29uKFZvdGVSZXBvcnQsIGVsZW1lbnRKc29uLnZvdGVzKTtcblxuICAgIGVsZW1lbnQucmVwb3J0cyA9IGVsZW1lbnRKc29uLnJlcG9ydHM7XG4gICAgZWxlbWVudC5jb250cmlidXRpb25zID0gZWxlbWVudEpzb24uY29udHJpYnV0aW9ucztcbiAgICBlbGVtZW50LnBlbmRpbmdDb250cmlidXRpb24gPSBlbGVtZW50SnNvbi5wZW5kaW5nQ29udHJpYnV0aW9uO1xuICAgIGVsZW1lbnQudm90ZXMgPSBlbGVtZW50SnNvbi52b3RlcztcblxuICAgIGVsZW1lbnQuY29tbWl0bWVudCA9IGVsZW1lbnRKc29uLmNvbW1pdG1lbnQgfHwgJyc7XG4gICAgZWxlbWVudC50ZWxlcGhvbmUgPSBBcHAuZWxlbWVudEZvcm1hdGVyTW9kdWxlLmdldEZvcm1hdGVkVGVsKGVsZW1lbnRKc29uLnRlbGVwaG9uZSk7ICAgIFxuICAgIGVsZW1lbnQuZW1haWwgPSBlbGVtZW50SnNvbi5lbWFpbCB8fCBlbGVtZW50SnNvbi5jb250YWN0IHx8ICcnO1xuICAgIGVsZW1lbnQub3BlbkhvdXJzID0gZWxlbWVudEpzb24ub3BlbkhvdXJzO1xuICAgIEFwcC5lbGVtZW50Rm9ybWF0ZXJNb2R1bGUuY2FsY3VsYXRlRm9ybWF0ZWRPcGVuSG91cnMoZWxlbWVudCk7XG4gICAgZWxlbWVudC5vcGVuSG91cnNNb3JlSW5mb3MgPSBlbGVtZW50SnNvbi5vcGVuSG91cnNNb3JlSW5mb3MgfHwgZWxlbWVudEpzb24ub3BlbkhvdXJzU3RyaW5nOyBcbiAgICBlbGVtZW50LmltYWdlcyA9IFtdO1xuICAgIGlmKGVsZW1lbnRKc29uLmltYWdlKSBlbGVtZW50LmltYWdlcy5wdXNoKGVsZW1lbnRKc29uLmltYWdlKTtcbiAgICBlbHNlIGlmIChlbGVtZW50SnNvbi5pbWFnZXMpIGVsZW1lbnQuaW1hZ2VzID0gW10uY29uY2F0KGVsZW1lbnRKc29uLmltYWdlcyk7XG4gICAgZWxlbWVudC5pbWFnZXMgPSBlbGVtZW50LmltYWdlcy5maWx0ZXIoKGltYWdlVXJsKSA9PiBpbWFnZVVybC5sZW5ndGggPiAwKTtcbiAgICBcbiAgICAvLyB1cmxzXG4gICAgZWxlbWVudC53ZWJzaXRlID0gZWxlbWVudEpzb24ud2Vic2l0ZSB8fCBlbGVtZW50SnNvbi5zaXRlO1xuICAgIGxldCB1cmxzSnNvbiA9IGVsZW1lbnRKc29uLnVybHMgfHwgZWxlbWVudEpzb24udXJsO1xuICAgIGxldCB1cmxzIDogRWxlbWVudFVybFtdID0gW107XG4gICAgaWYgICAgICAodHlwZW9mIHVybHNKc29uID09ICdzdHJpbmcnKSB1cmxzID0gW25ldyBFbGVtZW50VXJsKHVybHNKc29uKV07IFxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodXJsc0pzb24pKSAgICAgZm9yKGxldCB1cmwgb2YgdXJsc0pzb24pIHVybHMucHVzaChuZXcgRWxlbWVudFVybCh1cmwpKSAgIFxuICAgIGVsc2UgaWYgKHR5cGVvZiB1cmxzSnNvbiA9PSAnb2JqZWN0JykgZm9yIChsZXQga2V5IGluIHVybHNKc29uKSB1cmxzLnB1c2gobmV3IEVsZW1lbnRVcmwoe3R5cGU6a2V5LCB2YWx1ZTp1cmxzSnNvbltrZXldfSkpO1xuICAgIFxuICAgIGVsZW1lbnQudXJscyA9IHVybHM7XG4gICAgZWxlbWVudC50YWdzID0gZWxlbWVudEpzb24udGFncztcblxuICAgIGVsZW1lbnQuc2VhcmNoU2NvcmUgPSBlbGVtZW50SnNvbi5zZWFyY2hTY29yZTtcbiAgICBlbGVtZW50LmlzRnVsbHlMb2FkZWQgPSB0cnVlXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9wdGlvbnNWYWx1ZXMoZWxlbWVudEpzb24gOiBhbnksIGVsZW1lbnQgOiBFbGVtZW50IHwgRWxlbWVudEJhc2UpXG4gIHtcbiAgICBBcHAuZWxlbWVudE9wdGlvblZhbHVlc01vZHVsZS5jcmVhdGVPcHRpb25WYWx1ZXMoZWxlbWVudEpzb24uY2F0ZWdvcmllcyB8fCBlbGVtZW50SnNvbi50YXhvbm9teSB8fCBlbGVtZW50SnNvbi5vcHRpb25WYWx1ZXMsIGVsZW1lbnQpO1xuICAgIGlmIChlbGVtZW50SnNvbi5jYXRlZ29yaWVzRGVzY3JpcHRpb25zKVxuICAgICAgQXBwLmVsZW1lbnRPcHRpb25WYWx1ZXNNb2R1bGUudXBkYXRlT3B0aW9uc1dpdGhEZXNjcmlwdGlvbihlbGVtZW50LCBlbGVtZW50SnNvbi5jYXRlZ29yaWVzRGVzY3JpcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT2JqZWN0QXJyYXlGcm9tSnNvbihrbGFzcywgZWxlbWVudHNKc29uKVxuICB7XG4gICAgZWxlbWVudHNKc29uID0gZWxlbWVudHNKc29uIHx8IFtdO1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBmb3IobGV0IGVsZW1lbnRKc29uIG9mIGVsZW1lbnRzSnNvbilcbiAgICB7XG4gICAgICByZXN1bHQucHVzaChuZXcga2xhc3MoZWxlbWVudEpzb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBcblxuICAvLyBpZiB0aGUgZGVzY3JpcHRpb24gYW5kIGxvbmdEZXNjcmlwdGlvbiBhcmUgc21hbGwsIHdlIGNhbiBtZXJnZSB0aGVtIGludG8gb25lIHNpbmdsZSBkZXNjcmlwdGlvblxuICBwcml2YXRlIGNoZWNrRm9yTWVyZ2VEZXNjcmlwdGlvbnMoZWxlbWVudClcbiAge1xuICAgIGlmICggZWxlbWVudC5zdGF0dXMgIT0gRWxlbWVudFN0YXR1cy5QZW5kaW5nTW9kaWZpY2F0aW9uICYmXG4gICAgICAgICBlbGVtZW50LnN0YXR1cyAhPSBFbGVtZW50U3RhdHVzLk1vZGlmaWVkRWxlbWVudCAmJlxuICAgICAgICAgZWxlbWVudC5sb25nRGVzY3JpcHRpb24ubGVuZ3RoID4gMCAmJiBcbiAgICAgICAgIChlbGVtZW50LmRlc2NyaXB0aW9uLmxlbmd0aCArIGVsZW1lbnQubG9uZ0Rlc2NyaXB0aW9uLmxlbmd0aCkgPCAzMDApXG4gICAge1xuICAgICAgaWYgKGVsZW1lbnQuZGVzY3JpcHRpb24ubGVuZ3RoID4gMCkgZWxlbWVudC5kZXNjcmlwdGlvbiA9IGVsZW1lbnQuZGVzY3JpcHRpb24gKyAnPGJyIC8+ICc7XG4gICAgICBlbGVtZW50LmRlc2NyaXB0aW9uICs9IGVsZW1lbnQubG9uZ0Rlc2NyaXB0aW9uO1xuICAgICAgZWxlbWVudC5sb25nRGVzY3JpcHRpb24gPSAnJztcbiAgICB9XG4gIH1cblxuICAvLyB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgYSB2ZXJ5IGxhcmdlIGRlc2NyaXB0aW9uIGluIHRoZSBoZWFkZXIsIGluc3RlYWQgd2Ugc3BsaXQgdGhlIGRlc2NyaXB0aW9uXG4gIC8vIGludG8gc21hbGxlciBvbmUgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBvbiBib2R5XG4gIHByaXZhdGUgY2hlY2tGb3JTcGxpdERlc2NyaXB0aW9uKGVsZW1lbnQgOiBFbGVtZW50QmFzZSlcbiAge1xuICAgIGlmICggZWxlbWVudC5zdGF0dXMgIT0gRWxlbWVudFN0YXR1cy5QZW5kaW5nTW9kaWZpY2F0aW9uICYmXG4gICAgICAgICBlbGVtZW50LnN0YXR1cyAhPSBFbGVtZW50U3RhdHVzLk1vZGlmaWVkRWxlbWVudClcbiAgICB7XG4gICAgICBpZiAoZWxlbWVudC5kZXNjcmlwdGlvbi5sZW5ndGggPiAzMDApIHsgICAgICAgIFxuICAgICAgICBsZXQgcmVzdWx0ID0gc3BsaXRMb25nVGV4dChlbGVtZW50LmRlc2NyaXB0aW9uLCAzMDAsIDgwKTtcbiAgICAgICAgZWxlbWVudC5kZXNjcmlwdGlvbiA9IHJlc3VsdC5maXJzdCArIFwiIChTdWl0ZSBhdSBkZXNzb3VzLi4uKVwiO1xuICAgICAgICBpZiAoZWxlbWVudC5sb25nRGVzY3JpcHRpb24pIHJlc3VsdC5zZWNvbmQgKz0gXCI8L2JyPlwiICsgZWxlbWVudC5sb25nRGVzY3JpcHRpb247XG4gICAgICAgIGVsZW1lbnQubG9uZ0Rlc2NyaXB0aW9uID0gcmVzdWx0LnNlY29uZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW1lbnQubG9uZ0Rlc2NyaXB0aW9uLmxlbmd0aCA+IDUwMCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gc3BsaXRMb25nVGV4dChlbGVtZW50LmxvbmdEZXNjcmlwdGlvbiwgNTAwLCAxMDApO1xuICAgICAgICBlbGVtZW50LmxvbmdEZXNjcmlwdGlvbiA9IHJlc3VsdC5maXJzdDsgXG4gICAgICAgIGVsZW1lbnQubG9uZ0Rlc2NyaXB0aW9uTW9yZSA9IHJlc3VsdC5zZWNvbmQ7ICAgICAgICAgICAgIFxuICAgICAgfSAgICAgICAgXG4gICAgfVxuICB9XG59IiwiaW1wb3J0IHsgRWxlbWVudEJhc2UsIEVsZW1lbnRTdGF0dXMgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NsYXNzZXMnOyBcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcblxudmFyIGNhcGl0YWxpemVDb25maWd1cmF0aW9uID1cbntcbiAgbmFtZTogdHJ1ZSxcbiAgZGVzY3JpcHRpb246IHRydWUsXG4gIGxvbmdEZXNjcmlwdGlvbjogdHJ1ZSxcbiAgYWRkcmVzczogZmFsc2UsXG4gIHRlbGVwaG9uZTogZmFsc2UsXG4gIHdlYnNpdGU6IGZhbHNlLFxuICBlbWFpbDogZmFsc2UsXG4gIG9wZW5Ib3Vyc01vcmVJbmZvczogdHJ1ZSxcbn1cblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRGb3JtYXRlck1vZHVsZVxue1xuICBnZXRGb3JtYXRlZFRlbCh2YWx1ZSlcbiAge1xuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcbiAgICBpZiAodmFsdWUubGVuZ3RoID09IDEwKSByZXR1cm4gdmFsdWUucmVwbGFjZSgvKC57Mn0pKD8hJCkvZyxcIiQxIFwiKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0gIFxuXG4gIGNhbGN1bGF0ZUZvcm1hdGVkT3BlbkhvdXJzKGVsZW1lbnQgOiBFbGVtZW50QmFzZSlcbiAgeyAgICAgICAgIFxuICAgIGVsZW1lbnQuZm9ybWF0ZWRPcGVuSG91cnMgPSB7fTtcbiAgICBsZXQgbmV3X2tleSwgbmV3X2tleV90cmFuc2xhdGVkLCBuZXdEYWlseVNsb3Q7XG4gICAgZm9yKGxldCBrZXkgaW4gZWxlbWVudC5vcGVuSG91cnMpXG4gICAge1xuICAgICAgbmV3X2tleV90cmFuc2xhdGVkID0gdGhpcy50cmFuc2xhdGVEYXlLZXkoa2V5KTsgICAgICAgIFxuICAgICAgbmV3RGFpbHlTbG90ID0gdGhpcy5mb3JtYXRlRGFpbHlUaW1lU2xvdChlbGVtZW50Lm9wZW5Ib3Vyc1trZXldKTtcbiAgICAgIFxuICAgICAgaWYgKG5ld0RhaWx5U2xvdCkgZWxlbWVudC5mb3JtYXRlZE9wZW5Ib3Vyc1tuZXdfa2V5X3RyYW5zbGF0ZWRdID0gbmV3RGFpbHlTbG90O1xuICAgIH1cbiAgfVxuXG4gIGdldFByb3BlcnR5KGVsZW1lbnQgOiBFbGVtZW50QmFzZSwgcHJvcGVydHlOYW1lKVxuICB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5nZXRGb3JtYXRlZFZhbHVlKGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7XG4gICAgXG4gICAgLy8gaW4gaWZyYW1lIHRoZSBwZW5kaW5nIG1vZGlmaWNhdGlvbnMgYXJlIG5vdCBkaXNwbGF5ZWQsIGp1c3QgdGhlIG9sZCB2ZXJzaW9uXG4gICAgaWYgKGVsZW1lbnQuc3RhdHVzICE9IEVsZW1lbnRTdGF0dXMuUGVuZGluZ01vZGlmaWNhdGlvbiB8fCAhQXBwLmNvbmZpZy5pc0ZlYXR1cmVBdmFpbGFibGUoJ3BlbmRpbmcnKSB8fCAhZWxlbWVudC5tb2RpZmllZEVsZW1lbnQpIHJldHVybiB2YWx1ZTtcblxuICAgIGxldCBtb2RpZmllZFZhbHVlID0gdGhpcy5nZXRGb3JtYXRlZFZhbHVlKGVsZW1lbnQubW9kaWZpZWRFbGVtZW50LCBwcm9wZXJ0eU5hbWUpO1xuXG4gICAgaWYgKCF2YWx1ZSAmJiAhbW9kaWZpZWRWYWx1ZSkgcmV0dXJuICcnO1xuXG4gICAgdmFsdWUgPSB2YWx1ZSB8fCAnJztcbiAgICBtb2RpZmllZFZhbHVlID0gbW9kaWZpZWRWYWx1ZSB8fCAnJztcblxuICAgIHJldHVybiBBcHAuZWxlbWVudERpZmZNb2R1bGUuZ2V0RGlmZlZhbHVlKHZhbHVlLCBtb2RpZmllZFZhbHVlLCBwcm9wZXJ0eU5hbWUpXG4gIH1cblxuICBwcml2YXRlIHRyYW5zbGF0ZURheUtleShkYXlLZXkpXG4gIHtcbiAgICBzd2l0Y2goZGF5S2V5KVxuICAgIHtcbiAgICAgIGNhc2UgJ01vJzogcmV0dXJuICdsdW5kaSc7XG4gICAgICBjYXNlICdUdSc6IHJldHVybiAnbWFyZGknO1xuICAgICAgY2FzZSAnV2UnOiByZXR1cm4gJ21lcmNyZWRpJztcbiAgICAgIGNhc2UgJ1RoJzogcmV0dXJuICdqZXVkaSc7XG4gICAgICBjYXNlICdGcic6IHJldHVybiAndmVuZHJlZGknO1xuICAgICAgY2FzZSAnU2EnOiByZXR1cm4gJ3NhbWVkaSc7XG4gICAgICBjYXNlICdTdSc6IHJldHVybiAnZGltYW5jaGUnO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0ZURhaWx5VGltZVNsb3QoZGFpbHlTbG90KSBcbiAgeyAgICBcbiAgICBpZiAoZGFpbHlTbG90ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gZGFpbHlTbG90LnJlcGxhY2UoLy0vZywgJyAtICcpLnJlcGxhY2UoLywvZywgJyBldCAnKTtcbiAgfTsgICBcblxuICBwcml2YXRlIGdldEZvcm1hdGVkVmFsdWUoZWxlbWVudCA6IEVsZW1lbnRCYXNlLCBwcm9wZXJ0eU5hbWUpXG4gIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKHByb3BlcnR5TmFtZSA9PSAnYWRkcmVzcycpIHZhbHVlID0gZWxlbWVudC5hZGRyZXNzLmdldEZvcm1hdGVkQWRkcmVzcygpO1xuICAgIGVsc2UgdmFsdWUgPSBlbGVtZW50W3Byb3BlcnR5TmFtZV1cbiAgICBcbiAgICB2YWx1ZSA9IGNhcGl0YWxpemVDb25maWd1cmF0aW9uW3Byb3BlcnR5TmFtZV0gPyBjYXBpdGFsaXplKHZhbHVlKSA6IHZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufSIsImltcG9ydCB7IEVsZW1lbnQsIE9wdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jbGFzc2VzJzsgXG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50SWNvbnNNb2R1bGVcbntcbiAgdXBkYXRlSWNvbnNUb0Rpc3BsYXkoZWxlbWVudCA6IEVsZW1lbnQpIFxuICB7ICAgIFxuICAgIHRoaXMuY2hlY2tGb3JEaXNhYmxlZE9wdGlvblZhbHVlcyhlbGVtZW50KTtcblxuICAgIGlmIChBcHAuY3Vyck1haW5JZCA9PSAnYWxsJylcbiAgICAgIGVsZW1lbnQuaWNvbnNUb0Rpc3BsYXkgPSB0aGlzLnJlY3Vyc2l2ZWx5U2VhcmNoSWNvbnNUb0Rpc3BsYXkoZWxlbWVudC5nZXRPcHRpb25UcmVlKCksICFBcHAuY29uZmlnLm1lbnUuc2hvd09uZVBhbmVQZXJNYWluT3B0aW9uKTtcbiAgICBlbHNlXG4gICAgICBlbGVtZW50Lmljb25zVG9EaXNwbGF5ID0gdGhpcy5yZWN1cnNpdmVseVNlYXJjaEljb25zVG9EaXNwbGF5KGVsZW1lbnQuZ2V0Q3Vyck1haW5PcHRpb25WYWx1ZSgpKTtcblxuICAgIC8vIGluIGNhc2Ugb2Ygbm8gT3B0aW9uVmFsdWUgaW4gdGhpcyBtYWluT3B0aW9uLCB3ZSBkaXNwbGF5IHRoZSBtYWluT3B0aW9uIEljb25cbiAgICBpZiAoZWxlbWVudC5pY29uc1RvRGlzcGxheS5sZW5ndGggPT0gMClcbiAgICB7XG4gICAgICBlbGVtZW50Lmljb25zVG9EaXNwbGF5LnB1c2goZWxlbWVudC5nZXRDdXJyTWFpbk9wdGlvblZhbHVlKCkpO1xuICAgIH1cbiAgICBcbiAgICAvLyBjb25zb2xlLmxvZyhcIkljb25zIHRvIGRpc3BsYXkgc29ydGVkXCIsIGVsZW1lbnQuZ2V0SWNvbnNUb0Rpc3BsYXkoKSk7XG4gIH1cblxuICBwcml2YXRlIHJlY3Vyc2l2ZWx5U2VhcmNoSWNvbnNUb0Rpc3BsYXkocGFyZW50T3B0aW9uVmFsdWUgOiBPcHRpb25WYWx1ZSwgcmVjdXJzaXZlIDogYm9vbGVhbiA9IHRydWUpIDogT3B0aW9uVmFsdWVbXVxuICB7ICAgIFxuICAgIGlmICghcGFyZW50T3B0aW9uVmFsdWUpIHJldHVybiBbXTtcbiAgICBcbiAgICBsZXQgcmVzdWx0T3B0aW9ucyA6IE9wdGlvblZhbHVlW10gPSBbXTsgICAgXG5cbiAgICBmb3IobGV0IGNhdGVnb3J5VmFsdWUgb2YgcGFyZW50T3B0aW9uVmFsdWUuY2hpbGRyZW4pXG4gICAge1xuICAgICAgZm9yKGxldCBvcHRpb25WYWx1ZSBvZiBjYXRlZ29yeVZhbHVlLmNoaWxkcmVuKVxuICAgICAge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIFxuICAgICAgICBpZiAocmVjdXJzaXZlIHx8IG9wdGlvblZhbHVlLm9wdGlvbklkID09IFwiUm9vdEZha2VPcHRpb25cIilcbiAgICAgICAge1xuICAgICAgICAgIHJlc3VsdCA9IHRoaXMucmVjdXJzaXZlbHlTZWFyY2hJY29uc1RvRGlzcGxheShvcHRpb25WYWx1ZSkgfHwgW107XG4gICAgICAgICAgcmVzdWx0T3B0aW9ucyA9IHJlc3VsdE9wdGlvbnMuY29uY2F0KHJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PSAwICYmIG9wdGlvblZhbHVlLm9wdGlvbi51c2VJY29uRm9yTWFya2VyKVxuICAgICAgICB7XG4gICAgICAgICAgcmVzdWx0T3B0aW9ucy5wdXNoKG9wdGlvblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcmVzdWx0T3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tGb3JEaXNhYmxlZE9wdGlvblZhbHVlcyhlbGVtZW50IDogRWxlbWVudClcbiAge1xuICAgIHRoaXMucmVjdXJzaXZlbHlDaGVja0ZvckRpc2FibGVkT3B0aW9uVmFsdWVzKGVsZW1lbnQuZ2V0T3B0aW9uVHJlZSgpLCBBcHAuY3Vyck1haW5JZCA9PSAnYWxsJyk7XG4gIH1cblxuICBwcml2YXRlIHJlY3Vyc2l2ZWx5Q2hlY2tGb3JEaXNhYmxlZE9wdGlvblZhbHVlcyhvcHRpb25WYWx1ZSA6IE9wdGlvblZhbHVlLCBub1JlY3Vyc2l2ZSA6IGJvb2xlYW4gPSB0cnVlKVxuICB7XG4gICAgbGV0IGlzRXZlcnlDYXRlZ29yeUNvbnRhaW5zT25lT3B0aW9uTm90ZGlzYWJsZWQgPSB0cnVlO1xuICAgIC8vY29uc29sZS5sb2coXCJjaGVja0ZvckRpc2FibGVkT3B0aW9uVmFsdWUgTm9yZWN1cnNpdmUgOiBcIiArIG5vUmVjdXJzaXZlLCBvcHRpb25WYWx1ZSk7XG5cbiAgICBmb3IobGV0IGNhdGVnb3J5VmFsdWUgb2Ygb3B0aW9uVmFsdWUuY2hpbGRyZW4pXG4gICAge1xuICAgICAgbGV0IGlzU29tZU9wdGlvbk5vdGRpc2FibGVkID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBzdWJvcHRpb25WYWx1ZSBvZiBjYXRlZ29yeVZhbHVlLmNoaWxkcmVuKVxuICAgICAge1xuICAgICAgICBpZiAoc3Vib3B0aW9uVmFsdWUuY2hpbGRyZW4ubGVuZ3RoID09IDAgfHwgbm9SZWN1cnNpdmUpXG4gICAgICAgIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiYm90dG9tIG9wdGlvbiBcIiArIHN1Ym9wdGlvblZhbHVlLm9wdGlvbi5uYW1lLHN1Ym9wdGlvblZhbHVlLm9wdGlvbi5pc0NoZWNrZWQgKTtcbiAgICAgICAgICBzdWJvcHRpb25WYWx1ZS5pc0ZpbGxlZEJ5RmlsdGVycyA9ICFzdWJvcHRpb25WYWx1ZS5vcHRpb24uaXNEaXNhYmxlZDsgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5yZWN1cnNpdmVseUNoZWNrRm9yRGlzYWJsZWRPcHRpb25WYWx1ZXMoc3Vib3B0aW9uVmFsdWUsIG5vUmVjdXJzaXZlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3Vib3B0aW9uVmFsdWUuaXNGaWxsZWRCeUZpbHRlcnMpIGlzU29tZU9wdGlvbk5vdGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNTb21lT3B0aW9uTm90ZGlzYWJsZWQpIGlzRXZlcnlDYXRlZ29yeUNvbnRhaW5zT25lT3B0aW9uTm90ZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIC8vY29uc29sZS5sb2coXCJDYXRlZ29yeVZhbHVlIFwiICsgY2F0ZWdvcnlWYWx1ZS5jYXRlZ29yeS5uYW1lICsgXCJpc1NvbWVPcHRpb25Ob3RkaXNhYmxlZFwiLCBpc1NvbWVPcHRpb25Ob3RkaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvblZhbHVlLm9wdGlvbilcbiAgICB7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiT3B0aW9uVmFsdWUgXCIgKyBvcHRpb25WYWx1ZS5vcHRpb24ubmFtZSArIFwiIDogaXNFdmVyeUNhdGVnb3lyQ29udGFpbk9uT3B0aW9uXCIsIGlzRXZlcnlDYXRlZ29yeUNvbnRhaW5zT25lT3B0aW9uTm90ZGlzYWJsZWQgKTtcbiAgICAgIG9wdGlvblZhbHVlLmlzRmlsbGVkQnlGaWx0ZXJzID0gaXNFdmVyeUNhdGVnb3J5Q29udGFpbnNPbmVPcHRpb25Ob3RkaXNhYmxlZDtcbiAgICAgIGlmICghb3B0aW9uVmFsdWUuaXNGaWxsZWRCeUZpbHRlcnMpIG9wdGlvblZhbHVlLnNldFJlY3Vyc2l2ZWx5RmlsbGVkQnlGaWx0ZXJzKG9wdGlvblZhbHVlLmlzRmlsbGVkQnlGaWx0ZXJzKTtcbiAgICB9XG4gIH1cbn0iLCJpbXBvcnQgeyBFbGVtZW50LCBFbGVtZW50QmFzZSwgT3B0aW9uVmFsdWUsIENhdGVnb3J5VmFsdWUsIENhdGVnb3J5LCBPcHRpb24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NsYXNzZXMnOyBcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnNcIjtcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRPcHRpb25WYWx1ZXNNb2R1bGVcbntcbiAgY3JlYXRlT3B0aW9uVmFsdWVzKG9wdGlvbnNWYWx1ZXNKc29uIDogYW55LCBlbGVtZW50IDogRWxlbWVudEJhc2UpXG4gIHtcbiAgICBlbGVtZW50Lm9wdGlvbnNWYWx1ZXMgPSBbXTtcblxuICAgIGlmKCFvcHRpb25zVmFsdWVzSnNvbikgcmV0dXJuO1xuXG4gICAgZm9yIChsZXQga2V5ID0gMDsga2V5IDwgb3B0aW9uc1ZhbHVlc0pzb24ubGVuZ3RoOyArK2tleSkgXG4gICAge1xuICAgICAgdGhpcy5jcmVhdGVPcHRpb25WYWx1ZUZvckVsZW1lbnQob3B0aW9uc1ZhbHVlc0pzb25ba2V5XSwga2V5LCBlbGVtZW50KTtcbiAgICB9IFxuXG4gICAgdGhpcy5sb29rZm9yTWlzc2luZ1BhcmVudHNPcHRpb24oZWxlbWVudCk7ICAgIFxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPcHRpb25WYWx1ZUZvckVsZW1lbnQob3B0aW9uVmFsdWVKc29uLCBrZXkgOiBudW1iZXIsIGVsZW1lbnQgOiBFbGVtZW50QmFzZSlcbiAge1xuICAgIGxldCBuZXdPcHRpb24gPSBuZXcgT3B0aW9uVmFsdWUob3B0aW9uVmFsdWVKc29uLCBrZXkpO1xuXG4gICAgaWYgKG5ld09wdGlvbi5vcHRpb24pXG4gICAge1xuICAgICAgaWYgKG5ld09wdGlvbi5vcHRpb24uaXNNYWluT3B0aW9uKSBcbiAgICAgICAgZWxlbWVudC5tYWluT3B0aW9uT3duZXJJZHMucHVzaChuZXdPcHRpb24ub3B0aW9uSWQpO1xuXG4gICAgICBlbGVtZW50Lm9wdGlvbnNWYWx1ZXMucHVzaChuZXdPcHRpb24pO1xuICAgIH0gICBcblxuICAgIHJldHVybiBuZXdPcHRpb247ICAgXG4gIH1cblxuICB1cGRhdGVPcHRpb25zV2l0aERlc2NyaXB0aW9uKGVsZW1lbnQgOiBFbGVtZW50QmFzZSwgJG9wdGlvblZhbHVlc0Rlc2NyaXB0aW9uKSB7XG4gICAgZWxlbWVudC5vcHRpb25zVmFsdWVzLmZvckVhY2goIChvcHRpb25WYWx1ZSkgPT4geyBcbiAgICAgIGxldCBjb3JyZXNwb25kaW5nT3B0aW9uVmFsdWV3aXRoRGVzY3JpcHRpb24gPSAkb3B0aW9uVmFsdWVzRGVzY3JpcHRpb24uZmlsdGVyKCAob2JqZWN0KSA9PiBvYmplY3QuY2F0ZWdvcnlJZCA9PSBvcHRpb25WYWx1ZS5vcHRpb25JZClbMF07XG4gICAgICBpZiAoIWNvcnJlc3BvbmRpbmdPcHRpb25WYWx1ZXdpdGhEZXNjcmlwdGlvbikgcmV0dXJuO1xuICAgICAgb3B0aW9uVmFsdWUuZGVzY3JpcHRpb24gPSBjb3JyZXNwb25kaW5nT3B0aW9uVmFsdWV3aXRoRGVzY3JpcHRpb24uZGVzY3JpcHRpb247XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVPcHRpb25zVHJlZShlbGVtZW50IDogRWxlbWVudEJhc2UpXG4gIHtcbiAgICBsZXQgbWFpbkNhdGVnb3J5ID0gQXBwLnRheG9ub215TW9kdWxlLnRheG9ub215O1xuICAgIGVsZW1lbnQub3B0aW9uVHJlZSA9IHRoaXMucmVjdXNpdmVseUNyZWF0ZU9wdGlvblRyZWUoZWxlbWVudCwgbWFpbkNhdGVnb3J5LCBuZXcgT3B0aW9uVmFsdWUoe30pKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjdXNpdmVseUNyZWF0ZU9wdGlvblRyZWUoZWxlbWVudCA6IEVsZW1lbnRCYXNlLCBjYXRlZ29yeSA6IENhdGVnb3J5LCBvcHRpb25WYWx1ZSA6IE9wdGlvblZhbHVlKVxuICB7XG4gICAgbGV0IGNhdGVnb3J5VmFsdWUgPSBuZXcgQ2F0ZWdvcnlWYWx1ZShjYXRlZ29yeSk7XG5cbiAgICBmb3IobGV0IG9wdGlvbiBvZiBjYXRlZ29yeS5vcHRpb25zKVxuICAgIHsgICAgICBcbiAgICAgIGxldCBjaGlsZE9wdGlvblZhbHVlID0gdGhpcy5nZXRFbGVtZW50T3B0aW9uVmFsdWVDb3JyZXNwb25kaW5nVG9PcHRpb25JZChlbGVtZW50LCBvcHRpb24uaWQpO1xuICAgICAgXG4gICAgICBpZiAoY2hpbGRPcHRpb25WYWx1ZSlcbiAgICAgIHtcbiAgICAgICAgY2F0ZWdvcnlWYWx1ZS5hZGRPcHRpb25WYWx1ZShjaGlsZE9wdGlvblZhbHVlKTtcbiAgICAgICAgZm9yKGxldCBzdWJjYXRlZ29yeSBvZiBvcHRpb24uc3ViY2F0ZWdvcmllcylcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMucmVjdXNpdmVseUNyZWF0ZU9wdGlvblRyZWUoZWxlbWVudCwgc3ViY2F0ZWdvcnksIGNoaWxkT3B0aW9uVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9ICAgICAgXG4gICAgfVxuXG4gICAgaWYgKGNhdGVnb3J5VmFsdWUuY2hpbGRyZW4ubGVuZ3RoID4gMClcbiAgICB7XG4gICAgICBjYXRlZ29yeVZhbHVlLmNoaWxkcmVuLnNvcnQoIChhLGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcbiAgICAgIG9wdGlvblZhbHVlLmFkZENhdGVnb3J5VmFsdWUoY2F0ZWdvcnlWYWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvblZhbHVlOyBcbiAgfSAgXG5cbiAgcHJpdmF0ZSBnZXRFbGVtZW50T3B0aW9uVmFsdWVDb3JyZXNwb25kaW5nVG9PcHRpb25JZChlbGVtZW50IDogRWxlbWVudEJhc2UsICRvcHRpb25JZCA6IG51bWJlcikgOiBPcHRpb25WYWx1ZVxuICB7XG4gICAgbGV0IGluZGV4ID0gZWxlbWVudC5vcHRpb25zVmFsdWVzLm1hcCgodmFsdWUpID0+IHZhbHVlLm9wdGlvbklkKS5pbmRleE9mKCRvcHRpb25JZC50b1N0cmluZygpKTtcbiAgICBpZiAoaW5kZXggPT0gLTEpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBlbGVtZW50Lm9wdGlvbnNWYWx1ZXNbaW5kZXhdO1xuICB9XG5cbiAgLy8gbG9vayBmb3IgbWlzc2luZyBwYXJlbnQgb3B0aW9ucyB2YWx1ZXMuIGlmIGFuIGVsZW1lbnQgY29udGFpbnNcbiAgLy8gb25seSB0aGUgZGVlcGVzdCBvcHRpb24gdmFsdWUsIHdlIGFkZCBhbGwgdGhlIHBhcmVudHMgb3B0aW9uc1xuICAvLyBvZiB0aG9zZSBkZWVwZXN0IG9wdGlvbnMgc28gZmlsdGVycyBjYW4gd29ya3MgcHJvcGVybHlcbiAgcHJpdmF0ZSBsb29rZm9yTWlzc2luZ1BhcmVudHNPcHRpb24oZWxlbWVudCA6IEVsZW1lbnRCYXNlKVxuICB7XG4gICAgbGV0IG9wdGlvblZhbHVlc0lkcyA9IGVsZW1lbnQub3B0aW9uc1ZhbHVlcy5tYXAoIChlbCkgPT4gZWwub3B0aW9uSWQpO1xuICAgIGZvcihsZXQgb3B0aW9uVmFsdWUgb2YgZWxlbWVudC5vcHRpb25zVmFsdWVzKVxuICAgICAgZm9yIChsZXQgcGFyZW50T3B0aW9uSWQgb2Ygb3B0aW9uVmFsdWUub3B0aW9uLnBhcmVudE9wdGlvbklkcykgICAgICBcbiAgICAgICAgaWYgKG9wdGlvblZhbHVlc0lkcy5pbmRleE9mKHBhcmVudE9wdGlvbklkLnRvU3RyaW5nKCkpID09IC0xKVxuICAgICAgICB7XG4gICAgICAgICAgbGV0IG5ld09wdGlvbiA9IHRoaXMuY3JlYXRlT3B0aW9uVmFsdWVGb3JFbGVtZW50KHBhcmVudE9wdGlvbklkLCAwLCBlbGVtZW50KTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIk1pc3Npbmcgb3B0aW9uXCIsIG5ld09wdGlvbi5vcHRpb24ubmFtZVNob3J0LCBlbGVtZW50Lm5hbWUpO1xuICAgICAgICAgIG9wdGlvblZhbHVlc0lkcy5wdXNoKHBhcmVudE9wdGlvbklkKTsgXG4gICAgICAgIH0gXG4gIH1cblxuICB1cGRhdGVPcHRpb25WYWx1ZUNvbG9yKGVsZW1lbnQgOiBFbGVtZW50LCAkb3B0aW9uVmFsdWUgOiBPcHRpb25WYWx1ZSlcbiAge1xuICAgIGlmICghJG9wdGlvblZhbHVlKSByZXR1cm47XG4gICAgLy8gY29uc29sZS5sb2coXCJ1cGRhdGVPcHRpb25WYWx1ZVwiLCAkb3B0aW9uVmFsdWUub3B0aW9uLm5hbWUpO1xuICAgIGlmICgkb3B0aW9uVmFsdWUub3B0aW9uLnVzZUNvbG9yRm9yTWFya2VyKVxuICAgIHtcbiAgICAgICRvcHRpb25WYWx1ZS5jb2xvck9wdGlvbklkID0gJG9wdGlvblZhbHVlLm9wdGlvbklkO1xuICAgIH0gICAgXG4gICAgZWxzZSBcbiAgICB7XG4gICAgICBsZXQgb3B0aW9uIDogT3B0aW9uO1xuICAgICAgbGV0IGNhdGVnb3J5IDogQ2F0ZWdvcnk7XG4gICAgICBsZXQgY29sb3JJZCA6IG51bWJlciA9IG51bGw7XG5cbiAgICAgIGxldCBzaWJsaW5nc09wdGlvbnNGb3JDb2xvcmluZyA6IE9wdGlvblZhbHVlW10gPSBlbGVtZW50LmdldEN1cnJPcHRpb25zVmFsdWVzKCkuZmlsdGVyKCBcbiAgICAgICAgKG9wdGlvblZhbHVlKSA9PiBcbiAgICAgICAgICBvcHRpb25WYWx1ZS5pc0ZpbGxlZEJ5RmlsdGVycyBcbiAgICAgICAgICAmJiBvcHRpb25WYWx1ZS5vcHRpb24udXNlQ29sb3JGb3JNYXJrZXJcbiAgICAgICAgICAmJiBvcHRpb25WYWx1ZS5vcHRpb24ub3duZXJJZCAhPT0gJG9wdGlvblZhbHVlLm9wdGlvbi5vd25lcklkIFxuICAgICAgICAgICYmIG9wdGlvblZhbHVlLmNhdGVnb3J5T3duZXIub3duZXJJZCA9PSAkb3B0aW9uVmFsdWUuY2F0ZWdvcnlPd25lci5vd25lcklkXG4gICAgICApO1xuXG4gICAgICAvL2NvbnNvbGUubG9nKFwic2libGluZ3NPcHRpb25zRm9yQ29sb3JpbmdcIiwgc2libGluZ3NPcHRpb25zRm9yQ29sb3JpbmcubWFwKCAob3ApID0+IG9wLm9wdGlvbi5uYW1lKSk7XG4gICAgICBpZiAoc2libGluZ3NPcHRpb25zRm9yQ29sb3JpbmcubGVuZ3RoID4gMClcbiAgICAgIHtcbiAgICAgICAgb3B0aW9uID0gPE9wdGlvbj4gc2libGluZ3NPcHRpb25zRm9yQ29sb3Jpbmcuc2hpZnQoKS5vcHRpb247XG4gICAgICAgIC8vY29uc29sZS5sb2coXCItPiBzaWJsaW5nIGZvdW5kIDogXCIsIG9wdGlvbi5uYW1lKTtcbiAgICAgICAgY29sb3JJZCA9IG9wdGlvbi5pZDtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgb3B0aW9uID0gJG9wdGlvblZhbHVlLm9wdGlvbjtcbiAgICAgICAgLy8gY29uc29sZS5sb2cob3B0aW9uLm5hbWUsIFwibm8gc2libGluZ3MsIGxvb2tpbmcgZm9yIHBhcmVudFwiKTtcbiAgICAgICAgd2hpbGUoY29sb3JJZCA9PSBudWxsICYmIG9wdGlvbilcbiAgICAgICAge1xuICAgICAgICAgIGNhdGVnb3J5ID0gPENhdGVnb3J5PiBvcHRpb24uZ2V0T3duZXIoKTtcbiAgICAgICAgICBpZiAoY2F0ZWdvcnkpXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3B0aW9uID0gPE9wdGlvbj4gY2F0ZWdvcnkuZ2V0T3duZXIoKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9uKSBicmVhazsgICAgIFxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCIgIC0+IHBhcmVudCBvcHRpb25cIiArIG9wdGlvbi5uYW1lICsgXCIgdXNlY29sb3JGb3JNYXJrZXJcIiwgb3B0aW9uLnVzZUNvbG9yRm9yTWFya2VyKTtcbiAgICAgICAgICAgIGNvbG9ySWQgPSBvcHRpb24udXNlQ29sb3JGb3JNYXJrZXIgPyBvcHRpb24uaWQgOiBudWxsO1xuICAgICAgICAgIH0gICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgJG9wdGlvblZhbHVlLmNvbG9yT3B0aW9uSWQgPSBjb2xvcklkO1xuICAgIH1cbiAgfVxufSIsImltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5pbXBvcnQgeyBFdmVudCB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2V2ZW50LmNsYXNzXCI7XG5pbXBvcnQgeyBzbHVnaWZ5LCBwYXJzZVVyaUlkIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudHNDb252ZXJ0ZWRcbnsgXG4gIG5ld0VsZW1lbnRzTGVuZ3RoIDogbnVtYmVyO1xuICBlbGVtZW50c1VwZGF0ZWRMZW5ndGggOiBudW1iZXI7XG4gIG5ld0VsZW1lbnRzIDogRWxlbWVudFtdO1xuICBlbGVtZW50c0NvbnZlcnRlZCA6IEVsZW1lbnRbXVxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudHNKc29uTW9kdWxlXG57XG4gIGVsZW1lbnRzQ3JlYXRlZENvdW50IDogbnVtYmVyID0gMDtcbiAgb25OZXdzRWxlbWVudHNDb252ZXJ0ZWQgPSBuZXcgRXZlbnQ8RWxlbWVudFtdPigpO1xuXG4gIGNvbnZlcnRKc29uRWxlbWVudHMoZWxlbWVudExpc3QgOiBhbnlbXSwgY2hlY2tJZkFscmVhZHlFeGlzdCA9IHRydWUsIGlzRnVsbFJlcHJlc2VudGF0aW9uIDogYm9vbGVhbiA9IHRydWUpIFxuICB7XG4gICAgaWYgKCFlbGVtZW50TGlzdCkgcmV0dXJuIHsgXG4gICAgICBuZXdFbGVtZW50c0xlbmd0aCA6IFtdLCBcbiAgICAgIGVsZW1lbnRzVXBkYXRlZExlbmd0aCA6IDAsIFxuICAgICAgbmV3RWxlbWVudHM6IFtdLCBcbiAgICAgIGVsZW1lbnRzQ29udmVydGVkOiBbXSwgXG4gICAgfTtcblxuICAgIGxldCBlbGVtZW50IDogRWxlbWVudCwgZWxlbWVudEpzb247XG4gICAgbGV0IG5ld0VsZW1lbnRzIDogRWxlbWVudFtdID0gW107XG4gICAgbGV0IGVsZW1lbnRzQ29udmVydGVkIDogRWxlbWVudFtdID0gW107XG4gICAgbGV0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgXG4gICAgdGhpcy5jaGVrc0lkc0FuZENyZWF0ZU9uZXNJZk5lZWRlZChlbGVtZW50TGlzdCk7XG4gICAgXG4gICAgbGV0IG5ld0VsZW1lbnRzSnNvbiA9IGVsZW1lbnRMaXN0LmZpbHRlcigob2JqKSA9PiBBcHAuZWxlbWVudHNNb2R1bGUuZXZlcnlFbGVtZW50c0lkLmluZGV4T2Yob2JqLmlkKSA8IDAgKTtcbiAgICBsZXQgZWxlbWVudHNUb1VwZGF0ZUpzb24gPSBbXTtcbiAgICBpZiAoaXNGdWxsUmVwcmVzZW50YXRpb24pXG4gICAgeyAgICAgIFxuICAgICAgZWxlbWVudHNUb1VwZGF0ZUpzb24gPSBlbGVtZW50TGlzdC5maWx0ZXIoKG9iaikgPT4gQXBwLmVsZW1lbnRzTW9kdWxlLmV2ZXJ5RWxlbWVudHNJZC5pbmRleE9mKG9iai5pZCkgPj0gMCApO1xuICAgICAgbGV0IGogPSBlbGVtZW50c1RvVXBkYXRlSnNvbi5sZW5ndGg7XG4gICAgICB3aGlsZShqLS0pXG4gICAgICB7XG4gICAgICAgIGVsZW1lbnRKc29uID0gZWxlbWVudHNUb1VwZGF0ZUpzb25bal07XG4gICAgICAgIGVsZW1lbnQgPSBBcHAuZWxlbWVudEJ5SWQoZWxlbWVudEpzb24uaWQpO1xuICAgICAgICBlbGVtZW50LnVwZGF0ZVdpdGhKc29uKGVsZW1lbnRKc29uKTtcbiAgICAgICAgZWxlbWVudHNDb252ZXJ0ZWQucHVzaChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgaSA9IG5ld0VsZW1lbnRzSnNvbi5sZW5ndGg7XG4gICAgd2hpbGUoaS0tKVxuICAgIHtcbiAgICAgIGVsZW1lbnRKc29uID0gbmV3RWxlbWVudHNKc29uW2ldO1xuICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGVsZW1lbnRKc29uKTtcbiAgICAgIGVsZW1lbnQuaW5pdGlhbGl6ZSgpO1xuICAgICAgbmV3RWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICBlbGVtZW50c0NvbnZlcnRlZCA9IGVsZW1lbnRzQ29udmVydGVkLmNvbmNhdChuZXdFbGVtZW50cyk7ICAgIFxuXG4gICAgbGV0IGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIC8vY29uc29sZS5sb2coXCJBZGRKc29uRWxlbWVudHMgaW4gXCIgKyAoZW5kLXN0YXJ0KSArIFwiIG1zXCIsIGVsZW1lbnRKc29uKTsgIFxuXG4gICAgdGhpcy5vbk5ld3NFbGVtZW50c0NvbnZlcnRlZC5lbWl0KG5ld0VsZW1lbnRzKTtcblxuICAgIHJldHVybiB7IFxuICAgICAgbmV3RWxlbWVudHNMZW5ndGggOiBuZXdFbGVtZW50c0pzb24ubGVuZ3RoLCBcbiAgICAgIGVsZW1lbnRzVXBkYXRlZExlbmd0aCA6IGVsZW1lbnRzVG9VcGRhdGVKc29uLmxlbmd0aCwgXG4gICAgICBuZXdFbGVtZW50czogbmV3RWxlbWVudHMsIFxuICAgICAgZWxlbWVudHNDb252ZXJ0ZWQ6IGVsZW1lbnRzQ29udmVydGVkXG4gICAgfTtcbiAgfTtcblxuICBsb2FkTG9jYWxFbGVtZW50cygpXG4gIHtcbiAgICBpZiAoIUFwcC5jb25maWcuZGF0YS5yZXRyaWV2ZUVsZW1lbnRzQnlBcGkpXG4gICAge1xuICAgICAgbGV0IGVsZW1lbnRzID0gQXBwLmNvbmZpZy5kYXRhLmVsZW1lbnRzO1xuICAgICAgbGV0IGVsZW1lbnRKc29uQXJyYXkgPSBlbGVtZW50cy5sZW5ndGggPyBlbGVtZW50cyA6IGVsZW1lbnRzLmRhdGE7XG4gICAgICBsZXQgcmVzdWx0ID0gdGhpcy5jb252ZXJ0SnNvbkVsZW1lbnRzKGVsZW1lbnRKc29uQXJyYXksIHRydWUsIHRydWUpO1xuICAgICAgQXBwLmFqYXhNb2R1bGUuYWxsRWxlbWVudHNSZWNlaXZlZCA9IHRydWU7XG4gICAgICBpZiAoIUFwcC5jb25maWcubWFwLmRlZmF1bHRCb3VuZHNQcm92aWRlZCAmJiAhQXBwLmhpc3RvcnlTdGF0ZU1hbmFnZXIubGFzdEhpc3RvcnlTdGF0ZS52aWV3cG9ydCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcImZpdCB0byBlbGVtZW50cyBib3VuZHNcIik7XG4gICAgICAgIEFwcC5tYXBDb21wb25lbnQuZml0RWxlbWVudHNCb3VuZHMocmVzdWx0LmVsZW1lbnRzQ29udmVydGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaXhpbmcgbWlzc2luZyBJZHMsIG9yIGNvbnZlcnQgVVJJIGlkcyBhcyBzdGFuZGFyZCBJZHNcbiAgY2hla3NJZHNBbmRDcmVhdGVPbmVzSWZOZWVkZWQoZWxlbWVudExpc3QpXG4gIHtcbiAgICBlbGVtZW50TGlzdC5mb3JFYWNoKCAoZSwgaW5kZXgpID0+ICB7XG4gICAgICBsZXQgaWQgPSBlWzBdIHx8IGUuaWQgfHwgZVtcIkBpZFwiXSB8fCBlLmNvbXBhY3RKc29uWzBdOyAvLyBpbiBjb21wYWN0IHdheSwgaWQgaXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXlcbiAgICAgIGlmICghaWQgfHwgdHlwZW9mIGlkICE9IFwic3RyaW5nXCIpIGlkID0gXCJnZW5lcmF0ZWRcIiArIHRoaXMuZWxlbWVudHNDcmVhdGVkQ291bnQrKztcbiAgICAgIGVsc2UgaWQgPSBwYXJzZVVyaUlkKGlkKTtcbiAgICAgIGUuaWQgPSBpZDtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cblxuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMsIEFwcE1vZGVzLCBBcHBEYXRhVHlwZSB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5kZWNsYXJlIHZhciAkO1x0XG5cbmltcG9ydCB7IEV2ZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvZXZlbnQuY2xhc3NcIjtcbmltcG9ydCB7IEVsZW1lbnQsIEVsZW1lbnRTdGF0dXMgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudHNUb0Rpc3BsYXlDaGFuZ2VkXG57IFxuXHRlbGVtZW50c1RvRGlzcGxheSA6IEVsZW1lbnRbXTtcblx0bmV3RWxlbWVudHMgOiBFbGVtZW50W107XG5cdGVsZW1lbnRzVG9SZW1vdmUgOiBFbGVtZW50W107XG59XG5cbmV4cG9ydCBjbGFzcyBFbGVtZW50c01vZHVsZVxue1xuXHRvbkVsZW1lbnRzVG9EaXNwbGF5Q2hhbmdlZCA9IG5ldyBFdmVudDxFbGVtZW50c1RvRGlzcGxheUNoYW5nZWQ+KCk7XG5cblx0cHJpdmF0ZSBldmVyeUVsZW1lbnRzXyA6IEVsZW1lbnRbXVtdID0gW107XG5cdHByaXZhdGUgZXZlcnlFbGVtZW50c0lkXyA6IHN0cmluZ1tdID0gW107XG5cdFxuXHQvLyBjdXJyZW50IHZpc2libGUgZWxlbWVudHNcblx0cHJpdmF0ZSB2aXNpYmxlRWxlbWVudHNfIDogRWxlbWVudFtdW10gPSBbXTtcblx0cHJpdmF0ZSBzZWFyY2hSZXN1bHRFbGVtZW50c18gOiBFbGVtZW50W10gPSBbXTtcdFxuXG5cdGZpcnN0RWxlbWVudHNIYXZlQmVlbmRpc3BsYXllZCA6IGJvb2xlYW4gPSBmYWxzZTtcdFxuXG5cdGluaXRpYWxpemUoKVxuXHR7XG5cdFx0dGhpcy5ldmVyeUVsZW1lbnRzX1snYWxsJ10gPSBbXTtcblx0XHR0aGlzLnZpc2libGVFbGVtZW50c19bJ2FsbCddID0gW107XG5cdFx0Zm9yKGxldCBvcHRpb24gb2YgQXBwLnRheG9ub215TW9kdWxlLmdldE1haW5PcHRpb25zKCkpXG5cdFx0e1xuXHRcdFx0dGhpcy5ldmVyeUVsZW1lbnRzX1tvcHRpb24uaWRdID0gW107XG5cdFx0XHR0aGlzLnZpc2libGVFbGVtZW50c19bb3B0aW9uLmlkXSA9IFtdO1xuXHRcdH1cdFxuXHR9XHRcblxuXHRhZGRFbGVtZW50cyhuZXdFbGVtZW50cyA6IEVsZW1lbnRbXSlcblx0e1xuXHRcdGZvcihsZXQgZWxlbWVudCBvZiBuZXdFbGVtZW50cylcblx0XHR7XG5cdFx0XHRmb3IgKGxldCBtYWluSWQgb2YgZWxlbWVudC5tYWluT3B0aW9uT3duZXJJZHMpXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZXZlcnlFbGVtZW50c19bbWFpbklkXS5wdXNoKGVsZW1lbnQpO1xuXHRcdFx0fVx0XHRcdFx0XG5cdFx0XHR0aGlzLmV2ZXJ5RWxlbWVudHNfWydhbGwnXS5wdXNoKGVsZW1lbnQpO1xuXHRcdFx0dGhpcy5ldmVyeUVsZW1lbnRzSWRfLnB1c2goZWxlbWVudC5pZCk7XG5cdFx0fVx0XG5cblx0XHRBcHAuZmF2b3JpdGVNb2R1bGUuY2hlY2tDb29raWVzKCk7XHRcblx0XHRBcHAuc3RhbXBNb2R1bGUuY2hlY2tGb3JBZGRpbmdTdGFtcHMobmV3RWxlbWVudHMpO1xuXHR9XHRcblxuXHRjbGVhckN1cnJlbnRzRWxlbWVudCgpXG5cdHtcblx0XHQvL2NvbnNvbGUubG9nKFwiY2xlYXJDdXJyRWxlbWVudHNcIik7XG5cdFx0bGV0IHZpc2libGVFbGVtZW50cyA9IHRoaXMuY3VyclZpc2libGVFbGVtZW50cygpO1xuXHRcdGlmICghdmlzaWJsZUVsZW1lbnRzIHx8ICF2aXNpYmxlRWxlbWVudHMubGVuZ3RoKSByZXR1cm47XG5cdFx0bGV0IGwgPSB2aXNpYmxlRWxlbWVudHMubGVuZ3RoO1xuXHRcdHdoaWxlKGwtLSlcblx0XHR7XG5cdFx0XHR2aXNpYmxlRWxlbWVudHNbbF0uaXNEaXNwbGF5ZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0bGV0IG1hcmtlcnMgPSB2aXNpYmxlRWxlbWVudHMubWFwKCAoZSkgPT4gZS5tYXJrZXIuZ2V0TGVhZmxldE1hcmtlcigpKTtcblx0XHRBcHAubWFwQ29tcG9uZW50LnJlbW92ZU1hcmtlcnMobWFya2Vycyk7XG5cblx0XHR0aGlzLmNsZWFyQ3VyclZpc2libGVFbGVtZW50cygpO1xuXHR9XHRcblxuXHQvLyBjaGVjayBlbGVtZW50cyBpbiBib3VuZHMgYW5kIHdobyBhcmUgbm90IGZpbHRlcmVkXG5cdHVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5KGNoZWNrSW5BbGxFbGVtZW50cyA9IHRydWUsIGZpbHRlckhhc0NoYW5nZWQgPSBmYWxzZSkgXG5cdHtcdFxuXHRcdGlmIChBcHAubW9kZSA9PSBBcHBNb2Rlcy5NYXAgJiYgIUFwcC5tYXBDb21wb25lbnQuaXNNYXBMb2FkZWQpIHJldHVybjtcblxuXHRcdGxldCBlbGVtZW50cyA6IEVsZW1lbnRbXSA9IFtdO1xuXG5cdFx0Ly8gR2V0dGluZyB0aGUgZWxlbWVudCBhcnJheSB0byB3b3JrIG9uXG5cdFx0aWYgKCAoQXBwLnN0YXRlID09IEFwcFN0YXRlcy5TaG93RWxlbWVudEFsb25lIHx8IEFwcC5zdGF0ZSA9PSBBcHBTdGF0ZXMuU2hvd0RpcmVjdGlvbnMgKSAmJiBBcHAubW9kZSA9PSBBcHBNb2Rlcy5NYXApIFxuXHRcdFx0ZWxlbWVudHMgPSBbQXBwLkRFQU1vZHVsZS5nZXRFbGVtZW50KCldO1x0XHRcblx0XHRlbHNlIGlmIChBcHAuZGF0YVR5cGUgPT0gQXBwRGF0YVR5cGUuQWxsKVxuXHRcdHtcdFx0XHRcblx0XHRcdGlmIChjaGVja0luQWxsRWxlbWVudHMgfHwgdGhpcy52aXNpYmxlRWxlbWVudHNfLmxlbmd0aCA9PT0gMCkgXG5cdFx0XHRcdFx0ZWxlbWVudHMgPSB0aGlzLmN1cnJFdmVyeUVsZW1lbnRzKCk7XG5cdFx0XHRlbHNlIGVsZW1lbnRzID0gdGhpcy5jdXJyVmlzaWJsZUVsZW1lbnRzKCk7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKEFwcC5kYXRhVHlwZSA9PSBBcHBEYXRhVHlwZS5TZWFyY2hSZXN1bHRzKVxuXHRcdHtcblx0XHRcdGVsZW1lbnRzID0gdGhpcy5zZWFyY2hSZXN1bHRFbGVtZW50c187XG5cdFx0fVx0XHRcblx0XHRcblx0XHRpZiAoIWVsZW1lbnRzKSByZXR1cm47XG5cblx0XHRsZXQgaSA6IG51bWJlciwgZWxlbWVudCA6IEVsZW1lbnQ7XG5cblx0IFx0bGV0IG5ld0VsZW1lbnRzIDogRWxlbWVudFtdID0gW107XG5cdCBcdGxldCBlbGVtZW50c1RvUmVtb3ZlIDogRWxlbWVudFtdID0gW107XHRcdFxuXHRcdFxuXHRcdGkgPSBlbGVtZW50cy5sZW5ndGg7XG5cdFx0bGV0IGZpbHRlck1vZHVsZSA9IEFwcC5maWx0ZXJNb2R1bGU7XHRcblx0XHRsZXQgY3VyckJvdW5kcyA9IEFwcC5ib3VuZHNNb2R1bGUuZXh0ZW5kZWRCb3VuZHM7XG5cdFx0bGV0IHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG5cblx0XHQvLyBjb25zb2xlLmxvZyhcInVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5LiBOYnJlIGVsZW1lbnQgw6AgdHJhaXRlciA6IFwiICsgaSwgY2hlY2tJbkFsbEVsZW1lbnRzKTtcblxuXHRcdHdoaWxlKGktLSlcblx0XHR7XG5cdFx0XHRlbGVtZW50ID0gZWxlbWVudHNbaV07XG5cblx0XHRcdGlmICghZWxlbWVudCkgYnJlYWs7XG5cblx0XHRcdGxldCBlbGVtZW50SW5Cb3VuZHMgPSBmYWxzZTtcblx0XHRcdGlmICh0aGlzLm5vTmVlZFRvQ2hlY2tCb3VuZHMoKSkgZWxlbWVudEluQm91bmRzID0gdHJ1ZTtcblx0XHRcdGVsc2UgZWxlbWVudEluQm91bmRzID0gY3VyckJvdW5kcyAmJiBlbGVtZW50LnBvc2l0aW9uICYmIGN1cnJCb3VuZHMuY29udGFpbnMoZWxlbWVudC5wb3NpdGlvbik7XG5cblx0XHRcdGlmICggZWxlbWVudEluQm91bmRzICYmIGZpbHRlck1vZHVsZS5jaGVja0lmRWxlbWVudFBhc3NGaWx0ZXJzKGVsZW1lbnQpKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoIWVsZW1lbnQuaXNEaXNwbGF5ZWQpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRlbGVtZW50LmlzRGlzcGxheWVkID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLmN1cnJWaXNpYmxlRWxlbWVudHMoKS5wdXNoKGVsZW1lbnQpO1xuXHRcdFx0XHRcdG5ld0VsZW1lbnRzLnB1c2goZWxlbWVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0aWYgKGVsZW1lbnQuaXNEaXNwbGF5ZWQpIFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZWxlbWVudC5pc0Rpc3BsYXllZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGVsZW1lbnRzVG9SZW1vdmUucHVzaChlbGVtZW50KTtcblx0XHRcdFx0XHRsZXQgaW5kZXggPSB0aGlzLmN1cnJWaXNpYmxlRWxlbWVudHMoKS5pbmRleE9mKGVsZW1lbnQpO1xuXHRcdFx0XHRcdGlmIChpbmRleCA+IC0xKSB0aGlzLmN1cnJWaXNpYmxlRWxlbWVudHMoKS5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IGVuZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXHRcdGxldCB0aW1lID0gZW5kIC0gc3RhcnQ7XG5cblx0XHQvL3dpbmRvdy5jb25zb2xlLmxvZyhcIlVwZGF0ZUVsZW1lbnRzVG9EaXNwbGF5IGVuIFwiICsgdGltZSArIFwiIG1zXCIpO1xuXHRcdHRoaXMub25FbGVtZW50c1RvRGlzcGxheUNoYW5nZWQuZW1pdCh7XG5cdFx0XHRlbGVtZW50c1RvRGlzcGxheTogdGhpcy5jdXJyVmlzaWJsZUVsZW1lbnRzKCksIFxuXHRcdFx0bmV3RWxlbWVudHMgOiBuZXdFbGVtZW50cywgXG5cdFx0XHRlbGVtZW50c1RvUmVtb3ZlIDogZWxlbWVudHNUb1JlbW92ZVxuXHRcdH0pO1xuXG5cdFx0dGhpcy51cGRhdGVFbGVtZW50c0ljb25zKGZpbHRlckhhc0NoYW5nZWQpO1x0XHRcblxuXHRcdC8vIHN0cmFuZ2UgYnVnLCBhdCBpbml0aWFsaXphdGlvbiwgc29tZSBpc29sYXRlZCBtYXJrZXJzIGFyZSBub3QgZGlzcGxheWVkXG5cdFx0Ly8gcmVmcmVzaGluZyB0aGUgZWxlbWVudE1vZHVsZSBzb2x2ZSB0aGlzLi4uXG5cdFx0aWYgKCF0aGlzLmZpcnN0RWxlbWVudHNIYXZlQmVlbmRpc3BsYXllZCAmJiB0aGlzLmN1cnJWaXNpYmxlRWxlbWVudHMoKSAmJiB0aGlzLmN1cnJWaXNpYmxlRWxlbWVudHMoKS5sZW5ndGggPiAwKVx0XHRcblx0XHR7XG5cdFx0XHR0aGlzLmZpcnN0RWxlbWVudHNIYXZlQmVlbmRpc3BsYXllZCA9IHRydWU7XG5cdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IHRoaXMudXBkYXRlRWxlbWVudHNUb0Rpc3BsYXkodHJ1ZSkgfSwgMTAwKTtcblx0XHR9XHRcdFxuXHR9O1xuXG5cdHByaXZhdGUgbm9OZWVkVG9DaGVja0JvdW5kcygpXG5cdHtcblx0XHRyZXR1cm4gQXBwLm1vZGUgPT0gQXBwTW9kZXMuTGlzdCAmJiBcblx0XHRcdFx0XHQoQXBwLmRhdGFUeXBlICE9IEFwcERhdGFUeXBlLkFsbCB8fCBBcHAuYWpheE1vZHVsZS5hbGxFbGVtZW50c1JlY2VpdmVkKTtcblx0fVxuXG5cdHVwZGF0ZUVsZW1lbnRzSWNvbnMoc29tZXRoaW5nQ2hhbmdlZCA6IGJvb2xlYW4gPSBmYWxzZSlcblx0e1xuXHRcdC8vY29uc29sZS5sb2coXCJVcGRhdGVDdXJyRWxlbWVudHMgc29tZXRoaW5nQ2hhbmdlZFwiLCBzb21ldGhpbmdDaGFuZ2VkKTtcblx0XHRsZXQgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuXHRcdGxldCB2aXNpYmxlRWxlbWVudHMgPSB0aGlzLmN1cnJWaXNpYmxlRWxlbWVudHMoKTtcblx0XHRpZiAoIXZpc2libGVFbGVtZW50cyB8fCAhdmlzaWJsZUVsZW1lbnRzLmxlbmd0aCkgcmV0dXJuO1xuXHRcdFxuXHRcdGxldCBsID0gdmlzaWJsZUVsZW1lbnRzLmxlbmd0aDtcblx0XHRsZXQgZWxlbWVudCA6IEVsZW1lbnQ7XG5cdFx0d2hpbGUobC0tKVxuXHRcdHtcblx0XHRcdGVsZW1lbnQgPSB2aXNpYmxlRWxlbWVudHNbbF07XG5cdFx0XHRpZiAoc29tZXRoaW5nQ2hhbmdlZCkgZWxlbWVudC5uZWVkVG9CZVVwZGF0ZWRXaGVuU2hvd24gPSB0cnVlO1xuXG5cdFx0XHQvLyBpZiBkb21NYXJrZXIgbm90IHZpc2libGUgdGhhdCdzIG1lYW4gdGhhdCBtYXJrZXIgaXMgaW4gYSBjbHVzdGVyXG5cdFx0XHRpZiAoZWxlbWVudC5tYXJrZXIuZG9tTWFya2VyKCkuaXMoJzp2aXNpYmxlJykpIGVsZW1lbnQudXBkYXRlKCk7XG5cdFx0fVxuXHRcdGxldCBlbmQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblx0XHRsZXQgdGltZSA9IGVuZCAtIHN0YXJ0O1xuXHRcdC8vd2luZG93LmNvbnNvbGUubG9nKFwidXBkYXRlRWxlbWVudHNJY29ucyBcIiArIHRpbWUgKyBcIiBtc1wiKTtcblx0fVxuXG5cdHNldFNlYXJjaFJlc3VsdEVsZW1lbnQoZWxlbWVudHMgOiBFbGVtZW50W10pIHsgdGhpcy5zZWFyY2hSZXN1bHRFbGVtZW50c18gPSBlbGVtZW50czsgfVxuXHRnZXRTZWFyY2hFbGVtZW50cygpIDogRWxlbWVudFtdIHsgcmV0dXJuIHRoaXMuc2VhcmNoUmVzdWx0RWxlbWVudHNfOyB9XG5cblx0Z2V0IGV2ZXJ5RWxlbWVudHMoKSAgICAgICAgeyByZXR1cm4gdGhpcy5ldmVyeUVsZW1lbnRzXzsgfVxuXHRnZXQgZXZlcnlFbGVtZW50c0lkKCkgICAgICB7IHJldHVybiB0aGlzLmV2ZXJ5RWxlbWVudHNJZF87IH1cblx0Z2V0IHZpc2libGVFbGVtZW50cygpICAgICAgeyByZXR1cm4gdGhpcy52aXNpYmxlRWxlbWVudHNfOyB9XG5cdGdldCBzZWFyY2hSZXN1bHRFbGVtZW50cygpIHsgcmV0dXJuIHRoaXMuc2VhcmNoUmVzdWx0RWxlbWVudHNfOyB9XG5cblx0Y3VyclZpc2libGVFbGVtZW50cygpICAgICAgeyByZXR1cm4gdGhpcy52aXNpYmxlRWxlbWVudHNfW0FwcC5jdXJyTWFpbklkXTsgfVxuXHRjdXJyRXZlcnlFbGVtZW50cygpICAgICAgICB7IHJldHVybiB0aGlzLmV2ZXJ5RWxlbWVudHNfW0FwcC5jdXJyTWFpbklkXTsgfVxuXHRzZXRDdXJyVmlzaWJsZUVsZW1lbnRzKGVsZW1lbnRzIDogRWxlbWVudFtdKSB7IHRoaXMudmlzaWJsZUVsZW1lbnRzX1tBcHAuY3Vyck1haW5JZF0gPSBlbGVtZW50czsgfVxuXG5cdHByaXZhdGUgY2xlYXJDdXJyVmlzaWJsZUVsZW1lbnRzKCkgeyB0aGlzLnZpc2libGVFbGVtZW50c19bQXBwLmN1cnJNYWluSWRdID0gW107IH1cblxuXHRhbGxFbGVtZW50cygpIHsgcmV0dXJuIHRoaXMuZXZlcnlFbGVtZW50c19bJ2FsbCddOyB9XG5cblx0Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKSA6IEVsZW1lbnRcblx0e1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hbGxFbGVtZW50cygpLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5hbGxFbGVtZW50cygpW2ldLmlkID09IGVsZW1lbnRJZCkgcmV0dXJuIHRoaXMuYWxsRWxlbWVudHMoKVtpXTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG59IiwiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0ICogYXMgQ29va2llcyBmcm9tIFwiLi4vLi4vdXRpbHMvY29va2llc1wiO1xuXG5leHBvcnQgY2xhc3MgRmF2b3JpdGVNb2R1bGVcbntcbiAgZmF2b3JpdGVJZHNfID0gW107XG5cbiAgY29uc3RydWN0b3IoKVxuICB7XG4gICAgbGV0IGNvb2tpZXMgPSBDb29raWVzLnJlYWRDb29raWUoJ0Zhdm9yaXRlSWRzJyk7XG4gICAgdGhpcy5mYXZvcml0ZUlkc18gPSBjb29raWVzICE9PSBudWxsID8gSlNPTi5wYXJzZShjb29raWVzKSA6IFtdOyAgXG4gIH1cblxuICBjaGVja0Nvb2tpZXMoKVxuICB7XG4gICAgaWYgKEFwcC5jb25maWcuaXNGZWF0dXJlQWN0aXZhdGVkKCdmYXZvcml0ZScpKVxuICAgIHtcbiAgICAgIGZvcihsZXQgaiA9IDA7IGogPCB0aGlzLmZhdm9yaXRlSWRzXy5sZW5ndGg7IGorKylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hZGRGYXZvcml0ZSh0aGlzLmZhdm9yaXRlSWRzX1tqXSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBhZGRGYXZvcml0ZShmYXZvcml0ZUlkIDogc3RyaW5nLCBtb2RpZnlDb29raWVzID0gdHJ1ZSlcbiAge1xuICAgIGxldCBlbGVtZW50ID0gQXBwLmVsZW1lbnRCeUlkKGZhdm9yaXRlSWQpO1xuICAgIGlmIChlbGVtZW50ID09PSBudWxsKSByZXR1cm47XG4gICAgXG4gICAgZWxlbWVudC5pc0Zhdm9yaXRlID0gdHJ1ZTtcbiAgICBcbiAgICBpZiAobW9kaWZ5Q29va2llcylcbiAgICB7XG4gICAgICB0aGlzLmZhdm9yaXRlSWRzXy5wdXNoKGZhdm9yaXRlSWQpO1xuICAgICAgQ29va2llcy5jcmVhdGVDb29raWUoJ0Zhdm9yaXRlSWRzJyxKU09OLnN0cmluZ2lmeSh0aGlzLmZhdm9yaXRlSWRzXykpOyAgICBcbiAgICB9XG4gIH07XG5cbiAgcmVtb3ZlRmF2b3JpdGUoZmF2b3JpdGVJZCA6IHN0cmluZywgbW9kaWZ5Q29va2llcyA9IHRydWUpXG4gIHtcbiAgICBsZXQgZWxlbWVudCA9IEFwcC5lbGVtZW50QnlJZChmYXZvcml0ZUlkKTtcbiAgICBpZiAoZWxlbWVudCAhPT0gbnVsbCkgZWxlbWVudC5pc0Zhdm9yaXRlID0gZmFsc2U7XG4gICAgXG4gICAgaWYgKG1vZGlmeUNvb2tpZXMpXG4gICAge1xuICAgICAgbGV0IGluZGV4ID0gdGhpcy5mYXZvcml0ZUlkc18uaW5kZXhPZihmYXZvcml0ZUlkKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB0aGlzLmZhdm9yaXRlSWRzXy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICBDb29raWVzLmNyZWF0ZUNvb2tpZSgnRmF2b3JpdGVJZHMnLEpTT04uc3RyaW5naWZ5KHRoaXMuZmF2b3JpdGVJZHNfKSk7XG4gICAgfVxuICB9O1xufSIsImltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmltcG9ydCB7IFN0YW1wLCBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuXG5leHBvcnQgY2xhc3MgU3RhbXBNb2R1bGVcbntcbiAgYWxsb3dlZFN0YW1wcyA6IFN0YW1wW10gPSBbXTtcblxuICBkZWZhdWx0SWNvbnMgPSBbICdnb2dvLWljb24tc3RhbXAtMScsICdnb2dvLWljb24tc3RhbXAtMiddO1xuICBkZWZhdWx0SWNvbiA9ICdnb2dvLWljb24tc3RhbXAtMSc7XG5cbiAgY29uc3RydWN0b3IoJGNvbmZpZylcbiAge1xuICAgIGlmICgkY29uZmlnLmZlYXR1cmVzLnN0YW1wLm9wdGlvbnMuYWxsb3dlZFN0YW1wcylcbiAgICAgIGZvciAobGV0IHN0YW1wIG9mICRjb25maWcuZmVhdHVyZXMuc3RhbXAub3B0aW9ucy5hbGxvd2VkU3RhbXBzKVxuICAgICAge1xuICAgICAgICBzdGFtcC5pY29uID0gc3RhbXAuaWNvbiB8fCB0aGlzLmdldERlZmF1bHRJY29uKCk7XG4gICAgICAgIHRoaXMuYWxsb3dlZFN0YW1wcy5wdXNoKG5ldyBTdGFtcChzdGFtcCkpO1xuICAgICAgfVxuICB9XG5cbiAgY2hlY2tGb3JBZGRpbmdTdGFtcHMoZWxlbWVudHNBcnJheSA6IEVsZW1lbnRbXSkgIFxuICB7XG4gICAgbGV0IGVsZW1lbnRzSWRzID0gZWxlbWVudHNBcnJheS5tYXAoIChlbCkgPT4gZWwuaWQpO1xuICAgIFxuICAgIGZvcihsZXQgc3RhbXAgb2YgdGhpcy5hbGxvd2VkU3RhbXBzKVxuICAgIHtcbiAgICAgIGxldCBlbGVtZW50c1RvU3RhbXAgPSBlbGVtZW50c0FycmF5LmZpbHRlciggKGVsKSA9PiBzdGFtcC5lbGVtZW50SWRzLmluZGV4T2YoZWwuaWQpID4gLTEpO1xuICAgICAgZm9yKGxldCBlbGVtZW50IG9mIGVsZW1lbnRzVG9TdGFtcCkgZWxlbWVudC5zdGFtcHMucHVzaChzdGFtcC5pZClcbiAgICB9XG4gIH1cblxuICBnZXRBbGxvd2VkU3RhbXBGb3JFbGVtZW50KGVsZW1lbnQgOiBFbGVtZW50KSA6IFN0YW1wW11cbiAge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRTdGFtcHMuZmlsdGVyKCAoc3RhbXApID0+IGVsZW1lbnQuc3RhbXBzLmluZGV4T2Yoc3RhbXAuaWQpID4gLTEpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdEljb24oKSA6IHN0cmluZ1xuICB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEljb25zLnNoaWZ0KCkgfHwgdGhpcy5kZWZhdWx0SWNvbjtcbiAgfVxufSIsImRlY2xhcmUgbGV0IEdlb2NvZGVySlM7XG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vZ29nb2NhcnRvXCI7XG5kZWNsYXJlIHZhciBMLCAkO1xuXG5pbXBvcnQgeyBBcHBNb2R1bGUgfSBmcm9tIFwiLi4vYXBwLm1vZHVsZVwiO1xuaW1wb3J0IHsgc2x1Z2lmeSB9IGZyb20gXCIuLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuaW1wb3J0IHsgVmlld1BvcnQsIEV2ZW50IH0gZnJvbSBcIi4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuXG4vKiogcmVzdWx0cyB0eXBlIHJldHVybmVkIGJ5IGdlb2NvZGVySlMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VvY29kZVJlc3VsdFxue1xuXHRnZXRDb29yZGluYXRlcygpIDogTC5MYXRMbmdUdXBsZTtcblx0Z2V0Rm9ybWF0dGVkQWRkcmVzcygpIDogc3RyaW5nO1x0XG5cdGdldEJvdW5kcygpIDogUmF3Qm91bmRzO1xufVxuXG4vLyBzb3V0aCwgd2VzdCwgbm9ydGgsIGVhc3RcbmV4cG9ydCB0eXBlIFJhd0JvdW5kcyA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG4vKipcbiogSW50ZXJmYWNlIGJldHdlZW4gR2VvY29kZXJKUyBhbmQgdGhlIEFwcFxuKiBBbGxvdyB0byBjaGFuZ2UgZ2VvY29kZSB0ZWNobm9sb2d5IHdpdGhvdXQgY2hhbmdpbmcgY29kZSBpbiB0aGUgQXBwXG4qL1xuZXhwb3J0IGNsYXNzIEdlb2NvZGVyTW9kdWxlXG57XG5cdGdlb2NvZGVyIDogYW55ID0gbnVsbDtcblx0bGFzdEFkZHJlc3NSZXF1ZXN0IDogc3RyaW5nID0gJyc7XG5cdGxhc3RSZXN1bHRzIDogR2VvY29kZVJlc3VsdFtdID0gbnVsbDtcblx0bGFzdFJlc3VsdEJvdW5kcyA6IEwuTGF0TG5nQm91bmRzID0gbnVsbDtcblxuXHRwcml2YXRlIGxvY2F0aW9uIDogTC5MYXRMbmcgPSBudWxsO1xuXG5cdG9uR2VvY29kZVJlc3VsdCA9IG5ldyBFdmVudDxhbnk+KCk7XG5cdG9uR2VvbG9jYWxpemF0aW9uUmVzdWx0ID0gbmV3IEV2ZW50PFZpZXdQb3J0PigpO1xuXG5cdGdldExvY2F0aW9uKCkgOiBMLkxhdExuZ1xuXHR7XG5cdFx0cmV0dXJuIHRoaXMubG9jYXRpb247XHRcdFxuXHR9XG5cblx0Z2V0Qm91bmRzKCkgOiBMLkxhdExuZ0JvdW5kc1xuXHR7XG5cdFx0aWYgKCF0aGlzLmxhc3RSZXN1bHRCb3VuZHMpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiB0aGlzLmxhc3RSZXN1bHRCb3VuZHM7XG5cdH1cdFxuXG5cdGdldExvY2F0aW9uU2x1ZygpIDogc3RyaW5nIHsgcmV0dXJuIHNsdWdpZnkodGhpcy5sYXN0QWRkcmVzc1JlcXVlc3QpOyB9XG5cdGdldExvY2F0aW9uQWRkcmVzcygpIDogc3RyaW5nIHsgcmV0dXJuIHRoaXMubGFzdEFkZHJlc3NSZXF1ZXN0OyB9XG5cdHNldExvY2F0aW9uQWRkcmVzcygkYWRkcmVzcyA6IHN0cmluZykgeyB0aGlzLmxhc3RBZGRyZXNzUmVxdWVzdCA9ICRhZGRyZXNzOyB9XG5cblx0cHJpdmF0ZSBsYXRMbmdCb3VuZHNGcm9tUmF3Qm91bmRzKHJhd2JvdW5kcyA6IFJhd0JvdW5kcykgOiBMLkxhdExuZ0JvdW5kc1xuXHR7XG5cdFx0bGV0IGNvcm5lcjEgPSBMLmxhdExuZyhyYXdib3VuZHNbMF0sIHJhd2JvdW5kc1sxXSk7XG5cdFx0bGV0IGNvcm5lcjIgPSBMLmxhdExuZyhyYXdib3VuZHNbMl0sIHJhd2JvdW5kc1szXSk7XG5cdFx0cmV0dXJuIEwubGF0TG5nQm91bmRzKGNvcm5lcjEsIGNvcm5lcjIpO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0dGhpcy5nZW9jb2RlciA9IEdlb2NvZGVySlMuY3JlYXRlR2VvY29kZXIoeyAncHJvdmlkZXInOiAnb3BlbnN0cmVldG1hcCcsICd1c2VTU0wnOnRydWV9KTtcblx0XHQvL3RoaXMuZ2VvY29kZXIgPSBHZW9jb2RlckpTLmNyZWF0ZUdlb2NvZGVyKHsncHJvdmlkZXInOiAnZ29vZ2xlJywgJ3VzZVNTTCc6dHJ1ZSB9KTtcblx0fVxuXG5cdGdlb2NvZGVBZGRyZXNzKCBhZGRyZXNzLCBjYWxsYmFja0NvbXBsZXRlPywgY2FsbGJhY2tGYWlsPyApIFxuXHR7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJnZW9jb2RlIGFkZHJlc3MgOiBcIiwgYWRkcmVzcyk7XG5cdFx0dGhpcy5sYXN0QWRkcmVzc1JlcXVlc3QgPSBhZGRyZXNzO1xuXG5cdFx0Ly8gaWYgbm8gYWRkcmVzcywgd2Ugc2hvdyBmcmFuY2Vcblx0XHRpZiAoYWRkcmVzcyA9PSAnJylcblx0XHR7XG5cdFx0XHRjb25zb2xlLmxvZyhcImRlZmF1bHQgbG9jYXRpb25cIik7XG5cdFx0XHR0aGlzLmxhc3RSZXN1bHRzID0gW107XG5cdFx0XHR0aGlzLmxhc3RSZXN1bHRCb3VuZHMgPSBBcHAuYm91bmRzTW9kdWxlLmRlZmF1bHRCb3VuZHM7XG5cblx0XHRcdHRoaXMub25HZW9jb2RlUmVzdWx0LmVtaXQoKTtcblxuXHRcdFx0Ly8gbGVhdmUgdGltZSBmb3IgbWFwIHRvIGxvYWRcblx0XHRcdGlmIChjYWxsYmFja0NvbXBsZXRlKSBzZXRUaW1lb3V0KCAoKSA9PiB7IGNhbGxiYWNrQ29tcGxldGUodGhpcy5sYXN0UmVzdWx0cyk7IH0sIDIwMCk7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBmYWtlIGdlb2NvZGVyIHdoZW4gbm8gaW50ZXJuZXQgY29ubmV4aW9uXG5cdFx0XHRsZXQgZmFrZSA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoIWZha2UpXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZ2VvY29kZXIuZ2VvY29kZSggYWRkcmVzcywgKHJlc3VsdHMgOiBHZW9jb2RlUmVzdWx0W10pID0+XG5cdFx0XHRcdHtcdFx0XHRcblx0XHRcdFx0XHRpZiAocmVzdWx0cyAhPT0gbnVsbCAmJiByZXN1bHRzLmxlbmd0aCA+IDApIFxuXHRcdFx0XHRcdHtcdFx0XHRcdFxuXHRcdFx0XHRcdFx0dGhpcy5sYXN0UmVzdWx0cyA9IHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR0aGlzLmxhc3RSZXN1bHRCb3VuZHMgPSB0aGlzLmxhdExuZ0JvdW5kc0Zyb21SYXdCb3VuZHModGhpcy5sYXN0UmVzdWx0c1swXS5nZXRCb3VuZHMoKSk7XG5cblx0XHRcdFx0XHRcdGlmICh0aGlzLmxhc3RSZXN1bHRzICYmIHRoaXMubGFzdFJlc3VsdHNbMF0pIHRoaXMubG9jYXRpb24gPSBMLmxhdExuZyh0aGlzLmxhc3RSZXN1bHRzWzBdLmdldENvb3JkaW5hdGVzKCkpO1xuXHRcdFx0XHRcdFx0ZWxzZSBsb2NhdGlvbiA9IG51bGw7XG5cblx0XHRcdFx0XHRcdHRoaXMub25HZW9jb2RlUmVzdWx0LmVtaXQoKTtcblxuXHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrQ29tcGxldGUpIGNhbGxiYWNrQ29tcGxldGUocmVzdWx0cyk7XHRcblx0XHRcdFx0XHR9IFx0XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGlmIChjYWxsYmFja0ZhaWwpIGNhbGxiYWNrRmFpbCgpO1x0XHRcdFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGxldCByZXN1bHQgPSB7XG5cdFx0XHRcdFx0Ym91bmRzOiBbLjA2OTE4NSwtMC42NDE0MTUsNDQuMTg0NzM1MSwtMC40Njk5ODM1XSxcblx0XHRcdFx0XHRjaXR5OiAnTGFicml0Jyxcblx0XHRcdFx0XHRmb3JtYXR0ZWRBZGRyZXNzOiBcIkxhYnJpdCA0MDQyMFwiLFxuXHRcdFx0XHRcdGxhdGl0dWRlOjQ0LjEwNDk1NjcsXG5cdFx0XHRcdFx0bG9uZ2l0dWRlOi0wLjU0NDUyOTYsXG5cdFx0XHRcdFx0cG9zdGFsX2NvZGU6XCI0MDQyMFwiLFxuXHRcdFx0XHRcdHJlZ2lvbjpcIk5vdXZlbGxlLUFxdWl0YWluZVwiLFxuXHRcdFx0XHRcdGdldEJvdW5kcygpIHsgcmV0dXJuIHRoaXMuYm91bmRzOyB9LFxuXHRcdFx0XHRcdGdldENvb3JkaW5hdGVzKCkgeyByZXR1cm4gW3RoaXMubGF0aXR1ZGUsIHRoaXMubG9uZ2l0dWRlXTsgfSxcblx0XHRcdFx0XHRnZXRGb3JtYXR0ZWRBZGRyZXNzKCkgeyByZXR1cm4gdGhpcy5mb3JtYXR0ZWRBZGRyZXNzOyB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgcmVzdWx0cyA9IFtdO1xuXHRcdFx0XHRyZXN1bHRzLnB1c2gocmVzdWx0KTtcblxuXHRcdFx0XHR0aGlzLmxhc3RSZXN1bHRzID0gcmVzdWx0cztcblx0XHRcdFx0dGhpcy5sYXN0UmVzdWx0Qm91bmRzID0gdGhpcy5sYXRMbmdCb3VuZHNGcm9tUmF3Qm91bmRzKHRoaXMubGFzdFJlc3VsdHNbMF0uZ2V0Qm91bmRzKCkpO1xuXG5cdFx0XHRcdGNhbGxiYWNrQ29tcGxldGUocmVzdWx0cyk7XG5cdFx0XHR9XHRcblx0XHR9XHRcdFx0XG5cdH1cblxuXHRnZW9sb2NhdGVVc2VyKGNhbGxiYWNrQ29tcGxldGU/KVxuXHR7XG5cdFx0aWYgKG5hdmlnYXRvci5nZW9sb2NhdGlvbilcblx0XHRcdG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKHBvc2l0aW9uKSA9PiB7XG5cdFx0XHRcdC8vIGFzc29jaWF0ZSB6b29tIHRvIGFjY3VyYWN5XG5cdFx0XHRcdGxldCB6b29tID0gMTcgLSBNYXRoLmxvZyhwb3NpdGlvbi5jb29yZHMuYWNjdXJhY3kgLyAzMDAwKSAqIE1hdGguTE9HMkU7XG5cdFx0XHRcdHpvb20gPSBNYXRoLm1pbih6b29tLCAxNik7XG5cdFx0XHRcdHpvb20gPSBNYXRoLm1heCh6b29tLCA4KTtcblx0XHRcdFx0bGV0IHZpZXdQb3J0ID0gbmV3IFZpZXdQb3J0KHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSwgcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSwgem9vbSk7XG5cdFx0XHRcdHRoaXMuaGFuZGxlR2VvbG9jYWxpc2F0aW9uUmVzcG9uc2Uodmlld1BvcnQsIGNhbGxiYWNrQ29tcGxldGUpO1xuXHRcdFx0fSwgKCkgPT4ge30sIHtlbmFibGVIaWdoQWNjdXJhY3k6IHRydWV9KTtcblx0XHRlbHNlXG5cdFx0XHQkLmdldEpTT04oXCJodHRwOi8vZnJlZWdlb2lwLm5ldC9qc29uL1wiLCAoZGF0YSkgPT4ge1xuXHRcdCAgICBsZXQgdmlld1BvcnQgPSBuZXcgVmlld1BvcnQoZGF0YS5sYXRpdHVkZSwgZGF0YS5sb25naXR1ZGUsIDE0KTtcblx0XHQgICAgdGhpcy5oYW5kbGVHZW9sb2NhbGlzYXRpb25SZXNwb25zZSh2aWV3UG9ydCwgY2FsbGJhY2tDb21wbGV0ZSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlR2VvbG9jYWxpc2F0aW9uUmVzcG9uc2Uodmlld1BvcnQgOiBWaWV3UG9ydCwgY2FsbGJhY2tDb21wbGV0ZSlcblx0e1xuXHRcdHRoaXMubG9jYXRpb24gPSB2aWV3UG9ydC50b0xvY2F0aW9uKCk7XG4gICAgdGhpcy5vbkdlb2xvY2FsaXphdGlvblJlc3VsdC5lbWl0KHZpZXdQb3J0KTtcbiAgICBjYWxsYmFja0NvbXBsZXRlKHZpZXdQb3J0KTtcblx0fVxufSIsImltcG9ydCB7IEFwcE1vZHVsZSwgQXBwU3RhdGVzLCBBcHBEYXRhVHlwZSwgQXBwTW9kZXMgfSBmcm9tIFwiLi4vYXBwLm1vZHVsZVwiO1xuXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vZ29nb2NhcnRvXCI7XG5cbmRlY2xhcmUgdmFyIHJvdXRpZTogYW55LCAkO1xuXG5leHBvcnQgY2xhc3MgTG9naW5Nb2R1bGVcbntcblx0cHJpdmF0ZSByb2xlc18gOiBzdHJpbmdbXTtcblx0cHJpdmF0ZSB1c2VyRW1haWwgOiBzdHJpbmcgPSAnJztcblxuXHRjb25zdHJ1Y3Rvcigkcm9sZXMgOiBzdHJpbmdbXSB8IHN0cmluZywgJHVzZXJFbWFpbCA6IHN0cmluZyA9ICcnKSBcblx0eyBcblx0XHR0aGlzLnNldFJvbGVzKCRyb2xlcyk7IFxuXHRcdHRoaXMuc2V0VXNlckVtYWlsKCR1c2VyRW1haWwpO1xuXHR9XG5cblx0c2V0Um9sZXMoJHJvbGVzIDogc3RyaW5nW10gfCBzdHJpbmcpXG5cdHsgXG5cdFx0aWYgKHR5cGVvZiAkcm9sZXMgPT0gJ3N0cmluZycpIHRoaXMucm9sZXNfID0gWyRyb2xlc107XHRcblx0XHRlbHNlIHRoaXMucm9sZXNfID0gJHJvbGVzO1xuXHR9XG5cblx0c2V0VXNlckVtYWlsKHVzZXJFbWFpbCkgeyB0aGlzLnVzZXJFbWFpbCA9IHVzZXJFbWFpbDsgfVxuXG5cdGdldFVzZXJFbWFpbCgpIHsgcmV0dXJuIHRoaXMudXNlckVtYWlsOyB9XG5cblx0Z2V0Um9sZXMoKSB7IHJldHVybiB0aGlzLnJvbGVzXzsgfVxuXG4gIGxvZ2luQWN0aW9uKCkgeyBBcHAuY29uZmlnLnNlY3VyaXR5LmxvZ2luQWN0aW9uKCk7IH1cbn0iLCIvKipcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHb0dvQ2FydG8gcHJvamVjdC5cbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNiBTZWJhc3RpYW4gQ2FzdHJvIC0gOTBzY2FzdHJvQGdtYWlsLmNvbVxuICogQGxpY2Vuc2UgR05VIEdQTCB2M1xuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAxNi0xMi0xM1xuICovXG5cbmltcG9ydCB7IEFwcE1vZHVsZSB9IGZyb20gXCIuLi8uLi9hcHAubW9kdWxlXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vLi4vZ29nb2NhcnRvXCI7XG5cbmV4cG9ydCBjbGFzcyBEaXNwbGF5RWxlbWVudEFsb25lTW9kdWxlXG57XG5cdGVsZW1lbnRTaG93bkFsb25lXyA9IG51bGw7XG5cblx0Y29uc3RydWN0b3IoKSB7fVxuXG5cdGdldEVsZW1lbnQoKSA6IEVsZW1lbnQgeyByZXR1cm4gdGhpcy5lbGVtZW50U2hvd25BbG9uZV87IH1cblxuXHRiZWdpbihlbGVtZW50SWQgOiBzdHJpbmcsIHBhblRvRWxlbWVudExvY2F0aW9uIDogYm9vbGVhbiA9IHRydWUpIFxuXHR7XHRcblx0XHQvLyBjb25zb2xlLmxvZyhcIkRpc3BsYXlFbGVtZW50QWxvbmVNb2R1bGUgYmVnaW5cIiwgcGFuVG9FbGVtZW50TG9jYXRpb24pO1x0XHRcblxuXHRcdGlmICh0aGlzLmVsZW1lbnRTaG93bkFsb25lXyAhPT0gbnVsbCkgXG5cdFx0e1xuXHRcdFx0dGhpcy5lbGVtZW50U2hvd25BbG9uZV8uaGlkZSgpO1xuXHRcdFx0dGhpcy5lbGVtZW50U2hvd25BbG9uZV8uaXNTaG93bkFsb25lID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0bGV0IGVsZW1lbnQgPSBBcHAuZWxlbWVudEJ5SWQoZWxlbWVudElkKTtcdFxuXHRcdHRoaXMuZWxlbWVudFNob3duQWxvbmVfID0gZWxlbWVudDtcdFx0XHRcblxuXHRcdEFwcC5lbGVtZW50c01vZHVsZS5jbGVhckN1cnJlbnRzRWxlbWVudCgpO1xuXG5cdFx0c2V0VGltZW91dCggKCkgPT4ge1xuXHRcdFx0QXBwLmluZm9CYXJDb21wb25lbnQuc2hvd0VsZW1lbnQoZWxlbWVudC5pZCk7XHRcblxuXHRcdFx0Ly8gd2Ugc2V0IGEgdGltZW91dCB0byBsZXQgdGhlIGluZm9iYXIgc2hvdyB1cFxuXHRcdFx0Ly8gaWYgd2Ugbm90IGRvIHNvLCB0aGUgbWFwIHdpbGwgbm90IGJlIGNlbnRlcmVkIGluIHRoZSBlbGVtZW50LnBvc2l0aW9uXHRcblx0XHRcdGlmIChwYW5Ub0VsZW1lbnRMb2NhdGlvbilcblx0XHRcdHtcdFx0XG5cdFx0XHRcdEFwcC5tYXBDb21wb25lbnQucmVzaXplKCk7XG5cdFx0XHRcdEFwcC5tYXBDb21wb25lbnQucGFuVG9Mb2NhdGlvbihlbGVtZW50LnBvc2l0aW9uLCAxMiwgZmFsc2UpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7IEFwcC5tYXBDb21wb25lbnQucmVzaXplKCk7QXBwLm1hcENvbXBvbmVudC5wYW5Ub0xvY2F0aW9uKGVsZW1lbnQucG9zaXRpb24sIDEyLCBmYWxzZSk7IH0sIDUwMCk7XG5cdFx0XHR9XHRcdFx0XG5cdFx0fSwgMzAwKTtcdFx0XG5cdH07XG5cblx0ZW5kKCkgXG5cdHtcblx0XHRpZiAodGhpcy5lbGVtZW50U2hvd25BbG9uZV8gPT09IG51bGwpIHJldHVybjtcblxuXHRcdEFwcC5lbGVtZW50c01vZHVsZS51cGRhdGVFbGVtZW50c1RvRGlzcGxheSh0cnVlKTtcblx0XHRcblx0XHR0aGlzLmVsZW1lbnRTaG93bkFsb25lXy5pc1Nob3duQWxvbmUgPSBmYWxzZTtcdFxuXG5cdFx0dGhpcy5lbGVtZW50U2hvd25BbG9uZV8gPSBudWxsO1x0XG5cdH07XG59XG5cbiIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cblxuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuaW1wb3J0IHsgcGFyc2VBcnJheU51bWJlckludG9TdHJpbmcsIHBhcnNlU3RyaW5nSW50b0FycmF5TnVtYmVyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhcnNlci1zdHJpbmctbnVtYmVyXCI7XG5pbXBvcnQgeyBzbHVnaWZ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyaW5nLWhlbHBlcnMnO1xuXG5kZWNsYXJlIHZhciAkIDogYW55O1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyUm91dGluZ01vZHVsZVxue1xuXHRsb2FkRmlsdGVyc0Zyb21TdHJpbmcoc3RyaW5nIDogc3RyaW5nKVxuXHR7XG5cdFx0bGV0IHNwbGl0ZWQgPSBzdHJpbmcuc3BsaXQoJ0AnKTtcblx0XHRsZXQgbWFpbk9wdGlvblNsdWcgPSBzcGxpdGVkWzBdO1xuXG5cdFx0bGV0IG1haW5PcHRpb25JZDtcblx0XHRpZiAobWFpbk9wdGlvblNsdWcgPT0gJ2FsbCcpIG1haW5PcHRpb25JZCA9ICdhbGwnO1xuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHRsZXQgbWFpbk9wdGlvbiA9IEFwcC50YXhvbm9teU1vZHVsZS5nZXRNYWluT3B0aW9uQnlTbHVnKG1haW5PcHRpb25TbHVnKTtcblx0XHRcdG1haW5PcHRpb25JZCA9IG1haW5PcHRpb24gPyBtYWluT3B0aW9uLmlkIDogJ2FsbCc7XG5cdFx0fSBcblx0XHRBcHAuZmlsdGVyc0NvbXBvbmVudC5zZXRNYWluT3B0aW9uKG1haW5PcHRpb25JZCk7XHRcdFxuXG5cdFx0bGV0IGZpbHRlcnNTdHJpbmcgOiBzdHJpbmc7XG5cdFx0bGV0IGFkZGluZ01vZGUgOiBib29sZWFuO1xuXG5cdFx0aWYgKHNwbGl0ZWQubGVuZ3RoID09IDIpXG5cdFx0e1xuXHRcdFx0ZmlsdGVyc1N0cmluZyA9IHNwbGl0ZWRbMV07XG5cblx0XHRcdGlmIChmaWx0ZXJzU3RyaW5nWzBdID09ICchJykgYWRkaW5nTW9kZSA9IGZhbHNlO1xuXHRcdFx0ZWxzZSBhZGRpbmdNb2RlID0gdHJ1ZTtcblxuXHRcdFx0ZmlsdGVyc1N0cmluZyA9IGZpbHRlcnNTdHJpbmcuc3Vic3RyaW5nKDEpO1xuXHRcdH1cblx0XHRlbHNlIGlmIChzcGxpdGVkLmxlbmd0aCA+IDIpXG5cdFx0e1xuXHRcdFx0Y29uc29sZS5lcnJvcihcIkVycm9yIHNwbGl0aW5nIGluIGxvYWRGaWx0ZXJGcm9tU3RyaW5nXCIpO1xuXHRcdH1cblxuXHRcdGxldCBmaWx0ZXJzID0gcGFyc2VTdHJpbmdJbnRvQXJyYXlOdW1iZXIoZmlsdGVyc1N0cmluZyk7XG5cdFx0Ly9jb25zb2xlLmxvZygnZmlsdGVycycsIGZpbHRlcnMpO1x0XHRcblx0XHRpZiAoIUFwcC5sb2FkRnVsbFRheG9ub215ICYmIG1haW5PcHRpb25TbHVnICE9ICdhbGwnKSAkKCcubWFpbi1jYXRlZ29yaWVzJykuaGlkZSgpO1x0XG5cblx0XHRpZiAoZmlsdGVycy5sZW5ndGggPiAwKVxuXHRcdHtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCdhZGRpbmdNb2RlJywgYWRkaW5nTW9kZSk7XG5cdFx0XHRcblx0XHRcdGlmIChtYWluT3B0aW9uU2x1ZyA9PSAnYWxsJylcblx0XHRcdHtcblx0XHRcdFx0aWYgKEFwcC5sb2FkRnVsbFRheG9ub215KSBBcHAudGF4b25vbXlNb2R1bGUudGF4b25vbXkudG9nZ2xlKCFhZGRpbmdNb2RlLCBmYWxzZSk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGZvcihsZXQgb3B0aW9uIG9mIEFwcC50YXhvbm9teU1vZHVsZS50YXhvbm9teS5vcHRpb25zKSBcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRvcHRpb24udG9nZ2xlVmlzaWJpbGl0eSghYWRkaW5nTW9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdGZvciAobGV0IGNhdCBvZiBBcHAudGF4b25vbXlNb2R1bGUuZ2V0TWFpbk9wdGlvbkJ5U2x1ZyhtYWluT3B0aW9uU2x1Zykuc3ViY2F0ZWdvcmllcylcblx0XHRcdFx0XHRmb3IobGV0IG9wdGlvbiBvZiBjYXQub3B0aW9ucykgXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKEFwcC5sb2FkRnVsbFRheG9ub215KSBvcHRpb24udG9nZ2xlKCFhZGRpbmdNb2RlLCBmYWxzZSk7IFxuXHRcdFx0XHRcdFx0ZWxzZSBvcHRpb24udG9nZ2xlVmlzaWJpbGl0eSghYWRkaW5nTW9kZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IobGV0IGZpbHRlcklkIG9mIGZpbHRlcnMpXG5cdFx0XHR7XG5cdFx0XHRcdGxldCBvcHRpb24gPSBBcHAudGF4b25vbXlNb2R1bGUuZ2V0T3B0aW9uQnlJbnRJZChmaWx0ZXJJZCk7XG5cdFx0XHRcdGlmICghb3B0aW9uKSBjb25zb2xlLmxvZyhcIkVycm9yIGxvYWRpbmdzIGZpbHRlcnMgOiBcIiArIGZpbHRlcklkKTtcblx0XHRcdFx0ZWxzZSBcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGlmIChBcHAubG9hZEZ1bGxUYXhvbm9teSkgIG9wdGlvbi50b2dnbGUoYWRkaW5nTW9kZSwgZmFsc2UpO1xuXHRcdFx0XHRcdGlmICghQXBwLmxvYWRGdWxsVGF4b25vbXkpIG9wdGlvbi50b2dnbGVWaXNpYmlsaXR5KGFkZGluZ01vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChBcHAubG9hZEZ1bGxUYXhvbm9teSlcblx0XHRcdHtcblx0XHRcdFx0aWYgKEFwcC5jb25maWcubWVudS5zaG93T25lUGFuZVBlck1haW5PcHRpb24pXG5cdFx0XHRcdFx0aWYgKG1haW5PcHRpb25TbHVnID09ICdhbGwnKSBBcHAudGF4b25vbXlNb2R1bGUudGF4b25vbXkudXBkYXRlU3RhdGUoKTtcblx0XHRcdFx0XHRlbHNlIEFwcC50YXhvbm9teU1vZHVsZS5nZXRNYWluT3B0aW9uQnlTbHVnKG1haW5PcHRpb25TbHVnKS5yZWN1cnNpdmVseVVwZGF0ZVN0YXRlcygpO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0QXBwLnRheG9ub215TW9kdWxlLnRheG9ub215LnJlY3Vyc2l2ZWx5VXBkYXRlU3RhdGVzKCk7XG5cdFx0XHR9XG5cblx0XHRcdEFwcC5lbGVtZW50c01vZHVsZS51cGRhdGVFbGVtZW50c1RvRGlzcGxheSh0cnVlKTtcblx0XHRcdC8vQXBwLmhpc3RvcnlNb2R1bGUudXBkYXRlQ3VyclN0YXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RmlsdGVyc1RvU3RyaW5nKCkgOiBzdHJpbmdcblx0e1xuXHRcdGxldCBtYWluT3B0aW9uSWQgPSBBcHAuY3Vyck1haW5JZDtcblxuXHRcdGxldCBtYWluT3B0aW9uTmFtZTtcblx0XHRsZXQgY2hlY2tBcnJheVRvUGFyc2UsIHVuY2hlY2tBcnJheVRvUGFyc2U7XG5cdFx0XG5cdFx0aWYgKG1haW5PcHRpb25JZCA9PSAnYWxsJyAmJiBBcHAuY29uZmlnLm1lbnUuc2hvd09uZVBhbmVQZXJNYWluT3B0aW9uKVxuXHRcdHtcdFx0XHRcblx0XHRcdG1haW5PcHRpb25OYW1lID0gXCJhbGxcIjtcblx0XHRcdGNoZWNrQXJyYXlUb1BhcnNlID0gQXBwLnRheG9ub215TW9kdWxlLnRheG9ub215LmNoZWNrZWRPcHRpb25zLm1hcCggKG9wdGlvbikgPT4gb3B0aW9uLmludElkKTtcblx0XHRcdHVuY2hlY2tBcnJheVRvUGFyc2UgPSBBcHAudGF4b25vbXlNb2R1bGUudGF4b25vbXkuZGlzYWJsZWRPcHRpb25zLm1hcCggKG9wdGlvbikgPT4gb3B0aW9uLmludElkKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdGxldCBhbGxPcHRpb25zO1xuXG5cdFx0XHRpZiAoQXBwLmNvbmZpZy5tZW51LnNob3dPbmVQYW5lUGVyTWFpbk9wdGlvbilcblx0XHRcdHtcblx0XHRcdFx0bGV0IG1haW5PcHRpb24gPSBBcHAudGF4b25vbXlNb2R1bGUuZ2V0TWFpbk9wdGlvbkJ5SWQobWFpbk9wdGlvbklkKTtcblx0XHRcdFx0bWFpbk9wdGlvbk5hbWUgPSBzbHVnaWZ5KG1haW5PcHRpb24ubmFtZVNob3J0KTtcblx0XHRcdFx0YWxsT3B0aW9ucyA9IG1haW5PcHRpb24uYWxsQ2hpbGRyZW5PcHRpb25zO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRtYWluT3B0aW9uTmFtZSA9IFwiYWxsXCI7XG5cdFx0XHRcdGFsbE9wdGlvbnMgPSBBcHAudGF4b25vbXlNb2R1bGUub3B0aW9ucztcblx0XHRcdH1cdFx0XHRcdFxuXG5cdFx0XHRjaGVja0FycmF5VG9QYXJzZSA9IGFsbE9wdGlvbnMuZmlsdGVyKCAob3B0aW9uKSA9PiBvcHRpb24uaXNDaGVja2VkICkubWFwKCAob3B0aW9uKSA9PiBvcHRpb24uaW50SWQpO1xuXHRcdFx0dW5jaGVja0FycmF5VG9QYXJzZSA9IGFsbE9wdGlvbnMuZmlsdGVyKCAob3B0aW9uKSA9PiBvcHRpb24uaXNEaXNhYmxlZCApLm1hcCggKG9wdGlvbikgPT4gb3B0aW9uLmludElkKTtcdFx0XHRcblx0XHR9XG5cblx0XHRsZXQgY2hlY2tlZElkc1BhcnNlZCA9IHBhcnNlQXJyYXlOdW1iZXJJbnRvU3RyaW5nKGNoZWNrQXJyYXlUb1BhcnNlKTtcblx0XHRsZXQgdW5jaGVja2VkSWRzUGFyc2VkID0gcGFyc2VBcnJheU51bWJlckludG9TdHJpbmcodW5jaGVja0FycmF5VG9QYXJzZSk7XG5cblx0XHRsZXQgYWRkaW5nTW9kZSA9IChjaGVja2VkSWRzUGFyc2VkLmxlbmd0aCA8IHVuY2hlY2tlZElkc1BhcnNlZC5sZW5ndGgpO1xuXG5cdFx0bGV0IGFkZGluZ1N5bWJvbCA9IGFkZGluZ01vZGUgPyAnKycgOiAnISc7XG5cblx0XHRsZXQgZmlsdGVyc1N0cmluZyA9IGFkZGluZ01vZGUgPyBjaGVja2VkSWRzUGFyc2VkIDogdW5jaGVja2VkSWRzUGFyc2VkO1xuXG5cdFx0aWYgKCFhZGRpbmdNb2RlICYmIGZpbHRlcnNTdHJpbmcgPT0gXCJcIiApIHJldHVybiBtYWluT3B0aW9uTmFtZTtcblxuXHRcdHJldHVybiBtYWluT3B0aW9uTmFtZSArICdAJyArIGFkZGluZ1N5bWJvbCArIGZpbHRlcnNTdHJpbmc7XG5cdH1cbn0iLCIvKipcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHb0dvQ2FydG8gcHJvamVjdC5cbiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFXG4gKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNiBTZWJhc3RpYW4gQ2FzdHJvIC0gOTBzY2FzdHJvQGdtYWlsLmNvbVxuICogQGxpY2Vuc2UgR05VIEdQTCB2M1xuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAxNi0xMi0xM1xuICovXG5pbXBvcnQgeyBPcHRpb24sIEVsZW1lbnQsIEVsZW1lbnRNb2RlcmF0aW9uU3RhdGV9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NsYXNzZXNcIjtcblxuaW1wb3J0IHsgQXBwIH0gZnJvbSBcIi4uLy4uL2dvZ29jYXJ0b1wiO1xuZGVjbGFyZSB2YXIgJCA6IGFueTtcblxuZXhwb3J0IGNsYXNzIEZpbHRlck1vZHVsZVxue1xuXHRzaG93T25seUZhdm9yaXRlXyA6IGJvb2xlYW4gPSBmYWxzZTtcblx0c2hvd1BlbmRpbmdfIDogYm9vbGVhbiA9IHRydWU7XG5cdHNob3dPbmx5UGVuZGluZ18gOiBib29sZWFuID0gZmFsc2U7XG5cdHNob3dPbmx5TW9kZXJhdGlvbl8gOiBib29sZWFuID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IoKSB7XHR9XG5cblx0c2hvd09ubHlGYXZvcml0ZShib29sIDogYm9vbGVhbikgeyB0aGlzLnNob3dPbmx5RmF2b3JpdGVfID0gYm9vbDsgfVxuXG5cdHNob3dQZW5kaW5nKGJvb2wgOiBib29sZWFuKSB7IHRoaXMuc2hvd1BlbmRpbmdfID0gYm9vbDsgfVxuXG5cdHNob3dPbmx5UGVuZGluZyhib29sIDogYm9vbGVhbikgeyB0aGlzLnNob3dPbmx5UGVuZGluZ18gPSBib29sOyB9XG5cblx0c2hvd09ubHlNb2RlcmF0aW9uKGJvb2wgOiBib29sZWFuKSB7IHRoaXMuc2hvd09ubHlNb2RlcmF0aW9uXyA9IGJvb2w7IH1cblxuXHRjaGVja0lmRWxlbWVudFBhc3NGaWx0ZXJzKGVsZW1lbnQgOiBFbGVtZW50KSA6IGJvb2xlYW5cblx0e1xuXHRcdGlmIChlbGVtZW50Lm9wdGlvbnNWYWx1ZXMubGVuZ3RoID09IDApIHJldHVybiBmYWxzZTtcblxuXHRcdGlmICh0aGlzLnNob3dPbmx5RmF2b3JpdGVfKSByZXR1cm4gZWxlbWVudC5pc0Zhdm9yaXRlO1xuXG5cdFx0aWYgKHRoaXMuc2hvd09ubHlNb2RlcmF0aW9uXyAmJiAoIWVsZW1lbnQubmVlZHNNb2RlcmF0aW9uKCkgfHwgZWxlbWVudC5tb2RlcmF0aW9uU3RhdGUgPT0gRWxlbWVudE1vZGVyYXRpb25TdGF0ZS5Qb3NzaWJsZUR1cGxpY2F0ZSkpIHJldHVybiBmYWxzZTtcblxuXHRcdGlmIChBcHAuY29uZmlnLmlzRmVhdHVyZUF2YWlsYWJsZSgncGVuZGluZycpKVxuXHRcdHtcblx0XHRcdGlmICh0aGlzLnNob3dPbmx5UGVuZGluZ18pIHJldHVybiBlbGVtZW50LmlzUGVuZGluZygpO1xuXG5cdFx0XHRpZighdGhpcy5zaG93UGVuZGluZ18gJiYgZWxlbWVudC5pc1BlbmRpbmcoKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0aWYoZWxlbWVudC5pc1BlbmRpbmcoKSkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cdFx0XG5cblx0XHRpZiAoIUFwcC5jb25maWcubWVudS5zaG93T25lUGFuZVBlck1haW5PcHRpb24pXG5cdFx0e1xuXHRcdFx0bGV0IGNoZWNrZWRNYWluT3B0aW9ucyA9IEFwcC50YXhvbm9teU1vZHVsZS50YXhvbm9teS5ub25EaXNhYmxlZE9wdGlvbnM7XG5cdFx0XHRpZiAoY2hlY2tlZE1haW5PcHRpb25zLmxlbmd0aCA9PSAxKVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZWN1cnNpdmVseUNoZWNrZWRJbk9wdGlvbihjaGVja2VkTWFpbk9wdGlvbnNbMF0sIGVsZW1lbnQpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gY2hlY2tlZE1haW5PcHRpb25zLnNvbWUoIChtYWluT3B0aW9uKSA9PiBlbGVtZW50LmhhdmVPcHRpb24obWFpbk9wdGlvbikgfHwgdGhpcy5yZWN1cnNpdmVseUNoZWNrZWRJbk9wdGlvbihtYWluT3B0aW9uLCBlbGVtZW50KSk7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKEFwcC5jdXJyTWFpbklkID09ICdhbGwnKVxuXHRcdHtcblx0XHRcdGxldCBlbGVtZW50T3B0aW9ucyA9IGVsZW1lbnQuZ2V0T3B0aW9uVmFsdWVCeUNhdGVnb3J5SWQoIEFwcC50YXhvbm9teU1vZHVsZS50YXhvbm9teS5pZCk7XG5cdFx0XHRsZXQgY2hlY2tlZE9wdGlvbnMgPSBBcHAudGF4b25vbXlNb2R1bGUudGF4b25vbXkuY2hlY2tlZE9wdGlvbnM7XG5cblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiXFxuZWxlbWVudHNPcHRpb25zXCIsIGVsZW1lbnRPcHRpb25zLm1hcCggKHZhbHVlKSA9PiB2YWx1ZS5vcHRpb24ubmFtZSkpO1xuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJjaGVja2VkT3B0aW9uc1wiLCBjaGVja2VkT3B0aW9ucy5tYXAoICh2YWx1ZSkgPT4gdmFsdWUubmFtZSkpO1xuXG5cdFx0XHRsZXQgcmVzdWx0ID0gZWxlbWVudE9wdGlvbnMuc29tZShvcHRpb25WYWx1ZSA9PiBjaGVja2VkT3B0aW9ucy5pbmRleE9mKG9wdGlvblZhbHVlLm9wdGlvbikgPiAtMSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0IDtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdGxldCBtYWluT3B0aW9uID0gQXBwLnRheG9ub215TW9kdWxlLmdldEN1cnJNYWluT3B0aW9uKCk7XHRcdFx0XG5cdFx0XHRsZXQgaXNQYXNzaW5nRmlsdGVycyA9IHRoaXMucmVjdXJzaXZlbHlDaGVja2VkSW5PcHRpb24obWFpbk9wdGlvbiwgZWxlbWVudCk7XHRcdFx0XG5cdFx0XHRyZXR1cm4gaXNQYXNzaW5nRmlsdGVycztcblx0XHR9XHRcdFxuXHR9XG5cblx0cHJpdmF0ZSByZWN1cnNpdmVseUNoZWNrZWRJbk9wdGlvbihvcHRpb24gOiBPcHRpb24sIGVsZW1lbnQgOiBFbGVtZW50KSA6IGJvb2xlYW5cblx0e1xuXHRcdGxldCBsb2cgPSBmYWxzZTtcblxuXHRcdGlmIChsb2cpIGNvbnNvbGUubG9nKCBcIkNoZWNrIGZvciBvcHRpb24gXCIsIG9wdGlvbi5uYW1lKTtcblxuXHRcdGxldCByZXN1bHQ7XG5cdFx0aWYgKG9wdGlvbi5zdWJjYXRlZ29yaWVzLmxlbmd0aCA9PSAwIHx8IChvcHRpb24uaXNEaXNhYmxlZCAmJiAhb3B0aW9uLmlzTWFpbk9wdGlvbikgKVxuXHRcdHtcblx0XHRcdGlmIChsb2cpIGNvbnNvbGUubG9nKCBcIk5vIHN1YmNhdGVnb3JpZXMgXCIpO1xuXHRcdFx0cmVzdWx0ID0gb3B0aW9uLmlzQ2hlY2tlZCAmJiBlbGVtZW50LmhhdmVPcHRpb24ob3B0aW9uKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdHJlc3VsdCA9IG9wdGlvbi5zdWJjYXRlZ29yaWVzLmV2ZXJ5KCAoY2F0ZWdvcnkpID0+XG5cdFx0XHR7XG5cdFx0XHRcdGlmIChsb2cpIGNvbnNvbGUubG9nKFwiLS1cIiArIFwiQ2F0ZWdvcnlcIiwgY2F0ZWdvcnkubmFtZSk7XG5cblx0XHRcdFx0aWYgKCFjYXRlZ29yeS51c2VGb3JGaWx0ZXJpbmcpIHJldHVybiB0cnVlO1xuXHRcdFx0XHRsZXQgY2hlY2tlZE9wdGlvbnMgPSBjYXRlZ29yeS5jaGVja2VkT3B0aW9ucztcblx0XHRcdFx0bGV0IGVsZW1lbnRPcHRpb25zID0gZWxlbWVudC5nZXRPcHRpb25WYWx1ZUJ5Q2F0ZWdvcnlJZChjYXRlZ29yeS5pZCk7XG5cdFx0XHRcdGlmIChBcHAuY29uZmlnLm1lbnUuc2hvd09uZVBhbmVQZXJNYWluT3B0aW9uKSBlbGVtZW50T3B0aW9ucyA9IGVsZW1lbnRPcHRpb25zLmZpbHRlcigob3B0VmFsdWUpID0+IG9wdFZhbHVlLm9wdGlvbklkICE9IEFwcC5jdXJyTWFpbklkKTtcblxuXHRcdFx0XHQvLyBpZiB0aGlzIGVsZW1lbnQgZG9uJ3QgaGF2ZSBhbnkgb3B0aW9uIGluIHRoaXMgY2F0ZWdvcnksIGRvbid0IG5lZWQgdG8gY2hlY2tcblx0XHRcdFx0aWYgKGVsZW1lbnRPcHRpb25zLmxlbmd0aCA9PSAwICYmIGxvZykgY29uc29sZS5sb2coXCItLVwiICsgXCJFbGVtZW50IGRvbid0IGhhdmUgb3B0aW9ucyBpbiB0aGlzIGNhdGVnb3J5LiBDYXRnZW95ciBtYW5kYXRvcnkgPyBcIiwgY2F0ZWdvcnkuaXNNYW5kYXRvcnkpO1xuXHRcdFx0XHRpZiAoZWxlbWVudE9wdGlvbnMubGVuZ3RoID09IDApIHJldHVybiAhY2F0ZWdvcnkuaXNNYW5kYXRvcnk7XG5cblx0XHRcdFx0bGV0IGlzU29tZU9wdGlvbkluQ2F0ZWdvcnlDaGVja2VkT3B0aW9ucyA9IGVsZW1lbnRPcHRpb25zLnNvbWUob3B0aW9uVmFsdWUgPT4gY2hlY2tlZE9wdGlvbnMuaW5kZXhPZihvcHRpb25WYWx1ZS5vcHRpb24pID4gLTEpOyBcblxuXHRcdFx0XHRpZiAobG9nKSBjb25zb2xlLmxvZyhcIi0tXCIgKyBcImlzU29tZU9wdGlvbkluQ2F0ZWdvcnlDaGVja2VkT3B0aW9uc1wiLCBpc1NvbWVPcHRpb25JbkNhdGVnb3J5Q2hlY2tlZE9wdGlvbnMpO1xuXHRcdFx0XHRpZiAoaXNTb21lT3B0aW9uSW5DYXRlZ29yeUNoZWNrZWRPcHRpb25zKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdHtcdFx0XHRcdFxuXHRcdFx0XHRcdGlmIChsb2cpIGNvbnNvbGUubG9nKFwiLS1cIiArIFwiU28gd2UgY2hlY2tlZCBpbiBzdWJvcHRpb25zXCIsIGNhdGVnb3J5Lm5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBlbGVtZW50T3B0aW9ucy5zb21lKCAob3B0aW9uVmFsdWUpID0+IHRoaXMucmVjdXJzaXZlbHlDaGVja2VkSW5PcHRpb24ob3B0aW9uVmFsdWUub3B0aW9uLCBlbGVtZW50KSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAobG9nKSBjb25zb2xlLmxvZyhcIlJldHVybiBcIiwgcmVzdWx0KTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59IiwiaW1wb3J0IHsgcGFyc2VVcmlJZCB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpbmctaGVscGVyc1wiO1xuXG5leHBvcnQgY2xhc3MgVGF4b25vbXlTa29zTW9kdWxlXG57XG4gIGNvbmNlcHRzID0gW107XG5cbiAgY29udmVydFNrb3NJbnRvR29Hb1RheG9ub215KCRza29zSnNvbilcbiAge1xuICAgIHRoaXMuY29uY2VwdHMgPSAkc2tvc0pzb25bJ0BncmFwaCddO1xuICAgIGxldCByb290Q29uY2VwdHMgPSB0aGlzLmNvbmNlcHRzLmZpbHRlciggKGNvbmNlcHQpID0+ICFjb25jZXB0LmJyb2FkZXIpO1xuICAgIGxldCBjYXRlZ29yaWVzID0gW107XG5cbiAgICBmb3IobGV0IHJvb3RDb25jZXB0IG9mIHJvb3RDb25jZXB0cylcbiAgICB7XG4gICAgICBjYXRlZ29yaWVzLnB1c2godGhpcy5yb290U2tvc1RvR29Hb0NhdGVnb3J5KHJvb3RDb25jZXB0KSk7XG4gICAgfSAgXG5cbiAgICBsZXQgZ29nb1RheG9ub215ID0ge1xuICAgICAgXCJvcHRpb25zXCI6WyAgICBcbiAgICAgICAge1xuICAgICAgICAgIFwibmFtZVwiOlwiUmFjaW5lXCIsXG4gICAgICAgICAgXCJkaXNwbGF5SW5JbmZvQmFyXCI6IGZhbHNlLFxuICAgICAgICAgIFwiZGlzcGxheUluTWVudVwiOiBmYWxzZSxcbiAgICAgICAgICBcInNob3dFeHBhbmRlZFwiOiB0cnVlLFxuICAgICAgICAgIFwic3ViY2F0ZWdvcmllc1wiOiBjYXRlZ29yaWVzLFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTsgICAgIFxuXG4gICAgY29uc29sZS5sb2coXCJUYXhvbm9teSBUcmVlXCIsIGdvZ29UYXhvbm9teSk7XG4gICAgcmV0dXJuIGdvZ29UYXhvbm9teTtcbiAgfVxuXG4gIHByaXZhdGUgcm9vdFNrb3NUb0dvR29DYXRlZ29yeSgkc2tvc0pzb24pXG4gIHtcbiAgICAkc2tvc0pzb24uaWQgPSAkc2tvc0pzb25bXCJAaWRcIl07XG4gICAgJHNrb3NKc29uLm5hbWUgPSAkc2tvc0pzb25bXCJwcmVmTGFiZWxcIl07XG4gICAgJHNrb3NKc29uLmRpc3BsYXlJbk1lbnUgPSBmYWxzZTtcbiAgICAkc2tvc0pzb24uZGlzcGxheUluSW5mb0JhciA9IGZhbHNlO1xuICAgICRza29zSnNvbi5zaG93RXhwYW5kZWQgPSB0cnVlO1xuICAgICRza29zSnNvbi5zdWJvcHRpb25zID0gdGhpcy5yZWN1cnNpdmVseUNyZWF0ZVN1Yk9wdGlvbk9mKCRza29zSnNvbik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJHNrb3NKc29uW1wicHJlZkxhYmVsXCJdLFxuICAgICAgc2hvd0V4cGFuZGVkOiB0cnVlLFxuICAgICAgaXNSb290Q2F0ZWdvcnk6IHRydWUsXG4gICAgICB1bmV4cGFuZGFibGU6IHRydWUsXG4gICAgICBvcHRpb25zIDogWyRza29zSnNvbl1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFN1YkNvbmNlcHRPZihjb25jZXB0SWQpXG4gIHtcbiAgICByZXR1cm4gdGhpcy5jb25jZXB0cy5maWx0ZXIoIChjb25jZXB0KSA9PiBjb25jZXB0LmJyb2FkZXIgPT0gY29uY2VwdElkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjdXJzaXZlbHlDcmVhdGVTdWJPcHRpb25PZihjdXJyZW50Q29uY2VwdClcbiAge1xuICAgIGxldCBzdWJDb25jZXB0c1RvQWRkID0gdGhpcy5nZXRTdWJDb25jZXB0T2YoY3VycmVudENvbmNlcHRbJ0BpZCddKTtcbiAgICBsZXQgb3B0aW9ucyA9IFtdO1xuICAgIGZvcihsZXQgY29uY2VwdCBvZiBzdWJDb25jZXB0c1RvQWRkKSBcbiAgICB7XG4gICAgICBsZXQgZ29nb05vZGUgPSB0aGlzLnNrb3NUb0dvR29PcHRpb24oY29uY2VwdCk7XG4gICAgICBsZXQgc3Vib3B0aW9ucyA9IHRoaXMucmVjdXJzaXZlbHlDcmVhdGVTdWJPcHRpb25PZihjb25jZXB0KTtcbiAgICAgIGlmIChzdWJvcHRpb25zLmxlbmd0aCA+IDApIGdvZ29Ob2RlLnN1Ym9wdGlvbnMgPSBzdWJvcHRpb25zO1xuICAgICAgb3B0aW9ucy5wdXNoKGdvZ29Ob2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIHNrb3NUb0dvR29PcHRpb24oJHNrb3NKc29uKSBcbiAge1xuICAgICRza29zSnNvbi5pZCA9IHBhcnNlVXJpSWQoJHNrb3NKc29uW1wiQGlkXCJdKTtcbiAgICAkc2tvc0pzb24ubmFtZSA9ICRza29zSnNvbltcInByZWZMYWJlbFwiXTsgICAgXG4gICAgcmV0dXJuICRza29zSnNvbjtcbiAgfVxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTEyLTEzXG4gKi9cblxuaW1wb3J0IHsgQXBwTW9kdWxlLCBBcHBTdGF0ZXMsIEFwcE1vZGVzIH0gZnJvbSBcIi4uLy4uL2FwcC5tb2R1bGVcIjtcbmltcG9ydCB7IE9wdGlvbiwgQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jbGFzc2VzXCI7XG5leHBvcnQgeyBPcHRpb24sIENhdGVnb3J5IH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY2xhc3Nlc1wiO1xuaW1wb3J0IHsgc2x1Z2lmeSB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmluZy1oZWxwZXJzJztcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi8uLi9nb2dvY2FydG9cIjtcbmRlY2xhcmUgbGV0ICQgOiBhbnk7XG5cblxuZXhwb3J0IGNsYXNzIFRheG9ub215TW9kdWxlXG57XG5cdGNhdGVnb3JpZXMgOiBDYXRlZ29yeVtdID0gW107XG5cdG9wdGlvbnMgOiBPcHRpb25bXSA9IFtdO1xuXG5cdC8vIHRoZSBmdWxsIGhpZXJhY2hpYyB0YXhvbm9teVxuXHR0YXhvbm9teSA6IENhdGVnb3J5O1xuXHRcblx0cm9vdENhdGVnb3JpZXMgOiBDYXRlZ29yeVtdO1xuXG5cdGNhdGVnb3JpZXNDcmVhdGVkQ291bnQgOiBudW1iZXIgPSAxO1xuXHRvcHRpb25zQ3JlYXRlZENvdW50IDogbnVtYmVyID0gMTtcblxuXHRjb25zdHJ1Y3RvcigpIFxuXHR7XG5cdFx0dGhpcy5vcHRpb25zID0gW107XG5cdFx0dGhpcy5jYXRlZ29yaWVzID0gW107XG5cdH1cblxuXHRjcmVhdGVUYXhvbm9teUZyb21Kc29uKHRheG9ub215SnNvbilcblx0e1xuXHRcdGxldCBpc1Nrb3NUYXhvbm9teSA9IHRheG9ub215SnNvblsnQGdyYXBoJ107XG5cdFx0aWYgKGlzU2tvc1RheG9ub215KSB0YXhvbm9teUpzb24gPSBBcHAudGF4b25vbXlTa29zTW9kdWxlLmNvbnZlcnRTa29zSW50b0dvR29UYXhvbm9teSh0YXhvbm9teUpzb24pO1xuXHRcdFxuXHRcdGlmIChBcnJheS5pc0FycmF5KHRheG9ub215SnNvbikgJiYgdGF4b25vbXlKc29uLmxlbmd0aCA9PSAxKSB0YXhvbm9teUpzb24gPSB0YXhvbm9teUpzb25bMF07XG5cdFx0XG5cdFx0Ly8gSWYgbXVsdGlwbGUgcm9vdCBjYXRlZ29yaWVzLCB3ZSBlbmNhcHN1bGF0ZSB0aGVtIGludG8gYSBzaW5nbGUgZmFrZSBjYXRlZ29yeSAmIHJvb3Qgb3B0aW9uXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodGF4b25vbXlKc29uKSAmJiB0YXhvbm9teUpzb24ubGVuZ3RoID4gMSkge1xuXHRcdFx0Zm9yIChsZXQganNvbiBvZiB0YXhvbm9teUpzb24pIGpzb24uaXNSb290Q2F0ZWdvcnkgPSB0cnVlO1xuXHRcdFx0dGF4b25vbXlKc29uID0ge1xuXHQgICAgICBcIm9wdGlvbnNcIjpbICAgIFxuXHQgICAgICAgIHtcblx0ICAgICAgICAgIFwibmFtZVwiOlwiUm9vdEZha2VPcHRpb25cIixcblx0ICAgICAgICAgIFwiZGlzcGxheUluSW5mb0JhclwiOiBmYWxzZSxcblx0ICAgICAgICAgIFwiZGlzcGxheUluTWVudVwiOiBmYWxzZSxcblx0ICAgICAgICAgIFwic2hvd0V4cGFuZGVkXCI6IHRydWUsXG5cdCAgICAgICAgICBcInN1YmNhdGVnb3JpZXNcIjogdGF4b25vbXlKc29uLFxuXHQgICAgICAgIH1cblx0ICAgICAgXVxuXHQgICAgfTtcdCAgICBcblx0XHR9XG5cdFx0ZWxzZSBpZiAoIWlzU2tvc1RheG9ub215KSB0YXhvbm9teUpzb24uaXNSb290Q2F0ZWdvcnkgPSB0cnVlO1xuXG5cdFx0dGhpcy50YXhvbm9teSA9IHRoaXMucmVjdXJzaXZlbHlDcmVhdGVDYXRlZ29yeUFuZE9wdGlvbnModGF4b25vbXlKc29uKTtcblx0XHR0aGlzLnJvb3RDYXRlZ29yaWVzID0gdGhpcy5maW5kUm9vdENhdGVnb3JpZXMoKTtcblx0XHRmb3IobGV0IG9wdGlvbiBvZiB0aGlzLm1haW5DYXRlZ29yeS5jaGlsZHJlbikgb3B0aW9uLmlzTWFpbk9wdGlvbiA9IHRydWU7XG5cdFx0XG5cdFx0aWYgKHRoaXMucm9vdENhdGVnb3JpZXMubGVuZ3RoID4gMSlcblx0XHRcdGZvcihsZXQgcm9vdENhdGVnb3J5IG9mIHRoaXMucm9vdENhdGVnb3JpZXMpIHRoaXMucmVjdXJzaXZlbHlDYWxjdWxhdGVQYXJlbnRzT3B0aW9uSWRzKHJvb3RDYXRlZ29yeSwgdGhpcy50YXhvbm9teS5vcHRpb25zWzBdKTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLnJlY3Vyc2l2ZWx5Q2FsY3VsYXRlUGFyZW50c09wdGlvbklkcyh0aGlzLm1haW5DYXRlZ29yeSk7XG5cdH1cdFxuXG5cdHByaXZhdGUgZmluZFJvb3RDYXRlZ29yaWVzKCkgOiBDYXRlZ29yeVtdXG5cdHtcblx0XHRpZiAodGhpcy50YXhvbm9teS5kaXNwbGF5SW5NZW51KSByZXR1cm4gW3RoaXMudGF4b25vbXldO1xuXHRcdHJldHVybiB0aGlzLnRheG9ub215Lm9wdGlvbnNbMF0uc3ViY2F0ZWdvcmllcztcblx0fVxuXG5cdHByaXZhdGUgcmVjdXJzaXZlbHlDcmVhdGVDYXRlZ29yeUFuZE9wdGlvbnMoY2F0ZWdvcnlKc29uIDogYW55KSA6IENhdGVnb3J5XG5cdHtcblx0XHRyZXR1cm4gdGhpcy5yZWN1cnNpdmVseUNyZWF0ZUNhdGVnb3J5KGNhdGVnb3J5SnNvbik7XG5cdH1cblxuXHRwcml2YXRlIHJlY3Vyc2l2ZWx5Q3JlYXRlQ2F0ZWdvcnkoY2F0ZWdvcnlKc29uIDogYW55KSA6IENhdGVnb3J5XG5cdHtcblx0XHRpZiAoIWNhdGVnb3J5SnNvbi5pZCkgY2F0ZWdvcnlKc29uLmlkID0gdGhpcy5jYXRlZ29yaWVzQ3JlYXRlZENvdW50Kys7XG5cdFx0XG5cdFx0bGV0IGNhdGVnb3J5ID0gbmV3IENhdGVnb3J5KGNhdGVnb3J5SnNvbik7XG5cblx0XHRpZiAoY2F0ZWdvcnlKc29uLm9wdGlvbnMpXG5cdFx0XHRmb3IobGV0IG9wdGlvbkpzb24gb2YgY2F0ZWdvcnlKc29uLm9wdGlvbnMpIHRoaXMucmVjdXJzaXZlbHlDcmVhdGVPcHRpb24ob3B0aW9uSnNvbiwgY2F0ZWdvcnkpXG5cdFx0ZWxzZSBpZiAoY2F0ZWdvcnlKc29uLnN1YmNhdGVnb3JpZXMpXG5cdFx0XHR0aGlzLnJlY3Vyc2l2ZWx5Q3JlYXRlT3B0aW9uKHtzdWJjYXRlZ29yaWVzOiBjYXRlZ29yeUpzb24uc3ViY2F0ZWdvcmllcywgc2hvd0V4cGFuZGVkOiB0cnVlLCBkaXNwbGF5SW5NZW51OiBmYWxzZSwgZGlzcGxheUluSW5mb0JhcjogZmFsc2V9LCBjYXRlZ29yeSlcblxuXHRcdHRoaXMuY2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcblxuXHRcdHJldHVybiBjYXRlZ29yeTtcblx0fVxuXG5cdHByaXZhdGUgcmVjdXJzaXZlbHlDcmVhdGVPcHRpb24ob3B0aW9uSnNvbiA6IGFueSwgcGFyZW50Q2F0Z2VvcnkgOiBDYXRlZ29yeSlcblx0e1xuXHRcdG9wdGlvbkpzb24uaW50SWQgPSB0aGlzLm9wdGlvbnNDcmVhdGVkQ291bnQrKztcblx0XHRsZXQgb3B0aW9uID0gbmV3IE9wdGlvbihvcHRpb25Kc29uKTtcblx0XHRvcHRpb24ub3duZXJJZCA9IHBhcmVudENhdGdlb3J5LmlkO1xuXG5cdFx0aWYgKG9wdGlvbkpzb24uc3ViY2F0ZWdvcmllcylcblx0XHRcdGZvcihsZXQgc3ViY2F0ZWdvcnlKc29uIG9mIG9wdGlvbkpzb24uc3ViY2F0ZWdvcmllcylcblx0XHRcdHtcdFx0XHRcdFxuXHRcdFx0XHRsZXQgc3ViY2F0ZWdvcnkgPSB0aGlzLnJlY3Vyc2l2ZWx5Q3JlYXRlQ2F0ZWdvcnlBbmRPcHRpb25zKHN1YmNhdGVnb3J5SnNvbik7XG5cdFx0XHRcdHN1YmNhdGVnb3J5Lm93bmVySWQgPSBvcHRpb24uaWQ7XG5cdFx0XHRcdG9wdGlvbi5hZGRDYXRlZ29yeShzdWJjYXRlZ29yeSk7XG5cdFx0XHR9XG5cdFx0ZWxzZSBpZiAob3B0aW9uSnNvbi5zdWJvcHRpb25zKVxuXHRcdHtcblx0XHRcdGxldCBzdWJjYXRlZ29yeSA9IHRoaXMucmVjdXJzaXZlbHlDcmVhdGVDYXRlZ29yeUFuZE9wdGlvbnMoe29wdGlvbnM6IG9wdGlvbkpzb24uc3Vib3B0aW9ucywgc2hvd0V4cGFuZGVkOiBvcHRpb25Kc29uLnNob3dFeHBhbmRlZH0pO1xuXHRcdFx0c3ViY2F0ZWdvcnkub3duZXJJZCA9IG9wdGlvbi5pZDtcblx0XHRcdG9wdGlvbi5hZGRDYXRlZ29yeShzdWJjYXRlZ29yeSk7XG5cdFx0fVxuXG5cdFx0cGFyZW50Q2F0Z2VvcnkuYWRkT3B0aW9uKG9wdGlvbik7XHRcblx0XHR0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pO1x0XG5cdH1cblxuXHQvLyBXZSB3YW50IGV2ZXJ5IG9wdGlvbiB0byBrbm93IGFsbCB0aG9zZSBwYXJlbnRzIE9wdGlvbiBpZHNcblx0Ly8gdGhpcyBtZXRob2QgY2FsY3VsYXRlIHRob3NlIGZvciBhbGwgb3B0aW9uc1xuXHRwcml2YXRlIHJlY3Vyc2l2ZWx5Q2FsY3VsYXRlUGFyZW50c09wdGlvbklkcyhjYXRlZ29yeTogQ2F0ZWdvcnksIHBhcmVudE9wdGlvbiA6IE9wdGlvbiA9IG51bGwpXG5cdHtcblx0XHRmb3IobGV0IG9wdGlvbiBvZiBjYXRlZ29yeS5jaGlsZHJlbilcblx0XHR7XG5cdFx0XHRpZiAob3B0aW9uLmlzTWFpbk9wdGlvbiB8fCBwYXJlbnRPcHRpb24gPT09IG51bGwpIG9wdGlvbi5tYWluT3duZXJJZCA9IFwiYWxsXCI7XG5cdFx0XHRlbHNlIGlmIChwYXJlbnRPcHRpb24uaXNNYWluT3B0aW9uKSBvcHRpb24ubWFpbk93bmVySWQgPSBwYXJlbnRPcHRpb24uaWQ7XG5cdFx0XHRlbHNlIG9wdGlvbi5tYWluT3duZXJJZCA9IHBhcmVudE9wdGlvbi5tYWluT3duZXJJZDtcblxuXHRcdFx0aWYgKHBhcmVudE9wdGlvbikgKDxPcHRpb24+b3B0aW9uKS5wYXJlbnRPcHRpb25JZHMgPSBwYXJlbnRPcHRpb24ucGFyZW50T3B0aW9uSWRzLmNvbmNhdChbcGFyZW50T3B0aW9uLmlkXSk7XG5cblx0XHRcdGZvcihsZXQgc3ViY2F0ZWdvcnkgb2Ygb3B0aW9uLmNoaWxkcmVuKVxuXHRcdFx0e1x0XHRcdFx0XG5cdFx0XHRcdHRoaXMucmVjdXJzaXZlbHlDYWxjdWxhdGVQYXJlbnRzT3B0aW9uSWRzKDxDYXRlZ29yeT5zdWJjYXRlZ29yeSwgPE9wdGlvbj5vcHRpb24pO1xuXHRcdFx0fVx0XHRcdFxuXHRcdH1cblx0fVxuXG5cdGdldE1haW5PcHRpb25zKCkgOiBPcHRpb25bXVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMubWFpbkNhdGVnb3J5Lm9wdGlvbnM7XG5cdH1cblxuXHRnZXRNYWluT3B0aW9uc0lkc1dpdGhBbGwoKSA6IGFueVtdXG5cdHtcblx0XHRsZXQgb3B0aW9uSWRzIDogYW55W10gPSB0aGlzLmdldE1haW5PcHRpb25zSWRzKCk7XG5cdFx0b3B0aW9uSWRzLnB1c2goXCJhbGxcIik7XG5cdFx0cmV0dXJuIG9wdGlvbklkcztcblx0fVxuXG5cdGdldE1haW5PcHRpb25zSWRzKCkgOiBudW1iZXJbXVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TWFpbk9wdGlvbnMoKS5tYXAoIChvcHRpb24pID0+IG9wdGlvbi5pZCk7XG5cdH1cblxuXHRnZXRDdXJyTWFpbk9wdGlvbigpIDogT3B0aW9uXG5cdHtcblx0XHRyZXR1cm4gQXBwLmN1cnJNYWluSWQgPT0gJ2FsbCcgPyBudWxsIDogdGhpcy5nZXRNYWluT3B0aW9uQnlJZChBcHAuY3Vyck1haW5JZCk7XG5cdH1cblxuXHRnZXRNYWluT3B0aW9uQnlTbHVnKCRzbHVnKSA6IE9wdGlvblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TWFpbk9wdGlvbnMoKS5maWx0ZXIoIChvcHRpb24gOiBPcHRpb24pID0+IHNsdWdpZnkob3B0aW9uLm5hbWVTaG9ydCkgPT0gJHNsdWcpLnNoaWZ0KCk7XG5cdH1cblxuXHRnZXRNYWluT3B0aW9uQnlJZCAoJGlkKSA6IE9wdGlvblxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TWFpbk9wdGlvbnMoKS5maWx0ZXIoIChvcHRpb24gOiBPcHRpb24pID0+IG9wdGlvbi5pZCA9PSAkaWQpLnNoaWZ0KCk7XG5cdH07XG5cblx0Z2V0Q2F0ZWdvcnlCeUlkICgkaWQpIDogQ2F0ZWdvcnlcblx0e1xuXHRcdHJldHVybiB0aGlzLmNhdGVnb3JpZXMuZmlsdGVyKCAoY2F0ZWdvcnkgOiBDYXRlZ29yeSkgPT4gY2F0ZWdvcnkuaWQgPT0gJGlkKS5zaGlmdCgpO1xuXHR9O1xuXG5cdGdldE9wdGlvbkJ5SWQgKCRpZCkgOiBPcHRpb25cblx0e1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnMuZmlsdGVyKCAob3B0aW9uIDogT3B0aW9uKSA9PiBvcHRpb24uaWQgPT0gJGlkKS5zaGlmdCgpO1xuXHR9O1xuXG5cdGdldE9wdGlvbkJ5SW50SWQgKCRpZCkgOiBPcHRpb25cblx0e1xuXHRcdHJldHVybiB0aGlzLm9wdGlvbnMuZmlsdGVyKCAob3B0aW9uIDogT3B0aW9uKSA9PiBvcHRpb24uaW50SWQgPT0gJGlkKS5zaGlmdCgpO1xuXHR9O1xuXG5cdGdldEN1cnJPcHRpb25zKCkgOiBPcHRpb25bXVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoIChvcHRpb24gOiBPcHRpb24pID0+IG9wdGlvbi5tYWluT3duZXJJZCA9PSBBcHAuY3Vyck1haW5JZCk7XG5cdH1cblxuXHRnZXRSb290Q2F0ZWdvcmllcygpIDogQ2F0ZWdvcnlbXVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuY2F0ZWdvcmllcy5maWx0ZXIoIChjYXRlZ29yeSA6IENhdGVnb3J5KSA9PiBjYXRlZ29yeS5pc1Jvb3RDYXRlZ29yeSk7XG5cdH1cblxuXHQvLyB0aGUgbWFpbiBjYXRlZ29yeSA6IGkuZS4gdGhlIGZpcnN0IHJvb3QgY2F0ZWdvcnkgKGNvdWxkIGhhdmUgbWFueSByb290IGNhdGVnb3JpZXMpIFxuXHRnZXQgbWFpbkNhdGVnb3J5KCkgeyByZXR1cm4gdGhpcy5yb290Q2F0ZWdvcmllc1swXTsgfVxufSIsIi8qKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdvR29DYXJ0byBwcm9qZWN0LlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE2IFNlYmFzdGlhbiBDYXN0cm8gLSA5MHNjYXN0cm9AZ21haWwuY29tXG4gKiBAbGljZW5zZSBHTlUgR1BMIHYzXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDE2LTA4LTMxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb29raWUobmFtZSwgdmFsdWUsIGRheXMgPSAxMDApIFxue1xuXHRsZXQgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSsoZGF5cyoyNCo2MCo2MCoxMDAwKSk7XG5cdGxldCBleHBpcmVzID0gXCI7IGV4cGlyZXM9XCIrZGF0ZS50b1VUQ1N0cmluZygpO1xuXHRcblx0ZG9jdW1lbnQuY29va2llID0gbmFtZStcIj1cIit2YWx1ZStleHBpcmVzK1wiOyBwYXRoPS9cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDb29raWUobmFtZSkge1xuXHRsZXQgbmFtZUVRID0gbmFtZSArIFwiPVwiO1xuXHRsZXQgY2EgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcblx0Zm9yKGxldCBpPTA7aSA8IGNhLmxlbmd0aDtpKyspIHtcblx0XHRsZXQgYyA9IGNhW2ldO1xuXHRcdHdoaWxlIChjLmNoYXJBdCgwKSA9PSAnICcpIGMgPSBjLnN1YnN0cmluZygxLGMubGVuZ3RoKTtcblx0XHRpZiAoYy5pbmRleE9mKG5hbWVFUSkgPT09IDApIHJldHVybiBjLnN1YnN0cmluZyhuYW1lRVEubGVuZ3RoLGMubGVuZ3RoKTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVyYXNlQ29va2llKG5hbWUpIHtcblx0Y3JlYXRlQ29va2llKG5hbWUsXCJcIik7XG59IiwiZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXJ5UGFyYW1zKHFzKSBcbntcbiAgcXMgPSBxcy5zcGxpdChcIitcIikuam9pbihcIiBcIik7XG4gIHZhciBwYXJhbXMgPSB7fSxcbiAgICAgIHRva2VucyxcbiAgICAgIHJlID0gL1s/Jl0/KFtePV0rKT0oW14mXSopL2c7XG5cbiAgd2hpbGUgKCh0b2tlbnMgPSByZS5leGVjKHFzKSkpIHtcbiAgICAgIHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQodG9rZW5zWzFdKV0gPSBkZWNvZGVVUklDb21wb25lbnQodG9rZW5zWzJdKTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXM7XG59IiwiZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXJyYXlOdW1iZXJJbnRvU3RyaW5nKGFycmF5IDogbnVtYmVyW10pIDogc3RyaW5nXG57XG4gIGxldCByZXN1bHQgID0gJyc7XG4gIGxldCBpID0gMDtcblxuICBmb3IobGV0IG51bWJlciBvZiBhcnJheSlcbiAge1xuICAgIGlmIChudW1iZXIpXG4gICAge1xuICAgICAgICBpZiAoaSAlIDIgPT0gMCkgcmVzdWx0ICs9IHBhcnNlTnVtYmVyVG9TdHJpbmcobnVtYmVyKTtcbiAgICAgICAgZWxzZSByZXN1bHQgKz0gbnVtYmVyLnRvU3RyaW5nKCk7XG4gICAgICAgIGkrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBwYXJzZU51bWJlclRvU3RyaW5nKG51bWJlciA6IG51bWJlcikgOiBzdHJpbmdcbnsgIFxuICBsZXQgYmFzZTI2ID0gbnVtYmVyLnRvU3RyaW5nKDI2KTtcbiAgbGV0IGkgPSAwOyBcbiAgbGV0IGxlbmd0aCA9IGJhc2UyNi5sZW5ndGg7XG5cbiAgbGV0IHJlc3VsdCA9ICcnO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgXG4gIHtcbiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg5NiArIHBhcnNlSW50KGJhc2UyNltpXSwyNikpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcGFyc2VTdHJpbmdUb051bWJlcihzdHJpbmcgOiBzdHJpbmcpIDogbnVtYmVyXG57ICBcbiAgbGV0IGkgPSAwOyBcbiAgbGV0IGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG5cbiAgbGV0IHJlc3VsdCA9IDA7XG5cbiAgZm9yIChpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIFxuICB7XG4gICAgcmVzdWx0ICs9IChzdHJpbmcuY2hhckNvZGVBdChpKSAtIDk2KSAqIE1hdGgucG93KDI2LCBsZW5ndGggLSBpIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHJpbmdJbnRvQXJyYXlOdW1iZXIoc3RyaW5nIDogc3RyaW5nKSA6IG51bWJlcltdXG57XG4gIGxldCByZXN1bHQgOiBudW1iZXJbXSA9IFtdO1xuXG4gIGlmICghc3RyaW5nKSByZXR1cm4gcmVzdWx0O1xuXG4gIGxldCBhcnJheSA9IHN0cmluZy5tYXRjaCgvW2Etel0rfFswLTldKy9nKTtcblxuICBmb3IobGV0IGVsZW1lbnQgb2YgYXJyYXkpXG4gIHtcbiAgICBpZiAocGFyc2VJbnQoZWxlbWVudCkpIHJlc3VsdC5wdXNoKHBhcnNlSW50KGVsZW1lbnQpKTtcbiAgICBlbHNlIHJlc3VsdC5wdXNoKHBhcnNlU3RyaW5nVG9OdW1iZXIoZWxlbWVudCkpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn0iLCJleHBvcnQgZnVuY3Rpb24gc2x1Z2lmeSh0ZXh0KSA6IHN0cmluZ1xue1xuICBpZiAoIXRleHQpIHJldHVybiAnJztcbiAgdmFyIGZyb20gPSBcIsOjw6DDocOkw6Lhur3DqMOpw6vDqsOsw63Dr8Ouw7XDssOzw7bDtMO5w7rDvMO7w7HDp8K3L18sOjtcIjtcbiAgdmFyIHRvICAgPSBcImFhYWFhZWVlZWVpaWlpb29vb291dXV1bmMtLS0tLS1cIjtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGZyb20ubGVuZ3RoOyBpIDwgbGVuOyBpKyspXG4gIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoZnJvbS5jaGFyQXQoaSksICdnJyksIHRvLmNoYXJBdChpKSk7XG4gIH1cbiAgcmV0dXJuIHRleHRcbiAgICAgIC50b1N0cmluZygpICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdCB0byBzdHJpbmdcbiAgICAgIC8vIC50b0xvd2VyQ2FzZSgpICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgc3RyaW5nIHRvIGxvd2VyY2FzZSBsZXR0ZXJzXG4gICAgICAudHJpbSgpICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB3aGl0ZXNwYWNlIGZyb20gYm90aCBzaWRlcyBvZiBhIHN0cmluZ1xuICAgICAgLnJlcGxhY2UoL1xccysvZywgJy0nKSAgICAgICAgICAgLy8gUmVwbGFjZSBzcGFjZXMgd2l0aCAtXG4gICAgICAucmVwbGFjZSgvJi9nLCAnLXktJykgICAgICAgICAgIC8vIFJlcGxhY2UgJiB3aXRoICdhbmQnXG4gICAgICAucmVwbGFjZSgvW15cXHdcXC1dKy9nLCAnJykgICAgICAgLy8gUmVtb3ZlIGFsbCBub24td29yZCBjaGFyc1xuICAgICAgLnJlcGxhY2UoL1xcLVxcLSsvZywgJy0nKTsgICAgICAgIC8vIFJlcGxhY2UgbXVsdGlwbGUgLSB3aXRoIHNpbmdsZSAtXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNsdWdpZnkodGV4dCA6IHN0cmluZykgOiBzdHJpbmdcbntcbiAgaWYgKCF0ZXh0KSByZXR1cm4gJyc7XG4gIHJldHVybiB0ZXh0LnRvU3RyaW5nKCkucmVwbGFjZSgvXFwtKy9nLCAnICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZSh0ZXh0IDogc3RyaW5nKSA6IHN0cmluZ1xue1xuICBpZiAoIXRleHQpIHJldHVybiBcIlwiO1xuICByZXR1cm4gdGV4dC5sZW5ndGggPiAxID8gdGV4dC5zdWJzdHIoMCwxKS50b1VwcGVyQ2FzZSgpK3RleHQuc3Vic3RyKDEsdGV4dC5sZW5ndGgpIDogdGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXJpSWQoJHVyaUlkIDogc3RyaW5nKSA6IHN0cmluZ1xue1xuICBpZiAoISR1cmlJZCkgcmV0dXJuIFwiXCI7XG4gIGxldCBzcGxpdGVkID0gJHVyaUlkLnRvU3RyaW5nKCkuc3BsaXQoJy8nKTtcbiAgcmV0dXJuIHNwbGl0ZWRbc3BsaXRlZC5sZW5ndGggLSAxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0TG9uZ1RleHQodGV4dCA6IHN0cmluZywgbGVuZ3RoIDogbnVtYmVyLCBzaXplIDogbnVtYmVyID0gNTApIFxue1xuICAvLyBpZiB0aGUgdGV4dCBpcyBqdXN0IGEgYml0IGxvbmdlciB0aGFuIHRoZSBsZW5ndGgsIHdlIGN1dCBpdCBtb3JlIHNvIHRoZSB0ZXh0MiBpcyBub3Qgc28gc2hvcnRcbiAgaWYgKHRleHQubGVuZ3RoIDwgbGVuZ3RoICsgc2l6ZSkge1xuICAgIGxlbmd0aCA9IGxlbmd0aCAtIHNpemU7XG4gIH1cbiAgbGV0IHN0YXJ0T2Zmc2V0ID0gbGVuZ3RoIC0gc2l6ZTtcbiAgbGV0IG9mZnNldCA9IHRleHQuc2xpY2Uoc3RhcnRPZmZzZXQsIGxlbmd0aCkuc3BsaXQoL1xcLnwhfFxcPy9nKVswXS5sZW5ndGg7XG4gIGlmIChvZmZzZXQgPT0gc2l6ZSkgb2Zmc2V0ID0gdGV4dC5zbGljZShzdGFydE9mZnNldCwgbGVuZ3RoKS5zcGxpdCgnICcpWzBdLmxlbmd0aDtcbiAgb2Zmc2V0ICs9IHN0YXJ0T2Zmc2V0ICsgMTtcbiAgbGV0IHRleHQxID0gdGV4dC5zbGljZSgwLCBvZmZzZXQpO1xuICBsZXQgdGV4dDIgPSB0ZXh0LnNsaWNlKG9mZnNldCk7XG4gIHJldHVybiB7IGZpcnN0OiB0ZXh0MSwgc2Vjb25kOiB0ZXh0MiB9O1xufSJdfQ==
diff --git a/dist/gogocarto.min.css b/dist/gogocarto.min.css
index dbaf007..642c141 100755
--- a/dist/gogocarto.min.css
+++ b/dist/gogocarto.min.css
@@ -1,8 +1,8 @@
-@charset "UTF-8";/*! normalize.css v3.0.2 | MIT License | git.io/normalize */img,legend{border:0}legend,td,th{padding:0}.gogo-load-css table.centered tbody tr td,.gogo-load-css table.centered thead tr th,.material-tooltip{text-align:center}.gogo-load-css .gogocarto-container .leaflet-routing-alt table,table{border-collapse:collapse}.gogo-load-css ul,.gogo-load-css ul li{list-style-type:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;box-sizing:border-box}*,:after,:before{box-sizing:inherit}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}table{border-spacing:0}#toast-container{display:block;position:fixed;z-index:10000}@media only screen and (max-width:600px){#toast-container{min-width:100%;bottom:0}}.toast{border-radius:2px;top:0;width:auto;clear:both;margin-top:10px;position:relative;max-width:100%;height:48px;line-height:48px;background-color:#323232;padding:0 25px;font-size:1.1rem;font-weight:300;color:#fff;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}.backdrop,.material-tooltip{position:absolute;opacity:0}.gogo-load-css .toast .btn-large,.toast .btn,.toast .btn-flat,.toast .gogo-load-css .btn-large{margin:0 0 0 3rem}.toast.rounded{border-radius:24px}@media only screen and (max-width:600px){.toast{width:100%;border-radius:0}}@media only screen and (min-width:601px) and (max-width:1200px){#toast-container{min-width:30%;right:5%;bottom:7%}.toast{float:left}}@media only screen and (min-width:1201px){#toast-container{min-width:8%;bottom:10%;right:7%}.toast{float:right}}.material-tooltip{padding:10px 8px;font-size:1rem;z-index:5000;background-color:transparent;border-radius:3px;color:#fff;min-height:36px;line-height:1rem;display:none;overflow:hidden;left:0;top:0;will-change:top,left}@media only screen and (max-width:600px){.material-tooltip{display:none!important}}.backdrop{display:none;height:7px;width:14px;border-radius:0 0 14px 14px;background-color:#323232;z-index:-1;-webkit-transform-origin:50% 10%;-moz-transform-origin:50% 10%;-ms-transform-origin:50% 10%;-o-transform-origin:50% 10%;transform-origin:50% 10%;will-change:transform,opacity}.lean-overlay{position:fixed;z-index:999;top:-100px;left:0;bottom:0;right:0;height:125%;width:100%;background:#000;display:none}.gogo-load-css{/*!
+@charset "UTF-8";/*! normalize.css v3.0.2 | MIT License | git.io/normalize */img,legend{border:0}legend,td,th{padding:0}.gogo-load-css table.centered tbody tr td,.gogo-load-css table.centered thead tr th,.material-tooltip{text-align:center}.gogo-load-css .gogocarto-container .leaflet-routing-alt table,table{border-collapse:collapse}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;box-sizing:border-box}*,:after,:before{box-sizing:inherit}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}table{border-spacing:0}#toast-container{display:block;position:fixed;z-index:10000}@media only screen and (max-width:600px){#toast-container{min-width:100%;bottom:0}}.toast{border-radius:2px;top:0;width:auto;clear:both;margin-top:10px;position:relative;max-width:100%;height:48px;line-height:48px;background-color:#323232;padding:0 25px;font-size:1.1rem;font-weight:300;color:#fff;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;-webkit-justify-content:space-between;justify-content:space-between}.backdrop,.material-tooltip{position:absolute;opacity:0}.gogo-load-css .toast .btn-large,.toast .btn,.toast .btn-flat,.toast .gogo-load-css .btn-large{margin:0 0 0 3rem}.toast.rounded{border-radius:24px}@media only screen and (max-width:600px){.toast{width:100%;border-radius:0}}@media only screen and (min-width:601px) and (max-width:1200px){#toast-container{min-width:30%;right:5%;bottom:7%}.toast{float:left}}@media only screen and (min-width:1201px){#toast-container{min-width:8%;bottom:10%;right:7%}.toast{float:right}}.material-tooltip{padding:10px 8px;font-size:1rem;z-index:5000;background-color:transparent;border-radius:3px;color:#fff;min-height:36px;line-height:1rem;display:none;overflow:hidden;left:0;top:0;will-change:top,left}@media only screen and (max-width:600px){.material-tooltip{display:none!important}}.backdrop{display:none;height:7px;width:14px;border-radius:0 0 14px 14px;background-color:#323232;z-index:-1;-webkit-transform-origin:50% 10%;-moz-transform-origin:50% 10%;-ms-transform-origin:50% 10%;-o-transform-origin:50% 10%;transform-origin:50% 10%;will-change:transform,opacity}.lean-overlay{position:fixed;z-index:999;top:-100px;left:0;bottom:0;right:0;height:125%;width:100%;background:#000;display:none}.gogo-load-css{/*!
* Waves v0.6.0
* http://fian.my.id/Waves
*
* Copyright 2014 Alfiana E. Sibuea and other contributors
* Released under the MIT license
* https://github.com/fians/Waves/blob/master/LICENSE
- */height:100%;width:100%}.gogo-load-css ul{padding:0}.gogo-load-css a{color:#26A69A;-webkit-tap-highlight-color:transparent;text-decoration:none}.gogo-load-css .valign-wrapper{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.gogo-load-css .valign-wrapper .valign{display:block}.gogo-load-css .clearfix{clear:both}.gogo-load-css .z-depth-0{box-shadow:none!important}.gogo-load-css .btn,.gogo-load-css .btn-floating,.gogo-load-css .btn-large,.gogo-load-css .collapsible,.gogo-load-css .dropdown-content,.gogo-load-css .gogocarto-container #element-info-bar .element-item.active .expandLabel.transform-big,.gogo-load-css .toast,.gogo-load-css .z-depth-1{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12)}.gogo-load-css .btn-floating:hover,.gogo-load-css .btn-large:hover,.gogo-load-css .btn:hover,.gogo-load-css .z-depth-1-half{box-shadow:0 5px 11px 0 rgba(0,0,0,.18),0 4px 15px 0 rgba(0,0,0,.15)}.gogo-load-css .gogocarto-container #markerDirectionResult,.gogo-load-css .z-depth-2{box-shadow:0 8px 17px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19)}.gogo-load-css .z-depth-3{box-shadow:0 12px 15px 0 rgba(0,0,0,.24),0 17px 50px 0 rgba(0,0,0,.19)}.gogo-load-css .modal,.gogo-load-css .z-depth-4{box-shadow:0 16px 28px 0 rgba(0,0,0,.22),0 25px 55px 0 rgba(0,0,0,.21)}.gogo-load-css .z-depth-5{box-shadow:0 27px 24px 0 rgba(0,0,0,.2),0 40px 77px 0 rgba(0,0,0,.22)}.gogo-load-css .hoverable:hover{transition:box-shadow .25s;box-shadow:0 8px 17px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19)}.gogo-load-css .divider{height:1px;overflow:hidden;background-color:#CCC}.gogo-load-css blockquote{margin:20px 0;padding-left:1.5rem;border-left:5px solid #de5a5f}.gogo-load-css i{line-height:inherit}.gogo-load-css i.left{float:left;margin-right:15px}.gogo-load-css i.right{float:right;margin-left:15px}.gogo-load-css i.tiny{font-size:1rem}.gogo-load-css i.small{font-size:2rem}.gogo-load-css i.medium{font-size:4rem}.gogo-load-css i.large{font-size:6rem}.gogo-load-css img.responsive-img,.gogo-load-css video.responsive-video{max-width:100%;height:auto}.gogo-load-css .pagination li{display:inline-block;font-size:1.2rem;padding:0 10px;line-height:30px;border-radius:2px;text-align:center}.gogo-load-css .pagination li a{color:#444}.gogo-load-css .pagination li.active a{color:#fff}.gogo-load-css .pagination li.active{background-color:#de5a5f}.gogo-load-css .pagination li.disabled a{cursor:default;color:#999}.gogo-load-css .pagination li i{font-size:2rem}.gogo-load-css .pagination li.pages ul li{display:inline-block;float:none}.gogo-load-css .parallax-container{position:relative;overflow:hidden;height:500px}.gogo-load-css .parallax{position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1}.gogo-load-css .parallax img{display:none;position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);transform:translateX(-50%)}.gogo-load-css .pin-bottom,.gogo-load-css .pin-top{position:relative}.gogo-load-css .pinned{position:fixed!important}.gogo-load-css ul.staggered-list li{opacity:0}.gogo-load-css .fade-in{opacity:0;transform-origin:0 50%}@media only screen and (max-width:600px){.gogo-load-css .hide-on-small-and-down,.gogo-load-css .hide-on-small-only{display:none!important}}@media only screen and (max-width:1200px){.gogo-load-css .pagination{width:100%}.gogo-load-css .pagination li.next,.gogo-load-css .pagination li.prev{width:10%}.gogo-load-css .pagination li.pages{width:80%;overflow:hidden;white-space:nowrap}.gogo-load-css .hide-on-med-and-down{display:none!important}}@media only screen and (min-width:601px){.gogo-load-css .hide-on-med-and-up{display:none!important}}@media only screen and (min-width:600px) and (max-width:900px){.gogo-load-css .hide-on-med-only{display:none!important}}@media only screen and (min-width:1201px){.gogo-load-css .hide-on-large-only{display:none!important}.gogo-load-css .show-on-large{display:initial!important}}@media only screen and (min-width:600px) and (max-width:900px){.gogo-load-css .show-on-medium{display:initial!important}}@media only screen and (min-width:601px){.gogo-load-css .show-on-medium-and-up{display:initial!important}}@media only screen and (max-width:1200px){.gogo-load-css .show-on-medium-and-down{display:initial!important}}@media only screen and (max-width:600px){.gogo-load-css .show-on-small{display:initial!important}.gogo-load-css .center-on-small-only{text-align:center}}.gogo-load-css footer.page-footer{margin-top:20px;padding-top:20px;background-color:#de5a5f}.gogo-load-css footer.page-footer .footer-copyright{overflow:hidden;height:50px;line-height:50px;color:rgba(255,255,255,.8);background-color:rgba(51,51,51,.08)}.gogo-load-css table.highlight>tbody>tr:hover,.gogo-load-css table.striped>tbody>tr:nth-child(odd){background-color:#f2f2f2}.gogo-load-css table,.gogo-load-css td,.gogo-load-css th{border:none}.gogo-load-css table.bordered>tbody>tr,.gogo-load-css table.bordered>thead>tr,.gogo-load-css thead{border-bottom:1px solid #d0d0d0}.gogo-load-css table{width:100%;display:table}.gogo-load-css table.striped>tbody>tr>td{border-radius:0}.gogo-load-css table.highlight>tbody>tr{-webkit-transition:background-color .25s ease;-moz-transition:background-color .25s ease;-o-transition:background-color .25s ease;-ms-transition:background-color .25s ease;transition:background-color .25s ease}.gogo-load-css td,.gogo-load-css th{padding:15px 5px;display:table-cell;text-align:left;vertical-align:middle;border-radius:2px}@media only screen and (max-width:1200px){.gogo-load-css table.responsive-table{width:100%;border-collapse:collapse;border-spacing:0;display:block;position:relative}.gogo-load-css table.responsive-table td,.gogo-load-css table.responsive-table th{margin:0;vertical-align:top}.gogo-load-css table.responsive-table thead{display:block;float:left;border:0;border-right:1px solid #d0d0d0}.gogo-load-css table.responsive-table thead tr{display:block;padding:0 10px 0 0}.gogo-load-css table.responsive-table thead tr th::before{content:"\00a0"}.gogo-load-css table.responsive-table tbody{display:block;width:auto;position:relative;overflow-x:auto;white-space:nowrap}.gogo-load-css table.responsive-table tbody tr{display:inline-block;vertical-align:top}.gogo-load-css table.responsive-table th{display:block;text-align:right}.gogo-load-css table.responsive-table td{display:block;min-height:1.25em;text-align:left}.gogo-load-css table.responsive-table tr{padding:0 10px}.gogo-load-css table.responsive-table.bordered th{border-bottom:0;border-left:0}.gogo-load-css table.responsive-table.bordered td{border-left:0;border-right:0;border-bottom:0}.gogo-load-css table.responsive-table.bordered tr{border:0}.gogo-load-css table.responsive-table.bordered tbody tr{border-right:1px solid #d0d0d0}}.gogo-load-css .collection{margin:.5rem 0 1rem;border:1px solid #e0e0e0;border-radius:2px;overflow:hidden;position:relative}.gogo-load-css .collection .collection-item{background-color:#fff;line-height:1.5rem;padding:10px 20px;margin:0;border-bottom:1px solid #e0e0e0}.gogo-load-css .collection .collection-item.avatar{min-height:84px;padding-left:72px;position:relative}.gogo-load-css .collection .collection-item.avatar .circle{position:absolute;width:42px;height:42px;overflow:hidden;left:15px;display:inline-block;vertical-align:middle}.gogo-load-css .collection .collection-item.avatar i.circle{font-size:18px;line-height:42px;color:#fff;background-color:#999;text-align:center}.gogo-load-css .collection .collection-item.avatar .title{font-size:16px}.gogo-load-css .collection .collection-item.avatar p{margin:0}.gogo-load-css .collection .collection-item.avatar .secondary-content{position:absolute;top:16px;right:16px}.gogo-load-css .collection .collection-item:last-child{border-bottom:none}.gogo-load-css .collection .collection-item.active{background-color:#4A7874;color:#e9f1f1}.gogo-load-css .collection .collection-item.active .secondary-content{color:#fff}.gogo-load-css .collection a.collection-item{display:block;-webkit-transition:.25s;-moz-transition:.25s;-o-transition:.25s;-ms-transition:.25s;transition:.25s;color:#4A7874}.gogo-load-css .collection a.collection-item:not(.active):hover{background-color:#ddd}.gogo-load-css .collection.with-header .collection-header{background-color:#fff;border-bottom:1px solid #e0e0e0;padding:10px 20px}.gogo-load-css .collection.with-header .collection-item{padding-left:30px}.gogo-load-css .collection.with-header .collection-item.avatar{padding-left:72px}.gogo-load-css .secondary-content{float:right;color:#4A7874}.gogo-load-css .collapsible .collection{margin:0;border:none}.gogo-load-css span.badge{min-width:3rem;padding:0 6px;text-align:center;font-size:1rem;line-height:inherit;color:color("grey","darken-1");position:absolute;right:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.gogo-load-css span.badge.more{font-weight:300;font-size:.8rem;color:#fff;background-color:#4A7874;border-radius:2px}.gogo-load-css span.badge.new:after{content:" new"}.gogo-load-css span.badge.more:after{content:" more"}.gogo-load-css nav ul a span.badge{position:static;margin-left:4px;line-height:0}.gogo-load-css .video-container{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.gogo-load-css .video-container.no-controls{padding-top:0}.gogo-load-css .video-container embed,.gogo-load-css .video-container iframe,.gogo-load-css .video-container object{position:absolute;top:0;left:0;width:100%;height:100%}.gogo-load-css .progress{position:relative;height:4px;display:block;width:100%;background-color:#bad4d2;border-radius:2px;margin:.5rem 0 1rem;overflow:hidden}.gogo-load-css .progress .determinate{position:absolute;top:0;left:0;bottom:0;background-color:#4A7874;-webkit-transition:width .3s linear;-moz-transition:width .3s linear;-o-transition:width .3s linear;-ms-transition:width .3s linear;transition:width .3s linear}.gogo-load-css .progress .indeterminate{background-color:#4A7874}.gogo-load-css .progress .indeterminate:after,.gogo-load-css .progress .indeterminate:before{content:'';position:absolute;background-color:inherit;bottom:0;will-change:left,right;top:0;left:0}.gogo-load-css .progress .indeterminate:before{-webkit-animation:indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite;-moz-animation:indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite;-ms-animation:indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite;-o-animation:indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite;animation:indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite}.gogo-load-css .progress .indeterminate:after{-webkit-animation:indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;-moz-animation:indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;-ms-animation:indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;-o-animation:indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;animation:indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;-webkit-animation-delay:1.15s;-moz-animation-delay:1.15s;-ms-animation-delay:1.15s;-o-animation-delay:1.15s;animation-delay:1.15s}@-webkit-keyframes indeterminate{0%{left:-35%;right:100%}100%,60%{left:100%;right:-90%}}@-moz-keyframes indeterminate{0%{left:-35%;right:100%}100%,60%{left:100%;right:-90%}}@keyframes indeterminate{0%{left:-35%;right:100%}100%,60%{left:100%;right:-90%}}@-webkit-keyframes indeterminate-short{0%{left:-200%;right:100%}100%,60%{left:107%;right:-8%}}@-moz-keyframes indeterminate-short{0%{left:-200%;right:100%}100%,60%{left:107%;right:-8%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}100%,60%{left:107%;right:-8%}}.gogo-load-css .hide{display:none!important}.gogo-load-css .left-align{text-align:left}.gogo-load-css .right-align{text-align:right}.gogo-load-css .center,.gogo-load-css .center-align{text-align:center}.gogo-load-css .left{float:left!important}.gogo-load-css .right{float:right!important}.gogo-load-css .no-select,.gogo-load-css input[type=range],.gogo-load-css input[type=range]+.thumb{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.gogo-load-css .circle{border-radius:50%}.gogo-load-css .center-block{display:block;margin-left:auto;margin-right:auto}.gogo-load-css .truncate{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gogo-load-css .no-padding{padding:0!important}.gogo-load-css .container{margin:0 auto;max-width:1280px;width:90%}@media only screen and (min-width:601px){.gogo-load-css .container{width:85%}}@media only screen and (min-width:1201px){.gogo-load-css .container{width:70%}}.gogo-load-css .container .row{margin-left:-.75rem;margin-right:-.75rem}.gogo-load-css .section{padding-top:1rem;padding-bottom:1rem}.gogo-load-css .section.no-pad{padding:0}.gogo-load-css .section.no-pad-bot{padding-bottom:0}.gogo-load-css .section.no-pad-top{padding-top:0}.gogo-load-css .row{margin-left:auto;margin-right:auto;margin-bottom:20px}.gogo-load-css .row:after{content:"";display:table;clear:both}.gogo-load-css .gogocarto-container,.gogo-load-css .tabs{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex}.gogo-load-css .row .col{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 .75rem}.gogo-load-css .row .col.s1{width:8.33333%;margin-left:0}.gogo-load-css .row .col.s2{width:16.66667%;margin-left:0}.gogo-load-css .row .col.s3{width:25%;margin-left:0}.gogo-load-css .row .col.s4{width:33.33333%;margin-left:0}.gogo-load-css .row .col.s5{width:41.66667%;margin-left:0}.gogo-load-css .row .col.s6{width:50%;margin-left:0}.gogo-load-css .row .col.s7{width:58.33333%;margin-left:0}.gogo-load-css .row .col.s8{width:66.66667%;margin-left:0}.gogo-load-css .row .col.s9{width:75%;margin-left:0}.gogo-load-css .row .col.s10{width:83.33333%;margin-left:0}.gogo-load-css .row .col.s11{width:91.66667%;margin-left:0}.gogo-load-css .row .col.s12{width:100%;margin-left:0}.gogo-load-css .row .col.offset-s1{margin-left:8.33333%}.gogo-load-css .row .col.offset-s2{margin-left:16.66667%}.gogo-load-css .row .col.offset-s3{margin-left:25%}.gogo-load-css .row .col.offset-s4{margin-left:33.33333%}.gogo-load-css .row .col.offset-s5{margin-left:41.66667%}.gogo-load-css .row .col.offset-s6{margin-left:50%}.gogo-load-css .row .col.offset-s7{margin-left:58.33333%}.gogo-load-css .row .col.offset-s8{margin-left:66.66667%}.gogo-load-css .row .col.offset-s9{margin-left:75%}.gogo-load-css .row .col.offset-s10{margin-left:83.33333%}.gogo-load-css .row .col.offset-s11{margin-left:91.66667%}.gogo-load-css .row .col.offset-s12{margin-left:100%}@media only screen and (min-width:601px){.gogo-load-css .row .col.m1{width:8.33333%;margin-left:0}.gogo-load-css .row .col.m2{width:16.66667%;margin-left:0}.gogo-load-css .row .col.m3{width:25%;margin-left:0}.gogo-load-css .row .col.m4{width:33.33333%;margin-left:0}.gogo-load-css .row .col.m5{width:41.66667%;margin-left:0}.gogo-load-css .row .col.m6{width:50%;margin-left:0}.gogo-load-css .row .col.m7{width:58.33333%;margin-left:0}.gogo-load-css .row .col.m8{width:66.66667%;margin-left:0}.gogo-load-css .row .col.m9{width:75%;margin-left:0}.gogo-load-css .row .col.m10{width:83.33333%;margin-left:0}.gogo-load-css .row .col.m11{width:91.66667%;margin-left:0}.gogo-load-css .row .col.m12{width:100%;margin-left:0}.gogo-load-css .row .col.offset-m1{margin-left:8.33333%}.gogo-load-css .row .col.offset-m2{margin-left:16.66667%}.gogo-load-css .row .col.offset-m3{margin-left:25%}.gogo-load-css .row .col.offset-m4{margin-left:33.33333%}.gogo-load-css .row .col.offset-m5{margin-left:41.66667%}.gogo-load-css .row .col.offset-m6{margin-left:50%}.gogo-load-css .row .col.offset-m7{margin-left:58.33333%}.gogo-load-css .row .col.offset-m8{margin-left:66.66667%}.gogo-load-css .row .col.offset-m9{margin-left:75%}.gogo-load-css .row .col.offset-m10{margin-left:83.33333%}.gogo-load-css .row .col.offset-m11{margin-left:91.66667%}.gogo-load-css .row .col.offset-m12{margin-left:100%}}@media only screen and (min-width:1201px){.gogo-load-css .row .col.l1{width:8.33333%;margin-left:0}.gogo-load-css .row .col.l2{width:16.66667%;margin-left:0}.gogo-load-css .row .col.l3{width:25%;margin-left:0}.gogo-load-css .row .col.l4{width:33.33333%;margin-left:0}.gogo-load-css .row .col.l5{width:41.66667%;margin-left:0}.gogo-load-css .row .col.l6{width:50%;margin-left:0}.gogo-load-css .row .col.l7{width:58.33333%;margin-left:0}.gogo-load-css .row .col.l8{width:66.66667%;margin-left:0}.gogo-load-css .row .col.l9{width:75%;margin-left:0}.gogo-load-css .row .col.l10{width:83.33333%;margin-left:0}.gogo-load-css .row .col.l11{width:91.66667%;margin-left:0}.gogo-load-css .row .col.l12{width:100%;margin-left:0}.gogo-load-css .row .col.offset-l1{margin-left:8.33333%}.gogo-load-css .row .col.offset-l2{margin-left:16.66667%}.gogo-load-css .row .col.offset-l3{margin-left:25%}.gogo-load-css .row .col.offset-l4{margin-left:33.33333%}.gogo-load-css .row .col.offset-l5{margin-left:41.66667%}.gogo-load-css .row .col.offset-l6{margin-left:50%}.gogo-load-css .row .col.offset-l7{margin-left:58.33333%}.gogo-load-css .row .col.offset-l8{margin-left:66.66667%}.gogo-load-css .row .col.offset-l9{margin-left:75%}.gogo-load-css .row .col.offset-l10{margin-left:83.33333%}.gogo-load-css .row .col.offset-l11{margin-left:91.66667%}.gogo-load-css .row .col.offset-l12{margin-left:100%}}.gogo-load-css html{line-height:1.5;font-family:Roboto,sans-serif;font-weight:400;color:rgba(0,0,0,.87)}@media only screen and (min-width:0){.gogo-load-css html{font-size:14px}}@media only screen and (min-width:900px){.gogo-load-css html{font-size:14.5px}}@media only screen and (min-width:1200px){.gogo-load-css html{font-size:15px}}.gogo-load-css h1,.gogo-load-css h2,.gogo-load-css h3,.gogo-load-css h4,.gogo-load-css h5,.gogo-load-css h6{font-weight:400}.gogo-load-css h1 a,.gogo-load-css h2 a,.gogo-load-css h3 a,.gogo-load-css h4 a,.gogo-load-css h5 a,.gogo-load-css h6 a{font-weight:inherit}.gogo-load-css h1{font-size:4.2rem;line-height:110%;margin:2.1rem 0 1.68rem}.gogo-load-css h2{font-size:3.56rem;line-height:110%;margin:1.78rem 0 1.424rem}.gogo-load-css h3{font-size:2.92rem;line-height:110%;margin:1.46rem 0 1.168rem}.gogo-load-css h4{font-size:2.28rem;line-height:110%;margin:1.14rem 0 .912rem}.gogo-load-css h5{font-size:1.64rem;line-height:110%;margin:.82rem 0 .656rem}.gogo-load-css h6{font-size:1rem;line-height:110%;margin:.5rem 0 .4rem}.gogo-load-css em{font-style:italic}.gogo-load-css strong{font-weight:700}.gogo-load-css small{font-size:75%}.gogo-load-css .light,.gogo-load-css footer.page-footer .footer-copyright{font-weight:300}.gogo-load-css .thin{font-weight:200}.gogo-load-css .flow-text{font-weight:300}@media only screen and (min-width:360px){.gogo-load-css .flow-text{font-size:1.2rem}}@media only screen and (min-width:390px){.gogo-load-css .flow-text{font-size:1.224rem}}@media only screen and (min-width:420px){.gogo-load-css .flow-text{font-size:1.248rem}}@media only screen and (min-width:450px){.gogo-load-css .flow-text{font-size:1.272rem}}@media only screen and (min-width:480px){.gogo-load-css .flow-text{font-size:1.296rem}}@media only screen and (min-width:510px){.gogo-load-css .flow-text{font-size:1.32rem}}@media only screen and (min-width:540px){.gogo-load-css .flow-text{font-size:1.344rem}}@media only screen and (min-width:570px){.gogo-load-css .flow-text{font-size:1.368rem}}@media only screen and (min-width:600px){.gogo-load-css .flow-text{font-size:1.392rem}}@media only screen and (min-width:630px){.gogo-load-css .flow-text{font-size:1.416rem}}@media only screen and (min-width:660px){.gogo-load-css .flow-text{font-size:1.44rem}}@media only screen and (min-width:690px){.gogo-load-css .flow-text{font-size:1.464rem}}@media only screen and (min-width:720px){.gogo-load-css .flow-text{font-size:1.488rem}}@media only screen and (min-width:750px){.gogo-load-css .flow-text{font-size:1.512rem}}@media only screen and (min-width:780px){.gogo-load-css .flow-text{font-size:1.536rem}}@media only screen and (min-width:810px){.gogo-load-css .flow-text{font-size:1.56rem}}@media only screen and (min-width:840px){.gogo-load-css .flow-text{font-size:1.584rem}}@media only screen and (min-width:870px){.gogo-load-css .flow-text{font-size:1.608rem}}@media only screen and (min-width:900px){.gogo-load-css .flow-text{font-size:1.632rem}}@media only screen and (min-width:930px){.gogo-load-css .flow-text{font-size:1.656rem}}@media only screen and (min-width:960px){.gogo-load-css .flow-text{font-size:1.68rem}}@media only screen and (max-width:360px){.gogo-load-css .flow-text{font-size:1.2rem}}.gogo-load-css .tabs{display:flex;position:relative;height:2.7rem;background-color:#3D3D3D;margin:0 auto;width:calc(100% - 1px);white-space:nowrap}.gogo-load-css .tabs .tab{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;display:block;float:left;text-align:center;line-height:3rem;height:2.7rem;margin:0;text-transform:uppercase;letter-spacing:.8px;width:15%;padding:0}.gogo-load-css .tabs .tab a{color:#fff;display:block;width:100%;height:100%;-webkit-transition:color .28s ease;-moz-transition:color .28s ease;-o-transition:color .28s ease;-ms-transition:color .28s ease;transition:color .28s ease}.gogo-load-css .tabs .tab a:hover{color:#fff}.gogo-load-css .tabs .tab.disabled a{color:#fff;cursor:default}.gogo-load-css .tabs .indicator{position:absolute;top:0;height:3px;background-color:#fff;will-change:left,right}.gogo-load-css .btn,.gogo-load-css .btn-flat,.gogo-load-css .btn-large{border:none;border-radius:2px;display:inline-block;height:36px;line-height:36px;outline:0;padding:0 2rem;text-transform:uppercase;vertical-align:middle;-webkit-tap-highlight-color:transparent}.gogo-load-css .btn-floating.disabled,.gogo-load-css .btn-floating:disabled,.gogo-load-css .btn-large.disabled,.gogo-load-css .btn-large:disabled,.gogo-load-css .btn.disabled,.gogo-load-css .btn:disabled,.gogo-load-css .disabled.btn-large{background-color:#DFDFDF!important;box-shadow:none;color:#9F9F9F!important;cursor:default}.gogo-load-css .btn-floating.disabled *,.gogo-load-css .btn-floating:disabled *,.gogo-load-css .btn-large.disabled *,.gogo-load-css .btn-large:disabled *,.gogo-load-css .btn.disabled *,.gogo-load-css .btn:disabled *,.gogo-load-css .disabled.btn-large *{pointer-events:none}.gogo-load-css .btn-floating.disabled:hover,.gogo-load-css .btn-floating:disabled:hover,.gogo-load-css .btn-large.disabled:hover,.gogo-load-css .btn-large:disabled:hover,.gogo-load-css .btn.disabled:hover,.gogo-load-css .btn:disabled:hover,.gogo-load-css .disabled.btn-large:hover{background-color:#DFDFDF;color:#9F9F9F}.gogo-load-css .btn i,.gogo-load-css .btn-flat i,.gogo-load-css .btn-floating i,.gogo-load-css .btn-large i{font-size:1.3rem;line-height:inherit}.gogo-load-css .btn,.gogo-load-css .btn-large{text-decoration:none;color:#fff;background-color:#26A69A;text-align:center;letter-spacing:.5px;-webkit-transition:.2s ease-out;-moz-transition:.2s ease-out;-o-transition:.2s ease-out;-ms-transition:.2s ease-out;transition:.2s ease-out;cursor:pointer}.gogo-load-css .btn-large:hover,.gogo-load-css .btn:hover{background-color:#2bbbad}.gogo-load-css .btn-floating{display:inline-block;color:#fff;position:relative;overflow:hidden;z-index:1;width:37px;height:37px;line-height:37px;padding:0;background-color:#26A69A;border-radius:50%;transition:.3s;cursor:pointer;vertical-align:middle}.gogo-load-css .btn-floating i{width:inherit;display:inline-block;text-align:center;color:#fff;font-size:1.6rem;line-height:37px}.gogo-load-css .btn-floating:before{border-radius:0}.gogo-load-css .btn-floating.btn-large{width:55.5px;height:55.5px}.gogo-load-css .btn-floating.btn-large i{line-height:55.5px}.gogo-load-css button.btn-floating{border:none}.gogo-load-css .fixed-action-btn{position:fixed;right:23px;bottom:23px;padding-top:15px;margin-bottom:0;z-index:998}.gogo-load-css .fixed-action-btn ul{left:0;right:0;text-align:center;position:absolute;bottom:64px;margin:0}.gogo-load-css .fixed-action-btn ul li{margin-bottom:15px}.gogo-load-css .fixed-action-btn ul a.btn-floating{opacity:0}.gogo-load-css .btn-flat{box-shadow:none;background-color:transparent;color:#343434;cursor:pointer}.gogo-load-css .btn-flat.disabled{color:#b3b3b3;cursor:default}.gogo-load-css .btn-large{height:54px;line-height:56px}.gogo-load-css .btn-large i{font-size:1.6rem}.gogo-load-css .btn-block{display:block}.gogo-load-css .dropdown-content{background-color:#fff;margin:0;display:none;min-width:100px;max-height:650px;overflow-y:auto;opacity:0;position:absolute;z-index:999;will-change:width,height}.gogo-load-css .dropdown-content li{clear:both;color:rgba(0,0,0,.87);cursor:pointer;line-height:1.5rem;width:100%;text-align:left;text-transform:none}.gogo-load-css .dropdown-content li.active,.gogo-load-css .dropdown-content li:hover{background-color:#eee}.gogo-load-css .dropdown-content li>a,.gogo-load-css .dropdown-content li>span{font-size:1.2rem;color:#4A7874;display:block;padding:1rem}.gogo-load-css .dropdown-content li>a>i{height:inherit;line-height:inherit}.gogo-load-css .waves-effect{position:relative;cursor:pointer;display:inline-block;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;vertical-align:middle;z-index:1;will-change:opacity,transform;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;-ms-transition:all .3s ease-out;transition:all .3s ease-out}.gogo-load-css .waves-effect .waves-ripple{position:absolute;border-radius:50%;width:20px;height:20px;margin-top:-10px;margin-left:-10px;opacity:0;background:rgba(0,0,0,.2);-webkit-transition:all .7s ease-out;-moz-transition:all .7s ease-out;-o-transition:all .7s ease-out;-ms-transition:all .7s ease-out;transition:all .7s ease-out;-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform,opacity;-o-transition-property:-o-transform,opacity;transition-property:transform,opacity;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);pointer-events:none}.gogo-load-css .waves-effect.waves-light .waves-ripple{background-color:rgba(255,255,255,.45)}.gogo-load-css .waves-effect.waves-red .waves-ripple{background-color:rgba(244,67,54,.7)}.gogo-load-css .waves-effect.waves-yellow .waves-ripple{background-color:rgba(255,235,59,.7)}.gogo-load-css .waves-effect.waves-orange .waves-ripple{background-color:rgba(255,152,0,.7)}.gogo-load-css .waves-effect.waves-purple .waves-ripple{background-color:rgba(156,39,176,.7)}.gogo-load-css .waves-effect.waves-green .waves-ripple{background-color:rgba(76,175,80,.7)}.gogo-load-css .waves-effect.waves-teal .waves-ripple{background-color:rgba(0,150,136,.7)}.gogo-load-css .waves-notransition{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}.gogo-load-css .waves-input-wrapper{border-radius:.2em;vertical-align:bottom}.gogo-load-css .waves-input-wrapper .waves-button-input{position:relative;top:0;left:0;z-index:1}.gogo-load-css .waves-circle{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0);text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%;-webkit-mask-image:none}.gogo-load-css .waves-block{display:block}.gogo-load-css a.waves-effect .waves-ripple{z-index:-1}.gogo-load-css .modal{display:none;position:fixed;left:0;right:0;background-color:#fafafa;padding:0;max-height:70%;width:55%;margin:auto;overflow-y:auto;border-radius:2px;will-change:top,opacity}@media only screen and (max-width:1200px){.gogo-load-css .modal{width:80%}}@media only screen and (max-width:600px){.gogo-load-css .modal{width:100%;max-height:100%;height:100%;top:0!important}}.gogo-load-css .modal h1,.gogo-load-css .modal h2,.gogo-load-css .modal h3,.gogo-load-css .modal h4,.gogo-load-css .modal h5{margin-top:0}.gogo-load-css .modal h5{margin-bottom:1.5rem}.gogo-load-css .modal .footer{margin-top:1rem;text-align:center}.gogo-load-css .modal .modal-content{padding:24px}@media only screen and (min-width:601px){.gogo-load-css .modal .modal-content{padding:40px}}.gogo-load-css .modal .modal-close{cursor:pointer;color:#fff}.gogo-load-css .modal .modal-footer{border-radius:0 0 2px 2px;background-color:#fafafa;padding:4px 6px;height:56px;width:100%}.gogo-load-css .modal .modal-footer .btn,.gogo-load-css .modal .modal-footer .btn-flat,.gogo-load-css .modal .modal-footer .btn-large{float:right;margin:6px 0}.gogo-load-css .modal.modal-fixed-footer{padding:0;height:70%}.gogo-load-css .modal.modal-fixed-footer .modal-content{position:absolute;height:calc(100% - 58px);max-height:100%;width:100%;overflow-y:auto}.gogo-load-css .modal.modal-fixed-footer .modal-footer{border-top:1px solid rgba(0,0,0,.1);position:absolute;bottom:0}.gogo-load-css .modal.bottom-sheet{top:auto;bottom:-100%;margin:0;width:100%;max-height:45%;border-radius:0;will-change:bottom,opacity}.gogo-load-css .collapsible{border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;margin:.5rem 0 1rem}.gogo-load-css .collapsible-header{display:block;cursor:pointer;min-height:3rem;line-height:3rem;padding:0 1rem;background-color:#fff;border-bottom:1px solid #ddd}.gogo-load-css .collapsible-header i{width:2rem;font-size:1.6rem;line-height:3rem;display:block;float:left;text-align:center;margin-right:1rem}.gogo-load-css .collapsible-body{display:none;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.gogo-load-css .collapsible-body p{margin:0;padding:2rem}.gogo-load-css .side-nav .collapsible{border:none;box-shadow:none}.gogo-load-css .side-nav .collapsible li{padding:0}.gogo-load-css .side-nav .collapsible-header{background-color:transparent;border:none;line-height:inherit;height:inherit;margin:0 1rem}.gogo-load-css .side-nav .collapsible-header i{line-height:inherit}.gogo-load-css .side-nav .collapsible-body{border:0;background-color:#fff}.gogo-load-css .side-nav .collapsible-body li a{margin:0 1rem 0 2rem}.gogo-load-css .collapsible.popout{border:none;box-shadow:none}.gogo-load-css .collapsible.popout>li{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12);margin:0 24px;transition:margin .35s cubic-bezier(.25,.46,.45,.94)}.gogo-load-css .collapsible.popout>li.active{box-shadow:0 5px 11px 0 rgba(0,0,0,.18),0 4px 15px 0 rgba(0,0,0,.15);margin:16px 0}.gogo-load-css select:focus{outline:#d0e2e0 solid 1px}.gogo-load-css label{font-size:.8rem;color:#3D3D3D}.gogo-load-css ::-webkit-input-placeholder{color:#707070}.gogo-load-css :-moz-placeholder{color:#707070}.gogo-load-css ::-moz-placeholder{color:#707070}.gogo-load-css :-ms-input-placeholder{color:#707070}.gogo-load-css input[type=date],.gogo-load-css input[type=datetime-local],.gogo-load-css input[type=email],.gogo-load-css input[type=number],.gogo-load-css input[type=password],.gogo-load-css input[type=search],.gogo-load-css input[type=tel],.gogo-load-css input[type=text],.gogo-load-css input[type=time],.gogo-load-css input[type=url],.gogo-load-css textarea.materialize-textarea{background-color:transparent;border:none;border-bottom:1px solid #3D3D3D;border-radius:0;outline:0;height:3rem;width:100%;font-size:1rem;margin:0 0 15px;padding:0;box-shadow:none;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;transition:all .3s}.gogo-load-css input[type=date]:disabled,.gogo-load-css input[type=date][readonly=readonly],.gogo-load-css input[type=datetime-local]:disabled,.gogo-load-css input[type=datetime-local][readonly=readonly],.gogo-load-css input[type=email]:disabled,.gogo-load-css input[type=email][readonly=readonly],.gogo-load-css input[type=number]:disabled,.gogo-load-css input[type=number][readonly=readonly],.gogo-load-css input[type=password]:disabled,.gogo-load-css input[type=password][readonly=readonly],.gogo-load-css input[type=search]:disabled,.gogo-load-css input[type=search][readonly=readonly],.gogo-load-css input[type=tel]:disabled,.gogo-load-css input[type=tel][readonly=readonly],.gogo-load-css input[type=text]:disabled,.gogo-load-css input[type=text][readonly=readonly],.gogo-load-css input[type=time]:disabled,.gogo-load-css input[type=time][readonly=readonly],.gogo-load-css input[type=url]:disabled,.gogo-load-css input[type=url][readonly=readonly],.gogo-load-css textarea.materialize-textarea:disabled,.gogo-load-css textarea.materialize-textarea[readonly=readonly]{color:rgba(0,0,0,.26);border-bottom:1px dotted rgba(0,0,0,.26)}.gogo-load-css input[type=date].valid,.gogo-load-css input[type=date]:focus.valid,.gogo-load-css input[type=date]:focus:not([readonly]),.gogo-load-css input[type=datetime-local].valid,.gogo-load-css input[type=datetime-local]:focus.valid,.gogo-load-css input[type=datetime-local]:focus:not([readonly]),.gogo-load-css input[type=email].valid,.gogo-load-css input[type=email]:focus.valid,.gogo-load-css input[type=email]:focus:not([readonly]),.gogo-load-css input[type=number].valid,.gogo-load-css input[type=number]:focus.valid,.gogo-load-css input[type=number]:focus:not([readonly]),.gogo-load-css input[type=password].valid,.gogo-load-css input[type=password]:focus.valid,.gogo-load-css input[type=password]:focus:not([readonly]),.gogo-load-css input[type=search].valid,.gogo-load-css input[type=search]:focus.valid,.gogo-load-css input[type=search]:focus:not([readonly]),.gogo-load-css input[type=tel].valid,.gogo-load-css input[type=tel]:focus.valid,.gogo-load-css input[type=tel]:focus:not([readonly]),.gogo-load-css input[type=text].valid,.gogo-load-css input[type=text]:focus.valid,.gogo-load-css input[type=text]:focus:not([readonly]),.gogo-load-css input[type=time].valid,.gogo-load-css input[type=time]:focus.valid,.gogo-load-css input[type=time]:focus:not([readonly]),.gogo-load-css input[type=url].valid,.gogo-load-css input[type=url]:focus.valid,.gogo-load-css input[type=url]:focus:not([readonly]),.gogo-load-css textarea.materialize-textarea.valid,.gogo-load-css textarea.materialize-textarea:focus.valid,.gogo-load-css textarea.materialize-textarea:focus:not([readonly]){border-bottom:1px solid #4A7874;box-shadow:0 1px 0 0 #4A7874}.gogo-load-css input[type=date]:disabled+label,.gogo-load-css input[type=date][readonly=readonly]+label,.gogo-load-css input[type=datetime-local]:disabled+label,.gogo-load-css input[type=datetime-local][readonly=readonly]+label,.gogo-load-css input[type=email]:disabled+label,.gogo-load-css input[type=email][readonly=readonly]+label,.gogo-load-css input[type=number]:disabled+label,.gogo-load-css input[type=number][readonly=readonly]+label,.gogo-load-css input[type=password]:disabled+label,.gogo-load-css input[type=password][readonly=readonly]+label,.gogo-load-css input[type=search]:disabled+label,.gogo-load-css input[type=search][readonly=readonly]+label,.gogo-load-css input[type=tel]:disabled+label,.gogo-load-css input[type=tel][readonly=readonly]+label,.gogo-load-css input[type=text]:disabled+label,.gogo-load-css input[type=text][readonly=readonly]+label,.gogo-load-css input[type=time]:disabled+label,.gogo-load-css input[type=time][readonly=readonly]+label,.gogo-load-css input[type=url]:disabled+label,.gogo-load-css input[type=url][readonly=readonly]+label,.gogo-load-css textarea.materialize-textarea:disabled+label,.gogo-load-css textarea.materialize-textarea[readonly=readonly]+label{color:rgba(0,0,0,.26)}.gogo-load-css input[type=date]:focus:not([readonly])+label,.gogo-load-css input[type=datetime-local]:focus:not([readonly])+label,.gogo-load-css input[type=email]:focus:not([readonly])+label,.gogo-load-css input[type=number]:focus:not([readonly])+label,.gogo-load-css input[type=password]:focus:not([readonly])+label,.gogo-load-css input[type=search]:focus:not([readonly])+label,.gogo-load-css input[type=tel]:focus:not([readonly])+label,.gogo-load-css input[type=text]:focus:not([readonly])+label,.gogo-load-css input[type=time]:focus:not([readonly])+label,.gogo-load-css input[type=url]:focus:not([readonly])+label,.gogo-load-css textarea.materialize-textarea:focus:not([readonly])+label{color:#4A7874}.gogo-load-css input[type=date].valid+label:after,.gogo-load-css input[type=date]:focus.valid+label:after,.gogo-load-css input[type=datetime-local].valid+label:after,.gogo-load-css input[type=datetime-local]:focus.valid+label:after,.gogo-load-css input[type=email].valid+label:after,.gogo-load-css input[type=email]:focus.valid+label:after,.gogo-load-css input[type=number].valid+label:after,.gogo-load-css input[type=number]:focus.valid+label:after,.gogo-load-css input[type=password].valid+label:after,.gogo-load-css input[type=password]:focus.valid+label:after,.gogo-load-css input[type=search].valid+label:after,.gogo-load-css input[type=search]:focus.valid+label:after,.gogo-load-css input[type=tel].valid+label:after,.gogo-load-css input[type=tel]:focus.valid+label:after,.gogo-load-css input[type=text].valid+label:after,.gogo-load-css input[type=text]:focus.valid+label:after,.gogo-load-css input[type=time].valid+label:after,.gogo-load-css input[type=time]:focus.valid+label:after,.gogo-load-css input[type=url].valid+label:after,.gogo-load-css input[type=url]:focus.valid+label:after,.gogo-load-css textarea.materialize-textarea.valid+label:after,.gogo-load-css textarea.materialize-textarea:focus.valid+label:after{content:attr(data-success);color:#4A7874;opacity:1}.gogo-load-css input[type=date].invalid,.gogo-load-css input[type=date]:focus.invalid,.gogo-load-css input[type=datetime-local].invalid,.gogo-load-css input[type=datetime-local]:focus.invalid,.gogo-load-css input[type=email].invalid,.gogo-load-css input[type=email]:focus.invalid,.gogo-load-css input[type=number].invalid,.gogo-load-css input[type=number]:focus.invalid,.gogo-load-css input[type=password].invalid,.gogo-load-css input[type=password]:focus.invalid,.gogo-load-css input[type=search].invalid,.gogo-load-css input[type=search]:focus.invalid,.gogo-load-css input[type=tel].invalid,.gogo-load-css input[type=tel]:focus.invalid,.gogo-load-css input[type=text].invalid,.gogo-load-css input[type=text]:focus.invalid,.gogo-load-css input[type=time].invalid,.gogo-load-css input[type=time]:focus.invalid,.gogo-load-css input[type=url].invalid,.gogo-load-css input[type=url]:focus.invalid,.gogo-load-css textarea.materialize-textarea.invalid,.gogo-load-css textarea.materialize-textarea:focus.invalid{border-bottom:1px solid #B90303;box-shadow:0 1px 0 0 #B90303}.gogo-load-css input[type=date].invalid+label:after,.gogo-load-css input[type=date]:focus.invalid+label:after,.gogo-load-css input[type=datetime-local].invalid+label:after,.gogo-load-css input[type=datetime-local]:focus.invalid+label:after,.gogo-load-css input[type=email].invalid+label:after,.gogo-load-css input[type=email]:focus.invalid+label:after,.gogo-load-css input[type=number].invalid+label:after,.gogo-load-css input[type=number]:focus.invalid+label:after,.gogo-load-css input[type=password].invalid+label:after,.gogo-load-css input[type=password]:focus.invalid+label:after,.gogo-load-css input[type=search].invalid+label:after,.gogo-load-css input[type=search]:focus.invalid+label:after,.gogo-load-css input[type=tel].invalid+label:after,.gogo-load-css input[type=tel]:focus.invalid+label:after,.gogo-load-css input[type=text].invalid+label:after,.gogo-load-css input[type=text]:focus.invalid+label:after,.gogo-load-css input[type=time].invalid+label:after,.gogo-load-css input[type=time]:focus.invalid+label:after,.gogo-load-css input[type=url].invalid+label:after,.gogo-load-css input[type=url]:focus.invalid+label:after,.gogo-load-css textarea.materialize-textarea.invalid+label:after,.gogo-load-css textarea.materialize-textarea:focus.invalid+label:after{content:attr(data-error);color:#B90303;opacity:1}.gogo-load-css input[type=date]+label:after,.gogo-load-css input[type=datetime-local]+label:after,.gogo-load-css input[type=email]+label:after,.gogo-load-css input[type=number]+label:after,.gogo-load-css input[type=password]+label:after,.gogo-load-css input[type=search]+label:after,.gogo-load-css input[type=tel]+label:after,.gogo-load-css input[type=text]+label:after,.gogo-load-css input[type=time]+label:after,.gogo-load-css input[type=url]+label:after,.gogo-load-css textarea.materialize-textarea+label:after{display:block;content:"";position:absolute;top:65px;opacity:0;transition:.2s opacity ease-out,.2s color ease-out}.gogo-load-css .input-field{position:relative;margin-top:1rem}.gogo-load-css .input-field label{color:#3D3D3D;position:absolute;top:.8rem;left:.75rem;font-size:1rem;cursor:text;-webkit-transition:.2s ease-out;-moz-transition:.2s ease-out;-o-transition:.2s ease-out;-ms-transition:.2s ease-out;transition:.2s ease-out}.gogo-load-css .input-field label.active{font-size:.8rem;-webkit-transform:translateY(-140%);-moz-transform:translateY(-140%);-ms-transform:translateY(-140%);-o-transform:translateY(-140%);transform:translateY(-140%)}.gogo-load-css .input-field .prefix{position:absolute;width:3rem;font-size:2rem;line-height:3rem;-webkit-transition:color .2s;-moz-transition:color .2s;-o-transition:color .2s;-ms-transition:color .2s;transition:color .2s}.gogo-load-css .input-field .prefix.active{color:#4A7874}.gogo-load-css .input-field .prefix~input,.gogo-load-css .input-field .prefix~textarea{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.gogo-load-css .input-field .prefix~textarea{padding-top:.8rem}.gogo-load-css .input-field .prefix~label{margin-left:3rem}@media only screen and (max-width:1200px){.gogo-load-css .input-field .prefix~input{width:86%;width:calc(100% - 3rem)}}@media only screen and (max-width:600px){.gogo-load-css .input-field .prefix~input{width:80%;width:calc(100% - 3rem)}}.gogo-load-css .input-field input[type=search]{display:block;line-height:inherit;padding-left:4rem;width:calc(100% - 4rem)}.gogo-load-css .input-field input[type=search]:focus{background-color:#fff;border:0;box-shadow:none;color:#444}.gogo-load-css .input-field input[type=search]:focus+label i,.gogo-load-css .input-field input[type=search]:focus~.material-icons,.gogo-load-css .input-field input[type=search]:focus~.mdi-navigation-close{color:#444}.gogo-load-css .input-field input[type=search]+label{left:1rem}.gogo-load-css .input-field input[type=search]~.material-icons,.gogo-load-css .input-field input[type=search]~.mdi-navigation-close{position:absolute;top:0;right:1rem;color:transparent;cursor:pointer;font-size:2rem;transition:.3s color}.gogo-load-css textarea{width:100%;height:3rem;background-color:transparent}.gogo-load-css textarea.materialize-textarea{overflow-y:hidden;padding:1.6rem 0;resize:none;min-height:3rem}.gogo-load-css .hiddendiv{display:none;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;padding-top:1.2rem}.gogo-load-css [type=radio]:checked,.gogo-load-css [type=radio]:not(:checked){position:absolute;left:-9999px;visibility:hidden}.gogo-load-css [type=radio]:checked+label,.gogo-load-css [type=radio]:not(:checked)+label{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-transition:.28s ease;-moz-transition:.28s ease;-o-transition:.28s ease;-ms-transition:.28s ease;transition:.28s ease;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.gogo-load-css [type=radio]+label:after,.gogo-load-css [type=radio]+label:before{content:'';position:absolute;left:0;top:0;margin:4px;width:16px;height:16px;z-index:0;-webkit-transition:.28s ease;-moz-transition:.28s ease;-o-transition:.28s ease;-ms-transition:.28s ease;transition:.28s ease}.gogo-load-css [type=radio]:not(:checked)+label:before{border-radius:50%;border:2px solid #5a5a5a}.gogo-load-css [type=radio]:not(:checked)+label:after{border-radius:50%;border:2px solid #5a5a5a;z-index:-1;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0)}.gogo-load-css [type=radio]:checked+label:before{border-radius:50%;border:2px solid transparent}.gogo-load-css [type=radio]:checked+label:after{border-radius:50%;border:2px solid #4A7874;background-color:#4A7874;z-index:0;-webkit-transform:scale(1.02);-moz-transform:scale(1.02);-ms-transform:scale(1.02);-o-transform:scale(1.02);transform:scale(1.02)}.gogo-load-css [type=radio].with-gap:checked+label:before{border-radius:50%;border:2px solid #4A7874}.gogo-load-css [type=radio].with-gap:checked+label:after{border-radius:50%;border:2px solid #4A7874;background-color:#4A7874;z-index:0;-webkit-transform:scale(.5);-moz-transform:scale(.5);-ms-transform:scale(.5);-o-transform:scale(.5);transform:scale(.5)}.gogo-load-css [type=radio].with-gap:disabled:checked+label:before{border:2px solid rgba(0,0,0,.26)}.gogo-load-css [type=radio].with-gap:disabled:checked+label:after{border:none;background-color:rgba(0,0,0,.26)}.gogo-load-css [type=radio]:disabled:checked+label:before,.gogo-load-css [type=radio]:disabled:not(:checked)+label:before{background-color:transparent;border-color:rgba(0,0,0,.26)}.gogo-load-css [type=radio]:disabled+label{color:rgba(0,0,0,.26)}.gogo-load-css [type=radio]:disabled:not(:checked)+label:before{border-color:rgba(0,0,0,.26)}.gogo-load-css [type=radio]:disabled:checked+label:after{background-color:rgba(0,0,0,.26);border-color:#BDBDBD}.gogo-load-css form p{margin-bottom:10px;text-align:left}.gogo-load-css form p:last-child{margin-bottom:0}.gogo-load-css [type=checkbox]:checked,.gogo-load-css [type=checkbox]:not(:checked){position:absolute;left:-9999px;visibility:hidden}.gogo-load-css [type=checkbox]+label{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.gogo-load-css [type=checkbox]+label:before{content:'';position:absolute;top:0;left:0;width:18px;height:18px;z-index:0;border:2px solid #5a5a5a;border-radius:1px;margin-top:2px;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;-ms-transition:.2s;transition:.2s}.gogo-load-css [type=checkbox]:not(:checked):disabled+label:before{border:none;background-color:rgba(0,0,0,.26)}.gogo-load-css [type=checkbox]:checked+label:before{top:-4px;left:-3px;width:12px;height:22px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #4A7874;border-bottom:2px solid #4A7874;-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}.gogo-load-css [type=checkbox]:checked:disabled+label:before{border-right:2px solid rgba(0,0,0,.26);border-bottom:2px solid rgba(0,0,0,.26)}.gogo-load-css [type=checkbox]:indeterminate+label:before{left:-10px;top:-11px;width:10px;height:22px;border-top:none;border-left:none;border-right:2px solid #4A7874;border-bottom:none;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);-webkit-backface-visibility:hidden;-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}.gogo-load-css [type=checkbox]:indeterminate:disabled+label:before{border-right:2px solid rgba(0,0,0,.26);background-color:transparent}.gogo-load-css [type=checkbox].filled-in+label:after{border-radius:2px}.gogo-load-css [type=checkbox].filled-in+label:after,.gogo-load-css [type=checkbox].filled-in+label:before{content:'';left:0;position:absolute;transition:border .25s,background-color .25s,width .2s .1s,height .2s .1s,top .2s .1s,left .2s .1s;z-index:1}.gogo-load-css [type=checkbox].filled-in:not(:checked)+label:before{width:0;height:0;border:3px solid transparent;left:6px;top:10px;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:20% 40%;transform-origin:100% 100%}.gogo-load-css [type=checkbox].filled-in:not(:checked)+label:after{height:20px;width:20px;background-color:transparent;border:2px solid #5a5a5a;top:0;z-index:0}.gogo-load-css [type=checkbox].filled-in:checked+label:before{top:0;left:1px;width:8px;height:13px;border-top:none;border-left:none;border-right:2px solid #fff;border-bottom:2px solid #fff;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.gogo-load-css [type=checkbox].filled-in:checked+label:after{top:0;width:20px;height:20px;border:2px solid #4A7874;background-color:#4A7874;z-index:0}.gogo-load-css [type=checkbox].filled-in:disabled:not(:checked)+label:before{background-color:transparent;border:2px solid transparent}.gogo-load-css [type=checkbox].filled-in:disabled:not(:checked)+label:after{border-color:transparent;background-color:#BDBDBD}.gogo-load-css [type=checkbox].filled-in:disabled:checked+label:before{background-color:transparent}.gogo-load-css [type=checkbox].filled-in:disabled:checked+label:after{background-color:#BDBDBD;border-color:#BDBDBD}.gogo-load-css .switch,.gogo-load-css .switch *{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.gogo-load-css .switch label{cursor:pointer}.gogo-load-css .switch label input[type=checkbox]{opacity:0;width:0;height:0}.gogo-load-css .switch label input[type=checkbox]:checked+.lever{background-color:#a1a1a1}.gogo-load-css .switch label input[type=checkbox]:checked+.lever:after{background-color:#4A7874}.gogo-load-css .switch label .lever{content:"";display:inline-block;position:relative;width:40px;height:15px;background-color:#818181;border-radius:15px;transition:background .3s ease;vertical-align:middle;margin:0 16px}.gogo-load-css .switch label .lever:after{content:"";position:absolute;display:inline-block;width:21px;height:21px;background-color:#F1F1F1;border-radius:21px;box-shadow:0 1px 3px 1px rgba(0,0,0,.4);left:-5px;top:-3px;transition:left .3s ease,background .3s ease,box-shadow .1s ease}.gogo-load-css input[type=checkbox]:checked:not(:disabled)~.lever:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,.4),0 0 0 15px rgba(74,120,116,.1)}.gogo-load-css input[type=checkbox]:not(:disabled)~.lever:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,.4),0 0 0 15px rgba(0,0,0,.08)}.gogo-load-css .switch label input[type=checkbox]:checked+.lever:after{left:24px}.gogo-load-css .switch input[type=checkbox][disabled]+.lever{cursor:default}.gogo-load-css .switch label input[type=checkbox][disabled]+.lever:after,.gogo-load-css .switch label input[type=checkbox][disabled]:checked+.lever:after{background-color:#BDBDBD}.gogo-load-css .select-label{position:absolute}.gogo-load-css .select-wrapper{position:relative}.gogo-load-css .select-wrapper input.select-dropdown{position:relative;cursor:pointer;background-color:transparent;border:none;border-bottom:1px solid #3D3D3D;outline:0;height:3rem;line-height:3rem;width:100%;font-size:1rem;margin:0 0 15px;padding:0;display:block}.gogo-load-css .select-wrapper span.caret{color:initial;position:absolute;right:0;top:16px;font-size:10px}.gogo-load-css .select-wrapper span.caret.disabled{color:rgba(0,0,0,.26)}.gogo-load-css .select-wrapper+label{position:absolute;top:-14px;font-size:.8rem}.gogo-load-css select{display:none}.gogo-load-css select.browser-default{display:block}.gogo-load-css select:disabled{color:rgba(0,0,0,.3)}.gogo-load-css .select-wrapper input.select-dropdown:disabled{color:rgba(0,0,0,.3);cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;border-bottom:1px solid rgba(0,0,0,.3)}.gogo-load-css .file-field span,.gogo-load-css .leaflet-interactive,.gogo-load-css input[type=range],.gogo-load-css input[type=range]+.thumb{cursor:pointer}.gogo-load-css .select-wrapper i{color:rgba(0,0,0,.3)}.gogo-load-css .select-dropdown li.disabled{color:rgba(0,0,0,.3);background-color:transparent}.gogo-load-css .file-field{position:relative}.gogo-load-css .file-field .file-path-wrapper{overflow:hidden;padding-left:10px}.gogo-load-css .file-field input.file-path{width:100%}.gogo-load-css .file-field .btn,.gogo-load-css .file-field .btn-large{float:left;height:3rem;line-height:3rem}.gogo-load-css .file-field input[type=file]{position:absolute;top:0;right:0;left:0;bottom:0;width:100%;margin:0;padding:0;font-size:20px;cursor:pointer;opacity:0;filter:alpha(opacity=0)}.gogo-load-css .range-field{position:relative}.gogo-load-css input[type=range]{position:relative;background-color:transparent;outline:0;width:100%;margin:15px 0;padding:0}.gogo-load-css input[type=range]+.thumb{position:absolute;border:none;height:0;width:0;border-radius:50%;background-color:#4A7874;top:10px;margin-left:-6px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-ms-transform-origin:50% 50%;-o-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.gogo-load-css input[type=range]+.thumb .value{display:block;width:30px;text-align:center;color:#4A7874;font-size:0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.gogo-load-css input[type=range]+.thumb.active{border-radius:50% 50% 50% 0}.gogo-load-css input[type=range]+.thumb.active .value{color:#fff;margin-left:-1px;margin-top:8px;font-size:10px}.gogo-load-css input[type=range]:focus{outline:0}.gogo-load-css input[type=range]::-webkit-slider-runnable-track{height:3px;background:#c2c0c2;border:none}.gogo-load-css input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:14px;width:14px;border-radius:50%;background-color:#4A7874;transform-origin:50% 50%;margin:-5px 0 0;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;-ms-transition:.3s;transition:.3s}.gogo-load-css input[type=range]:focus::-webkit-slider-runnable-track{background:#ccc}.gogo-load-css input[type=range]{-webkit-appearance:none;border:1px solid #fff}.gogo-load-css input[type=range]::-moz-range-track{height:3px;background:#ddd;border:none}.gogo-load-css input[type=range]::-moz-range-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#4A7874;margin-top:-5px}.gogo-load-css input[type=range]:-moz-focusring{outline:#fff solid 1px;outline-offset:-1px}.gogo-load-css input[type=range]:focus::-moz-range-track{background:#ccc}.gogo-load-css input[type=range]::-ms-track{height:3px;background:0 0;border-color:transparent;border-width:6px 0;color:transparent}.gogo-load-css input[type=range]::-ms-fill-lower{background:#777}.gogo-load-css input[type=range]::-ms-fill-upper{background:#ddd}.gogo-load-css input[type=range]::-ms-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#4A7874}.gogo-load-css input[type=range]:focus::-ms-fill-lower{background:#888}.gogo-load-css input[type=range]:focus::-ms-fill-upper{background:#ccc}.gogo-load-css select{background-color:rgba(255,255,255,.9);width:100%;padding:5px;border:1px solid #f2f2f2;border-radius:2px;height:3rem}.gogo-load-css .preloader-wrapper{display:inline-block;position:relative;width:48px;height:48px}.gogo-load-css .preloader-wrapper.small{width:36px;height:36px}.gogo-load-css .preloader-wrapper.big{width:64px;height:64px}.gogo-load-css .preloader-wrapper.active{-webkit-animation:container-rotate 1568ms linear infinite;animation:container-rotate 1568ms linear infinite}@-webkit-keyframes container-rotate{to{-webkit-transform:rotate(360deg)}}@keyframes container-rotate{to{transform:rotate(360deg)}}.gogo-load-css .spinner-layer{position:absolute;width:100%;height:100%;opacity:0;border-color:#4A7874}.gogo-load-css .spinner-blue,.gogo-load-css .spinner-blue-only{border-color:#4285f4}.gogo-load-css .spinner-red,.gogo-load-css .spinner-red-only{border-color:#db4437}.gogo-load-css .spinner-yellow,.gogo-load-css .spinner-yellow-only{border-color:#f4b400}.gogo-load-css .spinner-green,.gogo-load-css .spinner-green-only{border-color:#0f9d58}.gogo-load-css .active .spinner-layer.spinner-blue{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,blue-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,blue-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.gogo-load-css .active .spinner-layer.spinner-red{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,red-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,red-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.gogo-load-css .active .spinner-layer.spinner-yellow{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.gogo-load-css .active .spinner-layer.spinner-green{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,green-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,green-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.gogo-load-css .active .spinner-layer,.gogo-load-css .active .spinner-layer.spinner-blue-only,.gogo-load-css .active .spinner-layer.spinner-green-only,.gogo-load-css .active .spinner-layer.spinner-red-only,.gogo-load-css .active .spinner-layer.spinner-yellow-only{opacity:1;-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both}@-webkit-keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg)}}@keyframes fill-unfill-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@-webkit-keyframes blue-fade-in-out{100%,25%,90%,from{opacity:1}26%,89%{opacity:0}}@keyframes blue-fade-in-out{100%,25%,90%,from{opacity:1}26%,89%{opacity:0}}@-webkit-keyframes red-fade-in-out{15%,51%,from{opacity:0}25%,50%{opacity:1}}@keyframes red-fade-in-out{15%,51%,from{opacity:0}25%,50%{opacity:1}}@-webkit-keyframes yellow-fade-in-out{40%,76%,from{opacity:0}50%,75%{opacity:1}}@keyframes yellow-fade-in-out{40%,76%,from{opacity:0}50%,75%{opacity:1}}@-webkit-keyframes green-fade-in-out{100%,65%,from{opacity:0}75%,90%{opacity:1}}@keyframes green-fade-in-out{100%,65%,from{opacity:0}75%,90%{opacity:1}}.gogo-load-css .gap-patch{position:absolute;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.gogo-load-css .gap-patch .circle{width:1000%;left:-450%}.gogo-load-css .circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.gogo-load-css .circle-clipper .circle{width:200%;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent!important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0}.gogo-load-css .circle-clipper.left .circle{left:0;border-right-color:transparent!important;-webkit-transform:rotate(129deg);transform:rotate(129deg)}.gogo-load-css .circle-clipper.right .circle{left:-100%;border-left-color:transparent!important;-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.gogo-load-css .active .circle-clipper.left .circle{-webkit-animation:left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both;animation:left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.gogo-load-css .active .circle-clipper.right .circle{-webkit-animation:right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both;animation:right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}@-webkit-keyframes left-spin{from,to{-webkit-transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg)}}@keyframes left-spin{from,to{transform:rotate(130deg)}50%{transform:rotate(-5deg)}}@-webkit-keyframes right-spin{from,to{-webkit-transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg)}}@keyframes right-spin{from,to{transform:rotate(-130deg)}50%{transform:rotate(5deg)}}.gogo-load-css #spinnerContainer.cooldown{-webkit-animation:container-rotate 1568ms linear infinite,fade-out .4s cubic-bezier(.4,0,.2,1);animation:container-rotate 1568ms linear infinite,fade-out .4s cubic-bezier(.4,0,.2,1)}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}.gogo-load-css .leaflet-image-layer,.gogo-load-css .leaflet-layer,.gogo-load-css .leaflet-marker-icon,.gogo-load-css .leaflet-marker-shadow,.gogo-load-css .leaflet-pane,.gogo-load-css .leaflet-pane>canvas,.gogo-load-css .leaflet-pane>svg,.gogo-load-css .leaflet-tile,.gogo-load-css .leaflet-tile-container,.gogo-load-css .leaflet-zoom-box{position:absolute;left:0;top:0}.gogo-load-css .leaflet-container{overflow:hidden;background:#ddd;outline:0;font:12px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif}.gogo-load-css .leaflet-marker-icon,.gogo-load-css .leaflet-marker-shadow,.gogo-load-css .leaflet-tile{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.gogo-load-css .leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.gogo-load-css .leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.gogo-load-css .leaflet-marker-icon,.gogo-load-css .leaflet-marker-shadow{display:block}.gogo-load-css .leaflet-container .leaflet-marker-pane img,.gogo-load-css .leaflet-container .leaflet-overlay-pane svg,.gogo-load-css .leaflet-container .leaflet-shadow-pane img,.gogo-load-css .leaflet-container .leaflet-tile-pane img,.gogo-load-css .leaflet-container img.leaflet-image-layer{max-width:none!important}.gogo-load-css .leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.gogo-load-css .leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom}.gogo-load-css .leaflet-container.leaflet-touch-drag.leaflet-touch-drag{-ms-touch-action:none;touch-action:none}.gogo-load-css .leaflet-tile{filter:inherit;visibility:hidden}.gogo-load-css .leaflet-tile-loaded{visibility:inherit}.gogo-load-css .leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.gogo-load-css .leaflet-overlay-pane svg{-moz-user-select:none}.gogo-load-css .leaflet-pane{z-index:400}.gogo-load-css .leaflet-tile-pane{z-index:200}.gogo-load-css .leaflet-overlay-pane{z-index:400}.gogo-load-css .leaflet-shadow-pane{z-index:500}.gogo-load-css .leaflet-marker-pane{z-index:600}.gogo-load-css .leaflet-tooltip-pane{z-index:650}.gogo-load-css .leaflet-popup-pane{z-index:700}.gogo-load-css .leaflet-map-pane canvas{z-index:100}.gogo-load-css .leaflet-map-pane svg{z-index:200}.gogo-load-css .leaflet-vml-shape{width:1px;height:1px}.gogo-load-css .lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.gogo-load-css .leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto;float:left;clear:both}.gogo-load-css .leaflet-bottom,.gogo-load-css .leaflet-top{position:absolute;z-index:1000;pointer-events:none}.gogo-load-css .leaflet-top{top:0}.gogo-load-css .leaflet-right{right:0}.gogo-load-css .leaflet-bottom{bottom:0}.gogo-load-css .leaflet-left{left:0}.gogo-load-css .leaflet-right .leaflet-control{float:right;margin-right:10px}.gogo-load-css .leaflet-top .leaflet-control{margin-top:10px}.gogo-load-css .leaflet-bottom .leaflet-control{margin-bottom:10px}.gogo-load-css .leaflet-left .leaflet-control{margin-left:10px}.gogo-load-css .leaflet-fade-anim .leaflet-tile{will-change:opacity}.gogo-load-css .leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;-o-transition:opacity .2s linear;transition:opacity .2s linear}.gogo-load-css .leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.gogo-load-css .leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.gogo-load-css .leaflet-zoom-anim .leaflet-zoom-animated{will-change:transform;-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1);-o-transition:-o-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1)}.gogo-load-css .leaflet-pan-anim .leaflet-tile,.gogo-load-css .leaflet-zoom-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.gogo-load-css .leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.gogo-load-css .leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab}.gogo-load-css .leaflet-crosshair,.gogo-load-css .leaflet-crosshair .leaflet-interactive{cursor:crosshair}.gogo-load-css .leaflet-control,.gogo-load-css .leaflet-popup-pane{cursor:auto}.gogo-load-css .leaflet-dragging .leaflet-grab,.gogo-load-css .leaflet-dragging .leaflet-grab .leaflet-interactive,.gogo-load-css .leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing}.gogo-load-css .leaflet-image-layer,.gogo-load-css .leaflet-marker-icon,.gogo-load-css .leaflet-marker-shadow,.gogo-load-css .leaflet-pane>svg path,.gogo-load-css .leaflet-tile-container{pointer-events:none}.gogo-load-css .leaflet-image-layer.leaflet-interactive,.gogo-load-css .leaflet-marker-icon.leaflet-interactive,.gogo-load-css .leaflet-pane>svg path.leaflet-interactive{pointer-events:visiblePainted;pointer-events:auto}.gogo-load-css .leaflet-container a{color:#0078A8}.gogo-load-css .leaflet-container a.leaflet-active{outline:orange solid 2px}.gogo-load-css .leaflet-zoom-box{border:2px dotted #38f;background:rgba(255,255,255,.5)}.gogo-load-css .leaflet-bar{box-shadow:0 1px 5px rgba(0,0,0,.65);border-radius:4px}.gogo-load-css .leaflet-bar a,.gogo-load-css .leaflet-bar a:hover{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.gogo-load-css .leaflet-bar a,.gogo-load-css .leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.gogo-load-css .leaflet-bar a:hover{background-color:#f4f4f4}.gogo-load-css .leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.gogo-load-css .leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.gogo-load-css .leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.gogo-load-css .leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.gogo-load-css .leaflet-control-zoom-in,.gogo-load-css .leaflet-control-zoom-out{font:700 18px 'Lucida Console',Monaco,monospace;text-indent:1px}.gogo-load-css .leaflet-control-zoom-out{font-size:20px}.gogo-load-css .leaflet-touch .leaflet-control-zoom-in{font-size:22px}.gogo-load-css .leaflet-touch .leaflet-control-zoom-out{font-size:24px}.gogo-load-css .leaflet-control-layers{box-shadow:0 1px 5px rgba(0,0,0,.4);background:#fff;border-radius:5px}.gogo-load-css .leaflet-control-layers-toggle{background-image:url(images/layers.png);width:36px;height:36px}.gogo-load-css .leaflet-retina .leaflet-control-layers-toggle{background-image:url(images/layers-2x.png);background-size:26px 26px}.gogo-load-css .leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.gogo-load-css .leaflet-control-layers .leaflet-control-layers-list,.gogo-load-css .leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.gogo-load-css .leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.gogo-load-css .leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.gogo-load-css .leaflet-control-layers-scrollbar{overflow-y:scroll;padding-right:5px}.gogo-load-css .leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.gogo-load-css .leaflet-control-layers label{display:block}.gogo-load-css .gogo-theme-default.gogocarto-container .element-item .collapsible-header-more .inline-option-values .icon,.gogo-load-css .gogo-theme-default.gogocarto-container .show-directory-menu-button .arrow-right,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .checkbox-wrapper{display:none}.gogo-load-css .leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.gogo-load-css .leaflet-default-icon-path{background-image:url(images/marker-icon.png)}.gogo-load-css .leaflet-container .leaflet-control-attribution{background:#fff;background:rgba(255,255,255,.7);margin:0}.gogo-load-css .leaflet-control-attribution,.gogo-load-css .leaflet-control-scale-line{padding:0 5px;color:#333}.gogo-load-css .leaflet-control-attribution a{text-decoration:none}.gogo-load-css .leaflet-control-attribution a:hover{text-decoration:underline}.gogo-load-css .leaflet-container .leaflet-control-attribution,.gogo-load-css .leaflet-container .leaflet-control-scale{font-size:11px}.gogo-load-css .leaflet-left .leaflet-control-scale{margin-left:5px}.gogo-load-css .leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.gogo-load-css .leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;font-size:11px;white-space:nowrap;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;background:rgba(255,255,255,.5)}.gogo-load-css .leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.gogo-load-css .leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.gogo-load-css .leaflet-touch .leaflet-bar,.gogo-load-css .leaflet-touch .leaflet-control-attribution,.gogo-load-css .leaflet-touch .leaflet-control-layers{box-shadow:none}.gogo-load-css .leaflet-touch .leaflet-bar,.gogo-load-css .leaflet-touch .leaflet-control-layers{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.gogo-load-css .leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.gogo-load-css .leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.gogo-load-css .leaflet-popup-content{margin:13px 19px;line-height:1.4}.gogo-load-css .leaflet-popup-content p{margin:18px 0}.gogo-load-css .leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-left:-20px;overflow:hidden;pointer-events:none}.gogo-load-css .leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.gogo-load-css .leaflet-popup-content-wrapper,.gogo-load-css .leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px rgba(0,0,0,.4)}.gogo-load-css .leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;padding:4px 4px 0 0;border:none;text-align:center;width:18px;height:14px;font:16px/14px Tahoma,Verdana,sans-serif;color:#c3c3c3;text-decoration:none;font-weight:700;background:0 0}.gogo-load-css .leaflet-container a.leaflet-popup-close-button:hover{color:#999}.gogo-load-css .leaflet-popup-scrolled{overflow:auto;border-bottom:1px solid #ddd;border-top:1px solid #ddd}.gogo-load-css .leaflet-oldie .leaflet-popup-content-wrapper{zoom:1}.gogo-load-css .leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto}.gogo-load-css .leaflet-oldie .leaflet-popup-tip-container{margin-top:-1px}.gogo-load-css .leaflet-oldie .leaflet-control-layers,.gogo-load-css .leaflet-oldie .leaflet-control-zoom,.gogo-load-css .leaflet-oldie .leaflet-popup-content-wrapper,.gogo-load-css .leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.gogo-load-css .leaflet-div-icon{background:#fff;border:1px solid #666}.gogo-load-css .leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,.4)}.gogo-load-css .gogo-theme-default.gogocarto-container .element-item .collapsible-body .category-wrapper .option-value,.gogo-load-css .gogo-theme-default.gogocarto-container .element-item .collapsible-header-more .inline-option-values .option-value{color:inherit}.gogo-load-css .leaflet-tooltip.leaflet-clickable{cursor:pointer;pointer-events:auto}.gogo-load-css .leaflet-tooltip-bottom:before,.gogo-load-css .leaflet-tooltip-left:before,.gogo-load-css .leaflet-tooltip-right:before,.gogo-load-css .leaflet-tooltip-top:before{position:absolute;pointer-events:none;border:6px solid transparent;background:0 0;content:""}.gogo-load-css .leaflet-tooltip-bottom{margin-top:6px}.gogo-load-css .leaflet-tooltip-top{margin-top:-6px}.gogo-load-css .leaflet-tooltip-bottom:before,.gogo-load-css .leaflet-tooltip-top:before{left:50%;margin-left:-6px}.gogo-load-css .leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.gogo-load-css .leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.gogo-load-css .leaflet-tooltip-left{margin-left:-6px}.gogo-load-css .leaflet-tooltip-right{margin-left:6px}.gogo-load-css .leaflet-tooltip-left:before,.gogo-load-css .leaflet-tooltip-right:before{top:50%;margin-top:-6px}.gogo-load-css .leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.gogo-load-css .leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}.gogo-load-css .leaflet-cluster-anim .leaflet-marker-icon,.gogo-load-css .leaflet-cluster-anim .leaflet-marker-shadow{-webkit-transition:-webkit-transform .3s ease-out,opacity .3s ease-in;-moz-transition:-moz-transform .3s ease-out,opacity .3s ease-in;-o-transition:-o-transform .3s ease-out,opacity .3s ease-in;transition:transform .3s ease-out,opacity .3s ease-in}.gogo-load-css .leaflet-cluster-spider-leg{-webkit-transition:-webkit-stroke-dashoffset .3s ease-out,-webkit-stroke-opacity .3s ease-in;-moz-transition:-moz-stroke-dashoffset .3s ease-out,-moz-stroke-opacity .3s ease-in;-o-transition:-o-stroke-dashoffset .3s ease-out,-o-stroke-opacity .3s ease-in;transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in}.gogo-load-css .gogo-theme-default.gogocarto-container .moreIconContainer .moreIconWrapper{background-color:#DADAD9}.gogo-load-css .gogo-theme-default.gogocarto-container .element-item .collapsible-header-more .inline-option-values .inline-option-value:not(:last-child):after{content:",";margin-right:5px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container{font-size:14px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .top-image-container{height:90px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .shadow-bottom{border-top:none;width:calc(100% - 23px)}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header{background-color:#175259}@media (min-width:850px){.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header{width:calc(100% + 23px);border-radius:0 8px 8px 0}}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.large-screen .arrow-left{border:8px solid;border-color:transparent #f79900 transparent transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container{height:4rem;padding-left:.5rem;padding-right:1.4rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-icon{font-size:1.1rem;color:#fff!important;height:2.5rem;line-height:2.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-icon:before{line-height:2.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-icon.search-bar-icon{left:2rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-icon.search-geolocalize{right:2.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-bar{background-color:#3bad78;border-radius:0;height:2.5rem;padding:0 3rem;width:95%}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-bar::-webkit-input-placeholder{color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-bar::-moz-placeholder{color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-bar:-ms-input-placeholder{color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-bar:-moz-placeholder{color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-options{padding-left:14px;padding-right:2rem;padding-bottom:1.2rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-options .search-action-btn{color:#175259}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories{border-left:none;background-color:#f3f6f4}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content{background-color:transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content ul{padding-right:10px;padding-left:5px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item{background-color:#fff;margin-bottom:3px;padding-left:0;line-height:2.5rem;height:2.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item.expanded{margin-bottom:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item.disabled{color:#bcbcbc}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item.disabled .icon{color:#bcbcbc!important;background-color:transparent;opacity:1}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .option-name{font-weight:500;font-size:13px;padding-left:.6rem;-webkit-transition:color .1s;-moz-transition:color .1s;-o-transition:color .1s;-ms-transition:color .1s;transition:color .1s}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .arrow-after{position:absolute;right:19%;top:1.1rem;border-radius:1px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .option-name:hover .arrow-after{margin-right:-1px;margin-top:-1px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item.expanded .option-name .arrow-after,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item.expanded .option-name:hover .arrow-after{margin-bottom:-3px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .icon{padding-top:.7rem;font-size:17px;height:3rem;width:2.5rem;margin-right:0;-webkit-transition:color .3s;-moz-transition:color .3s;-o-transition:color .3s;-ms-transition:color .3s;transition:color .3s}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .icon.fa.fa-link,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .icon.fa.fa-recycle{padding-top:.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item:not(.expanded) .option-name .arrow-after{border-color:#3bad78 transparent transparent;opacity:1}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item.expanded .option-name .arrow-after{border-color:transparent transparent #3bad78;opacity:1;top:.9rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategory-item .name-wrapper{margin-left:3rem;margin-right:0;font-weight:900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategory-item .checkbox-wrapper{left:0;right:initial}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategory-item .checkbox-wrapper [type=checkbox].filled-in+label:after{background-color:transparent;border:none;-webkit-transition:none;-moz-transition:none;-o-transition:none;-ms-transition:none;transition:none}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategory-item .checkbox-wrapper [type=checkbox].filled-in+label:before{top:7px;width:9px;height:15px;border-right:3px solid #3bad78;border-bottom:3px solid #3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategory-item .checkbox-wrapper [type=checkbox].filled-in:not(:checked)+label:before{border-right:3px solid #bcbcbc;border-bottom:3px solid #bcbcbc;-webkit-transition:none;-moz-transition:none;-o-transition:none;-ms-transition:none;transition:none}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .category-wrapper .subcategories-wrapper:not(.no-withdrawal){margin-left:0!important;margin-bottom:6px;border:none}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item{margin-bottom:0;line-height:2.7rem;height:2.7rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item .option-name{font-size:.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item .icon{font-size:.85rem;padding-top:.95rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item.disabled .icon{color:#bcbcbc!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:first-child .name-wrapper{color:#3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:first-child .subcategorie-option-item.checked .icon:not(.subIcon){color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .name-wrapper,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item.checked .icon{color:#f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:first-child .subcategorie-option-item .subIcon,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:first-child .subcategorie-option-item:not(.checked) .icon{background-color:transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child [type=checkbox].filled-in:checked+label:before{top:7px;width:9px;height:15px;border-right:3px solid #f79900;border-bottom:3px solid #f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item .icon{color:#175259;background-color:transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item:hover .subcategorie-option-checkbox+label:before{color:#f79900;border-color:#f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item:not(.expanded) .option-name .arrow-after{border-color:#f79900 transparent transparent;opacity:1}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item:not(.expanded) .option-name:hover .arrow-after{border-color:#f79900 transparent transparent!important;opacity:1}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item.expanded .option-name .arrow-after{border-color:transparent transparent #f79900;opacity:1;top:1rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item.expanded .option-name:hover .arrow-after{border-color:transparent transparent #f79900!important;opacity:1}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #filter-favorite .icon{padding-top:3px;padding-left:10px;background-color:transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #filter-favorite .icon:before,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #filter-favorite .option-name{color:#bcbcbc}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #filter-favorite.checked .icon:before,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #filter-favorite.checked .option-name{color:#f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .show-only-title{color:#3bad78;padding-left:0;margin-bottom:0;border-top:none;margin-top:0;padding-top:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .iconInsideMarker-wrapper{background-color:transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .iconInsideMarker-wrapper .iconInsideMarker{color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-name{color:#f1f1f1;opacity:1}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .moreIconContainer .moreIconWrapper{font-size:14px;line-height:0;padding-left:1px;box-shadow:1px 1px 4px 1px #989898}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster div{font-size:15px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster.marker-cluster-small div{background-color:#f8ab00;width:34px;height:34px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster.marker-cluster-small div span{line-height:34px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster.marker-cluster-medium div{background-color:#f78b16;width:38px;height:38px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster.marker-cluster-medium div span{line-height:38px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster.marker-cluster-large div{background-color:#f5701e;width:44px;height:44px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster.marker-cluster-large div span{line-height:44px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-header{background-color:#175259}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-header .name{font-weight:900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-header .collapsible-header-more{line-height:1.3rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-header .element-main-icon{display:none!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-header .collapsible-header-title .gogo-icon-close:before{background-color:#f79900;color:#fff;border-radius:3px;padding:2px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .menu-element-item-text{display:inline-block!important;text-transform:uppercase;line-height:3rem;margin-left:10px;font-size:12px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper .option-value .icon,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .info-bar-divider{display:none}@media (max-width:460px){.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .menu-element-item{margin:0 .5rem!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .menu-element-item .menu-element-item-text{font-size:11px;margin-left:5px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .menu-element-item .menu-icon{font-size:16px}}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body{background-color:#f3f6f4}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .collapsible-body-main-content{background-color:#f3f6f4;padding-left:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .description{line-height:1.3rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .section{background-color:#fff;margin-top:1rem;padding-left:1rem;margin-right:.4rem;line-height:1.5rem;padding-top:.7rem;padding-bottom:.6rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .section.section-taxonomy{padding:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .section.section-taxonomy h3.category-name{background-color:#f3f6f4;margin-left:0;padding-left:1.5rem;color:#f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .section.section-taxonomy h3.category-name:first-child{color:#3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .section.sectionlongDescription{margin-top:0;background-color:#f3f6f4}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body h3{margin-left:1rem;font-weight:900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper{background-color:#f3f6f4}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .option-value{margin-bottom:3px;border-left:10px solid;padding-left:1rem;background-color:#fff;line-height:2.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .option-value .option-name{color:#175259;line-height:2.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .option-value .icon.fa{margin-right:10px;font-size:.9rem;padding-top:.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .row+.category-wrapper .row:last-child .option-value{padding-bottom:1.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper{border:none;margin-left:0;padding-left:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper .option-value{padding-left:.9rem;margin-top:-8px;height:1.5rem;line-height:1.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper .option-value .option-name{color:inherit;margin-left:4px;line-height:1rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper .option-value .option-name:before{content:"➡";font-size:1.2rem;margin-right:6px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .sectionOpenHours .day:after{content:"➡";font-size:1.2rem;color:#3bad78;float:right}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .sectionOpenHours .openHours{padding-left:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .tags-container{background-color:#f3f6f4;margin-top:0;padding-top:1rem;padding-left:1.5rem;margin-bottom:-10px;text-align:center}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .tags-container .gogo-tag{background-color:#fff;border-radius:0;padding:4px 14px;color:#3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .menu-element{background-color:#3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .menu-element .menu-element-item{display:inline-block;font-weight:700;color:#e6e6e6}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values{width:calc(100% - 140px);font-weight:400}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value{margin-right:20px;display:inline-block}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .expandLabel,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .inline-option-values,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile #mobile-filters-icon i,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .show-directory-menu-button .text,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .show-directory-menu-button i{display:none}@media only screen and (min-width:601px){.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-wrapper.BigSize .iconInsideMarker-wrapper{left:7px!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value .icon{margin-right:5px;font-size:.9rem;padding-top:.6rem;background-color:transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value .option-value{line-height:2rem;font-style:normal;font-weight:400}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value .option-value.same-icon-as-last-item{margin-left:-17px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value .option-value.same-icon-as-last-item:before{content:"+";margin-right:5px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #map-features-buttons{top:140px}}@media only screen and (max-width:600px){.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value{margin-right:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value .option-value,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value:last-child{display:none}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value .icon{color:#fff;border-radius:50%;font-size:.9rem;padding:10px 9px;margin-right:5px}}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .expandLabel{width:auto;float:right;border:2px solid;color:#f79900;padding:8px 15px;text-align:center;border-radius:20px;margin-top:-3px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .inline-option-values,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #map-gogo-controls{width:100%}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .expandLabel:before{margin-right:8px;color:#fff;background-color:#f79900;border-radius:50%;padding:0 4px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item.active .expandLabel:before{content:"-";padding:0 6px 1px;font-weight:900;font-size:16px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item:not(.active) .expandLabel:before{content:"+"}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header{padding:.5rem 0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-title{padding-bottom:1rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-title .gogo-icon-close{font-size:.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-title .gogo-icon-close:before{background-color:#3bad78;color:#175259}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .name{font-size:1.4rem;line-height:1.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .gogo-icon-close{font-size:1rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .expandLabel.transform-big{background-color:#fff;color:#f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .expandLabel.transform-big:hover{color:#f79900}@media only screen and (max-width:600px){.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item .expandLabel{margin-right:10px;font-size:13px;font-weight:900;padding:8px 10px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .expandLabel.transform-big{padding:8px 10px}}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .collapsible-header{padding-bottom:.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .inline-option-values .inline-option-value:last-child{float:right;margin-right:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .inline-option-values .inline-option-value:last-child .option-value{color:#175259}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element{text-align:right;padding:0 10px 0 0;height:2.3rem!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element .menu-element-item .menu-icon{font-size:18px!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element .menu-element-item .menu-icon:before{line-height:2.3rem!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element .menu-element-item-text{font-size:11px;line-height:2.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .location{font-weight:400;color:#3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .location .postalCode{font-size:14px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .collapsible-body-main-content{padding-bottom:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .collapsible-body .tags-container{margin-bottom:0;padding-bottom:1rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .feature-button,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom-in,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom-out{color:#175259}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .feature-button:hover,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom-in:hover,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom-out:hover{color:#3bad78;background-color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-layers{margin-right:17px!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .gogo-map-control{background-color:#175259;color:#fff;border:none;text-transform:uppercase;font-weight:700;font-size:12px!important;line-height:22px;padding:5px 15px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .gogo-map-control .gogo-icon-list{color:#3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom.leaflet-bar.leaflet-control{margin-top:60px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .show-as-list-button{position:absolute;right:20px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .show-directory-menu-button{position:absolute;left:-20px;top:80px;background-color:#175259!important;padding:10px 10px 3px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .show-directory-menu-button .arrow-right{margin-bottom:10px;margin-left:4px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .show-directory-menu-button:hover .arrow-right{border-color:transparent transparent transparent #f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header{background-color:#f3f6f4;color:#3bad78;text-align:left}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header .show-as-map-button{height:2rem;line-height:2rem;border-radius:5px;top:15px;padding:0 15px;background-color:#f79900;left:initial!important;text-transform:uppercase;text-decoration:none;font-size:.8rem;font-weight:700;float:right;margin-top:12px;margin-right:-8px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header .show-as-map-button:hover{color:#fff!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header .show-as-map-button .btn-back{font-size:1.2rem;margin-right:10px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header .show-directory-menu-button{top:0;left:-40px;border-radius:0 0 5px;padding-bottom:0;padding-top:6px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}@media only screen and (min-width:1201px){.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header .show-directory-menu-button{left:0}}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile .feature-button{margin-right:0;float:left}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile #mobile-search-icon{border-radius:8px 0 0 8px;margin-right:2px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile #mobile-filters-icon{background-color:#175259;border-radius:0 8px 8px 0;padding-top:5px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile .show-as-list-button,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile .show-as-map-button{color:#3bad78;border-radius:8px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile .show-as-map-button{background-color:#f79900!important;color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu .sub-categories .sub-categories-content ul::-webkit-scrollbar-track,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .custom-scroll-bar-light::-webkit-scrollbar-track,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-layers-list::-webkit-scrollbar-track{background-color:transparent;border:none}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu .sub-categories .sub-categories-content ul::-webkit-scrollbar,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .custom-scroll-bar-light::-webkit-scrollbar,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-layers-list::-webkit-scrollbar{width:13px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu .sub-categories .sub-categories-content ul::-webkit-scrollbar-thumb,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .custom-scroll-bar-light::-webkit-scrollbar-thumb,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-layers-list::-webkit-scrollbar-thumb{border-radius:0;background-color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .custom-scroll-bar::-webkit-scrollbar-track,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-alt::-webkit-scrollbar-track,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-error::-webkit-scrollbar-track,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-geocoders::-webkit-scrollbar-track{background-color:transparent;border:none}.gogo-load-css .gogocarto-container #directory-list-spinner-loader .spinner-layer,.gogo-load-css .gogocarto-container #directory-spinner-loader .spinner-layer,.gogo-load-css .gogocarto-container #info-bar-spinner-loader .spinner-layer{border-color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .custom-scroll-bar::-webkit-scrollbar,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-alt::-webkit-scrollbar,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-error::-webkit-scrollbar,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-geocoders::-webkit-scrollbar{width:18px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .custom-scroll-bar::-webkit-scrollbar-thumb,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-alt::-webkit-scrollbar-thumb,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-error::-webkit-scrollbar-thumb,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-geocoders::-webkit-scrollbar-thumb{border-radius:0;background-color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .btn,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .btn-large{font-weight:700;box-shadow:none;border-radius:none;font-size:.9rem}.gogo-load-css .gogocarto-container{display:flex;-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;height:100%;position:relative;font-size:.95rem}.gogo-load-css .gogocarto-container #directory-spinner-loader,.gogo-load-css .gogocarto-container #info-bar-spinner-loader{position:absolute;margin:auto;top:0;left:0;bottom:0;right:0;z-index:1}.gogo-load-css .gogocarto-container #directory-list-spinner-loader{position:relative;margin-top:40px;z-index:500}.gogo-load-css .gogocarto-container #directory-loading{position:absolute;width:200px;margin:auto;top:0;left:0;right:0;z-index:500;background-color:#f2b523;color:#272626;padding:.2rem 0;text-align:center}.gogo-load-css .gogocarto-container #info-bar-overlay{background-color:rgba(0,0,0,.17);z-index:10;top:0;left:0;bottom:0;right:0;position:absolute}.gogo-load-css .gogocarto-container .leaflet-routing-container,.gogo-load-css .gogocarto-container .leaflet-routing-error{border-radius:0;box-shadow:none;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;background-color:#fff;transition:all .2s ease;box-sizing:border-box}.gogo-load-css .gogocarto-container .leaflet-control-container .leaflet-routing-container-hide{width:32px;height:32px}.gogo-load-css .gogocarto-container .leaflet-routing-container h2{font-size:1.2rem;text-align:center;margin:1.5rem .5rem 1rem;font-weight:600}.gogo-load-css .gogocarto-container .leaflet-routing-container h2 .distance{font-weight:400;color:#5d5d5d;margin-left:5px}.gogo-load-css .gogocarto-container .leaflet-routing-container h3{font-size:.9rem;font-weight:400;text-align:center;margin:.5rem;line-height:1.5rem;padding-bottom:1.5rem;border-bottom:1px solid #888}.gogo-load-css .gogocarto-container .leaflet-routing-collapsible .leaflet-routing-geocoders{margin-top:20px}.gogo-load-css .gogocarto-container .td-leaflet-routing-icon{padding-left:15px;padding-right:5px;vertical-align:top}.gogo-load-css .gogocarto-container .td-leaflet-routing-text{font-size:.9rem;vertical-align:top}.gogo-load-css .gogocarto-container .td-leaflet-routing-distance{font-size:.8rem;color:#777;font-weight:300;vertical-align:top}.gogo-load-css .gogocarto-container .leaflet-routing-alt,.gogo-load-css .gogocarto-container .leaflet-routing-error,.gogo-load-css .gogocarto-container .leaflet-routing-geocoders{height:100%;padding:0;font-size:.95rem;margin:0;border-bottom:1px solid #ccc;overflow-y:auto;transition:all .2s ease}.gogo-load-css .gogocarto-container .leaflet-control-container .leaflet-routing-container-hide .leaflet-routing-alt,.gogo-load-css .gogocarto-container .leaflet-control-container .leaflet-routing-container-hide .leaflet-routing-geocoders{display:none}.gogo-load-css .gogocarto-container .leaflet-bar .leaflet-routing-alt:last-child{border-bottom:none}.gogo-load-css .gogocarto-container .leaflet-routing-alt-minimized{display:none;color:#888;max-height:64px;overflow:hidden;cursor:pointer}.gogo-load-css .gogocarto-container .leaflet-routing-alt tr:hover{background-color:#eee;cursor:pointer}.gogo-load-css .gogocarto-container .leaflet-routing-icon{background-image:url(images/leaflet.routing.icons.png);-webkit-background-size:240px 20px;background-size:240px 20px;background-repeat:no-repeat;margin:0;content:'';display:inline-block;vertical-align:top;width:20px;height:20px}.gogo-load-css .gogocarto-container .leaflet-routing-icon-continue{background-position:0 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-sharp-right{background-position:-20px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-turn-right{background-position:-40px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-bear-right{background-position:-60px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-u-turn{background-position:-80px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-sharp-left{background-position:-100px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-turn-left{background-position:-120px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-bear-left{background-position:-140px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-depart{background-position:-160px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-enter-roundabout{background-position:-180px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-arrive{background-position:-200px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-via{background-position:-220px 0}.gogo-load-css .gogocarto-container .leaflet-routing-geocoders div{padding:4px 0}.gogo-load-css .gogocarto-container .leaflet-routing-geocoders input{width:303px;width:calc(100% - 4px);line-height:1.67;border:1px solid #ccc}.gogo-load-css .gogocarto-container .leaflet-routing-geocoders button{font:700 18px 'Lucida Console',Monaco,monospace;border:1px solid #ccc;border-radius:4px;background-color:#fff;margin:0 3px 0 0;float:right;cursor:pointer;transition:background-color .2s ease}.gogo-load-css .gogocarto-container .leaflet-routing-add-waypoint:after{content:'+'}.gogo-load-css .gogocarto-container .leaflet-routing-reverse-waypoints:after{font-weight:400;content:'\21c5'}.gogo-load-css .gogocarto-container .leaflet-routing-geocoders button:hover{background-color:#eee}.gogo-load-css .gogocarto-container .leaflet-routing-geocoder,.gogo-load-css .gogocarto-container .leaflet-routing-geocoders input,.gogo-load-css .gogocarto-container .leaflet-routing-remove-waypoint{position:relative}.gogo-load-css .gogocarto-container .leaflet-routing-geocoder-result{font:12px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif;position:absolute;max-height:0;overflow:hidden;transition:all .5s ease;z-index:1000}.gogo-load-css .gogocarto-container .leaflet-routing-geocoder-result table{width:100%;border:1px solid #ccc;border-radius:0 0 4px 4px;background-color:#fff;cursor:pointer}.gogo-load-css .gogocarto-container .leaflet-routing-geocoder-result-open{max-height:800px}.gogo-load-css .gogocarto-container .leaflet-routing-geocoder-result tr:hover,.gogo-load-css .gogocarto-container .leaflet-routing-geocoder-selected{background-color:#eee}.gogo-load-css .gogocarto-container .leaflet-routing-geocoder-no-results{font-style:italic;color:#888}.gogo-load-css .gogocarto-container .leaflet-routing-remove-waypoint{background-color:transparent;display:inline-block;vertical-align:middle;cursor:pointer}.gogo-load-css .gogocarto-container .leaflet-routing-remove-waypoint:after{position:absolute;display:block;width:15px;height:1px;z-index:1;right:1px;top:4px;bottom:0;margin:-16px auto auto;padding:2px 4px 16px 2px;font-size:18px;font-weight:700;content:"\00d7";text-align:center;cursor:pointer;color:#ccc;background:#fff;line-height:1}.gogo-load-css .gogocarto-container .leaflet-routing-remove-waypoint:hover{color:#000}.gogo-load-css .gogocarto-container .leaflet-routing-instruction-distance{width:4rem}.gogo-load-css .gogocarto-container .leaflet-routing-collapse-btn{display:none;position:absolute;top:0;right:6px;font-size:24px;color:#ccc;font-weight:700}.gogo-load-css .gogocarto-container #filter-moderation,.gogo-load-css .gogocarto-container #filter-moderation .moderation-checkbox+label:before{color:#c53f36}.gogo-load-css .gogocarto-container .leaflet-routing-container-hide .leaflet-routing-collapse-btn{position:relative;left:4px;top:4px;display:block;width:26px;height:23px;background-image:url(routing-icon.png)}.gogo-load-css .gogocarto-container .leaflet-top .leaflet-routing-container.leaflet-routing-container-hide{margin-top:10px!important}.gogo-load-css .gogocarto-container .leaflet-right .leaflet-routing-container.leaflet-routing-container-hide{margin-right:10px!important}.gogo-load-css .gogocarto-container .leaflet-bottom .leaflet-routing-container.leaflet-routing-container-hide{margin-bottom:10px!important}.gogo-load-css .gogocarto-container .leaflet-left .leaflet-routing-container.leaflet-routing-container-hide{margin-left:10px!important}@media only screen and (max-width:640px){.gogo-load-css .gogocarto-container .leaflet-routing-container{margin:0!important;padding:0!important;width:100%;height:100%}}.gogo-load-css .gogocarto-container #filter-moderation:hover{background-color:#fff}.gogo-load-css .gogocarto-container #filter-moderation .moderation-checkbox:not(:checked)+label:before{background-color:transparent;border-color:#c53f36}.gogo-load-css .gogocarto-container #filter-pending,.gogo-load-css .gogocarto-container #filter-pending .pending-checkbox+label:before{color:#565656}.gogo-load-css .gogocarto-container #filter-pending:hover{background-color:#fff}.gogo-load-css .gogocarto-container #filter-pending .pending-checkbox:not(:checked)+label:before{background-color:transparent;border-color:#565656}.gogo-load-css .gogocarto-container #filter-favorite{color:#cc8901}.gogo-load-css .gogocarto-container #filter-favorite .gogo-icon-star-full{color:#fff;font-size:18px}.gogo-load-css .gogocarto-container #filter-favorite .gogo-icon-star-full:before{padding:2px 2px 3px;border:none;color:#cc8901;background-color:transparent}.gogo-load-css .gogocarto-container #filter-favorite:hover{background-color:#fff}.gogo-load-css .gogocarto-container #filter-favorite .favorite-checkbox:not(:checked)+label:before{background-color:transparent;border-color:#cc8901}.gogo-load-css .gogocarto-container #filter-favorite .favorite-checkbox+label:before{color:#cc8901}.gogo-load-css .gogocarto-container .sub-categories-content.no-top-divider>ul>.main-option-subcategories-container>.category-wrapper>.subcategory-item{border-top:none!important;margin-top:0!important}.gogo-load-css .gogocarto-container .category-wrapper{margin-top:.5rem}.gogo-load-css .gogocarto-container .subcategory-item{position:relative;line-height:3rem;padding-top:0;padding-left:.8rem;font-weight:700;font-size:90%;text-transform:uppercase}.gogo-load-css .gogocarto-container .subcategory-item.top-separator{border-top:2px dashed #eee;margin-top:1rem;padding-top:.5rem}.gogo-load-css .gogocarto-container .subcategory-item .name-wrapper{margin-right:3rem;height:3rem;overflow:hidden}.gogo-load-css .gogocarto-container .subcategory-item .name-wrapper .arrow-after{display:inline-block;margin-left:1rem;margin-bottom:1px;border:5px solid;border-radius:4px}.gogo-load-css .gogocarto-container .subcategory-item .name-wrapper:hover{cursor:pointer}.gogo-load-css .gogocarto-container .subcategory-item:not(.expanded) .name-wrapper .arrow-after{margin-bottom:-3px!important}.gogo-load-css .gogocarto-container .subcategory-item.unexpandable .name-wrapper:hover{cursor:default;color:inherit}.gogo-load-css .gogocarto-container .subcategory-item .checkbox-wrapper{width:3rem;position:absolute;right:0;top:2px;bottom:0}.gogo-load-css .gogocarto-container .subcategory-item .checkbox-wrapper:hover{cursor:pointer}.gogo-load-css .gogocarto-container .subcategory-item .checkbox-wrapper .checkbox-container{position:absolute;top:2px;right:0}.gogo-load-css .gogocarto-container .subcategory-item .checkbox-wrapper .checkbox-container .subcategorie-checkbox+label:after{top:9px!important;width:17px;height:17px;border:2px solid;-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}.gogo-load-css .gogocarto-container .subcategory-item .checkbox-wrapper .checkbox-container .subcategorie-checkbox+label:before{top:9px;left:1px;width:6px;height:11px}.gogo-load-css .gogocarto-container .subcategory-item .checkbox-wrapper .checkbox-container .subcategorie-checkbox:not(:checked)+label:after{background-color:transparent}.gogo-load-css .gogocarto-container .subcategorie-option-item{position:relative;margin-bottom:0;line-height:2.8rem;padding:0 0 0 .8rem;height:2.8rem;overflow:hidden;text-overflow:ellipsis}.gogo-load-css .gogocarto-container .subcategorie-option-item:not(.expanded) .option-name:hover .arrow-after{margin-bottom:-5px}.gogo-load-css .gogocarto-container .subcategorie-option-item:not(.expanded) .option-name .arrow-after{margin-bottom:-4px}.gogo-load-css .gogocarto-container .subcategorie-option-item .gogo-icon-name-wrapper{margin-right:3rem}.gogo-load-css .gogocarto-container .subcategorie-option-item .gogo-icon-name-wrapper .option-name{position:absolute;width:100%}.gogo-load-css .gogocarto-container .subcategorie-option-item .gogo-icon-name-wrapper .option-name:hover .arrow-after{border:6px solid;margin-bottom:1px}.gogo-load-css .gogocarto-container .subcategorie-option-item .arrow-after{display:inline-block;margin-left:1rem;border:5px solid;margin-bottom:1px;border-radius:4px}.gogo-load-css .gogocarto-container .subcategorie-option-item .icon{font-size:1.3rem}.gogo-load-css .gogocarto-container .subcategorie-option-item .icon.fa{font-size:1.2rem}.gogo-load-css .gogocarto-container .subcategorie-option-item .subcategorie-option-checkbox+label:before{width:13px;height:13px;left:2px;top:3px;z-index:0;border:2px solid #5a5a5a;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;margin-top:2px}.gogo-load-css .gogocarto-container .subcategorie-option-item .subcategorie-option-checkbox:checked+label:before{top:2px;left:1px;width:7px;height:13px;border-color:#3D3D3D;border-top:none;border-left:none;border-right:2px solid;border-bottom:2px solid;border-radius:0;-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}.gogo-load-css .gogocarto-container .subcategorie-option-item .checkbox-wrapper{width:3rem;position:absolute;right:0;top:0;bottom:0;background:-moz-linear-gradient(left,rgba(255,255,255,.3) 0,rgba(255,255,255,.48) 25%,#fff 100%);background:-webkit-linear-gradient(left,rgba(255,255,255,.3) 0,rgba(255,255,255,.48) 25%,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,.3) 0,rgba(255,255,255,.48) 25%,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#4dffffff', endColorstr='#ffffff', GradientType=1 )}.gogo-load-css .gogocarto-container .subcategorie-option-item .checkbox-wrapper .checkbox-container{position:absolute;top:.6rem;right:0}.gogo-load-css .gogocarto-container .subcategorie-option-item:hover{background-color:#f0f0f0;cursor:pointer}.gogo-load-css .gogocarto-container .subcategorie-option-item:hover .checkbox-wrapper{background:0 0}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal){margin-left:1.3rem;border-left:1px dotted #c3c3c3;margin-bottom:15px;margin-top:0}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .category-wrapper{margin-top:0}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategory-item{font-size:85%;line-height:2.5rem;margin-top:0;padding-top:0;padding-left:.9rem;margin-bottom:0}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategory-item .subcategorie-checkbox+label:after{width:15px;height:15px}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategory-item .subcategorie-checkbox+label:before{width:5px;height:9px;top:9px;left:2px}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategory-item .name-wrapper{height:2.5rem}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategory-item .checkbox-wrapper{top:7px;right:-1px}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategory-item .checkbox-wrapper .checkbox-container{top:-4px}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item{font-size:95%;line-height:2.4rem;height:2.4rem;padding-left:1rem}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item .icon{font-size:1.2rem;padding-top:1px;margin-right:.8rem}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item .icon.fa{font-size:1.1rem;padding-top:.7rem}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item .subcategorie-option-checkbox+label:before{width:10px;height:10px;left:3px}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item .subcategorie-option-checkbox:checked+label:before{width:6px;height:10px;left:2px}.gogo-load-css .gogocarto-container #directory-menu.small-width{font-size:.95rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .subcategorie-option-item .arrow-after{margin-left:.5rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .icon{margin-right:.6rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .category-wrapper .subcategories-wrapper:not(.no-withdrawal){margin-left:1rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .main-categories{width:3rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .main-categories .icon{height:3.4rem;width:3rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .main-categories .icon:before{left:.6rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .sub-categories .sub-categories-content{padding-right:0}.gogo-load-css .gogocarto-container #directory-menu.small-width .sub-categories:not(.with-left-border) .sub-categories-content{padding-left:.2rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .subcategory-item{padding-left:.6rem;font-size:.9rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .subcategorie-option-item{padding-left:.5rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .category-wrapper .category-wrapper .subcategory-item{padding-left:.7rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .category-wrapper .category-wrapper .subcategorie-option-item{padding-left:.6rem}.gogo-load-css .gogocarto-container #directory-menu .filter-menu{width:100%;height:auto;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row nowrap;-webkit-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container #directory-menu .filter-menu{height:100%}}.gogo-load-css .gogocarto-container #directory-menu .main-categories{width:3.5rem;padding-top:.6rem;height:100%}.gogo-load-css .gogocarto-container #directory-menu .main-categories .main-icon{padding-top:0}.gogo-load-css .gogocarto-container #directory-menu .main-categories .main-icon:not(.active) .main-icon-text{transform:rotateZ(-45deg);opacity:.8}.gogo-load-css .gogocarto-container #directory-menu .main-categories .main-icon:hover .main-icon-text{opacity:1}.gogo-load-css .gogocarto-container #directory-menu .main-categories .main-icon .main-icon-text{text-transform:uppercase;-webkit-transition:transform .2s;-moz-transition:transform .2s;-o-transition:transform .2s;-ms-transition:transform .2s;transition:transform .2s;font-size:.85rem;font-weight:700;color:#fff;opacity:1}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon{width:3.5rem;height:3.5rem;line-height:3.5rem;margin:0;padding-right:8px;text-align:center;position:relative}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon .main-option-tooltip{display:none}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon:before{position:absolute;top:1rem;left:.8rem}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon:not(.active):hover{cursor:pointer}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon:not(.active):hover .main-option-tooltip{display:block;position:absolute;left:4rem;top:.5rem;height:2.5rem;line-height:2.5rem;z-index:100;width:14rem;color:#efefef;font-size:1rem;border-radius:5px}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon.active{color:#fff;padding-right:8px}.gogo-load-css .gogocarto-container #directory-menu .main-categories .main-gogo-icon-background{position:absolute;top:.6rem;border-radius:0 50% 50% 0}.gogo-load-css .gogocarto-container #directory-menu #main-option-all.show-one-pane-per-main-option .gogo-icon-name-wrapper:hover:after{content:"+";font-size:1.4rem;font-weight:400;background-color:#eee;padding:3px 11px;border-radius:3px;margin-left:5px;line-height:1rem;position:absolute;right:10px;z-index:10;top:11px}.gogo-load-css .gogocarto-container #directory-menu .secondary-filters{padding:.5rem 0 0;height:auto;border-top:2px dashed #eee;margin-top:1rem}.gogo-load-css .gogocarto-container #directory-menu .sub-categories{-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;padding-left:7px;padding-right:4px;background-color:#eee}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categorie-main-title{height:3rem;line-height:3rem;font-weight:700;text-align:center}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categorie-main-title{font-size:1.2rem}}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categories-content{height:calc(100% - 3rem);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding-right:5px;padding-top:0;background-color:#fff}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categories-content.full-height{height:100%}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categories-content ul{height:100%;margin:0;border:0;box-shadow:none;padding-bottom:2rem;overflow-y:auto;overflow-x:hidden}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container.directions{background-color:#f7f7f7}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container.directions .directory-menu-header{width:100%;border-radius:0}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container.directions .directory-menu-header .directions-header{display:block}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container.directions .directory-menu-header .directions-header h3{font-size:1rem;text-align:left;text-transform:uppercase;padding-left:1rem;color:#fff;font-weight:600;line-height:3rem;margin:0}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container.directions .directory-menu-content .filter-menu{display:none}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container.directions .directory-menu-content #directory-menu-spinner-loader{display:block}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directions-header{display:none;position:relative}.gogo-load-css .gogocarto-container #directory-menu{z-index:998;overflow-y:hidden;-webkit-transition:height .5s;-moz-transition:height .5s;-o-transition:height .5s;-ms-transition:height .5s;transition:height .5s;-webkit-box-shadow:4px 0 2px rgba(0,0,0,.2),-1px 0 2px rgba(0,0,0,.2);-moz-box-shadow:4px 0 2px rgba(0,0,0,.2),-1px 0 2px rgba(0,0,0,.2);box-shadow:4px 0 2px rgba(0,0,0,.2),-1px 0 2px rgba(0,0,0,.2)}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #directory-menu{overflow:visible}}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:column;-webkit-flex-flow:column;flex-flow:column;width:100%;height:100%}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .menu-top-image{width:100%}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header{width:100%;z-index:2;position:relative;-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container{overflow:scroll}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-container{display:none}}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.large-screen{position:absolute;right:0;top:0;width:24px;bottom:0;-webkit-flex-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;display:none}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.large-screen .arrow-left{border:8px solid;border-color:transparent #eee transparent transparent}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.large-screen:hover{cursor:pointer}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.large-screen:hover .arrow-left{border-color:transparent #fff transparent transparent}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .subheader{position:relative}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .subheader .btn-close{position:absolute;margin:0;right:0;top:7px;padding:0 1rem;z-index:50;color:#CECECE}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .subheader .btn-close:hover{color:#fff;cursor:pointer}@media (min-width:850px){.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header{width:calc(100% + 12px);border-radius:0 0 5px 5px;padding-right:15px}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.large-screen{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.small-screen{display:none}}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .shadow-bottom{bottom:-8px;border-top:none;width:calc(100% - 12px)}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-content{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;position:relative;height:100px}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-content #directory-menu-spinner-loader{top:40%;left:40%;position:absolute;display:none}.gogo-load-css .gogocarto-container #directory-menu .btn-close-menu.small-screen{color:#fff;text-transform:uppercase;width:100%;border-radius:0;text-align:center;line-height:2.5rem;z-index:10;box-shadow:1px -2px 11px 2px rgba(0,0,0,.25)}@media (min-width:850px){.gogo-load-css .gogocarto-container #directory-menu .btn-close-menu.small-screen{display:none}.gogo-load-css .gogocarto-container .directory-menu-drag-target{display:none!important}}.gogo-load-css .gogocarto-container #directory-menu-overlay{display:none;position:absolute;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5);z-index:997;will-change:opacity}@media (min-width:850px){.gogo-load-css .gogocarto-container #directory-menu-overlay{display:none!important}}.gogo-load-css .gogocarto-container .directory-menu-drag-target{height:100%;width:10px;position:fixed;top:0;z-index:999}.gogo-load-css .gogocarto-container .cluster{z-index:2}.gogo-load-css .gogocarto-container .icon{font-size:1.4rem;padding-top:3px;float:left;margin-right:1rem}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container .icon{padding-top:2px}}.gogo-load-css .gogocarto-container .icon.disabled{color:#DFDFDF}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon.main-icon.fa{font-size:1.2rem}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon.main-icon.fa:before{position:relative;left:0;top:0}.gogo-load-css .gogocarto-container .icon.fa{padding-top:.5rem;font-size:1.3rem}.gogo-load-css .gogocarto-container .element-main-icon.icon.fa{padding-top:4px}.gogo-load-css .gogocarto-container .iconInsideMarker.fa{padding-top:0}.gogo-load-css .gogocarto-container .filter-menu .icon.fa{padding-top:.7rem;width:1.5rem;text-align:center;font-size:1.2rem}.gogo-load-css .gogocarto-container .leaflet-marker-container{width:0!important;height:0!important;margin:0!important}.gogo-load-css .gogocarto-container .leaflet-marker-container:hover{z-index:10000000!important}.gogo-load-css .gogocarto-container .marker-name{position:absolute;white-space:nowrap;opacity:.9;font-size:1rem;font-family:Roboto,sans-serif;border-radius:5px;padding:5px 10px;bottom:55px;left:-30px;color:#dadada}.gogo-load-css .gogocarto-container .marker-wrapper{position:absolute;z-index:1;height:40px;width:40px;bottom:0;right:-20px;font-size:40px;line-height:40px;opacity:.99}.gogo-load-css .gogocarto-container .marker-wrapper.disabled{color:grey!important}.gogo-load-css .gogocarto-container .marker-wrapper.BigSize{z-index:10000!important;-webkit-transform:scale(1.3,1.3);-moz-transform:scale(1.3,1.3);-ms-transform:scale(1.3,1.3);-o-transform:scale(1.3,1.3);transform:scale(1.3,1.3);bottom:5px!important}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .marker-wrapper.BigSize .iconInsideMarker-wrapper{left:6px!important}}.gogo-load-css .gogocarto-container .marker-wrapper:hover{cursor:pointer}.gogo-load-css .gogocarto-container .marker-wrapper .gogo-icon-marker{height:inherit;line-height:inherit;color:inherit;position:absolute;z-index:1;background-image:url(images/marker-shadow.png);background-position:8px;background-repeat:no-repeat;width:50px}.gogo-load-css .gogocarto-container .marker-wrapper .mini-icon-stamp-container{position:absolute;top:-8px;z-index:3;font-size:14px;right:19px;color:#d9dad9}.gogo-load-css .gogocarto-container .iconInsideMarker.disabled,.gogo-load-css .gogocarto-container .moreIconContainer .moreIconWrapper.disabled{color:grey!important}.gogo-load-css .gogocarto-container .marker-wrapper .mini-icon-stamp-container .mini-icon-stamp{float:right}.gogo-load-css .gogocarto-container .marker-wrapper .mini-icon-stamp-container .mini-icon-stamp:before{border-radius:50%;padding:1px 1px 2px;background-color:#cc8901;border:1px solid}.gogo-load-css .gogocarto-container .marker-wrapper .mini-icon-stamp-container .mini-icon-stamp.gogo-icon-stamp-2{font-size:12px}.gogo-load-css .gogocarto-container .marker-wrapper .mini-icon-stamp-container .mini-icon-stamp.gogo-icon-stamp-2:before{padding:2px 1px 2px 2px}.gogo-load-css .gogocarto-container .iconInsideMarker-wrapper{position:relative;left:7px;z-index:2;text-align:center;width:26px;height:26px;background-color:#DADADA;border-radius:50%;top:4px;font-size:18px;line-height:28px}.gogo-load-css .gogocarto-container :-moz-any(.iconInsideMarker-wrapper){top:3px}.gogo-load-css .gogocarto-container .iconInsideMarker{line-height:26px}.gogo-load-css .gogocarto-container .iconInsideMarker:before{line-height:inherit}.gogo-load-css .gogocarto-container .gogo-icon-plus-circle{position:absolute;top:-7px;z-index:3;font-size:16px;right:-7px}.gogo-load-css .gogocarto-container .gogo-icon-plus-circle:before{border-radius:50%;background-color:#F1F1F1}.gogo-load-css .gogocarto-container .gogo-icon-star-full:before{border-radius:50%;padding:1px 1px 2px;background-color:#cc8901;border:1px solid}.gogo-load-css .gogocarto-container .moreIconContainer{display:none;z-index:10;position:absolute;bottom:-10px;left:30px}.gogo-load-css .gogocarto-container .moreIconContainer .moreIconWrapper{display:inline-block;margin-left:3px;bottom:10px;position:absolute;width:28px;height:28px;font-size:16px;line-height:26px;text-align:center;border:3px solid;border-radius:50%;z-index:10}.gogo-load-css .gogocarto-container .moreIconContainer .moreIconWrapper .iconInsideMarker{line-height:22px}.gogo-load-css .gogocarto-container .halfHidden{opacity:.6}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .marker-wrapper{right:-8px;bottom:-6px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .marker-wrapper.BigSize{right:-4px;bottom:-2px!important}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .gogo-icon-marker{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .iconInsideMarker-wrapper{left:6px!important;width:25px;height:25px;top:9px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .gogo-icon-plus-circle{top:-7px;right:-7px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .moreIconContainer{left:30px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .marker-name{bottom:47px;left:-50px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .marker-wrapper{right:-35px;bottom:-6px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .marker-wrapper.BigSize{right:-39px;bottom:-2px!important}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .gogo-icon-marker{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .iconInsideMarker-wrapper{left:11px!important;width:25px;height:25px;top:1px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .gogo-icon-plus-circle{top:-7px;right:-8px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .moreIconContainer{left:30px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .marker-name{bottom:47px;left:-10px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .marker-wrapper{right:-13px;bottom:-1px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .marker-wrapper.BigSize{right:-10px;bottom:4px!important}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .gogo-icon-marker{-webkit-transform:rotate(-25deg);-moz-transform:rotate(-25deg);-ms-transform:rotate(-25deg);-o-transform:rotate(-25deg);transform:rotate(-25deg)}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .iconInsideMarker-wrapper{right:6px!important;width:25px;height:25px;top:7px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .gogo-icon-plus-circle{top:-7px;right:-7px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .moreIconContainer{left:30px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .marker-name{bottom:51px;left:-44px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .marker-wrapper{right:-30px;bottom:-2px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .marker-wrapper.BigSize{right:-33px;bottom:4px!important}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .gogo-icon-marker{-webkit-transform:rotate(25deg);-moz-transform:rotate(25deg);-ms-transform:rotate(25deg);-o-transform:rotate(25deg);transform:rotate(25deg)}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .iconInsideMarker-wrapper{left:9px!important;width:25px;height:25px;top:3px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .gogo-icon-plus-circle{top:-7px;right:-8px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .moreIconContainer{left:30px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .marker-name{bottom:56px;left:-10px}.gogo-load-css .gogocarto-container .marker-cluster div{margin-left:5px;margin-top:5px;text-align:center;border-radius:50%;font-size:13px;font-weight:600;color:#fff;box-shadow:4px -2px 5px 0 rgba(167,167,167,.56)}.gogo-load-css .gogocarto-container .marker-cluster.halfHidden{opacity:.6!important}.gogo-load-css .gogocarto-container .marker-cluster.marker-cluster-small div{width:34px;height:34px;background-color:rgba(243,165,48,.88)}.gogo-load-css .gogocarto-container .marker-cluster.marker-cluster-small div span{line-height:34px}.gogo-load-css .gogocarto-container .marker-cluster.marker-cluster-medium div{width:38px;height:38px;background-color:rgba(235,123,45,.92)}.gogo-load-css .gogocarto-container .marker-cluster.marker-cluster-medium div span{line-height:38px}.gogo-load-css .gogocarto-container .marker-cluster.marker-cluster-large div{width:44px;height:44px;background-color:rgba(210,77,26,.88)}.gogo-load-css .gogocarto-container .marker-cluster.marker-cluster-large div span{line-height:44px}.gogo-load-css .gogocarto-container #markerDirectionResult{text-align:center;position:relative;z-index:10000;width:auto;padding:.5rem;margin-top:-10px;font-size:.9rem}.gogo-load-css .gogocarto-container #markerDirectionResult .duration{font-weight:700}.gogo-load-css .gogocarto-container .arrow_box{position:relative;background:#eee;border:1px solid #a8b6a0}.gogo-load-css .gogocarto-container .arrow_box:after,.gogo-load-css .gogocarto-container .arrow_box:before{top:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.gogo-load-css .gogocarto-container .arrow_box:after{border-color:rgba(238,238,238,0);border-top-color:#eee;border-width:7px;margin-left:-7px}.gogo-load-css .gogocarto-container .arrow_box:before{border-color:rgba(168,182,160,0);border-top-color:#a8b6a0;border-width:8px;margin-left:-8px}.gogo-load-css .gogocarto-container a.leaflet-control-zoom-in{font-size:18px!important;color:#3d3d3d}.gogo-load-css .gogocarto-container a.leaflet-control-zoom-out{font-size:25px!important;font-weight:400;color:#3d3d3d;text-indent:0}.gogo-load-css .gogocarto-container .leaflet-control-zoom.leaflet-bar.leaflet-control{margin-right:22px;margin-top:20px;border:none;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.3);-moz-box-shadow:0 2px 6px rgba(0,0,0,.3);box-shadow:0 2px 6px rgba(0,0,0,.3)}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container .leaflet-control-zoom.leaflet-bar.leaflet-control{display:none}}.gogo-load-css .gogocarto-container #map-gogo-controls{display:none}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #map-gogo-controls{display:block;position:absolute;z-index:500;left:15px;top:12px}.gogo-load-css .gogocarto-container .show-as-list-button:after{content:"Afficher sous forme de liste"}}.gogo-load-css .gogocarto-container .show-directory-menu-button{left:15px;color:#fff}.gogo-load-css .gogocarto-container .show-directory-menu-button .arrow-right{display:inline-block;border:8px solid;border-color:transparent transparent transparent #eee}.gogo-load-css .gogocarto-container .show-directory-menu-button i{margin-right:5px!important}.gogo-load-css .gogocarto-container .show-as-list-button{background-color:#fff}.gogo-load-css .gogocarto-container .gogo-map-control{margin-right:15px;display:inline-block;line-height:1.5;font-family:Roboto,sans-serif;font-weight:400;font-size:14px!important;padding:5px 10px;-webkit-box-shadow:2px 3px 1px rgba(0,0,0,.25);-moz-box-shadow:2px 3px 1px rgba(0,0,0,.25);box-shadow:2px 3px 1px rgba(0,0,0,.25);cursor:pointer;text-align:center;border:1px dashed #a5a5a5;border-radius:5px}.gogo-load-css .gogocarto-container .gogo-map-control:hover{cursor:pointer}.gogo-load-css .gogocarto-container .gogo-map-control i{font-size:1rem;float:left;line-height:1rem;padding-top:3px;margin-right:10px}.gogo-load-css .gogocarto-container #map-features-buttons{position:absolute;top:20px;z-index:500;right:20px;width:50px}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #map-features-buttons{width:33px;top:100px}}.gogo-load-css .gogocarto-container .feature-button{position:relative;background-color:#fff;color:#3d3d3d;margin-bottom:13px;text-align:center;width:50px;border-radius:50%;height:50px;border:none;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.3);-moz-box-shadow:0 2px 6px rgba(0,0,0,.3);box-shadow:0 2px 6px rgba(0,0,0,.3)}.gogo-load-css .gogocarto-container .feature-button:hover{cursor:pointer;background-color:#f4f4f4}.gogo-load-css .gogocarto-container .feature-button i{font-size:22px;line-height:55px}.gogo-load-css .gogocarto-container .feature-button i.gogo-icon-list{font-size:18px}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .feature-button{width:33px;height:33px;border-radius:4px}.gogo-load-css .gogocarto-container .feature-button i{font-size:18px;line-height:39px}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button{left:.5rem}}.gogo-load-css .gogocarto-container .feature-button#close-layers-panel{z-index:10000;background-color:transparent;color:#888}.gogo-load-css .gogocarto-container .feature-button#close-layers-panel:hover{background-color:transparent;color:#616161}.gogo-load-css .gogocarto-container .feature-button#close-layers-panel i{font-size:16px;line-height:44px;margin-left:2px}.gogo-load-css .gogocarto-container .feature-button#map-default-view-btn i{font-size:14px}@media screen and (max-width:600px){.gogo-load-css .gogocarto-container .feature-button#change-layers,.gogo-load-css .gogocarto-container .feature-button#export-iframe-btn,.gogo-load-css .gogocarto-container .feature-button#map-default-view-btn{display:none}}@media screen and (min-width:600px){.gogo-load-css .gogocarto-container .feature-button#geolocalize-btn{display:none}}.gogo-load-css .gogocarto-container .leaflet-control-layers-toggle{display:none}.gogo-load-css .gogocarto-container .leaflet-control-layers{padding:0!important;display:none;position:relative;z-index:600;margin-right:19px!important;margin-top:15px!important}.gogo-load-css .gogocarto-container .leaflet-control-layers-list{display:block!important;padding:5px 25px 10px 15px;position:relative!important}.gogo-load-css .gogocarto-container .leaflet-control-layers-selector:checked+span{font-weight:700}.gogo-load-css .gogocarto-container .leaflet-control-layers-base label{text-transform:uppercase;padding-top:4px;line-height:1.4rem;border-bottom:1px dashed #ccc}.gogo-load-css .gogocarto-container .leaflet-control-layers-base label:hover{background-color:#f4f4f4;cursor:pointer}.gogo-load-css .gogocarto-container .leaflet-control-layers-base label:last-child{border:none}.gogo-load-css .gogocarto-container #element-info-bar{height:0;z-index:600;position:absolute;will-change:height;-webkit-box-shadow:0 -8px 8px -5px rgba(173,173,173,.75);-moz-box-shadow:0 -8px 8px -5px rgba(173,173,173,.75);box-shadow:0 -8px 8px -5px rgba(173,173,173,.75);background-color:#F7F7F7}.gogo-load-css .gogocarto-container #element-info-bar.display-bottom{right:0!important;bottom:0!important;width:100%}.gogo-load-css .gogocarto-container #element-info-bar.display-aside{top:0;right:0;height:100%!important;-webkit-transition:top .5s;-moz-transition:top .5s;-o-transition:top .5s;-ms-transition:top .5s;transition:top .5s;overflow-y:visible;-webkit-box-shadow:0 6px 9px 2px rgba(119,119,119,.75);-moz-box-shadow:0 6px 9px 2px rgba(119,119,119,.75);box-shadow:0 6px 9px 2px rgba(119,119,119,.75)}.gogo-load-css .gogocarto-container #element-info-bar.display-aside.with-search-result-header{top:3rem}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-main-icon,.gogo-load-css .gogocarto-container #element-info-bar.display-aside .star-names-icons{display:none!important}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .gogo-icon-close{padding-left:1rem;color:#CECECE!important}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .gogo-icon-close:hover{color:#fff!important}.gogo-load-css .gogocarto-container #element-info-bar.display-aside #element-info .moreDetails{display:block!important}.gogo-load-css .gogocarto-container #element-info-bar.display-aside #element-info .moreDetails.tabs{display:flex!important}.gogo-load-css .gogocarto-container #element-info-bar.display-aside #element-info .hideOnLargeScreen{display:none!important}.gogo-load-css .gogocarto-container #element-info-bar .element-item .element-main-icon{display:none}.gogo-load-css .gogocarto-container #element-info-bar .element-item .star-names-icons,.gogo-load-css .gogocarto-container #element-info-bar.inside-normal-mode .element-main-icon{display:block}.gogo-load-css .gogocarto-container #element-info-bar #element-info .moreDetails,.gogo-load-css .gogocarto-container #element-info-bar.inside-normal-mode .star-names-icons{display:none}.gogo-load-css .gogocarto-container #element-info-bar #element-info{margin-bottom:3rem}.gogo-load-css .gogocarto-container #element-info-bar .gogo-icon-close{float:right;margin:-.9rem -1.5rem -1rem 0;font-size:1.2rem;padding:1rem 1.5rem}.gogo-load-css .gogocarto-container #element-info-bar .gogo-icon-close:hover{cursor:pointer}.gogo-load-css .gogocarto-container #directory-content-map{position:relative;z-index:10;-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;-webkit-box-shadow:inset 0 5px 5px 0 rgba(119,119,119,.75);-moz-box-shadow:inset 0 5px 5px 0 rgba(119,119,119,.75);box-shadow:inset 0 5px 5px 0 rgba(119,119,119,.75)}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header{display:block;position:relative;width:100%;line-height:3.5rem;text-align:right;padding:0 1rem}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container #directory-content-list .element-list-header{display:none!important}}@media (min-width:900px){.gogo-load-css .gogocarto-container #directory-content-list .element-list-header{padding-left:3rem;padding-right:calc(3rem + 20px)}}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header #list-title-shadow-bottom{display:none}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button{float:left;z-index:200;height:100%;text-decoration:underline}@media only screen and (min-width:1201px){.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button{left:9rem!important}}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button:hover{cursor:pointer}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button .btn-back{color:inherit!important;height:2rem}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-directory-menu-button{display:none!important}}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button{left:2rem}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button:after{content:"Retour à la carte"}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-directory-menu-button{display:block;float:left;position:relative;margin-right:2rem;margin-left:-1rem;width:auto;top:.6rem}}@media (min-width:1500px){.gogo-load-css .gogocarto-container #directory-content-list .element-list-header{padding-left:10rem;padding-right:calc(10rem + 20px)}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-directory-menu-button{position:absolute;top:12px;left:15px;margin-left:0;bottom:initial;width:auto}}.gogo-load-css .gogocarto-container .no-result-message img{margin-top:1rem;width:350px;padding:0 2rem;border-radius:100px}.gogo-load-css .gogocarto-container #directory-content-list{display:none;z-index:650;-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;width:100%;overflow:auto;border-left:none;height:100%}.gogo-load-css .gogocarto-container #directory-content-list .elements-container{position:relative;padding-bottom:100px;height:100%;width:100%;overflow-y:scroll;margin:0;padding-left:0;padding-right:0}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #directory-content-list .elements-container{height:calc(100% - 3.5rem)}}@media only screen and (min-width:901px){.gogo-load-css .gogocarto-container #directory-content-list .elements-container{padding-left:3rem;padding-right:3rem}}@media (min-width:1500px){.gogo-load-css .gogocarto-container #directory-content-list .elements-container{padding-left:10rem;padding-right:10rem}}.gogo-load-css .gogocarto-container #directory-content-list .elements-container.custom-scroll-bar::-webkit-scrollbar,.gogo-load-css .gogocarto-container #directory-content-list .elements-container.leaflet-routing-alt::-webkit-scrollbar,.gogo-load-css .gogocarto-container #directory-content-list .elements-container.leaflet-routing-error::-webkit-scrollbar,.gogo-load-css .gogocarto-container #directory-content-list .elements-container.leaflet-routing-geocoders::-webkit-scrollbar{width:14px}.gogo-load-css .gogocarto-container #directory-content-list .elements-container .bottom-gradient{position:fixed;height:5rem;bottom:0;width:100%;z-index:700;background:-moz-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%);background:-webkit-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#ffffff', GradientType=0 )}.gogo-load-css .gogocarto-container #directory-content-list .elements-container .no-result-message{text-align:center;margin-top:3rem}.gogo-load-css .gogocarto-container #directory-content-list .element-item{display:block}.gogo-load-css .gogocarto-container #directory-content-list .element-item .gogo-icon-close{display:none}.gogo-load-css .gogocarto-container #directory-content-list .element-item .distance{margin-right:0;margin-left:6px}.gogo-load-css .gogocarto-container #directory-content-list .element-item .location{display:inline-block;float:right;margin-left:1rem}.gogo-load-css .gogocarto-container #directory-content-list .element-item .location .postalCode{font-size:.95rem}.gogo-load-css .gogocarto-container #directory-content-list .element-item .expandLabel{background-color:transparent!important}.gogo-load-css .gogocarto-container #directory-content-list .element-item .collapsible-header{border-bottom:1px solid #abaaaa;background-color:#fff}.gogo-load-css .gogocarto-container #directory-content-list .collapsible.popout,.gogo-load-css .gogocarto-container #directory-content-list .collapsible.popout>li{margin:0}.gogo-load-css .gogocarto-container #directory-content-list .collapsible.popout>li.active{margin:1rem 0}.gogo-load-css .gogocarto-container #directory-content-list .spinner-loader{-webkit-box-ordinal-group:1000000;-moz-box-ordinal-group:1000000;-ms-flex-order:1000000;-webkit-order:1000000;order:1000000}.gogo-load-css .gogocarto-container #directory-content-list .info-bar-tabs,.gogo-load-css .gogocarto-container #directory-content-list .menu-element{position:relative;display:none}.gogo-load-css .gogocarto-container #directory-content-list .element-item.active .menu-element{display:block}.gogo-load-css .gogocarto-container #directory-content-list .element-item.active .info-bar-tabs{display:flex}.gogo-load-css .gogocarto-container #directory-content-list .img-overlay{max-height:20rem;overflow:hidden}.gogo-load-css .gogocarto-container #directory-content-list .img-container{max-height:20rem;background-color:#F7F7F7}.gogo-load-css .gogocarto-container #gogo-controls-mobile{position:absolute;z-index:900;left:15px;top:15px;right:0}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #gogo-controls-mobile{display:none!important}}.gogo-load-css .gogocarto-container #gogo-controls-mobile .feature-button{display:inline-block;margin-right:15px}.gogo-load-css .gogocarto-container #gogo-controls-mobile .feature-button.gogo-bg-primary{color:#fff}.gogo-load-css .gogocarto-container #gogo-controls-mobile .feature-button.show-as-list-button,.gogo-load-css .gogocarto-container #gogo-controls-mobile .feature-button.show-as-map-button{float:right;display:none}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #gogo-controls-mobile{display:none}}.gogo-load-css .gogocarto-container #gogo-controls-mobile.list .show-as-map-button,.gogo-load-css .gogocarto-container #gogo-controls-mobile.map .show-as-list-button{display:block}.gogo-load-css .gogocarto-container #gogo-controls-mobile.list .feature-button{-webkit-box-shadow:1px 2px 8px 1px rgba(0,0,0,.4);-moz-box-shadow:1px 2px 8px 1px rgba(0,0,0,.4);box-shadow:1px 2px 8px 1px rgba(0,0,0,.4)}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile{display:none;z-index:10;position:relative;background-color:#fff;margin:15px;border-radius:3px;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.3);-moz-box-shadow:0 2px 6px rgba(0,0,0,.3);box-shadow:0 2px 6px rgba(0,0,0,.3)}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-bar-container{height:52px;padding:0}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-bar{height:100%;padding:0 4rem}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-icon{font-size:22px;line-height:57px;height:56px;width:56px}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-icon.search-bar-icon{left:-2px}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-icon.search-geolocalize{right:0;font-size:24px!important}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-bar-icon{left:3px}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-geolocalize{right:5px;font-size:24px!important}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-options{display:block!important;padding:0 15px 12px}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile #search-spinner-loader .spinner-layer{border-color:#fff!important}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-no-result{color:inherit;font-size:13px;padding-bottom:1rem}.gogo-load-css .gogocarto-container #search-overlay-mobile{display:none;position:absolute;top:0;left:0;right:0;bottom:0;z-index:1000}.gogo-load-css .gogocarto-container #search-overlay-mobile .overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:1;background-color:rgba(0,0,0,.5)}.gogo-load-css .gogocarto-container .search-results{background-color:rgba(0,0,0,.4);position:relative;line-height:3rem;top:0;z-index:800;width:100%;padding:0 0 0 10px;-webkit-transition:background-color .5s;-moz-transition:background-color .5s;-o-transition:background-color .5s;-ms-transition:background-color .5s;transition:background-color .5s}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .search-results{position:relative;padding-left:28px}}.gogo-load-css .gogocarto-container .search-results .btn-close{position:absolute;margin:0;right:0;top:3px;padding:0 1rem;z-index:50;color:#fff}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .search-results .btn-close{right:12px}}.gogo-load-css .gogocarto-container .search-results .btn-close:hover{color:#fff;cursor:pointer}.gogo-load-css .gogocarto-container .search-results .search-result-label{color:#fff;font-weight:700}.gogo-load-css .gogocarto-container .search-results .search-result-value{font-style:italic}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container{height:3.5rem;padding:.7rem .7rem 0;text-align:center;margin:0}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-icon{position:absolute;font-size:1.2rem;color:#777;height:2rem;line-height:2rem}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-icon:before{line-height:2rem}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-icon:hover{cursor:pointer}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-icon.search-bar-icon{left:1.2rem}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-icon.search-geolocalize{right:1.4rem}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar{font-size:16px;padding:0 2.3rem 0 2.2rem;box-shadow:none!important;margin:0;text-align:left;font-weight:700;height:2rem;width:100%;border:none!important;background-color:#fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@media (min-width:850px){.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar{text-transform:uppercase;font-size:.8rem}}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar.invalid{border-color:#B90303!important}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar::-webkit-input-placeholder{color:#949494}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar::-moz-placeholder{color:#949494}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar:-ms-input-placeholder{color:#949494}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar:-moz-placeholder{color:#949494}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options{padding:0 .7rem .7rem}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options label.search-option-radio-label{color:#ececec;font-size:.9rem;line-height:2.2rem;padding-left:27px;margin-right:13px}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options label.search-option-radio-label:before{border:2px solid #e0e0e0;top:3px;width:14px;height:14px}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options label.search-option-radio-label:after{border:2px solid #dedede;background-color:#dedede;top:3px;width:14px;height:14px}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options .search-action-btn{float:right;font-size:.85rem;height:1.8rem;line-height:1.8rem;padding:0 10px}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options #search-spinner-loader{height:12px;width:12px;top:1px;margin-left:5px}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options #search-spinner-loader .spinner-layer{border-color:#5d5d5d}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options #search-spinner-loader .circle-clipper .circle{border-width:2px}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-no-result{color:#fff;padding-bottom:.7rem;text-decoration:underline;text-align:center;font-weight:700}.gogo-load-css .gogocarto-container #directory-menu-main-container .search-action-btn{background-color:#ddd;color:#272626}.gogo-load-css .gogocarto-container #directory-menu.small-width .search-options{padding-left:7px}.gogo-load-css .gogocarto-container #directory-menu.small-width .search-options label.search-option-radio-label{margin-right:0}.gogo-load-css .gogocarto-container .element-item{list-style-type:none;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:column nowrap;-webkit-flex-flow:column nowrap;flex-flow:column nowrap}.gogo-load-css .gogocarto-container .element-item #element-info-bar.display-aside .menu-element{height:auto}.gogo-load-css .gogocarto-container .element-item .menu-element{z-index:10;position:absolute;bottom:0;text-align:center;width:100%}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item-text{display:none}.gogo-load-css .gogocarto-container .element-item .menu-element:not(.full-text){height:3rem}.gogo-load-css .gogocarto-container .element-item .menu-element.full-text{padding:.3rem 0 .8rem}.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item{margin:0 10px -.5rem}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container .element-item .menu-element.full-text{padding-top:0}.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item{margin:0 6px -.9rem}}@media (min-width:1400px){.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item{margin:0 .8rem -.5rem}}.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item-text{display:inline;text-transform:uppercase;font-size:.75rem;line-height:3rem;margin-left:.5rem}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item-text{font-size:10px}}@media (min-width:1400px){.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item-text{font-size:.8rem}}.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item-text.favorite{color:#ffab00}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item{display:inline-block;color:#CECECE;margin:0 1rem}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item:hover{color:#fff;cursor:pointer}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item a{color:inherit}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .menu-icon{font-size:20px;float:left}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .menu-icon.small-icon{font-size:18px}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .menu-icon:before{line-height:2.8rem}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .gogo-icon-star-full:before{padding:2px 2px 3px;border:none}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item.item-stamp.filled{color:#ffab00;font-weight:700}.gogo-load-css .gogocarto-container .element-item .interactive-section{padding:0 1rem 0 .8rem;position:relative;line-height:3rem}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .menu-icon{font-size:22px}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .menu-icon.small-icon{font-size:20px}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .menu-icon:before{line-height:3rem}.gogo-load-css .gogocarto-container .element-item .interactive-section{padding:0 1rem 0 1.6rem}}.gogo-load-css .gogocarto-container .element-item .interactive-section>div{position:relative}.gogo-load-css .gogocarto-container .element-item .interactive-section .result-message{text-align:center;font-weight:700;color:#fff;line-height:1.7rem;padding:.6rem 0}.gogo-load-css .gogocarto-container .element-item #directory-content-list .interactive-section{display:none}.gogo-load-css .gogocarto-container .element-item #directory-content-list .element-item.active .interactive-section{display:block}.gogo-load-css .gogocarto-container .element-item .moderation-section .gogo-icon-attention,.gogo-load-css .gogocarto-container .element-item .moderation-section .gogo-icon-moderation,.gogo-load-css .gogocarto-container .element-item .vote-section .gogo-icon-attention,.gogo-load-css .gogocarto-container .element-item .vote-section .gogo-icon-moderation{color:#fff;font-size:20px;padding-top:3px;position:absolute}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container .element-item .moderation-section .gogo-icon-attention,.gogo-load-css .gogocarto-container .element-item .vote-section .gogo-icon-attention{display:none}.gogo-load-css .gogocarto-container .element-item .moderation-section .pending-text,.gogo-load-css .gogocarto-container .element-item .vote-section .pending-text{margin-left:0!important}}@media (max-width:460px){.gogo-load-css .gogocarto-container .element-item .moderation-section .long-text,.gogo-load-css .gogocarto-container .element-item .vote-section .long-text{display:none}}@media (max-width:360px){.gogo-load-css .gogocarto-container .element-item .moderation-section .pending-text,.gogo-load-css .gogocarto-container .element-item .vote-section .pending-text{opacity:0}}.gogo-load-css .gogocarto-container .element-item .moderation-section .text,.gogo-load-css .gogocarto-container .element-item .vote-section .text{margin-left:2.2rem;color:#fff}.gogo-load-css .gogocarto-container .element-item .moderation-section .btn-vote-more-info,.gogo-load-css .gogocarto-container .element-item .vote-section .btn-vote-more-info{line-height:1.2rem;position:absolute;top:14px;right:90px;padding:0;font-size:.85rem;color:#fff}.gogo-load-css .gogocarto-container .element-item .moderation-section .action-btn,.gogo-load-css .gogocarto-container .element-item .vote-section .action-btn{position:absolute;right:0;top:8px;margin:0;background-color:#dedede;color:#272626;font-size:.85rem}.gogo-load-css .gogocarto-container .element-item .moderation-section .moderation-input-comment,.gogo-load-css .gogocarto-container .element-item .vote-section .moderation-input-comment{color:#fff;border-color:#ccc!important;height:2.2rem}.gogo-load-css .gogocarto-container .element-item .moderation-section .moderation-input-comment::-webkit-input-placeholder,.gogo-load-css .gogocarto-container .element-item .vote-section .moderation-input-comment::-webkit-input-placeholder{color:#ccc}.gogo-load-css .gogocarto-container .element-item .moderation-section .moderation-input-comment::-moz-placeholder,.gogo-load-css .gogocarto-container .element-item .vote-section .moderation-input-comment::-moz-placeholder{color:#ccc}.gogo-load-css .gogocarto-container .element-item .moderation-section .moderation-input-comment:-ms-input-placeholder,.gogo-load-css .gogocarto-container .element-item .vote-section .moderation-input-comment:-ms-input-placeholder{color:#ccc}.gogo-load-css .gogocarto-container .element-item .moderation-section .moderation-input-comment:-moz-placeholder,.gogo-load-css .gogocarto-container .element-item .vote-section .moderation-input-comment:-moz-placeholder{color:#ccc}.gogo-load-css .gogocarto-container .element-item .validation-process-info:hover{cursor:help;border-bottom:1px dashed;border-color:inherit;text-decoration:none}.gogo-load-css .gogocarto-container .element-item .collapsible-body .show-more-description:hover,.gogo-load-css .gogocarto-container .element-item .info-bar-tabs.tabs .tab a{cursor:pointer}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .strong,.gogo-load-css .gogocarto-container .element-item .collapsible-header a{text-decoration:underline}.gogo-load-css .gogocarto-container .element-item #element-info-bar.small-width .btn-vote-more-info{display:none}.gogo-load-css .gogocarto-container .element-item .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.gogo-load-css .gogocarto-container .element-item .label-danger{background-color:#d9534f}.gogo-load-css .gogocarto-container .element-item .label-success{background-color:#00a65a}.gogo-load-css .gogocarto-container .element-item .label-default{background-color:#d2d6de;color:#444}.gogo-load-css .gogocarto-container .element-item .element-item .contributions{border:none;box-shadow:none}.gogo-load-css .gogocarto-container .element-item .element-item .contributions .contribution-header{color:inherit;background-color:transparent;border:none;box-shadow:none;line-height:2rem;padding:15px 0;border-bottom:1px solid grey}.gogo-load-css .gogocarto-container .element-item .element-item .contributions .contribution-header .contribution-status{float:left}.gogo-load-css .gogocarto-container .element-item .element-item .contributions .contribution-header .contribution-updated-at{float:right}.gogo-load-css .gogocarto-container .element-item .element-item .contributions .contribution-body{color:inherit}.gogo-load-css .gogocarto-container .element-item .info-bar-tabs.tabs{z-index:40}.gogo-load-css .gogocarto-container .element-item .item-container{border-bottom:1px dashed grey;padding-bottom:5px;margin-bottom:5px}.gogo-load-css .gogocarto-container .element-item .vote-report-item{line-height:1.5rem!important;padding:10px}.gogo-load-css .gogocarto-container .element-item .pending-contribution{margin-bottom:-.9rem;line-height:1.5rem!important;margin-top:.8rem;padding:10px}.gogo-load-css .gogocarto-container .element-item .vote-report-comment{font-style:italic}.gogo-load-css .gogocarto-container .element-item .body-admin-tab-content{display:none;padding-right:10px;font-size:.9em}.gogo-load-css .gogocarto-container .element-item .body-admin-tab-content .vote-report-item{padding:0!important}.gogo-load-css .gogocarto-container .element-item .collapsible-header{padding:0;position:relative}.gogo-load-css .gogocarto-container .element-item .collapsible-header i{margin-right:0;padding-left:.3rem}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-title{position:relative;margin-bottom:0;overflow:hidden;text-overflow:ellipsis;line-height:2rem;padding:.5rem 0;font-weight:700}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-title{padding:1rem 1rem .5rem}}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-title .distance{float:right;margin-left:1rem}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-title .location{display:none}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-more{line-height:1.5rem;padding:0;margin-bottom:.5rem}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-more{padding:0 1rem}}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-more .inline-option-values{font-weight:700;font-style:italic}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-more .inline-option-values .option-value.disabled{color:#9C9C9C;font-weight:400}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-more .description{margin-bottom:.7rem;text-align:justify}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-more .description p{margin:0}.gogo-load-css .gogocarto-container .element-item .collapsible-body{background-color:transpraent;padding:0;position:relative}.gogo-load-css .gogocarto-container .element-item .collapsible-body .collapsible-body-main-content{background-color:#F7F7F7;padding:0 0 1rem .5rem}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .element-item .collapsible-body .collapsible-body-main-content{padding:0 0 1rem 1rem}}.gogo-load-css .gogocarto-container .element-item .collapsible-body h2{font-weight:700!important;font-size:1rem!important;line-height:110%!important;margin:.5rem 0 .8rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .row{margin-bottom:0}.gogo-load-css .gogocarto-container .element-item .collapsible-body .section{padding-top:.9rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .description{text-align:justify;line-height:1.5;padding-right:1.5rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .show-more-description{display:inline;text-decoration:underline}.gogo-load-css .gogocarto-container .element-item .collapsible-body .send-mail-btn{font-size:.8rem;margin:.4rem 0 .5rem;line-height:1.8rem;height:1.8rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .sectionInfos,.gogo-load-css .gogocarto-container .element-item .collapsible-body .sectionOpenHours{line-height:2rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .sectionlongDescription{padding-bottom:0;padding-top:1.5rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .tags-container{margin-top:1.5rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .gogo-tag{margin-right:8px;border-radius:5px;background-color:#dcdcdc;padding:4px 10px;display:inline-block;margin-bottom:8px}.gogo-load-css .gogocarto-container .element-item .img-container{position:absolute;width:100%;top:0;overflow:hidden}.gogo-load-css .gogocarto-container .element-item .img-container .images-carousel{cursor:pointer!important;margin:0}.gogo-load-css .gogocarto-container .element-item .img-container .gogo-img{width:100%;height:auto}.gogo-load-css .gogocarto-container .element-item .img-overlay{position:relative;overflow:hidden}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn{display:none;cursor:pointer!important;height:100%;position:absolute;color:#fff;padding-top:17%!important;width:5rem;-webkit-transition:opacity .5s;-moz-transition:opacity .5s;-o-transition:opacity .5s;-ms-transition:opacity .5s;transition:opacity .5s;opacity:.7}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn:hover{opacity:1}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn.prev{background-image:linear-gradient(to right,rgba(70,70,70,.4) 0,rgba(255,255,255,0) 100%);padding:0 30px 0 .5rem;left:0}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn.prev .icon{left:.6rem}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn.next{background-image:linear-gradient(to left,rgba(70,70,70,.4) 0,rgba(255,255,255,0) 100%);padding:0 .5rem 0 30px;right:0}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn.next .icon{right:.6rem}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn .icon{font-size:3rem;position:absolute;top:calc(50% - 1.5rem);margin:0;text-shadow:0 1px 4px #757575}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-clickable-area{height:100%;position:absolute;left:6rem;right:6rem;cursor:pointer!important}.gogo-load-css .gogocarto-container .element-item .collapsible-body .section.categories h3{margin-bottom:90%}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-name{padding-top:.6rem;padding-bottom:1rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper+.category-name{padding-top:1.2rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .row+.category-wrapper .category-name{padding-top:.9rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper{margin-top:0!important}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper:not(:first-child){margin-top:.5rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper{margin-left:1.2rem;padding-left:.5rem;border-left:1px dotted #c3c3c3}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper h3.category-name{font-size:85%;padding-bottom:.4rem;padding-top:.5rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper .strong{text-decoration:none!important}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-name.main-option{font-weight:700}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .inline-option{font-style:italic}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .inline-option span.disabled{color:#9C9C9C}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-description{padding:.5rem;font-style:italic;font-size:.9rem;color:#5d5d5d}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-description.disabled{color:#9C9C9C}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value{line-height:2.5rem;padding-right:0}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value.inline{display:inline-block;font-style:italic}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value.inline:not(.last):after{content:","}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value.inline:not(.first) .icon{margin-left:.5rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value.inline .icon{margin-right:.8rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value .icon{font-size:1.2rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value .icon.fa{font-size:1.1rem;padding-top:.8rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value .icon.gogo-icon-marker{font-size:1.1rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value .icon.disabled{color:#BFBFBF!important}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value.disabled{color:#9C9C9C!important}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper .option-value{padding-left:.6rem}.gogo-load-css .gogocarto-container .element-item h3{font-size:.85rem;text-transform:uppercase;font-weight:600;padding-left:.75rem;margin-bottom:0;padding-top:1.5rem;margin-top:0}.gogo-load-css .gogocarto-container .element-item .info-bar-divider{height:1px;overflow:hidden;background-color:#CCC}.gogo-load-css .gogocarto-container .element-item .btn,.gogo-load-css .gogocarto-container .element-item .btn-large{height:2rem;line-height:2rem;padding:0 1rem;margin-bottom:1rem}.gogo-load-css .gogocarto-container .element-item span.added{color:#3a772c}.gogo-load-css .gogocarto-container .element-item span.removed{text-decoration:line-through;margin-right:5px;color:#b57e7e}.gogo-load-css .gogocarto-container .element-item a>span.equals{color:rgba(0,0,0,.87)!important}.gogo-load-css .gogocarto-container #element-info-bar .element-item .expandLabel{font-weight:700}.gogo-load-css .gogocarto-container #element-info-bar .element-item.active .expandLabel:after{content:"Moins d'infos"}.gogo-load-css .gogocarto-container #element-info-bar .element-item.active .expandLabel.transform-big{position:absolute;color:#fff;z-index:2;right:0;width:auto;margin-right:1.7rem;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;-ms-transition:all .4s;transition:all .4s;padding:8px 25px;bottom:-15px}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container #element-info-bar .element-item.active .expandLabel.transform-big{padding:.3rem 1.2rem;bottom:-1rem}}.gogo-load-css .gogocarto-container #element-info-bar .element-item.active .expandLabel.transform-big:hover{color:#fff;box-shadow:0 6px 15px 0 rgba(0,0,0,.2),0 5px 17px 0 rgba(0,0,0,.19)}.gogo-load-css .gogocarto-container #element-info-bar .element-item:not(.active) .expandLabel:after{content:"Plus d'infos"}.gogo-load-css .gogocarto-container #element-info-bar .element-item:not(.active) .expandLabel,.gogo-load-css .gogocarto-container #element-info-bar .element-item:not(.active) .expandLabel:not(.transform-big){background-color:transparent!important}.gogo-load-css .gogocarto-container #element-info-bar .collapsible-header{position:relative;z-index:2}.gogo-load-css .gogocarto-container #element-info-bar .collapsible-header span.added{color:#3ab33a}.gogo-load-css .gogocarto-container #element-info-bar .collapsible-body .collapsible-body-main-container{height:100%;width:100%;position:absolute;top:0;overflow-y:auto}.gogo-load-css .gogocarto-container #element-info-bar .collapsible-body .img-container,.gogo-load-css .gogocarto-container #element-info-bar .collapsible-body .img-overlay{height:33%;background-color:transparent}.gogo-load-css .gogocarto-container #element-info-bar.display-bottom .element-item .collapsible-header{background-color:#fff!important}.gogo-load-css .gogocarto-container #element-info-bar.display-bottom .element-item .collapsible-header a{color:inherit}.gogo-load-css .gogocarto-container #element-info-bar.display-bottom .element-item .collapsible-header a:hover{color:#000}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header{border:none;color:#fff;cursor:default;width:100%}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header a{color:#fff}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header a:hover{color:#e6e6e6}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-title{position:relative;line-height:2.5rem;font-weight:400}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-title .distance{font-size:1.3rem;color:inherit}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-title .gogo-icon-close{font-size:1.5rem;margin-top:-.8rem}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-more{margin-bottom:1rem}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .name{font-size:1.8rem;text-align:left}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .description,.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .name{width:100%!important}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .description{margin-bottom:0}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-body{height:100%;overflow-y:auto}.gogo-load-css .gogocarto-container #modal-directions-fail.modal,.gogo-load-css .gogocarto-container #modal-pick-address.modal{position:absolute}.gogo-load-css .gogocarto-container #modal-directions-fail.modal .modal-footer,.gogo-load-css .gogocarto-container #modal-pick-address.modal .modal-footer{background-color:#444}.gogo-load-css .gogocarto-container .simple-modal.modal{z-index:2000;max-width:1200px;top:30%!important;max-height:80%;height:auto;position:absolute!important}.gogo-load-css .gogocarto-container .simple-modal.modal h5{margin-bottom:.5rem}.gogo-load-css .gogocarto-container .simple-modal.modal .modal-content{padding-bottom:.8rem!important}.gogo-load-css .gogocarto-container .simple-modal.modal .modal-content .modal-error-msg{display:none;color:#B90303}.gogo-load-css .gogocarto-container .simple-modal.modal .modal-footer{padding-right:2.5rem}.gogo-load-css .gogocarto-container .simple-modal.modal .modal-footer .modal-action{color:#fff;font-size:.9rem;padding:0 25px}.gogo-load-css .gogocarto-container .simple-modal.modal .modal-footer .modal-action.btn,.gogo-load-css .gogocarto-container .simple-modal.modal .modal-footer .modal-action.btn-large{background-color:#de5a5f}.gogo-load-css .gogocarto-container .simple-modal.modal .modal-footer .modal-action.btn-large:hover,.gogo-load-css .gogocarto-container .simple-modal.modal .modal-footer .modal-action.btn:hover{background-color:#ec787d}.gogo-load-css .gogocarto-container .simple-modal.modal .input-simple-modal:focus{border-color:#4A7874;box-shadow:none}.gogo-load-css .gogocarto-container .simple-modal.modal .input-simple-modal::selection{background-color:#4A7874;color:#fff}.gogo-load-css .gogocarto-container .simple-modal.modal .input-simple-modal::-moz-selection{background-color:#4A7874;color:#fff}.gogo-load-css .gogocarto-container .page-modal .btn-back{float:left;font-size:2rem;line-height:4rem;padding:0 2rem;margin-left:-2rem}.gogo-load-css .gogocarto-container .modal.action-modal h5{text-align:center;margin-bottom:1.5rem;line-height:2.5rem}.gogo-load-css .gogocarto-container .modal.action-modal label.small-label{display:block;font-size:.85rem;font-weight:700;margin-top:1rem;margin-bottom:-1.8rem}.gogo-load-css .gogocarto-container .modal.action-modal .elementName{font-style:italic;font-size:1.5rem}.gogo-load-css .gogocarto-container .modal.action-modal .error{display:none;color:#B90303}.gogo-load-css .gogocarto-container .modal.action-modal .option-radio-label{margin-top:.5rem;display:block!important;height:auto!important}.gogo-load-css .gogocarto-container .modal.action-modal .cancel-btn{display:none}.gogo-load-css .gogocarto-container .modal.action-modal .cancel-btn .preloader-wrapper{height:15px;width:15px;top:1px}.gogo-load-css .gogocarto-container .modal.action-modal .cancel-btn .preloader-wrapper .spinner-layer{border-color:#fff}.gogo-load-css .gogocarto-container .modal.action-modal .cancel-btn .preloader-wrapper .circle-clipper .circle{border-width:2px}.gogo-load-css .gogocarto-container .modal.action-modal .loader-overlay{display:none;position:absolute;top:0;left:0;right:0;bottom:0;background-color:#000;opacity:.35}.gogo-load-css .gogocarto-container #modal-iframe .subtitle{text-align:center;font-style:italic;margin-bottom:1.5rem}.gogo-load-css .gogocarto-container #modal-iframe label{font-size:.8rem;width:100%}.gogo-load-css .gogocarto-container #modal-iframe label:not(:last-child){margin-bottom:15px}.gogo-load-css .gogocarto-container #modal-iframe label strong{font-weight:700}.gogo-load-css .gogocarto-container #modal-iframe .iframe-input{width:80px;border:1px solid #969696;border-radius:5px;height:2rem;font-size:.9rem;font-family:"Lucida Console",Monaco,monospace;margin:1rem;text-align:center;background-color:#f5f5f5}.gogo-load-css .gogocarto-container #modal-iframe #iframe-code{width:100%;padding:1rem;background-color:#f1f1f1;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;box-shadow:none;font-family:"Lucida Console",Monaco,monospace;border:1px dashed #c1c1c1;margin-bottom:1rem}.gogo-load-css .gogocarto-container #modal-image{width:90%}.gogo-load-css .gogocarto-container #modal-image .modal-content{padding:0;overflow:auto}.gogo-load-css .gogocarto-container #modal-image img{width:100%}.gogo-load-css .gogocarto-container .shadow-bottom{width:100%;margin-right:0;height:8px;position:absolute;z-index:4;left:0;opacity:1;border-top:1px solid rgba(0,0,0,.6);background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.4)),to(rgba(0,0,0,0)));-webkit-mask-box-image:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(0,0,0,0)),color-stop(.5,rgba(0,0,0,.8)),color-stop(1,rgba(0,0,0,0)))}.gogo-load-css .gogocarto-container .custom-scroll-bar::-webkit-scrollbar-track,.gogo-load-css .gogocarto-container .leaflet-routing-alt::-webkit-scrollbar-track,.gogo-load-css .gogocarto-container .leaflet-routing-error::-webkit-scrollbar-track,.gogo-load-css .gogocarto-container .leaflet-routing-geocoders::-webkit-scrollbar-track{background-color:#f6f6f6;border:1px solid #f0f0f0}.gogo-load-css .gogocarto-container .custom-scroll-bar::-webkit-scrollbar,.gogo-load-css .gogocarto-container .leaflet-routing-alt::-webkit-scrollbar,.gogo-load-css .gogocarto-container .leaflet-routing-error::-webkit-scrollbar,.gogo-load-css .gogocarto-container .leaflet-routing-geocoders::-webkit-scrollbar{width:12px}.gogo-load-css .gogocarto-container .custom-scroll-bar::-webkit-scrollbar-thumb,.gogo-load-css .gogocarto-container .leaflet-routing-alt::-webkit-scrollbar-thumb,.gogo-load-css .gogocarto-container .leaflet-routing-error::-webkit-scrollbar-thumb,.gogo-load-css .gogocarto-container .leaflet-routing-geocoders::-webkit-scrollbar-thumb{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;border:3px solid #f6f6f6;background-color:#C5C5C5}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categories-content ul::-webkit-scrollbar-track,.gogo-load-css .gogocarto-container .custom-scroll-bar-light::-webkit-scrollbar-track,.gogo-load-css .gogocarto-container .leaflet-control-layers-list::-webkit-scrollbar-track{background-color:#f6f6f6;border:1px solid #f0f0f0}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categories-content ul::-webkit-scrollbar,.gogo-load-css .gogocarto-container .custom-scroll-bar-light::-webkit-scrollbar,.gogo-load-css .gogocarto-container .leaflet-control-layers-list::-webkit-scrollbar{width:7px}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categories-content ul::-webkit-scrollbar-thumb,.gogo-load-css .gogocarto-container .custom-scroll-bar-light::-webkit-scrollbar-thumb,.gogo-load-css .gogocarto-container .leaflet-control-layers-list::-webkit-scrollbar-thumb{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;background-color:#c3c3c3}.gogo-load-css .gogocarto-container #gogo-custom-popup{position:absolute;bottom:20px;z-index:500;right:10px;box-shadow:0 2px 6px rgba(0,0,0,.3);padding:5px 45px 5px 30px;line-height:1.7;max-width:400px;color:#fff;font-size:.9rem;border-radius:5px}[class*=" gogo-icon-"]:before,[class^=gogo-icon-]:before,[data-icon]:before{font-family:gogocarto!important;font-style:normal!important;font-weight:400!important;font-variant:normal!important;text-transform:none!important;speak:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.gogo-load-css .gogocarto-container #gogo-custom-popup #btn-close-custom-popup{font-size:1rem;cursor:pointer;position:absolute;right:18px;margin:0;top:14px}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container{font-size:12px}}.gogo-load-css .gogocarto-container #directory-menu{position:absolute;height:100%}.gogo-load-css .gogocarto-container #directory-content{position:relative;background-color:#9e9e9e;overflow:hidden;-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:column nowrap;-webkit-flex-flow:column nowrap;flex-flow:column nowrap}.gogo-load-css .gogocarto-container h1{font-size:2.5rem;text-align:center;margin-top:.5rem}@media screen and (min-width:600px){.gogo-load-css .gogocarto-container h1{font-size:3.5rem}}@font-face{font-family:gogocarto;src:url(fonts/gogocarto.eot);src:url(fonts/gogocarto.eot?#iefix) format("embedded-opentype"),url(fonts/gogocarto.woff) format("woff"),url(fonts/gogocarto.ttf) format("truetype"),url(fonts/gogocarto.svg#gogocarto) format("svg");font-weight:400;font-style:normal}[data-icon]:before{content:attr(data-icon)}.gogo-icon-marker:before{content:"\61"}.gogo-icon-account-circle:before{content:"\62"}.gogo-icon-delete:before{content:"\63"}.gogo-icon-description:before{content:"\64"}.gogo-icon-star-full:before{content:"\65"}.gogo-icon-icon-copy-hours:before{content:"\66"}.gogo-icon-starcircle:before{content:"\67"}.gogo-icon-no-eye:before{content:"\68"}.gogo-icon-eye:before{content:"\69"}.gogo-icon-attention:before{content:"\6a"}.gogo-icon-mail:before{content:"\6b"}.gogo-icon-marker-symbol:before{content:"\6c"}.gogo-icon-phone:before{content:"\6d"}.gogo-icon-add-circle:before{content:"\6e"}.gogo-icon-plus-circle-1:before{content:"\6f"}.gogo-icon-clear:before{content:"\70"}.gogo-icon-redo:before{content:"\71"}.gogo-icon-day:before{content:"\72"}.gogo-icon-exclamation-1:before{content:"\73"}.gogo-icon-edit:before{content:"\74"}.gogo-icon-menu:before{content:"\75"}.gogo-icon-directions:before{content:"\77"}.gogo-icon-layers:before{content:"\78"}.gogo-icon-locate:before{content:"\7a"}.gogo-icon-material-design-icons-1:before{content:"\41"}.gogo-icon-people:before{content:"\42"}.gogo-icon-add-element:before{content:"\43"}.gogo-icon-internet:before{content:"\44"}.gogo-icon-star-empty:before{content:"\45"}.gogo-icon-share-alt:before{content:"\46"}.gogo-icon-expand:before{content:"\47"}.gogo-icon-angle-right:before{content:"\48"}.gogo-icon-arrow-circle-down:before{content:"\49"}.gogo-icon-facebook:before{content:"\4a"}.gogo-icon-external-link:before{content:"\4b"}.gogo-icon-gplus:before{content:"\4c"}.gogo-icon-home:before{content:"\4d"}.gogo-icon-info:before{content:"\4e"}.gogo-icon-list:before{content:"\4f"}.gogo-icon-lock:before{content:"\50"}.gogo-icon-plus-circle:before{content:"\51"}.gogo-icon-search:before{content:"\52"}.gogo-icon-close:before{content:"\53"}.gogo-icon-user-plus:before{content:"\54"}.gogo-icon-users:before{content:"\55"}.gogo-icon-unlock:before{content:"\56"}.gogo-icon-yahoo:before{content:"\57"}.gogo-icon-twitter:before{content:"\58"}.gogo-icon-partner-3:before{content:"\59"}.gogo-icon-map:before{content:"\5a"}.gogo-icon-ellipsis:before{content:"\30"}.gogo-icon-moderation:before{content:"\79"}.gogo-icon-filters-1:before{content:"\37"}.gogo-icon-vote:before{content:"\76"}.gogo-icon-marker-simple-1:before{content:"\31"}.gogo-icon-marker-simple:before{content:"\32"}.gogo-icon-stamp-1:before{content:"\36"}.gogo-icon-stamp-2:before{content:"\38"}.gogo-icon-communs:before{content:"\34"}.gogo-icon-printemps:before{content:"\33"}.gogo-icon-chevron-left:before{content:"\35"}.gogo-icon-chevron-right:before{content:"\39"}
\ No newline at end of file
+ */height:100%;width:100%}.gogo-load-css ul{list-style-type:none;padding:0}.gogo-load-css a{color:#26A69A;-webkit-tap-highlight-color:transparent;text-decoration:none}.gogo-load-css .valign-wrapper{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-flex-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center}.gogo-load-css .valign-wrapper .valign{display:block}.gogo-load-css ul li{list-style-type:none}.gogo-load-css .clearfix{clear:both}.gogo-load-css .z-depth-0{box-shadow:none!important}.gogo-load-css .btn,.gogo-load-css .btn-floating,.gogo-load-css .btn-large,.gogo-load-css .collapsible,.gogo-load-css .dropdown-content,.gogo-load-css .gogocarto-container #element-info-bar .element-item.active .expandLabel.transform-big,.gogo-load-css .toast,.gogo-load-css .z-depth-1{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12)}.gogo-load-css .btn-floating:hover,.gogo-load-css .btn-large:hover,.gogo-load-css .btn:hover,.gogo-load-css .z-depth-1-half{box-shadow:0 5px 11px 0 rgba(0,0,0,.18),0 4px 15px 0 rgba(0,0,0,.15)}.gogo-load-css .gogocarto-container #markerDirectionResult,.gogo-load-css .z-depth-2{box-shadow:0 8px 17px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19)}.gogo-load-css .z-depth-3{box-shadow:0 12px 15px 0 rgba(0,0,0,.24),0 17px 50px 0 rgba(0,0,0,.19)}.gogo-load-css .modal,.gogo-load-css .z-depth-4{box-shadow:0 16px 28px 0 rgba(0,0,0,.22),0 25px 55px 0 rgba(0,0,0,.21)}.gogo-load-css .z-depth-5{box-shadow:0 27px 24px 0 rgba(0,0,0,.2),0 40px 77px 0 rgba(0,0,0,.22)}.gogo-load-css .hoverable:hover{transition:box-shadow .25s;box-shadow:0 8px 17px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19)}.gogo-load-css .divider{height:1px;overflow:hidden;background-color:#CCC}.gogo-load-css blockquote{margin:20px 0;padding-left:1.5rem;border-left:5px solid #de5a5f}.gogo-load-css i{line-height:inherit}.gogo-load-css i.left{float:left;margin-right:15px}.gogo-load-css i.right{float:right;margin-left:15px}.gogo-load-css i.tiny{font-size:1rem}.gogo-load-css i.small{font-size:2rem}.gogo-load-css i.medium{font-size:4rem}.gogo-load-css i.large{font-size:6rem}.gogo-load-css img.responsive-img,.gogo-load-css video.responsive-video{max-width:100%;height:auto}.gogo-load-css .pagination li{display:inline-block;font-size:1.2rem;padding:0 10px;line-height:30px;border-radius:2px;text-align:center}.gogo-load-css .pagination li a{color:#444}.gogo-load-css .pagination li.active a{color:#fff}.gogo-load-css .pagination li.active{background-color:#de5a5f}.gogo-load-css .pagination li.disabled a{cursor:default;color:#999}.gogo-load-css .pagination li i{font-size:2rem}.gogo-load-css .pagination li.pages ul li{display:inline-block;float:none}.gogo-load-css .parallax-container{position:relative;overflow:hidden;height:500px}.gogo-load-css .parallax{position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1}.gogo-load-css .parallax img{display:none;position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);transform:translateX(-50%)}.gogo-load-css .pin-bottom,.gogo-load-css .pin-top{position:relative}.gogo-load-css .pinned{position:fixed!important}.gogo-load-css ul.staggered-list li{opacity:0}.gogo-load-css .fade-in{opacity:0;transform-origin:0 50%}@media only screen and (max-width:600px){.gogo-load-css .hide-on-small-and-down,.gogo-load-css .hide-on-small-only{display:none!important}}@media only screen and (max-width:1200px){.gogo-load-css .pagination{width:100%}.gogo-load-css .pagination li.next,.gogo-load-css .pagination li.prev{width:10%}.gogo-load-css .pagination li.pages{width:80%;overflow:hidden;white-space:nowrap}.gogo-load-css .hide-on-med-and-down{display:none!important}}@media only screen and (min-width:601px){.gogo-load-css .hide-on-med-and-up{display:none!important}}@media only screen and (min-width:600px) and (max-width:900px){.gogo-load-css .hide-on-med-only{display:none!important}}@media only screen and (min-width:1201px){.gogo-load-css .hide-on-large-only{display:none!important}.gogo-load-css .show-on-large{display:initial!important}}@media only screen and (min-width:600px) and (max-width:900px){.gogo-load-css .show-on-medium{display:initial!important}}@media only screen and (min-width:601px){.gogo-load-css .show-on-medium-and-up{display:initial!important}}@media only screen and (max-width:1200px){.gogo-load-css .show-on-medium-and-down{display:initial!important}}@media only screen and (max-width:600px){.gogo-load-css .show-on-small{display:initial!important}.gogo-load-css .center-on-small-only{text-align:center}}.gogo-load-css footer.page-footer{margin-top:20px;padding-top:20px;background-color:#de5a5f}.gogo-load-css footer.page-footer .footer-copyright{overflow:hidden;height:50px;line-height:50px;color:rgba(255,255,255,.8);background-color:rgba(51,51,51,.08)}.gogo-load-css table.highlight>tbody>tr:hover,.gogo-load-css table.striped>tbody>tr:nth-child(odd){background-color:#f2f2f2}.gogo-load-css table,.gogo-load-css td,.gogo-load-css th{border:none}.gogo-load-css table.bordered>tbody>tr,.gogo-load-css table.bordered>thead>tr,.gogo-load-css thead{border-bottom:1px solid #d0d0d0}.gogo-load-css table{width:100%;display:table}.gogo-load-css table.striped>tbody>tr>td{border-radius:0}.gogo-load-css table.highlight>tbody>tr{-webkit-transition:background-color .25s ease;-moz-transition:background-color .25s ease;-o-transition:background-color .25s ease;-ms-transition:background-color .25s ease;transition:background-color .25s ease}.gogo-load-css td,.gogo-load-css th{padding:15px 5px;display:table-cell;text-align:left;vertical-align:middle;border-radius:2px}@media only screen and (max-width:1200px){.gogo-load-css table.responsive-table{width:100%;border-collapse:collapse;border-spacing:0;display:block;position:relative}.gogo-load-css table.responsive-table td,.gogo-load-css table.responsive-table th{margin:0;vertical-align:top}.gogo-load-css table.responsive-table thead{display:block;float:left;border:0;border-right:1px solid #d0d0d0}.gogo-load-css table.responsive-table thead tr{display:block;padding:0 10px 0 0}.gogo-load-css table.responsive-table thead tr th::before{content:"\00a0"}.gogo-load-css table.responsive-table tbody{display:block;width:auto;position:relative;overflow-x:auto;white-space:nowrap}.gogo-load-css table.responsive-table tbody tr{display:inline-block;vertical-align:top}.gogo-load-css table.responsive-table th{display:block;text-align:right}.gogo-load-css table.responsive-table td{display:block;min-height:1.25em;text-align:left}.gogo-load-css table.responsive-table tr{padding:0 10px}.gogo-load-css table.responsive-table.bordered th{border-bottom:0;border-left:0}.gogo-load-css table.responsive-table.bordered td{border-left:0;border-right:0;border-bottom:0}.gogo-load-css table.responsive-table.bordered tr{border:0}.gogo-load-css table.responsive-table.bordered tbody tr{border-right:1px solid #d0d0d0}}.gogo-load-css .collection{margin:.5rem 0 1rem;border:1px solid #e0e0e0;border-radius:2px;overflow:hidden;position:relative}.gogo-load-css .collection .collection-item{background-color:#fff;line-height:1.5rem;padding:10px 20px;margin:0;border-bottom:1px solid #e0e0e0}.gogo-load-css .collection .collection-item.avatar{min-height:84px;padding-left:72px;position:relative}.gogo-load-css .collection .collection-item.avatar .circle{position:absolute;width:42px;height:42px;overflow:hidden;left:15px;display:inline-block;vertical-align:middle}.gogo-load-css .collection .collection-item.avatar i.circle{font-size:18px;line-height:42px;color:#fff;background-color:#999;text-align:center}.gogo-load-css .collection .collection-item.avatar .title{font-size:16px}.gogo-load-css .collection .collection-item.avatar p{margin:0}.gogo-load-css .collection .collection-item.avatar .secondary-content{position:absolute;top:16px;right:16px}.gogo-load-css .collection .collection-item:last-child{border-bottom:none}.gogo-load-css .collection .collection-item.active{background-color:#4A7874;color:#e9f1f1}.gogo-load-css .collection .collection-item.active .secondary-content{color:#fff}.gogo-load-css .collection a.collection-item{display:block;-webkit-transition:.25s;-moz-transition:.25s;-o-transition:.25s;-ms-transition:.25s;transition:.25s;color:#4A7874}.gogo-load-css .collection a.collection-item:not(.active):hover{background-color:#ddd}.gogo-load-css .collection.with-header .collection-header{background-color:#fff;border-bottom:1px solid #e0e0e0;padding:10px 20px}.gogo-load-css .collection.with-header .collection-item{padding-left:30px}.gogo-load-css .collection.with-header .collection-item.avatar{padding-left:72px}.gogo-load-css .secondary-content{float:right;color:#4A7874}.gogo-load-css .collapsible .collection{margin:0;border:none}.gogo-load-css span.badge{min-width:3rem;padding:0 6px;text-align:center;font-size:1rem;line-height:inherit;color:color("grey","darken-1");position:absolute;right:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.gogo-load-css span.badge.more{font-weight:300;font-size:.8rem;color:#fff;background-color:#4A7874;border-radius:2px}.gogo-load-css span.badge.new:after{content:" new"}.gogo-load-css span.badge.more:after{content:" more"}.gogo-load-css nav ul a span.badge{position:static;margin-left:4px;line-height:0}.gogo-load-css .video-container{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.gogo-load-css .video-container.no-controls{padding-top:0}.gogo-load-css .video-container embed,.gogo-load-css .video-container iframe,.gogo-load-css .video-container object{position:absolute;top:0;left:0;width:100%;height:100%}.gogo-load-css .progress{position:relative;height:4px;display:block;width:100%;background-color:#bad4d2;border-radius:2px;margin:.5rem 0 1rem;overflow:hidden}.gogo-load-css .progress .determinate{position:absolute;top:0;left:0;bottom:0;background-color:#4A7874;-webkit-transition:width .3s linear;-moz-transition:width .3s linear;-o-transition:width .3s linear;-ms-transition:width .3s linear;transition:width .3s linear}.gogo-load-css .progress .indeterminate{background-color:#4A7874}.gogo-load-css .progress .indeterminate:after,.gogo-load-css .progress .indeterminate:before{content:'';position:absolute;background-color:inherit;bottom:0;will-change:left,right;top:0;left:0}.gogo-load-css .progress .indeterminate:before{-webkit-animation:indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite;-moz-animation:indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite;-ms-animation:indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite;-o-animation:indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite;animation:indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite}.gogo-load-css .progress .indeterminate:after{-webkit-animation:indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;-moz-animation:indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;-ms-animation:indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;-o-animation:indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;animation:indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;-webkit-animation-delay:1.15s;-moz-animation-delay:1.15s;-ms-animation-delay:1.15s;-o-animation-delay:1.15s;animation-delay:1.15s}@-webkit-keyframes indeterminate{0%{left:-35%;right:100%}100%,60%{left:100%;right:-90%}}@-moz-keyframes indeterminate{0%{left:-35%;right:100%}100%,60%{left:100%;right:-90%}}@keyframes indeterminate{0%{left:-35%;right:100%}100%,60%{left:100%;right:-90%}}@-webkit-keyframes indeterminate-short{0%{left:-200%;right:100%}100%,60%{left:107%;right:-8%}}@-moz-keyframes indeterminate-short{0%{left:-200%;right:100%}100%,60%{left:107%;right:-8%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}100%,60%{left:107%;right:-8%}}.gogo-load-css .hide{display:none!important}.gogo-load-css .left-align{text-align:left}.gogo-load-css .right-align{text-align:right}.gogo-load-css .center,.gogo-load-css .center-align{text-align:center}.gogo-load-css .left{float:left!important}.gogo-load-css .right{float:right!important}.gogo-load-css .no-select,.gogo-load-css input[type=range],.gogo-load-css input[type=range]+.thumb{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.gogo-load-css .circle{border-radius:50%}.gogo-load-css .center-block{display:block;margin-left:auto;margin-right:auto}.gogo-load-css .truncate{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gogo-load-css .no-padding{padding:0!important}.gogo-load-css .container{margin:0 auto;max-width:1280px;width:90%}@media only screen and (min-width:601px){.gogo-load-css .container{width:85%}}@media only screen and (min-width:1201px){.gogo-load-css .container{width:70%}}.gogo-load-css .container .row{margin-left:-.75rem;margin-right:-.75rem}.gogo-load-css .section{padding-top:1rem;padding-bottom:1rem}.gogo-load-css .section.no-pad{padding:0}.gogo-load-css .section.no-pad-bot{padding-bottom:0}.gogo-load-css .section.no-pad-top{padding-top:0}.gogo-load-css .row{margin-left:auto;margin-right:auto;margin-bottom:20px}.gogo-load-css .row:after{content:"";display:table;clear:both}.gogo-load-css .gogocarto-container,.gogo-load-css .tabs{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex}.gogo-load-css .row .col{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0 .75rem}.gogo-load-css .row .col.s1{width:8.33333%;margin-left:0}.gogo-load-css .row .col.s2{width:16.66667%;margin-left:0}.gogo-load-css .row .col.s3{width:25%;margin-left:0}.gogo-load-css .row .col.s4{width:33.33333%;margin-left:0}.gogo-load-css .row .col.s5{width:41.66667%;margin-left:0}.gogo-load-css .row .col.s6{width:50%;margin-left:0}.gogo-load-css .row .col.s7{width:58.33333%;margin-left:0}.gogo-load-css .row .col.s8{width:66.66667%;margin-left:0}.gogo-load-css .row .col.s9{width:75%;margin-left:0}.gogo-load-css .row .col.s10{width:83.33333%;margin-left:0}.gogo-load-css .row .col.s11{width:91.66667%;margin-left:0}.gogo-load-css .row .col.s12{width:100%;margin-left:0}.gogo-load-css .row .col.offset-s1{margin-left:8.33333%}.gogo-load-css .row .col.offset-s2{margin-left:16.66667%}.gogo-load-css .row .col.offset-s3{margin-left:25%}.gogo-load-css .row .col.offset-s4{margin-left:33.33333%}.gogo-load-css .row .col.offset-s5{margin-left:41.66667%}.gogo-load-css .row .col.offset-s6{margin-left:50%}.gogo-load-css .row .col.offset-s7{margin-left:58.33333%}.gogo-load-css .row .col.offset-s8{margin-left:66.66667%}.gogo-load-css .row .col.offset-s9{margin-left:75%}.gogo-load-css .row .col.offset-s10{margin-left:83.33333%}.gogo-load-css .row .col.offset-s11{margin-left:91.66667%}.gogo-load-css .row .col.offset-s12{margin-left:100%}@media only screen and (min-width:601px){.gogo-load-css .row .col.m1{width:8.33333%;margin-left:0}.gogo-load-css .row .col.m2{width:16.66667%;margin-left:0}.gogo-load-css .row .col.m3{width:25%;margin-left:0}.gogo-load-css .row .col.m4{width:33.33333%;margin-left:0}.gogo-load-css .row .col.m5{width:41.66667%;margin-left:0}.gogo-load-css .row .col.m6{width:50%;margin-left:0}.gogo-load-css .row .col.m7{width:58.33333%;margin-left:0}.gogo-load-css .row .col.m8{width:66.66667%;margin-left:0}.gogo-load-css .row .col.m9{width:75%;margin-left:0}.gogo-load-css .row .col.m10{width:83.33333%;margin-left:0}.gogo-load-css .row .col.m11{width:91.66667%;margin-left:0}.gogo-load-css .row .col.m12{width:100%;margin-left:0}.gogo-load-css .row .col.offset-m1{margin-left:8.33333%}.gogo-load-css .row .col.offset-m2{margin-left:16.66667%}.gogo-load-css .row .col.offset-m3{margin-left:25%}.gogo-load-css .row .col.offset-m4{margin-left:33.33333%}.gogo-load-css .row .col.offset-m5{margin-left:41.66667%}.gogo-load-css .row .col.offset-m6{margin-left:50%}.gogo-load-css .row .col.offset-m7{margin-left:58.33333%}.gogo-load-css .row .col.offset-m8{margin-left:66.66667%}.gogo-load-css .row .col.offset-m9{margin-left:75%}.gogo-load-css .row .col.offset-m10{margin-left:83.33333%}.gogo-load-css .row .col.offset-m11{margin-left:91.66667%}.gogo-load-css .row .col.offset-m12{margin-left:100%}}@media only screen and (min-width:1201px){.gogo-load-css .row .col.l1{width:8.33333%;margin-left:0}.gogo-load-css .row .col.l2{width:16.66667%;margin-left:0}.gogo-load-css .row .col.l3{width:25%;margin-left:0}.gogo-load-css .row .col.l4{width:33.33333%;margin-left:0}.gogo-load-css .row .col.l5{width:41.66667%;margin-left:0}.gogo-load-css .row .col.l6{width:50%;margin-left:0}.gogo-load-css .row .col.l7{width:58.33333%;margin-left:0}.gogo-load-css .row .col.l8{width:66.66667%;margin-left:0}.gogo-load-css .row .col.l9{width:75%;margin-left:0}.gogo-load-css .row .col.l10{width:83.33333%;margin-left:0}.gogo-load-css .row .col.l11{width:91.66667%;margin-left:0}.gogo-load-css .row .col.l12{width:100%;margin-left:0}.gogo-load-css .row .col.offset-l1{margin-left:8.33333%}.gogo-load-css .row .col.offset-l2{margin-left:16.66667%}.gogo-load-css .row .col.offset-l3{margin-left:25%}.gogo-load-css .row .col.offset-l4{margin-left:33.33333%}.gogo-load-css .row .col.offset-l5{margin-left:41.66667%}.gogo-load-css .row .col.offset-l6{margin-left:50%}.gogo-load-css .row .col.offset-l7{margin-left:58.33333%}.gogo-load-css .row .col.offset-l8{margin-left:66.66667%}.gogo-load-css .row .col.offset-l9{margin-left:75%}.gogo-load-css .row .col.offset-l10{margin-left:83.33333%}.gogo-load-css .row .col.offset-l11{margin-left:91.66667%}.gogo-load-css .row .col.offset-l12{margin-left:100%}}.gogo-load-css html{line-height:1.5;font-family:Roboto,sans-serif;font-weight:400;color:rgba(0,0,0,.87)}@media only screen and (min-width:0){.gogo-load-css html{font-size:14px}}@media only screen and (min-width:900px){.gogo-load-css html{font-size:14.5px}}@media only screen and (min-width:1200px){.gogo-load-css html{font-size:15px}}.gogo-load-css h1,.gogo-load-css h2,.gogo-load-css h3,.gogo-load-css h4,.gogo-load-css h5,.gogo-load-css h6{font-weight:400}.gogo-load-css h1 a,.gogo-load-css h2 a,.gogo-load-css h3 a,.gogo-load-css h4 a,.gogo-load-css h5 a,.gogo-load-css h6 a{font-weight:inherit}.gogo-load-css h1{font-size:4.2rem;line-height:110%;margin:2.1rem 0 1.68rem}.gogo-load-css h2{font-size:3.56rem;line-height:110%;margin:1.78rem 0 1.424rem}.gogo-load-css h3{font-size:2.92rem;line-height:110%;margin:1.46rem 0 1.168rem}.gogo-load-css h4{font-size:2.28rem;line-height:110%;margin:1.14rem 0 .912rem}.gogo-load-css h5{font-size:1.64rem;line-height:110%;margin:.82rem 0 .656rem}.gogo-load-css h6{font-size:1rem;line-height:110%;margin:.5rem 0 .4rem}.gogo-load-css em{font-style:italic}.gogo-load-css strong{font-weight:700}.gogo-load-css small{font-size:75%}.gogo-load-css .light,.gogo-load-css footer.page-footer .footer-copyright{font-weight:300}.gogo-load-css .thin{font-weight:200}.gogo-load-css .flow-text{font-weight:300}@media only screen and (min-width:360px){.gogo-load-css .flow-text{font-size:1.2rem}}@media only screen and (min-width:390px){.gogo-load-css .flow-text{font-size:1.224rem}}@media only screen and (min-width:420px){.gogo-load-css .flow-text{font-size:1.248rem}}@media only screen and (min-width:450px){.gogo-load-css .flow-text{font-size:1.272rem}}@media only screen and (min-width:480px){.gogo-load-css .flow-text{font-size:1.296rem}}@media only screen and (min-width:510px){.gogo-load-css .flow-text{font-size:1.32rem}}@media only screen and (min-width:540px){.gogo-load-css .flow-text{font-size:1.344rem}}@media only screen and (min-width:570px){.gogo-load-css .flow-text{font-size:1.368rem}}@media only screen and (min-width:600px){.gogo-load-css .flow-text{font-size:1.392rem}}@media only screen and (min-width:630px){.gogo-load-css .flow-text{font-size:1.416rem}}@media only screen and (min-width:660px){.gogo-load-css .flow-text{font-size:1.44rem}}@media only screen and (min-width:690px){.gogo-load-css .flow-text{font-size:1.464rem}}@media only screen and (min-width:720px){.gogo-load-css .flow-text{font-size:1.488rem}}@media only screen and (min-width:750px){.gogo-load-css .flow-text{font-size:1.512rem}}@media only screen and (min-width:780px){.gogo-load-css .flow-text{font-size:1.536rem}}@media only screen and (min-width:810px){.gogo-load-css .flow-text{font-size:1.56rem}}@media only screen and (min-width:840px){.gogo-load-css .flow-text{font-size:1.584rem}}@media only screen and (min-width:870px){.gogo-load-css .flow-text{font-size:1.608rem}}@media only screen and (min-width:900px){.gogo-load-css .flow-text{font-size:1.632rem}}@media only screen and (min-width:930px){.gogo-load-css .flow-text{font-size:1.656rem}}@media only screen and (min-width:960px){.gogo-load-css .flow-text{font-size:1.68rem}}@media only screen and (max-width:360px){.gogo-load-css .flow-text{font-size:1.2rem}}.gogo-load-css .tabs{display:flex;position:relative;height:2.7rem;background-color:#3D3D3D;margin:0 auto;width:calc(100% - 1px);white-space:nowrap}.gogo-load-css .tabs .tab{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;display:block;float:left;text-align:center;line-height:3rem;height:2.7rem;margin:0;text-transform:uppercase;letter-spacing:.8px;width:15%;padding:0}.gogo-load-css .tabs .tab a{color:#fff;display:block;width:100%;height:100%;-webkit-transition:color .28s ease;-moz-transition:color .28s ease;-o-transition:color .28s ease;-ms-transition:color .28s ease;transition:color .28s ease}.gogo-load-css .tabs .tab a:hover{color:#fff}.gogo-load-css .tabs .tab.disabled a{color:#fff;cursor:default}.gogo-load-css .tabs .indicator{position:absolute;top:0;height:3px;background-color:#fff;will-change:left,right}.gogo-load-css .btn,.gogo-load-css .btn-flat,.gogo-load-css .btn-large{border:none;border-radius:2px;display:inline-block;height:36px;line-height:36px;outline:0;padding:0 2rem;text-transform:uppercase;vertical-align:middle;-webkit-tap-highlight-color:transparent}.gogo-load-css .btn-floating.disabled,.gogo-load-css .btn-floating:disabled,.gogo-load-css .btn-large.disabled,.gogo-load-css .btn-large:disabled,.gogo-load-css .btn.disabled,.gogo-load-css .btn:disabled,.gogo-load-css .disabled.btn-large{background-color:#DFDFDF!important;box-shadow:none;color:#9F9F9F!important;cursor:default}.gogo-load-css .btn-floating.disabled *,.gogo-load-css .btn-floating:disabled *,.gogo-load-css .btn-large.disabled *,.gogo-load-css .btn-large:disabled *,.gogo-load-css .btn.disabled *,.gogo-load-css .btn:disabled *,.gogo-load-css .disabled.btn-large *{pointer-events:none}.gogo-load-css .btn-floating.disabled:hover,.gogo-load-css .btn-floating:disabled:hover,.gogo-load-css .btn-large.disabled:hover,.gogo-load-css .btn-large:disabled:hover,.gogo-load-css .btn.disabled:hover,.gogo-load-css .btn:disabled:hover,.gogo-load-css .disabled.btn-large:hover{background-color:#DFDFDF;color:#9F9F9F}.gogo-load-css .btn i,.gogo-load-css .btn-flat i,.gogo-load-css .btn-floating i,.gogo-load-css .btn-large i{font-size:1.3rem;line-height:inherit}.gogo-load-css .btn,.gogo-load-css .btn-large{text-decoration:none;color:#fff;background-color:#26A69A;text-align:center;letter-spacing:.5px;-webkit-transition:.2s ease-out;-moz-transition:.2s ease-out;-o-transition:.2s ease-out;-ms-transition:.2s ease-out;transition:.2s ease-out;cursor:pointer}.gogo-load-css .btn-large:hover,.gogo-load-css .btn:hover{background-color:#2bbbad}.gogo-load-css .btn-floating{display:inline-block;color:#fff;position:relative;overflow:hidden;z-index:1;width:37px;height:37px;line-height:37px;padding:0;background-color:#26A69A;border-radius:50%;transition:.3s;cursor:pointer;vertical-align:middle}.gogo-load-css .btn-floating i{width:inherit;display:inline-block;text-align:center;color:#fff;font-size:1.6rem;line-height:37px}.gogo-load-css .btn-floating:before{border-radius:0}.gogo-load-css .btn-floating.btn-large{width:55.5px;height:55.5px}.gogo-load-css .btn-floating.btn-large i{line-height:55.5px}.gogo-load-css button.btn-floating{border:none}.gogo-load-css .fixed-action-btn{position:fixed;right:23px;bottom:23px;padding-top:15px;margin-bottom:0;z-index:998}.gogo-load-css .fixed-action-btn ul{left:0;right:0;text-align:center;position:absolute;bottom:64px;margin:0}.gogo-load-css .fixed-action-btn ul li{margin-bottom:15px}.gogo-load-css .fixed-action-btn ul a.btn-floating{opacity:0}.gogo-load-css .btn-flat{box-shadow:none;background-color:transparent;color:#343434;cursor:pointer}.gogo-load-css .btn-flat.disabled{color:#b3b3b3;cursor:default}.gogo-load-css .btn-large{height:54px;line-height:56px}.gogo-load-css .btn-large i{font-size:1.6rem}.gogo-load-css .btn-block{display:block}.gogo-load-css .dropdown-content{background-color:#fff;margin:0;display:none;min-width:100px;max-height:650px;overflow-y:auto;opacity:0;position:absolute;z-index:999;will-change:width,height}.gogo-load-css .dropdown-content li{clear:both;color:rgba(0,0,0,.87);cursor:pointer;line-height:1.5rem;width:100%;text-align:left;text-transform:none}.gogo-load-css .dropdown-content li.active,.gogo-load-css .dropdown-content li:hover{background-color:#eee}.gogo-load-css .dropdown-content li>a,.gogo-load-css .dropdown-content li>span{font-size:1.2rem;color:#4A7874;display:block;padding:1rem}.gogo-load-css .dropdown-content li>a>i{height:inherit;line-height:inherit}.gogo-load-css .waves-effect{position:relative;cursor:pointer;display:inline-block;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;vertical-align:middle;z-index:1;will-change:opacity,transform;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;-ms-transition:all .3s ease-out;transition:all .3s ease-out}.gogo-load-css .waves-effect .waves-ripple{position:absolute;border-radius:50%;width:20px;height:20px;margin-top:-10px;margin-left:-10px;opacity:0;background:rgba(0,0,0,.2);-webkit-transition:all .7s ease-out;-moz-transition:all .7s ease-out;-o-transition:all .7s ease-out;-ms-transition:all .7s ease-out;transition:all .7s ease-out;-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform,opacity;-o-transition-property:-o-transform,opacity;transition-property:transform,opacity;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);pointer-events:none}.gogo-load-css .waves-effect.waves-light .waves-ripple{background-color:rgba(255,255,255,.45)}.gogo-load-css .waves-effect.waves-red .waves-ripple{background-color:rgba(244,67,54,.7)}.gogo-load-css .waves-effect.waves-yellow .waves-ripple{background-color:rgba(255,235,59,.7)}.gogo-load-css .waves-effect.waves-orange .waves-ripple{background-color:rgba(255,152,0,.7)}.gogo-load-css .waves-effect.waves-purple .waves-ripple{background-color:rgba(156,39,176,.7)}.gogo-load-css .waves-effect.waves-green .waves-ripple{background-color:rgba(76,175,80,.7)}.gogo-load-css .waves-effect.waves-teal .waves-ripple{background-color:rgba(0,150,136,.7)}.gogo-load-css .waves-notransition{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}.gogo-load-css .waves-input-wrapper{border-radius:.2em;vertical-align:bottom}.gogo-load-css .waves-input-wrapper .waves-button-input{position:relative;top:0;left:0;z-index:1}.gogo-load-css .waves-circle{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0);text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%;-webkit-mask-image:none}.gogo-load-css .waves-block{display:block}.gogo-load-css a.waves-effect .waves-ripple{z-index:-1}.gogo-load-css .modal{display:none;position:fixed;left:0;right:0;background-color:#fafafa;padding:0;max-height:70%;width:55%;margin:auto;overflow-y:auto;border-radius:2px;will-change:top,opacity}@media only screen and (max-width:1200px){.gogo-load-css .modal{width:80%}}@media only screen and (max-width:600px){.gogo-load-css .modal{width:100%;max-height:100%;height:100%;top:0!important}}.gogo-load-css .modal h1,.gogo-load-css .modal h2,.gogo-load-css .modal h3,.gogo-load-css .modal h4,.gogo-load-css .modal h5{margin-top:0}.gogo-load-css .modal h5{margin-bottom:1.5rem}.gogo-load-css .modal .footer{margin-top:1rem;text-align:center}.gogo-load-css .modal .modal-content{padding:24px}@media only screen and (min-width:601px){.gogo-load-css .modal .modal-content{padding:40px}}.gogo-load-css .modal .modal-close{cursor:pointer;color:#fff}.gogo-load-css .modal .modal-footer{border-radius:0 0 2px 2px;background-color:#fafafa;padding:4px 6px;height:56px;width:100%}.gogo-load-css .modal .modal-footer .btn,.gogo-load-css .modal .modal-footer .btn-flat,.gogo-load-css .modal .modal-footer .btn-large{float:right;margin:6px 0}.gogo-load-css .modal.modal-fixed-footer{padding:0;height:70%}.gogo-load-css .modal.modal-fixed-footer .modal-content{position:absolute;height:calc(100% - 58px);max-height:100%;width:100%;overflow-y:auto}.gogo-load-css .modal.modal-fixed-footer .modal-footer{border-top:1px solid rgba(0,0,0,.1);position:absolute;bottom:0}.gogo-load-css .modal.bottom-sheet{top:auto;bottom:-100%;margin:0;width:100%;max-height:45%;border-radius:0;will-change:bottom,opacity}.gogo-load-css .collapsible{border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;margin:.5rem 0 1rem}.gogo-load-css .collapsible-header{display:block;cursor:pointer;min-height:3rem;line-height:3rem;padding:0 1rem;background-color:#fff;border-bottom:1px solid #ddd}.gogo-load-css .collapsible-header i{width:2rem;font-size:1.6rem;line-height:3rem;display:block;float:left;text-align:center;margin-right:1rem}.gogo-load-css .collapsible-body{display:none;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.gogo-load-css .collapsible-body p{margin:0;padding:2rem}.gogo-load-css .side-nav .collapsible{border:none;box-shadow:none}.gogo-load-css .side-nav .collapsible li{padding:0}.gogo-load-css .side-nav .collapsible-header{background-color:transparent;border:none;line-height:inherit;height:inherit;margin:0 1rem}.gogo-load-css .side-nav .collapsible-header i{line-height:inherit}.gogo-load-css .side-nav .collapsible-body{border:0;background-color:#fff}.gogo-load-css .side-nav .collapsible-body li a{margin:0 1rem 0 2rem}.gogo-load-css .collapsible.popout{border:none;box-shadow:none}.gogo-load-css .collapsible.popout>li{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12);margin:0 24px;transition:margin .35s cubic-bezier(.25,.46,.45,.94)}.gogo-load-css .collapsible.popout>li.active{box-shadow:0 5px 11px 0 rgba(0,0,0,.18),0 4px 15px 0 rgba(0,0,0,.15);margin:16px 0}.gogo-load-css select:focus{outline:#d0e2e0 solid 1px}.gogo-load-css label{font-size:.8rem;color:#3D3D3D}.gogo-load-css ::-webkit-input-placeholder{color:#707070}.gogo-load-css :-moz-placeholder{color:#707070}.gogo-load-css ::-moz-placeholder{color:#707070}.gogo-load-css :-ms-input-placeholder{color:#707070}.gogo-load-css input[type=date],.gogo-load-css input[type=datetime-local],.gogo-load-css input[type=email],.gogo-load-css input[type=number],.gogo-load-css input[type=password],.gogo-load-css input[type=search],.gogo-load-css input[type=tel],.gogo-load-css input[type=text],.gogo-load-css input[type=time],.gogo-load-css input[type=url],.gogo-load-css textarea.materialize-textarea{background-color:transparent;border:none;border-bottom:1px solid #3D3D3D;border-radius:0;outline:0;height:3rem;width:100%;font-size:1rem;margin:0 0 15px;padding:0;box-shadow:none;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;transition:all .3s}.gogo-load-css input[type=date]:disabled,.gogo-load-css input[type=date][readonly=readonly],.gogo-load-css input[type=datetime-local]:disabled,.gogo-load-css input[type=datetime-local][readonly=readonly],.gogo-load-css input[type=email]:disabled,.gogo-load-css input[type=email][readonly=readonly],.gogo-load-css input[type=number]:disabled,.gogo-load-css input[type=number][readonly=readonly],.gogo-load-css input[type=password]:disabled,.gogo-load-css input[type=password][readonly=readonly],.gogo-load-css input[type=search]:disabled,.gogo-load-css input[type=search][readonly=readonly],.gogo-load-css input[type=tel]:disabled,.gogo-load-css input[type=tel][readonly=readonly],.gogo-load-css input[type=text]:disabled,.gogo-load-css input[type=text][readonly=readonly],.gogo-load-css input[type=time]:disabled,.gogo-load-css input[type=time][readonly=readonly],.gogo-load-css input[type=url]:disabled,.gogo-load-css input[type=url][readonly=readonly],.gogo-load-css textarea.materialize-textarea:disabled,.gogo-load-css textarea.materialize-textarea[readonly=readonly]{color:rgba(0,0,0,.26);border-bottom:1px dotted rgba(0,0,0,.26)}.gogo-load-css input[type=date].valid,.gogo-load-css input[type=date]:focus.valid,.gogo-load-css input[type=date]:focus:not([readonly]),.gogo-load-css input[type=datetime-local].valid,.gogo-load-css input[type=datetime-local]:focus.valid,.gogo-load-css input[type=datetime-local]:focus:not([readonly]),.gogo-load-css input[type=email].valid,.gogo-load-css input[type=email]:focus.valid,.gogo-load-css input[type=email]:focus:not([readonly]),.gogo-load-css input[type=number].valid,.gogo-load-css input[type=number]:focus.valid,.gogo-load-css input[type=number]:focus:not([readonly]),.gogo-load-css input[type=password].valid,.gogo-load-css input[type=password]:focus.valid,.gogo-load-css input[type=password]:focus:not([readonly]),.gogo-load-css input[type=search].valid,.gogo-load-css input[type=search]:focus.valid,.gogo-load-css input[type=search]:focus:not([readonly]),.gogo-load-css input[type=tel].valid,.gogo-load-css input[type=tel]:focus.valid,.gogo-load-css input[type=tel]:focus:not([readonly]),.gogo-load-css input[type=text].valid,.gogo-load-css input[type=text]:focus.valid,.gogo-load-css input[type=text]:focus:not([readonly]),.gogo-load-css input[type=time].valid,.gogo-load-css input[type=time]:focus.valid,.gogo-load-css input[type=time]:focus:not([readonly]),.gogo-load-css input[type=url].valid,.gogo-load-css input[type=url]:focus.valid,.gogo-load-css input[type=url]:focus:not([readonly]),.gogo-load-css textarea.materialize-textarea.valid,.gogo-load-css textarea.materialize-textarea:focus.valid,.gogo-load-css textarea.materialize-textarea:focus:not([readonly]){border-bottom:1px solid #4A7874;box-shadow:0 1px 0 0 #4A7874}.gogo-load-css input[type=date]:disabled+label,.gogo-load-css input[type=date][readonly=readonly]+label,.gogo-load-css input[type=datetime-local]:disabled+label,.gogo-load-css input[type=datetime-local][readonly=readonly]+label,.gogo-load-css input[type=email]:disabled+label,.gogo-load-css input[type=email][readonly=readonly]+label,.gogo-load-css input[type=number]:disabled+label,.gogo-load-css input[type=number][readonly=readonly]+label,.gogo-load-css input[type=password]:disabled+label,.gogo-load-css input[type=password][readonly=readonly]+label,.gogo-load-css input[type=search]:disabled+label,.gogo-load-css input[type=search][readonly=readonly]+label,.gogo-load-css input[type=tel]:disabled+label,.gogo-load-css input[type=tel][readonly=readonly]+label,.gogo-load-css input[type=text]:disabled+label,.gogo-load-css input[type=text][readonly=readonly]+label,.gogo-load-css input[type=time]:disabled+label,.gogo-load-css input[type=time][readonly=readonly]+label,.gogo-load-css input[type=url]:disabled+label,.gogo-load-css input[type=url][readonly=readonly]+label,.gogo-load-css textarea.materialize-textarea:disabled+label,.gogo-load-css textarea.materialize-textarea[readonly=readonly]+label{color:rgba(0,0,0,.26)}.gogo-load-css input[type=date]:focus:not([readonly])+label,.gogo-load-css input[type=datetime-local]:focus:not([readonly])+label,.gogo-load-css input[type=email]:focus:not([readonly])+label,.gogo-load-css input[type=number]:focus:not([readonly])+label,.gogo-load-css input[type=password]:focus:not([readonly])+label,.gogo-load-css input[type=search]:focus:not([readonly])+label,.gogo-load-css input[type=tel]:focus:not([readonly])+label,.gogo-load-css input[type=text]:focus:not([readonly])+label,.gogo-load-css input[type=time]:focus:not([readonly])+label,.gogo-load-css input[type=url]:focus:not([readonly])+label,.gogo-load-css textarea.materialize-textarea:focus:not([readonly])+label{color:#4A7874}.gogo-load-css input[type=date].valid+label:after,.gogo-load-css input[type=date]:focus.valid+label:after,.gogo-load-css input[type=datetime-local].valid+label:after,.gogo-load-css input[type=datetime-local]:focus.valid+label:after,.gogo-load-css input[type=email].valid+label:after,.gogo-load-css input[type=email]:focus.valid+label:after,.gogo-load-css input[type=number].valid+label:after,.gogo-load-css input[type=number]:focus.valid+label:after,.gogo-load-css input[type=password].valid+label:after,.gogo-load-css input[type=password]:focus.valid+label:after,.gogo-load-css input[type=search].valid+label:after,.gogo-load-css input[type=search]:focus.valid+label:after,.gogo-load-css input[type=tel].valid+label:after,.gogo-load-css input[type=tel]:focus.valid+label:after,.gogo-load-css input[type=text].valid+label:after,.gogo-load-css input[type=text]:focus.valid+label:after,.gogo-load-css input[type=time].valid+label:after,.gogo-load-css input[type=time]:focus.valid+label:after,.gogo-load-css input[type=url].valid+label:after,.gogo-load-css input[type=url]:focus.valid+label:after,.gogo-load-css textarea.materialize-textarea.valid+label:after,.gogo-load-css textarea.materialize-textarea:focus.valid+label:after{content:attr(data-success);color:#4A7874;opacity:1}.gogo-load-css input[type=date].invalid,.gogo-load-css input[type=date]:focus.invalid,.gogo-load-css input[type=datetime-local].invalid,.gogo-load-css input[type=datetime-local]:focus.invalid,.gogo-load-css input[type=email].invalid,.gogo-load-css input[type=email]:focus.invalid,.gogo-load-css input[type=number].invalid,.gogo-load-css input[type=number]:focus.invalid,.gogo-load-css input[type=password].invalid,.gogo-load-css input[type=password]:focus.invalid,.gogo-load-css input[type=search].invalid,.gogo-load-css input[type=search]:focus.invalid,.gogo-load-css input[type=tel].invalid,.gogo-load-css input[type=tel]:focus.invalid,.gogo-load-css input[type=text].invalid,.gogo-load-css input[type=text]:focus.invalid,.gogo-load-css input[type=time].invalid,.gogo-load-css input[type=time]:focus.invalid,.gogo-load-css input[type=url].invalid,.gogo-load-css input[type=url]:focus.invalid,.gogo-load-css textarea.materialize-textarea.invalid,.gogo-load-css textarea.materialize-textarea:focus.invalid{border-bottom:1px solid #B90303;box-shadow:0 1px 0 0 #B90303}.gogo-load-css input[type=date].invalid+label:after,.gogo-load-css input[type=date]:focus.invalid+label:after,.gogo-load-css input[type=datetime-local].invalid+label:after,.gogo-load-css input[type=datetime-local]:focus.invalid+label:after,.gogo-load-css input[type=email].invalid+label:after,.gogo-load-css input[type=email]:focus.invalid+label:after,.gogo-load-css input[type=number].invalid+label:after,.gogo-load-css input[type=number]:focus.invalid+label:after,.gogo-load-css input[type=password].invalid+label:after,.gogo-load-css input[type=password]:focus.invalid+label:after,.gogo-load-css input[type=search].invalid+label:after,.gogo-load-css input[type=search]:focus.invalid+label:after,.gogo-load-css input[type=tel].invalid+label:after,.gogo-load-css input[type=tel]:focus.invalid+label:after,.gogo-load-css input[type=text].invalid+label:after,.gogo-load-css input[type=text]:focus.invalid+label:after,.gogo-load-css input[type=time].invalid+label:after,.gogo-load-css input[type=time]:focus.invalid+label:after,.gogo-load-css input[type=url].invalid+label:after,.gogo-load-css input[type=url]:focus.invalid+label:after,.gogo-load-css textarea.materialize-textarea.invalid+label:after,.gogo-load-css textarea.materialize-textarea:focus.invalid+label:after{content:attr(data-error);color:#B90303;opacity:1}.gogo-load-css input[type=date]+label:after,.gogo-load-css input[type=datetime-local]+label:after,.gogo-load-css input[type=email]+label:after,.gogo-load-css input[type=number]+label:after,.gogo-load-css input[type=password]+label:after,.gogo-load-css input[type=search]+label:after,.gogo-load-css input[type=tel]+label:after,.gogo-load-css input[type=text]+label:after,.gogo-load-css input[type=time]+label:after,.gogo-load-css input[type=url]+label:after,.gogo-load-css textarea.materialize-textarea+label:after{display:block;content:"";position:absolute;top:65px;opacity:0;transition:.2s opacity ease-out,.2s color ease-out}.gogo-load-css .input-field{position:relative;margin-top:1rem}.gogo-load-css .input-field label{color:#3D3D3D;position:absolute;top:.8rem;left:.75rem;font-size:1rem;cursor:text;-webkit-transition:.2s ease-out;-moz-transition:.2s ease-out;-o-transition:.2s ease-out;-ms-transition:.2s ease-out;transition:.2s ease-out}.gogo-load-css .input-field label.active{font-size:.8rem;-webkit-transform:translateY(-140%);-moz-transform:translateY(-140%);-ms-transform:translateY(-140%);-o-transform:translateY(-140%);transform:translateY(-140%)}.gogo-load-css .input-field .prefix{position:absolute;width:3rem;font-size:2rem;line-height:3rem;-webkit-transition:color .2s;-moz-transition:color .2s;-o-transition:color .2s;-ms-transition:color .2s;transition:color .2s}.gogo-load-css .input-field .prefix.active{color:#4A7874}.gogo-load-css .input-field .prefix~input,.gogo-load-css .input-field .prefix~textarea{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.gogo-load-css .input-field .prefix~textarea{padding-top:.8rem}.gogo-load-css .input-field .prefix~label{margin-left:3rem}@media only screen and (max-width:1200px){.gogo-load-css .input-field .prefix~input{width:86%;width:calc(100% - 3rem)}}@media only screen and (max-width:600px){.gogo-load-css .input-field .prefix~input{width:80%;width:calc(100% - 3rem)}}.gogo-load-css .input-field input[type=search]{display:block;line-height:inherit;padding-left:4rem;width:calc(100% - 4rem)}.gogo-load-css .input-field input[type=search]:focus{background-color:#fff;border:0;box-shadow:none;color:#444}.gogo-load-css .input-field input[type=search]:focus+label i,.gogo-load-css .input-field input[type=search]:focus~.material-icons,.gogo-load-css .input-field input[type=search]:focus~.mdi-navigation-close{color:#444}.gogo-load-css .input-field input[type=search]+label{left:1rem}.gogo-load-css .input-field input[type=search]~.material-icons,.gogo-load-css .input-field input[type=search]~.mdi-navigation-close{position:absolute;top:0;right:1rem;color:transparent;cursor:pointer;font-size:2rem;transition:.3s color}.gogo-load-css textarea{width:100%;height:3rem;background-color:transparent}.gogo-load-css textarea.materialize-textarea{overflow-y:hidden;padding:1.6rem 0;resize:none;min-height:3rem}.gogo-load-css .hiddendiv{display:none;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;padding-top:1.2rem}.gogo-load-css [type=radio]:checked,.gogo-load-css [type=radio]:not(:checked){position:absolute;left:-9999px;visibility:hidden}.gogo-load-css [type=radio]:checked+label,.gogo-load-css [type=radio]:not(:checked)+label{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-transition:.28s ease;-moz-transition:.28s ease;-o-transition:.28s ease;-ms-transition:.28s ease;transition:.28s ease;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.gogo-load-css [type=radio]+label:after,.gogo-load-css [type=radio]+label:before{content:'';position:absolute;left:0;top:0;margin:4px;width:16px;height:16px;z-index:0;-webkit-transition:.28s ease;-moz-transition:.28s ease;-o-transition:.28s ease;-ms-transition:.28s ease;transition:.28s ease}.gogo-load-css [type=radio]:not(:checked)+label:before{border-radius:50%;border:2px solid #5a5a5a}.gogo-load-css [type=radio]:not(:checked)+label:after{border-radius:50%;border:2px solid #5a5a5a;z-index:-1;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0)}.gogo-load-css [type=radio]:checked+label:before{border-radius:50%;border:2px solid transparent}.gogo-load-css [type=radio]:checked+label:after{border-radius:50%;border:2px solid #4A7874;background-color:#4A7874;z-index:0;-webkit-transform:scale(1.02);-moz-transform:scale(1.02);-ms-transform:scale(1.02);-o-transform:scale(1.02);transform:scale(1.02)}.gogo-load-css [type=radio].with-gap:checked+label:before{border-radius:50%;border:2px solid #4A7874}.gogo-load-css [type=radio].with-gap:checked+label:after{border-radius:50%;border:2px solid #4A7874;background-color:#4A7874;z-index:0;-webkit-transform:scale(.5);-moz-transform:scale(.5);-ms-transform:scale(.5);-o-transform:scale(.5);transform:scale(.5)}.gogo-load-css [type=radio].with-gap:disabled:checked+label:before{border:2px solid rgba(0,0,0,.26)}.gogo-load-css [type=radio].with-gap:disabled:checked+label:after{border:none;background-color:rgba(0,0,0,.26)}.gogo-load-css [type=radio]:disabled:checked+label:before,.gogo-load-css [type=radio]:disabled:not(:checked)+label:before{background-color:transparent;border-color:rgba(0,0,0,.26)}.gogo-load-css [type=radio]:disabled+label{color:rgba(0,0,0,.26)}.gogo-load-css [type=radio]:disabled:not(:checked)+label:before{border-color:rgba(0,0,0,.26)}.gogo-load-css [type=radio]:disabled:checked+label:after{background-color:rgba(0,0,0,.26);border-color:#BDBDBD}.gogo-load-css form p{margin-bottom:10px;text-align:left}.gogo-load-css form p:last-child{margin-bottom:0}.gogo-load-css [type=checkbox]:checked,.gogo-load-css [type=checkbox]:not(:checked){position:absolute;left:-9999px;visibility:hidden}.gogo-load-css [type=checkbox]+label{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.gogo-load-css [type=checkbox]+label:before{content:'';position:absolute;top:0;left:0;width:18px;height:18px;z-index:0;border:2px solid #5a5a5a;border-radius:1px;margin-top:2px;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;-ms-transition:.2s;transition:.2s}.gogo-load-css [type=checkbox]:not(:checked):disabled+label:before{border:none;background-color:rgba(0,0,0,.26)}.gogo-load-css [type=checkbox]:checked+label:before{top:-4px;left:-3px;width:12px;height:22px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #4A7874;border-bottom:2px solid #4A7874;-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}.gogo-load-css [type=checkbox]:checked:disabled+label:before{border-right:2px solid rgba(0,0,0,.26);border-bottom:2px solid rgba(0,0,0,.26)}.gogo-load-css [type=checkbox]:indeterminate+label:before{left:-10px;top:-11px;width:10px;height:22px;border-top:none;border-left:none;border-right:2px solid #4A7874;border-bottom:none;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);-webkit-backface-visibility:hidden;-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}.gogo-load-css [type=checkbox]:indeterminate:disabled+label:before{border-right:2px solid rgba(0,0,0,.26);background-color:transparent}.gogo-load-css [type=checkbox].filled-in+label:after{border-radius:2px}.gogo-load-css [type=checkbox].filled-in+label:after,.gogo-load-css [type=checkbox].filled-in+label:before{content:'';left:0;position:absolute;transition:border .25s,background-color .25s,width .2s .1s,height .2s .1s,top .2s .1s,left .2s .1s;z-index:1}.gogo-load-css [type=checkbox].filled-in:not(:checked)+label:before{width:0;height:0;border:3px solid transparent;left:6px;top:10px;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:20% 40%;transform-origin:100% 100%}.gogo-load-css [type=checkbox].filled-in:not(:checked)+label:after{height:20px;width:20px;background-color:transparent;border:2px solid #5a5a5a;top:0;z-index:0}.gogo-load-css [type=checkbox].filled-in:checked+label:before{top:0;left:1px;width:8px;height:13px;border-top:none;border-left:none;border-right:2px solid #fff;border-bottom:2px solid #fff;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.gogo-load-css [type=checkbox].filled-in:checked+label:after{top:0;width:20px;height:20px;border:2px solid #4A7874;background-color:#4A7874;z-index:0}.gogo-load-css [type=checkbox].filled-in:disabled:not(:checked)+label:before{background-color:transparent;border:2px solid transparent}.gogo-load-css [type=checkbox].filled-in:disabled:not(:checked)+label:after{border-color:transparent;background-color:#BDBDBD}.gogo-load-css [type=checkbox].filled-in:disabled:checked+label:before{background-color:transparent}.gogo-load-css [type=checkbox].filled-in:disabled:checked+label:after{background-color:#BDBDBD;border-color:#BDBDBD}.gogo-load-css .switch,.gogo-load-css .switch *{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;-ms-user-select:none}.gogo-load-css .switch label{cursor:pointer}.gogo-load-css .switch label input[type=checkbox]{opacity:0;width:0;height:0}.gogo-load-css .switch label input[type=checkbox]:checked+.lever{background-color:#a1a1a1}.gogo-load-css .switch label input[type=checkbox]:checked+.lever:after{background-color:#4A7874}.gogo-load-css .switch label .lever{content:"";display:inline-block;position:relative;width:40px;height:15px;background-color:#818181;border-radius:15px;transition:background .3s ease;vertical-align:middle;margin:0 16px}.gogo-load-css .switch label .lever:after{content:"";position:absolute;display:inline-block;width:21px;height:21px;background-color:#F1F1F1;border-radius:21px;box-shadow:0 1px 3px 1px rgba(0,0,0,.4);left:-5px;top:-3px;transition:left .3s ease,background .3s ease,box-shadow .1s ease}.gogo-load-css input[type=checkbox]:checked:not(:disabled)~.lever:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,.4),0 0 0 15px rgba(74,120,116,.1)}.gogo-load-css input[type=checkbox]:not(:disabled)~.lever:active:after{box-shadow:0 1px 3px 1px rgba(0,0,0,.4),0 0 0 15px rgba(0,0,0,.08)}.gogo-load-css .switch label input[type=checkbox]:checked+.lever:after{left:24px}.gogo-load-css .switch input[type=checkbox][disabled]+.lever{cursor:default}.gogo-load-css .switch label input[type=checkbox][disabled]+.lever:after,.gogo-load-css .switch label input[type=checkbox][disabled]:checked+.lever:after{background-color:#BDBDBD}.gogo-load-css .select-label{position:absolute}.gogo-load-css .select-wrapper{position:relative}.gogo-load-css .select-wrapper input.select-dropdown{position:relative;cursor:pointer;background-color:transparent;border:none;border-bottom:1px solid #3D3D3D;outline:0;height:3rem;line-height:3rem;width:100%;font-size:1rem;margin:0 0 15px;padding:0;display:block}.gogo-load-css .select-wrapper span.caret{color:initial;position:absolute;right:0;top:16px;font-size:10px}.gogo-load-css .select-wrapper span.caret.disabled{color:rgba(0,0,0,.26)}.gogo-load-css .select-wrapper+label{position:absolute;top:-14px;font-size:.8rem}.gogo-load-css select{display:none}.gogo-load-css select.browser-default{display:block}.gogo-load-css select:disabled{color:rgba(0,0,0,.3)}.gogo-load-css .select-wrapper input.select-dropdown:disabled{color:rgba(0,0,0,.3);cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;border-bottom:1px solid rgba(0,0,0,.3)}.gogo-load-css .file-field span,.gogo-load-css .leaflet-interactive,.gogo-load-css input[type=range],.gogo-load-css input[type=range]+.thumb{cursor:pointer}.gogo-load-css .select-wrapper i{color:rgba(0,0,0,.3)}.gogo-load-css .select-dropdown li.disabled{color:rgba(0,0,0,.3);background-color:transparent}.gogo-load-css .file-field{position:relative}.gogo-load-css .file-field .file-path-wrapper{overflow:hidden;padding-left:10px}.gogo-load-css .file-field input.file-path{width:100%}.gogo-load-css .file-field .btn,.gogo-load-css .file-field .btn-large{float:left;height:3rem;line-height:3rem}.gogo-load-css .file-field input[type=file]{position:absolute;top:0;right:0;left:0;bottom:0;width:100%;margin:0;padding:0;font-size:20px;cursor:pointer;opacity:0;filter:alpha(opacity=0)}.gogo-load-css .range-field{position:relative}.gogo-load-css input[type=range]{position:relative;background-color:transparent;outline:0;width:100%;margin:15px 0;padding:0}.gogo-load-css input[type=range]+.thumb{position:absolute;border:none;height:0;width:0;border-radius:50%;background-color:#4A7874;top:10px;margin-left:-6px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-ms-transform-origin:50% 50%;-o-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.gogo-load-css input[type=range]+.thumb .value{display:block;width:30px;text-align:center;color:#4A7874;font-size:0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.gogo-load-css input[type=range]+.thumb.active{border-radius:50% 50% 50% 0}.gogo-load-css input[type=range]+.thumb.active .value{color:#fff;margin-left:-1px;margin-top:8px;font-size:10px}.gogo-load-css input[type=range]:focus{outline:0}.gogo-load-css input[type=range]::-webkit-slider-runnable-track{height:3px;background:#c2c0c2;border:none}.gogo-load-css input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:14px;width:14px;border-radius:50%;background-color:#4A7874;transform-origin:50% 50%;margin:-5px 0 0;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;-ms-transition:.3s;transition:.3s}.gogo-load-css input[type=range]:focus::-webkit-slider-runnable-track{background:#ccc}.gogo-load-css input[type=range]{-webkit-appearance:none;border:1px solid #fff}.gogo-load-css input[type=range]::-moz-range-track{height:3px;background:#ddd;border:none}.gogo-load-css input[type=range]::-moz-range-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#4A7874;margin-top:-5px}.gogo-load-css input[type=range]:-moz-focusring{outline:#fff solid 1px;outline-offset:-1px}.gogo-load-css input[type=range]:focus::-moz-range-track{background:#ccc}.gogo-load-css input[type=range]::-ms-track{height:3px;background:0 0;border-color:transparent;border-width:6px 0;color:transparent}.gogo-load-css input[type=range]::-ms-fill-lower{background:#777}.gogo-load-css input[type=range]::-ms-fill-upper{background:#ddd}.gogo-load-css input[type=range]::-ms-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#4A7874}.gogo-load-css input[type=range]:focus::-ms-fill-lower{background:#888}.gogo-load-css input[type=range]:focus::-ms-fill-upper{background:#ccc}.gogo-load-css select{background-color:rgba(255,255,255,.9);width:100%;padding:5px;border:1px solid #f2f2f2;border-radius:2px;height:3rem}.gogo-load-css .preloader-wrapper{display:inline-block;position:relative;width:48px;height:48px}.gogo-load-css .preloader-wrapper.small{width:36px;height:36px}.gogo-load-css .preloader-wrapper.big{width:64px;height:64px}.gogo-load-css .preloader-wrapper.active{-webkit-animation:container-rotate 1568ms linear infinite;animation:container-rotate 1568ms linear infinite}@-webkit-keyframes container-rotate{to{-webkit-transform:rotate(360deg)}}@keyframes container-rotate{to{transform:rotate(360deg)}}.gogo-load-css .spinner-layer{position:absolute;width:100%;height:100%;opacity:0;border-color:#4A7874}.gogo-load-css .spinner-blue,.gogo-load-css .spinner-blue-only{border-color:#4285f4}.gogo-load-css .spinner-red,.gogo-load-css .spinner-red-only{border-color:#db4437}.gogo-load-css .spinner-yellow,.gogo-load-css .spinner-yellow-only{border-color:#f4b400}.gogo-load-css .spinner-green,.gogo-load-css .spinner-green-only{border-color:#0f9d58}.gogo-load-css .active .spinner-layer.spinner-blue{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,blue-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,blue-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.gogo-load-css .active .spinner-layer.spinner-red{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,red-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,red-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.gogo-load-css .active .spinner-layer.spinner-yellow{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.gogo-load-css .active .spinner-layer.spinner-green{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,green-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both,green-fade-in-out 5332ms cubic-bezier(.4,0,.2,1) infinite both}.gogo-load-css .active .spinner-layer,.gogo-load-css .active .spinner-layer.spinner-blue-only,.gogo-load-css .active .spinner-layer.spinner-green-only,.gogo-load-css .active .spinner-layer.spinner-red-only,.gogo-load-css .active .spinner-layer.spinner-yellow-only{opacity:1;-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(.4,0,.2,1) infinite both}@-webkit-keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg)}}@keyframes fill-unfill-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}to{transform:rotate(1080deg)}}@-webkit-keyframes blue-fade-in-out{100%,25%,90%,from{opacity:1}26%,89%{opacity:0}}@keyframes blue-fade-in-out{100%,25%,90%,from{opacity:1}26%,89%{opacity:0}}@-webkit-keyframes red-fade-in-out{15%,51%,from{opacity:0}25%,50%{opacity:1}}@keyframes red-fade-in-out{15%,51%,from{opacity:0}25%,50%{opacity:1}}@-webkit-keyframes yellow-fade-in-out{40%,76%,from{opacity:0}50%,75%{opacity:1}}@keyframes yellow-fade-in-out{40%,76%,from{opacity:0}50%,75%{opacity:1}}@-webkit-keyframes green-fade-in-out{100%,65%,from{opacity:0}75%,90%{opacity:1}}@keyframes green-fade-in-out{100%,65%,from{opacity:0}75%,90%{opacity:1}}.gogo-load-css .gap-patch{position:absolute;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.gogo-load-css .gap-patch .circle{width:1000%;left:-450%}.gogo-load-css .circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.gogo-load-css .circle-clipper .circle{width:200%;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent!important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0}.gogo-load-css .circle-clipper.left .circle{left:0;border-right-color:transparent!important;-webkit-transform:rotate(129deg);transform:rotate(129deg)}.gogo-load-css .circle-clipper.right .circle{left:-100%;border-left-color:transparent!important;-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.gogo-load-css .active .circle-clipper.left .circle{-webkit-animation:left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both;animation:left-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}.gogo-load-css .active .circle-clipper.right .circle{-webkit-animation:right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both;animation:right-spin 1333ms cubic-bezier(.4,0,.2,1) infinite both}@-webkit-keyframes left-spin{from,to{-webkit-transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg)}}@keyframes left-spin{from,to{transform:rotate(130deg)}50%{transform:rotate(-5deg)}}@-webkit-keyframes right-spin{from,to{-webkit-transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg)}}@keyframes right-spin{from,to{transform:rotate(-130deg)}50%{transform:rotate(5deg)}}.gogo-load-css #spinnerContainer.cooldown{-webkit-animation:container-rotate 1568ms linear infinite,fade-out .4s cubic-bezier(.4,0,.2,1);animation:container-rotate 1568ms linear infinite,fade-out .4s cubic-bezier(.4,0,.2,1)}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}.gogo-load-css .leaflet-image-layer,.gogo-load-css .leaflet-layer,.gogo-load-css .leaflet-marker-icon,.gogo-load-css .leaflet-marker-shadow,.gogo-load-css .leaflet-pane,.gogo-load-css .leaflet-pane>canvas,.gogo-load-css .leaflet-pane>svg,.gogo-load-css .leaflet-tile,.gogo-load-css .leaflet-tile-container,.gogo-load-css .leaflet-zoom-box{position:absolute;left:0;top:0}.gogo-load-css .leaflet-container{overflow:hidden;background:#ddd;outline:0;font:12px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif}.gogo-load-css .leaflet-marker-icon,.gogo-load-css .leaflet-marker-shadow,.gogo-load-css .leaflet-tile{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.gogo-load-css .leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.gogo-load-css .leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.gogo-load-css .leaflet-marker-icon,.gogo-load-css .leaflet-marker-shadow{display:block}.gogo-load-css .leaflet-container .leaflet-marker-pane img,.gogo-load-css .leaflet-container .leaflet-overlay-pane svg,.gogo-load-css .leaflet-container .leaflet-shadow-pane img,.gogo-load-css .leaflet-container .leaflet-tile-pane img,.gogo-load-css .leaflet-container img.leaflet-image-layer{max-width:none!important}.gogo-load-css .leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.gogo-load-css .leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom}.gogo-load-css .leaflet-container.leaflet-touch-drag.leaflet-touch-drag{-ms-touch-action:none;touch-action:none}.gogo-load-css .leaflet-tile{filter:inherit;visibility:hidden}.gogo-load-css .leaflet-tile-loaded{visibility:inherit}.gogo-load-css .leaflet-zoom-box{width:0;height:0;-moz-box-sizing:border-box;box-sizing:border-box;z-index:800}.gogo-load-css .leaflet-overlay-pane svg{-moz-user-select:none}.gogo-load-css .leaflet-pane{z-index:400}.gogo-load-css .leaflet-tile-pane{z-index:200}.gogo-load-css .leaflet-overlay-pane{z-index:400}.gogo-load-css .leaflet-shadow-pane{z-index:500}.gogo-load-css .leaflet-marker-pane{z-index:600}.gogo-load-css .leaflet-tooltip-pane{z-index:650}.gogo-load-css .leaflet-popup-pane{z-index:700}.gogo-load-css .leaflet-map-pane canvas{z-index:100}.gogo-load-css .leaflet-map-pane svg{z-index:200}.gogo-load-css .leaflet-vml-shape{width:1px;height:1px}.gogo-load-css .lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.gogo-load-css .leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto;float:left;clear:both}.gogo-load-css .leaflet-bottom,.gogo-load-css .leaflet-top{position:absolute;z-index:1000;pointer-events:none}.gogo-load-css .leaflet-top{top:0}.gogo-load-css .leaflet-right{right:0}.gogo-load-css .leaflet-bottom{bottom:0}.gogo-load-css .leaflet-left{left:0}.gogo-load-css .leaflet-right .leaflet-control{float:right;margin-right:10px}.gogo-load-css .leaflet-top .leaflet-control{margin-top:10px}.gogo-load-css .leaflet-bottom .leaflet-control{margin-bottom:10px}.gogo-load-css .leaflet-left .leaflet-control{margin-left:10px}.gogo-load-css .leaflet-fade-anim .leaflet-tile{will-change:opacity}.gogo-load-css .leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-moz-transition:opacity .2s linear;-o-transition:opacity .2s linear;transition:opacity .2s linear}.gogo-load-css .leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.gogo-load-css .leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.gogo-load-css .leaflet-zoom-anim .leaflet-zoom-animated{will-change:transform;-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1);-o-transition:-o-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1)}.gogo-load-css .leaflet-pan-anim .leaflet-tile,.gogo-load-css .leaflet-zoom-anim .leaflet-tile{-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.gogo-load-css .leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.gogo-load-css .leaflet-grab{cursor:-webkit-grab;cursor:-moz-grab}.gogo-load-css .leaflet-crosshair,.gogo-load-css .leaflet-crosshair .leaflet-interactive{cursor:crosshair}.gogo-load-css .leaflet-control,.gogo-load-css .leaflet-popup-pane{cursor:auto}.gogo-load-css .leaflet-dragging .leaflet-grab,.gogo-load-css .leaflet-dragging .leaflet-grab .leaflet-interactive,.gogo-load-css .leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing}.gogo-load-css .leaflet-image-layer,.gogo-load-css .leaflet-marker-icon,.gogo-load-css .leaflet-marker-shadow,.gogo-load-css .leaflet-pane>svg path,.gogo-load-css .leaflet-tile-container{pointer-events:none}.gogo-load-css .leaflet-image-layer.leaflet-interactive,.gogo-load-css .leaflet-marker-icon.leaflet-interactive,.gogo-load-css .leaflet-pane>svg path.leaflet-interactive{pointer-events:visiblePainted;pointer-events:auto}.gogo-load-css .leaflet-container a{color:#0078A8}.gogo-load-css .leaflet-container a.leaflet-active{outline:orange solid 2px}.gogo-load-css .leaflet-zoom-box{border:2px dotted #38f;background:rgba(255,255,255,.5)}.gogo-load-css .leaflet-bar{box-shadow:0 1px 5px rgba(0,0,0,.65);border-radius:4px}.gogo-load-css .leaflet-bar a,.gogo-load-css .leaflet-bar a:hover{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.gogo-load-css .leaflet-bar a,.gogo-load-css .leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.gogo-load-css .leaflet-bar a:hover{background-color:#f4f4f4}.gogo-load-css .leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.gogo-load-css .leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.gogo-load-css .leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.gogo-load-css .leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.gogo-load-css .leaflet-control-zoom-in,.gogo-load-css .leaflet-control-zoom-out{font:700 18px 'Lucida Console',Monaco,monospace;text-indent:1px}.gogo-load-css .leaflet-control-zoom-out{font-size:20px}.gogo-load-css .leaflet-touch .leaflet-control-zoom-in{font-size:22px}.gogo-load-css .leaflet-touch .leaflet-control-zoom-out{font-size:24px}.gogo-load-css .leaflet-control-layers{box-shadow:0 1px 5px rgba(0,0,0,.4);background:#fff;border-radius:5px}.gogo-load-css .leaflet-control-layers-toggle{background-image:url(images/layers.png);width:36px;height:36px}.gogo-load-css .leaflet-retina .leaflet-control-layers-toggle{background-image:url(images/layers-2x.png);background-size:26px 26px}.gogo-load-css .leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.gogo-load-css .leaflet-control-layers .leaflet-control-layers-list,.gogo-load-css .leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.gogo-load-css .leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.gogo-load-css .leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.gogo-load-css .leaflet-control-layers-scrollbar{overflow-y:scroll;padding-right:5px}.gogo-load-css .leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.gogo-load-css .leaflet-control-layers label{display:block}.gogo-load-css .gogo-theme-default.gogocarto-container .element-item .collapsible-header-more .inline-option-values .icon,.gogo-load-css .gogo-theme-default.gogocarto-container .show-directory-menu-button .arrow-right,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .checkbox-wrapper{display:none}.gogo-load-css .leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.gogo-load-css .leaflet-default-icon-path{background-image:url(images/marker-icon.png)}.gogo-load-css .leaflet-container .leaflet-control-attribution{background:#fff;background:rgba(255,255,255,.7);margin:0}.gogo-load-css .leaflet-control-attribution,.gogo-load-css .leaflet-control-scale-line{padding:0 5px;color:#333}.gogo-load-css .leaflet-control-attribution a{text-decoration:none}.gogo-load-css .leaflet-control-attribution a:hover{text-decoration:underline}.gogo-load-css .leaflet-container .leaflet-control-attribution,.gogo-load-css .leaflet-container .leaflet-control-scale{font-size:11px}.gogo-load-css .leaflet-left .leaflet-control-scale{margin-left:5px}.gogo-load-css .leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.gogo-load-css .leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;font-size:11px;white-space:nowrap;overflow:hidden;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;background:rgba(255,255,255,.5)}.gogo-load-css .leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.gogo-load-css .leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.gogo-load-css .leaflet-touch .leaflet-bar,.gogo-load-css .leaflet-touch .leaflet-control-attribution,.gogo-load-css .leaflet-touch .leaflet-control-layers{box-shadow:none}.gogo-load-css .leaflet-touch .leaflet-bar,.gogo-load-css .leaflet-touch .leaflet-control-layers{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.gogo-load-css .leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.gogo-load-css .leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.gogo-load-css .leaflet-popup-content{margin:13px 19px;line-height:1.4}.gogo-load-css .leaflet-popup-content p{margin:18px 0}.gogo-load-css .leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-left:-20px;overflow:hidden;pointer-events:none}.gogo-load-css .leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.gogo-load-css .leaflet-popup-content-wrapper,.gogo-load-css .leaflet-popup-tip{background:#fff;color:#333;box-shadow:0 3px 14px rgba(0,0,0,.4)}.gogo-load-css .leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;padding:4px 4px 0 0;border:none;text-align:center;width:18px;height:14px;font:16px/14px Tahoma,Verdana,sans-serif;color:#c3c3c3;text-decoration:none;font-weight:700;background:0 0}.gogo-load-css .leaflet-container a.leaflet-popup-close-button:hover{color:#999}.gogo-load-css .leaflet-popup-scrolled{overflow:auto;border-bottom:1px solid #ddd;border-top:1px solid #ddd}.gogo-load-css .leaflet-oldie .leaflet-popup-content-wrapper{zoom:1}.gogo-load-css .leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto}.gogo-load-css .leaflet-oldie .leaflet-popup-tip-container{margin-top:-1px}.gogo-load-css .leaflet-oldie .leaflet-control-layers,.gogo-load-css .leaflet-oldie .leaflet-control-zoom,.gogo-load-css .leaflet-oldie .leaflet-popup-content-wrapper,.gogo-load-css .leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.gogo-load-css .leaflet-div-icon{background:#fff;border:1px solid #666}.gogo-load-css .leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,.4)}.gogo-load-css .gogo-theme-default.gogocarto-container .element-item .collapsible-body .category-wrapper .option-value,.gogo-load-css .gogo-theme-default.gogocarto-container .element-item .collapsible-header-more .inline-option-values .option-value{color:inherit}.gogo-load-css .leaflet-tooltip.leaflet-clickable{cursor:pointer;pointer-events:auto}.gogo-load-css .leaflet-tooltip-bottom:before,.gogo-load-css .leaflet-tooltip-left:before,.gogo-load-css .leaflet-tooltip-right:before,.gogo-load-css .leaflet-tooltip-top:before{position:absolute;pointer-events:none;border:6px solid transparent;background:0 0;content:""}.gogo-load-css .leaflet-tooltip-bottom{margin-top:6px}.gogo-load-css .leaflet-tooltip-top{margin-top:-6px}.gogo-load-css .leaflet-tooltip-bottom:before,.gogo-load-css .leaflet-tooltip-top:before{left:50%;margin-left:-6px}.gogo-load-css .leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.gogo-load-css .leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.gogo-load-css .leaflet-tooltip-left{margin-left:-6px}.gogo-load-css .leaflet-tooltip-right{margin-left:6px}.gogo-load-css .leaflet-tooltip-left:before,.gogo-load-css .leaflet-tooltip-right:before{top:50%;margin-top:-6px}.gogo-load-css .leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.gogo-load-css .leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}.gogo-load-css .leaflet-cluster-anim .leaflet-marker-icon,.gogo-load-css .leaflet-cluster-anim .leaflet-marker-shadow{-webkit-transition:-webkit-transform .3s ease-out,opacity .3s ease-in;-moz-transition:-moz-transform .3s ease-out,opacity .3s ease-in;-o-transition:-o-transform .3s ease-out,opacity .3s ease-in;transition:transform .3s ease-out,opacity .3s ease-in}.gogo-load-css .leaflet-cluster-spider-leg{-webkit-transition:-webkit-stroke-dashoffset .3s ease-out,-webkit-stroke-opacity .3s ease-in;-moz-transition:-moz-stroke-dashoffset .3s ease-out,-moz-stroke-opacity .3s ease-in;-o-transition:-o-stroke-dashoffset .3s ease-out,-o-stroke-opacity .3s ease-in;transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in}.gogo-load-css .gogo-theme-default.gogocarto-container .moreIconContainer .moreIconWrapper{background-color:#DADAD9}.gogo-load-css .gogo-theme-default.gogocarto-container .element-item .collapsible-header-more .inline-option-values .inline-option-value:not(:last-child):after{content:",";margin-right:5px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container{font-size:14px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .top-image-container{height:90px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .shadow-bottom{border-top:none;width:calc(100% - 23px)}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header{background-color:#175259}@media (min-width:850px){.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header{width:calc(100% + 23px);border-radius:0 8px 8px 0}}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.large-screen .arrow-left{border:8px solid;border-color:transparent #f79900 transparent transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container{height:4rem;padding-left:.5rem;padding-right:1.4rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-icon{font-size:1.1rem;color:#fff!important;height:2.5rem;line-height:2.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-icon:before{line-height:2.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-icon.search-bar-icon{left:2rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-icon.search-geolocalize{right:2.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-bar{background-color:#3bad78;border-radius:0;height:2.5rem;padding:0 3rem;width:95%}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-bar::-webkit-input-placeholder{color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-bar::-moz-placeholder{color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-bar:-ms-input-placeholder{color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-with-options-container .search-bar-container .search-bar:-moz-placeholder{color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-options{padding-left:14px;padding-right:2rem;padding-bottom:1.2rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-options .search-action-btn{color:#175259}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories{border-left:none;background-color:#f3f6f4}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content{background-color:transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content ul{padding-right:10px;padding-left:5px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item{background-color:#fff;margin-bottom:3px;padding-left:0;line-height:2.5rem;height:2.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item.expanded{margin-bottom:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item.disabled{color:#bcbcbc}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item.disabled .icon{color:#bcbcbc!important;background-color:transparent;opacity:1}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .option-name{font-weight:500;font-size:13px;padding-left:.6rem;-webkit-transition:color .1s;-moz-transition:color .1s;-o-transition:color .1s;-ms-transition:color .1s;transition:color .1s}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .arrow-after{position:absolute;right:19%;top:1.1rem;border-radius:1px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .option-name:hover .arrow-after{margin-right:-1px;margin-top:-1px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item.expanded .option-name .arrow-after,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item.expanded .option-name:hover .arrow-after{margin-bottom:-3px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .icon{padding-top:.7rem;font-size:17px;height:3rem;width:2.5rem;margin-right:0;-webkit-transition:color .3s;-moz-transition:color .3s;-o-transition:color .3s;-ms-transition:color .3s;transition:color .3s}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .icon.fa.fa-link,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item .icon.fa.fa-recycle{padding-top:.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item:not(.expanded) .option-name .arrow-after{border-color:#3bad78 transparent transparent;opacity:1}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategorie-option-item.expanded .option-name .arrow-after{border-color:transparent transparent #3bad78;opacity:1;top:.9rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategory-item .name-wrapper{margin-left:3rem;margin-right:0;font-weight:900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategory-item .checkbox-wrapper{left:0;right:initial}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategory-item .checkbox-wrapper [type=checkbox].filled-in+label:after{background-color:transparent;border:none;-webkit-transition:none;-moz-transition:none;-o-transition:none;-ms-transition:none;transition:none}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategory-item .checkbox-wrapper [type=checkbox].filled-in+label:before{top:7px;width:9px;height:15px;border-right:3px solid #3bad78;border-bottom:3px solid #3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .subcategory-item .checkbox-wrapper [type=checkbox].filled-in:not(:checked)+label:before{border-right:3px solid #bcbcbc;border-bottom:3px solid #bcbcbc;-webkit-transition:none;-moz-transition:none;-o-transition:none;-ms-transition:none;transition:none}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .category-wrapper .subcategories-wrapper:not(.no-withdrawal){margin-left:0!important;margin-bottom:6px;border:none}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item{margin-bottom:0;line-height:2.7rem;height:2.7rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item .option-name{font-size:.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item .icon{font-size:.85rem;padding-top:.95rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item.disabled .icon{color:#bcbcbc!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:first-child .name-wrapper{color:#3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:first-child .subcategorie-option-item.checked .icon:not(.subIcon){color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .name-wrapper,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item.checked .icon{color:#f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:first-child .subcategorie-option-item .subIcon,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:first-child .subcategorie-option-item:not(.checked) .icon{background-color:transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child [type=checkbox].filled-in:checked+label:before{top:7px;width:9px;height:15px;border-right:3px solid #f79900;border-bottom:3px solid #f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item .icon{color:#175259;background-color:transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item:hover .subcategorie-option-checkbox+label:before{color:#f79900;border-color:#f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item:not(.expanded) .option-name .arrow-after{border-color:#f79900 transparent transparent;opacity:1}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item:not(.expanded) .option-name:hover .arrow-after{border-color:#f79900 transparent transparent!important;opacity:1}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item.expanded .option-name .arrow-after{border-color:transparent transparent #f79900;opacity:1;top:1rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #main-option-all>.category-wrapper:last-child .subcategorie-option-item.expanded .option-name:hover .arrow-after{border-color:transparent transparent #f79900!important;opacity:1}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #filter-favorite .icon{padding-top:3px;padding-left:10px;background-color:transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #filter-favorite .icon:before,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #filter-favorite .option-name{color:#bcbcbc}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #filter-favorite.checked .icon:before,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content #filter-favorite.checked .option-name{color:#f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu #directory-menu-main-container .sub-categories .sub-categories-content .show-only-title{color:#3bad78;padding-left:0;margin-bottom:0;border-top:none;margin-top:0;padding-top:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .iconInsideMarker-wrapper{background-color:transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .iconInsideMarker-wrapper .iconInsideMarker{color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-name{color:#f1f1f1;opacity:1}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .moreIconContainer .moreIconWrapper{font-size:14px;line-height:0;padding-left:1px;box-shadow:1px 1px 4px 1px #989898}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster div{font-size:15px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster.marker-cluster-small div{background-color:#f8ab00;width:34px;height:34px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster.marker-cluster-small div span{line-height:34px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster.marker-cluster-medium div{background-color:#f78b16;width:38px;height:38px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster.marker-cluster-medium div span{line-height:38px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster.marker-cluster-large div{background-color:#f5701e;width:44px;height:44px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-cluster.marker-cluster-large div span{line-height:44px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-header{background-color:#175259}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-header .name{font-weight:900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-header .collapsible-header-more{line-height:1.3rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-header .element-main-icon{display:none!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-header .collapsible-header-title .gogo-icon-close:before{background-color:#f79900;color:#fff;border-radius:3px;padding:2px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .menu-element-item-text{display:inline-block!important;text-transform:uppercase;line-height:3rem;margin-left:10px;font-size:12px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper .option-value .icon,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .info-bar-divider{display:none}@media (max-width:460px){.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .menu-element-item{margin:0 .5rem!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .menu-element-item .menu-element-item-text{font-size:11px;margin-left:5px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .menu-element-item .menu-icon{font-size:16px}}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body{background-color:#f3f6f4}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .collapsible-body-main-content{background-color:#f3f6f4;padding-left:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .description{line-height:1.3rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .section{background-color:#fff;margin-top:1rem;padding-left:1rem;margin-right:.4rem;line-height:1.5rem;padding-top:.7rem;padding-bottom:.6rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .section.section-taxonomy{padding:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .section.section-taxonomy h3.category-name{background-color:#f3f6f4;margin-left:0;padding-left:1.5rem;color:#f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .section.section-taxonomy h3.category-name:first-child{color:#3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .section.sectionlongDescription{margin-top:0;background-color:#f3f6f4}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body h3{margin-left:1rem;font-weight:900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper{background-color:#f3f6f4}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .option-value{margin-bottom:3px;border-left:10px solid;padding-left:1rem;background-color:#fff;line-height:2.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .option-value .option-name{color:#175259;line-height:2.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .option-value .icon.fa{margin-right:10px;font-size:.9rem;padding-top:.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .row+.category-wrapper .row:last-child .option-value{padding-bottom:1.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper{border:none;margin-left:0;padding-left:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper .option-value{padding-left:.9rem;margin-top:-8px;height:1.5rem;line-height:1.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper .option-value .option-name{color:inherit;margin-left:4px;line-height:1rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper .option-value .option-name:before{content:"➡";font-size:1.2rem;margin-right:6px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .sectionOpenHours .day:after{content:"➡";font-size:1.2rem;color:#3bad78;float:right}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .sectionOpenHours .openHours{padding-left:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .tags-container{background-color:#f3f6f4;margin-top:0;padding-top:1rem;padding-left:1.5rem;margin-bottom:-10px;text-align:center}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .collapsible-body .tags-container .gogo-tag{background-color:#fff;border-radius:0;padding:4px 14px;color:#3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .menu-element{background-color:#3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .menu-element .menu-element-item{display:inline-block;font-weight:700;color:#e6e6e6}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values{width:calc(100% - 140px);font-weight:400}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value{margin-right:20px;display:inline-block}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .expandLabel,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .inline-option-values,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile #mobile-filters-icon i,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .show-directory-menu-button .text,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .show-directory-menu-button i{display:none}@media only screen and (min-width:601px){.gogo-load-css .gogo-theme-transiscope.gogocarto-container .marker-wrapper.BigSize .iconInsideMarker-wrapper{left:7px!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value .icon{margin-right:5px;font-size:.9rem;padding-top:.6rem;background-color:transparent}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value .option-value{line-height:2rem;font-style:normal;font-weight:400}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value .option-value.same-icon-as-last-item{margin-left:-17px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value .option-value.same-icon-as-last-item:before{content:"+";margin-right:5px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #map-features-buttons{top:140px}}@media only screen and (max-width:600px){.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value{margin-right:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value .option-value,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value:last-child{display:none}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .inline-option-values .inline-option-value .icon{color:#fff;border-radius:50%;font-size:.9rem;padding:10px 9px;margin-right:5px}}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .expandLabel{width:auto;float:right;border:2px solid;color:#3bad78;padding:8px 15px;text-align:center;border-radius:20px;margin-top:-3px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .inline-option-values,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #map-gogo-controls{width:100%}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item .expandLabel:before{margin-right:8px;color:#fff;background-color:#3bad78;border-radius:50%;padding:0 4px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item.active .expandLabel:before{content:"-";padding:0 6px 1px;font-weight:900;font-size:16px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .element-item:not(.active) .expandLabel:before{content:"+"}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header{padding:.5rem 0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-title{padding-bottom:1rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-title .gogo-icon-close{font-size:.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-title .gogo-icon-close:before{background-color:#3bad78;color:#175259}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .name{font-size:1.4rem;line-height:1.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .gogo-icon-close{font-size:1rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .expandLabel.transform-big{background-color:#fff;color:#3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .expandLabel.transform-big:hover{color:#3bad78}@media only screen and (max-width:600px){.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item .expandLabel{margin-right:10px;font-size:13px;font-weight:900;padding:8px 10px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .expandLabel.transform-big{padding:8px 10px}}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #element-info-bar.display-bottom .element-item.active .collapsible-header{padding-bottom:.8rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .feature-button,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom-in,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom-out{color:#175259}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .feature-button:hover,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom-in:hover,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom-out:hover{color:#3bad78;background-color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-layers{margin-right:17px!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .gogo-map-control{text-transform:uppercase;font-weight:700;font-size:12px!important;line-height:22px;padding:5px 15px;background-color:#fff;color:#f79900;border:1px solid #d7d7d7;-webkit-box-shadow:1px 2px 4px 1px rgba(0,0,0,.12);-moz-box-shadow:1px 2px 4px 1px rgba(0,0,0,.12);box-shadow:1px 2px 4px 1px rgba(0,0,0,.12)}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .gogo-map-control .gogo-icon-list{color:inherit}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-zoom.leaflet-bar.leaflet-control{margin-top:60px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .show-as-list-button{position:absolute;right:20px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .show-directory-menu-button{position:absolute;left:-20px;top:80px;background-color:#175259!important;padding:10px 10px 3px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .show-directory-menu-button .arrow-right{margin-bottom:10px;margin-left:4px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .show-directory-menu-button:hover .arrow-right{border-color:transparent transparent transparent #f79900}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header{background-color:#f3f6f4;color:#3bad78;text-align:left}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header .show-as-map-button{height:2rem;line-height:2rem;border-radius:5px;top:15px;padding:0 15px;background-color:#f79900;left:initial!important;text-transform:uppercase;text-decoration:none;font-size:.8rem;font-weight:700;float:right;margin-top:12px;margin-right:-8px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header .show-as-map-button:hover{color:#fff!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header .show-as-map-button .btn-back{font-size:1.2rem;margin-right:10px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header .show-directory-menu-button{top:0;left:-40px;border-radius:0 0 5px;padding-bottom:0;padding-top:6px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}@media (min-width:1500px){.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-list-header .show-directory-menu-button{left:0}}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item:not(.active){-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .collapsible-header{border-bottom:1px solid #f3f6f4}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .collapsible-body{border-bottom:none}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .section{margin-right:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .inline-option-values .inline-option-value:last-child{float:right;margin-right:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .inline-option-values .inline-option-value:last-child .option-value{color:#175259}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element{text-align:right;padding:0 10px 0 0;height:2.3rem!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element .menu-element-item .menu-icon{font-size:18px!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element .menu-element-item .menu-icon:before{line-height:2.3rem!important}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .menu-element .menu-element-item-text{font-size:11px;line-height:2.5rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .location{font-weight:400;color:#3bad78}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .location .postalCode{font-size:14px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .collapsible-body-main-content{padding-bottom:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .collapsible-body .tags-container{margin-bottom:0;padding-bottom:1rem}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .element-item .section-taxonomy .category-wrapper:last-child .option-value:last-child{margin-bottom:0}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-content-list .collapsible.popout>li{margin-bottom:3px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-list-spinner-loader .spinner-layer{border-color:#175259}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile .feature-button{margin-right:0;float:left}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile #mobile-search-icon{border-radius:8px 0 0 8px;margin-right:2px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile #mobile-filters-icon{background-color:#175259;border-radius:0 8px 8px 0;padding-top:5px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile .show-as-list-button,.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile .show-as-map-button{color:#3bad78;border-radius:8px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #gogo-controls-mobile .show-as-map-button{background-color:#f79900!important;color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu .sub-categories .sub-categories-content ul::-webkit-scrollbar-track,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .custom-scroll-bar-light::-webkit-scrollbar-track,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-layers-list::-webkit-scrollbar-track{background-color:transparent;border:none}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu .sub-categories .sub-categories-content ul::-webkit-scrollbar,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .custom-scroll-bar-light::-webkit-scrollbar,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-layers-list::-webkit-scrollbar{width:13px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container #directory-menu .sub-categories .sub-categories-content ul::-webkit-scrollbar-thumb,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .custom-scroll-bar-light::-webkit-scrollbar-thumb,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-control-layers-list::-webkit-scrollbar-thumb{border-radius:0;background-color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .custom-scroll-bar::-webkit-scrollbar-track,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-alt::-webkit-scrollbar-track,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-error::-webkit-scrollbar-track,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-geocoders::-webkit-scrollbar-track{background-color:transparent;border:none}.gogo-load-css .gogocarto-container #directory-list-spinner-loader .spinner-layer,.gogo-load-css .gogocarto-container #directory-spinner-loader .spinner-layer,.gogo-load-css .gogocarto-container #info-bar-spinner-loader .spinner-layer{border-color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .custom-scroll-bar::-webkit-scrollbar,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-alt::-webkit-scrollbar,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-error::-webkit-scrollbar,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-geocoders::-webkit-scrollbar{width:18px}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .custom-scroll-bar::-webkit-scrollbar-thumb,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-alt::-webkit-scrollbar-thumb,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-error::-webkit-scrollbar-thumb,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .leaflet-routing-geocoders::-webkit-scrollbar-thumb{border-radius:0;background-color:#fff}.gogo-load-css .gogo-theme-transiscope.gogocarto-container .btn,.gogo-load-css .gogo-theme-transiscope.gogocarto-container .btn-large{font-weight:700;box-shadow:none;border-radius:none;font-size:.9rem}.gogo-load-css .gogocarto-container{display:flex;-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;height:100%;position:relative;font-size:.95rem}.gogo-load-css .gogocarto-container #directory-spinner-loader,.gogo-load-css .gogocarto-container #info-bar-spinner-loader{position:absolute;margin:auto;top:0;left:0;bottom:0;right:0;z-index:1}.gogo-load-css .gogocarto-container #directory-list-spinner-loader{position:relative;margin-top:40px;z-index:500}.gogo-load-css .gogocarto-container #directory-loading{position:absolute;width:200px;margin:auto;top:0;left:0;right:0;z-index:500;background-color:#f2b523;color:#272626;padding:.2rem 0;text-align:center}.gogo-load-css .gogocarto-container #info-bar-overlay{background-color:rgba(0,0,0,.17);z-index:10;top:0;left:0;bottom:0;right:0;position:absolute}.gogo-load-css .gogocarto-container .leaflet-routing-container,.gogo-load-css .gogocarto-container .leaflet-routing-error{border-radius:0;box-shadow:none;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;background-color:#fff;transition:all .2s ease;box-sizing:border-box}.gogo-load-css .gogocarto-container .leaflet-control-container .leaflet-routing-container-hide{width:32px;height:32px}.gogo-load-css .gogocarto-container .leaflet-routing-container h2{font-size:1.2rem;text-align:center;margin:1.5rem .5rem 1rem;font-weight:600}.gogo-load-css .gogocarto-container .leaflet-routing-container h2 .distance{font-weight:400;color:#5d5d5d;margin-left:5px}.gogo-load-css .gogocarto-container .leaflet-routing-container h3{font-size:.9rem;font-weight:400;text-align:center;margin:.5rem;line-height:1.5rem;padding-bottom:1.5rem;border-bottom:1px solid #888}.gogo-load-css .gogocarto-container .leaflet-routing-collapsible .leaflet-routing-geocoders{margin-top:20px}.gogo-load-css .gogocarto-container .td-leaflet-routing-icon{padding-left:15px;padding-right:5px;vertical-align:top}.gogo-load-css .gogocarto-container .td-leaflet-routing-text{font-size:.9rem;vertical-align:top}.gogo-load-css .gogocarto-container .td-leaflet-routing-distance{font-size:.8rem;color:#777;font-weight:300;vertical-align:top}.gogo-load-css .gogocarto-container .leaflet-routing-alt,.gogo-load-css .gogocarto-container .leaflet-routing-error,.gogo-load-css .gogocarto-container .leaflet-routing-geocoders{height:100%;padding:0;font-size:.95rem;margin:0;border-bottom:1px solid #ccc;overflow-y:auto;transition:all .2s ease}.gogo-load-css .gogocarto-container .leaflet-control-container .leaflet-routing-container-hide .leaflet-routing-alt,.gogo-load-css .gogocarto-container .leaflet-control-container .leaflet-routing-container-hide .leaflet-routing-geocoders{display:none}.gogo-load-css .gogocarto-container .leaflet-bar .leaflet-routing-alt:last-child{border-bottom:none}.gogo-load-css .gogocarto-container .leaflet-routing-alt-minimized{display:none;color:#888;max-height:64px;overflow:hidden;cursor:pointer}.gogo-load-css .gogocarto-container .leaflet-routing-alt tr:hover{background-color:#eee;cursor:pointer}.gogo-load-css .gogocarto-container .leaflet-routing-icon{background-image:url(images/leaflet.routing.icons.png);-webkit-background-size:240px 20px;background-size:240px 20px;background-repeat:no-repeat;margin:0;content:'';display:inline-block;vertical-align:top;width:20px;height:20px}.gogo-load-css .gogocarto-container .leaflet-routing-icon-continue{background-position:0 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-sharp-right{background-position:-20px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-turn-right{background-position:-40px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-bear-right{background-position:-60px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-u-turn{background-position:-80px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-sharp-left{background-position:-100px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-turn-left{background-position:-120px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-bear-left{background-position:-140px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-depart{background-position:-160px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-enter-roundabout{background-position:-180px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-arrive{background-position:-200px 0}.gogo-load-css .gogocarto-container .leaflet-routing-icon-via{background-position:-220px 0}.gogo-load-css .gogocarto-container .leaflet-routing-geocoders div{padding:4px 0}.gogo-load-css .gogocarto-container .leaflet-routing-geocoders input{width:303px;width:calc(100% - 4px);line-height:1.67;border:1px solid #ccc}.gogo-load-css .gogocarto-container .leaflet-routing-geocoders button{font:700 18px 'Lucida Console',Monaco,monospace;border:1px solid #ccc;border-radius:4px;background-color:#fff;margin:0 3px 0 0;float:right;cursor:pointer;transition:background-color .2s ease}.gogo-load-css .gogocarto-container .leaflet-routing-add-waypoint:after{content:'+'}.gogo-load-css .gogocarto-container .leaflet-routing-reverse-waypoints:after{font-weight:400;content:'\21c5'}.gogo-load-css .gogocarto-container .leaflet-routing-geocoders button:hover{background-color:#eee}.gogo-load-css .gogocarto-container .leaflet-routing-geocoder,.gogo-load-css .gogocarto-container .leaflet-routing-geocoders input,.gogo-load-css .gogocarto-container .leaflet-routing-remove-waypoint{position:relative}.gogo-load-css .gogocarto-container .leaflet-routing-geocoder-result{font:12px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif;position:absolute;max-height:0;overflow:hidden;transition:all .5s ease;z-index:1000}.gogo-load-css .gogocarto-container .leaflet-routing-geocoder-result table{width:100%;border:1px solid #ccc;border-radius:0 0 4px 4px;background-color:#fff;cursor:pointer}.gogo-load-css .gogocarto-container .leaflet-routing-geocoder-result-open{max-height:800px}.gogo-load-css .gogocarto-container .leaflet-routing-geocoder-result tr:hover,.gogo-load-css .gogocarto-container .leaflet-routing-geocoder-selected{background-color:#eee}.gogo-load-css .gogocarto-container .leaflet-routing-geocoder-no-results{font-style:italic;color:#888}.gogo-load-css .gogocarto-container .leaflet-routing-remove-waypoint{background-color:transparent;display:inline-block;vertical-align:middle;cursor:pointer}.gogo-load-css .gogocarto-container .leaflet-routing-remove-waypoint:after{position:absolute;display:block;width:15px;height:1px;z-index:1;right:1px;top:4px;bottom:0;margin:-16px auto auto;padding:2px 4px 16px 2px;font-size:18px;font-weight:700;content:"\00d7";text-align:center;cursor:pointer;color:#ccc;background:#fff;line-height:1}.gogo-load-css .gogocarto-container .leaflet-routing-remove-waypoint:hover{color:#000}.gogo-load-css .gogocarto-container .leaflet-routing-instruction-distance{width:4rem}.gogo-load-css .gogocarto-container .leaflet-routing-collapse-btn{display:none;position:absolute;top:0;right:6px;font-size:24px;color:#ccc;font-weight:700}.gogo-load-css .gogocarto-container #filter-moderation,.gogo-load-css .gogocarto-container #filter-moderation .moderation-checkbox+label:before{color:#c53f36}.gogo-load-css .gogocarto-container .leaflet-routing-container-hide .leaflet-routing-collapse-btn{position:relative;left:4px;top:4px;display:block;width:26px;height:23px;background-image:url(routing-icon.png)}.gogo-load-css .gogocarto-container .leaflet-top .leaflet-routing-container.leaflet-routing-container-hide{margin-top:10px!important}.gogo-load-css .gogocarto-container .leaflet-right .leaflet-routing-container.leaflet-routing-container-hide{margin-right:10px!important}.gogo-load-css .gogocarto-container .leaflet-bottom .leaflet-routing-container.leaflet-routing-container-hide{margin-bottom:10px!important}.gogo-load-css .gogocarto-container .leaflet-left .leaflet-routing-container.leaflet-routing-container-hide{margin-left:10px!important}@media only screen and (max-width:640px){.gogo-load-css .gogocarto-container .leaflet-routing-container{margin:0!important;padding:0!important;width:100%;height:100%}}.gogo-load-css .gogocarto-container #filter-moderation:hover{background-color:#fff}.gogo-load-css .gogocarto-container #filter-moderation .moderation-checkbox:not(:checked)+label:before{background-color:transparent;border-color:#c53f36}.gogo-load-css .gogocarto-container #filter-pending,.gogo-load-css .gogocarto-container #filter-pending .pending-checkbox+label:before{color:#565656}.gogo-load-css .gogocarto-container #filter-pending:hover{background-color:#fff}.gogo-load-css .gogocarto-container #filter-pending .pending-checkbox:not(:checked)+label:before{background-color:transparent;border-color:#565656}.gogo-load-css .gogocarto-container #filter-favorite{color:#cc8901}.gogo-load-css .gogocarto-container #filter-favorite .gogo-icon-star-full{color:#fff;font-size:18px}.gogo-load-css .gogocarto-container #filter-favorite .gogo-icon-star-full:before{padding:2px 2px 3px;border:none;color:#cc8901;background-color:transparent}.gogo-load-css .gogocarto-container #filter-favorite:hover{background-color:#fff}.gogo-load-css .gogocarto-container #filter-favorite .favorite-checkbox:not(:checked)+label:before{background-color:transparent;border-color:#cc8901}.gogo-load-css .gogocarto-container #filter-favorite .favorite-checkbox+label:before{color:#cc8901}.gogo-load-css .gogocarto-container .sub-categories-content.no-top-divider>ul>.main-option-subcategories-container>.category-wrapper>.subcategory-item{border-top:none!important;margin-top:0!important}.gogo-load-css .gogocarto-container .category-wrapper{margin-top:.5rem}.gogo-load-css .gogocarto-container .subcategory-item{position:relative;line-height:3rem;padding-top:0;padding-left:.8rem;font-weight:700;font-size:90%;text-transform:uppercase}.gogo-load-css .gogocarto-container .subcategory-item.top-separator{border-top:2px dashed #eee;margin-top:1rem;padding-top:.5rem}.gogo-load-css .gogocarto-container .subcategory-item .name-wrapper{margin-right:3rem;height:3rem;overflow:hidden}.gogo-load-css .gogocarto-container .subcategory-item .name-wrapper .arrow-after{display:inline-block;margin-left:1rem;margin-bottom:1px;border:5px solid;border-radius:4px}.gogo-load-css .gogocarto-container .subcategory-item .name-wrapper:hover{cursor:pointer}.gogo-load-css .gogocarto-container .subcategory-item:not(.expanded) .name-wrapper .arrow-after{margin-bottom:-3px!important}.gogo-load-css .gogocarto-container .subcategory-item.unexpandable .name-wrapper:hover{cursor:default;color:inherit}.gogo-load-css .gogocarto-container .subcategory-item .checkbox-wrapper{width:3rem;position:absolute;right:0;top:2px;bottom:0}.gogo-load-css .gogocarto-container .subcategory-item .checkbox-wrapper:hover{cursor:pointer}.gogo-load-css .gogocarto-container .subcategory-item .checkbox-wrapper .checkbox-container{position:absolute;top:2px;right:0}.gogo-load-css .gogocarto-container .subcategory-item .checkbox-wrapper .checkbox-container .subcategorie-checkbox+label:after{top:9px!important;width:17px;height:17px;border:2px solid;-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}.gogo-load-css .gogocarto-container .subcategory-item .checkbox-wrapper .checkbox-container .subcategorie-checkbox+label:before{top:9px;left:1px;width:6px;height:11px}.gogo-load-css .gogocarto-container .subcategory-item .checkbox-wrapper .checkbox-container .subcategorie-checkbox:not(:checked)+label:after{background-color:transparent}.gogo-load-css .gogocarto-container .subcategorie-option-item{position:relative;margin-bottom:0;line-height:2.8rem;padding:0 0 0 .8rem;height:2.8rem;overflow:hidden;text-overflow:ellipsis}.gogo-load-css .gogocarto-container .subcategorie-option-item:not(.expanded) .option-name:hover .arrow-after{margin-bottom:-5px}.gogo-load-css .gogocarto-container .subcategorie-option-item:not(.expanded) .option-name .arrow-after{margin-bottom:-4px}.gogo-load-css .gogocarto-container .subcategorie-option-item .gogo-icon-name-wrapper{margin-right:3rem}.gogo-load-css .gogocarto-container .subcategorie-option-item .gogo-icon-name-wrapper .option-name{position:absolute;width:100%}.gogo-load-css .gogocarto-container .subcategorie-option-item .gogo-icon-name-wrapper .option-name:hover .arrow-after{border:6px solid;margin-bottom:1px}.gogo-load-css .gogocarto-container .subcategorie-option-item .arrow-after{display:inline-block;margin-left:1rem;border:5px solid;margin-bottom:1px;border-radius:4px}.gogo-load-css .gogocarto-container .subcategorie-option-item .icon{font-size:1.3rem}.gogo-load-css .gogocarto-container .subcategorie-option-item .icon.fa{font-size:1.2rem}.gogo-load-css .gogocarto-container .subcategorie-option-item .subcategorie-option-checkbox+label:before{width:13px;height:13px;left:2px;top:3px;z-index:0;border:2px solid #5a5a5a;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;margin-top:2px}.gogo-load-css .gogocarto-container .subcategorie-option-item .subcategorie-option-checkbox:checked+label:before{top:2px;left:1px;width:7px;height:13px;border-color:#3D3D3D;border-top:none;border-left:none;border-right:2px solid;border-bottom:2px solid;border-radius:0;-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-ms-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%}.gogo-load-css .gogocarto-container .subcategorie-option-item .checkbox-wrapper{width:3rem;position:absolute;right:0;top:0;bottom:0;background:-moz-linear-gradient(left,rgba(255,255,255,.3) 0,rgba(255,255,255,.48) 25%,#fff 100%);background:-webkit-linear-gradient(left,rgba(255,255,255,.3) 0,rgba(255,255,255,.48) 25%,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,.3) 0,rgba(255,255,255,.48) 25%,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#4dffffff', endColorstr='#ffffff', GradientType=1 )}.gogo-load-css .gogocarto-container .subcategorie-option-item .checkbox-wrapper .checkbox-container{position:absolute;top:.6rem;right:0}.gogo-load-css .gogocarto-container .subcategorie-option-item:hover{background-color:#f0f0f0;cursor:pointer}.gogo-load-css .gogocarto-container .subcategorie-option-item:hover .checkbox-wrapper{background:0 0}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal){margin-left:1.3rem;border-left:1px dotted #c3c3c3;margin-bottom:15px;margin-top:0}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .category-wrapper{margin-top:0}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategory-item{font-size:85%;line-height:2.5rem;margin-top:0;padding-top:0;padding-left:.9rem;margin-bottom:0}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategory-item .subcategorie-checkbox+label:after{width:15px;height:15px}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategory-item .subcategorie-checkbox+label:before{width:5px;height:9px;top:9px;left:2px}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategory-item .name-wrapper{height:2.5rem}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategory-item .checkbox-wrapper{top:7px;right:-1px}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategory-item .checkbox-wrapper .checkbox-container{top:-4px}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item{font-size:95%;line-height:2.4rem;height:2.4rem;padding-left:1rem}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item .icon{font-size:1.2rem;padding-top:1px;margin-right:.8rem}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item .icon.fa{font-size:1.1rem;padding-top:.7rem}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item .subcategorie-option-checkbox+label:before{width:10px;height:10px;left:3px}.gogo-load-css .gogocarto-container .category-wrapper .subcategories-wrapper:not(.no-withdrawal) .subcategorie-option-item .subcategorie-option-checkbox:checked+label:before{width:6px;height:10px;left:2px}.gogo-load-css .gogocarto-container #directory-menu.small-width{font-size:.95rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .subcategorie-option-item .arrow-after{margin-left:.5rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .icon{margin-right:.6rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .category-wrapper .subcategories-wrapper:not(.no-withdrawal){margin-left:1rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .main-categories{width:3rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .main-categories .icon{height:3.4rem;width:3rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .main-categories .icon:before{left:.6rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .sub-categories .sub-categories-content{padding-right:0}.gogo-load-css .gogocarto-container #directory-menu.small-width .sub-categories:not(.with-left-border) .sub-categories-content{padding-left:.2rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .subcategory-item{padding-left:.6rem;font-size:.9rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .subcategorie-option-item{padding-left:.5rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .category-wrapper .category-wrapper .subcategory-item{padding-left:.7rem}.gogo-load-css .gogocarto-container #directory-menu.small-width .category-wrapper .category-wrapper .subcategorie-option-item{padding-left:.6rem}.gogo-load-css .gogocarto-container #directory-menu .filter-menu{width:100%;height:auto;position:relative;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row nowrap;-webkit-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container #directory-menu .filter-menu{height:100%}}.gogo-load-css .gogocarto-container #directory-menu .main-categories{width:3.5rem;padding-top:.6rem;height:100%}.gogo-load-css .gogocarto-container #directory-menu .main-categories .main-icon{padding-top:0}.gogo-load-css .gogocarto-container #directory-menu .main-categories .main-icon:not(.active) .main-icon-text{transform:rotateZ(-45deg);opacity:.8}.gogo-load-css .gogocarto-container #directory-menu .main-categories .main-icon:hover .main-icon-text{opacity:1}.gogo-load-css .gogocarto-container #directory-menu .main-categories .main-icon .main-icon-text{text-transform:uppercase;-webkit-transition:transform .2s;-moz-transition:transform .2s;-o-transition:transform .2s;-ms-transition:transform .2s;transition:transform .2s;font-size:.85rem;font-weight:700;color:#fff;opacity:1}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon{width:3.5rem;height:3.5rem;line-height:3.5rem;margin:0;padding-right:8px;text-align:center;position:relative}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon .main-option-tooltip{display:none}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon:before{position:absolute;top:1rem;left:.8rem}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon:not(.active):hover{cursor:pointer}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon:not(.active):hover .main-option-tooltip{display:block;position:absolute;left:4rem;top:.5rem;height:2.5rem;line-height:2.5rem;z-index:100;width:14rem;color:#efefef;font-size:1rem;border-radius:5px}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon.active{color:#fff;padding-right:8px}.gogo-load-css .gogocarto-container #directory-menu .main-categories .main-gogo-icon-background{position:absolute;top:.6rem;border-radius:0 50% 50% 0}.gogo-load-css .gogocarto-container #directory-menu #main-option-all.show-one-pane-per-main-option .gogo-icon-name-wrapper:hover:after{content:"+";font-size:1.4rem;font-weight:400;background-color:#eee;padding:3px 11px;border-radius:3px;margin-left:5px;line-height:1rem;position:absolute;right:10px;z-index:10;top:11px}.gogo-load-css .gogocarto-container #directory-menu .secondary-filters{padding:.5rem 0 0;height:auto;border-top:2px dashed #eee;margin-top:1rem}.gogo-load-css .gogocarto-container #directory-menu .sub-categories{-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;padding-left:7px;padding-right:4px;background-color:#eee}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categorie-main-title{height:3rem;line-height:3rem;font-weight:700;text-align:center}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categorie-main-title{font-size:1.2rem}}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categories-content{height:calc(100% - 3rem);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding-right:5px;padding-top:0;background-color:#fff}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categories-content.full-height{height:100%}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categories-content ul{height:100%;margin:0;border:0;box-shadow:none;padding-bottom:2rem;overflow-y:auto;overflow-x:hidden}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container.directions{background-color:#f7f7f7}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container.directions .directory-menu-header{width:100%;border-radius:0}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container.directions .directory-menu-header .directions-header{display:block}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container.directions .directory-menu-header .directions-header h3{font-size:1rem;text-align:left;text-transform:uppercase;padding-left:1rem;color:#fff;font-weight:600;line-height:3rem;margin:0}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container.directions .directory-menu-content .filter-menu{display:none}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container.directions .directory-menu-content #directory-menu-spinner-loader{display:block}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directions-header{display:none;position:relative}.gogo-load-css .gogocarto-container #directory-menu{z-index:998;overflow-y:hidden;-webkit-transition:height .5s;-moz-transition:height .5s;-o-transition:height .5s;-ms-transition:height .5s;transition:height .5s;-webkit-box-shadow:4px 0 2px rgba(0,0,0,.2),-1px 0 2px rgba(0,0,0,.2);-moz-box-shadow:4px 0 2px rgba(0,0,0,.2),-1px 0 2px rgba(0,0,0,.2);box-shadow:4px 0 2px rgba(0,0,0,.2),-1px 0 2px rgba(0,0,0,.2)}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #directory-menu{overflow:visible}}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:column;-webkit-flex-flow:column;flex-flow:column;width:100%;height:100%}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .menu-top-image{width:100%}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header{width:100%;z-index:2;position:relative;-webkit-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;-ms-transition:all .5s;transition:all .5s}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container{overflow:scroll}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .search-bar-container{display:none}}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.large-screen{position:absolute;right:0;top:0;width:24px;bottom:0;-webkit-flex-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;display:none}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.large-screen .arrow-left{border:8px solid;border-color:transparent #eee transparent transparent}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.large-screen:hover{cursor:pointer}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.large-screen:hover .arrow-left{border-color:transparent #fff transparent transparent}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .subheader{position:relative}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .subheader .btn-close{position:absolute;margin:0;right:0;top:7px;padding:0 1rem;z-index:50;color:#CECECE}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .subheader .btn-close:hover{color:#fff;cursor:pointer}@media (min-width:850px){.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header{width:calc(100% + 12px);border-radius:0 0 5px 5px;padding-right:15px}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.large-screen{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-header .btn-close-menu.small-screen{display:none}}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .shadow-bottom{bottom:-8px;border-top:none;width:calc(100% - 12px)}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-content{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;position:relative;height:100px}.gogo-load-css .gogocarto-container #directory-menu #directory-menu-main-container .directory-menu-content #directory-menu-spinner-loader{top:40%;left:40%;position:absolute;display:none}.gogo-load-css .gogocarto-container #directory-menu .btn-close-menu.small-screen{color:#fff;text-transform:uppercase;width:100%;border-radius:0;text-align:center;line-height:2.5rem;z-index:10;box-shadow:1px -2px 11px 2px rgba(0,0,0,.25)}@media (min-width:850px){.gogo-load-css .gogocarto-container #directory-menu .btn-close-menu.small-screen{display:none}.gogo-load-css .gogocarto-container .directory-menu-drag-target{display:none!important}}.gogo-load-css .gogocarto-container #directory-menu-overlay{display:none;position:absolute;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5);z-index:997;will-change:opacity}@media (min-width:850px){.gogo-load-css .gogocarto-container #directory-menu-overlay{display:none!important}}.gogo-load-css .gogocarto-container .directory-menu-drag-target{height:100%;width:10px;position:fixed;top:0;z-index:999}.gogo-load-css .gogocarto-container .cluster{z-index:2}.gogo-load-css .gogocarto-container .icon{font-size:1.4rem;padding-top:3px;float:left;margin-right:1rem}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container .icon{padding-top:2px}}.gogo-load-css .gogocarto-container .icon.disabled{color:#DFDFDF}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon.main-icon.fa{font-size:1.2rem}.gogo-load-css .gogocarto-container #directory-menu .main-categories .icon.main-icon.fa:before{position:relative;left:0;top:0}.gogo-load-css .gogocarto-container .icon.fa{padding-top:.5rem;font-size:1.3rem}.gogo-load-css .gogocarto-container .element-main-icon.icon.fa{padding-top:4px}.gogo-load-css .gogocarto-container .iconInsideMarker.fa{padding-top:0}.gogo-load-css .gogocarto-container .filter-menu .icon.fa{padding-top:.7rem;width:1.5rem;text-align:center;font-size:1.2rem}.gogo-load-css .gogocarto-container .leaflet-marker-container{width:0!important;height:0!important;margin:0!important}.gogo-load-css .gogocarto-container .leaflet-marker-container:hover{z-index:10000000!important}.gogo-load-css .gogocarto-container .marker-name{position:absolute;white-space:nowrap;opacity:.9;font-size:1rem;font-family:Roboto,sans-serif;border-radius:5px;padding:5px 10px;bottom:55px;left:-30px;color:#dadada}.gogo-load-css .gogocarto-container .marker-wrapper{position:absolute;z-index:1;height:40px;width:40px;bottom:0;right:-20px;font-size:40px;line-height:40px;opacity:.99}.gogo-load-css .gogocarto-container .marker-wrapper.disabled{color:grey!important}.gogo-load-css .gogocarto-container .marker-wrapper.BigSize{z-index:10000!important;-webkit-transform:scale(1.3,1.3);-moz-transform:scale(1.3,1.3);-ms-transform:scale(1.3,1.3);-o-transform:scale(1.3,1.3);transform:scale(1.3,1.3);bottom:5px!important}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .marker-wrapper.BigSize .iconInsideMarker-wrapper{left:6px!important}}.gogo-load-css .gogocarto-container .marker-wrapper:hover{cursor:pointer}.gogo-load-css .gogocarto-container .marker-wrapper .gogo-icon-marker{height:inherit;line-height:inherit;color:inherit;position:absolute;z-index:1;background-image:url(images/marker-shadow.png);background-position:8px;background-repeat:no-repeat;width:50px}.gogo-load-css .gogocarto-container .marker-wrapper .mini-icon-stamp-container{position:absolute;top:-8px;z-index:3;font-size:14px;right:19px;color:#d9dad9}.gogo-load-css .gogocarto-container .iconInsideMarker.disabled,.gogo-load-css .gogocarto-container .moreIconContainer .moreIconWrapper.disabled{color:grey!important}.gogo-load-css .gogocarto-container .marker-wrapper .mini-icon-stamp-container .mini-icon-stamp{float:right}.gogo-load-css .gogocarto-container .marker-wrapper .mini-icon-stamp-container .mini-icon-stamp:before{border-radius:50%;padding:1px 1px 2px;background-color:#cc8901;border:1px solid}.gogo-load-css .gogocarto-container .marker-wrapper .mini-icon-stamp-container .mini-icon-stamp.gogo-icon-stamp-2{font-size:12px}.gogo-load-css .gogocarto-container .marker-wrapper .mini-icon-stamp-container .mini-icon-stamp.gogo-icon-stamp-2:before{padding:2px 1px 2px 2px}.gogo-load-css .gogocarto-container .iconInsideMarker-wrapper{position:relative;left:7px;z-index:2;text-align:center;width:26px;height:26px;background-color:#DADADA;border-radius:50%;top:4px;font-size:18px;line-height:28px}.gogo-load-css .gogocarto-container :-moz-any(.iconInsideMarker-wrapper){top:3px}.gogo-load-css .gogocarto-container .iconInsideMarker{line-height:26px}.gogo-load-css .gogocarto-container .iconInsideMarker:before{line-height:inherit}.gogo-load-css .gogocarto-container .gogo-icon-plus-circle{position:absolute;top:-7px;z-index:3;font-size:16px;right:-7px}.gogo-load-css .gogocarto-container .gogo-icon-plus-circle:before{border-radius:50%;background-color:#F1F1F1}.gogo-load-css .gogocarto-container .gogo-icon-star-full:before{border-radius:50%;padding:1px 1px 2px;background-color:#cc8901;border:1px solid}.gogo-load-css .gogocarto-container .moreIconContainer{display:none;z-index:10;position:absolute;bottom:-10px;left:30px}.gogo-load-css .gogocarto-container .moreIconContainer .moreIconWrapper{display:inline-block;margin-left:3px;bottom:10px;position:absolute;width:28px;height:28px;font-size:16px;line-height:26px;text-align:center;border:3px solid;border-radius:50%;z-index:10}.gogo-load-css .gogocarto-container .moreIconContainer .moreIconWrapper .iconInsideMarker{line-height:22px}.gogo-load-css .gogocarto-container .halfHidden{opacity:.6}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .marker-wrapper{right:-8px;bottom:-6px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .marker-wrapper.BigSize{right:-4px;bottom:-2px!important}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .gogo-icon-marker{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .iconInsideMarker-wrapper{left:6px!important;width:25px;height:25px;top:9px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .gogo-icon-plus-circle{top:-7px;right:-7px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .moreIconContainer{left:30px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateLeft .marker-name{bottom:47px;left:-50px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .marker-wrapper{right:-35px;bottom:-6px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .marker-wrapper.BigSize{right:-39px;bottom:-2px!important}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .gogo-icon-marker{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .iconInsideMarker-wrapper{left:11px!important;width:25px;height:25px;top:1px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .gogo-icon-plus-circle{top:-7px;right:-8px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .moreIconContainer{left:30px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateRight .marker-name{bottom:47px;left:-10px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .marker-wrapper{right:-13px;bottom:-1px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .marker-wrapper.BigSize{right:-10px;bottom:4px!important}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .gogo-icon-marker{-webkit-transform:rotate(-25deg);-moz-transform:rotate(-25deg);-ms-transform:rotate(-25deg);-o-transform:rotate(-25deg);transform:rotate(-25deg)}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .iconInsideMarker-wrapper{right:6px!important;width:25px;height:25px;top:7px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .gogo-icon-plus-circle{top:-7px;right:-7px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .moreIconContainer{left:30px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftLeft .marker-name{bottom:51px;left:-44px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .marker-wrapper{right:-30px;bottom:-2px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .marker-wrapper.BigSize{right:-33px;bottom:4px!important}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .gogo-icon-marker{-webkit-transform:rotate(25deg);-moz-transform:rotate(25deg);-ms-transform:rotate(25deg);-o-transform:rotate(25deg);transform:rotate(25deg)}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .iconInsideMarker-wrapper{left:9px!important;width:25px;height:25px;top:3px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .gogo-icon-plus-circle{top:-7px;right:-8px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .moreIconContainer{left:30px}.gogo-load-css .gogocarto-container .leaflet-marker-container.rotateSoftRight .marker-name{bottom:56px;left:-10px}.gogo-load-css .gogocarto-container .marker-cluster div{margin-left:5px;margin-top:5px;text-align:center;border-radius:50%;font-size:13px;font-weight:600;color:#fff;box-shadow:4px -2px 5px 0 rgba(167,167,167,.56)}.gogo-load-css .gogocarto-container .marker-cluster.halfHidden{opacity:.6!important}.gogo-load-css .gogocarto-container .marker-cluster.marker-cluster-small div{width:34px;height:34px;background-color:rgba(243,165,48,.88)}.gogo-load-css .gogocarto-container .marker-cluster.marker-cluster-small div span{line-height:34px}.gogo-load-css .gogocarto-container .marker-cluster.marker-cluster-medium div{width:38px;height:38px;background-color:rgba(235,123,45,.92)}.gogo-load-css .gogocarto-container .marker-cluster.marker-cluster-medium div span{line-height:38px}.gogo-load-css .gogocarto-container .marker-cluster.marker-cluster-large div{width:44px;height:44px;background-color:rgba(210,77,26,.88)}.gogo-load-css .gogocarto-container .marker-cluster.marker-cluster-large div span{line-height:44px}.gogo-load-css .gogocarto-container #markerDirectionResult{text-align:center;position:relative;z-index:10000;width:auto;padding:.5rem;margin-top:-10px;font-size:.9rem}.gogo-load-css .gogocarto-container #markerDirectionResult .duration{font-weight:700}.gogo-load-css .gogocarto-container .arrow_box{position:relative;background:#eee;border:1px solid #a8b6a0}.gogo-load-css .gogocarto-container .arrow_box:after,.gogo-load-css .gogocarto-container .arrow_box:before{top:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.gogo-load-css .gogocarto-container .arrow_box:after{border-color:rgba(238,238,238,0);border-top-color:#eee;border-width:7px;margin-left:-7px}.gogo-load-css .gogocarto-container .arrow_box:before{border-color:rgba(168,182,160,0);border-top-color:#a8b6a0;border-width:8px;margin-left:-8px}.gogo-load-css .gogocarto-container a.leaflet-control-zoom-in{font-size:18px!important;color:#3d3d3d}.gogo-load-css .gogocarto-container a.leaflet-control-zoom-out{font-size:25px!important;font-weight:400;color:#3d3d3d;text-indent:0}.gogo-load-css .gogocarto-container .leaflet-control-zoom.leaflet-bar.leaflet-control{margin-right:22px;margin-top:20px;border:none;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.3);-moz-box-shadow:0 2px 6px rgba(0,0,0,.3);box-shadow:0 2px 6px rgba(0,0,0,.3)}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container .leaflet-control-zoom.leaflet-bar.leaflet-control{display:none}}.gogo-load-css .gogocarto-container #map-gogo-controls{display:none}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #map-gogo-controls{display:block;position:absolute;z-index:500;left:15px;top:12px}.gogo-load-css .gogocarto-container .show-as-list-button:after{content:"Afficher sous forme de liste"}}.gogo-load-css .gogocarto-container .show-directory-menu-button{left:15px;color:#fff}.gogo-load-css .gogocarto-container .show-directory-menu-button .arrow-right{display:inline-block;border:8px solid;border-color:transparent transparent transparent #eee}.gogo-load-css .gogocarto-container .show-directory-menu-button i{margin-right:5px!important}.gogo-load-css .gogocarto-container .show-as-list-button{background-color:#fff}.gogo-load-css .gogocarto-container .gogo-map-control{margin-right:15px;display:inline-block;line-height:1.5;font-family:Roboto,sans-serif;font-weight:400;font-size:14px!important;padding:5px 10px;-webkit-box-shadow:2px 3px 1px rgba(0,0,0,.25);-moz-box-shadow:2px 3px 1px rgba(0,0,0,.25);box-shadow:2px 3px 1px rgba(0,0,0,.25);cursor:pointer;text-align:center;border:1px dashed #a5a5a5;border-radius:5px}.gogo-load-css .gogocarto-container .gogo-map-control:hover{cursor:pointer}.gogo-load-css .gogocarto-container .gogo-map-control i{font-size:1rem;float:left;line-height:1rem;padding-top:3px;margin-right:10px}.gogo-load-css .gogocarto-container #map-features-buttons{position:absolute;top:20px;z-index:500;right:20px;width:50px}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #map-features-buttons{width:33px;top:100px}}.gogo-load-css .gogocarto-container .feature-button{position:relative;background-color:#fff;color:#3d3d3d;margin-bottom:13px;text-align:center;width:50px;border-radius:50%;height:50px;border:none;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.3);-moz-box-shadow:0 2px 6px rgba(0,0,0,.3);box-shadow:0 2px 6px rgba(0,0,0,.3)}.gogo-load-css .gogocarto-container .feature-button:hover{cursor:pointer;background-color:#f4f4f4}.gogo-load-css .gogocarto-container .feature-button i{font-size:22px;line-height:55px}.gogo-load-css .gogocarto-container .feature-button i.gogo-icon-list{font-size:18px}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .feature-button{width:33px;height:33px;border-radius:4px}.gogo-load-css .gogocarto-container .feature-button i{font-size:18px;line-height:39px}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button{left:.5rem}}.gogo-load-css .gogocarto-container .feature-button#close-layers-panel{z-index:10000;background-color:transparent;color:#888}.gogo-load-css .gogocarto-container .feature-button#close-layers-panel:hover{background-color:transparent;color:#616161}.gogo-load-css .gogocarto-container .feature-button#close-layers-panel i{font-size:16px;line-height:44px;margin-left:2px}.gogo-load-css .gogocarto-container .feature-button#map-default-view-btn i{font-size:14px}@media screen and (max-width:600px){.gogo-load-css .gogocarto-container .feature-button#change-layers,.gogo-load-css .gogocarto-container .feature-button#export-iframe-btn,.gogo-load-css .gogocarto-container .feature-button#map-default-view-btn{display:none}}@media screen and (min-width:600px){.gogo-load-css .gogocarto-container .feature-button#geolocalize-btn{display:none}}.gogo-load-css .gogocarto-container .leaflet-control-layers-toggle{display:none}.gogo-load-css .gogocarto-container .leaflet-control-layers{padding:0!important;display:none;position:relative;z-index:600;margin-right:19px!important;margin-top:15px!important}.gogo-load-css .gogocarto-container .leaflet-control-layers-list{display:block!important;padding:5px 25px 10px 15px;position:relative!important}.gogo-load-css .gogocarto-container .leaflet-control-layers-selector:checked+span{font-weight:700}.gogo-load-css .gogocarto-container .leaflet-control-layers-base label{text-transform:uppercase;padding-top:4px;line-height:1.4rem;border-bottom:1px dashed #ccc}.gogo-load-css .gogocarto-container .leaflet-control-layers-base label:hover{background-color:#f4f4f4;cursor:pointer}.gogo-load-css .gogocarto-container .leaflet-control-layers-base label:last-child{border:none}.gogo-load-css .gogocarto-container #element-info-bar{height:0;z-index:600;position:absolute;will-change:height;-webkit-box-shadow:0 -8px 8px -5px rgba(173,173,173,.75);-moz-box-shadow:0 -8px 8px -5px rgba(173,173,173,.75);box-shadow:0 -8px 8px -5px rgba(173,173,173,.75);background-color:#F7F7F7}.gogo-load-css .gogocarto-container #element-info-bar.display-bottom{right:0!important;bottom:0!important;width:100%}.gogo-load-css .gogocarto-container #element-info-bar.display-aside{top:0;right:0;height:100%!important;-webkit-transition:top .5s;-moz-transition:top .5s;-o-transition:top .5s;-ms-transition:top .5s;transition:top .5s;overflow-y:visible;-webkit-box-shadow:0 6px 9px 2px rgba(119,119,119,.75);-moz-box-shadow:0 6px 9px 2px rgba(119,119,119,.75);box-shadow:0 6px 9px 2px rgba(119,119,119,.75)}.gogo-load-css .gogocarto-container #element-info-bar.display-aside.with-search-result-header{top:3rem}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-main-icon,.gogo-load-css .gogocarto-container #element-info-bar.display-aside .star-names-icons{display:none!important}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .gogo-icon-close{padding-left:1rem;color:#CECECE!important}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .gogo-icon-close:hover{color:#fff!important}.gogo-load-css .gogocarto-container #element-info-bar.display-aside #element-info .moreDetails{display:block!important}.gogo-load-css .gogocarto-container #element-info-bar.display-aside #element-info .moreDetails.tabs{display:flex!important}.gogo-load-css .gogocarto-container #element-info-bar.display-aside #element-info .hideOnLargeScreen{display:none!important}.gogo-load-css .gogocarto-container #element-info-bar .element-item .element-main-icon{display:none}.gogo-load-css .gogocarto-container #element-info-bar .element-item .star-names-icons,.gogo-load-css .gogocarto-container #element-info-bar.inside-normal-mode .element-main-icon{display:block}.gogo-load-css .gogocarto-container #element-info-bar #element-info .moreDetails,.gogo-load-css .gogocarto-container #element-info-bar.inside-normal-mode .star-names-icons{display:none}.gogo-load-css .gogocarto-container #element-info-bar #element-info{margin-bottom:3rem}.gogo-load-css .gogocarto-container #element-info-bar .gogo-icon-close{float:right;margin:-.9rem -1.5rem -1rem 0;font-size:1.2rem;padding:1rem 1.5rem}.gogo-load-css .gogocarto-container #element-info-bar .gogo-icon-close:hover{cursor:pointer}.gogo-load-css .gogocarto-container #directory-content-map{position:relative;z-index:10;-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;-webkit-box-shadow:inset 0 5px 5px 0 rgba(119,119,119,.75);-moz-box-shadow:inset 0 5px 5px 0 rgba(119,119,119,.75);box-shadow:inset 0 5px 5px 0 rgba(119,119,119,.75)}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header{display:block;position:relative;width:100%;line-height:3.5rem;text-align:right;padding:0 1rem}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container #directory-content-list .element-list-header{display:none!important}}@media (min-width:900px){.gogo-load-css .gogocarto-container #directory-content-list .element-list-header{padding-left:3rem;padding-right:calc(3rem + 20px)}}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header #list-title-shadow-bottom{display:none}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button{float:left;z-index:200;height:100%;text-decoration:underline}@media only screen and (min-width:1201px){.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button{left:9rem!important}}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button:hover{cursor:pointer}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button .btn-back{color:inherit!important;height:2rem}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-directory-menu-button{display:none!important}}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button{left:2rem}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-as-map-button:after{content:"Retour à la carte"}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-directory-menu-button{display:block;float:left;position:relative;margin-right:2rem;margin-left:-1rem;width:auto;top:.6rem}}@media (min-width:1500px){.gogo-load-css .gogocarto-container #directory-content-list .element-list-header{padding-left:10rem;padding-right:calc(10rem + 20px)}.gogo-load-css .gogocarto-container #directory-content-list .element-list-header .show-directory-menu-button{position:absolute;top:12px;left:15px;margin-left:0;bottom:initial;width:auto}}.gogo-load-css .gogocarto-container .no-result-message img{margin-top:1rem;width:350px;padding:0 2rem;border-radius:100px}.gogo-load-css .gogocarto-container #directory-content-list{display:none;z-index:650;-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;width:100%;overflow:auto;border-left:none;height:100%}.gogo-load-css .gogocarto-container #directory-content-list .elements-container{position:relative;padding-bottom:100px;height:100%;width:100%;overflow-y:scroll;margin:0;padding-left:0;padding-right:0}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #directory-content-list .elements-container{height:calc(100% - 3.5rem)}}@media only screen and (min-width:901px){.gogo-load-css .gogocarto-container #directory-content-list .elements-container{padding-left:3rem;padding-right:3rem}}@media (min-width:1500px){.gogo-load-css .gogocarto-container #directory-content-list .elements-container{padding-left:10rem;padding-right:10rem}}.gogo-load-css .gogocarto-container #directory-content-list .elements-container.custom-scroll-bar::-webkit-scrollbar,.gogo-load-css .gogocarto-container #directory-content-list .elements-container.leaflet-routing-alt::-webkit-scrollbar,.gogo-load-css .gogocarto-container #directory-content-list .elements-container.leaflet-routing-error::-webkit-scrollbar,.gogo-load-css .gogocarto-container #directory-content-list .elements-container.leaflet-routing-geocoders::-webkit-scrollbar{width:14px}.gogo-load-css .gogocarto-container #directory-content-list .elements-container .bottom-gradient{position:fixed;height:5rem;bottom:0;width:100%;z-index:700;background:-moz-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%);background:-webkit-linear-gradient(top,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#ffffff', GradientType=0 )}.gogo-load-css .gogocarto-container #directory-content-list .elements-container .no-result-message{text-align:center;margin-top:3rem}.gogo-load-css .gogocarto-container #directory-content-list .element-item{display:block}.gogo-load-css .gogocarto-container #directory-content-list .element-item .gogo-icon-close{display:none}.gogo-load-css .gogocarto-container #directory-content-list .element-item .distance{margin-right:0;margin-left:6px}.gogo-load-css .gogocarto-container #directory-content-list .element-item .location{display:inline-block;float:right;margin-left:1rem}.gogo-load-css .gogocarto-container #directory-content-list .element-item .location .postalCode{font-size:.95rem}.gogo-load-css .gogocarto-container #directory-content-list .element-item .expandLabel{background-color:transparent!important}.gogo-load-css .gogocarto-container #directory-content-list .element-item .collapsible-header{border-bottom:1px solid #abaaaa;background-color:#fff}.gogo-load-css .gogocarto-container #directory-content-list .collapsible.popout,.gogo-load-css .gogocarto-container #directory-content-list .collapsible.popout>li{margin:0}.gogo-load-css .gogocarto-container #directory-content-list .collapsible.popout>li.active{margin:1rem 0}.gogo-load-css .gogocarto-container #directory-content-list .spinner-loader{-webkit-box-ordinal-group:1000000;-moz-box-ordinal-group:1000000;-ms-flex-order:1000000;-webkit-order:1000000;order:1000000}.gogo-load-css .gogocarto-container #directory-content-list .info-bar-tabs,.gogo-load-css .gogocarto-container #directory-content-list .menu-element{position:relative;display:none}.gogo-load-css .gogocarto-container #directory-content-list .element-item.active .menu-element{display:block}.gogo-load-css .gogocarto-container #directory-content-list .element-item.active .info-bar-tabs{display:flex}.gogo-load-css .gogocarto-container #directory-content-list .img-overlay{max-height:20rem;overflow:hidden}.gogo-load-css .gogocarto-container #directory-content-list .img-container{max-height:20rem;background-color:#F7F7F7}.gogo-load-css .gogocarto-container #gogo-controls-mobile{position:absolute;z-index:900;left:15px;top:15px;right:0}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #gogo-controls-mobile{display:none!important}}.gogo-load-css .gogocarto-container #gogo-controls-mobile .feature-button{display:inline-block;margin-right:15px}.gogo-load-css .gogocarto-container #gogo-controls-mobile .feature-button.gogo-bg-primary{color:#fff}.gogo-load-css .gogocarto-container #gogo-controls-mobile .feature-button.show-as-list-button,.gogo-load-css .gogocarto-container #gogo-controls-mobile .feature-button.show-as-map-button{float:right;display:none}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container #gogo-controls-mobile{display:none}}.gogo-load-css .gogocarto-container #gogo-controls-mobile.list .show-as-map-button,.gogo-load-css .gogocarto-container #gogo-controls-mobile.map .show-as-list-button{display:block}.gogo-load-css .gogocarto-container #gogo-controls-mobile.list .feature-button{-webkit-box-shadow:1px 2px 8px 1px rgba(0,0,0,.4);-moz-box-shadow:1px 2px 8px 1px rgba(0,0,0,.4);box-shadow:1px 2px 8px 1px rgba(0,0,0,.4)}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile{display:none;z-index:10;position:relative;background-color:#fff;margin:15px;border-radius:3px;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.3);-moz-box-shadow:0 2px 6px rgba(0,0,0,.3);box-shadow:0 2px 6px rgba(0,0,0,.3)}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-bar-container{height:52px;padding:0}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-bar{height:100%;padding:0 4rem}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-icon{font-size:22px;line-height:57px;height:56px;width:56px}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-icon.search-bar-icon{left:-2px}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-icon.search-geolocalize{right:0;font-size:24px!important}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-bar-icon{left:3px}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-geolocalize{right:5px;font-size:24px!important}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-options{display:block!important;padding:0 15px 12px}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile #search-spinner-loader .spinner-layer{border-color:#fff!important}.gogo-load-css .gogocarto-container #search-overlay-mobile .search-bar-with-options-container.mobile .search-no-result{color:inherit;font-size:13px;padding-bottom:1rem}.gogo-load-css .gogocarto-container #search-overlay-mobile{display:none;position:absolute;top:0;left:0;right:0;bottom:0;z-index:1000}.gogo-load-css .gogocarto-container #search-overlay-mobile .overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:1;background-color:rgba(0,0,0,.5)}.gogo-load-css .gogocarto-container .search-results{background-color:rgba(0,0,0,.4);position:relative;line-height:3rem;top:0;z-index:800;width:100%;padding:0 0 0 10px;-webkit-transition:background-color .5s;-moz-transition:background-color .5s;-o-transition:background-color .5s;-ms-transition:background-color .5s;transition:background-color .5s}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .search-results{position:relative;padding-left:28px}}.gogo-load-css .gogocarto-container .search-results .btn-close{position:absolute;margin:0;right:0;top:3px;padding:0 1rem;z-index:50;color:#fff}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .search-results .btn-close{right:12px}}.gogo-load-css .gogocarto-container .search-results .btn-close:hover{color:#fff;cursor:pointer}.gogo-load-css .gogocarto-container .search-results .search-result-label{color:#fff;font-weight:700}.gogo-load-css .gogocarto-container .search-results .search-result-value{font-style:italic}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container{height:3.5rem;padding:.7rem .7rem 0;text-align:center;margin:0}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-icon{position:absolute;font-size:1.2rem;color:#777;height:2rem;line-height:2rem}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-icon:before{line-height:2rem}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-icon:hover{cursor:pointer}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-icon.search-bar-icon{left:1.2rem}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-icon.search-geolocalize{right:1.4rem}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar{font-size:16px;padding:0 2.3rem 0 2.2rem;box-shadow:none!important;margin:0;text-align:left;font-weight:700;height:2rem;width:100%;border:none!important;background-color:#fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@media (min-width:850px){.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar{text-transform:uppercase;font-size:.8rem}}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar.invalid{border-color:#B90303!important}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar::-webkit-input-placeholder{color:#949494}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar::-moz-placeholder{color:#949494}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar:-ms-input-placeholder{color:#949494}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-bar-container .search-bar:-moz-placeholder{color:#949494}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options{padding:0 .7rem .7rem}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options label.search-option-radio-label{color:#ececec;font-size:.9rem;line-height:2.2rem;padding-left:27px;margin-right:13px}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options label.search-option-radio-label:before{border:2px solid #e0e0e0;top:3px;width:14px;height:14px}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options label.search-option-radio-label:after{border:2px solid #dedede;background-color:#dedede;top:3px;width:14px;height:14px}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options .search-action-btn{float:right;font-size:.85rem;height:1.8rem;line-height:1.8rem;padding:0 10px}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options #search-spinner-loader{height:12px;width:12px;top:1px;margin-left:5px}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options #search-spinner-loader .spinner-layer{border-color:#5d5d5d}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-options #search-spinner-loader .circle-clipper .circle{border-width:2px}.gogo-load-css .gogocarto-container .search-bar-with-options-container .search-no-result{color:#fff;padding-bottom:.7rem;text-decoration:underline;text-align:center;font-weight:700}.gogo-load-css .gogocarto-container #directory-menu-main-container .search-action-btn{background-color:#ddd;color:#272626}.gogo-load-css .gogocarto-container #directory-menu.small-width .search-options{padding-left:7px}.gogo-load-css .gogocarto-container #directory-menu.small-width .search-options label.search-option-radio-label{margin-right:0}.gogo-load-css .gogocarto-container .element-item{list-style-type:none;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:column nowrap;-webkit-flex-flow:column nowrap;flex-flow:column nowrap}.gogo-load-css .gogocarto-container .element-item #element-info-bar.display-aside .menu-element{height:auto}.gogo-load-css .gogocarto-container .element-item .menu-element{z-index:10;position:absolute;bottom:0;text-align:center;width:100%}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item-text{display:none}.gogo-load-css .gogocarto-container .element-item .menu-element:not(.full-text){height:3rem}.gogo-load-css .gogocarto-container .element-item .menu-element.full-text{padding:.3rem 0 .8rem}.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item{margin:0 10px -.5rem}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container .element-item .menu-element.full-text{padding-top:0}.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item{margin:0 6px -.9rem}}@media (min-width:1400px){.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item{margin:0 .8rem -.5rem}}.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item-text{display:inline;text-transform:uppercase;font-size:.75rem;line-height:3rem;margin-left:.5rem}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item-text{font-size:10px}}@media (min-width:1400px){.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item-text{font-size:.8rem}}.gogo-load-css .gogocarto-container .element-item .menu-element.full-text .menu-element-item-text.favorite{color:#ffab00}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item{display:inline-block;color:#CECECE;margin:0 1rem}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item:hover{color:#fff;cursor:pointer}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item a{color:inherit}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .menu-icon{font-size:20px;float:left}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .menu-icon.small-icon{font-size:18px}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .menu-icon:before{line-height:2.8rem}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .gogo-icon-star-full:before{padding:2px 2px 3px;border:none}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item.item-stamp.filled{color:#ffab00;font-weight:700}.gogo-load-css .gogocarto-container .element-item .interactive-section{padding:0 1rem 0 .8rem;position:relative;line-height:3rem}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .menu-icon{font-size:22px}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .menu-icon.small-icon{font-size:20px}.gogo-load-css .gogocarto-container .element-item .menu-element .menu-element-item .menu-icon:before{line-height:3rem}.gogo-load-css .gogocarto-container .element-item .interactive-section{padding:0 1rem 0 1.6rem}}.gogo-load-css .gogocarto-container .element-item .interactive-section>div{position:relative}.gogo-load-css .gogocarto-container .element-item .interactive-section .result-message{text-align:center;font-weight:700;color:#fff;line-height:1.7rem;padding:.6rem 0}.gogo-load-css .gogocarto-container .element-item #directory-content-list .interactive-section{display:none}.gogo-load-css .gogocarto-container .element-item #directory-content-list .element-item.active .interactive-section{display:block}.gogo-load-css .gogocarto-container .element-item .moderation-section .gogo-icon-attention,.gogo-load-css .gogocarto-container .element-item .moderation-section .gogo-icon-moderation,.gogo-load-css .gogocarto-container .element-item .vote-section .gogo-icon-attention,.gogo-load-css .gogocarto-container .element-item .vote-section .gogo-icon-moderation{color:#fff;font-size:20px;padding-top:3px;position:absolute}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container .element-item .moderation-section .gogo-icon-attention,.gogo-load-css .gogocarto-container .element-item .vote-section .gogo-icon-attention{display:none}.gogo-load-css .gogocarto-container .element-item .moderation-section .pending-text,.gogo-load-css .gogocarto-container .element-item .vote-section .pending-text{margin-left:0!important}}@media (max-width:460px){.gogo-load-css .gogocarto-container .element-item .moderation-section .long-text,.gogo-load-css .gogocarto-container .element-item .vote-section .long-text{display:none}}@media (max-width:360px){.gogo-load-css .gogocarto-container .element-item .moderation-section .pending-text,.gogo-load-css .gogocarto-container .element-item .vote-section .pending-text{opacity:0}}.gogo-load-css .gogocarto-container .element-item .moderation-section .text,.gogo-load-css .gogocarto-container .element-item .vote-section .text{margin-left:2.2rem;color:#fff}.gogo-load-css .gogocarto-container .element-item .moderation-section .btn-vote-more-info,.gogo-load-css .gogocarto-container .element-item .vote-section .btn-vote-more-info{line-height:1.2rem;position:absolute;top:14px;right:90px;padding:0;font-size:.85rem;color:#fff}.gogo-load-css .gogocarto-container .element-item .moderation-section .action-btn,.gogo-load-css .gogocarto-container .element-item .vote-section .action-btn{position:absolute;right:0;top:8px;margin:0;background-color:#dedede;color:#272626;font-size:.85rem}.gogo-load-css .gogocarto-container .element-item .moderation-section .moderation-input-comment,.gogo-load-css .gogocarto-container .element-item .vote-section .moderation-input-comment{color:#fff;border-color:#ccc!important;height:2.2rem}.gogo-load-css .gogocarto-container .element-item .moderation-section .moderation-input-comment::-webkit-input-placeholder,.gogo-load-css .gogocarto-container .element-item .vote-section .moderation-input-comment::-webkit-input-placeholder{color:#ccc}.gogo-load-css .gogocarto-container .element-item .moderation-section .moderation-input-comment::-moz-placeholder,.gogo-load-css .gogocarto-container .element-item .vote-section .moderation-input-comment::-moz-placeholder{color:#ccc}.gogo-load-css .gogocarto-container .element-item .moderation-section .moderation-input-comment:-ms-input-placeholder,.gogo-load-css .gogocarto-container .element-item .vote-section .moderation-input-comment:-ms-input-placeholder{color:#ccc}.gogo-load-css .gogocarto-container .element-item .moderation-section .moderation-input-comment:-moz-placeholder,.gogo-load-css .gogocarto-container .element-item .vote-section .moderation-input-comment:-moz-placeholder{color:#ccc}.gogo-load-css .gogocarto-container .element-item .validation-process-info:hover{cursor:help;border-bottom:1px dashed;border-color:inherit;text-decoration:none}.gogo-load-css .gogocarto-container .element-item .collapsible-body .show-more-description:hover,.gogo-load-css .gogocarto-container .element-item .info-bar-tabs.tabs .tab a{cursor:pointer}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .strong,.gogo-load-css .gogocarto-container .element-item .collapsible-header a{text-decoration:underline}.gogo-load-css .gogocarto-container .element-item #element-info-bar.small-width .btn-vote-more-info{display:none}.gogo-load-css .gogocarto-container .element-item .label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.gogo-load-css .gogocarto-container .element-item .label-danger{background-color:#d9534f}.gogo-load-css .gogocarto-container .element-item .label-success{background-color:#00a65a}.gogo-load-css .gogocarto-container .element-item .label-default{background-color:#d2d6de;color:#444}.gogo-load-css .gogocarto-container .element-item .element-item .contributions{border:none;box-shadow:none}.gogo-load-css .gogocarto-container .element-item .element-item .contributions .contribution-header{color:inherit;background-color:transparent;border:none;box-shadow:none;line-height:2rem;padding:15px 0;border-bottom:1px solid grey}.gogo-load-css .gogocarto-container .element-item .element-item .contributions .contribution-header .contribution-status{float:left}.gogo-load-css .gogocarto-container .element-item .element-item .contributions .contribution-header .contribution-updated-at{float:right}.gogo-load-css .gogocarto-container .element-item .element-item .contributions .contribution-body{color:inherit}.gogo-load-css .gogocarto-container .element-item .info-bar-tabs.tabs{z-index:40}.gogo-load-css .gogocarto-container .element-item .item-container{border-bottom:1px dashed grey;padding-bottom:5px;margin-bottom:5px}.gogo-load-css .gogocarto-container .element-item .vote-report-item{line-height:1.5rem!important;padding:10px}.gogo-load-css .gogocarto-container .element-item .pending-contribution{margin-bottom:-.9rem;line-height:1.5rem!important;margin-top:.8rem;padding:10px}.gogo-load-css .gogocarto-container .element-item .vote-report-comment{font-style:italic}.gogo-load-css .gogocarto-container .element-item .body-admin-tab-content{display:none;padding-right:10px;font-size:.9em}.gogo-load-css .gogocarto-container .element-item .body-admin-tab-content .vote-report-item{padding:0!important}.gogo-load-css .gogocarto-container .element-item .collapsible-header{padding:0;position:relative}.gogo-load-css .gogocarto-container .element-item .collapsible-header i{margin-right:0;padding-left:.3rem}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-title{position:relative;margin-bottom:0;overflow:hidden;text-overflow:ellipsis;line-height:2rem;padding:.5rem 0;font-weight:700}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-title{padding:1rem 1rem .5rem}}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-title .distance{float:right;margin-left:1rem}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-title .location{display:none}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-more{line-height:1.5rem;padding:0;margin-bottom:.5rem}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-more{padding:0 1rem}}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-more .inline-option-values{font-weight:700;font-style:italic}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-more .inline-option-values .option-value.disabled{color:#9C9C9C;font-weight:400}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-more .description{margin-bottom:.7rem;text-align:justify}.gogo-load-css .gogocarto-container .element-item .collapsible-header .collapsible-header-more .description p{margin:0}.gogo-load-css .gogocarto-container .element-item .collapsible-body{background-color:transpraent;padding:0;position:relative}.gogo-load-css .gogocarto-container .element-item .collapsible-body .collapsible-body-main-content{background-color:#F7F7F7;padding:0 0 1rem .5rem}@media only screen and (min-width:601px){.gogo-load-css .gogocarto-container .element-item .collapsible-body .collapsible-body-main-content{padding:0 0 1rem 1rem}}.gogo-load-css .gogocarto-container .element-item .collapsible-body h2{font-weight:700!important;font-size:1rem!important;line-height:110%!important;margin:.5rem 0 .8rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .row{margin-bottom:0}.gogo-load-css .gogocarto-container .element-item .collapsible-body .section{padding-top:.9rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .description{text-align:justify;line-height:1.5;padding-right:1.5rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .show-more-description{display:inline;text-decoration:underline}.gogo-load-css .gogocarto-container .element-item .collapsible-body .send-mail-btn{font-size:.8rem;margin:.4rem 0 .5rem;line-height:1.8rem;height:1.8rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .sectionInfos,.gogo-load-css .gogocarto-container .element-item .collapsible-body .sectionOpenHours{line-height:2rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .sectionlongDescription{padding-bottom:0;padding-top:1.5rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .tags-container{margin-top:1.5rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .gogo-tag{margin-right:8px;border-radius:5px;background-color:#dcdcdc;padding:4px 10px;display:inline-block;margin-bottom:8px}.gogo-load-css .gogocarto-container .element-item .img-container{position:absolute;width:100%;top:0;overflow:hidden}.gogo-load-css .gogocarto-container .element-item .img-container .images-carousel{cursor:pointer!important;margin:0}.gogo-load-css .gogocarto-container .element-item .img-container .gogo-img{width:100%;height:auto}.gogo-load-css .gogocarto-container .element-item .img-overlay{position:relative;overflow:hidden}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn{display:none;cursor:pointer!important;height:100%;position:absolute;color:#fff;padding-top:17%!important;width:5rem;-webkit-transition:opacity .5s;-moz-transition:opacity .5s;-o-transition:opacity .5s;-ms-transition:opacity .5s;transition:opacity .5s;opacity:.7}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn:hover{opacity:1}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn.prev{background-image:linear-gradient(to right,rgba(70,70,70,.4) 0,rgba(255,255,255,0) 100%);padding:0 30px 0 .5rem;left:0}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn.prev .icon{left:.6rem}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn.next{background-image:linear-gradient(to left,rgba(70,70,70,.4) 0,rgba(255,255,255,0) 100%);padding:0 .5rem 0 30px;right:0}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn.next .icon{right:.6rem}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-navigation-btn .icon{font-size:3rem;position:absolute;top:calc(50% - 1.5rem);margin:0;text-shadow:0 1px 4px #757575}.gogo-load-css .gogocarto-container .element-item .img-overlay .img-clickable-area{height:100%;position:absolute;left:6rem;right:6rem;cursor:pointer!important}.gogo-load-css .gogocarto-container .element-item .collapsible-body .section.categories h3{margin-bottom:90%}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-name{padding-top:.6rem;padding-bottom:1rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper+.category-name{padding-top:1.2rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .row+.category-wrapper .category-name{padding-top:.9rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper{margin-top:0!important}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper:not(:first-child){margin-top:.5rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper{margin-left:1.2rem;padding-left:.5rem;border-left:1px dotted #c3c3c3}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper h3.category-name{font-size:85%;padding-bottom:.4rem;padding-top:.5rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper .strong{text-decoration:none!important}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-name.main-option{font-weight:700}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .inline-option{font-style:italic}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .inline-option span.disabled{color:#9C9C9C}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-description{padding:.5rem;font-style:italic;font-size:.9rem;color:#5d5d5d}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-description.disabled{color:#9C9C9C}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value{line-height:2.5rem;padding-right:0}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value.inline{display:inline-block;font-style:italic}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value.inline:not(.last):after{content:","}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value.inline:not(.first) .icon{margin-left:.5rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value.inline .icon{margin-right:.8rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value .icon{font-size:1.2rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value .icon.fa{font-size:1.1rem;padding-top:.8rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value .icon.gogo-icon-marker{font-size:1.1rem}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value .icon.disabled{color:#BFBFBF!important}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .option-value.disabled{color:#9C9C9C!important}.gogo-load-css .gogocarto-container .element-item .collapsible-body .category-wrapper .category-wrapper .option-value{padding-left:.6rem}.gogo-load-css .gogocarto-container .element-item h3{font-size:.85rem;text-transform:uppercase;font-weight:600;padding-left:.75rem;margin-bottom:0;padding-top:1.5rem;margin-top:0}.gogo-load-css .gogocarto-container .element-item .info-bar-divider{height:1px;overflow:hidden;background-color:#CCC}.gogo-load-css .gogocarto-container .element-item .btn,.gogo-load-css .gogocarto-container .element-item .btn-large{height:2rem;line-height:2rem;padding:0 1rem;margin-bottom:1rem}.gogo-load-css .gogocarto-container .element-item span.added{color:#3a772c}.gogo-load-css .gogocarto-container .element-item span.removed{text-decoration:line-through;margin-right:5px;color:#b57e7e}.gogo-load-css .gogocarto-container .element-item a>span.equals{color:rgba(0,0,0,.87)!important}.gogo-load-css .gogocarto-container #element-info-bar .element-item .expandLabel{font-weight:700}.gogo-load-css .gogocarto-container #element-info-bar .element-item.active .expandLabel:after{content:"Moins d'infos"}.gogo-load-css .gogocarto-container #element-info-bar .element-item.active .expandLabel.transform-big{position:absolute;color:#fff;z-index:2;right:0;width:auto;margin-right:1.7rem;-webkit-transition:all .4s;-moz-transition:all .4s;-o-transition:all .4s;-ms-transition:all .4s;transition:all .4s;padding:8px 25px;bottom:-15px}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container #element-info-bar .element-item.active .expandLabel.transform-big{padding:.3rem 1.2rem;bottom:-1rem}}.gogo-load-css .gogocarto-container #element-info-bar .element-item.active .expandLabel.transform-big:hover{color:#fff;box-shadow:0 6px 15px 0 rgba(0,0,0,.2),0 5px 17px 0 rgba(0,0,0,.19)}.gogo-load-css .gogocarto-container #element-info-bar .element-item:not(.active) .expandLabel:after{content:"Plus d'infos"}.gogo-load-css .gogocarto-container #element-info-bar .element-item:not(.active) .expandLabel,.gogo-load-css .gogocarto-container #element-info-bar .element-item:not(.active) .expandLabel:not(.transform-big){background-color:transparent!important}.gogo-load-css .gogocarto-container #element-info-bar .collapsible-header{position:relative;z-index:2}.gogo-load-css .gogocarto-container #element-info-bar .collapsible-header span.added{color:#3ab33a}.gogo-load-css .gogocarto-container #element-info-bar .collapsible-body .collapsible-body-main-container{height:100%;width:100%;position:absolute;top:0;overflow-y:auto}.gogo-load-css .gogocarto-container #element-info-bar .collapsible-body .img-container,.gogo-load-css .gogocarto-container #element-info-bar .collapsible-body .img-overlay{height:33%;background-color:transparent}.gogo-load-css .gogocarto-container #element-info-bar.display-bottom .element-item .collapsible-header{background-color:#fff!important}.gogo-load-css .gogocarto-container #element-info-bar.display-bottom .element-item .collapsible-header a{color:inherit}.gogo-load-css .gogocarto-container #element-info-bar.display-bottom .element-item .collapsible-header a:hover{color:#000}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header{border:none;color:#fff;cursor:default;width:100%}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header a{color:#fff}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header a:hover{color:#e6e6e6}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-title{position:relative;line-height:2.5rem;font-weight:400}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-title .distance{font-size:1.3rem;color:inherit}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-title .gogo-icon-close{font-size:1.5rem;margin-top:-.8rem}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .collapsible-header-more{margin-bottom:1rem}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .name{font-size:1.8rem;text-align:left}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .description,.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .name{width:100%!important}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-header .description{margin-bottom:0}.gogo-load-css .gogocarto-container #element-info-bar.display-aside .element-item .collapsible-body{height:100%;overflow-y:auto}.gogo-load-css .gogocarto-container #modal-directions-fail.modal,.gogo-load-css .gogocarto-container #modal-pick-address.modal{position:absolute}.gogo-load-css .gogocarto-container #modal-directions-fail.modal .modal-footer,.gogo-load-css .gogocarto-container #modal-pick-address.modal .modal-footer{background-color:#444}.gogo-load-css .gogocarto-container .simple-modal.modal{z-index:2000;max-width:1200px;top:30%!important;max-height:80%;height:auto;position:absolute!important}.gogo-load-css .gogocarto-container .simple-modal.modal h5{margin-bottom:.5rem}.gogo-load-css .gogocarto-container .simple-modal.modal .modal-content{padding-bottom:.8rem!important}.gogo-load-css .gogocarto-container .simple-modal.modal .modal-content .modal-error-msg{display:none;color:#B90303}.gogo-load-css .gogocarto-container .simple-modal.modal .modal-footer{padding-right:2.5rem}.gogo-load-css .gogocarto-container .simple-modal.modal .modal-footer .modal-action{color:#fff;font-size:.9rem;padding:0 25px}.gogo-load-css .gogocarto-container .simple-modal.modal .modal-footer .modal-action.btn,.gogo-load-css .gogocarto-container .simple-modal.modal .modal-footer .modal-action.btn-large{background-color:#de5a5f}.gogo-load-css .gogocarto-container .simple-modal.modal .modal-footer .modal-action.btn-large:hover,.gogo-load-css .gogocarto-container .simple-modal.modal .modal-footer .modal-action.btn:hover{background-color:#ec787d}.gogo-load-css .gogocarto-container .simple-modal.modal .input-simple-modal:focus{border-color:#4A7874;box-shadow:none}.gogo-load-css .gogocarto-container .simple-modal.modal .input-simple-modal::selection{background-color:#4A7874;color:#fff}.gogo-load-css .gogocarto-container .simple-modal.modal .input-simple-modal::-moz-selection{background-color:#4A7874;color:#fff}.gogo-load-css .gogocarto-container .page-modal .btn-back{float:left;font-size:2rem;line-height:4rem;padding:0 2rem;margin-left:-2rem}.gogo-load-css .gogocarto-container .modal.action-modal h5{text-align:center;margin-bottom:1.5rem;line-height:2.5rem}.gogo-load-css .gogocarto-container .modal.action-modal label.small-label{display:block;font-size:.85rem;font-weight:700;margin-top:1rem;margin-bottom:-1.8rem}.gogo-load-css .gogocarto-container .modal.action-modal .elementName{font-style:italic;font-size:1.5rem}.gogo-load-css .gogocarto-container .modal.action-modal .error{display:none;color:#B90303}.gogo-load-css .gogocarto-container .modal.action-modal .option-radio-label{margin-top:.5rem;display:block!important;height:auto!important}.gogo-load-css .gogocarto-container .modal.action-modal .cancel-btn{display:none}.gogo-load-css .gogocarto-container .modal.action-modal .cancel-btn .preloader-wrapper{height:15px;width:15px;top:1px}.gogo-load-css .gogocarto-container .modal.action-modal .cancel-btn .preloader-wrapper .spinner-layer{border-color:#fff}.gogo-load-css .gogocarto-container .modal.action-modal .cancel-btn .preloader-wrapper .circle-clipper .circle{border-width:2px}.gogo-load-css .gogocarto-container .modal.action-modal .loader-overlay{display:none;position:absolute;top:0;left:0;right:0;bottom:0;background-color:#000;opacity:.35}.gogo-load-css .gogocarto-container #modal-iframe .subtitle{text-align:center;font-style:italic;margin-bottom:1.5rem}.gogo-load-css .gogocarto-container #modal-iframe label{font-size:.8rem;width:100%}.gogo-load-css .gogocarto-container #modal-iframe label:not(:last-child){margin-bottom:15px}.gogo-load-css .gogocarto-container #modal-iframe label strong{font-weight:700}.gogo-load-css .gogocarto-container #modal-iframe .iframe-input{width:80px;border:1px solid #969696;border-radius:5px;height:2rem;font-size:.9rem;font-family:"Lucida Console",Monaco,monospace;margin:1rem;text-align:center;background-color:#f5f5f5}.gogo-load-css .gogocarto-container #modal-iframe #iframe-code{width:100%;padding:1rem;background-color:#f1f1f1;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;box-shadow:none;font-family:"Lucida Console",Monaco,monospace;border:1px dashed #c1c1c1;margin-bottom:1rem}.gogo-load-css .gogocarto-container #modal-image{width:90%}.gogo-load-css .gogocarto-container #modal-image .modal-content{padding:0;overflow:auto}.gogo-load-css .gogocarto-container #modal-image img{width:100%}.gogo-load-css .gogocarto-container .shadow-bottom{width:100%;margin-right:0;height:8px;position:absolute;z-index:4;left:0;opacity:1;border-top:1px solid rgba(0,0,0,.6);background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.4)),to(rgba(0,0,0,0)));-webkit-mask-box-image:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(0,0,0,0)),color-stop(.5,rgba(0,0,0,.8)),color-stop(1,rgba(0,0,0,0)))}.gogo-load-css .gogocarto-container .custom-scroll-bar::-webkit-scrollbar-track,.gogo-load-css .gogocarto-container .leaflet-routing-alt::-webkit-scrollbar-track,.gogo-load-css .gogocarto-container .leaflet-routing-error::-webkit-scrollbar-track,.gogo-load-css .gogocarto-container .leaflet-routing-geocoders::-webkit-scrollbar-track{background-color:#f6f6f6;border:1px solid #f0f0f0}.gogo-load-css .gogocarto-container .custom-scroll-bar::-webkit-scrollbar,.gogo-load-css .gogocarto-container .leaflet-routing-alt::-webkit-scrollbar,.gogo-load-css .gogocarto-container .leaflet-routing-error::-webkit-scrollbar,.gogo-load-css .gogocarto-container .leaflet-routing-geocoders::-webkit-scrollbar{width:12px}.gogo-load-css .gogocarto-container .custom-scroll-bar::-webkit-scrollbar-thumb,.gogo-load-css .gogocarto-container .leaflet-routing-alt::-webkit-scrollbar-thumb,.gogo-load-css .gogocarto-container .leaflet-routing-error::-webkit-scrollbar-thumb,.gogo-load-css .gogocarto-container .leaflet-routing-geocoders::-webkit-scrollbar-thumb{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;border:3px solid #f6f6f6;background-color:#C5C5C5}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categories-content ul::-webkit-scrollbar-track,.gogo-load-css .gogocarto-container .custom-scroll-bar-light::-webkit-scrollbar-track,.gogo-load-css .gogocarto-container .leaflet-control-layers-list::-webkit-scrollbar-track{background-color:#f6f6f6;border:1px solid #f0f0f0}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categories-content ul::-webkit-scrollbar,.gogo-load-css .gogocarto-container .custom-scroll-bar-light::-webkit-scrollbar,.gogo-load-css .gogocarto-container .leaflet-control-layers-list::-webkit-scrollbar{width:7px}.gogo-load-css .gogocarto-container #directory-menu .sub-categories .sub-categories-content ul::-webkit-scrollbar-thumb,.gogo-load-css .gogocarto-container .custom-scroll-bar-light::-webkit-scrollbar-thumb,.gogo-load-css .gogocarto-container .leaflet-control-layers-list::-webkit-scrollbar-thumb{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;background-color:#c3c3c3}.gogo-load-css .gogocarto-container #gogo-custom-popup{position:absolute;bottom:20px;z-index:500;right:10px;box-shadow:0 2px 6px rgba(0,0,0,.3);padding:5px 45px 5px 30px;line-height:1.7;max-width:400px;color:#fff;font-size:.9rem;border-radius:5px}[class*=" gogo-icon-"]:before,[class^=gogo-icon-]:before,[data-icon]:before{font-family:gogocarto!important;font-style:normal!important;font-weight:400!important;font-variant:normal!important;text-transform:none!important;speak:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.gogo-load-css .gogocarto-container #gogo-custom-popup #btn-close-custom-popup{font-size:1rem;cursor:pointer;position:absolute;right:18px;margin:0;top:14px}@media only screen and (max-width:600px){.gogo-load-css .gogocarto-container{font-size:12px}}.gogo-load-css .gogocarto-container #directory-menu{position:absolute;height:100%}.gogo-load-css .gogocarto-container #directory-content{position:relative;background-color:#9e9e9e;overflow:hidden;-webkit-box-flex:1 auto;-moz-box-flex:1 auto;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:column nowrap;-webkit-flex-flow:column nowrap;flex-flow:column nowrap}.gogo-load-css .gogocarto-container h1{font-size:2.5rem;text-align:center;margin-top:.5rem}@media screen and (min-width:600px){.gogo-load-css .gogocarto-container h1{font-size:3.5rem}}@font-face{font-family:gogocarto;src:url(fonts/gogocarto.eot);src:url(fonts/gogocarto.eot?#iefix) format("embedded-opentype"),url(fonts/gogocarto.woff) format("woff"),url(fonts/gogocarto.ttf) format("truetype"),url(fonts/gogocarto.svg#gogocarto) format("svg");font-weight:400;font-style:normal}[data-icon]:before{content:attr(data-icon)}.gogo-icon-marker:before{content:"\61"}.gogo-icon-account-circle:before{content:"\62"}.gogo-icon-delete:before{content:"\63"}.gogo-icon-description:before{content:"\64"}.gogo-icon-star-full:before{content:"\65"}.gogo-icon-icon-copy-hours:before{content:"\66"}.gogo-icon-starcircle:before{content:"\67"}.gogo-icon-no-eye:before{content:"\68"}.gogo-icon-eye:before{content:"\69"}.gogo-icon-attention:before{content:"\6a"}.gogo-icon-mail:before{content:"\6b"}.gogo-icon-marker-symbol:before{content:"\6c"}.gogo-icon-phone:before{content:"\6d"}.gogo-icon-add-circle:before{content:"\6e"}.gogo-icon-plus-circle-1:before{content:"\6f"}.gogo-icon-clear:before{content:"\70"}.gogo-icon-redo:before{content:"\71"}.gogo-icon-day:before{content:"\72"}.gogo-icon-exclamation-1:before{content:"\73"}.gogo-icon-edit:before{content:"\74"}.gogo-icon-menu:before{content:"\75"}.gogo-icon-directions:before{content:"\77"}.gogo-icon-layers:before{content:"\78"}.gogo-icon-locate:before{content:"\7a"}.gogo-icon-material-design-icons-1:before{content:"\41"}.gogo-icon-people:before{content:"\42"}.gogo-icon-add-element:before{content:"\43"}.gogo-icon-internet:before{content:"\44"}.gogo-icon-star-empty:before{content:"\45"}.gogo-icon-share-alt:before{content:"\46"}.gogo-icon-expand:before{content:"\47"}.gogo-icon-angle-right:before{content:"\48"}.gogo-icon-arrow-circle-down:before{content:"\49"}.gogo-icon-facebook:before{content:"\4a"}.gogo-icon-external-link:before{content:"\4b"}.gogo-icon-gplus:before{content:"\4c"}.gogo-icon-home:before{content:"\4d"}.gogo-icon-info:before{content:"\4e"}.gogo-icon-list:before{content:"\4f"}.gogo-icon-lock:before{content:"\50"}.gogo-icon-plus-circle:before{content:"\51"}.gogo-icon-search:before{content:"\52"}.gogo-icon-close:before{content:"\53"}.gogo-icon-user-plus:before{content:"\54"}.gogo-icon-users:before{content:"\55"}.gogo-icon-unlock:before{content:"\56"}.gogo-icon-yahoo:before{content:"\57"}.gogo-icon-twitter:before{content:"\58"}.gogo-icon-partner-3:before{content:"\59"}.gogo-icon-map:before{content:"\5a"}.gogo-icon-ellipsis:before{content:"\30"}.gogo-icon-moderation:before{content:"\79"}.gogo-icon-filters-1:before{content:"\37"}.gogo-icon-vote:before{content:"\76"}.gogo-icon-marker-simple-1:before{content:"\31"}.gogo-icon-marker-simple:before{content:"\32"}.gogo-icon-stamp-1:before{content:"\36"}.gogo-icon-stamp-2:before{content:"\38"}.gogo-icon-communs:before{content:"\34"}.gogo-icon-printemps:before{content:"\33"}.gogo-icon-chevron-left:before{content:"\35"}.gogo-icon-chevron-right:before{content:"\39"}
\ No newline at end of file
diff --git a/dist/gogocarto.min.css.gz b/dist/gogocarto.min.css.gz
index 7cae95304638cd6a65484c6b66f7f0acc39f305b..66848a22be81b0b0599e9734c14440cd9dfa1081 100755
GIT binary patch
literal 28656
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%0Am!
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
MKc1c`EcQMF05xgNdjJ3c
literal 28575
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