{"css":"*#dm *.dmBody a.span.textonly{\ncolor:rgb(255,255,255) !important}\n*#dm *.dmBody a.span.textonly{\ncolor:rgb(255,255,255) !important}\n*#dm *.dmBody div.u_1694205906{\nbackground-color:rgba(0,0,0,0) !important}\n*#dm *.dmBody div.dmPopupInner{\nbackground-color:rgb(255,255,255) !important;\nborder-style:solid !important;\nborder-width:0 !important;\n-webkit-box-shadow:0 0 10px rgba(0,0,0,0.30) !important;\nbox-shadow:0 0 10px rgba(0,0,0,0.30) !important;\n-moz-box-shadow:0 0 10px rgba(0,0,0,0.30) !important;\nborder-radius:10px !important;\n-moz-border-radius:10px !important;\n-webkit-border-radius:10px !important;\nbackground-image:none !important;\nbackground-repeat:no-repeat !important;\nbackground-size:cover !important;\nbackground-position:top right !important}\n*#dm *.dmBody div.u_dm_content{\nbackground-image:none !important}\n*#dm *.dmBody div.u_1364864902{\nline-height:normal !important;\nfont-family:roboto !important}\n*#dm *.dmBody h1.u_1413701372{\nline-height:normal !important}\n*#dm *.dmBody *.allWrapper *.dmPopupInner{\nborder-style:solid !important;\nborder-width:4px !important}","additionalWidgetCss":"/**/@media(max-width:767px){body.dmRoot div[dmtemplateid]:not([dmtemplateid=SlideRightTopFloatM]) .dmHeader .multilingualWidget{position:absolute;top:14px;left:13px;margin-top:0}body.dmRoot div[dmtemplateid][dmtemplateid=SlideRightTopFloatM] .dmHeader .multilingualWidget{position:absolute;top:5px;right:17px}\n}@media(min-width:768px) and (max-width:1024px){body:not(.responsiveTablet) #dm div[dmtemplateid=StandardLayoutMultiT] .dmHeader .multilingualWidget{position:absolute!important;top:5px!important;right:17px!important;left:initial!important}\n}@media(max-width:767px){body.dmRoot .dmHeader .displayHidden-inner .multilingualWidget{top:0!important}}#dm_content div.dmRespCol div.multilingualWidget,#hcontainer div.dmRespCol div.multilingualWidget{width:auto!important;display:table!important}\n.multilingualWidget.displayNone{display:none!important}.multilingualWidget>div{position:relative}.multilingualWidget{clear:both;margin:0;vertical-align:top;display:table!important;font-size:0;font-family:sans-serif}\n.multilingualWidget .language{color:#888;display:inline-block}.multilingualWidget .language a{text-align:center;display:inline-block;color:inherit;border:#dadada 1px solid;background-color:#fff}.multilingualWidget .language a img{width:24px;height:26px;min-width:24px;min-height:26px}\n.multilingualWidget .language a span{display:none;line-height:initial}.multilingualWidget .language a span.name{margin-top:5px;margin-left:7px;font-size:12px;font-weight:400;text-transform:capitalize}\n.multilingualWidget .language a span.short-label{font-size:12px}.multilingualWidget .language a:after{line-height:initial}.multilingualWidget.open .current-language a:after{transform:rotate(-180deg)}.multilingualWidget .current-language a:after{transition:transform .2s}\n.multilingualWidget.dropdown .language{width:100%}.multilingualWidget.dropdown .language a{display:block;padding:1px 5px}.multilingualWidget.dropdown .language.other-languages{position:absolute;z-index:800;max-height:0;overflow:hidden;transition:max-height .1s ease-in-out}\n.multilingualWidget.dropdown .language.other-languages a{border-top:0!important}.multilingualWidget.dropdown .current-language{position:relative}.multilingualWidget.dropdown .current-language span.name{padding-right:25px}\n.multilingualWidget.dropdown .dm-icon{font-size:9px;display:inline-block;position:absolute;top:46%;transform:translateY(-50%);transition:transform .2s;right:8px}.multilingualWidget.dropdown.open .dm-icon{transform:rotate(-180deg) translateY(50%)}\n.multilingualWidget.dropdown.open .other-languages{display:block;max-height:300px}.multilingualWidget.dropdown .other-languages,.multilingualWidget.dropdown.flag-only .dm-icon,.multilingualWidget.inline span,.multilingualWidget.no-flag a img{display:none}\n.multilingualWidget.dropdown.flag-only a{border:transparent 1px solid;background-color:transparent}.multilingualWidget.dropdown.flag-only.open .language a{background-color:rgba(0,0,0,.3);border:#dadada 1px solid}\n.multilingualWidget.dropdown.long-label a{text-align:left;padding:2px 0 2px 5px;position:relative;box-sizing:border-box}.multilingualWidget.dropdown.long-label a span.name,.multilingualWidget.inline.flag-only .language,.multilingualWidget.inline.short-label.no-flag span.short-label{display:inline-block}\n.multilingualWidget.dropdown.long-label.no-flag a{padding:7px 10px 9px}.multilingualWidget.dropdown.long-label.no-flag a span.name,.multilingualWidget.dropdown.short-label.no-flag a span.short-label{margin:0;display:inline-block}\n.multilingualWidget.dropdown.short-label.no-flag a{padding:8px 22px 9px 10px;font-size:12px;min-height:32px;height:auto;box-sizing:border-box}.multilingualWidget.dropdown.short-label.no-flag .current-language a:after{top:12px}\n.multilingualWidget.short-label span.short-label{text-transform:uppercase}.multilingualWidget.inline.flag-only a{padding:2px 5px;height:32px;box-sizing:border-box}.multilingualWidget.inline.flag-only .current-language a{box-shadow:inset 0 0 8px 0 rgba(0,0,0,.6);border-right:0;border-right-width:0!important;border-right-color:transparent!important;border-right-style:none!important}\n.multilingualWidget.inline.flag-only .other-languages a:not(:last-child){border-right-width:0!important;border-right-color:transparent!important;border-right-style:none!important}.multilingualWidget.inline.flag-only .dm-icon,.multilingualWidget.inline.short-label.no-flag .dm-icon{display:none}\n.multilingualWidget.inline.short-label.no-flag .current-language a{padding-right:0;border-right-width:0!important;border-right-color:transparent!important;border-right-style:none!important}.multilingualWidget.inline.short-label.no-flag .current-language a span.short-label{font-weight:700}\n.multilingualWidget.inline.short-label.no-flag .other-languages a{border-left-color:transparent!important;border-left-width:0!important;border-left-style:none!important}.multilingualWidget.inline.short-label.no-flag .other-languages a:not(:last-child){padding-right:0;border-right-color:transparent!important;border-right-width:0!important;border-right-style:none!important}\n.multilingualWidget.inline.short-label.no-flag a{position:relative;padding:8px 10px;font-size:12px;min-height:32px;height:auto;text-decoration:none}.multilingualWidget.inline.short-label.no-flag a:after{content:\"/\";position:absolute;top:8px;right:-7px;z-index:1;pointer-events:none}\n.multilingualWidget.inline.short-label.no-flag a:hover .short-label{text-decoration:underline}.multilingualWidget.inline.short-label.no-flag .other-languages a:last-child:after{content:\"\"}/**/.dmNewParagraph[data-version] .text-align-left{text-align:left!important}.dmNewParagraph[data-version] .text-align-center{text-align:center!important}.dmNewParagraph[data-version] .text-align-right{text-align:right!important}\n.dmNewParagraph[data-version] .text-align-justify{text-align:justify!important}.dmNewParagraph[data-version] .ql-indent-1{padding:0 1em;padding-inline-end:0;padding-inline-start:3em}.dmNewParagraph[data-version] .ql-indent-2{padding:0 2em;padding-inline-end:0;padding-inline-start:6em}\n.dmNewParagraph[data-version] .ql-indent-3{padding:0 3em;padding-inline-end:0;padding-inline-start:9em}.dmNewParagraph[data-version] .ql-indent-4{padding:0 4em;padding-inline-end:0;padding-inline-start:12em}\n.dmNewParagraph[data-version] .ql-indent-5{padding:0 5em;padding-inline-end:0;padding-inline-start:15em}.dmNewParagraph[data-version] .ql-indent-6{padding:0 6em;padding-inline-end:0;padding-inline-start:18em}\n.dmNewParagraph[data-version] .ql-indent-7{padding:0 7em;padding-inline-end:0;padding-inline-start:21em}.dmNewParagraph[data-version] .ql-indent-8{padding:0 8em;padding-inline-end:0;padding-inline-start:24em}\n.dmNewParagraph[data-version] .ql-indent-9{padding:0 9em;padding-inline-end:0;padding-inline-start:27em}.dmNewParagraph[data-version]{line-height:initial}.dmNewParagraph[data-version] [class*=size-]{width:auto!important;height:auto!important}\n.dmNewParagraph[data-version] h1,.dmNewParagraph[data-version] h2,.dmNewParagraph[data-version] h3,.dmNewParagraph[data-version] h4,.dmNewParagraph[data-version] h5,.dmNewParagraph[data-version] h6,.dmNewParagraph[data-version] ol,.dmNewParagraph[data-version] p,.dmNewParagraph[data-version] ul{margin-top:0;margin-bottom:0}\n.dmNewParagraph[data-version] ol,.dmNewParagraph[data-version] ul{padding:0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.dmNewParagraph[data-version] ol>li,.dmNewParagraph[data-version] ul>li{list-style-type:none;text-indent:-1.5em;margin:0 1em;margin-inline-end:0;margin-inline-start:2em}\n.dmNewParagraph[data-version] ol>li:before,.dmNewParagraph[data-version] ul>li:before{min-width:1em;display:inline-block;margin-right:.5em;margin-inline-start:0;margin-inline-end:.5em;text-align:right;text-align:end}\n.dmNewParagraph[data-version] ul .ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-1}.dmNewParagraph[data-version] ul .ql-indent-1:before{font-weight:700;content:\"○\"}\n.dmNewParagraph[data-version] ul .ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-2}.dmNewParagraph[data-version] ul .ql-indent-2:before,.dmNewParagraph[data-version] ul .ql-indent-3:before,.dmNewParagraph[data-version] ul .ql-indent-4:before,.dmNewParagraph[data-version] ul .ql-indent-5:before,.dmNewParagraph[data-version] ul .ql-indent-6:before,.dmNewParagraph[data-version] ul .ql-indent-7:before,.dmNewParagraph[data-version] ul .ql-indent-8:before,.dmNewParagraph[data-version] ul .ql-indent-9:before{font-weight:700;content:\"■\"}\n.dmNewParagraph[data-version] ul .ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-3}.dmNewParagraph[data-version] ul .ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9;counter-increment:list-4}\n.dmNewParagraph[data-version] ul .ql-indent-5{counter-reset:list-6 list-7 list-8 list-9;counter-increment:list-5}.dmNewParagraph[data-version] ul .ql-indent-6{counter-reset:list-7 list-8 list-9;counter-increment:list-6}\n.dmNewParagraph[data-version] ul .ql-indent-7{counter-reset:list-8 list-9;counter-increment:list-7}.dmNewParagraph[data-version] ul .ql-indent-8{counter-reset:list-9;counter-increment:list-8}.dmNewParagraph[data-version] ul .ql-indent-9{counter-reset:list-10 list-9;counter-increment:list-9}\n.dmNewParagraph[data-version] ul>li:before{font-weight:700;content:\"•\";font-family:Arial}.dmNewParagraph[data-version] ul.custom-list-1>li:not([class^=ql-indent-]):not([class*=\" ql-indent-\"]):before{content:\"○\";transform:scale(1);transform-origin:center right}\n.dmNewParagraph[data-version] ul.custom-list-2>li:not([class^=ql-indent-]):not([class*=\" ql-indent-\"]):before{content:\"★\";transform:scale(.7);transform-origin:center right}\n.dmNewParagraph[data-version] ul.custom-list-3>li:not([class^=ql-indent-]):not([class*=\" ql-indent-\"]):before{content:\"➞\";transform:scale(.8);transform-origin:center right}\n.dmNewParagraph[data-version] ul.custom-list-4>li:not([class^=ql-indent-]):not([class*=\" ql-indent-\"]):before{content:\"+\";transform:scale(.7);transform-origin:center right}\n.dmNewParagraph[data-version] ul.custom-list-5>li:not([class^=ql-indent-]):not([class*=\" ql-indent-\"]):before{content:\"-\";transform:scale(.7);transform-origin:center right}\n.dmNewParagraph[data-version] ul.custom-list-6>li:not([class^=ql-indent-]):not([class*=\" ql-indent-\"]):before{content:\"✓\";transform:scale(.8);transform-origin:center right}\n.dmNewParagraph[data-version] ul.custom-list-7>li:not([class^=ql-indent-]):not([class*=\" ql-indent-\"]):before{content:\"✗\";transform:scale(.8);transform-origin:center right}\n.dmNewParagraph[data-version] ol .ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-1}.dmNewParagraph[data-version] ol .ql-indent-1:before{content:counter(list-1,lower-alpha) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-2}.dmNewParagraph[data-version] ol .ql-indent-2:before{content:counter(list-2,lower-roman) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-3}.dmNewParagraph[data-version] ol .ql-indent-3:before{content:counter(list-3,decimal) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9;counter-increment:list-4}.dmNewParagraph[data-version] ol .ql-indent-4:before{content:counter(list-4,lower-alpha) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-5{counter-reset:list-6 list-7 list-8 list-9;counter-increment:list-5}.dmNewParagraph[data-version] ol .ql-indent-5:before{content:counter(list-5,lower-roman) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-6{counter-reset:list-7 list-8 list-9;counter-increment:list-6}.dmNewParagraph[data-version] ol .ql-indent-6:before{content:counter(list-6,decimal) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-7{counter-reset:list-8 list-9;counter-increment:list-7}.dmNewParagraph[data-version] ol .ql-indent-7:before{content:counter(list-7,lower-alpha) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-8{counter-reset:list-9;counter-increment:list-8}.dmNewParagraph[data-version] ol .ql-indent-8:before{content:counter(list-8,lower-roman) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-9{counter-reset:list-10 list-9;counter-increment:list-9}.dmNewParagraph[data-version] ol .ql-indent-9:before{content:counter(list-9,decimal) \". \"}\n.dmNewParagraph[data-version] ol li{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-0}.dmNewParagraph[data-version] ol li:before{content:counter(list-0,decimal) \". \"}\n.dmNewParagraph[data-version] a{vertical-align:initial}@media(min-width:768px) and (max-width:1024px){.dmNewParagraph[data-version] .t-text-align-left{text-align:left!important}.dmNewParagraph[data-version] .t-text-align-center{text-align:center!important}\n.dmNewParagraph[data-version] .t-text-align-right{text-align:right!important}.dmNewParagraph[data-version] .t-text-align-justify{text-align:justify!important}}@media(max-width:767px){.dmRoot .dmNewParagraph[data-version] .m-text-align-left{text-align:left!important}\n.dmRoot .dmNewParagraph[data-version] .m-text-align-center{text-align:center!important}.dmRoot .dmNewParagraph[data-version] .m-text-align-right{text-align:right!important}.dmRoot .dmNewParagraph[data-version] .m-text-align-justify{text-align:justify!important}\n}.inlineBindingLink{color:inherit!important;text-decoration:inherit!important}/**/.imageWidget{position:relative}.imageWidget a,.imageWidget span.image-caption{font-style:italic;text-align:center}.imageWidget a[data-caption]::after,.imageWidget span[data-caption]::after{content:attr(data-caption);display:block;line-height:100%}\n.imageWidget.with-caption a::after,.imageWidget.with-caption span.image-caption::after{margin-top:12px}.imageWidget img[width][height]{height:auto}[data-flex-site] #fcontainer .imageWidget:after,[data-flex-site] #flex-footer .imageWidget:after,[data-flex-site] #flex-header .imageWidget:after{content:none}\n[data-flex-site] #fcontainer .imageWidget:before,[data-flex-site] #flex-footer .imageWidget:before,[data-flex-site] #flex-header .imageWidget:before{font-size:80px;transform:none}.imageWidget.hover img.hover-image,.imageWidget:hover img.hover-image{display:initial}\n.imageWidget.hover.hasHover img:not(.hover-image),.imageWidget:hover.hasHover img:not(.hover-image){display:none!important}.imageWidget img.hover-image,.imageWidget img.logo-on-scroll{display:none}/**/.graphicWidget{width:200px;height:200px;margin:10px auto;text-align:center}.graphicWidget svg.svg{width:100%;height:100%;color:#000;fill:#000}.graphicWidgetV2{width:60px;height:60px}.graphicWidgetV3{font-size:0}","isHomePage":false,"customwidgetsdata":[{"widgetId":"d1ee5d5bf037471ea1770683731e577a","version":22,"js":"JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICAgICQuZ2V0U2NyaXB0KCdodHRwczovL3dpZGdldC5oaWJ1LnVzL3N0YXRpYy9qcy9pbmRleC5qcycpCiAgICAuZG9uZShmdW5jdGlvbigpewogICAgICAgIGRtQVBJLnJ1bk9uUmVhZHkoJ2hpYnVfaGVhZGVyX3Jldmlld3MnLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHdpbmRvdy5yZW5kZXJBcHAoKTsKICAgICAgICB9KTsKICAgICAgICAKICAgIH0pCiAgICAuZmFpbChmdW5jdGlvbigpewogICAgICAgIGNvbnNvbGUubG9nKCJmYWlsZWQgdG8gbG9hZGVkIGhlYWRlciByZXZpZXdzIGpzIGZpbGUiKQogICAgfSk7Cn0pCgo=","css":".headerWidget {\n min-height:22px;\n}\n","strings":{}},{"widgetId":"7b6cfbac88324cffbaaf57354cd7a334","version":227,"js":"dmFyIGVtcHR5TGlzdFBsYWNlSG9sZGVyPSI8c3BhbiBzdHlsZT0nbWluLWhlaWdodDoyMHB4JyBjbGFzcz0nZWRpdG9yT25seUluZm8gaW5FZGl0b3InIGRhdGEtbm9zbmlwcGV0PlRoaXMgbGlzdCBoYXMgbm8gZGF0YSBpbiBZZXh0LiBUaGlzIG1lc3NhZ2Ugb25seSBhcHBlYXJzIGluIHRoZSBlZGl0b3IuPC9zcGFuPiIKCi8qIGZpbmQgeWV4dCBzcmMgKi8KdmFyIGZpbmRZZXh0U3JjID0gZnVuY3Rpb24oKXsKICAgIHZhciAga2V5RXhwID0gbmV3IFJlZ0V4cCgvc3JjPSIoLio/KSIvKTsKICAgIGlmIChkYXRhLmNvbmZpZy5zY3JpcHQuaW5jbHVkZXMoJ2xvY2F0aW9uX2lkJykpIHsKICAgICAgICBkYXRhLmNvbmZpZy5zY3JpcHQgPSBkYXRhLmNvbmZpZy5zY3JpcHQucmVwbGFjZSgnbG9jYXRpb25faWQnLCAnZW50aXR5X2lkJyk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0ga2V5RXhwLmV4ZWMoZGF0YS5jb25maWcuc2NyaXB0KTsKICAgIGlmKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID09IDIpewogICAgICAgIHdpbmRvdy55ZXh0U2NyaXB0U3JjPXJlc3VsdFsxXTsKICAgICAgICByZXR1cm4gcmVzdWx0WzFdOwogICAgfWVsc2V7CiAgICAgICAgcmV0dXJuIHdpbmRvdy55ZXh0U2NyaXB0U3JjOwogICAgfQp9Cgp3aW5kb3cueWV4dExvYWRlZENhbGxiYWNrID0gZnVuY3Rpb24oeWV4dERhdGEpIHsKICAgICQoJy53cm9uZ1NjcmlwdEVycm9yJykucmVtb3ZlQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICB3aW5kb3cueWV4dEluaXRpYWxpemVkID0gdHJ1ZTsKICAgIAogICAgaWYoeWV4dERhdGEpIHsKICAgICAgICB3aW5kb3cuX3lleHREYXRhID0geWV4dERhdGE7ICAgIAogICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyAiWWV4dCBsb2FkZWQgYnV0IG5vIGRhdGEgd2FzIHBhc3NlZCI7CiAgICB9Cn0KCmZ1bmN0aW9uIGxvYWRZZXh0U2NyaXB0KHNyYyl7CiAgICAkKGVsZW1lbnQpLmZpbmQoJy53cm9uZ1NjcmlwdEVycm9yJykucmVtb3ZlQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICB2YXIgeWV4dFNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkLXlleHQtc2NyaXB0Jyk7CiAgICBpZiAoeWV4dFNjcmlwdCkgewogICAgICAgIHlleHRTY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh5ZXh0U2NyaXB0KTsKICAgIH0KICAgIHlleHRTY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgIHlleHRTY3JpcHQuY2hhcnNldCA9ICd1dGYtOCc7CiAgICB5ZXh0U2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgIAogICAgc3JjICs9ICImY2FsbGJhY2s9eWV4dExvYWRlZENhbGxiYWNrIgogICAgCiAgICB5ZXh0U2NyaXB0LnNyYyA9IHNyYzsKICAgIHlleHRTY3JpcHQuaWQgPSAnZC15ZXh0LXNjcmlwdCc7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHlleHRTY3JpcHQpOwp9CgovKiBsb2FkIHlleHQgc2NyaXB0ICovCnZhciBsb2FkWWV4dCA9IGZ1bmN0aW9uKGZvcmNlUmVmcmVzaCkgewogICAgLy8gTWFrZSBzdXJlIHdlIGNhbGwgWWV4dCBvbmx5IG9uY2UKICAgIGlmKHdpbmRvdy55ZXh0SW5pdGlhbGl6ZWQgJiYgIWZvcmNlUmVmcmVzaCl7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBzdGFydEludGVydmFsVG9XYWl0QW5kTG9hZFdpZGdldHMoZGF0YS5jb25maWcudHlwZSk7CiAgICAKICAgIC8vIFdlIGV4dHJhY3QgdGhlICJzcmMiIGF0dHJpYnV0ZSBmcm9tIHRoZSBzdHJpbmcgcHJvdmlkZWQgaW5hICBzYWZlIHdheQogICAgLy8gVGhlIGZvcm1hdCB3ZSBleHBlY3QgaXMgdGhlIGZvbGxvd2luZzoKICAgCiAgICB0cnl7CiAgICAgICAgdmFyIHNyYyA9IGZpbmRZZXh0U3JjKCk7CiAgICAgICAgaWYoc3JjKXsKCiAgICAgICAgICAgIGxvYWRZZXh0U2NyaXB0KHNyYyk7CiAgICAgICAgICAgIAogICAgICAgIH0gZWxzZSBpZihkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgICAgIC8vICQoZG9jdW1lbnQpLmxvYWQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgLy8gICAgIGlmKCF3aW5kb3cuX3lleHREYXRhKSB7CiAgICAgICAgICAgIC8vICAgICAgICAgJChlbGVtZW50KS5maW5kKCcud3JvbmdTY3JpcHRFcnJvcicpLmFkZENsYXNzKCdoYXNFcnJvcicpOyAgICAKICAgICAgICAgICAgLy8gICAgIH0KICAgICAgICAgICAgLy8gfSkKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vICQoZWxlbWVudCkuZmluZCgnLndyb25nU2NyaXB0RXJyb3InKS5hZGRDbGFzcygnaGFzRXJyb3InKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICB9IGNhdGNoKGV4cCkgewogICAgICAgIC8vICQoZWxlbWVudCkuZmluZCgnLndyb25nU2NyaXB0JykuYWRkQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICAgICAgY29uc29sZS5sb2coZXhwKQogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICBpZigkKCcubXVsdGlwbGVZZXh0RXJyb3InKS5sZW5ndGggPiAxKXsKICAgICAgICAgICAgICQoZWxlbWVudCkuZmluZCgnLm11bHRpcGxlWWV4dEVycm9yJykuYWRkQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfWVsc2UgaWYoZGF0YS5jb25maWcudHlwZSA9PT0gJ25vbmUnKXsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCcuZWRpdG9yT25seUluZm8nKS5hZGRDbGFzcygnaW5FZGl0b3InKTsgCiAgICAgICAgfQogICAgfQp9CgovKiByZWZyZXNoIHlleHQgc2NyaXB0ICovCndpbmRvdy5yZWZyZXNoWWV4dCA9IGZ1bmN0aW9uKCl7CiAgICBsb2FkWWV4dCh0cnVlKTsKfQoKLy9mdW5jdGlvbiBmb3IgT21uaXR1cmUgdHJhY2tpbmcKd2luZG93Ll90cmFja0NvbnZXaWRnZXRDbGlja0V2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lKSB7CiAgICBpZih0eXBlb2YoSEFGKT09PSJvYmplY3QiKXsKICAgICAgICBIQUYuT21UcmFja2luZy5vbkNNQ2xpY2soZXZlbnROYW1lKSAKICAgIH0KICAgIHJldHVybjsKfQoKLyogZHJhdyB5ZXh0IG1hcCAqLwp2YXIgZHJhd01hcCA9IGZ1bmN0aW9uKHlleHREYXRhKXsKICAgIHZhciB6b29tID0gZGF0YS5jb25maWcubWFwWm9vbTsKICAgIHZhciB5RGF0YSA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXM7CiAgICB2YXIgYWRkcmVzc1F1ZXJ5ID0geURhdGFbJ2FkZHJlc3MxJ10gKyAiICIgKyB5RGF0YVsnYWRkcmVzczInXSArICIgIiArIHlEYXRhWydjaXR5J10gKyAiICIgKyB5RGF0YVsnc3RhdGUnXSArICIgIiArIHlEYXRhWyd6aXAnXTsKICAgIGRtQVBJLmRyYXdNYXAoe2FkZHJlc3NRdWVyeTogYWRkcmVzc1F1ZXJ5LCB6b29tOiB6b29tLCBjb250YWluZXI6ICQoZWxlbWVudCkuZmluZCgnLnlleHRNYXAnKX0pOwp9CgoKCnZhciBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlciA9IGZ1bmN0aW9uKG51bSxjYikgewogICAgaWYgKCFjYikKICAgICAgICBjYiA9IGZ1bmN0aW9uKCl7cmV0dXJufQogICAgaWYoZGF0YS5jb25maWcuZm9ybWF0UGhvbmUpeyAKICAgICAgICB2YXIgczIgPSAoIiIrbnVtKS5yZXBsYWNlKC9cRC9nLCAnJyk7CiAgICAgICAgdmFyIG0gPSBzMi5tYXRjaCgvXihcZHszfSkoXGR7M30pKFxkezR9KSQvKTsKICAgICAgICB2YXIgZm9ybWF0dGVkID0gICghbSkgPyBudWxsIDogIigiICsgbVsxXSArICIpICIgKyBtWzJdICsgIi0iICsgbVszXTsKICAgICAgICBjYihmb3JtYXR0ZWQpOwogICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7CiAgICB9IGVsc2UgewogICAgICAgIGNiKG51bSk7CiAgICAgICAgcmV0dXJuIG51bTsKICAgIH0KfQoKdmFyIGRpc3BsYXlUZXh0ZExpc3QgPSBmdW5jdGlvbih0eXBlLHlleHREYXRhLGZpcnN0T25seSkgewogICAgdmFyIGxpc3QgPSAiIjsKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbdHlwZV0pIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbdHlwZV0KICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSBmYWxzZQogICAgfQogICAgCiAgICBpZih5ZXh0QXR0ICYmIEFycmF5LmlzQXJyYXkoeWV4dEF0dCkpIHsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8IHlleHRBdHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKHlleHRBdHRbaV0gPT09ICdBbmRyb2lkIFBheScpIHsKICAgICAgICAgICAgICAgIGxpc3QgKz0gJzxsaT5Hb29nbGUgUGF5PC9saT4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgKyB5ZXh0QXR0W2ldICsgJzwvbGk+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyMnICsgdHlwZSArICdMaXN0JykuaHRtbChsaXN0KTsKICAgIH0gZWxzZSBpZiAoeWV4dEF0dCkgewogICAgICAgIHZhciB5ZXh0QXR0ID0geWV4dEF0dC5zcGxpdCgiLCAiKTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8IHlleHRBdHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgKyB5ZXh0QXR0W2ldICsgJzwvbGk+JzsKICAgICAgICB9CiAgICAgICAgJChlbGVtZW50KS5maW5kKCcjJyArIHR5cGUgKyAnTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgIH0KICAgIAogICAgCn0KCnZhciAgZGlzcGxheVNwZWNpYWx0aWVzID0gZnVuY3Rpb24oeWV4dERhdGEpewogICAgdmFyIGxpc3QgPSAiIjsKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbInNwZWNpYWx0aWVzIl0pIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbInNwZWNpYWx0aWVzIl0KICAgIH0gZWxzZSBpZiAoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1sic3BlY2lhbGl0aWVzIl0pIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbInNwZWNpYWxpdGllcyJdCiAgICB9IGVsc2UgewogICAgICAgIHZhciB5ZXh0QXR0ID0gZmFsc2UKICAgIH0KICAgIAogICAgaWYoeWV4dEF0dCAmJiBBcnJheS5pc0FycmF5KHlleHRBdHQpKSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnI3NwZWNpYWx0aWVzTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKHlleHRBdHQpIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHRBdHQuc3BsaXQoIiwgIik7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnI3NwZWNpYWx0aWVzTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgIH0KfQoKdmFyIGRpc3BsYXlIb3VycyA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGVdKSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGVdCiAgICB9IGVsc2UgewogICAgICAgIHZhciB5ZXh0QXR0ID0gZmFsc2UKICAgIH0KICAgIAogICAgaWYoeWV4dEF0dCAmJiBBcnJheS5pc0FycmF5KHlleHRBdHQpKSB7CiAgICAgICAgZm9yKHZhciBpPTA7aSA8IHlleHRBdHQubGVuZ3RoO2krKykgewogICAgICAgICAgICB2YXIgaW5kZXhFbmREYXkgPSB5ZXh0QXR0W2ldLmxhc3RJbmRleE9mKCdkYXkgJykgKyAzOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGxlZnRTaWRlID0geWV4dEF0dFtpXS5zdWJzdHIoMCxpbmRleEVuZERheSkucmVwbGFjZSgiTW9uZGF5IiwiTW9uIikucmVwbGFjZSgiVHVlc2RheSIsIlR1ZSIpLnJlcGxhY2UoIldlZG5lc2RheSIsIldlZCIpLnJlcGxhY2UoIlRodXJzZGF5IiwiVGh1IikucmVwbGFjZSgiRnJpZGF5IiwiRnJpIikucmVwbGFjZSgiU2F0dXJkYXkiLCJTYXQiKS5yZXBsYWNlKCJTdW5kYXkiLCJTdW4iKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByaWdodFNpZGUgPSB5ZXh0QXR0W2ldLnN1YnN0cihpbmRleEVuZERheSArIDEpCiAgICAgICAgICAgIAogICAgICAgICAgICBsaXN0ICs9ICc8ZGl2IGNsYXNzPSJyb3ciPjxkaXYgY2xhc3M9ImxlZnQiPicgKyBsZWZ0U2lkZSArICc8L2Rpdj48ZGl2IGNsYXNzPSJyaWdodCI+JyArIHJpZ2h0U2lkZSArICc8L2Rpdj48L2Rpdj4nOwogICAgICAgIH0KICAgICAgICAKICAgICQoZWxlbWVudCkuZmluZCgnI2hvdXJzU21hbGwnKS5odG1sKGxpc3QpOwogICAgCiAgICB9IGVsc2UgaWYoeWV4dEF0dCkgeyAKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHRBdHQuc3BsaXQoIiwgIik7CiAgICAgICAgZm9yKHZhciBpPTA7aSA8IHlleHRBdHQubGVuZ3RoO2krKykgewogICAgICAgICAgICBpZigoL1xzLy50ZXN0KHlleHRBdHRbaV0pKSA9PT0gZmFsc2UpewogICAgICAgICAgICAgICAgeWV4dEF0dFtpXSA9IHlleHRBdHRbaV0gKyAnIC0gJyArIHlleHRBdHRbaSsxXQogICAgICAgICAgICAgICAgeWV4dEF0dC5zcGxpY2UoaSsxLCAxKQogICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoeWV4dEF0dFtpXS5pbmNsdWRlcygnZGF5JykgPT09IGZhbHNlICl7CiAgICAgICAgICAgICAgICB2YXIgbGVmdFNpZGUgPSAnICc7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciByaWdodFNpZGUgPSB5ZXh0QXR0W2ldCiAgICAgICAgICAgIH1lbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbmRleEVuZERheSA9IHlleHRBdHRbaV0ubGFzdEluZGV4T2YoJ2RheSAnKSArIDM7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGxlZnRTaWRlID0geWV4dEF0dFtpXS5zdWJzdHIoMCxpbmRleEVuZERheSkucmVwbGFjZSgiTW9uZGF5IiwiTW9uIikucmVwbGFjZSgiVHVlc2RheSIsIlR1ZSIpLnJlcGxhY2UoIldlZG5lc2RheSIsIldlZCIpLnJlcGxhY2UoIlRodXJzZGF5IiwiVGh1IikucmVwbGFjZSgiRnJpZGF5IiwiRnJpIikucmVwbGFjZSgiU2F0dXJkYXkiLCJTYXQiKS5yZXBsYWNlKCJTdW5kYXkiLCJTdW4iKTsKICAgICAgICAKICAgICAgICAgICAgICAgIHZhciByaWdodFNpZGUgPSB5ZXh0QXR0W2ldLnN1YnN0cihpbmRleEVuZERheSArIDEpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGxpc3QgKz0gJzxkaXYgY2xhc3M9InJvdyI+PGRpdiBjbGFzcz0ibGVmdCI+JyArIGxlZnRTaWRlICsgJzwvZGl2PjxkaXYgY2xhc3M9InJpZ2h0Ij4nICsgcmlnaHRTaWRlICsgJzwvZGl2PjwvZGl2Pic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnI2hvdXJzU21hbGwnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmIChkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJChlbGVtZW50KS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9Cgp9Cgp2YXIgZGlzcGxheU9wZW5Ib3VycyA9IGZ1bmN0aW9uKHR5cGUsIHlleHREYXRhKXsKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbJ3RpbWV6b25lJ10pewogICAgICAgIHZhciB6b25lID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1sndGltZXpvbmUnXQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgem9uZSA9IGZhbHNlCiAgICB9CiAgICAKICAgIGlmKHpvbmUpewogICAgICAgIHZhciB0aW1lID0gbmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygiZW4tVVMiLCB7dGltZVpvbmU6IHpvbmV9KTsKICAgICAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSh0aW1lICk7CiAgICAgICAgCiAgICAgICAgdmFyIHRoaXJ0eU1pbnMgPSAzMCAqIDYwICogMTAwMAoKICAgICAgICB2YXIgZGF5cyA9IFsnc3VuZGF5JywnbW9uZGF5JywndHVlc2RheScsJ3dlZG5lc2RheScsJ3RodXJzZGF5JywnZnJpZGF5Jywnc2F0dXJkYXknXTsKICAgICAgICB2YXIgZGF5c1Nob3J0ID0gWydTdW4nLCdNb24nLCdUdWVzJywnV2VkJywnVGh1cnMnLCdGcmknLCdTYXQnXTsKCiAgICAgICAgdmFyIGRheSA9IGRheXNbdG9kYXkuZ2V0RGF5KCldOwogICAgICAgIHZhciBob3VyID0gdG9kYXkuZ2V0SG91cnMoKTsKICAgICAgICB2YXIgbWluID0gdG9kYXkuZ2V0TWludXRlcygpOwogICAgICAgIHZhciBkZCA9ICgiMCIgKyB0b2RheS5nZXREYXRlKCkpLnNsaWNlKC0yKTsKICAgICAgICB2YXIgbW0gPSAoIjAiICsgKHRvZGF5LmdldE1vbnRoKCkgKyAxKSkuc2xpY2UoLTIpCiAgICAgICAgdmFyIHl5eXkgPSB0b2RheS5nZXRGdWxsWWVhcigpOwogICAgICAgIHZhciB0b2RheURhdGUgPSB5eXl5ICsgJy0nICsgbW0gKyAnLScgKyBkZAogICAgICAgIHZhciBtbSA9IG1tIC0gMSAKICAgICAgICAKICAgICAgICBjb25zdCB0b21vcnJvdyA9IG5ldyBEYXRlKHRvZGF5KQogICAgICAgIHRvbW9ycm93LnNldERhdGUodG9tb3Jyb3cuZ2V0RGF0ZSgpICsgMSkKICAgICAgICB2YXIgbW1UbXcgID0gKCIwIiArICh0b21vcnJvdy5nZXRNb250aCgpICsgMSkpLnNsaWNlKC0yKQogICAgICAgIHZhciBkZFRtdyA9ICgiMCIgKyB0b21vcnJvdy5nZXREYXRlKCkpLnNsaWNlKC0yKQogICAgICAgIHZhciB5eXl5VG13ID0gdG9tb3Jyb3cuZ2V0RnVsbFllYXIoKTsKICAgICAgICB2YXIgbmV4dERheSA9IGRheXNbdG9tb3Jyb3cuZ2V0RGF5KCldCiAgICAgICAgdmFyIHRvbW1vcnJvdyA9IHl5eXlUbXcgKyAnLScgKyBtbVRtdyArICctJyArIGRkVG13CiAgICAgICAgdmFyIG1tVG13ID0gbW1UbXcgLSAxCiAgICB9CgogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgZGF5XSkgewogICAgICAgIHZhciB5ZXh0QXR0ID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgZGF5XQogICAgICAgIGlmICh5ZXh0QXR0ID09PSAiQ2xvc2VkIil7CiAgICAgICAgICAgIHlleHRBdHQgPSBmYWxzZQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSBmYWxzZQogICAgfQogICAgCiAgICAvL2NoZWNrIGlmIGRheSBpcyBjbG9zZWQKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbdHlwZSArICcuJyArIGRheSArICcuaXNDbG9zZWQnXSA9PT0gdHJ1ZSkgeyAKICAgICAgICB2YXIgY2xvc2VkID0gdHJ1ZQogICAgfQogICAgCiAgICAvL2NvbGxlY3RzIGJ1c2luZXNzIGhvbGlkYXkgaG91cnMgCiAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLmhvbGlkYXlIb3VycyddKXsKICAgICAgICB2YXIgaG9saWRheUhvdXJzID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy5ob2xpZGF5SG91cnMnXQogICAgfSBlbHNlewogICAgICAgICB2YXIgaG9saWRheUhvdXJzID0gZmFsc2UKICAgIH0KICAgIAogICAgLy9nZXRzIG5leHQgZGF5cyBzdGFydCB0aW1lCiAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLicgKyBuZXh0RGF5ICsgJy5pc0Nsb3NlZCddID09PSB0cnVlKXsKICAgICAgICB2YXIgdG9tb3Jyb3dPcGVuID0gZmFsc2UKICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHRvbW9ycm93T3BlbiA9IHRydWUKICAgICAgICB2YXIgdG1yd1N0YXJ0ID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgbmV4dERheV0uc3BsaXQoIiAtICIpWzBdCiAgICB9CiAgICAKICAgICAvL2NoZWNrcyBpZiBob2xpZGF5IGhvdXJzIGNoYW5nZSAKICAgIGlmKGhvbGlkYXlIb3VycykgewogICAgICAgIGZvcih2YXIgaT0wO2kgPCBob2xpZGF5SG91cnMubGVuZ3RoO2krKyl7CiAgICAgICAgICAgIGlmKGhvbGlkYXlIb3Vyc1tpXS5kYXRlID09PSB0b2RheURhdGUgJiYgaG9saWRheUhvdXJzW2ldLm9wZW5JbnRlcnZhbHMpewogICAgICAgICAgICAgICAgeWV4dEF0dCA9IGhvbGlkYXlIb3Vyc1tpXS5ob3Vyc0Zvcm1hdHRlZAogICAgICAgICAgICB9IAogICAgICAgIH0KICAgIH0KICAgIAogICAgLy9zcGxpdCBob3VycwogICAgaWYoeWV4dEF0dCAmJiB5ZXh0QXR0LmluY2x1ZGVzKCIsIikpewogICAgICAgIHlleHRBdHQgPSB5ZXh0QXR0LnNwbGl0KCIsICIpCiAgICAgICAgZm9yKHZhciBpPTA7aSA8IHlleHRBdHQubGVuZ3RoO2krKyl7CiAgICAgICAgICAgIHZhciBlbmQgPSB5ZXh0QXR0W2ldLnNwbGl0KCcgLSAnKVsxXQogICAgICAgICAgICB2YXIgc3RhcnQgPSB5ZXh0QXR0W2ldLnNwbGl0KCcgLSAnKVswXQogICAgICAgICAgICBpZiAoaSsxICE9IHlleHRBdHQubGVuZ3RoKXsKICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhcnQgPSB5ZXh0QXR0W2kgKyAxXS5zcGxpdCgnIC0gJylbMF0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZihzdGFydC5pbmNsdWRlcygicG0iKSAmJiBzdGFydC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgICAgIHZhciBzdGFydERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzBdKSArIDEyLCBwYXJzZUludChzdGFydC5zcGxpdCgvXHMrfDovKVsxXSkpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChzdGFydC5zcGxpdCgvXHMrfDovKVswXSksIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYobmV4dFN0YXJ0LmluY2x1ZGVzKCJwbSIpICYmIG5leHRTdGFydC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhcnREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChuZXh0U3RhcnQuc3BsaXQoL1xzK3w6LylbMF0pICsgMTIsIHBhcnNlSW50KG5leHRTdGFydC5zcGxpdCgvXHMrfDovKVsxXSkpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgbmV4dFN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHl5eXksIG1tLCBkZCwgcGFyc2VJbnQobmV4dFN0YXJ0KSwgcGFyc2VJbnQobmV4dFN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICBpZihlbmQuaW5jbHVkZXMoInBtIikgJiYgZW5kLnNwbGl0KC9ccyt8Oi8pWzBdICE9ICIxMiIpewogICAgICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSkgKyAxMiwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBlbmREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMF0pLCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMV0pKQogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgIGlmIChlbmQuaW5jbHVkZXMoImFtIikgJiYgKGVuZERhdGUgPCBzdGFydERhdGUpKXsKICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5VG13LCBtbVRtdywgZGRUbXcsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSksIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVsxXSkpCiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgaWYodG9kYXkgPCBzdGFydERhdGUpewogICAgICAgICAgICAgICAgdmFyIGNsb3NlZCA9IHRydWUgCiAgICAgICAgICAgICAgICB0bXJ3U3RhcnQgPSBzdGFydAogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgfWVsc2UgaWYodG9kYXkgPiBzdGFydERhdGUgJiYgdG9kYXkgPCBlbmREYXRlKXsKICAgICAgICAgICAgICAgIHlleHRBdHQgPSBzdGFydCArICcgLSAnICsgZW5kCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICB9ZWxzZSBpZih0b2RheSA+IGVuZERhdGUgJiYgIChpKzEgIT0geWV4dEF0dC5sZW5ndGgpICYmIHRvZGF5IDwgbmV4dFN0YXJ0RGF0ZSl7CiAgICAgICAgICAgICAgICB2YXIgY2xvc2VkID0gdHJ1ZQogICAgICAgICAgICAgICAgdG1yd1N0YXJ0ID0gbmV4dFN0YXJ0CiAgICAgICAgICAgICAgICB0b21vcnJvd09wZW4gPSB0cnVlCiAgICAgICAgICAgIH1lbHNlIGlmKHRvZGF5ID4gZW5kRGF0ZSAmJiBpKzEgPT09IHlleHRBdHQubGVuZ3RoKXsKICAgICAgICAgICAgICAgIHZhciBjbG9zZWQgPSB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9ICAKICAgIAogICAgCiAgICBpZih5ZXh0QXR0IHx8IGNsb3NlZCkgewogICAgICAgIGlmKHR5cGVvZiB5ZXh0QXR0ID09PSAic3RyaW5nIil7CiAgICAgICAgdmFyIHN0YXJ0ID0geWV4dEF0dC5zcGxpdCgiIC0gIilbMF0KICAgICAgICB2YXIgZW5kID0geWV4dEF0dC5zcGxpdCgiIC0gIilbMV0KICAgICAgICBpZihzdGFydC5pbmNsdWRlcygicG0iKSAmJiBzdGFydC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHl5eXksIG1tLCBkZCwgcGFyc2VJbnQoc3RhcnQuc3BsaXQoL1xzK3w6LylbMF0pICsgMTIsIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChzdGFydC5zcGxpdCgvXHMrfDovKVswXSksIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoZW5kLmluY2x1ZGVzKCJwbSIpICYmIGVuZC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSkgKyAxMiwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9IGVsc2UgaWYgKGVuZC5pbmNsdWRlcygiYW0iKSAmJiBlbmQuc3BsaXQoL1xzK3w6LylbMF0gPT09ICIxMiIpIHsKICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSkgLSAxMiwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgZW5kRGF0ZSA9IG5ldyBEYXRlKHl5eXksIG1tLCBkZCwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzBdKSwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGVuZC5pbmNsdWRlcygiYW0iKSAmJiAoZW5kRGF0ZSA8IHN0YXJ0RGF0ZSkpewogICAgICAgICAgICBlbmREYXRlID0gbmV3IERhdGUoeXl5eVRtdywgbW1UbXcsIGRkVG13LCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMF0pLCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMV0pKQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvL2NoZWNrIGlmIGNsb3NlZAogICAgICAgIGlmKHRvZGF5ID4gZW5kRGF0ZSl7CiAgICAgICAgICAgIHZhciBjbG9zZWQgPSB0cnVlCiAgICAgICAgLy9vcGVuZWQgMjQgaG91cnMgCiAgICAgICAgfSBlbHNlIGlmKHN0YXJ0ID09PSAnMTI6MDAgYW0nICYmIGVuZCA9PT0gJzExOjU5IHBtJyl7CiAgICAgICAgICAgIHZhciBzdGF0dXMgPSAiT3BlbiAiCiAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJhbGxEYXlTdGF0dXMiCiAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICcgMjQgaG91cnMgJwogICAgICAgIC8vb3BlbmVkCiAgICAgICAgfSBlbHNlIGlmKHRvZGF5IDwgc3RhcnREYXRlKXsKICAgICAgICAgICAgdmFyIGNsb3NlZCA9IHRydWUKICAgICAgICAvL2NoZWNrIGlmIGNsb3Npbmcgc29vbgogICAgICAgIH0gZWxzZSBpZiAoZW5kRGF0ZSAtIHRvZGF5IDwgdGhpcnR5TWlucyAmJiBlbmREYXRlIC0gdG9kYXkgPCAwID09PSBmYWxzZSApewogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zaW5nIFNvb24gIgogICAgICAgICAgICAgICAgdmFyIGNzc0NsYXNzID0gInNvb25TdGF0dXMiCiAgICAgICAgICAgICAgICB2YXIgYnVzSG91cnMgPSAnIOKAoiAnICsgZW5kIAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBzdGF0dXMgPSAiT3BlbiAiCiAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJvcGVuZWRTdGF0dXMiCiAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICfigKIgQ2xvc2VzICcgKyBlbmQgCiAgICAgICAgfQogCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKGNsb3NlZCl7CiAgICAgICAgCiAgICAgICAgLy8gY2xvc2VkICYgb3BlbmluZyB0b2RheSAKICAgICAgICBpZigodG9kYXkgPCBzdGFydERhdGUpKXsKICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zZWQgIgogICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSAiY2xvc2VkU3RhdHVzIgogICAgICAgICAgICB2YXIgYnVzSG91cnMgPSAnIE9wZW5zICcgKyBzdGFydCAKICAgICAgICAvL2Nsb3NlZCAmIG9wZW4gdG9tb3Jyb3cgCiAgICAgICAgfSBlbHNlIGlmKGNsb3NlZCAmJiB0b21vcnJvd09wZW4gPT09IHRydWUpewogICAgICAgICAgICB2YXIgc3RhdHVzID0gIkNsb3NlZCAiCiAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJjbG9zZWRTdGF0dXMiCiAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICcg4oCiIE9wZW5zICcgKyB0bXJ3U3RhcnQgCiAgICAgICAgLy9jbG9zZWQgYW5kIG5vdCBvcGVuIHRvbW9ycm93IAogICAgICAgIH0gZWxzZSBpZihjbG9zZWQgJiYgdG9tb3Jyb3dPcGVuICE9IHRydWUpewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZGF5cy5pbmRleE9mKGRheSkgKyAxCiAgICAgICAgICAgIGZvciggdmFyIGk9MDsgaSA8IGRheXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBkYXlJbmRleCA9IChpICsgb2Zmc2V0KSAlIGRheXMubGVuZ3RoOwogICAgICAgICAgICAgICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy4nICsgZGF5c1tkYXlJbmRleF0gKyAnLm9wZW5JbnRlcnZhbHMnXSl7CiAgICAgICAgICAgICAgICAgICAgdG1yd1N0YXJ0ID0gIGRheXNTaG9ydFtkYXlJbmRleF0gKyAiICIgKyB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLScgKyBkYXlzW2RheUluZGV4XV0uc3BsaXQoIiAtICIpWzBdIAogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zZWQgIgogICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSAiY2xvc2VkU3RhdHVzIgogICAgICAgICAgICB2YXIgYnVzSG91cnMgPSAnIOKAoiBPcGVucyAnICsgdG1yd1N0YXJ0CgogICAgICAgIH0KICAgICAgICB9CiAgICB9CiAKICAgIC8vIGNoZWNrcyBpZiBob2xpZGF5CiAgICBpZihob2xpZGF5SG91cnMpIHsKICAgICAgICBmb3IodmFyIGk9MDtpIDwgaG9saWRheUhvdXJzLmxlbmd0aDtpKyspewogICAgICAgICAgICBpZihob2xpZGF5SG91cnNbaV0uZGF0ZSA9PT0gdG9kYXlEYXRlICYmIGhvbGlkYXlIb3Vyc1tpXS5pc0Nsb3NlZCA9PT0gdHJ1ZSAmJiB0b21vcnJvd09wZW4gPT09IGZhbHNlKXsKICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBkYXlzLmluZGV4T2YoZGF5KSArIDEKICAgICAgICAgICAgICAgIGZvciggdmFyIGk9MDsgaSA8IGRheXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGF5SW5kZXggPSAoaSArIG9mZnNldCkgJSBkYXlzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLicgKyBkYXlzW2RheUluZGV4XSArICcub3BlbkludGVydmFscyddKXsKICAgICAgICAgICAgICAgICAgICB0bXJ3U3RhcnQgPSBkYXlzU2hvcnRbZGF5SW5kZXhdICsgIiAiICsgeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgZGF5c1tkYXlJbmRleF1dLnNwbGl0KCIgLSAiKVswXQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gIkNsb3NlZCAiCiAgICAgICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSAiY2xvc2VkU3RhdHVzIgogICAgICAgICAgICAgICAgdmFyIGJ1c0hvdXJzID0gJyDigKIgT3BlbnMgJyArIHRtcndTdGFydCAgCiAgICAgICAgICAgIH0gZWxzZSBpZihob2xpZGF5SG91cnNbaV0uZGF0ZSA9PT0gdG9kYXlEYXRlICYmIGhvbGlkYXlIb3Vyc1tpXS5pc0Nsb3NlZCA9PT0gdHJ1ZSAmJiB0b21vcnJvd09wZW4gPT09IHRydWUpewogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zZWQgIgogICAgICAgICAgICAgICAgdmFyIGNzc0NsYXNzID0gImNsb3NlZFN0YXR1cyIKICAgICAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICcg4oCiIE9wZW5zICcgKyB0bXJ3U3RhcnQgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gCiAgICBpZihjc3NDbGFzcyl7CiAgICAgICAgdmFyIGhvdXJzV2lkZ2V0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3N0YXR1cycpCiAgICAgICAgZm9yKCB2YXIgaT0wOyBpIDwgaG91cnNXaWRnZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGhvdXJzV2lkZ2V0c1tpXS5jbGFzc0xpc3QuYWRkKGNzc0NsYXNzKTsKICAgICAgICB9CiAgICB9CiAgICBpZihzdGF0dXMpewogICAgICAgIHZhciBob3Vyc1dpZGdldHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzdGF0dXMnKQogICAgICAgIGZvciggdmFyIGk9MDsgaSA8IGhvdXJzV2lkZ2V0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBob3Vyc1dpZGdldHNbaV0uaW5uZXJUZXh0ID0gc3RhdHVzOwogICAgICAgIH0KICAgIH0KICAgIGlmKGNzc0NsYXNzID09PSAnYWxsRGF5U3RhdHVzJyl7CiAgICAgICAgdmFyIGhvdXJzV2lkZ2V0cyA9ICQoZWxlbWVudCkuZmluZCgnLm9wZW5Ib3VycycpCiAgICAgICAgZm9yKCB2YXIgaT0wOyBpIDwgaG91cnNXaWRnZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGhvdXJzV2lkZ2V0c1tpXS5jaGlsZHJlblswXS50ZXh0Q29udGVudCA9ICIiCiAgICAgICAgfQogICAgfQogICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3BlbkhvdXJzJylbMF0uY2hpbGRFbGVtZW50Q291bnQgPiAxKXsKICAgICAgICB2YXIgaG91cnNXaWRnZXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3BlbkhvdXJzJykKICAgICAgICBmb3IoIHZhciBpPTA7IGkgPCBob3Vyc1dpZGdldHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wZW5Ib3Vyc0xlbmd0aCA9IGhvdXJzV2lkZ2V0c1tpXS5jaGlsZE5vZGVzLmxlbmd0aAogICAgICAgICAgICB2YXIgb2xkSG91cnMgPSBob3Vyc1dpZGdldHNbaV0KICAgICAgICAgICAgb2xkSG91cnMucmVtb3ZlQ2hpbGQob2xkSG91cnMuY2hpbGROb2Rlc1tvcGVuSG91cnNMZW5ndGggLSAxXSkKICAgICAgICB9CiAgICB9CiAgICB2YXIgaG91cnNXaWRnZXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3BlbkhvdXJzJykKICAgIGZvciggdmFyIGk9MDsgaSA8IGhvdXJzV2lkZ2V0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBob3Vyc1dpZGdldHNbaV0uYXBwZW5kKGJ1c0hvdXJzKQogICAgICAgIH0KfQoKCnZhciBkaXNwbGF5SG9saWRheUhvdXJzTGlzdCA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICAKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbImhvdXJzLmhvbGlkYXlIb3VycyJdKSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzWyJob3Vycy5ob2xpZGF5SG91cnMiXQogICAgfSBlbHNlIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbImhvbGlkYXlIb3VycyJdKSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzWyJob2xpZGF5SG91cnMiXQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IGZhbHNlCiAgICB9CiAgICAKICAgIAogICAgCiAgICBpZih5ZXh0QXR0KSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgZGF0ZUhvbCA9IG5ldyBEYXRlKERhdGUucGFyc2UoeWV4dEF0dFtpXS5kYXRlKSk7IAoKICAgICAgICAgICAgdmFyIGRhdGVOb3cgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICB2YXIgbnVtRGF5c0JldHdlZW4gPSBnZXROdW1EYXlzQmV0d2VlbihkYXRlSG9sLGRhdGVOb3cpOwogICAgICAgIAogICAgICAgICAgICBpZiAobnVtRGF5c0JldHdlZW4gPiAtMSkgewogICAgICAgICAgICAgICAgLy8gd3JpdGUgdG8gZG9tCiAgICAgICAgICAgICAgICBsaXN0ICs9ICc8bGk+JyArIHlleHRBdHRbaV0uZGF0ZUZvcm1hdHRlZCArICcgLSAgPHNwYW4gY2xhc3M9ImhvbGlkYXlIb3Vyc1N0YXR1cyI+JyArIHlleHRBdHRbaV0uaG91cnNGb3JtYXR0ZWQgKyAnPC9zcGFuPjwvbGk+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgJChlbGVtZW50KS5maW5kKCcjJyArIHR5cGUgKyAnTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAvLyBpZiBpbiBlZGl0b3IgZGlzcGxheSBwbGFjZSBob2xkZXIKICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBpZiBlbXB0eSwgaGlkZSBlbGVtZW50IG9uIHJ1bnRpbWUKICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgIH0KfQoKdmFyIGRpc3BsYXlTZXJ2aWNlQXJlYSA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEsZmlyc3RPbmx5KSB7CiAgICB2YXIgbGlzdCA9ICIiOwogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXSkgewogICAgICAgIHZhciB5ZXh0QXR0ID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IGZhbHNlCiAgICB9CgogICAgaWYgKGZpcnN0T25seSkgewogICAgICAgIGxpc3QgPSAnPGxpPicgKyB5ZXh0QXR0WzBdICsgJzwvbGk+JzsKICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyMnICsgdHlwZSArICdMaXN0JykuaHRtbChsaXN0KTsKICAgIH0gZWxzZSBpZiAoeWV4dEF0dCAmJiBBcnJheS5pc0FycmF5KHlleHRBdHQpKSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnIycgKyB0eXBlICsgJ0xpc3QnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmICh5ZXh0QXR0KSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAiLnBsYWNlcyJdCiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnIycgKyB0eXBlICsgJ0xpc3QnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmIChkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJChlbGVtZW50KS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9Cgp9Cgp2YXIgZGlzcGxheVBob25lTGlzdCA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICAKICAgIHZhciBsb2NEYXRhID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlczsKICAgIAogICAgaWYobG9jRGF0YS5waG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+TWFpbjo8L3NwYW4+PHNwYW4gY2xhc3M9InBob25lTnVtIj4gJyArIGZvcm1hdFBob25lQmVmb3JlUmVuZGVyKGxvY0RhdGEucGhvbmUpICsgJzwvc3Bhbj48L2xpPic7CiAgICB9CiAgICBpZihsb2NEYXRhLmxvY2FsUGhvbmUpIHsKICAgICAgICBsaXN0ICs9ICc8bGk+PHNwYW4gY2xhc3M9InBob25lTGFiZWwiPkxvY2FsOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5sb2NhbFBob25lKSArICc8L3NwYW4+PC9saT4nOwogICAgfQogICAgaWYobG9jRGF0YS5hbHRlcm5hdGVQaG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+QWx0ZXJuYXRlOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5hbHRlcm5hdGVQaG9uZSkgKyAnPC9zcGFuPjwvbGk+JzsKICAgIH0KICAgIGlmKGxvY0RhdGEudG9sbEZyZWVQaG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+VG9sbCBGcmVlOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS50b2xsRnJlZVBob25lKSArICc8L3NwYW4+PC9saT4nOwogICAgfQogICAgaWYobG9jRGF0YS5tb2JpbGVQaG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+TW9iaWxlOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5tb2JpbGVQaG9uZSkgKyAnPC9zcGFuPjwvbGk+JzsKICAgIH0KICAgIGlmKGxvY0RhdGEuZmF4UGhvbmUpIHsKICAgICAgICBsaXN0ICs9ICc8bGk+PHNwYW4gY2xhc3M9InBob25lTGFiZWwiPkZheDo8L3NwYW4+PHNwYW4gY2xhc3M9InBob25lTnVtIj4gJyArIGZvcm1hdFBob25lQmVmb3JlUmVuZGVyKGxvY0RhdGEuZmF4UGhvbmUpICsgJzwvc3Bhbj48L2xpPic7CiAgICB9CiAgICBpZihsb2NEYXRhLnR0eVBob25lKSB7CiAgICAgICAgbGlzdCArPSAnPGxpPjxzcGFuIGNsYXNzPSJwaG9uZUxhYmVsIj5UVFk6PC9zcGFuPjxzcGFuIGNsYXNzPSJwaG9uZU51bSI+ICcgKyBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlcihsb2NEYXRhLnR0eVBob25lKSArICc8L3NwYW4+PC9saT4nOwogICAgfQogICAgCiAgICBpZihsaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyMnICsgdHlwZSArICdMaXN0JykuaHRtbChsaXN0KTsKICAgIH0gZWxzZSBpZiAoZGF0YS5pbkVkaXRvcikgewogICAgICAgICQoZWxlbWVudCkuaHRtbChlbXB0eUxpc3RQbGFjZUhvbGRlcik7CiAgICB9IGVsc2UgewogICAgICAgICQoZWxlbWVudCkuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogICAgfQogICAgCiAgICBlbWl0WWV4dFBob25lUmVuZGVyRXZlbnQoZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5waG9uZSkpOwogICAgCn0KCnZhciBnZXROdW1EYXlzQmV0d2VlbiA9IGZ1bmN0aW9uKGQxLCBkMikgewogIHZhciBkaWZmID0gZDEuZ2V0VGltZSgpIC0gZDIuZ2V0VGltZSgpOwogIHJldHVybiBkaWZmIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpOwp9OwoKdmFyIG9yZGVyUGF5bWVudHNMaXN0ID0gZnVuY3Rpb24obGlzdERhdGEpIHsKICAgIAogICAgaWYobGlzdERhdGEuaW5kZXhPZignRGlzY292ZXInKSA+PSAwKSB7CiAgICAgICAgbGlzdERhdGEuc3BsaWNlKGxpc3REYXRhLmluZGV4T2YoIkRpc2NvdmVyIiksIDEpOwogICAgICAgIGxpc3REYXRhLnVuc2hpZnQoJ0Rpc2NvdmVyJyk7CiAgICB9CiAgICAKICAgIGlmKGxpc3REYXRhLmluZGV4T2YoJ0FtZXJpY2FuIEV4cHJlc3MnKSA+PSAwKSB7CiAgICAgICAgbGlzdERhdGEuc3BsaWNlKGxpc3REYXRhLmluZGV4T2YoIkFtZXJpY2FuIEV4cHJlc3MiKSwgMSk7CiAgICAgICAgbGlzdERhdGEudW5zaGlmdCgnQW1lcmljYW4gRXhwcmVzcycpOwogICAgfQogICAgCiAgICBpZihsaXN0RGF0YS5pbmRleE9mKCdNYXN0ZXJDYXJkJykgPj0gMCkgewogICAgICAgIGxpc3REYXRhLnNwbGljZShsaXN0RGF0YS5pbmRleE9mKCJNYXN0ZXJDYXJkIiksIDEpOwogICAgICAgIGxpc3REYXRhLnVuc2hpZnQoJ01hc3RlckNhcmQnKTsKICAgIH0KICAgIAogICAgaWYobGlzdERhdGEuaW5kZXhPZignVmlzYScpID49IDApIHsKICAgICAgICBsaXN0RGF0YS5zcGxpY2UobGlzdERhdGEuaW5kZXhPZigiVmlzYSIpLCAxKTsKICAgICAgICBsaXN0RGF0YS51bnNoaWZ0KCdWaXNhJyk7CiAgICB9CiAgICAKICAgIHJldHVybiBsaXN0RGF0YQp9Cgp2YXIgZGlzcGxheUltYWdlTGlzdCA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICB2YXIgbGlzdERhdGEgPSBvcmRlclBheW1lbnRzTGlzdChfeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXSk7CiAgICAKICAgIAogICAgZm9yICh2YXIgaT0wOyBpPCBsaXN0RGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgIAogICAgICAgIGxpc3QgKz0gJzxpbWcgc3JjPSInICsgZ2V0SW1hZ2VVcmwobGlzdERhdGFbaV0sZGF0YS5jb25maWcuY2FyZFN0eWxlRGFya09yTGlnaHQpICsgJyIgYWx0PSInICsgbGlzdERhdGFbaV0gKyAnIi8+JwogICAgfQogICAgCiAgICBpZihsaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyNwYXltZW50T3B0aW9uc0ltYWdlcycpLmh0bWwobGlzdCkKICAgIH0gZWxzZSBpZiAoZGF0YS5pbkVkaXRvcikgewogICAgICAgICQoZWxlbWVudCkuaHRtbChlbXB0eUxpc3RQbGFjZUhvbGRlcik7CiAgICB9IGVsc2UgewogICAgICAgICQoZWxlbWVudCkuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogICAgfQogICAgCiAgICAKICAgIAp9Cgp2YXIgZGlzcGxheVNvY2lhbEljb25zID0gZnVuY3Rpb24odHlwZSx5ZXh0RGF0YSkgewogICAgdmFyIGxpc3QgPSAiIjsKICAgIAogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlcy5mYWNlYm9va1BhZ2VVcmwpIHsKICAgICAgICBsaXN0ICs9ICc8YSBocmVmPSInICsgeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlcy5mYWNlYm9va1BhZ2VVcmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+IDxpbWcgc3JjPSJodHRwczovL2Nkbi53ZWJzaXRlcy5oaWJ1LmNvbS8tcmVzZWxsZXJzLXByZXZpZXcvX3NvY2lhbF9pY29ucy9oaWJ1X2ZhY2Vib29rLnN2ZyIgLz48L2E+JwogICAgfQogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlcy50d2l0dGVySGFuZGxlKSB7CiAgICAgICAgbGlzdCArPSAnPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS8nICsgIHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXMudHdpdHRlckhhbmRsZSArICciIHRhcmdldD0iX2JsYW5rIj4gPGltZyBzcmM9Imh0dHBzOi8vY2RuLndlYnNpdGVzLmhpYnUuY29tLy1yZXNlbGxlcnMtcHJldmlldy9fc29jaWFsX2ljb25zL2hpYnVfdHdpdHRlci5zdmciIC8+PC9hPicKICAgIH0KICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXMuaW5zdGFncmFtSGFuZGxlKSB7CiAgICAgICAgbGlzdCArPSAnPGEgaHJlZj0iaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS8nKyB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzLmluc3RhZ3JhbUhhbmRsZSsnIiB0YXJnZXQ9Il9ibGFuayI+IDxpbWcgc3JjPSJodHRwczovL2Nkbi53ZWJzaXRlcy5oaWJ1LmNvbS8tcmVzZWxsZXJzLXByZXZpZXcvX3NvY2lhbF9pY29ucy9oaWJ1X2luc3RhZ3JhbS5zdmciIC8+PC9hPicKICAgIH0KICAgIAogICAgaWYobGlzdC5sZW5ndGggPiAwKSB7CiAgICAgICAgJChlbGVtZW50KS5maW5kKCcjc29jaWFsSWNvbnMnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmIChkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJChlbGVtZW50KS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9CiAgICAKICAgIAp9Cgp2YXIgZ2V0SW1hZ2VVcmwgPSBmdW5jdGlvbihuYW1lLHN0eWxlKSB7CiAgICB2YXIgY2RuUGF0aCA9ICdodHRwczovL2Nkbi53ZWJzaXRlcy5oaWJ1LmNvbS8tcmVzZWxsZXJzLXByZXZpZXcvX2NjX2ljb25zLyc7CiAgICBpZighc3R5bGUpIHsKICAgICAgICBzdHlsZSA9ICdfZC5zdmcnCiAgICB9CiAgICBpZiAobmFtZSA9PT0gIlpFTExFIil7CiAgICAgICAgbmFtZSA9ICJaZWxsZSIKICAgIH0KICAgIGlmIChuYW1lID09PSAiR29vZ2xlIFBheSIpewogICAgICAgIG5hbWUgPSAiQW5kcm9pZCBQYXkiCiAgICB9CiAgICBpZiAobmFtZSA9PT0gIktMQVJOQSIpewogICAgICAgIG5hbWUgPSAiS2xhcm5hIgogICAgfQogICAgdmFyIGltYWdlVXJsPScnOwogICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgY2FzZSAnVmlzYSc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ01hc3RlckNhcmQnOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdEaXNjb3Zlcic6CiAgICAgICAgICAgIGltYWdlVXJsID0gY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnQW1lcmljYW4gRXhwcmVzcyc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0FuZHJvaWQgUGF5JzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnQXBwbGUgUGF5JzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnQml0Y29pbic6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0Nhc2gnOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdDaGVjayc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0RpbmVycyBDbHViJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnRGlzY292ZXInOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdGaW5hbmNpbmcnOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdJbnZvaWNlJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnUGF5UGFsJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnU2Ftc3VuZyBQYXknOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJUcmF2ZWxlcidzIENoZWNrIjoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiWmVsbGUiOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhawogICAgICAgIGNhc2UgIktsYXJuYSI6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrCiAgICB9CiAgICByZXR1cm4gaW1hZ2VVcmwKfQoKZnVuY3Rpb24gZW1pdFlleHRQaG9uZVJlbmRlckV2ZW50KHBob25lKSB7CiAgICB2YXIgeWV4dFBob25lUmVuZGVyRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ1lleHRQaG9uZUNoYW5nZUV2ZW50JywgCiAgICAgICAgeyAKICAgICAgICAgICAgZGV0YWlsOiBwaG9uZSwgCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsIAogICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlIAogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoeWV4dFBob25lUmVuZGVyRXZlbnQpOwp9Cgp2YXIgaW5pdFlleHRFbGVtZW50cyA9IGZ1bmN0aW9uKHlleHREYXRhLHdpZGdldFR5cGUpewogICAgaWYgKHdpZGdldFR5cGUgPT09ICdhZGRyZXNzJyAmJiBkYXRhLmNvbmZpZy5kcmF3TWFwKSB7CiAgICAgICAgZHJhd01hcCh5ZXh0RGF0YSk7CiAgICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT09ICdwYXltZW50T3B0aW9ucycgJiYgZGF0YS5jb25maWcuc2hvd1BheW1lbnRzQXMgPT09ICdwYXltZW50SWNvbnMnKSB7CiAgICAgICAgZGlzcGxheUltYWdlTGlzdCh3aWRnZXRUeXBlLHlleHREYXRhKTsKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0gJ3Bob25lJyAmJiBkYXRhLmNvbmZpZy5waG9uZVNob3dBcyA9PT0gJ2xpc3QnKSB7CiAgICAgICAgZGlzcGxheVBob25lTGlzdCh3aWRnZXRUeXBlLHlleHREYXRhKTsKICAgIC8vIGNoZWNrIGZvciBhbnkgbGlzdCB0eXBlCiAgICB9IGVsc2UgaWYod2lkZ2V0VHlwZSA9PT0gJ3Bob25lJyAmJiBkYXRhLmNvbmZpZy5waG9uZVNob3dBcyA9PT0gJ2J1dHRvbicpIHsKICAgICAgICB2YXIgcGhGb3JtYXR0ZWQgPSBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlcih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW2RhdGEuY29uZmlnLnBob25lVHlwZV0sZnVuY3Rpb24ocGhvbmUpIHsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCIuZG1CdXR0b25MaW5rIikuaHRtbCgnPHNwYW4gY2xhc3M9InRleHQiPicgKyBwaG9uZSArICc8L3NwYW4+Jyk7ICAgCiAgICAgICAgICAgIAogICAgICAgICAgICBlbWl0WWV4dFBob25lUmVuZGVyRXZlbnQocGhvbmUpOwogICAgICAgICAgICAKICAgICAgICB9KTsKICAgIH0gZWxzZSBpZih3aWRnZXRUeXBlID09PSAncGhvbmUnICYmIGRhdGEuY29uZmlnLnBob25lU2hvd0FzID09PSAndGV4dCcpIHsKICAgICAgICB2YXIgcGhGb3JtYXR0ZWQgPSBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlcih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW2RhdGEuY29uZmlnLnBob25lVHlwZV0sZnVuY3Rpb24ocGhvbmUpIHsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCcueWV4dFBob25lVGV4dCcpLmh0bWwoJzxzcGFuIGNsYXNzPSJ0ZXh0Ij4nICsgcGhvbmUgKyAnPC9zcGFuPicpOyAgIAogICAgICAgICAgICAKICAgICAgICAgICAgZW1pdFlleHRQaG9uZVJlbmRlckV2ZW50KHBob25lKTsKICAgICAgICAgICAgCiAgICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT09ICdzZXJ2aWNlcycgfHwgd2lkZ2V0VHlwZSA9PT0gJ2dvb2dsZUF0dHJpYnV0ZXNGb3JtYXR0ZWQnIHx8IHdpZGdldFR5cGUgPT09ICdsYW5ndWFnZXMnIHx8IHdpZGdldFR5cGUgPT09ICdwYXltZW50T3B0aW9ucycgfHwgd2lkZ2V0VHlwZSA9PT0gJ2tleXdvcmRzJyB8fCB3aWRnZXRUeXBlID09PSAncHJvZHVjdHMnIHx8IHdpZGdldFR5cGUgPT09ICdhc3NvY2lhdGlvbnMnIHx8IHdpZGdldFR5cGUgPT09ICdicmFuZHMnKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgCiAgICAgICAgICAgIGRpc3BsYXlUZXh0ZExpc3Qod2lkZ2V0VHlwZSx5ZXh0RGF0YSkKICAgICAgICB9LDEpOwogICAgfSBlbHNlIGlmKHdpZGdldFR5cGUgPT09ICdzcGVjaWFsdGllcycpIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkaXNwbGF5U3BlY2lhbHRpZXMoeWV4dERhdGEpCiAgICAgICAgfSwxKQogICAgfWVsc2UgaWYgKHdpZGdldFR5cGUgPT09J3NlcnZpY2VBcmVhJykgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGRpc3BsYXlTZXJ2aWNlQXJlYSh3aWRnZXRUeXBlLHlleHREYXRhLGRhdGEuY29uZmlnLnNob3dTZXJ2aWNlQXJlYUZpcnN0KQogICAgICAgIH0sMSkKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0naG91cnMnICYmIGRhdGEuY29uZmlnLmhvdXJzU2hvd0FzID09PSAnbGlzdCcgJiYgZGF0YS5jb25maWcuaXNMaXN0ID09IGZhbHNlKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgZGlzcGxheUhvdXJzKHdpZGdldFR5cGUseWV4dERhdGEpCiAgICAgICAgfSwxKQogICAgfSBlbHNlIGlmICh3aWRnZXRUeXBlID09PSdob3VycycgJiYgZGF0YS5jb25maWcuaG91cnNTaG93QXMgPT09ICdvcGVuSG91cnMnKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgZGlzcGxheU9wZW5Ib3Vycyh3aWRnZXRUeXBlLHlleHREYXRhKQogICAgICAgIH0sMSkKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0gJ3NvY2lhbCcpIHsKICAgICAgICBkaXNwbGF5U29jaWFsSWNvbnMod2lkZ2V0VHlwZSx5ZXh0RGF0YSk7CiAgICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT09ICdob2xpZGF5SG91cnMnKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgCiAgICAgICAgICAgIGRpc3BsYXlIb2xpZGF5SG91cnNMaXN0KHdpZGdldFR5cGUseWV4dERhdGEpCiAgICAgICAgfSwxKTsKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0gJ2hvdXJzJykgewogICAgICAgIC8vaGlkZSBob3VycyBsaXN0IGlmIHRvZ2dsZSBlbmFibGVkCiAgICAgICAgaWYoZGF0YS5jb25maWcuaGlkZUhvdXJzTGlzdCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJy55ZXh0SG91cnMnKS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICAgICAgfQogICAgfSBlbHNlIGlmICh3aWRnZXRUeXBlID09PSAnZGVzY3JpcHRpb24nIHx8IHdpZGdldFR5cGUgPT09ICd5ZWFyRXN0YWJsaXNoZWQnIHx8IHdpZGdldFR5cGUgPT09ICdlbWFpbCcgfHwgd2lkZ2V0VHlwZSA9PT0gJ25hbWUnKSB7CiAgICAgICAgLy8gY2hlY2sKICAgICAgICBoaWRlSWZFbXB0eSh3aWRnZXRUeXBlLHlleHREYXRhKQogICAgfQogICAgLy9yZW1vdmUgZXJyb3IgaWYgc2NyaXB0IG5vdCBlbnRlcmVkIGNvcnJlY3RseS4KICAgICQoZWxlbWVudCkuZmluZCgnLndyb25nU2NyaXB0RXJyb3InKS5yZW1vdmVDbGFzcygnaGFzRXJyb3InKTsKICAgIAp9CgpmdW5jdGlvbiBoaWRlSWZFbXB0eSh0eXBlLHlleHREYXRhKSB7CiAgICBpZigheWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXSkgewogICAgICAgIGlmKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsgICAgCiAgICAgICAgfQogICAgICAgIAogICAgfQp9CgovLyBUT0RPIENIQU5HRSBUTyBFVkVOVCBDQUxMIEJBQ0sKdmFyIHN0YXJ0SW50ZXJ2YWxUb1dhaXRBbmRMb2FkV2lkZ2V0cyA9IGZ1bmN0aW9uKHdpZGdldFR5cGUpIHsKICAgIC8vc3RhcnQgaW50ZXJ2YWwgZm9yIHRoaXMgc3BlY2lmaWMgd2lkZ2V0CiAgICB2YXIgaW50ZXJ2YWxDaGVja1lleHRMb2FkZWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICAgIGlmICh3aW5kb3cuX3lleHREYXRhKSB7CiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxDaGVja1lleHRMb2FkZWQpOwogICAgICAgICAgICBpbml0WWV4dEVsZW1lbnRzKHdpbmRvdy5feWV4dERhdGEsd2lkZ2V0VHlwZSk7CiAgICAgICAgfSAKICAgIH0sNTApCn0KCgovKiBpbml0aWFsaXphdGlvbiAqLwppZihkYXRhLmluRWRpdG9yKXsKICAgIHdpbmRvdy5yZWZyZXNoWWV4dCAmJiB3aW5kb3cucmVmcmVzaFlleHQoKTsKICAgIAogICAgCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICAgICAgIGlmKCF3aW5kb3cueWV4dEluaXRpYWxpemVkKXsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCcubWlzc2luZ1lleHRXaWRnZXQnKS5hZGRDbGFzcygnc2hvdycpOyAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJy5taXNzaW5nWWV4dFdpZGdldCcpLnJlbW92ZUNsYXNzKCdzaG93Jyk7IAogICAgICAgIH0KICAgIH0pOwogICAgCn0gZWxzZSB7CiAgICBkbUFQSS5ydW5PblJlYWR5KCd5ZXh0JyAsIGZ1bmN0aW9uKCl7CiAgICAgICAgbG9hZFlleHQoKTsKICAgfSk7CiAgICAvLyBCZWZvcmUgbmF2aWdhdGluZyB3aXRoIEFqYXgsIHdlIHNldCB0aGUgeWV4dCBpbml0aWFsaXplZCB0byBiZSBmYWxzZSBzbyBpdCB3aWxsIGJlIGluaXRpYWxpemVkIGFnYWluIGFmdGVyIHRoZSBhamF4IG5hdmlnYXRpb24KICAgIGRtQVBJLnJ1bkJlZm9yZUFqYXhOYXZpZ2F0aW9uKCd5ZXh0JywgZnVuY3Rpb24oKXsKICAgICAgICB3aW5kb3cueWV4dEluaXRpYWxpemVkID0gZmFsc2U7CiAgICB9KTsKfQ==","css":".editorOnlyInfo, .multipleYextError, .wrongScriptError {\n display: none;\n max-width: 350px;\n background: #fff;\n text-align: left;\n padding: 10px;\n line-height: normal;\n font-size: 14px;\n}\n\n.editorOnlyInfo.inEditor {\n display: block;\n color: #3ac280;\n}\n\n.multipleYextError.hasError, .wrongScriptError.hasError {\n display: block;\n color: red;\n}\n\n.widget-7b6cfb .dmWidget.yextButton {\n width: 100%;\n}\n\n#dm .widget-7b6cfb {\n line-height: normal !important;\n}\n\na.getDirections {\n display: block;\n}\n\n.yextButton.show {\n display: inline-block;\n}\n\n.yextButton .text {\n display: table-cell;\n vertical-align: middle;\n}\n\n.yextMap {\n height: 100%;\n width: 100%;\n overflow: hidden;\n z-index: 0;\n text-align: left;\n margin: 0 auto;\n}\n\n.yextHours {\n text-align: left;\n width: 300px;\n}\n\n.yextHours .row {\n display: flex;\n}\n\n.yextHours .row .left, .yextHours .row .right {\n flex: 1;\n align-self: center;\n}\n\n.yextAdditionalHoursText {\n display: inline-block;\n}\n\n.yextAddress {\n text-align: left;\n}\n\n#paymentOptionsImages img {\n display: inline-block;\n width: 60px;\n margin-right: 5px;\n margin-bottom: 5px;\n}\n\n#socialIcons a {\n display: inline-block;\n width: 50px;\n margin-right: 5px;\n margin-bottom: 5px;\n}\n\n.bullet {\n list-style-type: disc;\n}\n\n.no-list {\n list-style-type: none;\n}\n\n.circle {\n list-style-type: circle;\n}\n\n.square {\n list-style-type: square;\n}\n\n.decimal {\n list-style-type: decimal;\n}\n\n.bold {\n font-weight: bold;\n}\n\n#socialIcons {\n display: flex;\n}\n\n#socialIcons.left {\n justify-content: flex-start;\n}\n\n#socialIcons.right {\n justify-content: flex-end;\n}\n\n#socialIcons.center {\n justify-content: center;\n}\n\nul[id*=List] {\n margin: 0;\n}\n\nh3[class*=Header] {\n margin: 10px 0;\n}\n\n.yextEmail {\n display: block;\n}\n\n.picons-left {\n text-align: left;\n}\n\n.picons-right {\n text-align: right;\n}\n\n.picons-center {\n text-align: center;\n}\n\n.openedStatus {\n color: #3ac280;\n}\n\n.allDayStatus {\n color: #3ac280;\n}\n\n.closedStatus {\n color: #FF0000;\n}\n\n.soonStatus {\n color: #FF7322;\n}\n","strings":{}}],"page_title":"Info","flexstyles":[],"popups":[],"title":"Info","uuid":"e1d476652eb64a3a93388bd0a4423cd9","devicecss":"*#dm *.dmBody div.u_dm_content{\npadding-top:20px !important;\npadding-bottom:20px !important;\npadding-left:20px !important;\npadding-right:20px !important}\n*#dm *.dmBody div.u_1694205906{\npadding-top:0 !important;\npadding-left:0 !important;\npadding-bottom:0 !important;\nfloat:none !important;\nmargin-right:auto !important;\nmargin-left:auto !important;\ntop:auto !important;\nmax-width:none !important;\nleft:0 !important;\nwidth:100% !important;\nmargin-top:0 !important;\nposition:relative !important;\nmargin-bottom:0 !important;\npadding-right:0 !important;\nmin-width:0 !important;\ntext-align:center !important;\nheight:auto !important}\n*#dm *.dmBody h1.u_1413701372{\npadding-top:2px !important;\npadding-left:0 !important;\npadding-bottom:2px !important;\nfloat:none !important;\ntop:0 !important;\nmax-width:100% !important;\nleft:0 !important;\nwidth:100% !important;\nposition:relative !important;\npadding-right:0 !important;\nmin-width:0 !important;\ntext-align:left !important;\nheight:auto !important}\n*#dm *.dmBody div.u_1364864902{\npadding-top:2px !important;\npadding-left:0 !important;\npadding-bottom:2px !important;\nfloat:none !important;\nmargin-right:auto !important;\nmargin-left:auto !important;\ntop:0 !important;\nmax-width:calc(100% - 0px) !important;\nleft:0 !important;\nwidth:100% !important;\nmargin-top:8px !important;\nposition:relative !important;\nmargin-bottom:8px !important;\npadding-right:0 !important;\nmin-width:25px !important;\ntext-align:center !important;\nheight:auto !important;\ndisplay:block !important}","seometatags":"","content":"
\n","ssr_script":"","headsection":"\n\n\n\r\n \r\n\r\n \r\n","current_url":"","collections":"e30=","sidebarPosition":"NA","pageFontSizeStyle":".font-size-16, .size-16, .size-16 > font { font-size: 16px !important; }","alias":"build-your-own-insite3","relAlternateLanguageLinksMarkup":"","extensionsToRender":{"1888830622":" \n","1715149005":" \n","1030165537":" \n","1832600643":" \n","1190878319":" \n"},"parameters":{"InitialPageAlias":"build-your-own-insite3","InitialDynamicItem":null,"IsCurrentHomePage":false,"pageType":"POPUP","CurrentPageUrl":""},"insite_scripts":""}