main article .comments .disqus #disqus_thread a{text-decoration:none;color:#ed2793}main article .comments .disqus #disqus_thread a:hover{color:#ff1595}main article .comments .disqus #disqus_thread a::-moz-selection{color:rgba(255,255,255,0.6) !important;background:#ed2793}main article .comments .disqus #disqus_thread a::selection{color:rgba(255,255,255,0.6) !important;background:#ed2793}main article .comments .disqus #disqus_thread a span::-moz-selection{color:rgba(255,255,255,0.6) !important;background:#ed2793}main article .comments .disqus #disqus_thread a span::selection{color:rgba(255,255,255,0.6) !important;background:#ed2793}main article{max-width:87em;margin-left:auto;margin-right:auto;clear:both}main article:after{content:" ";display:block;clear:both}main .contentlayout figure.image img{width:100%}html.csstransforms main .contentlayout figure.fullwonk{margin:-.75em -.75em;padding:2em 0}html.csstransforms main .contentlayout figure.fullwonk figcaption{padding-top:2.29885%}html.csstransforms main .contentlayout figure.fullwonk img{border:.75em solid #f2e7c5;background-color:#f2e7c5;margin-left:-.75em;transform:rotate(-3deg)}main .contentlayout figure figcaption h1,main .contentlayout figure figcaption h2,main .contentlayout figure figcaption h3,main .contentlayout figure figcaption h4,main .contentlayout figure figcaption h5,main .contentlayout figure figcaption h6,main .contentlayout figure figcaption p{padding:1.14943% 4.5977%}main .contentlayout figure p,main .contentlayout figure cite{padding:1.14943% 4.5977% 1.14943% 4.5977%}main .contentlayout figure p cite{padding:0}main .contentlayout blockquote p,main .contentlayout blockquote cite{padding:1.14943% 4.5977% 1.14943% 9.1954% !important}@media (max-width: 450px){main .contentlayout blockquote p,main .contentlayout blockquote cite{padding:1.14943% 4.5977% 1.14943% 13.7931% !important}}@media (min-width: 1200px){main .contentlayout figure,main .contentlayout blockquote{margin:2.29885% 0}main .contentlayout figure.left,main .contentlayout figure.right,main .contentlayout blockquote.left,main .contentlayout blockquote.right{width:50%}main .contentlayout figure.left,main .contentlayout blockquote.left{float:left}main .contentlayout figure.right,main .contentlayout blockquote.right{float:right}main .contentlayout blockquote.left p,main .contentlayout blockquote.left cite{padding:1.14943% 9.1954% 1.14943% 9.1954%}main .contentlayout blockquote.right p,main .contentlayout blockquote.right cite{padding:1.14943% 9.1954% 1.14943% 13.7931%}main .contentlayout figure.left{padding-right:4.5977%}main .contentlayout figure.left p,main .contentlayout figure.left cite{padding:1.14943% 0 1.14943% 9.1954%}main .contentlayout figure.right{padding-left:4.5977%}main .contentlayout figure.right p,main .contentlayout figure.right cite{padding:1.14943% 9.1954% 1.14943% 0}}main .contentlayout .videoembed{position:relative;padding-top:30px;height:0;overflow:hidden}main .contentlayout .videoembed iframe{position:absolute;top:0;left:0;width:100%;height:100%}main .contentlayout .videoembed.widescreen{padding-bottom:56.25%}main .contentlayout .videoembed.fourthree{padding-bottom:75%}main .contentlayout .videoembed.square{padding-bottom:100%}main .contentlayout .audio{padding:0 4.5977%;margin:0}main .contentlayout .audio .audioembed{position:relative;overflow:hidden}main .contentlayout .audio .audioembed iframe{width:100%}main .contentlayout .tweetembed{padding:0 4.5977%;margin:0}main .contentlayout .tweetembed:after{content:'';display:block;clear:both}main .contentlayout .gallery{padding:4.5977%;height:auto;text-align:center}main .contentlayout .gallery .galleryLayout{margin:auto;padding:0 0 1em 0}main .contentlayout .gallery .galleryLayout .galleryItem{float:left;width:33%}main .contentlayout .gallery .galleryLayout .galleryItem.spacer{width:192px;height:96px}main .contentlayout .gallery .galleryLayout .galleryItem.portrait{min-height:192px}main .contentlayout .gallery .galleryLayout .galleryItem.landscape{min-width:192px}main .contentlayout .gallery .galleryLayout .galleryItem.portrait:nth-child(3n){min-height:288px}main .contentlayout .gallery .galleryLayout .galleryItem.landscape:nth-child(3n){min-width:288px}main .contentlayout .gallery .galleryLayout .galleryItem a.view{width:100%;line-height:0;display:block;position:relative}main .contentlayout .gallery .galleryLayout .galleryItem a.view img{width:100%;position:relative;z-index:1}main .contentlayout .gallery .galleryLayout:after{content:'';display:block;clear:both}main .contentlayout .gallery:after{content:'';display:block;clear:both}main .contentlayout .wallpapers{padding:0 4.5977%}main .contentlayout .wallpapers:after{content:'';display:block;clear:both}main .contentlayout .wallpapers .wallpaper{clear:both;width:100%;float:left;margin-left:0;margin-right:0;padding:0 0 2em 0}main .contentlayout .wallpapers .wallpaper h3{padding:0 0 1em 0}main .contentlayout .wallpapers .wallpaper figure{clear:both;width:100%;float:left;margin-left:0;margin-right:0;margin-top:0px}main .contentlayout .wallpapers .wallpaper figure h4{color:#b4b7b7}main .contentlayout .wallpapers .wallpaper figure img{float:left;width:30%;float:left}main .contentlayout .wallpapers .wallpaper figure figcaption{width:70%;float:left}main .contentlayout .wallpapers .wallpaper figure figcaption p{font-style:normal;font-size:1.4em}main .contentlayout .wallpapers .wallpaper figure figcaption p a span{display:inline-block}main .contentlayout .wallpapers .wallpaper figure figcaption p a small{color:#b4b7b7}main .bodycopy{padding-top:2.29885%;padding-bottom:2.29885%;position:relative;background-color:#fff;color:#202b30}@media (min-width: 889px){main .bodycopy{min-height:300px}}@media (min-width: 889px){main .bodycopy{overflow:visible}}main .bodycopy h2,main .bodycopy h3,main .bodycopy h4,main .bodycopy h5,main .bodycopy h6,main .bodycopy p,main .bodycopy li,main .bodycopy pre{color:#202b30}main .bodycopy blockquote p,main .bodycopy q p{color:#0b6180}main .bodycopy ul{list-style-type:disc}main .bodycopy ol{list-style-type:decimal}main .bodycopy hr{border:.5em solid #12bdff}main .bodycopy figcaption p{color:#b4b7b7}html.svg main .bodycopy:before{content:"";display:block;height:48px;width:100%;background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0nMTM5MicgaGVpZ2h0PSc0OCcgdmlld1BvcnQ9JzAgMCAxMzkyIDQ4JyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxwb2x5Z29uIHBvaW50cz0nMCAwLCAxMzkyIDQ4LDAgNDgnIHN0eWxlPSdmaWxsOiNmZmYnLz48L3N2Zz4=");background-position:right bottom;background-repeat:no-repeat;top:-48px;position:absolute;z-index:0}html.svg main .bodycopy:before{content:""}main article header{position:relative;z-index:2;margin-top:0;margin-bottom:0;margin-left:1.14943%;margin-right:1.14943%;padding:2em 2.29885%}@media (min-width: 889px){main article header{padding:2em 1.14943%}}main article header h1{top:8px;display:inline;position:relative;z-index:2;line-height:1em;background-color:#ed2793;box-shadow:8px 0 0 #ed2793,-8px 0 0 #ed2793}@media (max-width: 320px){main article header h1{font-size:3.8em}}@media (min-width: 321px) and (max-width: 888px){main article header h1{font-size:4em}}html.csstransforms main article header{transform:rotate(-2deg)}main article .contentlayout,main article section{width:100%;float:left;margin-left:0;margin-right:0;position:relative;z-index:1}@media (min-width: 889px){main article .contentlayout,main article section{width:61.7284%;float:left}}main article aside{position:relative;width:100%;float:left;margin-left:0;margin-right:0}@media (min-width: 889px){main article aside{width:37.03704%;float:right;margin-right:0;margin-right:-1.14943%;padding-right:1.14943%;float:left}}main article aside .panel{min-height:300px}@media (min-width: 889px){html.svgclippaths main article aside .panel{-webkit-clip-path:polygon(-1px 0px, 1030px 40px, 1030px 1500px, -1px 1500px);-moz-clip-path:polygon(-1px 0px, 1030px 40px, 1030px 1500px, -1px 1500px);-ms-clip-path:polygon(-1px 0px, 1030px 40px, 1030px 1500px, -1px 1500px);-o-clip-path:polygon(-1px 0px, 1030px 40px, 1030px 1500px, -1px 1500px);clip-path:polygon(-1px 0px, 1030px 40px, 1030px 1500px, -1px 1500px)}html.svg main article aside .panel:before{content:"";display:block;position:absolute;width:16px;height:100%;left:0px;top:0px;background-image:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMzInIHZpZXdQb3J0PScwIDAgMTYgMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBvbHlnb24gcG9pbnRzPScwIDAsIDE2IDE2LCAwIDMyJyBzdHlsZT0nZmlsbDojZmZmZmZmJy8+PC9zdmc+");background-position:left top;background-repeat:repeat-y}}main article aside .panel .padder{padding:1em 4.5977% 1em 4.5977%}main article aside h1,main article aside h2,main article aside h3,main article aside h4,main article aside h5,main article aside h6{color:#202b30}@media (min-width: 889px){main article aside.glue{z-index:0;position:fixed;max-width:87em;margin-left:auto;margin-right:auto;width:100%;margin:0;padding:0;top:10em}main article aside.glue:after{content:" ";display:block;clear:both}main article aside.glue .glueSupport{position:relative;width:37.03704%;float:right;margin-right:0;margin-right:-1.14943%;padding-right:1.14943%;margin-left:61.7284%;float:left}}main article aside ul{list-style-type:disc;padding:0 4.5977%}main article .comments .disqus #disqus_thread a{text-decoration:none;color:#ed2793}main article .comments .disqus #disqus_thread a:hover{color:#ff1595}main article .comments .disqus #disqus_thread a::-moz-selection{color:rgba(255,255,255,0.6) !important;background:#ed2793}main article .comments .disqus #disqus_thread a::selection{color:rgba(255,255,255,0.6) !important;background:#ed2793}main article .comments .disqus #disqus_thread a span::-moz-selection{color:rgba(255,255,255,0.6) !important;background:#ed2793}main article .comments .disqus #disqus_thread a span::selection{color:rgba(255,255,255,0.6) !important;background:#ed2793}main article aside.metadata .panel .padder{padding:3em 4.5977% 1em 4.5977%}main article aside h1{display:none}main article aside .author p,main article aside time,main article aside .tags li,main article aside .relatedContent li{font-family:'Courier New', Courier, 'Lucida Sans Typewriter', 'Lucida Typewriter', monospace}html.fontface main article aside .author p,html.fontface main article aside time,html.fontface main article aside .tags li,html.fontface main article aside .relatedContent li{font-family:Crikey Squat}main article aside .author p a,main article aside time a,main article aside .tags li a,main article aside .relatedContent li a{border:0px}main article aside .panel{max-width:87em;margin-left:auto;margin-right:auto;background:url(/assets/images/design/bg-graph.png) right top repeat #fff}main article aside .panel:after{content:" ";display:block;clear:both}main article aside .panel .author,main article aside .panel time,main article aside .panel .tags{position:relative}main article aside .panel .title{width:100%;float:left;margin-left:0;margin-right:0;font-size:1.75em;line-height:.85714em;margin:8px auto 0 auto;text-align:center;display:inline-block}main article aside .panel .author{width:47.61905%;float:left;margin-right:4.7619%;margin-bottom:1em}main article aside .panel .author p{font-size:1.3125em;line-height:.91429em;text-align:right;color:rgba(76,81,111,0.7);padding:.5em 0;transform:rotate(2deg)}main article aside .panel .author p a,main article aside .panel .author p strong{display:inline-block;transform:rotate(-3deg)}main article aside .panel .author p strong{color:#12bdff}main article aside .panel .author p img{width:56px;float:right}main article aside .panel time{width:47.61905%;float:right;margin-right:0;margin-bottom:1em;text-align:center;height:5em;background-position:center center;background-size:100% 100%;background-repeat:no-repeat}html.svg main article aside .panel time{background-image:url(/assets/images/design/bg-metadoodle1.svg)}main article aside .panel time .day,main article aside .panel time .year{position:absolute;width:40%}main article aside .panel time .day{top:0px;left:0px;transform:rotate(4deg);color:rgba(76,81,111,0.7)}main article aside .panel time .month{padding:.5em;display:inline-block;color:#4c516f;transform:rotate(-2deg);font-size:1.625em;line-height:1.84615em}main article aside .panel time .year{bottom:0px;right:0px;transform:rotate(-4deg);color:#ed2793}main article aside .panel .msg{font-size:1em;line-height:1.35em;text-align:center;color:rgba(76,81,111,0.6)}main article aside .panel .tags{max-width:87em;margin-left:auto;margin-right:auto;clear:both;padding:4.5977%;padding-top:0}main article aside .panel .tags:after{content:" ";display:block;clear:both}main article aside .panel .tags li{overflow:hidden;padding:.375em 0;list-style-type:none;font-size:1.3125em;line-height:.91429em;text-align:center}main article aside .panel .tags li:nth-child(3n-1){width:48.78049%;float:left}main article aside .panel .tags li:nth-child(3n-2){width:48.78049%;float:right;margin-right:0}main article aside .panel .tags li:nth-child(3n-3){width:47.61905%;float:left;margin-left:25.5814%;clear:both;float:none}main article aside .panel .tags li a{min-width:5.625em;color:#4c516f;display:inline-block}main article aside .panel .tags li:nth-child(6n-5){transform:rotate(-4deg)}main article aside .panel .tags li:nth-child(6n-5) a{padding-bottom:.8125em;background-image:url(/assets/images/design/bg-metadoodleline1.png);background-repeat:repeat-x;background-position:bottom center}html.svg main article aside .panel .tags li:nth-child(6n-5) a{background-image:url(/assets/images/design/bg-metadoodleline1.svg)}main article aside .panel .tags li:nth-child(6n-4){transform:rotate(2deg)}main article aside .panel .tags li:nth-child(6n-4) a{padding-top:.8125em;padding-bottom:.8125em;background:url(/assets/images/design/bg-metadoodleline2.png) bottom center repeat-x}html.svg main article aside .panel .tags li:nth-child(6n-4) a{background:url(/assets/images/design/bg-metadoodleline2.svg) bottom center repeat-x}html.multiplebgs main article aside .panel .tags li:nth-child(6n-4) a{background:url(/assets/images/design/bg-metadoodleline2.png) top right repeat-x,url(/assets/images/design/bg-metadoodleline2.png) bottom left repeat-x}html.svg.multiplebgs main article aside .panel .tags li:nth-child(6n-4) a{background:url(/assets/images/design/bg-metadoodleline2.svg) top right repeat-x,url(/assets/images/design/bg-metadoodleline2.svg) bottom left repeat-x}main article aside .panel .tags li:nth-child(6n-3){transform:rotate(-1deg)}main article aside .panel .tags li:nth-child(6n-3) a{margin-top:-.4375em;margin-bottom:-.4375em;padding-top:1.25em;padding-bottom:1.25em;background-image:url(/assets/images/design/bg-metadoodle2.png);background-repeat:no-repeat;background-position:center center;background-size:contain}html.svg main article aside .panel .tags li:nth-child(6n-3) a{background-image:url(/assets/images/design/bg-metadoodle2.svg)}main article aside .panel .tags li:nth-child(6n-2){transform:rotate(6deg)}main article aside .panel .tags li:nth-child(6n-2) a{padding-bottom:.8125em;background-image:url(/assets/images/design/bg-metadoodleline4.png);background-repeat:no-repeat;background-position:bottom center}html.svg main article aside .panel .tags li:nth-child(6n-2) a{background-image:url(/assets/images/design/bg-metadoodleline4.svg)}main article aside .panel .tags li:nth-child(6n-1){transform:rotate(-10deg)}main article aside .panel .tags li:nth-child(6n-1) a{margin-top:-.4375em;margin-bottom:-.4375em;padding-top:1.25em;padding-bottom:1.25em;background-image:url(/assets/images/design/bg-metadoodle3.png);background-repeat:no-repeat;background-position:center center;background-size:contain}html.svg main article aside .panel .tags li:nth-child(6n-1) a{background-image:url(/assets/images/design/bg-metadoodle3.svg)}main article aside .panel .tags li:nth-child(6n-6){transform:rotate(6deg)}main article aside .panel .tags li:nth-child(6n-6) a{padding-bottom:.5em;background-image:url(/assets/images/design/bg-metadoodleline3.png);background-repeat:no-repeat;background-position:bottom center}html.svg main article aside .panel .tags li:nth-child(6n-6) a{background-image:url(/assets/images/design/bg-metadoodleline3.svg)}main article aside .panel #relatedContent{max-height:0px;transition:max-height 1s ease-out}main article aside .panel #relatedContent.autoheight{max-height:600px;transition:max-height 1s ease-out}main article aside .panel #relatedContent li.loader{padding:.25em 0}main article aside .panel #relatedContent li.loader span{display:block;box-sizing:border-box;position:absolute;top:50%;left:50%;width:24px;height:24px;margin-top:-12px;margin-left:-12px;border-radius:50%;border:2px solid #ed2793;border-top-color:#12bdff;border-right-color:#f9aa2a;border-bottom-color:#fff;text-indent:-9999em;-webkit-animation:spinner .8s linear infinite;-moz-animation:spinner .8s linear infinite;-ms-animation:spinner .8s linear infinite;-o-animation:spinner .8s linear infinite;animation:spinner .8s linear infinite}main article aside .panel .relatedContent{max-width:87em;margin-left:auto;margin-right:auto;clear:both;padding:4.5977% 1em 4.5977% 1em;transform:none}main article aside .panel .relatedContent:after{content:" ";display:block;clear:both}main article aside .panel .relatedContent:after{content:none}main article aside .panel .relatedContent li{list-style-type:none;clear:both;width:100%;float:left;margin-left:0;margin-right:0}html.cssanimations main article aside .panel .relatedContent li.title{margin:0;padding:.5em 0 1em 0;transform:rotate(-2deg)}html.cssanimations main article aside .panel .relatedContent li.title span{opacity:0}html.cssanimations main article aside .panel .relatedContent li.title.bounceIn span{-webkit-animation:bounceIn .8s ease 1;-moz-animation:bounceIn .8s ease 1;-ms-animation:bounceIn .8s ease 1;-o-animation:bounceIn .8s ease 1;animation:bounceIn .8s ease 1;opacity:1}html.cssanimations main article aside .panel .relatedContent li.title.fadeOut span{-webkit-animation:fadeOut .4s none 1;-moz-animation:fadeOut .4s none 1;-ms-animation:fadeOut .4s none 1;-o-animation:fadeOut .4s none 1;animation:fadeOut .4s none 1;opacity:0}main article aside .panel .relatedContent li.subtitle{text-align:center;padding:.25em 0;color:#b4b7b7;font-size:1.125em;line-height:1.06667em}main article aside .panel .relatedContent li.subtitle.alt{width:auto;padding:1em .5em 0 0}main article aside .panel .relatedContent li.entry{text-align:center;padding:.25em 0;font-family:Rockwell, 'Courier Bold', Courier, Georgia, Times, 'Times New Roman', serif;font-size:1.5em;line-height:.8em}html.fontface main article aside .panel .relatedContent li.entry{font-family:Rokkitt}main article aside .panel .relatedContent li.entry a{color:#fff;line-height:1em;background-color:#ed2793;box-shadow:8px 0 0 #ed2793,-8px 0 0 #ed2793;position:relative}html.cssanimations main article aside .panel .relatedContent li.entry a{-webkit-animation:bounceIn .8s ease 1;-moz-animation:bounceIn .8s ease 1;-ms-animation:bounceIn .8s ease 1;-o-animation:bounceIn .8s ease 1;animation:bounceIn .8s ease 1;opacity:1}main article aside .panel .relatedContent li.entry a:hover{top:-3px}main article aside .panel .relatedContent li.entry.jobs a{background-color:#12bdff;box-shadow:8px 0 0 #12bdff,-8px 0 0 #12bdff}main article aside .panel .relatedContent li.user{padding:.375em 0;width:50%;float:left;clear:none;line-height:1.14286em;text-align:right}@media (min-width: 321px) and (max-width: 888px){main article aside .panel .relatedContent li.user{width:33%;float:left}}main article aside .panel .relatedContent li.user a{-webkit-animation:bounceIn .8s ease 1;-moz-animation:bounceIn .8s ease 1;-ms-animation:bounceIn .8s ease 1;-o-animation:bounceIn .8s ease 1;animation:bounceIn .8s ease 1}main article aside .panel .relatedContent li.user img{float:right;width:2em;top:-0.4em;position:relative}main article aside .panel .relatedContent li.event{display:inline;line-height:110%}main article aside .panel .relatedContent li.event a{color:#0b6180}main article aside .panel .relatedContent li.event a:hover{color:#ed2793}main article aside .panel .relatedContent li.event .date{color:#202b30;font-size:0.8em;width:30%;display:inline-block;float:left}main article aside .panel .relatedContent li.event .eventTitle{width:70%;display:inline-block;float:left}main article aside .panel .relatedContent li.event .icon{color:#202b30}main article aside .panel .relatedContent li.game{text-align:center}main article aside .panel .relatedContent li.game a{margin:auto}main article aside .panel .relatedContent li.photo{padding:.5em;display:block;width:auto;clear:none}main article aside .panel .relatedContent li{transform:rotate(-1.2deg)}main article aside .panel .relatedContent li:nth-child(2n){transform:rotate(1deg)}main article aside .panel .relatedContent li:nth-child(3n){transform:rotate(-1.5deg)}main article aside .panel .relatedContent li:nth-child(5n){transform:rotate(0.8deg)}main article aside .panel.relatedContent.pre{max-height:600px}main article aside .panel svg{top:0px;left:0px;position:absolute;z-index:0;height:100%;width:100%}@media (min-width: 889px){main{padding-top:17.5em}}main article header:before{content:"";display:block;background:url(/assets/images/design/bg-splats.png) center center no-repeat;background-size:100% auto;width:22.5em;height:12.15em;position:absolute;z-index:1;right:30%;top:-32.4px}main article .comments{z-index:0}main article .comments header{margin-top:0em;padding-top:0em;padding-bottom:0em;margin-bottom:0em}main article .comments header h1{background-color:#12bdff;box-shadow:8px 0 0 #12bdff,-8px 0 0 #12bdff}html.csstransforms main article .comments header h1{transform:rotate(1deg)}main article .comments header:before{display:none}main article .comments .disqus{background-color:#fff;padding:2.29885% 4.5977% 2.29885% 4.5977%}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5jc3MiLCJzb3VyY2VzIjpbImFydGljbGUuc2NzcyIsIm1vZHVsZXMvX3NldHVwLnNjc3MiLCJtb2R1bGVzL19jb21wYXNzX21peGlucy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9fc3VzeS5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL19zdXN5LnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3N1LnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvc3UvX3V0aWxpdGllcy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L3N1L19zZXR0aW5ncy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L3N1L192YWxpZGF0aW9uLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvc3UvX2dyaWQuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvX2Zsb2F0LnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L19zaGFyZWQuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvX3N1cHBvcnQuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fc3VwcG9ydC5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19wcmVmaXguc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fYmFja2dyb3VuZC5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19ib3gtc2l6aW5nLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3N1cHBvcnQvX3JlbS5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19jbGVhcmZpeC5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX2luc3BlY3Quc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19vdXRwdXQuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19kaXJlY3Rpb24uc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19iYWNrZ3JvdW5kLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fY29udGFpbmVyLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fbWFyZ2lucy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX3BhZGRpbmcuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvZmxvYXQvX2NvbnRhaW5lci5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9mbG9hdC9fc3Bhbi5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9mbG9hdC9fZW5kLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L2Zsb2F0L19pc29sYXRlLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fc2V0dGluZ3Muc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L192YWxpZGF0aW9uLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fZ3JpZHMuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19ib3gtc2l6aW5nLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fY29udGV4dC5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2JhY2tncm91bmQuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19jb250YWluZXIuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19zcGFuLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fZ3V0dGVycy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2lzb2xhdGUuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19nYWxsZXJ5LnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fcm93cy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX21hcmdpbnMuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19wYWRkaW5nLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fYmxlZWQuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19icmVha3BvaW50LXBsdWdpbi5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9fYnJlYWtwb2ludC5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L19zZXR0aW5ncy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L19jb250ZXh0LnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvX2hlbHBlcnMuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9fcGFyc2Vycy5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L3BhcnNlcnMvX3F1ZXJ5LnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvcGFyc2Vycy9fc2luZ2xlLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvcGFyc2Vycy9zaW5nbGUvX2RlZmF1bHQuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL19kb3VibGUuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL2RvdWJsZS9fZGVmYXVsdC1wYWlyLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvcGFyc2Vycy9kb3VibGUvX2RvdWJsZS1zdHJpbmcuc2NzcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9icmVha3BvaW50LXNhc3Mvc3R5bGVzaGVldHMvYnJlYWtwb2ludC9wYXJzZXJzL2RvdWJsZS9fZGVmYXVsdC5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L3BhcnNlcnMvX3RyaXBsZS5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L3BhcnNlcnMvdHJpcGxlL19kZWZhdWx0LnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvcGFyc2Vycy9fcmVzb2x1dGlvbi5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L3BhcnNlcnMvcmVzb2x1dGlvbi9fcmVzb2x1dGlvbi5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L19uby1xdWVyeS5zY3NzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9icmVha3BvaW50L19yZXNwb25kLXRvLnNjc3MiLCIuLi8uLi9ub2RlX21vZHVsZXMvYnJlYWtwb2ludC1zYXNzL3N0eWxlc2hlZXRzL2JyZWFrcG9pbnQvX2xlZ2FjeS1zZXR0aW5ncy5zY3NzIiwibW9kdWxlcy9fYmFzZS5zY3NzIiwibW9kdWxlcy9fbWl4aW5zLnNjc3MiLCJtb2R1bGVzL19jb2xvdXJzLnNjc3MiLCJtb2R1bGVzL19wbGFjZWhvbGRlcnMuc2NzcyIsImJ1aWx0L19tYWlubWVudS5zY3NzIiwiYnVpbHQvX21haW5tZW51Mnguc2NzcyIsImJ1aWx0L19zc2hlZXQuc2NzcyIsImJ1aWx0L19zc2hlZXQyeC5zY3NzIiwibW9kdWxlcy9fcGxhY2Vob2xkZXJzX2xheW91dC5zY3NzIiwicGFydGlhbHMvX2FzaWRlLnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiQGNoYXJzZXQgXCJVVEYtOFwiO1xuXG5AaW1wb3J0IFwibW9kdWxlcy9zZXR1cFwiO1xuQGltcG9ydCBcIm1vZHVsZXMvcGxhY2Vob2xkZXJzX2xheW91dFwiO1xuXG5AaW1wb3J0IFwicGFydGlhbHMvYXNpZGVcIjtcblxuXG4vLyBCbG9nIGFydGljbGVcbm1haW4ge1xuICBAZXh0ZW5kICVwYWdlbGF5b3V0MTtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkZGVza3RvcCkge1xuICAgIHBhZGRpbmctdG9wOiBlbSgyODBweCk7XG4gIH1cbiAgYXJ0aWNsZSB7XG4gICAgaGVhZGVyIHtcbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGJhY2tncm91bmQ6IGltYWdlVXJsKFwiYmctc3BsYXRzLnBuZ1wiKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87XG4gICAgICAgICRzcGxhdF93aWR0aDogMzYwcHg7XG4gICAgICAgICRzcGxhdF9oZWlnaHQ6ICRzcGxhdF93aWR0aCAqIDAuNTQ7XG4gICAgICAgIHdpZHRoOiBlbSgkc3BsYXRfd2lkdGgpO1xuICAgICAgICBoZWlnaHQ6IGVtKCRzcGxhdF9oZWlnaHQpO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIHJpZ2h0OiAzMCU7XG4gICAgICAgIHRvcDogLSgkc3BsYXRfaGVpZ2h0IC8gNik7XG4gICAgICB9XG4gICAgfVxuICAgIC5jb21tZW50cyB7XG4gICAgICB6LWluZGV4OiAwO1xuICAgICAgaGVhZGVyIHtcbiAgICAgICAgQGluY2x1ZGUgcmh5dGhtO1xuICAgICAgICBoMSB7XG4gICAgICAgICAgQGluY2x1ZGUgbW0taGVhZGluZygkbW0tYmx1ZSk7XG4gICAgICAgICAgaHRtbC5jc3N0cmFuc2Zvcm1zICYge1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMWRlZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAuZGlzcXVzIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1tLXdoaXRlO1xuICAgICAgICBwYWRkaW5nOiBndXR0ZXIoKSoyIGd1dHRlcigpKjQgZ3V0dGVyKCkqMiBndXR0ZXIoKSo0O1xuICAgICAgICAjZGlzcXVzX3RocmVhZCB7XG4gICAgICAgICAgYSB7XG4gICAgICAgICAgICBAZXh0ZW5kICViYXNlbGlua3N0eWxlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIHByb2plY3QgYXR0ZW1wdHMgdG8gZm9sbG93IHRoZSBhZHZpY2UgZnJvbSB0aGlzIGFydGljbGU6XG4vLyBodHRwOi8vdGhlc2Fzc3dheS5jb20vYmVnaW5uZXIvaG93LXRvLXN0cnVjdHVyZS1hLXNhc3MtcHJvamVjdFxuXG4vLyBWZW5kb3Jcbi8vXHRcdFRoaXJkLXBhcnR5IENTUy5cbi8vIEBpbXBvcnQgXCJjb21wYXNzXCI7XG4vLyBAaW1wb3J0IFwiYW5pbWF0ZVwiOyAvLyAoY29tcGFzcyBhbmltYXRlKVxuQGltcG9ydCBcImNvbXBhc3NfbWl4aW5zXCI7XG5AaW1wb3J0IFwic3VzeVwiO1xuQGltcG9ydCBcImJyZWFrcG9pbnRcIjtcblxuLy8gT3VyIFNldHRpbmdzXG5AaW1wb3J0IFwiYmFzZVwiO1xuQGltcG9ydCBcIm1peGluc1wiO1xuQGltcG9ydCBcImNvbG91cnNcIjtcbkBpbXBvcnQgXCJwbGFjZWhvbGRlcnNcIjtcblxuLy8gU3ByaXRlc2hlZXRzXG5AaW1wb3J0IFwiLi4vYnVpbHQvbWFpbm1lbnUuc2Nzc1wiO1xuQGltcG9ydCBcIi4uL2J1aWx0L21haW5tZW51Mnguc2Nzc1wiO1xuQGltcG9ydCBcIi4uL2J1aWx0L3NzaGVldC5zY3NzXCI7XG5AaW1wb3J0IFwiLi4vYnVpbHQvc3NoZWV0Mnguc2Nzc1wiO1xuIiwiXG5cbi8vIENvbXBhc3Mgc3BlY2lmaWMgdmFyaWFibGVzXG5cbi8vIFVzdWFsbHkgY29tcGFzcyBoYWNrcyBhcHBseSB0byBib3RoIGllNiAmIDcgLS0gc2V0IHRoaXMgdG8gZmFsc2UgdG8gZGlzYWJsZSBzdXBwb3J0IGZvciBib3RoLlxuJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTogdHJ1ZSAhZGVmYXVsdDtcblxuLy8gU2V0dGluZyB0aGlzIHRvIGZhbHNlIHdpbGwgcmVzdWx0IGluIHNtYWxsZXIgb3V0cHV0LCBidXQgbm8gc3VwcG9ydCBmb3IgaWU2IGhhY2tzXG4kbGVnYWN5LXN1cHBvcnQtZm9yLWllNjogJGxlZ2FjeS1zdXBwb3J0LWZvci1pZSAhZGVmYXVsdDtcblxuLy8gU2V0dGluZyB0aGlzIHRvIGZhbHNlIHdpbGwgcmVzdWx0IGluIHNtYWxsZXIgb3V0cHV0LCBidXQgbm8gc3VwcG9ydCBmb3IgaWU3IGhhY2tzXG4kbGVnYWN5LXN1cHBvcnQtZm9yLWllNzogJGxlZ2FjeS1zdXBwb3J0LWZvci1pZSAhZGVmYXVsdDtcblxuLy8gU2V0dGluZyB0aGlzIHRvIGZhbHNlIHdpbGwgcmVzdWx0IGluIHNtYWxsZXIgb3V0cHV0LCBidXQgbm8gc3VwcG9ydCBmb3IgbGVnYWN5IGllOCBoYWNrc1xuJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTg6ICRsZWdhY3ktc3VwcG9ydC1mb3ItaWUgIWRlZmF1bHQ7XG5cbi8vIEBwcml2YXRlXG4vLyBUaGUgdXNlciBjYW4gc2ltcGx5IHNldCAkbGVnYWN5LXN1cHBvcnQtZm9yLWllIGFuZCA2LCA3LCBhbmQgOCB3aWxsIGJlIHNldCBhY2NvcmRpbmdseSxcbi8vIEJ1dCBpbiBjYXNlIHRoZSB1c2VyIHNldCBlYWNoIG9mIHRob3NlIGV4cGxpY2l0bHksIHdlIG5lZWQgdG8gc3luYyB0aGUgdmFsdWUgb2Zcbi8vIHRoaXMgY29tYmluZWQgdmFyaWFibGUuXG4kbGVnYWN5LXN1cHBvcnQtZm9yLWllOiAkbGVnYWN5LXN1cHBvcnQtZm9yLWllNiBvciAkbGVnYWN5LXN1cHBvcnQtZm9yLWllNyBvciAkbGVnYWN5LXN1cHBvcnQtZm9yLWllODtcblxuLy8gV2hldGhlciB0byBvdXRwdXQgbGVnYWN5IHN1cHBvcnQgZm9yIG1vemlsbGEuXG4vLyBVc3VhbGx5IHRoaXMgbWVhbnMgaGFja3MgdG8gc3VwcG9ydCBGaXJlZm94IDMuNiBvciBlYXJsaWVyLlxuJGxlZ2FjeS1zdXBwb3J0LWZvci1tb3ppbGxhOiB0cnVlO1xuXG4vLyBTdXBwb3J0IGZvciBtb3ppbGxhIGluIGV4cGVyaW1lbnRhbCBjc3MzIHByb3BlcnRpZXMgKC1tb3opLlxuJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1tb3ppbGxhICAgICAgOiB0cnVlICFkZWZhdWx0O1xuLy8gU3VwcG9ydCBmb3Igd2Via2l0IGluIGV4cGVyaW1lbnRhbCBjc3MzIHByb3BlcnRpZXMgKC13ZWJraXQpLlxuJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQgICAgICAgOiB0cnVlICFkZWZhdWx0O1xuLy8gU3VwcG9ydCBmb3Igd2Via2l0J3Mgb3JpZ2luYWwgKG5vbi1zdGFuZGFyZCkgZ3JhZGllbnQgc3ludGF4LlxuJHN1cHBvcnQtZm9yLW9yaWdpbmFsLXdlYmtpdC1ncmFkaWVudHMgOiB0cnVlICFkZWZhdWx0O1xuLy8gU3VwcG9ydCBmb3Igb3BlcmEgaW4gZXhwZXJpbWVudGFsIGNzczMgcHJvcGVydGllcyAoLW8pLlxuJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1vcGVyYSAgICAgICAgOiB0cnVlICFkZWZhdWx0O1xuLy8gU3VwcG9ydCBmb3IgbWljcm9zb2Z0IGluIGV4cGVyaW1lbnRhbCBjc3MzIHByb3BlcnRpZXMgKC1tcykuXG4kZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCAgICA6IHRydWUgIWRlZmF1bHQ7XG4vLyBTdXBwb3J0IGZvciBraHRtbCBpbiBleHBlcmltZW50YWwgY3NzMyBwcm9wZXJ0aWVzICgta2h0bWwpLlxuJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCAgICAgICAgOiBmYWxzZSAhZGVmYXVsdDtcbi8vIFN1cHBvcnQgZm9yIHN2ZyBpbiBleHBlcmltZW50YWwgY3NzMyBwcm9wZXJ0aWVzLlxuLy8gU2V0dGluZyB0aGlzIHRvIHRydWUgbWlnaHQgYWRkIHNpZ25pZmljYW50IHNpemUgdG8geW91clxuLy8gZ2VuZXJhdGVkIHN0eWxlc2hlZXRzLlxuJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1zdmcgICAgICAgICAgOiBmYWxzZSAhZGVmYXVsdDtcbi8vIFN1cHBvcnQgZm9yIENTUyBQSUUgaW4gZXhwZXJpbWVudGFsIGNzczMgcHJvcGVydGllcyAoLXBpZSkuXG4kZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXBpZSAgICAgICAgICA6IGZhbHNlICFkZWZhdWx0O1xuXG5cbi8vIFBhdGhzXG4kaW1hZ2VzX2RpcjogICAgICBcIi9hc3NldHMvaW1hZ2VzL2Rlc2lnbi9cIjtcbiRmb250c19kaXI6ICAgICAgIFwiL2Fzc2V0cy9mb250cy9cIjtcblxuLy8gU2V0IHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIHVzZSBhYnNvbHV0ZSBwaXhlbHMgaW4gc2l6aW5nIHlvdXIgdHlwb2dyYXBoeS5cbiRyZWxhdGl2ZS1mb250LXNpemluZzogdHJ1ZSAhZGVmYXVsdDtcblxuLy8gVGhlIGRlZmF1bHQgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiRicm93c2VyLWRlZmF1bHQtZm9udC1zaXplOiAxNnB4O1xuXG4vLyAkYmFzZS1mb250LXNpemUgYnV0IGluIHlvdXIgb3V0cHV0IHVuaXQgb2YgY2hvaWNlLlxuLy8gRGVmYXVsdHMgdG8gMWVtIHdoZW4gYCRyZWxhdGl2ZS1mb250LXNpemluZ2AgaXMgdHJ1ZS5cbiRmb250LXVuaXQ6IGlmKCRyZWxhdGl2ZS1mb250LXNpemluZywgMWVtLCAkYmFzZS1mb250LXNpemUpICFkZWZhdWx0O1xuXG4vLyBBbGxvd3MgdGhlIGBhZGp1c3QtZm9udC1zaXplLXRvYCBtaXhpbiBhbmQgdGhlIGBsaW5lcy1mb3ItZm9udC1zaXplYCBmdW5jdGlvblxuLy8gdG8gcm91bmQgdGhlIGxpbmUgaGVpZ2h0IHRvIHRoZSBuZWFyZXN0IGhhbGYgbGluZSBoZWlnaHQgaW5zdGVhZCBvZiB0aGVcbi8vIG5lYXJlc3QgaW50ZWdyYWwgbGluZSBoZWlnaHQgdG8gYXZvaWQgbGFyZ2Ugc3BhY2luZyBiZXR3ZWVuIGxpbmVzLlxuJHJvdW5kLXRvLW5lYXJlc3QtaGFsZi1saW5lOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gRW5zdXJlIHRoZXJlIGlzIGF0IGxlYXN0IHRoaXMgbWFueSBwaXhlbHNcbi8vIG9mIHZlcnRpY2FsIHBhZGRpbmcgYWJvdmUgYW5kIGJlbG93IHRoZSB0ZXh0LlxuJG1pbi1saW5lLXBhZGRpbmc6IDJweCAhZGVmYXVsdDtcblxuXG5cbi8vIFRoaXMgbWl4aW4gcHJvdmlkZXMgYmFzaWMgc3VwcG9ydCBmb3IgQ1NTMyBwcm9wZXJ0aWVzIGFuZFxuLy8gdGhlaXIgY29ycmVzcG9uZGluZyBleHBlcmltZW50YWwgQ1NTMiBwcm9wZXJ0aWVzIHdoZW5cbi8vIHRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGlkZW50aWNhbCBleGNlcHQgZm9yIHRoZSBwcm9wZXJ0eVxuLy8gcHJlZml4LlxuQG1peGluIGV4cGVyaW1lbnRhbCgkcHJvcGVydHksICR2YWx1ZSxcbiAgJG1veiAgICAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1tb3ppbGxhLFxuICAkd2Via2l0ICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXdlYmtpdCxcbiAgJG8gICAgICAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1vcGVyYSxcbiAgJG1zICAgICAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1taWNyb3NvZnQsXG4gICRraHRtbCAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Ita2h0bWwsXG4gICRvZmZpY2lhbCA6IHRydWVcbikge1xuICBAaWYgJHdlYmtpdCAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itd2Via2l0ICAgIHsgLXdlYmtpdC0jeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbiAgQGlmICRraHRtbCAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLWtodG1sICAgICB7ICAta2h0bWwtI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG4gIEBpZiAkbW96ICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1tb3ppbGxhICAgeyAgICAtbW96LSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJG1zICAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbWljcm9zb2Z0IHsgICAgIC1tcy0jeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbiAgQGlmICRvICAgICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhICAgICB7ICAgICAgLW8tI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG4gIEBpZiAkb2ZmaWNpYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAgICAgICAgICN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxufVxuXG4vLyBTYW1lIGFzIGV4cGVyaW1lbnRhbCgpLCBidXQgZm9yIGNhc2VzIHdoZW4gdGhlIHByb3BlcnR5IGlzIHRoZSBzYW1lIGFuZCB0aGUgdmFsdWUgaXMgdmVuZG9yaXplZFxuQG1peGluIGV4cGVyaW1lbnRhbC12YWx1ZSgkcHJvcGVydHksICR2YWx1ZSxcbiAgJG1veiAgICAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1tb3ppbGxhLFxuICAkd2Via2l0ICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXdlYmtpdCxcbiAgJG8gICAgICAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1vcGVyYSxcbiAgJG1zICAgICAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1taWNyb3NvZnQsXG4gICRraHRtbCAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Ita2h0bWwsXG4gICRvZmZpY2lhbCA6IHRydWVcbikge1xuICBAaWYgJHdlYmtpdCAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itd2Via2l0ICAgIHsgI3skcHJvcGVydHl9IDogLXdlYmtpdC0jeyR2YWx1ZX07IH1cbiAgQGlmICRraHRtbCAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLWtodG1sICAgICB7ICN7JHByb3BlcnR5fSA6ICAta2h0bWwtI3skdmFsdWV9OyB9XG4gIEBpZiAkbW96ICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1tb3ppbGxhICAgeyAjeyRwcm9wZXJ0eX0gOiAgICAtbW96LSN7JHZhbHVlfTsgfVxuICBAaWYgJG1zICAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbWljcm9zb2Z0IHsgI3skcHJvcGVydHl9IDogICAgIC1tcy0jeyR2YWx1ZX07IH1cbiAgQGlmICRvICAgICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhICAgICB7ICN7JHByb3BlcnR5fSA6ICAgICAgLW8tI3skdmFsdWV9OyB9XG4gIEBpZiAkb2ZmaWNpYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAjeyRwcm9wZXJ0eX0gOiAgICAgICAgICN7JHZhbHVlfTsgfVxufVxuXG4vLyBAbWl4aW4gc2V0LWV4cGVyaW1lbnRhbC1zdXBwb3J0KCRtb3o6IGZhbHNlLCAkd2Via2l0OiBmYWxzZSwgJG1zOiBmYWxzZSwgJG86IGZhbHNlLCAka2h0bWw6IGZhbHNlKSB7XG4vLyAgICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYTogJG1vejtcbi8vICAgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQ6ICR3ZWJraXQ7XG4vLyAgICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbWljcm9zb2Z0OiAkbXM7XG4vLyAgICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmE6ICRvO1xuLy8gICAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLWtodG1sOiAka2h0bWw7XG4vLyB9XG4vL1xuLy8gQG1peGluIHdpdGgtb25seS1zdXBwb3J0LWZvcigkbW96OiBmYWxzZSwgJHdlYmtpdDogZmFsc2UsICRtczogZmFsc2UsICRvOiBmYWxzZSwgJGtodG1sOiBmYWxzZSkge1xuLy8gICAvLyBDYXB0dXJlIHRoZSBjdXJyZW50IHN0YXRlXG4vLyAgICRvcmlnaW5hbC1tb3o6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYTtcbi8vICAgJG9yaWdpbmFsLXdlYmtpdDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQ7XG4vLyAgICRvcmlnaW5hbC1vOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhO1xuLy8gICAkb3JpZ2luYWwtbXM6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbWljcm9zb2Z0O1xuLy8gICAkb3JpZ2luYWwta2h0bWw6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Ita2h0bWw7XG4vL1xuLy8gICBAaW5jbHVkZSBzZXQtZXhwZXJpbWVudGFsLXN1cHBvcnQoJG1veiwgJHdlYmtpdCwgJG1zLCAkbywgJGtodG1sKTtcbi8vXG4vLyAgIEBjb250ZW50O1xuLy9cbi8vICAgQGluY2x1ZGUgc2V0LWV4cGVyaW1lbnRhbC1zdXBwb3J0KCRvcmlnaW5hbC1tb3osICRvcmlnaW5hbC13ZWJraXQsICRvcmlnaW5hbC1tcywgJG9yaWdpbmFsLW8sICRvcmlnaW5hbC1raHRtbCk7XG4vLyB9XG4vL1xuLy9cbi8vIC8vIENTUyBBbmltYXRpb25zLlxuLy9cbi8vIEFwcGx5IGFuIGFuaW1hdGlvbiBwcm9wZXJ0eSBhbmQgdmFsdWUgd2l0aCB0aGUgY29ycmVjdCBicm93c2VyIHN1cHBvcnRcbkBtaXhpbiBhbmltYXRpb24tc3VwcG9ydCgkcHJvcGVydHksICR2YWx1ZSkge1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwoJHByb3BlcnR5LCAkdmFsdWUsIC1tb3osIC13ZWJraXQsIC1vLCAtbXMsIG5vdCAta2h0bWwsIG9mZmljaWFsKTsgfVxuXG4vLyBTaG9ydGN1dCB0byBhcHBseSBhIG5hbWVkIGFuaW1hdGlvbiB0byBhbiBlbGVtZW50LCB3aXRoIGFsbCB0aGUgc2V0dGluZ3MuXG4vL1xuLy8gICAgICRhbmltYXRpb24tMSAgIDogTmFtZSBhbmQgc2V0dGluZ3MgZm9yIHRoZSBmaXJzdCBhbmltYXRpb24uIFs8dmFsdWVzPiB8IGRlZmF1bHRdXG4vLyAgICAgLi4uXG4vLyAgICAgJGFuaW1hdGlvbi0xMCAgOiBOYW1lIGFuZCBzZXR0aW5ncyBmb3IgdGhlIHRlbnRoIGFuaW1hdGlvbi4gPHZhbHVlcz5cbkBtaXhpbiBhbmltYXRpb24oJGFuaW1hdGlvbi0xOiBkZWZhdWx0LCAkYW5pbWF0aW9uLTI6IGZhbHNlLCAkYW5pbWF0aW9uLTM6IGZhbHNlLCAkYW5pbWF0aW9uLTQ6IGZhbHNlLCAkYW5pbWF0aW9uLTU6IGZhbHNlLCAkYW5pbWF0aW9uLTY6IGZhbHNlLCAkYW5pbWF0aW9uLTc6IGZhbHNlLCAkYW5pbWF0aW9uLTg6IGZhbHNlLCAkYW5pbWF0aW9uLTk6IGZhbHNlLCAkYW5pbWF0aW9uLTEwOiBmYWxzZSkge1xuICBAaWYgJGFuaW1hdGlvbi0xID09IGRlZmF1bHQge1xuICAgICRhbmltYXRpb24tMTogLWNvbXBhc3Mtc3BhY2UtbGlzdChjb21wYWN0KCRkZWZhdWx0LWFuaW1hdGlvbi1uYW1lLCAkZGVmYXVsdC1hbmltYXRpb24tZHVyYXRpb24sICRkZWZhdWx0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24sICRkZWZhdWx0LWFuaW1hdGlvbi1kZWxheSwgJGRlZmF1bHQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgJGRlZmF1bHQtYW5pbWF0aW9uLWRpcmVjdGlvbiwgJGRlZmF1bHQtYW5pbWF0aW9uLWZpbGwtbW9kZSwgJGRlZmF1bHQtYW5pbWF0aW9uLXBsYXktc3RhdGUpKTsgfVxuICAkYW5pbWF0aW9uOiBjb21wYWN0KCRhbmltYXRpb24tMSwgJGFuaW1hdGlvbi0yLCAkYW5pbWF0aW9uLTMsICRhbmltYXRpb24tNCwgJGFuaW1hdGlvbi01LCAkYW5pbWF0aW9uLTYsICRhbmltYXRpb24tNywgJGFuaW1hdGlvbi04LCAkYW5pbWF0aW9uLTksICRhbmltYXRpb24tMTApO1xuICBAaW5jbHVkZSBhbmltYXRpb24tc3VwcG9ydChhbmltYXRpb24sICRhbmltYXRpb24pOyB9XG5cblxuICAvLyBUaGUgYHpvb21gIGFwcHJvYWNoIGdlbmVyYXRlcyBsZXNzIENTUyBidXQgZG9lcyBub3QgdmFsaWRhdGUuXG4gIC8vIFNldCB0aGlzIHRvIGBibG9ja2AgdG8gdXNlIHRoZSBkaXNwbGF5LXByb3BlcnR5IHRvIGhhY2sgdGhlXG4gIC8vIGVsZW1lbnQgdG8gZ2FpbiBsYXlvdXQuXG4gICRkZWZhdWx0LWhhcy1sYXlvdXQtYXBwcm9hY2g6IHpvb20gIWRlZmF1bHQ7XG5cbiAgLy8gVGhpcyBtaXhpbiBjYXVzZXMgYW4gZWxlbWVudCBtYXRjaGluZyB0aGUgc2VsZWN0b3JcbiAgLy8gdG8gZ2FpbiB0aGUgXCJoYXNMYXlvdXRcIiBwcm9wZXJ0eSBpbiBpbnRlcm5ldCBleHBsb3Jlci5cbiAgLy8gTW9yZSBpbmZvcm1hdGlvbiBvbiBbaGFzTGF5b3V0XShodHRwOi8vcmVmZXJlbmNlLnNpdGVwb2ludC5jb20vY3NzL2hhc2xheW91dCkuXG4gIEBtaXhpbiBoYXMtbGF5b3V0KCRhcHByb2FjaDogJGRlZmF1bHQtaGFzLWxheW91dC1hcHByb2FjaCkge1xuICAgIEBpZiAkbGVnYWN5LXN1cHBvcnQtZm9yLWllIHtcbiAgICAgIEBpZiAkYXBwcm9hY2ggPT0gem9vbSB7XG4gICAgICAgIEBpbmNsdWRlIGhhcy1sYXlvdXQtem9vbTtcbiAgICAgIH0gQGVsc2UgaWYgJGFwcHJvYWNoID09IGJsb2NrIHtcbiAgICAgICAgQGluY2x1ZGUgaGFzLWxheW91dC1ibG9jaztcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAd2FybiBcIlVua25vd24gaGFzLWxheW91dCBhcHByb2FjaDogI3skYXBwcm9hY2h9XCI7XG4gICAgICAgIEBpbmNsdWRlIGhhcy1sYXlvdXQtem9vbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbWl4aW4gaGFzLWxheW91dC16b29tIHtcbiAgICBAaWYgJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTYgb3IgJGxlZ2FjeS1zdXBwb3J0LWZvci1pZTcge1xuICAgICAgKnpvb206IDE7XG4gICAgfVxuICB9XG5cbiAgQG1peGluIGhhcy1sYXlvdXQtYmxvY2sge1xuICAgIEBpZiAkbGVnYWN5LXN1cHBvcnQtZm9yLWllIHtcbiAgICAgIC8vIFRoaXMgbWFrZXMgaWU2IGdldCBsYXlvdXRcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIC8vIGFuZCB0aGlzIHB1dHMgaXQgYmFjayB0byBibG9ja1xuICAgICAgJiB7IGRpc3BsYXk6IGJsb2NrOyB9XG4gICAgfVxuICB9XG5cblxuICBAbWl4aW4gY2xlYXJmaXgge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgQGluY2x1ZGUgaGFzLWxheW91dDtcbiAgfVxuXG4vLyBBZGp1c3QgYSBibG9jayB0byBoYXZlIGEgZGlmZmVyZW50IGZvbnQgc2l6ZSBhbmQgbGluZSBoZWlnaHQgdG8gbWFpbnRhaW4gdGhlXG4vLyByaHl0aG0uICRsaW5lcyBzcGVjaWZpZXMgaG93IG1hbnkgbXVsdGlwbGVzIG9mIHRoZSBiYXNlbGluZSByaHl0aG0gZWFjaCBsaW5lXG4vLyBvZiB0aGlzIGZvbnQgc2hvdWxkIHVzZSB1cC4gSXQgZG9lcyBub3QgaGF2ZSB0byBiZSBhbiBpbnRlZ2VyLCBidXQgaXRcbi8vIGRlZmF1bHRzIHRvIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIHRoYXQgaXMgbGFyZ2UgZW5vdWdoIHRvIGZpdCB0aGUgZm9udC5cbi8vIFVzZSAkZnJvbS1zaXplIHRvIGFkanVzdCBmcm9tIGEgZm9udC1zaXplIG90aGVyIHRoYW4gdGhlIGJhc2UgZm9udC1zaXplLlxuQG1peGluIGFkanVzdC1mb250LXNpemUtdG8oJHRvLXNpemUsICRsaW5lczogbGluZXMtZm9yLWZvbnQtc2l6ZSgkdG8tc2l6ZSksICRmcm9tLXNpemU6ICRiYXNlLWZvbnQtc2l6ZSkge1xuICBAaWYgbm90KCRyZWxhdGl2ZS1mb250LXNpemluZykgYW5kICRmcm9tLXNpemUgIT0gJGJhc2UtZm9udC1zaXplIHtcbiAgICBAd2FybiBcIiRyZWxhdGl2ZS1mb250LXNpemluZyBpcyBmYWxzZSBidXQgYSByZWxhdGl2ZSBmb250IHNpemUgd2FzIHBhc3NlZCB0byBhZGp1c3QtZm9udC1zaXplLXRvXCI7XG4gIH1cbiAgZm9udC1zaXplOiAkZm9udC11bml0ICogJHRvLXNpemUgLyAkZnJvbS1zaXplO1xuICBAaW5jbHVkZSBhZGp1c3QtbGVhZGluZy10bygkbGluZXMsIGlmKCRyZWxhdGl2ZS1mb250LXNpemluZywgJHRvLXNpemUsICRiYXNlLWZvbnQtc2l6ZSkpO1xufVxuXG4vLyBBZGp1c3QgYSBibG9jayB0byBoYXZlIGRpZmZlcmVudCBsaW5lIGhlaWdodCB0byBtYWludGFpbiB0aGUgcmh5dGhtLlxuLy8gJGxpbmVzIHNwZWNpZmllcyBob3cgbWFueSBtdWx0aXBsZXMgb2YgdGhlIGJhc2VsaW5lIHJoeXRobSBlYWNoIGxpbmUgb2YgdGhpc1xuLy8gZm9udCBzaG91bGQgdXNlIHVwLiBJdCBkb2VzIG5vdCBoYXZlIHRvIGJlIGFuIGludGVnZXIsIGJ1dCBpdCBkZWZhdWx0cyB0byB0aGVcbi8vIHNtYWxsZXN0IGludGVnZXIgdGhhdCBpcyBsYXJnZSBlbm91Z2ggdG8gZml0IHRoZSBmb250LlxuQG1peGluIGFkanVzdC1sZWFkaW5nLXRvKCRsaW5lcywgJGZvbnQtc2l6ZTogJGJhc2UtZm9udC1zaXplKSB7XG4gIGxpbmUtaGVpZ2h0OiByaHl0aG0oJGxpbmVzLCAkZm9udC1zaXplKTtcbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSBtaW5pbXVtIG11bHRpcGxlIG9mIHJoeXRobSB1bml0cyBuZWVkZWQgdG8gY29udGFpbiB0aGUgZm9udC1zaXplLlxuQGZ1bmN0aW9uIGxpbmVzLWZvci1mb250LXNpemUoJGZvbnQtc2l6ZSkge1xuICAkbGluZXM6IGlmKCRyb3VuZC10by1uZWFyZXN0LWhhbGYtbGluZSxcbiAgICAgICAgICAgICAgY2VpbCgyICogJGZvbnQtc2l6ZSAvICRiYXNlLWxpbmUtaGVpZ2h0KSAvIDIsXG4gICAgICAgICAgICAgIGNlaWwoJGZvbnQtc2l6ZSAvICRiYXNlLWxpbmUtaGVpZ2h0KSk7XG4gIEBpZiAkbGluZXMgKiAkYmFzZS1saW5lLWhlaWdodCAtICRmb250LXNpemUgPCAkbWluLWxpbmUtcGFkZGluZyAqIDIge1xuICAgICRsaW5lczogJGxpbmVzICsgaWYoJHJvdW5kLXRvLW5lYXJlc3QtaGFsZi1saW5lLCAwLjUsIDEpO1xuICB9XG4gIEByZXR1cm4gJGxpbmVzO1xufVxuXG4vLyBDYWxjdWxhdGUgcmh5dGhtIHVuaXRzLlxuQGZ1bmN0aW9uIHJoeXRobShcbiAgJGxpbmVzOiAxLFxuICAkZm9udC1zaXplOiAkYmFzZS1mb250LXNpemUsXG4gICRvZmZzZXQ6IDBcbikge1xuICBAaWYgbm90KCRyZWxhdGl2ZS1mb250LXNpemluZykgYW5kICRmb250LXNpemUgIT0gJGJhc2UtZm9udC1zaXplIHtcbiAgICBAd2FybiBcIiRyZWxhdGl2ZS1mb250LXNpemluZyBpcyBmYWxzZSBidXQgYSByZWxhdGl2ZSBmb250IHNpemUgd2FzIHBhc3NlZCB0byB0aGUgcmh5dGhtIGZ1bmN0aW9uXCI7XG4gIH1cbiAgJHJoeXRobTogJGZvbnQtdW5pdCAqICgkbGluZXMgKiAkYmFzZS1saW5lLWhlaWdodCAtICRvZmZzZXQpIC8gJGZvbnQtc2l6ZTtcbiAgLy8gUm91bmQgdGhlIHBpeGVscyBkb3duIHRvIG5lYXJlc3QgaW50ZWdlci5cbiAgQGlmIHVuaXQoJHJoeXRobSkgPT0gcHgge1xuICAgICRyaHl0aG06IGZsb29yKCRyaHl0aG0pO1xuICB9XG4gIEByZXR1cm4gJHJoeXRobTtcbn1cblxuLy8gQXBwbHkgbGVhZGluZyB3aGl0ZXNwYWNlLiBUaGUgJHByb3BlcnR5IGNhbiBiZSBtYXJnaW4gb3IgcGFkZGluZy5cbkBtaXhpbiBsZWFkZXIoJGxpbmVzOiAxLCAkZm9udC1zaXplOiAkYmFzZS1mb250LXNpemUsICRwcm9wZXJ0eTogbWFyZ2luKSB7XG4gICN7JHByb3BlcnR5fS10b3A6IHJoeXRobSgkbGluZXMsICRmb250LXNpemUpO1xufVxuXG4vLyBBcHBseSBsZWFkaW5nIHdoaXRlc3BhY2UgYXMgcGFkZGluZy5cbkBtaXhpbiBwYWRkaW5nLWxlYWRlcigkbGluZXM6IDEsICRmb250LXNpemU6ICRiYXNlLWZvbnQtc2l6ZSkge1xuICBwYWRkaW5nLXRvcDogcmh5dGhtKCRsaW5lcywgJGZvbnQtc2l6ZSk7XG59XG5cbi8vIEFwcGx5IHRyYWlsaW5nIHdoaXRlc3BhY2UuIFRoZSAkcHJvcGVydHkgY2FuIGJlIG1hcmdpbiBvciBwYWRkaW5nLlxuQG1peGluIHRyYWlsZXIoJGxpbmVzOiAxLCAkZm9udC1zaXplOiAkYmFzZS1mb250LXNpemUsICRwcm9wZXJ0eTogbWFyZ2luKSB7XG4gICN7JHByb3BlcnR5fS1ib3R0b206IHJoeXRobSgkbGluZXMsICRmb250LXNpemUpO1xufVxuXG4vLyBBcHBseSB0cmFpbGluZyB3aGl0ZXNwYWNlIGFzIHBhZGRpbmcuXG5AbWl4aW4gcGFkZGluZy10cmFpbGVyKCRsaW5lczogMSwgJGZvbnQtc2l6ZTogJGJhc2UtZm9udC1zaXplKSB7XG4gIHBhZGRpbmctYm90dG9tOiByaHl0aG0oJGxpbmVzLCAkZm9udC1zaXplKTtcbn1cblxuLy8gU2hvcnRoYW5kIG1peGluIHRvIGFwcGx5IHdoaXRlc3BhY2UgZm9yIHRvcCBhbmQgYm90dG9tIG1hcmdpbnMgYW5kIHBhZGRpbmcuXG5AbWl4aW4gcmh5dGhtKCRsZWFkZXI6IDAsICRwYWRkaW5nLWxlYWRlcjogMCwgJHBhZGRpbmctdHJhaWxlcjogMCwgJHRyYWlsZXI6IDAsICRmb250LXNpemU6ICRiYXNlLWZvbnQtc2l6ZSkge1xuICBAaW5jbHVkZSBsZWFkZXIoJGxlYWRlciwgJGZvbnQtc2l6ZSk7XG4gIEBpbmNsdWRlIHBhZGRpbmctbGVhZGVyKCRwYWRkaW5nLWxlYWRlciwgJGZvbnQtc2l6ZSk7XG4gIEBpbmNsdWRlIHBhZGRpbmctdHJhaWxlcigkcGFkZGluZy10cmFpbGVyLCAkZm9udC1zaXplKTtcbiAgQGluY2x1ZGUgdHJhaWxlcigkdHJhaWxlciwgJGZvbnQtc2l6ZSk7XG59XG5cbi8vIEVzdGFibGlzaGVzIGEgZm9udCBiYXNlbGluZSBmb3IgdGhlIGdpdmVuIGZvbnQtc2l6ZS5cbkBtaXhpbiBlc3RhYmxpc2gtYmFzZWxpbmUoJGZvbnQtc2l6ZTogJGJhc2UtZm9udC1zaXplKSB7XG4gIC8vIElFIDYgcmVmdXNlcyB0byByZXNpemUgZm9udHMgc2V0IGluIHBpeGVscyBhbmQgaXQgd2VpcmRseSByZXNpemVzIGZvbnRzXG4gIC8vIHdob3NlIHJvb3QgaXMgc2V0IGluIGVtcy4gU28gd2Ugc2V0IHRoZSByb290IGZvbnQgc2l6ZSBpbiBwZXJjZW50YWdlcyBvZlxuICAvLyB0aGUgZGVmYXVsdCBmb250IHNpemUuXG4gICogaHRtbCB7XG4gICAgZm9udC1zaXplOiAxMDAlICogKCRmb250LXNpemUgLyAkYnJvd3Nlci1kZWZhdWx0LWZvbnQtc2l6ZSk7XG4gIH1cbiAgaHRtbCB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplO1xuICAgIEBpbmNsdWRlIGFkanVzdC1sZWFkaW5nLXRvKDEsIGlmKCRyZWxhdGl2ZS1mb250LXNpemluZywgJGZvbnQtc2l6ZSwgJGJhc2UtZm9udC1zaXplKSk7XG4gIH1cbn1cblxuXG5cblxuLy8gQmFzZWQgb24gW0VyaWMgTWV5ZXIncyByZXNldCAyLjBdKGh0dHA6Ly9tZXllcndlYi5jb20vZXJpYy90b29scy9jc3MvcmVzZXQvaW5kZXguaHRtbClcbi8vIEdsb2JhbCByZXNldCBydWxlcy5cbi8vIEZvciBtb3JlIHNwZWNpZmljIHJlc2V0cywgdXNlIHRoZSByZXNldCBtaXhpbnMgcHJvdmlkZWQgYmVsb3dcbkBtaXhpbiBnbG9iYWwtcmVzZXQge1xuICBodG1sLCBib2R5LCBkaXYsIHNwYW4sIGFwcGxldCwgb2JqZWN0LCBpZnJhbWUsXG4gIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcbiAgYSwgYWJiciwgYWNyb255bSwgYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLFxuICBkZWwsIGRmbiwgZW0sIGltZywgaW5zLCBrYmQsIHEsIHMsIHNhbXAsXG4gIHNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXG4gIGIsIHUsIGksIGNlbnRlcixcbiAgZGwsIGR0LCBkZCwgb2wsIHVsLCBsaSxcbiAgZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXG4gIHRhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLFxuICBhcnRpY2xlLCBhc2lkZSwgY2FudmFzLCBkZXRhaWxzLCBlbWJlZCxcbiAgZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLFxuICBtZW51LCBuYXYsIG91dHB1dCwgcnVieSwgc2VjdGlvbiwgc3VtbWFyeSxcbiAgdGltZSwgbWFyaywgYXVkaW8sIHZpZGVvIHtcbiAgICBAaW5jbHVkZSByZXNldC1ib3gtbW9kZWw7XG4gICAgQGluY2x1ZGUgcmVzZXQtZm9udDsgfVxuICAvLyBVbmxpa2UgRXJpYydzIG9yaWdpbmFsIHJlc2V0LCB3ZSByZXNldCB0aGUgaHRtbCBlbGVtZW50IHRvIGJlIGNvbXBhdGlibGVcbiAgLy8gd2l0aCB0aGUgdmVydGljYWwgcmh5dGhtIG1peGlucy5cbiAgaHRtbCB7XG4gICAgQGluY2x1ZGUgcmVzZXQtYm9keTsgfVxuICBvbCwgdWwge1xuICAgIEBpbmNsdWRlIHJlc2V0LWxpc3Qtc3R5bGU7IH1cbiAgdGFibGUge1xuICAgIEBpbmNsdWRlIHJlc2V0LXRhYmxlOyB9XG4gIGNhcHRpb24sIHRoLCB0ZCB7XG4gICAgQGluY2x1ZGUgcmVzZXQtdGFibGUtY2VsbDsgfVxuICBxLCBibG9ja3F1b3RlIHtcbiAgICBAaW5jbHVkZSByZXNldC1xdW90YXRpb247IH1cbiAgYSBpbWcge1xuICAgIEBpbmNsdWRlIHJlc2V0LWltYWdlLWFuY2hvci1ib3JkZXI7IH1cbiAgQGluY2x1ZGUgcmVzZXQtaHRtbDU7IH1cblxuLy8gUmVzZXQgYWxsIGVsZW1lbnRzIHdpdGhpbiBzb21lIHNlbGVjdG9yIHNjb3BlLiBUbyByZXNldCB0aGUgc2VsZWN0b3IgaXRzZWxmLFxuLy8gbWl4aW4gdGhlIGFwcHJvcHJpYXRlIHJlc2V0IG1peGluIGZvciB0aGF0IGVsZW1lbnQgdHlwZSBhcyB3ZWxsLiBUaGlzIGNvdWxkIGJlXG4vLyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc3R5bGUgYSBwYXJ0IG9mIHlvdXIgcGFnZSBpbiBhIGRyYW1hdGljYWxseSBkaWZmZXJlbnQgd2F5LlxuQG1peGluIG5lc3RlZC1yZXNldCB7XG4gIGRpdiwgc3BhbiwgYXBwbGV0LCBvYmplY3QsIGlmcmFtZSxcbiAgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLFxuICBhLCBhYmJyLCBhY3JvbnltLCBhZGRyZXNzLCBiaWcsIGNpdGUsIGNvZGUsXG4gIGRlbCwgZGZuLCBlbSwgaW1nLCBpbnMsIGtiZCwgcSwgcywgc2FtcCxcbiAgc21hbGwsIHN0cmlrZSwgc3Ryb25nLCBzdWIsIHN1cCwgdHQsIHZhcixcbiAgYiwgdSwgaSwgY2VudGVyLFxuICBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpLFxuICBmaWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCxcbiAgdGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsXG4gIGFydGljbGUsIGFzaWRlLCBjYW52YXMsIGRldGFpbHMsIGVtYmVkLFxuICBmaWd1cmUsIGZpZ2NhcHRpb24sIGZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsXG4gIG1lbnUsIG5hdiwgb3V0cHV0LCBydWJ5LCBzZWN0aW9uLCBzdW1tYXJ5LFxuICB0aW1lLCBtYXJrLCBhdWRpbywgdmlkZW8ge1xuICAgIEBpbmNsdWRlIHJlc2V0LWJveC1tb2RlbDtcbiAgICBAaW5jbHVkZSByZXNldC1mb250OyB9XG4gIHRhYmxlIHtcbiAgICBAaW5jbHVkZSByZXNldC10YWJsZTsgfVxuICBjYXB0aW9uLCB0aCwgdGQge1xuICAgIEBpbmNsdWRlIHJlc2V0LXRhYmxlLWNlbGw7IH1cbiAgcSwgYmxvY2txdW90ZSB7XG4gICAgQGluY2x1ZGUgcmVzZXQtcXVvdGF0aW9uOyB9XG4gIGEgaW1nIHtcbiAgICBAaW5jbHVkZSByZXNldC1pbWFnZS1hbmNob3ItYm9yZGVyOyB9IH1cblxuLy8gUmVzZXQgdGhlIGJveCBtb2RlbCBtZWFzdXJlbWVudHMuXG5AbWl4aW4gcmVzZXQtYm94LW1vZGVsIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7IH1cblxuLy8gUmVzZXQgdGhlIGZvbnQgYW5kIHZlcnRpY2FsIGFsaWdubWVudC5cbkBtaXhpbiByZXNldC1mb250IHtcbiAgZm9udDogaW5oZXJpdDtcbiAgZm9udC1zaXplOiAxMDAlO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7IH1cblxuLy8gUmVzZXRzIHRoZSBvdXRsaW5lIHdoZW4gZm9jdXMuXG4vLyBGb3IgYWNjZXNzaWJpbGl0eSB5b3UgbmVlZCB0byBhcHBseSBzb21lIHN0eWxpbmcgaW4gaXRzIHBsYWNlLlxuQG1peGluIHJlc2V0LWZvY3VzIHtcbiAgb3V0bGluZTogMDsgfVxuXG4vLyBSZXNldCBhIGJvZHkgZWxlbWVudC5cbkBtaXhpbiByZXNldC1ib2R5IHtcbiAgbGluZS1oZWlnaHQ6IDE7IH1cblxuLy8gUmVzZXQgdGhlIGxpc3Qgc3R5bGUgb2YgYW4gZWxlbWVudC5cbkBtaXhpbiByZXNldC1saXN0LXN0eWxlIHtcbiAgbGlzdC1zdHlsZTogbm9uZTsgfVxuXG4vLyBSZXNldCBhIHRhYmxlXG5AbWl4aW4gcmVzZXQtdGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDsgfVxuXG4vLyBSZXNldCBhIHRhYmxlIGNlbGwgKGB0aGAsIGB0ZGApXG5AbWl4aW4gcmVzZXQtdGFibGUtY2VsbCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH1cblxuLy8gUmVzZXQgYSBxdW90YXRpb24gKGBxYCwgYGJsb2NrcXVvdGVgKVxuQG1peGluIHJlc2V0LXF1b3RhdGlvbiB7XG4gIHF1b3Rlczogbm9uZTtcbiAgJjpiZWZvcmUsICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgY29udGVudDogbm9uZTsgfSB9XG5cbi8vIFJlc2V0cyB0aGUgYm9yZGVyLlxuQG1peGluIHJlc2V0LWltYWdlLWFuY2hvci1ib3JkZXIge1xuICBib3JkZXI6IG5vbmU7IH1cblxuLy8gVW5yZWNvZ25pemVkIGVsZW1lbnRzIGFyZSBkaXNwbGF5ZWQgaW5saW5lLlxuLy8gVGhpcyByZXNldCBwcm92aWRlcyBhIGJhc2ljIHJlc2V0IGZvciBibG9jayBodG1sNSBlbGVtZW50c1xuLy8gc28gdGhleSBhcmUgcmVuZGVyZWQgY29ycmVjdGx5IGluIGJyb3dzZXJzIHRoYXQgZG9uJ3QgcmVjb2duaXplIHRoZW1cbi8vIGFuZCByZXNldCBpbiBicm93c2VycyB0aGF0IGhhdmUgZGVmYXVsdCBzdHlsZXMgZm9yIHRoZW0uXG5AbWl4aW4gcmVzZXQtaHRtbDUge1xuICAje2VsZW1lbnRzLW9mLXR5cGUoaHRtbDUtYmxvY2spfSB7XG4gICAgZGlzcGxheTogYmxvY2s7IH0gfVxuXG4vLyBSZXNldHMgdGhlIGRpc3BsYXkgb2YgaW5saW5lIGFuZCBibG9jayBlbGVtZW50cyB0byB0aGVpciBkZWZhdWx0IGRpc3BsYXlcbi8vIGFjY29yZGluZyB0byB0aGVpciB0YWcgdHlwZS4gRWxlbWVudHMgdGhhdCBoYXZlIGEgZGVmYXVsdCBkaXNwbGF5IHRoYXQgdmFyaWVzIGFjcm9zc1xuLy8gdmVyc2lvbnMgb2YgaHRtbCBvciBicm93c2VyIGFyZSBub3QgaGFuZGxlZCBoZXJlLCBidXQgdGhpcyBjb3ZlcnMgdGhlIDkwJSB1c2UgY2FzZS5cbi8vIFVzYWdlIEV4YW1wbGU6XG4vL1xuLy8gICAgIC8vIFR1cm4gb2ZmIHRoZSBkaXNwbGF5IGZvciBib3RoIG9mIHRoZXNlIGNsYXNzZXNcbi8vICAgICAudW5yZWdpc3RlcmVkLW9ubHksIC5yZWdpc3RlcmVkLW9ubHlcbi8vICAgICAgIGRpc3BsYXk6IG5vbmVcbi8vICAgICAvLyBOb3cgdHVybiBvbmx5IG9uZSBvZiB0aGVtIGJhY2sgb24gZGVwZW5kaW5nIG9uIHNvbWUgb3RoZXIgY29udGV4dC5cbi8vICAgICBib2R5LnJlZ2lzdGVyZWRcbi8vICAgICAgICtyZXNldC1kaXNwbGF5KFwiLnJlZ2lzdGVyZWQtb25seVwiKVxuLy8gICAgIGJvZHkudW5yZWdpc3RlcmVkXG4vLyAgICAgICArcmVzZXQtZGlzcGxheShcIi51bnJlZ2lzdGVyZWQtb25seVwiKVxuQG1peGluIHJlc2V0LWRpc3BsYXkoJHNlbGVjdG9yOiBcIlwiLCAkaW1wb3J0YW50OiBmYWxzZSkge1xuICAje2FwcGVuZC1zZWxlY3RvcihlbGVtZW50cy1vZi10eXBlKFwiaW5saW5lXCIpLCAkc2VsZWN0b3IpfSB7XG4gICAgQGlmICRpbXBvcnRhbnQge1xuICAgICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH1cbiAgICBAZWxzZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmU7IH0gfVxuICAje2FwcGVuZC1zZWxlY3RvcihlbGVtZW50cy1vZi10eXBlKFwiYmxvY2tcIiksICRzZWxlY3Rvcil9IHtcbiAgICBAaWYgJGltcG9ydGFudCB7XG4gICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9XG4gICAgQGVsc2Uge1xuICAgICAgZGlzcGxheTogYmxvY2s7IH0gfSB9XG4iLCIvLyBTdXN5XG4vLyA9PT09XG5cbkBpbXBvcnQgJ3N1c3kvbGFuZ3VhZ2Uvc3VzeSc7XG4iLCIvLyBTdXN5IE5leHQgU3ludGF4XG4vLyA9PT09PT09PT09PT09PT09XG5cbiRzdXN5LXZlcnNpb246IDIuMTtcblxuQGltcG9ydCBcIi4uL3N1XCI7XG5AaW1wb3J0IFwiLi4vb3V0cHV0L2Zsb2F0XCI7XG5cbkBpbXBvcnQgXCJzdXN5L3NldHRpbmdzXCI7XG5AaW1wb3J0IFwic3VzeS92YWxpZGF0aW9uXCI7XG5AaW1wb3J0IFwic3VzeS9ncmlkc1wiO1xuQGltcG9ydCBcInN1c3kvYm94LXNpemluZ1wiO1xuQGltcG9ydCBcInN1c3kvY29udGV4dFwiO1xuQGltcG9ydCBcInN1c3kvYmFja2dyb3VuZFwiO1xuQGltcG9ydCBcInN1c3kvY29udGFpbmVyXCI7XG5AaW1wb3J0IFwic3VzeS9zcGFuXCI7XG5AaW1wb3J0IFwic3VzeS9ndXR0ZXJzXCI7XG5AaW1wb3J0IFwic3VzeS9pc29sYXRlXCI7XG5AaW1wb3J0IFwic3VzeS9nYWxsZXJ5XCI7XG5AaW1wb3J0IFwic3VzeS9yb3dzXCI7XG5AaW1wb3J0IFwic3VzeS9tYXJnaW5zXCI7XG5AaW1wb3J0IFwic3VzeS9wYWRkaW5nXCI7XG5AaW1wb3J0IFwic3VzeS9ibGVlZFwiO1xuQGltcG9ydCBcInN1c3kvYnJlYWtwb2ludC1wbHVnaW5cIjtcbiIsIi8vIFN1XG4vLyA9PVxuXG5AaW1wb3J0IFwic3UvdXRpbGl0aWVzXCI7XG5AaW1wb3J0IFwic3Uvc2V0dGluZ3NcIjtcbkBpbXBvcnQgXCJzdS92YWxpZGF0aW9uXCI7XG5AaW1wb3J0IFwic3UvZ3JpZFwiO1xuIiwiLy8gTWFwIEZ1bmN0aW9uc1xuLy8gPT09PT09PT09PT09PVxuXG5cbi8vIFRydW5jYXRlIExpc3Rcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIC0gUmV0dXJuIGEgbGlzdCwgdHJ1bmNhdGVkIHRvIGEgZ2l2ZW4gbGVuZ3RoXG5AZnVuY3Rpb24gX3N1c3ktdHJ1bmNhdGUtbGlzdChcbiAgJGxpc3QsXG4gICRsZW5ndGhcbikge1xuICAkX3JldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJGxpc3QpIHtcbiAgICAkX3JldHVybjogaWYoJGkgPD0gJGxlbmd0aCwgYXBwZW5kKCRfcmV0dXJuLCBudGgoJGxpc3QsICRpKSksICRfcmV0dXJuKTtcbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gRGVlcCBHZXRcbi8vIC0tLS0tLS0tXG4vLyAtIFJldHVybiBhIHZhbHVlIGRlZXAgaW4gbmVzdGVkIG1hcHNcbkBmdW5jdGlvbiBfc3VzeS1kZWVwLWdldChcbiAgJG1hcCxcbiAgJGtleXMuLi5cbikge1xuICAkX3JldHVybjogJG1hcDtcblxuICBAZWFjaCAka2V5IGluICRrZXlzIHtcbiAgICBAaWYgdHlwZS1vZigkX3JldHVybikgPT0gbWFwIHtcbiAgICAgICRfcmV0dXJuOiBtYXAtZ2V0KCRfcmV0dXJuLCAka2V5KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIERlZXAgU2V0XG4vLyAtLS0tLS0tLVxuLy8gLSBTZXQgYSB2YWx1ZSBkZWVwIGluIG5lc3RlZCBtYXBzXG5AZnVuY3Rpb24gX3N1c3ktZGVlcC1zZXQoXG4gICRtYXAsXG4gICRrZXlzLXZhbHVlLi4uXG4pIHtcbiAgJF92YWx1ZTogbnRoKCRrZXlzLXZhbHVlLCAtMSk7XG4gICRfa2V5czogX3N1c3ktdHJ1bmNhdGUtbGlzdCgka2V5cy12YWx1ZSwgbGVuZ3RoKCRrZXlzLXZhbHVlKSAtIDEpO1xuICAkX2xlbmd0aDogbGVuZ3RoKCRfa2V5cyk7XG4gICRfcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRfbGVuZ3RoIHtcbiAgICAkX246IDAgLSAkaTtcbiAgICAkX2xldmVsOiBfc3VzeS10cnVuY2F0ZS1saXN0KCRfa2V5cywgJF9sZW5ndGggKyAkX24pO1xuICAgICRfbGV2ZWw6IF9zdXN5LWRlZXAtZ2V0KCRtYXAsICRfbGV2ZWwuLi4pO1xuICAgICRfbWVyZ2U6IG50aCgkX2tleXMsICRfbik7XG4gICAgJF9tZXJnZTogKCRfbWVyZ2U6ICRfdmFsdWUpO1xuICAgICRfcmV0dXJuOiBpZigkX2xldmVsLCBtYXAtbWVyZ2UoJF9sZXZlbCwgJF9tZXJnZSksICRfbWVyZ2UpO1xuICAgICRfdmFsdWU6ICRfcmV0dXJuO1xuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBEZWVwIE1lcmdlXG4vLyAtLS0tLS0tLS0tXG4vLyBSZXR1cm4gMiBvYmplY3RzIG9mIGFueSBkZXB0aCwgbWVyZ2VkXG5AZnVuY3Rpb24gX3N1c3ktZGVlcC1tZXJnZShcbiAgJG1hcDEsXG4gICRtYXAyXG4pIHtcblxuICBAaWYgdHlwZS1vZigkbWFwMSkgIT0gbWFwIG9yIHR5cGUtb2YoJG1hcDIpICE9IG1hcCB7XG4gICAgJG1hcDE6ICRtYXAyO1xuICB9IEBlbHNlIHtcbiAgICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJG1hcDIge1xuICAgICAgJF9uZXc6ICgka2V5OiBfc3VzeV9kZWVwLW1lcmdlKG1hcC1nZXQoJG1hcDEsICRrZXkpLCAkdmFsdWUpKTtcbiAgICAgICRtYXAxOiBtYXAtbWVyZ2UoJG1hcDEsICRfbmV3KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRtYXAxO1xufVxuXG5cbi8vIERlZXAgSGFzLUtleVxuLy8gLS0tLS0tLS0tLS0tXG4vLyAtIFJldHVybiB0cnVlIGlmIGEgZGVlcCBrZXkgZXhpc3RzXG5AZnVuY3Rpb24gX3N1c3ktZGVlcC1oYXMta2V5KFxuICAkbWFwLFxuICAka2V5cy4uLlxuKSB7XG4gICRfcmV0dXJuOiBudWxsO1xuICAkX3N0b3A6IGZhbHNlO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiBub3QoJF9zdG9wKSB7XG4gICAgICAkX3JldHVybjogbWFwLWhhcy1rZXkoJG1hcCwgJGtleSk7XG4gICAgfVxuXG4gICAgQGlmICRfcmV0dXJuIHtcbiAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkX3N0b3A6IHRydWU7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cbiIsIi8vIFNldHRpbmdzXG4vLyA9PT09PT09PVxuXG4vLyBWZXJzaW9uXG4vLyAtLS0tLS0tXG4kc3UtdmVyc2lvbjogMS4xO1xuXG5cbi8vIERlZmF1bHQgU2V0dGluZ3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vIFBSSVZBVEU6IFRoZSBiYXNpYyBzZXR0aW5nc1xuJHN1c3ktZGVmYXVsdHM6IChcbiAgY29sdW1uczogNCxcbiAgZ3V0dGVyczogLjI1LFxuKTtcblxuXG4vLyBVc2VyIFNldHRpbmdzXG4vLyAtLS0tLS0tLS0tLS0tXG4vLyAtIERlZmluZSB0aGUgJHN1c3kgdmFyaWFibGUgd2l0aCBhIG1hcCBvZiB5b3VyIG93biBzZXR0aW5ncy5cbi8vIC0gU2V0IEVJVEhFUiAkY29sdW1uLXdpZHRoIE9SICRjb250YWluZXJcbi8vIC0gVXNlICRjb2x1bW4td2lkdGggZm9yIHN0YXRpYyBsYXlvdXRzXG4kc3VzeTogKCkgIWRlZmF1bHQ7XG5cblxuLy8gU3VzeSBEZWZhdWx0c1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8gUFJJVkFURTogQWRkIGRlZmF1bHRzIHRvIFN1c3lcbkBtaXhpbiBzdXN5LWRlZmF1bHRzKFxuICAkZGVmYXVsdHNcbikge1xuICAkc3VzeS1kZWZhdWx0czogbWFwLW1lcmdlKCRzdXN5LWRlZmF1bHRzLCAkZGVmYXVsdHMpICFnbG9iYWw7XG59XG5cblxuLy8gU3VzeSBTZXRcbi8vIC0tLS0tLS0tXG4vLyBDaGFuZ2Ugb25lIHNldHRpbmdcbi8vIC0gJGtleSAgIDogc2V0dGluZyBuYW1lXG4vLyAtICR2YWx1ZSA6IHNldHRpbmcgdmFsdWVcbkBtaXhpbiBzdXN5LXNldChcbiAgJGtleS12YWx1ZS4uLlxuKSB7XG4gICRzdXN5OiBfc3VzeS1kZWVwLXNldCgkc3VzeSwgJGtleS12YWx1ZS4uLikgIWdsb2JhbDtcbn1cblxuXG4vLyBTdXN5IEdldFxuLy8gLS0tLS0tLS1cbi8vIFJldHVybiBvbmUgc2V0dGluZyBmcm9tIGEgZ3JpZFxuLy8gLSAka2V5ICAgICA6IDxrZXl3b3JkPlxuLy8gLSAkbGF5b3V0ICA6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBzdXN5LWdldChcbiAgJGtleSxcbiAgJGxheW91dDogbWFwLW1lcmdlKCRzdXN5LWRlZmF1bHRzLCAkc3VzeSlcbikge1xuICAkbGF5b3V0OiBwYXJzZS1ncmlkKCRsYXlvdXQpO1xuICAkX29wdGlvbnM6ICRsYXlvdXQgJHN1c3kgJHN1c3ktZGVmYXVsdHM7XG4gICRfYnJlYWs6IGZhbHNlO1xuICAkX3JldHVybjogbnVsbDtcblxuICBAZWFjaCAkb3B0IGluICRfb3B0aW9ucyB7XG4gICAgQGlmIHR5cGUtb2YoJG9wdCkgPT0gbWFwIGFuZCBub3QoJF9icmVhaykge1xuICAgICAgJF9rZXlzZXQ6IF9zdXN5LWRlZXAtaGFzLWtleSgkb3B0LCAka2V5Li4uKTtcbiAgICAgIEBpZiAkX2tleXNldCB7XG4gICAgICAgICRfcmV0dXJuOiBfc3VzeS1kZWVwLWdldCgkb3B0LCAka2V5Li4uKTtcbiAgICAgICAgJF9icmVhazogdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuIiwiLy8gTWF0aCBWYWxpZGF0aW9uXG4vLyA9PT09PT09PT09PT09PT1cblxuXG4vLyBWYWxpZCBDb2x1bW5zXG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBDaGVjayB0aGF0IGEgY29sdW1uIHNldHRpbmcgaXMgdmFsaWQuXG5AZnVuY3Rpb24gdmFsaWQtY29sdW1ucyhcbiAgJGNvbHVtbnMsXG4gICRzaWxlbnQ6IGZhbHNlXG4pIHtcbiAgJHR5cGU6IHR5cGUtb2YoJGNvbHVtbnMpO1xuICAkcmV0dXJuOiBudWxsO1xuXG4gIEBpZiAkdHlwZSA9PSBudW1iZXIgYW5kIHVuaXRsZXNzKCRjb2x1bW5zKSB7XG4gICAgJHJldHVybjogJGNvbHVtbnM7XG4gIH0gQGVsc2UgaWYgJHR5cGUgPT0gbGlzdCB7XG4gICAgJGZhaWw6IG51bGw7XG4gICAgQGVhY2ggJGNvbCBpbiAkY29sdW1ucyB7XG4gICAgICBAaWYgdHlwZS1vZigkY29sKSA9PSBudW1iZXIge1xuICAgICAgICAkZmFpbDogJGZhaWwgb3IgaWYodW5pdGxlc3MoJGNvbCksIG51bGwsIHRydWUpO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRmYWlsOiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAkcmV0dXJuOiBpZigkZmFpbCwgJHJldHVybiwgJGNvbHVtbnMpO1xuICB9XG5cbiAgQGlmICRyZXR1cm4gIT0gJGNvbHVtbnMgYW5kIG5vdCgkc2lsZW50KSB7XG4gICAgJHJldHVybjogbnVsbDtcbiAgICAkd2FybjogJyRjb2x1bW5zIG11c3QgYmUgYSB1bml0bGVzcyBudW1iZXIgb3IgbGlzdCBvZiB1bml0bGVzcyBudW1iZXJzLic7XG4gICAgQHdhcm4gJHdhcm4gKyAnIEN1cnJlbnQgdmFsdWUgWyN7JHR5cGV9XTogI3skY29sdW1uc30nO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG5cbi8vIFZhbGlkIEd1dHRlcnNcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIENoZWNrIHRoYXQgYSBndXR0ZXIgc2V0dGluZyBpcyB2YWxpZC5cbkBmdW5jdGlvbiB2YWxpZC1ndXR0ZXJzKFxuICAkZ3V0dGVycyxcbiAgJHNpbGVudDogZmFsc2Vcbikge1xuICAkdHlwZTogdHlwZS1vZigkZ3V0dGVycyk7XG4gICRyZXR1cm46IG51bGw7XG5cbiAgQGlmICR0eXBlID09IG51bWJlciBhbmQgdW5pdGxlc3MoJGd1dHRlcnMpIHtcbiAgICAkcmV0dXJuOiAkZ3V0dGVycztcbiAgfSBAZWxzZSBpZiBub3QoJHNpbGVudCkge1xuICAgICR3YXJuOiAnJGd1dHRlcnMgbXVzdCBiZSBhIHVuaXRsZXNzIG51bWJlci4nO1xuICAgIEB3YXJuICR3YXJuICsgJyBDdXJyZW50IHZhbHVlIFsjeyR0eXBlfV06ICN7JGd1dHRlcnN9JztcbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cbiIsIi8vIENvbHVtbiBtYXRoXG4vLyA9PT09PT09PT09PVxuXG5cbi8vIElzIFN5bW1ldHJpY2FsXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJucyB0cnVlIGlmIGEgZ3JpZCBpcyBzeW1tZXRyaWNhbC5cbi8vIC0gWyRjb2x1bW5zXSAgIDogPG51bWJlcj4gfCA8bGlzdD5cbkBmdW5jdGlvbiBpcy1zeW1tZXRyaWNhbChcbiAgJGNvbHVtbnM6IHN1c3ktZ2V0KGNvbHVtbnMpXG4pIHtcbiAgJGNvbHVtbnM6IHZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICBAcmV0dXJuIGlmKHR5cGUtb2YoJGNvbHVtbnMpID09IG51bWJlciwgJGNvbHVtbnMsIG51bGwpO1xufVxuXG5cbi8vIFN1c3kgQ291bnRcbi8vIC0tLS0tLS0tLS1cbi8vIEZpbmQgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIGEgZ2l2ZW4gbGF5b3V0XG4vLyAtIFskY29sdW1uc10gICA6IDxudW1iZXI+IHwgPGxpc3Q+XG5AZnVuY3Rpb24gc3VzeS1jb3VudChcbiAgJGNvbHVtbnM6IHN1c3ktZ2V0KGNvbHVtbnMpXG4pIHtcbiAgJGNvbHVtbnM6IHZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICBAcmV0dXJuIGlzLXN5bW1ldHJpY2FsKCRjb2x1bW5zKSBvciBsZW5ndGgoJGNvbHVtbnMpO1xufVxuXG5cbi8vIFN1c3kgU3VtXG4vLyAtLS0tLS0tLVxuLy8gRmluZCB0aGUgdG90YWwgc3VtIG9mIGNvbHVtbi11bml0cyBpbiBhIGxheW91dFxuLy8gLSBbJGNvbHVtbnNdICAgOiA8bnVtYmVyPiB8IDxsaXN0PlxuLy8gLSBbJGd1dHRlcnNdICAgOiA8cmF0aW8+XG4vLyAtIFskc3ByZWFkXSAgICA6IGZhbHNlL25hcnJvdyB8IHdpZGUgfCB3aWRlclxuQGZ1bmN0aW9uIHN1c3ktc3VtKFxuICAkY29sdW1ucyAgOiBzdXN5LWdldChjb2x1bW5zKSxcbiAgJGd1dHRlcnMgIDogc3VzeS1nZXQoZ3V0dGVycyksXG4gICRzcHJlYWQgICA6IGZhbHNlXG4pIHtcbiAgJGNvbHVtbnM6IHZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICAkZ3V0dGVyczogdmFsaWQtZ3V0dGVycygkZ3V0dGVycyk7XG5cbiAgJHNwcmVhZDogaWYoJHNwcmVhZCA9PSB3aWRlLCAwLCBpZigkc3ByZWFkID09IHdpZGVyLCAxLCAtMSkpO1xuICAkZ3V0dGVyLXN1bTogKHN1c3ktY291bnQoJGNvbHVtbnMpICsgJHNwcmVhZCkgKiAkZ3V0dGVycztcbiAgJGNvbHVtbi1zdW06IGlzLXN5bW1ldHJpY2FsKCRjb2x1bW5zKTtcblxuICBAaWYgbm90KCRjb2x1bW4tc3VtKSB7XG4gICAgQGVhY2ggJGNvbHVtbiBpbiAkY29sdW1ucyB7XG4gICAgICAkY29sdW1uLXN1bTogKCRjb2x1bW4tc3VtIG9yIDApICsgJGNvbHVtbjtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRjb2x1bW4tc3VtICsgJGd1dHRlci1zdW07XG59XG5cblxuLy8gU3VzeSBTbGljZVxuLy8gLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGEgc3Vic2V0IG9mIGNvbHVtbnMgYXQgYSBnaXZlbiBsb2NhdGlvbi5cbi8vIC0gJHNwYW4gICAgICAgIDogPG51bWJlcj5cbi8vIC0gJGxvY2F0aW9uICAgIDogPG51bWJlcj5cbi8vIC0gWyRjb2x1bW5zXSAgIDogPG51bWJlcj4gfCA8bGlzdD5cbkBmdW5jdGlvbiBzdXN5LXNsaWNlKFxuICAkc3BhbixcbiAgJGxvY2F0aW9uLFxuICAkY29sdW1uczogc3VzeS1nZXQoY29sdW1ucylcbikge1xuICAkY29sdW1uczogdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICRzdWItY29sdW1uczogJHNwYW47XG5cbiAgQGlmIG5vdChpcy1zeW1tZXRyaWNhbCgkY29sdW1ucykpIHtcbiAgICAkbG9jYXRpb246ICRsb2NhdGlvbiBvciAxO1xuICAgICRzdWItY29sdW1uczogKCk7XG4gICAgQGZvciAkaSBmcm9tICRsb2NhdGlvbiB0byAoJGxvY2F0aW9uICsgJHNwYW4pIHtcbiAgICAgICRzdWItY29sdW1uczogYXBwZW5kKCRzdWItY29sdW1ucywgbnRoKCRjb2x1bW5zLCAkaSkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJHN1Yi1jb2x1bW5zO1xufVxuXG5cbi8vIFN1c3lcbi8vIC0tLS1cbi8vIEZpbmQgdGhlIHN1bSBvZiBhIGNvbHVtbi1zcGFuLlxuLy8gLSAkc3BhbiAgICAgICAgOiA8bnVtYmVyPlxuLy8gLSAkbG9jYXRpb24gICAgOiA8bnVtYmVyPlxuLy8gLSBbJGNvbHVtbnNdICAgOiA8bnVtYmVyPiB8IDxsaXN0PlxuLy8gLSBbJGd1dHRlcnNdICAgOiA8cmF0aW8+XG4vLyAtIFskc3ByZWFkXSAgICA6IGZhbHNlL25hcnJvdyB8IHdpZGUgfCB3aWRlclxuQGZ1bmN0aW9uIHN1c3koXG4gICRzcGFuLFxuICAkbG9jYXRpb24gICAgIDogZmFsc2UsXG4gICRjb2x1bW5zICAgICAgOiBzdXN5LWdldChjb2x1bW5zKSxcbiAgJGd1dHRlcnMgICAgICA6IHN1c3ktZ2V0KGd1dHRlcnMpLFxuICAkc3ByZWFkICAgICAgIDogZmFsc2Vcbikge1xuICAkY29sdW1uczogdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICRndXR0ZXJzOiB2YWxpZC1ndXR0ZXJzKCRndXR0ZXJzKTtcbiAgJHNwYW46IHN1c3ktc2xpY2UoJHNwYW4sICRsb2NhdGlvbiwgJGNvbHVtbnMpO1xuXG4gIEByZXR1cm4gc3VzeS1zdW0oJHNwYW4sICRndXR0ZXJzLCAkc3ByZWFkKTtcbn1cbiIsIi8vIEZsb2F0IEFQSVxuLy8gPT09PT09PT09XG5cbkBpbXBvcnQgXCJzaGFyZWRcIjtcblxuQGltcG9ydCBcImZsb2F0L2NvbnRhaW5lclwiO1xuQGltcG9ydCBcImZsb2F0L3NwYW5cIjtcbkBpbXBvcnQgXCJmbG9hdC9lbmRcIjtcbkBpbXBvcnQgXCJmbG9hdC9pc29sYXRlXCI7XG4iLCIvLyBTaGFyZWQgQVBJXG4vLyA9PT09PT09PT09XG5cbkBpbXBvcnQgXCJzdXBwb3J0XCI7XG5cbkBpbXBvcnQgXCJzaGFyZWQvaW5zcGVjdFwiO1xuQGltcG9ydCBcInNoYXJlZC9vdXRwdXRcIjtcbkBpbXBvcnQgXCJzaGFyZWQvZGlyZWN0aW9uXCI7XG5AaW1wb3J0IFwic2hhcmVkL2JhY2tncm91bmRcIjtcbkBpbXBvcnQgXCJzaGFyZWQvY29udGFpbmVyXCI7XG5AaW1wb3J0IFwic2hhcmVkL21hcmdpbnNcIjtcbkBpbXBvcnQgXCJzaGFyZWQvcGFkZGluZ1wiO1xuXG5cblxuIiwiLy8gU3VzeSBCcm93c2VyIFN1cHBvcnRcbi8vID09PT09PT09PT09PT09PT09PT09XG5cbkBpbXBvcnQgXCJzdXBwb3J0L3N1cHBvcnRcIjtcbkBpbXBvcnQgXCJzdXBwb3J0L3ByZWZpeFwiO1xuQGltcG9ydCBcInN1cHBvcnQvYmFja2dyb3VuZFwiO1xuQGltcG9ydCBcInN1cHBvcnQvYm94LXNpemluZ1wiO1xuQGltcG9ydCBcInN1cHBvcnQvcmVtXCI7XG5AaW1wb3J0IFwic3VwcG9ydC9jbGVhcmZpeFwiO1xuIiwiLy8gQnJvd3NlciBTdXBwb3J0XG4vLyA9PT09PT09PT09PT09PT1cblxuLy8gU3VzeSBTdXBwb3J0IERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBpbmNsdWRlIHN1c3ktZGVmYXVsdHMoKFxuICB1c2UtY3VzdG9tOiAoXG4gICAgY2xlYXJmaXg6IGZhbHNlLFxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHRydWUsXG4gICAgYmFja2dyb3VuZC1vcHRpb25zOiBmYWxzZSxcbiAgICBicmVha3BvaW50OiB0cnVlLFxuICAgIGJveC1zaXppbmc6IHRydWUsXG4gICAgcmVtOiB0cnVlLFxuICApLFxuKSk7XG5cblxuLy8gU3VzeSBTdXBwb3J0IFttaXhpbl1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZW5kIHByb3BlcnR5LXZhbHVlIHBhaXJzIHRvIHRoZSBwcm9wZXIgc3VwcG9ydCBtb2R1bGVzLlxuLy8gLSAkcHJvcCAgOiA8Y3NzIHByb3BlcnR5PlxuLy8gLSAkdmFsICAgOiA8Y3NzIHZhbHVlPlxuQG1peGluIHN1c3ktc3VwcG9ydChcbiAgJHByb3AsXG4gICR2YWxcbikge1xuICAvLyBCYWNrZ3JvdW5kIFN1cHBvcnRcbiAgQGlmICRwcm9wID09IGJhY2tncm91bmQtaW1hZ2Uge1xuICAgIEBpbmNsdWRlIHN1c3ktYmFja2dyb3VuZC1pbWFnZSgkdmFsKTtcbiAgfSBAZWxzZSBpZiAkcHJvcCA9PSBiYWNrZ3JvdW5kLXNpemUge1xuICAgIEBpbmNsdWRlIHN1c3ktYmFja2dyb3VuZC1zaXplKCR2YWwpO1xuICB9IEBlbHNlIGlmICRwcm9wID09IGJhY2tncm91bmQtb3JpZ2luIHtcbiAgICBAaW5jbHVkZSBzdXN5LWJhY2tncm91bmQtb3JpZ2luKCR2YWwpO1xuICB9IEBlbHNlIGlmICRwcm9wID09IGJhY2tncm91bmQtY2xpcCB7XG4gICAgQGluY2x1ZGUgc3VzeS1iYWNrZ3JvdW5kLWNsaXAoJHZhbCk7XG4gIH1cblxuICAvLyBCb3gtU2l6aW5nIFN1cHBvcnRcbiAgQGVsc2UgaWYgJHByb3AgPT0gYm94LXNpemluZyB7XG4gICAgQGluY2x1ZGUgc3VzeS1ib3gtc2l6aW5nKCR2YWwpO1xuICB9XG5cbiAgLy8gUmVtIFN1cHBvcnRcbiAgQGVsc2Uge1xuICAgIEBpbmNsdWRlIHN1c3ktcmVtKCRwcm9wLCAkdmFsKTtcbiAgfVxufVxuXG5cbi8vIFN1c3kgU3VwcG9ydCBbZnVuY3Rpb25dXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hlY2sgZm9yIHN1cHBvcnQgb2YgYSBmZWF0dXJlLlxuLy8gLSAkZmVhdHVyZSAgICAgICA6IDxzdHJpbmc+XG4vLyAgICAgICAgICAgICAgICAgICAgLSBlLmcgXCJyZW1cIiBvciBcImJveC1zaXppbmdcIlxuLy8gLSAkcmVxdWlyZW1lbnRzICA6IDxtYXA+XG4vLyAgICAgICAgICAgICAgICAgICAgLSBlLmcgKHZhcmlhYmxlOiByZW0td2l0aC1weC1mYWxsYmFjaywgbWl4aW46IHJlbSlcbi8vIC0gJHdhcm4gICAgICAgICAgOiA8Ym9vbD5cbkBmdW5jdGlvbiBzdXN5LXN1cHBvcnQoXG4gICRmZWF0dXJlLFxuICAkcmVxdWlyZW1lbnRzOiAoKSxcbiAgJHdhcm46IHRydWVcbikge1xuICAkX3N1cHBvcnQ6IHN1c3ktZ2V0KHVzZS1jdXN0b20gJGZlYXR1cmUpO1xuXG4gIEBpZiAkX3N1cHBvcnQge1xuICAgICRfZmFpbDogZmFsc2U7XG5cbiAgICBAZWFjaCAkX3R5cGUsICRfcmVxIGluICRyZXF1aXJlbWVudHMge1xuICAgICAgQGVhY2ggJF9pIGluICRfcmVxIHtcbiAgICAgICAgJF9wYXNzOiBjYWxsKHVucXVvdGUoXCIjeyRfdHlwZX0tZXhpc3RzXCIpLCAkX2kpO1xuXG4gICAgICAgIEBpZiBub3QoJF9wYXNzKSB7XG4gICAgICAgICAgJF9mYWlsOiB0cnVlO1xuICAgICAgICAgIEBpZiAkd2FybiB7XG4gICAgICAgICAgICBAd2FybiBcIllvdSByZXF1ZXN0ZWQgY3VzdG9tIHN1cHBvcnQgb2YgI3skZmVhdHVyZX0sIGJ1dCB0aGUgI3skX2l9ICN7JF90eXBlfSBpcyBub3QgYXZhaWxhYmxlLlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICRfc3VwcG9ydDogaWYoJF9mYWlsLCBmYWxzZSwgJF9zdXBwb3J0KTtcbiAgfVxuXG4gIEByZXR1cm4gJF9zdXBwb3J0O1xufVxuIiwiLy8gU3VzeSBQcmVmaXhcbi8vID09PT09PT09PT09XG5cbi8vIFByZWZpeFxuLy8gLS0tLS0tXG4vLyBPdXRwdXQgc2ltcGxlIHByZWZpeGVkIHByb3BlcnRpZXMuXG4vLyAtICRwcm9wICAgICAgOiA8Y3NzIHByb3BlcnR5PlxuLy8gLSAkdmFsICAgICAgIDogPGNzcyB2YWx1ZT5cbi8vIC0gWyRwcmVmaXhdICA6IDxicm93c2VyIHByZWZpeCBsaXN0PlxuQG1peGluIHN1c3ktcHJlZml4KFxuICAkcHJvcCxcbiAgJHZhbCxcbiAgJHByZWZpeDogb2ZmaWNpYWxcbikge1xuICBAZWFjaCAkZml4IGluICRwcmVmaXgge1xuICAgICRmaXg6IGlmKCRmaXggPT0gb2ZmaWNpYWwgb3Igbm90KCRmaXgpLCAkcHJvcCwgJy0jeyRmaXh9LSN7JHByb3B9Jyk7XG4gICAgQGluY2x1ZGUgc3VzeS1yZW0oJGZpeCwgJHZhbCk7XG4gIH1cbn1cbiIsIi8vIEJhY2tncm91bmQgUHJvcGVydGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09XG5cbi8vIFN1c3kgQmFja2dyb3VuZCBJbWFnZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3IgcHJvdmlkZSBhIHNpbXBsZSBmYWxsYmFjay5cbi8vIC0gJGltYWdlOiA8YmFja2dyb3VuZC1pbWFnZT5cbkBtaXhpbiBzdXN5LWJhY2tncm91bmQtaW1hZ2UoXG4gICRpbWFnZVxuKSB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoYmFja2dyb3VuZC1pbWFnZSwgKG1peGluOiBiYWNrZ3JvdW5kLWltYWdlKSwgJHdhcm46IGZhbHNlKSB7XG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC1pbWFnZSgkaW1hZ2UuLi4pO1xuICB9IEBlbHNlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAkaW1hZ2U7XG4gIH1cbn1cblxuLy8gU3VzeSBCYWNrZ3JvdW5kIFNpemVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIHByb3ZpZGUgYSBzaW1wbGUgZmFsbGJhY2suXG4vLyAtICRpbWFnZTogPGJhY2tncm91bmQtc2l6ZT5cbkBtaXhpbiBzdXN5LWJhY2tncm91bmQtc2l6ZShcbiAgJHNpemVcbikge1xuICBAaWYgc3VzeS1zdXBwb3J0KGJhY2tncm91bmQtb3B0aW9ucywgKG1peGluOiBiYWNrZ3JvdW5kLXNpemUpKSB7XG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC1zaXplKCRzaXplKTtcbiAgfSBAZWxzZSB7XG4gICAgYmFja2dyb3VuZC1zaXplOiAkc2l6ZTtcbiAgfVxufVxuXG4vLyBTdXN5IEJhY2tncm91bmQgT3JpZ2luXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3IgcHJvdmlkZSBhIHNpbXBsZSBmYWxsYmFjay5cbi8vIC0gJGltYWdlOiA8YmFja2dyb3VuZC1vcmlnaW4+XG5AbWl4aW4gc3VzeS1iYWNrZ3JvdW5kLW9yaWdpbihcbiAgJG9yaWdpblxuKSB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoYmFja2dyb3VuZC1vcHRpb25zLCAobWl4aW46IGJhY2tncm91bmQtb3JpZ2luKSkge1xuICAgIEBpbmNsdWRlIGJhY2tncm91bmQtb3JpZ2luKCRvcmlnaW4pO1xuICB9IEBlbHNlIHtcbiAgICBiYWNrZ3JvdW5kLW9yaWdpbjogJG9yaWdpbjtcbiAgfVxufVxuXG4vLyBTdXN5IEJhY2tncm91bmQgQ2xpcFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENoZWNrIGZvciBhbiBleGlzdGluZyBzdXBwb3J0IG1peGluLCBvciBwcm92aWRlIGEgc2ltcGxlIGZhbGxiYWNrLlxuLy8gLSAkaW1hZ2U6IDxiYWNrZ3JvdW5kLWNsaXA+XG5AbWl4aW4gc3VzeS1iYWNrZ3JvdW5kLWNsaXAoXG4gICRjbGlwXG4pIHtcbiAgQGlmIHN1c3ktc3VwcG9ydChiYWNrZ3JvdW5kLW9wdGlvbnMsIChtaXhpbjogYmFja2dyb3VuZC1jbGlwKSkge1xuICAgIEBpbmNsdWRlIGJhY2tncm91bmQtY2xpcCgkY2xpcCk7XG4gIH0gQGVsc2Uge1xuICAgIGJhY2tncm91bmQtY2xpcDogJGNsaXA7XG4gIH1cbn1cbiIsIi8vIEJveCBTaXppbmdcbi8vID09PT09PT09PT1cblxuLy8gQm94IFNpemluZ1xuLy8gLS0tLS0tLS0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIHByb3ZpZGUgYSBzaW1wbGUgZmFsbGJhY2suXG4vLyAtICRtb2RlbDogPGJveC1zaXppbmc+XG5AbWl4aW4gc3VzeS1ib3gtc2l6aW5nKFxuICAkbW9kZWw6IGNvbnRlbnQtYm94XG4pIHtcbiAgQGlmICRtb2RlbCB7XG4gICAgQGlmIHN1c3ktc3VwcG9ydChib3gtc2l6aW5nLCAobWl4aW46IGJveC1zaXppbmcpLCAkd2FybjogZmFsc2UpIHtcbiAgICAgIEBpbmNsdWRlIGJveC1zaXppbmcoJG1vZGVsKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRwcmVmaXg6IChtb3osIHdlYmtpdCwgb2ZmaWNpYWwpO1xuICAgICAgQGluY2x1ZGUgc3VzeS1wcmVmaXgoYm94LXNpemluZywgJG1vZGVsLCAkcHJlZml4KTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIHJlbSBTdXBwb3J0XG4vLyA9PT09PT09PT09PVxuXG4vLyByZW1cbi8vIC0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIG91dHB1dCBkaXJlY3RseS5cbi8vIC0gJHByb3AgIDogPGNzcyBwcm9wZXJ0eT5cbi8vIC0gJHZhbCAgIDogPGNzcyB2YWx1ZT5cbkBtaXhpbiBzdXN5LXJlbShcbiAgJHByb3AsXG4gICR2YWxcbikge1xuICAkX3JlcXM6IChcbiAgICB2YXJpYWJsZTogcmh5dGhtLXVuaXQgcmVtLXdpdGgtcHgtZmFsbGJhY2ssXG4gICAgbWl4aW46IHJlbSxcbiAgKTtcbiAgQGlmIHN1c3ktc3VwcG9ydChyZW0sICRfcmVxcywgJHdhcm46IGZhbHNlKSBhbmQgJHJoeXRobS11bml0ID09IHJlbSB7XG4gICAgQGluY2x1ZGUgcmVtKCRwcm9wLCAkdmFsKTtcbiAgfSBAZWxzZSB7XG4gICAgI3skcHJvcH06ICR2YWw7XG4gIH1cbn1cbiIsIi8vIFN1c3kgRmFsbGJhY2sgQ2xlYXJmaXhcbi8vID09PT09PT09PT09PT09PT09PT09PT1cblxuXG4vLyBDbGVhcmZpeFxuLy8gLS0tLS0tLS1cbi8vIENoZWNrIGZvciBhbiBleGlzdGluZyBzdXBwb3J0IG1peGluLCBvciBwcm92aWRlIGEgc2ltcGxlIGZhbGxiYWNrLlxuQG1peGluIHN1c3ktY2xlYXJmaXgge1xuICBAaWYgc3VzeS1zdXBwb3J0KGNsZWFyZml4LCAobWl4aW46IGNsZWFyZml4KSkge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICB9IEBlbHNlIHtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjbGVhcjogYm90aDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIERlYnVnZ2luZ1xuLy8gPT09PT09PT09XG5cbi8vIFN1c3kgSW5zcGVjdFxuLy8gLS0tLS0tLS0tLS0tXG4vLyBPdXRwdXQgYXJndW1lbnRzIHBhc3NlZCB0byBhIGluc3BlY3QuXG4vLyAtICRtaXhpbiAgOiA8c3VzeSBtaXhpbj5cbi8vIC0gJGluc3BlYyAgIDogPG1peGluIGFyZ3VtZW50cz5cblxuQG1peGluIHN1c3ktaW5zcGVjdChcbiAgJG1peGluLFxuICAkaW5zcGVjdFxuKSB7XG4gICRzaG93OiBmYWxzZTtcblxuICBAZWFjaCAkaXRlbSBpbiAkaW5zcGVjdCB7XG4gICAgQGlmIGluZGV4KCRpdGVtLCBpbnNwZWN0KSB7XG4gICAgICAkc2hvdzogdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBAaWYgJHNob3cgb3Igc3VzeS1nZXQoZGVidWcgaW5zcGVjdCkge1xuICAgIC1zdXN5LSN7JG1peGlufTogaW5zcGVjdCgkaW5zcGVjdCk7XG4gIH1cbn1cbiIsIi8vIE91dHB1dFxuLy8gPT09PT09XG5cbi8vIE91dHB1dFxuLy8gLS0tLS0tXG4vLyBPdXRwdXQgQ1NTIHdpdGggcHJvcGVyIGJyb3dzZXIgc3VwcG9ydC5cbi8vIC0gJHN0eWxlcyAgOiA8bWFwIG9mIGNzcyBwcm9wZXJ0eS12YWx1ZSBwYWlycz5cbkBtaXhpbiBvdXRwdXQoXG4gICRzdHlsZXNcbikge1xuICBAZWFjaCAkcHJvcCwgJHZhbCBpbiAkc3R5bGVzIHtcbiAgICBAaW5jbHVkZSBzdXN5LXN1cHBvcnQoJHByb3AsICR2YWwpO1xuICB9XG59XG4iLCIvLyBEaXJlY3Rpb24gSGVscGVyc1xuLy8gPT09PT09PT09PT09PT09PT1cblxuLy8gU3VzeSBGbG93IERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gUFJJVkFURVxuQGluY2x1ZGUgc3VzeS1kZWZhdWx0cygoXG4gIGZsb3c6IGx0cixcbikpO1xuXG4vLyBHZXQgRGlyZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlICdmcm9tJyBvciAndG8nIGRpcmVjdGlvbiBvZiBhIGx0ciBvciBydGwgZmxvdy5cbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbi8vIC0gWyRrZXldICAgOiBmcm9tIHwgdG9cbkBmdW5jdGlvbiBnZXQtZGlyZWN0aW9uKFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdyksXG4gICRrZXk6IGZyb21cbikge1xuICAkcmV0dXJuOiBpZigkZmxvdyA9PSBydGwsIChmcm9tOiByaWdodCwgdG86IGxlZnQpLCAoZnJvbTogbGVmdCwgdG86IHJpZ2h0KSk7XG4gIEByZXR1cm4gbWFwLWdldCgkcmV0dXJuLCAka2V5KTtcbn1cblxuLy8gVG9cbi8vIC0tXG4vLyBSZXR1cm4gdGhlICd0bycgZGlyZWN0aW9uIG9mIGEgZmxvd1xuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQGZ1bmN0aW9uIHRvKFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICBAcmV0dXJuIGdldC1kaXJlY3Rpb24oJGZsb3csIHRvKTtcbn1cblxuLy8gRnJvbVxuLy8gLS0tLVxuLy8gUmV0dXJuIHRoZSAnZnJvbScgZGlyZWN0aW9uIG9mIGEgZmxvd1xuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQGZ1bmN0aW9uIGZyb20oXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gIEByZXR1cm4gZ2V0LWRpcmVjdGlvbigkZmxvdywgZnJvbSk7XG59XG4iLCIvLyBHcmlkIEJhY2tncm91bmQgQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09XG4vLyAtIFN1Yi1waXhlbCByb3VuZGluZyBjYW4gbGVhZCB0byBzZXZlcmFsIHBpeGVscyB2YXJpYXRpb24gYmV0d2VlbiBicm93c2Vycy5cblxuLy8gR3JpZCBCYWNrZ3JvdW5kIE91dHB1dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSAkaW1hZ2U6IGJhY2tncm91bmQtaW1hZ2Vcbi8vIC0gJHNpemU6IGJhY2tncm91bmQtc2l6ZVxuLy8gLSAkY2xpcDogYmFja2dyb3VuZC1jbGlwXG4vLyAtIFskZmxvd106IGx0ciB8IHJ0bFxuQG1peGluIGJhY2tncm91bmQtZ3JpZC1vdXRwdXQgKFxuICAkaW1hZ2UsXG4gICRzaXplOiBudWxsLFxuICAkY2xpcDogbnVsbCxcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgJG91dHB1dDogKFxuICAgIGJhY2tncm91bmQtaW1hZ2U6ICRpbWFnZSxcbiAgICBiYWNrZ3JvdW5kLXNpemU6ICRzaXplLFxuICAgIGJhY2tncm91bmQtb3JpZ2luOiAkY2xpcCxcbiAgICBiYWNrZ3JvdW5kLWNsaXA6ICRjbGlwLFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGZyb20oJGZsb3cpIHRvcCxcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG4iLCIvLyBTaGFyZWQgQ29udGFpbmVyIEFQSVxuLy8gPT09PT09PT09PT09PT09PT09PT1cblxuLy8gQ29udGFpbmVyIE91dHB1dFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSBbJHdpZHRoXSAgICAgICAgIDogPGxlbmd0aD5cbi8vIC0gWyRqdXN0aWZ5XSAgICAgICA6IGxlZnQgfCBjZW50ZXIgfCByaWdodFxuLy8gLSBbJG1hdGhdICAgICAgICAgIDogZmx1aWQgfCBzdGF0aWNcbkBtaXhpbiBjb250YWluZXItb3V0cHV0KFxuICAkd2lkdGgsXG4gICRqdXN0aWZ5OiBhdXRvIGF1dG8sXG4gICRwcm9wZXJ0eTogbWF4LXdpZHRoXG4pIHtcbiAgJG91dHB1dDogKFxuICAgICN7JHByb3BlcnR5fTogJHdpZHRoIG9yIDEwMCUsXG4gICAgbWFyZ2luLWxlZnQ6IG50aCgkanVzdGlmeSwgMSksXG4gICAgbWFyZ2luLXJpZ2h0OiBudGgoJGp1c3RpZnksIDIpLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cbiIsIi8vIE1hcmdpbnMgQVBJXG4vLyA9PT09PT09PT09PVxuXG4vLyBNYXJnaW4gT3V0cHV0XG4vLyAtLS0tLS0tLS0tLS0tXG4vLyAtICRiZWZvcmUgIDogPGxlbmd0aD5cbi8vIC0gJGFmdGVyICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQG1peGluIG1hcmdpbi1vdXRwdXQoXG4gICRiZWZvcmUsXG4gICRhZnRlcixcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgJHRvOiB0bygkZmxvdyk7XG4gICRmcm9tOiBmcm9tKCRmbG93KTtcblxuICAkb3V0cHV0OiAoXG4gICAgbWFyZ2luLSN7JGZyb219OiAkYmVmb3JlLFxuICAgIG1hcmdpbi0jeyR0b306ICRhZnRlcixcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG4iLCIvLyBQYWRkaW5nIEFQSVxuLy8gPT09PT09PT09PT1cblxuLy8gUGFkZGluZyBPdXRwdXRcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLyAtICRiZWZvcmUgIDogPGxlbmd0aD5cbi8vIC0gJGFmdGVyICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQG1peGluIHBhZGRpbmctb3V0cHV0KFxuICAkYmVmb3JlLFxuICAkYWZ0ZXIsXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gICR0bzogdG8oJGZsb3cpO1xuICAkZnJvbTogZnJvbSgkZmxvdyk7XG5cbiAgJG91dHB1dDogKFxuICAgIHBhZGRpbmctI3skZnJvbX06ICRiZWZvcmUsXG4gICAgcGFkZGluZy0jeyR0b306ICRhZnRlcixcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG4iLCIvLyBGbG9hdCBDb250YWluZXIgQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09XG5cbi8vIEZsb2F0IENvbnRhaW5lclxuLy8gLS0tLS0tLS0tLS0tLS0tXG4vLyAtIFskd2lkdGhdICAgICAgICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGp1c3RpZnldICAgICAgIDogbGVmdCB8IGNlbnRlciB8IHJpZ2h0XG4vLyAtIFskbWF0aF0gICA6IGZsdWlkIHwgc3RhdGljXG5AbWl4aW4gZmxvYXQtY29udGFpbmVyKFxuICAkd2lkdGgsXG4gICRqdXN0aWZ5OiBhdXRvIGF1dG8sXG4gICRwcm9wZXJ0eTogbWF4LXdpZHRoXG4pIHtcbiAgQGluY2x1ZGUgc3VzeS1jbGVhcmZpeDtcbiAgQGluY2x1ZGUgY29udGFpbmVyLW91dHB1dCgkd2lkdGgsICRqdXN0aWZ5LCAkcHJvcGVydHkpO1xufVxuIiwiLy8gRmxvYXQgU3BhbiBBUElcbi8vID09PT09PT09PT09PT09XG5cbi8vIEZsb2F0IFNwYW4gT3V0cHV0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSAkd2lkdGggICAgICAgICAgICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGZsb2F0XSAgICAgICAgICAgOiBmcm9tIHwgdG9cbi8vIC0gWyRtYXJnaW4tYmVmb3JlXSAgIDogPGxlbmd0aD5cbi8vIC0gWyRtYXJnaW4tYWZ0ZXJdICAgIDogPGxlbmd0aD5cbi8vIC0gWyRwYWRkaW5nLWJlZm9yZV0gIDogPGxlbmd0aD5cbi8vIC0gWyRwYWRkaW5nLWFmdGVyXSAgIDogPGxlbmd0aD5cbi8vIC0gWyRmbG93XSAgICAgICAgICAgIDogbHRyIHwgcnRsXG5AbWl4aW4gZmxvYXQtc3Bhbi1vdXRwdXQoXG4gICR3aWR0aCxcbiAgJGZsb2F0ICAgICAgICAgICAgOiBmcm9tLFxuICAkbWFyZ2luLWJlZm9yZSAgICA6IG51bGwsXG4gICRtYXJnaW4tYWZ0ZXIgICAgIDogbnVsbCxcbiAgJHBhZGRpbmctYmVmb3JlICAgOiBudWxsLFxuICAkcGFkZGluZy1hZnRlciAgICA6IG51bGwsXG4gICRmbG93ICAgICAgICAgICAgIDogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICAkdG8gICAgIDogdG8oJGZsb3cpO1xuICAkZnJvbSAgIDogZnJvbSgkZmxvdyk7XG5cbiAgJG91dHB1dDogKFxuICAgIHdpZHRoOiAkd2lkdGgsXG4gICAgZmxvYXQ6IGlmKCRmbG9hdCA9PSB0bywgJHRvLCBudWxsKSBvciBpZigkZmxvYXQgPT0gZnJvbSwgJGZyb20sIG51bGwpLFxuICAgIG1hcmdpbi0jeyRmcm9tfTogJG1hcmdpbi1iZWZvcmUsXG4gICAgbWFyZ2luLSN7JHRvfTogJG1hcmdpbi1hZnRlcixcbiAgICBwYWRkaW5nLSN7JGZyb219OiAkcGFkZGluZy1iZWZvcmUsXG4gICAgcGFkZGluZy0jeyR0b306ICRwYWRkaW5nLWFmdGVyLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cbiIsIi8vIEZsb2F0IEVuZHMgQVBJXG4vLyA9PT09PT09PT09PT09PVxuXG4vLyBTdXN5IEVuZCBEZWZhdWx0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gUFJJVkFURVxuQGluY2x1ZGUgc3VzeS1kZWZhdWx0cygoXG4gIGxhc3QtZmxvdzogdG8sXG4pKTtcblxuLy8gRmxvYXQgTGFzdFxuLy8gLS0tLS0tLS0tLVxuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQG1peGluIGZsb2F0LWxhc3QoXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KSxcbiAgJGxhc3QtZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgbGFzdC1mbG93KSxcbiAgJG1hcmdpbjogMFxuKSB7XG4gICR0bzogdG8oJGZsb3cpO1xuXG4gICRvdXRwdXQ6IChcbiAgICBmbG9hdDogaWYoJGxhc3QtZmxvdyA9PSB0bywgJHRvLCBudWxsKSxcbiAgICBtYXJnaW4tI3skdG99OiAkbWFyZ2luLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cblxuLy8gRmxvYXQgRmlyc3Rcbi8vIC0tLS0tLS0tLS0tXG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AbWl4aW4gZmxvYXQtZmlyc3QoXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gICRvdXRwdXQ6IChcbiAgICBtYXJnaW4tI3tmcm9tKCRmbG93KX06IDAsXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuIiwiLy8gRmxvYXQgSXNvbGF0aW9uIEFQSVxuLy8gPT09PT09PT09PT09PT09PT09PVxuXG4vLyBJc29sYXRlIE91dHB1dFxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vIC0gJHB1c2ggICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQG1peGluIGlzb2xhdGUtb3V0cHV0KFxuICAkcHVzaCxcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgJHRvOiB0bygkZmxvdyk7XG4gICRmcm9tOiBmcm9tKCRmbG93KTtcblxuICAkb3V0cHV0OiAoXG4gICAgZmxvYXQ6ICRmcm9tLFxuICAgIG1hcmdpbi0jeyRmcm9tfTogJHB1c2gsXG4gICAgbWFyZ2luLSN7JHRvfTogLTEwMCUsXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuIiwiLy8gU3VzeSBTZXR0aW5nc1xuLy8gPT09PT09PT09PT09PVxuXG4vLyBTdXN5IExhbmd1YWdlIERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtIFBSSVZBVEVcbkBpbmNsdWRlIHN1c3ktZGVmYXVsdHMoKFxuICBjb250YWluZXI6IGF1dG8sXG4gIG1hdGg6IGZsdWlkLFxuICBvdXRwdXQ6IGZsb2F0LFxuICBjb250YWluZXItcG9zaXRpb246IGNlbnRlcixcbiAgZ3V0dGVyLXBvc2l0aW9uOiBhZnRlcixcbiAgZ2xvYmFsLWJveC1zaXppbmc6IGNvbnRlbnQtYm94LFxuICBkZWJ1ZzogKFxuICAgIGltYWdlOiBoaWRlLFxuICAgIGNvbG9yOiByZ2JhKCM2NmYsIC4yNSksXG4gICAgb3V0cHV0OiBiYWNrZ3JvdW5kLFxuICAgIHRvZ2dsZTogdG9wIHJpZ2h0LFxuICApLFxuKSk7XG5cblxuLy8gVmFsaWQgS2V5d29yZCBWYWx1ZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtIFBSSVZBVEU6IERPTlQnVCBUT1VDSFxuJHN1c3kta2V5d29yZHM6IChcbiAgY29udGFpbmVyOiBhdXRvLFxuICBtYXRoOiBzdGF0aWMgZmx1aWQsXG4gIG91dHB1dDogaXNvbGF0ZSBmbG9hdCxcbiAgY29udGFpbmVyLXBvc2l0aW9uOiBsZWZ0IGNlbnRlciByaWdodCxcbiAgZmxvdzogbHRyIHJ0bCxcbiAgZ3V0dGVyLXBvc2l0aW9uOiBiZWZvcmUgYWZ0ZXIgc3BsaXQgaW5zaWRlIGluc2lkZS1zdGF0aWMsXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3ggY29udGVudC1ib3gsXG4gIHNwYW46IGZ1bGwsXG4gIGVkZ2U6IGZpcnN0IGFscGhhIGxhc3Qgb21lZ2EgZnVsbCxcbiAgc3ByZWFkOiBuYXJyb3cgd2lkZSB3aWRlcixcbiAgZ3V0dGVyLW92ZXJyaWRlOiBuby1ndXR0ZXJzIG5vLWd1dHRlcixcbiAgcm9sZTogbmVzdCxcbiAgY2xlYXI6IGJyZWFrIG5vYnJlYWssXG4gIGRlYnVnIGltYWdlOiBzaG93IGhpZGUgc2hvdy1jb2x1bW5zIHNob3ctYmFzZWxpbmUsXG4gIGRlYnVnIG91dHB1dDogYmFja2dyb3VuZCBvdmVybGF5LFxuKTtcblxuXG4vLyBQYXJzZSBTdXN5IEtleXdvcmRzIGFuZCBNYXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AZnVuY3Rpb24gcGFyc2Utc2V0dGluZ3MoXG4gICRzaG9ydDogJHN1c3lcbikge1xuICAkX3JldHVybjogKCk7XG5cbiAgQGlmIHR5cGUtb2YoJHNob3J0KSA9PSBtYXAge1xuICAgICRfcmV0dXJuOiAkc2hvcnQ7XG4gIH0gQGVsc2Uge1xuICAgIEBlYWNoICRpdGVtIGluICRzaG9ydCB7XG4gICAgICAvLyBzdHJpbmdzXG4gICAgICBAaWYgdHlwZS1vZigkaXRlbSkgPT0gc3RyaW5nIHtcbiAgICAgICAgQGVhY2ggJGtleSwgJHZhbHVlIGluICRzdXN5LWtleXdvcmRzIHtcbiAgICAgICAgICBAaWYgaW5kZXgoJHZhbHVlLCAkaXRlbSkge1xuICAgICAgICAgICAgJF9rZXktdmFsdWU6IGFwcGVuZCgka2V5LCAkaXRlbSk7XG4gICAgICAgICAgICAkX3JldHVybjogX3N1c3ktZGVlcC1zZXQoJF9yZXR1cm4sICRfa2V5LXZhbHVlLi4uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIC8vIG1hcHNcbiAgICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkaXRlbSkgPT0gbWFwIHtcbiAgICAgICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgJGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gUGFyc2UgQ29sdW1ucyAmIEd1dHRlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AZnVuY3Rpb24gcGFyc2UtbGF5b3V0KFxuICAkc2hvcnRcbikge1xuICAkX3JldHVybjogKCk7XG4gICRfY29sdW1uczogKCk7XG4gICRfZ3V0dGVyczogbnVsbDtcblxuICBAaWYgbm90KHVuaXRsZXNzKG50aChudGgoJHNob3J0LCAxKSwgMSkpKSB7XG4gICAgJF9ndXR0ZXJzOiBudGgoJHNob3J0LCAxKTtcbiAgfSBAZWxzZSB7XG4gICAgJF9jb2x1bW5zOiAoY29sdW1uczogbnRoKCRzaG9ydCwgMSkpO1xuICAgICRfZ3V0dGVyczogaWYobGVuZ3RoKCRzaG9ydCkgPiAxLCBudGgoJHNob3J0LCAyKSwgJF9ndXR0ZXJzKTtcbiAgfVxuXG4gIEBpZiB0eXBlLW9mKCRfZ3V0dGVycykgPT0gbGlzdCBhbmQgbGVuZ3RoKCRfZ3V0dGVycykgPiAwIHtcbiAgICAkX2d1dHRlcnM6IChcbiAgICAgIGd1dHRlcnM6IG50aCgkX2d1dHRlcnMsIDIpIC8gbnRoKCRfZ3V0dGVycywgMSksXG4gICAgICBjb2x1bW4td2lkdGg6IG50aCgkX2d1dHRlcnMsIDEpLFxuICAgICk7XG4gIH0gQGVsc2Uge1xuICAgICRfZ3V0dGVyczogaWYoJF9ndXR0ZXJzLCAoZ3V0dGVyczogJF9ndXR0ZXJzKSwgKCkpO1xuICB9XG5cbiAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgJF9jb2x1bW5zKTtcbiAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgJF9ndXR0ZXJzKTtcblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIFBhcnNlIEdyaWQvQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5AZnVuY3Rpb24gcGFyc2UtZ3JpZChcbiAgJHNob3J0OiAkc3VzeVxuKSB7XG4gICRfcmV0dXJuOiBwYXJzZS1zZXR0aW5ncygkc2hvcnQpO1xuICAkX2xheW91dDogKCk7XG5cbiAgQGlmIHR5cGUtb2YoJHNob3J0KSA9PSBtYXAge1xuICAgICRfcmV0dXJuOiAkc2hvcnQ7XG4gIH0gQGVsc2Uge1xuICAgIEBlYWNoICRpdGVtIGluICRzaG9ydCB7XG4gICAgICAvLyBudW1iZXIgb3IgbGlzdFxuICAgICAgQGlmIHR5cGUtb2YoJGl0ZW0pID09IG51bWJlciBvciB0eXBlLW9mKCRpdGVtKSA9PSBsaXN0IHtcbiAgICAgICAgQGlmIHR5cGUtb2YoJGl0ZW0pID09IGxpc3Qgb3IgdW5pdGxlc3MoJGl0ZW0pIHtcbiAgICAgICAgICAkX2xheW91dDogYXBwZW5kKCRfbGF5b3V0LCAkaXRlbSk7XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIChjb250YWluZXI6ICRpdGVtKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAkX2xheW91dDogaWYobGVuZ3RoKCRfbGF5b3V0KSA+IDAsIHBhcnNlLWxheW91dCgkX2xheW91dCksICRfbGF5b3V0KTtcbiAgfVxuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRfcmV0dXJuLCAkX2xheW91dCk7XG59XG5cblxuLy8gUGFyc2UgU3BhblxuLy8gLS0tLS0tLS0tLVxuQGZ1bmN0aW9uIHBhcnNlLXNwYW4oXG4gICRzaG9ydCxcbiAgJGtleTogc3BhblxuKSB7XG4gICRfcmV0dXJuOiAoKTtcblxuICBAaWYgdHlwZS1vZigkc2hvcnQpID09IG1hcCB7XG4gICAgJF9yZXR1cm46ICRzaG9ydDtcbiAgfSBAZWxzZSB7XG4gICAgJF9hdDogaW5kZXgoJHNob3J0LCBhdCk7XG5cbiAgICBAaWYgJF9hdCB7XG4gICAgICAkX2xvY2k6ICRfYXQgKyAxO1xuICAgICAgJF9sb2NhdGlvbjogbnRoKCRzaG9ydCwgJF9sb2NpKTtcbiAgICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIChsb2NhdGlvbjogJF9sb2NhdGlvbikpO1xuICAgICAgJHNob3J0OiBzZXQtbnRoKCRzaG9ydCwgJF9hdCwgbnVsbCk7XG4gICAgICAkc2hvcnQ6IHNldC1udGgoJHNob3J0LCAkX2xvY2ksIG51bGwpO1xuICAgIH1cblxuICAgICRfaTogMTtcbiAgICAkX3NwYW46ICgpO1xuXG4gICAgQHdoaWxlICRfaSA8PSBsZW5ndGgoJHNob3J0KSB7XG4gICAgICAkX3RoaXM6IG50aCgkc2hvcnQsICRfaSk7XG5cbiAgICAgIEBpZiB0eXBlLW9mKCRfdGhpcykgPT0gbnVtYmVyIHtcbiAgICAgICAgJF9zcGFuOiBhcHBlbmQoJF9zcGFuLCAkX3RoaXMpO1xuICAgICAgICAkc2hvcnQ6IHNldC1udGgoJHNob3J0LCAkX2ksIG51bGwpO1xuICAgICAgfSBAZWxzZSBpZiAkX3RoaXMgPT0gb2Yge1xuICAgICAgICAkc2hvcnQ6IHNldC1udGgoJHNob3J0LCAkX2ksIG51bGwpO1xuICAgICAgICAkX2k6IGxlbmd0aCgkc2hvcnQpICsgMTtcbiAgICAgIH1cblxuICAgICAgJF9pOiAkX2kgKyAxO1xuICAgIH1cblxuICAgIEBpZiBsZW5ndGgoJF9zcGFuKSA+IDAge1xuICAgICAgJF9zcGFuOiBpZihsZW5ndGgoJF9zcGFuKSA9PSAxLCBudGgoJF9zcGFuLCAxKSwgJF9zcGFuKTtcbiAgICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sICgka2V5OiAkX3NwYW4pKTtcbiAgICB9XG5cbiAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCBwYXJzZS1ncmlkKCRzaG9ydCkpO1xuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBQYXJzZSBHdXR0ZXJzXG4vLyAtLS0tLS0tLS0tLS0tXG5AZnVuY3Rpb24gcGFyc2UtZ3V0dGVycyhcbiAgJHNob3J0OiAkc3VzeVxuKSB7XG4gICRfZ3V0dGVyczogcGFyc2Utc3Bhbigkc2hvcnQsIGd1dHRlci1vdmVycmlkZSk7XG4gICRfc3Bhbjogc3VzeS1nZXQoZ3V0dGVyLW92ZXJyaWRlLCAkX2d1dHRlcnMpO1xuXG4gIEBpZiAkX3NwYW4gYW5kIG5vdChtYXAtZ2V0KCRfZ3V0dGVycywgY29sdW1ucykpIHtcbiAgICAkX2NvbnRleHQ6ICgpO1xuICAgICRfbmV3OiAoKTtcblxuICAgIEBlYWNoICRpdGVtIGluICRfc3BhbiB7XG4gICAgICBAaWYgdHlwZS1vZigkaXRlbSkgPT0gbnVtYmVyIGFuZCB1bml0bGVzcygkaXRlbSkge1xuICAgICAgICAkX2NvbnRleHQ6IGFwcGVuZCgkX2NvbnRleHQsICRpdGVtKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkX25ldzogYXBwZW5kKCRfbmV3LCAkaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJF9jb250ZXh0OiBwYXJzZS1ncmlkKCRfY29udGV4dCk7XG4gICAgJF9uZXc6IGlmKGxlbmd0aCgkX25ldykgPT0gMCwgbnVsbCwgJF9uZXcpO1xuICAgICRfbmV3OiBpZihsZW5ndGgoJF9uZXcpID09IDEsIG50aCgkX25ldywgMSksICRfbmV3KTtcbiAgICAkX25ldzogKGd1dHRlci1vdmVycmlkZTogaWYoJF9uZXcgIT0gJF9zcGFuLCAkX25ldywgJF9zcGFuKSk7XG5cbiAgICAkX2d1dHRlcnM6IG1hcC1tZXJnZSgkX2d1dHRlcnMsICRfbmV3KTtcbiAgICAkX2d1dHRlcnM6IG1hcC1tZXJnZSgkX2d1dHRlcnMsICRfY29udGV4dCk7XG4gIH1cblxuICBAcmV0dXJuICRfZ3V0dGVycztcbn1cbiIsIi8vIFZhbGlkYXRpb25cbi8vID09PT09PT09PT1cblxuXG4vLyBWYWxpZGF0ZSBDb2x1bW4gTWF0aFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBmdW5jdGlvbiB2YWxpZC1jb2x1bW4tbWF0aChcbiAgJG1hdGgsXG4gICRjb2x1bW4td2lkdGhcbikge1xuICBAaWYgJG1hdGggPT0gc3RhdGljIGFuZCBub3QoJGNvbHVtbi13aWR0aCkge1xuICAgIEBlcnJvciAnU3RhdGljIG1hdGggcmVxdWlyZXMgYSB2YWxpZCBjb2x1bW4td2lkdGggc2V0dGluZy4nO1xuICB9XG5cbiAgQHJldHVybiAkY29sdW1uLXdpZHRoO1xufVxuIiwiLy8gR3JpZCBTeW50YXhcbi8vID09PT09PT09PT09XG5cblxuLy8gTGF5b3V0XG4vLyAtLS0tLS1cbi8vIFNldCBhIG5ldyBsYXlvdXQgdXNpbmcgYSBzaG9ydGhhbmRcbi8vIC0gJGxheW91dDogPHNldHRpbmdzPlxuLy8gLSAkY2xlYW46IGJvb2xlYW5cbkBtaXhpbiBsYXlvdXQoXG4gICRsYXlvdXQsXG4gICRjbGVhbjogZmFsc2Vcbikge1xuICAkaW5zcGVjdCAgOiAkbGF5b3V0O1xuICAkc3VzeSAgICAgOiBfZ2V0LWxheW91dCgkbGF5b3V0LCAkY2xlYW4pICFnbG9iYWw7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGxheW91dCwgJGluc3BlY3QpO1xufVxuXG5cbi8vIFVzZSBHcmlkXG4vLyAtLS0tLS0tLVxuLy8gVXNlIGFuIGFyYml0cmFyeSBsYXlvdXQgZm9yIGEgc2VjdGlvbiBvZiBjb2RlXG4vLyAtICRsYXlvdXQ6IDxzZXR0aW5ncz5cbi8vIC0gJGNsZWFuOiBib29sZWFuXG5AbWl4aW4gd2l0aC1sYXlvdXQoXG4gICRsYXlvdXQsXG4gICRjbGVhbjogZmFsc2Vcbikge1xuICAkaW5zcGVjdCAgOiAkbGF5b3V0O1xuICAkb2xkICAgICAgOiAkc3VzeTtcbiAgJHN1c3kgICAgIDogX2dldC1sYXlvdXQoJGxheW91dCwgJGNsZWFuKSAhZ2xvYmFsO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdCh3aXRoLWxheW91dCwgJGluc3BlY3QpO1xuXG4gIEBjb250ZW50O1xuXG4gICRzdXN5OiAkb2xkICFnbG9iYWw7XG59XG5cblxuLy8gTGF5b3V0XG4vLyAtLS0tLS1cbi8vIFJldHVybiBhIHBhcnNlZCBsYXlvdXQgbWFwIGJhc2VkIG9uIHNob3J0aGFuZCBzeW50YXhcbi8vIC0gJGxheW91dDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGxheW91dChcbiAgJGxheW91dDogJHN1c3lcbikge1xuICBAcmV0dXJuIHBhcnNlLWdyaWQoJGxheW91dCk7XG59XG5cblxuLy8gR2V0IExheW91dFxuLy8gLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGEgbmV3IGxheW91dCBiYXNlZCBvbiBjdXJyZW50IGFuZCBnaXZlbiBzZXR0aW5nc1xuLy8gLSAkbGF5b3V0OiA8c2V0dGluZ3M+XG4vLyAtICRjbGVhbjogYm9vbGVhblxuQGZ1bmN0aW9uIF9nZXQtbGF5b3V0KFxuICAkbGF5b3V0LFxuICAkY2xlYW46IGZhbHNlXG4pIHtcbiAgJGxheW91dDogbGF5b3V0KCRsYXlvdXQpO1xuICBAcmV0dXJuIGlmKCRjbGVhbiwgJGxheW91dCwgX3N1c3ktZGVlcC1tZXJnZSgkc3VzeSwgJGxheW91dCkpO1xufVxuIiwiLy8gU3VzeSBCb3ggU2l6aW5nXG4vLyA9PT09PT09PT09PT09PT09PVxuXG4vLyBHbG9iYWwgQm94IFNpemluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNldCBhIGJveCBtb2RlbCBnbG9iYWxseSBvbiBhbGwgZWxlbWVudHMuXG4vLyAtIFskYm94XTogYm9yZGVyLWJveCB8IGNvbnRlbnQtYm94XG4vLyAtIFskaW5oZXJpdF06IHRydWUgfCBmYWxzZVxuQG1peGluIGdsb2JhbC1ib3gtc2l6aW5nKFxuICAkYm94OiBzdXN5LWdldChnbG9iYWwtYm94LXNpemluZyksXG4gICRpbmhlcml0OiBmYWxzZVxuKSB7XG4gICRpbnNwZWN0OiAkYm94O1xuXG4gIEBpZiAkaW5oZXJpdCB7XG4gICAgQGF0LXJvb3Qge1xuICAgICAgIGh0bWwgeyBAaW5jbHVkZSBvdXRwdXQoKGJveC1zaXppbmc6ICRib3gpKTsgfVxuICAgICAgICosICo6YmVmb3JlLCAqOmFmdGVyIHsgYm94LXNpemluZzogaW5oZXJpdDsgfVxuICAgICB9XG4gIH0gQGVsc2Uge1xuICAgICosICo6YmVmb3JlLCAqOmFmdGVyIHsgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiAkYm94KSk7IH1cbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChnbG9iYWwtYm94LXNpemluZywgJGluc3BlY3QpO1xuICBAaW5jbHVkZSB1cGRhdGUtYm94LW1vZGVsKCRib3gpO1xufVxuXG4vLyBCb3JkZXIgQm94IFNpemluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEEgbGVnYWN5IHNob3J0Y3V0Li4uXG4vLyAtIFskaW5oZXJpdF06IHRydWUgfCBmYWxzZVxuQG1peGluIGJvcmRlci1ib3gtc2l6aW5nKFxuICAkaW5oZXJpdDogZmFsc2Vcbikge1xuICBAaW5jbHVkZSBnbG9iYWwtYm94LXNpemluZyhib3JkZXItYm94LCAkaW5oZXJpdCk7XG59XG5cbi8vIFVwZGF0ZSBCb3ggTW9kZWxcbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vIFBSSVZBVEU6IFVwZGF0ZXMgZ2xvYmFsIGJveCBtb2RlbCBzZXR0aW5nXG5AbWl4aW4gdXBkYXRlLWJveC1tb2RlbChcbiAgJGJveFxuKSB7XG4gIEBpZiAkYm94ICE9IHN1c3ktZ2V0KGdsb2JhbC1ib3gtc2l6aW5nKSB7XG4gIEBpbmNsdWRlIHN1c3ktc2V0KGdsb2JhbC1ib3gtc2l6aW5nLCAkYm94KTtcbiAgfVxufVxuIiwiLy8gQ29udGV4dCBTeW50YXhcbi8vID09PT09PT09PT09PT09XG5cbi8vIE5lc3RlZCBbZnVuY3Rpb25dXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGEgc3Vic2V0IGdyaWQgZm9yIG5lc3RlZCBjb250ZXh0LlxuLy8gLSAkY29udGV4dCAgIDogPHNwYW4+XG5AZnVuY3Rpb24gbmVzdGVkKFxuICAkY29udGV4dFxuKSB7XG4gICRjb250ZXh0ICAgIDogcGFyc2Utc3BhbigkY29udGV4dCk7XG4gICRzcGFuICAgICAgIDogc3VzeS1nZXQoc3BhbiwgJGNvbnRleHQpO1xuICAkbG9jYXRpb24gICA6IGdldC1sb2NhdGlvbigkY29udGV4dCk7XG4gICRjb2x1bW5zICAgIDogc3VzeS1nZXQoY29sdW1ucywgJGNvbnRleHQpO1xuXG4gIEByZXR1cm4gc3VzeS1zbGljZSgkc3BhbiwgJGxvY2F0aW9uLCAkY29sdW1ucyk7XG59XG5cbi8vIE5lc3RlZCBbbWl4aW5dXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8gVXNlIGEgc3Vic2V0IGdyaWQgZm9yIGEgbmVzdGVkIGNvbnRleHRcbi8vIC0gJGNvbnRleHQgICA6IDxzcGFuPlxuLy8gLSBAY29udGVudCAgIDogPGNvbnRlbnQ+XG5AbWl4aW4gbmVzdGVkKFxuICAkY29udGV4dFxuKSB7XG4gICRpbnNwZWN0ICA6ICRjb250ZXh0O1xuICAkY29udGV4dCAgOiBwYXJzZS1zcGFuKCRjb250ZXh0KTtcbiAgJG9sZCAgICAgIDogc3VzeS1nZXQoY29sdW1ucyk7XG4gICRzdXN5ICAgICA6IG1hcC1tZXJnZSgkc3VzeSwgKGNvbHVtbnM6IG5lc3RlZCgkY29udGV4dCkpKSAhZ2xvYmFsO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChuZXN0ZWQsICRpbnNwZWN0KTtcbiAgQGNvbnRlbnQ7XG5cbiAgJHN1c3kgICAgIDogbWFwLW1lcmdlKCRzdXN5LCAoY29sdW1uczogJG9sZCkpICFnbG9iYWw7XG59XG4iLCIvLyBCYWNrZ3JvdW5kIEdyaWQgU3ludGF4XG4vLyA9PT09PT09PT09PT09PT09PT09PT09XG5cbiRzdXN5LW92ZXJsYXktZ3JpZC1oZWFkLWV4aXN0czogZmFsc2U7XG5cblxuLy8gU2hvdyBHcmlkL3Ncbi8vIC0tLS0tLS0tLS0tXG4vLyBTaG93IGdyaWQgb24gYW55IGVsZW1lbnQgdXNpbmcgZWl0aGVyIGJhY2tncm91bmQgb3Igb3ZlcmxheS5cbi8vIC0gWyRncmlkXSAgOiA8c2V0dGluZ3M+XG5AbWl4aW4gc2hvdy1ncmlkKFxuICAkZ3JpZDogJHN1c3lcbikge1xuICAkaW5zcGVjdDogJGdyaWQ7XG4gICRfb3V0cHV0OiBkZWJ1Zy1nZXQob3V0cHV0LCAkZ3JpZCk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHNob3ctZ3JpZCwgJGluc3BlY3QpO1xuICBAaWYgJF9vdXRwdXQgPT0gb3ZlcmxheSBhbmQgc3VzeS1nZXQoZGVidWcgaW1hZ2UsICRncmlkKSAhPSBoaWRlIHtcbiAgICBAaW5jbHVkZSBvdmVybGF5LWdyaWQoJGdyaWQpO1xuICB9IEBlbHNlIHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLWdyaWQoJGdyaWQpO1xuICB9XG59XG5cbkBtaXhpbiBzaG93LWdyaWRzKFxuICAkZ3JpZDogJHN1c3lcbikge1xuICBAaW5jbHVkZSBzaG93LWdyaWQoJGdyaWQpO1xufVxuXG4vLyBCYWNrZ3JvdW5kIEdyaWRcbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gU2hvdyBhIGdyaWQgYmFja2dyb3VuZCBvbiBhbnkgZWxlbWVudC5cbi8vIC0gWyRncmlkXSAgOiA8c2V0dGluZ3M+XG5AbWl4aW4gYmFja2dyb3VuZC1ncmlkKFxuICAkZ3JpZDogJHN1c3lcbikge1xuICAkaW5zcGVjdCAgOiAkZ3JpZDtcbiAgJF9vdXRwdXQgIDogZ2V0LWJhY2tncm91bmQoJGdyaWQpO1xuXG4gIEBpZiBsZW5ndGgoJF9vdXRwdXQpID4gMCB7XG4gICAgJF9mbG93OiBzdXN5LWdldChmbG93LCAkZ3JpZCk7XG5cbiAgICAkX2ltYWdlOiAoKTtcbiAgICBAZWFjaCAkbmFtZSwgJGxheWVyIGluIG1hcC1nZXQoJF9vdXRwdXQsIGltYWdlKSB7XG4gICAgICAkX2RpcmVjdGlvbjogaWYoJG5hbWUgPT0gYmFzZWxpbmUsIHRvIGJvdHRvbSwgdG8gdG8oJF9mbG93KSk7XG4gICAgICAkX2ltYWdlOiBhcHBlbmQoJF9pbWFnZSwgbGluZWFyLWdyYWRpZW50KCRfZGlyZWN0aW9uLCAkbGF5ZXIpLCBjb21tYSk7XG4gICAgfVxuICAgICRfb3V0cHV0OiBtYXAtbWVyZ2UoJF9vdXRwdXQsIChpbWFnZTogJF9pbWFnZSkpO1xuXG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC1ncmlkLW91dHB1dCgkX291dHB1dC4uLik7XG4gICAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGJhY2tncm91bmQtZ3JpZCwgJGluc3BlY3QpO1xuICB9XG59XG5cblxuLy8gT3ZlcmxheSBHcmlkXG4vLyAtLS0tLS0tLS0tLS1cbi8vIEdlbmVyYXRlIGFuIGljb24gdG8gdHJpZ2dlciBncmlkLW92ZXJsYXlzIG9uIGFueSBnaXZlbiBlbGVtZW50cy5cbi8vICRncmlkcy4uLiAgOiA8c2VsZWN0b3I+IFs8c2V0dGluZ3M+XSBbLCA8c2VsZWN0b3I+XSpcbkBtaXhpbiBvdmVybGF5LWdyaWQgKFxuICAkZ3JpZDogJHN1c3lcbikge1xuICBAaWYgbm90KCRzdXN5LW92ZXJsYXktZ3JpZC1oZWFkLWV4aXN0cykge1xuICAgIEBhdC1yb290IGhlYWQgeyBAaW5jbHVkZSBvdmVybGF5LWhlYWQoJGdyaWQpOyB9XG4gICAgQGF0LXJvb3QgaGVhZDpiZWZvcmUgeyBAaW5jbHVkZSBvdmVybGF5LXRyaWdnZXI7IH1cbiAgICBAYXQtcm9vdCBoZWFkOmhvdmVyIHsgQGluY2x1ZGUgb3ZlcmxheS10cmlnZ2VyLWhvdmVyOyB9XG4gICAgJHN1c3ktb3ZlcmxheS1ncmlkLWhlYWQtZXhpc3RzOiB0cnVlICFnbG9iYWw7XG4gIH1cblxuICBoZWFkOmhvdmVyIH4gJixcbiAgaGVhZDpob3ZlciB+IGJvZHkgJiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICY6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGdyaWQtb3ZlcmxheS1iYXNlO1xuICAgICAgQGluY2x1ZGUgYmFja2dyb3VuZC1ncmlkKCRncmlkKTtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBbUHJpdmF0ZV0gT3ZlcmxheSBUcmlnZ2VyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AbWl4aW4gb3ZlcmxheS10cmlnZ2VyIHtcbiAgY29udGVudDogXCJ8fHxcIjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250OiB7XG4gICAgZmFtaWx5OiBzYW5zLXNlcmlmO1xuICAgIHNpemU6IDE2cHg7XG4gICAgd2VpZ2h0OiBib2xkO1xuICB9XG59XG5cblxuLy8gW1ByaXZhdGVdIE92ZXJsYXkgVHJpZ2dlciBIb3ZlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQG1peGluIG92ZXJsYXktdHJpZ2dlci1ob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEod2hpdGUsIC41KTtcbiAgY29sb3I6IHJlZDtcbn1cblxuXG4vLyBbUHJpdmF0ZV0gT3ZlcmxheSBIZWFkXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyA8aGVhZD4gc3R5bGVzIHRvIGNyZWF0ZSBncmlkIG92ZXJsYXkgdG9nZ2xlXG5AbWl4aW4gb3ZlcmxheS1oZWFkIChcbiAgJGdyaWQ6ICRzdXN5XG4pIHtcbiAgJF90b2dnbGU6IGRlYnVnLWdldCh0b2dnbGUsICRncmlkKTtcbiAgJF9ob3J6OiBudWxsO1xuICAkX3ZlcnQ6IG51bGw7XG5cbiAgQGVhY2ggJHNpZGUgaW4gJF90b2dnbGUge1xuICAgICRfaG9yejogaWYoJHNpZGUgPT0gbGVmdCBvciAkc2lkZSA9PSByaWdodCwgJHNpZGUsICRfaG9yeik7XG4gICAgJF92ZXJ0OiBpZigkc2lkZSA9PSB0b3Agb3IgJHNpZGUgPT0gYm90dG9tLCAkc2lkZSwgJF92ZXJ0KTtcbiAgfVxuXG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gICN7JF9ob3J6fTogMTBweDtcbiAgI3skX3ZlcnR9OiAxMHB4O1xuICB6LWluZGV4OiA5OTk7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiByZ2JhKHdoaXRlLCAuMjUpO1xufVxuXG5cbi8vIFtQcml2YXRlXSBHcmlkIE92ZXJsYXkgQmFzZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCYXNlIHN0eWxlcyBmb3IgZ2VuZXJhdGluZyBhIGdyaWQgb3ZlcmxheVxuQG1peGluIGdyaWQtb3ZlcmxheS1iYXNlKCkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgY29udGVudDogXCIgXCI7XG4gIHotaW5kZXg6IDk5ODtcbn1cblxuXG4vLyBHZXQgU3ltbWV0cmljYWwgQmFja2dyb3VuZFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gJGdyaWQ6IDxtYXA+XG5AZnVuY3Rpb24gZ2V0LWJhY2tncm91bmQtc3ltKFxuICAkZ3JpZFxuKSB7XG4gICRncmlkICAgICAgICAgICA6IHBhcnNlLWdyaWQoJGdyaWQpO1xuICAkX2d1dHRlcnMgICAgICAgOiBzdXN5LWdldChndXR0ZXJzLCAkZ3JpZCk7XG4gICRfY29sdW1uLXdpZHRoICA6IHN1c3ktZ2V0KGNvbHVtbi13aWR0aCwgJGdyaWQpO1xuICAkX21hdGggICAgICAgICAgOiBzdXN5LWdldChtYXRoLCAkZ3JpZCk7XG5cbiAgJF9jb2xvciAgICAgICAgIDogZGVidWctZ2V0KGNvbG9yKTtcbiAgJF90cmFucyAgICAgICAgIDogdHJhbnNwYXJlbnQ7XG4gICRfbGlnaHQgICAgICAgICA6IGxpZ2h0ZW4oJF9jb2xvciwgMTUlKTtcblxuICAkX2VuZCAgICAgICAgICAgOiAxICsgJF9ndXR0ZXJzO1xuICAkX2FmdGVyICAgICAgICAgOiBwZXJjZW50YWdlKDEvJF9lbmQpO1xuICAkX3N0b3BzICAgICAgICAgOiAoKTtcbiAgJF9zaXplICAgICAgICAgIDogc3BhbigxICRncmlkIHdpZGUpO1xuXG4gIEBpZiBpcy1pbnNpZGUoJGdyaWQpIHtcbiAgICAkX3N0b3BzOiAkX2NvbG9yLCAkX2xpZ2h0O1xuICB9IEBlbHNlIGlmIGlzLXNwbGl0KCRncmlkKSB7XG4gICAgJF9zcGxpdDogJF9ndXR0ZXJzLzI7XG4gICAgJF9iZWZvcmU6IHBlcmNlbnRhZ2UoJF9zcGxpdC8kX2VuZCk7XG4gICAgJF9hZnRlcjogcGVyY2VudGFnZSgoMSArICRfc3BsaXQpLyRfZW5kKTtcbiAgICAkX3N0b3BzOiAkX3RyYW5zICRfYmVmb3JlLCAkX2NvbG9yICRfYmVmb3JlLCAkX2xpZ2h0ICRfYWZ0ZXIsICRfdHJhbnMgJF9hZnRlcjtcbiAgfSBAZWxzZSB7XG4gICAgJF9zdG9wczogJF9jb2xvciwgJF9saWdodCAkX2FmdGVyLCAkX3RyYW5zICRfYWZ0ZXI7XG4gIH1cblxuICBAaWYgJF9tYXRoID09IHN0YXRpYyB7XG4gICAgJF9zaXplOiB2YWxpZC1jb2x1bW4tbWF0aCgkX21hdGgsICRfY29sdW1uLXdpZHRoKSAqICRfZW5kO1xuICB9XG5cbiAgJF9vdXRwdXQ6IChcbiAgICBpbWFnZTogKGNvbHVtbnM6ICRfc3RvcHMpLFxuICAgIHNpemU6ICRfc2l6ZSxcbiAgKTtcblxuICBAcmV0dXJuICRfb3V0cHV0O1xufVxuXG5cbi8vIEdldCBBc3ltbWV0cmljYWwgSW5zaWRlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSAkZ3JpZDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGdldC1hc3ltLWluc2lkZShcbiAgJGdyaWRcbikge1xuICAkZ3JpZCAgICAgOiBwYXJzZS1ncmlkKCRncmlkKTtcbiAgJF9jb2x1bW5zIDogc3VzeS1nZXQoY29sdW1ucywgJGdyaWQpO1xuXG4gICRfY29sb3IgICA6IGRlYnVnLWdldChjb2xvcik7XG4gICRfbGlnaHQgICA6IGxpZ2h0ZW4oJF9jb2xvciwgMTUlKTtcbiAgJF9zdG9wcyAgIDogKCk7XG5cbiAgQGZvciAkbG9jYXRpb24gZnJvbSAxIHRocm91Z2ggc3VzeS1jb3VudCgkX2NvbHVtbnMpIHtcbiAgICAkdGhpcy1zdG9wOiAoKTtcblxuICAgIEBpZiAkbG9jYXRpb24gPT0gMSB7XG4gICAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9jb2xvciwgY29tbWEpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHN0YXJ0OiBwYXJzZS1zcGFuKDEgYXQgJGxvY2F0aW9uICRncmlkKTtcbiAgICAgICRzdGFydDogZ2V0LWlzb2xhdGlvbigkc3RhcnQpO1xuICAgICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfY29sb3IgJHN0YXJ0LCBjb21tYSk7XG4gICAgfVxuXG4gICAgQGlmICRsb2NhdGlvbiA9PSBzdXN5LWNvdW50KCRfY29sdW1ucykge1xuICAgICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfbGlnaHQsIGNvbW1hKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRfZW5kOiBwYXJzZS1zcGFuKDEgYXQgKCRsb2NhdGlvbiArIDEpICRncmlkKTtcbiAgICAgICRfZW5kOiBnZXQtaXNvbGF0aW9uKCRfZW5kKTtcbiAgICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2xpZ2h0ICRfZW5kLCBjb21tYSk7XG4gICAgfVxuXG4gICAgJF9zdG9wczogam9pbigkX3N0b3BzLCAkdGhpcy1zdG9wLCBjb21tYSk7XG4gIH1cblxuICBAcmV0dXJuICRfc3RvcHM7XG59XG5cblxuLy8gR2V0IEFzeW1tZXRyaWNhbCBTcGxpdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSAkZ3JpZDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGdldC1hc3ltLXNwbGl0KFxuICAkZ3JpZFxuKSB7XG4gICRncmlkICAgICA6IHBhcnNlLWdyaWQoJGdyaWQpO1xuICAkX2NvbHVtbnMgOiBzdXN5LWdldChjb2x1bW5zLCAkZ3JpZCk7XG5cbiAgJF9jb2xvciAgIDogZGVidWctZ2V0KGNvbG9yKTtcbiAgJF9saWdodCAgIDogbGlnaHRlbigkX2NvbG9yLCAxNSUpO1xuICAkX3N0b3BzICAgOiAoKTtcblxuICBAZm9yICRsb2NhdGlvbiBmcm9tIDEgdGhyb3VnaCBzdXN5LWNvdW50KCRfY29sdW1ucykge1xuICAgICR0aGlzLXN0b3A6ICgpO1xuXG4gICAgJHN0YXJ0OiBwYXJzZS1zcGFuKDEgYXQgJGxvY2F0aW9uICRncmlkKTtcbiAgICAkc3RhcnQ6IGdldC1pc29sYXRpb24oJHN0YXJ0KTtcbiAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgdHJhbnNwYXJlbnQgJHN0YXJ0LCBjb21tYSk7XG4gICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfY29sb3IgJHN0YXJ0LCBjb21tYSk7XG5cbiAgICAkX2VuZDogJHN0YXJ0ICsgc3BhbigxIGF0ICRsb2NhdGlvbiAkZ3JpZCk7XG4gICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfbGlnaHQgJF9lbmQsIGNvbW1hKTtcbiAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgdHJhbnNwYXJlbnQgJF9lbmQsIGNvbW1hKTtcblxuICAgICRfc3RvcHM6IGpvaW4oJF9zdG9wcywgJHRoaXMtc3RvcCwgY29tbWEpO1xuICB9XG5cbiAgQHJldHVybiAkX3N0b3BzO1xufVxuXG5cbi8vIEdldCBBc3ltbWV0cmljYWwgT3V0c2lkZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtICRncmlkOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gZ2V0LWFzeW0tb3V0c2lkZShcbiAgJGdyaWRcbikge1xuICAkZ3JpZCAgICAgOiBwYXJzZS1ncmlkKCRncmlkKTtcbiAgJF9jb2x1bW5zIDogc3VzeS1nZXQoY29sdW1ucywgJGdyaWQpO1xuXG4gICRfY29sb3IgICA6IGRlYnVnLWdldChjb2xvcik7XG4gICRfbGlnaHQgICA6IGxpZ2h0ZW4oJF9jb2xvciwgMTUlKTtcbiAgJF90cmFucyAgIDogdHJhbnNwYXJlbnQ7XG4gICRfc3RvcHMgICA6ICgpO1xuXG4gIEBmb3IgJGxvY2F0aW9uIGZyb20gMSB0aHJvdWdoIHN1c3ktY291bnQoJF9jb2x1bW5zKSB7XG4gICAgJHRoaXMtc3RvcDogKCk7XG5cbiAgICBAaWYgJGxvY2F0aW9uID09IDEge1xuICAgICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfY29sb3IsIGNvbW1hKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRzdGFydDogcGFyc2Utc3BhbigxIGF0ICRsb2NhdGlvbiAkZ3JpZCk7XG4gICAgICAkc3RhcnQ6IGdldC1pc29sYXRpb24oJHN0YXJ0KTtcbiAgICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2NvbG9yICRzdGFydCwgY29tbWEpO1xuICAgIH1cblxuICAgIEBpZiAkbG9jYXRpb24gPT0gc3VzeS1jb3VudCgkX2NvbHVtbnMpIHtcbiAgICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2xpZ2h0LCBjb21tYSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZ3V0dGVyOiBnZXQtc3Bhbi13aWR0aChmaXJzdCAkbG9jYXRpb24gJGdyaWQpO1xuXG4gICAgICAkX2VuZDogcGFyc2Utc3BhbigxIGF0ICgkbG9jYXRpb24gKyAxKSAkZ3JpZCk7XG4gICAgICAkX2VuZDogZ2V0LWlzb2xhdGlvbigkX2VuZCk7XG5cbiAgICAgICRndXR0ZXI6ICRfbGlnaHQgJGd1dHRlciwgJF90cmFucyAkZ3V0dGVyLCAkX3RyYW5zICRfZW5kO1xuICAgICAgJHRoaXMtc3RvcDogam9pbigkdGhpcy1zdG9wLCAkZ3V0dGVyLCBjb21tYSk7XG4gICAgfVxuXG4gICAgJF9zdG9wczogam9pbigkX3N0b3BzLCAkdGhpcy1zdG9wLCBjb21tYSk7XG4gIH1cblxuICBAcmV0dXJuICRfc3RvcHM7XG59XG5cblxuLy8gR2V0IEFzeW1tZXRyaWNhbCBCYWNrZ3JvdW5kXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gJGdyaWQ6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBnZXQtYmFja2dyb3VuZC1hc3ltKFxuICAkZ3JpZFxuKSB7XG4gICRfc3RvcHM6ICgpO1xuXG4gIEBpZiBpcy1pbnNpZGUoJGdyaWQpIHtcbiAgICAkX3N0b3BzOiBnZXQtYXN5bS1pbnNpZGUoJGdyaWQpO1xuICB9IEBlbHNlIGlmIGlzLXNwbGl0KCRncmlkKSB7XG4gICAgJF9zdG9wczogZ2V0LWFzeW0tc3BsaXQoJGdyaWQpO1xuICB9IEBlbHNlIHtcbiAgICAkX3N0b3BzOiBnZXQtYXN5bS1vdXRzaWRlKCRncmlkKTtcbiAgfVxuXG4gIEByZXR1cm4gKGltYWdlOiAoY29sdW1uczogJF9zdG9wcykpO1xufVxuXG5cbi8vIEdldCBCYWNrZ3JvdW5kXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8gLSAkZ3JpZDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGdldC1iYWNrZ3JvdW5kKFxuICAkZ3JpZFxuKSB7XG4gICRncmlkICAgICA6IHBhcnNlLWdyaWQoJGdyaWQpO1xuICAkX3Nob3cgICAgOiBzdXN5LWdldChkZWJ1ZyBpbWFnZSwgJGdyaWQpO1xuICAkX3JldHVybiAgOiAoKTtcblxuICBAaWYgJF9zaG93IGFuZCAkX3Nob3cgIT0gJ2hpZGUnIHtcbiAgICAkX2NvbHVtbnM6IHN1c3ktZ2V0KGNvbHVtbnMsICRncmlkKTtcblxuICAgIEBpZiAkX3Nob3cgIT0gJ3Nob3ctYmFzZWxpbmUnIHtcbiAgICAgICRfc3ltOiBpcy1zeW1tZXRyaWNhbCgkX2NvbHVtbnMpO1xuICAgICAgJF9yZXR1cm46IGlmKCRfc3ltLCBnZXQtYmFja2dyb3VuZC1zeW0oJGdyaWQpLCBnZXQtYmFja2dyb3VuZC1hc3ltKCRncmlkKSk7XG4gICAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoY2xpcDogY29udGVudC1ib3gpKTtcbiAgICB9XG5cbiAgICBAaWYgJF9zaG93ICE9ICdzaG93LWNvbHVtbnMnXG4gICAgICBhbmQgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cyhiYXNlLWxpbmUtaGVpZ2h0KVxuICAgICAgYW5kIHR5cGUtb2YoJGJhc2UtbGluZS1oZWlnaHQpID09ICdudW1iZXInXG4gICAgICBhbmQgbm90IHVuaXRsZXNzKCRiYXNlLWxpbmUtaGVpZ2h0KSB7XG4gICAgICAkX2NvbG9yOiB2YXJpYWJsZS1leGlzdHMoJ2dyaWQtYmFja2dyb3VuZC1iYXNlbGluZS1jb2xvcicpO1xuICAgICAgJF9jb2xvcjogaWYoJF9jb2xvciwgJGdyaWQtYmFja2dyb3VuZC1iYXNlbGluZS1jb2xvciwgIzAwMCk7XG5cbiAgICAgICRfaW1hZ2U6IG1hcC1nZXQoJF9yZXR1cm4sIGltYWdlKTtcbiAgICAgICRfc2l6ZTogbWFwLWdldCgkX3JldHVybiwgc2l6ZSk7XG4gICAgICAkX2Jhc2VsaW5lOiAoYmFzZWxpbmU6ICgkX2NvbG9yIDFweCwgdHJhbnNwYXJlbnQgMXB4KSk7XG4gICAgICAkX2Jhc2VsaW5lLXNpemU6IDEwMCUgJGJhc2UtbGluZS1oZWlnaHQ7XG5cbiAgICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIChcbiAgICAgICAgaW1hZ2U6IGlmKCRfaW1hZ2UsIG1hcC1tZXJnZSgkX2ltYWdlLCAkX2Jhc2VsaW5lKSwgJF9iYXNlbGluZSksXG4gICAgICAgIHNpemU6IGlmKCRfc2l6ZSwgKCRfc2l6ZSwgJF9iYXNlbGluZS1zaXplKSwgJF9iYXNlbGluZS1zaXplKSxcbiAgICAgICkpO1xuXG4gICAgICBAaWYgJF9zaG93ID09ICdzaG93JyB7XG4gICAgICAgICRfY2xpcDogbWFwLWdldCgkX3JldHVybiwgY2xpcCk7XG4gICAgICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIChjbGlwOiBqb2luKCRfY2xpcCwgYm9yZGVyLWJveCwgY29tbWEpKSk7XG4gICAgICB9XG4gICAgfSBAZWxzZSBpZiAkX3Nob3cgPT0gJ3Nob3ctYmFzZWxpbmUnIHtcbiAgICAgIEB3YXJuICdQbGVhc2UgcHJvdmlkZSBhICRiYXNlLWxpbmUtaGVpZ2h0IHdpdGggdGhlIGRlc2lyZWQgaGVpZ2h0IGFuZCB1bml0cyc7XG4gICAgfVxuICB9XG5cbiAgQGlmIG1hcC1nZXQoJF9yZXR1cm4sIGltYWdlKSB7XG4gICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKGZsb3c6IHN1c3ktZ2V0KGZsb3csICRncmlkKSkpO1xuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBHZXQgRGVidWdcbi8vIC0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSB2YWx1ZSBvZiBhIGRlYnVnIHNldHRpbmdcbi8vIC0gJGtleTogPHNldHRpbmc+XG5AZnVuY3Rpb24gZGVidWctZ2V0KFxuICAka2V5LFxuICAkZ3JpZDogJHN1c3lcbikge1xuICAka2V5OiBqb2luKGRlYnVnLCAka2V5LCBzcGFjZSk7XG4gIEByZXR1cm4gc3VzeS1nZXQoJGtleSwgJGdyaWQpO1xufVxuIiwiLy8gQ29udGFpbmVyIFN5bnRheFxuLy8gPT09PT09PT09PT09PT09PVxuXG4vLyBDb250YWluZXIgW21peGluXVxuLy8gLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNldCBhIGNvbnRhaW5lciBlbGVtZW50XG4vLyAtIFskbGF5b3V0XSAgOiA8c2V0dGluZ3M+XG5AbWl4aW4gY29udGFpbmVyKFxuICAkbGF5b3V0OiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0ICAgIDogJGxheW91dDtcbiAgJGxheW91dCAgICAgOiBwYXJzZS1ncmlkKCRsYXlvdXQpO1xuXG4gICRfd2lkdGggICAgIDogZ2V0LWNvbnRhaW5lci13aWR0aCgkbGF5b3V0KTtcbiAgJF9qdXN0aWZ5ICAgOiBwYXJzZS1jb250YWluZXItcG9zaXRpb24oc3VzeS1nZXQoY29udGFpbmVyLXBvc2l0aW9uLCAkbGF5b3V0KSk7XG4gICRfcHJvcGVydHkgIDogaWYoc3VzeS1nZXQobWF0aCwgJGxheW91dCkgPT0gc3RhdGljLCB3aWR0aCwgbWF4LXdpZHRoKTtcblxuICAkX2JveCAgICAgICA6IHN1c3ktZ2V0KGJveC1zaXppbmcsICRsYXlvdXQpO1xuXG4gIEBpZiAkX2JveCB7XG4gICAgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiAkX2JveCkpO1xuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGNvbnRhaW5lciwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBmbG9hdC1jb250YWluZXIoJF93aWR0aCwgJF9qdXN0aWZ5LCAkX3Byb3BlcnR5KTtcbiAgQGluY2x1ZGUgc2hvdy1ncmlkKCRsYXlvdXQpO1xufVxuXG4vLyBDb250YWluZXIgW2Z1bmN0aW9uXVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiBjb250YWluZXIgd2lkdGhcbi8vIC0gWyRsYXlvdXRdICA6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBjb250YWluZXIoXG4gICRsYXlvdXQ6ICRzdXN5XG4pIHtcbiAgJGxheW91dDogcGFyc2UtZ3JpZCgkbGF5b3V0KTtcbiAgQHJldHVybiBnZXQtY29udGFpbmVyLXdpZHRoKCRsYXlvdXQpO1xufVxuXG4vLyBHZXQgQ29udGFpbmVyIFdpZHRoXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDYWxjdWxhdGUgdGhlIGNvbnRhaW5lciB3aWR0aFxuLy8gLSBbJGxheW91dF06IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBnZXQtY29udGFpbmVyLXdpZHRoKFxuICAkbGF5b3V0OiAkc3VzeVxuKSB7XG4gICRsYXlvdXQgICAgICAgICA6IHBhcnNlLWdyaWQoJGxheW91dCk7XG4gICRfd2lkdGggICAgICAgICA6IHN1c3ktZ2V0KGNvbnRhaW5lciwgJGxheW91dCk7XG4gICRfY29sdW1uLXdpZHRoICA6IHN1c3ktZ2V0KGNvbHVtbi13aWR0aCwgJGxheW91dCk7XG4gICRfbWF0aCAgICAgICAgICA6IHN1c3ktZ2V0KG1hdGgsICRsYXlvdXQpO1xuXG4gIEBpZiBub3QoJF93aWR0aCkgb3IgJF93aWR0aCA9PSBhdXRvIHtcbiAgICBAaWYgdmFsaWQtY29sdW1uLW1hdGgoJF9tYXRoLCAkX2NvbHVtbi13aWR0aCkge1xuICAgICAgJF9jb2x1bW5zICAgOiBzdXN5LWdldChjb2x1bW5zLCAkbGF5b3V0KTtcbiAgICAgICRfZ3V0dGVycyAgIDogc3VzeS1nZXQoZ3V0dGVycywgJGxheW91dCk7XG4gICAgICAkX3NwcmVhZCAgICA6IGlmKGlzLXNwbGl0KCRsYXlvdXQpLCB3aWRlLCBuYXJyb3cpO1xuICAgICAgJF93aWR0aCAgICAgOiBzdXN5LXN1bSgkX2NvbHVtbnMsICRfZ3V0dGVycywgJF9zcHJlYWQpICogJF9jb2x1bW4td2lkdGg7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkX3dpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJF93aWR0aDtcbn1cblxuLy8gUGFyc2UgQ29udGFpbmVyIFBvc2l0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBhcnNlIHRoZSAkY29udGFpbmVyLXBvc2l0aW9uIGludG8gbWFyZ2luIHZhbHVlcy5cbi8vIC0gWyRqdXN0aWZ5XSAgIDogbGVmdCB8IGNlbnRlciB8IHJpZ2h0IHwgPGxlbmd0aD4gWzxsZW5ndGg+XVxuQGZ1bmN0aW9uIHBhcnNlLWNvbnRhaW5lci1wb3NpdGlvbihcbiAgJGp1c3RpZnk6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGNvbnRhaW5lci1wb3NpdGlvbilcbikge1xuICAkX3JldHVybjogaWYoJGp1c3RpZnkgPT0gbGVmdCwgMCwgYXV0bykgaWYoJGp1c3RpZnkgPT0gcmlnaHQsIDAsIGF1dG8pO1xuXG4gIEBpZiBub3QoaW5kZXgobGVmdCByaWdodCBjZW50ZXIsICRqdXN0aWZ5KSkge1xuICAgICRfcmV0dXJuOiBudGgoJGp1c3RpZnksIDEpO1xuICAgICRfcmV0dXJuOiAkX3JldHVybiBpZihsZW5ndGgoJGp1c3RpZnkpID4gMSwgbnRoKCRqdXN0aWZ5LCAyKSwgJF9yZXR1cm4pO1xuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cbiIsIi8vIFNwYW4gU3ludGF4XG4vLyA9PT09PT09PT09PVxuXG4vLyBTcGFuIFttaXhpbl1cbi8vIC0tLS0tLS0tLS0tLVxuLy8gU2V0IGEgc3Bhbm5pbmcgZWxlbWVudCB1c2luZyBzaG9ydGhhbmQgc3ludGF4LlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBtaXhpbiBzcGFuKFxuICAkc3BhblxuKSB7XG4gICRpbnNwZWN0OiAkc3BhbjtcbiAgJHNwYW46IHBhcnNlLXNwYW4oJHNwYW4pO1xuICAkb3V0cHV0OiBzcGFuLW1hdGgoJHNwYW4pO1xuICAkbmVzdGluZzogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuICAkY2xlYXI6IHN1c3ktZ2V0KGNsZWFyLCAkc3Bhbik7XG5cbiAgJGJveDogc3VzeS1nZXQoYm94LXNpemluZywgJHNwYW4pO1xuICAkY29udGVudC1ib3g6IGlmKHN1c3ktZ2V0KGdsb2JhbC1ib3gtc2l6aW5nKSAhPSAnYm9yZGVyLWJveCcsIHRydWUsIGZhbHNlKTtcbiAgJGJveDogJGJveCBvciBpZihpcy1pbnNpZGUoJHNwYW4pIGFuZCAkY29udGVudC1ib3gsIGJvcmRlci1ib3gsIG51bGwpO1xuXG4gIEBpZiAkY2xlYXIgPT0gYnJlYWsge1xuICAgIEBpbmNsdWRlIGJyZWFrO1xuICB9IEBlbHNlIGlmICRjbGVhciA9PSBub2JyZWFrIHtcbiAgICBAaW5jbHVkZSBub2JyZWFrO1xuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHNwYW4sICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiAkYm94KSk7XG4gIEBpbmNsdWRlIGZsb2F0LXNwYW4tb3V0cHV0KCRvdXRwdXQuLi4pO1xuXG4gIEBpZiB2YWxpZC1jb2x1bW5zKCRuZXN0aW5nLCBzaWxlbnQpIHtcbiAgICBAaW5jbHVkZSBuZXN0ZWQoJHNwYW4pIHsgQGNvbnRlbnQ7IH1cbiAgfSBAZWxzZSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuLy8gU3BhbiBbZnVuY3Rpb25dXG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgd2lkdGggb2YgYSBzcGFuLlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBmdW5jdGlvbiBzcGFuKFxuICAkc3BhblxuKSB7XG4gIEByZXR1cm4gZ2V0LXNwYW4td2lkdGgoJHNwYW4pO1xufVxuXG4vLyBTcGFuIE1hdGhcbi8vIC0tLS0tLS0tLVxuLy8gR2V0IGFsbCB0aGUgc3BhbiByZXN1bHRzLlxuLy8gLSAkc3BhbjogPG1hcD5cbkBmdW5jdGlvbiBzcGFuLW1hdGgoXG4gICRzcGFuXG4pIHtcbiAgJG5lc3QgICAgICAgICAgICAgOiBpZihzdXN5LWdldChyb2xlLCAkc3BhbikgPT0gbmVzdCwgdHJ1ZSwgZmFsc2UpO1xuICAkc3BsaXQtbmVzdCAgICAgICA6IGlmKGlzLXNwbGl0KCRzcGFuKSBhbmQgJG5lc3QsIHRydWUsIGZhbHNlKTtcbiAgJGVkZ2UgICAgICAgICAgICAgOiBnZXQtZWRnZSgkc3Bhbik7XG4gICRsb2NhdGlvbiAgICAgICAgIDogZ2V0LWxvY2F0aW9uKCRzcGFuKTtcblxuICAkZmxvYXQgICAgICAgICAgICA6IGZyb207XG4gICRwYWRkaW5nLWJlZm9yZSAgIDogbnVsbDtcbiAgJHBhZGRpbmctYWZ0ZXIgICAgOiBudWxsO1xuICAkbWFyZ2luLWJlZm9yZSAgICA6IG51bGw7XG4gICRtYXJnaW4tYWZ0ZXIgICAgIDogbnVsbDtcblxuICAvLyBjYWxjdWxhdGUgd2lkdGhzXG4gICRzcHJlYWQ6IGluZGV4KG1hcC12YWx1ZXMoJHNwYW4pLCBzcHJlYWQpO1xuICAkc3BhbjogaWYoJHNwbGl0LW5lc3QgYW5kIG5vdCgkc3ByZWFkKSwgbWFwLW1lcmdlKCRzcGFuLCAoc3ByZWFkOiB3aWRlKSksICRzcGFuKTtcbiAgJHdpZHRoOiBnZXQtc3Bhbi13aWR0aCgkc3Bhbik7XG4gICRndXR0ZXJzOiBnZXQtZ3V0dGVycygkc3Bhbik7XG5cbiAgLy8gYXBwbHkgZ3V0dGVyc1xuICBAaWYgaXMtaW5zaWRlKCRzcGFuKSB7XG4gICAgQGlmIG5vdChzdXN5LWdldChyb2xlLCAkc3BhbikpIHtcbiAgICAgICRwYWRkaW5nLWJlZm9yZTogbWFwLWdldCgkZ3V0dGVycywgYmVmb3JlKTtcbiAgICAgICRwYWRkaW5nLWFmdGVyOiBtYXAtZ2V0KCRndXR0ZXJzLCBhZnRlcik7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAaWYgbm90KCRzcGxpdC1uZXN0KSB7XG4gICAgICAkbWFyZ2luLWJlZm9yZTogbWFwLWdldCgkZ3V0dGVycywgYmVmb3JlKTtcbiAgICAgICRtYXJnaW4tYWZ0ZXI6IG1hcC1nZXQoJGd1dHRlcnMsIGFmdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBzcGVjaWFsIG1hcmdpbiBoYW5kbGluZ1xuICBAaWYgc3VzeS1nZXQob3V0cHV0LCAkc3BhbikgPT0gaXNvbGF0ZSBhbmQgJGxvY2F0aW9uIHtcbiAgICAkbWFyZ2luLWJlZm9yZTogZ2V0LWlzb2xhdGlvbigkc3Bhbik7XG4gICAgJG1hcmdpbi1hZnRlcjogLTEwMCU7XG4gIH0gQGVsc2UgaWYgJGVkZ2Uge1xuICAgICRpcy1zcGxpdDogaXMtc3BsaXQoJHNwYW4pO1xuICAgICRwb3M6IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJHNwYW4pO1xuXG4gICAgQGlmICRlZGdlID09IGxhc3Qge1xuICAgICAgJGZsb2F0OiBzdXN5LWdldChsYXN0LWZsb3csICRzcGFuKTtcbiAgICB9XG5cbiAgICBAaWYgbm90KCRpcy1zcGxpdCkge1xuICAgICAgQGlmICRlZGdlID09IGZ1bGwgb3IgKCRlZGdlID09IGZpcnN0IGFuZCAkcG9zID09IGJlZm9yZSkge1xuICAgICAgICAkbWFyZ2luLWJlZm9yZTogMDtcbiAgICAgIH1cbiAgICAgIEBpZiAkZWRnZSA9PSBmdWxsIG9yICgkZWRnZSA9PSBsYXN0IGFuZCAkcG9zID09IGFmdGVyKSB7XG4gICAgICAgICRtYXJnaW4tYWZ0ZXI6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBAcmV0dXJuIChcbiAgICB3aWR0aCAgICAgICAgICAgOiAkd2lkdGgsXG4gICAgZmxvYXQgICAgICAgICAgIDogJGZsb2F0LFxuICAgIG1hcmdpbi1iZWZvcmUgICA6ICRtYXJnaW4tYmVmb3JlLFxuICAgIG1hcmdpbi1hZnRlciAgICA6ICRtYXJnaW4tYWZ0ZXIsXG4gICAgcGFkZGluZy1iZWZvcmUgIDogJHBhZGRpbmctYmVmb3JlLFxuICAgIHBhZGRpbmctYWZ0ZXIgICA6ICRwYWRkaW5nLWFmdGVyLFxuICAgIGZsb3cgICAgICAgICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKSxcbiAgKTtcbn1cblxuLy8gR2V0IFNwYW4gV2lkdGhcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gc3BhbiB3aWR0aC5cbi8vIC0gJHNwYW46IDxtYXA+XG5AZnVuY3Rpb24gZ2V0LXNwYW4td2lkdGgoXG4gICRzcGFuXG4pIHtcbiAgJHNwYW4gICAgIDogcGFyc2Utc3Bhbigkc3Bhbik7XG5cbiAgJG4gICAgICAgIDogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuICAkbG9jYXRpb24gOiBnZXQtbG9jYXRpb24oJHNwYW4pO1xuICAkY29sdW1ucyAgOiBzdXN5LWdldChjb2x1bW5zLCAkc3Bhbik7XG4gICRndXR0ZXJzICA6IHN1c3ktZ2V0KGd1dHRlcnMsICRzcGFuKTtcbiAgJHNwcmVhZCAgIDogc3VzeS1nZXQoc3ByZWFkLCAkc3Bhbik7XG5cbiAgJGNvbnRleHQgIDogbnVsbDtcbiAgJHNwYW4tc3VtIDogbnVsbDtcbiAgJHdpZHRoICAgIDogbnVsbDtcblxuICBAaWYgJG4gPT0gJ2Z1bGwnIHtcbiAgICAkcG9zOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRzcGFuKTtcbiAgICAkcm9sZTogc3VzeS1nZXQocm9sZSwgJHNwYW4pO1xuICAgICRuOiBpZigkcG9zID09IHNwbGl0IGFuZCAkcm9sZSAhPSBuZXN0LCBzdXN5LWNvdW50KCRjb2x1bW5zKSwgMTAwJSk7XG4gIH1cblxuICBAaWYgdHlwZS1vZigkbikgIT0gbnVtYmVyIHtcbiAgICBAd2FybiBcIigje3R5cGUtb2YoJG4pfSkgI3skbn0gaXMgbm90IGEgdmFsaWQgc3Bhbi5cIjtcbiAgfSBAZWxzZSBpZiB1bml0bGVzcygkbikge1xuICAgICRjb250ZXh0OiBzdXN5LXN1bSgkY29sdW1ucywgJGd1dHRlcnMsIGlmKGlzLXNwbGl0KCRzcGFuKSwgd2lkZSwgbmFycm93KSk7XG4gICAgJHNwcmVhZDogaWYoaXMtaW5zaWRlKCRzcGFuKSwgJHNwcmVhZCBvciB3aWRlLCAkc3ByZWFkKTtcbiAgICAkc3Bhbi1zdW06IHN1c3koJG4sICRsb2NhdGlvbiwgJGNvbHVtbnMsICRndXR0ZXJzLCAkc3ByZWFkKTtcblxuICAgICRfbWF0aDogc3VzeS1nZXQobWF0aCwgJHNwYW4pO1xuICAgICRfY29sdW1uLXdpZHRoOiBzdXN5LWdldChjb2x1bW4td2lkdGgsICRzcGFuKTtcbiAgICBAaWYgJF9tYXRoID09IHN0YXRpYyB7XG4gICAgICAkd2lkdGg6ICRzcGFuLXN1bSAqIHZhbGlkLWNvbHVtbi1tYXRoKCRfbWF0aCwgJF9jb2x1bW4td2lkdGgpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHdpZHRoOiBwZXJjZW50YWdlKCRzcGFuLXN1bSAvICRjb250ZXh0KTtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgICR3aWR0aDogJG47XG4gIH1cblxuICBAcmV0dXJuICR3aWR0aDtcbn1cbiIsIi8vIEd1dHRlciBTeW50YXhcbi8vID09PT09PT09PT09PT1cblxuXG4vLyBHdXR0ZXJzXG4vLyAtLS0tLS0tXG4vLyBTZXQgZ3V0dGVycyBvbiBhbiBlbGVtZW50LlxuLy8gLSBbJHNwYW5dICAgOiA8c2V0dGluZ3M+XG5AbWl4aW4gZ3V0dGVycyhcbiAgJHNwYW46ICRzdXN5XG4pIHtcbiAgJGluc3BlY3QgIDogJHNwYW47XG4gICRzcGFuICAgICA6IHBhcnNlLWd1dHRlcnMoJHNwYW4pO1xuICAkX2d1dHRlcnMgOiBnZXQtZ3V0dGVycygkc3Bhbik7XG5cbiAgJF9vdXRwdXQ6IChcbiAgICBiZWZvcmU6IG1hcC1nZXQoJF9ndXR0ZXJzLCBiZWZvcmUpLFxuICAgIGFmdGVyOiBtYXAtZ2V0KCRfZ3V0dGVycywgYWZ0ZXIpLFxuICAgIGZsb3c6IHN1c3ktZ2V0KGZsb3csICRzcGFuKSxcbiAgKTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoZ3V0dGVycywgJGluc3BlY3QpO1xuXG4gIEBpZiBpcy1pbnNpZGUoJHNwYW4pIHtcbiAgICBAaW5jbHVkZSBwYWRkaW5nLW91dHB1dCgkX291dHB1dC4uLik7XG4gIH0gQGVsc2Uge1xuICAgIEBpbmNsdWRlIG1hcmdpbi1vdXRwdXQoJF9vdXRwdXQuLi4pO1xuICB9XG59XG5cbkBtaXhpbiBndXR0ZXIoXG4gICRzcGFuOiAkc3VzeVxuKSB7XG4gIEBpbmNsdWRlIGd1dHRlcnMoJHNwYW4pO1xufVxuXG5cbi8vIEd1dHRlclxuLy8gLS0tLS0tXG4vLyBSZXR1cm4gdGhlIHdpZHRoIG9mIGEgZ3V0dGVyLlxuLy8gLSBbJHNwYW5dICAgOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gZ3V0dGVyKFxuICAkc3BhbjogJHN1c3lcbikge1xuICAkc3BhbjogcGFyc2UtZ3V0dGVycygkc3Bhbik7XG5cbiAgJF9ndXR0ZXJzOiBnZXQtZ3V0dGVycygkc3Bhbik7XG4gICRfZ3V0dGVyczogbWFwLWdldCgkX2d1dHRlcnMsIGJlZm9yZSkgb3IgbWFwLWdldCgkX2d1dHRlcnMsIGFmdGVyKTtcblxuICBAcmV0dXJuICRfZ3V0dGVycztcbn1cblxuQGZ1bmN0aW9uIGd1dHRlcnMoXG4gICRzcGFuOiAkc3VzeVxuKSB7XG4gIEByZXR1cm4gZ3V0dGVyKCRzcGFuKTtcbn1cblxuXG4vLyBHZXQgR3V0dGVyIFdpZHRoXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gZ3V0dGVyIHdpZHRoLlxuLy8gLSBbJGNvbnRleHRdOiA8Y29udGV4dD5cbkBmdW5jdGlvbiBnZXQtZ3V0dGVyLXdpZHRoKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkY29udGV4dCAgOiBwYXJzZS1ndXR0ZXJzKCRjb250ZXh0KTtcblxuICAkX2d1dHRlcnMgOiBzdXN5LWdldChndXR0ZXJzLCAkY29udGV4dCk7XG4gICRfZ3V0dGVyICA6IHN1c3ktZ2V0KGd1dHRlci1vdmVycmlkZSwgJGNvbnRleHQpO1xuXG4gIEBpZiAkX2d1dHRlcnMgYW5kICgkX2d1dHRlcnMgPiAwKSBhbmQgbm90KCRfZ3V0dGVyKSB7XG4gICAgJF9jb2x1bW4td2lkdGg6IHN1c3ktZ2V0KGNvbHVtbi13aWR0aCwgJGNvbnRleHQpO1xuICAgICRfbWF0aDogZ3V0dGVyLW1hdGgoJGNvbnRleHQpO1xuICAgIEBpZiAkX21hdGggPT0gc3RhdGljIHtcbiAgICAgICRfZ3V0dGVyOiAkX2d1dHRlcnMgKiB2YWxpZC1jb2x1bW4tbWF0aCgkX21hdGgsICRfY29sdW1uLXdpZHRoKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRfY29sdW1ucyA6IHN1c3ktZ2V0KGNvbHVtbnMsICRjb250ZXh0KTtcbiAgICAgICRfc3ByZWFkICA6IGlmKGlzLXNwbGl0KCRjb250ZXh0KSwgd2lkZSwgc3VzeS1nZXQoc3ByZWFkLCAkY29udGV4dCkpO1xuICAgICAgJF9ndXR0ZXIgIDogcGVyY2VudGFnZSgkX2d1dHRlcnMgLyBzdXN5LXN1bSgkX2NvbHVtbnMsICRfZ3V0dGVycywgJF9zcHJlYWQpKTtcbiAgICB9XG4gIH1cblxuICAkX2d1dHRlcjogaWYoJF9ndXR0ZXIgPT0gJ25vLWd1dHRlcnMnIG9yICRfZ3V0dGVyID09ICduby1ndXR0ZXInLCBudWxsLCAkX2d1dHRlcik7XG5cbiAgQHJldHVybiAkX2d1dHRlcjtcbn1cblxuXG4vLyBHZXQgR3V0dGVyc1xuLy8gLS0tLS0tLS0tLS1cbi8vIFJldHVybiBiZWZvcmUgYW5kIGFmdGVyIGd1dHRlciB2YWx1ZXMuXG4vLyAtIFskY29udGV4dF06IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGdldC1ndXR0ZXJzKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkY29udGV4dCAgICAgICAgICAgIDogcGFyc2UtZ3V0dGVycygkY29udGV4dCk7XG5cbiAgJF9ndXR0ZXItcG9zaXRpb24gICA6IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGNvbnRleHQpO1xuICAkX2d1dHRlciAgICAgICAgICAgIDogZ2V0LWd1dHRlci13aWR0aCgkY29udGV4dCk7XG5cbiAgJF9yZXR1cm4gICAgICAgICAgICA6IChiZWZvcmU6IG51bGwsIGFmdGVyOiBudWxsKTtcblxuICBAaWYgaXMtc3BsaXQoJGNvbnRleHQpIGFuZCAkX2d1dHRlciB7XG4gICAgJF9ndXR0ZXI6ICRfZ3V0dGVyIC8gMjtcbiAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoYmVmb3JlOiAkX2d1dHRlciwgYWZ0ZXI6ICRfZ3V0dGVyKSk7XG4gIH0gQGVsc2Uge1xuICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sICgkX2d1dHRlci1wb3NpdGlvbjogJF9ndXR0ZXIpKTtcbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gSXMgSW5zaWRlXG4vLyAtLS0tLS0tLS1cbi8vIFJldHVybnMgdHJ1ZSBpZiBndXR0ZXJzIGFyZSBpbnNpZGUuXG4vLyAkY29udGV4dDogPGNvbnRleHQ+XG5AZnVuY3Rpb24gaXMtaW5zaWRlKFxuICAkY29udGV4dFxuKSB7XG4gICRfaW5zaWRlOiBpbnNpZGUgaW5zaWRlLXN0YXRpYztcbiAgJF9ndXR0ZXItcG9zaXRpb246IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGNvbnRleHQpO1xuXG4gIEByZXR1cm4gaWYoaW5kZXgoJF9pbnNpZGUsICRfZ3V0dGVyLXBvc2l0aW9uKSwgdHJ1ZSwgZmFsc2UpO1xufVxuXG5cbi8vIElzIFNwbGl0XG4vLyAtLS0tLS0tLVxuLy8gUmV0dXJucyB0cnVlIGlmIGd1dHRlcnMgYXJlIHNwbGl0LlxuLy8gJGNvbnRleHQ6IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGlzLXNwbGl0KFxuICAkY29udGV4dFxuKSB7XG4gICRfc3BsaXQ6IHNwbGl0IGluc2lkZSBpbnNpZGUtc3RhdGljO1xuICAkX2d1dHRlci1wb3NpdGlvbjogc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkY29udGV4dCk7XG5cbiAgQHJldHVybiBpZihpbmRleCgkX3NwbGl0LCAkX2d1dHRlci1wb3NpdGlvbiksIHRydWUsIGZhbHNlKTtcbn1cblxuXG4vLyBHdXR0ZXIgTWF0aFxuLy8gLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgbWF0aCB0byB1c2UgZm9yIGd1dHRlciBjYWxjdWxhdGlvbnNcbi8vICRjb250ZXh0OiA8Y29udGV4dD5cbkBmdW5jdGlvbiBndXR0ZXItbWF0aChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJF9yZXR1cm4gIDogc3VzeS1nZXQobWF0aCwgJGNvbnRleHQpO1xuICAkX3JldHVybiAgOiBpZihzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KSA9PSBpbnNpZGUtc3RhdGljLCBzdGF0aWMsICRfcmV0dXJuKTtcblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuIiwiLy8gSXNvbGF0aW9uIFN5bnRheFxuLy8gPT09PT09PT09PT09PT09PVxuXG5cbi8vIElzb2xhdGUgW01peGluXVxuLy8gLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXQgaXNvbGF0aW9uIGFzIGFuIG92ZXJyaWRlLlxuLy8gLSAkbG9jYXRpb246IDxzcGFuPlxuQG1peGluIGlzb2xhdGUoXG4gICRpc29sYXRlOiAxXG4pIHtcbiAgJGluc3BlY3Q6ICRpc29sYXRlO1xuXG4gICRvdXRwdXQ6IChcbiAgICBwdXNoOiBpc29sYXRlKCRpc29sYXRlKSxcbiAgICBmbG93OiBzdXN5LWdldChmbG93LCAkaXNvbGF0ZSksXG4gICk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGlzb2xhdGUsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgaXNvbGF0ZS1vdXRwdXQoJG91dHB1dC4uLik7XG59XG5cblxuLy8gSXNvbGF0ZSBbZnVuY3Rpb25dXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiBhbiBpc29sYXRpb24gb2Zmc2V0IHdpZHRoLlxuLy8gLSAkbG9jYXRpb246IDxzcGFuPlxuQGZ1bmN0aW9uIGlzb2xhdGUoXG4gICRpc29sYXRlOiAxXG4pIHtcbiAgJGlzb2xhdGU6IHBhcnNlLXNwYW4oJGlzb2xhdGUpO1xuICAkaXNvbGF0aW9uOiBzdXN5LWdldChzcGFuLCAkaXNvbGF0ZSk7XG5cbiAgQGlmICRpc29sYXRpb24gYW5kIG5vdChnZXQtbG9jYXRpb24oJGlzb2xhdGUpKSB7XG4gICAgJG5ldzogKFxuICAgICAgc3BhbjogbnVsbCxcbiAgICAgIGxvY2F0aW9uOiAkaXNvbGF0aW9uLFxuICAgICk7XG4gICAgJGlzb2xhdGU6IG1hcC1tZXJnZSgkaXNvbGF0ZSwgJG5ldyk7XG4gIH1cblxuICBAcmV0dXJuIGdldC1pc29sYXRpb24oJGlzb2xhdGUpO1xufVxuXG5cbi8vIEdldCBJc29sYXRpb25cbi8vIC0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgaXNvbGF0aW9uIG9mZnNldCB3aWR0aFxuLy8gLSAkaW5wdXQ6IDxtYXA+XG5AZnVuY3Rpb24gZ2V0LWlzb2xhdGlvbihcbiAgJGlucHV0XG4pIHtcbiAgJGxvY2F0aW9uICAgOiBnZXQtbG9jYXRpb24oJGlucHV0KTtcbiAgJGNvbHVtbnMgICAgOiBzdXN5LWdldChjb2x1bW5zLCAkaW5wdXQpO1xuICAkd2lkdGggICAgICA6IG51bGw7XG5cbiAgQGlmIHR5cGUtb2YoJGxvY2F0aW9uKSA9PSBudW1iZXIgYW5kIG5vdCh1bml0bGVzcygkbG9jYXRpb24pKSB7XG4gICAgJHdpZHRoOiAkbG9jYXRpb247XG4gIH0gQGVsc2UgaWYgJGxvY2F0aW9uIHtcbiAgICAkcHVzaDogJGxvY2F0aW9uIC0gMTtcbiAgICBAaWYgJHB1c2ggPiAwIHtcbiAgICAgICRwdXNoOiBtYXAtbWVyZ2UoJGlucHV0LCAoXG4gICAgICAgIHNwYW46ICRwdXNoLFxuICAgICAgICBsb2NhdGlvbjogMSxcbiAgICAgICAgc3ByZWFkOiB3aWRlLFxuICAgICAgKSk7XG4gICAgICAkd2lkdGg6IGdldC1zcGFuLXdpZHRoKCRwdXNoKTtcbiAgICB9XG4gIH1cblxuICBAaWYgc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkaW5wdXQpID09IHNwbGl0XG4gICAgICBhbmQgc3VzeS1nZXQoZ3V0dGVycywgJGlucHV0KSA+IDAge1xuICAgICR3aWR0aDogaWYoJHdpZHRoID09IG51bGwsIGd1dHRlcnMoJGlucHV0KSwgJHdpZHRoICsgZ3V0dGVycygkaW5wdXQpKTtcbiAgfVxuXG4gIEByZXR1cm4gJHdpZHRoIG9yIDA7XG59XG4iLCIvLyBHYWxsZXJ5IFN5bnRheFxuLy8gPT09PT09PT09PT09PT1cblxuLy8gR2FsbGVyeVxuLy8gLS0tLS0tLVxuLy8gQ3JlYXRlIGFuIGlzb2xhdGVkIGdhbGxlcnlcbi8vIC0gJHNwYW4gICAgICAgIDogPHNwYW4+XG4vLyAtIFskc2VsZWN0b3JdICA6IGNoaWxkIHwgb2YtdHlwZVxuQG1peGluIGdhbGxlcnkoXG4gICRzcGFuLFxuICAkc2VsZWN0b3I6IGNoaWxkXG4pIHtcbiAgJGluc3BlY3QgICAgOiAkc3BhbjtcbiAgJHNwYW4gICAgICAgOiBwYXJzZS1zcGFuKCRzcGFuKTtcbiAgJHNwYW4gICAgICAgOiBtYXAtbWVyZ2UoJHNwYW4sIChsb2NhdGlvbjogMSkpO1xuXG4gICRuICAgICAgICAgICAgOiBzdXN5LWdldChzcGFuLCAkc3Bhbik7XG4gICRjb2x1bW5zICAgICAgOiBzdXN5LWdldChjb2x1bW5zLCAkc3Bhbik7XG4gICRjb250ZXh0ICAgICAgOiBzdXN5LWNvdW50KCRjb2x1bW5zKTtcbiAgJGZsb3cgICAgICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKTtcblxuICAkaW5zaWRlICAgICAgIDogaXMtaW5zaWRlKCRzcGFuKTtcbiAgJGZyb20gICAgICAgICA6IGZyb20oJGZsb3cpO1xuICAkbGluZSAgICAgICAgIDogZmxvb3IoJGNvbnRleHQgLyAkbik7XG4gICRzeW1tZXRyaWNhbCAgOiBpcy1zeW1tZXRyaWNhbCgkY29sdW1ucyk7XG5cbiAgJG91dHB1dDogKFxuICAgIHdpZHRoICAgICAgICAgICAgIDogbnVsbCxcbiAgICBmbG9hdCAgICAgICAgICAgICA6IGZyb20sXG4gICAgbWFyZ2luLWJlZm9yZSAgICAgOiBudWxsLFxuICAgIG1hcmdpbi1hZnRlciAgICAgIDogbnVsbCxcbiAgICBwYWRkaW5nLWJlZm9yZSAgICA6IG51bGwsXG4gICAgcGFkZGluZy1hZnRlciAgICAgOiBudWxsLFxuICAgIGZsb3cgICAgICAgICAgICAgIDogJGZsb3csXG4gICk7XG5cbiAgQGlmICRpbnNpZGUge1xuICAgICRndXR0ZXJzOiBnZXQtZ3V0dGVycygkc3Bhbik7XG4gICAgJG91dHB1dDogbWFwLW1lcmdlKCRvdXRwdXQsIChcbiAgICAgIHBhZGRpbmctYmVmb3JlOiBtYXAtZ2V0KCRndXR0ZXJzLCBiZWZvcmUpLFxuICAgICAgcGFkZGluZy1hZnRlcjogbWFwLWdldCgkZ3V0dGVycywgYWZ0ZXIpLFxuICAgICkpO1xuICB9XG5cbiAgQGlmICRzeW1tZXRyaWNhbCB7XG4gICAgJG91dHB1dDogbWFwLW1lcmdlKCRvdXRwdXQsICh3aWR0aDogZ2V0LXNwYW4td2lkdGgoJHNwYW4pKSk7XG4gIH1cblxuICAkYm94ICAgICAgICAgIDogc3VzeS1nZXQoYm94LXNpemluZywgJHNwYW4pO1xuICAkZ2xvYmFsLWJveCAgIDogaWYoc3VzeS1nZXQoZ2xvYmFsLWJveC1zaXppbmcpID09ICdib3JkZXItYm94JywgdHJ1ZSwgZmFsc2UpO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChnYWxsZXJ5LCAkaW5zcGVjdCk7XG5cbiAgLy8gQ29sbGVjdGl2ZSBPdXRwdXRcbiAgQGlmICRib3ggPT0gYm9yZGVyLWJveCBvciAoJGluc2lkZSBhbmQgbm90KCRib3gpIGFuZCBub3QoJGdsb2JhbC1ib3gpKSB7XG4gICAgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiBib3JkZXItYm94KSk7XG4gIH0gQGVsc2UgaWYgJGJveCA9PSBjb250ZW50LWJveCB7XG4gICAgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiBjb250ZW50LWJveCkpO1xuICB9XG5cbiAgQGluY2x1ZGUgZmxvYXQtc3Bhbi1vdXRwdXQoJG91dHB1dC4uLik7XG5cbiAgLy8gSW5kaXZpZHVhbCBMb29wXG4gIEBmb3IgJGl0ZW0gZnJvbSAxIHRocm91Z2ggJGxpbmUge1xuICAgICRudGg6ICcjeyRsaW5lfW4gKyAjeyRpdGVtfSc7XG4gICAgJjpudGgtI3skc2VsZWN0b3J9KCN7JG50aH0pIHtcbiAgICAgIC8vIEluZGl2aWR1YWwgUHJlcFxuICAgICAgJG91dHB1dDogKFxuICAgICAgICB3aWR0aCAgICAgICAgICAgICA6IGlmKCRzeW1tZXRyaWNhbCwgbnVsbCwgZ2V0LXNwYW4td2lkdGgoJHNwYW4pKSxcbiAgICAgICAgZmxvYXQgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBtYXJnaW4tYmVmb3JlICAgICA6IGdldC1pc29sYXRpb24oJHNwYW4pLFxuICAgICAgICBtYXJnaW4tYWZ0ZXIgICAgICA6IC0xMDAlLFxuICAgICAgICBwYWRkaW5nLWJlZm9yZSAgICA6IG51bGwsXG4gICAgICAgIHBhZGRpbmctYWZ0ZXIgICAgIDogbnVsbCxcbiAgICAgICAgZmxvdyAgICAgICAgICAgICAgOiAkZmxvdyxcbiAgICAgICk7XG5cbiAgICAgIC8vIEluZGl2aWR1YWwgT3V0cHV0XG4gICAgICBAaW5jbHVkZSBmbG9hdC1zcGFuLW91dHB1dCgkb3V0cHV0Li4uKTtcblxuICAgICAgQGlmIGdldC1lZGdlKCRzcGFuKSA9PSBmaXJzdCB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrO1xuICAgICAgICBAaW5jbHVkZSBmaXJzdCgkc3Bhbik7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQGluY2x1ZGUgbm9icmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gSW5kaXZpZHVhbCBMb2NhdGlvbiBJbmNyZW1lbnRcbiAgICAgICRsb2NhdGlvbjogZ2V0LWxvY2F0aW9uKCRzcGFuKSArICRuO1xuICAgICAgJGxvY2F0aW9uOiBpZigkbG9jYXRpb24gPiAkY29udGV4dCwgMSwgJGxvY2F0aW9uKTtcbiAgICAgICRzcGFuOiBtYXAtbWVyZ2UoJHNwYW4sIChsb2NhdGlvbjogJGxvY2F0aW9uKSk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBSb3cgU3RhcnQgJiBFbmRcbi8vID09PT09PT09PT09PT09PVxuXG4vLyBCcmVha1xuLy8gLS0tLS1cbi8vIEFwcGx5IHRvIGFueSBlbGVtZW50IHRoYXQgc2hvdWxkIGZvcmNlIGEgbGluZSBicmVhay5cbkBtaXhpbiBicmVhayB7XG4gIEBpbmNsdWRlIG91dHB1dCgoY2xlYXI6IGJvdGgpKTtcbn1cblxuXG4vLyBOb0JyZWFrXG4vLyAtLS0tLS0tXG4vLyBDYW5jZWwgdGhlIGJyZWFrKCkgZWZmZWN0LCBlLmcuIHdoZW4gdXNpbmcgbWVkaWEgcXVlcmllcy5cbkBtaXhpbiBub2JyZWFrIHtcbiAgQGluY2x1ZGUgb3V0cHV0KChjbGVhcjogbm9uZSkpO1xufVxuXG5cbi8vIEZ1bGxcbi8vIC0tLS1cbi8vIC0gWyRjb250ZXh0XTogPGxheW91dCBzaG9ydGhhbmQ+XG5AbWl4aW4gZnVsbChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGluc3BlY3QgOiAkY29udGV4dDtcbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGZ1bGwsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgc3BhbihmdWxsIG9mIHBhcnNlLWdyaWQoJGNvbnRleHQpIGJyZWFrKTtcbn1cblxuXG4vLyBGaXJzdFxuLy8gLS0tLS1cbi8vIC0gWyRjb250ZXh0XTogPHNldHRpbmdzPlxuQG1peGluIGZpcnN0KFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkaW5zcGVjdCAgOiAkY29udGV4dDtcbiAgJGNvbnRleHQgIDogcGFyc2UtZ3JpZCgkY29udGV4dCk7XG4gICRmbG93ICAgICA6IHN1c3ktZ2V0KGZsb3csICRjb250ZXh0KTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoZmlyc3QsICRpbnNwZWN0KTtcbiAgQGlmIG5vdChpcy1zcGxpdCgkY29udGV4dCkpIHtcbiAgICBAaW5jbHVkZSBmbG9hdC1maXJzdCgkZmxvdyk7XG4gIH1cbn1cblxuQG1peGluIGFscGhhKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICBAaW5jbHVkZSBmaXJzdCgkY29udGV4dCk7XG59XG5cblxuLy8gTGFzdFxuLy8gLS0tLVxuLy8gLSBbJGNvbnRleHRdOiA8c2V0dGluZ3M+XG5AbWl4aW4gbGFzdChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGluc3BlY3QgIDogJGNvbnRleHQ7XG4gICRjb250ZXh0ICA6IHBhcnNlLWdyaWQoJGNvbnRleHQpO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChsYXN0LCAkaW5zcGVjdCk7XG5cbiAgJG91dHB1dDogKFxuICAgIGZsb3c6IHN1c3ktZ2V0KGZsb3csICRjb250ZXh0KSxcbiAgICBsYXN0LWZsb3c6IHN1c3ktZ2V0KGxhc3QtZmxvdywgJGNvbnRleHQpLFxuICAgIG1hcmdpbjogaWYoaXMtc3BsaXQoJGNvbnRleHQpLCBudWxsLCAwKSxcbiAgKTtcblxuICBAaW5jbHVkZSBmbG9hdC1sYXN0KCRvdXRwdXQuLi4pO1xufVxuXG5AbWl4aW4gb21lZ2EoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gIEBpbmNsdWRlIGxhc3QoJGNvbnRleHQpO1xufVxuXG5cbi8vIEdldCBFZGdlXG4vLyAtLS0tLS0tLVxuLy8gQ2FsY3VsYXRlIGVkZ2UgdmFsdWUgYmFzZWQgb24gbG9jYXRpb24sIGlmIHBvc3NpYmxlXG5AZnVuY3Rpb24gZ2V0LWVkZ2UoXG4gICRzcGFuXG4pIHtcbiAgJHNwYW4gICAgICAgOiBwYXJzZS1zcGFuKCRzcGFuKTtcbiAgJGVkZ2UgICAgICAgOiBzdXN5LWdldChlZGdlLCAkc3Bhbik7XG5cbiAgQGlmIG5vdCgkZWRnZSkge1xuICAgICRjb3VudDogc3VzeS1jb3VudChzdXN5LWdldChjb2x1bW5zLCAkc3BhbikpO1xuICAgICRsb2NhdGlvbjogc3VzeS1nZXQobG9jYXRpb24sICRzcGFuKTtcbiAgICAkbjogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuXG4gICAgJG51bWJlcjogaWYodHlwZS1vZigkbG9jYXRpb24pID09IG51bWJlciwgdHJ1ZSwgZmFsc2UpO1xuICAgICRpbmRleDogaWYoJG51bWJlciBhbmQgdW5pdGxlc3MoJGxvY2F0aW9uKSwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgQGlmICRuID09ICRjb3VudCB7XG4gICAgICAkZWRnZTogZnVsbDtcbiAgICB9IEBlbHNlIGlmICRsb2NhdGlvbiBhbmQgJG4gYW5kICRpbmRleCB7XG4gICAgICBAaWYgJGxvY2F0aW9uID09IDEge1xuICAgICAgICAkZWRnZTogaWYoJG4gPT0gJGNvdW50LCBmdWxsLCBmaXJzdCk7XG4gICAgICB9IEBlbHNlIGlmICRsb2NhdGlvbiArICRuIC0gMSA9PSAkY291bnQge1xuICAgICAgICAkZWRnZTogbGFzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaWYgJGVkZ2UgPT0gYWxwaGEgb3IgJGVkZ2UgPT0gb21lZ2Ege1xuICAgICRlZGdlOiBpZigkZWRnZSA9PSBhbHBoYSwgZmlyc3QsIGxhc3QpO1xuICB9XG5cbiAgQHJldHVybiAkZWRnZTtcbn1cblxuXG4vLyBHZXQgTG9jYXRpb25cbi8vIC0tLS0tLS0tLS0tLVxuLy8gQ2FsY3VsYXRlIGxvY2F0aW9uIHZhbHVlIGJhc2VkIG9uIGVkZ2UsIGlmIHBvc3NpYmxlXG5AZnVuY3Rpb24gZ2V0LWxvY2F0aW9uKFxuICAkc3BhblxuKSB7XG4gICRzcGFuICAgICAgIDogcGFyc2Utc3Bhbigkc3Bhbik7XG4gICRsb2NhdGlvbiAgIDogc3VzeS1nZXQobG9jYXRpb24sICRzcGFuKTtcbiAgJGVkZ2UgICAgICAgOiBnZXQtZWRnZSgkc3Bhbik7XG4gICRuICAgICAgICAgIDogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuXG4gIEBpZiAkZWRnZSBhbmQgbm90KCRsb2NhdGlvbikgYW5kIHR5cGUtb2YoJG4pID09IG51bWJlciBhbmQgdW5pdGxlc3MoJG4pIHtcbiAgICBAaWYgJGVkZ2UgPT0gZmlyc3Qge1xuICAgICAgJGxvY2F0aW9uOiAxO1xuICAgIH0gQGVsc2UgaWYgJGVkZ2UgPT0gbGFzdCB7XG4gICAgICAkbG9jYXRpb246IHN1c3ktY291bnQoc3VzeS1nZXQoY29sdW1ucywgJHNwYW4pKSAtICRuICsgMTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRsb2NhdGlvblxufVxuIiwiLy8gTWFyZ2luIFN5bnRheFxuLy8gPT09PT09PT09PT09PVxuXG4vLyBQcmVcbi8vIC0tLVxuLy8gQWRkIHNwYW5uaW5nLW1hcmdpbnMgYmVmb3JlIGFuIGVsZW1lbnQuXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQG1peGluIHByZShcbiAgJHNwYW5cbikge1xuICAkaW5zcGVjdDogJHNwYW47XG4gICRzcGFuICAgOiBtYXAtbWVyZ2UoKHNwcmVhZDogd2lkZSksIHBhcnNlLXNwYW4oJHNwYW4pKTtcbiAgJGZsb3cgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKTtcbiAgJHNwbGl0ICA6IGlmKHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJHNwYW4pID09IHNwbGl0LCB0cnVlLCBmYWxzZSk7XG4gICRndXR0ZXIgOiBndXR0ZXIoJHNwYW4pO1xuICAkc3BhbiAgIDogc3Bhbigkc3Bhbik7XG4gICR3aWR0aCAgOiBpZigkc3BsaXQgYW5kICRndXR0ZXIsICRzcGFuICsgJGd1dHRlciwgJHNwYW4pO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChwcmUsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgbWFyZ2luLW91dHB1dCgkd2lkdGgsIG51bGwsICRmbG93KTtcbn1cblxuLy8gUG9zdFxuLy8gLS0tLVxuLy8gQWRkIHNwYW5uaW5nLW1hcmdpbnMgYWZ0ZXIgYW4gZWxlbWVudC5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AbWl4aW4gcG9zdChcbiAgJHNwYW5cbikge1xuICAkaW5zcGVjdCAgOiAkc3BhbjtcbiAgJHNwYW4gICAgIDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRzcGFuKSk7XG4gICRmbG93ICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKTtcbiAgJHNwbGl0ICAgIDogaWYoc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkc3BhbikgPT0gc3BsaXQsIHRydWUsIGZhbHNlKTtcbiAgJHdpZHRoICAgIDogaWYoJHNwbGl0LCBzcGFuKCRzcGFuKSArIGd1dHRlcigkc3BhbiksIHNwYW4oJHNwYW4pKTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QocG9zdCwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBtYXJnaW4tb3V0cHV0KG51bGwsICR3aWR0aCwgJGZsb3cpO1xufVxuXG4vLyBQdXNoXG4vLyAtLS0tXG4vLyBTaW1wbGUgc3lub255bW4gZm9yIHByZS5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AbWl4aW4gcHVzaChcbiAgJHNwYW5cbikge1xuICBAaW5jbHVkZSBwcmUoJHNwYW4pO1xufVxuXG4vLyBQdWxsXG4vLyAtLS0tXG4vLyBBZGQgbmVnYXRpdmUgc3Bhbm5pbmctbWFyZ2lucyBiZWZvcmUgYW4gZWxlbWVudC5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AbWl4aW4gcHVsbChcbiAgJHNwYW5cbikge1xuICAkaW5zcGVjdCAgOiAkc3BhbjtcbiAgJHNwYW4gICAgIDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRzcGFuKSk7XG4gICRmbG93ICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKTtcbiAgJHNwbGl0ICAgIDogaWYoc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkc3BhbikgPT0gc3BsaXQsIHRydWUsIGZhbHNlKTtcbiAgJHdpZHRoICAgIDogaWYoJHNwbGl0LCAwIC0gc3Bhbigkc3BhbikgKyBndXR0ZXIoJHNwYW4pLCAwIC0gc3Bhbigkc3BhbikpO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChwdWxsLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIG1hcmdpbi1vdXRwdXQoJHdpZHRoLCBudWxsLCAkZmxvdyk7XG59XG5cbi8vIFNxdWlzaFxuLy8gLS0tLS0tXG4vLyBBZGQgc3Bhbm5pbmctbWFyZ2lucyBiZWZvcmUgYW5kIGFmdGVyIGFuIGVsZW1lbnQuXG4vLyAtICRwcmUgICAgIDogPHNwYW4+XG4vLyAtIFskcG9zdF0gIDogPHNwYW4+XG5AbWl4aW4gc3F1aXNoKFxuICAkcHJlLFxuICAkcG9zdDogZmFsc2Vcbikge1xuICAkaW5zcGVjdCAgICAgIDogKCRwcmUsICRwb3N0KTtcbiAgJHByZSAgICAgICAgICA6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3BhbigkcHJlKSk7XG5cbiAgQGlmICRwb3N0IHtcbiAgICAkcG9zdDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRwb3N0KSk7XG4gIH0gQGVsc2Uge1xuICAgICRzcGFuOiBzdXN5LWdldChzcGFuLCAkcHJlKTtcbiAgICBAaWYgbGVuZ3RoKCRzcGFuKSA+IDEge1xuICAgICAgJHByZTogbWFwLW1lcmdlKCRwcmUsIChzcGFuOiBudGgoJHNwYW4sIDEpKSk7XG4gICAgICAkcG9zdDogbWFwLW1lcmdlKCRwcmUsIChzcGFuOiBudGgoJHNwYW4sIDIpKSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkcG9zdDogJHByZTtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3Qoc3F1aXNoLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIHByZSgkcHJlKTtcbiAgQGluY2x1ZGUgcG9zdCgkcG9zdCk7XG59XG4iLCIvLyBQYWRkaW5nIFN5bnRheFxuLy8gPT09PT09PT09PT09PT1cblxuLy8gUHJlZml4XG4vLyAtLS0tLS1cbi8vIEFkZCBzcGFubmluZy1wYWRkaW5nIGJlZm9yZSBhbiBlbGVtZW50LlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBtaXhpbiBwcmVmaXgoXG4gICRzcGFuXG4pIHtcbiAgJGluc3BlY3QgIDogJHNwYW47XG4gICRzcGFuICAgICA6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3Bhbigkc3BhbikpO1xuICAkZmxvdyAgICAgOiBzdXN5LWdldChmbG93LCAkc3Bhbik7XG4gICR3aWR0aCAgICA6IHNwYW4oJHNwYW4pO1xuXG4gIEBpZiBpcy1pbnNpZGUoJHNwYW4pIHtcbiAgICAkZ3V0dGVyOiBndXR0ZXIoJHNwYW4pO1xuICAgICR3aWR0aDogaWYoJGd1dHRlciBhbmQgY29tcGFyYWJsZSgkd2lkdGgsICRndXR0ZXIpLCAkd2lkdGggKyAkZ3V0dGVyLCAkd2lkdGgpO1xuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHByZWZpeCwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBwYWRkaW5nLW91dHB1dCgkd2lkdGgsIG51bGwsICRmbG93KTtcbn1cblxuLy8gU3VmZml4XG4vLyAtLS0tLS1cbi8vIEFkZCBzcGFubmluZy1wYWRkaW5nIGFmdGVyIGFuIGVsZW1lbnQuXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQG1peGluIHN1ZmZpeChcbiAgJHNwYW5cbikge1xuICAkaW5zcGVjdCAgOiAkc3BhbjtcbiAgJHNwYW4gICAgIDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRzcGFuKSk7XG4gICRmbG93ICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKTtcbiAgJHdpZHRoICAgIDogc3Bhbigkc3Bhbik7XG5cbiAgQGlmIGlzLWluc2lkZSgkc3Bhbikge1xuICAgICRndXR0ZXI6IGd1dHRlcigkc3Bhbik7XG4gICAgJHdpZHRoOiBpZigkZ3V0dGVyIGFuZCBjb21wYXJhYmxlKCR3aWR0aCwgJGd1dHRlciksICR3aWR0aCArICRndXR0ZXIsICR3aWR0aCk7XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3Qoc3VmZml4LCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIHBhZGRpbmctb3V0cHV0KG51bGwsICR3aWR0aCwgJGZsb3cpO1xufVxuXG4vLyBQYWRcbi8vIC0tLVxuLy8gQWRkIHNwYW5uaW5nLXBhZGRpbmcgYmVmb3JlIGFuZCBhZnRlciBhbiBlbGVtZW50LlxuLy8gLSAkcHJlICAgICA6IDxzcGFuPlxuLy8gLSBbJHBvc3RdICA6IDxzcGFuPlxuQG1peGluIHBhZChcbiAgJHByZSxcbiAgJHBvc3Q6IGZhbHNlXG4pIHtcbiAgJGluc3BlY3QgIDogKCRwcmUsICRwb3N0KTtcbiAgJHByZSAgICAgIDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRwcmUpKTtcblxuICBAaWYgJHBvc3Qge1xuICAgICRwb3N0OiBtYXAtbWVyZ2UoKHNwcmVhZDogd2lkZSksIHBhcnNlLXNwYW4oJHBvc3QpKTtcbiAgfSBAZWxzZSB7XG4gICAgJHNwYW46IHN1c3ktZ2V0KHNwYW4sICRwcmUpO1xuICAgIEBpZiBsZW5ndGgoJHNwYW4pID4gMSB7XG4gICAgICAkcHJlOiBtYXAtbWVyZ2UoJHByZSwgKHNwYW46IG50aCgkc3BhbiwgMSkpKTtcbiAgICAgICRwb3N0OiBtYXAtbWVyZ2UoJHByZSwgKHNwYW46IG50aCgkc3BhbiwgMikpKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRwb3N0OiAkcHJlO1xuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChwYWQsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgcHJlZml4KCRwcmUpO1xuICBAaW5jbHVkZSBzdWZmaXgoJHBvc3QpO1xuXG59XG4iLCIvLyBCbGVlZCBTeW50YXhcbi8vID09PT09PT09PT09PVxuXG4vLyBCbGVlZFxuLy8gLS0tLS1cbi8vIEFkZCBuZWdhdGl2ZSBtYXJnaW5zLCBhbmQgZXF1YWwgcG9zaXRpdmUgcGFkZGluZyB0byBjcmVhdGUgYmxlZWQuXG4vLyAtICRibGVlZCAgOiA8c3Bhbj5cbkBtaXhpbiBibGVlZChcbiAgJGJsZWVkOiAwIGd1dHRlcigpXG4pIHtcbiAgJGluc3BlY3QgIDogJGJsZWVkO1xuICAkb3V0cHV0ICAgOiBnZXQtYmxlZWQoJGJsZWVkKTtcblxuICBAaWYgc3VzeS1nZXQoZ2xvYmFsLWJveC1zaXppbmcpICE9IGNvbnRlbnQtYm94IHtcbiAgICAkb3V0cHV0OiBtYXAtbWVyZ2UoKGJveC1zaXppbmc6IGNvbnRlbnQtYm94KSwgJG91dHB1dCk7XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoYmxlZWQsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuXG5cbi8vIEJsZWVkLXhcbi8vIC0tLS0tLS1cbi8vIFNob3J0Y3V0IGZvciBob3Jpem9udGFsIGJsZWVkLlxuLy8gLSAkYmxlZWQgIDogPHNwYW4+XG5AbWl4aW4gYmxlZWQteChcbiAgJGJsZWVkOiBndXR0ZXIoKVxuKSB7XG4gICRibGVlZCAgOiBwYXJzZS1zcGFuKCRibGVlZCk7XG4gICR0cmJsICAgOiBzdXN5LWdldChzcGFuLCAkYmxlZWQpO1xuXG4gIEBpZiBsZW5ndGgoJHRyYmwpID09IDEge1xuICAgICRibGVlZDogbWFwLW1lcmdlKCRibGVlZCwgKHNwYW46IDAgbnRoKCR0cmJsLCAxKSkpO1xuICB9IEBlbHNlIGlmIGxlbmd0aCgkdHJibCkgPT0gMiB7XG4gICAgJGJsZWVkOiBtYXAtbWVyZ2UoJGJsZWVkLCAoc3BhbjogMCBudGgoJHRyYmwsIDIpIDAgbnRoKCR0cmJsLCAxKSkpO1xuICB9IEBlbHNlIHtcbiAgICBAd2FybiAnYmxlZWQteCBvbmx5IHRha2VzIDIgbGVuZ3RocywgYnV0ICN7bGVuZ3RoKCR0cmJsKX0gd2VyZSBwYXNzZWQuJztcbiAgfVxuXG4gIEBpbmNsdWRlIGJsZWVkKCRibGVlZCk7XG59XG5cblxuLy8gQmxlZWQteVxuLy8gLS0tLS0tLVxuLy8gU2hvcnRjdXQgZm9yIHZlcnRpY2FsIGJsZWVkLlxuLy8gLSAkYmxlZWQgIDogPHNwYW4+XG5AbWl4aW4gYmxlZWQteShcbiAgJGJsZWVkOiBpZihmdW5jdGlvbi1leGlzdHMocmh5dGhtKSwgcmh5dGhtKDEpLCAxZW0pXG4pIHtcbiAgJGJsZWVkICA6IHBhcnNlLXNwYW4oJGJsZWVkKTtcbiAgJHRyYmwgICA6IHN1c3ktZ2V0KHNwYW4sICRibGVlZCk7XG5cbiAgQGlmIGxlbmd0aCgkdHJibCkgPT0gMSB7XG4gICAgJGJsZWVkOiBtYXAtbWVyZ2UoJGJsZWVkLCAoc3BhbjogbnRoKCR0cmJsLCAxKSAwKSk7XG4gIH0gQGVsc2UgaWYgbGVuZ3RoKCR0cmJsKSA9PSAyIHtcbiAgICAkYmxlZWQ6IG1hcC1tZXJnZSgkYmxlZWQsIChzcGFuOiBudGgoJHRyYmwsIDEpIDAgbnRoKCR0cmJsLCAyKSAwKSk7XG4gIH0gQGVsc2Uge1xuICAgIEB3YXJuICdibGVlZC15IG9ubHkgdGFrZXMgMiBsZW5ndGhzLCBidXQgI3tsZW5ndGgoJHRyYmwpfSB3ZXJlIHBhc3NlZC4nO1xuICB9XG5cbiAgQGluY2x1ZGUgYmxlZWQoJGJsZWVkKTtcbn1cblxuXG4vLyBHZXQgQmxlZWRcbi8vIC0tLS0tLS0tLVxuLy8gUmV0dXJuIGJsZWVkIG91dHB1dCB2YWx1ZXNcbi8vIC0gJGJsZWVkOiA8c3Bhbj5cbkBmdW5jdGlvbiBnZXQtYmxlZWQoXG4gICRibGVlZFxuKSB7XG4gICRibGVlZCAgICA6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3BhbigkYmxlZWQpKTtcbiAgJHRyYmwgICAgIDogc3VzeS1nZXQoc3BhbiwgJGJsZWVkKTtcbiAgJHNob3J0ICAgIDogbnVsbDtcbiAgJG91dHB1dCAgIDogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHRyYmwpIHtcbiAgICAkdGhpczogbnRoKCR0cmJsLCAkaSk7XG4gICAgJG5ldzogKCk7XG4gICAgJG1hcmdpbjogbnVsbDtcbiAgICAkcGFkZGluZzogbnVsbDtcbiAgICAkcGFkZGluZy14OiBudWxsO1xuXG4gICAgQGlmICR0aGlzID4gMCB7XG4gICAgICAkdGhpczogbWFwLW1lcmdlKCRibGVlZCwgKHNwYW46ICR0aGlzKSk7XG4gICAgICAkbWFyZ2luOiBzcGFuKCR0aGlzKTtcbiAgICAgICRwYWRkaW5nOiAkbWFyZ2luO1xuICAgICAgJHBhZGRpbmcteDogJHBhZGRpbmc7XG4gICAgfVxuXG4gICAgQGlmICRtYXJnaW4gYW5kICRtYXJnaW4gPiAwIHtcbiAgICAgICRtYXJnaW46IC0gJG1hcmdpbjtcblxuICAgICAgQGlmIGlzLWluc2lkZSgkdGhpcykge1xuICAgICAgICAkZ3V0dGVyOiBndXR0ZXIoJHRoaXMpO1xuICAgICAgICAkam9pbjogaWYoJGd1dHRlciBhbmQgY29tcGFyYWJsZSgkcGFkZGluZywgJGd1dHRlciksIHRydWUsIGZhbHNlKTtcbiAgICAgICAgJHBhZGRpbmcteDogaWYoJGpvaW4gYW5kICRwYWRkaW5nID4gMCwgJHBhZGRpbmcgKyAkZ3V0dGVyLCAkcGFkZGluZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmICRpID09IDEge1xuICAgICAgJG5ldzogKFxuICAgICAgICBtYXJnaW4tdG9wOiAkbWFyZ2luLFxuICAgICAgICBwYWRkaW5nLXRvcDogJHBhZGRpbmcsXG4gICAgICAgIG1hcmdpbi1yaWdodDogJG1hcmdpbixcbiAgICAgICAgcGFkZGluZy1yaWdodDogJHBhZGRpbmcteCxcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbixcbiAgICAgICAgcGFkZGluZy1ib3R0b206ICRwYWRkaW5nLFxuICAgICAgICBtYXJnaW4tbGVmdDogJG1hcmdpbixcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAkcGFkZGluZy14LFxuICAgICAgKTtcbiAgICB9IEBlbHNlIGlmICRpID09IDIge1xuICAgICAgJG5ldzogKFxuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRtYXJnaW4sXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nLXgsXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkbWFyZ2luLFxuICAgICAgICBwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLXgsXG4gICAgICApO1xuICAgIH0gQGVsc2UgaWYgJGkgPT0gMyB7XG4gICAgICAkbmV3OiAoXG4gICAgICAgIG1hcmdpbi1ib3R0b206ICRtYXJnaW4sXG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAkcGFkZGluZyxcbiAgICAgICk7XG4gICAgfSBAZWxzZSBpZiAkaSA9PSA0IHtcbiAgICAgICRuZXc6IChcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRtYXJnaW4sXG4gICAgICAgIHBhZGRpbmctbGVmdDogJHBhZGRpbmcteCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgJG91dHB1dDogbWFwLW1lcmdlKCRvdXRwdXQsICRuZXcpO1xuICB9XG5cbiAgQGVhY2ggJHByb3AsICR2YWx1ZSBpbiAkb3V0cHV0IHtcbiAgICAkb3V0cHV0OiBpZigkdmFsdWUgPT0gMCwgbWFwLW1lcmdlKCRvdXRwdXQsICgkcHJvcDogbnVsbCkpLCAkb3V0cHV0KTtcbiAgfVxuXG4gIEByZXR1cm4gYmxlZWQtc2hvcnRoYW5kKCRvdXRwdXQpO1xufVxuXG4vLyBCbGVlZCBTaG9ydGhhbmRcbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gQ29udmVydCBibGVlZCBvdXRwdXQgaW50byBzaG9ydGhhbmQgd2hlbiBwb3NzaWJsZS5cbi8vIC0gJGJsZWVkOiA8b3V0cHV0IG1hcD5cbkBmdW5jdGlvbiBibGVlZC1zaG9ydGhhbmQoXG4gICRibGVlZFxuKSB7XG4gICRtYXJnaW46ICgpO1xuICAkcGFkZGluZzogKCk7XG4gICRyZXR1cm46ICgpO1xuXG4gIEBlYWNoICRrZXksICR2YWx1ZSBpbiAkYmxlZWQge1xuICAgIEBpZiBzdHItaW5kZXgoJGtleSwgbWFyZ2luKSB7XG4gICAgICAkbWFyZ2luOiBtYXAtbWVyZ2UoJG1hcmdpbiwgKCRrZXk6ICR2YWx1ZSkpO1xuICAgIH0gQGVsc2UgaWYgc3RyLWluZGV4KCRrZXksIHBhZGRpbmcpID4gMCB7XG4gICAgICAkcGFkZGluZzogbWFwLW1lcmdlKCRwYWRkaW5nLCAoJGtleTogJHZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgJHByb3BzOiAoXG4gICAgbWFyZ2luOiAkbWFyZ2luLFxuICAgIHBhZGRpbmc6ICRwYWRkaW5nLFxuICApO1xuXG4gIEBlYWNoICRuYW1lLCAkbWFwIGluICRwcm9wcyB7XG4gICAgJGZvdXI6IGlmKGxlbmd0aChtYXAta2V5cygkbWFwKSkgPT0gNCwgdHJ1ZSwgZmFsc2UpO1xuICAgICRudWxsOiBpZihpbmRleChtYXAtdmFsdWVzKCRtYXApLCBudWxsKSwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgQGlmICRmb3VyIGFuZCBub3QoJG51bGwpIHtcbiAgICAgICR0b3A6IG1hcC1nZXQoJG1hcCwgJyN7JG5hbWV9LXRvcCcpO1xuICAgICAgJHJpZ2h0OiBtYXAtZ2V0KCRtYXAsICcjeyRuYW1lfS1yaWdodCcpO1xuICAgICAgJGJvdHRvbTogbWFwLWdldCgkbWFwLCAnI3skbmFtZX0tYm90dG9tJyk7XG4gICAgICAkbGVmdDogbWFwLWdldCgkbWFwLCAnI3skbmFtZX0tbGVmdCcpO1xuXG4gICAgICAkdGI6IGlmKCR0b3AgPT0gJGJvdHRvbSwgJHRvcCwgbnVsbCk7XG4gICAgICAkcmw6IGlmKCRyaWdodCA9PSAkbGVmdCwgJHJpZ2h0LCBudWxsKTtcbiAgICAgICRhbGw6IGlmKCR0YiA9PSAkcmwsICR0YiwgbnVsbCk7XG5cbiAgICAgICRuZXc6IGlmKCRhbGwsICRhbGwsIG51bGwpO1xuXG4gICAgICBAaWYgbm90KCRuZXcpIHtcbiAgICAgICAgQGlmICR0YiBhbmQgJHJsIHtcbiAgICAgICAgICAkbmV3OiAkdGIgJHJsO1xuICAgICAgICB9IEBlbHNlIGlmICRybCB7XG4gICAgICAgICAgJG5ldzogJHRvcCAkcmwgJGJvdHRvbTtcbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgJG5ldzogJHRvcCAkcmlnaHQgJGJvdHRvbSAkbGVmdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAkcmV0dXJuOiBtYXAtbWVyZ2UoJHJldHVybiwgKCRuYW1lOiAkbmV3KSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkcmV0dXJuOiBtYXAtbWVyZ2UoJHJldHVybiwgJG1hcCk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuIiwiLy8gQnJlYWtwb2ludCBJbnRlZ3JhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PVxuXG4kc3VzeS1tZWRpYTogKCkgIWRlZmF1bHQ7XG4kc3VzeS1tZWRpYS1mYWxsYmFjazogZmFsc2UgIWRlZmF1bHQ7XG5cbiRfc3VzeS1tZWRpYS1jb250ZXh0OiAoKTtcblxuXG4vLyBTdXN5IEJyZWFrcG9pbnRcbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hhbmdlIGdyaWRzIGF0IGRpZmZlcmVudCBtZWRpYSBxdWVyeSBicmVha3BvaW50cy5cbi8vIC0gJHF1ZXJ5ICAgICA6IDxtaW4td2lkdGg+IFs8bWF4LXdpZHRoPl0gfCA8cHJvcGVydHk+IDx2YWx1ZT4gfCA8bWFwPlxuLy8gLSAkbGF5b3V0ICAgIDogPHNldHRpbmdzPlxuLy8gLSAkbm8tcXVlcnkgIDogPGJvb2xlYW4+IHwgPHNlbGVjdG9yPlxuQG1peGluIHN1c3ktYnJlYWtwb2ludChcbiAgJHF1ZXJ5LFxuICAkbGF5b3V0OiBmYWxzZSxcbiAgJG5vLXF1ZXJ5OiAkc3VzeS1tZWRpYS1mYWxsYmFja1xuKSB7XG4gIEBpbmNsdWRlIHN1c3ktbWVkaWEtcm91dGVyKCRxdWVyeSwgJG5vLXF1ZXJ5KSB7XG4gICAgQGlmICRsYXlvdXQge1xuICAgICAgQGluY2x1ZGUgd2l0aC1sYXlvdXQoJGxheW91dCkge1xuICAgICAgICBAY29udGVudDtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFN1c3kgTWVkaWFcbi8vIC0tLS0tLS0tLS1cbi8vIC0gJHF1ZXJ5OiA8bWluLXdpZHRoPiBbPG1heC13aWR0aD5dIHwgPHByb3BlcnR5PiA8dmFsdWU+XG4vLyAtICRuby1xdWVyeTogPGJvb2xlYW4+IHwgPHNlbGVjdG9yPlxuQG1peGluIHN1c3ktbWVkaWEoXG4gICRxdWVyeSxcbiAgJG5vLXF1ZXJ5OiAkc3VzeS1tZWRpYS1mYWxsYmFja1xuKSB7XG4gICRvbGQtY29udGV4dDogJF9zdXN5LW1lZGlhLWNvbnRleHQ7XG4gICRuYW1lOiBpZihtYXAtaGFzLWtleSgkc3VzeS1tZWRpYSwgJHF1ZXJ5KSwgJHF1ZXJ5LCBudWxsKTtcbiAgJHF1ZXJ5OiBzdXN5LWdldC1tZWRpYSgkcXVlcnkpO1xuICAkcXVlcnk6IHN1c3ktcGFyc2UtbWVkaWEoJHF1ZXJ5KTtcblxuICBAaW5jbHVkZSBzdXN5LW1lZGlhLWNvbnRleHQoJHF1ZXJ5LCAkbmFtZSk7XG5cbiAgQGlmICRuby1xdWVyeSBhbmQgdHlwZS1vZigkbm8tcXVlcnkpICE9IHN0cmluZyB7XG4gICAgQGNvbnRlbnQ7XG4gIH0gQGVsc2Uge1xuICAgIEBtZWRpYSAje3N1c3ktcmVuZGVyLW1lZGlhKCRxdWVyeSl9IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cblxuICAgIEBpZiB0eXBlLW9mKCRuby1xdWVyeSkgPT0gc3RyaW5nIHtcbiAgICAgICN7JG5vLXF1ZXJ5fSAmIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1tZWRpYS1jb250ZXh0KCRvbGQtY29udGV4dCwgJGNsZWFuOiB0cnVlKTtcbn1cblxuXG4vLyBNZWRpYSBSb3V0ZXJcbi8vIC0tLS0tLS0tLS0tLVxuLy8gUm91dCBtZWRpYSBhcmd1bWVudHMgdG8gdGhlIGNvcnJlY3QgbWl4aW4uXG5AbWl4aW4gc3VzeS1tZWRpYS1yb3V0ZXIoXG4gICRxdWVyeSxcbiAgJG5vLXF1ZXJ5OiAkc3VzeS1tZWRpYS1mYWxsYmFja1xuKSB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoYnJlYWtwb2ludCwgKG1peGluOiBicmVha3BvaW50KSwgJHdhcm46IGZhbHNlKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkcXVlcnksICRuby1xdWVyeSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAaW5jbHVkZSBzdXN5LW1lZGlhKCRxdWVyeSwgJG5vLXF1ZXJ5KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBVcGRhdGUgQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gU2V0IHRoZSBuZXcgbWVkaWEgY29udGV4dFxuQG1peGluIHN1c3ktbWVkaWEtY29udGV4dChcbiAgJHF1ZXJ5LFxuICAkbmFtZTogbnVsbCxcbiAgJGNsZWFuOiBmYWxzZVxuKSB7XG4gICRxdWVyeTogbWFwLW1lcmdlKChuYW1lOiAkbmFtZSksICRxdWVyeSk7XG5cbiAgQGlmICRjbGVhbiB7XG4gICAgJF9zdXN5LW1lZGlhLWNvbnRleHQ6ICRxdWVyeSAhZ2xvYmFsO1xuICB9IEBlbHNlIHtcbiAgICAkX3N1c3ktbWVkaWEtY29udGV4dDogbWFwLW1lcmdlKCRfc3VzeS1tZWRpYS1jb250ZXh0LCAkcXVlcnkpICFnbG9iYWw7XG4gIH1cbn1cblxuXG4vLyBNZWRpYSBDb250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlIGZ1bGwgbWVkaWEgY29udGV4dCwgb3IgYSBzaW5nbGUgbWVkaWEgcHJvcGVydHkgKGUuZy4gbWluLXdpZHRoKVxuQGZ1bmN0aW9uIHN1c3ktbWVkaWEtY29udGV4dChcbiAgJHByb3BlcnR5OiBmYWxzZVxuKSB7XG4gIEBpZiAkcHJvcGVydHkge1xuICAgIEByZXR1cm4gbWFwLWdldCgkX3N1c3ktbWVkaWEtY29udGV4dCwgJHByb3BlcnR5KTtcbiAgfSBAZWxzZSB7XG4gICAgQHJldHVybiAkX3N1c3ktbWVkaWEtY29udGV4dDtcbiAgfVxufVxuXG5cbi8vIEdldCBNZWRpYVxuLy8gLS0tLS0tLS0tXG4vLyBSZXR1cm4gYSBuYW1lZCBtZWRpYS1xdWVyeSBmcm9tICRzdXN5LW1lZGlhLlxuLy8gLSAkbmFtZTogPGtleT5cbkBmdW5jdGlvbiBzdXN5LWdldC1tZWRpYShcbiAgJG5hbWVcbikge1xuICBAaWYgbWFwLWhhcy1rZXkoJHN1c3ktbWVkaWEsICRuYW1lKSB7XG4gICAgJG1hcC12YWx1ZTogbWFwLWdldCgkc3VzeS1tZWRpYSwgJG5hbWUpO1xuICAgIEBpZiAoJG5hbWUgPT0gJG1hcC12YWx1ZSkge1xuICAgICAgJG5hbWU6ICRtYXAtdmFsdWU7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbmFtZTogc3VzeS1nZXQtbWVkaWEoJG1hcC12YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkbmFtZTtcbn1cblxuXG4vLyBSZW5kZXIgTWVkaWFcbi8vIC0tLS0tLS0tLS0tLVxuLy8gQnVpbGQgYSBtZWRpYS1xdWVyeSBzdHJpbmcgZnJvbSB2YXJpb3VzIG1lZGlhIHNldHRpbmdzXG5AZnVuY3Rpb24gc3VzeS1yZW5kZXItbWVkaWEoXG4gICRxdWVyeVxuKSB7XG4gICRvdXRwdXQ6IG51bGw7XG4gIEBlYWNoICRwcm9wZXJ0eSwgJHZhbHVlIGluICRxdWVyeSB7XG4gICAgJHN0cmluZzogbnVsbDtcblxuICAgIEBpZiAkcHJvcGVydHkgPT0gbWVkaWEge1xuICAgICAgJHN0cmluZzogJHZhbHVlO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHN0cmluZzogJygjeyRwcm9wZXJ0eX06ICN7JHZhbHVlfSknO1xuICAgIH1cblxuICAgICRvdXRwdXQ6IGlmKCRvdXRwdXQsICcjeyRvdXRwdXR9IGFuZCAjeyRzdHJpbmd9JywgJHN0cmluZyk7XG4gIH1cblxuICBAcmV0dXJuICRvdXRwdXQ7XG59XG5cblxuLy8gUGFyc2UgTWVkaWFcbi8vIC0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gcGFyc2VkIG1lZGlhLXF1ZXJ5IHNldHRpbmdzIGJhc2VkIG9uIHNob3J0aGFuZFxuQGZ1bmN0aW9uIHN1c3ktcGFyc2UtbWVkaWEoXG4gICRxdWVyeVxuKSB7XG4gICRtcTogbnVsbDtcbiAgQGlmIHR5cGUtb2YoJHF1ZXJ5KSA9PSBtYXAge1xuICAgICRtcTogJHF1ZXJ5O1xuICB9IEBlbHNlIGlmIHR5cGUtb2YoJHF1ZXJ5KSA9PSBudW1iZXIge1xuICAgICRtcTogKG1pbi13aWR0aDogJHF1ZXJ5KTtcbiAgfSBAZWxzZSBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gbGlzdCBhbmQgbGVuZ3RoKCRxdWVyeSkgPT0gMiB7XG4gICAgQGlmIHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09IG51bWJlciB7XG4gICAgICAkbXE6IChcbiAgICAgICAgbWluLXdpZHRoOiBtaW4oJHF1ZXJ5Li4uKSxcbiAgICAgICAgbWF4LXdpZHRoOiBtYXgoJHF1ZXJ5Li4uKSxcbiAgICAgICk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbXE6IChudGgoJHF1ZXJ5LCAxKTogbnRoKCRxdWVyeSwgMikpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgJG1xOiAobWVkaWE6ICcjeyRxdWVyeX0nKTtcbiAgfVxuXG4gIEByZXR1cm4gJG1xO1xufVxuIiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBEZWZhdWx0IFZhcmlhYmxlc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4kQnJlYWtwb2ludC1TZXR0aW5nczogKFxuICAnZGVmYXVsdCBtZWRpYSc6IGFsbCxcbiAgJ2RlZmF1bHQgZmVhdHVyZSc6IG1pbi13aWR0aCxcbiAgJ2RlZmF1bHQgcGFpcic6IHdpZHRoLFxuXG4gICdmb3JjZSBhbGwgbWVkaWEgdHlwZSc6IGZhbHNlLFxuICAndG8gZW1zJzogZmFsc2UsXG4gICd0cmFuc2Zvcm0gcmVzb2x1dGlvbnMnOiB0cnVlLFxuXG4gICdubyBxdWVyaWVzJzogZmFsc2UsXG4gICdubyBxdWVyeSBmYWxsYmFja3MnOiBmYWxzZSxcblxuICAnYmFzZSBmb250IHNpemUnOiAxNnB4LFxuXG4gICdsZWdhY3kgc3ludGF4JzogZmFsc2Vcbik7XG5cbiRicmVha3BvaW50OiAoKSAhZGVmYXVsdDtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBJbXBvcnRzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBpbXBvcnQgXCJicmVha3BvaW50L3NldHRpbmdzXCI7XG5AaW1wb3J0ICdicmVha3BvaW50L2NvbnRleHQnO1xuQGltcG9ydCAnYnJlYWtwb2ludC9oZWxwZXJzJztcbkBpbXBvcnQgJ2JyZWFrcG9pbnQvcGFyc2Vycyc7XG5AaW1wb3J0ICdicmVha3BvaW50L25vLXF1ZXJ5JztcblxuQGltcG9ydCAnYnJlYWtwb2ludC9yZXNwb25kLXRvJztcblxuQGltcG9ydCBcImJyZWFrcG9pbnQvbGVnYWN5LXNldHRpbmdzXCI7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQnJlYWtwb2ludCBNaXhpblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbkBtaXhpbiBicmVha3BvaW50KCRxdWVyeSwgJG5vLXF1ZXJ5OiBmYWxzZSkge1xuICBAaW5jbHVkZSBsZWdhY3ktc2V0dGluZ3Mtd2FybmluZztcblxuICAvLyBSZXNldCBjb250ZXh0c1xuICBAaW5jbHVkZSBwcml2YXRlLWJyZWFrcG9pbnQtcmVzZXQtY29udGV4dHMoKTtcblxuICAkYnJlYWtwb2ludDogYnJlYWtwb2ludCgkcXVlcnksIGZhbHNlKTtcblxuICAkcXVlcnktc3RyaW5nOiBtYXAtZ2V0KCRicmVha3BvaW50LCAncXVlcnknKTtcbiAgJHF1ZXJ5LWZhbGxiYWNrOiBtYXAtZ2V0KCRicmVha3BvaW50LCAnZmFsbGJhY2snKTtcblxuICAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiBtYXAtZ2V0KCRicmVha3BvaW50LCAnY29udGV4dCBob2xkZXInKSAhZ2xvYmFsO1xuICAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50OiBtYXAtZ2V0KCRicmVha3BvaW50LCAncXVlcnkgY291bnQnKSAhZ2xvYmFsO1xuXG4gIC8vIEFsbG93IGZvciBhbiBhcy1uZWVkZWQgb3ZlcnJpZGUgb3IgdXNhZ2Ugb2Ygbm8gcXVlcnkgZmFsbGJhY2suXG4gIEBpZiAkbm8tcXVlcnkgIT0gZmFsc2Uge1xuICAgICRxdWVyeS1mYWxsYmFjazogJG5vLXF1ZXJ5O1xuICB9XG5cbiAgQGlmICRxdWVyeS1mYWxsYmFjayAhPSBmYWxzZSB7XG4gICAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQoJ25vLXF1ZXJ5JywgJHF1ZXJ5LWZhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFByaW50IE91dCBRdWVyeSBTdHJpbmdcbiAgQGlmIG5vdCBicmVha3BvaW50LWdldCgnbm8gcXVlcmllcycpIHtcbiAgICBAbWVkaWEgI3skcXVlcnktc3RyaW5nfSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cblxuICBAaWYgYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJ5IGZhbGxiYWNrcycpICE9IGZhbHNlIG9yIGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyaWVzJykgPT0gdHJ1ZSB7XG5cbiAgICAkdHlwZTogdHlwZS1vZihicmVha3BvaW50LWdldCgnbm8gcXVlcnkgZmFsbGJhY2tzJykpO1xuICAgICRwcmludDogZmFsc2U7XG5cbiAgICBAaWYgKCR0eXBlID09ICdib29sJykge1xuICAgICAgJHByaW50OiB0cnVlO1xuICAgIH1cbiAgICBAZWxzZSBpZiAoJHR5cGUgPT0gJ3N0cmluZycpIHtcbiAgICAgIEBpZiAkcXVlcnktZmFsbGJhY2sgPT0gYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJ5IGZhbGxiYWNrcycpIHtcbiAgICAgICAgJHByaW50OiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSBpZiAoJHR5cGUgPT0gJ2xpc3QnKSB7XG4gICAgICBAZWFjaCAkd3JhcHBlciBpbiBicmVha3BvaW50LWdldCgnbm8gcXVlcnkgZmFsbGJhY2tzJykge1xuICAgICAgICBAaWYgJHF1ZXJ5LWZhbGxiYWNrID09ICR3cmFwcGVyIHtcbiAgICAgICAgICAkcHJpbnQ6IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXcml0ZSBGYWxsYmFja1xuICAgIEBpZiAoJHF1ZXJ5LWZhbGxiYWNrICE9IGZhbHNlKSBhbmQgKCRwcmludCA9PSB0cnVlKSB7XG4gICAgICAkdHlwZS1mYWxsYmFjazogdHlwZS1vZigkcXVlcnktZmFsbGJhY2spO1xuXG4gICAgICBAaWYgKCR0eXBlLWZhbGxiYWNrICE9ICdib29sJykge1xuICAgICAgICAjeyRxdWVyeS1mYWxsYmFja30gJiB7XG4gICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgcHJpdmF0ZS1icmVha3BvaW50LXJlc2V0LWNvbnRleHRzKCk7XG59XG5cblxuQG1peGluIG1xKCRxdWVyeSwgJG5vLXF1ZXJ5OiBmYWxzZSkge1xuICBAaW5jbHVkZSBicmVha3BvaW50KCRxdWVyeSwgJG5vLXF1ZXJ5KSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gSGFzIFNldHRpbmdcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtaGFzKCRzZXR0aW5nKSB7XG4gIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludCwgJHNldHRpbmcpIHtcbiAgICBAcmV0dXJuIHRydWU7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBHZXQgU2V0dGluZ3Ncbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtZ2V0KCRzZXR0aW5nKSB7XG4gIEBpZiBicmVha3BvaW50LWhhcygkc2V0dGluZykge1xuICAgIEByZXR1cm4gbWFwLWdldCgkYnJlYWtwb2ludCwgJHNldHRpbmcpO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJEJyZWFrcG9pbnQtU2V0dGluZ3MsICRzZXR0aW5nKTtcbiAgfVxufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFNldCBTZXR0aW5nc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1zZXQoJHNldHRpbmcsICR2YWx1ZSkge1xuICBAaWYgKHN0ci1pbmRleCgkc2V0dGluZywgJy0nKSBvciBzdHItaW5kZXgoJHNldHRpbmcsICdfJykpIGFuZCBzdHItaW5kZXgoJHNldHRpbmcsICcgJykgPT0gbnVsbCB7XG4gICAgQHdhcm4gXCJXb3JkcyBpbiBCcmVha3BvaW50IHNldHRpbmdzIHNob3VsZCBiZSBzZXBhcmF0ZWQgYnkgc3BhY2VzLCBub3QgZGFzaGVzIG9yIHVuZGVyc2NvcmVzLiBQbGVhc2UgcmVwbGFjZSBkYXNoZXMgYW5kIHVuZGVyc2NvcmVzIGJldHdlZW4gd29yZHMgd2l0aCBzcGFjZXMuIFNldHRpbmdzIHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgdW50aWwgY2hhbmdlZC5cIjtcbiAgfVxuICAkYnJlYWtwb2ludDogbWFwLW1lcmdlKCRicmVha3BvaW50LCAoJHNldHRpbmc6ICR2YWx1ZSkpICFnbG9iYWw7XG4gIEByZXR1cm4gdHJ1ZTtcbn1cblxuQG1peGluIGJyZWFrcG9pbnQtY2hhbmdlKCRzZXR0aW5nLCAkdmFsdWUpIHtcbiAgJGJyZWFrcG9pbnQtY2hhbmdlOiBicmVha3BvaW50LXNldCgkc2V0dGluZywgJHZhbHVlKTtcbn1cblxuQG1peGluIGJyZWFrcG9pbnQtc2V0KCRzZXR0aW5nLCAkdmFsdWUpIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludC1jaGFuZ2UoJHNldHRpbmcsICR2YWx1ZSk7XG59XG5cbkBtaXhpbiBia3B0LWNoYW5nZSgkc2V0dGluZywgJHZhbHVlKSB7XG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQtY2hhbmdlKCRzZXR0aW5nLCAkdmFsdWUpO1xufVxuQG1peGluIGJrcHQtc2V0KCRzZXR0aW5nLCAkdmFsdWUpIHtcbiAgQGluY2x1ZGUgYnJlYWtwb2ludC1jaGFuZ2UoJHNldHRpbmcsICR2YWx1ZSk7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUmVtb3ZlIFNldHRpbmdcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcmVzZXQoJHNldHRpbmdzLi4uKSB7XG4gIEBpZiBsZW5ndGgoJHNldHRpbmdzKSA9PSAxIHtcbiAgICAkc2V0dGluZ3M6IG50aCgkc2V0dGluZ3MsIDEpO1xuICB9XG5cbiAgQGVhY2ggJHNldHRpbmcgaW4gJHNldHRpbmdzIHtcbiAgICAkYnJlYWtwb2ludDogbWFwLXJlbW92ZSgkYnJlYWtwb2ludCwgJHNldHRpbmcpICFnbG9iYWw7XG4gIH1cbiAgQHJldHVybiB0cnVlO1xufVxuXG5AbWl4aW4gYnJlYWtwb2ludC1yZXNldCgkc2V0dGluZ3MuLi4pIHtcbiAgJGJyZWFrcG9pbnQtcmVzZXQ6IGJyZWFrcG9pbnQtcmVzZXQoJHNldHRpbmdzKTtcbn1cblxuQG1peGluIGJrcHQtcmVzZXQoJHNldHRpbmdzLi4uKSB7XG4gICRicmVha3BvaW50LXJlc2V0OiBicmVha3BvaW50LXJlc2V0KCRzZXR0aW5ncyk7XG59IiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBQcml2YXRlIEJyZWFrcG9pbnQgVmFyaWFibGVzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6ICgpO1xuJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudDogMCAhZGVmYXVsdDtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBCcmVha3BvaW50IEhhcyBDb250ZXh0XG4vLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHlvdSBhcmUgaW5zaWRlIGEgQnJlYWtwb2ludCBxdWVyeVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1oYXMtY29udGV4dCgpIHtcbiAgQGlmIGxlbmd0aCgkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50KSB7XG4gICAgQHJldHVybiB0cnVlO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQnJlYWtwb2ludCBHZXQgQ29udGV4dFxuLy8gJGZlYXR1cmU6IElucHV0IGZlYXR1cmUgdG8gZ2V0IGl0J3MgY3VycmVudCBNUSBjb250ZXh0LiBSZXR1cm5zIGZhbHNlIGlmIG5vIGNvbnRleHRcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtZ2V0LWNvbnRleHQoJGZlYXR1cmUpIHtcbiAgQGlmIG1hcC1oYXMta2V5KCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICRmZWF0dXJlKSB7XG4gICAgJGdldDogbWFwLWdldCgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAkZmVhdHVyZSk7XG4gICAgLy8gU3BlY2lhbCBoYW5kbGluZyBvZiBuby1xdWVyeSBmcm9tIGdldCBzaWRlIHNvIC9mYWxzZS8gcHJlcGVuZHMgYXJlbid0IHJldHVybmVkXG4gICAgQGlmICRmZWF0dXJlID09ICduby1xdWVyeScge1xuICAgICAgQGlmIHR5cGUtb2YoJGdldCkgPT0gJ2xpc3QnIGFuZCBsZW5ndGgoJGdldCkgPiAxIGFuZCBudGgoJGdldCwgMSkgPT0gZmFsc2Uge1xuICAgICAgICAkZ2V0OiBudGgoJGdldCwgbGVuZ3RoKCRnZXQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQHJldHVybiAkZ2V0O1xuICB9XG4gIEBlbHNlIHtcbiAgICBAaWYgYnJlYWtwb2ludC1oYXMtY29udGV4dCgpIGFuZCAkZmVhdHVyZSA9PSAnbWVkaWEnIHtcbiAgICAgIEByZXR1cm4gYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBQcml2YXRlIGZ1bmN0aW9uIHRvIHNldCBjb250ZXh0XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBmdW5jdGlvbiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQoJGZlYXR1cmUsICR2YWx1ZSkge1xuICBAaWYgJHZhbHVlID09ICdtb25vY2hyb21lJyB7XG4gICAgJGZlYXR1cmU6ICdtb25vY2hyb21lJztcbiAgfVxuXG4gICRjdXJyZW50OiBtYXAtZ2V0KCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICRmZWF0dXJlKTtcbiAgQGlmICRjdXJyZW50IGFuZCBsZW5ndGgoJGN1cnJlbnQpID09ICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQge1xuICAgIEB3YXJuIFwiWW91IGhhdmUgYWxyZWFkeSBxdWVyaWVkIGFnYWluc3QgYCN7JGZlYXR1cmV9YC4gVW5leHBlY3RlZCB0aGluZ3MgbWF5IGhhcHBlbiBpZiB5b3UgcXVlcnkgYWdhaW5zdCB0aGUgc2FtZSBmZWF0dXJlIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIGBhbmRgIHF1ZXJ5LiBCcmVha3BvaW50IGlzIG92ZXJ3cml0aW5nIHRoZSBjdXJyZW50IGNvbnRleHQgd2l0aCBgI3skdmFsdWV9YFwiO1xuICB9XG5cbiAgQGlmIG5vdCBtYXAtaGFzLWtleSgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAkZmVhdHVyZSkge1xuICAgICR2LWhvbGRlcjogKCk7XG4gICAgQGZvciAkaSBmcm9tIDEgdG8gJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudCB7XG4gICAgICBAaWYgJGZlYXR1cmUgPT0gJ21lZGlhJyB7XG4gICAgICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKSk7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICAkdi1ob2xkZXI6IGFwcGVuZCgkdi1ob2xkZXIsICR2YWx1ZSk7XG4gICAgJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjogbWFwLW1lcmdlKCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICgkZmVhdHVyZTogJHYtaG9sZGVyKSkgIWdsb2JhbDtcbiAgfVxuICBAZWxzZSB7XG4gICAgJHYtaG9sZGVyOiBtYXAtZ2V0KCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICRmZWF0dXJlKTtcbiAgICAkbGVuZ3RoOiBsZW5ndGgoJHYtaG9sZGVyKTtcbiAgICBAZm9yICRpIGZyb20gJGxlbmd0aCB0byAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50IC0gMSB7XG4gICAgICBAaWYgJGZlYXR1cmUgPT0gJ21lZGlhJyB7XG4gICAgICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKSk7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICAkdi1ob2xkZXI6IGFwcGVuZCgkdi1ob2xkZXIsICR2YWx1ZSk7XG4gICAgJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjogbWFwLW1lcmdlKCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICgkZmVhdHVyZTogJHYtaG9sZGVyKSkgIWdsb2JhbDtcbiAgfVxuXG4gIEByZXR1cm4gdHJ1ZTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBQcml2YXRlIGZ1bmN0aW9uIHRvIHJlc2V0IGNvbnRleHRcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQG1peGluIHByaXZhdGUtYnJlYWtwb2ludC1yZXNldC1jb250ZXh0cyB7XG4gICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6ICgpICFnbG9iYWw7XG4gICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQ6IDAgIWdsb2JhbDtcbn0iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIENvbnZlcnRzIHRoZSBpbnB1dCB2YWx1ZSB0byBCYXNlIEVNc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AZnVuY3Rpb24gYnJlYWtwb2ludC10by1iYXNlLWVtKCR2YWx1ZSkge1xuICAkdmFsdWUtdW5pdDogdW5pdCgkdmFsdWUpO1xuXG4gIC8vIFdpbGwgY29udmVydCByZWxhdGl2ZSBFTXMgaW50byByb290IEVNcy5cbiAgQGlmIGJyZWFrcG9pbnQtZ2V0KCdiYXNlIGZvbnQgc2l6ZScpIGFuZCB0eXBlLW9mKGJyZWFrcG9pbnQtZ2V0KCdiYXNlIGZvbnQgc2l6ZScpKSA9PSAnbnVtYmVyJyBhbmQgJHZhbHVlLXVuaXQgPT0gJ2VtJyB7XG4gICAgJGJhc2UtdW5pdDogdW5pdChicmVha3BvaW50LWdldCgnYmFzZSBmb250IHNpemUnKSk7XG5cbiAgICBAaWYgJGJhc2UtdW5pdCA9PSAncHgnIG9yICRiYXNlLXVuaXQgPT0gJyUnIG9yICRiYXNlLXVuaXQgPT0gJ2VtJyBvciAkYmFzZS11bml0ID09ICdwdCcge1xuICAgICAgQHJldHVybiBiYXNlLWNvbnZlcnNpb24oJHZhbHVlKSAvIGJhc2UtY29udmVyc2lvbihicmVha3BvaW50LWdldCgnYmFzZSBmb250IHNpemUnKSkgKiAxZW07XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEB3YXJuICcje2JyZWFrcG9pbnQtZ2V0KFxcJ2Jhc2UgZm9udCBzaXplXFwnKX0gaXMgbm90IHNldCBpbiB2YWxpZCB1bml0cyBmb3IgZm9udCBzaXplISc7XG4gICAgICBAcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBAZWxzZSB7XG4gICAgQHJldHVybiBiYXNlLWNvbnZlcnNpb24oJHZhbHVlKTtcbiAgfVxufVxuXG5AZnVuY3Rpb24gYmFzZS1jb252ZXJzaW9uKCR2YWx1ZSkge1xuICAkdW5pdDogdW5pdCgkdmFsdWUpO1xuXG4gIEBpZiAkdW5pdCA9PSAncHgnIHtcbiAgICBAcmV0dXJuICR2YWx1ZSAvIDE2cHggKiAxZW07XG4gIH1cbiAgQGVsc2UgaWYgJHVuaXQgPT0gJyUnIHtcbiAgICBAcmV0dXJuICR2YWx1ZSAvIDEwMCUgKiAxZW07XG4gIH1cbiAgQGVsc2UgaWYgJHVuaXQgPT0gJ2VtJyB7XG4gICAgQHJldHVybiAkdmFsdWU7XG4gIH1cbiAgQGVsc2UgaWYgJHVuaXQgPT0gJ3B0JyB7XG4gICAgQHJldHVybiAkdmFsdWUgLyAxMnB0ICogMWVtO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAcmV0dXJuICR2YWx1ZTtcbi8vICAgIEB3YXJuICdFdmVyeXRoaW5nIGlzIHRlcnJpYmxlISBXaGF0IGhhdmUgeW91IGRvbmU/ISc7XG4gIH1cbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGZlYXR1cmUgY2FuIGhhdmUgYSBtaW4vbWF4IHBhaXJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuJGJyZWFrcG9pbnQtbWluLW1heC1mZWF0dXJlczogJ2NvbG9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvci1pbmRleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNwZWN0LXJhdGlvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXZpY2UtYXNwZWN0LXJhdGlvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXZpY2UtaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXZpY2Utd2lkdGgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9ub2Nocm9tZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzb2x1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkdGgnO1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1taW4tbWF4KCRmZWF0dXJlKSB7XG4gIEBlYWNoICRpdGVtIGluICRicmVha3BvaW50LW1pbi1tYXgtZmVhdHVyZXMge1xuICAgIEBpZiAkZmVhdHVyZSA9PSAkaXRlbSB7XG4gICAgICBAcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gZmFsc2U7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBmZWF0dXJlIGNhbiBoYXZlIGEgc3RyaW5nIHZhbHVlXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiRicmVha3BvaW50LXN0cmluZy1mZWF0dXJlczogICdvcmllbnRhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NhbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzcGVjdC1yYXRpbycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2aWNlLWFzcGVjdC1yYXRpbycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbHVtaW5vc2l0eSc7XG5cbkBmdW5jdGlvbiBicmVha3BvaW50LXN0cmluZy12YWx1ZSgkZmVhdHVyZSkge1xuICBAZWFjaCAkaXRlbSBpbiAkYnJlYWtwb2ludC1zdHJpbmctZmVhdHVyZXMge1xuICAgIEBpZiBicmVha3BvaW50LW1pbi1tYXgoJGl0ZW0pIHtcbiAgICAgIEBpZiAkZmVhdHVyZSA9PSAnbWluLSN7JGl0ZW19JyBvciAkZmVhdHVyZSA9PSAnbWF4LSN7JGl0ZW19JyB7XG4gICAgICAgIEByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2UgaWYgJGZlYXR1cmUgPT0gJGl0ZW0ge1xuICAgICAgQHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBAcmV0dXJuIGZhbHNlO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFJldHVybnMgd2hldGhlciB0aGUgZmVhdHVyZSBpcyBhIG1lZGlhIHR5cGVcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuJGJyZWFrcG9pbnQtbWVkaWEtdHlwZXM6ICAnYWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JyYWlsbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1ib3NzZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFuZGhlbGQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAncHJpbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvamVjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdzY3JlZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BlZWNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0dic7XG5cbkBmdW5jdGlvbiBicmVha3BvaW50LWlzLW1lZGlhKCRmZWF0dXJlKSB7XG4gIEBlYWNoICRtZWRpYSBpbiAkYnJlYWtwb2ludC1tZWRpYS10eXBlcyB7XG4gICAgQGlmICgkZmVhdHVyZSA9PSAkbWVkaWEpIG9yICgkZmVhdHVyZSA9PSAnbm90ICN7JG1lZGlhfScpIG9yICgkZmVhdHVyZSA9PSAnb25seSAjeyRtZWRpYX0nKSB7XG4gICAgICBAcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiBmYWxzZTtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGZlYXR1cmUgY2FuIHN0YW5kIGFsb25lXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiRicmVha3BvaW50LXNpbmdsZS1zdHJpbmctZmVhdHVyZXM6ICdjb2xvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3ItaW5kZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dyaWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vbm9jaHJvbWUnO1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKCRmZWF0dXJlKSB7XG4gIEBlYWNoICRpdGVtIGluICRicmVha3BvaW50LXNpbmdsZS1zdHJpbmctZmVhdHVyZXMge1xuICAgIEBpZiAkZmVhdHVyZSA9PSAkaXRlbSB7XG4gICAgICBAcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gZmFsc2U7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBmZWF0dXJlXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBmdW5jdGlvbiBicmVha3BvaW50LWlzLXJlc29sdXRpb24oJGZlYXR1cmUpIHtcbiAgJHJlc29sdXRpb25zOiAnZGV2aWNlLXBpeGVsLXJhdGlvJywgJ2Rwcic7XG5cbiAgQGlmIGJyZWFrcG9pbnQtZ2V0KCd0cmFuc2Zvcm0gcmVzb2x1dGlvbnMnKSB7XG4gICAgJHJlc29sdXRpb25zOiBhcHBlbmQoJHJlc29sdXRpb25zLCAncmVzb2x1dGlvbicpO1xuICB9XG5cbiAgQGVhY2ggJHJlc28gaW4gJHJlc29sdXRpb25zIHtcbiAgICBAaWYgaW5kZXgoJGZlYXR1cmUsICRyZXNvKSBvciBpbmRleCgkZmVhdHVyZSwgJ21pbi0jeyRyZXNvfScpIG9yIGluZGV4KCRmZWF0dXJlLCAnbWF4LSN7JHJlc299Jykge1xuICAgICAgQHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gZmFsc2U7XG59XG4iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEltcG9ydCBQYXJzZXIgUGllY2VzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBpbXBvcnQgXCJwYXJzZXJzL3F1ZXJ5XCI7XG5AaW1wb3J0IFwicGFyc2Vycy9zaW5nbGVcIjtcbkBpbXBvcnQgXCJwYXJzZXJzL2RvdWJsZVwiO1xuQGltcG9ydCBcInBhcnNlcnMvdHJpcGxlXCI7XG5AaW1wb3J0IFwicGFyc2Vycy9yZXNvbHV0aW9uXCI7XG5cbiRNZW1vLUV4aXN0czogZnVuY3Rpb24tZXhpc3RzKG1lbW8tZ2V0KSBhbmQgZnVuY3Rpb24tZXhpc3RzKG1lbW8tc2V0KTtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBCcmVha3BvaW50IEZ1bmN0aW9uXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBmdW5jdGlvbiBicmVha3BvaW50KCRxdWVyeSwgJGNvbnRleHRzLi4uKSB7XG4gICRydW46IHRydWU7XG4gICRyZXR1cm46ICgpO1xuXG4gIC8vIEdyYWIgdGhlIE1lbW8gT3V0cHV0IGlmIE1lbW9pemF0aW9uIGNhbiBiZSBhIHRoaW5nXG4gIEBpZiAkTWVtby1FeGlzdHMge1xuICAgICRyZXR1cm46IG1lbW8tZ2V0KGJyZWFrcG9pbnQsIGJyZWFrcG9pbnQgJHF1ZXJ5ICRjb250ZXh0cyk7XG5cbiAgICBAaWYgJHJldHVybiAhPSBudWxsIHtcbiAgICAgICRydW46IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIEBpZiBub3QgJE1lbW8tRXhpc3RzIG9yICRydW4ge1xuICAgIC8vIEludGVybmFsIFZhcmlhYmxlc1xuICAgICRxdWVyeS1zdHJpbmc6ICcnO1xuICAgICRxdWVyeS1mYWxsYmFjazogZmFsc2U7XG4gICAgJHJldHVybjogKCk7XG5cbiAgICAvLyBSZXNlcnZlIEdsb2JhbCBQcml2YXRlIEJyZWFrcG9pbnQgQ29udGV4dFxuICAgICRob2xkZXItY29udGV4dDogJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjtcbiAgICAkaG9sZGVyLXF1ZXJ5LWNvdW50OiAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50O1xuXG4gICAgLy8gUmVzZXQgR2xvYmFsIFByaXZhdGUgQnJlYWtwb2ludCBDb250ZXh0XG4gICAgJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjogKCkgIWdsb2JhbDtcbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50OiAwICFnbG9iYWw7XG5cblxuICAgIC8vIFRlc3QgdG8gc2VlIGlmIGl0J3MgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdFxuICAgICRvci1saXN0OiBpZihsaXN0LXNlcGFyYXRvcigkcXVlcnkpID09ICdjb21tYScsIHRydWUsIGZhbHNlKTtcblxuXG4gICAgQGlmICgkb3ItbGlzdCA9PSBmYWxzZSBhbmQgYnJlYWtwb2ludC1nZXQoJ2xlZ2FjeSBzeW50YXgnKSA9PSBmYWxzZSkge1xuICAgICAgJHF1ZXJ5LXN0cmluZzogYnJlYWtwb2ludC1wYXJzZSgkcXVlcnkpO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICAkbGVuZ3RoOiBsZW5ndGgoJHF1ZXJ5KTtcblxuICAgICAgJGxhc3Q6IG50aCgkcXVlcnksICRsZW5ndGgpO1xuICAgICAgJHF1ZXJ5LWZhbGxiYWNrOiBicmVha3BvaW50LW5vLXF1ZXJ5KCRsYXN0KTtcblxuICAgICAgQGlmICgkcXVlcnktZmFsbGJhY2sgIT0gZmFsc2UpIHtcbiAgICAgICAgJGxlbmd0aDogJGxlbmd0aCAtIDE7XG4gICAgICB9XG5cbiAgICAgIEBpZiAoYnJlYWtwb2ludC1nZXQoJ2xlZ2FjeSBzeW50YXgnKSA9PSB0cnVlKSB7XG4gICAgICAgICRtcTogKCk7XG5cbiAgICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkbGVuZ3RoIHtcbiAgICAgICAgICAkbXE6IGFwcGVuZCgkbXEsIG50aCgkcXVlcnksICRpKSwgY29tbWEpO1xuICAgICAgICB9XG5cbiAgICAgICAgJHF1ZXJ5LXN0cmluZzogYnJlYWtwb2ludC1wYXJzZSgkbXEpO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkcXVlcnktc3RyaW5nOiAnJztcbiAgICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkbGVuZ3RoIHtcbiAgICAgICAgICAkcXVlcnktc3RyaW5nOiAkcXVlcnktc3RyaW5nICsgaWYoJGkgPT0gMSwgJycsICcsICcpICsgYnJlYWtwb2ludC1wYXJzZShudGgoJHF1ZXJ5LCAkaSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJHJldHVybjogKCdxdWVyeSc6ICRxdWVyeS1zdHJpbmcsXG4gICAgICAgICdmYWxsYmFjayc6ICRxdWVyeS1mYWxsYmFjayxcbiAgICAgICAgJ2NvbnRleHQgaG9sZGVyJzogJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcixcbiAgICAgICAgJ3F1ZXJ5IGNvdW50JzogJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudFxuICAgICk7XG4gICAgQGlmIGxlbmd0aCgkY29udGV4dHMpID4gMCBhbmQgbnRoKCRjb250ZXh0cywgMSkgIT0gZmFsc2Uge1xuICAgICAgQGlmICRxdWVyeS1mYWxsYmFjayAhPSBmYWxzZSB7XG4gICAgICAgICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KCduby1xdWVyeScsICRxdWVyeS1mYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAkY29udGV4dC1tYXA6ICgpO1xuICAgICAgQGVhY2ggJGNvbnRleHQgaW4gJGNvbnRleHRzIHtcbiAgICAgICAgJGNvbnRleHQtbWFwOiBtYXAtbWVyZ2UoJGNvbnRleHQtbWFwLCAoJGNvbnRleHQ6IGJyZWFrcG9pbnQtZ2V0LWNvbnRleHQoJGNvbnRleHQpKSk7XG4gICAgICB9XG4gICAgICAkcmV0dXJuOiBtYXAtbWVyZ2UoJHJldHVybiwgKGNvbnRleHQ6ICRjb250ZXh0LW1hcCkpO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IEdsb2JhbCBQcml2YXRlIEJyZWFrcG9pbnQgQ29udGV4dFxuICAgICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6ICgpICFnbG9iYWw7XG4gICAgJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudDogMCAhZ2xvYmFsO1xuXG4gICAgQGlmICRNZW1vLUV4aXN0cyB7XG4gICAgICAkaG9sZGVyOiBtZW1vLXNldChicmVha3BvaW50LCBicmVha3BvaW50ICRxdWVyeSAkY29udGV4dHMsICRyZXR1cm4pO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBHZW5lcmFsIEJyZWFrcG9pbnQgUGFyc2VyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlKCRxdWVyeSkge1xuICAvLyBJbmNyZWFzZSBudW1iZXIgb2YgJ2FuZCcgcXVlcmllc1xuICAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50OiAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50ICsgMSAhZ2xvYmFsO1xuXG4gIC8vIFNldCB1cCBNZWRpYSBUeXBlXG4gICRxdWVyeS1wcmludDogJyc7XG5cbiAgJGZvcmNlLWFsbDogKChicmVha3BvaW50LWdldCgnZm9yY2UgYWxsIG1lZGlhIHR5cGUnKSA9PSB0cnVlKSBhbmQgKGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IG1lZGlhJykgPT0gJ2FsbCcpKTtcbiAgJGVtcHR5LW1lZGlhOiB0cnVlO1xuICBAaWYgKCRmb3JjZS1hbGwgPT0gdHJ1ZSkgb3IgKGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IG1lZGlhJykgIT0gJ2FsbCcpIHtcbiAgICAvLyBGb3JjZSB0aGUgcHJpbnQgb2YgdGhlIGRlZmF1bHQgbWVkaWEgdHlwZSBpZiAoZm9yY2UgYWxsIGlzIHRydWUgYW5kIGRlZmF1bHQgbWVkaWEgdHlwZSBpcyBhbGwpIG9yIChkZWZhdWx0IG1lZGlhIHR5cGUgaXMgbm90IGFsbClcbiAgICAkcXVlcnktcHJpbnQ6IGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IG1lZGlhJyk7XG4gICAgJGVtcHR5LW1lZGlhOiBmYWxzZTtcbiAgfVxuXG5cbiAgJHF1ZXJ5LXJlc29sdXRpb246IGZhbHNlO1xuXG4gICRxdWVyeS1ob2xkZXI6IGJyZWFrcG9pbnQtcGFyc2UtcXVlcnkoJHF1ZXJ5KTtcblxuXG5cbiAgLy8gTG9vcCBvdmVyIGVhY2ggcGFyc2VkIG91dCBxdWVyeSBhbmQgd3JpdGUgaXQgdG8gJHF1ZXJ5LXByaW50XG4gICRmaXJzdDogdHJ1ZTtcblxuICBAZWFjaCAkZmVhdHVyZSBpbiAkcXVlcnktaG9sZGVyIHtcbiAgICAkbGVuZ3RoOiBsZW5ndGgoJGZlYXR1cmUpO1xuXG4gICAgLy8gUGFyc2UgYSBzaW5nbGUgZmVhdHVyZVxuICAgIEBpZiAoJGxlbmd0aCA9PSAxKSB7XG4gICAgICAvLyBGZWF0dXJlIGlzIGN1cnJlbnRseSBhIGxpc3QsIGdyYWIgdGhlIGFjdHVhbCB2YWx1ZVxuICAgICAgJGZlYXR1cmU6IG50aCgkZmVhdHVyZSwgMSk7XG5cbiAgICAgIC8vIE1lZGlhIFR5cGUgbXVzdCBieSBjb252ZW50aW9uIGJlIHRoZSBmaXJzdCBpdGVtLCBzbyBpdCdzIHNhZmUgdG8gZmxhdCBvdmVycmlkZSAkcXVlcnktcHJpbnQsIHdoaWNoIHJpZ2h0IG5vdyBzaG91bGQgb25seSBiZSB0aGUgZGVmYXVsdCBtZWRpYSB0eXBlXG4gICAgICBAaWYgKGJyZWFrcG9pbnQtaXMtbWVkaWEoJGZlYXR1cmUpKSB7XG4gICAgICAgIEBpZiAoJGZvcmNlLWFsbCA9PSB0cnVlKSBvciAoJGZlYXR1cmUgIT0gJ2FsbCcpIHtcbiAgICAgICAgICAvLyBGb3JjZSB0aGUgcHJpbnQgb2YgdGhlIGRlZmF1bHQgbWVkaWEgdHlwZSBpZiAoZm9yY2UgYWxsIGlzIHRydWUgYW5kIGRlZmF1bHQgbWVkaWEgdHlwZSBpcyBhbGwpIG9yIChkZWZhdWx0IG1lZGlhIHR5cGUgaXMgbm90IGFsbClcbiAgICAgICAgICAkcXVlcnktcHJpbnQ6ICRmZWF0dXJlO1xuICAgICAgICAgICRlbXB0eS1tZWRpYTogZmFsc2U7XG5cbiAgICAgICAgICAvLyBTZXQgQ29udGV4dFxuICAgICAgICAgICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KG1lZGlhLCAkcXVlcnktcHJpbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2Utc2luZ2xlKCRmZWF0dXJlLCAkZW1wdHktbWVkaWEsICRmaXJzdCk7XG4gICAgICAgICRxdWVyeS1wcmludDogJyN7JHF1ZXJ5LXByaW50fSAjeyRwYXJzZWR9JztcbiAgICAgICAgJGZpcnN0OiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUGFyc2UgYSBkb3VibGUgZmVhdHVyZVxuICAgIEBlbHNlIGlmICgkbGVuZ3RoID09IDIpIHtcbiAgICAgIEBpZiAoYnJlYWtwb2ludC1pcy1yZXNvbHV0aW9uKCRmZWF0dXJlKSAhPSBmYWxzZSkge1xuICAgICAgICAkcXVlcnktcmVzb2x1dGlvbjogJGZlYXR1cmU7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgICRwYXJzZWQ6IG51bGw7XG4gICAgICAgIC8vIElmIGl0J3MgYSBzdHJpbmcvbnVtYmVyIHBhaXIsXG4gICAgICAgIC8vIHdlIGNoZWNrIHRvIHNlZSBpZiBvbmUgaXMgYSBzaW5nbGUtc3RyaW5nIHZhbHVlLFxuICAgICAgICAvLyB0aGVuIHdlIHBhcnNlIGl0IGFzIGEgbm9ybWFsIGRvdWJsZVxuICAgICAgICAkYWxwaGE6IG50aCgkZmVhdHVyZSwgMSk7XG4gICAgICAgICRiZXRhOiBudGgoJGZlYXR1cmUsIDIpO1xuICAgICAgICBAaWYgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKCRhbHBoYSkgb3IgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKCRiZXRhKSB7XG4gICAgICAgICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1zaW5nbGUoJGFscGhhLCAkZW1wdHktbWVkaWEsICRmaXJzdCk7XG4gICAgICAgICAgJHF1ZXJ5LXByaW50OiAnI3skcXVlcnktcHJpbnR9ICN7JHBhcnNlZH0nO1xuICAgICAgICAgICRmaXJzdDogZmFsc2U7XG4gICAgICAgICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1zaW5nbGUoJGJldGEsICRlbXB0eS1tZWRpYSwgJGZpcnN0KTtcbiAgICAgICAgICAkcXVlcnktcHJpbnQ6ICcjeyRxdWVyeS1wcmludH0gI3skcGFyc2VkfSc7XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2UtZG91YmxlKCRmZWF0dXJlLCAkZW1wdHktbWVkaWEsICRmaXJzdCk7XG4gICAgICAgICAgJHF1ZXJ5LXByaW50OiAnI3skcXVlcnktcHJpbnR9ICN7JHBhcnNlZH0nO1xuICAgICAgICAgICRmaXJzdDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUGFyc2UgYSB0cmlwbGUgZmVhdHVyZVxuICAgIEBlbHNlIGlmICgkbGVuZ3RoID09IDMpIHtcbiAgICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2UtdHJpcGxlKCRmZWF0dXJlLCAkZW1wdHktbWVkaWEsICRmaXJzdCk7XG4gICAgICAkcXVlcnktcHJpbnQ6ICcjeyRxdWVyeS1wcmludH0gI3skcGFyc2VkfSc7XG4gICAgICAkZmlyc3Q6IGZhbHNlO1xuICAgIH1cblxuICB9XG5cbiAgQGlmICgkcXVlcnktcmVzb2x1dGlvbiAhPSBmYWxzZSkge1xuICAgICRxdWVyeS1wcmludDogYnJlYWtwb2ludC1idWlsZC1yZXNvbHV0aW9uKCRxdWVyeS1wcmludCwgJHF1ZXJ5LXJlc29sdXRpb24sICRlbXB0eS1tZWRpYSwgJGZpcnN0KTtcbiAgfVxuXG4gIC8vIExvb3AgdGhyb3VnaCBlYWNoIGZlYXR1cmUgdGhhdCdzIGJlZW4gZGV0ZWN0ZWQgc28gZmFyIGFuZCBhcHBlbmQgJ2ZhbHNlJyB0byB0aGUgdGhlIHZhbHVlIGxpc3QgdG8gaW5jcmVtZW50IHRoZWlyIGNvdW50ZXJzXG4gIEBlYWNoICRmLCAkdiBpbiAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyIHtcbiAgICAkdi1ob2xkZXI6ICR2O1xuICAgICRsZW5ndGg6IGxlbmd0aCgkdi1ob2xkZXIpO1xuICAgIEBpZiBsZW5ndGgoJHYtaG9sZGVyKSA8ICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQge1xuICAgICAgQGZvciAkaSBmcm9tICRsZW5ndGggdG8gJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudCB7XG4gICAgICAgIEBpZiAkZiA9PSAnbWVkaWEnIHtcbiAgICAgICAgICAkdi1ob2xkZXI6IGFwcGVuZCgkdi1ob2xkZXIsIGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IG1lZGlhJykpO1xuICAgICAgICB9XG4gICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAkdi1ob2xkZXI6IGFwcGVuZCgkdi1ob2xkZXIsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiBtYXAtbWVyZ2UoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgKCRmOiAkdi1ob2xkZXIpKSAhZ2xvYmFsO1xuICB9XG5cbiAgQHJldHVybiAkcXVlcnktcHJpbnQ7XG59XG4iLCJAZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS1xdWVyeSgkcXVlcnkpIHtcbiAgLy8gUGFyc2UgZmVhdHVyZXMgb3V0IG9mIGFuIGluZGl2aWR1YWwgcXVlcnlcbiAgJGZlYXR1cmUtaG9sZGVyOiAoKTtcbiAgJHF1ZXJ5LWhvbGRlcjogKCk7XG4gICRsZW5ndGg6IGxlbmd0aCgkcXVlcnkpO1xuXG4gIEBpZiAkbGVuZ3RoID09IDIge1xuICAgIC8vIElmIHdlJ3ZlIGdvdCBhIHN0cmluZy9udW1iZXIsIG51bWJlci9zdHJpbmcsIGNoZWNrIHRvIHNlZSBpZiBpdCdzIGEgdmFsaWQgc3RyaW5nL251bWJlciBwYWlyIG9yIHR3byBzaW5nbGVzXG4gICAgQGlmICh0eXBlLW9mKG50aCgkcXVlcnksIDEpKSA9PSAnc3RyaW5nJyBhbmQgdHlwZS1vZihudGgoJHF1ZXJ5LCAyKSkgPT0gJ251bWJlcicpIG9yICh0eXBlLW9mKG50aCgkcXVlcnksIDEpKSA9PSAnbnVtYmVyJyBhbmQgdHlwZS1vZihudGgoJHF1ZXJ5LCAyKSkgPT0gJ3N0cmluZycpIHtcblxuICAgICAgJG51bWJlcjogJyc7XG4gICAgICAkdmFsdWU6ICcnO1xuXG4gICAgICBAaWYgdHlwZS1vZihudGgoJHF1ZXJ5LCAxKSkgPT0gJ3N0cmluZycge1xuICAgICAgICAkbnVtYmVyOiBudGgoJHF1ZXJ5LCAyKTtcbiAgICAgICAgJHZhbHVlOiBudGgoJHF1ZXJ5LCAxKTtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgJG51bWJlcjogbnRoKCRxdWVyeSwgMSk7XG4gICAgICAgICR2YWx1ZTogbnRoKCRxdWVyeSwgMik7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBzdHJpbmcgdmFsdWUgY2FuIGJlIGEgc2luZ2xlIHZhbHVlLCBjaGVjayB0byBzZWUgaWYgdGhlIG51bWJlciBwYXNzZWQgaW4gaXMgYSB2YWxpZCBpbnB1dCBmb3Igc2FpZCBzaW5nbGUgdmFsdWUuIEZvcnR1bmF0ZWx5LCBhbGwgY3VycmVudCBzaW5nbGUtdmFsdWUgb3B0aW9ucyBvbmx5IGFjY2VwdCB1bml0bGVzcyBudW1iZXJzLCBzbyB0aGlzIGNoZWNrIGlzIGVhc3kuXG4gICAgICBAaWYgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKCR2YWx1ZSkge1xuICAgICAgICBAaWYgdW5pdGxlc3MoJG51bWJlcikge1xuICAgICAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKCR2YWx1ZSwgJG51bWJlciwgc3BhY2UpO1xuICAgICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCAkZmVhdHVyZS1ob2xkZXIsIGNvbW1hKTtcbiAgICAgICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSBzdHJpbmcgaXMgYSBtZWRpYSB0eXBlLCBzcGxpdCB0aGUgcXVlcnlcbiAgICAgIEBpZiBicmVha3BvaW50LWlzLW1lZGlhKCR2YWx1ZSkge1xuICAgICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgbnRoKCRxdWVyeSwgMSkpO1xuICAgICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgbnRoKCRxdWVyeSwgMikpO1xuICAgICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XG4gICAgICB9XG4gICAgICAvLyBJZiBpdCdzIG5vdCBhIHNpbmdsZSBmZWF0dXJlLCB3ZSdyZSBqdXN0IGdvaW5nIHRvIGFzc3VtZSBpdCdzIGEgcHJvcGVyIHN0cmluZy92YWx1ZSBwYWlyLCBhbmQgcm9sbCB3aXRoIGl0LlxuICAgICAgQGVsc2Uge1xuICAgICAgICAkZmVhdHVyZS1ob2xkZXI6IGFwcGVuZCgkdmFsdWUsICRudW1iZXIsIHNwYWNlKTtcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsICRmZWF0dXJlLWhvbGRlciwgY29tbWEpO1xuICAgICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XG4gICAgICB9XG5cbiAgICB9XG4gICAgLy8gSWYgdGhleSdyZSBib3RoIG51bWJlcnMsIHdlIGFzc3VtZSBpdCdzIGEgZG91YmxlIGFuZCByb2xsIHdpdGggdGhhdFxuICAgIEBlbHNlIGlmICh0eXBlLW9mKG50aCgkcXVlcnksIDEpKSA9PSAnbnVtYmVyJyBhbmQgdHlwZS1vZihudGgoJHF1ZXJ5LCAyKSkgPT0gJ251bWJlcicpIHtcbiAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKG50aCgkcXVlcnksIDEpLCBudGgoJHF1ZXJ5LCAyKSwgc3BhY2UpO1xuICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsICRmZWF0dXJlLWhvbGRlciwgY29tbWEpO1xuICAgICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xuICAgIH1cbiAgICAvLyBJZiB0aGV5J3JlIGJvdGggc3RyaW5ncyBhbmQgbmVpdGhlciBhcmUgc2luZ2xlcywgd2Ugcm9sbCB3aXRoIHRoYXQuXG4gICAgQGVsc2UgaWYgKHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09ICdzdHJpbmcnIGFuZCB0eXBlLW9mKG50aCgkcXVlcnksIDIpKSA9PSAnc3RyaW5nJykge1xuICAgICAgQGlmIG5vdCBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcobnRoKCRxdWVyeSwgMSkpIGFuZCBub3QgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKG50aCgkcXVlcnksIDIpKSB7XG4gICAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKG50aCgkcXVlcnksIDEpLCBudGgoJHF1ZXJ5LCAyKSwgc3BhY2UpO1xuICAgICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgJGZlYXR1cmUtaG9sZGVyLCBjb21tYSk7XG4gICAgICAgIEByZXR1cm4gJHF1ZXJ5LWhvbGRlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2UgaWYgJGxlbmd0aCA9PSAzIHtcbiAgICAvLyBJZiB3ZSd2ZSBnb3QgdGhyZWUgaXRlbXMgYW5kIG5vbmUgaXMgYSBsaXN0LCB3ZSBjaGVjayB0byBzZWVcbiAgICBAaWYgdHlwZS1vZihudGgoJHF1ZXJ5LCAxKSkgIT0gJ2xpc3QnIGFuZCB0eXBlLW9mKG50aCgkcXVlcnksIDIpKSAhPSAnbGlzdCcgYW5kIHR5cGUtb2YobnRoKCRxdWVyeSwgMykpICE9ICdsaXN0JyB7XG4gICAgICAvLyBJZiBub25lIG9mIHRoZSBpdGVtcyBhcmUgc2luZ2xlIHN0cmluZyB2YWx1ZXMgYW5kIG5vbmUgb2YgdGhlIHZhbHVlcyBhcmUgbWVkaWEgdmFsdWVzLCB3ZSdyZSBnb29kLlxuICAgICAgQGlmIChub3QgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKG50aCgkcXVlcnksIDEpKSBhbmQgbm90IGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZyhudGgoJHF1ZXJ5LCAyKSkgYW5kIG5vdCBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcobnRoKCRxdWVyeSwgMykpKSBhbmQgICgobm90IGJyZWFrcG9pbnQtaXMtbWVkaWEobnRoKCRxdWVyeSwgMSkpIGFuZCBub3QgYnJlYWtwb2ludC1pcy1tZWRpYShudGgoJHF1ZXJ5LCAyKSkgYW5kIG5vdCBicmVha3BvaW50LWlzLW1lZGlhKG50aCgkcXVlcnksIDMpKSkpIHtcbiAgICAgICAgJGZlYXR1cmUtaG9sZGVyOiBhcHBlbmQobnRoKCRxdWVyeSwgMSksIG50aCgkcXVlcnksIDIpLCBzcGFjZSk7XG4gICAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKCRmZWF0dXJlLWhvbGRlciwgbnRoKCRxdWVyeSwgMyksIHNwYWNlKTtcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsICRmZWF0dXJlLWhvbGRlciwgY29tbWEpO1xuICAgICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XG4gICAgICB9XG4gICAgICAvLyBsZXQncyBjaGVjayB0byBzZWUgaWYgdGhlIGZpcnN0IGl0ZW0gaXMgYSBtZWRpYSB0eXBlXG4gICAgICBAZWxzZSBpZiBicmVha3BvaW50LWlzLW1lZGlhKG50aCgkcXVlcnksIDEpKSB7XG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCBudGgoJHF1ZXJ5LCAxKSk7XG4gICAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKG50aCgkcXVlcnksIDIpLCBudGgoJHF1ZXJ5LCAzKSwgc3BhY2UpO1xuICAgICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgJGZlYXR1cmUtaG9sZGVyKTtcbiAgICAgICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIGl0J3MgYSBzaW5nbGUgaXRlbSwgb3IgaWYgaXQncyBub3QgYSBzcGVjaWFsIGNhc2UgZG91YmxlIG9yIHRyaXBsZSwgd2UgY2FuIHNpbXBseSByZXR1cm4gdGhlIHF1ZXJ5LlxuICBAcmV0dXJuICRxdWVyeTtcbn1cbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gSW1wb3J0IFBpZWNlc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AaW1wb3J0IFwic2luZ2xlL2RlZmF1bHRcIjtcblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2Utc2luZ2xlKCRmZWF0dXJlLCAkZW1wdHktbWVkaWEsICRmaXJzdCkge1xuICAkcGFyc2VkOiAnJztcbiAgJGxlYWRlcjogJyc7XG4gIC8vIElmIHdlJ3JlIGZvcmNpbmdcbiAgQGlmIG5vdCAoJGVtcHR5LW1lZGlhKSBvciBub3QgKCRmaXJzdCkge1xuICAgICRsZWFkZXI6ICdhbmQgJztcbiAgfVxuXG4gIC8vIElmIGl0J3MgYSBzaW5nbGUgZmVhdHVyZSB0aGF0IGNhbiBzdGFuZCBhbG9uZSwgd2UgbGV0IGl0XG4gIEBpZiAoYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKCRmZWF0dXJlKSkge1xuICAgICRwYXJzZWQ6ICRmZWF0dXJlO1xuICAgIC8vIFNldCBDb250ZXh0XG4gICAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQoJGZlYXR1cmUsICRmZWF0dXJlKTtcbiAgfVxuICAvLyBJZiBpdCdzIG5vdCBhIHN0YW5kIGFsb25lIGZlYXR1cmUsIHdlIHBhc3MgaXQgb2ZmIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIuXG4gIEBlbHNlIHtcbiAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLWRlZmF1bHQoJGZlYXR1cmUpO1xuICB9XG5cbiAgQHJldHVybiAkbGVhZGVyICsgJygnICsgJHBhcnNlZCArICcpJztcbn1cbiIsIkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLWRlZmF1bHQoJGZlYXR1cmUpIHtcbiAgJGRlZmF1bHQ6IGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IGZlYXR1cmUnKTtcblxuICAvLyBTZXQgQ29udGV4dFxuICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dCgkZGVmYXVsdCwgJGZlYXR1cmUpO1xuXG4gIEBpZiAoYnJlYWtwb2ludC1nZXQoJ3RvIGVtcycpID09IHRydWUpIGFuZCAodHlwZS1vZigkZmVhdHVyZSkgPT0gJ251bWJlcicpIHtcbiAgICBAcmV0dXJuICcjeyRkZWZhdWx0fTogI3ticmVha3BvaW50LXRvLWJhc2UtZW0oJGZlYXR1cmUpfSc7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gJyN7JGRlZmF1bHR9OiAjeyRmZWF0dXJlfSc7XG4gIH1cbn1cbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gSW1wb3J0IFBpZWNlc1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5AaW1wb3J0IFwiZG91YmxlL2RlZmF1bHQtcGFpclwiO1xuQGltcG9ydCBcImRvdWJsZS9kb3VibGUtc3RyaW5nXCI7XG5AaW1wb3J0IFwiZG91YmxlL2RlZmF1bHRcIjtcblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtZG91YmxlKCRmZWF0dXJlLCAkZW1wdHktbWVkaWEsICRmaXJzdCkge1xuICAkcGFyc2VkOiAnJztcbiAgJGxlYWRlcjogJyc7XG4gIC8vIElmIHdlJ3JlIGZvcmNpbmdcbiAgQGlmIG5vdCAoJGVtcHR5LW1lZGlhKSBvciBub3QgKCRmaXJzdCkge1xuICAgICRsZWFkZXI6ICdhbmQgJztcbiAgfVxuXG4gICRmaXJzdDogbnRoKCRmZWF0dXJlLCAxKTtcbiAgJHNlY29uZDogbnRoKCRmZWF0dXJlLCAyKTtcblxuICAvLyBJZiB3ZSd2ZSBnb3QgdHdvIG51bWJlcnMsIHdlIGtub3cgd2UgbmVlZCB0byB1c2UgdGhlIGRlZmF1bHQgcGFpciBiZWNhdXNlIHRoZXJlIGFyZSBubyBtZWRpYSBxdWVyaWVzIHRoYXQgaGFzIGEgbWVkaWEgZmVhdHVyZSB0aGF0IGlzIGEgbnVtYmVyXG4gIEBpZiB0eXBlLW9mKCRmaXJzdCkgPT0gJ251bWJlcicgYW5kIHR5cGUtb2YoJHNlY29uZCkgPT0gJ251bWJlcicge1xuICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2UtZGVmYXVsdC1wYWlyKCRmaXJzdCwgJHNlY29uZCk7XG4gIH1cbiAgLy8gSWYgdGhleSBhcmUgYm90aCBzdHJpbmdzLCB3ZSBzZW5kIGl0IHRocm91Z2ggdGhlIHN0cmluZyBwYXJzZXJcbiAgQGVsc2UgaWYgdHlwZS1vZigkZmlyc3QpID09ICdzdHJpbmcnIGFuZCB0eXBlLW9mKCRzZWNvbmQpID09ICdzdHJpbmcnIHtcbiAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLWRvdWJsZS1zdHJpbmcoJGZpcnN0LCAkc2Vjb25kKTtcbiAgfVxuICAvLyBJZiBpdCdzIGEgc3RyaW5nL251bWJlciBwYWlyLCB3ZSBwYXJzZSBpdCBhcyBhIG5vcm1hbCBkb3VibGVcbiAgQGVsc2Uge1xuICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2UtZG91YmxlLWRlZmF1bHQoJGZpcnN0LCAkc2Vjb25kKTtcbiAgfVxuXG4gIEByZXR1cm4gJGxlYWRlciArICRwYXJzZWQ7XG59XG4iLCJAZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS1kZWZhdWx0LXBhaXIoJGZpcnN0LCAkc2Vjb25kKSB7XG4gICRkZWZhdWx0OiBicmVha3BvaW50LWdldCgnZGVmYXVsdCBwYWlyJyk7XG4gICRtaW46ICcnO1xuICAkbWF4OiAnJztcblxuICAvLyBTb3J0IGludG8gbWluIGFuZCBtYXhcbiAgJG1pbjogbWluKCRmaXJzdCwgJHNlY29uZCk7XG4gICRtYXg6IG1heCgkZmlyc3QsICRzZWNvbmQpO1xuXG4gIC8vIFNldCBDb250ZXh0XG4gICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KG1pbi0jeyRkZWZhdWx0fSwgJG1pbik7XG4gICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KG1heC0jeyRkZWZhdWx0fSwgJG1heCk7XG5cbiAgLy8gTWFrZSB0aGVtIEVNcyBpZiBuZWVkIGJlXG4gIEBpZiAoYnJlYWtwb2ludC1nZXQoJ3RvIGVtcycpID09IHRydWUpIHtcbiAgICAkbWluOiBicmVha3BvaW50LXRvLWJhc2UtZW0oJG1pbik7XG4gICAgJG1heDogYnJlYWtwb2ludC10by1iYXNlLWVtKCRtYXgpO1xuICB9XG5cbiAgQHJldHVybiAnKG1pbi0jeyRkZWZhdWx0fTogI3skbWlufSkgYW5kIChtYXgtI3skZGVmYXVsdH06ICN7JG1heH0pJztcbn1cbiIsIkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLWRvdWJsZS1zdHJpbmcoJGZpcnN0LCAkc2Vjb25kKSB7XG4gICRmZWF0dXJlOiAnJztcbiAgJHZhbHVlOiAnJztcblxuICAvLyBUZXN0IHRvIHNlZSB3aGljaCBpcyB0aGUgZmVhdHVyZSBhbmQgd2hpY2ggaXMgdGhlIHZhbHVlXG4gIEBpZiAoYnJlYWtwb2ludC1zdHJpbmctdmFsdWUoJGZpcnN0KSA9PSB0cnVlKSB7XG4gICAgJGZlYXR1cmU6ICRmaXJzdDtcbiAgICAkdmFsdWU6ICRzZWNvbmQ7XG4gIH1cbiAgQGVsc2UgaWYgKGJyZWFrcG9pbnQtc3RyaW5nLXZhbHVlKCRzZWNvbmQpID09IHRydWUpIHtcbiAgICAkZmVhdHVyZTogJHNlY29uZDtcbiAgICAkdmFsdWU6ICRmaXJzdDtcbiAgfVxuICBAZWxzZSB7XG4gICAgQHdhcm4gXCJOZWl0aGVyICN7JGZpcnN0fSBub3IgI3skc2Vjb25kfSBpcyBhIHZhbGlkIG1lZGlhIHF1ZXJ5IG5hbWUuXCI7XG4gIH1cblxuICAvLyBTZXQgQ29udGV4dFxuICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dCgkZmVhdHVyZSwgJHZhbHVlKTtcblxuICBAcmV0dXJuICcoI3skZmVhdHVyZX06ICN7JHZhbHVlfSknO1xufSIsIkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLWRvdWJsZS1kZWZhdWx0KCRmaXJzdCwgJHNlY29uZCkge1xuICAkZmVhdHVyZTogJyc7XG4gICR2YWx1ZTogJyc7XG5cbiAgQGlmIHR5cGUtb2YoJGZpcnN0KSA9PSAnc3RyaW5nJyB7XG4gICAgJGZlYXR1cmU6ICRmaXJzdDtcbiAgICAkdmFsdWU6ICRzZWNvbmQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgICRmZWF0dXJlOiAkc2Vjb25kO1xuICAgICR2YWx1ZTogJGZpcnN0O1xuICB9XG5cbiAgLy8gU2V0IENvbnRleHRcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQoJGZlYXR1cmUsICR2YWx1ZSk7XG5cbiAgQGlmIChicmVha3BvaW50LWdldCgndG8gZW1zJykgPT0gdHJ1ZSkge1xuICAgICR2YWx1ZTogYnJlYWtwb2ludC10by1iYXNlLWVtKCR2YWx1ZSk7XG4gIH1cblxuICBAcmV0dXJuICcoI3skZmVhdHVyZX06ICN7JHZhbHVlfSknXG59XG4iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEltcG9ydCBQaWVjZXNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQGltcG9ydCBcInRyaXBsZS9kZWZhdWx0XCI7XG5cbkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLXRyaXBsZSgkZmVhdHVyZSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpIHtcbiAgJHBhcnNlZDogJyc7XG4gICRsZWFkZXI6ICcnO1xuXG4gIC8vIElmIHdlJ3JlIGZvcmNpbmdcbiAgQGlmIG5vdCAoJGVtcHR5LW1lZGlhKSBvciBub3QgKCRmaXJzdCkge1xuICAgICRsZWFkZXI6ICdhbmQgJztcbiAgfVxuXG4gIC8vIHNlcGFyYXRlIHRoZSBzdHJpbmcgZmVhdHVyZXMgZnJvbSB0aGUgdmFsdWUgbnVtYmVyc1xuICAkc3RyaW5nOiBudWxsO1xuICAkbnVtYmVyczogbnVsbDtcbiAgQGVhY2ggJHZhbCBpbiAkZmVhdHVyZSB7XG4gICAgQGlmIHR5cGUtb2YoJHZhbCkgPT0gc3RyaW5nIHtcbiAgICAgICRzdHJpbmc6ICR2YWw7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEBpZiB0eXBlLW9mKCRudW1iZXJzKSA9PSAnbnVsbCcge1xuICAgICAgICAkbnVtYmVyczogJHZhbDtcbiAgICAgIH1cbiAgICAgIEBlbHNlIHtcbiAgICAgICAgJG51bWJlcnM6IGFwcGVuZCgkbnVtYmVycywgJHZhbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS10cmlwbGUtZGVmYXVsdCgkc3RyaW5nLCBudGgoJG51bWJlcnMsIDEpLCBudGgoJG51bWJlcnMsIDIpKTtcblxuICBAcmV0dXJuICRsZWFkZXIgKyAkcGFyc2VkO1xuXG59XG4iLCJAZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS10cmlwbGUtZGVmYXVsdCgkZmVhdHVyZSwgJGZpcnN0LCAkc2Vjb25kKSB7XG5cbiAgLy8gU29ydCBpbnRvIG1pbiBhbmQgbWF4XG4gICRtaW46IG1pbigkZmlyc3QsICRzZWNvbmQpO1xuICAkbWF4OiBtYXgoJGZpcnN0LCAkc2Vjb25kKTtcblxuICAvLyBTZXQgQ29udGV4dFxuICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dChtaW4tI3skZmVhdHVyZX0sICRtaW4pO1xuICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dChtYXgtI3skZmVhdHVyZX0sICRtYXgpO1xuXG4gIC8vIE1ha2UgdGhlbSBFTXMgaWYgbmVlZCBiZVxuICBAaWYgKGJyZWFrcG9pbnQtZ2V0KCd0byBlbXMnKSA9PSB0cnVlKSB7XG4gICAgJG1pbjogYnJlYWtwb2ludC10by1iYXNlLWVtKCRtaW4pO1xuICAgICRtYXg6IGJyZWFrcG9pbnQtdG8tYmFzZS1lbSgkbWF4KTtcbiAgfVxuXG4gIEByZXR1cm4gJyhtaW4tI3skZmVhdHVyZX06ICN7JG1pbn0pIGFuZCAobWF4LSN7JGZlYXR1cmV9OiAjeyRtYXh9KSc7XG59XG4iLCJAaW1wb3J0IFwicmVzb2x1dGlvbi9yZXNvbHV0aW9uXCI7XG5cbkBmdW5jdGlvbiBicmVha3BvaW50LWJ1aWxkLXJlc29sdXRpb24oJHF1ZXJ5LXByaW50LCAkcXVlcnktcmVzb2x1dGlvbiwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpIHtcbiAgJGxlYWRlcjogJyc7XG4gIC8vIElmIHdlJ3JlIGZvcmNpbmdcbiAgQGlmIG5vdCAoJGVtcHR5LW1lZGlhKSBvciBub3QgKCRmaXJzdCkge1xuICAgICRsZWFkZXI6ICdhbmQgJztcbiAgfVxuXG4gIEBpZiBicmVha3BvaW50LWdldCgndHJhbnNmb3JtIHJlc29sdXRpb25zJykgYW5kICRxdWVyeS1yZXNvbHV0aW9uIHtcbiAgICAkcmVzb2x1dGlvbnM6IGJyZWFrcG9pbnQtbWFrZS1yZXNvbHV0aW9ucygkcXVlcnktcmVzb2x1dGlvbik7XG4gICAgJGxlbmd0aDogbGVuZ3RoKCRyZXNvbHV0aW9ucyk7XG4gICAgJHF1ZXJ5LWhvbGRlcjogJyc7XG5cbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRsZW5ndGgge1xuICAgICAgJHF1ZXJ5OiAnI3skcXVlcnktcHJpbnR9ICN7JGxlYWRlcn0je250aCgkcmVzb2x1dGlvbnMsICRpKX0nO1xuICAgICAgQGlmICRpID09IDEge1xuICAgICAgICAkcXVlcnktaG9sZGVyOiAkcXVlcnk7XG4gICAgICB9XG4gICAgICBAZWxzZSB7XG4gICAgICAgICRxdWVyeS1ob2xkZXI6ICcjeyRxdWVyeS1ob2xkZXJ9LCAjeyRxdWVyeX0nO1xuICAgICAgfVxuICAgIH1cblxuICAgIEByZXR1cm4gJHF1ZXJ5LWhvbGRlcjtcbiAgfVxuICBAZWxzZSB7XG4gICAgLy8gUmV0dXJuIHdpdGggYXR0YWNoZWQgcmVzb2x1dGlvblxuICAgIEByZXR1cm4gJHF1ZXJ5LXByaW50O1xuICB9XG59XG4iLCJAZnVuY3Rpb24gYnJlYWtwb2ludC1tYWtlLXJlc29sdXRpb25zKCRyZXNvbHV0aW9uKSB7XG4gICRsZW5ndGg6IGxlbmd0aCgkcmVzb2x1dGlvbik7XG5cbiAgJG91dHB1dDogKCk7XG5cbiAgQGlmICRsZW5ndGggPT0gMiB7XG4gICAgJGZlYXR1cmU6ICcnO1xuICAgICR2YWx1ZTogJyc7XG5cbiAgICAvLyBGaW5kIHdoaWNoIGlzIG51bWJlclxuICAgIEBpZiB0eXBlLW9mKG50aCgkcmVzb2x1dGlvbiwgMSkpID09ICdudW1iZXInIHtcbiAgICAgICR2YWx1ZTogbnRoKCRyZXNvbHV0aW9uLCAxKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgJHZhbHVlOiBudGgoJHJlc29sdXRpb24sIDIpO1xuICAgIH1cblxuICAgIC8vIERldGVybWluZSBtaW4vbWF4L3N0YW5kYXJkXG4gICAgQGlmIGluZGV4KCRyZXNvbHV0aW9uLCAnbWluLXJlc29sdXRpb24nKSB7XG4gICAgICAkZmVhdHVyZTogJ21pbi0nO1xuICAgIH1cbiAgICBAZWxzZSBpZiBpbmRleCgkcmVzb2x1dGlvbiwgJ21heC1yZXNvbHV0aW9uJykge1xuICAgICAgJGZlYXR1cmU6ICdtYXgtJztcbiAgICB9XG5cbiAgICAkc3RhbmRhcmQ6ICcoI3skZmVhdHVyZX1yZXNvbHV0aW9uOiAjeyR2YWx1ZX0pJztcblxuICAgIC8vIElmIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggZHBweCxcbiAgICBAaWYgdW5pdCgkdmFsdWUpICE9ICdkcHB4JyB7XG4gICAgICAkYmFzZTogOTZkcGk7XG4gICAgICBAaWYgdW5pdCgkdmFsdWUpID09ICdkcGNtJyB7XG4gICAgICAgICRiYXNlOiAyNDMuODRkcGNtO1xuICAgICAgfVxuICAgICAgLy8gV3JpdGUgb3V0IGZlYXR1cmUgdGVzdHNcbiAgICAgICR3ZWJraXQ6ICcnO1xuICAgICAgJG1vejogJyc7XG4gICAgICAkd2Via2l0OiAnKC13ZWJraXQtI3skZmVhdHVyZX1kZXZpY2UtcGl4ZWwtcmF0aW86ICN7JHZhbHVlIC8gJGJhc2V9KSc7XG4gICAgICAkbW96OiAnKCN7JGZlYXR1cmV9LW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86ICN7JHZhbHVlIC8gJGJhc2V9KSc7XG4gICAgICAvLyBBcHBlbmQgdG8gb3V0cHV0XG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJHN0YW5kYXJkLCBzcGFjZSk7XG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJHdlYmtpdCwgc3BhY2UpO1xuICAgICAgJG91dHB1dDogYXBwZW5kKCRvdXRwdXQsICRtb3osIHNwYWNlKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgJHdlYmtpdDogJyc7XG4gICAgICAkbW96OiAnJztcbiAgICAgICR3ZWJraXQ6ICcoLXdlYmtpdC0jeyRmZWF0dXJlfWRldmljZS1waXhlbC1yYXRpbzogI3skdmFsdWUgLyAxZHBweH0pJztcbiAgICAgICRtb3o6ICcoI3skZmVhdHVyZX0tbW96LWRldmljZS1waXhlbC1yYXRpbzogI3skdmFsdWUgLyAxZHBweH0pJztcbiAgICAgICRmYWxsYmFjazogJygjeyRmZWF0dXJlfXJlc29sdXRpb246ICN7JHZhbHVlIC8gMWRwcHggKiA5NmRwaX0pJztcbiAgICAgIC8vIEFwcGVuZCB0byBvdXRwdXRcbiAgICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkc3RhbmRhcmQsIHNwYWNlKTtcbiAgICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkd2Via2l0LCBzcGFjZSk7XG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJG1veiwgc3BhY2UpO1xuICAgICAgJG91dHB1dDogYXBwZW5kKCRvdXRwdXQsICRmYWxsYmFjaywgc3BhY2UpO1xuICAgIH1cblxuICB9XG5cbiAgQHJldHVybiAkb3V0cHV0O1xufVxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbm8tcXVlcnkoJHF1ZXJ5KSB7XG4gIEBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gJ2xpc3QnIHtcbiAgICAka2V5d29yZDogbnRoKCRxdWVyeSwgMSk7XG5cbiAgICBAaWYgdHlwZS1vZigka2V5d29yZCkgPT0gJ3N0cmluZycgYW5kICgka2V5d29yZCA9PSAnbm8tcXVlcnknIG9yICRrZXl3b3JkID09ICdubyBxdWVyeScgb3IgJGtleXdvcmQgPT0gJ2ZhbGxiYWNrJykge1xuICAgICAgQHJldHVybiBudGgoJHF1ZXJ5LCAyKTtcbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgQHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gRGVmYXVsdCB0aGUgQnJlYWtwb2ludHMgdmFyaWFibGVcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuJGJyZWFrcG9pbnRzOiAoKSAhZGVmYXVsdDtcbiRCUkVBS1BPSU5UUzogKCkgIWRlZmF1bHQ7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gUmVzcG9uZC10byBBUEkgTWl4aW5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuQG1peGluIHJlc3BvbmQtdG8oJGNvbnRleHQsICRuby1xdWVyeTogZmFsc2UpIHtcbiAgQGlmIGxlbmd0aCgkYnJlYWtwb2ludHMpID4gMCBhbmQgbGVuZ3RoKCRCUkVBS1BPSU5UUykgPT0gMCB7XG4gICAgQHdhcm4gXCJJbiBvcmRlciB0byBhdm9pZCB2YXJpYWJsZSBuYW1lc3BhY2UgY29sbGlzaW9ucywgd2UgaGF2ZSB1cGRhdGVkIHRoZSB3YXkgdG8gYWRkIGJyZWFrcG9pbnRzIGZvciByZXNwb25kLXRvLiBQbGVhc2UgY2hhbmdlIGFsbCBpbnN0YW5jZXMgb2YgYCRicmVha3BvaW50czogYWRkLWJyZWFrcG9pbnQoKWAgdG8gYEBpbmNsdWRlIGFkZC1icmVha3BvaW50KClgLiBUaGUgYGFkZC1icmVha3BvaW50KClgIGZ1bmN0aW9uIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLlwiO1xuICAgICRCUkVBS1BPSU5UUzogJGJyZWFrcG9pbnRzICFnbG9iYWw7XG4gICAgJGJyZWFrcG9pbnRzOiAoKSAhZ2xvYmFsO1xuICB9XG5cbiAgQGlmIHR5cGUtb2YoJEJSRUFLUE9JTlRTKSAhPSAnbWFwJyB7XG4gICAgLy8gSnVzdCBpbiBjYXNlIHNvbWVvbmUgd3JpdGVzIGdpYmJlcmlzaCB0byB0aGUgJGJyZWFrcG9pbnRzIHZhcmlhYmxlLlxuICAgIEB3YXJuIFwiWW91ciBicmVha3BvaW50cyBhcmVuJ3QgYSBtYXAhIGByZXNwb25kLXRvYCBleHBlY3RzIGEgbWFwLiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlIG9mICRCUkVBS1BPSU5UUyB2YXJpYWJsZS5cIjtcbiAgICBAY29udGVudDtcbiAgfVxuICBAZWxzZSBpZiBtYXAtaGFzLWtleSgkQlJFQUtQT0lOVFMsICRjb250ZXh0KSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChtYXAtZ2V0KCRCUkVBS1BPSU5UUywgJGNvbnRleHQpLCAkbm8tcXVlcnkpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxuICBAZWxzZSBpZiBub3QgbWFwLWhhcy1rZXkoJEJSRUFLUE9JTlRTLCAkY29udGV4dCkge1xuICAgIEB3YXJuIFwiYCN7JGNvbnRleHR9YCBpc24ndCBhIGRlZmluZWQgYnJlYWtwb2ludCEgUGxlYXNlIGFkZCBpdCB1c2luZyBgJGJyZWFrcG9pbnRzOiBhZGQtYnJlYWtwb2ludChgI3skY29udGV4dH1gLCAkdmFsdWUpO2BcIjtcbiAgICBAY29udGVudDtcbiAgfVxuICBAZWxzZSB7XG4gICAgQHdhcm4gXCJZb3UgaGF2ZW4ndCBjcmVhdGVkIGFueSBicmVha3BvaW50cyB5ZXQhIE1ha2Ugc29tZSBhbHJlYWR5ISBgQGluY2x1ZGUgYWRkLWJyZWFrcG9pbnQoJG5hbWUsICRia3B0KWBcIjtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIEFkZCBCcmVha3BvaW50IHRvIEJyZWFrcG9pbnRzXG4vLyBUT0RPOiBSZW1vdmUgZnVuY3Rpb24gaW4gbmV4dCByZWxlYXNlXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbkBmdW5jdGlvbiBhZGQtYnJlYWtwb2ludCgkbmFtZSwgJGJrcHQsICRvdmVyd3JpdGU6IGZhbHNlKSB7XG4gICRvdXRwdXQ6ICgkbmFtZTogJGJrcHQpO1xuXG4gIEBpZiBsZW5ndGgoJGJyZWFrcG9pbnRzKSA9PSAwIHtcbiAgICBAcmV0dXJuICRvdXRwdXQ7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICRuYW1lKSBhbmQgJG92ZXJ3cml0ZSAhPSB0cnVlIHtcbiAgICAgIEB3YXJuIFwiWW91IGFscmVhZHkgaGF2ZSBhIGJyZWFrcG9pbnQgbmFtZWQgYCN7JG5hbWV9YCwgcGxlYXNlIGNob29zZSBhbm90aGVyIGJyZWFrcG9pbnQgbmFtZSwgb3IgcGFzcyBpbiBgJG92ZXJ3cml0ZTogdHJ1ZWAgdG8gb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBicmVha3BvaW50LlwiO1xuICAgICAgQHJldHVybiAkYnJlYWtwb2ludHM7XG4gICAgfVxuICAgIEBlbHNlIGlmIG5vdCBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICRuYW1lKSBvciAkb3ZlcndyaXRlID09IHRydWUge1xuICAgICAgQHJldHVybiBtYXAtbWVyZ2UoJGJyZWFrcG9pbnRzLCAkb3V0cHV0KTtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGFkZC1icmVha3BvaW50KCRuYW1lLCAkYmtwdCwgJG92ZXJ3cml0ZTogZmFsc2UpIHtcbiAgJG91dHB1dDogKCRuYW1lOiAkYmtwdCk7XG5cbiAgQGlmIGxlbmd0aCgkQlJFQUtQT0lOVFMpID09IDAge1xuICAgICRCUkVBS1BPSU5UUzogJG91dHB1dCAhZ2xvYmFsO1xuICB9XG4gIEBlbHNlIHtcbiAgICBAaWYgbWFwLWhhcy1rZXkoJEJSRUFLUE9JTlRTLCAkbmFtZSkgYW5kICRvdmVyd3JpdGUgIT0gdHJ1ZSB7XG4gICAgICBAd2FybiBcIllvdSBhbHJlYWR5IGhhdmUgYSBicmVha3BvaW50IG5hbWVkIGAjeyRuYW1lfWAsIHBsZWFzZSBjaG9vc2UgYW5vdGhlciBicmVha3BvaW50IG5hbWUsIG9yIHBhc3MgaW4gYCRvdmVyd3JpdGU6IHRydWVgIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgYnJlYWtwb2ludC5cIjtcbiAgICAgICRCUkVBS1BPSU5UUzogJEJSRUFLUE9JTlRTICFnbG9iYWw7XG4gICAgfVxuICAgIEBlbHNlIGlmIG5vdCBtYXAtaGFzLWtleSgkQlJFQUtQT0lOVFMsICRuYW1lKSBvciAkb3ZlcndyaXRlID09IHRydWUge1xuICAgICAgJEJSRUFLUE9JTlRTOiBtYXAtbWVyZ2UoJEJSRUFLUE9JTlRTLCAkb3V0cHV0KSAhZ2xvYmFsO1xuICAgIH1cbiAgfVxufVxuXG5AZnVuY3Rpb24gZ2V0LWJyZWFrcG9pbnQoJG5hbWU6IGZhbHNlKSB7XG4gIEBpZiAkbmFtZSA9PSBmYWxzZSB7XG4gICAgQHJldHVybiAkQlJFQUtQT0lOVFM7XG4gIH1cbiAgQGVsc2Uge1xuICAgIEByZXR1cm4gbWFwLWdldCgkQlJFQUtQT0lOVFMsICRuYW1lKTtcbiAgfVxufVxuIiwiQG1peGluIGxlZ2FjeS1zZXR0aW5ncy13YXJuaW5nIHtcbiAgJGxlZ2FjeVZhcnM6IChcbiAgICAnZGVmYXVsdC1tZWRpYSc6ICdkZWZhdWx0IG1lZGlhJyxcbiAgICAnZGVmYXVsdC1mZWF0dXJlJzogJ2RlZmF1bHQgZmVhdHVyZScsXG4gICAgJ2ZvcmNlLW1lZGlhLWFsbCc6ICdmb3JjZSBhbGwgbWVkaWEgdHlwZScsXG4gICAgJ3RvLWVtcyc6ICd0byBlbXMnLFxuICAgICdyZXNvbHV0aW9ucyc6ICd0cmFuc2Zvcm0gcmVzb2x1dGlvbnMnLFxuICAgICduby1xdWVyaWVzJzogJ25vIHF1ZXJpZXMnLFxuICAgICduby1xdWVyeS1mYWxsYmFja3MnOiAnbm8gcXVlcnkgZmFsbGJhY2tzJyxcbiAgICAnYmFzZS1mb250LXNpemUnOiAnYmFzZSBmb250IHNpemUnLFxuICAgICdsZWdhY3ktc3ludGF4JzogJ2xlZ2FjeSBzeW50YXgnXG4gICk7XG5cbiAgQGVhY2ggJGxlZ2FjeSwgJG5ldyBpbiAkbGVnYWN5VmFycyB7XG4gICAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtJyArICRsZWdhY3kpIHtcbiAgICAgIEB3YXJuIFwiSW4gb3JkZXIgdG8gYXZvaWQgdmFyaWFibGUgbmFtc3BhY2UgY29sbGlzaW9ucywgd2UgaGF2ZSB1cGRhdGVkIHRoZSB3YXkgdG8gY2hhbmdlIHNldHRpbmdzIGZvciBCcmVha3BvaW50LiBQbGVhc2UgY2hhbmdlIGFsbCBpbnN0YW5jZXMgb2YgYCRicmVha3BvaW50LSN7JGxlZ2FjeX06IHt7c2V0dGluZ319YCB0byBgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJyN7JG5ld30nLCB7e3NldHRpbmd9fSlgLiBWYXJpYWJsZSBzZXR0aW5ncywgYXMgd2VsbCBhcyB0aGlzIHdhcm5pbmcgd2lsbCBiZSBkZXByZWNhdGVkIGluIGEgZnV0dXJlIHJlbGVhc2UuXCJcbiAgICB9XG4gIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIEhhbmQgY29ycmVjdCBlYWNoIHNldHRpbmdcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LWRlZmF1bHQtbWVkaWEnKSBhbmQgJGJyZWFrcG9pbnQtZGVmYXVsdC1tZWRpYSAhPSBicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnZGVmYXVsdCBtZWRpYScsICRicmVha3BvaW50LWRlZmF1bHQtbWVkaWEpO1xuICB9XG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LWRlZmF1bHQtZmVhdHVyZScpIGFuZCAkYnJlYWtwb2ludC1kZWZhdWx0LWZlYXR1cmUgIT0gYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgZmVhdHVyZScpIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnZGVmYXVsdCBmZWF0dXJlJywgJGJyZWFrcG9pbnQtZGVmYXVsdC1mZWF0dXJlKTtcbiAgfVxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1mb3JjZS1tZWRpYS1hbGwnKSBhbmQgJGJyZWFrcG9pbnQtZm9yY2UtbWVkaWEtYWxsICE9IGJyZWFrcG9pbnQtZ2V0KCdmb3JjZSBhbGwgbWVkaWEgdHlwZScpIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnZm9yY2UgYWxsIG1lZGlhIHR5cGUnLCAkYnJlYWtwb2ludC1mb3JjZS1tZWRpYS1hbGwpO1xuICB9XG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LXRvLWVtcycpIGFuZCAkYnJlYWtwb2ludC10by1lbXMgIT0gYnJlYWtwb2ludC1nZXQoJ3RvIGVtcycpIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgndG8gZW1zJywgJGJyZWFrcG9pbnQtdG8tZW1zKTtcbiAgfVxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1yZXNvbHV0aW9ucycpIGFuZCAkYnJlYWtwb2ludC1yZXNvbHV0aW9ucyAhPSBicmVha3BvaW50LWdldCgndHJhbnNmb3JtIHJlc29sdXRpb25zJykge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCd0cmFuc2Zvcm0gcmVzb2x1dGlvbnMnLCAkYnJlYWtwb2ludC1yZXNvbHV0aW9ucyk7XG4gIH1cbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtbm8tcXVlcmllcycpIGFuZCAkYnJlYWtwb2ludC1uby1xdWVyaWVzICE9IGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyaWVzJykge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCdubyBxdWVyaWVzJywgJGJyZWFrcG9pbnQtbm8tcXVlcmllcyk7XG4gIH1cbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtbm8tcXVlcnktZmFsbGJhY2tzJykgYW5kICRicmVha3BvaW50LW5vLXF1ZXJ5LWZhbGxiYWNrcyAhPSBicmVha3BvaW50LWdldCgnbm8gcXVlcnkgZmFsbGJhY2tzJykge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCdubyBxdWVyeSBmYWxsYmFja3MnLCAkYnJlYWtwb2ludC1uby1xdWVyeS1mYWxsYmFja3MpO1xuICB9XG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LWJhc2UtZm9udC1zaXplJykgYW5kICRicmVha3BvaW50LWJhc2UtZm9udC1zaXplICE9IGJyZWFrcG9pbnQtZ2V0KCdiYXNlIGZvbnQgc2l6ZScpIHtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnYmFzZSBmb250IHNpemUnLCAkYnJlYWtwb2ludC1iYXNlLWZvbnQtc2l6ZSk7XG4gIH1cbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtbGVnYWN5LXN5bnRheCcpIGFuZCAkYnJlYWtwb2ludC1sZWdhY3ktc3ludGF4ICE9IGJyZWFrcG9pbnQtZ2V0KCdsZWdhY3kgc3ludGF4Jykge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCdsZWdhY3kgc3ludGF4JywgJGJyZWFrcG9pbnQtbGVnYWN5LXN5bnRheCk7XG4gIH1cbn0iLCIvLyBUeXBvZ3JhcGh5XG4kYmFzZS1mb250LXNpemUgICA6IDE2cHg7XG4kYmFzZS1saW5lLWhlaWdodCA6IDI0cHg7XG4kaGVhZGVyLWhlaWdodCAgICA6IDE2MHB4O1xuLy8gRm9udCBuYW1lcyAoZm9yIEBmb250LWZhY2UpXG4kY3Jpa2V5ICAgICAgICAgICA6IFwiQ3Jpa2V5IFNxdWF0XCI7XG4kY3Jpa2V5X3RhbGwgICAgICA6IFwiQ3Jpa2V5IFRhbGxcIjtcbiRqb25ueSAgICAgICAgICAgIDogXCJKb25ueSBRdWVzdCBDbGFzc2ljXCI7XG4kcm9ja3dlbGwgICAgICAgICA6IFwiUm9ra2l0dFwiO1xuJHB0c2FucyAgICAgICAgICAgOiBcIlBUIFNhbnNcIjtcbiRwdHNlcmlmICAgICAgICAgIDogXCJQVCBTZXJpZlwiO1xuJGZlbGFcdCAgICAgICAgICA6IFwiRmVsYSBQcm9cIjtcbiRtb25vc3BhY2UgICAgICAgIDogXCJDb3VyaWVyIE5ld1wiO1xuLy8gRmFsbGJhY2sgc3RhY2tzXG4kY3Jpa2V5X3N0YWNrOiAgICAgICAgKHN0YWNrICRjcmlrZXksICAgICBmYWxsYmFjayBcIidDb3VyaWVyIE5ldycsIENvdXJpZXIsICdMdWNpZGEgU2FucyBUeXBld3JpdGVyJywgJ0x1Y2lkYSBUeXBld3JpdGVyJywgbW9ub3NwYWNlXCIpO1xuJGNyaWtleV90YWxsX3N0YWNrOiAgIChzdGFjayAkY3Jpa2V5X3RhbGwsICBmYWxsYmFjayBcIidDb3VyaWVyIE5ldycsIENvdXJpZXIsICdMdWNpZGEgU2FucyBUeXBld3JpdGVyJywgJ0x1Y2lkYSBUeXBld3JpdGVyJywgbW9ub3NwYWNlXCIpO1xuJGpvbm55X3N0YWNrOiAgICAgICAgIChzdGFjayAkam9ubnksICAgICAgZmFsbGJhY2sgXCJSb2Nrd2VsbCwgJ0NvdXJpZXIgQm9sZCcsIENvdXJpZXIsIEdlb3JnaWEsIFRpbWVzLCAnVGltZXMgTmV3IFJvbWFuJywgc2VyaWZcIik7XG4kcm9ja3dlbGxfc3RhY2s6ICAgICAgKHN0YWNrICRyb2Nrd2VsbCwgICAgIGZhbGxiYWNrIFwiUm9ja3dlbGwsICdDb3VyaWVyIEJvbGQnLCBDb3VyaWVyLCBHZW9yZ2lhLCBUaW1lcywgJ1RpbWVzIE5ldyBSb21hbicsIHNlcmlmXCIpO1xuJHB0c2Fuc19zdGFjazogICAgICAgIChzdGFjayAkcHRzYW5zLCAgICAgZmFsbGJhY2sgXCJDYW5kYXJhLCBDYWxpYnJpLCBTZWdvZSwgJ1NlZ29lIFVJJywgT3B0aW1hLCBBcmlhbCwgc2Fucy1zZXJpZlwiKTtcbiRwdHNlcmlmX3N0YWNrOiAgICAgICAoc3RhY2sgJHB0c2VyaWYsICAgIGZhbGxiYWNrIFwiR2FyYW1vbmQsIEJhc2tlcnZpbGxlLCAnQmFza2VydmlsbGUgT2xkIEZhY2UnLCAnSG9lZmxlciBUZXh0JywgJ1RpbWVzIE5ldyBSb21hbicsIHNlcmlmXCIpO1xuJGZlbGFfc3RhY2s6XHRcdFx0XHRcdChzdGFjayAkZmVsYSwgICAgZmFsbGJhY2sgXCJDYW5kYXJhLCBDYWxpYnJpLCBTZWdvZSwgJ1NlZ29lIFVJJywgT3B0aW1hLCBBcmlhbCwgc2Fucy1zZXJpZlwiKTtcbiRtb25vc3BhY2Vfc3RhY2s6ICAgICAoc3RhY2sgJG1vbm9zcGFjZSwgICAgZmFsbGJhY2sgXCInQ291cmllciBOZXcnLCBDb3VyaWVyLCAnTHVjaWRhIFNhbnMgVHlwZXdyaXRlcicsICdMdWNpZGEgVHlwZXdyaXRlcicsIG1vbm9zcGFjZVwiKTtcblxuXG4vLyBQYXRoc1xuJGltYWdlc19kaXI6ICAgICAgXCIvYXNzZXRzL2ltYWdlcy9kZXNpZ24vXCI7XG4kZm9udHNfZGlyOiAgICAgICBcIi9hc3NldHMvZm9udHMvXCI7XG5cbi8vIFdvcmtpbmcgaW4gZW1zIGlzIGFubm95aW5nLiBUaGluayBpbiBwaXhlbHMgYnkgdXNpbmcgdGhpcyBoYW5keSBmdW5jdGlvbiwgZW1DYWxjKCNweClcbkBmdW5jdGlvbiBlbSgkcHhXaWR0aCkge1xuICBAcmV0dXJuICRweFdpZHRoIC8gJGJhc2UtZm9udC1zaXplICogMWVtO1xufVxuXG5cbi8qIFN1c3kgZ3JpZCAtIGh0dHA6Ly9zdXN5LnJlYWR0aGVkb2NzLm9yZy9lbi8gKi9cbiRzdXN5OiAoXG4gIC8vIHRoZSBiYXNpY3NcbiAgbWF0aDogZmx1aWQsXG4gIGNvbHVtbnM6IDgsXG4gIGd1dHRlcnM6IGVtKDE2cHgpIC8gZW0oMTYwcHgpLFxuICBjb2x1bW4td2lkdGg6IGVtKDE2MHB4KSxcbik7XG5cblxuLyogQnJlYWtwb2ludHMgLSBodHRwOi8vYnJlYWtwb2ludC1zYXNzLmNvbS8gKi9cbiRtb2JpbGUgICAgICAgICAgICAgOiBtYXgtd2lkdGggMzIwcHg7XG4kdGFibGV0ICAgICAgICAgICAgIDogKG1pbi13aWR0aCAzMjFweCkgKG1heC13aWR0aCA4ODhweCk7ICAgIC8vIHdhcyA3NjhcbiRtb2JpbGVfYW5kX3RhYmxldCAgOiBtYXgtd2lkdGggODg4cHg7XG4kZGVza3RvcCAgICAgICAgICAgIDogbWluLXdpZHRoIDg4OXB4OyAgICAgICAgICAgICAgLy8gd2FzIDc2OVxuJHByb3Blcl9kZXNrdG9wICAgICA6IG1pbi13aWR0aCAxMjAwcHg7XG4kcmV0aW5hICAgICAgICAgICA6ICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCAobWluLXJlc29sdXRpb246IDJkcHB4KTsgLy8gPSAxOTJkcGlcblxuLy8gQ29tcGFzcyBDU1Mgb3V0cHV0IHNldHRpbmdzXG4kREVCVUc6IHRydWU7XG4kbGVnYWN5LXN1cHBvcnQtZm9yLWllODogdHJ1ZTtcbiRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYTogdHJ1ZTtcbiRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itd2Via2l0OiB0cnVlO1xuJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1vcGVyYTogdHJ1ZTtcbiRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbWljcm9zb2Z0OiB0cnVlO1xuIiwiLy8gTUlYSU5TXG5cbi8vIEFwcGx5IHZlbmRvciBwcmVmaXhlcyB0byBhIHByb3BlcnR5XG5AbWl4aW4gdmVuZG9ycHJvcCgkcHJvcG5hbWUsICRwcm9wdmFsdWUpe1xuICAtd2Via2l0LSN7JHByb3BuYW1lfTogI3skcHJvcHZhbHVlfTtcbiAgLW1vei0jeyRwcm9wbmFtZX06ICN7JHByb3B2YWx1ZX07XG4gIC1tcy0jeyRwcm9wbmFtZX06ICN7JHByb3B2YWx1ZX07XG4gIC1vLSN7JHByb3BuYW1lfTogI3skcHJvcHZhbHVlfTtcbiAgI3skcHJvcG5hbWV9OiAjeyRwcm9wdmFsdWV9O1xufVxuLy8gQXBwbHkgdmVuZG9yIHByZWZpeGVzIHRvIGEgcHJvcGVydHkgdmFsdWVcbkBtaXhpbiB2ZW5kb3J2YWx1ZSgkcHJvcG5hbWUsICRwcm9wdmFsdWUpe1xuICAjeyRwcm9wbmFtZX06IC13ZWJraXQtI3skcHJvcHZhbHVlfTtcbiAgI3skcHJvcG5hbWV9OiAtbW96LSN7JHByb3B2YWx1ZX07XG4gICN7JHByb3BuYW1lfTogLW1zLSN7JHByb3B2YWx1ZX07XG4gICN7JHByb3BuYW1lfTogLW8tI3skcHJvcHZhbHVlfTtcbiAgI3skcHJvcG5hbWV9OiAjeyRwcm9wdmFsdWV9O1xufVxuXG4vLyBBbnRpYWxpYXMgdGV4dFxuQG1peGluIHNtb290aCgkc3RhdGU6IHRydWUpe1xuXHRAaWYgJHN0YXRlID09IHRydWUge1xuXHRcdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHRcdC1tb3otZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHRcdC1tcy1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG5cdFx0Zm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHR9XG5cdEBlbHNle1xuXHRcdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO1xuXHRcdC1tb3otZm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO1xuXHRcdC1tcy1mb250LXNtb290aGluZzogc3VicGl4ZWwtYW50aWFsaWFzZWQ7XG5cdFx0Zm9udC1zbW9vdGhpbmc6IHN1YnBpeGVsLWFudGlhbGlhc2VkO1xuXHR9XG59XG5cbi8vIDo6c2VsZWN0aW9uXG4kcHJlZml4ZXM6IChcIi1tb3otXCIsIFwiXCIpO1xuQG1peGluIHNlbGVjdGlvbigkY29sb3IsICRiYWNrZ3JvdW5kKSB7XG4gICAgQGVhY2ggJHByZWZpeCBpbiAkcHJlZml4ZXMge1xuICAgICAgICAmOjojeyRwcmVmaXh9c2VsZWN0aW9uIHtcbiAgICAgICAgICAgIGNvbG9yOiAkY29sb3IgIWltcG9ydGFudDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBTVkcgaGVscGVyXG5AZnVuY3Rpb24gc3ZnaWZ5KCRzdmcpIHtcbiAgQHJldHVybiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJyArIGJhc2U2NGVuY29kZSgkc3ZnKSk7XG59XG5cbi8vIENsZWFyZml4XG5AbWl4aW4gY2xlYXJlcigpIHtcbiAgJjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbn1cblxuLy9cbkBtaXhpbiBtbS1oZWFkaW5nKCRjb2xvdXI6ICRtbS1waW5rKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjb2xvdXI7XG4gIGJveC1zaGFkb3c6ICRiYXNlLWZvbnQtc2l6ZS8yIDAgMCAkY29sb3VyLCAtKCRiYXNlLWZvbnQtc2l6ZS8yKSAwIDAgJGNvbG91cjtcbiAgLy8gQGluY2x1ZGUgdmVuZG9ycHJvcChcImJhY2tmYWNlLXZpc2liaWxpdHlcIiwgXCJoaWRkZW5cIik7IC8vIHRoaXMgaXMgd2VpcmQuIGFkZGluZyBpdCBtYWtlcyBqYWdnaWVzIGdvIGF3YXkgb24gY2hyb21lIGJ1dCBhZGRzIHRoZW0gb24gaW9zXG59XG5cblxuLy8gU3RyaXAgdW5pdHMgZnVuY3Rpb25cbkBmdW5jdGlvbiBzdHJpcC11bml0cygkbnVtYmVyKSB7XG4gIEByZXR1cm4gJG51bWJlciAvICgkbnVtYmVyICogMCArIDEpO1xufVxuXG4vLyAgUmV0aW5hIGJhY2tncm91bmcgaW1hZ2VcbkBtaXhpbiBiYWNrZ3JvdW5kLXJldGluYSgkbm9ybWFsLCAkcmV0aW5hKSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogaW1hZ2VVcmwoJG5vcm1hbCk7XG4gICAgLy8gMS41ZHBweCA9IDE0NGRwaVxuICAgIEBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSwgKC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDMvMiksIChtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCAobWluLWRldmljZS1waXhlbC1yYXRpbzogMiksIChtaW4tcmVzb2x1dGlvbjogMS41ZHBweCkge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBpbWFnZVVybCgkcmV0aW5hKTtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAoaW1hZ2Utd2lkdGgoJHJldGluYSkgLyAyKSAoaW1hZ2UtaGVpZ2h0KCRyZXRpbmEpIC8gMik7XG4gICAgfVxufVxuXG4vLyBTdW0gb2YgdmFsdWVzIGluIGEgbGlzdFxuQGZ1bmN0aW9uIHN1bSgkbGlzdCwgJGZvcmNlOiBmYWxzZSkge1xuICAkcmVzdWx0OiAwO1xuICBAZWFjaCAkaXRlbSBpbiAkbGlzdCB7XG4gICAgQGlmIHR5cGUtb2YoJGl0ZW0pID09IG51bWJlciB7XG4gICAgICBAaWYgJGZvcmNlIGFuZCB1bml0KCRpdGVtKSB7XG4gICAgICAgICRpdGVtOiAkaXRlbSAvICgkaXRlbSAqIDAgKyAxKTtcbiAgICAgIH1cbiAgICAgIEBpZiB1bml0bGVzcygkaXRlbSkge1xuICAgICAgICAkcmVzdWx0OiAkcmVzdWx0ICsgJGl0ZW07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gQ29udmVydCBzcGFjZSBzZXBlcmF0ZWQgc3RyaW5nIG9mIHZhbHVlcyB0byBlbXNcbkBmdW5jdGlvbiBwb3NpdGlvbl90b19lbXMoJGxpc3QpIHtcblx0JHJlc3VsdDogKCk7XG5cdEBlYWNoICRpdGVtIGluICRsaXN0IHtcblx0ICAgIEBpZiB0eXBlLW9mKCRpdGVtKSA9PSBudW1iZXIge1xuXHQgICAgXHRAaWYgJGl0ZW0gPT0gMCB7XG5cdCAgICBcdFx0JHJlc3VsdDogYXBwZW5kKCRyZXN1bHQsIDApO1xuXHQgICAgXHR9IEBlbHNlIHtcblx0ICAgIFx0XHQkcmVzdWx0OiBhcHBlbmQoJHJlc3VsdCwgZW0oJGl0ZW0pKTtcblx0ICAgIFx0fVxuXHQgICAgfVxuXHR9XG5cdEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gRm9udCBmYW1pbHlcbkBtaXhpbiBkZWZpbmVmb250cygkZm9udCwgJGZvbnRmYWNlX3NpemU6IGZhbHNlLCAkZm9udGZhY2VfZGVmOiB0cnVlKSB7XG5cdCRmYWxsYmFjazogZmluZC12YWx1ZSgkZm9udCwgZmFsbGJhY2spO1xuXHQkc3RhY2s6IGZpbmQtdmFsdWUoJGZvbnQsIHN0YWNrKTtcblx0Zm9udC1mYW1pbHk6IHVucXVvdGUoJGZhbGxiYWNrKTtcblx0QGlmICRmb250ZmFjZV9kZWYge1xuXHRcdGh0bWwuZm9udGZhY2UgJiB7XG5cdFx0ICBmb250LWZhbWlseTogdW5xdW90ZSgkc3RhY2spO1xuXHRcdFx0QGlmICRmb250ZmFjZV9zaXplIHtcblx0XHRcdFx0Zm9udC1zaXplOiAkZm9udGZhY2Vfc2l6ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLy8gRmluZCB2YWx1ZSBpbiBsaXN0XG5AZnVuY3Rpb24gZmluZC12YWx1ZSgkbGlzdCwgJGtleSkge1xuICAgIEBlYWNoICRpdGVtIGluICRsaXN0IHtcbiAgICAgICAgQGlmICgka2V5ID09IG50aCgkaXRlbSwgMSkpIHtcbiAgICAgICAgICAgIEByZXR1cm4gbnRoKCRpdGVtLCAyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBAcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBrZXlmcmFtZXMgbWl4aW5cbkBtaXhpbiBrZXlmcmFtZXMoJG5hbWUpIHtcbiAgQC13ZWJraXQta2V5ZnJhbWVzICN7JG5hbWV9IHtcbiAgICBAY29udGVudDtcbiAgfVxuICBALW1vei1rZXlmcmFtZXMgI3skbmFtZX0ge1xuICAgIEBjb250ZW50O1xuICB9XG4gIEAtbXMta2V5ZnJhbWVzICN7JG5hbWV9IHtcbiAgICBAY29udGVudDtcbiAgfVxuICBAa2V5ZnJhbWVzICN7JG5hbWV9IHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5cblxuLy8gTWFnaWNuZXNzIFBhcmFsbGF4IG1peGluc1xuQG1peGluIHBhcmFsbGF4LWluaXQoXG4gICRwZXJzcGVjdGl2ZSAgOiAkcGFyYWxsYXgtcGVyc3BlY3RpdmUsXG4gICRlbGVtZW50ICAgICAgOiAkcGFyYWxsYXgtZWxlbWVudCxcbiAgJHBhcmFsbGF4LWlvcyA6ICRwYXJhbGxheC1pb3NcbiAgKSB7XG4gIEBpZiAkZWxlbWVudCA9PSBcImJvZHlcIiB7XG4gICAgaHRtbCwgYm9keSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cbiAgfVxuICAjeyRlbGVtZW50fSB7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgQGluY2x1ZGUgcGVyc3BlY3RpdmUoJHBlcnNwZWN0aXZlICogMXB4KTtcbiAgICB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkO1xuICAgIC8vIEFsbG93cyBmb3Igc21vb3RoIHNjcm9sbGluZyBidXQgZGlzYWJsZXMgcGFyYWxsYXggZWZmZWN0cy5cbiAgICBAaWYgJHBhcmFsbGF4LWlvcyA9PSBmYWxzZSB7XG4gICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gICAgfVxuICAgIC8vIFByZXNlcnZlIDNEXG4gICAgJiwgKiB7XG4gICAgICB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkO1xuICAgIH1cbiAgfVxufVxuQG1peGluIHBhcmFsbGF4KFxuICAkZGlzdGFuY2UgICAgOiAwLFxuICAkcGVyc3BlY3RpdmUgOiAkcGFyYWxsYXgtcGVyc3BlY3RpdmVcbiAgKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWigkZGlzdGFuY2UgKiAkcGVyc3BlY3RpdmUgKiAxcHgpIHNjYWxlKGFicygkZGlzdGFuY2UgLSAxKSk7XG4gIHotaW5kZXg6ICRkaXN0YW5jZSAqIDEwMDA7XG59XG5cblxuXG5cblxuXG5cbi8vICBTcHJpdGVzaGVldCBtaXhpbnNcbkBmdW5jdGlvbiBzcHJpdGUtd2lkdGgoJHNwcml0ZSkge1xuICBAcmV0dXJuIG50aCgkc3ByaXRlLCA1KTtcbn1cblxuQGZ1bmN0aW9uIHNwcml0ZS1oZWlnaHQoJHNwcml0ZSkge1xuICBAcmV0dXJuIG50aCgkc3ByaXRlLCA2KTtcbn1cblxuQGZ1bmN0aW9uIHNwcml0ZS1wb3NpdGlvbigkc3ByaXRlKSB7XG4gICRzcHJpdGUtb2Zmc2V0LXg6IG50aCgkc3ByaXRlLCAzKTtcbiAgJHNwcml0ZS1vZmZzZXQteTogbnRoKCRzcHJpdGUsIDQpO1xuICBAcmV0dXJuICRzcHJpdGUtb2Zmc2V0LXggICRzcHJpdGUtb2Zmc2V0LXk7XG59XG5cbkBmdW5jdGlvbiBzcHJpdGUtdXJsKCRzcHJpdGUpIHtcbiAgJHNwcml0ZS1pbWFnZTogbnRoKCRzcHJpdGUsIDkpO1xuICBAcmV0dXJuIHVybCgjeyRpbWFnZXNfZGlyfSN7JHNwcml0ZS1pbWFnZX0pO1xufVxuXG5AZnVuY3Rpb24gc3ByaXRlc2hlZXQtdXJsKCRzcHJpdGVzaGVldCkge1xuICAkc3ByaXRlLWltYWdlOiBudGgoJHNwcml0ZXNoZWV0LCAzKTtcbiAgQHJldHVybiB1cmwoI3skaW1hZ2VzX2Rpcn0jeyRzcHJpdGUtaW1hZ2V9KTtcbn1cblxuLy8gQG1peGluIHNwcml0ZSgkc3ByaXRlKSB7XG4vLyAgIEBpbmNsdWRlIHNwcml0ZS1pbWFnZSgkc3ByaXRlKTtcbi8vICAgQGluY2x1ZGUgc3ByaXRlLXBvc2l0aW9uKCRzcHJpdGUpO1xuLy8gICBAaW5jbHVkZSBzcHJpdGUtd2lkdGgoJHNwcml0ZSk7XG4vLyAgIEBpbmNsdWRlIHNwcml0ZS1oZWlnaHQoJHNwcml0ZSk7XG4vLyB9XG5cbi8vIFRoZSBgc3ByaXRlc2AgbWl4aW4gZ2VuZXJhdGVzIGlkZW50aWNhbCBvdXRwdXQgdG8gdGhlIENTUyB0ZW1wbGF0ZVxuLy8gICBidXQgY2FuIGJlIG92ZXJyaWRkZW4gaW5zaWRlIG9mIFNDU1Ncbi8vXG4vLyBAaW5jbHVkZSBzcHJpdGVzKCRzcHJpdGVzaGVldC1zcHJpdGVzKTtcbkBtaXhpbiBzcHJpdGVzKCRzcHJpdGVzKSB7XG4gIEBlYWNoICRzcHJpdGUgaW4gJHNwcml0ZXMge1xuICAgICRzcHJpdGUtbmFtZTogbnRoKCRzcHJpdGUsIDEwKTtcbiAgICAuI3skc3ByaXRlLW5hbWV9IHtcbiAgICAgIEBpbmNsdWRlIHNwcml0ZSgkc3ByaXRlKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG5AZnVuY3Rpb24gaW1hZ2VVcmwoJGltZykge1xuICBAcmV0dXJuIHVybCgjeyRpbWFnZXNfZGlyfSN7JGltZ30pO1xufVxuIiwiLyogTW0gQ29sb3VyIHBhbGV0dGUgKi9cbiRkYXJrLWJnXHRcdDogIzE1MTkxZDtcblxuJG1tLXBpbmtcdFx0OiAjZWQyNzkzO1xuJG1tLWJsdWVcdFx0OiAjMTJiZGZmO1xuJG1tLW9yYW5nZVx0XHQ6ICNmOWFhMmE7XG5cbiRtbS1ncmVlblx0XHQ6ICMyN2I1MWM7XG5cbiRtbS13aGl0ZVx0XHQ6ICNmZmZmZmY7IC8vIFllYWggYnV0IGhleSAtIEl0J3MgKk1NKiB3aGl0ZVxuJG1tLWxpZ2h0Z3JleVx0OiBmYWRlX291dCgkbW0td2hpdGUsIDAuNSk7XG4kbW0tcGFsZWdyZXlcdDogI2YyZjJmMjtcbiRtbS1ncmV5XHRcdDogI2I0YjdiNztcbiRtbS1kYXJrZ3JleVx0OiAjNGY1NTU1O1xuXG4kbW0tdGVhbCBcdFx0OiAjMGI2MTgwO1xuJG1tLWRhcmtcdFx0OiAjMjAyYjMwO1xuJG1tLW1ldGFkYXRhLWJsdWU6ICM0YzUxNmY7XG4kbW0tbWV0YWRhdGEtbGlnaHRibHVlOiBmYWRlX291dCgkbW0tbWV0YWRhdGEtYmx1ZSwwLjUpO1xuXG4kbW0taW1hZ2Vib3JkZXJcdDogI2YyZTdjNTtcblxuJG1tLWVycm9yLXJlZDogI2VkMTM0YjsiLCIvKiBnZW5lcmFsIHBsYWNlaG9sZGVycyAqL1xuXG5cbi8qIGxpbmsgc3R5bGVzICovXG5cbiViYXNlbGlua3N0eWxlIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogJG1tLXBpbms7XG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiBzYXR1cmF0ZSgkbW0tcGluaywgNTAlKTtcbiAgfVxuICBAaW5jbHVkZSBzZWxlY3Rpb24ocmdiYSgkbW0td2hpdGUsIDAuNiksICRtbS1waW5rKTtcbiAgc3BhbiB7XG4gICAgQGluY2x1ZGUgc2VsZWN0aW9uKHJnYmEoJG1tLXdoaXRlLCAwLjYpLCAkbW0tcGluayk7XG4gIH1cbn1cbiVsaW5rc3R5bGUge1xuICBAZXh0ZW5kICViYXNlbGlua3N0eWxlO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgkbW0tYmx1ZSwgMC4yNSk7XG4gICY6aG92ZXIge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKCRtbS1ibHVlLCAwLjUpO1xuICB9XG59IiwiLy8gU0NTUyB2YXJpYWJsZXMgYXJlIGluZm9ybWF0aW9uIGFib3V0IGljb24ncyBjb21waWxlZCBzdGF0ZSwgc3RvcmVkIHVuZGVyIGl0cyBvcmlnaW5hbCBmaWxlIG5hbWVcbi8vXG4vLyAuaWNvbi1ob21lIHtcbi8vICAgd2lkdGg6ICRpY29uLWhvbWUtd2lkdGg7XG4vLyB9XG4vL1xuLy8gVGhlIGxhcmdlIGFycmF5LWxpa2UgdmFyaWFibGVzIGNvbnRhaW4gYWxsIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIGljb25cbi8vICRpY29uLWhvbWU6IHggeSBvZmZzZXRfeCBvZmZzZXRfeSB3aWR0aCBoZWlnaHQgdG90YWxfd2lkdGggdG90YWxfaGVpZ2h0IGltYWdlX3BhdGg7XG4vL1xuLy8gQXQgdGhlIGJvdHRvbSBvZiB0aGlzIHNlY3Rpb24sIHdlIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwcml0ZXNoZWV0IGl0c2VsZlxuLy8gJG1haW5tZW51OiB3aWR0aCBoZWlnaHQgaW1hZ2UgJG1haW5tZW51LXNwcml0ZXM7XG4kbWVudS1hYm91dDogKDI3MnB4LCAwcHgsIC0yNzJweCwgMHB4LCAxNDZweCwgMTUwcHgsIDExMDVweCwgMTUwcHgsICdtYWlubWVudS5wbmcnLCAnYWJvdXQnLCApO1xuJG1lbnUtYmxvZzogKDg0OXB4LCAwcHgsIC04NDlweCwgMHB4LCAyNTZweCwgMTUwcHgsIDExMDVweCwgMTUwcHgsICdtYWlubWVudS5wbmcnLCAnYmxvZycsICk7XG4kbWVudS1mYW5jbHViOiAoMHB4LCAwcHgsIDBweCwgMHB4LCAxMjRweCwgMTUwcHgsIDExMDVweCwgMTUwcHgsICdtYWlubWVudS5wbmcnLCAnZmFuY2x1YicsICk7XG4kbWVudS1nYW1lczogKDEyOXB4LCAwcHgsIC0xMjlweCwgMHB4LCAxMzhweCwgMTUwcHgsIDExMDVweCwgMTUwcHgsICdtYWlubWVudS5wbmcnLCAnZ2FtZXMnLCApO1xuJG1lbnUtam9iczogKDYxMnB4LCAwcHgsIC02MTJweCwgMHB4LCAyMzJweCwgMTUwcHgsIDExMDVweCwgMTUwcHgsICdtYWlubWVudS5wbmcnLCAnam9icycsICk7XG4kbWVudS1tbS1sb2dvOiAoNDIzcHgsIDBweCwgLTQyM3B4LCAwcHgsIDE4NHB4LCA1MnB4LCAxMTA1cHgsIDE1MHB4LCAnbWFpbm1lbnUucG5nJywgJ21tLWxvZ28nLCApO1xuJG1haW5tZW51LXNwcml0ZXM6ICgkbWVudS1hYm91dCwgJG1lbnUtYmxvZywgJG1lbnUtZmFuY2x1YiwgJG1lbnUtZ2FtZXMsICRtZW51LWpvYnMsICRtZW51LW1tLWxvZ28sICk7XG4kbWFpbm1lbnU6ICgxMTA1cHgsIDE1MHB4LCAnbWFpbm1lbnUucG5nJywgJG1haW5tZW51LXNwcml0ZXMsICk7XG5cblxuIiwiLy8gU0NTUyB2YXJpYWJsZXMgYXJlIGluZm9ybWF0aW9uIGFib3V0IGljb24ncyBjb21waWxlZCBzdGF0ZSwgc3RvcmVkIHVuZGVyIGl0cyBvcmlnaW5hbCBmaWxlIG5hbWVcbi8vXG4vLyAuaWNvbi1ob21lIHtcbi8vICAgd2lkdGg6ICRpY29uLWhvbWUtd2lkdGg7XG4vLyB9XG4vL1xuLy8gVGhlIGxhcmdlIGFycmF5LWxpa2UgdmFyaWFibGVzIGNvbnRhaW4gYWxsIGluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIGljb25cbi8vICRpY29uLWhvbWU6IHggeSBvZmZzZXRfeCBvZmZzZXRfeSB3aWR0aCBoZWlnaHQgdG90YWxfd2lkdGggdG90YWxfaGVpZ2h0IGltYWdlX3BhdGg7XG4vL1xuLy8gQXQgdGhlIGJvdHRvbSBvZiB0aGlzIHNlY3Rpb24sIHdlIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwcml0ZXNoZWV0IGl0c2VsZlxuLy8gJG1haW5tZW51Mng6IHdpZHRoIGhlaWdodCBpbWFnZSAkbWFpbm1lbnUyeC1zcHJpdGVzO1xuJG1lbnUyeC1hYm91dDogKDU0NHB4LCAwcHgsIC01NDRweCwgMHB4LCAyOTJweCwgMzAwcHgsIDIyMTBweCwgMzAwcHgsICdtYWlubWVudTJ4LnBuZycsICdhYm91dCcsICk7XG4kbWVudTJ4LWJsb2c6ICgxNjk4cHgsIDBweCwgLTE2OThweCwgMHB4LCA1MTJweCwgMzAwcHgsIDIyMTBweCwgMzAwcHgsICdtYWlubWVudTJ4LnBuZycsICdibG9nJywgKTtcbiRtZW51MngtZmFuY2x1YjogKDBweCwgMHB4LCAwcHgsIDBweCwgMjQ4cHgsIDMwMHB4LCAyMjEwcHgsIDMwMHB4LCAnbWFpbm1lbnUyeC5wbmcnLCAnZmFuY2x1YicsICk7XG4kbWVudTJ4LWdhbWVzOiAoMjU4cHgsIDBweCwgLTI1OHB4LCAwcHgsIDI3NnB4LCAzMDBweCwgMjIxMHB4LCAzMDBweCwgJ21haW5tZW51MngucG5nJywgJ2dhbWVzJywgKTtcbiRtZW51Mngtam9iczogKDEyMjRweCwgMHB4LCAtMTIyNHB4LCAwcHgsIDQ2NHB4LCAzMDBweCwgMjIxMHB4LCAzMDBweCwgJ21haW5tZW51MngucG5nJywgJ2pvYnMnLCApO1xuJG1lbnUyeC1tbS1sb2dvOiAoODQ2cHgsIDBweCwgLTg0NnB4LCAwcHgsIDM2OHB4LCAxMDRweCwgMjIxMHB4LCAzMDBweCwgJ21haW5tZW51MngucG5nJywgJ21tLWxvZ28nLCApO1xuJG1haW5tZW51Mngtc3ByaXRlczogKCRtZW51MngtYWJvdXQsICRtZW51MngtYmxvZywgJG1lbnUyeC1mYW5jbHViLCAkbWVudTJ4LWdhbWVzLCAkbWVudTJ4LWpvYnMsICRtZW51MngtbW0tbG9nbywgKTtcbiRtYWlubWVudTJ4OiAoMjIxMHB4LCAzMDBweCwgJ21haW5tZW51MngucG5nJywgJG1haW5tZW51Mngtc3ByaXRlcywgKTtcblxuXG4iLCIvLyBTQ1NTIHZhcmlhYmxlcyBhcmUgaW5mb3JtYXRpb24gYWJvdXQgaWNvbidzIGNvbXBpbGVkIHN0YXRlLCBzdG9yZWQgdW5kZXIgaXRzIG9yaWdpbmFsIGZpbGUgbmFtZVxuLy9cbi8vIC5pY29uLWhvbWUge1xuLy8gICB3aWR0aDogJGljb24taG9tZS13aWR0aDtcbi8vIH1cbi8vXG4vLyBUaGUgbGFyZ2UgYXJyYXktbGlrZSB2YXJpYWJsZXMgY29udGFpbiBhbGwgaW5mb3JtYXRpb24gYWJvdXQgYSBzaW5nbGUgaWNvblxuLy8gJGljb24taG9tZTogeCB5IG9mZnNldF94IG9mZnNldF95IHdpZHRoIGhlaWdodCB0b3RhbF93aWR0aCB0b3RhbF9oZWlnaHQgaW1hZ2VfcGF0aDtcbi8vXG4vLyBBdCB0aGUgYm90dG9tIG9mIHRoaXMgc2VjdGlvbiwgd2UgcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3ByaXRlc2hlZXQgaXRzZWxmXG4vLyAkc3ByaXRlc2hlZXQ6IHdpZHRoIGhlaWdodCBpbWFnZSAkc3ByaXRlc2hlZXQtc3ByaXRlcztcbiRzc2hlZXQtcGFnaW5nLWN1cnJlbnQ6ICgyOXB4LCAwcHgsIC0yOXB4LCAwcHgsIDM1cHgsIDQ1cHgsIDY0cHgsIDQ1cHgsICdzc2hlZXQucG5nJywgJ3BhZ2luZy1jdXJyZW50Jyk7XG4kc3NoZWV0LXppZ3phZzogKDBweCwgMHB4LCAwcHgsIDBweCwgMjRweCwgMzJweCwgNjRweCwgNDVweCwgJ3NzaGVldC5wbmcnLCAnemlnemFnJyk7XG4kc3ByaXRlc2hlZXQtc3ByaXRlczogKCRzc2hlZXQtcGFnaW5nLWN1cnJlbnQsICRzc2hlZXQtemlnemFnLCApO1xuJHNwcml0ZXNoZWV0OiAoNjRweCwgNDVweCwgJ3NzaGVldC5wbmcnLCAkc3ByaXRlc2hlZXQtc3ByaXRlcywgKTtcbiIsIi8vIFNDU1MgdmFyaWFibGVzIGFyZSBpbmZvcm1hdGlvbiBhYm91dCBpY29uJ3MgY29tcGlsZWQgc3RhdGUsIHN0b3JlZCB1bmRlciBpdHMgb3JpZ2luYWwgZmlsZSBuYW1lXG4vL1xuLy8gLmljb24taG9tZSB7XG4vLyAgIHdpZHRoOiAkaWNvbi1ob21lLXdpZHRoO1xuLy8gfVxuLy9cbi8vIFRoZSBsYXJnZSBhcnJheS1saWtlIHZhcmlhYmxlcyBjb250YWluIGFsbCBpbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBpY29uXG4vLyAkaWNvbi1ob21lOiB4IHkgb2Zmc2V0X3ggb2Zmc2V0X3kgd2lkdGggaGVpZ2h0IHRvdGFsX3dpZHRoIHRvdGFsX2hlaWdodCBpbWFnZV9wYXRoO1xuLy9cbi8vIEF0IHRoZSBib3R0b20gb2YgdGhpcyBzZWN0aW9uLCB3ZSBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcHJpdGVzaGVldCBpdHNlbGZcbi8vICRzcHJpdGVzaGVldDJ4OiB3aWR0aCBoZWlnaHQgaW1hZ2UgJHNwcml0ZXNoZWV0Mngtc3ByaXRlcztcbiRzc2hlZXQyeC1wYWdpbmctY3VycmVudDogKDU4cHgsIDBweCwgLTU4cHgsIDBweCwgNzBweCwgOTBweCwgMTI4cHgsIDkwcHgsICdzc2hlZXQyeC5wbmcnLCAncGFnaW5nLWN1cnJlbnQnLCApO1xuJHNzaGVldDJ4LXppZ3phZzogKDBweCwgMHB4LCAwcHgsIDBweCwgNDhweCwgNjRweCwgMTI4cHgsIDkwcHgsICdzc2hlZXQyeC5wbmcnLCAnemlnemFnJywgKTtcbiRzcHJpdGVzaGVldDJ4LXNwcml0ZXM6ICgkc3NoZWV0MngtcGFnaW5nLWN1cnJlbnQsICRzc2hlZXQyeC16aWd6YWcsICk7XG4kc3ByaXRlc2hlZXQyeDogKDEyOHB4LCA5MHB4LCAnc3NoZWV0MngucG5nJywgJHNwcml0ZXNoZWV0Mngtc3ByaXRlcywgKTtcblxuXG4iLCIvKiBHZW5lcmljIGxheW91dCBjbGFzc2VzICovXG4lbGF5b3V0IHtcblxuICBhcnRpY2xlIHtcblxuICAgIEBpbmNsdWRlIGNvbnRhaW5lcjtcbiAgICBAaW5jbHVkZSBicmVhaygpO1xuXG4gIH1cblxuICAuY29udGVudGxheW91dCB7XG4gICAgZmlndXJlLmltYWdlIGltZyB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgZmlndXJlLmZ1bGx3b25rIHtcbiAgICAgIGh0bWwuY3NzdHJhbnNmb3JtcyAmIHtcbiAgICAgICAgbWFyZ2luOiAwIC0gZW0oMTJweCkgMCAtIGVtKDEycHgpO1xuICAgICAgICBwYWRkaW5nOiBlbSgkYmFzZS1mb250LXNpemUgKiAyKSAwO1xuICAgICAgICBmaWdjYXB0aW9uIHtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogZ3V0dGVyKCkgKiAyO1xuICAgICAgICB9XG4gICAgICAgIGltZyB7XG4gICAgICAgICAgYm9yZGVyOiBlbSgxMnB4KSBzb2xpZCAkbW0taW1hZ2Vib3JkZXI7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1tLWltYWdlYm9yZGVyO1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtKGVtKDEycHgpKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtM2RlZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlndXJlIHtcbiAgICAgIGZpZ2NhcHRpb24ge1xuICAgICAgICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwIHtcbiAgICAgICAgICBwYWRkaW5nOiBndXR0ZXIoKSBndXR0ZXIoKSAqIDQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlndXJlIHtcbiAgICAgIHAsIGNpdGUge1xuICAgICAgICBwYWRkaW5nOiBndXR0ZXIoKSBndXR0ZXIoKSAqIDQgZ3V0dGVyKCkgZ3V0dGVyKCkgKiA0O1xuICAgICAgfVxuICAgICAgcCBjaXRlIHtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgIH1cbiAgICB9XG4gICAgYmxvY2txdW90ZSB7XG4gICAgICBwLCBjaXRlIHtcbiAgICAgICAgcGFkZGluZzogZ3V0dGVyKCkgZ3V0dGVyKCkqNCBndXR0ZXIoKSBndXR0ZXIoKSo4ICFpbXBvcnRhbnQ7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWF4LXdpZHRoIDQ1MHB4KSB7XG4gICAgICAgICAgcGFkZGluZzogZ3V0dGVyKCkgZ3V0dGVyKCkgKiA0IGd1dHRlcigpIGd1dHRlcigpICogMTIgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KCRwcm9wZXJfZGVza3RvcCkge1xuICAgICAgZmlndXJlLCBibG9ja3F1b3RlIHtcbiAgICAgICAgbWFyZ2luOiBndXR0ZXIoKSAqIDIgMDtcbiAgICAgICAgJi5sZWZ0LCAmLnJpZ2h0IHtcbiAgICAgICAgICB3aWR0aDogNTAlO1xuICAgICAgICB9XG4gICAgICAgICYubGVmdCB7XG4gICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgJi5yaWdodCB7XG4gICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBibG9ja3F1b3RlIHtcbiAgICAgICAgJi5sZWZ0IHtcbiAgICAgICAgICBwLCBjaXRlIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IGd1dHRlcigpIGd1dHRlcigpICogOCBndXR0ZXIoKSBndXR0ZXIoKSAqIDg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICYucmlnaHQge1xuICAgICAgICAgIHAsIGNpdGUge1xuICAgICAgICAgICAgcGFkZGluZzogZ3V0dGVyKCkgZ3V0dGVyKCkgKiA4IGd1dHRlcigpIGd1dHRlcigpICogMTI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmaWd1cmUge1xuICAgICAgICAmLmxlZnQge1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IGd1dHRlcigpICogNDtcbiAgICAgICAgICBwLCBjaXRlIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IGd1dHRlcigpIDAgZ3V0dGVyKCkgZ3V0dGVyKCkgKiA4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmLnJpZ2h0IHtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IGd1dHRlcigpICogNDtcbiAgICAgICAgICBwLCBjaXRlIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IGd1dHRlcigpIGd1dHRlcigpICogOCBndXR0ZXIoKSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC52aWRlb2VtYmVkIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHBhZGRpbmctdG9wOiAzMHB4O1xuICAgICAgaGVpZ2h0OiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGlmcmFtZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICAgJi53aWRlc2NyZWVuIHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTtcbiAgICAgIH1cbiAgICAgICYuZm91cnRocmVlIHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDc1JTtcbiAgICAgIH1cbiAgICAgICYuc3F1YXJlIHtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDEwMCU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmF1ZGlvIHtcbiAgICAgIHBhZGRpbmc6IDAgZ3V0dGVyKCkgKiA0O1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgLmF1ZGlvZW1iZWQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGlmcmFtZSB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgICAgJi50aGlyZHBhcnR5IHtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC50d2VldGVtYmVkIHtcbiAgICAgIHBhZGRpbmc6IDAgZ3V0dGVyKCkgKiA0O1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgQGluY2x1ZGUgY2xlYXJlcigpO1xuICAgIH1cblxuICAgIC8vIE1BS0UgVEhJUyBHT09EIFNPT05cbiAgICAuZ2FsbGVyeSB7XG4gICAgICBwYWRkaW5nOiBndXR0ZXIoKSAqIDQ7XG4gICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAuZ2FsbGVyeUxheW91dCB7XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgICAgcGFkZGluZzogMCAwIGVtKDE2cHgpIDA7XG4gICAgICAgIC5nYWxsZXJ5SXRlbSB7XG4gICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgd2lkdGg6IDMzJTtcbiAgICAgICAgICAmLnNwYWNlciB7XG4gICAgICAgICAgICB3aWR0aDogMTkycHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDk2cHg7XG4gICAgICAgICAgfVxuICAgICAgICAgICYucG9ydHJhaXQge1xuICAgICAgICAgICAgbWluLWhlaWdodDogMTkycHg7XG4gICAgICAgICAgfVxuICAgICAgICAgICYubGFuZHNjYXBlIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTkycHg7XG4gICAgICAgICAgfVxuICAgICAgICAgICYucG9ydHJhaXQ6bnRoLWNoaWxkKDNuKSB7XG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAyODhweDtcbiAgICAgICAgICB9XG4gICAgICAgICAgJi5sYW5kc2NhcGU6bnRoLWNoaWxkKDNuKSB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDI4OHB4O1xuICAgICAgICAgIH1cbiAgICAgICAgICBhLnZpZXcge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMDtcbiAgICAgICAgICAgIC8vIHBhZGRpbmc6IGVtKDhweCk7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAmOmFmdGVyIHtcbiAgICAgICAgICAgIC8vICAgLy8gRHJvcCBTaGFkb3cgb24gY29ybmVyIG9mIGZpbGUgLSBidXQgbG9va3Mgc2hpdCB3aGVuIGltYWdlcyBoYXZlIG5vdCB5ZXQgbG9hZGVkXG4gICAgICAgICAgICAvLyAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgLy8gICBvcGFjaXR5OiAwLjU7XG4gICAgICAgICAgICAvLyAgIGJhY2tncm91bmQ6IHtcbiAgICAgICAgICAgIC8vICAgICBpbWFnZTogaW1hZ2VVcmwoJ2JnLWdhbGxlcnktc2hhZG93LnBuZycpO1xuICAgICAgICAgICAgLy8gICAgIHJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICAgICAgLy8gICAgIHBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyAgIHdpZHRoOiA5NnB4O1xuICAgICAgICAgICAgLy8gICBoZWlnaHQ6IDk2cHg7XG4gICAgICAgICAgICAvLyAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIC8vICAgei1pbmRleDogMDtcbiAgICAgICAgICAgIC8vICAgYm90dG9tOiAtOHB4O1xuICAgICAgICAgICAgLy8gICByaWdodDogLThweDtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgQGluY2x1ZGUgY2xlYXJlcigpO1xuICAgICAgfVxuICAgICAgQGluY2x1ZGUgY2xlYXJlcigpO1xuXG4gICAgICAmLnBob3RvcyB7XG5cbiAgICAgIH1cbiAgICAgICYudmlkZW9zIHtcblxuICAgICAgfVxuICAgIH1cblxuICAgIC53YWxscGFwZXJzIHtcbiAgICAgIHBhZGRpbmc6IDAgZ3V0dGVyKCkgKiA0O1xuICAgICAgQGluY2x1ZGUgY2xlYXJlcigpO1xuICAgICAgLndhbGxwYXBlciB7XG4gICAgICAgIEBpbmNsdWRlIGZ1bGw7XG4gICAgICAgIHBhZGRpbmc6IDAgMCBlbSgkYmFzZS1mb250LXNpemUqMikgMDtcbiAgICAgICAgaDMge1xuICAgICAgICAgIHBhZGRpbmc6IDAgMCBlbSgkYmFzZS1mb250LXNpemUpIDA7XG4gICAgICAgIH1cbiAgICAgICAgZmlndXJlIHtcbiAgICAgICAgICBAaW5jbHVkZSBmdWxsO1xuICAgICAgICAgIG1hcmdpbi10b3A6IDBweDtcbiAgICAgICAgICBoNCB7XG4gICAgICAgICAgICBjb2xvcjogJG1tLWdyZXk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNwYW4oMzAlIG5vLWd1dHRlcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWdjYXB0aW9ue1xuICAgICAgICAgICAgQGluY2x1ZGUgc3Bhbig3MCUgbm8tZ3V0dGVycyk7XG4gICAgICAgICAgICBwIHtcbiAgICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICAgICAgICBmb250LXNpemU6IDEuNGVtO1xuICAgICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc21hbGwge1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICRtbS1ncmV5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgLmJvZHljb3B5IHtcblxuICAgIHBhZGRpbmctdG9wOiBndXR0ZXIoKSoyO1xuICAgIHBhZGRpbmctYm90dG9tOiBndXR0ZXIoKSoyO1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkZGVza3RvcCkge1xuICAgICAgbWluLWhlaWdodDogMzAwcHg7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkZGVza3RvcCkge1xuICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgfVxuXG4gICAgaDIsIGgzLCBoNCwgaDUsIGg2LCBwLCBsaSwgcHJlIHtcbiAgICAgIGNvbG9yOiAkbW0tZGFyaztcbiAgICB9XG4gICAgYmxvY2txdW90ZSBwLCBxIHAge1xuICAgICAgY29sb3I6ICRtbS10ZWFsO1xuICAgIH1cblxuICAgIHVsIHtcbiAgICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbiAgICB9XG4gICAgb2wge1xuICAgICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsO1xuICAgIH1cbiAgICBociB7XG4gICAgICBib3JkZXI6IGVtKDhweCkgc29saWQgJG1tLWJsdWU7XG4gICAgfVxuICAgIGZpZ2NhcHRpb24gcCB7XG4gICAgICBjb2xvcjogJG1tLWdyZXk7XG4gICAgfVxuXG5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJG1tLXdoaXRlO1xuICAgIGNvbG9yOiAkbW0tZGFyaztcblxuICAgIGh0bWwuc3ZnICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGhlaWdodDogJGJhc2UtbGluZS1oZWlnaHQgKiAyO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kOiB7XG4gICAgICAgIC8vaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJScgdmlld1BvcnQ9JzAgMCA4NjAgMjQnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBvbHlnb24gcG9pbnRzPScwIDAsIDg2MCAyNCwwIDI0JyBzdHlsZT0nZmlsbDojeyRtbS13aGl0ZX0nLz48L3N2Zz5cIik7XG4gICAgICAgIC8vaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgd2lkdGg9JzEzOTInIGhlaWdodD0nNDgnIHZpZXdQb3J0PScwIDAgMTM5MiA0OCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cG9seWdvbiBwb2ludHM9JzAgMCwgMTM5MiA0OCwwIDQ4JyBzdHlsZT0nZmlsbDojeyRtbS13aGl0ZX0nLz48L3N2Zz5cIik7XG4gICAgICAgIGltYWdlOiBzdmdpZnkoXCI8c3ZnIHdpZHRoPScxMzkyJyBoZWlnaHQ9JzQ4JyB2aWV3UG9ydD0nMCAwIDEzOTIgNDgnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBvbHlnb24gcG9pbnRzPScwIDAsIDEzOTIgNDgsMCA0OCcgc3R5bGU9J2ZpbGw6I3skbW0td2hpdGV9Jy8+PC9zdmc+XCIpO1xuICAgICAgICBwb3NpdGlvbjogcmlnaHQgYm90dG9tO1xuICAgICAgICByZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIH1cbiAgICAgIHRvcDogLSgkYmFzZS1saW5lLWhlaWdodCAqIDIpO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgei1pbmRleDogMDtcbiAgICB9XG5cbiAgfVxuXG59XG5cbiVmdWxsbGF5b3V0IHtcblxuICBAZXh0ZW5kICVsYXlvdXQ7XG5cbiAgYm9keS5mdWxsICYgaGVhZGVyIHtcbiAgICBtYXJnaW46IDAgZ3V0dGVyKCk7XG4gIH1cblxuICAuZnVsbGNvbnRlbnRsYXlvdXQge1xuXG4gICAgQGluY2x1ZGUgZnVsbDtcblxuICAgIC5ib2R5Y29weSB7XG4gICAgICBodG1sLnN2ZyAmOmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIGJhY2tncm91bmQ6IHtcbiAgICAgICAgICAvL2ltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzEwMCUnIHZpZXdQb3J0PScwIDAgMTM5MiAyNCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cG9seWdvbiBwb2ludHM9JzAgMCwgMTM5MiAyNCwwIDI0JyBzdHlsZT0nZmlsbDojeyRtbS13aGl0ZX0nLz48L3N2Zz5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG59XG5cbi8qIFNpZGViYXIgbGF5b3V0IDEgKGFydGljbGUgc3R5bGUgbGF5b3V0KSAqL1xuJGxheW91dDFfZ3JpZDogKDUgMyk7XG4lcGFnZWxheW91dDEge1xuXG4gIEBleHRlbmQgJWxheW91dDtcblxuICAuYm9keWNvcHkge1xuICAgIGh0bWwuc3ZnICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBiYWNrZ3JvdW5kOiB7XG4gICAgICAgIC8vaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgd2lkdGg9JzEzOTInIGhlaWdodD0nNDgnIHZpZXdQb3J0PScwIDAgMTM5MiA0OCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cG9seWdvbiBwb2ludHM9JzAgMCwgMTM5MiA0OCwwIDQ4JyBzdHlsZT0nZmlsbDojeyRtbS13aGl0ZX0nLz48L3N2Zz5cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXJ0aWNsZSB7XG5cbiAgICBoZWFkZXIge1xuXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAyO1xuICAgICAgbWFyZ2luOiB7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBsZWZ0OiBndXR0ZXIoKTtcbiAgICAgICAgcmlnaHQ6IGd1dHRlcigpO1xuICAgICAgfVxuICAgICAgcGFkZGluZzogZW0oJGJhc2UtZm9udC1zaXplKjIpIGd1dHRlcigpKjI7XG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRkZXNrdG9wKSB7XG4gICAgICAgIHBhZGRpbmc6IGVtKCRiYXNlLWZvbnQtc2l6ZSoyKSBndXR0ZXIoKTtcbiAgICAgIH1cblxuICAgICAgaDEge1xuICAgICAgICB0b3A6ICRiYXNlLWZvbnQtc2l6ZS8yO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDFlbTtcbiAgICAgICAgQGluY2x1ZGUgbW0taGVhZGluZygpO1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRtb2JpbGUpIHtcbiAgICAgICAgICBmb250LXNpemU6IDMuOGVtO1xuICAgICAgICB9XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHRhYmxldCkge1xuICAgICAgICAgIGZvbnQtc2l6ZTogNGVtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBodG1sLmNzc3RyYW5zZm9ybXMgJiB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0yZGVnKTtcbiAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgLmNvbnRlbnRsYXlvdXQsIHNlY3Rpb24ge1xuXG4gICAgICBAaW5jbHVkZSBzcGFuKDgpO1xuXG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRkZXNrdG9wKSB7XG4gICAgICAgICAgQGluY2x1ZGUgc3BhbigxIG9mICRsYXlvdXQxX2dyaWQgYXQgMSBuby1ndXR0ZXJzKTtcbiAgICAgIH1cblxuICAgICAgcG9zaXRpb246cmVsYXRpdmU7XG4gICAgICB6LWluZGV4OiAxOyAvLyBFbnN1cmUgdGhpcyBsYXllciBpcyBhYm92ZSB0aGUgZml4ZWQgcG9zaXRpb24gc2lkZWJhclxuXG4gICAgfVxuXG4gICAgYXNpZGUge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgQGluY2x1ZGUgc3Bhbig4KTtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGRlc2t0b3ApIHtcbiAgICAgICAgQGluY2x1ZGUgc3BhbigxIG9mICRsYXlvdXQxX2dyaWQgYXQgMik7XG4gICAgICAgIEBpbmNsdWRlIGJsZWVkLXgoMCBndXR0ZXIoKSk7IC8vIFJvdW5kZWQgbnVtYmVycyBicm93c2VyIGlzc3VlIHNvbHV0aW9uOiBPdmVycmlkZSBncmlkIGRlZmF1bHRzLCBmbG9hdCBsZWZ0IGFuZCBhZGQgbmVnYXRpdmUgbWFyZ2luc1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgIH1cbiAgICAgIC5wYW5lbCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDMwMHB4O1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRkZXNrdG9wKSB7XG4gICAgICAgICAgaHRtbC5zdmdjbGlwcGF0aHMgJiB7XG4gICAgICAgICAgICBAaW5jbHVkZSB2ZW5kb3Jwcm9wKFwiY2xpcC1wYXRoXCIsIFwicG9seWdvbigtMXB4IDBweCwgMTAzMHB4IDQwcHgsIDEwMzBweCAxNTAwcHgsIC0xcHggMTUwMHB4KVwiKTtcbiAgICAgICAgICAgIC8vIE5lZWRzIGZpeGluZyBpbiBmaXJlZm94XG4gICAgICAgICAgICAvL2NsaXAtcGF0aDogc3ZnaWZ5KFwiPHN2ZyB3aWR0aD0nMCcgaGVpZ2h0PScwJz48Y2xpcFBhdGggaWQ9J2NsaXBQb2x5Z29uJz48cG9seWdvbiBwb2ludHM9Jy0xIDAsMTAzMCA0MCwxMDMwMTUwMCwtMSAxNTAwJz48L3BvbHlnb24+PC9jbGlwUGF0aD48L3N2Zz5cIik7XG4gICAgICAgICAgICAvL2NsaXAtcGF0aDogc3ZnaWZ5KFwiPHN2ZyB3aWR0aD0nMCcgaGVpZ2h0PScwJz48Y2xpcFBhdGggaWQ9J2NsaXBQb2x5Z29uJyBjbGlwUGF0aFVuaXRzPSdvYmplY3RCb3VuZGluZ0JveCc+PHBvbHlnb24gcG9pbnRzPSctMSAwLDEwMzAgNDAsMTAzMDE1MDAsLTEgMTUwMCc+PC9wb2x5Z29uPjwvY2xpcFBhdGg+PC9zdmc+XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBodG1sLnN2ZyAmOmJlZm9yZSB7XG4gICAgICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB3aWR0aDogJGJhc2UtZm9udC1zaXplO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbGVmdDogMHB4O1xuICAgICAgICAgICAgdG9wOiAwcHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB7XG4gICAgICAgICAgICAgIC8vaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzMyJyB2aWV3UG9ydD0nMCAwIDE2IDMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxwb2x5Z29uIHBvaW50cz0nMCAwLCAxNiAxNiwgMCAzMicgc3R5bGU9J2ZpbGw6I2ZmZmZmZicvPjwvc3ZnPlwiKTtcbiAgICAgICAgICAgICAgaW1hZ2U6IHN2Z2lmeShcIjxzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzMyJyB2aWV3UG9ydD0nMCAwIDE2IDMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxwb2x5Z29uIHBvaW50cz0nMCAwLCAxNiAxNiwgMCAzMicgc3R5bGU9J2ZpbGw6I2ZmZmZmZicvPjwvc3ZnPlwiKTtcbiAgICAgICAgICAgICAgcG9zaXRpb246IGxlZnQgdG9wO1xuICAgICAgICAgICAgICByZXBlYXQ6IHJlcGVhdC15O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAucGFkZGVyIHtcbiAgICAgICAgICBwYWRkaW5nOiBlbSgkYmFzZS1mb250LXNpemUpIGd1dHRlcigpKjQgZW0oJGJhc2UtZm9udC1zaXplKSBndXR0ZXIoKSo0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcbiAgICAgICAgY29sb3I6ICRtbS1kYXJrO1xuICAgICAgfVxuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkZGVza3RvcCkge1xuICAgICAgICAmLmdsdWUge1xuICAgICAgICAgIHotaW5kZXg6IDA7XG4gICAgICAgICAgcG9zaXRpb246Zml4ZWQ7XG4gICAgICAgICAgQGluY2x1ZGUgY29udGFpbmVyO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgIHRvcDogZW0oJGhlYWRlci1oZWlnaHQpO1xuICAgICAgICAgIC5nbHVlU3VwcG9ydCB7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBAaW5jbHVkZSBzcGFuKDEgb2YgJGxheW91dDFfZ3JpZCBhdCAyIG5vLWd1dHRlcnMpO1xuICAgICAgICAgICAgQGluY2x1ZGUgYmxlZWQteCgwIGd1dHRlcigpKTsgLy8gUm91bmRlZCBudW1iZXJzIGJyb3dzZXIgaXNzdWUgc29sdXRpb246IE92ZXJyaWRlIGdyaWQgZGVmYXVsdHMsIGZsb2F0IGxlZnQgYW5kIGFkZCBuZWdhdGl2ZSBtYXJnaW5zXG4gICAgICAgICAgICBAaW5jbHVkZSBwdXNoKHNwYW4oMSBvZiAkbGF5b3V0MV9ncmlkIGF0IDEgbm8tZ3V0dGVycykpO1xuICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB1bCB7XG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYztcbiAgICAgICAgcGFkZGluZzogMCBndXR0ZXIoKSo0O1xuICAgICAgfVxuXG4gICAgfVxuXG4gIH1cbn1cblxuLyogU2lkZWJhciBsYXlvdXQgMiAqL1xuJGxheW91dDJfZ3JpZDogKDEgNiAxKTtcbiVwYWdlbGF5b3V0MiB7XG5cbiAgQGV4dGVuZCAlcGFnZWxheW91dDE7XG5cbiAgYXJ0aWNsZSB7XG5cbiAgICBoZWFkZXIge1xuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkZGVza3RvcCkge1xuICAgICAgICBAaW5jbHVkZSBwdXNoKDEgb2YgJGxheW91dDJfZ3JpZCBhdCAxIG5vLWd1dHRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5jb250ZW50bGF5b3V0LCBzZWN0aW9uIHtcbiAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGRlc2t0b3ApIHtcbiAgICAgICAgQGluY2x1ZGUgc3BhbigxIG9mICRsYXlvdXQyX2dyaWQgYXQgMiBuby1ndXR0ZXJzKTtcbiAgICAgICAgQGluY2x1ZGUgcHVzaCgxIG9mICRsYXlvdXQyX2dyaWQgYXQgMSBuby1ndXR0ZXJzKTtcbiAgICAgICAgQGluY2x1ZGUgYmxlZWQteCgwIGd1dHRlcigpKTsgLy8gUm91bmRlZCBudW1iZXJzIGJyb3dzZXIgaXNzdWUgc29sdXRpb246IE92ZXJyaWRlIGdyaWQgZGVmYXVsdHMsIGZsb2F0IGxlZnQgYW5kIGFkZCBuZWdhdGl2ZSBtYXJnaW5zXG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFzaWRlIHtcbiAgICAvLyAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAvLyAgIEBpbmNsdWRlIHNwYW4oOCk7XG4gICAgLy8gICBAaW5jbHVkZSBicmVha3BvaW50KCRkZXNrdG9wKSB7XG4gICAgLy8gICAgICAgQGluY2x1ZGUgc3BhbigxIG9mICRsYXlvdXQyX2dyaWQgYXQgMSBuby1ndXR0ZXJzKTtcbiAgICAvLyAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIC8vICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAvLyAgICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgIC8vICAgfVxuICAgIC8vICAgLnBhbmVsIHtcbiAgICAvLyAgICAgbWluLWhlaWdodDogMHB4O1xuICAgIC8vICAgICAucGFkZGVyIHtcbiAgICAvLyAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbW0tYmx1ZTtcbiAgICAvLyAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgIC8vICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJGRlc2t0b3ApIHtcbiAgICAvLyAgICAgICAgIHBhZGRpbmc6IGVtKCRiYXNlLWZvbnQtc2l6ZSozKSBndXR0ZXIoKSo0IGVtKCRiYXNlLWZvbnQtc2l6ZSkgZ3V0dGVyKCkqNDtcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkZGVza3RvcCkge1xuICAgIC8vICAgICAgIGh0bWwuc3ZnY2xpcHBhdGhzICYge1xuICAgIC8vICAgICAgICAgQGluY2x1ZGUgdmVuZG9ycHJvcChcImNsaXAtcGF0aFwiLCBcInBvbHlnb24oMCAzNnB4LCAxMDMwcHggMCwgNTE1cHggMTAwMHB4LCAwIDEwMDBweCwgMCAwKVwiKTtcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgICAgaHRtbC5zdmcgJjpiZWZvcmUge1xuICAgIC8vICAgICAgICAgcmlnaHQ6IDBweDtcbiAgICAvLyAgICAgICAgIGxlZnQ6IGF1dG87XG4gICAgLy8gICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHdpZHRoPScxNicgaGVpZ2h0PSczMicgdmlld1BvcnQ9JzAgMCAxNiAzMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz48cG9seWdvbiBwb2ludHM9JzE2IDAsIDAgMTYsIDE2IDMyLCAxNiAwJyBzdHlsZT0nZmlsbDojZmZmZmZmJy8+PC9zdmc+XCIpIGxlZnQgMjFweCByZXBlYXQteTtcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH1cblxuICAgIC8vIH1cblxuICB9XG59XG4vKiBsaW5rIHN0eWxlcyAqL1xuXG4lYmFzZWxpbmtzdHlsZSB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICRtbS1waW5rO1xuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogc2F0dXJhdGUoJG1tLXBpbmssIDUwJSk7XG4gIH1cbiAgQGluY2x1ZGUgc2VsZWN0aW9uKHJnYmEoJG1tLXdoaXRlLCAwLjYpLCAkbW0tcGluayk7XG4gIHNwYW4ge1xuICAgIEBpbmNsdWRlIHNlbGVjdGlvbihyZ2JhKCRtbS13aGl0ZSwgMC42KSwgJG1tLXBpbmspO1xuICB9XG59XG4lbGlua3N0eWxlIHtcbiAgQGV4dGVuZCAlYmFzZWxpbmtzdHlsZTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoJG1tLWJsdWUsIDAuMjUpO1xuICAmOmhvdmVyIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgkbW0tYmx1ZSwgMC41KTtcbiAgfVxufVxuIiwiLyogQXNpZGUgICovXG5tYWluIGFydGljbGUgYXNpZGUge1xuXG4gICYubWV0YWRhdGEge1xuXG4gICAgLnBhbmVsIC5wYWRkZXIge1xuICAgICAgcGFkZGluZzogZW0oJGJhc2UtZm9udC1zaXplKjMpIGd1dHRlcigpKjQgZW0oJGJhc2UtZm9udC1zaXplKSBndXR0ZXIoKSo0O1xuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHRhYmxldCkge1xuICAgLy9AaW5jbHVkZSBhZGp1c3QtZm9udC1zaXplLXRvKDIxcHgpO1xuICB9XG4gIGgxIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gIC8vIFR5cGUhXG4gIC5hdXRob3IgcCwgdGltZSwgLnRhZ3MgbGksIC5yZWxhdGVkQ29udGVudCBsaSB7XG4gICAgQGluY2x1ZGUgZGVmaW5lZm9udHMoJGNyaWtleV9zdGFjayk7XG4gICAgYSB7XG4gICAgICBib3JkZXI6IDBweDtcbiAgICB9XG4gIH1cbiAgLnBhbmVsIHtcbiAgICBAaW5jbHVkZSBjb250YWluZXI7XG4gICAgYmFja2dyb3VuZDogaW1hZ2VVcmwoXCJiZy1ncmFwaC5wbmdcIikgcmlnaHQgdG9wIHJlcGVhdCAkbW0td2hpdGU7XG5cbiAgICAvLyBvdmVyZmxvdzogaGlkZGVuOyAvKiBSZW1vdmVkIHRoaXMgYmVjYXVzZSBpdCB3YXMgcHJldmVudGluZyBDU1MgYW5pbWF0aW9ucyBmcm9tIHBsYXlpbmcgaW4gdGhlIHJlbGF0ZWRDb250ZW50IGFyZWEgKi9cblxuICAgIC5hdXRob3IsIHRpbWUsIC50YWdzIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gICAgLnRpdGxlIHtcbiAgICAgIEBpbmNsdWRlIHNwYW4oMSBvZiAoMSkgYXQgMSBuby1ndXR0ZXJzKTtcbiAgICAgIEBpbmNsdWRlIGFkanVzdC1mb250LXNpemUtdG8oMjhweCwgMSk7XG4gICAgICBtYXJnaW46IDhweCBhdXRvIDAgYXV0bztcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgLmF1dGhvciB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDEgb2YgKDEgMSkgYXQgMSk7XG4gICAgICBtYXJnaW4tYm90dG9tOiBlbSgxNnB4KTtcbiAgICAgIHAge1xuICAgICAgICBAaW5jbHVkZSBhZGp1c3QtZm9udC1zaXplLXRvKDIxcHgsIDAuOCk7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICBjb2xvcjogcmdiYSgkbW0tbWV0YWRhdGEtYmx1ZSwgMC43KTtcbiAgICAgICAgcGFkZGluZzogZW0oJGJhc2UtZm9udC1zaXplLzIpIDA7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDJkZWcpO1xuICAgICAgICBhLCBzdHJvbmcge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtM2RlZyk7XG4gICAgICAgIH1cbiAgICAgICAgc3Ryb25nIHtcbiAgICAgICAgICBjb2xvcjogJG1tLWJsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaW1nIHtcbiAgICAgICAgICB3aWR0aDogNTZweDtcbiAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGltZSB7XG4gICAgICBAaW5jbHVkZSBzcGFuKDEgb2YgKDEgMSkgYXQgMik7XG4gICAgICBtYXJnaW4tYm90dG9tOiBlbSgxNnB4KTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGhlaWdodDogZW0oODBweCk7XG4gICAgICBiYWNrZ3JvdW5kOiB7XG4gICAgICAgIHBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xuICAgICAgICBzaXplOiAxMDAlIDEwMCU7XG4gICAgICAgIHJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgfVxuICAgICAgaHRtbC5zdmcgJiB7XG4gICAgICAgIGJhY2tncm91bmQ6IHtcbiAgICAgICAgICBpbWFnZTogaW1hZ2VVcmwoXCJiZy1tZXRhZG9vZGxlMS5zdmdcIik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAuZGF5LCAueWVhciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDQwJTtcbiAgICAgICAgLy9AaW5jbHVkZSBhZGp1c3QtZm9udC1zaXplLXRvKDI0cHgpO1xuICAgICAgfVxuICAgICAgLmRheSB7XG4gICAgICAgIHRvcDogMHB4O1xuICAgICAgICBsZWZ0OiAwcHg7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDRkZWcpO1xuICAgICAgICBjb2xvcjogcmdiYSgkbW0tbWV0YWRhdGEtYmx1ZSwgMC43KTtcbiAgICAgIH1cbiAgICAgIC5tb250aCB7XG4gICAgICAgIHBhZGRpbmc6IGVtKCRiYXNlLWZvbnQtc2l6ZS8yKTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBjb2xvcjogJG1tLW1ldGFkYXRhLWJsdWU7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0yZGVnKTtcbiAgICAgICAgQGluY2x1ZGUgYWRqdXN0LWZvbnQtc2l6ZS10bygyNnB4KTtcbiAgICAgIH1cbiAgICAgIC55ZWFyIHtcbiAgICAgICAgYm90dG9tOiAwcHg7XG4gICAgICAgIHJpZ2h0OiAwcHg7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00ZGVnKTtcbiAgICAgICAgY29sb3I6ICRtbS1waW5rO1xuICAgICAgfVxuICAgIH1cbiAgICAubXNnIHtcbiAgICAgIEBpbmNsdWRlIGFkanVzdC1mb250LXNpemUtdG8oMTZweCwgMC45KTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGNvbG9yOiByZ2JhKCRtbS1tZXRhZGF0YS1ibHVlLCAwLjYpO1xuICAgIH1cbiAgICAudGFncyB7XG4gICAgICBAaW5jbHVkZSBjb250YWluZXI7XG4gICAgICBjbGVhcjogYm90aDtcbiAgICAgIHBhZGRpbmc6IGd1dHRlcigpKjQ7XG4gICAgICBwYWRkaW5nLXRvcDogMDtcbiAgICAgIGxpIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgcGFkZGluZzogZW0oNnB4KSAwO1xuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICAgIEBpbmNsdWRlIGFkanVzdC1mb250LXNpemUtdG8oMjFweCwgMC44KTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAvKiBMYXlvdXQgKi9cbiAgICAgICAgJjpudGgtY2hpbGQoM24tMSkge1xuICAgICAgICAgIEBpbmNsdWRlIHNwYW4oMSBvZiAoMiAyKSBhdCAxIG5vLWd1dHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgICY6bnRoLWNoaWxkKDNuLTIpIHtcbiAgICAgICAgICBAaW5jbHVkZSBzcGFuKDEgb2YgKDIgMikgYXQgMiBuby1ndXR0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICAmOm50aC1jaGlsZCgzbi0zKSB7XG4gICAgICAgICAgQGluY2x1ZGUgc3BhbigxIG9mICgxIDIgMSkgYXQgMiBuby1ndXR0ZXJzKTtcbiAgICAgICAgICBAaW5jbHVkZSBwdXNoKDEgb2YgNCBuby1ndXR0ZXJzKTtcbiAgICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgICBmbG9hdDogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBEZWNvcmF0aW9uICovXG4gICAgICAgIGEge1xuICAgICAgICAgIG1pbi13aWR0aDogZW0oOTBweCk7XG4gICAgICAgICAgY29sb3I6ICRtbS1tZXRhZGF0YS1ibHVlO1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBpbmsgemlnIHphZyB1bmRlcmxpbmVcbiAgICAgICAgJjpudGgtY2hpbGQoNm4tNSkge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00ZGVnKTtcbiAgICAgICAgICBhIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgYm90dG9tOiBlbSgxM3B4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHtcbiAgICAgICAgICAgICAgaW1hZ2U6IGltYWdlVXJsKFwiYmctbWV0YWRvb2RsZWxpbmUxLnBuZ1wiKTtcbiAgICAgICAgICAgICAgcmVwZWF0OiByZXBlYXQteDtcbiAgICAgICAgICAgICAgcG9zaXRpb246IGJvdHRvbSBjZW50ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBodG1sLnN2ZyAmIHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDoge1xuICAgICAgICAgICAgICAgIGltYWdlOiBpbWFnZVVybChcImJnLW1ldGFkb29kbGVsaW5lMS5zdmdcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQmx1ZSB6aWcgemFnIG92ZXIgYW5kIHVuZGVyIGxpbmVcbiAgICAgICAgJjpudGgtY2hpbGQoNm4tNCkge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDJkZWcpO1xuICAgICAgICAgIGEge1xuICAgICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgICB0b3A6IGVtKDEzcHgpO1xuICAgICAgICAgICAgICBib3R0b206IGVtKDEzcHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmFja2dyb3VuZDogaW1hZ2VVcmwoXCJiZy1tZXRhZG9vZGxlbGluZTIucG5nXCIpIGJvdHRvbSBjZW50ZXIgcmVwZWF0LXg7XG4gICAgICAgICAgICBodG1sLnN2ZyAmIHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW1hZ2VVcmwoXCJiZy1tZXRhZG9vZGxlbGluZTIuc3ZnXCIpIGJvdHRvbSBjZW50ZXIgcmVwZWF0LXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBodG1sLm11bHRpcGxlYmdzICYge1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbWFnZVVybChcImJnLW1ldGFkb29kbGVsaW5lMi5wbmdcIikgdG9wIHJpZ2h0IHJlcGVhdC14LCBpbWFnZVVybChcImJnLW1ldGFkb29kbGVsaW5lMi5wbmdcIikgYm90dG9tIGxlZnQgcmVwZWF0LXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBodG1sLnN2Zy5tdWx0aXBsZWJncyAmIHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW1hZ2VVcmwoXCJiZy1tZXRhZG9vZGxlbGluZTIuc3ZnXCIpIHRvcCByaWdodCByZXBlYXQteCwgaW1hZ2VVcmwoXCJiZy1tZXRhZG9vZGxlbGluZTIuc3ZnXCIpIGJvdHRvbSBsZWZ0IHJlcGVhdC14O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBQaW5rIHRoaW4gc2NyaWJibGUgY2lyY2xlIGhpZ2hsaWdodFxuICAgICAgICAmOm50aC1jaGlsZCg2bi0zKSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTFkZWcpO1xuICAgICAgICAgIGEge1xuICAgICAgICAgICAgbWFyZ2luOiB7XG4gICAgICAgICAgICAgIHRvcDogZW0oLTdweCk7XG4gICAgICAgICAgICAgIGJvdHRvbTogZW0oLTdweCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYWRkaW5nOiB7XG4gICAgICAgICAgICAgIHRvcDogZW0oMjBweCk7XG4gICAgICAgICAgICAgIGJvdHRvbTogZW0oMjBweCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB7XG4gICAgICAgICAgICAgIGltYWdlOiBpbWFnZVVybChcImJnLW1ldGFkb29kbGUyLnBuZ1wiKTtcbiAgICAgICAgICAgICAgcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xuICAgICAgICAgICAgICBzaXplOiBjb250YWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaHRtbC5zdmcgJiB7XG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHtcbiAgICAgICAgICAgICAgICBpbWFnZTogaW1hZ2VVcmwoXCJiZy1tZXRhZG9vZGxlMi5zdmdcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGluayBkb3VibGUgdW5kZXJsaW5lXG4gICAgICAgICY6bnRoLWNoaWxkKDZuLTIpIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg2ZGVnKTtcbiAgICAgICAgICBhIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgYm90dG9tOiBlbSgxM3B4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHtcbiAgICAgICAgICAgICAgaW1hZ2U6IGltYWdlVXJsKFwiYmctbWV0YWRvb2RsZWxpbmU0LnBuZ1wiKTtcbiAgICAgICAgICAgICAgcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBib3R0b20gY2VudGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaHRtbC5zdmcgJiB7XG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHtcbiAgICAgICAgICAgICAgICBpbWFnZTogaW1hZ2VVcmwoXCJiZy1tZXRhZG9vZGxlbGluZTQuc3ZnXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEJsdWUgc2NyaWJibGUgYnViYmxlIGNpcmNsZVxuICAgICAgICAmOm50aC1jaGlsZCg2bi0xKSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTEwZGVnKTtcbiAgICAgICAgICBhIHtcbiAgICAgICAgICAgIG1hcmdpbjoge1xuICAgICAgICAgICAgICB0b3A6IGVtKC03cHgpO1xuICAgICAgICAgICAgICBib3R0b206IGVtKC03cHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgICB0b3A6IGVtKDIwcHgpO1xuICAgICAgICAgICAgICBib3R0b206IGVtKDIwcHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmFja2dyb3VuZDoge1xuICAgICAgICAgICAgICBpbWFnZTogaW1hZ2VVcmwoXCJiZy1tZXRhZG9vZGxlMy5wbmdcIik7XG4gICAgICAgICAgICAgIHJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICAgICAgICBwb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgICAgICAgICAgICAgc2l6ZTogY29udGFpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGh0bWwuc3ZnICYge1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB7XG4gICAgICAgICAgICAgICAgaW1hZ2U6IGltYWdlVXJsKFwiYmctbWV0YWRvb2RsZTMuc3ZnXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNvbGlkIHNpbmdsZSB1bmRlcmxpbmVcbiAgICAgICAgJjpudGgtY2hpbGQoNm4tNikge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDZkZWcpO1xuICAgICAgICAgIGEge1xuICAgICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgICBib3R0b206IGVtKDhweCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB7XG4gICAgICAgICAgICAgIGltYWdlOiBpbWFnZVVybChcImJnLW1ldGFkb29kbGVsaW5lMy5wbmdcIik7XG4gICAgICAgICAgICAgIHJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICAgICAgICBwb3NpdGlvbjogYm90dG9tIGNlbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGh0bWwuc3ZnICYge1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB7XG4gICAgICAgICAgICAgICAgaW1hZ2U6IGltYWdlVXJsKFwiYmctbWV0YWRvb2RsZWxpbmUzLnN2Z1wiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfVxuXG4gICAgI3JlbGF0ZWRDb250ZW50IHtcbiAgICAgIG1heC1oZWlnaHQ6IDBweDtcbiAgICAgIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMXMgZWFzZS1vdXQ7XG4gICAgICAmLmF1dG9oZWlnaHQge1xuICAgICAgICBtYXgtaGVpZ2h0OiA2MDBweDtcbiAgICAgICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAxcyBlYXNlLW91dDtcbiAgICAgIH1cblxuICAgICAgbGkubG9hZGVyIHtcbiAgICAgICAgcGFkZGluZzogZW0oNHB4KSAwO1xuICAgICAgICBzcGFuIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgIG1hcmdpbi10b3A6IC0xMnB4O1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMTJweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgYm9yZGVyOiAycHggc29saWQgJG1tLXBpbms7XG4gICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJG1tLWJsdWU7XG4gICAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAkbW0tb3JhbmdlO1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRtbS13aGl0ZTtcbiAgICAgICAgICB0ZXh0LWluZGVudDogLTk5OTllbTtcbiAgICAgICAgICBAaW5jbHVkZSB2ZW5kb3Jwcm9wKCdhbmltYXRpb24nLCAnc3Bpbm5lciAuOHMgbGluZWFyIGluZmluaXRlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cblxuICAgIC5yZWxhdGVkQ29udGVudCB7XG4gICAgICBAaW5jbHVkZSBjb250YWluZXIoKTtcbiAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgcGFkZGluZzogZ3V0dGVyKCkqNCBlbSgxNnB4KSBndXR0ZXIoKSo0IGVtKDE2cHgpO1xuXG4gICAgICB0cmFuc2Zvcm06IG5vbmU7XG5cbiAgICAgICY6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiBub25lOyAvLyBUaGlzIHByZXZlbnRzIHRoZSBhbmltYXRpb24gb2YgaGVpZ2h0LCBidXQgc3RvcHMgdGhlIGppdHRlciBvZiB0aGUgYW5pbWF0aW9uLiBNZWguIE1pZ2h0IGhhdmUgdG8gY29tZSBiYWNrIHRvIHRoaXMuXG4gICAgICB9XG5cbiAgICAgIGxpIHtcblxuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICAgIEBpbmNsdWRlIGZ1bGwobm8tZ3V0dGVycyk7XG4gICAgICAgIGh0bWwuY3NzYW5pbWF0aW9ucyAmLnRpdGxlIHtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgcGFkZGluZzogZW0oOHB4KSAwIGVtKDE2cHgpIDA7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTJkZWcpO1xuICAgICAgICB9XG4gICAgICAgIGh0bWwuY3NzYW5pbWF0aW9ucyAmLnRpdGxlIHNwYW4ge1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIH1cbiAgICAgICAgaHRtbC5jc3NhbmltYXRpb25zICYudGl0bGUuYm91bmNlSW4gc3BhbiB7XG4gICAgICAgICAgQGluY2x1ZGUgdmVuZG9ycHJvcCgnYW5pbWF0aW9uJywgJ2JvdW5jZUluIC44cyBlYXNlIDEnKTtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB9XG4gICAgICAgIGh0bWwuY3NzYW5pbWF0aW9ucyAmLnRpdGxlLmZhZGVPdXQgc3BhbiB7XG4gICAgICAgICAgQGluY2x1ZGUgdmVuZG9ycHJvcCgnYW5pbWF0aW9uJywgJ2ZhZGVPdXQgLjRzIG5vbmUgMScpO1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIH1cbiAgICAgICAgJi5zdWJ0aXRsZSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIHBhZGRpbmc6IGVtKDRweCkgMDtcbiAgICAgICAgICBjb2xvcjogJG1tLWdyZXk7XG4gICAgICAgICAgQGluY2x1ZGUgYWRqdXN0LWZvbnQtc2l6ZS10bygxOHB4LCAwLjgpO1xuICAgICAgICAgICYuYWx0IHtcbiAgICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICAgICAgcGFkZGluZzogZW0oMTZweCkgZW0oOHB4KSAwIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICYuZW50cnkge1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBwYWRkaW5nOiBlbSg0cHgpIDA7XG4gICAgICAgICAgQGluY2x1ZGUgZGVmaW5lZm9udHMoJHJvY2t3ZWxsX3N0YWNrKTtcbiAgICAgICAgICBAaW5jbHVkZSBhZGp1c3QtZm9udC1zaXplLXRvKDI0cHgsIDAuOCk7XG4gICAgICAgICAgYSB7XG4gICAgICAgICAgICBjb2xvcjogJG1tLXdoaXRlO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDFlbTtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1tLWhlYWRpbmcoKTtcbiAgICAgICAgICAgIGh0bWwuY3NzYW5pbWF0aW9ucyAmIHtcbiAgICAgICAgICAgICAgQGluY2x1ZGUgdmVuZG9ycHJvcCgnYW5pbWF0aW9uJywgJ2JvdW5jZUluIC44cyBlYXNlIDEnKTtcbiAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICB0b3A6IC0zcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgICYuam9icyBhIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIG1tLWhlYWRpbmcoJG1tLWJsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmLnVzZXIge1xuICAgICAgICAgIHBhZGRpbmc6IGVtKDZweCkgMDtcbiAgICAgICAgICBAaW5jbHVkZSBzcGFuKDUwJSBuby1ndXR0ZXJzKTtcbiAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KCR0YWJsZXQpIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHNwYW4oMzMlIG5vLWd1dHRlcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjbGVhcjogbm9uZTtcbiAgICAgICAgICBAaW5jbHVkZSBhZGp1c3QtbGVhZGluZy10bygxLCAyMXB4KTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgICBhIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHZlbmRvcnByb3AoJ2FuaW1hdGlvbicsICdib3VuY2VJbiAuOHMgZWFzZSAxJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB3aWR0aDogZW0oMzJweCk7XG4gICAgICAgICAgICB0b3A6IC0wLjRlbTtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgJi5ldmVudCB7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxMTAlO1xuICAgICAgICAgIGEge1xuICAgICAgICAgICAgY29sb3I6ICRtbS10ZWFsO1xuICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgIGNvbG9yOiAkbW0tcGluaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLmRhdGUge1xuICAgICAgICAgICAgY29sb3I6ICRtbS1kYXJrO1xuICAgICAgICAgICAgZm9udC1zaXplOiAwLjhlbTtcbiAgICAgICAgICAgIHdpZHRoOiAzMCU7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLmV2ZW50VGl0bGUge1xuICAgICAgICAgICAgd2lkdGg6IDcwJTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICAgIH1cbiAgICAgICAgICAuaWNvbiB7XG4gICAgICAgICAgICBjb2xvcjogJG1tLWRhcms7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICYuZ2FtZSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGEge1xuICAgICAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmLnBob3RvIHtcbiAgICAgICAgICBwYWRkaW5nOiBlbSg4cHgpO1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICAgIGNsZWFyOiBub25lO1xuICAgICAgICB9XG4gICAgICAgICYge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xLjJkZWcpO1xuICAgICAgICB9XG4gICAgICAgICY6bnRoLWNoaWxkKDJuKSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMWRlZyk7XG4gICAgICAgIH1cbiAgICAgICAgJjpudGgtY2hpbGQoM24pIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMS41ZGVnKTtcbiAgICAgICAgfVxuICAgICAgICAmOm50aC1jaGlsZCg1bikge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDAuOGRlZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgJi5yZWxhdGVkQ29udGVudC5wcmUge1xuICAgICAgbWF4LWhlaWdodDogNjAwcHg7XG4gICAgfVxuXG4gICAgc3ZnIHtcbiAgICAgIHRvcDogMHB4O1xuICAgICAgbGVmdDogMHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgei1pbmRleDogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsQW9FSkEsSXBFSUksQ0FLRixPQUFPLENBaUJMLFNBQVMsQ0FjUCxPQUFPLENBR0wsY0FBYyxDQUNaLENBQUMsQW9FNUNJLENBQ2IsZUFBZSxDQUFFLElBQUksQ0FDckIsS0FBSyxDREpLLE9BQU8sQ0NZbEIsQXBFTkQsQW9FSkEsSXBFSUksQ0FLRixPQUFPLENBaUJMLFNBQVMsQ0FjUCxPQUFPLENBR0wsY0FBYyxDQUNaLENBQUMsQW9FekNULE1BQU8sQUFBQyxDQUNOLEtBQUssQ0FBRSxPQUF1QixDQUMvQixBcEVESCxBb0VKQSxJcEVJSSxDQUtGLE9BQU8sQ0FpQkwsU0FBUyxDQWNQLE9BQU8sQ0FHTCxjQUFjLENBQ1osQ0FBQyxBa0VWSCxn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 */
