diff --git a/dist/css/blocks.editor.css b/dist/css/blocks.editor.css index b878745ad..03fe95915 100644 --- a/dist/css/blocks.editor.css +++ b/dist/css/blocks.editor.css @@ -1,3 +1 @@ :root{--nova-hero-transition-duration: 0.4s;--nova-hero-transition-easing: ease-out;--nova-hero-transition: all var(--nova-media-transition-duration) var(--nova-media-transition-easing)}.wp-block-nova-hero{-webkit-transition:var(--nova-hero-transition);transition:var(--nova-hero-transition);-webkit-transition-property:color;transition-property:color}.nova-hero__media{-webkit-transition:var(--nova-hero-transition);transition:var(--nova-hero-transition);-webkit-transition-property:opacity;transition-property:opacity}.nova-hero__mask{overflow:hidden}.pixelgrade-hero-block-toolbar-dropdown button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.pixelgrade-hero-block-toolbar-dropdown button:after{content:"";border:0 solid transparent;border-width:4px 3px 0;border-top-color:currentColor;margin-left:4px}:root{--nova-media-transition-duration: 0.4s;--nova-media-transition-easing: ease-out;--nova-media-transition: all var(--nova-media-transition-duration) var(--nova-media-transition-easing)}.nova-media__placeholder{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;background-color:#EEEEEE}.wp-block-nova-media{-webkit-transition:var(--nova-media-transition);transition:var(--nova-media-transition);-webkit-transition-property:background-color, padding;transition-property:background-color, padding}.wp-block-nova-media h1,.wp-block-nova-media h2,.wp-block-nova-media h3,.wp-block-nova-media h4,.wp-block-nova-media h5,.wp-block-nova-media h6{-webkit-transition:var(--nova-media-transition);transition:var(--nova-media-transition);-webkit-transition-property:color;transition-property:color}.nova-media__content{-webkit-transition:var(--nova-media-transition);transition:var(--nova-media-transition);-webkit-transition-property:padding, -webkit-box-shadow;transition-property:padding, -webkit-box-shadow;transition-property:padding, box-shadow;transition-property:padding, box-shadow, -webkit-box-shadow}.nova-media__content:after{-webkit-transition:var(--nova-media-transition);transition:var(--nova-media-transition);-webkit-transition-property:background-color;transition-property:background-color}.nova-media__inner-container{padding-left:var(--content-side-spacing);padding-right:var(--content-side-spacing)}.nova-media__inner-container>*{margin-left:auto;margin-right:auto}.nova-media__inner-container>[data-align="full"]{margin-left:calc(-1 * var(--content-side-spacing));margin-right:calc(-1 * var(--content-side-spacing))}:root{--nova-slideshow-transition-duration: 0.4s;--nova-slideshow-transition-easing: ease-out;--nova-slideshow-transition: all var(--nova-media-transition-duration) var(--nova-media-transition-easing)}.wp-block-nova-slideshow{-webkit-transition:var(--nova-hero-transition);transition:var(--nova-hero-transition);-webkit-transition-property:color;transition-property:color}.nova-slideshow__media{-webkit-transition:var(--nova-hero-transition);transition:var(--nova-hero-transition);-webkit-transition-property:opacity;transition-property:opacity}.nova-slideshow__gallery-edit{--gallery-spacing: 10px;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc( -1 * var(--gallery-spacing));margin-left:calc( -1 * var(--gallery-spacing))}.nova-slideshow__gallery-edit>*{-ms-flex-preferred-size:33.33333%;flex-basis:33.33333%;padding-top:var(--gallery-spacing);padding-left:var(--gallery-spacing)}.nova-slideshow__gallery-item{border-radius:4px;border:1px solid #EBEBEB;padding:4px;cursor:pointer}.nova-slideshow__gallery-item img{display:block;max-width:100%}.nova-slideshow__gallery-item--active{border-width:2px;border-color:#0085BA;padding:3px}.editor-block-list__block-edit[class][class] .nova-slideshow__slide{position:absolute;top:0;right:0;bottom:0;left:0}.editor-block-list__block-edit[class][class] .nova-slideshow__slider{position:static;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.nova-mask{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden} - -/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuL2Rpc3QvY3NzL2Jsb2Nrcy5lZGl0b3IuY3NzIiwic291cmNlUm9vdCI6IiJ9*/ \ No newline at end of file diff --git a/dist/css/blocks.style.css b/dist/css/blocks.style.css index b97b644d9..6360d7248 100644 --- a/dist/css/blocks.style.css +++ b/dist/css/blocks.style.css @@ -1,7 +1,5 @@ :root{--nova-color-1: #203AB6;--nova-color-2: #FFE42E;--nova-color-3: #FFE42E;--nova-dark-1: #000043;--nova-dark-2: #272743;--nova-dark-3: #323067;--nova-light-1: #FFFFFF;--nova-light-2: #EEF1F2;--nova-light-3: #EEF1F2}:root{--content-width-normal: 900px;--content-width-wide: 1200px;--nova-spacing-unit: 2px;--content-side-spacing: calc( 7 * var(--nova-spacing-unit) )}@media only screen and (min-width: 768px){:root{--nova-spacing-unit: 4px}}@media only screen and (min-width: 1024px){:root{--nova-spacing-unit: 8px}}.nova-hero{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex}.nova-hero__mask,.nova-hero__background,.nova-hero__slider{position:absolute;top:0;right:0;bottom:0;left:0}.nova-hero__media[class]{position:absolute;top:0;left:0;min-width:100%;min-height:100%;max-width:none;width:auto;height:auto}@supports (transform: translate(-50%, -50%)){.nova-hero__media[class]{top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}}@supports ((-o-object-fit: cover) or (object-fit: cover)){.nova-hero__media[class]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;top:0;left:0;-webkit-transform:none;transform:none}}.nova-hero__foreground{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%}.nova-hero__foreground h1,.nova-hero__foreground h2,.nova-hero__foreground h3,.nova-hero__foreground h4,.nova-hero__foreground h5,.nova-hero__foreground h6,.nova-hero__foreground ul,.nova-hero__foreground ol,.nova-hero__foreground dl,.nova-hero__foreground .editor-block-list__block[class]{color:inherit}.nova-hero__indicator{position:absolute;bottom:0;left:0;right:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:inherit}.nova-hero__indicator:after{content:"";position:absolute;top:50%;left:50%;width:12px;height:12px;border:2px solid transparent;border-right-color:currentColor;border-bottom-color:currentColor;-webkit-transform:translateY(-100%) rotate(45deg);transform:translateY(-100%) rotate(45deg)}.components-nova--popover.components-popover:not(.is-mobile) .components-popover__content{padding:16px}.wp-block-nova-media{margin-left:auto;margin-right:auto;--nova-media-padding: 0}.nova-media{padding-top:var(--nova-media-padding);padding-bottom:var(--nova-media-padding);background-color:var(--nova-media-background-color);--nova-media-spacing: calc( 7 * var(--nova-spacing-unit) ) -}.nova-media__layout{display:grid;grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));grid-gap:var(--nova-media-spacing)}.wp-block-nova-media{--nova-media-text-color: var(--nova-dark-2);--nova-media-titles-color: var(--nova-dark-3);--nova-media-subtitles-color: var(--nova-color-1);--nova-media-background-color: var(--nova-light-1);--nova-media-content-padding: 0;--nova-media-content-background-color: transparent;--nova-media-content-background-opacity: 1;--nova-media-content-box-shadow: none}.block-is-moderate,.block-is-highlighted{--nova-media-padding: var(--nova-media-spacing)}.block-is-moderate{--nova-media-background-color: var(--nova-light-2)}.block-is-highlighted{--nova-media-background-color: var(--nova-dark-1)}.content-is-moderate,.content-is-highlighted{--nova-media-content-padding: var(--nova-media-spacing)}.content-is-moderate,.content-is-highlighted.block-is-highlighted{--nova-media-content-background-color: var(--nova-light-1);--nova-media-content-box-shadow: 0 32px 128px rgba(42,54,52,0.1),0 16px 64px rgba(42,54,52,0.1),0 8px 16px rgba(42,54,52,0.1)}.content-is-moderate.block-is-highlighted{--nova-media-content-background-color: var(--nova-light-1);--nova-media-content-background-opacity: 0.2}.block-is-highlighted:not(.content-is-highlighted),.content-is-highlighted:not(.block-is-highlighted){--nova-media-text-color: var(--nova-light-1);--nova-media-titles-color: var(--nova-media-text-color);--nova-media-subtitles-color: var(--nova-media-text-color)}.content-is-highlighted:not(.block-is-highlighted){--nova-media-content-background-color: var(--nova-dark-1)}.nova-media__content{padding:var(--nova-media-content-padding);color:var(--nova-media-text-color);-webkit-box-shadow:var(--nova-media-content-box-shadow);box-shadow:var(--nova-media-content-box-shadow);margin-top:auto;margin-bottom:auto;z-index:2}.nova-media__content h1,.nova-media__content h3,.nova-media__content h3{color:var(--nova-media-titles-color)}.nova-media__content h4,.nova-media__content h5,.nova-media__content h6{color:var(--nova-media-subtitles-color)}@media not screen and (min-width: 1024px){.nova-media__content{grid-column:span 2}}.nova-media__content{position:relative}.nova-media__content:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;display:block;background-color:var(--nova-media-content-background-color);opacity:var(--nova-media-content-background-opacity)}.nova-media__aside{display:grid;grid-template-columns:repeat(12, 1fr);grid-gap:15px;min-height:400px}@media only screen and (min-width: 1024px){.has-image-on-the-left .nova-media__aside{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}}@media not screen and (min-width: 1024px){.nova-media__aside{grid-column:span 2}}.nova-media__image{position:relative;grid-column:span 6}.nova-media__image img{position:absolute;top:0;left:0;min-width:100%;min-height:100%;max-width:none;width:auto;height:auto}@supports (transform: translate(-50%, -50%)){.nova-media__image img{top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}}@supports ((-o-object-fit: cover) or (object-fit: cover)){.nova-media__image img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;top:0;left:0;-webkit-transform:none;transform:none}}.nova-media__image:first-child:last-child,.nova-media__placeholder{grid-column:span 12}.nova-media__image:first-child:nth-last-child(3){grid-column:1 / span 6}.nova-media__image:first-child:nth-last-child(3) ~ .nova-media__image:nth-child(2){grid-column:7 / span 6}.nova-media__image:first-child:nth-last-child(3) ~ .nova-media__image:last-child{grid-column:1 / span 12}.nova-media__image:nth-child(n+5){display:none}.nova-slideshow{position:relative}.nova-slideshow__slide{position:relative;overflow:hidden}.nova-slideshow.is-ready .nova-slideshow__slider,.nova-slideshow.is-ready .nova-slideshow__mask,.nova-slideshow.is-ready .nova-slideshow__foreground,.nova-slideshow.is-ready .nova-slideshow__content,.nova-slideshow.is-ready .nova-slideshow__background{position:absolute;top:0;right:0;bottom:0;left:0}.nova-slideshow__background,.nova-slideshow__foreground{will-change:transform}.nova-slideshow__media{position:absolute;top:0;left:0;min-width:100%;min-height:100%;max-width:none;width:auto;height:auto}@supports (transform: translate(-50%, -50%)){.nova-slideshow__media{top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}}@supports ((-o-object-fit: cover) or (object-fit: cover)){.nova-slideshow__media{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;top:0;left:0;-webkit-transform:none;transform:none}}.nova-slideshow__slider{z-index:100}.nova-slideshow__controls{z-index:200}.nova-slideshow__arrow{--arrow-width: 2px;--arrow-color: #555555;--arrow-background: #FFFFFF;position:absolute;top:50%;z-index:999;width:22px;height:24px;background:var(--arrow-background);border-radius:3px}.nova-slideshow__arrow:not(.nova-slideshow__arrow--disabled){cursor:pointer}.nova-slideshow__arrow:before{content:"";display:block;position:absolute;top:50%;left:50%;width:8px;height:8px}.nova-slideshow__arrow--prev{left:10px}.nova-slideshow__arrow--prev:before{border-top:var(--arrow-width) solid var(--arrow-color);border-left:var(--arrow-width) solid var(--arrow-color);-webkit-transform:translate(-30%, -50%) rotate(-45deg);transform:translate(-30%, -50%) rotate(-45deg)}.nova-slideshow__arrow--next{right:10px}.nova-slideshow__arrow--next:before{border-top:var(--arrow-width) solid var(--arrow-color);border-right:var(--arrow-width) solid var(--arrow-color);-webkit-transform:translate(-70%, -50%) rotate(45deg);transform:translate(-70%, -50%) rotate(45deg)}.nova-slideshow .slick-list{position:absolute;top:0;left:0;width:100%;height:100%}.nova-slideshow .slick-list,.nova-slideshow .slick-track{height:100%}.nova-slideshow .slick-slide{opacity:1 !important}.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-placeholder__label,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .block-editor-media-placeholder__button{display:none}.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button{padding-left:12px;text-indent:-999em;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:auto}.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button:focus:enabled,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button:focus:enabled{color:transparent}.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button:before,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button:after,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button:before,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button:after{color:#555;text-indent:0}.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button:before,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button:before{display:inline-block;font-family:dashicons;line-height:1;font-weight:400;font-style:normal;speak:none;text-decoration:inherit;text-transform:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px;height:20px;font-size:20px;vertical-align:top;text-align:center;-webkit-transition:color .1s ease-in;transition:color .1s ease-in;content:"\f464";margin-right:0.2em}.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button:after,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button:after{content:'Edit Gallery'}.slick-slider{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;overflow:hidden;display:block;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-track{position:relative;left:0;top:0;display:block;margin-left:auto;margin-right:auto}.slick-track:before,.slick-track:after{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{float:left;height:100%;min-height:1px;display:none}[dir="rtl"] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.slick-loading .slick-list{background:#fff url("./ajax-loader.gif") center center no-repeat}@font-face{font-family:"slick";src:url("./fonts/slick.eot");src:url("./fonts/slick.eot?#iefix") format("embedded-opentype"),url("./fonts/slick.woff") format("woff"),url("./fonts/slick.ttf") format("truetype"),url("./fonts/slick.svg#slick") format("svg");font-weight:normal;font-style:normal}.slick-prev,.slick-next{position:absolute;top:50%;z-index:9999;display:block;height:20px;width:20px;padding:0;border:none;outline:none;font-size:0px;line-height:0px;background:transparent;color:transparent;-webkit-transform:translate(0, -50%);transform:translate(0, -50%);cursor:pointer}.slick-prev:hover,.slick-prev:focus,.slick-next:hover,.slick-next:focus{outline:none;background:transparent;color:transparent}.slick-prev:hover:before,.slick-prev:focus:before,.slick-next:hover:before,.slick-next:focus:before{opacity:1}.slick-prev.slick-disabled:before,.slick-next.slick-disabled:before{opacity:.25}.slick-prev:before,.slick-next:before{font-family:"slick";font-size:20px;line-height:1;color:#fff;opacity:.75;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.slick-prev{left:25px}.slick-prev:before{content:"←"}.slick-next{right:25px}.slick-next:before{content:"→"}.slick-dotted.slick-slider{margin-bottom:30px}.slick-dots{position:absolute;bottom:-25px;list-style:none;display:block;text-align:center;padding:0;margin:0;width:100%}.slick-dots li{position:relative;display:inline-block;height:20px;width:20px;margin:0 5px;padding:0;cursor:pointer}.slick-dots li button{border:0;background:transparent;display:block;height:20px;width:20px;outline:none;line-height:0px;font-size:0px;color:transparent;padding:5px;cursor:pointer}.slick-dots li button:hover,.slick-dots li button:focus{outline:none}.slick-dots li button:hover:before,.slick-dots li button:focus:before{opacity:1}.slick-dots li button:before{position:absolute;top:0;left:0;content:"•";width:20px;height:20px;font-family:"slick";font-size:6px;line-height:20px;text-align:center;color:#000;opacity:.25;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.slick-dots li.slick-active button:before{color:#000;opacity:.75}.pixelgrade-hero-button-group-wrapper label+.components-button-group{margin-top:5px}.pixelgrade-hero-button-group-wrapper .components-button-group{display:-webkit-box;display:-ms-flexbox;display:flex}.pixelgrade-hero-button-group-wrapper .components-button-group:not(:last-child){margin-bottom:10px}.pixelgrade-hero-button-group-wrapper .components-button-group .components-button{padding:1px 5px 3px;height:auto;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center}.pixelgrade-hero-horizontal-alignment-button svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.u-container-width{margin-left:auto;margin-right:auto} +}.nova-media__layout{display:grid;grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));grid-gap:var(--nova-media-spacing)}.wp-block-nova-media{--nova-media-text-color: var(--nova-dark-2);--nova-media-titles-color: var(--nova-dark-3);--nova-media-subtitles-color: var(--nova-color-1);--nova-media-background-color: var(--nova-light-1);--nova-media-content-padding: 0;--nova-media-content-background-color: transparent;--nova-media-content-background-opacity: 1;--nova-media-content-box-shadow: none}.block-is-moderate,.block-is-highlighted{--nova-media-padding: var(--nova-media-spacing)}.block-is-moderate{--nova-media-background-color: var(--nova-light-2)}.block-is-highlighted{--nova-media-background-color: var(--nova-dark-1)}.content-is-moderate,.content-is-highlighted{--nova-media-content-padding: var(--nova-media-spacing)}.content-is-moderate,.content-is-highlighted.block-is-highlighted{--nova-media-content-background-color: var(--nova-light-1);--nova-media-content-box-shadow: 0 32px 128px rgba(42,54,52,0.1),0 16px 64px rgba(42,54,52,0.1),0 8px 16px rgba(42,54,52,0.1)}.content-is-moderate.block-is-highlighted{--nova-media-content-background-color: var(--nova-light-1);--nova-media-content-background-opacity: 0.2}.block-is-highlighted:not(.content-is-highlighted),.content-is-highlighted:not(.block-is-highlighted){--nova-media-text-color: var(--nova-light-1);--nova-media-titles-color: var(--nova-media-text-color);--nova-media-subtitles-color: var(--nova-media-text-color)}.content-is-highlighted:not(.block-is-highlighted){--nova-media-content-background-color: var(--nova-dark-1)}.nova-media__content{padding:var(--nova-media-content-padding);color:var(--nova-media-text-color);-webkit-box-shadow:var(--nova-media-content-box-shadow);box-shadow:var(--nova-media-content-box-shadow);margin-top:auto;margin-bottom:auto;z-index:2}.nova-media__content h1,.nova-media__content h3,.nova-media__content h3{color:var(--nova-media-titles-color)}.nova-media__content h4,.nova-media__content h5,.nova-media__content h6{color:var(--nova-media-subtitles-color)}@media not screen and (min-width: 1024px){.nova-media__content{grid-column:span 2}}.nova-media__content{position:relative}.nova-media__content:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;display:block;background-color:var(--nova-media-content-background-color);opacity:var(--nova-media-content-background-opacity)}.nova-media__aside{display:grid;grid-template-columns:repeat(12, 1fr);grid-gap:15px;min-height:400px}@media only screen and (min-width: 1024px){.has-image-on-the-left .nova-media__aside{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}}@media not screen and (min-width: 1024px){.nova-media__aside{grid-column:span 2}}.nova-media__image{position:relative;grid-column:span 6}.nova-media__image img{position:absolute;top:0;left:0;min-width:100%;min-height:100%;max-width:none;width:auto;height:auto}@supports (transform: translate(-50%, -50%)){.nova-media__image img{top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}}@supports ((-o-object-fit: cover) or (object-fit: cover)){.nova-media__image img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;top:0;left:0;-webkit-transform:none;transform:none}}.nova-media__image:first-child:last-child,.nova-media__placeholder{grid-column:span 12}.nova-media__image:first-child:nth-last-child(3){grid-column:1 / span 6}.nova-media__image:first-child:nth-last-child(3) ~ .nova-media__image:nth-child(2){grid-column:7 / span 6}.nova-media__image:first-child:nth-last-child(3) ~ .nova-media__image:last-child{grid-column:1 / span 12}.nova-media__image:nth-child(n+5){display:none}.nova-slideshow{position:relative}.nova-slideshow__slide{position:relative;overflow:hidden}.nova-slideshow.is-ready .nova-slideshow__slider,.nova-slideshow.is-ready .nova-slideshow__mask,.nova-slideshow.is-ready .nova-slideshow__foreground,.nova-slideshow.is-ready .nova-slideshow__content,.nova-slideshow.is-ready .nova-slideshow__background{position:absolute;top:0;right:0;bottom:0;left:0}.nova-slideshow__background,.nova-slideshow__foreground{will-change:transform}.nova-slideshow__media{position:absolute;top:0;left:0;min-width:100%;min-height:100%;max-width:none;width:auto;height:auto}@supports (transform: translate(-50%, -50%)){.nova-slideshow__media{top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}}@supports ((-o-object-fit: cover) or (object-fit: cover)){.nova-slideshow__media{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;top:0;left:0;-webkit-transform:none;transform:none}}.nova-slideshow__slider{z-index:100}.nova-slideshow__controls{z-index:200}.nova-slideshow__arrow{--arrow-width: 2px;--arrow-color: #555555;--arrow-background: #FFFFFF;position:absolute;top:50%;z-index:999;width:22px;height:24px;background:var(--arrow-background);border-radius:3px}.nova-slideshow__arrow:not(.nova-slideshow__arrow--disabled){cursor:pointer}.nova-slideshow__arrow:before{content:"";display:block;position:absolute;top:50%;left:50%;width:8px;height:8px}.nova-slideshow__arrow--prev{left:10px}.nova-slideshow__arrow--prev:before{border-top:var(--arrow-width) solid var(--arrow-color);border-left:var(--arrow-width) solid var(--arrow-color);-webkit-transform:translate(-30%, -50%) rotate(-45deg);transform:translate(-30%, -50%) rotate(-45deg)}.nova-slideshow__arrow--next{right:10px}.nova-slideshow__arrow--next:before{border-top:var(--arrow-width) solid var(--arrow-color);border-right:var(--arrow-width) solid var(--arrow-color);-webkit-transform:translate(-70%, -50%) rotate(45deg);transform:translate(-70%, -50%) rotate(45deg)}.nova-slideshow .slick-list{position:absolute;top:0;left:0;width:100%;height:100%}.nova-slideshow .slick-list,.nova-slideshow .slick-track{height:100%}.nova-slideshow .slick-slide{opacity:1 !important}.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-placeholder__label,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .block-editor-media-placeholder__button{display:none}.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button{padding-left:12px;text-indent:-999em;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:auto}.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button:focus:enabled,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button:focus:enabled{color:transparent}.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button:before,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button:after,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button:before,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button:after{color:#555;text-indent:0}.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button:before,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button:before{display:inline-block;font-family:dashicons;line-height:1;font-weight:400;font-style:normal;speak:none;text-decoration:inherit;text-transform:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px;height:20px;font-size:20px;vertical-align:top;text-align:center;-webkit-transition:color .1s ease-in;transition:color .1s ease-in;content:"\f464";margin-right:0.2em}.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .editor-media-placeholder__media-library-button:after,.nova-blocks-slideshow-type-panel .block-editor-media-placeholder .components-form-file-upload+.block-editor-media-placeholder__button:after{content:'Edit Gallery'}.slick-slider{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;overflow:hidden;display:block;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-track{position:relative;left:0;top:0;display:block;margin-left:auto;margin-right:auto}.slick-track:before,.slick-track:after{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{float:left;height:100%;min-height:1px;display:none}[dir="rtl"] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.slick-loading .slick-list{background:#fff url("../images/ajax-loader.gif") center center no-repeat}@font-face{font-family:"slick";src:url("./fonts/slick.eot");src:url("./fonts/slick.eot?#iefix") format("embedded-opentype"),url("./fonts/slick.woff") format("woff"),url("./fonts/slick.ttf") format("truetype"),url("./fonts/slick.svg#slick") format("svg");font-weight:normal;font-style:normal}.slick-prev,.slick-next{position:absolute;top:50%;z-index:9999;display:block;height:20px;width:20px;padding:0;border:none;outline:none;font-size:0px;line-height:0px;background:transparent;color:transparent;-webkit-transform:translate(0, -50%);transform:translate(0, -50%);cursor:pointer}.slick-prev:hover,.slick-prev:focus,.slick-next:hover,.slick-next:focus{outline:none;background:transparent;color:transparent}.slick-prev:hover:before,.slick-prev:focus:before,.slick-next:hover:before,.slick-next:focus:before{opacity:1}.slick-prev.slick-disabled:before,.slick-next.slick-disabled:before{opacity:.25}.slick-prev:before,.slick-next:before{font-family:"slick";font-size:20px;line-height:1;color:#fff;opacity:.75;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.slick-prev{left:25px}.slick-prev:before{content:"←"}.slick-next{right:25px}.slick-next:before{content:"→"}.slick-dotted.slick-slider{margin-bottom:30px}.slick-dots{position:absolute;bottom:-25px;list-style:none;display:block;text-align:center;padding:0;margin:0;width:100%}.slick-dots li{position:relative;display:inline-block;height:20px;width:20px;margin:0 5px;padding:0;cursor:pointer}.slick-dots li button{border:0;background:transparent;display:block;height:20px;width:20px;outline:none;line-height:0px;font-size:0px;color:transparent;padding:5px;cursor:pointer}.slick-dots li button:hover,.slick-dots li button:focus{outline:none}.slick-dots li button:hover:before,.slick-dots li button:focus:before{opacity:1}.slick-dots li button:before{position:absolute;top:0;left:0;content:"•";width:20px;height:20px;font-family:"slick";font-size:6px;line-height:20px;text-align:center;color:#000;opacity:.25;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.slick-dots li.slick-active button:before{color:#000;opacity:.75}.pixelgrade-hero-button-group-wrapper label+.components-button-group{margin-top:5px}.pixelgrade-hero-button-group-wrapper .components-button-group{display:-webkit-box;display:-ms-flexbox;display:flex}.pixelgrade-hero-button-group-wrapper .components-button-group:not(:last-child){margin-bottom:10px}.pixelgrade-hero-button-group-wrapper .components-button-group .components-button{padding:1px 5px 3px;height:auto;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center}.pixelgrade-hero-horizontal-alignment-button svg{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.u-container-width{margin-left:auto;margin-right:auto} :root{--nova-spacing: 10%;--nova-spacing-small: 5%;--nova-spacing-medium: 10%;--nova-spacing-large: 15%;--nova-content-width-full: 100%;--nova-content-width-large: 70%;--nova-content-width-narrow: 30%}.nova-u-content-width{--nova-content-width: var(--nova-content-width-full);max-width:var(--nova-content-width)}.nova-u-content-width-full .nova-u-content-width{--nova-content-width: var(--nova-content-width-full)}.nova-u-content-width-large .nova-u-content-width{--nova-content-width: var(--nova-content-width-large)}.nova-u-content-width-narrow .nova-u-content-width{--nova-content-width: var(--nova-content-width-narrow)}.nova-u-content-padding{padding:var(--nova-spacing)}.nova-u-spacing-small .nova-u-content-padding{--nova-spacing: var(--nova-spacing-small)}.nova-u-spacing-medium .nova-u-content-padding{--nova-spacing: var(--nova-spacing-medium)}.nova-u-spacing-large .nova-u-content-padding{--nova-spacing: var(--nova-spacing-large)} :root{--bg-master-dark: #000000;--bg-master-light: #FFFFFF;--bg-master-none: transparent}.nova-u-background-dark{--element-background: var(--bg-master-dark)}.nova-u-background-light{--element-background: var(--bg-master-light)}.nova-u-background-none{--element-background: var(--bg-master-none)}.nova-u-background{background-color:var(--element-background);-webkit-transition:background-color 0.4s ease-out;transition:background-color 0.4s ease-out}.nova-hide-clear-color .components-color-palette__custom-color{margin-right:0}.nova-hide-clear-color .components-color-palette__clear{display:none} .nova-u-content-align{position:relative;width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.nova-u-halign-left .nova-u-content-align{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.nova-u-halign-center .nova-u-content-align{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center}.nova-u-halign-right .nova-u-content-align{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.nova-u-valign-top .nova-u-content-align{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.nova-u-valign-center .nova-u-content-align{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.nova-u-valign-bottom .nova-u-content-align{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end} - -/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuL2Rpc3QvY3NzL2Jsb2Nrcy5zdHlsZS5jc3MiLCJzb3VyY2VSb290IjoiIn0=*/ \ No newline at end of file diff --git a/dist/images/ajax-loader.gif b/dist/images/ajax-loader.gif new file mode 100644 index 000000000..e0e6e9760 Binary files /dev/null and b/dist/images/ajax-loader.gif differ diff --git a/dist/js/editor.blocks.js b/dist/js/editor.blocks.js index 547463742..db9f48145 100644 --- a/dist/js/editor.blocks.js +++ b/dist/js/editor.blocks.js @@ -3,5 +3,4 @@ Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ -!function(){"use strict";function n(){for(var e=[],t=0;t=o.length&&(s=o.length-1),wp.element.createElement(L,null,wp.element.createElement(y.a,l()({},this.props,{previewImage:o[s],onPrevArrowClick:this.onPrevArrowClick.bind(this),onNextArrowClick:this.onNextArrowClick.bind(this)})),wp.element.createElement(k,null,wp.element.createElement(S,{className:"nova-blocks-slideshow-type-panel",title:b("Slides","__plugin_txtd")},!!o.length&&wp.element.createElement(_.d,{galleryImages:o,onSelectImage:function(t){e.setState({selectedIndex:t})},isSelected:c,selected:s})),"gallery"===r&&wp.element.createElement(L,null,wp.element.createElement(_.f,this.props),wp.element.createElement(S,{title:b("Height","__plugin_txtd"),initialOpen:!1},wp.element.createElement(O,{label:b("Minimum Height","__plugin_txtd"),selected:i,onChange:function(e){a({minHeight:parseInt(e,10)})},options:[{label:b("Auto","__plugin_txtd"),value:0},{label:b("Half","__plugin_txtd"),value:50},{label:b("Two Thirds","__plugin_txtd"),value:66},{label:b("Three Quarters","__plugin_txtd"),value:75},{label:b("Full Height","__plugin_txtd"),value:100}]})),wp.element.createElement(_.g,this.props)),"gallery"!==r&&wp.element.createElement(S,null,b("Coming Soon","__plugin_txtd"))),wp.element.createElement(E,null,wp.element.createElement(_.a,this.props),wp.element.createElement(_.b,this.props),wp.element.createElement(P,null,wp.element.createElement(C,{type:"image",multiple:!0,gallery:!0,value:o.map(function(e){return e.id}),onSelect:u,render:function(e){var t=e.open;return wp.element.createElement(H,{className:"components-icon-button components-toolbar__control",label:b("Change Media","__plugin_txtd"),icon:g.i,onClick:function(){t()}})}}))))}}]),t}(A);t.a=j},function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(e){for(var t,n,r=e.length;0!==r;)n=Math.floor(Math.random()*r),r-=1,t=e[r],e[r]=e[n],e[n]=t;return e}},function(e,t,n){"use strict";var r=n(0),o=n.n(r),i=n(1),l=n.n(i),a=n(2),c=n.n(a),u=n(3),s=n.n(u),p=n(4),f=n.n(p),m=n(25),d=n(152),h=wp.element,v=h.Component,g=h.Fragment,_=(wp.blockEditor.MediaUpload,function(e){function t(){l()(this,t);var e=s()(this,(t.__proto__||o()(t)).apply(this,arguments));return e.state={windowWidth:window.innerWidth,windowHeight:window.innerHeight},e}return f()(t,e),c()(t,[{key:"componentDidMount",value:function(){window.addEventListener("resize",this.updateDimensions.bind(this)),this.updateDimensions()}},{key:"updateDimensions",value:function(){this.setState({dimensions:{width:this.container.offsetWidth,height:this.container.offsetHeight}})}},{key:"renderContent",value:function(){var e=this,t=this.props,n=t.attributes,r=n.contentPadding,o=n.contentPaddingCustom,i=n.contentWidth,l=n.contentWidthCustom,a=n.applyMinimumHeightBlock,c=n.verticalAlignment,u=n.horizontalAlignment,s=n.contentColor,p=n.overlayFilterStyle,f=(n.overlayFilterStrength,n.galleryImages),h=t.previewImage,v=t.className,_=[v,"nova-slideshow is-ready","nova-u-valign-"+c,"nova-u-halign-"+u,"nova-u-spacing-"+r,"nova-u-content-width-"+i,"nova-u-background","nova-u-background-"+p],w={slideshow:{color:s},content:{},foreground:{}};"custom"===r&&(w.foreground.paddingTop=o+"%",w.foreground.paddingBottom=o+"%"),a&&(w.slideshow.minHeight=minHeight+"vh"),"custom"===i&&(w.content.maxWidth=l+"%");var y=0,b=0;return f.map(function(t){if(t.sizes&&t.sizes.large&&t.sizes.large.width){var n=t.sizes.large.width/t.sizes.large.height;y=n>y?n:y,b=e.state.dimensions.width/y}}),w.slider={minHeight:Math.max(b,y)+"px"},wp.element.createElement(g,null,!!f.length&&wp.element.createElement("div",{className:_.join(" "),style:w.slideshow},wp.element.createElement("div",{className:"nova-slideshow__slider",style:w.slider},wp.element.createElement("div",{className:"nova-slideshow__slide"},h&&wp.element.createElement(g,null,wp.element.createElement(d.a,this.props),wp.element.createElement("div",{className:"nova-slideshow__content nova-u-content-padding",style:w.foreground},wp.element.createElement("div",{className:"nova-u-content-align"},wp.element.createElement("div",{className:"nova-u-content-width",style:w.content},!!h.alt&&wp.element.createElement("h2",null,h.alt),!!h.caption&&wp.element.createElement("p",null,h.caption))))))),wp.element.createElement("div",{className:"nova-slideshow__controls"},wp.element.createElement("div",{className:"nova-slideshow__arrow nova-slideshow__arrow--prev nova-slideshow__arrow--disabled",onClick:this.props.onPrevArrowClick}),wp.element.createElement("div",{className:"nova-slideshow__arrow nova-slideshow__arrow--next nova-slideshow__arrow--disabled",onClick:this.props.onNextArrowClick}))),!f.length&&wp.element.createElement(g,null,wp.element.createElement(m.c,this.props),wp.element.createElement("div",{className:"nova-slideshow__controls"},wp.element.createElement("div",{className:"nova-slideshow__arrow nova-slideshow__arrow--prev nova-slideshow__arrow--disabled"}),wp.element.createElement("div",{className:"nova-slideshow__arrow nova-slideshow__arrow--next nova-slideshow__arrow--disabled"}))))}},{key:"render",value:function(){var e=this,t=this.state.dimensions;return wp.element.createElement("div",{ref:function(t){return e.container=t}},t&&this.renderContent())}}]),t}(v));t.a=_},function(e,t,n){"use strict";var r=n(0),o=n.n(r),i=n(1),l=n.n(i),a=n(2),c=n.n(a),u=n(3),s=n.n(u),p=n(4),f=n.n(p),m=n(66),d=wp.element.Component,h=function(e){function t(){return l()(this,t),s()(this,(t.__proto__||o()(t)).apply(this,arguments))}return f()(t,e),c()(t,[{key:"render",value:function(){var e=this.props.attributes,t=e.overlayFilterStyle,n=e.overlayFilterStrength,r={opacity:1};return"none"!==t&&(r.opacity=1-n/100),wp.element.createElement("div",{className:"nova-slideshow__background",style:this.props.style},wp.element.createElement("img",{className:"nova-slideshow__media",src:this.props.previewImage.sizes.large.url,alt:"",style:r}))}}]),t}(d);t.a=Object(m.a)(h)}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZGlzdC9qcy9lZGl0b3IuYmxvY2tzLmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA4N2UzNGU1MmVlOTgwNDMxNWQ5YyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2ljb25zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovLy8uL3NyYy91dGlscy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1leHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL193a3MtZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jbGFzc29mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wZXJmb3JtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2FsaWdubWVudC1jb250cm9scy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy93aXRoLXBhcmFsbGF4L2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Jsb2Nrcy9oZXJvL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9ibG9ja3MvaGVyby9lZGl0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9sYXlvdXQtcGFuZWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvbGF5b3V0LXBhbmVsL3BhZGRpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvbGF5b3V0LXBhbmVsL3dpZHRoLmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL3BhcmFsbGF4LXBhbmVsL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2dhbGxlcnktb3B0aW9ucy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mb3Itb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pbnZva2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191c2VyLWFnZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2NvbG9yLWNvbnRyb2xzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2Jsb2NrLWhvcml6b250YWwtYWxpZ25tZW50LXRvb2xiYXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvYmxvY2stdmVydGljYWwtYWxpZ25tZW50LXRvb2xiYXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvaGVpZ2h0LWNvbnRyb2xzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9ibG9ja3MvaGVyby9wcmV2aWV3LmpzIiwid2VicGFjazovLy8uL3NyYy9ibG9ja3MvaGVyby9iYWNrZ3JvdW5kLmpzIiwid2VicGFjazovLy8uL3NyYy9ibG9ja3MvaGVyby9jb250cm9scy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYmxvY2tzL21lZGlhL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9ibG9ja3MvbWVkaWEvZWRpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2pzb24vc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vanNvbi9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Jsb2Nrcy9tZWRpYS9jb250cm9scy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYmxvY2tzL21lZGlhL2luc3BlY3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYmxvY2tzL21lZGlhL3ByZXZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Jsb2Nrcy9zbGlkZXNob3cvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Jsb2Nrcy9zbGlkZXNob3cvZWRpdC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy91dGlsLmpzIiwid2VicGFjazovLy8uL3NyYy9ibG9ja3Mvc2xpZGVzaG93L3ByZXZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Jsb2Nrcy9zbGlkZXNob3cvYmFja2dyb3VuZC5qcyJdLCJuYW1lcyI6WyJtb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaW5zdGFsbGVkTW9kdWxlcyIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIm4iLCJfX2VzTW9kdWxlIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiZGVmYXVsdCIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJUeXBlRXJyb3IiLCJfZGVmaW5lUHJvcGVydHkiLCJfZGVmaW5lUHJvcGVydHkyIiwib2JqIiwiZGVmaW5lUHJvcGVydGllcyIsInRhcmdldCIsInByb3BzIiwibGVuZ3RoIiwiZGVzY3JpcHRvciIsIndyaXRhYmxlIiwia2V5IiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiX3R5cGVvZjIiLCJfdHlwZW9mMyIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc2V0UHJvdG90eXBlT2YiLCJfc2V0UHJvdG90eXBlT2YyIiwiX2NyZWF0ZSIsIl9jcmVhdGUyIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY29uc3RydWN0b3IiLCJ2YWx1ZSIsIl9fcHJvdG9fXyIsImNvcmUiLCJ2ZXJzaW9uIiwiX19lIiwiZ2xvYmFsIiwid2luZG93IiwiTWF0aCIsIkZ1bmN0aW9uIiwiX19nIiwic3RvcmUiLCJ1aWQiLCJTeW1ib2wiLCJVU0VfU1lNQk9MIiwiX193ZWJwYWNrX2V4cG9ydHNfXyIsImhlcm8iLCJtZWRpYSIsInNsaWRlc2hvdyIsImFsaWduQm90dG9tIiwiYWxpZ25DZW50ZXIiLCJhbGlnblRvcCIsImFsaWdubWVudCIsImludmVydCIsInN3YXAiLCJfd3AkY29tcG9uZW50cyIsIndwIiwiY29tcG9uZW50cyIsIlNWRyIsIlBhdGgiLCJlbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJ4bWxucyIsImZpbGxSdWxlIiwiY2xpcFJ1bGUiLCJpZCIsIm1hc2stdHlwZSIsIm1hc2tVbml0cyIsIngiLCJ5IiwicngiLCJtYXNrIiwiY3R4IiwiaGlkZSIsImhhcyIsIiRleHBvcnQiLCJ0eXBlIiwic291cmNlIiwib3duIiwib3V0IiwiSVNfRk9SQ0VEIiwiRiIsIklTX0dMT0JBTCIsIkciLCJJU19TVEFUSUMiLCJTIiwiSVNfUFJPVE8iLCJQIiwiSVNfQklORCIsIkIiLCJJU19XUkFQIiwiVyIsImV4cFByb3RvIiwidW5kZWZpbmVkIiwiQyIsImEiLCJiIiwidGhpcyIsImFyZ3VtZW50cyIsImFwcGx5IiwidmlydHVhbCIsIlIiLCJVIiwiaXNPYmplY3QiLCJpdCIsIl9hc3NpZ24iLCJfYXNzaWduMiIsImFuT2JqZWN0IiwiSUU4X0RPTV9ERUZJTkUiLCJ0b1ByaW1pdGl2ZSIsImRQIiwiZiIsIk8iLCJBdHRyaWJ1dGVzIiwiZSIsImNyZWF0ZURlc2MiLCJleGVjIiwiSU9iamVjdCIsImRlZmluZWQiLCJhRnVuY3Rpb24iLCJmbiIsInRoYXQiLCIka2V5cyIsImVudW1CdWdLZXlzIiwia2V5cyIsInRvU3RyaW5nIiwic2xpY2UiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xheW91dF9wYW5lbF9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19wYXJhbGxheF9wYW5lbF9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19nYWxsZXJ5X29wdGlvbnNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29sb3JfY29udHJvbHNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fYWxpZ25tZW50X2NvbnRyb2xzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2hlaWdodF9jb250cm9sc19fIiwicHgiLCJyYW5kb20iLCJjb25jYXQiLCJiaXRtYXAiLCJkZWYiLCJUQUciLCJ0YWciLCJzdGF0IiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJkZWJvdW5jZSIsImZ1bmMiLCJ3YWl0IiwidGltZW91dCIsImNvbnRleHQiLCJhcmdzIiwibGF0ZXIiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwic2hhcmVkIiwicHVzaCIsIm1vZGUiLCJjb3B5cmlnaHQiLCJkb2N1bWVudCIsImlzIiwidmFsIiwidmFsdWVPZiIsImNlaWwiLCJmbG9vciIsImlzTmFOIiwiZFBzIiwiSUVfUFJPVE8iLCJFbXB0eSIsImNyZWF0ZURpY3QiLCJpZnJhbWVEb2N1bWVudCIsImlmcmFtZSIsInN0eWxlIiwiZGlzcGxheSIsImFwcGVuZENoaWxkIiwic3JjIiwiY29udGVudFdpbmRvdyIsIm9wZW4iLCJ3cml0ZSIsImx0IiwiY2xvc2UiLCJjcmVhdGUiLCJQcm9wZXJ0aWVzIiwicmVzdWx0Iiwic3BsaXQiLCJMSUJSQVJZIiwid2tzRXh0IiwiJFN5bWJvbCIsImNoYXJBdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsIlByb21pc2VDYXBhYmlsaXR5IiwicmVzb2x2ZSIsInJlamVjdCIsInByb21pc2UiLCIkJHJlc29sdmUiLCIkJHJlamVjdCIsInRvT2JqZWN0IiwiT2JqZWN0UHJvdG8iLCJnZXRQcm90b3R5cGVPZiIsImZhaWxzIiwiS0VZIiwiZXhwIiwiX2l0ZXJhdG9yIiwiX2l0ZXJhdG9yMiIsIl9zeW1ib2wiLCJfc3ltYm9sMiIsIl90eXBlb2YiLCIkYXQiLCJTdHJpbmciLCJpdGVyYXRlZCIsIl90IiwiX2kiLCJwb2ludCIsImluZGV4IiwiZG9uZSIsInJlZGVmaW5lIiwiSXRlcmF0b3JzIiwiJGl0ZXJDcmVhdGUiLCJzZXRUb1N0cmluZ1RhZyIsIklURVJBVE9SIiwiQlVHR1kiLCJyZXR1cm5UaGlzIiwiQmFzZSIsIk5BTUUiLCJuZXh0IiwiREVGQVVMVCIsIklTX1NFVCIsIkZPUkNFRCIsIm1ldGhvZHMiLCJJdGVyYXRvclByb3RvdHlwZSIsImdldE1ldGhvZCIsImtpbmQiLCJwcm90byIsIkRFRl9WQUxVRVMiLCJWQUxVRVNfQlVHIiwiJG5hdGl2ZSIsIiRkZWZhdWx0IiwiJGVudHJpZXMiLCIkYW55TmF0aXZlIiwiZW50cmllcyIsInZhbHVlcyIsInRvSU9iamVjdCIsImFycmF5SW5kZXhPZiIsIm5hbWVzIiwiY29mIiwidG9JbnRlZ2VyIiwibWluIiwiZG9jdW1lbnRFbGVtZW50IiwiVE9fU1RSSU5HX1RBRyIsIkRPTUl0ZXJhYmxlcyIsIkNvbGxlY3Rpb24iLCJBcnJheSIsImhpZGRlbktleXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicElFIiwiZ09QRCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkFSRyIsInRyeUdldCIsIlQiLCJjYWxsZWUiLCJTUEVDSUVTIiwiRCIsImRlZmVyIiwiY2hhbm5lbCIsInBvcnQiLCJpbnZva2UiLCJodG1sIiwiY2VsIiwicHJvY2VzcyIsInNldFRhc2siLCJzZXRJbW1lZGlhdGUiLCJjbGVhclRhc2siLCJjbGVhckltbWVkaWF0ZSIsIk1lc3NhZ2VDaGFubmVsIiwiRGlzcGF0Y2giLCJjb3VudGVyIiwicXVldWUiLCJydW4iLCJsaXN0ZW5lciIsImV2ZW50IiwiZGF0YSIsIm5leHRUaWNrIiwibm93IiwicG9ydDIiLCJwb3J0MSIsIm9ubWVzc2FnZSIsInBvc3RNZXNzYWdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImltcG9ydFNjcmlwdHMiLCJyZW1vdmVDaGlsZCIsInNldCIsImNsZWFyIiwidiIsIm5ld1Byb21pc2VDYXBhYmlsaXR5IiwicHJvbWlzZUNhcGFiaWxpdHkiLCJBbGlnbm1lbnRUb29sYmFyIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2ljb25zX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3N0eWxlX3Njc3NfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fYmxvY2tfaG9yaXpvbnRhbF9hbGlnbm1lbnRfdG9vbGJhcl9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19ibG9ja192ZXJ0aWNhbF9hbGlnbm1lbnRfdG9vbGJhcl9fIiwiX18iLCJpMThuIiwiX3dwJGVsZW1lbnQiLCJDb21wb25lbnQiLCJGcmFnbWVudCIsIkRyb3Bkb3duIiwiSWNvbkJ1dHRvbiIsIlBhbmVsUm93IiwiVG9vbGJhciIsIl9Db21wb25lbnQiLCJfdGhpczIiLCJjbGFzc05hbWUiLCJwb3NpdGlvbiIsImNvbnRlbnRDbGFzc05hbWUiLCJyZW5kZXJUb2dnbGUiLCJfcmVmIiwiaXNPcGVuIiwib25Ub2dnbGUiLCJvbkNsaWNrIiwiaWNvbiIsImljb25zIiwiYXJpYS1leHBhbmRlZCIsImxhYmVsIiwibGFiZWxQb3NpdGlvbiIsImZvY3VzT25Nb3VudCIsInJlbmRlckNvbnRlbnQiLCJfcmVmMiIsIm9uQ2xvc2UiLCJBbGlnbm1lbnRDb250cm9scyIsIl9Db21wb25lbnQyIiwiX3Byb3BzIiwiX3Byb3BzJGF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVzIiwiYXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2siLCJob3Jpem9udGFsQWxpZ25tZW50IiwidmVydGljYWxBbGlnbm1lbnQiLCJzZXRBdHRyaWJ1dGVzIiwib25DaGFuZ2UiLCJzZWxlY3QiLCJnZXRTZWxlY3RlZEJsb2NrIiwiaW5uZXJCbG9ja3MiLCJtYXAiLCJibG9jayIsImRpc3BhdGNoIiwidXBkYXRlQmxvY2tBdHRyaWJ1dGVzIiwiY2xpZW50SWQiLCJhbGlnbiIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX19fZGVmYXVsdCIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0Iiwid2l0aFBhcmFsbGF4IiwiV3JhcHBlZENvbXBvbmVudCIsIl9jbGFzcyIsIl90aGlzIiwic3RhdGUiLCJ3aW5kb3dXaWR0aCIsImlubmVyV2lkdGgiLCJ3aW5kb3dIZWlnaHQiLCJpbm5lckhlaWdodCIsInByb2dyZXNzIiwidXBkYXRlSGFuZGxlciIsInVwZGF0ZURpbWVuc2lvbnMiLCJiaW5kIiwic2Nyb2xsQ29udGFpbmVyIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjb250YWluZXJCb3giLCJjb250YWluZXIiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJvZmZzZXRIZWlnaHQiLCJhY3R1YWxQcm9ncmVzcyIsIm1heCIsInNldFN0YXRlIiwic2Nyb2xsVG9wIiwiZGltZW5zaW9ucyIsIm9mZnNldFdpZHRoIiwidG9wIiwiZW5hYmxlUGFyYWxsYXgiLCJwYXJhbGxheEFtb3VudCIsInBhcmFsbGF4Q3VzdG9tQW1vdW50IiwiYWN0dWFsUGFyYWxsYXhBbW91bnQiLCJwYXJzZUludCIsIl9zdGF0ZSIsIm5ld0hlaWdodCIsInNjYWxlIiwib2Zmc2V0WSIsInRyYW5zaXRpb24iLCJ0cmFuc2Zvcm0iLCJyZWYiLCJlbCIsImdldFBhcmFsbGF4U3R5bGVzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zY3NzX3N0eWxlX3Njc3NfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc2Nzc19lZGl0b3Jfc2Nzc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pY29uc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19lZGl0X18iLCJyZWdpc3RlckJsb2NrVHlwZSIsImJsb2NrcyIsIklubmVyQmxvY2tzIiwiYmxvY2tFZGl0b3IiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwiY2F0ZWdvcnkiLCJlZGl0Iiwic2F2ZSIsIkNvbnRlbnQiLCJnZXRFZGl0V3JhcHBlclByb3BzIiwiZ2V0U2V0dGluZ3MiLCJhbGlnbldpZGUiLCJkYXRhLWFsaWduIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X191dGlsc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19jb21wb25lbnRzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX3ByZXZpZXdfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fY29udHJvbHNfXyIsIkluc3BlY3RvckNvbnRyb2xzIiwiZWRpdG9yRGF0YSIsInVwZGF0ZUJsb2NrcyIsImdldEJsb2NrcyIsImZpbHRlciIsImhlcm9CbG9ja0luZGV4IiwiX2Jsb2NrJGF0dHJpYnV0ZXMkYXR0IiwiYXBwbHlNaW5pbXVtSGVpZ2h0Iiwic2Nyb2xsSW5kaWNhdG9yIiwic2Nyb2xsSW5kaWNhdG9yQmxvY2siLCJibG9ja0luZGV4IiwiZmluZEluZGV4IiwidGVzdEJsb2NrIiwiYmxvY2tMaXN0IiwiZGVib3VuY2VkT25TdWJzY3JpYmUiLCJuZXdCbG9ja0xpc3QiLCJibG9ja0xpc3RDaGFuZ2VkIiwic29tZSIsInN1YnNjcmliZSIsIkVkaXQiLCIkZ2V0UHJvdG90eXBlT2YiLCIkT2JqZWN0IiwiZGVzYyIsIlRPX1NUUklORyIsInBvcyIsImNoYXJDb2RlQXQiLCJnZXRLZXlzIiwidG9MZW5ndGgiLCJ0b0Fic29sdXRlSW5kZXgiLCJJU19JTkNMVURFUyIsIiR0aGlzIiwiZnJvbUluZGV4IiwiYWRkVG9VbnNjb3BhYmxlcyIsInN0ZXAiLCJfayIsIkFyZ3VtZW50cyIsIkRFU0NSSVBUT1JTIiwiTUVUQSIsIiRmYWlscyIsIndrcyIsIndrc0RlZmluZSIsImVudW1LZXlzIiwiaXNBcnJheSIsImdPUE5FeHQiLCIkR09QRCIsIiRHT1BTIiwiJERQIiwiZ09QTiIsIiRKU09OIiwiSlNPTiIsIl9zdHJpbmdpZnkiLCJzdHJpbmdpZnkiLCJISURERU4iLCJUT19QUklNSVRJVkUiLCJpc0VudW0iLCJTeW1ib2xSZWdpc3RyeSIsIkFsbFN5bWJvbHMiLCJPUFN5bWJvbHMiLCJVU0VfTkFUSVZFIiwiUU9iamVjdCIsInNldHRlciIsImZpbmRDaGlsZCIsInNldFN5bWJvbERlc2MiLCJwcm90b0Rlc2MiLCJ3cmFwIiwic3ltIiwiaXNTeW1ib2wiLCJpdGVyYXRvciIsIiRkZWZpbmVQcm9wZXJ0eSIsIiRkZWZpbmVQcm9wZXJ0aWVzIiwiJGNyZWF0ZSIsIiRwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIkUiLCIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiJGdldE93blByb3BlcnR5TmFtZXMiLCIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiSVNfT1AiLCIkc2V0IiwiZXM2U3ltYm9scyIsImoiLCJ3ZWxsS25vd25TeW1ib2xzIiwiayIsImZvciIsImtleUZvciIsInVzZVNldHRlciIsInVzZVNpbXBsZSIsIkZBSUxTX09OX1BSSU1JVElWRVMiLCJyZXBsYWNlciIsIiRyZXBsYWNlciIsInNldERlc2MiLCJpc0V4dGVuc2libGUiLCJGUkVFWkUiLCJwcmV2ZW50RXh0ZW5zaW9ucyIsInNldE1ldGEiLCJ3IiwiZmFzdEtleSIsImdldFdlYWsiLCJvbkZyZWV6ZSIsIm1ldGEiLCJORUVEIiwiZ09QUyIsImdldFN5bWJvbHMiLCJzeW1ib2xzIiwiYXJnIiwid2luZG93TmFtZXMiLCJnZXRXaW5kb3dOYW1lcyIsInNldFByb3RvdHlwZU9mIiwiY2hlY2siLCJ0ZXN0IiwiYnVnZ3kiLCJhc3NpZ24iLCIkYXNzaWduIiwiQSIsIksiLCJmb3JFYWNoIiwiam9pbiIsImFMZW4iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3BhZGRpbmdfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fd2lkdGhfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc3R5bGVfc2Nzc19fIiwiUGFuZWxCb2R5IiwiTGF5b3V0UGFuZWwiLCJpbml0aWFsT3BlbiIsImNoaWxkcmVuIiwiQnV0dG9uIiwiQnV0dG9uR3JvdXAiLCJSYW5nZUNvbnRyb2wiLCJQYWRkaW5nQ29udHJvbHMiLCJjb250ZW50UGFkZGluZyIsImNvbnRlbnRQYWRkaW5nQ3VzdG9tIiwiY29udGVudFBhZGRpbmdPcHRpb25zIiwib3B0aW9uIiwiaXNEZWZhdWx0IiwiaXNQcmltYXJ5IiwiV2lkdGhDb250cm9scyIsImNvbnRlbnRXaWR0aCIsImNvbnRlbnRXaWR0aEN1c3RvbSIsImNvbnRlbnRXaWR0aE9wdGlvbnMiLCJSYWRpb0NvbnRyb2wiLCJUb2dnbGVDb250cm9sIiwiUGFyYWxsYXhQYW5lbCIsImNoZWNrZWQiLCJzZWxlY3RlZCIsIm9wdGlvbnMiLCJoZWxwIiwiR2FsbGVyeVBsYWNlaG9sZGVyIiwiR2FsbGVyeVByZXZpZXciLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX3Byb21pc2VfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfcHJvbWlzZV9fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCIsIl93cCRibG9ja0VkaXRvciIsIkZvcm1GaWxlVXBsb2FkIiwiU2VsZWN0Q29udHJvbCIsIk1lZGlhUGxhY2Vob2xkZXIiLCJNZWRpYVVwbG9hZCIsIkFMTE9XRURfTUVESUFfVFlQRVMiLCJnYWxsZXJ5SW1hZ2VzIiwicHJvbWlzZXMiLCJpbWFnZSIsImFwaVJlcXVlc3QiLCJwYXRoIiwidGhlbiIsIm5ld0ltYWdlIiwiYWxsIiwic2l6ZXMiLCJsYXJnZSIsInVybCIsImhhc0ltYWdlcyIsIm9uU2VsZWN0SW1hZ2UiLCJhZGRUb0dhbGxlcnkiLCJsYWJlbHMiLCJpbnN0cnVjdGlvbnMiLCJvblNlbGVjdCIsIm9uQ2hhbmdlR2FsbGVyeSIsImFjY2VwdCIsImFsbG93ZWRUeXBlcyIsIm11bHRpcGxlIiwiX3Byb3BzMiIsImlzU2VsZWN0ZWQiLCJjbGFzcyIsImltZyIsImNsYXNzZXMiLCJ0aHVtYm5haWwiLCJhbHQiLCJQcm9taXNlIiwiSW50ZXJuYWwiLCJuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkiLCJPd25Qcm9taXNlQ2FwYWJpbGl0eSIsIldyYXBwZXIiLCJjbGFzc29mIiwiYW5JbnN0YW5jZSIsImZvck9mIiwic3BlY2llc0NvbnN0cnVjdG9yIiwidGFzayIsIm1pY3JvdGFzayIsIm5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlIiwicGVyZm9ybSIsInVzZXJBZ2VudCIsInByb21pc2VSZXNvbHZlIiwidmVyc2lvbnMiLCJ2OCIsIiRQcm9taXNlIiwiaXNOb2RlIiwiZW1wdHkiLCJGYWtlUHJvbWlzZSIsIlByb21pc2VSZWplY3Rpb25FdmVudCIsImluZGV4T2YiLCJpc1RoZW5hYmxlIiwibm90aWZ5IiwiaXNSZWplY3QiLCJfbiIsImNoYWluIiwiX2MiLCJfdiIsIm9rIiwiX3MiLCJyZWFjdGlvbiIsImV4aXRlZCIsImhhbmRsZXIiLCJmYWlsIiwiZG9tYWluIiwiX2giLCJvbkhhbmRsZVVuaGFuZGxlZCIsImVudGVyIiwiZXhpdCIsIm9uVW5oYW5kbGVkIiwiY29uc29sZSIsInVuaGFuZGxlZCIsImlzVW5oYW5kbGVkIiwiZW1pdCIsIm9udW5oYW5kbGVkcmVqZWN0aW9uIiwicmVhc29uIiwiZXJyb3IiLCJfYSIsIm9ucmVqZWN0aW9uaGFuZGxlZCIsIiRyZWplY3QiLCJfZCIsIl93IiwiJHJlc29sdmUiLCJ3cmFwcGVyIiwiZXhlY3V0b3IiLCJlcnIiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJjYXRjaCIsInIiLCJjYXBhYmlsaXR5IiwiaXRlciIsIml0ZXJhYmxlIiwicmVtYWluaW5nIiwiJGluZGV4IiwiYWxyZWFkeUNhbGxlZCIsInJhY2UiLCJmb3JiaWRkZW5GaWVsZCIsImlzQXJyYXlJdGVyIiwiZ2V0SXRlckZuIiwiQlJFQUsiLCJSRVRVUk4iLCJpdGVyRm4iLCJyZXQiLCJBcnJheVByb3RvIiwiZ2V0SXRlcmF0b3JNZXRob2QiLCJ1biIsIm1hY3JvdGFzayIsIk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiLCJoZWFkIiwibGFzdCIsImZsdXNoIiwicGFyZW50IiwibmF2aWdhdG9yIiwic3RhbmRhbG9uZSIsInRvZ2dsZSIsIm5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsIm9ic2VydmUiLCJjaGFyYWN0ZXJEYXRhIiwic2FmZSIsIlNBRkVfQ0xPU0lORyIsInJpdGVyIiwiZnJvbSIsInNraXBDbG9zaW5nIiwiYXJyIiwiZmluYWxseSIsIm9uRmluYWxseSIsImlzRnVuY3Rpb24iLCJ0cnkiLCJjYWxsYmFja2ZuIiwiQ29sb3JUb29sYmFyIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zdHlsZV9zY3NzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2ljb25zX18iLCJDb2xvclBhbGV0dGUiLCJQYW5lbENvbG9yU2V0dGluZ3MiLCJjb2xvcnMiLCJjb2xvciIsIk92ZXJsYXlDb250cm9scyIsIm92ZXJsYXlGaWx0ZXJTdHlsZSIsIm92ZXJsYXlGaWx0ZXJTdHJlbmd0aCIsIkNvbG9yQ29udHJvbHMiLCJjb250ZW50Q29sb3IiLCJkaXNhYmxlQ3VzdG9tQ29sb3JzIiwiX0NvbXBvbmVudDMiLCJDb2xvclBhbmVsIiwiX3Byb3BzMyIsImNvbG9yU2V0dGluZ3MiLCJfQ29tcG9uZW50NCIsIl90aGlzNSIsIkJsb2NrSG9yaXpvbnRhbEFsaWdubWVudFRvb2xiYXIiLCJhcHBseU9yVW5zZXQiLCJpc0NvbGxhcHNlZCIsIl9yZWYkY29udHJvbHMiLCJjb250cm9scyIsIkRFRkFVTFRfQ09OVFJPTFMiLCJhY3RpdmVBbGlnbm1lbnQiLCJCTE9DS19BTElHTk1FTlRTX0NPTlRST0xTIiwiZGVmYXVsdEFsaWdubWVudENvbnRyb2wiLCJERUZBVUxUX0NPTlRST0wiLCJjb250cm9sIiwiaXNBY3RpdmUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2ljb25zX18iLCJ3aXRoVmlld3BvcnRNYXRjaCIsInZpZXdwb3J0Iiwid2l0aFNlbGVjdCIsIl93cCRjb21wb3NlIiwiY29tcG9zZSIsImNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50IiwiY3JlYXRlQ29udGV4dCIsIl9jcmVhdGVDb250ZXh0IiwiZm9jdXNlZEVsZW1lbnQiLCJzZXRGb2N1c2VkRWxlbWVudCIsIkNvbnN1bWVyIiwiUHJvdmlkZXIiLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJtYXBDb250ZXh0VG9Qcm9wcyIsIk9yaWdpbmFsQ29tcG9uZW50IiwiaXNMYXJnZVZpZXdwb3J0IiwiX3JlZjMiLCJfc2VsZWN0IiwiZ2V0QmxvY2tSb290Q2xpZW50SWQiLCJoYXNGaXhlZFRvb2xiYXIiLCJCbG9ja1ZlcnRpY2FsQWxpZ25tZW50VG9vbGJhciIsIl94IiwiYm90dG9tIiwiSGVpZ2h0UGFuZWwiLCJTY3JvbGxJbmRpY2F0b3JQYW5lbCIsIl93cCRkYXRhIiwibWluSGVpZ2h0IiwiaGVyb0Jsb2NrcyIsImdldFNlbGVjdGVkQmxvY2tDbGllbnRJZCIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFja2dyb3VuZF9fIiwiSGVyb1ByZXZpZXciLCJzdHlsZXMiLCJmb3JlZ3JvdW5kIiwiY29udGVudCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwibWF4V2lkdGgiLCJ0ZW1wbGF0ZSIsImxldmVsIiwidGV4dCIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fY29tcG9uZW50c193aXRoX3BhcmFsbGF4X18iLCJIZXJvQmFja2dyb3VuZCIsIm9wYWNpdHkiLCJmdWxsIiwibXV0ZWQiLCJhdXRvUGxheSIsImxvb3AiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2NvbXBvbmVudHNfXyIsIkJsb2NrQ29udHJvbHMiLCJIZXJvQmxvY2tDb250cm9scyIsInJlbmRlciIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2NvcmVfanNfanNvbl9zdHJpbmdpZnlfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2NvcmVfanNfanNvbl9zdHJpbmdpZnlfX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19jb250cm9sc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19pbnNwZWN0b3JfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fcHJldmlld19fIiwiaW1hZ2VzIiwidXBkYXRlSW1hZ2VzIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3Rfa2V5c19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3Rfa2V5c19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9jb3JlX2pzX3Byb21pc2VfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2NvcmVfanNfcHJvbWlzZV9fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faWNvbnNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fY29tcG9uZW50c19hbGlnbm1lbnRfY29udHJvbHNfXyIsIkNvbnRyb2xzIiwibWVkaWFQb3NpdGlvbiIsIl9hdHRyaWJ1dGVzJGltYWdlcyIsInBhcnNlIiwiTUVESUFfQUxJR05NRU5UU19DT05UUk9MUyIsImdhbGxlcnkiLCJJbnNwZWN0b3IiLCJjb250ZW50U3R5bGUiLCJibG9ja1N0eWxlIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2NsYXNzbmFtZXNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9jbGFzc25hbWVzX19fZGVmYXVsdCIsIkFMTE9XRURfQkxPQ0tTIiwiVEVNUExBVEUiLCJNZWRpYVByZXZpZXciLCJjbGFzc05hbWVzIiwiY2xhc3NuYW1lcyIsImFsbG93ZWRCbG9ja3MiLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fIiwiX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18iLCJhcmdUeXBlIiwiaW5uZXIiLCJoYXNPd24iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2ljb25zX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2NvbXBvbmVudHNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fY29tcG9uZW50c191dGlsX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19wcmV2aWV3X18iLCJkZWZhdWx0R2FsbGVyeUltYWdlcyIsImNhcHRpb24iLCJzZWxlY3RlZEluZGV4Iiwic2h1ZmZsZUFycmF5IiwibmV3SW5kZXgiLCJfdGhpczMiLCJfcHJvcHMyJGF0dHJpYnV0ZXMiLCJzbGlkZXNob3dUeXBlIiwicHJldmlld0ltYWdlIiwib25QcmV2QXJyb3dDbGljayIsIm9uTmV4dEFycm93Q2xpY2siLCJhcnJheSIsInRlbXBvcmFyeVZhbHVlIiwicmFuZG9tSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2NvbXBvbmVudHNfXyIsIl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fYmFja2dyb3VuZF9fIiwiU2xpZGVzaG93UHJldmlldyIsIm1heEFzcGVjdFJhdGlvIiwibWVkaWFNaW5IZWlnaHQiLCJhc3BlY3RSYXRpbyIsInNsaWRlciIsIlNsaWRlc2hvd0JhY2tncm91bmQiXSwibWFwcGluZ3MiOiJDQUFTLFNBQVVBLEdDSW5CLFFBQUFDLEdBQUFDLEdBR0EsR0FBQUMsRUFBQUQsR0FDQSxNQUFBQyxHQUFBRCxHQUFBRSxPQUdBLElBQUFDLEdBQUFGLEVBQUFELElBQ0FJLEVBQUFKLEVBQ0FLLEdBQUEsRUFDQUgsV0FVQSxPQU5BSixHQUFBRSxHQUFBTSxLQUFB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LFFBQVUsRUFBSW5FLEVBQXdCLEtBSTdDaHJCLEdBQUFJLFFBQUFDLGNBQUEsT0FBS3FRLFVBQVUsNkJBQTZCdEosTUFBUXZFLEtBQUt6RixNQUFNZ0ssT0FDOURwSCxHQUFBSSxRQUFBQyxjQUFBLE9BQUtxUSxVQUFVLHdCQUF3Qm5KLElBQU0xRSxLQUFLekYsTUFBTW0yQixhQUFhN1EsTUFBTUMsTUFBTUMsSUFBTWlCLElBQUksR0FBR3pjLE1BQVFvbkIsU3BKMnVMbEc2RixHb0o5dkwwQm5rQixFQXlCbkJ3RCxpQkFBYzJnQiIsImZpbGUiOiIuL2Rpc3QvanMvZWRpdG9yLmJsb2Nrcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA2Nyk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg3MiksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSksXG4vKiAxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oNzQpO1xuXG52YXIgX2RlZmluZVByb3BlcnR5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZmluZVByb3BlcnR5KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICgwLCBfZGVmaW5lUHJvcGVydHkyLmRlZmF1bHQpKHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cbi8qKiovIH0pLFxuLyogMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3R5cGVvZjIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcblxudmFyIF90eXBlb2YzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHlwZW9mMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChzZWxmLCBjYWxsKSB7XG4gIGlmICghc2VsZikge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBjYWxsICYmICgodHlwZW9mIGNhbGwgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKGNhbGwpKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmO1xufTtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk2KTtcblxudmFyIF9zZXRQcm90b3R5cGVPZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zZXRQcm90b3R5cGVPZik7XG5cbnZhciBfY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDApO1xuXG52YXIgX2NyZWF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGUpO1xuXG52YXIgX3R5cGVvZjIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcblxudmFyIF90eXBlb2YzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHlwZW9mMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyAodHlwZW9mIHN1cGVyQ2xhc3MgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKHN1cGVyQ2xhc3MpKSk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSAoMCwgX2NyZWF0ZTIuZGVmYXVsdCkoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZjIuZGVmYXVsdCA/ICgwLCBfc2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59O1xuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxudmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi45JyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG4vKioqLyB9KSxcbi8qIDYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgc3RvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KSgnd2tzJyk7XG52YXIgdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XG52YXIgU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcblxuXG4vKioqLyB9KSxcbi8qIDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgbm92YSAqL1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBoZXJvOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbWVkaWE7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImhcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzbGlkZXNob3c7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhbGlnbkJvdHRvbTsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFsaWduQ2VudGVyOyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJjXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYWxpZ25Ub3A7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImRcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhbGlnbm1lbnQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImZcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnZlcnQ7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImlcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzd2FwOyB9KTtcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgU1ZHID0gX3dwJGNvbXBvbmVudHMuU1ZHLFxuICAgIFBhdGggPSBfd3AkY29tcG9uZW50cy5QYXRoO1xuXG5cbnZhciBub3ZhID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgIFwic3ZnXCIsXG4gICAgeyB3aWR0aDogXCIzNlwiLCBoZWlnaHQ6IFwiMzZcIiwgdmlld0JveDogXCIwIDAgMzYgMzZcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgfSxcbiAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLCBjbGlwUnVsZTogXCJldmVub2RkXCIsIGQ6IFwiTTAgMThDMCA4LjA1ODg4IDguMDU4ODggMCAxOCAwQzI3Ljk0MTEgMCAzNiA4LjA1ODg4IDM2IDE4QzM2IDI3Ljk0MTEgMjcuOTQxMSAzNiAxOCAzNkM4LjA1ODg4IDM2IDAgMjcuOTQxMSAwIDE4Wk0xMi4wMzk4IDE0QzEyLjQwNjkgMTAuNjI2IDE1LjI2NTIgOCAxOC43MzY4IDhIMjAuNDIxMUMyNC42MDY4IDggMjggMTEuMzkzMiAyOCAxNS41Nzg5VjE2LjM4MUMyOCAyMC4zODA5IDI0LjkxNzcgMjMuNjYwOSAyMC45OTg3IDIzLjk3NTNDMjAuOTk5NiAyMy45MzI0IDIxIDIzLjg4OTMgMjEgMjMuODQ2MlYyMS4yNzI3QzIxIDE3LjI1NjEgMTcuNzQzOSAxNCAxMy43MjczIDE0SDEyLjAzOThaXCIsIGZpbGw6IFwiIzY1NjVGMlwiIH0pLFxuICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBkOiBcIk04IDIxLjI4NTdDOCAxOC45MTg4IDkuOTE4NzggMTcgMTIuMjg1NyAxN0gxMy40NTQ1QzE1Ljk2NDkgMTcgMTggMTkuMDM1MSAxOCAyMS41NDU1VjIzLjE1MzhDMTggMjUuMjc4IDE2LjI3OCAyNyAxNC4xNTM4IDI3SDEzLjcxNDNDMTAuNTU4NCAyNyA4IDI0LjQ0MTYgOCAyMS4yODU3WlwiLCBmaWxsOiBcIiNGRkU0MkVcIiB9KVxuKTtcblxudmFyIGhlcm8gPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgXCJzdmdcIixcbiAgICB7IHdpZHRoOiBcIjI0XCIsIGhlaWdodDogXCIyNFwiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLCBmaWxsOiBcIm5vbmVcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB9LFxuICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJtYXNrXCIsXG4gICAgICAgIHsgaWQ6IFwibWFzazBcIiwgXCJtYXNrLXR5cGVcIjogXCJhbHBoYVwiLCBtYXNrVW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIiwgeDogXCIwXCIsIHk6IFwiMFwiLCB3aWR0aDogXCIyNFwiLCBoZWlnaHQ6IFwiMjRcIiB9LFxuICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHsgd2lkdGg6IFwiMjRcIiwgaGVpZ2h0OiBcIjI0XCIsIHJ4OiBcIjEyXCIsIGZpbGw6IFwiIzY1NjVGMlwiIH0pXG4gICAgKSxcbiAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwiZ1wiLFxuICAgICAgICB7IG1hc2s6IFwidXJsKCNtYXNrMClcIiB9LFxuICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLCBjbGlwUnVsZTogXCJldmVub2RkXCIsIGQ6IFwiTTEyIDBDNS4zNzI1OCAwIDAgNS4zNzI1OCAwIDEyQzAgMTguNjI3NCA1LjM3MjU4IDI0IDEyIDI0QzE4LjYyNzQgMjQgMjQgMTguNjI3NCAyNCAxMkMyNCA1LjM3MjU4IDE4LjYyNzQgMCAxMiAwWk00IDguNDkxMjNDNCA2LjAxMDc5IDcuMDE2MTkgNCAxMC43MzY4IDRIMTEuNjE5QzE2LjI0NzcgNCAyMCA2LjUwMTUyIDIwIDkuNTg3M0MyMCAxMi4zOTI2IDE2LjU4ODggMTQuNjY2NyAxMi4zODEgMTQuNjY2N0gxMS41Nzg5QzcuMzkzMjEgMTQuNjY2NyA0IDEyLjQwNDUgNCA5LjYxNDAzVjguNDkxMjNaXCIsIGZpbGw6IFwiIzY1NjVGMlwiIH0pLFxuICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZDogXCJNNyAxOC43MTQzQzcgMTkuNDI0NCA3LjU3NTYzIDIwIDguMjg1NzEgMjBIMTUuNUMxNi4zMjg0IDIwIDE3IDE5LjMyODQgMTcgMTguNVYxOC41QzE3IDE3LjY3MTYgMTYuMzI4NCAxNyAxNS41IDE3SDguNzE0MjlDNy43Njc1MSAxNyA3IDE3Ljc2NzUgNyAxOC43MTQzVjE4LjcxNDNaXCIsIGZpbGw6IFwiI0ZGRTQyRVwiIH0pXG4gICAgKVxuKTtcblxudmFyIG1lZGlhID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgIFwic3ZnXCIsXG4gICAgeyB3aWR0aDogXCIzNlwiLCBoZWlnaHQ6IFwiMzZcIiwgdmlld0JveDogXCIwIDAgMzYgMzZcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgfSxcbiAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwibWFza1wiLFxuICAgICAgICB7IGlkOiBcInBhdGgtMS1vdXRzaWRlLTFcIiwgbWFza1VuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsIHg6IFwiLTJcIiwgeTogXCItMlwiLCB3aWR0aDogXCI0MFwiLCBoZWlnaHQ6IFwiNDBcIiwgZmlsbDogXCJibGFja1wiIH0sXG4gICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcInJlY3RcIiwgeyBmaWxsOiBcIndoaXRlXCIsIHg6IFwiLTJcIiwgeTogXCItMlwiLCB3aWR0aDogXCI0MFwiLCBoZWlnaHQ6IFwiNDBcIiB9KSxcbiAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGxSdWxlOiBcImV2ZW5vZGRcIiwgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLCBkOiBcIk0xOCAwQzguMDU4ODggMCAwIDguMDU4ODggMCAxOEMwIDI3Ljk0MTEgOC4wNTg4OCAzNiAxOCAzNkMyNy45NDExIDM2IDM2IDI3Ljk0MTEgMzYgMThDMzYgOC4wNTg4OCAyNy45NDExIDAgMTggMFpNMjMuNDczNyAyNUMyMC40NTA3IDI1IDE4IDIyLjU0OTMgMTggMTkuNTI2M1YxOC44MDk1QzE4IDE1LjA0ODcgMjEuMDQ4NyAxMiAyNC44MDk1IDEyQzI4LjIyODQgMTIgMzEgMTQuNzcxNiAzMSAxOC4xOTA1VjE4Ljg0MjFDMzEgMjIuMjQzIDI4LjI0MyAyNSAyNC44NDIxIDI1SDIzLjQ3MzdaXCIgfSlcbiAgICApLFxuICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsUnVsZTogXCJldmVub2RkXCIsIGNsaXBSdWxlOiBcImV2ZW5vZGRcIiwgZDogXCJNMTggMEM4LjA1ODg4IDAgMCA4LjA1ODg4IDAgMThDMCAyNy45NDExIDguMDU4ODggMzYgMTggMzZDMjcuOTQxMSAzNiAzNiAyNy45NDExIDM2IDE4QzM2IDguMDU4ODggMjcuOTQxMSAwIDE4IDBaTTIzLjQ3MzcgMjVDMjAuNDUwNyAyNSAxOCAyMi41NDkzIDE4IDE5LjUyNjNWMTguODA5NUMxOCAxNS4wNDg3IDIxLjA0ODcgMTIgMjQuODA5NSAxMkMyOC4yMjg0IDEyIDMxIDE0Ljc3MTYgMzEgMTguMTkwNVYxOC44NDIxQzMxIDIyLjI0MyAyOC4yNDMgMjUgMjQuODQyMSAyNUgyMy40NzM3WlwiLCBmaWxsOiBcIiM2NTY1RjJcIiB9KSxcbiAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZDogXCJNMiAxOEMyIDkuMTYzNDQgOS4xNjM0NCAyIDE4IDJWLTJDNi45NTQzMSAtMiAtMiA2Ljk1NDMxIC0yIDE4SDJaTTE4IDM0QzkuMTYzNDQgMzQgMiAyNi44MzY2IDIgMThILTJDLTIgMjkuMDQ1NyA2Ljk1NDMxIDM4IDE4IDM4VjM0Wk0zNCAxOEMzNCAyNi44MzY2IDI2LjgzNjYgMzQgMTggMzRWMzhDMjkuMDQ1NyAzOCAzOCAyOS4wNDU3IDM4IDE4SDM0Wk0xOCAyQzI2LjgzNjYgMiAzNCA5LjE2MzQ0IDM0IDE4SDM4QzM4IDYuOTU0MzEgMjkuMDQ1NyAtMiAxOCAtMlYyWk0xNiAxOS41MjYzQzE2IDIzLjY1MzkgMTkuMzQ2MSAyNyAyMy40NzM3IDI3VjIzQzIxLjU1NTIgMjMgMjAgMjEuNDQ0OCAyMCAxOS41MjYzSDE2Wk0xNiAxOC44MDk1VjE5LjUyNjNIMjBWMTguODA5NUgxNlpNMjQuODA5NSAxMEMxOS45NDQyIDEwIDE2IDEzLjk0NDIgMTYgMTguODA5NUgyMEMyMCAxNi4xNTMzIDIyLjE1MzMgMTQgMjQuODA5NSAxNFYxMFpNMzMgMTguMTkwNUMzMyAxMy42NjcgMjkuMzMzIDEwIDI0LjgwOTUgMTBWMTRDMjcuMTIzOSAxNCAyOSAxNS44NzYxIDI5IDE4LjE5MDVIMzNaTTMzIDE4Ljg0MjFWMTguMTkwNUgyOVYxOC44NDIxSDMzWk0yNC44NDIxIDI3QzI5LjM0NzYgMjcgMzMgMjMuMzQ3NiAzMyAxOC44NDIxSDI5QzI5IDIxLjEzODQgMjcuMTM4NCAyMyAyNC44NDIxIDIzVjI3Wk0yMy40NzM3IDI3SDI0Ljg0MjFWMjNIMjMuNDczN1YyN1pcIiwgZmlsbDogXCJ3aGl0ZVwiLCBtYXNrOiBcInVybCgjcGF0aC0xLW91dHNpZGUtMSlcIiB9KSxcbiAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLCBjbGlwUnVsZTogXCJldmVub2RkXCIsIGQ6IFwiTTEyIDMwQzguNjg2MjkgMzAgNiAyNy4zMTM3IDYgMjRWMTRDNiA5LjU4MTcyIDkuNTgxNzIgNiAxNCA2SDE2QzE4LjcyOCA2IDIwLjk0NTggOC4xODQ3NSAyMC45OTkgMTAuOUMxOC4wMzg4IDEyLjM0NzEgMTYgMTUuMzg3OCAxNiAxOC45MDQ4VjE5Ljg0MjFDMTYgMjIuOTQ4NCAxNy45Nzg2IDI1LjU5MjUgMjAuNzQ0MyAyNi41ODI5QzIwLjA4MjEgMjguNTY4NSAxOC4yMDgyIDMwIDE2IDMwSDEyWlwiLCBmaWxsOiBcIiNGRkU0MkVcIiB9KVxuKTtcblxudmFyIHNsaWRlc2hvdyA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICBcInN2Z1wiLFxuICAgIHsgd2lkdGg6IFwiMjRcIiwgaGVpZ2h0OiBcIjI0XCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIH0sXG4gICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcIm1hc2tcIixcbiAgICAgICAgeyBpZDogXCJtYXNrMFwiLCBcIm1hc2stdHlwZVwiOiBcImFscGhhXCIsIG1hc2tVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLCB4OiBcIjBcIiwgeTogXCIwXCIsIHdpZHRoOiBcIjI0XCIsIGhlaWdodDogXCIyNFwiIH0sXG4gICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcInJlY3RcIiwgeyB3aWR0aDogXCIyNFwiLCBoZWlnaHQ6IFwiMjRcIiwgcng6IFwiMTJcIiwgZmlsbDogXCIjNjU2NUYyXCIgfSlcbiAgICApLFxuICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJnXCIsXG4gICAgICAgIHsgbWFzazogXCJ1cmwoI21hc2swKVwiIH0sXG4gICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBkOiBcIk0wIDEyQzAgNS4zNzI1OCA1LjM3MjU4IDAgMTIgMFYwQzE4LjYyNzQgMCAyNCA1LjM3MjU4IDI0IDEyVjEyQzI0IDE4LjYyNzQgMTguNjI3NCAyNCAxMiAyNFYyNEM1LjM3MjU4IDI0IDAgMTguNjI3NCAwIDEyVjEyWlwiLCBmaWxsOiBcIiM2NTY1RjJcIiB9KSxcbiAgICAgICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGQ6IFwiTTE3LjM5ODIgOC45OTI4M0MxNy44ODMxIDkuMzkyODIgMTcuODgzMSAxMC4xMzU4IDE3LjM5ODIgMTAuNTM1N0wxNC45NjczIDEyLjU0MDdDMTQuMzE1IDEzLjA3ODcgMTMuMzMxIDEyLjYxNDcgMTMuMzMxIDExLjc2OTJWNy43NTkzM0MxMy4zMzEgNi45MTM4NiAxNC4zMTUgNi40NDk5MiAxNC45NjczIDYuOTg3ODhMMTcuMzk4MiA4Ljk5MjgzWlwiLCBmaWxsOiBcIndoaXRlXCIgfSksXG4gICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBkOiBcIk02LjYwMTg0IDguOTkyODNDNi4xMTY4OSA5LjM5MjgyIDYuMTE2ODkgMTAuMTM1OCA2LjYwMTg0IDEwLjUzNTdMOS4wMzI3MiAxMi41NDA3QzkuNjg0OTYgMTMuMDc4NyAxMC42NjkgMTIuNjE0NyAxMC42NjkgMTEuNzY5MlY3Ljc1OTMzQzEwLjY2OSA2LjkxMzg2IDkuNjg0OTYgNi40NDk5MiA5LjAzMjcyIDYuOTg3ODhMNi42MDE4NCA4Ljk5MjgzWlwiLCBmaWxsOiBcIndoaXRlXCIgfSksXG4gICAgICAgIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBkOiBcIk03IDE4LjI3NTFDNyAxOC44MDMzIDcuNDI4MTggMTkuMjMxNCA3Ljk1NjM3IDE5LjIzMTRIOC4yMTcyQzguNzc3NCAxOS4yMzE0IDkuMjMxNTQgMTguNzc3MyA5LjIzMTU0IDE4LjIxNzFWMTcuODU4MkM5LjIzMTU0IDE3LjM4NDIgOC44NDcyNyAxNi45OTk5IDguMzczMjUgMTYuOTk5OUg4LjI3NTE3QzcuNTcwOTEgMTYuOTk5OSA3IDE3LjU3MDggNyAxOC4yNzUxVjE4LjI3NTFaXCIsIGZpbGw6IFwiI0ZGRTQyRVwiIH0pLFxuICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZDogXCJNMTAuNzE5MiAxOC4yNzUxQzEwLjcxOTIgMTguODAzMyAxMS4xNDc0IDE5LjIzMTQgMTEuNjc1NiAxOS4yMzE0SDExLjkzNjRDMTIuNDk2NiAxOS4yMzE0IDEyLjk1MDggMTguNzc3MyAxMi45NTA4IDE4LjIxNzFWMTcuODU4MkMxMi45NTA4IDE3LjM4NDIgMTIuNTY2NSAxNi45OTk5IDEyLjA5MjUgMTYuOTk5OUgxMS45OTQ0QzExLjI5MDEgMTYuOTk5OSAxMC43MTkyIDE3LjU3MDggMTAuNzE5MiAxOC4yNzUxVjE4LjI3NTFaXCIsIGZpbGw6IFwiI0ZGRTQyRVwiIH0pLFxuICAgICAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZDogXCJNMTQuNDM4NSAxOC4yNzUxQzE0LjQzODUgMTguODAzMyAxNC44NjY3IDE5LjIzMTQgMTUuMzk0OCAxOS4yMzE0SDE1LjY1NTdDMTYuMjE1OSAxOS4yMzE0IDE2LjY3IDE4Ljc3NzMgMTYuNjcgMTguMjE3MVYxNy44NTgyQzE2LjY3IDE3LjM4NDIgMTYuMjg1NyAxNi45OTk5IDE1LjgxMTcgMTYuOTk5OUgxNS43MTM2QzE1LjAwOTQgMTYuOTk5OSAxNC40Mzg1IDE3LjU3MDggMTQuNDM4NSAxOC4yNzUxVjE4LjI3NTFaXCIsIGZpbGw6IFwiI0ZGRTQyRVwiIH0pXG4gICAgKVxuKTtcblxudmFyIGFsaWduQm90dG9tID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgIFNWRyxcbiAgICB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHdpZHRoOiBcIjIwXCIsIGhlaWdodDogXCIyMFwiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiIH0sXG4gICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFBhdGgsIHsgZmlsbDogXCJub25lXCIsIGQ6IFwiTTAgMGgyNHYyNEgwVjB6XCIgfSksXG4gICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFBhdGgsIHsgZDogXCJNMTYgMTNoLTNWM2gtMnYxMEg4bDQgNCA0LTR6TTQgMTl2MmgxNnYtMkg0elwiIH0pXG4pO1xuXG52YXIgYWxpZ25DZW50ZXIgPSB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG4gICAgU1ZHLFxuICAgIHsgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgd2lkdGg6IFwiMjBcIiwgaGVpZ2h0OiBcIjIwXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIgfSxcbiAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoUGF0aCwgeyBmaWxsOiBcIm5vbmVcIiwgZDogXCJNMCAwaDI0djI0SDBWMHpcIiB9KSxcbiAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoUGF0aCwgeyBkOiBcIk04IDE5aDN2NGgydi00aDNsLTQtNC00IDR6bTgtMTRoLTNWMWgtMnY0SDhsNCA0IDQtNHpNNCAxMXYyaDE2di0ySDR6XCJcbiAgICB9KVxuKTtcblxudmFyIGFsaWduVG9wID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgIFNWRyxcbiAgICB7IHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHdpZHRoOiBcIjIwXCIsIGhlaWdodDogXCIyMFwiLCB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiIH0sXG4gICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFBhdGgsIHsgZmlsbDogXCJub25lXCIsIGQ6IFwiTTAgMGgyNHYyNEgwVjB6XCIgfSksXG4gICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFBhdGgsIHsgZDogXCJNOCAxMWgzdjEwaDJWMTFoM2wtNC00LTQgNHpNNCAzdjJoMTZWM0g0elwiIH0pXG4pO1xuXG52YXIgYWxpZ25tZW50ID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgIFwic3ZnXCIsXG4gICAgeyB3aWR0aDogXCIyMFwiLCBoZWlnaHQ6IFwiMjBcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgfSxcbiAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZDogXCJNMTUuNTQgNS41NEwxMy43NyA3LjNMMTIgNS41NEwxMC4yMyA3LjNMOC40NiA1LjU0TDEyIDJMMTUuNTQgNS41NFpNMTguNDYgMTUuNTRMMTYuNyAxMy43N0wxOC40NiAxMkwxNi43IDEwLjIzTDE4LjQ2IDguNDZMMjIgMTJMMTguNDYgMTUuNTRaTTguNDYgMTguNDZMMTAuMjMgMTYuN0wxMiAxOC40NkwxMy43NyAxNi43TDE1LjU0IDE4LjQ2TDEyIDIyTDguNDYgMTguNDZaTTUuNTQgOC40Nkw3LjMgMTAuMjNMNS41NCAxMkw3LjMgMTMuNzdMNS41NCAxNS41NEwyIDEyTDUuNTQgOC40NlpcIiwgZmlsbDogXCJjdXJyZW50Q29sb3JcIiB9KSxcbiAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZDogXCJNMTIgMTVDMTMuNjU2OSAxNSAxNSAxMy42NTY5IDE1IDEyQzE1IDEwLjM0MzEgMTMuNjU2OSA5IDEyIDlDMTAuMzQzMSA5IDkgMTAuMzQzMSA5IDEyQzkgMTMuNjU2OSAxMC4zNDMxIDE1IDEyIDE1WlwiLCBmaWxsOiBcImN1cnJlbnRDb2xvclwiIH0pXG4pO1xuXG52YXIgaW52ZXJ0ID0gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuICAgIFwic3ZnXCIsXG4gICAgeyB3aWR0aDogXCIyMFwiLCBoZWlnaHQ6IFwiMjBcIiwgdmlld0JveDogXCIwIDAgMjQgMjRcIiwgZmlsbDogXCJub25lXCIsIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgfSxcbiAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZDogXCJNMjAgMTUuMzA5OUwyMy4zMSAxMS45OTk5TDIwIDguNjg5OTRWMy45OTk5NEgxNS4zMUwxMiAwLjY4OTk0MUw4LjY5IDMuOTk5OTRINFY4LjY4OTk0TDAuNjkwMDAyIDExLjk5OTlMNCAxNS4zMDk5VjE5Ljk5OTlIOC42OUwxMiAyMy4zMDk5TDE1LjMxIDE5Ljk5OTlIMjBWMTUuMzA5OVpNMTIgMTcuOTk5OVY1Ljk5OTk0QzE1LjMxIDUuOTk5OTQgMTggOC42ODk5NCAxOCAxMS45OTk5QzE4IDE1LjMwOTkgMTUuMzEgMTcuOTk5OSAxMiAxNy45OTk5WlwiLCBmaWxsOiBcImN1cnJlbnRDb2xvclwiIH0pXG4pO1xuXG52YXIgc3dhcCA9IHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcbiAgICBcInN2Z1wiLFxuICAgIHsgd2lkdGg6IFwiMjBcIiwgaGVpZ2h0OiBcIjIwXCIsIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsIGZpbGw6IFwibm9uZVwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIH0sXG4gICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGQ6IFwiTTE4IDJMMjAgNkgxOEwxNiAySDEzTDE1IDZIMTNMMTEgMkgxMEM5LjQ2OTU3IDIgOC45NjA4NiAyLjIxMDcxIDguNTg1NzkgMi41ODU3OUM4LjIxMDcxIDIuOTYwODYgOCAzLjQ2OTU3IDggNFYxNEM4IDE0LjUzMDQgOC4yMTA3MSAxNS4wMzkxIDguNTg1NzkgMTUuNDE0MkM4Ljk2MDg2IDE1Ljc4OTMgOS40Njk1NyAxNiAxMCAxNkgyMEMyMC41MzA0IDE2IDIxLjAzOTEgMTUuNzg5MyAyMS40MTQyIDE1LjQxNDJDMjEuNzg5MyAxNS4wMzkxIDIyIDE0LjUzMDQgMjIgMTRWMkgxOFpNMjAgMTRIMTBWNC40TDExLjggOEgyMFYxNFpcIiwgZmlsbDogXCJjdXJyZW50Q29sb3JcIiB9KSxcbiAgICB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZDogXCJNMTQgMjBINFYxMEg3VjhINEMzLjQ2OTU3IDggMi45NjA4NiA4LjIxMDcxIDIuNTg1NzkgOC41ODU3OUMyLjIxMDcxIDguOTYwODYgMiA5LjQ2OTU3IDIgMTBWMjBDMiAyMC41MzA0IDIuMjEwNzEgMjEuMDM5MSAyLjU4NTc5IDIxLjQxNDJDMi45NjA4NiAyMS43ODkzIDMuNDY5NTcgMjIgNCAyMkgxNEMxNC41MzA0IDIyIDE1LjAzOTEgMjEuNzg5MyAxNS40MTQyIDIxLjQxNDJDMTUuNzg5MyAyMS4wMzkxIDE2IDIwLjUzMDQgMTYgMjBWMTdIMTRWMjBaXCIsIGZpbGw6IFwiY3VycmVudENvbG9yXCIgfSksXG4gICAgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGQ6IFwiTTUgMTlIMTNMMTEuNDEgMTdIOS4yNEw4LjQgMTguMUw3IDE2LjNMNSAxOVpcIiwgZmlsbDogXCJjdXJyZW50Q29sb3JcIiB9KVxuKTtcblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIGNvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xudmFyIGhpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbnZhciBoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIElTX1dSQVAgPSB0eXBlICYgJGV4cG9ydC5XO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV07XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIga2V5LCBvd24sIG91dDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAob3duICYmIGhhcyhleHBvcnRzLCBrZXkpKSBjb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uIChDKSB7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQykge1xuICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEMoKTtcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYgKElTX1BST1RPKSB7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYgKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0pIGhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG5cblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2Fzc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTAzKTtcblxudmFyIF9hc3NpZ24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXNzaWduKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gX2Fzc2lnbjIuZGVmYXVsdCB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KTtcbnZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGRQID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgY3JlYXRlRGVzYyA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpO1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNTMpO1xudmFyIGRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuXG5cbi8qKiovIH0pLFxuLyogMjEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAyMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG5cbi8qKiovIH0pLFxuLyogMjMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyKTtcbnZhciBlbnVtQnVnS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDI0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDI1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGF5b3V0X3BhbmVsX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19wYXJhbGxheF9wYW5lbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fZ2FsbGVyeV9vcHRpb25zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19jb2xvcl9jb250cm9sc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fYWxpZ25tZW50X2NvbnRyb2xzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2hlaWdodF9jb250cm9sc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgQWxpZ25tZW50Q29udHJvbHMgKi9cbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2FsaWdubWVudF9jb250cm9sc19fW1wiYVwiXTsgfSk7XG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBDb2xvckNvbnRyb2xzICovXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBDb2xvclBhbmVsICovXG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJiXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19jb2xvcl9jb250cm9sc19fW1wiYVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJkXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19nYWxsZXJ5X29wdGlvbnNfX1tcImJcIl07IH0pO1xuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiY1wiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fZ2FsbGVyeV9vcHRpb25zX19bXCJhXCJdOyB9KTtcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImVcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2hlaWdodF9jb250cm9sc19fW1wiYVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJmXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19sYXlvdXRfcGFuZWxfX1tcImFcIl07IH0pO1xuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgT3ZlcmxheUNvbnRyb2xzICovXG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJnXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19wYXJhbGxheF9wYW5lbF9fW1wiYVwiXTsgfSk7XG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJoXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19oZWlnaHRfY29udHJvbHNfX1tcImJcIl07IH0pO1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKioqLyB9KSxcbi8qIDI2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbnZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMjggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDI5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBkZWYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKS5mO1xudmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIFRBRyA9IF9fd2VicGFja19yZXF1aXJlX18oNykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5leHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuXG4vKioqLyB9KSxcbi8qIDMxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZWJvdW5jZTsgfSk7XG52YXIgZGVib3VuY2UgPSBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0KSB7XG5cdHZhciB0aW1lb3V0ID0gbnVsbDtcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcztcblx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuXHRcdHZhciBsYXRlciA9IGZ1bmN0aW9uIGxhdGVyKCkge1xuXHRcdFx0ZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcblx0XHR9O1xuXG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcblx0fTtcbn07XG5cbi8qKiovIH0pLFxuLyogMzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDMzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBzaGFyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KSgna2V5cycpO1xudmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjYpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMzQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGNvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IF9fd2VicGFja19yZXF1aXJlX18oMjApID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDM1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDM4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgZFBzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MSk7XG52YXIgZW51bUJ1Z0tleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcbnZhciBJRV9QUk9UTyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1KS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAzOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcblxuXG4vKioqLyB9KSxcbi8qIDQwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbmV4cG9ydHMuZiA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cblxuLyoqKi8gfSksXG4vKiA0MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbnZhciBjb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciBMSUJSQVJZID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG52YXIgd2tzRXh0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuXG4vKioqLyB9KSxcbi8qIDQzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXygxMTMpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0pLFxuLyogNDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIElFX1BST1RPID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMykoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQ2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIGNvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDQ3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gIV9fd2VicGFja19yZXF1aXJlX18oMTEpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX3JlcXVpcmVfXygzNSkoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogNDggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9pdGVyYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oNzcpO1xuXG52YXIgX2l0ZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2l0ZXJhdG9yKTtcblxudmFyIF9zeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg3KTtcblxudmFyIF9zeW1ib2wyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3ltYm9sKTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBfaXRlcmF0b3IyLmRlZmF1bHQgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBfc3ltYm9sMi5kZWZhdWx0ICYmIG9iaiAhPT0gX3N5bWJvbDIuZGVmYXVsdC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mKF9pdGVyYXRvcjIuZGVmYXVsdCkgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yob2JqKTtcbn0gOiBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yob2JqKTtcbn07XG5cbi8qKiovIH0pLFxuLyogNDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciAkYXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxuX193ZWJwYWNrX3JlcXVpcmVfXyg1MCkoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDUwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgTElCUkFSWSA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIHJlZGVmaW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XG52YXIgaGlkZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xudmFyIEl0ZXJhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xudmFyICRpdGVyQ3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xudmFyIElURVJBVE9SID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDUxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG5cblxuLyoqKi8gfSksXG4vKiA1MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgdG9JT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG52YXIgYXJyYXlJbmRleE9mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MikoZmFsc2UpO1xudmFyIElFX1BST1RPID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDU0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuLyoqKi8gfSksXG4vKiA1NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg0KTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIGhpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcbnZhciBUT19TVFJJTkdfVEFHID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KSgndG9TdHJpbmdUYWcnKTtcblxudmFyIERPTUl0ZXJhYmxlcyA9ICgnQ1NTUnVsZUxpc3QsQ1NTU3R5bGVEZWNsYXJhdGlvbixDU1NWYWx1ZUxpc3QsQ2xpZW50UmVjdExpc3QsRE9NUmVjdExpc3QsRE9NU3RyaW5nTGlzdCwnICtcbiAgJ0RPTVRva2VuTGlzdCxEYXRhVHJhbnNmZXJJdGVtTGlzdCxGaWxlTGlzdCxIVE1MQWxsQ29sbGVjdGlvbixIVE1MQ29sbGVjdGlvbixIVE1MRm9ybUVsZW1lbnQsSFRNTFNlbGVjdEVsZW1lbnQsJyArXG4gICdNZWRpYUxpc3QsTWltZVR5cGVBcnJheSxOYW1lZE5vZGVNYXAsTm9kZUxpc3QsUGFpbnRSZXF1ZXN0TGlzdCxQbHVnaW4sUGx1Z2luQXJyYXksU1ZHTGVuZ3RoTGlzdCxTVkdOdW1iZXJMaXN0LCcgK1xuICAnU1ZHUGF0aFNlZ0xpc3QsU1ZHUG9pbnRMaXN0LFNWR1N0cmluZ0xpc3QsU1ZHVHJhbnNmb3JtTGlzdCxTb3VyY2VCdWZmZXJMaXN0LFN0eWxlU2hlZXRMaXN0LFRleHRUcmFja0N1ZUxpc3QsJyArXG4gICdUZXh0VHJhY2tMaXN0LFRvdWNoTGlzdCcpLnNwbGl0KCcsJyk7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgRE9NSXRlcmFibGVzLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gRE9NSXRlcmFibGVzW2ldO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKHByb3RvICYmICFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cblxuXG4vKioqLyB9KSxcbi8qIDU3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpO1xudmFyIGhpZGRlbktleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA1OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgcElFID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMCk7XG52YXIgY3JlYXRlRGVzYyA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpO1xudmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSkgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXG5cbi8qKiovIH0pLFxuLyogNjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcbnZhciBUQUcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA2MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xudmFyIFNQRUNJRVMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xudmFyIGludm9rZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIwKTtcbnZhciBodG1sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XG52YXIgY2VsID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoX193ZWJwYWNrX3JlcXVpcmVfXygyNCkocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDYzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG5cblxuLyoqKi8gfSksXG4vKiA2NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA2NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBBbGlnbm1lbnRDb250cm9scyAqL1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBbGlnbm1lbnRUb29sYmFyOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faWNvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19zdHlsZV9zY3NzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19zdHlsZV9zY3NzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3N0eWxlX3Njc3NfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19ibG9ja19ob3Jpem9udGFsX2FsaWdubWVudF90b29sYmFyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19ibG9ja192ZXJ0aWNhbF9hbGlnbm1lbnRfdG9vbGJhcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzIpO1xuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfXyA9IHdwLmkxOG4uX187XG52YXIgX3dwJGVsZW1lbnQgPSB3cC5lbGVtZW50LFxuICAgIENvbXBvbmVudCA9IF93cCRlbGVtZW50LkNvbXBvbmVudCxcbiAgICBGcmFnbWVudCA9IF93cCRlbGVtZW50LkZyYWdtZW50O1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBEcm9wZG93biA9IF93cCRjb21wb25lbnRzLkRyb3Bkb3duLFxuICAgIEljb25CdXR0b24gPSBfd3AkY29tcG9uZW50cy5JY29uQnV0dG9uLFxuICAgIFBhbmVsUm93ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxSb3csXG4gICAgVG9vbGJhciA9IF93cCRjb21wb25lbnRzLlRvb2xiYXI7XG5cbnZhciBBbGlnbm1lbnRUb29sYmFyID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQoKShBbGlnbm1lbnRUb29sYmFyLCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBBbGlnbm1lbnRUb29sYmFyKCkge1xuXHRcdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0KCkodGhpcywgQWxpZ25tZW50VG9vbGJhcik7XG5cblx0XHRyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCgpKHRoaXMsIChBbGlnbm1lbnRUb29sYmFyLl9fcHJvdG9fXyB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCgpKEFsaWdubWVudFRvb2xiYXIpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcblx0fVxuXG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0KCkoQWxpZ25tZW50VG9vbGJhciwgW3tcblx0XHRrZXk6IFwicmVuZGVyXCIsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRUb29sYmFyLFxuXHRcdFx0XHR7IGNsYXNzTmFtZTogXCJwaXhlbGdyYWRlLWhlcm8tYmxvY2stdG9vbGJhclwiIH0sXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChEcm9wZG93biwge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdGNsYXNzTmFtZTogXCJwaXhlbGdyYWRlLWhlcm8tYmxvY2stdG9vbGJhci1kcm9wZG93blwiLFxuXHRcdFx0XHRcdGNvbnRlbnRDbGFzc05hbWU6IFwiY29tcG9uZW50cy1ub3ZhLS1wb3BvdmVyXCIsXG5cdFx0XHRcdFx0cmVuZGVyVG9nZ2xlOiBmdW5jdGlvbiByZW5kZXJUb2dnbGUoX3JlZikge1xuXHRcdFx0XHRcdFx0dmFyIGlzT3BlbiA9IF9yZWYuaXNPcGVuLFxuXHRcdFx0XHRcdFx0ICAgIG9uVG9nZ2xlID0gX3JlZi5vblRvZ2dsZTtcblx0XHRcdFx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoSWNvbkJ1dHRvbiwge1xuXHRcdFx0XHRcdFx0XHRvbkNsaWNrOiBvblRvZ2dsZSxcblx0XHRcdFx0XHRcdFx0aWNvbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pY29uc19fW1wiZFwiIC8qIGFsaWdubWVudCAqL10sXG5cdFx0XHRcdFx0XHRcdFwiYXJpYS1leHBhbmRlZFwiOiBpc09wZW4sXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBfXygnQ29udGVudCBBbGlnbm1lbnQnLCAnX19wbHVnaW5fdHh0ZCcpLFxuXHRcdFx0XHRcdFx0XHRsYWJlbFBvc2l0aW9uOiBcImJvdHRvbVwiXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGZvY3VzT25Nb3VudDogZmFsc2UsXG5cdFx0XHRcdFx0cmVuZGVyQ29udGVudDogZnVuY3Rpb24gcmVuZGVyQ29udGVudChfcmVmMikge1xuXHRcdFx0XHRcdFx0dmFyIG9uQ2xvc2UgPSBfcmVmMi5vbkNsb3NlO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcdFx0RnJhZ21lbnQsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChBbGlnbm1lbnRDb250cm9scywgX3RoaXMyLnByb3BzKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblx0fV0pO1xuXG5cdHJldHVybiBBbGlnbm1lbnRUb29sYmFyO1xufShDb21wb25lbnQpO1xuXG52YXIgQWxpZ25tZW50Q29udHJvbHMgPSBmdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQoKShBbGlnbm1lbnRDb250cm9scywgX0NvbXBvbmVudDIpO1xuXG5cdGZ1bmN0aW9uIEFsaWdubWVudENvbnRyb2xzKCkge1xuXHRcdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0KCkodGhpcywgQWxpZ25tZW50Q29udHJvbHMpO1xuXG5cdFx0cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQoKSh0aGlzLCAoQWxpZ25tZW50Q29udHJvbHMuX19wcm90b19fIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0KCkoQWxpZ25tZW50Q29udHJvbHMpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcblx0fVxuXG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0KCkoQWxpZ25tZW50Q29udHJvbHMsIFt7XG5cdFx0a2V5OiBcInJlbmRlclwiLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdFx0XHR2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcblx0XHRcdCAgICBfcHJvcHMkYXR0cmlidXRlcyA9IF9wcm9wcy5hdHRyaWJ1dGVzLFxuXHRcdFx0ICAgIGFwcGx5TWluaW11bUhlaWdodEJsb2NrID0gX3Byb3BzJGF0dHJpYnV0ZXMuYXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2ssXG5cdFx0XHQgICAgaG9yaXpvbnRhbEFsaWdubWVudCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmhvcml6b250YWxBbGlnbm1lbnQsXG5cdFx0XHQgICAgdmVydGljYWxBbGlnbm1lbnQgPSBfcHJvcHMkYXR0cmlidXRlcy52ZXJ0aWNhbEFsaWdubWVudCxcblx0XHRcdCAgICBzZXRBdHRyaWJ1dGVzID0gX3Byb3BzLnNldEF0dHJpYnV0ZXM7XG5cblxuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0RnJhZ21lbnQsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRQYW5lbFJvdyxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcdFwic3BhblwiLFxuXHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdF9fKCdIb3Jpem9udGFsJywgJ19fcGx1Z2luX3R4dGQnKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fYmxvY2tfaG9yaXpvbnRhbF9hbGlnbm1lbnRfdG9vbGJhcl9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogaG9yaXpvbnRhbEFsaWdubWVudCxcblx0XHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShob3Jpem9udGFsQWxpZ25tZW50KSB7XG5cdFx0XHRcdFx0XHRcdHdwLmRhdGEuc2VsZWN0KCdjb3JlL2Jsb2NrLWVkaXRvcicpLmdldFNlbGVjdGVkQmxvY2soKS5pbm5lckJsb2Nrcy5tYXAoZnVuY3Rpb24gKGJsb2NrKSB7XG5cdFx0XHRcdFx0XHRcdFx0d3AuZGF0YS5kaXNwYXRjaCgnY29yZS9ibG9jay1lZGl0b3InKS51cGRhdGVCbG9ja0F0dHJpYnV0ZXMoYmxvY2suY2xpZW50SWQsIHsgYWxpZ246IGhvcml6b250YWxBbGlnbm1lbnQgfSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKHsgaG9yaXpvbnRhbEFsaWdubWVudDogaG9yaXpvbnRhbEFsaWdubWVudCB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRhcHBseU1pbmltdW1IZWlnaHRCbG9jayAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0UGFuZWxSb3csXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcInNwYW5cIixcblx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRfXygnVmVydGljYWwnLCAnX19wbHVnaW5fdHh0ZCcpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19ibG9ja192ZXJ0aWNhbF9hbGlnbm1lbnRfdG9vbGJhcl9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogdmVydGljYWxBbGlnbm1lbnQsXG5cdFx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UodmVydGljYWxBbGlnbm1lbnQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyB2ZXJ0aWNhbEFsaWdubWVudDogdmVydGljYWxBbGlnbm1lbnQgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gQWxpZ25tZW50Q29udHJvbHM7XG59KENvbXBvbmVudCk7XG5cblxuXG4vKioqLyB9KSxcbi8qIDY2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fKTtcblxuXG5cblxuXG5cbnZhciBDb21wb25lbnQgPSB3cC5lbGVtZW50LkNvbXBvbmVudDtcblxuLy8gVGFrZSBpbiBhIGNvbXBvbmVudCBhcyBhcmd1bWVudCBXcmFwcGVkQ29tcG9uZW50XG5cbnZhciB3aXRoUGFyYWxsYXggPSBmdW5jdGlvbiB3aXRoUGFyYWxsYXgoV3JhcHBlZENvbXBvbmVudCkge1xuXG5cdC8vIEFuZCByZXR1cm4gYSBuZXcgYW5vbnltb3VzIGNvbXBvbmVudFxuXHRyZXR1cm4gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0XHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCgpKF9jbGFzcywgX0NvbXBvbmVudCk7XG5cblx0XHRmdW5jdGlvbiBfY2xhc3MoKSB7XG5cdFx0XHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCgpKHRoaXMsIF9jbGFzcyk7XG5cblx0XHRcdHZhciBfdGhpcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQoKSh0aGlzLCAoX2NsYXNzLl9fcHJvdG9fXyB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCgpKF9jbGFzcykpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuXG5cdFx0XHRfdGhpcy5zdGF0ZSA9IHtcblx0XHRcdFx0d2luZG93V2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuXHRcdFx0XHR3aW5kb3dIZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcblx0XHRcdFx0cHJvZ3Jlc3M6IDAuNVxuXHRcdFx0fTtcblxuXHRcdFx0X3RoaXMudXBkYXRlSGFuZGxlciA9IF90aGlzLnVwZGF0ZURpbWVuc2lvbnMuYmluZChfdGhpcyk7XG5cdFx0XHRyZXR1cm4gX3RoaXM7XG5cdFx0fVxuXG5cdFx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQoKShfY2xhc3MsIFt7XG5cdFx0XHRrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcblx0XHRcdFx0dmFyIHNjcm9sbENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2VkaXQtcG9zdC1sYXlvdXRfX2NvbnRlbnQnKVswXTtcblx0XHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy51cGRhdGVIYW5kbGVyKTtcblx0XHRcdFx0c2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy51cGRhdGVIYW5kbGVyKTtcblx0XHRcdFx0dGhpcy51cGRhdGVEaW1lbnNpb25zKCk7XG5cdFx0XHR9XG5cdFx0fSwge1xuXHRcdFx0a2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG5cdFx0XHRcdHZhciBzY3JvbGxDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdlZGl0LXBvc3QtbGF5b3V0X19jb250ZW50JylbMF07XG5cdFx0XHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMudXBkYXRlSGFuZGxlcik7XG5cdFx0XHRcdHNjcm9sbENvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMudXBkYXRlSGFuZGxlcik7XG5cdFx0XHR9XG5cdFx0fSwge1xuXHRcdFx0a2V5OiBcInVwZGF0ZURpbWVuc2lvbnNcIixcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVEaW1lbnNpb25zKCkge1xuXHRcdFx0XHR2YXIgc2Nyb2xsQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZWRpdC1wb3N0LWxheW91dF9fY29udGVudCcpWzBdO1xuXHRcdFx0XHR2YXIgY29udGFpbmVyQm94ID0gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdHZhciBwcm9ncmVzcyA9ICh0aGlzLnN0YXRlLndpbmRvd0hlaWdodCAtIGNvbnRhaW5lckJveC55KSAvICh0aGlzLnN0YXRlLndpbmRvd0hlaWdodCArIHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCk7XG5cdFx0XHRcdHZhciBhY3R1YWxQcm9ncmVzcyA9IE1hdGgubWF4KE1hdGgubWluKHByb2dyZXNzLCAxKSwgMCk7XG5cblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdFx0d2luZG93V2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuXHRcdFx0XHRcdHdpbmRvd0hlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuXHRcdFx0XHRcdHNjcm9sbFRvcDogc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCxcblx0XHRcdFx0XHRwcm9ncmVzczogYWN0dWFsUHJvZ3Jlc3MsXG5cdFx0XHRcdFx0ZGltZW5zaW9uczoge1xuXHRcdFx0XHRcdFx0d2lkdGg6IHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG5cdFx0XHRcdFx0XHR0b3A6IGNvbnRhaW5lckJveC55XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LCB7XG5cdFx0XHRrZXk6IFwiZ2V0UGFyYWxsYXhTdHlsZXNcIixcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiBnZXRQYXJhbGxheFN0eWxlcygpIHtcblx0XHRcdFx0dmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gdGhpcy5wcm9wcy5hdHRyaWJ1dGVzLFxuXHRcdFx0XHQgICAgZW5hYmxlUGFyYWxsYXggPSBfcHJvcHMkYXR0cmlidXRlcy5lbmFibGVQYXJhbGxheCxcblx0XHRcdFx0ICAgIHBhcmFsbGF4QW1vdW50ID0gX3Byb3BzJGF0dHJpYnV0ZXMucGFyYWxsYXhBbW91bnQsXG5cdFx0XHRcdCAgICBwYXJhbGxheEN1c3RvbUFtb3VudCA9IF9wcm9wcyRhdHRyaWJ1dGVzLnBhcmFsbGF4Q3VzdG9tQW1vdW50O1xuXG5cblx0XHRcdFx0aWYgKCFlbmFibGVQYXJhbGxheCkge1xuXHRcdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBhY3R1YWxQYXJhbGxheEFtb3VudCA9IHBhcmFsbGF4QW1vdW50ID09PSAnY3VzdG9tJyA/IHBhcmFsbGF4Q3VzdG9tQW1vdW50IDogcGFyc2VJbnQocGFyYWxsYXhBbW91bnQsIDEwKTtcblx0XHRcdFx0YWN0dWFsUGFyYWxsYXhBbW91bnQgPSBNYXRoLm1heChNYXRoLm1pbigxLCBhY3R1YWxQYXJhbGxheEFtb3VudCAvIDEwMCksIDApO1xuXG5cdFx0XHRcdHZhciBfc3RhdGUgPSB0aGlzLnN0YXRlLFxuXHRcdFx0XHQgICAgZGltZW5zaW9ucyA9IF9zdGF0ZS5kaW1lbnNpb25zLFxuXHRcdFx0XHQgICAgd2luZG93SGVpZ2h0ID0gX3N0YXRlLndpbmRvd0hlaWdodCxcblx0XHRcdFx0ICAgIHByb2dyZXNzID0gX3N0YXRlLnByb2dyZXNzO1xuXG5cblx0XHRcdFx0dmFyIG5ld0hlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0ICogKDEgLSBhY3R1YWxQYXJhbGxheEFtb3VudCkgKyB3aW5kb3dIZWlnaHQgKiBhY3R1YWxQYXJhbGxheEFtb3VudDtcblx0XHRcdFx0dmFyIHNjYWxlID0gbmV3SGVpZ2h0IC8gZGltZW5zaW9ucy5oZWlnaHQ7XG5cdFx0XHRcdHZhciBvZmZzZXRZID0gZGltZW5zaW9ucy5oZWlnaHQgKiAoMSAtIHNjYWxlKSAvIDI7XG5cdFx0XHRcdHZhciBtb3ZlID0gKHdpbmRvd0hlaWdodCArIGRpbWVuc2lvbnMuaGVpZ2h0KSAqIChwcm9ncmVzcyAtIDAuNSkgKiBhY3R1YWxQYXJhbGxheEFtb3VudDtcblxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGhlaWdodDogbmV3SGVpZ2h0LFxuXHRcdFx0XHRcdHRyYW5zaXRpb246ICdub25lJyxcblx0XHRcdFx0XHR0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwnICsgKG1vdmUgKyBvZmZzZXRZKSArICdweCknXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSwge1xuXHRcdFx0a2V5OiBcInJlbmRlclwiLFxuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdFx0dmFyIF90aGlzMiA9IHRoaXM7XG5cblx0XHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcImRpdlwiLFxuXHRcdFx0XHRcdHsgY2xhc3NOYW1lOiBcIm5vdmEtbWFza1wiLCByZWY6IGZ1bmN0aW9uIHJlZihlbCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gX3RoaXMyLmNvbnRhaW5lciA9IGVsO1xuXHRcdFx0XHRcdFx0fSB9LFxuXHRcdFx0XHRcdHRoaXMuc3RhdGUuZGltZW5zaW9ucyAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX19fZGVmYXVsdCgpKHt9LCB0aGlzLnByb3BzLCB7IHN0eWxlOiB0aGlzLmdldFBhcmFsbGF4U3R5bGVzKCkgfSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fV0pO1xuXG5cdFx0cmV0dXJuIF9jbGFzcztcblx0fShDb21wb25lbnQpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9ICh3aXRoUGFyYWxsYXgpO1xuXG4vKioqLyB9KSxcbi8qIDY3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc2Nzc19zdHlsZV9zY3NzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY4KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Njc3Nfc3R5bGVfc2Nzc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zY3NzX3N0eWxlX3Njc3NfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zY3NzX2VkaXRvcl9zY3NzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Njc3NfZWRpdG9yX3Njc3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc2Nzc19lZGl0b3Jfc2Nzc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jsb2Nrc19oZXJvX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2Jsb2Nrc19tZWRpYV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzcpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fYmxvY2tzX3NsaWRlc2hvd19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDgpO1xuXG5cblxuXG5cblxuXG4vKioqLyB9KSxcbi8qIDY4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cbi8qKiovIH0pLFxuLyogNjkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuLyoqKi8gfSksXG4vKiA3MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2ljb25zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZWRpdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MSk7XG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5cblxuXG4vKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xudmFyIF9fID0gd3AuaTE4bi5fXztcbnZhciByZWdpc3RlckJsb2NrVHlwZSA9IHdwLmJsb2Nrcy5yZWdpc3RlckJsb2NrVHlwZTtcbnZhciBJbm5lckJsb2NrcyA9IHdwLmJsb2NrRWRpdG9yLklubmVyQmxvY2tzO1xuXG5cbi8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfdW51c2VkX3dlYnBhY2tfZGVmYXVsdF9leHBvcnQgPSAocmVnaXN0ZXJCbG9ja1R5cGUoJ25vdmFibG9ja3MvaGVybycsIHtcblx0dGl0bGU6IF9fKCdIZXJvIG9mIHRoZSBHYWxheHknLCAnX19wbHVnaW5fdHh0ZCcpLFxuXHRkZXNjcmlwdGlvbjogX18oJ0EgZ3JlYXQgd2F5IHRvIGdldCB5b3VyIHZpc2l0b3JzIGFjcXVhaW50ZWQgd2l0aCB5b3VyIGNvbnRlbnQuJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0Y2F0ZWdvcnk6ICdub3ZhLWJsb2NrcycsXG5cdGljb246IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faWNvbnNfX1tcImVcIiAvKiBoZXJvICovXSxcblx0ZWRpdDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19lZGl0X19bXCJhXCIgLyogZGVmYXVsdCAqL10sXG5cdHNhdmU6IGZ1bmN0aW9uIHNhdmUoKSB7XG5cdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChJbm5lckJsb2Nrcy5Db250ZW50LCBudWxsKTtcblx0fSxcblx0Z2V0RWRpdFdyYXBwZXJQcm9wczogZnVuY3Rpb24gZ2V0RWRpdFdyYXBwZXJQcm9wcygpIHtcblx0XHR2YXIgc2V0dGluZ3MgPSB3cC5kYXRhLnNlbGVjdCgnY29yZS9ibG9jay1lZGl0b3InKS5nZXRTZXR0aW5ncygpO1xuXHRcdHJldHVybiBzZXR0aW5ncy5hbGlnbldpZGUgPyB7XG5cdFx0XHQnZGF0YS1hbGlnbic6ICdmdWxsJ1xuXHRcdH0gOiB7fTtcblx0fVxufSkpO1xuXG4vKioqLyB9KSxcbi8qIDcxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3V0aWxzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2NvbXBvbmVudHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fcHJldmlld19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzQpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fY29udHJvbHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM2KTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIF9fID0gd3AuaTE4bi5fXztcbnZhciBJbnNwZWN0b3JDb250cm9scyA9IHdwLmJsb2NrRWRpdG9yLkluc3BlY3RvckNvbnRyb2xzO1xudmFyIF93cCRlbGVtZW50ID0gd3AuZWxlbWVudCxcbiAgICBDb21wb25lbnQgPSBfd3AkZWxlbWVudC5Db21wb25lbnQsXG4gICAgRnJhZ21lbnQgPSBfd3AkZWxlbWVudC5GcmFnbWVudDtcblxuXG52YXIgZWRpdG9yRGF0YSA9IHdwLmRhdGEuc2VsZWN0KCdjb3JlL2Jsb2NrLWVkaXRvcicpO1xuXG52YXIgdXBkYXRlQmxvY2tzID0gZnVuY3Rpb24gdXBkYXRlQmxvY2tzKGF0dHJpYnV0ZXMpIHtcblx0dmFyIGJsb2NrcyA9IGVkaXRvckRhdGEuZ2V0QmxvY2tzKCk7XG5cblx0YmxvY2tzLmZpbHRlcihmdW5jdGlvbiAoYmxvY2spIHtcblx0XHRyZXR1cm4gYmxvY2submFtZSA9PT0gJ25vdmFibG9ja3MvaGVybyc7XG5cdH0pLmZpbHRlcihmdW5jdGlvbiAoYmxvY2ssIGhlcm9CbG9ja0luZGV4KSB7XG5cdFx0dmFyIF9ibG9jayRhdHRyaWJ1dGVzJGF0dCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fX2RlZmF1bHQoKSh7fSwgYmxvY2suYXR0cmlidXRlcywgYXR0cmlidXRlcyksXG5cdFx0ICAgIGFwcGx5TWluaW11bUhlaWdodCA9IF9ibG9jayRhdHRyaWJ1dGVzJGF0dC5hcHBseU1pbmltdW1IZWlnaHQsXG5cdFx0ICAgIHNjcm9sbEluZGljYXRvciA9IF9ibG9jayRhdHRyaWJ1dGVzJGF0dC5zY3JvbGxJbmRpY2F0b3I7XG5cblx0XHR2YXIgYXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2sgPSBhcHBseU1pbmltdW1IZWlnaHQgPT09ICdmaXJzdCcgJiYgaGVyb0Jsb2NrSW5kZXggPT09IDAgfHwgYXBwbHlNaW5pbXVtSGVpZ2h0ID09PSAnYWxsJztcblx0XHR2YXIgc2Nyb2xsSW5kaWNhdG9yQmxvY2sgPSBzY3JvbGxJbmRpY2F0b3IgPT09IHRydWUgJiYgaGVyb0Jsb2NrSW5kZXggPT09IDA7XG5cdFx0dmFyIGJsb2NrSW5kZXggPSBibG9ja3MuZmluZEluZGV4KGZ1bmN0aW9uICh0ZXN0QmxvY2spIHtcblx0XHRcdHJldHVybiBibG9jayA9PT0gdGVzdEJsb2NrO1xuXHRcdH0pO1xuXG5cdFx0d3AuZGF0YS5kaXNwYXRjaCgnY29yZS9ibG9jay1lZGl0b3InKS51cGRhdGVCbG9ja0F0dHJpYnV0ZXMoYmxvY2suY2xpZW50SWQsIHtcblx0XHRcdGJsb2NrSW5kZXg6IGJsb2NrSW5kZXgsXG5cdFx0XHRhcHBseU1pbmltdW1IZWlnaHRCbG9jazogYXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2ssXG5cdFx0XHRzY3JvbGxJbmRpY2F0b3JCbG9jazogc2Nyb2xsSW5kaWNhdG9yQmxvY2tcblx0XHR9KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9KTtcbn07XG5cbnZhciBibG9ja0xpc3QgPSBlZGl0b3JEYXRhLmdldEJsb2NrcygpO1xudmFyIGRlYm91bmNlZE9uU3Vic2NyaWJlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdXRpbHNfX1tcImFcIiAvKiBkZWJvdW5jZSAqL10pKGZ1bmN0aW9uICgpIHtcblxuXHR2YXIgbmV3QmxvY2tMaXN0ID0gZWRpdG9yRGF0YS5nZXRCbG9ja3MoKTtcblx0dmFyIGJsb2NrTGlzdENoYW5nZWQgPSBibG9ja0xpc3QubGVuZ3RoICE9PSBuZXdCbG9ja0xpc3QubGVuZ3RoO1xuXG5cdGlmICghYmxvY2tMaXN0Q2hhbmdlZCkge1xuXHRcdGJsb2NrTGlzdENoYW5nZWQgPSBibG9ja0xpc3Quc29tZShmdW5jdGlvbiAoYmxvY2ssIGluZGV4KSB7XG5cdFx0XHRyZXR1cm4gYmxvY2tMaXN0W2luZGV4XS5jbGllbnRJZCAhPT0gbmV3QmxvY2tMaXN0W2luZGV4XS5jbGllbnRJZDtcblx0XHR9KTtcblx0fVxuXG5cdGlmIChibG9ja0xpc3RDaGFuZ2VkKSB7XG5cdFx0YmxvY2tMaXN0ID0gbmV3QmxvY2tMaXN0O1xuXHRcdHVwZGF0ZUJsb2NrcygpO1xuXHR9XG59LCAzMCk7XG5cbndwLmRhdGEuc3Vic2NyaWJlKGRlYm91bmNlZE9uU3Vic2NyaWJlKTtcblxudmFyIEVkaXQgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCgpKEVkaXQsIF9Db21wb25lbnQpO1xuXG5cdGZ1bmN0aW9uIEVkaXQoKSB7XG5cdFx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQoKSh0aGlzLCBFZGl0KTtcblxuXHRcdHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0KCkodGhpcywgKEVkaXQuX19wcm90b19fIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0KCkoRWRpdCkpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuXHR9XG5cblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQoKShFZGl0LCBbe1xuXHRcdGtleTogJ3JlbmRlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblxuXHRcdFx0cmV0dXJuIFt3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdEZyYWdtZW50LFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19wcmV2aWV3X19bXCJhXCIgLyogZGVmYXVsdCAqL10sIHRoaXMucHJvcHMpLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19jb250cm9sc19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCB0aGlzLnByb3BzKVxuXHRcdFx0KSwgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRJbnNwZWN0b3JDb250cm9scyxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fY29tcG9uZW50c19fW1wiZlwiIC8qIExheW91dFBhbmVsICovXSwgdGhpcy5wcm9wcyksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2NvbXBvbmVudHNfX1tcImVcIiAvKiBIZWlnaHRQYW5lbCAqL10sIHRoaXMucHJvcHMpLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19jb21wb25lbnRzX19bXCJoXCIgLyogU2Nyb2xsSW5kaWNhdG9yUGFuZWwgKi9dLCB0aGlzLnByb3BzKSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fY29tcG9uZW50c19fW1wiZ1wiIC8qIFBhcmFsbGF4UGFuZWwgKi9dLCB0aGlzLnByb3BzKVxuXHRcdFx0KV07XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIEVkaXQ7XG59KENvbXBvbmVudCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoRWRpdCk7XG5cbi8qKiovIH0pLFxuLyogNzIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg3Myk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNSkuT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG5cbi8qKiovIH0pLFxuLyogNzMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KTtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0NikoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcblxuXG4vKioqLyB9KSxcbi8qIDc0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg3NSksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSksXG4vKiA3NSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDc2KTtcbnZhciAkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuICRPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogNzYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIV9fd2VicGFja19yZXF1aXJlX18oMTEpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogX193ZWJwYWNrX3JlcXVpcmVfXygxMykuZiB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDc3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg3OCksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSksXG4vKiA3OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ5KTtcbl9fd2VicGFja19yZXF1aXJlX18oNTYpO1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKS5mKCdpdGVyYXRvcicpO1xuXG5cbi8qKiovIH0pLFxuLyogNzkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHRvSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xudmFyIGRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzgpO1xudmFyIGRlc2NyaXB0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE2KShJdGVyYXRvclByb3RvdHlwZSwgX193ZWJwYWNrX3JlcXVpcmVfXyg3KSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA4MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZFAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIGdldEtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDgyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU0KTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgzKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogODMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIHRvSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDg0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oODUpO1xudmFyIHN0ZXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg2KTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcbnZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG5cbi8qKiovIH0pLFxuLyogODUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cblxuLyoqKi8gfSksXG4vKiA4NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDg3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg4OCksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSksXG4vKiA4OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDg5KTtcbl9fd2VicGFja19yZXF1aXJlX18oNTkpO1xuX193ZWJwYWNrX3JlcXVpcmVfXyg5NCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KS5TeW1ib2w7XG5cblxuLyoqKi8gfSksXG4vKiA4OSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbnZhciByZWRlZmluZSA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpO1xudmFyIE1FVEEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkwKS5LRVk7XG52YXIgJGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgc2hhcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcbnZhciB1aWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcbnZhciB3a3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xudmFyIHdrc0V4dCA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xudmFyIHdrc0RlZmluZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xudmFyIGVudW1LZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MSk7XG52YXIgaXNBcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oOTIpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xudmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xudmFyIHRvUHJpbWl0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XG52YXIgY3JlYXRlRGVzYyA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpO1xudmFyIF9jcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcbnZhciBnT1BORXh0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Myk7XG52YXIgJEdPUEQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcbnZhciAkR09QUyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xudmFyICREUCA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xudmFyICRrZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIF9fd2VicGFja19yZXF1aXJlX18oNTcpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgX193ZWJwYWNrX3JlcXVpcmVfXygzMCkuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgX193ZWJwYWNrX3JlcXVpcmVfXygxNikoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG5cblxuLyoqKi8gfSksXG4vKiA5MCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgTUVUQSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcbnZhciBoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcbnZhciBzZXREZXNjID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhX193ZWJwYWNrX3JlcXVpcmVfXygxNykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5cbi8qKiovIH0pLFxuLyogOTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgZ09QUyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xudmFyIHBJRSA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLyoqKi8gfSksXG4vKiA5MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG4vLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDkzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbnZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcbnZhciBnT1BOID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NykuZjtcbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogOTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg0MSkoJ2FzeW5jSXRlcmF0b3InKTtcblxuXG4vKioqLyB9KSxcbi8qIDk1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbl9fd2VicGFja19yZXF1aXJlX18oNDEpKCdvYnNlcnZhYmxlJyk7XG5cblxuLyoqKi8gfSksXG4vKiA5NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oOTcpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0pLFxuLyogOTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuX193ZWJwYWNrX3JlcXVpcmVfXyg5OCk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNSkuT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuXG5cbi8qKiovIH0pLFxuLyogOTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBzZXRQcm90b3R5cGVPZjogX193ZWJwYWNrX3JlcXVpcmVfXyg5OSkuc2V0IH0pO1xuXG5cbi8qKiovIH0pLFxuLyogOTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKShGdW5jdGlvbi5jYWxsLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDEwMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oMTAxKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9KSxcbi8qIDEwMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDEwMik7XG52YXIgJE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkuT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gJE9iamVjdC5jcmVhdGUoUCwgRCk7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTAyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogX193ZWJwYWNrX3JlcXVpcmVfXygzOCkgfSk7XG5cblxuLyoqKi8gfSksXG4vKiAxMDMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxubW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNCksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSksXG4vKiAxMDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuX193ZWJwYWNrX3JlcXVpcmVfXygxMDUpO1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpLk9iamVjdC5hc3NpZ247XG5cblxuLyoqKi8gfSksXG4vKiAxMDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogX193ZWJwYWNrX3JlcXVpcmVfXygxMDYpIH0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcbnZhciBnZXRLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG52YXIgZ09QUyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xudmFyIHBJRSA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XG52YXIgSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNTMpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgX193ZWJwYWNrX3JlcXVpcmVfXygxNykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuXG5cbi8qKiovIH0pLFxuLyogMTA3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19wYWRkaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwOCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X193aWR0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDkpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc3R5bGVfc2Nzc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc3R5bGVfc2Nzc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19zdHlsZV9zY3NzX18pO1xuXG5cblxuXG5cblxuXG5cblxudmFyIF9fID0gd3AuaTE4bi5fXztcbnZhciBDb21wb25lbnQgPSB3cC5lbGVtZW50LkNvbXBvbmVudDtcbnZhciBQYW5lbEJvZHkgPSB3cC5jb21wb25lbnRzLlBhbmVsQm9keTtcblxudmFyIExheW91dFBhbmVsID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQoKShMYXlvdXRQYW5lbCwgX0NvbXBvbmVudCk7XG5cblx0ZnVuY3Rpb24gTGF5b3V0UGFuZWwoKSB7XG5cdFx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQoKSh0aGlzLCBMYXlvdXRQYW5lbCk7XG5cblx0XHRyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCgpKHRoaXMsIChMYXlvdXRQYW5lbC5fX3Byb3RvX18gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQoKShMYXlvdXRQYW5lbCkpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuXHR9XG5cblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQoKShMYXlvdXRQYW5lbCwgW3tcblx0XHRrZXk6IFwicmVuZGVyXCIsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblxuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2xhc3NOYW1lOiBcInBpeGVsZ3JhZGUtaGVyby1idXR0b24tZ3JvdXAtd3JhcHBlclwiLFxuXHRcdFx0XHRcdHRpdGxlOiBfXygnTGF5b3V0JywgJ19fcGx1Z2luX3R4dGQnKSxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogdHJ1ZSB9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19wYWRkaW5nX19bXCJhXCIgLyogZGVmYXVsdCAqL10sIHRoaXMucHJvcHMpLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X193aWR0aF9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCB0aGlzLnByb3BzKSxcblx0XHRcdFx0dGhpcy5wcm9wcy5jaGlsZHJlblxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gTGF5b3V0UGFuZWw7XG59KENvbXBvbmVudCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoTGF5b3V0UGFuZWwpO1xuXG4vKioqLyB9KSxcbi8qIDEwOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18pO1xuXG5cblxuXG5cbnZhciBfXyA9IHdwLmkxOG4uX187XG52YXIgX3dwJGVsZW1lbnQgPSB3cC5lbGVtZW50LFxuICAgIENvbXBvbmVudCA9IF93cCRlbGVtZW50LkNvbXBvbmVudCxcbiAgICBGcmFnbWVudCA9IF93cCRlbGVtZW50LkZyYWdtZW50O1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBCdXR0b24gPSBfd3AkY29tcG9uZW50cy5CdXR0b24sXG4gICAgQnV0dG9uR3JvdXAgPSBfd3AkY29tcG9uZW50cy5CdXR0b25Hcm91cCxcbiAgICBSYW5nZUNvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5SYW5nZUNvbnRyb2w7XG5cbnZhciBQYWRkaW5nQ29udHJvbHMgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCgpKFBhZGRpbmdDb250cm9scywgX0NvbXBvbmVudCk7XG5cblx0ZnVuY3Rpb24gUGFkZGluZ0NvbnRyb2xzKCkge1xuXHRcdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0KCkodGhpcywgUGFkZGluZ0NvbnRyb2xzKTtcblxuXHRcdHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0KCkodGhpcywgKFBhZGRpbmdDb250cm9scy5fX3Byb3RvX18gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQoKShQYWRkaW5nQ29udHJvbHMpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcblx0fVxuXG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0KCkoUGFkZGluZ0NvbnRyb2xzLCBbe1xuXHRcdGtleTogJ3JlbmRlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuXHRcdFx0ICAgIF9wcm9wcyRhdHRyaWJ1dGVzID0gX3Byb3BzLmF0dHJpYnV0ZXMsXG5cdFx0XHQgICAgY29udGVudFBhZGRpbmcgPSBfcHJvcHMkYXR0cmlidXRlcy5jb250ZW50UGFkZGluZyxcblx0XHRcdCAgICBjb250ZW50UGFkZGluZ0N1c3RvbSA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvbnRlbnRQYWRkaW5nQ3VzdG9tLFxuXHRcdFx0ICAgIHNldEF0dHJpYnV0ZXMgPSBfcHJvcHMuc2V0QXR0cmlidXRlcztcblxuXG5cdFx0XHR2YXIgY29udGVudFBhZGRpbmdPcHRpb25zID0gW3sgbGFiZWw6IF9fKCdTbWFsbCcsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnc21hbGwnIH0sIHsgbGFiZWw6IF9fKCdNZWRpdW0nLCAnX19wbHVnaW5fdHh0ZCcpLCB2YWx1ZTogJ21lZGl1bScgfSwgeyBsYWJlbDogX18oJ0xhcmdlJywgJ19fcGx1Z2luX3R4dGQnKSwgdmFsdWU6ICdsYXJnZScgfSwgeyBsYWJlbDogX18oJ0N1c3RvbScsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnY3VzdG9tJyB9XTtcblxuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0RnJhZ21lbnQsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnbGFiZWwnLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0X18oJ0NvbnRlbnQgUGFkZGluZycsICdfX3BsdWdpbl90eHRkJylcblx0XHRcdFx0KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdEJ1dHRvbkdyb3VwLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0Y29udGVudFBhZGRpbmdPcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFx0XHRCdXR0b24sXG5cdFx0XHRcdFx0XHRcdHsga2V5OiBvcHRpb24udmFsdWUsXG5cdFx0XHRcdFx0XHRcdFx0aXNEZWZhdWx0OiBvcHRpb24udmFsdWUgIT09IGNvbnRlbnRQYWRkaW5nLFxuXHRcdFx0XHRcdFx0XHRcdGlzUHJpbWFyeTogb3B0aW9uLnZhbHVlID09PSBjb250ZW50UGFkZGluZyxcblx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcyh7IGNvbnRlbnRQYWRkaW5nOiBvcHRpb24udmFsdWUgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fSB9LFxuXHRcdFx0XHRcdFx0XHRvcHRpb24ubGFiZWxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KSxcblx0XHRcdFx0J2N1c3RvbScgPT09IGNvbnRlbnRQYWRkaW5nICYmIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChSYW5nZUNvbnRyb2wsIHtcblx0XHRcdFx0XHR2YWx1ZTogY29udGVudFBhZGRpbmdDdXN0b20sXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNvbnRlbnRQYWRkaW5nQ3VzdG9tKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNvbnRlbnRQYWRkaW5nQ3VzdG9tOiBjb250ZW50UGFkZGluZ0N1c3RvbSB9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1pbjogMCxcblx0XHRcdFx0XHRtYXg6IDI1XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblx0fV0pO1xuXG5cdHJldHVybiBQYWRkaW5nQ29udHJvbHM7XG59KENvbXBvbmVudCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoUGFkZGluZ0NvbnRyb2xzKTtcblxuLyoqKi8gfSksXG4vKiAxMDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fKTtcblxuXG5cblxuXG52YXIgX18gPSB3cC5pMThuLl9fO1xudmFyIF93cCRlbGVtZW50ID0gd3AuZWxlbWVudCxcbiAgICBDb21wb25lbnQgPSBfd3AkZWxlbWVudC5Db21wb25lbnQsXG4gICAgRnJhZ21lbnQgPSBfd3AkZWxlbWVudC5GcmFnbWVudDtcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgQnV0dG9uID0gX3dwJGNvbXBvbmVudHMuQnV0dG9uLFxuICAgIEJ1dHRvbkdyb3VwID0gX3dwJGNvbXBvbmVudHMuQnV0dG9uR3JvdXAsXG4gICAgUmFuZ2VDb250cm9sID0gX3dwJGNvbXBvbmVudHMuUmFuZ2VDb250cm9sO1xuXG52YXIgV2lkdGhDb250cm9scyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0KCkoV2lkdGhDb250cm9scywgX0NvbXBvbmVudCk7XG5cblx0ZnVuY3Rpb24gV2lkdGhDb250cm9scygpIHtcblx0XHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCgpKHRoaXMsIFdpZHRoQ29udHJvbHMpO1xuXG5cdFx0cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQoKSh0aGlzLCAoV2lkdGhDb250cm9scy5fX3Byb3RvX18gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQoKShXaWR0aENvbnRyb2xzKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG5cdH1cblxuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCgpKFdpZHRoQ29udHJvbHMsIFt7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG5cdFx0XHQgICAgX3Byb3BzJGF0dHJpYnV0ZXMgPSBfcHJvcHMuYXR0cmlidXRlcyxcblx0XHRcdCAgICBjb250ZW50V2lkdGggPSBfcHJvcHMkYXR0cmlidXRlcy5jb250ZW50V2lkdGgsXG5cdFx0XHQgICAgY29udGVudFdpZHRoQ3VzdG9tID0gX3Byb3BzJGF0dHJpYnV0ZXMuY29udGVudFdpZHRoQ3VzdG9tLFxuXHRcdFx0ICAgIHNldEF0dHJpYnV0ZXMgPSBfcHJvcHMuc2V0QXR0cmlidXRlcztcblxuXG5cdFx0XHR2YXIgY29udGVudFdpZHRoT3B0aW9ucyA9IFt7IGxhYmVsOiBfXygnRnVsbCcsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnZnVsbCcgfSwgeyBsYWJlbDogX18oJ0xhcmdlJywgJ19fcGx1Z2luX3R4dGQnKSwgdmFsdWU6ICdsYXJnZScgfSwgeyBsYWJlbDogX18oJ05hcnJvdycsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnbmFycm93JyB9LCB7IGxhYmVsOiBfXygnQ3VzdG9tJywgJ19fcGx1Z2luX3R4dGQnKSwgdmFsdWU6ICdjdXN0b20nIH1dO1xuXG5cdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRGcmFnbWVudCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdCdsYWJlbCcsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRfXygnQ29udGVudCBXaWR0aCcsICdfX3BsdWdpbl90eHRkJylcblx0XHRcdFx0KSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdEJ1dHRvbkdyb3VwLFxuXHRcdFx0XHRcdHsgbGFiZWw6ICdDb250ZW50IFdpZHRoJyB9LFxuXHRcdFx0XHRcdGNvbnRlbnRXaWR0aE9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcblx0XHRcdFx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdEJ1dHRvbixcblx0XHRcdFx0XHRcdFx0eyBpc0RlZmF1bHQ6IG9wdGlvbi52YWx1ZSAhPT0gY29udGVudFdpZHRoLFxuXHRcdFx0XHRcdFx0XHRcdGlzUHJpbWFyeTogb3B0aW9uLnZhbHVlID09PSBjb250ZW50V2lkdGgsXG5cdFx0XHRcdFx0XHRcdFx0b25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoeyBjb250ZW50V2lkdGg6IG9wdGlvbi52YWx1ZSB9KTtcblx0XHRcdFx0XHRcdFx0XHR9IH0sXG5cdFx0XHRcdFx0XHRcdG9wdGlvbi5sYWJlbFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpLFxuXHRcdFx0XHQnY3VzdG9tJyA9PT0gY29udGVudFdpZHRoICYmIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChSYW5nZUNvbnRyb2wsIHtcblx0XHRcdFx0XHR2YWx1ZTogY29udGVudFdpZHRoQ3VzdG9tLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShjb250ZW50V2lkdGhDdXN0b20pIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY29udGVudFdpZHRoQ3VzdG9tOiBjb250ZW50V2lkdGhDdXN0b20gfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRtaW46IDIwLFxuXHRcdFx0XHRcdG1heDogOTAsXG5cdFx0XHRcdFx0c3RlcDogMTBcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIFdpZHRoQ29udHJvbHM7XG59KENvbXBvbmVudCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoV2lkdGhDb250cm9scyk7XG5cbi8qKiovIH0pLFxuLyogMTEwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cbi8qKiovIH0pLFxuLyogMTExICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyk7XG5cblxuXG5cblxudmFyIF9fID0gd3AuaTE4bi5fXztcbnZhciBfd3AkZWxlbWVudCA9IHdwLmVsZW1lbnQsXG4gICAgQ29tcG9uZW50ID0gX3dwJGVsZW1lbnQuQ29tcG9uZW50LFxuICAgIEZyYWdtZW50ID0gX3dwJGVsZW1lbnQuRnJhZ21lbnQ7XG52YXIgX3dwJGNvbXBvbmVudHMgPSB3cC5jb21wb25lbnRzLFxuICAgIFBhbmVsQm9keSA9IF93cCRjb21wb25lbnRzLlBhbmVsQm9keSxcbiAgICBSYW5nZUNvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5SYW5nZUNvbnRyb2wsXG4gICAgUmFkaW9Db250cm9sID0gX3dwJGNvbXBvbmVudHMuUmFkaW9Db250cm9sLFxuICAgIFRvZ2dsZUNvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5Ub2dnbGVDb250cm9sO1xuXG52YXIgUGFyYWxsYXhQYW5lbCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0KCkoUGFyYWxsYXhQYW5lbCwgX0NvbXBvbmVudCk7XG5cblx0ZnVuY3Rpb24gUGFyYWxsYXhQYW5lbCgpIHtcblx0XHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCgpKHRoaXMsIFBhcmFsbGF4UGFuZWwpO1xuXG5cdFx0cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQoKSh0aGlzLCAoUGFyYWxsYXhQYW5lbC5fX3Byb3RvX18gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQoKShQYXJhbGxheFBhbmVsKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG5cdH1cblxuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCgpKFBhcmFsbGF4UGFuZWwsIFt7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG5cdFx0XHQgICAgX3Byb3BzJGF0dHJpYnV0ZXMgPSBfcHJvcHMuYXR0cmlidXRlcyxcblx0XHRcdCAgICBlbmFibGVQYXJhbGxheCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmVuYWJsZVBhcmFsbGF4LFxuXHRcdFx0ICAgIHBhcmFsbGF4QW1vdW50ID0gX3Byb3BzJGF0dHJpYnV0ZXMucGFyYWxsYXhBbW91bnQsXG5cdFx0XHQgICAgcGFyYWxsYXhDdXN0b21BbW91bnQgPSBfcHJvcHMkYXR0cmlidXRlcy5wYXJhbGxheEN1c3RvbUFtb3VudCxcblx0XHRcdCAgICBzZXRBdHRyaWJ1dGVzID0gX3Byb3BzLnNldEF0dHJpYnV0ZXM7XG5cblxuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHR7IHRpdGxlOiBfXygnUGFyYWxsYXgnLCAnX19wbHVnaW5fdHh0ZCcpLCBpbml0aWFsT3BlbjogZmFsc2UgfSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ0VuYWJsZSBQYXJhbGxheCBTY3JvbGxpbmcnLCAnX19wbHVnaW5fdHh0ZCcpLFxuXHRcdFx0XHRcdGNoZWNrZWQ6IGVuYWJsZVBhcmFsbGF4LFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZSgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgZW5hYmxlUGFyYWxsYXg6ICFlbmFibGVQYXJhbGxheCB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHQhIWVuYWJsZVBhcmFsbGF4ICYmIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChSYWRpb0NvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ1BhcmFsbGF4IE9yYml0YWwgU3BlZWQnLCAnX19wbHVnaW5fdHh0ZCcpLFxuXHRcdFx0XHRcdHNlbGVjdGVkOiBwYXJhbGxheEFtb3VudCxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UocGFyYWxsYXhBbW91bnQpIHtcblxuXHRcdFx0XHRcdFx0aWYgKHBhcmFsbGF4QW1vdW50ID09PSAnY3VzdG9tJykge1xuXHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKHsgcGFyYWxsYXhBbW91bnQ6IHBhcmFsbGF4QW1vdW50IH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcyh7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYWxsYXhBbW91bnQ6IHBhcmFsbGF4QW1vdW50LFxuXHRcdFx0XHRcdFx0XHRcdHBhcmFsbGF4Q3VzdG9tQW1vdW50OiBwYXJzZUludChwYXJhbGxheEFtb3VudCwgMTApXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3B0aW9uczogW3tcblx0XHRcdFx0XHRcdGxhYmVsOiBfXygnRmFzdCBhcyBNZXJjdXJlJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnMjAnXG5cdFx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdOYXR1cmFsIGFzIEVhcnRoJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0XHRcdFx0XHRcdHZhbHVlOiAnNTAnXG5cdFx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdTbG93IGFzIE5lcHR1bmUnLCAnX19wbHVnaW5fdHh0ZCcpLFxuXHRcdFx0XHRcdFx0dmFsdWU6ICc3MCdcblx0XHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0XHRsYWJlbDogX18oJ0N1c3RvbScsICdfX3BsdWdpbl90eHRkJyksXG5cdFx0XHRcdFx0XHR2YWx1ZTogJ2N1c3RvbSdcblx0XHRcdFx0XHR9XSxcblx0XHRcdFx0XHRoZWxwOiBfXygnVGhlIHNwZWVkIGF0IHdoaWNoIHRoZSBwYXJhbGxheCBlZmZlY3QgcnVucy4nLCAnX19wbHVnaW5fdHh0ZCcpXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHQhIWVuYWJsZVBhcmFsbGF4ICYmICdjdXN0b20nID09PSBwYXJhbGxheEFtb3VudCAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoUmFuZ2VDb250cm9sLCB7XG5cdFx0XHRcdFx0dmFsdWU6IHBhcmFsbGF4Q3VzdG9tQW1vdW50LFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShwYXJhbGxheEN1c3RvbUFtb3VudCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBwYXJhbGxheEN1c3RvbUFtb3VudDogcGFyYWxsYXhDdXN0b21BbW91bnQgfSk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRtaW46IDEwLFxuXHRcdFx0XHRcdG1heDogMTAwLFxuXHRcdFx0XHRcdHN0ZXA6IDEwLFxuXHRcdFx0XHRcdGhlbHA6IF9fKCdJdCBzdGFydHMgZnJvbSAwIHdoZW4gdGhlIGltYWdlIHdpbGwga2VlcCB3aXRoIHRoZSBjb250ZW50IChubyBwYXJhbGxheCkgdXAgdG8gMTAwIHdoZW4gdGhlIGltYWdlIGFwcGVhcnMgZml4ZWQgaW4gcGxhY2UuJywgJ19fcGx1Z2luX3R4dGQnKVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gUGFyYWxsYXhQYW5lbDtcbn0oQ29tcG9uZW50KTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChQYXJhbGxheFBhbmVsKTtcblxuLyoqKi8gfSksXG4vKiAxMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEdhbGxlcnlQbGFjZWhvbGRlcjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEdhbGxlcnlQcmV2aWV3OyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX3Byb21pc2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfcHJvbWlzZV9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19wcm9taXNlX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fKTtcblxuXG5cblxuXG5cblxudmFyIF9fID0gd3AuaTE4bi5fXztcbnZhciBfd3AkZWxlbWVudCA9IHdwLmVsZW1lbnQsXG4gICAgQ29tcG9uZW50ID0gX3dwJGVsZW1lbnQuQ29tcG9uZW50LFxuICAgIEZyYWdtZW50ID0gX3dwJGVsZW1lbnQuRnJhZ21lbnQ7XG52YXIgX3dwJGNvbXBvbmVudHMgPSB3cC5jb21wb25lbnRzLFxuICAgIEJ1dHRvbiA9IF93cCRjb21wb25lbnRzLkJ1dHRvbixcbiAgICBJY29uQnV0dG9uID0gX3dwJGNvbXBvbmVudHMuSWNvbkJ1dHRvbixcbiAgICBGb3JtRmlsZVVwbG9hZCA9IF93cCRjb21wb25lbnRzLkZvcm1GaWxlVXBsb2FkLFxuICAgIFNlbGVjdENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5TZWxlY3RDb250cm9sO1xudmFyIF93cCRibG9ja0VkaXRvciA9IHdwLmJsb2NrRWRpdG9yLFxuICAgIE1lZGlhVXBsb2FkID0gX3dwJGJsb2NrRWRpdG9yLk1lZGlhVXBsb2FkLFxuICAgIE1lZGlhUGxhY2Vob2xkZXIgPSBfd3AkYmxvY2tFZGl0b3IuTWVkaWFQbGFjZWhvbGRlcjtcblxuXG52YXIgQUxMT1dFRF9NRURJQV9UWVBFUyA9IFsnaW1hZ2UnXTtcblxudmFyIEdhbGxlcnlQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0KCkoR2FsbGVyeVBsYWNlaG9sZGVyLCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBHYWxsZXJ5UGxhY2Vob2xkZXIoKSB7XG5cdFx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQoKSh0aGlzLCBHYWxsZXJ5UGxhY2Vob2xkZXIpO1xuXG5cdFx0cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQoKSh0aGlzLCAoR2FsbGVyeVBsYWNlaG9sZGVyLl9fcHJvdG9fXyB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCgpKEdhbGxlcnlQbGFjZWhvbGRlcikpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuXHR9XG5cblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQoKShHYWxsZXJ5UGxhY2Vob2xkZXIsIFt7XG5cdFx0a2V5OiAnb25DaGFuZ2VHYWxsZXJ5Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gb25DaGFuZ2VHYWxsZXJ5KGdhbGxlcnlJbWFnZXMpIHtcblx0XHRcdHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdFx0XHR2YXIgcHJvbWlzZXMgPSBnYWxsZXJ5SW1hZ2VzLm1hcChmdW5jdGlvbiAoaW1hZ2UsIGluZGV4KSB7XG5cdFx0XHRcdHJldHVybiB3cC5hcGlSZXF1ZXN0KHsgcGF0aDogJy93cC92Mi9tZWRpYS8nICsgaW1hZ2UuaWQgfSkudGhlbihmdW5jdGlvbiAobmV3SW1hZ2UpIHtcblx0XHRcdFx0XHRnYWxsZXJ5SW1hZ2VzW2luZGV4XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fX2RlZmF1bHQoKSh7fSwgbmV3SW1hZ2UsIGltYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19wcm9taXNlX19fZGVmYXVsdC5hLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdF90aGlzMi5wcm9wcy5zZXRBdHRyaWJ1dGVzKHsgZ2FsbGVyeUltYWdlczogZ2FsbGVyeUltYWdlcy5maWx0ZXIoZnVuY3Rpb24gKGltYWdlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gISFpbWFnZS5pZCAmJiAhIWltYWdlLnNpemVzICYmICEhaW1hZ2Uuc2l6ZXMubGFyZ2UgJiYgISFpbWFnZS5zaXplcy5sYXJnZS51cmw7XG5cdFx0XHRcdFx0fSkgfSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdFx0XHR2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcblx0XHRcdCAgICBfcHJvcHMkYXR0cmlidXRlcyA9IF9wcm9wcy5hdHRyaWJ1dGVzLFxuXHRcdFx0ICAgIGdhbGxlcnlJbWFnZXMgPSBfcHJvcHMkYXR0cmlidXRlcy5nYWxsZXJ5SW1hZ2VzLFxuXHRcdFx0ICAgIHNlbGVjdGVkID0gX3Byb3BzJGF0dHJpYnV0ZXMuc2VsZWN0ZWQsXG5cdFx0XHQgICAgb25TZWxlY3RJbWFnZSA9IF9wcm9wcyRhdHRyaWJ1dGVzLm9uU2VsZWN0SW1hZ2UsXG5cdFx0XHQgICAgb25DaGFuZ2UgPSBfcHJvcHMkYXR0cmlidXRlcy5vbkNoYW5nZSxcblx0XHRcdCAgICBzZXRBdHRyaWJ1dGVzID0gX3Byb3BzLnNldEF0dHJpYnV0ZXM7XG5cblxuXHRcdFx0dmFyIGhhc0ltYWdlcyA9ICEhZ2FsbGVyeUltYWdlcy5sZW5ndGg7XG5cblx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoTWVkaWFQbGFjZWhvbGRlciwge1xuXHRcdFx0XHRhZGRUb0dhbGxlcnk6IGhhc0ltYWdlcyxcblx0XHRcdFx0Y2xhc3NOYW1lOiAnJyxcblx0XHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdFx0dGl0bGU6ICcnLFxuXHRcdFx0XHRcdGluc3RydWN0aW9uczogX18oJ0RyYWcgaW1hZ2VzLCB1cGxvYWQgbmV3IG9uZXMgb3Igc2VsZWN0IGZpbGVzIGZyb20geW91ciBsaWJyYXJ5LicsICdfX3BsdWdpbl90eHRkJylcblx0XHRcdFx0fSxcblx0XHRcdFx0b25TZWxlY3Q6IHRoaXMub25DaGFuZ2VHYWxsZXJ5LmJpbmQodGhpcyksXG5cdFx0XHRcdGFjY2VwdDogJ2ltYWdlLyonLFxuXHRcdFx0XHRhbGxvd2VkVHlwZXM6IEFMTE9XRURfTUVESUFfVFlQRVMsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogaGFzSW1hZ2VzID8gZ2FsbGVyeUltYWdlcyA6IHVuZGVmaW5lZFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIEdhbGxlcnlQbGFjZWhvbGRlcjtcbn0oQ29tcG9uZW50KTtcblxudmFyIEdhbGxlcnlQcmV2aWV3ID0gZnVuY3Rpb24gKF9Db21wb25lbnQyKSB7XG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0KCkoR2FsbGVyeVByZXZpZXcsIF9Db21wb25lbnQyKTtcblxuXHRmdW5jdGlvbiBHYWxsZXJ5UHJldmlldygpIHtcblx0XHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCgpKHRoaXMsIEdhbGxlcnlQcmV2aWV3KTtcblxuXHRcdHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0KCkodGhpcywgKEdhbGxlcnlQcmV2aWV3Ll9fcHJvdG9fXyB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCgpKEdhbGxlcnlQcmV2aWV3KSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG5cdH1cblxuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCgpKEdhbGxlcnlQcmV2aWV3LCBbe1xuXHRcdGtleTogJ3JlbmRlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcblx0XHRcdCAgICBnYWxsZXJ5SW1hZ2VzID0gX3Byb3BzMi5nYWxsZXJ5SW1hZ2VzLFxuXHRcdFx0ICAgIHNlbGVjdGVkID0gX3Byb3BzMi5zZWxlY3RlZCxcblx0XHRcdCAgICBvblNlbGVjdEltYWdlID0gX3Byb3BzMi5vblNlbGVjdEltYWdlLFxuXHRcdFx0ICAgIGlzU2VsZWN0ZWQgPSBfcHJvcHMyLmlzU2VsZWN0ZWQ7XG5cblxuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0J3VsJyxcblx0XHRcdFx0eyAnY2xhc3MnOiAnbm92YS1zbGlkZXNob3dfX2dhbGxlcnktZWRpdCcgfSxcblx0XHRcdFx0Z2FsbGVyeUltYWdlcy5tYXAoZnVuY3Rpb24gKGltZywgaW5kZXgpIHtcblxuXHRcdFx0XHRcdHZhciBjbGFzc2VzID0gWydub3ZhLXNsaWRlc2hvd19fZ2FsbGVyeS1pdGVtJ107XG5cblx0XHRcdFx0XHRpZiAoc2VsZWN0ZWQgPT09IGluZGV4KSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goJ25vdmEtc2xpZGVzaG93X19nYWxsZXJ5LWl0ZW0tLWFjdGl2ZScpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHQnbGknLFxuXHRcdFx0XHRcdFx0eyBrZXk6IGltZy5pZCB8fCBpbWcudXJsLCBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuXHRcdFx0XHRcdFx0XHRcdG9uU2VsZWN0SW1hZ2UoaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHR9IH0sXG5cdFx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHRcdFx0XHR7IGNsYXNzTmFtZTogY2xhc3Nlcy5qb2luKCcgJykgfSxcblx0XHRcdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KCdpbWcnLCB7IHNyYzogaW1nLnNpemVzLnRodW1ibmFpbC51cmwsIGFsdDogJycgfSlcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gR2FsbGVyeVByZXZpZXc7XG59KENvbXBvbmVudCk7XG5cblxuXG4vKioqLyB9KSxcbi8qIDExMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcbl9fd2VicGFja19yZXF1aXJlX18oNDkpO1xuX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDExNCk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDEyNik7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDEyNyk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNSkuUHJvbWlzZTtcblxuXG4vKioqLyB9KSxcbi8qIDExNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIExJQlJBUlkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcbnZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xudmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xudmFyIGFuSW5zdGFuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNSk7XG52YXIgZm9yT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNik7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MSk7XG52YXIgdGFzayA9IF9fd2VicGFja19yZXF1aXJlX18oNjIpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSkoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xudmFyIHBlcmZvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcbnZhciB1c2VyQWdlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMik7XG52YXIgcHJvbWlzZVJlc29sdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtfX3dlYnBhY2tfcmVxdWlyZV9fKDcpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDI5KSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5fX3dlYnBhY2tfcmVxdWlyZV9fKDEyNCkoUFJPTUlTRSk7XG5XcmFwcGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICB2YXIgJCRyZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoTElCUkFSWSAmJiB0aGlzID09PSBXcmFwcGVyID8gJFByb21pc2UgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNSkoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTE1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBjdHggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTcpO1xudmFyIGlzQXJyYXlJdGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTgpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU0KTtcbnZhciBnZXRJdGVyRm4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOSk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG5cblxuLyoqKi8gfSksXG4vKiAxMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xudmFyIElURVJBVE9SID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDExOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgY2xhc3NvZiA9IF9fd2VicGFja19yZXF1aXJlX18oNjApO1xudmFyIElURVJBVE9SID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTIwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDEyMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbnZhciBtYWNyb3Rhc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYyKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcblxuXG4vKioqLyB9KSxcbi8qIDEyMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgaGlkZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChzYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgaGlkZSh0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuXG5cbi8qKiovIH0pLFxuLyogMTI0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbnZhciBjb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciBkUCA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG52YXIgU1BFQ0lFUyA9IF9fd2VicGFja19yZXF1aXJlX18oNykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gdHlwZW9mIGNvcmVbS0VZXSA9PSAnZnVuY3Rpb24nID8gY29yZVtLRVldIDogZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDEyNSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG52YXIgSVRFUkFUT1IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG5cblxuLyoqKi8gfSksXG4vKiAxMjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcblxudmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xudmFyIGNvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MSk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdQcm9taXNlJywgeyAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKTtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgfSA6IG9uRmluYWxseSxcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHlcbiAgKTtcbn0gfSk7XG5cblxuLyoqKi8gfSksXG4vKiAxMjcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcbnZhciBwZXJmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Myk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcblxuXG4vKioqLyB9KSxcbi8qIDEyOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBDb2xvckNvbnRyb2xzICovXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgQ29sb3JQYW5lbCAqL1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDb2xvclRvb2xiYXI7IH0pO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IE92ZXJsYXlDb250cm9scyAqL1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zdHlsZV9zY3NzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyOSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zdHlsZV9zY3NzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3N0eWxlX3Njc3NfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pY29uc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2luZGV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcblxuXG5cblxuXG5cblxuXG5cbnZhciBfXyA9IHdwLmkxOG4uX187XG52YXIgX3dwJGVsZW1lbnQgPSB3cC5lbGVtZW50LFxuICAgIENvbXBvbmVudCA9IF93cCRlbGVtZW50LkNvbXBvbmVudCxcbiAgICBGcmFnbWVudCA9IF93cCRlbGVtZW50LkZyYWdtZW50O1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBDb2xvclBhbGV0dGUgPSBfd3AkY29tcG9uZW50cy5Db2xvclBhbGV0dGUsXG4gICAgRHJvcGRvd24gPSBfd3AkY29tcG9uZW50cy5Ecm9wZG93bixcbiAgICBJY29uQnV0dG9uID0gX3dwJGNvbXBvbmVudHMuSWNvbkJ1dHRvbixcbiAgICBSYWRpb0NvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5SYWRpb0NvbnRyb2wsXG4gICAgUmFuZ2VDb250cm9sID0gX3dwJGNvbXBvbmVudHMuUmFuZ2VDb250cm9sLFxuICAgIFNlbGVjdENvbnRyb2wgPSBfd3AkY29tcG9uZW50cy5TZWxlY3RDb250cm9sLFxuICAgIFRvb2xiYXIgPSBfd3AkY29tcG9uZW50cy5Ub29sYmFyO1xudmFyIFBhbmVsQ29sb3JTZXR0aW5ncyA9IHdwLmJsb2NrRWRpdG9yLlBhbmVsQ29sb3JTZXR0aW5ncztcblxuXG52YXIgY29sb3JzID0gW3tcblx0bmFtZTogX18oJ0RhcmsnLCAnX19wbHVnaW5fdHh0ZCcpLFxuXHRjb2xvcjogJyMwMDAnXG59LCB7XG5cdG5hbWU6IF9fKCdMaWdodCcsICdfX3BsdWdpbl90eHRkJyksXG5cdGNvbG9yOiAnI0ZGRidcbn1dO1xuXG52YXIgT3ZlcmxheUNvbnRyb2xzID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQoKShPdmVybGF5Q29udHJvbHMsIF9Db21wb25lbnQpO1xuXG5cdGZ1bmN0aW9uIE92ZXJsYXlDb250cm9scygpIHtcblx0XHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCgpKHRoaXMsIE92ZXJsYXlDb250cm9scyk7XG5cblx0XHRyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCgpKHRoaXMsIChPdmVybGF5Q29udHJvbHMuX19wcm90b19fIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0KCkoT3ZlcmxheUNvbnRyb2xzKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG5cdH1cblxuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCgpKE92ZXJsYXlDb250cm9scywgW3tcblx0XHRrZXk6IFwicmVuZGVyXCIsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuXHRcdFx0ICAgIF9wcm9wcyRhdHRyaWJ1dGVzID0gX3Byb3BzLmF0dHJpYnV0ZXMsXG5cdFx0XHQgICAgb3ZlcmxheUZpbHRlclN0eWxlID0gX3Byb3BzJGF0dHJpYnV0ZXMub3ZlcmxheUZpbHRlclN0eWxlLFxuXHRcdFx0ICAgIG92ZXJsYXlGaWx0ZXJTdHJlbmd0aCA9IF9wcm9wcyRhdHRyaWJ1dGVzLm92ZXJsYXlGaWx0ZXJTdHJlbmd0aCxcblx0XHRcdCAgICBzZXRBdHRyaWJ1dGVzID0gX3Byb3BzLnNldEF0dHJpYnV0ZXM7XG5cblxuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0RnJhZ21lbnQsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChSYWRpb0NvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ092ZXJsYXkgRmlsdGVyIFN0eWxlJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0XHRcdFx0XHRzZWxlY3RlZDogb3ZlcmxheUZpbHRlclN0eWxlLFxuXHRcdFx0XHRcdG9wdGlvbnM6IFt7IGxhYmVsOiBfXygnTm9uZScsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnbm9uZScgfSwgeyBsYWJlbDogX18oJ0RhcmsnLCAnX19wbHVnaW5fdHh0ZCcpLCB2YWx1ZTogJ2RhcmsnIH0sIHsgbGFiZWw6IF9fKCdMaWdodCcsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnbGlnaHQnIH1dLFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShvdmVybGF5RmlsdGVyU3R5bGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgb3ZlcmxheUZpbHRlclN0eWxlOiBvdmVybGF5RmlsdGVyU3R5bGUgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0b3ZlcmxheUZpbHRlclN0eWxlICE9PSAnbm9uZScgJiYgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFJhbmdlQ29udHJvbCwge1xuXHRcdFx0XHRcdGxhYmVsOiBfXygnT3ZlcmxheSBGaWx0ZXIgU3RyZW5ndGgnLCAnX19wbHVnaW5fdHh0ZCcpLFxuXHRcdFx0XHRcdHZhbHVlOiBvdmVybGF5RmlsdGVyU3RyZW5ndGgsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKG92ZXJsYXlGaWx0ZXJTdHJlbmd0aCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBvdmVybGF5RmlsdGVyU3RyZW5ndGg6IG92ZXJsYXlGaWx0ZXJTdHJlbmd0aCB9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1pbjogMCxcblx0XHRcdFx0XHRtYXg6IDEwMCxcblx0XHRcdFx0XHRzdGVwOiAxMFxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gT3ZlcmxheUNvbnRyb2xzO1xufShDb21wb25lbnQpO1xuXG52YXIgQ29sb3JDb250cm9scyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50Mikge1xuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCgpKENvbG9yQ29udHJvbHMsIF9Db21wb25lbnQyKTtcblxuXHRmdW5jdGlvbiBDb2xvckNvbnRyb2xzKCkge1xuXHRcdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0KCkodGhpcywgQ29sb3JDb250cm9scyk7XG5cblx0XHRyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCgpKHRoaXMsIChDb2xvckNvbnRyb2xzLl9fcHJvdG9fXyB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCgpKENvbG9yQ29udHJvbHMpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcblx0fVxuXG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0KCkoQ29sb3JDb250cm9scywgW3tcblx0XHRrZXk6IFwicmVuZGVyXCIsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcblx0XHRcdCAgICBjb250ZW50Q29sb3IgPSBfcHJvcHMyLmF0dHJpYnV0ZXMuY29udGVudENvbG9yLFxuXHRcdFx0ICAgIHNldEF0dHJpYnV0ZXMgPSBfcHJvcHMyLnNldEF0dHJpYnV0ZXM7XG5cblxuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChDb2xvclBhbGV0dGUsIHtcblx0XHRcdFx0Y2xhc3NOYW1lOiBcIm5vdmEtaGlkZS1jbGVhci1jb2xvclwiLFxuXHRcdFx0XHR2YWx1ZTogY29udGVudENvbG9yLFxuXHRcdFx0XHRjb2xvcnM6IGNvbG9ycyxcblx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNvbnRlbnRDb2xvcikge1xuXHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgY29udGVudENvbG9yOiBjb250ZW50Q29sb3IgfSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRpc2FibGVDdXN0b21Db2xvcnM6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblx0fV0pO1xuXG5cdHJldHVybiBDb2xvckNvbnRyb2xzO1xufShDb21wb25lbnQpO1xuXG52YXIgQ29sb3JQYW5lbCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50Mykge1xuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCgpKENvbG9yUGFuZWwsIF9Db21wb25lbnQzKTtcblxuXHRmdW5jdGlvbiBDb2xvclBhbmVsKCkge1xuXHRcdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0KCkodGhpcywgQ29sb3JQYW5lbCk7XG5cblx0XHRyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCgpKHRoaXMsIChDb2xvclBhbmVsLl9fcHJvdG9fXyB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCgpKENvbG9yUGFuZWwpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcblx0fVxuXG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0KCkoQ29sb3JQYW5lbCwgW3tcblx0XHRrZXk6IFwicmVuZGVyXCIsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcblx0XHRcdCAgICBjb250ZW50Q29sb3IgPSBfcHJvcHMzLmF0dHJpYnV0ZXMuY29udGVudENvbG9yLFxuXHRcdFx0ICAgIHNldEF0dHJpYnV0ZXMgPSBfcHJvcHMzLnNldEF0dHJpYnV0ZXM7XG5cblxuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxDb2xvclNldHRpbmdzLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2xhc3NOYW1lOiBcIm5vdmEtaGlkZS1jbGVhci1jb2xvclwiLFxuXHRcdFx0XHRcdHRpdGxlOiBfXygnQ29sb3IgU2V0dGluZ3MnLCAnX19wbHVnaW5fdHh0ZCcpLFxuXHRcdFx0XHRcdGNvbG9yU2V0dGluZ3M6IFt7XG5cdFx0XHRcdFx0XHR2YWx1ZTogY29udGVudENvbG9yLFxuXHRcdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKGNvbnRlbnRDb2xvcikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IGNvbnRlbnRDb2xvcjogY29udGVudENvbG9yIH0pO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGxhYmVsOiBfXygnQ29udGVudCBDb2xvcicsICdfX3BsdWdpbl90eHRkJylcblx0XHRcdFx0XHR9XSxcblx0XHRcdFx0XHRjb2xvcnM6IGNvbG9ycyxcblx0XHRcdFx0XHRpbml0aWFsT3BlbjogZmFsc2UgfSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KE92ZXJsYXlDb250cm9scywgdGhpcy5wcm9wcylcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIENvbG9yUGFuZWw7XG59KENvbXBvbmVudCk7XG5cbnZhciBDb2xvclRvb2xiYXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudDQpIHtcblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQoKShDb2xvclRvb2xiYXIsIF9Db21wb25lbnQ0KTtcblxuXHRmdW5jdGlvbiBDb2xvclRvb2xiYXIoKSB7XG5cdFx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQoKSh0aGlzLCBDb2xvclRvb2xiYXIpO1xuXG5cdFx0cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQoKSh0aGlzLCAoQ29sb3JUb29sYmFyLl9fcHJvdG9fXyB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCgpKENvbG9yVG9vbGJhcikpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuXHR9XG5cblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQoKShDb2xvclRvb2xiYXIsIFt7XG5cdFx0a2V5OiBcInJlbmRlclwiLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdFx0XHR2YXIgX3RoaXM1ID0gdGhpcztcblxuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0VG9vbGJhcixcblx0XHRcdFx0eyBjbGFzc05hbWU6IFwicGl4ZWxncmFkZS1oZXJvLWJsb2NrLXRvb2xiYXJcIiB9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoRHJvcGRvd24sIHtcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIixcblx0XHRcdFx0XHRjbGFzc05hbWU6IFwicGl4ZWxncmFkZS1oZXJvLWJsb2NrLXRvb2xiYXItZHJvcGRvd25cIixcblx0XHRcdFx0XHRjb250ZW50Q2xhc3NOYW1lOiBcImNvbXBvbmVudHMtbm92YS0tcG9wb3ZlclwiLFxuXHRcdFx0XHRcdHJlbmRlclRvZ2dsZTogZnVuY3Rpb24gcmVuZGVyVG9nZ2xlKF9yZWYpIHtcblx0XHRcdFx0XHRcdHZhciBpc09wZW4gPSBfcmVmLmlzT3Blbixcblx0XHRcdFx0XHRcdCAgICBvblRvZ2dsZSA9IF9yZWYub25Ub2dnbGU7XG5cdFx0XHRcdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KEljb25CdXR0b24sIHtcblx0XHRcdFx0XHRcdFx0b25DbGljazogb25Ub2dnbGUsXG5cdFx0XHRcdFx0XHRcdGljb246IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faWNvbnNfX1tcImZcIiAvKiBpbnZlcnQgKi9dLFxuXHRcdFx0XHRcdFx0XHRcImFyaWEtZXhwYW5kZWRcIjogaXNPcGVuLFxuXHRcdFx0XHRcdFx0XHRsYWJlbDogX18oJ0NvbG9yIE9wdGlvbnMnLCAnX19wbHVnaW5fdHh0ZCcpLFxuXHRcdFx0XHRcdFx0XHRsYWJlbFBvc2l0aW9uOiBcImJvdHRvbVwiXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGZvY3VzT25Nb3VudDogZmFsc2UsXG5cdFx0XHRcdFx0cmVuZGVyQ29udGVudDogZnVuY3Rpb24gcmVuZGVyQ29udGVudChfcmVmMikge1xuXHRcdFx0XHRcdFx0dmFyIG9uQ2xvc2UgPSBfcmVmMi5vbkNsb3NlO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcdFx0RnJhZ21lbnQsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChDb2xvckNvbnRyb2xzLCBfdGhpczUucHJvcHMpLFxuXHRcdFx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoT3ZlcmxheUNvbnRyb2xzLCBfdGhpczUucHJvcHMpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIENvbG9yVG9vbGJhcjtcbn0oQ29tcG9uZW50KTtcblxuXG5cbi8qKiovIH0pLFxuLyogMTI5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cbi8qKiovIH0pLFxuLyogMTMwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cbi8qKiovIH0pLFxuLyogMTMxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IEJsb2NrSG9yaXpvbnRhbEFsaWdubWVudFRvb2xiYXIgKi9cbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faWNvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG5cbi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG52YXIgX18gPSB3cC5pMThuLl9fO1xudmFyIFRvb2xiYXIgPSB3cC5jb21wb25lbnRzLlRvb2xiYXI7XG52YXIgd2l0aFZpZXdwb3J0TWF0Y2ggPSB3cC52aWV3cG9ydC53aXRoVmlld3BvcnRNYXRjaDtcbnZhciB3aXRoU2VsZWN0ID0gd3AuZGF0YS53aXRoU2VsZWN0O1xudmFyIF93cCRjb21wb3NlID0gd3AuY29tcG9zZSxcbiAgICBjb21wb3NlID0gX3dwJGNvbXBvc2UuY29tcG9zZSxcbiAgICBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCA9IF93cCRjb21wb3NlLmNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50O1xudmFyIGNyZWF0ZUNvbnRleHQgPSB3cC5lbGVtZW50LmNyZWF0ZUNvbnRleHQ7XG5cbnZhciBfY3JlYXRlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuXHRuYW1lOiAnJyxcblx0aXNTZWxlY3RlZDogZmFsc2UsXG5cdGZvY3VzZWRFbGVtZW50OiBudWxsLFxuXHRzZXRGb2N1c2VkRWxlbWVudDogZnVuY3Rpb24gc2V0Rm9jdXNlZEVsZW1lbnQoKSB7fSxcblx0Y2xpZW50SWQ6IG51bGxcbn0pLFxuICAgIENvbnN1bWVyID0gX2NyZWF0ZUNvbnRleHQuQ29uc3VtZXIsXG4gICAgUHJvdmlkZXIgPSBfY3JlYXRlQ29udGV4dC5Qcm92aWRlcjtcblxuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuXG5cblxuXG52YXIgQkxPQ0tfQUxJR05NRU5UU19DT05UUk9MUyA9IHtcblx0bGVmdDoge1xuXHRcdGljb246IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faWNvbnNfX1tcImNcIiAvKiBhbGlnblRvcCAqL10sXG5cdFx0dGl0bGU6IF9fKCdBbGlnbiBMZWZ0JywgJ19fcGx1Z2luX3R4dGQnKVxuXHR9LFxuXHRjZW50ZXI6IHtcblx0XHRpY29uOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2ljb25zX19bXCJiXCIgLyogYWxpZ25DZW50ZXIgKi9dLFxuXHRcdHRpdGxlOiBfXygnQWxpZ24gTWlkZGxlJywgJ19fcGx1Z2luX3R4dGQnKVxuXHR9LFxuXHRyaWdodDoge1xuXHRcdGljb246IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faWNvbnNfX1tcImFcIiAvKiBhbGlnbkJvdHRvbSAqL10sXG5cdFx0dGl0bGU6IF9fKCdBbGlnbiBSaWdodCcsICdfX3BsdWdpbl90eHRkJylcblx0fVxufTtcblxudmFyIERFRkFVTFRfQ09OVFJPTFMgPSBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J107XG52YXIgREVGQVVMVF9DT05UUk9MID0gJ2NlbnRlcic7XG5cbmZ1bmN0aW9uIEJsb2NrSG9yaXpvbnRhbEFsaWdubWVudFRvb2xiYXIoX3JlZikge1xuXHR2YXIgaXNDb2xsYXBzZWQgPSBfcmVmLmlzQ29sbGFwc2VkLFxuXHQgICAgdmFsdWUgPSBfcmVmLnZhbHVlLFxuXHQgICAgb25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxuXHQgICAgX3JlZiRjb250cm9scyA9IF9yZWYuY29udHJvbHMsXG5cdCAgICBjb250cm9scyA9IF9yZWYkY29udHJvbHMgPT09IHVuZGVmaW5lZCA/IERFRkFVTFRfQ09OVFJPTFMgOiBfcmVmJGNvbnRyb2xzO1xuXG5cdGZ1bmN0aW9uIGFwcGx5T3JVbnNldChhbGlnbikge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gb25DaGFuZ2UodmFsdWUgPT09IGFsaWduID8gdW5kZWZpbmVkIDogYWxpZ24pO1xuXHRcdH07XG5cdH1cblxuXHR2YXIgYWN0aXZlQWxpZ25tZW50ID0gQkxPQ0tfQUxJR05NRU5UU19DT05UUk9MU1t2YWx1ZV07XG5cdHZhciBkZWZhdWx0QWxpZ25tZW50Q29udHJvbCA9IEJMT0NLX0FMSUdOTUVOVFNfQ09OVFJPTFNbREVGQVVMVF9DT05UUk9MXTtcblxuXHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvb2xiYXIsIHtcblx0XHRpc0NvbGxhcHNlZDogaXNDb2xsYXBzZWQsXG5cdFx0aWNvbjogYWN0aXZlQWxpZ25tZW50ID8gYWN0aXZlQWxpZ25tZW50Lmljb24gOiBkZWZhdWx0QWxpZ25tZW50Q29udHJvbC5pY29uLFxuXHRcdGNvbnRyb2xzOiBjb250cm9scy5tYXAoZnVuY3Rpb24gKGNvbnRyb2wpIHtcblx0XHRcdHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfX19kZWZhdWx0KCkoe30sIEJMT0NLX0FMSUdOTUVOVFNfQ09OVFJPTFNbY29udHJvbF0sIHtcblx0XHRcdFx0aXNBY3RpdmU6IHZhbHVlID09PSBjb250cm9sLFxuXHRcdFx0XHRvbkNsaWNrOiBhcHBseU9yVW5zZXQoY29udHJvbCksXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJwaXhlbGdyYWRlLWhlcm8taG9yaXpvbnRhbC1hbGlnbm1lbnQtYnV0dG9uXCJcblx0XHRcdH0pO1xuXHRcdH0pXG5cdH0pO1xufVxuXG4vLyBAdG9kbyByZW1vdmUgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIHVzZSBjb3JlIG1ldGhvZCB3aGVuIGV4cG9zZWQgdGhyb3VnaCB0aGUgYXBpXG52YXIgd2l0aEJsb2NrRWRpdENvbnRleHQgPSBmdW5jdGlvbiB3aXRoQmxvY2tFZGl0Q29udGV4dChtYXBDb250ZXh0VG9Qcm9wcykge1xuXHRyZXR1cm4gY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQoZnVuY3Rpb24gKE9yaWdpbmFsQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uIChwcm9wcykge1xuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0Q29uc3VtZXIsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChPcmlnaW5hbENvbXBvbmVudCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX19fZGVmYXVsdCgpKHt9LCBwcm9wcywgbWFwQ29udGV4dFRvUHJvcHMoY29udGV4dCwgcHJvcHMpKSk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fTtcblx0fSwgJ3dpdGhCbG9ja0VkaXRDb250ZXh0Jyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKGNvbXBvc2Uod2l0aEJsb2NrRWRpdENvbnRleHQoZnVuY3Rpb24gKF9yZWYyKSB7XG5cdHZhciBjbGllbnRJZCA9IF9yZWYyLmNsaWVudElkO1xuXG5cdHJldHVybiB7XG5cdFx0Y2xpZW50SWQ6IGNsaWVudElkXG5cdH07XG59KSwgd2l0aFZpZXdwb3J0TWF0Y2goeyBpc0xhcmdlVmlld3BvcnQ6ICdtZWRpdW0nIH0pLCB3aXRoU2VsZWN0KGZ1bmN0aW9uIChzZWxlY3QsIF9yZWYzKSB7XG5cdHZhciBjbGllbnRJZCA9IF9yZWYzLmNsaWVudElkLFxuXHQgICAgaXNMYXJnZVZpZXdwb3J0ID0gX3JlZjMuaXNMYXJnZVZpZXdwb3J0LFxuXHQgICAgaXNDb2xsYXBzZWQgPSBfcmVmMy5pc0NvbGxhcHNlZDtcblxuXHR2YXIgX3NlbGVjdCA9IHNlbGVjdCgnY29yZS9ibG9jay1lZGl0b3InKSxcblx0ICAgIGdldEJsb2NrUm9vdENsaWVudElkID0gX3NlbGVjdC5nZXRCbG9ja1Jvb3RDbGllbnRJZCxcblx0ICAgIGdldFNldHRpbmdzID0gX3NlbGVjdC5nZXRTZXR0aW5ncztcblxuXHRyZXR1cm4ge1xuXHRcdGlzQ29sbGFwc2VkOiBpc0NvbGxhcHNlZCB8fCAhaXNMYXJnZVZpZXdwb3J0IHx8ICFnZXRTZXR0aW5ncygpLmhhc0ZpeGVkVG9vbGJhciAmJiBnZXRCbG9ja1Jvb3RDbGllbnRJZChjbGllbnRJZClcblx0fTtcbn0pKShCbG9ja0hvcml6b250YWxBbGlnbm1lbnRUb29sYmFyKSk7XG5cbi8qKiovIH0pLFxuLyogMTMyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IEJsb2NrVmVydGljYWxBbGlnbm1lbnRUb29sYmFyICovXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2ljb25zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuXG4vKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xudmFyIF94ID0gd3AuaTE4bi5feDtcbnZhciBUb29sYmFyID0gd3AuY29tcG9uZW50cy5Ub29sYmFyO1xudmFyIHdpdGhWaWV3cG9ydE1hdGNoID0gd3Audmlld3BvcnQud2l0aFZpZXdwb3J0TWF0Y2g7XG52YXIgd2l0aFNlbGVjdCA9IHdwLmRhdGEud2l0aFNlbGVjdDtcbnZhciBfd3AkY29tcG9zZSA9IHdwLmNvbXBvc2UsXG4gICAgY29tcG9zZSA9IF93cCRjb21wb3NlLmNvbXBvc2UsXG4gICAgY3JlYXRlSGlnaGVyT3JkZXJDb21wb25lbnQgPSBfd3AkY29tcG9zZS5jcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudDtcbnZhciBjcmVhdGVDb250ZXh0ID0gd3AuZWxlbWVudC5jcmVhdGVDb250ZXh0O1xuXG52YXIgX2NyZWF0ZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcblx0bmFtZTogJycsXG5cdGlzU2VsZWN0ZWQ6IGZhbHNlLFxuXHRmb2N1c2VkRWxlbWVudDogbnVsbCxcblx0c2V0Rm9jdXNlZEVsZW1lbnQ6IGZ1bmN0aW9uIHNldEZvY3VzZWRFbGVtZW50KCkge30sXG5cdGNsaWVudElkOiBudWxsXG59KSxcbiAgICBDb25zdW1lciA9IF9jcmVhdGVDb250ZXh0LkNvbnN1bWVyLFxuICAgIFByb3ZpZGVyID0gX2NyZWF0ZUNvbnRleHQuUHJvdmlkZXI7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cblxuXG5cblxudmFyIEJMT0NLX0FMSUdOTUVOVFNfQ09OVFJPTFMgPSB7XG5cdHRvcDoge1xuXHRcdGljb246IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faWNvbnNfX1tcImNcIiAvKiBhbGlnblRvcCAqL10sXG5cdFx0dGl0bGU6IF94KCdWZXJ0aWNhbGx5IEFsaWduIFRvcCcsICdCbG9jayB2ZXJ0aWNhbCBhbGlnbm1lbnQgc2V0dGluZycpXG5cdH0sXG5cdGNlbnRlcjoge1xuXHRcdGljb246IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faWNvbnNfX1tcImJcIiAvKiBhbGlnbkNlbnRlciAqL10sXG5cdFx0dGl0bGU6IF94KCdWZXJ0aWNhbGx5IEFsaWduIE1pZGRsZScsICdCbG9jayB2ZXJ0aWNhbCBhbGlnbm1lbnQgc2V0dGluZycpXG5cdH0sXG5cdGJvdHRvbToge1xuXHRcdGljb246IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faWNvbnNfX1tcImFcIiAvKiBhbGlnbkJvdHRvbSAqL10sXG5cdFx0dGl0bGU6IF94KCdWZXJ0aWNhbGx5IEFsaWduIEJvdHRvbScsICdCbG9jayB2ZXJ0aWNhbCBhbGlnbm1lbnQgc2V0dGluZycpXG5cdH1cbn07XG5cbnZhciBERUZBVUxUX0NPTlRST0xTID0gWyd0b3AnLCAnY2VudGVyJywgJ2JvdHRvbSddO1xudmFyIERFRkFVTFRfQ09OVFJPTCA9ICd0b3AnO1xuXG5mdW5jdGlvbiBCbG9ja1ZlcnRpY2FsQWxpZ25tZW50VG9vbGJhcihfcmVmKSB7XG5cdHZhciBpc0NvbGxhcHNlZCA9IF9yZWYuaXNDb2xsYXBzZWQsXG5cdCAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXG5cdCAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXG5cdCAgICBfcmVmJGNvbnRyb2xzID0gX3JlZi5jb250cm9scyxcblx0ICAgIGNvbnRyb2xzID0gX3JlZiRjb250cm9scyA9PT0gdW5kZWZpbmVkID8gREVGQVVMVF9DT05UUk9MUyA6IF9yZWYkY29udHJvbHM7XG5cblx0ZnVuY3Rpb24gYXBwbHlPclVuc2V0KGFsaWduKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBvbkNoYW5nZSh2YWx1ZSA9PT0gYWxpZ24gPyB1bmRlZmluZWQgOiBhbGlnbik7XG5cdFx0fTtcblx0fVxuXG5cdHZhciBhY3RpdmVBbGlnbm1lbnQgPSBCTE9DS19BTElHTk1FTlRTX0NPTlRST0xTW3ZhbHVlXTtcblx0dmFyIGRlZmF1bHRBbGlnbm1lbnRDb250cm9sID0gQkxPQ0tfQUxJR05NRU5UU19DT05UUk9MU1tERUZBVUxUX0NPTlRST0xdO1xuXG5cdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9vbGJhciwge1xuXHRcdGlzQ29sbGFwc2VkOiBpc0NvbGxhcHNlZCxcblx0XHRpY29uOiBhY3RpdmVBbGlnbm1lbnQgPyBhY3RpdmVBbGlnbm1lbnQuaWNvbiA6IGRlZmF1bHRBbGlnbm1lbnRDb250cm9sLmljb24sXG5cdFx0bGFiZWw6IF94KCdDaGFuZ2UgQWxpZ25tZW50JywgJ0Jsb2NrIHZlcnRpY2FsIGFsaWdubWVudCBzZXR0aW5nIGxhYmVsJyksXG5cdFx0Y29udHJvbHM6IGNvbnRyb2xzLm1hcChmdW5jdGlvbiAoY29udHJvbCkge1xuXHRcdFx0cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fX2RlZmF1bHQoKSh7fSwgQkxPQ0tfQUxJR05NRU5UU19DT05UUk9MU1tjb250cm9sXSwge1xuXHRcdFx0XHRpc0FjdGl2ZTogdmFsdWUgPT09IGNvbnRyb2wsXG5cdFx0XHRcdG9uQ2xpY2s6IGFwcGx5T3JVbnNldChjb250cm9sKVxuXHRcdFx0fSk7XG5cdFx0fSlcblx0fSk7XG59XG5cbi8vIEB0b2RvIHJlbW92ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhbmQgdXNlIGNvcmUgbWV0aG9kIHdoZW4gZXhwb3NlZCB0aHJvdWdoIHRoZSBhcGlcbnZhciB3aXRoQmxvY2tFZGl0Q29udGV4dCA9IGZ1bmN0aW9uIHdpdGhCbG9ja0VkaXRDb250ZXh0KG1hcENvbnRleHRUb1Byb3BzKSB7XG5cdHJldHVybiBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudChmdW5jdGlvbiAoT3JpZ2luYWxDb21wb25lbnQpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG5cdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRDb25zdW1lcixcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0ZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KE9yaWdpbmFsQ29tcG9uZW50LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfX19kZWZhdWx0KCkoe30sIHByb3BzLCBtYXBDb250ZXh0VG9Qcm9wcyhjb250ZXh0LCBwcm9wcykpKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9O1xuXHR9LCAnd2l0aEJsb2NrRWRpdENvbnRleHQnKTtcbn07XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vV29yZFByZXNzL2d1dGVuYmVyZy9ibG9iL21hc3Rlci9wYWNrYWdlcy9ibG9jay1lZGl0b3Ivc3JjL2NvbXBvbmVudHMvYmxvY2stdmVydGljYWwtYWxpZ25tZW50LXRvb2xiYXIvUkVBRE1FLm1kXG4gKi9cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoY29tcG9zZSh3aXRoQmxvY2tFZGl0Q29udGV4dChmdW5jdGlvbiAoX3JlZjIpIHtcblx0dmFyIGNsaWVudElkID0gX3JlZjIuY2xpZW50SWQ7XG5cblx0cmV0dXJuIHtcblx0XHRjbGllbnRJZDogY2xpZW50SWRcblx0fTtcbn0pLCB3aXRoVmlld3BvcnRNYXRjaCh7IGlzTGFyZ2VWaWV3cG9ydDogJ21lZGl1bScgfSksIHdpdGhTZWxlY3QoZnVuY3Rpb24gKHNlbGVjdCwgX3JlZjMpIHtcblx0dmFyIGNsaWVudElkID0gX3JlZjMuY2xpZW50SWQsXG5cdCAgICBpc0xhcmdlVmlld3BvcnQgPSBfcmVmMy5pc0xhcmdlVmlld3BvcnQsXG5cdCAgICBpc0NvbGxhcHNlZCA9IF9yZWYzLmlzQ29sbGFwc2VkO1xuXG5cdHZhciBfc2VsZWN0ID0gc2VsZWN0KCdjb3JlL2Jsb2NrLWVkaXRvcicpLFxuXHQgICAgZ2V0QmxvY2tSb290Q2xpZW50SWQgPSBfc2VsZWN0LmdldEJsb2NrUm9vdENsaWVudElkLFxuXHQgICAgZ2V0U2V0dGluZ3MgPSBfc2VsZWN0LmdldFNldHRpbmdzO1xuXG5cdHJldHVybiB7XG5cdFx0aXNDb2xsYXBzZWQ6IGlzQ29sbGFwc2VkIHx8ICFpc0xhcmdlVmlld3BvcnQgfHwgIWdldFNldHRpbmdzKCkuaGFzRml4ZWRUb29sYmFyICYmIGdldEJsb2NrUm9vdENsaWVudElkKGNsaWVudElkKVxuXHR9O1xufSkpKEJsb2NrVmVydGljYWxBbGlnbm1lbnRUb29sYmFyKSk7XG5cbi8qKiovIH0pLFxuLyogMTMzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBIZWlnaHRQYW5lbDsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYlwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNjcm9sbEluZGljYXRvclBhbmVsOyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X191dGlsc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG5cblxuXG5cblxuXG5cblxudmFyIF9fID0gd3AuaTE4bi5fXztcbnZhciBDb21wb25lbnQgPSB3cC5lbGVtZW50LkNvbXBvbmVudDtcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFJhZGlvQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlJhZGlvQ29udHJvbCxcbiAgICBUb2dnbGVDb250cm9sID0gX3dwJGNvbXBvbmVudHMuVG9nZ2xlQ29udHJvbDtcbnZhciBfd3AkZGF0YSA9IHdwLmRhdGEsXG4gICAgZGlzcGF0Y2ggPSBfd3AkZGF0YS5kaXNwYXRjaCxcbiAgICBzZWxlY3QgPSBfd3AkZGF0YS5zZWxlY3QsXG4gICAgc3Vic2NyaWJlID0gX3dwJGRhdGEuc3Vic2NyaWJlO1xuXG5cbnZhciBibG9ja0xpc3QgPSBzZWxlY3QoJ2NvcmUvYmxvY2stZWRpdG9yJykuZ2V0QmxvY2tzKCk7XG5cbnZhciBkZWJvdW5jZWRPblN1YnNjcmliZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3V0aWxzX19bXCJhXCIgLyogZGVib3VuY2UgKi9dKShmdW5jdGlvbiAoKSB7XG5cdHZhciBuZXdCbG9ja0xpc3QgPSBzZWxlY3QoJ2NvcmUvYmxvY2stZWRpdG9yJykuZ2V0QmxvY2tzKCk7XG5cdHZhciBibG9ja0xpc3RDaGFuZ2VkID0gYmxvY2tMaXN0Lmxlbmd0aCAhPT0gbmV3QmxvY2tMaXN0Lmxlbmd0aDtcblxuXHRpZiAoIWJsb2NrTGlzdENoYW5nZWQpIHtcblx0XHRibG9ja0xpc3RDaGFuZ2VkID0gYmxvY2tMaXN0LnNvbWUoZnVuY3Rpb24gKGJsb2NrLCBpbmRleCkge1xuXHRcdFx0cmV0dXJuIGJsb2NrTGlzdFtpbmRleF0uY2xpZW50SWQgIT09IG5ld0Jsb2NrTGlzdFtpbmRleF0uY2xpZW50SWQ7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoYmxvY2tMaXN0Q2hhbmdlZCkge1xuXHRcdGJsb2NrTGlzdCA9IG5ld0Jsb2NrTGlzdDtcblx0XHR1cGRhdGVCbG9ja3MoKTtcblx0fVxufSwgMzApO1xuXG5zdWJzY3JpYmUoZGVib3VuY2VkT25TdWJzY3JpYmUpO1xuXG52YXIgdXBkYXRlQmxvY2tzID0gZnVuY3Rpb24gdXBkYXRlQmxvY2tzKGF0dHJpYnV0ZXMpIHtcblxuXHRzZWxlY3QoJ2NvcmUvYmxvY2stZWRpdG9yJykuZ2V0QmxvY2tzKCkuZmlsdGVyKGZ1bmN0aW9uIChibG9jaykge1xuXHRcdHJldHVybiBibG9jay5uYW1lID09PSAnbm92YWJsb2Nrcy9oZXJvJztcblx0fSkuZmlsdGVyKGZ1bmN0aW9uIChibG9jaywgaW5kZXgpIHtcblx0XHR2YXIgX2Jsb2NrJGF0dHJpYnV0ZXMkYXR0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX19fZGVmYXVsdCgpKHt9LCBibG9jay5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzKSxcblx0XHQgICAgYXBwbHlNaW5pbXVtSGVpZ2h0ID0gX2Jsb2NrJGF0dHJpYnV0ZXMkYXR0LmFwcGx5TWluaW11bUhlaWdodCxcblx0XHQgICAgc2Nyb2xsSW5kaWNhdG9yID0gX2Jsb2NrJGF0dHJpYnV0ZXMkYXR0LnNjcm9sbEluZGljYXRvcjtcblxuXHRcdHZhciBhcHBseU1pbmltdW1IZWlnaHRCbG9jayA9IGFwcGx5TWluaW11bUhlaWdodCA9PT0gJ2ZpcnN0JyAmJiBpbmRleCA9PT0gMCB8fCBhcHBseU1pbmltdW1IZWlnaHQgPT09ICdhbGwnO1xuXHRcdHZhciBzY3JvbGxJbmRpY2F0b3JCbG9jayA9IHNjcm9sbEluZGljYXRvciA9PT0gdHJ1ZSAmJiBpbmRleCA9PT0gMDtcblxuXHRcdGRpc3BhdGNoKCdjb3JlL2Jsb2NrLWVkaXRvcicpLnVwZGF0ZUJsb2NrQXR0cmlidXRlcyhibG9jay5jbGllbnRJZCwge1xuXHRcdFx0YXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2s6IGFwcGx5TWluaW11bUhlaWdodEJsb2NrLFxuXHRcdFx0c2Nyb2xsSW5kaWNhdG9yQmxvY2s6IHNjcm9sbEluZGljYXRvckJsb2NrXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG59O1xuXG52YXIgSGVpZ2h0UGFuZWwgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCgpKEhlaWdodFBhbmVsLCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBIZWlnaHRQYW5lbCgpIHtcblx0XHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCgpKHRoaXMsIEhlaWdodFBhbmVsKTtcblxuXHRcdHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0KCkodGhpcywgKEhlaWdodFBhbmVsLl9fcHJvdG9fXyB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCgpKEhlaWdodFBhbmVsKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG5cdH1cblxuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCgpKEhlaWdodFBhbmVsLCBbe1xuXHRcdGtleTogJ3JlbmRlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuXHRcdFx0ICAgIGF0dHJpYnV0ZXMgPSBfcHJvcHMuYXR0cmlidXRlcyxcblx0XHRcdCAgICBzZXRBdHRyaWJ1dGVzID0gX3Byb3BzLnNldEF0dHJpYnV0ZXM7XG5cblxuXHRcdFx0dmFyIGFwcGx5TWluaW11bUhlaWdodCA9ICEhYXR0cmlidXRlcy5hcHBseU1pbmltdW1IZWlnaHQgPyBhdHRyaWJ1dGVzLmFwcGx5TWluaW11bUhlaWdodCA6ICdmaXJzdCc7XG5cdFx0XHR2YXIgbWluSGVpZ2h0ID0gISFhdHRyaWJ1dGVzLm1pbkhlaWdodCA/IGF0dHJpYnV0ZXMubWluSGVpZ2h0IDogNzU7XG5cblx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0eyB0aXRsZTogX18oJ0hlaWdodCcsICdfX3BsdWdpbl90eHRkJyksIGluaXRpYWxPcGVuOiBmYWxzZSB9LFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoUmFkaW9Db250cm9sLCB7XG5cdFx0XHRcdFx0bGFiZWw6IF9fKCdBcHBseSBNaW5pbXVtIEhlaWdodCcsICdfX3BsdWdpbl90eHRkJyksXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGFwcGx5TWluaW11bUhlaWdodCxcblx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoYXBwbHlNaW5pbXVtSGVpZ2h0KSB7XG5cdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKHsgYXBwbHlNaW5pbXVtSGVpZ2h0OiBhcHBseU1pbmltdW1IZWlnaHQgfSk7XG5cdFx0XHRcdFx0XHR1cGRhdGVCbG9ja3MoeyBhcHBseU1pbmltdW1IZWlnaHQ6IGFwcGx5TWluaW11bUhlaWdodCB9KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG9wdGlvbnM6IFt7IGxhYmVsOiBfXygnTm9uZScsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnbm9uZScgfSwgeyBsYWJlbDogX18oJ0ZpcnN0IEhlcm8gQmxvY2sgT25seScsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnZmlyc3QnIH0sIHsgbGFiZWw6IF9fKCdBbGwgSGVybyBCbG9ja3MnLCAnX19wbHVnaW5fdHh0ZCcpLCB2YWx1ZTogJ2FsbCcgfV1cblx0XHRcdFx0fSksXG5cdFx0XHRcdCdub25lJyAhPT0gYXBwbHlNaW5pbXVtSGVpZ2h0ICYmIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChSYWRpb0NvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ01pbmltdW0gSGVpZ2h0JywgJ19fcGx1Z2luX3R4dGQnKSxcblx0XHRcdFx0XHRzZWxlY3RlZDogbWluSGVpZ2h0LFxuXHRcdFx0XHRcdG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShtaW5IZWlnaHQpIHtcblx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoeyBtaW5IZWlnaHQ6IHBhcnNlSW50KG1pbkhlaWdodCwgMTApIH0pO1xuXHRcdFx0XHRcdFx0Ly9cdFx0XHRcdFx0XHRcdHVwZGF0ZUJsb2NrcyggeyBtaW5IZWlnaHQgfSApO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3B0aW9uczogW3sgbGFiZWw6IF9fKCdIYWxmJywgJ19fcGx1Z2luX3R4dGQnKSwgdmFsdWU6IDUwIH0sIHsgbGFiZWw6IF9fKCdUd28gVGhpcmRzJywgJ19fcGx1Z2luX3R4dGQnKSwgdmFsdWU6IDY2IH0sIHsgbGFiZWw6IF9fKCdUaHJlZSBRdWFydGVycycsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiA3NSB9LCB7IGxhYmVsOiBfXygnRnVsbCcsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAxMDAgfV1cblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIEhlaWdodFBhbmVsO1xufShDb21wb25lbnQpO1xuXG52YXIgU2Nyb2xsSW5kaWNhdG9yUGFuZWwgPSBmdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQoKShTY3JvbGxJbmRpY2F0b3JQYW5lbCwgX0NvbXBvbmVudDIpO1xuXG5cdGZ1bmN0aW9uIFNjcm9sbEluZGljYXRvclBhbmVsKCkge1xuXHRcdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0KCkodGhpcywgU2Nyb2xsSW5kaWNhdG9yUGFuZWwpO1xuXG5cdFx0cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQoKSh0aGlzLCAoU2Nyb2xsSW5kaWNhdG9yUGFuZWwuX19wcm90b19fIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0KCkoU2Nyb2xsSW5kaWNhdG9yUGFuZWwpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcblx0fVxuXG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0KCkoU2Nyb2xsSW5kaWNhdG9yUGFuZWwsIFt7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxuXHRcdFx0ICAgIHNjcm9sbEluZGljYXRvciA9IF9wcm9wczIuYXR0cmlidXRlcy5zY3JvbGxJbmRpY2F0b3IsXG5cdFx0XHQgICAgc2V0QXR0cmlidXRlcyA9IF9wcm9wczIuc2V0QXR0cmlidXRlcztcblxuXG5cdFx0XHR2YXIgaGVyb0Jsb2NrcyA9IHNlbGVjdCgnY29yZS9ibG9jay1lZGl0b3InKS5nZXRCbG9ja3MoKS5maWx0ZXIoZnVuY3Rpb24gKGJsb2NrKSB7XG5cdFx0XHRcdHJldHVybiBibG9jay5uYW1lID09PSAnbm92YWJsb2Nrcy9oZXJvJztcblx0XHRcdH0pO1xuXG5cdFx0XHR2YXIgaW5kZXggPSBoZXJvQmxvY2tzLmZpbmRJbmRleChmdW5jdGlvbiAoYmxvY2spIHtcblx0XHRcdFx0cmV0dXJuIGJsb2NrLmNsaWVudElkID09PSBzZWxlY3QoJ2NvcmUvYmxvY2stZWRpdG9yJykuZ2V0U2VsZWN0ZWRCbG9ja0NsaWVudElkKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHR7IHRpdGxlOiBfXygnU2Nyb2xsIEluZGljYXRvcicsICdfX3BsdWdpbl90eHRkJyksIHN0eWxlOiB7IGRpc3BsYXk6IGluZGV4ID09PSAwID8gJ2Jsb2NrJyA6ICdub25lJyB9LCBpbml0aWFsT3BlbjogZmFsc2UgfSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFRvZ2dsZUNvbnRyb2wsIHtcblx0XHRcdFx0XHRsYWJlbDogX18oJ0VuYWJsZSBTY3JvbGwgSW5kaWNhdG9yJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0XHRcdFx0XHRjaGVja2VkOiBzY3JvbGxJbmRpY2F0b3IsXG5cdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKHNjcm9sbEluZGljYXRvcikge1xuXHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcyh7IHNjcm9sbEluZGljYXRvcjogc2Nyb2xsSW5kaWNhdG9yIH0pO1xuXHRcdFx0XHRcdFx0dXBkYXRlQmxvY2tzKHsgc2Nyb2xsSW5kaWNhdG9yOiBzY3JvbGxJbmRpY2F0b3IgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gU2Nyb2xsSW5kaWNhdG9yUGFuZWw7XG59KENvbXBvbmVudCk7XG5cblxuXG4vKioqLyB9KSxcbi8qIDEzNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFja2dyb3VuZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzUpO1xuXG5cblxuXG5cbnZhciBDb21wb25lbnQgPSB3cC5lbGVtZW50LkNvbXBvbmVudDtcbnZhciBJbm5lckJsb2NrcyA9IHdwLmJsb2NrRWRpdG9yLklubmVyQmxvY2tzO1xuXG5cblxuXG52YXIgSGVyb1ByZXZpZXcgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCgpKEhlcm9QcmV2aWV3LCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBIZXJvUHJldmlldygpIHtcblx0XHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCgpKHRoaXMsIEhlcm9QcmV2aWV3KTtcblxuXHRcdHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0KCkodGhpcywgKEhlcm9QcmV2aWV3Ll9fcHJvdG9fXyB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCgpKEhlcm9QcmV2aWV3KSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG5cdH1cblxuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCgpKEhlcm9QcmV2aWV3LCBbe1xuXHRcdGtleTogJ3JlbmRlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuXHRcdFx0ICAgIF9wcm9wcyRhdHRyaWJ1dGVzID0gX3Byb3BzLmF0dHJpYnV0ZXMsXG5cdFx0XHQgICAgY29udGVudFBhZGRpbmcgPSBfcHJvcHMkYXR0cmlidXRlcy5jb250ZW50UGFkZGluZyxcblx0XHRcdCAgICBjb250ZW50UGFkZGluZ0N1c3RvbSA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvbnRlbnRQYWRkaW5nQ3VzdG9tLFxuXHRcdFx0ICAgIGNvbnRlbnRXaWR0aCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvbnRlbnRXaWR0aCxcblx0XHRcdCAgICBjb250ZW50V2lkdGhDdXN0b20gPSBfcHJvcHMkYXR0cmlidXRlcy5jb250ZW50V2lkdGhDdXN0b20sXG5cdFx0XHQgICAgdmVydGljYWxBbGlnbm1lbnQgPSBfcHJvcHMkYXR0cmlidXRlcy52ZXJ0aWNhbEFsaWdubWVudCxcblx0XHRcdCAgICBob3Jpem9udGFsQWxpZ25tZW50ID0gX3Byb3BzJGF0dHJpYnV0ZXMuaG9yaXpvbnRhbEFsaWdubWVudCxcblx0XHRcdCAgICBtaW5IZWlnaHQgPSBfcHJvcHMkYXR0cmlidXRlcy5taW5IZWlnaHQsXG5cdFx0XHQgICAgYXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2sgPSBfcHJvcHMkYXR0cmlidXRlcy5hcHBseU1pbmltdW1IZWlnaHRCbG9jayxcblx0XHRcdCAgICBzY3JvbGxJbmRpY2F0b3JCbG9jayA9IF9wcm9wcyRhdHRyaWJ1dGVzLnNjcm9sbEluZGljYXRvckJsb2NrLFxuXHRcdFx0ICAgIGNvbnRlbnRDb2xvciA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvbnRlbnRDb2xvcixcblx0XHRcdCAgICBvdmVybGF5RmlsdGVyU3R5bGUgPSBfcHJvcHMkYXR0cmlidXRlcy5vdmVybGF5RmlsdGVyU3R5bGUsXG5cdFx0XHQgICAgY2xhc3NOYW1lID0gX3Byb3BzLmNsYXNzTmFtZTtcblxuXG5cdFx0XHR2YXIgY2xhc3NlcyA9IFtjbGFzc05hbWUsICdub3ZhLWhlcm8nLCAnbm92YS11LXZhbGlnbi0nICsgdmVydGljYWxBbGlnbm1lbnQsICdub3ZhLXUtaGFsaWduLScgKyBob3Jpem9udGFsQWxpZ25tZW50LCAnbm92YS11LXNwYWNpbmctJyArIGNvbnRlbnRQYWRkaW5nLCAnbm92YS11LWNvbnRlbnQtd2lkdGgtJyArIGNvbnRlbnRXaWR0aCwgJ25vdmEtdS1iYWNrZ3JvdW5kJywgJ25vdmEtdS1iYWNrZ3JvdW5kLScgKyBvdmVybGF5RmlsdGVyU3R5bGVdO1xuXG5cdFx0XHR2YXIgc3R5bGVzID0ge1xuXHRcdFx0XHRoZXJvOiB7XG5cdFx0XHRcdFx0Y29sb3I6IGNvbnRlbnRDb2xvclxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmb3JlZ3JvdW5kOiB7fSxcblx0XHRcdFx0Y29udGVudDoge31cblx0XHRcdH07XG5cblx0XHRcdGlmICghIWFwcGx5TWluaW11bUhlaWdodEJsb2NrKSB7XG5cdFx0XHRcdHN0eWxlcy5oZXJvLm1pbkhlaWdodCA9IG1pbkhlaWdodCArICd2aCc7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb250ZW50UGFkZGluZyA9PT0gJ2N1c3RvbScpIHtcblx0XHRcdFx0c3R5bGVzLmZvcmVncm91bmQucGFkZGluZ1RvcCA9IGNvbnRlbnRQYWRkaW5nQ3VzdG9tICsgJyUnO1xuXHRcdFx0XHRzdHlsZXMuZm9yZWdyb3VuZC5wYWRkaW5nQm90dG9tID0gY29udGVudFBhZGRpbmdDdXN0b20gKyAnJSc7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb250ZW50V2lkdGggPT09ICdjdXN0b20nKSB7XG5cdFx0XHRcdHN0eWxlcy5jb250ZW50Lm1heFdpZHRoID0gY29udGVudFdpZHRoQ3VzdG9tICsgJyUnO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0eyBjbGFzc05hbWU6IGNsYXNzZXMuam9pbignICcpLCBzdHlsZTogc3R5bGVzLmhlcm8gfSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFja2dyb3VuZF9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCB0aGlzLnByb3BzKSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHRcdHsgY2xhc3NOYW1lOiAnbm92YS1oZXJvX19mb3JlZ3JvdW5kIG5vdmEtdS1jb250ZW50LXBhZGRpbmcnLCBzdHlsZTogc3R5bGVzLmZvcmVncm91bmQgfSxcblx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHRcdHsgY2xhc3NOYW1lOiAnbm92YS11LWNvbnRlbnQtYWxpZ24nIH0sXG5cdFx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHRcdFx0XHR7IGNsYXNzTmFtZTogJ25vdmEtaGVyb19faW5uZXItY29udGFpbmVyIG5vdmEtdS1jb250ZW50LXdpZHRoJywgc3R5bGU6IHN0eWxlcy5jb250ZW50IH0sXG5cdFx0XHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChJbm5lckJsb2NrcywgeyB0ZW1wbGF0ZTogW1snY29yZS9oZWFkaW5nJywgeyBjb250ZW50OiAnVGhpcyBpcyBhIGNhdGNoeSB0aXRsZScsIGFsaWduOiAnY2VudGVyJywgbGV2ZWw6IDEgfV0sIFsnY29yZS9wYXJhZ3JhcGgnLCB7IGNvbnRlbnQ6ICdBIGJyaWxsaWFudCBzdWJ0aXRsZSB0byBleHBsYWluIGl0cyBjYXRjaGluZXNzJywgYWxpZ246ICdjZW50ZXInIH1dLCBbJ2NvcmUvYnV0dG9uJywgeyB0ZXh0OiAnRGlzY292ZXIgbW9yZScsIGFsaWduOiAnY2VudGVyJyB9XV0gfSlcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRzY3JvbGxJbmRpY2F0b3JCbG9jayAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicsIHsgY2xhc3NOYW1lOiAnbm92YS1oZXJvX19pbmRpY2F0b3InIH0pXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fV0pO1xuXG5cdHJldHVybiBIZXJvUHJldmlldztcbn0oQ29tcG9uZW50KTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChIZXJvUHJldmlldyk7XG5cbi8qKiovIH0pLFxuLyogMTM1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19jb21wb25lbnRzX3dpdGhfcGFyYWxsYXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjYpO1xuXG5cblxuXG5cblxuXG52YXIgQ29tcG9uZW50ID0gd3AuZWxlbWVudC5Db21wb25lbnQ7XG5cbnZhciBIZXJvQmFja2dyb3VuZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0KCkoSGVyb0JhY2tncm91bmQsIF9Db21wb25lbnQpO1xuXG5cdGZ1bmN0aW9uIEhlcm9CYWNrZ3JvdW5kKCkge1xuXHRcdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0KCkodGhpcywgSGVyb0JhY2tncm91bmQpO1xuXG5cdFx0cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQoKSh0aGlzLCAoSGVyb0JhY2tncm91bmQuX19wcm90b19fIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0KCkoSGVyb0JhY2tncm91bmQpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcblx0fVxuXG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0KCkoSGVyb0JhY2tncm91bmQsIFt7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIF9wcm9wcyRhdHRyaWJ1dGVzID0gdGhpcy5wcm9wcy5hdHRyaWJ1dGVzLFxuXHRcdFx0ICAgIG92ZXJsYXlGaWx0ZXJTdHlsZSA9IF9wcm9wcyRhdHRyaWJ1dGVzLm92ZXJsYXlGaWx0ZXJTdHlsZSxcblx0XHRcdCAgICBvdmVybGF5RmlsdGVyU3RyZW5ndGggPSBfcHJvcHMkYXR0cmlidXRlcy5vdmVybGF5RmlsdGVyU3RyZW5ndGgsXG5cdFx0XHQgICAgbWVkaWEgPSBfcHJvcHMkYXR0cmlidXRlcy5tZWRpYTtcblxuXG5cdFx0XHR2YXIgc3R5bGVzID0ge1xuXHRcdFx0XHRvcGFjaXR5OiAxXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAob3ZlcmxheUZpbHRlclN0eWxlICE9PSAnbm9uZScpIHtcblx0XHRcdFx0c3R5bGVzLm9wYWNpdHkgPSAxIC0gb3ZlcmxheUZpbHRlclN0cmVuZ3RoIC8gMTAwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0eyBjbGFzc05hbWU6ICdub3ZhLWhlcm9fX2JhY2tncm91bmQnLCBzdHlsZTogdGhpcy5wcm9wcy5zdHlsZSB9LFxuXHRcdFx0XHRtZWRpYS50eXBlID09PSAnaW1hZ2UnICYmIHR5cGVvZiBtZWRpYS5zaXplcyAhPT0gJ3VuZGVmaW5lZCcgJiYgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KCdpbWcnLCB7IGNsYXNzTmFtZTogJ25vdmEtaGVyb19fbWVkaWEnLCBzcmM6IG1lZGlhLnNpemVzLmZ1bGwudXJsLCBzdHlsZTogc3R5bGVzIH0pLFxuXHRcdFx0XHRtZWRpYS50eXBlID09PSAndmlkZW8nICYmIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nLCB7IG11dGVkOiB0cnVlLCBhdXRvUGxheTogdHJ1ZSwgbG9vcDogdHJ1ZSwgY2xhc3NOYW1lOiAnbm92YS1oZXJvX19tZWRpYScsIHNyYzogbWVkaWEudXJsLCBzdHlsZTogc3R5bGVzIH0pXG5cdFx0XHQpO1xuXHRcdH1cblx0fV0pO1xuXG5cdHJldHVybiBIZXJvQmFja2dyb3VuZDtcbn0oQ29tcG9uZW50KTtcblxuO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2NvbXBvbmVudHNfd2l0aF9wYXJhbGxheF9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShIZXJvQmFja2dyb3VuZCkpO1xuXG4vKioqLyB9KSxcbi8qIDEzNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faWNvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19jb21wb25lbnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcblxuXG5cblxuXG5cblxudmFyIF9fID0gd3AuaTE4bi5fXztcbnZhciBfd3AkZWxlbWVudCA9IHdwLmVsZW1lbnQsXG4gICAgQ29tcG9uZW50ID0gX3dwJGVsZW1lbnQuQ29tcG9uZW50LFxuICAgIEZyYWdtZW50ID0gX3dwJGVsZW1lbnQuRnJhZ21lbnQ7XG52YXIgX3dwJGJsb2NrRWRpdG9yID0gd3AuYmxvY2tFZGl0b3IsXG4gICAgQmxvY2tDb250cm9scyA9IF93cCRibG9ja0VkaXRvci5CbG9ja0NvbnRyb2xzLFxuICAgIE1lZGlhVXBsb2FkID0gX3dwJGJsb2NrRWRpdG9yLk1lZGlhVXBsb2FkO1xudmFyIF93cCRjb21wb25lbnRzID0gd3AuY29tcG9uZW50cyxcbiAgICBEcm9wZG93biA9IF93cCRjb21wb25lbnRzLkRyb3Bkb3duLFxuICAgIEljb25CdXR0b24gPSBfd3AkY29tcG9uZW50cy5JY29uQnV0dG9uLFxuICAgIFRvb2xiYXIgPSBfd3AkY29tcG9uZW50cy5Ub29sYmFyO1xuXG5cblxuXG52YXIgQUxMT1dFRF9NRURJQV9UWVBFUyA9IFsnaW1hZ2UnLCAndmlkZW8nXTtcblxudmFyIEhlcm9CbG9ja0NvbnRyb2xzID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQoKShIZXJvQmxvY2tDb250cm9scywgX0NvbXBvbmVudCk7XG5cblx0ZnVuY3Rpb24gSGVyb0Jsb2NrQ29udHJvbHMoKSB7XG5cdFx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQoKSh0aGlzLCBIZXJvQmxvY2tDb250cm9scyk7XG5cblx0XHRyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCgpKHRoaXMsIChIZXJvQmxvY2tDb250cm9scy5fX3Byb3RvX18gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQoKShIZXJvQmxvY2tDb250cm9scykpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuXHR9XG5cblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQoKShIZXJvQmxvY2tDb250cm9scywgW3tcblx0XHRrZXk6IFwicmVuZGVyXCIsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcblx0XHRcdHZhciBzZXRBdHRyaWJ1dGVzID0gdGhpcy5wcm9wcy5zZXRBdHRyaWJ1dGVzO1xuXG5cblx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdEJsb2NrQ29udHJvbHMsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2NvbXBvbmVudHNfX1tcImFcIiAvKiBBbGlnbm1lbnRUb29sYmFyICovXSwgdGhpcy5wcm9wcyksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2NvbXBvbmVudHNfX1tcImJcIiAvKiBDb2xvclRvb2xiYXIgKi9dLCB0aGlzLnByb3BzKSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFRvb2xiYXIsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoTWVkaWFVcGxvYWQsIHtcblx0XHRcdFx0XHRcdGFsbG93ZWRUeXBlczogQUxMT1dFRF9NRURJQV9UWVBFUyxcblx0XHRcdFx0XHRcdG9uU2VsZWN0OiBmdW5jdGlvbiBvblNlbGVjdChtZWRpYSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc2V0QXR0cmlidXRlcyh7IG1lZGlhOiBtZWRpYSB9KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihfcmVmKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBvcGVuID0gX3JlZi5vcGVuO1xuXG5cdFx0XHRcdFx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoSWNvbkJ1dHRvbiwge1xuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZTogXCJjb21wb25lbnRzLWljb24tYnV0dG9uIGNvbXBvbmVudHMtdG9vbGJhcl9fY29udHJvbFwiLFxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBfXygnQ2hhbmdlIE1lZGlhJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0XHRcdFx0XHRcdFx0XHRpY29uOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2ljb25zX19bXCJpXCIgLyogc3dhcCAqL10sXG5cdFx0XHRcdFx0XHRcdFx0b25DbGljazogb3BlblxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fV0pO1xuXG5cdHJldHVybiBIZXJvQmxvY2tDb250cm9scztcbn0oQ29tcG9uZW50KTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChIZXJvQmxvY2tDb250cm9scyk7XG5cbi8qKiovIH0pLFxuLyogMTM3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faWNvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19lZGl0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOCk7XG4vKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5cblxuXG4vKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xudmFyIF9fID0gd3AuaTE4bi5fXztcbnZhciByZWdpc3RlckJsb2NrVHlwZSA9IHdwLmJsb2Nrcy5yZWdpc3RlckJsb2NrVHlwZTtcbnZhciBJbm5lckJsb2NrcyA9IHdwLmJsb2NrRWRpdG9yLklubmVyQmxvY2tzO1xuXG5cbi8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfdW51c2VkX3dlYnBhY2tfZGVmYXVsdF9leHBvcnQgPSAocmVnaXN0ZXJCbG9ja1R5cGUoJ25vdmFibG9ja3MvbWVkaWEnLCB7XG5cdHRpdGxlOiBfXygnTWVkaWEgQ2FyZCBDb25zdGVsbGF0aW9uJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0ZGVzY3JpcHRpb246IF9fKCdEaXNwbGF5IG1lZGlhIG9iamVjdHMgYWxvbmdzaWRlIHNob3J0IHBpZWNlcyBvZiBjb250ZW50LicsICdfX3BsdWdpbl90eHRkJyksXG5cdGNhdGVnb3J5OiAnbm92YS1ibG9ja3MnLFxuXHRpY29uOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2ljb25zX19bXCJnXCIgLyogbWVkaWEgKi9dLFxuXHRlZGl0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2VkaXRfX1tcImFcIiAvKiBkZWZhdWx0ICovXSxcblx0c2F2ZTogZnVuY3Rpb24gc2F2ZSgpIHtcblx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KElubmVyQmxvY2tzLkNvbnRlbnQsIG51bGwpO1xuXHR9LFxuXHRnZXRFZGl0V3JhcHBlclByb3BzOiBmdW5jdGlvbiBnZXRFZGl0V3JhcHBlclByb3BzKCkge1xuXHRcdHZhciBzZXR0aW5ncyA9IHdwLmRhdGEuc2VsZWN0KCdjb3JlL2Jsb2NrLWVkaXRvcicpLmdldFNldHRpbmdzKCk7XG5cdFx0cmV0dXJuIHNldHRpbmdzLmFsaWduV2lkZSA/IHtcblx0XHRcdCdkYXRhLWFsaWduJzogJ2Z1bGwnXG5cdFx0fSA6IHt9O1xuXHR9XG59KSk7XG5cbi8qKiovIH0pLFxuLyogMTM4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfY29yZV9qc19qc29uX3N0cmluZ2lmeV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzkpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2NvcmVfanNfanNvbl9zdHJpbmdpZnlfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2NvcmVfanNfanNvbl9zdHJpbmdpZnlfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2NvbnRyb2xzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19pbnNwZWN0b3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ1KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX3ByZXZpZXdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2KTtcblxuXG5cblxuXG5cblxudmFyIF93cCRlbGVtZW50ID0gd3AuZWxlbWVudCxcbiAgICBDb21wb25lbnQgPSBfd3AkZWxlbWVudC5Db21wb25lbnQsXG4gICAgRnJhZ21lbnQgPSBfd3AkZWxlbWVudC5GcmFnbWVudDtcblxuXG5cblxuXG5cbnZhciBFZGl0ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQoKShFZGl0LCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBFZGl0KCkge1xuXHRcdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0KCkodGhpcywgRWRpdCk7XG5cblx0XHRyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCgpKHRoaXMsIChFZGl0Ll9fcHJvdG9fXyB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCgpKEVkaXQpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcblx0fVxuXG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0KCkoRWRpdCwgW3tcblx0XHRrZXk6ICd1cGRhdGVJbWFnZXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVJbWFnZXMobWVkaWEpIHtcblx0XHRcdHRoaXMucHJvcHMuc2V0QXR0cmlidXRlcyh7XG5cdFx0XHRcdGltYWdlczogbWVkaWEubWFwKGZ1bmN0aW9uIChpbWFnZSkge1xuXHRcdFx0XHRcdHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9jb3JlX2pzX2pzb25fc3RyaW5naWZ5X19fZGVmYXVsdCgpKHsgaWQ6IGltYWdlLmlkLCB1cmw6IGltYWdlLnVybCwgYWx0OiBpbWFnZS5hbHQgfSk7XG5cdFx0XHRcdH0pXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cblx0XHRcdHJldHVybiBbd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRGcmFnbWVudCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fcHJldmlld19fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfX19kZWZhdWx0KCkoe30sIHRoaXMucHJvcHMsIHsgdXBkYXRlSW1hZ2VzOiB0aGlzLnVwZGF0ZUltYWdlcy5iaW5kKHRoaXMpIH0pKSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fY29udHJvbHNfX1tcImFcIiAvKiBkZWZhdWx0ICovXSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX19fZGVmYXVsdCgpKHt9LCB0aGlzLnByb3BzLCB7IHVwZGF0ZUltYWdlczogdGhpcy51cGRhdGVJbWFnZXMuYmluZCh0aGlzKSB9KSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2luc3BlY3Rvcl9fW1wiYVwiIC8qIGRlZmF1bHQgKi9dLCB0aGlzLnByb3BzKVxuXHRcdFx0KV07XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIEVkaXQ7XG59KENvbXBvbmVudCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoRWRpdCk7XG5cbi8qKiovIH0pLFxuLyogMTM5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXygxNDApLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0pLFxuLyogMTQwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBjb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciAkSlNPTiA9IGNvcmUuSlNPTiB8fCAoY29yZS5KU09OID0geyBzdHJpbmdpZnk6IEpTT04uc3RyaW5naWZ5IH0pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICByZXR1cm4gJEpTT04uc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmd1bWVudHMpO1xufTtcblxuXG4vKioqLyB9KSxcbi8qIDE0MSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9rZXlzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Mik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3Rfa2V5c19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3Rfa2V5c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9jb3JlX2pzX3Byb21pc2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2NvcmVfanNfcHJvbWlzZV9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfY29yZV9qc19wcm9taXNlX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2ljb25zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fY29tcG9uZW50c19hbGlnbm1lbnRfY29udHJvbHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xuXG5cblxuXG5cblxuXG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cblxuXG5cbi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG52YXIgX18gPSB3cC5pMThuLl9fO1xudmFyIF93cCRlbGVtZW50ID0gd3AuZWxlbWVudCxcbiAgICBDb21wb25lbnQgPSBfd3AkZWxlbWVudC5Db21wb25lbnQsXG4gICAgRnJhZ21lbnQgPSBfd3AkZWxlbWVudC5GcmFnbWVudDtcbnZhciBfd3AkYmxvY2tFZGl0b3IgPSB3cC5ibG9ja0VkaXRvcixcbiAgICBNZWRpYVVwbG9hZCA9IF93cCRibG9ja0VkaXRvci5NZWRpYVVwbG9hZCxcbiAgICBCbG9ja0NvbnRyb2xzID0gX3dwJGJsb2NrRWRpdG9yLkJsb2NrQ29udHJvbHM7XG52YXIgX3dwJGNvbXBvbmVudHMgPSB3cC5jb21wb25lbnRzLFxuICAgIEljb25CdXR0b24gPSBfd3AkY29tcG9uZW50cy5JY29uQnV0dG9uLFxuICAgIFRvb2xiYXIgPSBfd3AkY29tcG9uZW50cy5Ub29sYmFyO1xuXG52YXIgQ29udHJvbHMgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCgpKENvbnRyb2xzLCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBDb250cm9scyhwcm9wcykge1xuXHRcdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0KCkodGhpcywgQ29udHJvbHMpO1xuXG5cdFx0cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQoKSh0aGlzLCAoQ29udHJvbHMuX19wcm90b19fIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0KCkoQ29udHJvbHMpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcblx0fVxuXG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0KCkoQ29udHJvbHMsIFt7XG5cdFx0a2V5OiBcIm9uQ2hhbmdlR2FsbGVyeVwiLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBvbkNoYW5nZUdhbGxlcnkoZ2FsbGVyeUltYWdlcykge1xuXHRcdFx0dmFyIF90aGlzMiA9IHRoaXM7XG5cblx0XHRcdHZhciBwcm9taXNlcyA9IGdhbGxlcnlJbWFnZXMubWFwKGZ1bmN0aW9uIChpbWFnZSwgaW5kZXgpIHtcblx0XHRcdFx0cmV0dXJuIHdwLmFwaVJlcXVlc3QoeyBwYXRoOiAnL3dwL3YyL21lZGlhLycgKyBpbWFnZS5pZCB9KS50aGVuKGZ1bmN0aW9uIChuZXdJbWFnZSkge1xuXHRcdFx0XHRcdGdhbGxlcnlJbWFnZXNbaW5kZXhdID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX19fZGVmYXVsdCgpKHt9LCBuZXdJbWFnZSwgaW1hZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9jb3JlX2pzX3Byb21pc2VfX19kZWZhdWx0LmEuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0X3RoaXMyLnByb3BzLnNldEF0dHJpYnV0ZXMoeyBnYWxsZXJ5SW1hZ2VzOiBnYWxsZXJ5SW1hZ2VzLmZpbHRlcihmdW5jdGlvbiAoaW1hZ2UpIHtcblx0XHRcdFx0XHRcdHJldHVybiAhIWltYWdlLmlkICYmICEhaW1hZ2Uuc2l6ZXMgJiYgISFpbWFnZS5zaXplcy5sYXJnZSAmJiAhIWltYWdlLnNpemVzLmxhcmdlLnVybDtcblx0XHRcdFx0XHR9KSB9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogXCJyZW5kZXJcIixcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG5cdFx0XHQgICAgYXR0cmlidXRlcyA9IF9wcm9wcy5hdHRyaWJ1dGVzLFxuXHRcdFx0ICAgIHNldEF0dHJpYnV0ZXMgPSBfcHJvcHMuc2V0QXR0cmlidXRlcyxcblx0XHRcdCAgICB1cGRhdGVJbWFnZXMgPSBfcHJvcHMudXBkYXRlSW1hZ2VzO1xuXHRcdFx0dmFyIG1lZGlhUG9zaXRpb24gPSBhdHRyaWJ1dGVzLm1lZGlhUG9zaXRpb24sXG5cdFx0XHQgICAgX2F0dHJpYnV0ZXMkaW1hZ2VzID0gYXR0cmlidXRlcy5pbWFnZXMsXG5cdFx0XHQgICAgaW1hZ2VzID0gX2F0dHJpYnV0ZXMkaW1hZ2VzID09PSB1bmRlZmluZWQgPyBbXSA6IF9hdHRyaWJ1dGVzJGltYWdlcztcblxuXG5cdFx0XHR2YXIgZ2FsbGVyeUltYWdlcyA9IGltYWdlcy5tYXAoZnVuY3Rpb24gKGltYWdlKSB7XG5cdFx0XHRcdHJldHVybiBKU09OLnBhcnNlKGltYWdlKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR2YXIgaGFzSW1hZ2VzID0gISFpbWFnZXMubGVuZ3RoO1xuXG5cdFx0XHR2YXIgTUVESUFfQUxJR05NRU5UU19DT05UUk9MUyA9IHtcblx0XHRcdFx0bGVmdDoge1xuXHRcdFx0XHRcdGljb246ICdhbGlnbi1wdWxsLWxlZnQnLFxuXHRcdFx0XHRcdHRpdGxlOiBfXygnU2hvdyBNZWRpYSBvbiBMZWZ0IFNpZGUnLCAnX19wbHVnaW5fdHh0ZCcpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJpZ2h0OiB7XG5cdFx0XHRcdFx0aWNvbjogJ2FsaWduLXB1bGwtcmlnaHQnLFxuXHRcdFx0XHRcdHRpdGxlOiBfXygnU2hvdyBNZWRpYSBvbiBSaWdodCBTaWRlJywgJ19fcGx1Z2luX3R4dGQnKVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRCbG9ja0NvbnRyb2xzLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoVG9vbGJhciwge1xuXHRcdFx0XHRcdGNvbnRyb2xzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9rZXlzX19fZGVmYXVsdCgpKE1FRElBX0FMSUdOTUVOVFNfQ09OVFJPTFMpLm1hcChmdW5jdGlvbiAoY29udHJvbCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fX2RlZmF1bHQoKSh7fSwgTUVESUFfQUxJR05NRU5UU19DT05UUk9MU1tjb250cm9sXSwge1xuXHRcdFx0XHRcdFx0XHRvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuXHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoeyBtZWRpYVBvc2l0aW9uOiBjb250cm9sIH0pO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRpc0FjdGl2ZTogbWVkaWFQb3NpdGlvbiA9PT0gY29udHJvbFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSksXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2NvbXBvbmVudHNfYWxpZ25tZW50X2NvbnRyb2xzX19bXCJhXCIgLyogQWxpZ25tZW50VG9vbGJhciAqL10sIHRoaXMucHJvcHMpLFxuXHRcdFx0XHRoYXNJbWFnZXMgJiYgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFRvb2xiYXIsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoTWVkaWFVcGxvYWQsIHtcblx0XHRcdFx0XHRcdHR5cGU6IFwiaW1hZ2VcIixcblx0XHRcdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0Z2FsbGVyeTogdHJ1ZSxcblx0XHRcdFx0XHRcdHZhbHVlOiBnYWxsZXJ5SW1hZ2VzLm1hcChmdW5jdGlvbiAoaW1hZ2UpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGltYWdlLmlkO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRvblNlbGVjdDogdXBkYXRlSW1hZ2VzLFxuXHRcdFx0XHRcdFx0cmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoX3JlZikge1xuXHRcdFx0XHRcdFx0XHR2YXIgb3BlbiA9IF9yZWYub3Blbjtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChJY29uQnV0dG9uLCB7XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lOiBcImNvbXBvbmVudHMtaWNvbi1idXR0b24gY29tcG9uZW50cy10b29sYmFyX19jb250cm9sXCIsXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdDaGFuZ2UgTWVkaWEnLCAnX19wbHVnaW5fdHh0ZCcpLFxuXHRcdFx0XHRcdFx0XHRcdGljb246IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faWNvbnNfX1tcImlcIiAvKiBzd2FwICovXSxcblx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3BlbigpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gQ29udHJvbHM7XG59KENvbXBvbmVudCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoQ29udHJvbHMpO1xuXG4vKioqLyB9KSxcbi8qIDE0MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oMTQzKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9KSxcbi8qIDE0MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE0NCk7XG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNSkuT2JqZWN0LmtleXM7XG5cblxuLyoqKi8gfSksXG4vKiAxNDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcbnZhciAka2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuXG5cbi8qKiovIH0pLFxuLyogMTQ1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyk7XG5cblxuXG5cblxudmFyIF9fID0gd3AuaTE4bi5fXztcbnZhciBfd3AkZWxlbWVudCA9IHdwLmVsZW1lbnQsXG4gICAgQ29tcG9uZW50ID0gX3dwJGVsZW1lbnQuQ29tcG9uZW50LFxuICAgIEZyYWdtZW50ID0gX3dwJGVsZW1lbnQuRnJhZ21lbnQ7XG52YXIgSW5zcGVjdG9yQ29udHJvbHMgPSB3cC5ibG9ja0VkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFJhZGlvQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlJhZGlvQ29udHJvbDtcblxudmFyIEluc3BlY3RvciA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0KCkoSW5zcGVjdG9yLCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBJbnNwZWN0b3IocHJvcHMpIHtcblx0XHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCgpKHRoaXMsIEluc3BlY3Rvcik7XG5cblx0XHRyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCgpKHRoaXMsIChJbnNwZWN0b3IuX19wcm90b19fIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0KCkoSW5zcGVjdG9yKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG5cdH1cblxuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCgpKEluc3BlY3RvciwgW3tcblx0XHRrZXk6ICdyZW5kZXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdFx0XHR2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcblx0XHRcdCAgICBhdHRyaWJ1dGVzID0gX3Byb3BzLmF0dHJpYnV0ZXMsXG5cdFx0XHQgICAgc2V0QXR0cmlidXRlcyA9IF9wcm9wcy5zZXRBdHRyaWJ1dGVzO1xuXHRcdFx0dmFyIGNvbnRlbnRTdHlsZSA9IGF0dHJpYnV0ZXMuY29udGVudFN0eWxlLFxuXHRcdFx0ICAgIGJsb2NrU3R5bGUgPSBhdHRyaWJ1dGVzLmJsb2NrU3R5bGU7XG5cblxuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0RnJhZ21lbnQsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRJbnNwZWN0b3JDb250cm9scyxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0XHRcdHsgdGl0bGU6IF9fKCdDb250ZW50IEFyZWEnLCAnX19wbHVnaW5fdHh0ZCcpLCBpbml0aWFsT3BlbjogdHJ1ZSB9LFxuXHRcdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFJhZGlvQ29udHJvbCwge1xuXHRcdFx0XHRcdFx0XHRsYWJlbDogX18oJ0VtcGhhc2lzIExldmVsJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IGNvbnRlbnRTdHlsZSxcblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWQ6IGNvbnRlbnRTdHlsZSxcblx0XHRcdFx0XHRcdFx0b3B0aW9uczogW3sgbGFiZWw6IF9fKCdCYXNpYycsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnYmFzaWMnIH0sIHsgbGFiZWw6IF9fKCdNb2RlcmF0ZScsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnbW9kZXJhdGUnIH0sIHsgbGFiZWw6IF9fKCdIaWdobGlnaHRlZCcsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnaGlnaGxpZ2h0ZWQnIH1dLFxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoY29udGVudFN0eWxlKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNldEF0dHJpYnV0ZXMoeyBjb250ZW50U3R5bGU6IGNvbnRlbnRTdHlsZSB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0XHRcdHsgdGl0bGU6IF9fKCdCbG9jayBBcmVhJywgJ19fcGx1Z2luX3R4dGQnKSwgaW5pdGlhbE9wZW46IHRydWUgfSxcblx0XHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChSYWRpb0NvbnRyb2wsIHtcblx0XHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdFbXBoYXNpcyBMZXZlbCcsICdfX3BsdWdpbl90eHRkJyksXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBibG9ja1N0eWxlLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZDogYmxvY2tTdHlsZSxcblx0XHRcdFx0XHRcdFx0b3B0aW9uczogW3sgbGFiZWw6IF9fKCdCYXNpYycsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnYmFzaWMnIH0sIHsgbGFiZWw6IF9fKCdNb2RlcmF0ZScsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnbW9kZXJhdGUnIH0sIHsgbGFiZWw6IF9fKCdIaWdobGlnaHRlZCcsICdfX3BsdWdpbl90eHRkJyksIHZhbHVlOiAnaGlnaGxpZ2h0ZWQnIH1dLFxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZTogZnVuY3Rpb24gb25DaGFuZ2UoYmxvY2tTdHlsZSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXRBdHRyaWJ1dGVzKHsgYmxvY2tTdHlsZTogYmxvY2tTdHlsZSB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIEluc3BlY3Rvcjtcbn0oQ29tcG9uZW50KTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChJbnNwZWN0b3IpO1xuXG4vKioqLyB9KSxcbi8qIDE0NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9jbGFzc25hbWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2NsYXNzbmFtZXNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9jbGFzc25hbWVzX18pO1xuXG5cblxuXG5cblxuXG52YXIgQ29tcG9uZW50ID0gd3AuZWxlbWVudC5Db21wb25lbnQ7XG52YXIgX3dwJGJsb2NrRWRpdG9yID0gd3AuYmxvY2tFZGl0b3IsXG4gICAgSW5uZXJCbG9ja3MgPSBfd3AkYmxvY2tFZGl0b3IuSW5uZXJCbG9ja3MsXG4gICAgTWVkaWFQbGFjZWhvbGRlciA9IF93cCRibG9ja0VkaXRvci5NZWRpYVBsYWNlaG9sZGVyO1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbnZhciBBTExPV0VEX0JMT0NLUyA9IFsnY29yZS9idXR0b24nLCAnY29yZS9wYXJhZ3JhcGgnLCAnY29yZS9oZWFkaW5nJ107XG52YXIgVEVNUExBVEUgPSBbWydjb3JlL2hlYWRpbmcnLCB7IGNvbnRlbnQ6ICdTaG9vdCBmb3IgdGhlIG1vb24sIEV2ZW4gaWYgWW91IE1pc3MgaXQnLCBsZXZlbDogNCB9XSwgWydjb3JlL2hlYWRpbmcnLCB7IGNvbnRlbnQ6ICdXZWxjb21lIHRvIG91ciBwbGFuZXQsIGxvb2sgYW5kIGZlZWwgbWF0dGVycyEnLCBsZXZlbDogMiB9XSwgWydjb3JlL3BhcmFncmFwaCcsIHsgY29udGVudDogJ1dlXFwndmUgYWx3YXlzIGRlZmluZWQgb3Vyc2VsdmVzIGJ5IHRoZSBhYmlsaXR5IHRvIG92ZXJjb21lIHRoZSBpbXBvc3NpYmxlLiBBbmQgd2UgY291bnQgdGhlc2UgbW9tZW50cy4gVGhlc2UgbW9tZW50cyB3aGVuIHdlIGRhcmUgdG8gYWltIGhpZ2hlciwgdG8gYnJlYWsgYmFycmllcnMsIHRvIHJlYWNoIGZvciB0aGUgc3RhcnMsIHRvIG1ha2UgdGhlIHVua25vd24ga25vd24uJyB9XSwgWydjb3JlL2J1dHRvbicsIHsgdGV4dDogJ0Rpc2NvdmVyIE1vcmUnIH1dXTtcblxudmFyIE1lZGlhUHJldmlldyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0KCkoTWVkaWFQcmV2aWV3LCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBNZWRpYVByZXZpZXcoKSB7XG5cdFx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQoKSh0aGlzLCBNZWRpYVByZXZpZXcpO1xuXG5cdFx0cmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQoKSh0aGlzLCAoTWVkaWFQcmV2aWV3Ll9fcHJvdG9fXyB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCgpKE1lZGlhUHJldmlldykpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuXHR9XG5cblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQoKShNZWRpYVByZXZpZXcsIFt7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG5cdFx0XHQgICAgYXR0cmlidXRlcyA9IF9wcm9wcy5hdHRyaWJ1dGVzLFxuXHRcdFx0ICAgIGNsYXNzTmFtZSA9IF9wcm9wcy5jbGFzc05hbWUsXG5cdFx0XHQgICAgdXBkYXRlSW1hZ2VzID0gX3Byb3BzLnVwZGF0ZUltYWdlcztcblx0XHRcdHZhciBjb250ZW50U3R5bGUgPSBhdHRyaWJ1dGVzLmNvbnRlbnRTdHlsZSxcblx0XHRcdCAgICBibG9ja1N0eWxlID0gYXR0cmlidXRlcy5ibG9ja1N0eWxlLFxuXHRcdFx0ICAgIG1lZGlhUG9zaXRpb24gPSBhdHRyaWJ1dGVzLm1lZGlhUG9zaXRpb24sXG5cdFx0XHQgICAgaW1hZ2VzID0gYXR0cmlidXRlcy5pbWFnZXM7XG5cblxuXHRcdFx0dmFyIGNsYXNzTmFtZXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfY2xhc3NuYW1lc19fX2RlZmF1bHQoKShjbGFzc05hbWUsICdub3ZhLW1lZGlhJywgJ2hhcy1pbWFnZS1vbi10aGUtJyArIG1lZGlhUG9zaXRpb24sICdibG9jay1pcy0nICsgYmxvY2tTdHlsZSwgJ2NvbnRlbnQtaXMtJyArIGNvbnRlbnRTdHlsZSk7XG5cblx0XHRcdHZhciBnYWxsZXJ5SW1hZ2VzID0gaW1hZ2VzLm1hcChmdW5jdGlvbiAoaW1hZ2UpIHtcblx0XHRcdFx0cmV0dXJuIEpTT04ucGFyc2UoaW1hZ2UpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHZhciBkaXNwbGF5SW1hZ2VzID0gZnVuY3Rpb24gZGlzcGxheUltYWdlcyhpbWFnZXMpIHtcblxuXHRcdFx0XHRpZiAoMCA9PT0gaW1hZ2VzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoTWVkaWFQbGFjZWhvbGRlciwge1xuXHRcdFx0XHRcdFx0aWNvbjogJ2Zvcm1hdC1nYWxsZXJ5Jyxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZTogJ25vdmEtbWVkaWFfX3BsYWNlaG9sZGVyJyxcblx0XHRcdFx0XHRcdG9uU2VsZWN0OiB1cGRhdGVJbWFnZXMsXG5cdFx0XHRcdFx0XHRhY2NlcHQ6ICdpbWFnZS8qJyxcblx0XHRcdFx0XHRcdGFsbG93ZWRUeXBlczogWydpbWFnZSddLFxuXHRcdFx0XHRcdFx0bXVsdGlwbGU6IHRydWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZ2FsbGVyeUltYWdlcy5tYXAoZnVuY3Rpb24gKGltYWdlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHRcdFx0eyBjbGFzc05hbWU6ICdub3ZhLW1lZGlhX19pbWFnZScgfSxcblx0XHRcdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KCdpbWcnLCB7IGFsdDogaW1hZ2UuYWx0LCBzcmM6IGltYWdlLnVybCB9KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzIH0sXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7IGNsYXNzTmFtZTogJ25vdmEtbWVkaWFfX2lubmVyLWNvbnRhaW5lcicgfSxcblx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHRcdHsgY2xhc3NOYW1lOiAnd3AtYmxvY2snLCAnZGF0YS1hbGlnbic6ICd3aWRlJyB9LFxuXHRcdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHRcdFx0eyBjbGFzc05hbWU6ICdub3ZhLW1lZGlhX19sYXlvdXQnIH0sXG5cdFx0XHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHRcdFx0XHR7IGNsYXNzTmFtZTogJ25vdmEtbWVkaWFfX2NvbnRlbnQgbm92YS1tZWRpYV9faW5uZXItY29udGFpbmVyJyB9LFxuXHRcdFx0XHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChJbm5lckJsb2Nrcywge1xuXHRcdFx0XHRcdFx0XHRcdFx0YWxsb3dlZEJsb2NrczogQUxMT1dFRF9CTE9DS1MsXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZTogVEVNUExBVEVcblx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdFx0XHRcdFx0eyBjbGFzc05hbWU6ICdub3ZhLW1lZGlhX19hc2lkZScgfSxcblx0XHRcdFx0XHRcdFx0XHRkaXNwbGF5SW1hZ2VzKGltYWdlcylcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gTWVkaWFQcmV2aWV3O1xufShDb21wb25lbnQpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKE1lZGlhUHJldmlldyk7XG5cbi8qKiovIH0pLFxuLyogMTQ3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXzsvKiFcbiAgQ29weXJpZ2h0IChjKSAyMDE3IEplZCBXYXRzb24uXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG4gIGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpICYmIGFyZy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRpZiAoaW5uZXIpIHtcblx0XHRcdFx0XHRjbGFzc2VzLnB1c2goaW5uZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRjbGFzc2VzLnB1c2goa2V5KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0cnVlKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdCEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtdLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KS5hcHBseShleHBvcnRzLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fKSxcblx0XHRcdFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcblxuXG4vKioqLyB9KSxcbi8qIDE0OCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2ljb25zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZWRpdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDkpO1xuLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuXG5cblxuLyoqXG4gKiBXb3JkUHJlc3MgZGVwZW5kZW5jaWVzXG4gKi9cbnZhciBfXyA9IHdwLmkxOG4uX187XG52YXIgcmVnaXN0ZXJCbG9ja1R5cGUgPSB3cC5ibG9ja3MucmVnaXN0ZXJCbG9ja1R5cGU7XG52YXIgSW5uZXJCbG9ja3MgPSB3cC5ibG9ja0VkaXRvci5Jbm5lckJsb2NrcztcblxuXG4vKiB1bnVzZWQgaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgX3VudXNlZF93ZWJwYWNrX2RlZmF1bHRfZXhwb3J0ID0gKHJlZ2lzdGVyQmxvY2tUeXBlKCdub3ZhYmxvY2tzL3NsaWRlc2hvdycsIHtcblx0dGl0bGU6IF9fKCdTbGlkZXNob3cgTWUgdGhlIFdheScsICdfX3BsdWdpbl90eHRkJyksXG5cdGRlc2NyaXB0aW9uOiBfXygnRGlzcGxheSBtb3JlIHRoYW4gb25lIHBpZWNlIG9mIGNvbnRlbnQgaW4gYSBzaW5nbGUsIGNvdmV0ZWQgc3BhY2UuJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0Y2F0ZWdvcnk6ICdub3ZhLWJsb2NrcycsXG5cdGljb246IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faWNvbnNfX1tcImhcIiAvKiBzbGlkZXNob3cgKi9dLFxuXHRlZGl0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2VkaXRfX1tcImFcIiAvKiBkZWZhdWx0ICovXSxcblx0c2F2ZTogZnVuY3Rpb24gc2F2ZSgpIHtcblx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KElubmVyQmxvY2tzLkNvbnRlbnQsIG51bGwpO1xuXHR9LFxuXHRnZXRFZGl0V3JhcHBlclByb3BzOiBmdW5jdGlvbiBnZXRFZGl0V3JhcHBlclByb3BzKCkge1xuXHRcdHZhciBzZXR0aW5ncyA9IHdwLmRhdGEuc2VsZWN0KCdjb3JlL2Jsb2NrLWVkaXRvcicpLmdldFNldHRpbmdzKCk7XG5cdFx0cmV0dXJuIHNldHRpbmdzLmFsaWduV2lkZSA/IHtcblx0XHRcdCdkYXRhLWFsaWduJzogJ2Z1bGwnXG5cdFx0fSA6IHt9O1xuXHR9XG59KSk7XG5cbi8qKiovIH0pLFxuLyogMTQ5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX3Byb21pc2VfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2V4dGVuZHNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19faWNvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19jb21wb25lbnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2NvbXBvbmVudHNfdXRpbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTApO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX3ByZXZpZXdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUxKTtcblxuXG5cblxuXG5cblxuXG5cbnZhciBfXyA9IHdwLmkxOG4uX187XG5cblxuXG5cblxuXG5cblxudmFyIF93cCRibG9ja0VkaXRvciA9IHdwLmJsb2NrRWRpdG9yLFxuICAgIE1lZGlhVXBsb2FkID0gX3dwJGJsb2NrRWRpdG9yLk1lZGlhVXBsb2FkLFxuICAgIEJsb2NrQ29udHJvbHMgPSBfd3AkYmxvY2tFZGl0b3IuQmxvY2tDb250cm9scyxcbiAgICBJbnNwZWN0b3JDb250cm9scyA9IF93cCRibG9ja0VkaXRvci5JbnNwZWN0b3JDb250cm9scztcbnZhciBfd3AkY29tcG9uZW50cyA9IHdwLmNvbXBvbmVudHMsXG4gICAgUGFuZWxCb2R5ID0gX3dwJGNvbXBvbmVudHMuUGFuZWxCb2R5LFxuICAgIFJhZGlvQ29udHJvbCA9IF93cCRjb21wb25lbnRzLlJhZGlvQ29udHJvbCxcbiAgICBTZWxlY3RDb250cm9sID0gX3dwJGNvbXBvbmVudHMuU2VsZWN0Q29udHJvbCxcbiAgICBJY29uQnV0dG9uID0gX3dwJGNvbXBvbmVudHMuSWNvbkJ1dHRvbixcbiAgICBUb29sYmFyID0gX3dwJGNvbXBvbmVudHMuVG9vbGJhcjtcbnZhciBfd3AkZWxlbWVudCA9IHdwLmVsZW1lbnQsXG4gICAgQ29tcG9uZW50ID0gX3dwJGVsZW1lbnQuQ29tcG9uZW50LFxuICAgIEZyYWdtZW50ID0gX3dwJGVsZW1lbnQuRnJhZ21lbnQ7XG5cblxudmFyIGRlZmF1bHRHYWxsZXJ5SW1hZ2VzID0gW3tcblx0XCJ1cmxcIjogXCJodHRwczovL3NvdXJjZS51bnNwbGFzaC5jb20vX25xQXBnRy1RclkvMTYwMHg5MDBcIixcblx0XCJpZFwiOiAtMSxcblx0XCJzaXplc1wiOiB7XG5cdFx0XCJ0aHVtYm5haWxcIjoge1xuXHRcdFx0XCJ1cmxcIjogXCJodHRwczovL3NvdXJjZS51bnNwbGFzaC5jb20vX25xQXBnRy1RclkvMTUweDE1MFwiXG5cdFx0fSxcblx0XHRcImxhcmdlXCI6IHtcblx0XHRcdFwidXJsXCI6IFwiaHR0cHM6Ly9zb3VyY2UudW5zcGxhc2guY29tL19ucUFwZ0ctUXJZLzE2MDB4OTAwXCIsXG5cdFx0XHRcIndpZHRoXCI6IDE2MDAsXG5cdFx0XHRcImhlaWdodFwiOiA5MDBcblx0XHR9XG5cdH1cbn0sIHtcblx0XCJ1cmxcIjogXCJodHRwczovL3NvdXJjZS51bnNwbGFzaC5jb20vR3RfNGlNQjdoWTAvMTYwMHg5MDBcIixcblx0XCJhbHRcIjogXCJUaGlzIGlzIGEgY2F0Y2h5IGltYWdlIHRpdGxlXCIsXG5cdFwiY2FwdGlvblwiOiBcIkEgYnJpbGxpYW50IGNhcHRpb24gdG8gZXhwbGFpbiBpdHMgY2F0Y2hpbmVzc1wiLFxuXHRcImlkXCI6IC0yLFxuXHRcInNpemVzXCI6IHtcblx0XHRcInRodW1ibmFpbFwiOiB7XG5cdFx0XHRcInVybFwiOiBcImh0dHBzOi8vc291cmNlLnVuc3BsYXNoLmNvbS9HdF80aU1CN2hZMC8xNTB4MTUwXCJcblx0XHR9LFxuXHRcdFwibGFyZ2VcIjoge1xuXHRcdFx0XCJ1cmxcIjogXCJodHRwczovL3NvdXJjZS51bnNwbGFzaC5jb20vR3RfNGlNQjdoWTAvMTYwMHg5MDBcIixcblx0XHRcdFwid2lkdGhcIjogMTYwMCxcblx0XHRcdFwiaGVpZ2h0XCI6IDkwMFxuXHRcdH1cblx0fVxufSwge1xuXHRcInVybFwiOiBcImh0dHBzOi8vc291cmNlLnVuc3BsYXNoLmNvbS8xdktUbndMTWRxcy8xNjAweDkwMFwiLFxuXHRcImlkXCI6IC0zLFxuXHRcInNpemVzXCI6IHtcblx0XHRcInRodW1ibmFpbFwiOiB7XG5cdFx0XHRcInVybFwiOiBcImh0dHBzOi8vc291cmNlLnVuc3BsYXNoLmNvbS8xdktUbndMTWRxcy8xNTB4MTUwXCJcblx0XHR9LFxuXHRcdFwibGFyZ2VcIjoge1xuXHRcdFx0XCJ1cmxcIjogXCJodHRwczovL3NvdXJjZS51bnNwbGFzaC5jb20vMXZLVG53TE1kcXMvMTYwMHg5MDBcIixcblx0XHRcdFwid2lkdGhcIjogMTYwMCxcblx0XHRcdFwiaGVpZ2h0XCI6IDkwMFxuXHRcdH1cblx0fVxufV07XG5cbnZhciBFZGl0ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQoKShFZGl0LCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBFZGl0KCkge1xuXHRcdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0KCkodGhpcywgRWRpdCk7XG5cblx0XHR2YXIgX3RoaXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0KCkodGhpcywgKEVkaXQuX19wcm90b19fIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfX19kZWZhdWx0KCkoRWRpdCkpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuXG5cdFx0X3RoaXMuc3RhdGUgPSB7XG5cdFx0XHRzZWxlY3RlZEluZGV4OiAwXG5cdFx0fTtcblx0XHRyZXR1cm4gX3RoaXM7XG5cdH1cblxuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCgpKEVkaXQsIFt7XG5cdFx0a2V5OiBcImNvbXBvbmVudFdpbGxNb3VudFwiLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XG5cdFx0XHR2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcblx0XHRcdCAgICBnYWxsZXJ5SW1hZ2VzID0gX3Byb3BzLmF0dHJpYnV0ZXMuZ2FsbGVyeUltYWdlcyxcblx0XHRcdCAgICBjbGllbnRJZCA9IF9wcm9wcy5jbGllbnRJZDtcblxuXG5cdFx0XHRpZiAoIWdhbGxlcnlJbWFnZXMubGVuZ3RoKSB7XG5cdFx0XHRcdHdwLmRhdGEuZGlzcGF0Y2goJ2NvcmUvYmxvY2stZWRpdG9yJykudXBkYXRlQmxvY2tBdHRyaWJ1dGVzKGNsaWVudElkLCB7XG5cdFx0XHRcdFx0Z2FsbGVyeUltYWdlczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fY29tcG9uZW50c191dGlsX19bXCJhXCIgLyogc2h1ZmZsZUFycmF5ICovXSkoZGVmYXVsdEdhbGxlcnlJbWFnZXMuc2xpY2UoMCkpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogXCJvbkNoYW5nZUdhbGxlcnlcIixcblx0XHR2YWx1ZTogZnVuY3Rpb24gb25DaGFuZ2VHYWxsZXJ5KGdhbGxlcnlJbWFnZXMpIHtcblx0XHRcdHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdFx0XHR2YXIgcHJvbWlzZXMgPSBnYWxsZXJ5SW1hZ2VzLm1hcChmdW5jdGlvbiAoaW1hZ2UsIGluZGV4KSB7XG5cdFx0XHRcdHJldHVybiB3cC5hcGlSZXF1ZXN0KHsgcGF0aDogJy93cC92Mi9tZWRpYS8nICsgaW1hZ2UuaWQgfSkudGhlbihmdW5jdGlvbiAobmV3SW1hZ2UpIHtcblx0XHRcdFx0XHRnYWxsZXJ5SW1hZ2VzW2luZGV4XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZXh0ZW5kc19fX2RlZmF1bHQoKSh7fSwgbmV3SW1hZ2UsIGltYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19wcm9taXNlX19fZGVmYXVsdC5hLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdF90aGlzMi5wcm9wcy5zZXRBdHRyaWJ1dGVzKHsgZ2FsbGVyeUltYWdlczogZ2FsbGVyeUltYWdlcy5maWx0ZXIoZnVuY3Rpb24gKGltYWdlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gISFpbWFnZS5pZCAmJiAhIWltYWdlLnNpemVzICYmICEhaW1hZ2Uuc2l6ZXMubGFyZ2UgJiYgISFpbWFnZS5zaXplcy5sYXJnZS51cmw7XG5cdFx0XHRcdFx0fSkgfSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6IFwib25QcmV2QXJyb3dDbGlja1wiLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBvblByZXZBcnJvd0NsaWNrKCkge1xuXHRcdFx0dmFyIGdhbGxlcnlJbWFnZXMgPSB0aGlzLnByb3BzLmF0dHJpYnV0ZXMuZ2FsbGVyeUltYWdlcztcblx0XHRcdHZhciBzZWxlY3RlZEluZGV4ID0gdGhpcy5zdGF0ZS5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHR2YXIgbmV3SW5kZXggPSAoc2VsZWN0ZWRJbmRleCArIGdhbGxlcnlJbWFnZXMubGVuZ3RoIC0gMSkgJSBnYWxsZXJ5SW1hZ2VzLmxlbmd0aDtcblx0XHRcdHRoaXMuc2V0U3RhdGUoeyBzZWxlY3RlZEluZGV4OiBuZXdJbmRleCB9KTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6IFwib25OZXh0QXJyb3dDbGlja1wiLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBvbk5leHRBcnJvd0NsaWNrKCkge1xuXHRcdFx0dmFyIGdhbGxlcnlJbWFnZXMgPSB0aGlzLnByb3BzLmF0dHJpYnV0ZXMuZ2FsbGVyeUltYWdlcztcblx0XHRcdHZhciBzZWxlY3RlZEluZGV4ID0gdGhpcy5zdGF0ZS5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHR2YXIgbmV3SW5kZXggPSAoc2VsZWN0ZWRJbmRleCArIDEpICUgZ2FsbGVyeUltYWdlcy5sZW5ndGg7XG5cdFx0XHR0aGlzLnNldFN0YXRlKHsgc2VsZWN0ZWRJbmRleDogbmV3SW5kZXggfSk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiBcInJlbmRlclwiLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdFx0XHR2YXIgX3RoaXMzID0gdGhpcztcblxuXHRcdFx0dmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxuXHRcdFx0ICAgIF9wcm9wczIkYXR0cmlidXRlcyA9IF9wcm9wczIuYXR0cmlidXRlcyxcblx0XHRcdCAgICBzbGlkZXNob3dUeXBlID0gX3Byb3BzMiRhdHRyaWJ1dGVzLnNsaWRlc2hvd1R5cGUsXG5cdFx0XHQgICAgZ2FsbGVyeUltYWdlcyA9IF9wcm9wczIkYXR0cmlidXRlcy5nYWxsZXJ5SW1hZ2VzLFxuXHRcdFx0ICAgIG1pbkhlaWdodCA9IF9wcm9wczIkYXR0cmlidXRlcy5taW5IZWlnaHQsXG5cdFx0XHQgICAgc2V0QXR0cmlidXRlcyA9IF9wcm9wczIuc2V0QXR0cmlidXRlcyxcblx0XHRcdCAgICBpc1NlbGVjdGVkID0gX3Byb3BzMi5pc1NlbGVjdGVkLFxuXHRcdFx0ICAgIGNsYXNzTmFtZSA9IF9wcm9wczIuY2xhc3NOYW1lO1xuXG5cblx0XHRcdHZhciBvbkNoYW5nZUdhbGxlcnkgPSB0aGlzLm9uQ2hhbmdlR2FsbGVyeS5iaW5kKHRoaXMpO1xuXG5cdFx0XHR2YXIgc2VsZWN0ZWRJbmRleCA9IHRoaXMuc3RhdGUuc2VsZWN0ZWRJbmRleDtcblxuXG5cdFx0XHRpZiAoc2VsZWN0ZWRJbmRleCA+PSBnYWxsZXJ5SW1hZ2VzLmxlbmd0aCkge1xuXHRcdFx0XHRzZWxlY3RlZEluZGV4ID0gZ2FsbGVyeUltYWdlcy5sZW5ndGggLSAxO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRGcmFnbWVudCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX3ByZXZpZXdfX1tcImFcIiAvKiBkZWZhdWx0ICovXSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19leHRlbmRzX19fZGVmYXVsdCgpKHt9LCB0aGlzLnByb3BzLCB7XG5cdFx0XHRcdFx0cHJldmlld0ltYWdlOiBnYWxsZXJ5SW1hZ2VzW3NlbGVjdGVkSW5kZXhdLFxuXHRcdFx0XHRcdG9uUHJldkFycm93Q2xpY2s6IHRoaXMub25QcmV2QXJyb3dDbGljay5iaW5kKHRoaXMpLFxuXHRcdFx0XHRcdG9uTmV4dEFycm93Q2xpY2s6IHRoaXMub25OZXh0QXJyb3dDbGljay5iaW5kKHRoaXMpXG5cdFx0XHRcdH0pKSxcblx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdEluc3BlY3RvckNvbnRyb2xzLFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFx0UGFuZWxCb2R5LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU6ICdub3ZhLWJsb2Nrcy1zbGlkZXNob3ctdHlwZS1wYW5lbCcsXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBfXygnU2xpZGVzJywgJ19fcGx1Z2luX3R4dGQnKSB9LFxuXHRcdFx0XHRcdFx0ISFnYWxsZXJ5SW1hZ2VzLmxlbmd0aCAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19jb21wb25lbnRzX19bXCJkXCIgLyogR2FsbGVyeVByZXZpZXcgKi9dLCB7XG5cdFx0XHRcdFx0XHRcdGdhbGxlcnlJbWFnZXM6IGdhbGxlcnlJbWFnZXMsXG5cdFx0XHRcdFx0XHRcdG9uU2VsZWN0SW1hZ2U6IGZ1bmN0aW9uIG9uU2VsZWN0SW1hZ2Uoc2VsZWN0ZWRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdF90aGlzMy5zZXRTdGF0ZSh7IHNlbGVjdGVkSW5kZXg6IHNlbGVjdGVkSW5kZXggfSk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiBzZWxlY3RlZEluZGV4XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0J2dhbGxlcnknID09PSBzbGlkZXNob3dUeXBlICYmIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcdEZyYWdtZW50LFxuXHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2NvbXBvbmVudHNfX1tcImZcIiAvKiBMYXlvdXRQYW5lbCAqL10sIHRoaXMucHJvcHMpLFxuXHRcdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFx0XHRQYW5lbEJvZHksXG5cdFx0XHRcdFx0XHRcdHsgdGl0bGU6IF9fKCdIZWlnaHQnLCAnX19wbHVnaW5fdHh0ZCcpLCBpbml0aWFsT3BlbjogZmFsc2UgfSxcblx0XHRcdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFJhZGlvQ29udHJvbCwge1xuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBfXygnTWluaW11bSBIZWlnaHQnLCAnX19wbHVnaW5fdHh0ZCcpLFxuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkOiBtaW5IZWlnaHQsXG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U6IGZ1bmN0aW9uIG9uQ2hhbmdlKG1pbkhlaWdodCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2V0QXR0cmlidXRlcyh7IG1pbkhlaWdodDogcGFyc2VJbnQobWluSGVpZ2h0LCAxMCkgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiBbe1xuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdBdXRvJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAwXG5cdFx0XHRcdFx0XHRcdFx0fSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IF9fKCdIYWxmJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiA1MFxuXHRcdFx0XHRcdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBfXygnVHdvIFRoaXJkcycsICdfX3BsdWdpbl90eHRkJyksXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogNjZcblx0XHRcdFx0XHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogX18oJ1RocmVlIFF1YXJ0ZXJzJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiA3NVxuXHRcdFx0XHRcdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBfXygnRnVsbCBIZWlnaHQnLCAnX19wbHVnaW5fdHh0ZCcpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IDEwMFxuXHRcdFx0XHRcdFx0XHRcdH1dXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fY29tcG9uZW50c19fW1wiZ1wiIC8qIFBhcmFsbGF4UGFuZWwgKi9dLCB0aGlzLnByb3BzKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0J2dhbGxlcnknICE9PSBzbGlkZXNob3dUeXBlICYmIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcdFBhbmVsQm9keSxcblx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRfXygnQ29taW5nIFNvb24nLCAnX19wbHVnaW5fdHh0ZCcpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0QmxvY2tDb250cm9scyxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2NvbXBvbmVudHNfX1tcImFcIiAvKiBBbGlnbm1lbnRUb29sYmFyICovXSwgdGhpcy5wcm9wcyksXG5cdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fY29tcG9uZW50c19fW1wiYlwiIC8qIENvbG9yVG9vbGJhciAqL10sIHRoaXMucHJvcHMpLFxuXHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcdFRvb2xiYXIsXG5cdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KE1lZGlhVXBsb2FkLCB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiaW1hZ2VcIixcblx0XHRcdFx0XHRcdFx0bXVsdGlwbGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGdhbGxlcnk6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBnYWxsZXJ5SW1hZ2VzLm1hcChmdW5jdGlvbiAoaW1hZ2UpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaW1hZ2UuaWQ7XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRvblNlbGVjdDogb25DaGFuZ2VHYWxsZXJ5LFxuXHRcdFx0XHRcdFx0XHRyZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihfcmVmKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG9wZW4gPSBfcmVmLm9wZW47XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChJY29uQnV0dG9uLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU6IFwiY29tcG9uZW50cy1pY29uLWJ1dHRvbiBjb21wb25lbnRzLXRvb2xiYXJfX2NvbnRyb2xcIixcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBfXygnQ2hhbmdlIE1lZGlhJywgJ19fcGx1Z2luX3R4dGQnKSxcblx0XHRcdFx0XHRcdFx0XHRcdGljb246IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19faWNvbnNfX1tcImlcIiAvKiBzd2FwICovXSxcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wZW4oKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIEVkaXQ7XG59KENvbXBvbmVudCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoRWRpdCk7XG5cbi8qKiovIH0pLFxuLyogMTUwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzaHVmZmxlQXJyYXk7IH0pO1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI0NTA5NzZcbnZhciBzaHVmZmxlQXJyYXkgPSBmdW5jdGlvbiBzaHVmZmxlQXJyYXkoYXJyYXkpIHtcblx0dmFyIGN1cnJlbnRJbmRleCA9IGFycmF5Lmxlbmd0aCxcblx0ICAgIHRlbXBvcmFyeVZhbHVlLFxuXHQgICAgcmFuZG9tSW5kZXg7XG5cblx0Ly8gV2hpbGUgdGhlcmUgcmVtYWluIGVsZW1lbnRzIHRvIHNodWZmbGUuLi5cblx0d2hpbGUgKDAgIT09IGN1cnJlbnRJbmRleCkge1xuXG5cdFx0Ly8gUGljayBhIHJlbWFpbmluZyBlbGVtZW50Li4uXG5cdFx0cmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjdXJyZW50SW5kZXgpO1xuXHRcdGN1cnJlbnRJbmRleCAtPSAxO1xuXG5cdFx0Ly8gQW5kIHN3YXAgaXQgd2l0aCB0aGUgY3VycmVudCBlbGVtZW50LlxuXHRcdHRlbXBvcmFyeVZhbHVlID0gYXJyYXlbY3VycmVudEluZGV4XTtcblx0XHRhcnJheVtjdXJyZW50SW5kZXhdID0gYXJyYXlbcmFuZG9tSW5kZXhdO1xuXHRcdGFycmF5W3JhbmRvbUluZGV4XSA9IHRlbXBvcmFyeVZhbHVlO1xuXHR9XG5cblx0cmV0dXJuIGFycmF5O1xufTtcblxuLyoqKi8gfSksXG4vKiAxNTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2NvbXBvbmVudHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fYmFja2dyb3VuZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTIpO1xuXG5cblxuXG5cbnZhciBfd3AkZWxlbWVudCA9IHdwLmVsZW1lbnQsXG4gICAgQ29tcG9uZW50ID0gX3dwJGVsZW1lbnQuQ29tcG9uZW50LFxuICAgIEZyYWdtZW50ID0gX3dwJGVsZW1lbnQuRnJhZ21lbnQ7XG5cblxuXG5cblxuXG52YXIgTWVkaWFVcGxvYWQgPSB3cC5ibG9ja0VkaXRvci5NZWRpYVVwbG9hZDtcblxudmFyIFNsaWRlc2hvd1ByZXZpZXcgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX19fZGVmYXVsdCgpKFNsaWRlc2hvd1ByZXZpZXcsIF9Db21wb25lbnQpO1xuXG5cdGZ1bmN0aW9uIFNsaWRlc2hvd1ByZXZpZXcoKSB7XG5cdFx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fX2RlZmF1bHQoKSh0aGlzLCBTbGlkZXNob3dQcmV2aWV3KTtcblxuXHRcdHZhciBfdGhpcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fX2RlZmF1bHQoKSh0aGlzLCAoU2xpZGVzaG93UHJldmlldy5fX3Byb3RvX18gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQoKShTbGlkZXNob3dQcmV2aWV3KSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG5cblx0XHRfdGhpcy5zdGF0ZSA9IHtcblx0XHRcdHdpbmRvd1dpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCxcblx0XHRcdHdpbmRvd0hlaWdodDogd2luZG93LmlubmVySGVpZ2h0XG5cdFx0fTtcblx0XHRyZXR1cm4gX3RoaXM7XG5cdH1cblxuXHRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCgpKFNsaWRlc2hvd1ByZXZpZXcsIFt7XG5cdFx0a2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcblx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMudXBkYXRlRGltZW5zaW9ucy5iaW5kKHRoaXMpKTtcblx0XHRcdHRoaXMudXBkYXRlRGltZW5zaW9ucygpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3VwZGF0ZURpbWVuc2lvbnMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVEaW1lbnNpb25zKCkge1xuXHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdGRpbWVuc2lvbnM6IHtcblx0XHRcdFx0XHR3aWR0aDogdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGgsXG5cdFx0XHRcdFx0aGVpZ2h0OiB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHRcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyQ29udGVudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIHJlbmRlckNvbnRlbnQoKSB7XG5cdFx0XHR2YXIgX3RoaXMyID0gdGhpcztcblxuXHRcdFx0dmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG5cdFx0XHQgICAgX3Byb3BzJGF0dHJpYnV0ZXMgPSBfcHJvcHMuYXR0cmlidXRlcyxcblx0XHRcdCAgICBjb250ZW50UGFkZGluZyA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvbnRlbnRQYWRkaW5nLFxuXHRcdFx0ICAgIGNvbnRlbnRQYWRkaW5nQ3VzdG9tID0gX3Byb3BzJGF0dHJpYnV0ZXMuY29udGVudFBhZGRpbmdDdXN0b20sXG5cdFx0XHQgICAgY29udGVudFdpZHRoID0gX3Byb3BzJGF0dHJpYnV0ZXMuY29udGVudFdpZHRoLFxuXHRcdFx0ICAgIGNvbnRlbnRXaWR0aEN1c3RvbSA9IF9wcm9wcyRhdHRyaWJ1dGVzLmNvbnRlbnRXaWR0aEN1c3RvbSxcblx0XHRcdCAgICBhcHBseU1pbmltdW1IZWlnaHRCbG9jayA9IF9wcm9wcyRhdHRyaWJ1dGVzLmFwcGx5TWluaW11bUhlaWdodEJsb2NrLFxuXHRcdFx0ICAgIHZlcnRpY2FsQWxpZ25tZW50ID0gX3Byb3BzJGF0dHJpYnV0ZXMudmVydGljYWxBbGlnbm1lbnQsXG5cdFx0XHQgICAgaG9yaXpvbnRhbEFsaWdubWVudCA9IF9wcm9wcyRhdHRyaWJ1dGVzLmhvcml6b250YWxBbGlnbm1lbnQsXG5cdFx0XHQgICAgY29udGVudENvbG9yID0gX3Byb3BzJGF0dHJpYnV0ZXMuY29udGVudENvbG9yLFxuXHRcdFx0ICAgIG92ZXJsYXlGaWx0ZXJTdHlsZSA9IF9wcm9wcyRhdHRyaWJ1dGVzLm92ZXJsYXlGaWx0ZXJTdHlsZSxcblx0XHRcdCAgICBvdmVybGF5RmlsdGVyU3RyZW5ndGggPSBfcHJvcHMkYXR0cmlidXRlcy5vdmVybGF5RmlsdGVyU3RyZW5ndGgsXG5cdFx0XHQgICAgZ2FsbGVyeUltYWdlcyA9IF9wcm9wcyRhdHRyaWJ1dGVzLmdhbGxlcnlJbWFnZXMsXG5cdFx0XHQgICAgcHJldmlld0ltYWdlID0gX3Byb3BzLnByZXZpZXdJbWFnZSxcblx0XHRcdCAgICBjbGFzc05hbWUgPSBfcHJvcHMuY2xhc3NOYW1lO1xuXG5cblx0XHRcdHZhciBjbGFzc2VzID0gW2NsYXNzTmFtZSwgJ25vdmEtc2xpZGVzaG93IGlzLXJlYWR5JywgJ25vdmEtdS12YWxpZ24tJyArIHZlcnRpY2FsQWxpZ25tZW50LCAnbm92YS11LWhhbGlnbi0nICsgaG9yaXpvbnRhbEFsaWdubWVudCwgJ25vdmEtdS1zcGFjaW5nLScgKyBjb250ZW50UGFkZGluZywgJ25vdmEtdS1jb250ZW50LXdpZHRoLScgKyBjb250ZW50V2lkdGgsICdub3ZhLXUtYmFja2dyb3VuZCcsICdub3ZhLXUtYmFja2dyb3VuZC0nICsgb3ZlcmxheUZpbHRlclN0eWxlXTtcblxuXHRcdFx0dmFyIHN0eWxlcyA9IHtcblx0XHRcdFx0c2xpZGVzaG93OiB7IGNvbG9yOiBjb250ZW50Q29sb3IgfSxcblx0XHRcdFx0Y29udGVudDoge30sXG5cdFx0XHRcdGZvcmVncm91bmQ6IHt9XG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAoY29udGVudFBhZGRpbmcgPT09ICdjdXN0b20nKSB7XG5cdFx0XHRcdHN0eWxlcy5mb3JlZ3JvdW5kLnBhZGRpbmdUb3AgPSBjb250ZW50UGFkZGluZ0N1c3RvbSArICclJztcblx0XHRcdFx0c3R5bGVzLmZvcmVncm91bmQucGFkZGluZ0JvdHRvbSA9IGNvbnRlbnRQYWRkaW5nQ3VzdG9tICsgJyUnO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoISFhcHBseU1pbmltdW1IZWlnaHRCbG9jaykge1xuXHRcdFx0XHRzdHlsZXMuc2xpZGVzaG93Lm1pbkhlaWdodCA9IG1pbkhlaWdodCArICd2aCc7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb250ZW50V2lkdGggPT09ICdjdXN0b20nKSB7XG5cdFx0XHRcdHN0eWxlcy5jb250ZW50Lm1heFdpZHRoID0gY29udGVudFdpZHRoQ3VzdG9tICsgJyUnO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbWF4QXNwZWN0UmF0aW8gPSAwO1xuXHRcdFx0dmFyIG1lZGlhTWluSGVpZ2h0ID0gMDtcblx0XHRcdHZhciBzbGlkZXJXaWR0aCA9IDA7XG5cblx0XHRcdGdhbGxlcnlJbWFnZXMubWFwKGZ1bmN0aW9uIChpbWFnZSkge1xuXHRcdFx0XHRpZiAoISFpbWFnZS5zaXplcyAmJiAhIWltYWdlLnNpemVzLmxhcmdlICYmICEhaW1hZ2Uuc2l6ZXMubGFyZ2Uud2lkdGgpIHtcblx0XHRcdFx0XHR2YXIgYXNwZWN0UmF0aW8gPSBpbWFnZS5zaXplcy5sYXJnZS53aWR0aCAvIGltYWdlLnNpemVzLmxhcmdlLmhlaWdodDtcblx0XHRcdFx0XHRtYXhBc3BlY3RSYXRpbyA9IGFzcGVjdFJhdGlvID4gbWF4QXNwZWN0UmF0aW8gPyBhc3BlY3RSYXRpbyA6IG1heEFzcGVjdFJhdGlvO1xuXHRcdFx0XHRcdG1lZGlhTWluSGVpZ2h0ID0gX3RoaXMyLnN0YXRlLmRpbWVuc2lvbnMud2lkdGggLyBtYXhBc3BlY3RSYXRpbztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHN0eWxlcy5zbGlkZXIgPSB7XG5cdFx0XHRcdG1pbkhlaWdodDogTWF0aC5tYXgobWVkaWFNaW5IZWlnaHQsIG1heEFzcGVjdFJhdGlvKSArICdweCdcblx0XHRcdH07XG5cblx0XHRcdHJldHVybiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdEZyYWdtZW50LFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHQhIWdhbGxlcnlJbWFnZXMubGVuZ3RoICYmIHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7IGNsYXNzTmFtZTogY2xhc3Nlcy5qb2luKCcgJyksIHN0eWxlOiBzdHlsZXMuc2xpZGVzaG93IH0sXG5cdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdFx0XHR7IGNsYXNzTmFtZTogJ25vdmEtc2xpZGVzaG93X19zbGlkZXInLCBzdHlsZTogc3R5bGVzLnNsaWRlciB9LFxuXHRcdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHRcdFx0eyBjbGFzc05hbWU6ICdub3ZhLXNsaWRlc2hvd19fc2xpZGUnIH0sXG5cdFx0XHRcdFx0XHRcdHByZXZpZXdJbWFnZSAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdFx0RnJhZ21lbnQsXG5cdFx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19iYWNrZ3JvdW5kX19bXCJhXCIgLyogZGVmYXVsdCAqL10sIHRoaXMucHJvcHMpLFxuXHRcdFx0XHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHRcdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHRcdFx0XHRcdFx0eyBjbGFzc05hbWU6ICdub3ZhLXNsaWRlc2hvd19fY29udGVudCBub3ZhLXUtY29udGVudC1wYWRkaW5nJywgc3R5bGU6IHN0eWxlcy5mb3JlZ3JvdW5kIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdkaXYnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGNsYXNzTmFtZTogJ25vdmEtdS1jb250ZW50LWFsaWduJyB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0eyBjbGFzc05hbWU6ICdub3ZhLXUtY29udGVudC13aWR0aCcsIHN0eWxlOiBzdHlsZXMuY29udGVudCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCEhcHJldmlld0ltYWdlLmFsdCAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnaDInLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXZpZXdJbWFnZS5hbHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCEhcHJldmlld0ltYWdlLmNhcHRpb24gJiYgd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3AnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXZpZXdJbWFnZS5jYXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHRcdHsgY2xhc3NOYW1lOiAnbm92YS1zbGlkZXNob3dfX2NvbnRyb2xzJyB9LFxuXHRcdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KCdkaXYnLCB7IGNsYXNzTmFtZTogJ25vdmEtc2xpZGVzaG93X19hcnJvdyBub3ZhLXNsaWRlc2hvd19fYXJyb3ctLXByZXYgbm92YS1zbGlkZXNob3dfX2Fycm93LS1kaXNhYmxlZCcsIG9uQ2xpY2s6IHRoaXMucHJvcHMub25QcmV2QXJyb3dDbGljayB9KSxcblx0XHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JywgeyBjbGFzc05hbWU6ICdub3ZhLXNsaWRlc2hvd19fYXJyb3cgbm92YS1zbGlkZXNob3dfX2Fycm93LS1uZXh0IG5vdmEtc2xpZGVzaG93X19hcnJvdy0tZGlzYWJsZWQnLCBvbkNsaWNrOiB0aGlzLnByb3BzLm9uTmV4dEFycm93Q2xpY2sgfSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCksXG5cdFx0XHRcdCFnYWxsZXJ5SW1hZ2VzLmxlbmd0aCAmJiB3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdFx0RnJhZ21lbnQsXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHR3cC5lbGVtZW50LmNyZWF0ZUVsZW1lbnQoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19jb21wb25lbnRzX19bXCJjXCIgLyogR2FsbGVyeVBsYWNlaG9sZGVyICovXSwgdGhpcy5wcm9wcyksXG5cdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdFx0XHR7IGNsYXNzTmFtZTogJ25vdmEtc2xpZGVzaG93X19jb250cm9scycgfSxcblx0XHRcdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JywgeyBjbGFzc05hbWU6ICdub3ZhLXNsaWRlc2hvd19fYXJyb3cgbm92YS1zbGlkZXNob3dfX2Fycm93LS1wcmV2IG5vdmEtc2xpZGVzaG93X19hcnJvdy0tZGlzYWJsZWQnIH0pLFxuXHRcdFx0XHRcdFx0d3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KCdkaXYnLCB7IGNsYXNzTmFtZTogJ25vdmEtc2xpZGVzaG93X19hcnJvdyBub3ZhLXNsaWRlc2hvd19fYXJyb3ctLW5leHQgbm92YS1zbGlkZXNob3dfX2Fycm93LS1kaXNhYmxlZCcgfSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIF90aGlzMyA9IHRoaXM7XG5cblx0XHRcdHZhciBkaW1lbnNpb25zID0gdGhpcy5zdGF0ZS5kaW1lbnNpb25zO1xuXG5cdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0eyByZWY6IGZ1bmN0aW9uIHJlZihlbCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIF90aGlzMy5jb250YWluZXIgPSBlbDtcblx0XHRcdFx0XHR9IH0sXG5cdFx0XHRcdGRpbWVuc2lvbnMgJiYgdGhpcy5yZW5kZXJDb250ZW50KClcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIFNsaWRlc2hvd1ByZXZpZXc7XG59KENvbXBvbmVudCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoU2xpZGVzaG93UHJldmlldyk7XG5cbi8qKiovIH0pLFxuLyogMTUyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9iYWJlbF9ydW50aW1lX2NvcmVfanNfb2JqZWN0X2dldF9wcm90b3R5cGVfb2ZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2JhYmVsX3J1bnRpbWVfY29yZV9qc19vYmplY3RfZ2V0X3Byb3RvdHlwZV9vZl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5fX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19iYWJlbF9ydW50aW1lX2hlbHBlcnNfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfYmFiZWxfcnVudGltZV9oZWxwZXJzX2luaGVyaXRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfaW5oZXJpdHNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19jb21wb25lbnRzX3dpdGhfcGFyYWxsYXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjYpO1xuXG5cblxuXG5cblxuXG52YXIgQ29tcG9uZW50ID0gd3AuZWxlbWVudC5Db21wb25lbnQ7XG5cbnZhciBTbGlkZXNob3dCYWNrZ3JvdW5kID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X2JhYmVsX3J1bnRpbWVfaGVscGVyc19pbmhlcml0c19fX2RlZmF1bHQoKShTbGlkZXNob3dCYWNrZ3JvdW5kLCBfQ29tcG9uZW50KTtcblxuXHRmdW5jdGlvbiBTbGlkZXNob3dCYWNrZ3JvdW5kKCkge1xuXHRcdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX19kZWZhdWx0KCkodGhpcywgU2xpZGVzaG93QmFja2dyb3VuZCk7XG5cblx0XHRyZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2JhYmVsX3J1bnRpbWVfaGVscGVyc19wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuX19fZGVmYXVsdCgpKHRoaXMsIChTbGlkZXNob3dCYWNrZ3JvdW5kLl9fcHJvdG9fXyB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfYmFiZWxfcnVudGltZV9jb3JlX2pzX29iamVjdF9nZXRfcHJvdG90eXBlX29mX19fZGVmYXVsdCgpKFNsaWRlc2hvd0JhY2tncm91bmQpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcblx0fVxuXG5cdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX19kZWZhdWx0KCkoU2xpZGVzaG93QmFja2dyb3VuZCwgW3tcblx0XHRrZXk6ICdyZW5kZXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG5cdFx0XHR2YXIgX3Byb3BzJGF0dHJpYnV0ZXMgPSB0aGlzLnByb3BzLmF0dHJpYnV0ZXMsXG5cdFx0XHQgICAgb3ZlcmxheUZpbHRlclN0eWxlID0gX3Byb3BzJGF0dHJpYnV0ZXMub3ZlcmxheUZpbHRlclN0eWxlLFxuXHRcdFx0ICAgIG92ZXJsYXlGaWx0ZXJTdHJlbmd0aCA9IF9wcm9wcyRhdHRyaWJ1dGVzLm92ZXJsYXlGaWx0ZXJTdHJlbmd0aDtcblxuXG5cdFx0XHR2YXIgc3R5bGVzID0ge1xuXHRcdFx0XHRvcGFjaXR5OiAxXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAob3ZlcmxheUZpbHRlclN0eWxlICE9PSAnbm9uZScpIHtcblx0XHRcdFx0c3R5bGVzLm9wYWNpdHkgPSAxIC0gb3ZlcmxheUZpbHRlclN0cmVuZ3RoIC8gMTAwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gd3AuZWxlbWVudC5jcmVhdGVFbGVtZW50KFxuXHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0eyBjbGFzc05hbWU6ICdub3ZhLXNsaWRlc2hvd19fYmFja2dyb3VuZCcsIHN0eWxlOiB0aGlzLnByb3BzLnN0eWxlIH0sXG5cdFx0XHRcdHdwLmVsZW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJywgeyBjbGFzc05hbWU6ICdub3ZhLXNsaWRlc2hvd19fbWVkaWEnLCBzcmM6IHRoaXMucHJvcHMucHJldmlld0ltYWdlLnNpemVzLmxhcmdlLnVybCwgYWx0OiAnJywgc3R5bGU6IHN0eWxlcyB9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1dKTtcblxuXHRyZXR1cm4gU2xpZGVzaG93QmFja2dyb3VuZDtcbn0oQ29tcG9uZW50KTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19jb21wb25lbnRzX3dpdGhfcGFyYWxsYXhfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkoU2xpZGVzaG93QmFja2dyb3VuZCkpO1xuXG4vKioqLyB9KVxuLyoqKioqKi8gXSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGRpc3QvanMvZWRpdG9yLmJsb2Nrcy5qcyIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDY3KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA4N2UzNGU1MmVlOTgwNDMxNWQ5YyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZlwiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qc1xuLy8gbW9kdWxlIGlkID0gMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2RlZmluZVByb3BlcnR5ID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZpbmVQcm9wZXJ0eSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF90eXBlb2YyID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgX3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90eXBlb2YyKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKCh0eXBlb2YgY2FsbCA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiAoMCwgX3R5cGVvZjMuZGVmYXVsdCkoY2FsbCkpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3NldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2ZcIik7XG5cbnZhciBfc2V0UHJvdG90eXBlT2YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2V0UHJvdG90eXBlT2YpO1xuXG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9jcmVhdGVcIik7XG5cbnZhciBfY3JlYXRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZSk7XG5cbnZhciBfdHlwZW9mMiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIF90eXBlb2YzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHlwZW9mMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyAodHlwZW9mIHN1cGVyQ2xhc3MgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKHN1cGVyQ2xhc3MpKSk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSAoMCwgX2NyZWF0ZTIuZGVmYXVsdCkoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZjIuZGVmYXVsdCA/ICgwLCBfc2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qc1xuLy8gbW9kdWxlIGlkID0gNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjknIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanNcbi8vIG1vZHVsZSBpZCA9IDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzXG4vLyBtb2R1bGUgaWQgPSA3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImNvbnN0IHsgU1ZHLCBQYXRoIH0gPSB3cC5jb21wb25lbnRzO1xuXG5leHBvcnQgY29uc3Qgbm92YSA9IChcbiAgICA8c3ZnIHdpZHRoPVwiMzZcIiBoZWlnaHQ9XCIzNlwiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGggZmlsbFJ1bGU9XCJldmVub2RkXCIgY2xpcFJ1bGU9XCJldmVub2RkXCIgZD1cIk0wIDE4QzAgOC4wNTg4OCA4LjA1ODg4IDAgMTggMEMyNy45NDExIDAgMzYgOC4wNTg4OCAzNiAxOEMzNiAyNy45NDExIDI3Ljk0MTEgMzYgMTggMzZDOC4wNTg4OCAzNiAwIDI3Ljk0MTEgMCAxOFpNMTIuMDM5OCAxNEMxMi40MDY5IDEwLjYyNiAxNS4yNjUyIDggMTguNzM2OCA4SDIwLjQyMTFDMjQuNjA2OCA4IDI4IDExLjM5MzIgMjggMTUuNTc4OVYxNi4zODFDMjggMjAuMzgwOSAyNC45MTc3IDIzLjY2MDkgMjAuOTk4NyAyMy45NzUzQzIwLjk5OTYgMjMuOTMyNCAyMSAyMy44ODkzIDIxIDIzLjg0NjJWMjEuMjcyN0MyMSAxNy4yNTYxIDE3Ljc0MzkgMTQgMTMuNzI3MyAxNEgxMi4wMzk4WlwiIGZpbGw9XCIjNjU2NUYyXCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTggMjEuMjg1N0M4IDE4LjkxODggOS45MTg3OCAxNyAxMi4yODU3IDE3SDEzLjQ1NDVDMTUuOTY0OSAxNyAxOCAxOS4wMzUxIDE4IDIxLjU0NTVWMjMuMTUzOEMxOCAyNS4yNzggMTYuMjc4IDI3IDE0LjE1MzggMjdIMTMuNzE0M0MxMC41NTg0IDI3IDggMjQuNDQxNiA4IDIxLjI4NTdaXCIgZmlsbD1cIiNGRkU0MkVcIi8+XG4gICAgPC9zdmc+XG4pO1xuXG5leHBvcnQgY29uc3QgaGVybyA9IChcbiAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPG1hc2sgaWQ9XCJtYXNrMFwiIG1hc2stdHlwZT1cImFscGhhXCIgbWFza1VuaXRzPVwidXNlclNwYWNlT25Vc2VcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+XG4gICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiByeD1cIjEyXCIgZmlsbD1cIiM2NTY1RjJcIi8+XG4gICAgICAgIDwvbWFzaz5cbiAgICAgICAgPGcgbWFzaz1cInVybCgjbWFzazApXCI+XG4gICAgICAgICAgICA8cGF0aCBmaWxsUnVsZT1cImV2ZW5vZGRcIiBjbGlwUnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyIDBDNS4zNzI1OCAwIDAgNS4zNzI1OCAwIDEyQzAgMTguNjI3NCA1LjM3MjU4IDI0IDEyIDI0QzE4LjYyNzQgMjQgMjQgMTguNjI3NCAyNCAxMkMyNCA1LjM3MjU4IDE4LjYyNzQgMCAxMiAwWk00IDguNDkxMjNDNCA2LjAxMDc5IDcuMDE2MTkgNCAxMC43MzY4IDRIMTEuNjE5QzE2LjI0NzcgNCAyMCA2LjUwMTUyIDIwIDkuNTg3M0MyMCAxMi4zOTI2IDE2LjU4ODggMTQuNjY2NyAxMi4zODEgMTQuNjY2N0gxMS41Nzg5QzcuMzkzMjEgMTQuNjY2NyA0IDEyLjQwNDUgNCA5LjYxNDAzVjguNDkxMjNaXCIgZmlsbD1cIiM2NTY1RjJcIi8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTcgMTguNzE0M0M3IDE5LjQyNDQgNy41NzU2MyAyMCA4LjI4NTcxIDIwSDE1LjVDMTYuMzI4NCAyMCAxNyAxOS4zMjg0IDE3IDE4LjVWMTguNUMxNyAxNy42NzE2IDE2LjMyODQgMTcgMTUuNSAxN0g4LjcxNDI5QzcuNzY3NTEgMTcgNyAxNy43Njc1IDcgMTguNzE0M1YxOC43MTQzWlwiIGZpbGw9XCIjRkZFNDJFXCIvPlxuICAgICAgICA8L2c+XG4gICAgPC9zdmc+XG4pO1xuXG5leHBvcnQgY29uc3QgbWVkaWEgPSAoXG4gICAgPHN2ZyB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxtYXNrIGlkPVwicGF0aC0xLW91dHNpZGUtMVwiIG1hc2tVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgeD1cIi0yXCIgeT1cIi0yXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsbD1cImJsYWNrXCI+XG4gICAgICAgICAgICA8cmVjdCBmaWxsPVwid2hpdGVcIiB4PVwiLTJcIiB5PVwiLTJcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIi8+XG4gICAgICAgICAgICA8cGF0aCBmaWxsUnVsZT1cImV2ZW5vZGRcIiBjbGlwUnVsZT1cImV2ZW5vZGRcIiBkPVwiTTE4IDBDOC4wNTg4OCAwIDAgOC4wNTg4OCAwIDE4QzAgMjcuOTQxMSA4LjA1ODg4IDM2IDE4IDM2QzI3Ljk0MTEgMzYgMzYgMjcuOTQxMSAzNiAxOEMzNiA4LjA1ODg4IDI3Ljk0MTEgMCAxOCAwWk0yMy40NzM3IDI1QzIwLjQ1MDcgMjUgMTggMjIuNTQ5MyAxOCAxOS41MjYzVjE4LjgwOTVDMTggMTUuMDQ4NyAyMS4wNDg3IDEyIDI0LjgwOTUgMTJDMjguMjI4NCAxMiAzMSAxNC43NzE2IDMxIDE4LjE5MDVWMTguODQyMUMzMSAyMi4yNDMgMjguMjQzIDI1IDI0Ljg0MjEgMjVIMjMuNDczN1pcIi8+XG4gICAgICAgIDwvbWFzaz5cbiAgICAgICAgPHBhdGggZmlsbFJ1bGU9XCJldmVub2RkXCIgY2xpcFJ1bGU9XCJldmVub2RkXCIgZD1cIk0xOCAwQzguMDU4ODggMCAwIDguMDU4ODggMCAxOEMwIDI3Ljk0MTEgOC4wNTg4OCAzNiAxOCAzNkMyNy45NDExIDM2IDM2IDI3Ljk0MTEgMzYgMThDMzYgOC4wNTg4OCAyNy45NDExIDAgMTggMFpNMjMuNDczNyAyNUMyMC40NTA3IDI1IDE4IDIyLjU0OTMgMTggMTkuNTI2M1YxOC44MDk1QzE4IDE1LjA0ODcgMjEuMDQ4NyAxMiAyNC44MDk1IDEyQzI4LjIyODQgMTIgMzEgMTQuNzcxNiAzMSAxOC4xOTA1VjE4Ljg0MjFDMzEgMjIuMjQzIDI4LjI0MyAyNSAyNC44NDIxIDI1SDIzLjQ3MzdaXCIgZmlsbD1cIiM2NTY1RjJcIi8+XG4gICAgICAgIDxwYXRoIGQ9XCJNMiAxOEMyIDkuMTYzNDQgOS4xNjM0NCAyIDE4IDJWLTJDNi45NTQzMSAtMiAtMiA2Ljk1NDMxIC0yIDE4SDJaTTE4IDM0QzkuMTYzNDQgMzQgMiAyNi44MzY2IDIgMThILTJDLTIgMjkuMDQ1NyA2Ljk1NDMxIDM4IDE4IDM4VjM0Wk0zNCAxOEMzNCAyNi44MzY2IDI2LjgzNjYgMzQgMTggMzRWMzhDMjkuMDQ1NyAzOCAzOCAyOS4wNDU3IDM4IDE4SDM0Wk0xOCAyQzI2LjgzNjYgMiAzNCA5LjE2MzQ0IDM0IDE4SDM4QzM4IDYuOTU0MzEgMjkuMDQ1NyAtMiAxOCAtMlYyWk0xNiAxOS41MjYzQzE2IDIzLjY1MzkgMTkuMzQ2MSAyNyAyMy40NzM3IDI3VjIzQzIxLjU1NTIgMjMgMjAgMjEuNDQ0OCAyMCAxOS41MjYzSDE2Wk0xNiAxOC44MDk1VjE5LjUyNjNIMjBWMTguODA5NUgxNlpNMjQuODA5NSAxMEMxOS45NDQyIDEwIDE2IDEzLjk0NDIgMTYgMTguODA5NUgyMEMyMCAxNi4xNTMzIDIyLjE1MzMgMTQgMjQuODA5NSAxNFYxMFpNMzMgMTguMTkwNUMzMyAxMy42NjcgMjkuMzMzIDEwIDI0LjgwOTUgMTBWMTRDMjcuMTIzOSAxNCAyOSAxNS44NzYxIDI5IDE4LjE5MDVIMzNaTTMzIDE4Ljg0MjFWMTguMTkwNUgyOVYxOC44NDIxSDMzWk0yNC44NDIxIDI3QzI5LjM0NzYgMjcgMzMgMjMuMzQ3NiAzMyAxOC44NDIxSDI5QzI5IDIxLjEzODQgMjcuMTM4NCAyMyAyNC44NDIxIDIzVjI3Wk0yMy40NzM3IDI3SDI0Ljg0MjFWMjNIMjMuNDczN1YyN1pcIiBmaWxsPVwid2hpdGVcIiBtYXNrPVwidXJsKCNwYXRoLTEtb3V0c2lkZS0xKVwiLz5cbiAgICAgICAgPHBhdGggZmlsbFJ1bGU9XCJldmVub2RkXCIgY2xpcFJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMiAzMEM4LjY4NjI5IDMwIDYgMjcuMzEzNyA2IDI0VjE0QzYgOS41ODE3MiA5LjU4MTcyIDYgMTQgNkgxNkMxOC43MjggNiAyMC45NDU4IDguMTg0NzUgMjAuOTk5IDEwLjlDMTguMDM4OCAxMi4zNDcxIDE2IDE1LjM4NzggMTYgMTguOTA0OFYxOS44NDIxQzE2IDIyLjk0ODQgMTcuOTc4NiAyNS41OTI1IDIwLjc0NDMgMjYuNTgyOUMyMC4wODIxIDI4LjU2ODUgMTguMjA4MiAzMCAxNiAzMEgxMlpcIiBmaWxsPVwiI0ZGRTQyRVwiLz5cbiAgICA8L3N2Zz5cbik7XG5cbmV4cG9ydCBjb25zdCBzbGlkZXNob3cgPSAoXG4gICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxtYXNrIGlkPVwibWFzazBcIiBtYXNrLXR5cGU9XCJhbHBoYVwiIG1hc2tVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPlxuICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcng9XCIxMlwiIGZpbGw9XCIjNjU2NUYyXCIvPlxuICAgICAgICA8L21hc2s+XG4gICAgICAgIDxnIG1hc2s9XCJ1cmwoI21hc2swKVwiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0wIDEyQzAgNS4zNzI1OCA1LjM3MjU4IDAgMTIgMFYwQzE4LjYyNzQgMCAyNCA1LjM3MjU4IDI0IDEyVjEyQzI0IDE4LjYyNzQgMTguNjI3NCAyNCAxMiAyNFYyNEM1LjM3MjU4IDI0IDAgMTguNjI3NCAwIDEyVjEyWlwiIGZpbGw9XCIjNjU2NUYyXCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xNy4zOTgyIDguOTkyODNDMTcuODgzMSA5LjM5MjgyIDE3Ljg4MzEgMTAuMTM1OCAxNy4zOTgyIDEwLjUzNTdMMTQuOTY3MyAxMi41NDA3QzE0LjMxNSAxMy4wNzg3IDEzLjMzMSAxMi42MTQ3IDEzLjMzMSAxMS43NjkyVjcuNzU5MzNDMTMuMzMxIDYuOTEzODYgMTQuMzE1IDYuNDQ5OTIgMTQuOTY3MyA2Ljk4Nzg4TDE3LjM5ODIgOC45OTI4M1pcIiBmaWxsPVwid2hpdGVcIi8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTYuNjAxODQgOC45OTI4M0M2LjExNjg5IDkuMzkyODIgNi4xMTY4OSAxMC4xMzU4IDYuNjAxODQgMTAuNTM1N0w5LjAzMjcyIDEyLjU0MDdDOS42ODQ5NiAxMy4wNzg3IDEwLjY2OSAxMi42MTQ3IDEwLjY2OSAxMS43NjkyVjcuNzU5MzNDMTAuNjY5IDYuOTEzODYgOS42ODQ5NiA2LjQ0OTkyIDkuMDMyNzIgNi45ODc4OEw2LjYwMTg0IDguOTkyODNaXCIgZmlsbD1cIndoaXRlXCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk03IDE4LjI3NTFDNyAxOC44MDMzIDcuNDI4MTggMTkuMjMxNCA3Ljk1NjM3IDE5LjIzMTRIOC4yMTcyQzguNzc3NCAxOS4yMzE0IDkuMjMxNTQgMTguNzc3MyA5LjIzMTU0IDE4LjIxNzFWMTcuODU4MkM5LjIzMTU0IDE3LjM4NDIgOC44NDcyNyAxNi45OTk5IDguMzczMjUgMTYuOTk5OUg4LjI3NTE3QzcuNTcwOTEgMTYuOTk5OSA3IDE3LjU3MDggNyAxOC4yNzUxVjE4LjI3NTFaXCIgZmlsbD1cIiNGRkU0MkVcIi8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjcxOTIgMTguMjc1MUMxMC43MTkyIDE4LjgwMzMgMTEuMTQ3NCAxOS4yMzE0IDExLjY3NTYgMTkuMjMxNEgxMS45MzY0QzEyLjQ5NjYgMTkuMjMxNCAxMi45NTA4IDE4Ljc3NzMgMTIuOTUwOCAxOC4yMTcxVjE3Ljg1ODJDMTIuOTUwOCAxNy4zODQyIDEyLjU2NjUgMTYuOTk5OSAxMi4wOTI1IDE2Ljk5OTlIMTEuOTk0NEMxMS4yOTAxIDE2Ljk5OTkgMTAuNzE5MiAxNy41NzA4IDEwLjcxOTIgMTguMjc1MVYxOC4yNzUxWlwiIGZpbGw9XCIjRkZFNDJFXCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xNC40Mzg1IDE4LjI3NTFDMTQuNDM4NSAxOC44MDMzIDE0Ljg2NjcgMTkuMjMxNCAxNS4zOTQ4IDE5LjIzMTRIMTUuNjU1N0MxNi4yMTU5IDE5LjIzMTQgMTYuNjcgMTguNzc3MyAxNi42NyAxOC4yMTcxVjE3Ljg1ODJDMTYuNjcgMTcuMzg0MiAxNi4yODU3IDE2Ljk5OTkgMTUuODExNyAxNi45OTk5SDE1LjcxMzZDMTUuMDA5NCAxNi45OTk5IDE0LjQzODUgMTcuNTcwOCAxNC40Mzg1IDE4LjI3NTFWMTguMjc1MVpcIiBmaWxsPVwiI0ZGRTQyRVwiLz5cbiAgICAgICAgPC9nPlxuICAgIDwvc3ZnPlxuKVxuXG5leHBvcnQgY29uc3QgYWxpZ25Cb3R0b20gPSAoXG4gICAgPFNWRyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICA8UGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIiAvPlxuICAgICAgICA8UGF0aCBkPVwiTTE2IDEzaC0zVjNoLTJ2MTBIOGw0IDQgNC00ek00IDE5djJoMTZ2LTJINHpcIiAvPlxuICAgIDwvU1ZHPlxuKTtcblxuZXhwb3J0IGNvbnN0IGFsaWduQ2VudGVyID0gKFxuICAgIDxTVkcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgPFBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIgLz5cbiAgICAgICAgPFBhdGggZD1cIk04IDE5aDN2NGgydi00aDNsLTQtNC00IDR6bTgtMTRoLTNWMWgtMnY0SDhsNCA0IDQtNHpNNCAxMXYyaDE2di0ySDR6XCJcbiAgICAgICAgLz5cbiAgICA8L1NWRz5cbik7XG5cbmV4cG9ydCBjb25zdCBhbGlnblRvcCA9IChcbiAgICA8U1ZHIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgIDxQYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMFYwelwiIC8+XG4gICAgICAgIDxQYXRoIGQ9XCJNOCAxMWgzdjEwaDJWMTFoM2wtNC00LTQgNHpNNCAzdjJoMTZWM0g0elwiIC8+XG4gICAgPC9TVkc+XG4pO1xuXG5leHBvcnQgY29uc3QgYWxpZ25tZW50ID0gKFxuICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aCBkPVwiTTE1LjU0IDUuNTRMMTMuNzcgNy4zTDEyIDUuNTRMMTAuMjMgNy4zTDguNDYgNS41NEwxMiAyTDE1LjU0IDUuNTRaTTE4LjQ2IDE1LjU0TDE2LjcgMTMuNzdMMTguNDYgMTJMMTYuNyAxMC4yM0wxOC40NiA4LjQ2TDIyIDEyTDE4LjQ2IDE1LjU0Wk04LjQ2IDE4LjQ2TDEwLjIzIDE2LjdMMTIgMTguNDZMMTMuNzcgMTYuN0wxNS41NCAxOC40NkwxMiAyMkw4LjQ2IDE4LjQ2Wk01LjU0IDguNDZMNy4zIDEwLjIzTDUuNTQgMTJMNy4zIDEzLjc3TDUuNTQgMTUuNTRMMiAxMkw1LjU0IDguNDZaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgICAgPHBhdGggZD1cIk0xMiAxNUMxMy42NTY5IDE1IDE1IDEzLjY1NjkgMTUgMTJDMTUgMTAuMzQzMSAxMy42NTY5IDkgMTIgOUMxMC4zNDMxIDkgOSAxMC4zNDMxIDkgMTJDOSAxMy42NTY5IDEwLjM0MzEgMTUgMTIgMTVaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICA8L3N2Zz5cbik7XG5cbmV4cG9ydCBjb25zdCBpbnZlcnQgPSAoXG4gICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNMjAgMTUuMzA5OUwyMy4zMSAxMS45OTk5TDIwIDguNjg5OTRWMy45OTk5NEgxNS4zMUwxMiAwLjY4OTk0MUw4LjY5IDMuOTk5OTRINFY4LjY4OTk0TDAuNjkwMDAyIDExLjk5OTlMNCAxNS4zMDk5VjE5Ljk5OTlIOC42OUwxMiAyMy4zMDk5TDE1LjMxIDE5Ljk5OTlIMjBWMTUuMzA5OVpNMTIgMTcuOTk5OVY1Ljk5OTk0QzE1LjMxIDUuOTk5OTQgMTggOC42ODk5NCAxOCAxMS45OTk5QzE4IDE1LjMwOTkgMTUuMzEgMTcuOTk5OSAxMiAxNy45OTk5WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgPC9zdmc+XG4pO1xuXG5leHBvcnQgY29uc3Qgc3dhcCA9IChcbiAgICA8c3ZnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPlxuICAgICAgICA8cGF0aCBkPSdNMTggMkwyMCA2SDE4TDE2IDJIMTNMMTUgNkgxM0wxMSAySDEwQzkuNDY5NTcgMiA4Ljk2MDg2IDIuMjEwNzEgOC41ODU3OSAyLjU4NTc5QzguMjEwNzEgMi45NjA4NiA4IDMuNDY5NTcgOCA0VjE0QzggMTQuNTMwNCA4LjIxMDcxIDE1LjAzOTEgOC41ODU3OSAxNS40MTQyQzguOTYwODYgMTUuNzg5MyA5LjQ2OTU3IDE2IDEwIDE2SDIwQzIwLjUzMDQgMTYgMjEuMDM5MSAxNS43ODkzIDIxLjQxNDIgMTUuNDE0MkMyMS43ODkzIDE1LjAzOTEgMjIgMTQuNTMwNCAyMiAxNFYySDE4Wk0yMCAxNEgxMFY0LjRMMTEuOCA4SDIwVjE0WicgZmlsbD0nY3VycmVudENvbG9yJyAvPlxuICAgICAgICA8cGF0aCBkPSdNMTQgMjBINFYxMEg3VjhINEMzLjQ2OTU3IDggMi45NjA4NiA4LjIxMDcxIDIuNTg1NzkgOC41ODU3OUMyLjIxMDcxIDguOTYwODYgMiA5LjQ2OTU3IDIgMTBWMjBDMiAyMC41MzA0IDIuMjEwNzEgMjEuMDM5MSAyLjU4NTc5IDIxLjQxNDJDMi45NjA4NiAyMS43ODkzIDMuNDY5NTcgMjIgNCAyMkgxNEMxNC41MzA0IDIyIDE1LjAzOTEgMjEuNzg5MyAxNS40MTQyIDIxLjQxNDJDMTUuNzg5MyAyMS4wMzkxIDE2IDIwLjUzMDQgMTYgMjBWMTdIMTRWMjBaJyBmaWxsPSdjdXJyZW50Q29sb3InIC8+XG4gICAgICAgIDxwYXRoIGQ9J001IDE5SDEzTDExLjQxIDE3SDkuMjRMOC40IDE4LjFMNyAxNi4zTDUgMTlaJyBmaWxsPSdjdXJyZW50Q29sb3InIC8+XG4gICAgPC9zdmc+XG4pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2ljb25zLmpzIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIElTX1dSQVAgPSB0eXBlICYgJGV4cG9ydC5XO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV07XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIga2V5LCBvd24sIG91dDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAob3duICYmIGhhcyhleHBvcnRzLCBrZXkpKSBjb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uIChDKSB7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQykge1xuICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEMoKTtcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYgKElTX1BST1RPKSB7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYgKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0pIGhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzXG4vLyBtb2R1bGUgaWQgPSA5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzXG4vLyBtb2R1bGUgaWQgPSAxMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvYXNzaWduXCIpO1xuXG52YXIgX2Fzc2lnbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3NpZ24pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBfYXNzaWduMi5kZWZhdWx0IHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcy5qc1xuLy8gbW9kdWxlIGlkID0gMTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanNcbi8vIG1vZHVsZSBpZCA9IDEzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gMTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanNcbi8vIG1vZHVsZSBpZCA9IDE1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzXG4vLyBtb2R1bGUgaWQgPSAxNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanNcbi8vIG1vZHVsZSBpZCA9IDE3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gMThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSAxOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qc1xuLy8gbW9kdWxlIGlkID0gMjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qc1xuLy8gbW9kdWxlIGlkID0gMjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyYXRvcnMuanNcbi8vIG1vZHVsZSBpZCA9IDIyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanNcbi8vIG1vZHVsZSBpZCA9IDIzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanNcbi8vIG1vZHVsZSBpZCA9IDI0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBMYXlvdXRQYW5lbCBmcm9tICcuL2xheW91dC1wYW5lbCc7XG5pbXBvcnQgUGFyYWxsYXhQYW5lbCBmcm9tICcuL3BhcmFsbGF4LXBhbmVsJztcblxuaW1wb3J0IHtcblx0R2FsbGVyeVByZXZpZXcsXG5cdEdhbGxlcnlQbGFjZWhvbGRlcixcbn0gZnJvbSAnLi9nYWxsZXJ5LW9wdGlvbnMnO1xuXG5pbXBvcnQge1xuXHRDb2xvckNvbnRyb2xzLFxuXHRDb2xvclBhbmVsLFxuXHRDb2xvclRvb2xiYXIsXG5cdE92ZXJsYXlDb250cm9sc1xufSBmcm9tICcuL2NvbG9yLWNvbnRyb2xzJztcblxuaW1wb3J0IHtcblx0QWxpZ25tZW50Q29udHJvbHMsXG5cdEFsaWdubWVudFRvb2xiYXJcbn0gZnJvbSAnLi9hbGlnbm1lbnQtY29udHJvbHMnO1xuXG5pbXBvcnQge1xuXHRIZWlnaHRQYW5lbCxcblx0U2Nyb2xsSW5kaWNhdG9yUGFuZWxcbn0gZnJvbSAnLi9oZWlnaHQtY29udHJvbHMnO1xuXG5leHBvcnQge1xuXHRBbGlnbm1lbnRDb250cm9scyxcblx0QWxpZ25tZW50VG9vbGJhcixcblx0Q29sb3JDb250cm9scyxcblx0Q29sb3JQYW5lbCxcblx0Q29sb3JUb29sYmFyLFxuXHRHYWxsZXJ5UHJldmlldyxcblx0R2FsbGVyeVBsYWNlaG9sZGVyLFxuXHRIZWlnaHRQYW5lbCxcblx0TGF5b3V0UGFuZWwsXG5cdE92ZXJsYXlDb250cm9scyxcblx0UGFyYWxsYXhQYW5lbCxcblx0U2Nyb2xsSW5kaWNhdG9yUGFuZWwsXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL2luZGV4LmpzIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzXG4vLyBtb2R1bGUgaWQgPSAyNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYS1mdW5jdGlvbi5qc1xuLy8gbW9kdWxlIGlkID0gMjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzXG4vLyBtb2R1bGUgaWQgPSAyOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qc1xuLy8gbW9kdWxlIGlkID0gMjlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qc1xuLy8gbW9kdWxlIGlkID0gMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZXhwb3J0IGNvbnN0IGRlYm91bmNlID0gKGZ1bmMsIHdhaXQpID0+IHtcblx0bGV0IHRpbWVvdXQgPSBudWxsO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXM7XG5cdFx0Y29uc3QgYXJncyA9IGFyZ3VtZW50cztcblxuXHRcdGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuXHRcdFx0ZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcblx0XHR9O1xuXG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcblx0fVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy5qcyIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qc1xuLy8gbW9kdWxlIGlkID0gMzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qc1xuLy8gbW9kdWxlIGlkID0gMzNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLmpzXG4vLyBtb2R1bGUgaWQgPSAzNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAzNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzXG4vLyBtb2R1bGUgaWQgPSAzNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAzN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qc1xuLy8gbW9kdWxlIGlkID0gMzhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gMzlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLWV4dC5qc1xuLy8gbW9kdWxlIGlkID0gNDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1kZWZpbmUuanNcbi8vIG1vZHVsZSBpZCA9IDQxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanNcbi8vIG1vZHVsZSBpZCA9IDQyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9wcm9taXNlXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3Byb21pc2UuanNcbi8vIG1vZHVsZSBpZCA9IDQzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzXG4vLyBtb2R1bGUgaWQgPSA0NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ3BvLmpzXG4vLyBtb2R1bGUgaWQgPSA0NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzXG4vLyBtb2R1bGUgaWQgPSA0NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzXG4vLyBtb2R1bGUgaWQgPSA0N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9pdGVyYXRvciA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvclwiKTtcblxudmFyIF9pdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pdGVyYXRvcik7XG5cbnZhciBfc3ltYm9sID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sXCIpO1xuXG52YXIgX3N5bWJvbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1ib2wpO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIF9pdGVyYXRvcjIuZGVmYXVsdCA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIF90eXBlb2YoX2l0ZXJhdG9yMi5kZWZhdWx0KSA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihvYmopO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzXG4vLyBtb2R1bGUgaWQgPSA0OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanNcbi8vIG1vZHVsZSBpZCA9IDUwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faGlkZScpO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzXG4vLyBtb2R1bGUgaWQgPSA1MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qc1xuLy8gbW9kdWxlIGlkID0gNTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSA1M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanNcbi8vIG1vZHVsZSBpZCA9IDU0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qc1xuLy8gbW9kdWxlIGlkID0gNTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIFRPX1NUUklOR19UQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxudmFyIERPTUl0ZXJhYmxlcyA9ICgnQ1NTUnVsZUxpc3QsQ1NTU3R5bGVEZWNsYXJhdGlvbixDU1NWYWx1ZUxpc3QsQ2xpZW50UmVjdExpc3QsRE9NUmVjdExpc3QsRE9NU3RyaW5nTGlzdCwnICtcbiAgJ0RPTVRva2VuTGlzdCxEYXRhVHJhbnNmZXJJdGVtTGlzdCxGaWxlTGlzdCxIVE1MQWxsQ29sbGVjdGlvbixIVE1MQ29sbGVjdGlvbixIVE1MRm9ybUVsZW1lbnQsSFRNTFNlbGVjdEVsZW1lbnQsJyArXG4gICdNZWRpYUxpc3QsTWltZVR5cGVBcnJheSxOYW1lZE5vZGVNYXAsTm9kZUxpc3QsUGFpbnRSZXF1ZXN0TGlzdCxQbHVnaW4sUGx1Z2luQXJyYXksU1ZHTGVuZ3RoTGlzdCxTVkdOdW1iZXJMaXN0LCcgK1xuICAnU1ZHUGF0aFNlZ0xpc3QsU1ZHUG9pbnRMaXN0LFNWR1N0cmluZ0xpc3QsU1ZHVHJhbnNmb3JtTGlzdCxTb3VyY2VCdWZmZXJMaXN0LFN0eWxlU2hlZXRMaXN0LFRleHRUcmFja0N1ZUxpc3QsJyArXG4gICdUZXh0VHJhY2tMaXN0LFRvdWNoTGlzdCcpLnNwbGl0KCcsJyk7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgRE9NSXRlcmFibGVzLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gRE9NSXRlcmFibGVzW2ldO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKHByb3RvICYmICFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanNcbi8vIG1vZHVsZSBpZCA9IDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanNcbi8vIG1vZHVsZSBpZCA9IDU3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BkLmpzXG4vLyBtb2R1bGUgaWQgPSA1OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qc1xuLy8gbW9kdWxlIGlkID0gNjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDYxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190YXNrLmpzXG4vLyBtb2R1bGUgaWQgPSA2MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3BlcmZvcm0uanNcbi8vIG1vZHVsZSBpZCA9IDYzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzXG4vLyBtb2R1bGUgaWQgPSA2NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgKiBhcyBpY29ucyBmcm9tIFwiLi4vLi4vaWNvbnNcIjtcbmltcG9ydCBcIi4vc3R5bGUuc2Nzc1wiO1xuXG5pbXBvcnQgQmxvY2tIb3Jpem9udGFsQWxpZ25tZW50VG9vbGJhciBmcm9tICcuLi9ibG9jay1ob3Jpem9udGFsLWFsaWdubWVudC10b29sYmFyJztcbmltcG9ydCBCbG9ja1ZlcnRpY2FsQWxpZ25tZW50VG9vbGJhciBmcm9tICcuLi9ibG9jay12ZXJ0aWNhbC1hbGlnbm1lbnQtdG9vbGJhcic7XG5cbmNvbnN0IHsgX18gfSA9IHdwLmkxOG47XG5cbmNvbnN0IHtcblx0Q29tcG9uZW50LFxuXHRGcmFnbWVudFxufSA9IHdwLmVsZW1lbnQ7XG5cbmNvbnN0IHtcblx0RHJvcGRvd24sXG5cdEljb25CdXR0b24sXG5cdFBhbmVsUm93LFxuXHRUb29sYmFyLFxufSA9IHdwLmNvbXBvbmVudHM7XG5cbmNsYXNzIEFsaWdubWVudFRvb2xiYXIgZXh0ZW5kcyBDb21wb25lbnQge1xuXG5cdHJlbmRlcigpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRvb2xiYXIgY2xhc3NOYW1lPSdwaXhlbGdyYWRlLWhlcm8tYmxvY2stdG9vbGJhcic+XG5cdFx0XHRcdDxEcm9wZG93blxuXHRcdFx0XHRcdHBvc2l0aW9uPSdib3R0b20nXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPSdwaXhlbGdyYWRlLWhlcm8tYmxvY2stdG9vbGJhci1kcm9wZG93bidcblx0XHRcdFx0XHRjb250ZW50Q2xhc3NOYW1lPSdjb21wb25lbnRzLW5vdmEtLXBvcG92ZXInXG5cdFx0XHRcdFx0cmVuZGVyVG9nZ2xlPXsgKCB7IGlzT3Blbiwgb25Ub2dnbGUgfSApID0+IChcblx0XHRcdFx0XHRcdDxJY29uQnV0dG9uXG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyBvblRvZ2dsZSB9XG5cdFx0XHRcdFx0XHRcdGljb249eyBpY29ucy5hbGlnbm1lbnQgfVxuXHRcdFx0XHRcdFx0XHRhcmlhLWV4cGFuZGVkPXsgaXNPcGVuIH1cblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ0NvbnRlbnQgQWxpZ25tZW50JywgJ19fcGx1Z2luX3R4dGQnICkgfVxuXHRcdFx0XHRcdFx0XHRsYWJlbFBvc2l0aW9uPSdib3R0b20nXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkgfVxuXHRcdFx0XHRcdGZvY3VzT25Nb3VudD17IGZhbHNlIH1cblx0XHRcdFx0XHRyZW5kZXJDb250ZW50PXsgKCB7IG9uQ2xvc2UgfSApID0+IDxGcmFnbWVudD5cblx0XHRcdFx0XHRcdDxBbGlnbm1lbnRDb250cm9scyB7IC4uLnRoaXMucHJvcHMgfSAvPlxuXHRcdFx0XHRcdDwvRnJhZ21lbnQ+IH1cblx0XHRcdFx0Lz5cblx0XHRcdDwvVG9vbGJhcj5cblxuXHRcdClcblx0fVxufVxuXG5jbGFzcyBBbGlnbm1lbnRDb250cm9scyBleHRlbmRzIENvbXBvbmVudCB7XG5cblx0cmVuZGVyKCkge1xuXG5cdFx0Y29uc3Qge1xuXHRcdFx0YXR0cmlidXRlczoge1xuXHRcdFx0XHRhcHBseU1pbmltdW1IZWlnaHRCbG9jayxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWdubWVudCxcblx0XHRcdFx0dmVydGljYWxBbGlnbm1lbnRcblx0XHRcdH0sXG5cdFx0XHRzZXRBdHRyaWJ1dGVzXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8UGFuZWxSb3c+XG5cdFx0XHRcdFx0PHNwYW4+eyBfXyggJ0hvcml6b250YWwnLCAnX19wbHVnaW5fdHh0ZCcgKSB9PC9zcGFuPlxuXHRcdFx0XHRcdDxCbG9ja0hvcml6b250YWxBbGlnbm1lbnRUb29sYmFyXG5cdFx0XHRcdFx0XHR2YWx1ZT17aG9yaXpvbnRhbEFsaWdubWVudH1cblx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtob3Jpem9udGFsQWxpZ25tZW50ID0+IHtcblx0XHRcdFx0XHRcdFx0d3AuZGF0YS5zZWxlY3QoJ2NvcmUvYmxvY2stZWRpdG9yJykuZ2V0U2VsZWN0ZWRCbG9jaygpLmlubmVyQmxvY2tzLm1hcCggYmxvY2sgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHdwLmRhdGEuZGlzcGF0Y2goICdjb3JlL2Jsb2NrLWVkaXRvcicgKS51cGRhdGVCbG9ja0F0dHJpYnV0ZXMoIGJsb2NrLmNsaWVudElkLCB7IGFsaWduOiBob3Jpem9udGFsQWxpZ25tZW50IH0gKTtcblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7IGhvcml6b250YWxBbGlnbm1lbnQgfSApXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvUGFuZWxSb3c+XG5cdFx0XHRcdHsgYXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2sgJiYgPFBhbmVsUm93PlxuXHRcdFx0XHRcdDxzcGFuPnsgX18oICdWZXJ0aWNhbCcsICdfX3BsdWdpbl90eHRkJyApIH08L3NwYW4+XG5cdFx0XHRcdFx0PEJsb2NrVmVydGljYWxBbGlnbm1lbnRUb29sYmFyXG5cdFx0XHRcdFx0XHR2YWx1ZT17dmVydGljYWxBbGlnbm1lbnR9XG5cdFx0XHRcdFx0XHRvbkNoYW5nZT17dmVydGljYWxBbGlnbm1lbnQgPT4gc2V0QXR0cmlidXRlcygge3ZlcnRpY2FsQWxpZ25tZW50fSApfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvUGFuZWxSb3c+IH1cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KVxuXHR9XG59XG5cbmV4cG9ydCB7XG5cdEFsaWdubWVudENvbnRyb2xzLFxuXHRBbGlnbm1lbnRUb29sYmFyLFxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL2FsaWdubWVudC1jb250cm9scy9pbmRleC5qcyIsImNvbnN0IHtcblx0Q29tcG9uZW50XG59ID0gd3AuZWxlbWVudDtcblxuLy8gVGFrZSBpbiBhIGNvbXBvbmVudCBhcyBhcmd1bWVudCBXcmFwcGVkQ29tcG9uZW50XG5jb25zdCB3aXRoUGFyYWxsYXggPSBmdW5jdGlvbiggV3JhcHBlZENvbXBvbmVudCApIHtcblxuXHQvLyBBbmQgcmV0dXJuIGEgbmV3IGFub255bW91cyBjb21wb25lbnRcblx0cmV0dXJuIGNsYXNzIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuXHRcdGNvbnN0cnVjdG9yKCkge1xuXHRcdFx0c3VwZXIoIC4uLmFyZ3VtZW50cyApO1xuXG5cdFx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0XHR3aW5kb3dXaWR0aDogd2luZG93LmlubmVyV2lkdGgsXG5cdFx0XHRcdHdpbmRvd0hlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuXHRcdFx0XHRwcm9ncmVzczogMC41LFxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnVwZGF0ZUhhbmRsZXIgPSB0aGlzLnVwZGF0ZURpbWVuc2lvbnMuYmluZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdGNvbXBvbmVudERpZE1vdW50KCkge1xuXHRcdFx0Y29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZWRpdC1wb3N0LWxheW91dF9fY29udGVudCcpWzBdO1xuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy51cGRhdGVIYW5kbGVyICk7XG5cdFx0XHRzY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLnVwZGF0ZUhhbmRsZXIgKTtcblx0XHRcdHRoaXMudXBkYXRlRGltZW5zaW9ucygpO1xuXHRcdH1cblxuXHRcdGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuXHRcdFx0Y29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZWRpdC1wb3N0LWxheW91dF9fY29udGVudCcpWzBdO1xuXHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwicmVzaXplXCIsIHRoaXMudXBkYXRlSGFuZGxlciApO1xuXHRcdFx0c2Nyb2xsQ29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwic2Nyb2xsXCIsIHRoaXMudXBkYXRlSGFuZGxlciApO1xuXHRcdH1cblxuXHRcdHVwZGF0ZURpbWVuc2lvbnMoKSB7XG5cdFx0XHRjb25zdCBzY3JvbGxDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdlZGl0LXBvc3QtbGF5b3V0X19jb250ZW50JylbMF07XG5cdFx0XHRjb25zdCBjb250YWluZXJCb3ggPSB0aGlzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdGNvbnN0IHByb2dyZXNzID0gKCB0aGlzLnN0YXRlLndpbmRvd0hlaWdodCAtIGNvbnRhaW5lckJveC55ICkgLyAoIHRoaXMuc3RhdGUud2luZG93SGVpZ2h0ICsgdGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0ICk7XG5cdFx0XHRjb25zdCBhY3R1YWxQcm9ncmVzcyA9IE1hdGgubWF4KCBNYXRoLm1pbiggcHJvZ3Jlc3MsIDEgKSwgMCApO1xuXG5cdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0d2luZG93V2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuXHRcdFx0XHR3aW5kb3dIZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcblx0XHRcdFx0c2Nyb2xsVG9wOiBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wLFxuXHRcdFx0XHRwcm9ncmVzczogYWN0dWFsUHJvZ3Jlc3MsXG5cdFx0XHRcdGRpbWVuc2lvbnM6IHtcblx0XHRcdFx0XHR3aWR0aDogdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGgsXG5cdFx0XHRcdFx0aGVpZ2h0OiB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG5cdFx0XHRcdFx0dG9wOiBjb250YWluZXJCb3gueSxcblx0XHRcdFx0fSxcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGdldFBhcmFsbGF4U3R5bGVzKCkge1xuXG5cdFx0XHRjb25zdCB7XG5cdFx0XHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdFx0XHRlbmFibGVQYXJhbGxheCxcblx0XHRcdFx0XHRwYXJhbGxheEFtb3VudCxcblx0XHRcdFx0XHRwYXJhbGxheEN1c3RvbUFtb3VudCxcblx0XHRcdFx0fVxuXHRcdFx0fSA9IHRoaXMucHJvcHM7XG5cblx0XHRcdGlmICggISBlbmFibGVQYXJhbGxheCApIHtcblx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgYWN0dWFsUGFyYWxsYXhBbW91bnQgPSBwYXJhbGxheEFtb3VudCA9PT0gJ2N1c3RvbScgPyBwYXJhbGxheEN1c3RvbUFtb3VudCA6IHBhcnNlSW50KCBwYXJhbGxheEFtb3VudCwgMTAgKTtcblx0XHRcdGFjdHVhbFBhcmFsbGF4QW1vdW50ID0gTWF0aC5tYXgoIE1hdGgubWluKCAxLCBhY3R1YWxQYXJhbGxheEFtb3VudCAvIDEwMCApLCAwICk7XG5cblx0XHRcdGNvbnN0IHtcblx0XHRcdFx0ZGltZW5zaW9ucyxcblx0XHRcdFx0d2luZG93SGVpZ2h0LFxuXHRcdFx0XHRwcm9ncmVzc1xuXHRcdFx0fSA9IHRoaXMuc3RhdGU7XG5cblx0XHRcdGNvbnN0IG5ld0hlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0ICogKDEgLSBhY3R1YWxQYXJhbGxheEFtb3VudCkgKyB3aW5kb3dIZWlnaHQgKiBhY3R1YWxQYXJhbGxheEFtb3VudDtcblx0XHRcdGNvbnN0IHNjYWxlID0gbmV3SGVpZ2h0IC8gZGltZW5zaW9ucy5oZWlnaHQ7XG5cdFx0XHRjb25zdCBvZmZzZXRZID0gZGltZW5zaW9ucy5oZWlnaHQgKiAoIDEgLSBzY2FsZSApIC8gMjtcblx0XHRcdGNvbnN0IG1vdmUgPSAoIHdpbmRvd0hlaWdodCArIGRpbWVuc2lvbnMuaGVpZ2h0ICkgKiAoIHByb2dyZXNzIC0gMC41ICkgKiBhY3R1YWxQYXJhbGxheEFtb3VudDtcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aGVpZ2h0OiBuZXdIZWlnaHQsXG5cdFx0XHRcdHRyYW5zaXRpb246ICdub25lJyxcblx0XHRcdFx0dHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsJyArICggbW92ZSArIG9mZnNldFkgKSArICdweCknXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJlbmRlcigpIHtcblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJub3ZhLW1hc2tcIiByZWY9eyBlbCA9PiAoIHRoaXMuY29udGFpbmVyID0gZWwgKSB9PlxuXHRcdFx0XHRcdHsgdGhpcy5zdGF0ZS5kaW1lbnNpb25zICYmIDxXcmFwcGVkQ29tcG9uZW50IHsgLi4udGhpcy5wcm9wcyB9IHN0eWxlPXsgdGhpcy5nZXRQYXJhbGxheFN0eWxlcygpIH0gLz4gfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdClcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFBhcmFsbGF4O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbXBvbmVudHMvd2l0aC1wYXJhbGxheC9pbmRleC5qcyIsImltcG9ydCBcIi4vc2Nzcy9zdHlsZS5zY3NzXCI7XG5pbXBvcnQgXCIuL3Njc3MvZWRpdG9yLnNjc3NcIjtcblxuaW1wb3J0IFwiLi9ibG9ja3MvaGVyb1wiO1xuaW1wb3J0IFwiLi9ibG9ja3MvbWVkaWFcIjtcbmltcG9ydCBcIi4vYmxvY2tzL3NsaWRlc2hvd1wiO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2VkaXRvci5qcyIsIi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCAqIGFzIGljb25zIGZyb20gJy4uLy4uL2ljb25zJztcbmltcG9ydCBlZGl0IGZyb20gJy4vZWRpdCc7XG5cbi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG5jb25zdCB7IF9fIH0gPSB3cC5pMThuO1xuY29uc3QgeyByZWdpc3RlckJsb2NrVHlwZSwgfSA9IHdwLmJsb2NrcztcbmNvbnN0IHsgSW5uZXJCbG9ja3MgfSA9IHdwLmJsb2NrRWRpdG9yO1xuXG5leHBvcnQgZGVmYXVsdCByZWdpc3RlckJsb2NrVHlwZSggJ25vdmFibG9ja3MvaGVybycsXG5cdHtcblx0XHR0aXRsZTogX18oICdIZXJvIG9mIHRoZSBHYWxheHknLCAnX19wbHVnaW5fdHh0ZCcgKSxcblx0XHRkZXNjcmlwdGlvbjogX18oICdBIGdyZWF0IHdheSB0byBnZXQgeW91ciB2aXNpdG9ycyBhY3F1YWludGVkIHdpdGggeW91ciBjb250ZW50LicsICdfX3BsdWdpbl90eHRkJyApLFxuXHRcdGNhdGVnb3J5OiAnbm92YS1ibG9ja3MnLFxuXHRcdGljb246IGljb25zLmhlcm8sXG5cdFx0ZWRpdCxcblx0XHRzYXZlKCkge1xuXHRcdFx0cmV0dXJuIDxJbm5lckJsb2Nrcy5Db250ZW50Lz5cblx0XHR9LFxuXHRcdGdldEVkaXRXcmFwcGVyUHJvcHMoKSB7XG5cdFx0XHRjb25zdCBzZXR0aW5ncyA9IHdwLmRhdGEuc2VsZWN0KCAnY29yZS9ibG9jay1lZGl0b3InICkuZ2V0U2V0dGluZ3MoKTtcblx0XHRcdHJldHVybiBzZXR0aW5ncy5hbGlnbldpZGUgPyB7XG5cdFx0XHRcdCdkYXRhLWFsaWduJzogJ2Z1bGwnXG5cdFx0XHR9IDoge31cblx0XHR9LFxuXHR9XG4pXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYmxvY2tzL2hlcm8vaW5kZXguanMiLCJpbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuaW1wb3J0IHtcblx0SGVpZ2h0UGFuZWwsXG5cdExheW91dFBhbmVsLFxuXHRQYXJhbGxheFBhbmVsLFxuXHRTY3JvbGxJbmRpY2F0b3JQYW5lbCxcbn0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHNcIjtcblxuaW1wb3J0IEhlcm9QcmV2aWV3IGZyb20gJy4vcHJldmlldyc7XG5pbXBvcnQgSGVyb0Jsb2NrQ29udHJvbHMgZnJvbSAnLi9jb250cm9scyc7XG5cbmNvbnN0IHsgX18gfSA9IHdwLmkxOG47XG5cbmNvbnN0IHtcblx0SW5zcGVjdG9yQ29udHJvbHMsXG59ID0gd3AuYmxvY2tFZGl0b3I7XG5cbmNvbnN0IHtcblx0Q29tcG9uZW50LFxuXHRGcmFnbWVudFxufSA9IHdwLmVsZW1lbnQ7XG5cbmNvbnN0IGVkaXRvckRhdGEgPSB3cC5kYXRhLnNlbGVjdCggJ2NvcmUvYmxvY2stZWRpdG9yJyApO1xuXG5jb25zdCB1cGRhdGVCbG9ja3MgPSAoIGF0dHJpYnV0ZXMgKSA9PiB7XG5cdGNvbnN0IGJsb2NrcyA9IGVkaXRvckRhdGEuZ2V0QmxvY2tzKCk7XG5cblx0YmxvY2tzLmZpbHRlciggYmxvY2sgPT4ge1xuXHRcdHJldHVybiBibG9jay5uYW1lID09PSAnbm92YWJsb2Nrcy9oZXJvJztcblx0fSApLmZpbHRlciggKCBibG9jaywgaGVyb0Jsb2NrSW5kZXggKSA9PiB7XG5cdFx0Y29uc3QgeyBhcHBseU1pbmltdW1IZWlnaHQsIHNjcm9sbEluZGljYXRvciB9ID0geyAuLi5ibG9jay5hdHRyaWJ1dGVzLCAuLi5hdHRyaWJ1dGVzIH07XG5cdFx0Y29uc3QgYXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2sgPSBhcHBseU1pbmltdW1IZWlnaHQgPT09ICdmaXJzdCcgJiYgaGVyb0Jsb2NrSW5kZXggPT09IDAgfHwgYXBwbHlNaW5pbXVtSGVpZ2h0ID09PSAnYWxsJztcblx0XHRjb25zdCBzY3JvbGxJbmRpY2F0b3JCbG9jayA9IHNjcm9sbEluZGljYXRvciA9PT0gdHJ1ZSAmJiBoZXJvQmxvY2tJbmRleCA9PT0gMDtcblx0XHRjb25zdCBibG9ja0luZGV4ID0gYmxvY2tzLmZpbmRJbmRleCggdGVzdEJsb2NrID0+IGJsb2NrID09PSB0ZXN0QmxvY2sgKTtcblxuXHRcdHdwLmRhdGEuZGlzcGF0Y2goICdjb3JlL2Jsb2NrLWVkaXRvcicgKS51cGRhdGVCbG9ja0F0dHJpYnV0ZXMoIGJsb2NrLmNsaWVudElkLCB7XG5cdFx0XHRibG9ja0luZGV4LFxuXHRcdFx0YXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2ssXG5cdFx0XHRzY3JvbGxJbmRpY2F0b3JCbG9ja1xuXHRcdH0gKTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9ICk7XG5cbn1cblxubGV0IGJsb2NrTGlzdCA9IGVkaXRvckRhdGEuZ2V0QmxvY2tzKCk7XG5sZXQgZGVib3VuY2VkT25TdWJzY3JpYmUgPSBkZWJvdW5jZSgoKSA9PiB7XG5cblx0Y29uc3QgbmV3QmxvY2tMaXN0ID0gZWRpdG9yRGF0YS5nZXRCbG9ja3MoKTtcblx0bGV0IGJsb2NrTGlzdENoYW5nZWQgPSBibG9ja0xpc3QubGVuZ3RoICE9PSBuZXdCbG9ja0xpc3QubGVuZ3RoO1xuXG5cdGlmICggISBibG9ja0xpc3RDaGFuZ2VkICkge1xuXHRcdGJsb2NrTGlzdENoYW5nZWQgPSBibG9ja0xpc3Quc29tZSggKCBibG9jaywgaW5kZXggKSA9PiB7XG5cdFx0XHRyZXR1cm4gKCBibG9ja0xpc3RbaW5kZXhdLmNsaWVudElkICE9PSBuZXdCbG9ja0xpc3RbaW5kZXhdLmNsaWVudElkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBibG9ja0xpc3RDaGFuZ2VkICkge1xuXHRcdGJsb2NrTGlzdCA9IG5ld0Jsb2NrTGlzdDtcblx0XHR1cGRhdGVCbG9ja3MoKTtcblx0fVxufSwgMzApO1xuXG53cC5kYXRhLnN1YnNjcmliZSggZGVib3VuY2VkT25TdWJzY3JpYmUgKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdCBleHRlbmRzIENvbXBvbmVudCB7XG5cblx0cmVuZGVyKCkge1xuXG5cdFx0cmV0dXJuIFtcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PEhlcm9QcmV2aWV3IHsgLi4udGhpcy5wcm9wcyB9IC8+XG5cdFx0XHRcdDxIZXJvQmxvY2tDb250cm9scyB7IC4uLnRoaXMucHJvcHMgfSAvPlxuXHRcdFx0PC9GcmFnbWVudD4sXG5cdFx0XHQ8SW5zcGVjdG9yQ29udHJvbHM+XG5cdFx0XHRcdDxMYXlvdXRQYW5lbCB7IC4uLnRoaXMucHJvcHMgfSAvPlxuXHRcdFx0XHQ8SGVpZ2h0UGFuZWwgeyAuLi50aGlzLnByb3BzIH0gLz5cblx0XHRcdFx0PFNjcm9sbEluZGljYXRvclBhbmVsIHsgLi4udGhpcy5wcm9wcyB9IC8+XG5cdFx0XHRcdDxQYXJhbGxheFBhbmVsIHsgLi4udGhpcy5wcm9wcyB9IC8+XG5cdFx0XHQ8L0luc3BlY3RvckNvbnRyb2xzPlxuXHRcdF1cblx0fVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jsb2Nrcy9oZXJvL2VkaXQuanMiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXG4vLyBtb2R1bGUgaWQgPSA3MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAxOS4xLjIuOSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRQcm90b3R5cGVPZicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuICRnZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanNcbi8vIG1vZHVsZSBpZCA9IDczXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcbi8vIG1vZHVsZSBpZCA9IDc0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciAkT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gJE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1xuLy8gbW9kdWxlIGlkID0gNzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzXG4vLyBtb2R1bGUgaWQgPSA3NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvci5qc1xuLy8gbW9kdWxlIGlkID0gNzdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fd2tzLWV4dCcpLmYoJ2l0ZXJhdG9yJyk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSA3OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3N0cmluZy1hdC5qc1xuLy8gbW9kdWxlIGlkID0gNzlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jcmVhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDgwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHBzLmpzXG4vLyBtb2R1bGUgaWQgPSA4MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qc1xuLy8gbW9kdWxlIGlkID0gODJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDgzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanNcbi8vIG1vZHVsZSBpZCA9IDg0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qc1xuLy8gbW9kdWxlIGlkID0gODVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1zdGVwLmpzXG4vLyBtb2R1bGUgaWQgPSA4NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC5qc1xuLy8gbW9kdWxlIGlkID0gODdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5TeW1ib2w7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanNcbi8vIG1vZHVsZSBpZCA9IDg5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19tZXRhLmpzXG4vLyBtb2R1bGUgaWQgPSA5MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0ta2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gOTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IDkyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qc1xuLy8gbW9kdWxlIGlkID0gOTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSA5NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZS5qc1xuLy8gbW9kdWxlIGlkID0gOTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9zZXQtcHJvdG90eXBlLW9mXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXG4vLyBtb2R1bGUgaWQgPSA5NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXG4vLyBtb2R1bGUgaWQgPSA5N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAxOS4xLjMuMTkgT2JqZWN0LnNldFByb3RvdHlwZU9mKE8sIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBzZXRQcm90b3R5cGVPZjogcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0IH0pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzXG4vLyBtb2R1bGUgaWQgPSA5OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXByb3RvLmpzXG4vLyBtb2R1bGUgaWQgPSA5OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2NyZWF0ZVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvY3JlYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZScpO1xudmFyICRPYmplY3QgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gJE9iamVjdC5jcmVhdGUoUCwgRCk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDEwMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgY3JlYXRlOiByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJykgfSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qc1xuLy8gbW9kdWxlIGlkID0gMTAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvYXNzaWduXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ24uanNcbi8vIG1vZHVsZSBpZCA9IDEwM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QuYXNzaWduO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9hc3NpZ24uanNcbi8vIG1vZHVsZSBpZCA9IDEwNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanNcbi8vIG1vZHVsZSBpZCA9IDEwNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzXG4vLyBtb2R1bGUgaWQgPSAxMDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IFBhZGRpbmdDb250cm9scyBmcm9tIFwiLi9wYWRkaW5nXCI7XG5pbXBvcnQgV2lkdGhDb250cm9scyBmcm9tIFwiLi93aWR0aFwiO1xuaW1wb3J0IFwiLi9zdHlsZS5zY3NzXCI7XG5cbmNvbnN0IHsgX18gfSA9IHdwLmkxOG47XG5cbmNvbnN0IHtcblx0Q29tcG9uZW50LFxufSA9IHdwLmVsZW1lbnQ7XG5cbmNvbnN0IHtcblx0UGFuZWxCb2R5LFxufSA9IHdwLmNvbXBvbmVudHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExheW91dFBhbmVsIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0cmVuZGVyKCkge1xuXG5cdFx0cmV0dXJuIDxQYW5lbEJvZHlcblx0XHRcdGNsYXNzTmFtZT1cInBpeGVsZ3JhZGUtaGVyby1idXR0b24tZ3JvdXAtd3JhcHBlclwiXG5cdFx0XHR0aXRsZT17IF9fKCAnTGF5b3V0JywgJ19fcGx1Z2luX3R4dGQnICkgfVxuXHRcdFx0aW5pdGlhbE9wZW49eyB0cnVlIH0+XG5cblx0XHRcdDxQYWRkaW5nQ29udHJvbHMgeyAuLi50aGlzLnByb3BzIH0gLz5cblx0XHRcdDxXaWR0aENvbnRyb2xzIHsgLi4udGhpcy5wcm9wcyB9IC8+XG5cblx0XHRcdHsgdGhpcy5wcm9wcy5jaGlsZHJlbiB9XG5cdFx0PC9QYW5lbEJvZHk+XG5cdH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL2xheW91dC1wYW5lbC9pbmRleC5qcyIsImNvbnN0IHsgX18gfSA9IHdwLmkxOG47XG5cbmNvbnN0IHtcblx0Q29tcG9uZW50LFxuXHRGcmFnbWVudFxufSA9IHdwLmVsZW1lbnQ7XG5cbmNvbnN0IHtcblx0QnV0dG9uLFxuXHRCdXR0b25Hcm91cCxcblx0UmFuZ2VDb250cm9sLFxufSA9IHdwLmNvbXBvbmVudHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhZGRpbmdDb250cm9scyBleHRlbmRzIENvbXBvbmVudCB7XG5cdHJlbmRlcigpIHtcblxuXHRcdGNvbnN0IHtcblx0XHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdFx0Y29udGVudFBhZGRpbmcsXG5cdFx0XHRcdGNvbnRlbnRQYWRkaW5nQ3VzdG9tLFxuXHRcdFx0fSxcblx0XHRcdHNldEF0dHJpYnV0ZXNcblx0XHR9ID0gdGhpcy5wcm9wcztcblxuXHRcdGNvbnN0IGNvbnRlbnRQYWRkaW5nT3B0aW9ucyA9IFtcblx0XHRcdHsgbGFiZWw6IF9fKCAnU21hbGwnLCAnX19wbHVnaW5fdHh0ZCcgKSwgdmFsdWU6ICdzbWFsbCcgfSxcblx0XHRcdHsgbGFiZWw6IF9fKCAnTWVkaXVtJywgJ19fcGx1Z2luX3R4dGQnICksIHZhbHVlOiAnbWVkaXVtJyB9LFxuXHRcdFx0eyBsYWJlbDogX18oICdMYXJnZScsICdfX3BsdWdpbl90eHRkJyApLCB2YWx1ZTogJ2xhcmdlJyB9LFxuXHRcdFx0eyBsYWJlbDogX18oICdDdXN0b20nLCAnX19wbHVnaW5fdHh0ZCcgKSwgdmFsdWU6ICdjdXN0b20nIH0sXG5cdFx0XTtcblxuXHRcdHJldHVybiA8RnJhZ21lbnQ+XG5cdFx0XHQ8bGFiZWw+eyBfXyggJ0NvbnRlbnQgUGFkZGluZycsICdfX3BsdWdpbl90eHRkJykgfTwvbGFiZWw+XG5cdFx0XHQ8QnV0dG9uR3JvdXA+XG5cdFx0XHRcdHsgY29udGVudFBhZGRpbmdPcHRpb25zLm1hcCggb3B0aW9uID0+XG5cdFx0XHRcdFx0PEJ1dHRvbiBrZXk9eyBvcHRpb24udmFsdWUgfVxuXHRcdFx0XHRcdFx0XHRpc0RlZmF1bHQ9eyBvcHRpb24udmFsdWUgIT09IGNvbnRlbnRQYWRkaW5nIH1cblx0XHRcdFx0XHQgICAgICAgIGlzUHJpbWFyeT17IG9wdGlvbi52YWx1ZSA9PT0gY29udGVudFBhZGRpbmcgfVxuXHRcdFx0XHRcdCAgICAgICAgb25DbGljaz17ICgpID0+IHsgc2V0QXR0cmlidXRlcyggeyBjb250ZW50UGFkZGluZzogb3B0aW9uLnZhbHVlIH0gKSB9IH0+XG5cdFx0XHRcdFx0XHR7IG9wdGlvbi5sYWJlbCB9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdCkgfVxuXHRcdFx0PC9CdXR0b25Hcm91cD5cblx0XHRcdHsgJ2N1c3RvbScgPT09IGNvbnRlbnRQYWRkaW5nICYmIDxSYW5nZUNvbnRyb2xcblx0XHRcdFx0dmFsdWU9eyBjb250ZW50UGFkZGluZ0N1c3RvbSB9XG5cdFx0XHRcdG9uQ2hhbmdlPXsgY29udGVudFBhZGRpbmdDdXN0b20gPT4gc2V0QXR0cmlidXRlcyggeyBjb250ZW50UGFkZGluZ0N1c3RvbSB9ICkgfVxuXHRcdFx0XHRtaW49ezB9XG5cdFx0XHRcdG1heD17MjV9XG5cdFx0XHQvPiB9XG5cdFx0PC9GcmFnbWVudD5cblx0fVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbXBvbmVudHMvbGF5b3V0LXBhbmVsL3BhZGRpbmcuanMiLCJjb25zdCB7IF9fIH0gPSB3cC5pMThuO1xuXG5jb25zdCB7XG5cdENvbXBvbmVudCxcblx0RnJhZ21lbnRcbn0gPSB3cC5lbGVtZW50O1xuXG5jb25zdCB7XG5cdEJ1dHRvbixcblx0QnV0dG9uR3JvdXAsXG5cdFJhbmdlQ29udHJvbCxcbn0gPSB3cC5jb21wb25lbnRzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWR0aENvbnRyb2xzIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0cmVuZGVyKCkge1xuXG5cdFx0Y29uc3Qge1xuXHRcdFx0YXR0cmlidXRlczoge1xuXHRcdFx0XHRjb250ZW50V2lkdGgsXG5cdFx0XHRcdGNvbnRlbnRXaWR0aEN1c3RvbSxcblx0XHRcdH0sXG5cdFx0XHRzZXRBdHRyaWJ1dGVzXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cblx0XHRjb25zdCBjb250ZW50V2lkdGhPcHRpb25zID0gW1xuXHRcdFx0eyBsYWJlbDogX18oICdGdWxsJywgJ19fcGx1Z2luX3R4dGQnICksIHZhbHVlOiAnZnVsbCcgfSxcblx0XHRcdHsgbGFiZWw6IF9fKCAnTGFyZ2UnLCAnX19wbHVnaW5fdHh0ZCcgKSwgdmFsdWU6ICdsYXJnZScgfSxcblx0XHRcdHsgbGFiZWw6IF9fKCAnTmFycm93JywgJ19fcGx1Z2luX3R4dGQnICksIHZhbHVlOiAnbmFycm93JyB9LFxuXHRcdFx0eyBsYWJlbDogX18oICdDdXN0b20nLCAnX19wbHVnaW5fdHh0ZCcgKSwgdmFsdWU6ICdjdXN0b20nIH0sXG5cdFx0XTtcblxuXHRcdHJldHVybiA8RnJhZ21lbnQ+XG5cdFx0XHQ8bGFiZWw+eyBfXyggJ0NvbnRlbnQgV2lkdGgnLCAnX19wbHVnaW5fdHh0ZCcpIH08L2xhYmVsPlxuXHRcdFx0PEJ1dHRvbkdyb3VwIGxhYmVsPVwiQ29udGVudCBXaWR0aFwiPlxuXHRcdFx0XHR7IGNvbnRlbnRXaWR0aE9wdGlvbnMubWFwKCBvcHRpb24gPT5cblx0XHRcdFx0XHQ8QnV0dG9uIGlzRGVmYXVsdD17IG9wdGlvbi52YWx1ZSAhPT0gY29udGVudFdpZHRoIH1cblx0XHRcdFx0XHQgICAgICAgIGlzUHJpbWFyeT17IG9wdGlvbi52YWx1ZSA9PT0gY29udGVudFdpZHRoIH1cblx0XHRcdFx0XHQgICAgICAgIG9uQ2xpY2s9eyAoKSA9PiB7IHNldEF0dHJpYnV0ZXMoIHsgY29udGVudFdpZHRoOiBvcHRpb24udmFsdWV9ICkgfSB9PlxuXHRcdFx0XHRcdFx0eyBvcHRpb24ubGFiZWwgfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpIH1cblx0XHRcdDwvQnV0dG9uR3JvdXA+XG5cdFx0XHR7ICdjdXN0b20nID09PSBjb250ZW50V2lkdGggJiYgPFJhbmdlQ29udHJvbFxuXHRcdFx0XHR2YWx1ZT17IGNvbnRlbnRXaWR0aEN1c3RvbSB9XG5cdFx0XHRcdG9uQ2hhbmdlPXsgY29udGVudFdpZHRoQ3VzdG9tID0+IHNldEF0dHJpYnV0ZXMoIHsgY29udGVudFdpZHRoQ3VzdG9tIH0gKSB9XG5cdFx0XHRcdG1pbj17MjB9XG5cdFx0XHRcdG1heD17OTB9XG5cdFx0XHRcdHN0ZXA9ezEwfVxuXHRcdFx0Lz4gfVxuXHRcdDwvRnJhZ21lbnQ+XG5cdH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL2xheW91dC1wYW5lbC93aWR0aC5qcyIsImNvbnN0IHsgX18gfSA9IHdwLmkxOG47XG5cbmNvbnN0IHtcblx0Q29tcG9uZW50LFxuXHRGcmFnbWVudFxufSA9IHdwLmVsZW1lbnQ7XG5cbmNvbnN0IHtcblx0UGFuZWxCb2R5LFxuXHRSYW5nZUNvbnRyb2wsXG5cdFJhZGlvQ29udHJvbCxcblx0VG9nZ2xlQ29udHJvbCxcbn0gPSB3cC5jb21wb25lbnRzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJhbGxheFBhbmVsIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0cmVuZGVyKCkge1xuXG5cdFx0Y29uc3Qge1xuXHRcdFx0YXR0cmlidXRlczoge1xuXHRcdFx0XHQvLyBwYXJhbGxheFxuXHRcdFx0XHRlbmFibGVQYXJhbGxheCxcblx0XHRcdFx0cGFyYWxsYXhBbW91bnQsXG5cdFx0XHRcdHBhcmFsbGF4Q3VzdG9tQW1vdW50LFxuXHRcdFx0fSxcblx0XHRcdHNldEF0dHJpYnV0ZXNcblx0XHR9ID0gdGhpcy5wcm9wcztcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8UGFuZWxCb2R5IHRpdGxlPXsgX18oICdQYXJhbGxheCcsICdfX3BsdWdpbl90eHRkJyApIH0gaW5pdGlhbE9wZW49eyBmYWxzZSB9PlxuXHRcdFx0XHQ8VG9nZ2xlQ29udHJvbFxuXHRcdFx0XHRcdGxhYmVsPXsgX18oICdFbmFibGUgUGFyYWxsYXggU2Nyb2xsaW5nJywgJ19fcGx1Z2luX3R4dGQnICkgfVxuXHRcdFx0XHRcdGNoZWNrZWQ9eyBlbmFibGVQYXJhbGxheCB9XG5cdFx0XHRcdFx0b25DaGFuZ2U9eyAoKSA9PiBzZXRBdHRyaWJ1dGVzKCB7IGVuYWJsZVBhcmFsbGF4OiAhIGVuYWJsZVBhcmFsbGF4IH0gKSB9XG5cdFx0XHRcdC8+XG5cdFx0XHRcdHsgISEgZW5hYmxlUGFyYWxsYXggJiZcblx0XHRcdFx0ICA8UmFkaW9Db250cm9sXG5cdFx0XHRcdFx0ICBsYWJlbD17IF9fKCAnUGFyYWxsYXggT3JiaXRhbCBTcGVlZCcsICdfX3BsdWdpbl90eHRkJyApIH1cblx0XHRcdFx0XHQgIHNlbGVjdGVkPXsgcGFyYWxsYXhBbW91bnQgfVxuXHRcdFx0XHRcdCAgb25DaGFuZ2U9eyBwYXJhbGxheEFtb3VudCA9PiB7XG5cblx0XHRcdFx0XHRcdCAgaWYgKCBwYXJhbGxheEFtb3VudCA9PT0gJ2N1c3RvbScgKSB7XG5cdFx0XHRcdFx0XHRcdCAgc2V0QXR0cmlidXRlcyggeyBwYXJhbGxheEFtb3VudCB9ICk7XG5cdFx0XHRcdFx0XHQgIH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdCAgc2V0QXR0cmlidXRlcygge1xuXHRcdFx0XHRcdFx0XHRcdCAgcGFyYWxsYXhBbW91bnQ6IHBhcmFsbGF4QW1vdW50LFxuXHRcdFx0XHRcdFx0XHRcdCAgcGFyYWxsYXhDdXN0b21BbW91bnQ6IHBhcnNlSW50KCBwYXJhbGxheEFtb3VudCwgMTAgKVxuXHRcdFx0XHRcdFx0XHQgIH0gKTtcblx0XHRcdFx0XHRcdCAgfVxuXHRcdFx0XHRcdCAgfSB9XG5cdFx0XHRcdFx0ICBvcHRpb25zPXtbXG5cdFx0XHRcdFx0XHQgIHtcblx0XHRcdFx0XHRcdFx0ICBsYWJlbDogX18oICdGYXN0IGFzIE1lcmN1cmUnLCAnX19wbHVnaW5fdHh0ZCcgKSxcblx0XHRcdFx0XHRcdFx0ICB2YWx1ZTogJzIwJ1xuXHRcdFx0XHRcdFx0ICB9LCB7XG5cdFx0XHRcdFx0XHRcdCAgbGFiZWw6IF9fKCAnTmF0dXJhbCBhcyBFYXJ0aCcsICdfX3BsdWdpbl90eHRkJyApLFxuXHRcdFx0XHRcdFx0XHQgIHZhbHVlOiAnNTAnXG5cdFx0XHRcdFx0XHQgIH0sIHtcblx0XHRcdFx0XHRcdFx0ICBsYWJlbDogX18oICdTbG93IGFzIE5lcHR1bmUnLCAnX19wbHVnaW5fdHh0ZCcgKSxcblx0XHRcdFx0XHRcdFx0ICB2YWx1ZTogJzcwJ1xuXHRcdFx0XHRcdFx0ICB9LCB7XG5cdFx0XHRcdFx0XHRcdCAgbGFiZWw6IF9fKCAnQ3VzdG9tJywgJ19fcGx1Z2luX3R4dGQnICksXG5cdFx0XHRcdFx0XHRcdCAgdmFsdWU6ICdjdXN0b20nXG5cdFx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHQgIF19XG5cdFx0XHRcdFx0ICBoZWxwPXsgX18oJ1RoZSBzcGVlZCBhdCB3aGljaCB0aGUgcGFyYWxsYXggZWZmZWN0IHJ1bnMuJywgJ19fcGx1Z2luX3R4dGQnKSB9XG5cdFx0XHRcdCAgLz5cblx0XHRcdFx0fVxuXHRcdFx0XHR7ICEhIGVuYWJsZVBhcmFsbGF4ICYmICdjdXN0b20nID09PSBwYXJhbGxheEFtb3VudCAmJiA8UmFuZ2VDb250cm9sXG5cdFx0XHRcdFx0dmFsdWU9eyBwYXJhbGxheEN1c3RvbUFtb3VudCB9XG5cdFx0XHRcdFx0b25DaGFuZ2U9eyBwYXJhbGxheEN1c3RvbUFtb3VudCA9PiBzZXRBdHRyaWJ1dGVzKCB7IHBhcmFsbGF4Q3VzdG9tQW1vdW50IH0gKSB9XG5cdFx0XHRcdFx0bWluPXsxMH1cblx0XHRcdFx0XHRtYXg9ezEwMH1cblx0XHRcdFx0XHRzdGVwPXsxMH1cblx0XHRcdFx0XHRoZWxwPXsgX18oJ0l0IHN0YXJ0cyBmcm9tIDAgd2hlbiB0aGUgaW1hZ2Ugd2lsbCBrZWVwIHdpdGggdGhlIGNvbnRlbnQgKG5vIHBhcmFsbGF4KSB1cCB0byAxMDAgd2hlbiB0aGUgaW1hZ2UgYXBwZWFycyBmaXhlZCBpbiBwbGFjZS4nLCAnX19wbHVnaW5fdHh0ZCcgKX1cblx0XHRcdFx0Lz4gfVxuXHRcdFx0PC9QYW5lbEJvZHk+XG5cdFx0KVxuXHR9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29tcG9uZW50cy9wYXJhbGxheC1wYW5lbC9pbmRleC5qcyIsImNvbnN0IHsgX18gfSA9IHdwLmkxOG47XG5cbmNvbnN0IHtcblx0Q29tcG9uZW50LFxuXHRGcmFnbWVudCxcbn0gPSB3cC5lbGVtZW50O1xuXG5jb25zdCB7XG5cdEJ1dHRvbixcblx0SWNvbkJ1dHRvbixcblx0Rm9ybUZpbGVVcGxvYWQsXG5cdFNlbGVjdENvbnRyb2wsXG59ID0gd3AuY29tcG9uZW50cztcblxuY29uc3Qge1xuXHRNZWRpYVVwbG9hZCxcblx0TWVkaWFQbGFjZWhvbGRlcixcbn0gPSB3cC5ibG9ja0VkaXRvcjtcblxuXG5jb25zdCBBTExPV0VEX01FRElBX1RZUEVTID0gWyAnaW1hZ2UnIF07XG5cbmNsYXNzIEdhbGxlcnlQbGFjZWhvbGRlciBleHRlbmRzIENvbXBvbmVudCB7XG5cblx0b25DaGFuZ2VHYWxsZXJ5KCBnYWxsZXJ5SW1hZ2VzICkge1xuXG5cdFx0Y29uc3QgcHJvbWlzZXMgPSBnYWxsZXJ5SW1hZ2VzLm1hcCggKGltYWdlLCBpbmRleCkgPT4ge1xuXHRcdFx0cmV0dXJuIHdwLmFwaVJlcXVlc3QoIHsgcGF0aDogJy93cC92Mi9tZWRpYS8nICsgaW1hZ2UuaWQgfSApLnRoZW4oIG5ld0ltYWdlID0+IHtcblx0XHRcdFx0Z2FsbGVyeUltYWdlc1tpbmRleF0gPSB7IC4uLm5ld0ltYWdlLCAuLi5pbWFnZSB9O1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblxuXHRcdFByb21pc2UuYWxsKCBwcm9taXNlcyApLnRoZW4oICgpID0+IHtcblx0XHRcdHRoaXMucHJvcHMuc2V0QXR0cmlidXRlcyggeyBnYWxsZXJ5SW1hZ2VzOiBnYWxsZXJ5SW1hZ2VzLmZpbHRlciggaW1hZ2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gISEgaW1hZ2UuaWQgJiYgISEgaW1hZ2Uuc2l6ZXMgJiYgISEgaW1hZ2Uuc2l6ZXMubGFyZ2UgJiYgISEgaW1hZ2Uuc2l6ZXMubGFyZ2UudXJsO1xuXHRcdFx0fSApIH0gKTtcblx0XHR9ICk7XG5cblx0fVxuXG5cdHJlbmRlcigpIHtcblxuXHRcdGNvbnN0IHtcblx0XHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdFx0Z2FsbGVyeUltYWdlcyxcblx0XHRcdFx0c2VsZWN0ZWQsXG5cdFx0XHRcdG9uU2VsZWN0SW1hZ2UsXG5cdFx0XHRcdG9uQ2hhbmdlLFxuXHRcdFx0fSxcblx0XHRcdHNldEF0dHJpYnV0ZXNcblx0XHR9ID0gdGhpcy5wcm9wcztcblxuXHRcdGNvbnN0IGhhc0ltYWdlcyA9ICEhIGdhbGxlcnlJbWFnZXMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZWRpYVBsYWNlaG9sZGVyXG5cdFx0XHRcdGFkZFRvR2FsbGVyeT17IGhhc0ltYWdlcyB9XG5cdFx0XHRcdGNsYXNzTmFtZT1cIlwiXG5cdFx0XHRcdGxhYmVscz17IHtcblx0XHRcdFx0XHR0aXRsZTogJycsXG5cdFx0XHRcdFx0aW5zdHJ1Y3Rpb25zOiBfXyggJ0RyYWcgaW1hZ2VzLCB1cGxvYWQgbmV3IG9uZXMgb3Igc2VsZWN0IGZpbGVzIGZyb20geW91ciBsaWJyYXJ5LicsICdfX3BsdWdpbl90eHRkJyApLFxuXHRcdFx0XHR9IH1cblx0XHRcdFx0b25TZWxlY3Q9eyB0aGlzLm9uQ2hhbmdlR2FsbGVyeS5iaW5kKCB0aGlzICkgfVxuXHRcdFx0XHRhY2NlcHQ9XCJpbWFnZS8qXCJcblx0XHRcdFx0YWxsb3dlZFR5cGVzPXsgQUxMT1dFRF9NRURJQV9UWVBFUyB9XG5cdFx0XHRcdG11bHRpcGxlXG5cdFx0XHRcdHZhbHVlPXsgaGFzSW1hZ2VzID8gZ2FsbGVyeUltYWdlcyA6IHVuZGVmaW5lZCB9XG5cdFx0XHQvPlxuXHRcdClcblx0fVxufVxuXG5jbGFzcyBHYWxsZXJ5UHJldmlldyBleHRlbmRzIENvbXBvbmVudCB7XG5cblx0cmVuZGVyKCkge1xuXG5cdFx0Y29uc3Qge1xuXHRcdFx0Z2FsbGVyeUltYWdlcyxcblx0XHRcdHNlbGVjdGVkLFxuXHRcdFx0b25TZWxlY3RJbWFnZSxcblx0XHRcdGlzU2VsZWN0ZWRcblx0XHR9ID0gdGhpcy5wcm9wcztcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8dWwgY2xhc3M9XCJub3ZhLXNsaWRlc2hvd19fZ2FsbGVyeS1lZGl0XCI+XG5cdFx0XHRcdHsgZ2FsbGVyeUltYWdlcy5tYXAoICggaW1nLCBpbmRleCApID0+IHtcblxuXHRcdFx0XHRcdGNvbnN0IGNsYXNzZXMgPSBbXG5cdFx0XHRcdFx0XHQnbm92YS1zbGlkZXNob3dfX2dhbGxlcnktaXRlbScsXG5cdFx0XHRcdFx0XTtcblxuXHRcdFx0XHRcdGlmICggc2VsZWN0ZWQgPT09IGluZGV4ICkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKCAnbm92YS1zbGlkZXNob3dfX2dhbGxlcnktaXRlbS0tYWN0aXZlJyApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8bGkga2V5PXsgaW1nLmlkIHx8IGltZy51cmwgfSBvbkNsaWNrPXsgKCkgPT4geyBvblNlbGVjdEltYWdlKCBpbmRleCApIH0gfT5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9eyBjbGFzc2VzLmpvaW4oICcgJyApIH0+XG5cdFx0XHRcdFx0XHRcdFx0PGltZyBzcmM9eyBpbWcuc2l6ZXMudGh1bWJuYWlsLnVybCB9IGFsdD1cIlwiIC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9saT5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9ICkgfVxuXHRcdFx0PC91bD5cblx0XHQpXG5cdH1cbn1cblxuZXhwb3J0IHtcblx0R2FsbGVyeVBsYWNlaG9sZGVyLFxuXHRHYWxsZXJ5UHJldmlld1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbXBvbmVudHMvZ2FsbGVyeS1vcHRpb25zL2luZGV4LmpzIiwicmVxdWlyZSgnLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9fY29yZScpLlByb21pc2U7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vcHJvbWlzZS5qc1xuLy8gbW9kdWxlIGlkID0gMTEzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnByb21pc2UuanNcbi8vIG1vZHVsZSBpZCA9IDExNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1pbnN0YW5jZS5qc1xuLy8gbW9kdWxlIGlkID0gMTE1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZm9yLW9mLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qc1xuLy8gbW9kdWxlIGlkID0gMTE4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXG4vLyBtb2R1bGUgaWQgPSAxMTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ludm9rZS5qc1xuLy8gbW9kdWxlIGlkID0gMTIwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21pY3JvdGFzay5qc1xuLy8gbW9kdWxlIGlkID0gMTIxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VzZXItYWdlbnQuanNcbi8vIG1vZHVsZSBpZCA9IDEyMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBpZiAoc2FmZSAmJiB0YXJnZXRba2V5XSkgdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICBlbHNlIGhpZGUodGFyZ2V0LCBrZXksIHNyY1trZXldKTtcbiAgfSByZXR1cm4gdGFyZ2V0O1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19yZWRlZmluZS1hbGwuanNcbi8vIG1vZHVsZSBpZCA9IDEyM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gdHlwZW9mIGNvcmVbS0VZXSA9PSAnZnVuY3Rpb24nID8gY29yZVtLRVldIDogZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtc3BlY2llcy5qc1xuLy8gbW9kdWxlIGlkID0gMTI0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZXRlY3QuanNcbi8vIG1vZHVsZSBpZCA9IDEyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdQcm9taXNlJywgeyAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKTtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgfSA6IG9uRmluYWxseSxcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHlcbiAgKTtcbn0gfSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzXG4vLyBtb2R1bGUgaWQgPSAxMjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdQcm9taXNlJywgeyAndHJ5JzogZnVuY3Rpb24gKGNhbGxiYWNrZm4pIHtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZih0aGlzKTtcbiAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gIChyZXN1bHQuZSA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59IH0pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzXG4vLyBtb2R1bGUgaWQgPSAxMjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IFwiLi9zdHlsZS5zY3NzXCI7XG5pbXBvcnQgKiBhcyBpY29ucyBmcm9tIFwiLi4vLi4vaWNvbnNcIjtcbmltcG9ydCB7QWxpZ25tZW50Q29udHJvbHN9IGZyb20gXCIuLi9pbmRleFwiO1xuXG5jb25zdCB7IF9fIH0gPSB3cC5pMThuO1xuXG5jb25zdCB7XG5cdENvbXBvbmVudCxcblx0RnJhZ21lbnRcbn0gPSB3cC5lbGVtZW50O1xuXG5jb25zdCB7XG5cdENvbG9yUGFsZXR0ZSxcblx0RHJvcGRvd24sXG5cdEljb25CdXR0b24sXG5cdFJhZGlvQ29udHJvbCxcblx0UmFuZ2VDb250cm9sLFxuXHRTZWxlY3RDb250cm9sLFxuXHRUb29sYmFyLFxufSA9IHdwLmNvbXBvbmVudHM7XG5cbmNvbnN0IHtcblx0UGFuZWxDb2xvclNldHRpbmdzLFxufSA9IHdwLmJsb2NrRWRpdG9yO1xuXG5jb25zdCBjb2xvcnMgPSBbIHtcblx0bmFtZTogX18oICdEYXJrJywgJ19fcGx1Z2luX3R4dGQnICksXG5cdGNvbG9yOiAnIzAwMCdcbn0sIHtcblx0bmFtZTogX18oICdMaWdodCcsICdfX3BsdWdpbl90eHRkJyApLFxuXHRjb2xvcjogJyNGRkYnXG59IF07XG5cbmNsYXNzIE92ZXJsYXlDb250cm9scyBleHRlbmRzIENvbXBvbmVudCB7XG5cblx0cmVuZGVyKCkge1xuXG5cdFx0Y29uc3Qge1xuXHRcdFx0YXR0cmlidXRlczoge1xuXHRcdFx0XHRvdmVybGF5RmlsdGVyU3R5bGUsXG5cdFx0XHRcdG92ZXJsYXlGaWx0ZXJTdHJlbmd0aFxuXHRcdFx0fSxcblx0XHRcdHNldEF0dHJpYnV0ZXNcblx0XHR9ID0gdGhpcy5wcm9wcztcblxuXHRcdHJldHVybiA8RnJhZ21lbnQ+XG5cdFx0XHQ8UmFkaW9Db250cm9sXG5cdFx0XHRcdGxhYmVsPXsgX18oICdPdmVybGF5IEZpbHRlciBTdHlsZScsICdfX3BsdWdpbl90eHRkJyApIH1cblx0XHRcdFx0c2VsZWN0ZWQ9eyBvdmVybGF5RmlsdGVyU3R5bGUgfVxuXHRcdFx0XHRvcHRpb25zPXsgW1xuXHRcdFx0XHRcdHsgbGFiZWw6IF9fKCAnTm9uZScsICdfX3BsdWdpbl90eHRkJyApLCB2YWx1ZTogJ25vbmUnIH0sXG5cdFx0XHRcdFx0eyBsYWJlbDogX18oICdEYXJrJywgJ19fcGx1Z2luX3R4dGQnICksIHZhbHVlOiAnZGFyaycgfSxcblx0XHRcdFx0XHR7IGxhYmVsOiBfXyggJ0xpZ2h0JywgJ19fcGx1Z2luX3R4dGQnICksIHZhbHVlOiAnbGlnaHQnIH1cblx0XHRcdFx0XSB9XG5cdFx0XHRcdG9uQ2hhbmdlPXsgb3ZlcmxheUZpbHRlclN0eWxlID0+IHNldEF0dHJpYnV0ZXMoIHsgb3ZlcmxheUZpbHRlclN0eWxlIH0gKSB9XG5cdFx0XHQvPlxuXHRcdFx0eyBvdmVybGF5RmlsdGVyU3R5bGUgIT09ICdub25lJyAmJiA8UmFuZ2VDb250cm9sXG5cdFx0XHRcdGxhYmVsPXsgX18oICdPdmVybGF5IEZpbHRlciBTdHJlbmd0aCcsICdfX3BsdWdpbl90eHRkJyApIH1cblx0XHRcdFx0dmFsdWU9eyBvdmVybGF5RmlsdGVyU3RyZW5ndGggfVxuXHRcdFx0XHRvbkNoYW5nZT17IG92ZXJsYXlGaWx0ZXJTdHJlbmd0aCA9PiBzZXRBdHRyaWJ1dGVzKCB7IG92ZXJsYXlGaWx0ZXJTdHJlbmd0aCB9ICkgfVxuXHRcdFx0XHRtaW49ezB9XG5cdFx0XHRcdG1heD17MTAwfVxuXHRcdFx0XHRzdGVwPXsxMH1cblx0XHRcdC8+IH1cblx0XHQ8L0ZyYWdtZW50PlxuXHR9XG59XG5cbmNsYXNzIENvbG9yQ29udHJvbHMgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRyZW5kZXIoKSB7XG5cblx0XHRjb25zdCB7XG5cdFx0XHRhdHRyaWJ1dGVzOiB7XG5cdFx0XHRcdGNvbnRlbnRDb2xvcixcblx0XHRcdH0sXG5cdFx0XHRzZXRBdHRyaWJ1dGVzXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cblx0XHRyZXR1cm4gPENvbG9yUGFsZXR0ZVxuXHRcdFx0Y2xhc3NOYW1lPVwibm92YS1oaWRlLWNsZWFyLWNvbG9yXCJcblx0XHRcdHZhbHVlPXsgY29udGVudENvbG9yIH1cblx0XHRcdGNvbG9ycz17IGNvbG9ycyB9XG5cdFx0XHRvbkNoYW5nZT17IGNvbnRlbnRDb2xvciA9PiBzZXRBdHRyaWJ1dGVzKCB7IGNvbnRlbnRDb2xvciB9ICkgfVxuXHRcdFx0ZGlzYWJsZUN1c3RvbUNvbG9yc1xuXHRcdC8+XG5cdH1cbn1cblxuY2xhc3MgQ29sb3JQYW5lbCBleHRlbmRzIENvbXBvbmVudCB7XG5cblx0cmVuZGVyKCkge1xuXG5cdFx0Y29uc3Qge1xuXHRcdFx0YXR0cmlidXRlczoge1xuXHRcdFx0XHRjb250ZW50Q29sb3IsXG5cdFx0XHR9LFxuXHRcdFx0c2V0QXR0cmlidXRlc1xuXHRcdH0gPSB0aGlzLnByb3BzO1xuXG5cdFx0cmV0dXJuIDxQYW5lbENvbG9yU2V0dGluZ3Ncblx0XHRcdGNsYXNzTmFtZT1cIm5vdmEtaGlkZS1jbGVhci1jb2xvclwiXG5cdFx0XHR0aXRsZT17IF9fKCAnQ29sb3IgU2V0dGluZ3MnLCAnX19wbHVnaW5fdHh0ZCcgKSB9XG5cdFx0XHRjb2xvclNldHRpbmdzPXsgW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dmFsdWU6IGNvbnRlbnRDb2xvcixcblx0XHRcdFx0XHRvbkNoYW5nZTogY29udGVudENvbG9yID0+IHNldEF0dHJpYnV0ZXMoIHsgY29udGVudENvbG9yIH0gKSxcblx0XHRcdFx0XHRsYWJlbDogX18oICdDb250ZW50IENvbG9yJywgJ19fcGx1Z2luX3R4dGQnICksXG5cdFx0XHRcdH0sXG5cdFx0XHRdIH1cblx0XHRcdGNvbG9ycz17IGNvbG9ycyB9IFxuXHRcdFx0aW5pdGlhbE9wZW49eyBmYWxzZSB9PlxuXHRcdFx0PE92ZXJsYXlDb250cm9scyB7IC4uLnRoaXMucHJvcHMgfSAvPlxuXHRcdDwvUGFuZWxDb2xvclNldHRpbmdzPlxuXHR9XG59XG5cbmNsYXNzIENvbG9yVG9vbGJhciBleHRlbmRzIENvbXBvbmVudCB7XG5cdHJlbmRlcigpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRvb2xiYXIgY2xhc3NOYW1lPSdwaXhlbGdyYWRlLWhlcm8tYmxvY2stdG9vbGJhcic+XG5cdFx0XHRcdDxEcm9wZG93blxuXHRcdFx0XHRcdHBvc2l0aW9uPSdib3R0b20nXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPSdwaXhlbGdyYWRlLWhlcm8tYmxvY2stdG9vbGJhci1kcm9wZG93bidcblx0XHRcdFx0XHRjb250ZW50Q2xhc3NOYW1lPSdjb21wb25lbnRzLW5vdmEtLXBvcG92ZXInXG5cdFx0XHRcdFx0cmVuZGVyVG9nZ2xlPXsgKCB7IGlzT3Blbiwgb25Ub2dnbGUgfSApID0+IChcblx0XHRcdFx0XHRcdDxJY29uQnV0dG9uXG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyBvblRvZ2dsZSB9XG5cdFx0XHRcdFx0XHRcdGljb249eyBpY29ucy5pbnZlcnQgfVxuXHRcdFx0XHRcdFx0XHRhcmlhLWV4cGFuZGVkPXsgaXNPcGVuIH1cblx0XHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ0NvbG9yIE9wdGlvbnMnLCAnX19wbHVnaW5fdHh0ZCcgKSB9XG5cdFx0XHRcdFx0XHRcdGxhYmVsUG9zaXRpb249J2JvdHRvbSdcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSB9XG5cdFx0XHRcdFx0Zm9jdXNPbk1vdW50PXsgZmFsc2UgfVxuXHRcdFx0XHRcdHJlbmRlckNvbnRlbnQ9eyAoIHsgb25DbG9zZSB9ICkgPT4gPEZyYWdtZW50PlxuXHRcdFx0XHRcdFx0PENvbG9yQ29udHJvbHMgeyAuLi50aGlzLnByb3BzIH0gLz5cblx0XHRcdFx0XHRcdDxPdmVybGF5Q29udHJvbHMgeyAuLi50aGlzLnByb3BzIH0gLz5cblx0XHRcdFx0XHQ8L0ZyYWdtZW50PiB9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L1Rvb2xiYXI+XG5cdFx0KVxuXHR9XG59XG5cbmV4cG9ydCB7XG5cdENvbG9yQ29udHJvbHMsXG5cdENvbG9yUGFuZWwsXG5cdENvbG9yVG9vbGJhcixcblx0T3ZlcmxheUNvbnRyb2xzLFxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbXBvbmVudHMvY29sb3ItY29udHJvbHMvaW5kZXguanMiLCIvKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuY29uc3QgeyBfXyB9ID0gd3AuaTE4bjtcbmNvbnN0IHsgVG9vbGJhciB9ID0gd3AuY29tcG9uZW50cztcbmNvbnN0IHsgd2l0aFZpZXdwb3J0TWF0Y2ggfSA9IHdwLnZpZXdwb3J0O1xuY29uc3QgeyB3aXRoU2VsZWN0IH0gPSB3cC5kYXRhO1xuY29uc3QgeyBjb21wb3NlLCBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9ID0gd3AuY29tcG9zZTtcbmNvbnN0IHsgY3JlYXRlQ29udGV4dCB9ID0gd3AuZWxlbWVudDtcbmNvbnN0IHsgQ29uc3VtZXIsIFByb3ZpZGVyIH0gPSBjcmVhdGVDb250ZXh0KCB7XG5cdG5hbWU6ICcnLFxuXHRpc1NlbGVjdGVkOiBmYWxzZSxcblx0Zm9jdXNlZEVsZW1lbnQ6IG51bGwsXG5cdHNldEZvY3VzZWRFbGVtZW50OiAoKSA9PiB7fSxcblx0Y2xpZW50SWQ6IG51bGwsXG59ICk7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCAqIGFzIGljb25zIGZyb20gXCIuLi8uLi9pY29uc1wiO1xuXG5jb25zdCBCTE9DS19BTElHTk1FTlRTX0NPTlRST0xTID0ge1xuXHRsZWZ0OiB7XG5cdFx0aWNvbjogaWNvbnMuYWxpZ25Ub3AsXG5cdFx0dGl0bGU6IF9fKCAnQWxpZ24gTGVmdCcsICdfX3BsdWdpbl90eHRkJyApLFxuXHR9LFxuXHRjZW50ZXI6IHtcblx0XHRpY29uOiBpY29ucy5hbGlnbkNlbnRlcixcblx0XHR0aXRsZTogX18oICdBbGlnbiBNaWRkbGUnLCAnX19wbHVnaW5fdHh0ZCcgKSxcblx0fSxcblx0cmlnaHQ6IHtcblx0XHRpY29uOiBpY29ucy5hbGlnbkJvdHRvbSxcblx0XHR0aXRsZTogX18oICdBbGlnbiBSaWdodCcsICdfX3BsdWdpbl90eHRkJyApLFxuXHR9LFxufTtcblxuY29uc3QgREVGQVVMVF9DT05UUk9MUyA9IFsgJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0JyBdO1xuY29uc3QgREVGQVVMVF9DT05UUk9MID0gJ2NlbnRlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBCbG9ja0hvcml6b250YWxBbGlnbm1lbnRUb29sYmFyKCB7IGlzQ29sbGFwc2VkLCB2YWx1ZSwgb25DaGFuZ2UsIGNvbnRyb2xzID0gREVGQVVMVF9DT05UUk9MUyB9ICkge1xuXHRmdW5jdGlvbiBhcHBseU9yVW5zZXQoIGFsaWduICkge1xuXHRcdHJldHVybiAoKSA9PiBvbkNoYW5nZSggdmFsdWUgPT09IGFsaWduID8gdW5kZWZpbmVkIDogYWxpZ24gKTtcblx0fVxuXG5cdGNvbnN0IGFjdGl2ZUFsaWdubWVudCA9IEJMT0NLX0FMSUdOTUVOVFNfQ09OVFJPTFNbIHZhbHVlIF07XG5cdGNvbnN0IGRlZmF1bHRBbGlnbm1lbnRDb250cm9sID0gQkxPQ0tfQUxJR05NRU5UU19DT05UUk9MU1sgREVGQVVMVF9DT05UUk9MIF07XG5cblx0cmV0dXJuIChcblx0XHQ8VG9vbGJhclxuXHRcdFx0aXNDb2xsYXBzZWQ9eyBpc0NvbGxhcHNlZCB9XG5cdFx0XHRpY29uPXsgYWN0aXZlQWxpZ25tZW50ID8gYWN0aXZlQWxpZ25tZW50Lmljb24gOiBkZWZhdWx0QWxpZ25tZW50Q29udHJvbC5pY29uIH1cblx0XHRcdGNvbnRyb2xzPXtcblx0XHRcdFx0Y29udHJvbHMubWFwKCAoIGNvbnRyb2wgKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdC4uLkJMT0NLX0FMSUdOTUVOVFNfQ09OVFJPTFNbIGNvbnRyb2wgXSxcblx0XHRcdFx0XHRcdGlzQWN0aXZlOiB2YWx1ZSA9PT0gY29udHJvbCxcblx0XHRcdFx0XHRcdG9uQ2xpY2s6IGFwcGx5T3JVbnNldChjb250cm9sKSxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZTogXCJwaXhlbGdyYWRlLWhlcm8taG9yaXpvbnRhbC1hbGlnbm1lbnQtYnV0dG9uXCJcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IClcblx0XHRcdH1cblx0XHQvPlxuXHQpXG59XG5cbi8vIEB0b2RvIHJlbW92ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhbmQgdXNlIGNvcmUgbWV0aG9kIHdoZW4gZXhwb3NlZCB0aHJvdWdoIHRoZSBhcGlcbmNvbnN0IHdpdGhCbG9ja0VkaXRDb250ZXh0ID0gKCBtYXBDb250ZXh0VG9Qcm9wcyApID0+IGNyZWF0ZUhpZ2hlck9yZGVyQ29tcG9uZW50KCAoIE9yaWdpbmFsQ29tcG9uZW50ICkgPT4ge1xuXHRyZXR1cm4gKCBwcm9wcyApID0+IChcblx0XHQ8Q29uc3VtZXI+XG5cdFx0XHR7ICggY29udGV4dCApID0+IChcblx0XHRcdFx0PE9yaWdpbmFsQ29tcG9uZW50XG5cdFx0XHRcdFx0eyAuLi5wcm9wcyB9XG5cdFx0XHRcdFx0eyAuLi5tYXBDb250ZXh0VG9Qcm9wcyggY29udGV4dCwgcHJvcHMgKSB9XG5cdFx0XHRcdC8+XG5cdFx0XHQpIH1cblx0XHQ8L0NvbnN1bWVyPlxuXHQpO1xufSwgJ3dpdGhCbG9ja0VkaXRDb250ZXh0JyApO1xuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKFxuXHR3aXRoQmxvY2tFZGl0Q29udGV4dCggKCB7IGNsaWVudElkIH0gKSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsaWVudElkLFxuXHRcdH07XG5cdH0gKSxcblx0d2l0aFZpZXdwb3J0TWF0Y2goIHsgaXNMYXJnZVZpZXdwb3J0OiAnbWVkaXVtJyB9ICksXG5cdHdpdGhTZWxlY3QoICggc2VsZWN0LCB7IGNsaWVudElkLCBpc0xhcmdlVmlld3BvcnQsIGlzQ29sbGFwc2VkIH0gKSA9PiB7XG5cdFx0Y29uc3QgeyBnZXRCbG9ja1Jvb3RDbGllbnRJZCwgZ2V0U2V0dGluZ3MgfSA9IHNlbGVjdCggJ2NvcmUvYmxvY2stZWRpdG9yJyApO1xuXHRcdHJldHVybiB7XG5cdFx0XHRpc0NvbGxhcHNlZDogaXNDb2xsYXBzZWQgfHwgISBpc0xhcmdlVmlld3BvcnQgfHwgKFxuXHRcdFx0XHQhIGdldFNldHRpbmdzKCkuaGFzRml4ZWRUb29sYmFyICYmXG5cdFx0XHRcdGdldEJsb2NrUm9vdENsaWVudElkKCBjbGllbnRJZCApXG5cdFx0XHQpLFxuXHRcdH07XG5cdH0gKSxcbikoIEJsb2NrSG9yaXpvbnRhbEFsaWdubWVudFRvb2xiYXIgKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL2Jsb2NrLWhvcml6b250YWwtYWxpZ25tZW50LXRvb2xiYXIvaW5kZXguanMiLCIvKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuY29uc3QgeyBfeCB9ID0gd3AuaTE4bjtcbmNvbnN0IHsgVG9vbGJhciB9ID0gd3AuY29tcG9uZW50cztcbmNvbnN0IHsgd2l0aFZpZXdwb3J0TWF0Y2ggfSA9IHdwLnZpZXdwb3J0O1xuY29uc3QgeyB3aXRoU2VsZWN0IH0gPSB3cC5kYXRhO1xuY29uc3QgeyBjb21wb3NlLCBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCB9ID0gd3AuY29tcG9zZTtcbmNvbnN0IHsgY3JlYXRlQ29udGV4dCB9ID0gd3AuZWxlbWVudDtcbmNvbnN0IHsgQ29uc3VtZXIsIFByb3ZpZGVyIH0gPSBjcmVhdGVDb250ZXh0KCB7XG5cdG5hbWU6ICcnLFxuXHRpc1NlbGVjdGVkOiBmYWxzZSxcblx0Zm9jdXNlZEVsZW1lbnQ6IG51bGwsXG5cdHNldEZvY3VzZWRFbGVtZW50OiAoKSA9PiB7fSxcblx0Y2xpZW50SWQ6IG51bGwsXG59ICk7XG5cbi8qKlxuICogSW50ZXJuYWwgZGVwZW5kZW5jaWVzXG4gKi9cbmltcG9ydCAqIGFzIGljb25zIGZyb20gXCIuLi8uLi9pY29uc1wiO1xuXG5jb25zdCBCTE9DS19BTElHTk1FTlRTX0NPTlRST0xTID0ge1xuXHR0b3A6IHtcblx0XHRpY29uOiBpY29ucy5hbGlnblRvcCxcblx0XHR0aXRsZTogX3goICdWZXJ0aWNhbGx5IEFsaWduIFRvcCcsICdCbG9jayB2ZXJ0aWNhbCBhbGlnbm1lbnQgc2V0dGluZycgKSxcblx0fSxcblx0Y2VudGVyOiB7XG5cdFx0aWNvbjogaWNvbnMuYWxpZ25DZW50ZXIsXG5cdFx0dGl0bGU6IF94KCAnVmVydGljYWxseSBBbGlnbiBNaWRkbGUnLCAnQmxvY2sgdmVydGljYWwgYWxpZ25tZW50IHNldHRpbmcnICksXG5cdH0sXG5cdGJvdHRvbToge1xuXHRcdGljb246IGljb25zLmFsaWduQm90dG9tLFxuXHRcdHRpdGxlOiBfeCggJ1ZlcnRpY2FsbHkgQWxpZ24gQm90dG9tJywgJ0Jsb2NrIHZlcnRpY2FsIGFsaWdubWVudCBzZXR0aW5nJyApLFxuXHR9LFxufTtcblxuY29uc3QgREVGQVVMVF9DT05UUk9MUyA9IFsgJ3RvcCcsICdjZW50ZXInLCAnYm90dG9tJyBdO1xuY29uc3QgREVGQVVMVF9DT05UUk9MID0gJ3RvcCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBCbG9ja1ZlcnRpY2FsQWxpZ25tZW50VG9vbGJhciggeyBpc0NvbGxhcHNlZCwgdmFsdWUsIG9uQ2hhbmdlLCBjb250cm9scyA9IERFRkFVTFRfQ09OVFJPTFMgfSApIHtcblx0ZnVuY3Rpb24gYXBwbHlPclVuc2V0KCBhbGlnbiApIHtcblx0XHRyZXR1cm4gKCkgPT4gb25DaGFuZ2UoIHZhbHVlID09PSBhbGlnbiA/IHVuZGVmaW5lZCA6IGFsaWduICk7XG5cdH1cblxuXHRjb25zdCBhY3RpdmVBbGlnbm1lbnQgPSBCTE9DS19BTElHTk1FTlRTX0NPTlRST0xTWyB2YWx1ZSBdO1xuXHRjb25zdCBkZWZhdWx0QWxpZ25tZW50Q29udHJvbCA9IEJMT0NLX0FMSUdOTUVOVFNfQ09OVFJPTFNbIERFRkFVTFRfQ09OVFJPTCBdO1xuXG5cdHJldHVybiAoXG5cdFx0PFRvb2xiYXJcblx0XHRcdGlzQ29sbGFwc2VkPXsgaXNDb2xsYXBzZWQgfVxuXHRcdFx0aWNvbj17IGFjdGl2ZUFsaWdubWVudCA/IGFjdGl2ZUFsaWdubWVudC5pY29uIDogZGVmYXVsdEFsaWdubWVudENvbnRyb2wuaWNvbiB9XG5cdFx0XHRsYWJlbD17IF94KCAnQ2hhbmdlIEFsaWdubWVudCcsICdCbG9jayB2ZXJ0aWNhbCBhbGlnbm1lbnQgc2V0dGluZyBsYWJlbCcgKSB9XG5cdFx0XHRjb250cm9scz17XG5cdFx0XHRcdGNvbnRyb2xzLm1hcCggKCBjb250cm9sICkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHQuLi5CTE9DS19BTElHTk1FTlRTX0NPTlRST0xTWyBjb250cm9sIF0sXG5cdFx0XHRcdFx0XHRpc0FjdGl2ZTogdmFsdWUgPT09IGNvbnRyb2wsXG5cdFx0XHRcdFx0XHRvbkNsaWNrOiBhcHBseU9yVW5zZXQoIGNvbnRyb2wgKSxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IClcblx0XHRcdH1cblx0XHQvPlxuXHQpO1xufVxuXG4vLyBAdG9kbyByZW1vdmUgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIHVzZSBjb3JlIG1ldGhvZCB3aGVuIGV4cG9zZWQgdGhyb3VnaCB0aGUgYXBpXG5jb25zdCB3aXRoQmxvY2tFZGl0Q29udGV4dCA9ICggbWFwQ29udGV4dFRvUHJvcHMgKSA9PiBjcmVhdGVIaWdoZXJPcmRlckNvbXBvbmVudCggKCBPcmlnaW5hbENvbXBvbmVudCApID0+IHtcblx0cmV0dXJuICggcHJvcHMgKSA9PiAoXG5cdFx0PENvbnN1bWVyPlxuXHRcdFx0eyAoIGNvbnRleHQgKSA9PiAoXG5cdFx0XHRcdDxPcmlnaW5hbENvbXBvbmVudFxuXHRcdFx0XHRcdHsgLi4ucHJvcHMgfVxuXHRcdFx0XHRcdHsgLi4ubWFwQ29udGV4dFRvUHJvcHMoIGNvbnRleHQsIHByb3BzICkgfVxuXHRcdFx0XHQvPlxuXHRcdFx0KSB9XG5cdFx0PC9Db25zdW1lcj5cblx0KTtcbn0sICd3aXRoQmxvY2tFZGl0Q29udGV4dCcgKTtcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9Xb3JkUHJlc3MvZ3V0ZW5iZXJnL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL2Jsb2NrLWVkaXRvci9zcmMvY29tcG9uZW50cy9ibG9jay12ZXJ0aWNhbC1hbGlnbm1lbnQtdG9vbGJhci9SRUFETUUubWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY29tcG9zZShcblx0d2l0aEJsb2NrRWRpdENvbnRleHQoICggeyBjbGllbnRJZCB9ICkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbGllbnRJZCxcblx0XHR9O1xuXHR9ICksXG5cdHdpdGhWaWV3cG9ydE1hdGNoKCB7IGlzTGFyZ2VWaWV3cG9ydDogJ21lZGl1bScgfSApLFxuXHR3aXRoU2VsZWN0KCAoIHNlbGVjdCwgeyBjbGllbnRJZCwgaXNMYXJnZVZpZXdwb3J0LCBpc0NvbGxhcHNlZCB9ICkgPT4ge1xuXHRcdGNvbnN0IHsgZ2V0QmxvY2tSb290Q2xpZW50SWQsIGdldFNldHRpbmdzIH0gPSBzZWxlY3QoICdjb3JlL2Jsb2NrLWVkaXRvcicgKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aXNDb2xsYXBzZWQ6IGlzQ29sbGFwc2VkIHx8ICEgaXNMYXJnZVZpZXdwb3J0IHx8IChcblx0XHRcdFx0ISBnZXRTZXR0aW5ncygpLmhhc0ZpeGVkVG9vbGJhciAmJlxuXHRcdFx0XHRnZXRCbG9ja1Jvb3RDbGllbnRJZCggY2xpZW50SWQgKVxuXHRcdFx0KSxcblx0XHR9O1xuXHR9ICksXG4pKCBCbG9ja1ZlcnRpY2FsQWxpZ25tZW50VG9vbGJhciApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbXBvbmVudHMvYmxvY2stdmVydGljYWwtYWxpZ25tZW50LXRvb2xiYXIvaW5kZXguanMiLCJpbXBvcnQge2RlYm91bmNlfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcblxuY29uc3QgeyBfXyB9ID0gd3AuaTE4bjtcblxuY29uc3Qge1xuXHRDb21wb25lbnQsXG59ID0gd3AuZWxlbWVudDtcblxuY29uc3Qge1xuXHRQYW5lbEJvZHksXG5cdFJhZGlvQ29udHJvbCxcblx0VG9nZ2xlQ29udHJvbCxcbn0gPSB3cC5jb21wb25lbnRzO1xuXG5jb25zdCB7XG5cdGRpc3BhdGNoLFxuXHRzZWxlY3QsXG5cdHN1YnNjcmliZSxcbn0gPSB3cC5kYXRhO1xuXG5sZXQgYmxvY2tMaXN0ID0gc2VsZWN0KCAnY29yZS9ibG9jay1lZGl0b3InICkuZ2V0QmxvY2tzKCk7XG5cbmxldCBkZWJvdW5jZWRPblN1YnNjcmliZSA9IGRlYm91bmNlKCgpID0+IHtcblx0bGV0IG5ld0Jsb2NrTGlzdCA9IHNlbGVjdCggJ2NvcmUvYmxvY2stZWRpdG9yJyApLmdldEJsb2NrcygpO1xuXHRsZXQgYmxvY2tMaXN0Q2hhbmdlZCA9IGJsb2NrTGlzdC5sZW5ndGggIT09IG5ld0Jsb2NrTGlzdC5sZW5ndGg7XG5cblx0aWYgKCAhIGJsb2NrTGlzdENoYW5nZWQgKSB7XG5cdFx0YmxvY2tMaXN0Q2hhbmdlZCA9IGJsb2NrTGlzdC5zb21lKCAoIGJsb2NrLCBpbmRleCApID0+IHtcblx0XHRcdHJldHVybiAoIGJsb2NrTGlzdFtpbmRleF0uY2xpZW50SWQgIT09IG5ld0Jsb2NrTGlzdFtpbmRleF0uY2xpZW50SWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGJsb2NrTGlzdENoYW5nZWQgKSB7XG5cdFx0YmxvY2tMaXN0ID0gbmV3QmxvY2tMaXN0O1xuXHRcdHVwZGF0ZUJsb2NrcygpO1xuXHR9XG59LCAzMCk7XG5cbnN1YnNjcmliZSggZGVib3VuY2VkT25TdWJzY3JpYmUgKTtcblxuY29uc3QgdXBkYXRlQmxvY2tzID0gKCBhdHRyaWJ1dGVzICkgPT4ge1xuXG5cdHNlbGVjdCggJ2NvcmUvYmxvY2stZWRpdG9yJyApLmdldEJsb2NrcygpLmZpbHRlciggYmxvY2sgPT4ge1xuXHRcdHJldHVybiBibG9jay5uYW1lID09PSAnbm92YWJsb2Nrcy9oZXJvJztcblx0fSApLmZpbHRlciggKCBibG9jaywgaW5kZXggKSA9PiB7XG5cdFx0Y29uc3QgeyBhcHBseU1pbmltdW1IZWlnaHQsIHNjcm9sbEluZGljYXRvciB9ID0geyAuLi5ibG9jay5hdHRyaWJ1dGVzLCAuLi5hdHRyaWJ1dGVzIH07XG5cdFx0Y29uc3QgYXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2sgPSBhcHBseU1pbmltdW1IZWlnaHQgPT09ICdmaXJzdCcgJiYgaW5kZXggPT09IDAgfHwgYXBwbHlNaW5pbXVtSGVpZ2h0ID09PSAnYWxsJztcblx0XHRjb25zdCBzY3JvbGxJbmRpY2F0b3JCbG9jayA9IHNjcm9sbEluZGljYXRvciA9PT0gdHJ1ZSAmJiBpbmRleCA9PT0gMDtcblxuXHRcdGRpc3BhdGNoKCAnY29yZS9ibG9jay1lZGl0b3InICkudXBkYXRlQmxvY2tBdHRyaWJ1dGVzKCBibG9jay5jbGllbnRJZCwge1xuXHRcdFx0YXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2ssXG5cdFx0XHRzY3JvbGxJbmRpY2F0b3JCbG9ja1xuXHRcdH0gKTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9ICk7XG5cbn1cblxuY2xhc3MgSGVpZ2h0UGFuZWwgZXh0ZW5kcyBDb21wb25lbnQge1xuXG5cdHJlbmRlcigpIHtcblxuXHRcdGNvbnN0IHtcblx0XHRcdGF0dHJpYnV0ZXMsXG5cdFx0XHRzZXRBdHRyaWJ1dGVzXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cblx0XHRjb25zdCBhcHBseU1pbmltdW1IZWlnaHQgPSAhISBhdHRyaWJ1dGVzLmFwcGx5TWluaW11bUhlaWdodCA/IGF0dHJpYnV0ZXMuYXBwbHlNaW5pbXVtSGVpZ2h0IDogJ2ZpcnN0Jztcblx0XHRjb25zdCBtaW5IZWlnaHQgPSAhISBhdHRyaWJ1dGVzLm1pbkhlaWdodCA/IGF0dHJpYnV0ZXMubWluSGVpZ2h0IDogNzU7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFBhbmVsQm9keSB0aXRsZT17IF9fKCAnSGVpZ2h0JywgJ19fcGx1Z2luX3R4dGQnICkgfSBpbml0aWFsT3Blbj17IGZhbHNlIH0+XG5cdFx0XHRcdDxSYWRpb0NvbnRyb2xcblx0XHRcdFx0XHRsYWJlbD17IF9fKCAnQXBwbHkgTWluaW11bSBIZWlnaHQnLCAnX19wbHVnaW5fdHh0ZCcgKSB9XG5cdFx0XHRcdFx0c2VsZWN0ZWQ9eyBhcHBseU1pbmltdW1IZWlnaHQgfVxuXHRcdFx0XHRcdG9uQ2hhbmdlPXsgYXBwbHlNaW5pbXVtSGVpZ2h0ID0+IHtcblx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHsgYXBwbHlNaW5pbXVtSGVpZ2h0IH0gKTtcblx0XHRcdFx0XHRcdHVwZGF0ZUJsb2NrcyggeyBhcHBseU1pbmltdW1IZWlnaHQgfSApO1xuXHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdG9wdGlvbnM9e1xuXHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBfXyggJ05vbmUnLCAnX19wbHVnaW5fdHh0ZCcgKSwgdmFsdWU6ICdub25lJyB9LFxuXHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBfXyggJ0ZpcnN0IEhlcm8gQmxvY2sgT25seScsICdfX3BsdWdpbl90eHRkJyApLCB2YWx1ZTogJ2ZpcnN0JyB9LFxuXHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBfXyggJ0FsbCBIZXJvIEJsb2NrcycsICdfX3BsdWdpbl90eHRkJyApLCB2YWx1ZTogJ2FsbCcgfVxuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0Lz5cblx0XHRcdFx0eyAnbm9uZScgIT09IGFwcGx5TWluaW11bUhlaWdodCAmJlxuXHRcdFx0XHQgICAgPFJhZGlvQ29udHJvbFxuXHRcdFx0XHRcdFx0bGFiZWw9eyBfXyggJ01pbmltdW0gSGVpZ2h0JywgJ19fcGx1Z2luX3R4dGQnICkgfVxuXHRcdFx0XHRcdFx0c2VsZWN0ZWQ9eyBtaW5IZWlnaHQgfVxuXHRcdFx0XHRcdFx0b25DaGFuZ2U9eyBtaW5IZWlnaHQgPT4ge1xuXHRcdFx0XHRcdFx0XHRzZXRBdHRyaWJ1dGVzKCB7IG1pbkhlaWdodDogcGFyc2VJbnQoIG1pbkhlaWdodCwgMTAgKSB9IClcbi8vXHRcdFx0XHRcdFx0XHR1cGRhdGVCbG9ja3MoIHsgbWluSGVpZ2h0IH0gKTtcblx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0b3B0aW9ucz17XG5cdFx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBfXyggJ0hhbGYnLCAnX19wbHVnaW5fdHh0ZCcgKSwgdmFsdWU6IDUwIH0sXG5cdFx0XHRcdFx0XHRcdFx0eyBsYWJlbDogX18oICdUd28gVGhpcmRzJywgJ19fcGx1Z2luX3R4dGQnICksIHZhbHVlOiA2NiB9LFxuXHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IF9fKCAnVGhyZWUgUXVhcnRlcnMnLCAnX19wbHVnaW5fdHh0ZCcgKSwgdmFsdWU6IDc1IH0sXG5cdFx0XHRcdFx0XHRcdFx0eyBsYWJlbDogX18oICdGdWxsJywgJ19fcGx1Z2luX3R4dGQnICksIHZhbHVlOiAxMDAgfVxuXHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdCAgICB9XG5cdFx0XHQ8L1BhbmVsQm9keT5cblx0XHQpXG5cdH1cbn1cblxuY2xhc3MgU2Nyb2xsSW5kaWNhdG9yUGFuZWwgZXh0ZW5kcyBDb21wb25lbnQge1xuXG5cdHJlbmRlcigpIHtcblxuXHRcdGNvbnN0IHtcblx0XHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdFx0c2Nyb2xsSW5kaWNhdG9yLFxuXHRcdFx0fSxcblx0XHRcdHNldEF0dHJpYnV0ZXNcblx0XHR9ID0gdGhpcy5wcm9wcztcblxuXHRcdGNvbnN0IGhlcm9CbG9ja3MgPSBzZWxlY3QoICdjb3JlL2Jsb2NrLWVkaXRvcicgKS5nZXRCbG9ja3MoKS5maWx0ZXIoIGJsb2NrID0+IHtcblx0XHRcdHJldHVybiBibG9jay5uYW1lID09PSAnbm92YWJsb2Nrcy9oZXJvJztcblx0XHR9ICk7XG5cblx0XHRjb25zdCBpbmRleCA9IGhlcm9CbG9ja3MuZmluZEluZGV4KCBibG9jayA9PiBibG9jay5jbGllbnRJZCA9PT0gc2VsZWN0KCAnY29yZS9ibG9jay1lZGl0b3InICkuZ2V0U2VsZWN0ZWRCbG9ja0NsaWVudElkKCkgKTtcblxuXHRcdHJldHVybiA8UGFuZWxCb2R5IHRpdGxlPXsgX18oICdTY3JvbGwgSW5kaWNhdG9yJywgJ19fcGx1Z2luX3R4dGQnICkgfSBzdHlsZT17IHsgZGlzcGxheTogaW5kZXggPT09IDAgPyAnYmxvY2snIDogJ25vbmUnIH0gfSBpbml0aWFsT3Blbj17IGZhbHNlIH0+XG5cdFx0XHQ8VG9nZ2xlQ29udHJvbFxuXHRcdFx0XHRsYWJlbD17IF9fKCAnRW5hYmxlIFNjcm9sbCBJbmRpY2F0b3InLCAnX19wbHVnaW5fdHh0ZCcgKSB9XG5cdFx0XHRcdGNoZWNrZWQ9eyBzY3JvbGxJbmRpY2F0b3IgfVxuXHRcdFx0XHRvbkNoYW5nZT17IHNjcm9sbEluZGljYXRvciA9PiB7XG5cdFx0XHRcdFx0c2V0QXR0cmlidXRlcyggeyBzY3JvbGxJbmRpY2F0b3IgfSApO1xuXHRcdFx0XHRcdHVwZGF0ZUJsb2NrcyggeyBzY3JvbGxJbmRpY2F0b3IgfSApO1xuXHRcdFx0XHR9IH1cblx0XHRcdC8+XG5cdFx0PC9QYW5lbEJvZHk+XG5cdH1cbn1cblxuZXhwb3J0IHtcblx0SGVpZ2h0UGFuZWwsXG5cdFNjcm9sbEluZGljYXRvclBhbmVsLFxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL2hlaWdodC1jb250cm9scy9pbmRleC5qcyIsImNvbnN0IHtcblx0Q29tcG9uZW50LFxufSA9IHdwLmVsZW1lbnQ7XG5cbmNvbnN0IHtcblx0SW5uZXJCbG9ja3MsXG59ID0gd3AuYmxvY2tFZGl0b3I7XG5cbmltcG9ydCBIZXJvQmFja2dyb3VuZCBmcm9tICcuL2JhY2tncm91bmQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIZXJvUHJldmlldyBleHRlbmRzIENvbXBvbmVudCB7XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdFx0Ly8gbGF5b3V0XG5cdFx0XHRcdGNvbnRlbnRQYWRkaW5nLFxuXHRcdFx0XHRjb250ZW50UGFkZGluZ0N1c3RvbSxcblx0XHRcdFx0Y29udGVudFdpZHRoLFxuXHRcdFx0XHRjb250ZW50V2lkdGhDdXN0b20sXG5cdFx0XHRcdC8vIGFsaWdubWVudFxuXHRcdFx0XHR2ZXJ0aWNhbEFsaWdubWVudCxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWdubWVudCxcblx0XHRcdFx0Ly8gaGVpZ2h0XG5cdFx0XHRcdG1pbkhlaWdodCxcblx0XHRcdFx0YXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2ssXG5cdFx0XHRcdC8vIGluZGljYXRvcnNcblx0XHRcdFx0c2Nyb2xsSW5kaWNhdG9yQmxvY2ssXG5cdFx0XHRcdC8vIGNvbG9yc1xuXHRcdFx0XHRjb250ZW50Q29sb3IsXG5cdFx0XHRcdG92ZXJsYXlGaWx0ZXJTdHlsZSxcblx0XHRcdH0sXG5cdFx0XHRjbGFzc05hbWUsXG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cblx0XHRjb25zdCBjbGFzc2VzID0gW1xuXHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0J25vdmEtaGVybycsXG5cdFx0XHRgbm92YS11LXZhbGlnbi0ke3ZlcnRpY2FsQWxpZ25tZW50fWAsXG5cdFx0XHRgbm92YS11LWhhbGlnbi0ke2hvcml6b250YWxBbGlnbm1lbnR9YCxcblx0XHRcdGBub3ZhLXUtc3BhY2luZy0ke2NvbnRlbnRQYWRkaW5nfWAsXG5cdFx0XHRgbm92YS11LWNvbnRlbnQtd2lkdGgtJHtjb250ZW50V2lkdGh9YCxcblx0XHRcdGBub3ZhLXUtYmFja2dyb3VuZGAsXG5cdFx0XHRgbm92YS11LWJhY2tncm91bmQtJHtvdmVybGF5RmlsdGVyU3R5bGV9YFxuXHRcdF1cblxuXHRcdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRcdGhlcm86IHtcblx0XHRcdFx0Y29sb3I6IGNvbnRlbnRDb2xvcixcblx0XHRcdH0sXG5cdFx0XHRmb3JlZ3JvdW5kOiB7fSxcblx0XHRcdGNvbnRlbnQ6IHt9LFxuXHRcdH1cblxuXHRcdGlmICggISEgYXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2sgKSB7XG5cdFx0XHRzdHlsZXMuaGVyby5taW5IZWlnaHQgPSBtaW5IZWlnaHQgKyAndmgnXG5cdFx0fVxuXG5cdFx0aWYgKCBjb250ZW50UGFkZGluZyA9PT0gJ2N1c3RvbScgKSB7XG5cdFx0XHRzdHlsZXMuZm9yZWdyb3VuZC5wYWRkaW5nVG9wID0gYCR7Y29udGVudFBhZGRpbmdDdXN0b219JWBcblx0XHRcdHN0eWxlcy5mb3JlZ3JvdW5kLnBhZGRpbmdCb3R0b20gPSBgJHtjb250ZW50UGFkZGluZ0N1c3RvbX0lYFxuXHRcdH1cblxuXHRcdGlmICggY29udGVudFdpZHRoID09PSAnY3VzdG9tJyApIHtcblx0XHRcdHN0eWxlcy5jb250ZW50Lm1heFdpZHRoID0gYCR7Y29udGVudFdpZHRoQ3VzdG9tfSVgXG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmpvaW4oJyAnKX0gc3R5bGU9e3N0eWxlcy5oZXJvfT5cblx0XHRcdFx0PEhlcm9CYWNrZ3JvdW5kIHsgLi4udGhpcy5wcm9wcyB9IC8+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPSdub3ZhLWhlcm9fX2ZvcmVncm91bmQgbm92YS11LWNvbnRlbnQtcGFkZGluZycgc3R5bGU9eyBzdHlsZXMuZm9yZWdyb3VuZCB9PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPSdub3ZhLXUtY29udGVudC1hbGlnbic+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT0nbm92YS1oZXJvX19pbm5lci1jb250YWluZXIgbm92YS11LWNvbnRlbnQtd2lkdGgnIHN0eWxlPXsgc3R5bGVzLmNvbnRlbnQgfT5cblx0XHRcdFx0XHRcdFx0PElubmVyQmxvY2tzIHRlbXBsYXRlPXtbXG5cdFx0XHRcdFx0XHRcdFx0WyAnY29yZS9oZWFkaW5nJywgeyBjb250ZW50OiAnVGhpcyBpcyBhIGNhdGNoeSB0aXRsZScsIGFsaWduOiAnY2VudGVyJywgbGV2ZWw6IDEgfSBdLFxuXHRcdFx0XHRcdFx0XHRcdFsgJ2NvcmUvcGFyYWdyYXBoJywgeyBjb250ZW50OiAnQSBicmlsbGlhbnQgc3VidGl0bGUgdG8gZXhwbGFpbiBpdHMgY2F0Y2hpbmVzcycsIGFsaWduOiAnY2VudGVyJyB9IF0sXG5cdFx0XHRcdFx0XHRcdFx0WyAnY29yZS9idXR0b24nLCB7IHRleHQ6ICdEaXNjb3ZlciBtb3JlJywgYWxpZ246ICdjZW50ZXInIH0gXSxcblx0XHRcdFx0XHRcdFx0XX0gLz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0eyBzY3JvbGxJbmRpY2F0b3JCbG9jayAmJiA8ZGl2IGNsYXNzTmFtZT0nbm92YS1oZXJvX19pbmRpY2F0b3InPjwvZGl2PiB9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYmxvY2tzL2hlcm8vcHJldmlldy5qcyIsImltcG9ydCB3aXRoUGFyYWxsYXggZnJvbSAnLi4vLi4vY29tcG9uZW50cy93aXRoLXBhcmFsbGF4JztcblxuY29uc3Qge1xuXHRDb21wb25lbnQsXG59ID0gd3AuZWxlbWVudDtcblxuY2xhc3MgSGVyb0JhY2tncm91bmQgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0YXR0cmlidXRlczoge1xuXHRcdFx0XHRvdmVybGF5RmlsdGVyU3R5bGUsXG5cdFx0XHRcdG92ZXJsYXlGaWx0ZXJTdHJlbmd0aCxcblx0XHRcdFx0bWVkaWFcblx0XHRcdH1cblx0XHR9ID0gdGhpcy5wcm9wcztcblxuXHRcdGNvbnN0IHN0eWxlcyA9IHtcblx0XHRcdG9wYWNpdHk6IDFcblx0XHR9O1xuXG5cdFx0aWYgKCBvdmVybGF5RmlsdGVyU3R5bGUgIT09ICdub25lJyApIHtcblx0XHRcdHN0eWxlcy5vcGFjaXR5ID0gMSAtIG92ZXJsYXlGaWx0ZXJTdHJlbmd0aCAvIDEwMFxuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT0nbm92YS1oZXJvX19iYWNrZ3JvdW5kJyBzdHlsZT17IHRoaXMucHJvcHMuc3R5bGUgfT5cblx0XHRcdFx0e21lZGlhLnR5cGUgPT09ICdpbWFnZScgJiYgdHlwZW9mIG1lZGlhLnNpemVzICE9PSAndW5kZWZpbmVkJ1xuXHRcdFx0XHQgJiYgPGltZyBjbGFzc05hbWU9J25vdmEtaGVyb19fbWVkaWEnIHNyYz17bWVkaWEuc2l6ZXMuZnVsbC51cmx9IHN0eWxlPXtzdHlsZXN9Lz59XG5cdFx0XHRcdHttZWRpYS50eXBlID09PSAndmlkZW8nXG5cdFx0XHRcdCAmJiA8dmlkZW8gbXV0ZWQgYXV0b1BsYXkgbG9vcCBjbGFzc05hbWU9J25vdmEtaGVyb19fbWVkaWEnIHNyYz17bWVkaWEudXJsfSBzdHlsZT17c3R5bGVzfS8+fVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoUGFyYWxsYXgoIEhlcm9CYWNrZ3JvdW5kICk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jsb2Nrcy9oZXJvL2JhY2tncm91bmQuanMiLCJpbXBvcnQgKiBhcyBpY29ucyBmcm9tIFwiLi4vLi4vaWNvbnNcIjtcblxuY29uc3QgeyBfXyB9ID0gd3AuaTE4bjtcblxuY29uc3Qge1xuXHRDb21wb25lbnQsXG5cdEZyYWdtZW50XG59ID0gd3AuZWxlbWVudDtcblxuY29uc3Qge1xuXHRCbG9ja0NvbnRyb2xzLFxuXHRNZWRpYVVwbG9hZCxcbn0gPSB3cC5ibG9ja0VkaXRvcjtcblxuY29uc3Qge1xuXHREcm9wZG93bixcblx0SWNvbkJ1dHRvbixcblx0VG9vbGJhcixcbn0gPSB3cC5jb21wb25lbnRzO1xuXG5pbXBvcnQge1xuXHRBbGlnbm1lbnRDb250cm9scywgQWxpZ25tZW50VG9vbGJhcixcblx0Q29sb3JDb250cm9scywgQ29sb3JUb29sYmFyLFxuXHRPdmVybGF5Q29udHJvbHMsXG59IGZyb20gXCIuLi8uLi9jb21wb25lbnRzXCI7XG5cbmNvbnN0IEFMTE9XRURfTUVESUFfVFlQRVMgPSBbICdpbWFnZScsICd2aWRlbycgXTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGVyb0Jsb2NrQ29udHJvbHMgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRyZW5kZXIoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0c2V0QXR0cmlidXRlc1xuXHRcdH0gPSB0aGlzLnByb3BzO1xuXG5cdFx0cmV0dXJuIDxCbG9ja0NvbnRyb2xzPlxuXHRcdFx0PEFsaWdubWVudFRvb2xiYXIgeyAuLi50aGlzLnByb3BzIH0gLz5cblx0XHRcdDxDb2xvclRvb2xiYXIgeyAuLi50aGlzLnByb3BzIH0gLz5cblx0XHRcdDxUb29sYmFyPlxuXHRcdFx0XHQ8TWVkaWFVcGxvYWRcblx0XHRcdFx0XHRhbGxvd2VkVHlwZXM9eyBBTExPV0VEX01FRElBX1RZUEVTIH1cblx0XHRcdFx0XHRvblNlbGVjdD17IG1lZGlhID0+IHNldEF0dHJpYnV0ZXMoIHsgbWVkaWEgfSApIH1cblx0XHRcdFx0XHRyZW5kZXI9eyAoIHsgb3BlbiB9ICkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDxJY29uQnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT0nY29tcG9uZW50cy1pY29uLWJ1dHRvbiBjb21wb25lbnRzLXRvb2xiYXJfX2NvbnRyb2wnXG5cdFx0XHRcdFx0XHRcdGxhYmVsPXsgX18oICdDaGFuZ2UgTWVkaWEnLCAnX19wbHVnaW5fdHh0ZCcgKSB9XG5cdFx0XHRcdFx0XHRcdGljb249eyBpY29ucy5zd2FwIH1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17IG9wZW4gfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9Ub29sYmFyPlxuXHRcdDwvQmxvY2tDb250cm9scz5cblx0fVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jsb2Nrcy9oZXJvL2NvbnRyb2xzLmpzIiwiLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0ICogYXMgaWNvbnMgZnJvbSAnLi4vLi4vaWNvbnMnO1xuaW1wb3J0IGVkaXQgZnJvbSAnLi9lZGl0JztcblxuLyoqXG4gKiBXb3JkUHJlc3MgZGVwZW5kZW5jaWVzXG4gKi9cbmNvbnN0IHsgX18gfSA9IHdwLmkxOG47XG5jb25zdCB7IHJlZ2lzdGVyQmxvY2tUeXBlLCB9ID0gd3AuYmxvY2tzO1xuY29uc3QgeyBJbm5lckJsb2NrcyB9ID0gd3AuYmxvY2tFZGl0b3I7XG5cbmV4cG9ydCBkZWZhdWx0IHJlZ2lzdGVyQmxvY2tUeXBlKCAnbm92YWJsb2Nrcy9tZWRpYScsXG5cdHtcblx0XHR0aXRsZTogX18oICdNZWRpYSBDYXJkIENvbnN0ZWxsYXRpb24nLCAnX19wbHVnaW5fdHh0ZCcgKSxcblx0XHRkZXNjcmlwdGlvbjogX18oICdEaXNwbGF5IG1lZGlhIG9iamVjdHMgYWxvbmdzaWRlIHNob3J0IHBpZWNlcyBvZiBjb250ZW50LicsICdfX3BsdWdpbl90eHRkJyApLFxuXHRcdGNhdGVnb3J5OiAnbm92YS1ibG9ja3MnLFxuXHRcdGljb246IGljb25zLm1lZGlhLFxuXHRcdGVkaXQsXG5cdFx0c2F2ZSgpIHtcblx0XHRcdHJldHVybiA8SW5uZXJCbG9ja3MuQ29udGVudC8+XG5cdFx0fSxcblx0XHRnZXRFZGl0V3JhcHBlclByb3BzKCkge1xuXHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSB3cC5kYXRhLnNlbGVjdCggJ2NvcmUvYmxvY2stZWRpdG9yJyApLmdldFNldHRpbmdzKCk7XG5cdFx0XHRyZXR1cm4gc2V0dGluZ3MuYWxpZ25XaWRlID8ge1xuXHRcdFx0XHQnZGF0YS1hbGlnbic6ICdmdWxsJ1xuXHRcdFx0fSA6IHt9XG5cdFx0fSxcblx0fVxuKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jsb2Nrcy9tZWRpYS9pbmRleC5qcyIsImNvbnN0IHsgQ29tcG9uZW50LCBGcmFnbWVudCB9ID0gd3AuZWxlbWVudDtcblxuaW1wb3J0IENvbnRyb2xzIGZyb20gJy4vY29udHJvbHMnO1xuaW1wb3J0IEluc3BlY3RvciBmcm9tICcuL2luc3BlY3Rvcic7XG5pbXBvcnQgTWVkaWFQcmV2aWV3IGZyb20gJy4vcHJldmlldyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXQgZXh0ZW5kcyBDb21wb25lbnQge1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCAuLi5hcmd1bWVudHMgKTtcblx0fVxuXG5cdHVwZGF0ZUltYWdlcyggbWVkaWEgKSB7XG5cdFx0dGhpcy5wcm9wcy5zZXRBdHRyaWJ1dGVzKHtcblx0XHRcdGltYWdlczogbWVkaWEubWFwKCAoIGltYWdlICkgPT4gSlNPTi5zdHJpbmdpZnkoeyBpZDogaW1hZ2UuaWQsIHVybDogaW1hZ2UudXJsLCBhbHQ6IGltYWdlLmFsdCB9KSApXG5cdFx0fSk7XG5cdH1cblxuXHRyZW5kZXIoKSB7XG5cblx0XHRyZXR1cm4gW1xuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8TWVkaWFQcmV2aWV3IHsgLi4udGhpcy5wcm9wcyB9IHVwZGF0ZUltYWdlcz17IHRoaXMudXBkYXRlSW1hZ2VzLmJpbmQoIHRoaXMgKSB9IC8+XG5cdFx0XHRcdDxDb250cm9scyB7IC4uLnRoaXMucHJvcHMgfSB1cGRhdGVJbWFnZXM9eyB0aGlzLnVwZGF0ZUltYWdlcy5iaW5kKCB0aGlzICkgfSAvPlxuXHRcdFx0XHQ8SW5zcGVjdG9yIHsgLi4udGhpcy5wcm9wcyB9IC8+XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdF1cblx0fVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jsb2Nrcy9tZWRpYS9lZGl0LmpzIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2pzb24vc3RyaW5naWZ5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2pzb24vc3RyaW5naWZ5LmpzXG4vLyBtb2R1bGUgaWQgPSAxMzlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJyk7XG52YXIgJEpTT04gPSBjb3JlLkpTT04gfHwgKGNvcmUuSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuICRKU09OLnN0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJndW1lbnRzKTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vanNvbi9zdHJpbmdpZnkuanNcbi8vIG1vZHVsZSBpZCA9IDE0MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgKiBhcyBpY29ucyBmcm9tIFwiLi4vLi4vaWNvbnNcIjtcbmltcG9ydCB7XG5cdEFsaWdubWVudFRvb2xiYXJcbn0gZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvYWxpZ25tZW50LWNvbnRyb2xzXCI7XG5cbi8qKlxuICogV29yZFByZXNzIGRlcGVuZGVuY2llc1xuICovXG5jb25zdCB7IF9fIH0gPSB3cC5pMThuO1xuXG5jb25zdCB7XG5cdENvbXBvbmVudCxcblx0RnJhZ21lbnRcbn0gPSB3cC5lbGVtZW50O1xuXG5jb25zdCB7XG5cdE1lZGlhVXBsb2FkLFxuXHRCbG9ja0NvbnRyb2xzXG59ID0gd3AuYmxvY2tFZGl0b3I7XG5cbmNvbnN0IHtcblx0SWNvbkJ1dHRvbixcblx0VG9vbGJhclxufSA9IHdwLmNvbXBvbmVudHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xzIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuXHRjb25zdHJ1Y3RvciggcHJvcHMgKSB7XG5cdFx0c3VwZXIoIC4uLmFyZ3VtZW50cyApO1xuXHR9XG5cblx0b25DaGFuZ2VHYWxsZXJ5KCBnYWxsZXJ5SW1hZ2VzICkge1xuXG5cdFx0Y29uc3QgcHJvbWlzZXMgPSBnYWxsZXJ5SW1hZ2VzLm1hcCggKGltYWdlLCBpbmRleCkgPT4ge1xuXHRcdFx0cmV0dXJuIHdwLmFwaVJlcXVlc3QoIHsgcGF0aDogJy93cC92Mi9tZWRpYS8nICsgaW1hZ2UuaWQgfSApLnRoZW4oIG5ld0ltYWdlID0+IHtcblx0XHRcdFx0Z2FsbGVyeUltYWdlc1tpbmRleF0gPSB7IC4uLm5ld0ltYWdlLCAuLi5pbWFnZSB9O1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblxuXHRcdFByb21pc2UuYWxsKCBwcm9taXNlcyApLnRoZW4oICgpID0+IHtcblx0XHRcdHRoaXMucHJvcHMuc2V0QXR0cmlidXRlcyggeyBnYWxsZXJ5SW1hZ2VzOiBnYWxsZXJ5SW1hZ2VzLmZpbHRlciggaW1hZ2UgPT4ge1xuXHRcdFx0XHRcdHJldHVybiAhISBpbWFnZS5pZCAmJiAhISBpbWFnZS5zaXplcyAmJiAhISBpbWFnZS5zaXplcy5sYXJnZSAmJiAhISBpbWFnZS5zaXplcy5sYXJnZS51cmw7XG5cdFx0XHRcdH0gKSB9ICk7XG5cdFx0fSApO1xuXG5cdH1cblxuXHRyZW5kZXIoKSB7XG5cblx0XHRjb25zdCB7XG5cdFx0XHRhdHRyaWJ1dGVzLFxuXHRcdFx0c2V0QXR0cmlidXRlcyxcblx0XHRcdHVwZGF0ZUltYWdlc1xuXHRcdH0gPSB0aGlzLnByb3BzO1xuXG5cdFx0Y29uc3Qge1xuXHRcdFx0bWVkaWFQb3NpdGlvbixcblx0XHRcdGltYWdlcyA9IFtdLFxuXHRcdH0gPSBhdHRyaWJ1dGVzO1xuXG5cdFx0Y29uc3QgZ2FsbGVyeUltYWdlcyA9IGltYWdlcy5tYXAoICggaW1hZ2UgKSA9PiBKU09OLnBhcnNlKCBpbWFnZSApICk7XG5cblx0XHRjb25zdCBoYXNJbWFnZXMgPSAhISBpbWFnZXMubGVuZ3RoO1xuXG5cdFx0Y29uc3QgTUVESUFfQUxJR05NRU5UU19DT05UUk9MUyA9IHtcblx0XHRcdGxlZnQ6IHtcblx0XHRcdFx0aWNvbjogJ2FsaWduLXB1bGwtbGVmdCcsXG5cdFx0XHRcdHRpdGxlOiBfXyggJ1Nob3cgTWVkaWEgb24gTGVmdCBTaWRlJywgJ19fcGx1Z2luX3R4dGQnICksXG5cdFx0XHR9LFxuXHRcdFx0cmlnaHQ6IHtcblx0XHRcdFx0aWNvbjogJ2FsaWduLXB1bGwtcmlnaHQnLFxuXHRcdFx0XHR0aXRsZTogX18oICdTaG93IE1lZGlhIG9uIFJpZ2h0IFNpZGUnLCAnX19wbHVnaW5fdHh0ZCcgKSxcblx0XHRcdH0sXG5cdFx0fTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QmxvY2tDb250cm9scz5cblxuXHRcdFx0XHQ8VG9vbGJhclxuXHRcdFx0XHRcdGNvbnRyb2xzPXsgT2JqZWN0LmtleXMoTUVESUFfQUxJR05NRU5UU19DT05UUk9MUykubWFwKGNvbnRyb2wgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0Li4uTUVESUFfQUxJR05NRU5UU19DT05UUk9MU1tjb250cm9sXSxcblx0XHRcdFx0XHRcdFx0b25DbGljazogKCkgPT4geyBzZXRBdHRyaWJ1dGVzKHsgbWVkaWFQb3NpdGlvbjogY29udHJvbCB9ICl9LFxuXHRcdFx0XHRcdFx0XHRpc0FjdGl2ZTogbWVkaWFQb3NpdGlvbiA9PT0gY29udHJvbFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pIH1cblx0XHRcdFx0Lz5cblxuXHRcdFx0XHQ8QWxpZ25tZW50VG9vbGJhciB7IC4uLnRoaXMucHJvcHMgfSAvPlxuXG5cdFx0XHRcdHsgaGFzSW1hZ2VzICYmIDxUb29sYmFyPlxuXHRcdFx0XHRcdDxNZWRpYVVwbG9hZFxuXHRcdFx0XHRcdFx0dHlwZSA9IFwiaW1hZ2VcIlxuXHRcdFx0XHRcdFx0bXVsdGlwbGVcblx0XHRcdFx0XHRcdGdhbGxlcnlcblx0XHRcdFx0XHRcdHZhbHVlID0geyBnYWxsZXJ5SW1hZ2VzLm1hcCggKCBpbWFnZSApID0+IGltYWdlLmlkICkgfVxuXHRcdFx0XHRcdFx0b25TZWxlY3QgPSB7IHVwZGF0ZUltYWdlcyB9XG5cdFx0XHRcdFx0XHRyZW5kZXIgPSB7ICggeyBvcGVuIH0gKSA9PiAoXG5cdFx0XHRcdFx0XHRcdDxJY29uQnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPSdjb21wb25lbnRzLWljb24tYnV0dG9uIGNvbXBvbmVudHMtdG9vbGJhcl9fY29udHJvbCdcblx0XHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnQ2hhbmdlIE1lZGlhJywgJ19fcGx1Z2luX3R4dGQnICkgfVxuXHRcdFx0XHRcdFx0XHRcdGljb249eyBpY29ucy5zd2FwIH1cblx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPSB7ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdG9wZW4oKTtcblx0XHRcdFx0XHRcdFx0XHR9IH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Ub29sYmFyPiB9XG5cblx0XHRcdDwvQmxvY2tDb250cm9scz5cblx0XHQpO1xuXHR9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYmxvY2tzL21lZGlhL2NvbnRyb2xzLmpzIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAxNDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5rZXlzO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAxNDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzXG4vLyBtb2R1bGUgaWQgPSAxNDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiY29uc3QgeyBfXyB9ID0gd3AuaTE4bjtcblxuY29uc3Qge1xuXHRDb21wb25lbnQsXG5cdEZyYWdtZW50XG59ID0gd3AuZWxlbWVudDtcblxuY29uc3Qge1xuXHRJbnNwZWN0b3JDb250cm9sc1xufSA9IHdwLmJsb2NrRWRpdG9yO1xuXG5jb25zdCB7XG5cdFBhbmVsQm9keSxcblx0UmFkaW9Db250cm9sXG59ID0gd3AuY29tcG9uZW50cztcblxuXG5jbGFzcyBJbnNwZWN0b3IgZXh0ZW5kcyBDb21wb25lbnQge1xuXHRjb25zdHJ1Y3RvciAoIHByb3BzICkge1xuXHRcdHN1cGVyKCAuLi5hcmd1bWVudHMgKTtcblx0fVxuXG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRhdHRyaWJ1dGVzLFxuXHRcdFx0c2V0QXR0cmlidXRlcyxcblx0XHR9ID0gdGhpcy5wcm9wcztcblxuXHRcdGNvbnN0IHtcblx0XHRcdGNvbnRlbnRTdHlsZSxcblx0XHRcdGJsb2NrU3R5bGUsXG5cdFx0fSA9IGF0dHJpYnV0ZXM7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8SW5zcGVjdG9yQ29udHJvbHM+XG5cblx0XHRcdFx0XHQ8UGFuZWxCb2R5IHRpdGxlPXsgX18oICdDb250ZW50IEFyZWEnLCAnX19wbHVnaW5fdHh0ZCcgKSB9IGluaXRpYWxPcGVuID0geyB0cnVlIH0+XG5cdFx0XHRcdFx0XHQ8UmFkaW9Db250cm9sXG5cdFx0XHRcdFx0XHRcdGxhYmVsID0geyBfXyggJ0VtcGhhc2lzIExldmVsJywgJ19fcGx1Z2luX3R4dGQnICkgfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHsgY29udGVudFN0eWxlIH1cblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWQgPSB7IGNvbnRlbnRTdHlsZSB9XG5cdFx0XHRcdFx0XHRcdG9wdGlvbnMgPSB7IFtcblx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBfXyggJ0Jhc2ljJywgJ19fcGx1Z2luX3R4dGQnICksIHZhbHVlOiAnYmFzaWMnIH0sXG5cdFx0XHRcdFx0XHRcdFx0eyBsYWJlbDogX18oICdNb2RlcmF0ZScsICdfX3BsdWdpbl90eHRkJyApLCB2YWx1ZTogJ21vZGVyYXRlJyB9LFxuXHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IF9fKCAnSGlnaGxpZ2h0ZWQnLCAnX19wbHVnaW5fdHh0ZCcgKSwgdmFsdWU6ICdoaWdobGlnaHRlZCcgfVxuXHRcdFx0XHRcdFx0XHRdIH1cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2UgPSB7IGNvbnRlbnRTdHlsZSA9PiBzZXRBdHRyaWJ1dGVzKCB7IGNvbnRlbnRTdHlsZSB9ICkgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L1BhbmVsQm9keT5cblxuXG5cdFx0XHRcdFx0PFBhbmVsQm9keSB0aXRsZT17IF9fKCAnQmxvY2sgQXJlYScsICdfX3BsdWdpbl90eHRkJyApIH0gaW5pdGlhbE9wZW4gPSB7IHRydWUgfT5cblx0XHRcdFx0XHRcdDxSYWRpb0NvbnRyb2xcblx0XHRcdFx0XHRcdFx0bGFiZWwgPSB7IF9fKCAnRW1waGFzaXMgTGV2ZWwnLCAnX19wbHVnaW5fdHh0ZCcgKSB9XG5cdFx0XHRcdFx0XHRcdHZhbHVlID0geyBibG9ja1N0eWxlIH1cblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWQgPSB7IGJsb2NrU3R5bGUgfVxuXHRcdFx0XHRcdFx0XHRvcHRpb25zID0geyBbXG5cdFx0XHRcdFx0XHRcdFx0eyBsYWJlbDogX18oICdCYXNpYycsICdfX3BsdWdpbl90eHRkJyApLCB2YWx1ZTogJ2Jhc2ljJyB9LFxuXHRcdFx0XHRcdFx0XHRcdHsgbGFiZWw6IF9fKCAnTW9kZXJhdGUnLCAnX19wbHVnaW5fdHh0ZCcgKSwgdmFsdWU6ICdtb2RlcmF0ZScgfSxcblx0XHRcdFx0XHRcdFx0XHR7IGxhYmVsOiBfXyggJ0hpZ2hsaWdodGVkJywgJ19fcGx1Z2luX3R4dGQnICksIHZhbHVlOiAnaGlnaGxpZ2h0ZWQnIH1cblx0XHRcdFx0XHRcdFx0XSB9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlID0geyBibG9ja1N0eWxlID0+IHNldEF0dHJpYnV0ZXMoIHsgYmxvY2tTdHlsZSB9ICkgfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L1BhbmVsQm9keT5cblxuXHRcdFx0XHQ8L0luc3BlY3RvckNvbnRyb2xzPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEluc3BlY3RvcjtcblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jsb2Nrcy9tZWRpYS9pbnNwZWN0b3IuanMiLCJpbXBvcnQgY2xhc3NuYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuXG5jb25zdCB7XG5cdENvbXBvbmVudCxcbn0gPSB3cC5lbGVtZW50O1xuXG5jb25zdCB7XG5cdElubmVyQmxvY2tzLFxuXHRNZWRpYVBsYWNlaG9sZGVyXG59ID0gd3AuYmxvY2tFZGl0b3I7XG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuY29uc3QgQUxMT1dFRF9CTE9DS1MgPSBbJ2NvcmUvYnV0dG9uJywgJ2NvcmUvcGFyYWdyYXBoJywgJ2NvcmUvaGVhZGluZyddO1xuY29uc3QgVEVNUExBVEUgPSBbXG5cdFsnY29yZS9oZWFkaW5nJywge2NvbnRlbnQ6ICdTaG9vdCBmb3IgdGhlIG1vb24sIEV2ZW4gaWYgWW91IE1pc3MgaXQnLCBsZXZlbDogNH1dLFxuXHRbJ2NvcmUvaGVhZGluZycsIHtjb250ZW50OiAnV2VsY29tZSB0byBvdXIgcGxhbmV0LCBsb29rIGFuZCBmZWVsIG1hdHRlcnMhJywgbGV2ZWw6IDJ9XSxcblx0Wydjb3JlL3BhcmFncmFwaCcsIHtjb250ZW50OiAnV2VcXCd2ZSBhbHdheXMgZGVmaW5lZCBvdXJzZWx2ZXMgYnkgdGhlIGFiaWxpdHkgdG8gb3ZlcmNvbWUgdGhlIGltcG9zc2libGUuIEFuZCB3ZSBjb3VudCB0aGVzZSBtb21lbnRzLiBUaGVzZSBtb21lbnRzIHdoZW4gd2UgZGFyZSB0byBhaW0gaGlnaGVyLCB0byBicmVhayBiYXJyaWVycywgdG8gcmVhY2ggZm9yIHRoZSBzdGFycywgdG8gbWFrZSB0aGUgdW5rbm93biBrbm93bi4nfV0sXG5cdFsnY29yZS9idXR0b24nLCB7dGV4dDogJ0Rpc2NvdmVyIE1vcmUnfV1cbl07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lZGlhUHJldmlldyBleHRlbmRzIENvbXBvbmVudCB7XG5cdHJlbmRlcigpIHtcblxuXHRcdGNvbnN0IHtcblx0XHRcdGF0dHJpYnV0ZXMsXG5cdFx0XHRjbGFzc05hbWUsXG5cdFx0XHR1cGRhdGVJbWFnZXNcblx0XHR9ID0gdGhpcy5wcm9wcztcblxuXHRcdGNvbnN0IHtcblx0XHRcdGNvbnRlbnRTdHlsZSxcblx0XHRcdGJsb2NrU3R5bGUsXG5cdFx0XHRtZWRpYVBvc2l0aW9uLFxuXHRcdFx0aW1hZ2VzLFxuXHRcdH0gPSBhdHRyaWJ1dGVzO1xuXG5cdFx0Y29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzbmFtZXMoXG5cdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRgbm92YS1tZWRpYWAsXG5cdFx0XHRgaGFzLWltYWdlLW9uLXRoZS0ke21lZGlhUG9zaXRpb259YCxcblx0XHRcdGBibG9jay1pcy0ke2Jsb2NrU3R5bGV9YCxcblx0XHRcdGBjb250ZW50LWlzLSR7Y29udGVudFN0eWxlfWAsXG5cdFx0KTtcblxuXHRcdGNvbnN0IGdhbGxlcnlJbWFnZXMgPSBpbWFnZXMubWFwKCAoIGltYWdlICkgPT4gSlNPTi5wYXJzZSggaW1hZ2UgKSApO1xuXG5cdFx0Y29uc3QgZGlzcGxheUltYWdlcyA9ICggaW1hZ2VzICkgPT4ge1xuXG5cdFx0XHRpZiAoIDAgPT09IGltYWdlcy5sZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PE1lZGlhUGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdGljb249XCJmb3JtYXQtZ2FsbGVyeVwiXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJub3ZhLW1lZGlhX19wbGFjZWhvbGRlclwiXG5cdFx0XHRcdFx0XHRvblNlbGVjdD17dXBkYXRlSW1hZ2VzfVxuXHRcdFx0XHRcdFx0YWNjZXB0PVwiaW1hZ2UvKlwiXG5cdFx0XHRcdFx0XHRhbGxvd2VkVHlwZXM9e1snaW1hZ2UnXX1cblx0XHRcdFx0XHRcdG11bHRpcGxlXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0Z2FsbGVyeUltYWdlcy5tYXAoICggaW1hZ2UgKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT0nbm92YS1tZWRpYV9faW1hZ2UnPlxuXHRcdFx0XHRcdFx0XHRcdDxpbWcgYWx0PXtpbWFnZS5hbHR9IHNyYz17aW1hZ2UudXJsfS8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0gKVxuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lc30+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwibm92YS1tZWRpYV9faW5uZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3cC1ibG9ja1wiIGRhdGEtYWxpZ249XCJ3aWRlXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIm5vdmEtbWVkaWFfX2xheW91dFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIm5vdmEtbWVkaWFfX2NvbnRlbnQgbm92YS1tZWRpYV9faW5uZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0PElubmVyQmxvY2tzXG5cdFx0XHRcdFx0XHRcdFx0XHRhbGxvd2VkQmxvY2tzPXtBTExPV0VEX0JMT0NLU31cblx0XHRcdFx0XHRcdFx0XHRcdHRlbXBsYXRlPXtURU1QTEFURX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJub3ZhLW1lZGlhX19hc2lkZVwiPlxuXHRcdFx0XHRcdFx0XHRcdHtkaXNwbGF5SW1hZ2VzKCBpbWFnZXMgKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9ibG9ja3MvbWVkaWEvcHJldmlldy5qcyIsIi8qIVxuICBDb3B5cmlnaHQgKGMpIDIwMTcgSmVkIFdhdHNvbi5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcbiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcblx0XHR2YXIgY2xhc3NlcyA9IFtdO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cdFx0XHRpZiAoIWFyZykgY29udGludWU7XG5cblx0XHRcdHZhciBhcmdUeXBlID0gdHlwZW9mIGFyZztcblxuXHRcdFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGNsYXNzZXMucHVzaChhcmcpO1xuXHRcdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykgJiYgYXJnLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgaW5uZXIgPSBjbGFzc05hbWVzLmFwcGx5KG51bGwsIGFyZyk7XG5cdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChpbm5lcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdGNsYXNzTmFtZXMuZGVmYXVsdCA9IGNsYXNzTmFtZXM7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0aCBucG0gcGFja2FnZSBuYW1lXG5cdFx0ZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBjbGFzc05hbWVzO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcblx0fVxufSgpKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDE0N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgKiBhcyBpY29ucyBmcm9tICcuLi8uLi9pY29ucyc7XG5pbXBvcnQgZWRpdCBmcm9tICcuL2VkaXQnO1xuXG4vKipcbiAqIFdvcmRQcmVzcyBkZXBlbmRlbmNpZXNcbiAqL1xuY29uc3QgeyBfXyB9ID0gd3AuaTE4bjtcbmNvbnN0IHsgcmVnaXN0ZXJCbG9ja1R5cGUgfSA9IHdwLmJsb2NrcztcbmNvbnN0IHsgSW5uZXJCbG9ja3MgfSA9IHdwLmJsb2NrRWRpdG9yO1xuXG5leHBvcnQgZGVmYXVsdCByZWdpc3RlckJsb2NrVHlwZSggJ25vdmFibG9ja3Mvc2xpZGVzaG93Jyxcblx0e1xuXHRcdHRpdGxlOiBfXyggJ1NsaWRlc2hvdyBNZSB0aGUgV2F5JywgJ19fcGx1Z2luX3R4dGQnICksXG5cdFx0ZGVzY3JpcHRpb246IF9fKCAnRGlzcGxheSBtb3JlIHRoYW4gb25lIHBpZWNlIG9mIGNvbnRlbnQgaW4gYSBzaW5nbGUsIGNvdmV0ZWQgc3BhY2UuJywgJ19fcGx1Z2luX3R4dGQnICksXG5cdFx0Y2F0ZWdvcnk6ICdub3ZhLWJsb2NrcycsXG5cdFx0aWNvbjogaWNvbnMuc2xpZGVzaG93LFxuXHRcdGVkaXQsXG5cdFx0c2F2ZSgpIHtcblx0XHRcdHJldHVybiA8SW5uZXJCbG9ja3MuQ29udGVudC8+XG5cdFx0fSxcblx0XHRnZXRFZGl0V3JhcHBlclByb3BzKCkge1xuXHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSB3cC5kYXRhLnNlbGVjdCggJ2NvcmUvYmxvY2stZWRpdG9yJyApLmdldFNldHRpbmdzKCk7XG5cdFx0XHRyZXR1cm4gc2V0dGluZ3MuYWxpZ25XaWRlID8ge1xuXHRcdFx0XHQnZGF0YS1hbGlnbic6ICdmdWxsJ1xuXHRcdFx0fSA6IHt9XG5cdFx0fSxcblx0fVxuKVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jsb2Nrcy9zbGlkZXNob3cvaW5kZXguanMiLCJpbXBvcnQgKiBhcyBpY29ucyBmcm9tIFwiLi4vLi4vaWNvbnNcIjtcblxuY29uc3QgeyBfXyB9ID0gd3AuaTE4bjtcblxuaW1wb3J0IHtcblx0QWxpZ25tZW50Q29udHJvbHMsXG5cdENvbG9yUGFuZWwsXG5cdExheW91dFBhbmVsLFxuXHRQYXJhbGxheFBhbmVsLFxuXHRBbGlnbm1lbnRUb29sYmFyLFxuXHRDb2xvclRvb2xiYXIsXG5cdEdhbGxlcnlQcmV2aWV3LFxufSBmcm9tIFwiLi4vLi4vY29tcG9uZW50c1wiO1xuXG5pbXBvcnQgeyBzaHVmZmxlQXJyYXkgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy91dGlsXCI7XG5cbmltcG9ydCBTbGlkZXNob3dQcmV2aWV3IGZyb20gJy4vcHJldmlldyc7XG5cbmNvbnN0IHtcblx0TWVkaWFVcGxvYWQsXG5cdEJsb2NrQ29udHJvbHMsXG5cdEluc3BlY3RvckNvbnRyb2xzLFxufSA9IHdwLmJsb2NrRWRpdG9yO1xuXG5jb25zdCB7XG5cdFBhbmVsQm9keSxcblx0UmFkaW9Db250cm9sLFxuXHRTZWxlY3RDb250cm9sLFxuXHRJY29uQnV0dG9uLFxuXHRUb29sYmFyLFxufSA9IHdwLmNvbXBvbmVudHM7XG5cbmNvbnN0IHtcblx0Q29tcG9uZW50LFxuXHRGcmFnbWVudCxcbn0gPSB3cC5lbGVtZW50O1xuXG5jb25zdCBkZWZhdWx0R2FsbGVyeUltYWdlcyA9IFt7XG5cdFwidXJsXCI6IFwiaHR0cHM6Ly9zb3VyY2UudW5zcGxhc2guY29tL19ucUFwZ0ctUXJZLzE2MDB4OTAwXCIsXG5cdFwiaWRcIjogLTEsXG5cdFwic2l6ZXNcIjoge1xuXHRcdFwidGh1bWJuYWlsXCI6IHtcblx0XHRcdFwidXJsXCI6IFwiaHR0cHM6Ly9zb3VyY2UudW5zcGxhc2guY29tL19ucUFwZ0ctUXJZLzE1MHgxNTBcIlxuXHRcdH0sXG5cdFx0XCJsYXJnZVwiOiB7XG5cdFx0XHRcInVybFwiOiBcImh0dHBzOi8vc291cmNlLnVuc3BsYXNoLmNvbS9fbnFBcGdHLVFyWS8xNjAweDkwMFwiLFxuXHRcdFx0XCJ3aWR0aFwiOiAxNjAwLFxuXHRcdFx0XCJoZWlnaHRcIjogOTAwXG5cdFx0fVxuXHR9XG59LCB7XG5cdFwidXJsXCI6IFwiaHR0cHM6Ly9zb3VyY2UudW5zcGxhc2guY29tL0d0XzRpTUI3aFkwLzE2MDB4OTAwXCIsXG5cdFwiYWx0XCI6IFwiVGhpcyBpcyBhIGNhdGNoeSBpbWFnZSB0aXRsZVwiLFxuXHRcImNhcHRpb25cIjogXCJBIGJyaWxsaWFudCBjYXB0aW9uIHRvIGV4cGxhaW4gaXRzIGNhdGNoaW5lc3NcIixcblx0XCJpZFwiOiAtMixcblx0XCJzaXplc1wiOiB7XG5cdFx0XCJ0aHVtYm5haWxcIjoge1xuXHRcdFx0XCJ1cmxcIjogXCJodHRwczovL3NvdXJjZS51bnNwbGFzaC5jb20vR3RfNGlNQjdoWTAvMTUweDE1MFwiXG5cdFx0fSxcblx0XHRcImxhcmdlXCI6IHtcblx0XHRcdFwidXJsXCI6IFwiaHR0cHM6Ly9zb3VyY2UudW5zcGxhc2guY29tL0d0XzRpTUI3aFkwLzE2MDB4OTAwXCIsXG5cdFx0XHRcIndpZHRoXCI6IDE2MDAsXG5cdFx0XHRcImhlaWdodFwiOiA5MDBcblx0XHR9XG5cdH1cbn0sIHtcblx0XCJ1cmxcIjogXCJodHRwczovL3NvdXJjZS51bnNwbGFzaC5jb20vMXZLVG53TE1kcXMvMTYwMHg5MDBcIixcblx0XCJpZFwiOiAtMyxcblx0XCJzaXplc1wiOiB7XG5cdFx0XCJ0aHVtYm5haWxcIjoge1xuXHRcdFx0XCJ1cmxcIjogXCJodHRwczovL3NvdXJjZS51bnNwbGFzaC5jb20vMXZLVG53TE1kcXMvMTUweDE1MFwiXG5cdFx0fSxcblx0XHRcImxhcmdlXCI6IHtcblx0XHRcdFwidXJsXCI6IFwiaHR0cHM6Ly9zb3VyY2UudW5zcGxhc2guY29tLzF2S1Rud0xNZHFzLzE2MDB4OTAwXCIsXG5cdFx0XHRcIndpZHRoXCI6IDE2MDAsXG5cdFx0XHRcImhlaWdodFwiOiA5MDBcblx0XHR9XG5cdH1cbn1dO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0IGV4dGVuZHMgQ29tcG9uZW50IHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlciggLi4uYXJndW1lbnRzICk7XG5cblx0XHR0aGlzLnN0YXRlID0ge1xuXHRcdFx0c2VsZWN0ZWRJbmRleDogMFxuXHRcdH07XG5cdH1cblxuXHRjb21wb25lbnRXaWxsTW91bnQoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0YXR0cmlidXRlczoge1xuXHRcdFx0XHRnYWxsZXJ5SW1hZ2VzXG5cdFx0XHR9LFxuXHRcdFx0Y2xpZW50SWRcblx0XHR9ID0gdGhpcy5wcm9wcztcblxuXHRcdGlmICggISBnYWxsZXJ5SW1hZ2VzLmxlbmd0aCApIHtcblx0XHRcdHdwLmRhdGEuZGlzcGF0Y2goICdjb3JlL2Jsb2NrLWVkaXRvcicgKS51cGRhdGVCbG9ja0F0dHJpYnV0ZXMoIGNsaWVudElkLCB7XG5cdFx0XHRcdGdhbGxlcnlJbWFnZXM6IHNodWZmbGVBcnJheSggZGVmYXVsdEdhbGxlcnlJbWFnZXMuc2xpY2UoMCkgKVxuXHRcdFx0fSApO1xuXHRcdH1cblx0fVxuXG5cdG9uQ2hhbmdlR2FsbGVyeSggZ2FsbGVyeUltYWdlcyApIHtcblxuXHRcdGNvbnN0IHByb21pc2VzID0gZ2FsbGVyeUltYWdlcy5tYXAoIChpbWFnZSwgaW5kZXgpID0+IHtcblx0XHRcdHJldHVybiB3cC5hcGlSZXF1ZXN0KCB7IHBhdGg6ICcvd3AvdjIvbWVkaWEvJyArIGltYWdlLmlkIH0gKS50aGVuKCBuZXdJbWFnZSA9PiB7XG5cdFx0XHRcdGdhbGxlcnlJbWFnZXNbaW5kZXhdID0geyAuLi5uZXdJbWFnZSwgLi4uaW1hZ2UgfTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cblx0XHRQcm9taXNlLmFsbCggcHJvbWlzZXMgKS50aGVuKCAoKSA9PiB7XG5cdFx0XHR0aGlzLnByb3BzLnNldEF0dHJpYnV0ZXMoIHsgZ2FsbGVyeUltYWdlczogZ2FsbGVyeUltYWdlcy5maWx0ZXIoIGltYWdlID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gISEgaW1hZ2UuaWQgJiYgISEgaW1hZ2Uuc2l6ZXMgJiYgISEgaW1hZ2Uuc2l6ZXMubGFyZ2UgJiYgISEgaW1hZ2Uuc2l6ZXMubGFyZ2UudXJsO1xuXHRcdFx0XHR9ICkgfSApO1xuXHRcdH0gKTtcblxuXHR9XG5cblx0b25QcmV2QXJyb3dDbGljaygpIHtcblx0XHRjb25zdCB7IGF0dHJpYnV0ZXM6IHsgZ2FsbGVyeUltYWdlcyB9IH0gPSB0aGlzLnByb3BzO1xuXHRcdGNvbnN0IHsgc2VsZWN0ZWRJbmRleCB9ID0gdGhpcy5zdGF0ZTtcblx0XHRjb25zdCBuZXdJbmRleCA9ICggc2VsZWN0ZWRJbmRleCArIGdhbGxlcnlJbWFnZXMubGVuZ3RoIC0gMSApICUgZ2FsbGVyeUltYWdlcy5sZW5ndGg7XG5cdFx0dGhpcy5zZXRTdGF0ZSggeyBzZWxlY3RlZEluZGV4OiBuZXdJbmRleCB9ICk7XG5cdH1cblxuXHRvbk5leHRBcnJvd0NsaWNrKCkge1xuXHRcdGNvbnN0IHsgYXR0cmlidXRlczogeyBnYWxsZXJ5SW1hZ2VzIH0gfSA9IHRoaXMucHJvcHM7XG5cdFx0Y29uc3QgeyBzZWxlY3RlZEluZGV4IH0gPSB0aGlzLnN0YXRlO1xuXHRcdGNvbnN0IG5ld0luZGV4ID0gKCBzZWxlY3RlZEluZGV4ICsgMSApICUgZ2FsbGVyeUltYWdlcy5sZW5ndGg7XG5cdFx0dGhpcy5zZXRTdGF0ZSggeyBzZWxlY3RlZEluZGV4OiBuZXdJbmRleCB9ICk7XG5cdH1cblxuXHRyZW5kZXIoKSB7XG5cblx0XHRjb25zdCB7XG5cdFx0XHRhdHRyaWJ1dGVzOiB7XG5cdFx0XHRcdHNsaWRlc2hvd1R5cGUsXG5cdFx0XHRcdGdhbGxlcnlJbWFnZXMsXG5cdFx0XHRcdG1pbkhlaWdodCxcblx0XHRcdH0sXG5cdFx0XHRzZXRBdHRyaWJ1dGVzLFxuXHRcdFx0aXNTZWxlY3RlZCxcblx0XHRcdGNsYXNzTmFtZVxuXHRcdH0gPSB0aGlzLnByb3BzO1xuXG5cdFx0Y29uc3Qgb25DaGFuZ2VHYWxsZXJ5ID0gdGhpcy5vbkNoYW5nZUdhbGxlcnkuYmluZCggdGhpcyApO1xuXG5cdFx0bGV0IHsgc2VsZWN0ZWRJbmRleCB9ID0gdGhpcy5zdGF0ZTtcblxuXHRcdGlmICggc2VsZWN0ZWRJbmRleCA+PSBnYWxsZXJ5SW1hZ2VzLmxlbmd0aCApIHtcblx0XHRcdHNlbGVjdGVkSW5kZXggPSBnYWxsZXJ5SW1hZ2VzLmxlbmd0aCAtIDE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblxuXHRcdFx0XHQ8U2xpZGVzaG93UHJldmlld1xuXHRcdFx0XHRcdHsgLi4udGhpcy5wcm9wcyB9XG5cdFx0XHRcdFx0cHJldmlld0ltYWdlPXsgZ2FsbGVyeUltYWdlc1sgc2VsZWN0ZWRJbmRleCBdIH1cblx0XHRcdFx0XHRvblByZXZBcnJvd0NsaWNrPXsgdGhpcy5vblByZXZBcnJvd0NsaWNrLmJpbmQoIHRoaXMgKSB9XG5cdFx0XHRcdFx0b25OZXh0QXJyb3dDbGljaz17IHRoaXMub25OZXh0QXJyb3dDbGljay5iaW5kKCB0aGlzICkgfVxuXHRcdFx0XHQvPlxuXG5cdFx0XHRcdDxJbnNwZWN0b3JDb250cm9scz5cblxuXHRcdFx0XHRcdDxQYW5lbEJvZHlcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17ICdub3ZhLWJsb2Nrcy1zbGlkZXNob3ctdHlwZS1wYW5lbCcgfVxuXHRcdFx0XHRcdFx0dGl0bGU9eyBfXyggJ1NsaWRlcycsICdfX3BsdWdpbl90eHRkJyApIH0+XG5cdFx0XHRcdFx0XHR7ICEhIGdhbGxlcnlJbWFnZXMubGVuZ3RoICYmIDxHYWxsZXJ5UHJldmlld1xuXHRcdFx0XHRcdFx0XHRnYWxsZXJ5SW1hZ2VzPXsgZ2FsbGVyeUltYWdlcyB9XG5cdFx0XHRcdFx0XHRcdG9uU2VsZWN0SW1hZ2U9eyBzZWxlY3RlZEluZGV4ID0+IHsgdGhpcy5zZXRTdGF0ZSggeyBzZWxlY3RlZEluZGV4IH0gKSB9IH1cblx0XHRcdFx0XHRcdFx0aXNTZWxlY3RlZD17IGlzU2VsZWN0ZWQgfVxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZD17IHNlbGVjdGVkSW5kZXggfVxuXHRcdFx0XHRcdFx0Lz4gfVxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PlxuXG5cdFx0XHRcdFx0eyAnZ2FsbGVyeScgPT09IHNsaWRlc2hvd1R5cGUgJiYgPEZyYWdtZW50PlxuXG5cdFx0XHRcdFx0XHQ8TGF5b3V0UGFuZWwgeyAuLi50aGlzLnByb3BzIH0gLz5cblxuXHRcdFx0XHRcdFx0PFBhbmVsQm9keSB0aXRsZT17IF9fKCAnSGVpZ2h0JywgJ19fcGx1Z2luX3R4dGQnICkgfSBpbml0aWFsT3Blbj17IGZhbHNlIH0+XG5cdFx0XHRcdFx0XHRcdDxSYWRpb0NvbnRyb2xcblx0XHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnTWluaW11bSBIZWlnaHQnLCAnX19wbHVnaW5fdHh0ZCcgKSB9XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWQ9eyBtaW5IZWlnaHQgfVxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsgbWluSGVpZ2h0ID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHsgbWluSGVpZ2h0OiBwYXJzZUludCggbWluSGVpZ2h0LCAxMCApIH0gKVxuXHRcdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnM9e1t7XG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogX18oICdBdXRvJywgJ19fcGx1Z2luX3R4dGQnICksXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogMFxuXHRcdFx0XHRcdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBfXyggJ0hhbGYnLCAnX19wbHVnaW5fdHh0ZCcgKSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiA1MFxuXHRcdFx0XHRcdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBfXyggJ1R3byBUaGlyZHMnLCAnX19wbHVnaW5fdHh0ZCcgKSxcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiA2NlxuXHRcdFx0XHRcdFx0XHRcdH0sIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBfXyggJ1RocmVlIFF1YXJ0ZXJzJywgJ19fcGx1Z2luX3R4dGQnICksXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogNzVcblx0XHRcdFx0XHRcdFx0XHR9LCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogX18oICdGdWxsIEhlaWdodCcsICdfX3BsdWdpbl90eHRkJyApLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IDEwMFxuXHRcdFx0XHRcdFx0XHRcdH1dfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC9QYW5lbEJvZHk+XG5cblx0XHRcdFx0XHRcdDxQYXJhbGxheFBhbmVsIHsgLi4udGhpcy5wcm9wcyB9IC8+XG5cblx0XHRcdFx0XHQ8L0ZyYWdtZW50PiB9XG5cblx0XHRcdFx0XHR7ICdnYWxsZXJ5JyAhPT0gc2xpZGVzaG93VHlwZSAmJiA8UGFuZWxCb2R5PlxuXHRcdFx0XHRcdFx0eyBfXyggJ0NvbWluZyBTb29uJywgJ19fcGx1Z2luX3R4dGQnICkgfVxuXHRcdFx0XHRcdDwvUGFuZWxCb2R5PiB9XG5cblx0XHRcdFx0PC9JbnNwZWN0b3JDb250cm9scz5cblxuXHRcdFx0XHQ8QmxvY2tDb250cm9scz5cblx0XHRcdFx0XHQ8QWxpZ25tZW50VG9vbGJhciB7IC4uLnRoaXMucHJvcHMgfSAvPlxuXHRcdFx0XHRcdDxDb2xvclRvb2xiYXIgeyAuLi50aGlzLnByb3BzIH0gLz5cblx0XHRcdFx0XHQ8VG9vbGJhcj5cblx0XHRcdFx0XHRcdDxNZWRpYVVwbG9hZFxuXHRcdFx0XHRcdFx0XHR0eXBlID0gXCJpbWFnZVwiXG5cdFx0XHRcdFx0XHRcdG11bHRpcGxlXG5cdFx0XHRcdFx0XHRcdGdhbGxlcnlcblx0XHRcdFx0XHRcdFx0dmFsdWUgPSB7IGdhbGxlcnlJbWFnZXMubWFwKCAoIGltYWdlICkgPT4gaW1hZ2UuaWQgKSB9XG5cdFx0XHRcdFx0XHRcdG9uU2VsZWN0ID0geyBvbkNoYW5nZUdhbGxlcnkgfVxuXHRcdFx0XHRcdFx0XHRyZW5kZXIgPSB7ICggeyBvcGVuIH0gKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0PEljb25CdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT0nY29tcG9uZW50cy1pY29uLWJ1dHRvbiBjb21wb25lbnRzLXRvb2xiYXJfX2NvbnRyb2wnXG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD17IF9fKCAnQ2hhbmdlIE1lZGlhJywgJ19fcGx1Z2luX3R4dGQnICkgfVxuXHRcdFx0XHRcdFx0XHRcdFx0aWNvbj17IGljb25zLnN3YXAgfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz0geyAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wZW4oKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvVG9vbGJhcj5cblx0XHRcdFx0PC9CbG9ja0NvbnRyb2xzPlxuXG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdClcblx0fVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jsb2Nrcy9zbGlkZXNob3cvZWRpdC5qcyIsIi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNDUwOTc2XG5leHBvcnQgY29uc3Qgc2h1ZmZsZUFycmF5ID0gZnVuY3Rpb24oIGFycmF5ICkge1xuXHR2YXIgY3VycmVudEluZGV4ID0gYXJyYXkubGVuZ3RoLCB0ZW1wb3JhcnlWYWx1ZSwgcmFuZG9tSW5kZXg7XG5cblx0Ly8gV2hpbGUgdGhlcmUgcmVtYWluIGVsZW1lbnRzIHRvIHNodWZmbGUuLi5cblx0d2hpbGUgKCAwICE9PSBjdXJyZW50SW5kZXggKSB7XG5cblx0XHQvLyBQaWNrIGEgcmVtYWluaW5nIGVsZW1lbnQuLi5cblx0XHRyYW5kb21JbmRleCA9IE1hdGguZmxvb3IoIE1hdGgucmFuZG9tKCkgKiBjdXJyZW50SW5kZXggKTtcblx0XHRjdXJyZW50SW5kZXggLT0gMTtcblxuXHRcdC8vIEFuZCBzd2FwIGl0IHdpdGggdGhlIGN1cnJlbnQgZWxlbWVudC5cblx0XHR0ZW1wb3JhcnlWYWx1ZSA9IGFycmF5W2N1cnJlbnRJbmRleF07XG5cdFx0YXJyYXlbY3VycmVudEluZGV4XSA9IGFycmF5W3JhbmRvbUluZGV4XTtcblx0XHRhcnJheVtyYW5kb21JbmRleF0gPSB0ZW1wb3JhcnlWYWx1ZTtcblx0fVxuXG5cdHJldHVybiBhcnJheTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL3V0aWwuanMiLCJjb25zdCB7XG5cdENvbXBvbmVudCxcblx0RnJhZ21lbnQsXG59ID0gd3AuZWxlbWVudDtcblxuaW1wb3J0IHtcblx0R2FsbGVyeVBsYWNlaG9sZGVyXG59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMnO1xuXG5pbXBvcnQgU2xpZGVzaG93QmFja2dyb3VuZCBmcm9tICcuL2JhY2tncm91bmQnO1xuXG5jb25zdCB7XG5cdE1lZGlhVXBsb2FkLFxufSA9IHdwLmJsb2NrRWRpdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTbGlkZXNob3dQcmV2aWV3IGV4dGVuZHMgQ29tcG9uZW50IHtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpO1xuXG5cdFx0dGhpcy5zdGF0ZSA9IHtcblx0XHRcdHdpbmRvd1dpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCxcblx0XHRcdHdpbmRvd0hlaWdodDogd2luZG93LmlubmVySGVpZ2h0XG5cdFx0fVxuXHR9XG5cblx0Y29tcG9uZW50RGlkTW91bnQoKSB7XG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy51cGRhdGVEaW1lbnNpb25zLmJpbmQoIHRoaXMgKSApO1xuXHRcdHRoaXMudXBkYXRlRGltZW5zaW9ucygpO1xuXHR9XG5cblx0dXBkYXRlRGltZW5zaW9ucygpIHtcblx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdGRpbWVuc2lvbnM6IHtcblx0XHRcdFx0d2lkdGg6IHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoLFxuXHRcdFx0XHRoZWlnaHQ6IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHRyZW5kZXJDb250ZW50KCkge1xuXG5cdFx0Y29uc3Qge1xuXHRcdFx0YXR0cmlidXRlczoge1xuXHRcdFx0XHQvLyBsYXlvdXRcblx0XHRcdFx0Y29udGVudFBhZGRpbmcsXG5cdFx0XHRcdGNvbnRlbnRQYWRkaW5nQ3VzdG9tLFxuXHRcdFx0XHRjb250ZW50V2lkdGgsXG5cdFx0XHRcdGNvbnRlbnRXaWR0aEN1c3RvbSxcblx0XHRcdFx0YXBwbHlNaW5pbXVtSGVpZ2h0QmxvY2ssXG5cdFx0XHRcdC8vIGFsaWdubWVudFxuXHRcdFx0XHR2ZXJ0aWNhbEFsaWdubWVudCxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWdubWVudCxcblx0XHRcdFx0Ly8gY29sb3JzXG5cdFx0XHRcdGNvbnRlbnRDb2xvcixcblx0XHRcdFx0b3ZlcmxheUZpbHRlclN0eWxlLFxuXHRcdFx0XHRvdmVybGF5RmlsdGVyU3RyZW5ndGgsXG5cdFx0XHRcdC8vIG1lZGlhXG5cdFx0XHRcdGdhbGxlcnlJbWFnZXNcblx0XHRcdH0sXG5cdFx0XHRwcmV2aWV3SW1hZ2UsXG5cdFx0XHRjbGFzc05hbWVcblx0XHR9ID0gdGhpcy5wcm9wcztcblxuXHRcdGNvbnN0IGNsYXNzZXMgPSBbXG5cdFx0XHRjbGFzc05hbWUsXG5cdFx0XHQnbm92YS1zbGlkZXNob3cgaXMtcmVhZHknLFxuXHRcdFx0YG5vdmEtdS12YWxpZ24tJHt2ZXJ0aWNhbEFsaWdubWVudH1gLFxuXHRcdFx0YG5vdmEtdS1oYWxpZ24tJHtob3Jpem9udGFsQWxpZ25tZW50fWAsXG5cdFx0XHRgbm92YS11LXNwYWNpbmctJHtjb250ZW50UGFkZGluZ31gLFxuXHRcdFx0YG5vdmEtdS1jb250ZW50LXdpZHRoLSR7Y29udGVudFdpZHRofWAsXG5cdFx0XHRgbm92YS11LWJhY2tncm91bmRgLFxuXHRcdFx0YG5vdmEtdS1iYWNrZ3JvdW5kLSR7b3ZlcmxheUZpbHRlclN0eWxlfWBcblx0XHRdXG5cblx0XHRjb25zdCBzdHlsZXMgPSB7XG5cdFx0XHRzbGlkZXNob3c6IHsgY29sb3I6IGNvbnRlbnRDb2xvciB9LFxuXHRcdFx0Y29udGVudDoge30sXG5cdFx0XHRmb3JlZ3JvdW5kOiB7fSxcblx0XHR9XG5cblx0XHRpZiAoIGNvbnRlbnRQYWRkaW5nID09PSAnY3VzdG9tJyApIHtcblx0XHRcdHN0eWxlcy5mb3JlZ3JvdW5kLnBhZGRpbmdUb3AgPSBgJHtjb250ZW50UGFkZGluZ0N1c3RvbX0lYFxuXHRcdFx0c3R5bGVzLmZvcmVncm91bmQucGFkZGluZ0JvdHRvbSA9IGAke2NvbnRlbnRQYWRkaW5nQ3VzdG9tfSVgXG5cdFx0fVxuXG5cdFx0aWYgKCAhISBhcHBseU1pbmltdW1IZWlnaHRCbG9jayApIHtcblx0XHRcdHN0eWxlcy5zbGlkZXNob3cubWluSGVpZ2h0ID0gbWluSGVpZ2h0ICsgJ3ZoJ1xuXHRcdH1cblxuXHRcdGlmICggY29udGVudFdpZHRoID09PSAnY3VzdG9tJyApIHtcblx0XHRcdHN0eWxlcy5jb250ZW50Lm1heFdpZHRoID0gYCR7Y29udGVudFdpZHRoQ3VzdG9tfSVgXG5cdFx0fVxuXG5cdFx0bGV0IG1heEFzcGVjdFJhdGlvID0gMDtcblx0XHRsZXQgbWVkaWFNaW5IZWlnaHQgPSAwO1xuXHRcdGxldCBzbGlkZXJXaWR0aCA9IDA7XG5cblx0XHRnYWxsZXJ5SW1hZ2VzLm1hcCggaW1hZ2UgPT4ge1xuXHRcdFx0aWYgKCAhISBpbWFnZS5zaXplcyAmJiAhISBpbWFnZS5zaXplcy5sYXJnZSAmJiAhISBpbWFnZS5zaXplcy5sYXJnZS53aWR0aCApIHtcblx0XHRcdFx0Y29uc3QgYXNwZWN0UmF0aW8gPSBpbWFnZS5zaXplcy5sYXJnZS53aWR0aCAvIGltYWdlLnNpemVzLmxhcmdlLmhlaWdodDtcblx0XHRcdFx0bWF4QXNwZWN0UmF0aW8gPSBhc3BlY3RSYXRpbyA+IG1heEFzcGVjdFJhdGlvID8gYXNwZWN0UmF0aW8gOiBtYXhBc3BlY3RSYXRpbztcblx0XHRcdFx0bWVkaWFNaW5IZWlnaHQgPSB0aGlzLnN0YXRlLmRpbWVuc2lvbnMud2lkdGggLyBtYXhBc3BlY3RSYXRpbztcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRzdHlsZXMuc2xpZGVyID0ge1xuXHRcdFx0bWluSGVpZ2h0OiBNYXRoLm1heCggbWVkaWFNaW5IZWlnaHQsIG1heEFzcGVjdFJhdGlvICkgKyAncHgnXG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0eyAhISBnYWxsZXJ5SW1hZ2VzLmxlbmd0aCAmJiA8ZGl2IGNsYXNzTmFtZT17IGNsYXNzZXMuam9pbignICcpIH0gc3R5bGU9eyBzdHlsZXMuc2xpZGVzaG93IH0+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJub3ZhLXNsaWRlc2hvd19fc2xpZGVyXCIgc3R5bGU9eyBzdHlsZXMuc2xpZGVyIH0+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIm5vdmEtc2xpZGVzaG93X19zbGlkZVwiPlxuXHRcdFx0XHRcdFx0XHR7IHByZXZpZXdJbWFnZSAmJiA8RnJhZ21lbnQ+XG5cdFx0XHRcdFx0XHRcdFx0PFNsaWRlc2hvd0JhY2tncm91bmQgeyAuLi50aGlzLnByb3BzIH0gLz5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIm5vdmEtc2xpZGVzaG93X19jb250ZW50IG5vdmEtdS1jb250ZW50LXBhZGRpbmdcIiBzdHlsZT17IHN0eWxlcy5mb3JlZ3JvdW5kIH0+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIm5vdmEtdS1jb250ZW50LWFsaWduXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwibm92YS11LWNvbnRlbnQtd2lkdGhcIiBzdHlsZT17IHN0eWxlcy5jb250ZW50IH0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0eyAhISBwcmV2aWV3SW1hZ2UuYWx0ICYmIDxoMj57IHByZXZpZXdJbWFnZS5hbHQgfTwvaDI+IH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ICEhIHByZXZpZXdJbWFnZS5jYXB0aW9uICYmIDxwPnsgcHJldmlld0ltYWdlLmNhcHRpb24gfTwvcD4gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0ZyYWdtZW50PiB9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIm5vdmEtc2xpZGVzaG93X19jb250cm9sc1wiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJub3ZhLXNsaWRlc2hvd19fYXJyb3cgbm92YS1zbGlkZXNob3dfX2Fycm93LS1wcmV2IG5vdmEtc2xpZGVzaG93X19hcnJvdy0tZGlzYWJsZWRcIiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uUHJldkFycm93Q2xpY2t9PjwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJub3ZhLXNsaWRlc2hvd19fYXJyb3cgbm92YS1zbGlkZXNob3dfX2Fycm93LS1uZXh0IG5vdmEtc2xpZGVzaG93X19hcnJvdy0tZGlzYWJsZWRcIiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uTmV4dEFycm93Q2xpY2t9PjwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj4gfVxuXHRcdFx0XHR7ICEgZ2FsbGVyeUltYWdlcy5sZW5ndGggJiYgPEZyYWdtZW50PlxuXHRcdFx0XHRcdCA8R2FsbGVyeVBsYWNlaG9sZGVyIHsuLi50aGlzLnByb3BzfSAvPlxuXHRcdFx0XHRcdCA8ZGl2IGNsYXNzTmFtZT1cIm5vdmEtc2xpZGVzaG93X19jb250cm9sc1wiPlxuXHRcdFx0XHRcdFx0IDxkaXYgY2xhc3NOYW1lPVwibm92YS1zbGlkZXNob3dfX2Fycm93IG5vdmEtc2xpZGVzaG93X19hcnJvdy0tcHJldiBub3ZhLXNsaWRlc2hvd19fYXJyb3ctLWRpc2FibGVkXCI+PC9kaXY+XG5cdFx0XHRcdFx0XHQgPGRpdiBjbGFzc05hbWU9XCJub3ZhLXNsaWRlc2hvd19fYXJyb3cgbm92YS1zbGlkZXNob3dfX2Fycm93LS1uZXh0IG5vdmEtc2xpZGVzaG93X19hcnJvdy0tZGlzYWJsZWRcIj48L2Rpdj5cblx0XHRcdFx0XHQgPC9kaXY+XG5cdFx0XHRcdCA8L0ZyYWdtZW50PiB9XG5cdFx0ICAgIDwvRnJhZ21lbnQ+XG5cdFx0KVxuXHR9XG5cblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHsgZGltZW5zaW9ucyB9ID0gdGhpcy5zdGF0ZTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiByZWY9eyBlbCA9PiAoIHRoaXMuY29udGFpbmVyID0gZWwgKSB9PlxuXHRcdFx0XHR7IGRpbWVuc2lvbnMgJiYgdGhpcy5yZW5kZXJDb250ZW50KCkgfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYmxvY2tzL3NsaWRlc2hvdy9wcmV2aWV3LmpzIiwiaW1wb3J0IHdpdGhQYXJhbGxheCBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dpdGgtcGFyYWxsYXgnO1xuXG5jb25zdCB7XG5cdENvbXBvbmVudCxcbn0gPSB3cC5lbGVtZW50O1xuXG5jbGFzcyBTbGlkZXNob3dCYWNrZ3JvdW5kIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHtcblx0XHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdFx0b3ZlcmxheUZpbHRlclN0eWxlLFxuXHRcdFx0XHRvdmVybGF5RmlsdGVyU3RyZW5ndGgsXG5cdFx0XHR9XG5cdFx0fSA9IHRoaXMucHJvcHM7XG5cblx0XHRjb25zdCBzdHlsZXMgPSB7XG5cdFx0XHRvcGFjaXR5OiAxXG5cdFx0fTtcblxuXHRcdGlmICggb3ZlcmxheUZpbHRlclN0eWxlICE9PSAnbm9uZScgKSB7XG5cdFx0XHRzdHlsZXMub3BhY2l0eSA9IDEgLSBvdmVybGF5RmlsdGVyU3RyZW5ndGggLyAxMDBcblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJub3ZhLXNsaWRlc2hvd19fYmFja2dyb3VuZFwiIHN0eWxlPXsgdGhpcy5wcm9wcy5zdHlsZSB9PlxuXHRcdFx0XHQ8aW1nIGNsYXNzTmFtZT1cIm5vdmEtc2xpZGVzaG93X19tZWRpYVwiIHNyYz17IHRoaXMucHJvcHMucHJldmlld0ltYWdlLnNpemVzLmxhcmdlLnVybCB9IGFsdD1cIlwiIHN0eWxlPXsgc3R5bGVzIH0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdClcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoUGFyYWxsYXgoIFNsaWRlc2hvd0JhY2tncm91bmQgKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9ibG9ja3Mvc2xpZGVzaG93L2JhY2tncm91bmQuanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +!function(){"use strict";function n(){for(var e=[],t=0;t=o.length&&(s=o.length-1),wp.element.createElement(L,null,wp.element.createElement(y.a,l()({},this.props,{previewImage:o[s],onPrevArrowClick:this.onPrevArrowClick.bind(this),onNextArrowClick:this.onNextArrowClick.bind(this)})),wp.element.createElement(k,null,wp.element.createElement(S,{className:"nova-blocks-slideshow-type-panel",title:b("Slides","__plugin_txtd")},!!o.length&&wp.element.createElement(_.d,{galleryImages:o,onSelectImage:function(t){e.setState({selectedIndex:t})},isSelected:c,selected:s})),"gallery"===r&&wp.element.createElement(L,null,wp.element.createElement(_.f,this.props),wp.element.createElement(S,{title:b("Height","__plugin_txtd"),initialOpen:!1},wp.element.createElement(O,{label:b("Minimum Height","__plugin_txtd"),selected:i,onChange:function(e){a({minHeight:parseInt(e,10)})},options:[{label:b("Auto","__plugin_txtd"),value:0},{label:b("Half","__plugin_txtd"),value:50},{label:b("Two Thirds","__plugin_txtd"),value:66},{label:b("Three Quarters","__plugin_txtd"),value:75},{label:b("Full Height","__plugin_txtd"),value:100}]})),wp.element.createElement(_.g,this.props)),"gallery"!==r&&wp.element.createElement(S,null,b("Coming Soon","__plugin_txtd"))),wp.element.createElement(E,null,wp.element.createElement(_.a,this.props),wp.element.createElement(_.b,this.props),wp.element.createElement(P,null,wp.element.createElement(C,{type:"image",multiple:!0,gallery:!0,value:o.map(function(e){return e.id}),onSelect:u,render:function(e){var t=e.open;return wp.element.createElement(H,{className:"components-icon-button components-toolbar__control",label:b("Change Media","__plugin_txtd"),icon:g.i,onClick:function(){t()}})}}))))}}]),t}(A);t.a=j},function(e,t,n){"use strict";n.d(t,"a",function(){return r});var r=function(e){for(var t,n,r=e.length;0!==r;)n=Math.floor(Math.random()*r),r-=1,t=e[r],e[r]=e[n],e[n]=t;return e}},function(e,t,n){"use strict";var r=n(0),o=n.n(r),i=n(1),l=n.n(i),a=n(2),c=n.n(a),u=n(3),s=n.n(u),p=n(4),f=n.n(p),m=n(25),d=n(152),h=wp.element,v=h.Component,g=h.Fragment,_=(wp.blockEditor.MediaUpload,function(e){function t(){l()(this,t);var e=s()(this,(t.__proto__||o()(t)).apply(this,arguments));return e.state={windowWidth:window.innerWidth,windowHeight:window.innerHeight},e}return f()(t,e),c()(t,[{key:"componentDidMount",value:function(){window.addEventListener("resize",this.updateDimensions.bind(this)),this.updateDimensions()}},{key:"updateDimensions",value:function(){this.setState({dimensions:{width:this.container.offsetWidth,height:this.container.offsetHeight}})}},{key:"renderContent",value:function(){var e=this,t=this.props,n=t.attributes,r=n.contentPadding,o=n.contentPaddingCustom,i=n.contentWidth,l=n.contentWidthCustom,a=n.applyMinimumHeightBlock,c=n.verticalAlignment,u=n.horizontalAlignment,s=n.contentColor,p=n.overlayFilterStyle,f=(n.overlayFilterStrength,n.galleryImages),h=t.previewImage,v=t.className,_=[v,"nova-slideshow is-ready","nova-u-valign-"+c,"nova-u-halign-"+u,"nova-u-spacing-"+r,"nova-u-content-width-"+i,"nova-u-background","nova-u-background-"+p],w={slideshow:{color:s},content:{},foreground:{}};"custom"===r&&(w.foreground.paddingTop=o+"%",w.foreground.paddingBottom=o+"%"),a&&(w.slideshow.minHeight=minHeight+"vh"),"custom"===i&&(w.content.maxWidth=l+"%");var y=0,b=0;return f.map(function(t){if(t.sizes&&t.sizes.large&&t.sizes.large.width){var n=t.sizes.large.width/t.sizes.large.height;y=n>y?n:y,b=e.state.dimensions.width/y}}),w.slider={minHeight:Math.max(b,y)+"px"},wp.element.createElement(g,null,!!f.length&&wp.element.createElement("div",{className:_.join(" "),style:w.slideshow},wp.element.createElement("div",{className:"nova-slideshow__slider",style:w.slider},wp.element.createElement("div",{className:"nova-slideshow__slide"},h&&wp.element.createElement(g,null,wp.element.createElement(d.a,this.props),wp.element.createElement("div",{className:"nova-slideshow__content nova-u-content-padding",style:w.foreground},wp.element.createElement("div",{className:"nova-u-content-align"},wp.element.createElement("div",{className:"nova-u-content-width",style:w.content},!!h.alt&&wp.element.createElement("h2",null,h.alt),!!h.caption&&wp.element.createElement("p",null,h.caption))))))),wp.element.createElement("div",{className:"nova-slideshow__controls"},wp.element.createElement("div",{className:"nova-slideshow__arrow nova-slideshow__arrow--prev nova-slideshow__arrow--disabled",onClick:this.props.onPrevArrowClick}),wp.element.createElement("div",{className:"nova-slideshow__arrow nova-slideshow__arrow--next nova-slideshow__arrow--disabled",onClick:this.props.onNextArrowClick}))),!f.length&&wp.element.createElement(g,null,wp.element.createElement(m.c,this.props),wp.element.createElement("div",{className:"nova-slideshow__controls"},wp.element.createElement("div",{className:"nova-slideshow__arrow nova-slideshow__arrow--prev nova-slideshow__arrow--disabled"}),wp.element.createElement("div",{className:"nova-slideshow__arrow nova-slideshow__arrow--next nova-slideshow__arrow--disabled"}))))}},{key:"render",value:function(){var e=this,t=this.state.dimensions;return wp.element.createElement("div",{ref:function(t){return e.container=t}},t&&this.renderContent())}}]),t}(v));t.a=_},function(e,t,n){"use strict";var r=n(0),o=n.n(r),i=n(1),l=n.n(i),a=n(2),c=n.n(a),u=n(3),s=n.n(u),p=n(4),f=n.n(p),m=n(66),d=wp.element.Component,h=function(e){function t(){return l()(this,t),s()(this,(t.__proto__||o()(t)).apply(this,arguments))}return f()(t,e),c()(t,[{key:"render",value:function(){var e=this.props.attributes,t=e.overlayFilterStyle,n=e.overlayFilterStrength,r={opacity:1};return"none"!==t&&(r.opacity=1-n/100),wp.element.createElement("div",{className:"nova-slideshow__background",style:this.props.style},wp.element.createElement("img",{className:"nova-slideshow__media",src:this.props.previewImage.sizes.large.url,alt:"",style:r}))}}]),t}(d);t.a=Object(m.a)(h)}]); \ No newline at end of file diff --git a/dist/js/frontend.blocks.js b/dist/js/frontend.blocks.js index dc6e0a315..4fd3ee09c 100644 --- a/dist/js/frontend.blocks.js +++ b/dist/js/frontend.blocks.js @@ -1,2 +1 @@ -!function(n){function e(o){if(r[o])return r[o].exports;var t=r[o]={i:o,l:!1,exports:{}};return n[o].call(t.exports,t,t.exports,e),t.l=!0,t.exports}var r={};e.m=n,e.c=r,e.d=function(n,r,o){e.o(n,r)||Object.defineProperty(n,r,{configurable:!1,enumerable:!0,get:o})},e.n=function(n){var r=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(r,"a",r),r},e.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},e.p="",e(e.s=153)}({153:function(n,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=r(154);r.n(o),r(155)},154:function(n,e){!function(n,e,r){void 0!==n.fn.rellax&&n(".nova-hero--parallax").find(".nova-hero__background").rellax({container:".nova-hero__mask"})}(jQuery,window)},155:function(n,e,r){"use strict";var o=r(31),t=".nova-slideshow__slider",i=".nova-slideshow__background",a=".nova-slideshow__foreground",s=1e3;!function(n,e,r){function d(n){n.css("minHeight",""),n.css("minHeight",l(n))}function l(r){var o=(e.innerWidth,r.find(t),r.find(t).outerWidth()),i=e.innerHeight,a=parseInt(r.data("min-height"))*i/100,s=0,d=0,l=0;return r.find(".nova-slideshow__slide").each(function(e,r){var t=n(r),i=t.find(".nova-slideshow__media"),a=i.data("width"),u=i.data("height"),c=a/u,f=t.outerHeight();l=c>l?c:l,s=o/l,d=f>d?f:d}),Math.max(a,d,s)}function u(){h.each(function(e,r){var o=n(r),i=o.find(t);d(o),_.rellax("refresh"),i.is(".slick-initialized")&&i.slick("setPosition")})}function c(e,r,o,t){var i=n(r.$slides[o]),a=n(r.$slides[t]);n(r.$slides).css("zIndex",800),f(i,a,v(r,o,t))}function f(n,e){var o=arguments.length>2&&arguments[2]!==r?arguments[2]:1,t=n.outerWidth();n.velocity({tween:[0,1]},{duration:s,easing:"easeInOutCirc",progress:function(r,s,d,l,u){var c=e.get(0),f=e.find(i).get(0),v=e.find(a).get(0),h=n.get(0),_=(n.find(i).get(0),n.find(a).get(0)),w=function(n){return"translateX("+o*n+"px)"};c.style.transform=w(t*l),f.style.transform=w((300-t)*l),v.style.transform=w(t*-l),h.style.transform=w(-300*(1-l)),_.style.transform=w(300*(1-l))}})}function v(n,e,r){var o=1;return n.slideCount>2&&(0===e&&r===n.slideCount-1&&(o=-1),r1&&(o=n('
').appendTo(i),d(i),i.addClass("is-ready"),a.on("beforeChange",c),a.slick({rows:0,fade:!0,prevArrow:'
',nextArrow:'
',appendArrows:o,speed:s}))}),n(e).on("resize",Object(o.a)(u,300))}(jQuery,window)},31:function(n,e,r){"use strict";r.d(e,"a",function(){return o});var o=function(n,e){var r=null;return function(){var o=this,t=arguments,i=function(){n.apply(o,t)};clearTimeout(r),r=setTimeout(i,e)}}}}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZGlzdC9qcy9mcm9udGVuZC5ibG9ja3MuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIDg3ZTM0ZTUyZWU5ODA0MzE1ZDljIiwid2VicGFjazovLy8uL3NyYy9mcm9udGVuZC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYmxvY2tzL2hlcm8vZnJvbnRlbmQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Jsb2Nrcy9zbGlkZXNob3cvZnJvbnRlbmQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzLmpzIl0sIm5hbWVzIjpbIm1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpbnN0YWxsZWRNb2R1bGVzIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwibiIsIl9fZXNNb2R1bGUiLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCIxNTMiLCJfX3dlYnBhY2tfZXhwb3J0c19fIiwidmFsdWUiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jsb2Nrc19oZXJvX2Zyb250ZW5kX18iLCIxNTQiLCIkIiwid2luZG93IiwidW5kZWZpbmVkIiwiZm4iLCJyZWxsYXgiLCJmaW5kIiwiY29udGFpbmVyIiwialF1ZXJ5IiwiMTU1IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc19fIiwiU0xJREVSX1NFTEVDVE9SIiwiQkFDS0dST1VORF9TRUxFQ1RPUiIsIkZPUkVHUk9VTkRfU0VMRUNUT1IiLCJUUkFOU0lUSU9OX0RVUkFUSU9OIiwicmVzZXRCbG9ja01pbkhlaWdodCIsIiRibG9jayIsImNzcyIsImdldEJsb2NrTWluSGVpZ2h0Iiwic2xpZGVyV2lkdGgiLCJpbm5lcldpZHRoIiwib3V0ZXJXaWR0aCIsIndpbmRvd0hlaWdodCIsImlubmVySGVpZ2h0Iiwic2xpZGVyTWluSGVpZ2h0IiwicGFyc2VJbnQiLCJkYXRhIiwibWVkaWFNaW5IZWlnaHQiLCJzbGlkZU1heEhlaWdodCIsIm1heEFzcGVjdFJhdGlvIiwiZWFjaCIsIm9iaiIsIiRzbGlkZSIsIiRtZWRpYSIsIndpZHRoIiwiaGVpZ2h0IiwiYXNwZWN0UmF0aW8iLCJzbGlkZUhlaWdodCIsIm91dGVySGVpZ2h0IiwiTWF0aCIsIm1heCIsIm9uUmVzaXplIiwiJGJsb2NrcyIsImluZGV4IiwiYmxvY2siLCIkc2xpZGVyIiwiJHJlbGxheFRhcmdldCIsImlzIiwic2xpY2siLCJvbkJlZm9yZVNsaWRlQ2hhbmdlIiwiZXZlbnQiLCJjdXJyZW50U2xpZGUiLCJuZXh0U2xpZGUiLCIkY3VycmVudFNsaWRlIiwiJHNsaWRlcyIsIiRuZXh0U2xpZGUiLCJ0cmFuc2l0aW9uIiwiZ2V0RGlyZWN0aW9uIiwiJGN1cnJlbnQiLCIkbmV4dCIsInNpZ24iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzbGlkZVdpZHRoIiwidmVsb2NpdHkiLCJ0d2VlbiIsImR1cmF0aW9uIiwiZWFzaW5nIiwicHJvZ3Jlc3MiLCJlbGVtZW50cyIsInBlcmNlbnRDb21wbGV0ZSIsInJlbWFpbmluZyIsInR3ZWVuVmFsdWUiLCJhY3RpdmVDYWxsIiwibmV4dCIsIm5leHRCZyIsIm5leHRGZyIsImN1cnJlbnQiLCJjdXJyZW50RmciLCJtb3ZlWCIsIngiLCJzdHlsZSIsInRyYW5zZm9ybSIsImRpcmVjdGlvbiIsInNsaWRlQ291bnQiLCJjaGlsZHJlbiIsIiRhcnJvd0NvbnRhaW5lciIsImFwcGVuZFRvIiwiYWRkQ2xhc3MiLCJvbiIsInJvd3MiLCJmYWRlIiwicHJldkFycm93IiwibmV4dEFycm93IiwiYXBwZW5kQXJyb3dzIiwic3BlZWQiLCJkZWJvdW5jZSIsIjMxIiwiZnVuYyIsIndhaXQiLCJ0aW1lb3V0IiwiY29udGV4dCIsInRoaXMi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LCJmaWxlIjoiLi9kaXN0L2pzL2Zyb250ZW5kLmJsb2Nrcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbi8qKioqKiovIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbi8qKioqKiovIFx0XHRcdH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxNTMpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAxNTM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmxvY2tzX2hlcm9fZnJvbnRlbmRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTU0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jsb2Nrc19oZXJvX2Zyb250ZW5kX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jsb2Nrc19oZXJvX2Zyb250ZW5kX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmxvY2tzX3NsaWRlc2hvd19mcm9udGVuZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTUpO1xuXG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDE1NDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuKGZ1bmN0aW9uICgkLCB3aW5kb3csIHVuZGVmaW5lZCkge1xuXG5cdC8vIGluaXRpYWxpemUgcGFyYWxsYXggZWZmZWN0XG5cdGlmICh0eXBlb2YgJC5mbi5yZWxsYXggIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHQkKCcubm92YS1oZXJvLS1wYXJhbGxheCcpLmZpbmQoJy5ub3ZhLWhlcm9fX2JhY2tncm91bmQnKS5yZWxsYXgoe1xuXHRcdFx0Y29udGFpbmVyOiAnLm5vdmEtaGVyb19fbWFzaydcblx0XHR9KTtcblx0fVxufSkoalF1ZXJ5LCB3aW5kb3cpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTU1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcblxuXG52YXIgQkxPQ0tfU0VMRUNUT1IgPSAnLm5vdmEtc2xpZGVzaG93JztcbnZhciBTTElERVJfU0VMRUNUT1IgPSAnLm5vdmEtc2xpZGVzaG93X19zbGlkZXInO1xudmFyIFNMSURFX1NFTEVDVE9SID0gJy5ub3ZhLXNsaWRlc2hvd19fc2xpZGUnO1xudmFyIENPTlRFTlRfU0VMRUNUT1IgPSAnLm5vdmEtc2xpZGVzaG93X19jb250ZW50JztcbnZhciBCQUNLR1JPVU5EX1NFTEVDVE9SID0gJy5ub3ZhLXNsaWRlc2hvd19fYmFja2dyb3VuZCc7XG52YXIgRk9SRUdST1VORF9TRUxFQ1RPUiA9ICcubm92YS1zbGlkZXNob3dfX2ZvcmVncm91bmQnO1xudmFyIFRSQU5TSVRJT05fRFVSQVRJT04gPSAxMDAwO1xudmFyIFRSQU5TSVRJT05fRUFTSU5HID0gXCJlYXNlSW5PdXRDaXJjXCI7XG5cbihmdW5jdGlvbiAoJCwgd2luZG93LCB1bmRlZmluZWQpIHtcblxuXHR2YXIgJGJsb2NrcyA9ICQoQkxPQ0tfU0VMRUNUT1IpO1xuXHR2YXIgJHJlbGxheFRhcmdldCA9ICQoJy5ub3ZhLXNsaWRlc2hvdy0tcGFyYWxsYXgnKS5maW5kKFNMSURFUl9TRUxFQ1RPUik7XG5cblx0Ly8gaW5pdGlhbGl6ZSBwYXJhbGxheCBlZmZlY3Rcblx0aWYgKHR5cGVvZiAkLmZuLnJlbGxheCAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdCRyZWxsYXhUYXJnZXQucmVsbGF4KHtcblx0XHRcdGNvbnRhaW5lcjogJy5ub3ZhLXNsaWRlc2hvd19fbWFzaycsXG5cdFx0XHRjaGlsZHJlbjogQ09OVEVOVF9TRUxFQ1RPUlxuXHRcdH0pO1xuXHR9XG5cblx0JGJsb2Nrcy5lYWNoKGZ1bmN0aW9uIChpbmRleCwgYmxvY2spIHtcblx0XHR2YXIgJGJsb2NrID0gJChibG9jayksXG5cdFx0ICAgICRzbGlkZXIgPSAkYmxvY2suZmluZChTTElERVJfU0VMRUNUT1IpLFxuXHRcdCAgICAkYXJyb3dDb250YWluZXI7XG5cblx0XHRpZiAoJHNsaWRlci5jaGlsZHJlbigpLmxlbmd0aCA+IDEpIHtcblx0XHRcdCRhcnJvd0NvbnRhaW5lciA9ICQoJzxkaXYgY2xhc3M9XCJub3ZhLXNsaWRlc2hvd19fY29udHJvbHNcIj4nKS5hcHBlbmRUbygkYmxvY2spO1xuXG5cdFx0XHRyZXNldEJsb2NrTWluSGVpZ2h0KCRibG9jayk7XG5cdFx0XHQkYmxvY2suYWRkQ2xhc3MoJ2lzLXJlYWR5Jyk7XG5cblx0XHRcdCRzbGlkZXIub24oJ2JlZm9yZUNoYW5nZScsIG9uQmVmb3JlU2xpZGVDaGFuZ2UpO1xuXG5cdFx0XHQkc2xpZGVyLnNsaWNrKHtcblx0XHRcdFx0cm93czogMCxcblx0XHRcdFx0Ly8gZm9yIHNpbXBsZXIgcmV2ZWFsIHRyYW5zaXRpb25zIGJldHdlZW4gc2xpZGVzXG5cdFx0XHRcdGZhZGU6IHRydWUsXG5cdFx0XHRcdHByZXZBcnJvdzogJzxkaXYgY2xhc3M9XCJub3ZhLXNsaWRlc2hvd19fYXJyb3cgbm92YS1zbGlkZXNob3dfX2Fycm93LS1wcmV2XCI+PC9kaXY+Jyxcblx0XHRcdFx0bmV4dEFycm93OiAnPGRpdiBjbGFzcz1cIm5vdmEtc2xpZGVzaG93X19hcnJvdyBub3ZhLXNsaWRlc2hvd19fYXJyb3ctLW5leHRcIj48L2Rpdj4nLFxuXHRcdFx0XHRhcHBlbmRBcnJvd3M6ICRhcnJvd0NvbnRhaW5lcixcblx0XHRcdFx0c3BlZWQ6IFRSQU5TSVRJT05fRFVSQVRJT05cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cblx0JCh3aW5kb3cpLm9uKCdyZXNpemUnLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc19fW1wiYVwiIC8qIGRlYm91bmNlICovXSkob25SZXNpemUsIDMwMCkpO1xuXG5cdGZ1bmN0aW9uIHJlc2V0QmxvY2tNaW5IZWlnaHQoJGJsb2NrKSB7XG5cdFx0JGJsb2NrLmNzcygnbWluSGVpZ2h0JywgJycpO1xuXHRcdCRibG9jay5jc3MoJ21pbkhlaWdodCcsIGdldEJsb2NrTWluSGVpZ2h0KCRibG9jaykpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0QmxvY2tNaW5IZWlnaHQoJGJsb2NrKSB7XG5cdFx0dmFyIHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5cdFx0dmFyICRzbGlkZXIgPSAkYmxvY2suZmluZChTTElERVJfU0VMRUNUT1IpO1xuXHRcdHZhciBzbGlkZXJXaWR0aCA9ICRibG9jay5maW5kKFNMSURFUl9TRUxFQ1RPUikub3V0ZXJXaWR0aCgpO1xuXHRcdHZhciB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdFx0dmFyIHNsaWRlck1pbkhlaWdodCA9IHBhcnNlSW50KCRibG9jay5kYXRhKCdtaW4taGVpZ2h0JykpICogd2luZG93SGVpZ2h0IC8gMTAwO1xuXHRcdHZhciBtZWRpYU1pbkhlaWdodCA9IDA7XG5cdFx0dmFyIHNsaWRlTWF4SGVpZ2h0ID0gMDtcblx0XHR2YXIgbWF4QXNwZWN0UmF0aW8gPSAwO1xuXG5cdFx0JGJsb2NrLmZpbmQoU0xJREVfU0VMRUNUT1IpLmVhY2goZnVuY3Rpb24gKGksIG9iaikge1xuXHRcdFx0dmFyICRzbGlkZSA9ICQob2JqKSxcblx0XHRcdCAgICAkbWVkaWEgPSAkc2xpZGUuZmluZCgnLm5vdmEtc2xpZGVzaG93X19tZWRpYScpLFxuXHRcdFx0ICAgIHdpZHRoID0gJG1lZGlhLmRhdGEoJ3dpZHRoJyksXG5cdFx0XHQgICAgaGVpZ2h0ID0gJG1lZGlhLmRhdGEoJ2hlaWdodCcpLFxuXHRcdFx0ICAgIGFzcGVjdFJhdGlvID0gd2lkdGggLyBoZWlnaHQsXG5cdFx0XHQgICAgc2xpZGVIZWlnaHQgPSAkc2xpZGUub3V0ZXJIZWlnaHQoKTtcblxuXHRcdFx0bWF4QXNwZWN0UmF0aW8gPSBhc3BlY3RSYXRpbyA+IG1heEFzcGVjdFJhdGlvID8gYXNwZWN0UmF0aW8gOiBtYXhBc3BlY3RSYXRpbztcblx0XHRcdG1lZGlhTWluSGVpZ2h0ID0gc2xpZGVyV2lkdGggLyBtYXhBc3BlY3RSYXRpbztcblx0XHRcdHNsaWRlTWF4SGVpZ2h0ID0gc2xpZGVIZWlnaHQgPiBzbGlkZU1heEhlaWdodCA/IHNsaWRlSGVpZ2h0IDogc2xpZGVNYXhIZWlnaHQ7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gTWF0aC5tYXgoc2xpZGVyTWluSGVpZ2h0LCBzbGlkZU1heEhlaWdodCwgbWVkaWFNaW5IZWlnaHQpO1xuXHR9XG5cblx0ZnVuY3Rpb24gb25SZXNpemUoKSB7XG5cblx0XHQkYmxvY2tzLmVhY2goZnVuY3Rpb24gKGluZGV4LCBibG9jaykge1xuXHRcdFx0dmFyICRibG9jayA9ICQoYmxvY2spO1xuXHRcdFx0dmFyICRzbGlkZXIgPSAkYmxvY2suZmluZChTTElERVJfU0VMRUNUT1IpO1xuXG5cdFx0XHRyZXNldEJsb2NrTWluSGVpZ2h0KCRibG9jayk7XG5cdFx0XHQkcmVsbGF4VGFyZ2V0LnJlbGxheCgncmVmcmVzaCcpO1xuXG5cdFx0XHRpZiAoJHNsaWRlci5pcygnLnNsaWNrLWluaXRpYWxpemVkJykpIHtcblx0XHRcdFx0JHNsaWRlci5zbGljaygnc2V0UG9zaXRpb24nKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIG9uQmVmb3JlU2xpZGVDaGFuZ2UoZXZlbnQsIHNsaWNrLCBjdXJyZW50U2xpZGUsIG5leHRTbGlkZSkge1xuXHRcdHZhciAkY3VycmVudFNsaWRlID0gJChzbGljay4kc2xpZGVzW2N1cnJlbnRTbGlkZV0pO1xuXHRcdHZhciAkbmV4dFNsaWRlID0gJChzbGljay4kc2xpZGVzW25leHRTbGlkZV0pO1xuXG5cdFx0JChzbGljay4kc2xpZGVzKS5jc3MoJ3pJbmRleCcsIDgwMCk7XG5cblx0XHR0cmFuc2l0aW9uKCRjdXJyZW50U2xpZGUsICRuZXh0U2xpZGUsIGdldERpcmVjdGlvbihzbGljaywgY3VycmVudFNsaWRlLCBuZXh0U2xpZGUpKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHRyYW5zaXRpb24oJGN1cnJlbnQsICRuZXh0KSB7XG5cdFx0dmFyIHNpZ24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDE7XG5cblx0XHR2YXIgc2xpZGVXaWR0aCA9ICRjdXJyZW50Lm91dGVyV2lkdGgoKTtcblx0XHR2YXIgbW92ZSA9IDMwMDtcblxuXHRcdCRjdXJyZW50LnZlbG9jaXR5KHtcblx0XHRcdHR3ZWVuOiBbMCwgMV1cblx0XHR9LCB7XG5cdFx0XHRkdXJhdGlvbjogVFJBTlNJVElPTl9EVVJBVElPTixcblx0XHRcdGVhc2luZzogVFJBTlNJVElPTl9FQVNJTkcsXG5cdFx0XHRwcm9ncmVzczogZnVuY3Rpb24gcHJvZ3Jlc3MoZWxlbWVudHMsIHBlcmNlbnRDb21wbGV0ZSwgcmVtYWluaW5nLCB0d2VlblZhbHVlLCBhY3RpdmVDYWxsKSB7XG5cdFx0XHRcdHZhciBuZXh0ID0gJG5leHQuZ2V0KDApO1xuXHRcdFx0XHR2YXIgbmV4dEJnID0gJG5leHQuZmluZChCQUNLR1JPVU5EX1NFTEVDVE9SKS5nZXQoMCk7XG5cdFx0XHRcdHZhciBuZXh0RmcgPSAkbmV4dC5maW5kKEZPUkVHUk9VTkRfU0VMRUNUT1IpLmdldCgwKTtcblx0XHRcdFx0dmFyIGN1cnJlbnQgPSAkY3VycmVudC5nZXQoMCk7XG5cdFx0XHRcdHZhciBjdXJyZW50QmcgPSAkY3VycmVudC5maW5kKEJBQ0tHUk9VTkRfU0VMRUNUT1IpLmdldCgwKTtcblx0XHRcdFx0dmFyIGN1cnJlbnRGZyA9ICRjdXJyZW50LmZpbmQoRk9SRUdST1VORF9TRUxFQ1RPUikuZ2V0KDApO1xuXG5cdFx0XHRcdHZhciBtb3ZlWCA9IGZ1bmN0aW9uIG1vdmVYKHgpIHtcblx0XHRcdFx0XHRyZXR1cm4gJ3RyYW5zbGF0ZVgoJyArIHNpZ24gKiB4ICsgJ3B4KSc7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0bmV4dC5zdHlsZS50cmFuc2Zvcm0gPSBtb3ZlWChzbGlkZVdpZHRoICogdHdlZW5WYWx1ZSk7XG5cdFx0XHRcdG5leHRCZy5zdHlsZS50cmFuc2Zvcm0gPSBtb3ZlWCgobW92ZSAtIHNsaWRlV2lkdGgpICogdHdlZW5WYWx1ZSk7XG5cdFx0XHRcdG5leHRGZy5zdHlsZS50cmFuc2Zvcm0gPSBtb3ZlWChzbGlkZVdpZHRoICogLXR3ZWVuVmFsdWUpO1xuXG5cdFx0XHRcdGN1cnJlbnQuc3R5bGUudHJhbnNmb3JtID0gbW92ZVgoLW1vdmUgKiAoMSAtIHR3ZWVuVmFsdWUpKTtcblx0XHRcdFx0Y3VycmVudEZnLnN0eWxlLnRyYW5zZm9ybSA9IG1vdmVYKG1vdmUgKiAoMSAtIHR3ZWVuVmFsdWUpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldERpcmVjdGlvbihzbGljaywgY3VycmVudFNsaWRlLCBuZXh0U2xpZGUpIHtcblx0XHR2YXIgZGlyZWN0aW9uID0gMTtcblx0XHRpZiAoc2xpY2suc2xpZGVDb3VudCA+IDIpIHtcblx0XHRcdGlmIChjdXJyZW50U2xpZGUgPT09IDAgJiYgbmV4dFNsaWRlID09PSBzbGljay5zbGlkZUNvdW50IC0gMSkge1xuXHRcdFx0XHRkaXJlY3Rpb24gPSAtMTtcblx0XHRcdH1cblx0XHRcdGlmIChuZXh0U2xpZGUgPCBjdXJyZW50U2xpZGUgJiYgKG5leHRTbGlkZSAhPT0gMCB8fCBjdXJyZW50U2xpZGUgIT09IHNsaWNrLnNsaWRlQ291bnQgLSAxKSkge1xuXHRcdFx0XHRkaXJlY3Rpb24gPSAtMTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGRpcmVjdGlvbjtcblx0fVxufSkoalF1ZXJ5LCB3aW5kb3cpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZWJvdW5jZTsgfSk7XG52YXIgZGVib3VuY2UgPSBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0KSB7XG5cdHZhciB0aW1lb3V0ID0gbnVsbDtcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcztcblx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuXHRcdHZhciBsYXRlciA9IGZ1bmN0aW9uIGxhdGVyKCkge1xuXHRcdFx0ZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcblx0XHR9O1xuXG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcblx0fTtcbn07XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBkaXN0L2pzL2Zyb250ZW5kLmJsb2Nrcy5qcyIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE1Myk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgODdlMzRlNTJlZTk4MDQzMTVkOWMiLCJpbXBvcnQgJy4vYmxvY2tzL2hlcm8vZnJvbnRlbmQnO1xuaW1wb3J0ICcuL2Jsb2Nrcy9zbGlkZXNob3cvZnJvbnRlbmQnO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9mcm9udGVuZC5qcyIsIihmdW5jdGlvbigkLCB3aW5kb3csIHVuZGVmaW5lZCkge1xuXG5cdC8vIGluaXRpYWxpemUgcGFyYWxsYXggZWZmZWN0XG5cdGlmICggdHlwZW9mICQuZm4ucmVsbGF4ICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdCQoICcubm92YS1oZXJvLS1wYXJhbGxheCcgKS5maW5kKCAnLm5vdmEtaGVyb19fYmFja2dyb3VuZCcgKS5yZWxsYXgoe1xuXHRcdFx0Y29udGFpbmVyOiAnLm5vdmEtaGVyb19fbWFzaycsXG5cdFx0fSk7XG5cdH1cblxufSkoalF1ZXJ5LCB3aW5kb3cpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jsb2Nrcy9oZXJvL2Zyb250ZW5kLmpzIiwiaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IEJMT0NLX1NFTEVDVE9SID0gJy5ub3ZhLXNsaWRlc2hvdyc7XG5jb25zdCBTTElERVJfU0VMRUNUT1IgPSAnLm5vdmEtc2xpZGVzaG93X19zbGlkZXInO1xuY29uc3QgU0xJREVfU0VMRUNUT1IgPSAnLm5vdmEtc2xpZGVzaG93X19zbGlkZSc7XG5jb25zdCBDT05URU5UX1NFTEVDVE9SID0gJy5ub3ZhLXNsaWRlc2hvd19fY29udGVudCc7XG5jb25zdCBCQUNLR1JPVU5EX1NFTEVDVE9SID0gJy5ub3ZhLXNsaWRlc2hvd19fYmFja2dyb3VuZCc7XG5jb25zdCBGT1JFR1JPVU5EX1NFTEVDVE9SID0gJy5ub3ZhLXNsaWRlc2hvd19fZm9yZWdyb3VuZCc7XG5jb25zdCBUUkFOU0lUSU9OX0RVUkFUSU9OID0gMTAwMDtcbmNvbnN0IFRSQU5TSVRJT05fRUFTSU5HID0gXCJlYXNlSW5PdXRDaXJjXCI7XG5cbihmdW5jdGlvbigkLCB3aW5kb3csIHVuZGVmaW5lZCkge1xuXG5cdGNvbnN0ICRibG9ja3MgPSAkKCBCTE9DS19TRUxFQ1RPUiApO1xuXHRjb25zdCAkcmVsbGF4VGFyZ2V0ID0gJCggJy5ub3ZhLXNsaWRlc2hvdy0tcGFyYWxsYXgnICkuZmluZCggU0xJREVSX1NFTEVDVE9SICk7XG5cblx0Ly8gaW5pdGlhbGl6ZSBwYXJhbGxheCBlZmZlY3Rcblx0aWYgKCB0eXBlb2YgJC5mbi5yZWxsYXggIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0JHJlbGxheFRhcmdldC5yZWxsYXgoIHtcblx0XHRcdGNvbnRhaW5lcjogJy5ub3ZhLXNsaWRlc2hvd19fbWFzaycsXG5cdFx0XHRjaGlsZHJlbjogQ09OVEVOVF9TRUxFQ1RPUixcblx0XHR9ICk7XG5cdH1cblxuXHQkYmxvY2tzLmVhY2goIGZ1bmN0aW9uKCBpbmRleCwgYmxvY2sgKSB7XG5cdFx0dmFyICRibG9jayA9ICQoIGJsb2NrICksXG5cdFx0XHQkc2xpZGVyID0gJGJsb2NrLmZpbmQoIFNMSURFUl9TRUxFQ1RPUiApLFxuXHRcdFx0JGFycm93Q29udGFpbmVyO1xuXG5cdFx0aWYgKCAkc2xpZGVyLmNoaWxkcmVuKCkubGVuZ3RoID4gMSApIHtcblx0XHRcdCRhcnJvd0NvbnRhaW5lciA9ICQoICc8ZGl2IGNsYXNzPVwibm92YS1zbGlkZXNob3dfX2NvbnRyb2xzXCI+JyApLmFwcGVuZFRvKCAkYmxvY2sgKTtcblxuXHRcdFx0cmVzZXRCbG9ja01pbkhlaWdodCggJGJsb2NrICk7XG5cdFx0XHQkYmxvY2suYWRkQ2xhc3MoICdpcy1yZWFkeScgKTtcblxuXHRcdFx0JHNsaWRlci5vbiggJ2JlZm9yZUNoYW5nZScsIG9uQmVmb3JlU2xpZGVDaGFuZ2UgKTtcblxuXHRcdFx0JHNsaWRlci5zbGljayh7XG5cdFx0XHRcdHJvd3M6IDAsXG5cdFx0XHRcdC8vIGZvciBzaW1wbGVyIHJldmVhbCB0cmFuc2l0aW9ucyBiZXR3ZWVuIHNsaWRlc1xuXHRcdFx0XHRmYWRlOiB0cnVlLFxuXHRcdFx0XHRwcmV2QXJyb3c6ICc8ZGl2IGNsYXNzPVwibm92YS1zbGlkZXNob3dfX2Fycm93IG5vdmEtc2xpZGVzaG93X19hcnJvdy0tcHJldlwiPjwvZGl2PicsXG5cdFx0XHRcdG5leHRBcnJvdzogJzxkaXYgY2xhc3M9XCJub3ZhLXNsaWRlc2hvd19fYXJyb3cgbm92YS1zbGlkZXNob3dfX2Fycm93LS1uZXh0XCI+PC9kaXY+Jyxcblx0XHRcdFx0YXBwZW5kQXJyb3dzOiAkYXJyb3dDb250YWluZXIsXG5cdFx0XHRcdHNwZWVkOiBUUkFOU0lUSU9OX0RVUkFUSU9OLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblxuXHQkKCB3aW5kb3cgKS5vbiggJ3Jlc2l6ZScsIGRlYm91bmNlKCBvblJlc2l6ZSwgMzAwICkgKTtcblxuXHRmdW5jdGlvbiByZXNldEJsb2NrTWluSGVpZ2h0KCAkYmxvY2sgKSB7XG5cdFx0JGJsb2NrLmNzcyggJ21pbkhlaWdodCcsICcnICk7XG5cdFx0JGJsb2NrLmNzcyggJ21pbkhlaWdodCcsIGdldEJsb2NrTWluSGVpZ2h0KCAkYmxvY2sgKSApO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0QmxvY2tNaW5IZWlnaHQoICRibG9jayApIHtcblx0XHR2YXIgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcblx0XHR2YXIgJHNsaWRlciA9ICRibG9jay5maW5kKCBTTElERVJfU0VMRUNUT1IgKTtcblx0XHR2YXIgc2xpZGVyV2lkdGggPSAkYmxvY2suZmluZCggU0xJREVSX1NFTEVDVE9SICkub3V0ZXJXaWR0aCgpO1xuXHRcdHZhciB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdFx0dmFyIHNsaWRlck1pbkhlaWdodCA9IHBhcnNlSW50KCAkYmxvY2suZGF0YSggJ21pbi1oZWlnaHQnICkgKSAqIHdpbmRvd0hlaWdodCAvIDEwMDtcblx0XHR2YXIgbWVkaWFNaW5IZWlnaHQgPSAwO1xuXHRcdHZhciBzbGlkZU1heEhlaWdodCA9IDA7XG5cdFx0dmFyIG1heEFzcGVjdFJhdGlvID0gMDtcblxuXHRcdCRibG9jay5maW5kKCBTTElERV9TRUxFQ1RPUiApLmVhY2goIGZ1bmN0aW9uKCBpLCBvYmogKSB7XG5cdFx0XHR2YXIgJHNsaWRlID0gJCggb2JqICksXG5cdFx0XHRcdCRtZWRpYSA9ICRzbGlkZS5maW5kKCAnLm5vdmEtc2xpZGVzaG93X19tZWRpYScgKSxcblx0XHRcdFx0d2lkdGggPSAkbWVkaWEuZGF0YSggJ3dpZHRoJyApLFxuXHRcdFx0XHRoZWlnaHQgPSAkbWVkaWEuZGF0YSggJ2hlaWdodCcgKSxcblx0XHRcdFx0YXNwZWN0UmF0aW8gPSB3aWR0aCAvIGhlaWdodCxcblx0XHRcdFx0c2xpZGVIZWlnaHQgPSAkc2xpZGUub3V0ZXJIZWlnaHQoKTtcblxuXHRcdFx0bWF4QXNwZWN0UmF0aW8gPSBhc3BlY3RSYXRpbyA+IG1heEFzcGVjdFJhdGlvID8gYXNwZWN0UmF0aW8gOiBtYXhBc3BlY3RSYXRpbztcblx0XHRcdG1lZGlhTWluSGVpZ2h0ID0gc2xpZGVyV2lkdGggLyBtYXhBc3BlY3RSYXRpbztcblx0XHRcdHNsaWRlTWF4SGVpZ2h0ID0gc2xpZGVIZWlnaHQgPiBzbGlkZU1heEhlaWdodCA/IHNsaWRlSGVpZ2h0IDogc2xpZGVNYXhIZWlnaHQ7XG5cblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gTWF0aC5tYXgoIHNsaWRlck1pbkhlaWdodCwgc2xpZGVNYXhIZWlnaHQsIG1lZGlhTWluSGVpZ2h0ICk7XG5cdH1cblxuXHRmdW5jdGlvbiBvblJlc2l6ZSgpIHtcblxuXHRcdCRibG9ja3MuZWFjaCggZnVuY3Rpb24oIGluZGV4LCBibG9jayApIHtcblx0XHRcdHZhciAkYmxvY2sgPSAkKCBibG9jayApO1xuXHRcdFx0dmFyICRzbGlkZXIgPSAkYmxvY2suZmluZCggU0xJREVSX1NFTEVDVE9SICk7XG5cblx0XHRcdHJlc2V0QmxvY2tNaW5IZWlnaHQoICRibG9jayApO1xuXHRcdFx0JHJlbGxheFRhcmdldC5yZWxsYXgoICdyZWZyZXNoJyApO1xuXG5cdFx0XHRpZiAoICRzbGlkZXIuaXMoICcuc2xpY2staW5pdGlhbGl6ZWQnICkgKSB7XG5cdFx0XHRcdCRzbGlkZXIuc2xpY2soICdzZXRQb3NpdGlvbicgKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gb25CZWZvcmVTbGlkZUNoYW5nZSggZXZlbnQsIHNsaWNrLCBjdXJyZW50U2xpZGUsIG5leHRTbGlkZSApIHtcblx0XHRjb25zdCAkY3VycmVudFNsaWRlID0gJCggc2xpY2suJHNsaWRlc1tjdXJyZW50U2xpZGVdICk7XG5cdFx0Y29uc3QgJG5leHRTbGlkZSA9ICQoIHNsaWNrLiRzbGlkZXNbbmV4dFNsaWRlXSApO1xuXG5cdFx0JCggc2xpY2suJHNsaWRlcyApLmNzcyggJ3pJbmRleCcsIDgwMCApO1xuXG5cdFx0dHJhbnNpdGlvbiggJGN1cnJlbnRTbGlkZSwgJG5leHRTbGlkZSwgZ2V0RGlyZWN0aW9uKCBzbGljaywgY3VycmVudFNsaWRlLCBuZXh0U2xpZGUgKSApO1xuXHR9XG5cblx0ZnVuY3Rpb24gdHJhbnNpdGlvbiggJGN1cnJlbnQsICRuZXh0LCBzaWduID0gMSApIHtcblx0XHRjb25zdCBzbGlkZVdpZHRoID0gJGN1cnJlbnQub3V0ZXJXaWR0aCgpO1xuXHRcdGNvbnN0IG1vdmUgPSAzMDA7XG5cblx0XHQkY3VycmVudC52ZWxvY2l0eSgge1xuXHRcdFx0dHdlZW46IFswLCAxXVxuXHRcdH0sIHtcblx0XHRcdGR1cmF0aW9uOiBUUkFOU0lUSU9OX0RVUkFUSU9OLFxuXHRcdFx0ZWFzaW5nOiBUUkFOU0lUSU9OX0VBU0lORyxcblx0XHRcdHByb2dyZXNzOiBmdW5jdGlvbihlbGVtZW50cywgcGVyY2VudENvbXBsZXRlLCByZW1haW5pbmcsIHR3ZWVuVmFsdWUsIGFjdGl2ZUNhbGwpIHtcblx0XHRcdFx0Y29uc3QgbmV4dCA9ICRuZXh0LmdldCgwKTtcblx0XHRcdFx0Y29uc3QgbmV4dEJnID0gJG5leHQuZmluZCggQkFDS0dST1VORF9TRUxFQ1RPUiApLmdldCgwKTtcblx0XHRcdFx0Y29uc3QgbmV4dEZnID0gJG5leHQuZmluZCggRk9SRUdST1VORF9TRUxFQ1RPUiApLmdldCgwKTtcblx0XHRcdFx0Y29uc3QgY3VycmVudCA9ICRjdXJyZW50LmdldCgwKTtcblx0XHRcdFx0Y29uc3QgY3VycmVudEJnID0gJGN1cnJlbnQuZmluZCggQkFDS0dST1VORF9TRUxFQ1RPUiApLmdldCgwKTtcblx0XHRcdFx0Y29uc3QgY3VycmVudEZnID0gJGN1cnJlbnQuZmluZCggRk9SRUdST1VORF9TRUxFQ1RPUiApLmdldCgwKTtcblxuXHRcdFx0XHRjb25zdCBtb3ZlWCA9IHggPT4gJ3RyYW5zbGF0ZVgoJyArIHNpZ24gKiB4ICsgJ3B4KSc7XG5cblx0XHRcdFx0bmV4dC5zdHlsZS50cmFuc2Zvcm0gPSBtb3ZlWChzbGlkZVdpZHRoICogdHdlZW5WYWx1ZSApO1xuXHRcdFx0XHRuZXh0Qmcuc3R5bGUudHJhbnNmb3JtID0gbW92ZVgoIChtb3ZlIC0gc2xpZGVXaWR0aCkgKiB0d2VlblZhbHVlICk7XG5cdFx0XHRcdG5leHRGZy5zdHlsZS50cmFuc2Zvcm0gPSBtb3ZlWCggc2xpZGVXaWR0aCAqIC10d2VlblZhbHVlICk7XG5cblx0XHRcdFx0Y3VycmVudC5zdHlsZS50cmFuc2Zvcm0gPSBtb3ZlWCggLW1vdmUgKiAoMSAtIHR3ZWVuVmFsdWUpICk7XG5cdFx0XHRcdGN1cnJlbnRGZy5zdHlsZS50cmFuc2Zvcm0gPSBtb3ZlWCggbW92ZSAqICgxIC0gdHdlZW5WYWx1ZSkgKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldERpcmVjdGlvbiggc2xpY2ssIGN1cnJlbnRTbGlkZSwgbmV4dFNsaWRlICkge1xuXHRcdGxldCBkaXJlY3Rpb24gPSAxO1xuXHRcdGlmICggc2xpY2suc2xpZGVDb3VudCA+IDIgKSB7XG5cdFx0XHRpZiAoIGN1cnJlbnRTbGlkZSA9PT0gMCAmJiBuZXh0U2xpZGUgPT09IHNsaWNrLnNsaWRlQ291bnQgLSAxICkge1xuXHRcdFx0XHRkaXJlY3Rpb24gPSAtMTtcblx0XHRcdH1cblx0XHRcdGlmICggbmV4dFNsaWRlIDwgY3VycmVudFNsaWRlICYmICggbmV4dFNsaWRlICE9PSAwIHx8IGN1cnJlbnRTbGlkZSAhPT0gc2xpY2suc2xpZGVDb3VudCAtIDEgKSApIHtcblx0XHRcdFx0ZGlyZWN0aW9uID0gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBkaXJlY3Rpb247XG5cdH1cblxufSkoalF1ZXJ5LCB3aW5kb3cpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9ibG9ja3Mvc2xpZGVzaG93L2Zyb250ZW5kLmpzIiwiZXhwb3J0IGNvbnN0IGRlYm91bmNlID0gKGZ1bmMsIHdhaXQpID0+IHtcblx0bGV0IHRpbWVvdXQgPSBudWxsO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXM7XG5cdFx0Y29uc3QgYXJncyA9IGFyZ3VtZW50cztcblxuXHRcdGNvbnN0IGxhdGVyID0gKCkgPT4ge1xuXHRcdFx0ZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcblx0XHR9O1xuXG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcblx0fVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy5qcyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +!function(n){function e(o){if(r[o])return r[o].exports;var t=r[o]={i:o,l:!1,exports:{}};return n[o].call(t.exports,t,t.exports,e),t.l=!0,t.exports}var r={};e.m=n,e.c=r,e.d=function(n,r,o){e.o(n,r)||Object.defineProperty(n,r,{configurable:!1,enumerable:!0,get:o})},e.n=function(n){var r=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(r,"a",r),r},e.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},e.p="",e(e.s=153)}({153:function(n,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=r(154);r.n(o),r(155)},154:function(n,e){!function(n,e,r){void 0!==n.fn.rellax&&n(".nova-hero--parallax").find(".nova-hero__background").rellax({container:".nova-hero__mask"})}(jQuery,window)},155:function(n,e,r){"use strict";var o=r(31),t=".nova-slideshow__slider",i=".nova-slideshow__background",a=".nova-slideshow__foreground",s=1e3;!function(n,e,r){function d(n){n.css("minHeight",""),n.css("minHeight",l(n))}function l(r){var o=(e.innerWidth,r.find(t),r.find(t).outerWidth()),i=e.innerHeight,a=parseInt(r.data("min-height"))*i/100,s=0,d=0,l=0;return r.find(".nova-slideshow__slide").each(function(e,r){var t=n(r),i=t.find(".nova-slideshow__media"),a=i.data("width"),u=i.data("height"),c=a/u,f=t.outerHeight();l=c>l?c:l,s=o/l,d=f>d?f:d}),Math.max(a,d,s)}function u(){h.each(function(e,r){var o=n(r),i=o.find(t);d(o),_.rellax("refresh"),i.is(".slick-initialized")&&i.slick("setPosition")})}function c(e,r,o,t){var i=n(r.$slides[o]),a=n(r.$slides[t]);n(r.$slides).css("zIndex",800),f(i,a,v(r,o,t))}function f(n,e){var o=arguments.length>2&&arguments[2]!==r?arguments[2]:1,t=n.outerWidth();n.velocity({tween:[0,1]},{duration:s,easing:"easeInOutCirc",progress:function(r,s,d,l,u){var c=e.get(0),f=e.find(i).get(0),v=e.find(a).get(0),h=n.get(0),_=(n.find(i).get(0),n.find(a).get(0)),w=function(n){return"translateX("+o*n+"px)"};c.style.transform=w(t*l),f.style.transform=w((300-t)*l),v.style.transform=w(t*-l),h.style.transform=w(-300*(1-l)),_.style.transform=w(300*(1-l))}})}function v(n,e,r){var o=1;return n.slideCount>2&&(0===e&&r===n.slideCount-1&&(o=-1),r1&&(o=n('
').appendTo(i),d(i),i.addClass("is-ready"),a.on("beforeChange",c),a.slick({rows:0,fade:!0,prevArrow:'
',nextArrow:'
',appendArrows:o,speed:s}))}),n(e).on("resize",Object(o.a)(u,300))}(jQuery,window)},31:function(n,e,r){"use strict";r.d(e,"a",function(){return o});var o=function(n,e){var r=null;return function(){var o=this,t=arguments,i=function(){n.apply(o,t)};clearTimeout(r),r=setTimeout(i,e)}}}}); \ No newline at end of file diff --git a/package.json b/package.json index 7f6866d20..8a6dc9f47 100755 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "nova", + "name": "nova-blocks", "version": "1.0.0", "main": "blocks/index.js", "scripts": { diff --git a/readme.txt b/readme.txt index 212256bf4..bb0a4433b 100644 --- a/readme.txt +++ b/readme.txt @@ -60,7 +60,6 @@ Unless otherwise specified, all the plugins files, scripts and images are licens The Nova Blocks plugin bundles the following third-party resources: -* [jQuery Bully plugin](https://github.com/pixelgrade/rellax) Copyright (c) 2016 Pixelgrade - License: MIT * [jQuery Rellax plugin](https://github.com/pixelgrade/rellax) Copyright (c) 2016 Pixelgrade - License: MIT * [jQuery Slick plugin](http://kenwheeler.github.io) Copyright (c) 2017 Ken Wheeler - License: MIT * [jQuery Velocity plugin](http://velocityjs.org/) Copyright (c) 2014-2017 Julian Shapiro - License: MIT diff --git a/src/scss/vendor/_slick-theme.scss b/src/scss/vendor/_slick-theme.scss index b6595139c..4f790bfc4 100644 --- a/src/scss/vendor/_slick-theme.scss +++ b/src/scss/vendor/_slick-theme.scss @@ -7,7 +7,7 @@ $slick-font-path: "./fonts/" !default; $slick-font-family: "slick" !default; -$slick-loader-path: "./" !default; +$slick-loader-path: "../images/" !default; $slick-arrow-color: white !default; $slick-dot-color: black !default; $slick-dot-color-active: $slick-dot-color !default; @@ -188,4 +188,4 @@ $slick-opacity-not-active: 0.25 !default; opacity: $slick-opacity-default; } } -} \ No newline at end of file +} diff --git a/webpack.config.js b/webpack.config.js index 114d986e3..410891e95 100755 --- a/webpack.config.js +++ b/webpack.config.js @@ -41,7 +41,6 @@ module.exports = { filename: '[name].js', }, watch: 'production' !== process.env.NODE_ENV, - devtool: 'inline-source-map', module: { rules: [ {