"use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function _createClass(e,t,a){return t&&_defineProperties(e.prototype,t),a&&_defineProperties(e,a),e}var bodyEl=document.body,scrollElement=window.document.scrollingElement||window.document.body||window.document.documentElement,elemExists=function(e){return e!==document.body&&document.body.contains(e)},siteHeader=document.querySelector(".site-header"),toggleNav=document.querySelectorAll(".toggle-nav"),navBar=document.querySelector(".mobile-navigation"),mainMenuItems=document.querySelectorAll(".menu-mobile-container>ul>li"),stats=document.querySelectorAll(".statistic"),cards=document.querySelectorAll(".card"),facts=document.querySelectorAll(".fast-fact__number"),intro_block=document.querySelector(".section-frontpage--intro"),intro_block__title=document.querySelector(".section-frontpage--intro__title"),intro_block__subtitle=document.querySelector(".section-frontpage--intro__subtitle"),intro_block__img=document.querySelector(".section-frontpage--intro__img"),intro_block__link=document.querySelector(".section-frontpage--intro__link"),mission_block=document.querySelector(".section-frontpage--mission"),mission_block__title=document.querySelector(".section-frontpage--mission header h2"),mission_block__img=document.querySelector(".section-frontpage--mission__img"),mission_block__quote=document.querySelector(".section-frontpage--mission__quote"),operations_block=document.querySelector(".section-frontpage--operations"),operations_block__title=document.querySelector(".section-frontpage--operations__title"),operations_block__img=document.querySelectorAll(".section-frontpage--operations__img"),operations_block__p=document.querySelectorAll(".section-frontpage--operations p"),mailing_block=document.querySelector(".section-frontpage--mailing-list"),mailing_block__title=document.querySelector(".section-frontpage--mailing-list__title"),mailing_block__subtitle=document.querySelectorAll(".section-frontpage--mailing-list__subtitle"),mailing_block__button=document.querySelector(".section-frontpage--mailing-list__btn"),preamble=document.querySelector(".preamble"),preambleEls=document.querySelectorAll(".preamble header > *"),featuredImage=document.querySelector(".featured-image-header"),featuredImageSrcset=document.querySelector(".featured-img"),pageContent=document.querySelector(".animated-page-content"),inlineSlider=document.querySelector(".slideshow"),hamburger=document.querySelector(".hamburger"),btt_btn=document.querySelector(".back-to-top"),isAnimating=!1,isAnimatingScroll=!1,isMobile=window.matchMedia("(max-width: 600px)"),last_known_scroll_position=0,ticking=!1,preamble_tl=anime.timeline({autoplay:!1}),intro_tl=anime.timeline({autoplay:!1}),mission_tl=anime.timeline({autoplay:!1}),operations_tl=anime.timeline({autoplay:!1}),mailing_tl=anime.timeline({autoplay:!1});anime.set(mission_block__title,{opacity:0,translateY:50}),anime.set(mission_block__img,{opacity:0,translateX:-50}),anime.set(mission_block__quote,{opacity:0,translateX:50}),anime.set(intro_block__title,{opacity:0,translateY:50}),anime.set(intro_block__img,{opacity:0,scale:2}),anime.set(intro_block__subtitle,{opacity:0,translateY:50}),anime.set(intro_block__link,{opacity:0,translateY:50}),anime.set(operations_block__title,{opacity:0,translateY:50}),anime.set(operations_block__p,{opacity:0,translateY:50}),anime.set(operations_block__img,{opacity:0,translateY:50}),anime.set(mailing_block__title,{opacity:0,translateY:50}),anime.set(mailing_block__subtitle,{opacity:0,translateY:50}),anime.set(mailing_block__button,{opacity:0,translateY:50}),anime.set([stats,cards],{opacity:0,translateY:50}),anime.set(preambleEls,{opacity:0,translateY:50}),anime.set(featuredImage,{opacity:0,translateY:50}),anime.set(pageContent,{opacity:0,translateY:50}),elemExists(intro_block)&&intro_tl.add({targets:intro_block__img,scale:[2,1],opacity:[0,1],translateZ:0,easing:"easeOutExpo",duration:1e3}).add({targets:intro_block__title,translateY:[50,0],opacity:[0,1],easing:"easeOutQuart",duration:600},"-=300").add({targets:intro_block__subtitle,translateY:[50,0],opacity:[0,1],easing:"easeOutQuart",duration:600},"-=300").add({targets:intro_block__link,translateY:[50,0],translateX:[-50,-50],opacity:[0,1],easing:"easeOutQuart",duration:600},"-=300");var animateCard=function(e){anime({targets:e,delay:150,opacity:{value:1,duration:300,easing:"linear"},translateY:0,duration:600,easing:"easeOutQuart"})};function animateHeaderArea(e){e>=75?siteHeader.classList.add("is-scrolled"):siteHeader.classList.remove("is-scrolled"),e>=75?bodyEl.classList.add("is-scrolling"):bodyEl.classList.remove("is-scrolling"),e>=75?btt_btn.classList.add("is-visible"):btt_btn.classList.remove("is-visible")}function init(){if(bodyEl.classList.remove("loading"),elemExists(preamble)&&preamble_tl.play(),"IntersectionObserver"in window){var e=new IntersectionObserver(function(e,t){e.forEach(function(e){e.isIntersecting&&e.intersectionRatio>0&&(e.target.classList.contains("section-frontpage--intro")&&intro_tl.play(),e.target.classList.contains("section-frontpage--mission")&&mission_tl.play(),e.target.classList.contains("section-frontpage--operations")&&operations_tl.play(),e.target.classList.contains("section-frontpage--mailing-list")&&mailing_tl.play(),e.target.classList.contains("statistic")&&animateCard(e.target),e.target.classList.contains("card")&&animateCard(e.target),t.unobserve(e.target))})},{rootMargin:"10px",threshold:.25});null!==stats&&stats.forEach(function(t){e.observe(t)}),null!==facts&&facts.forEach(function(t){e.observe(t)}),null!==cards&&cards.forEach(function(t){e.observe(t)}),null!==intro_block&&e.observe(intro_block),null!==mission_block&&e.observe(mission_block),null!==operations_block&&e.observe(operations_block),null!==mailing_block&&e.observe(mailing_block)}var t=function(){if(!isAnimating){isAnimating=!0;var e=navBar.classList.contains("mobile-navigation--open");e?navBar.classList.remove("mobile-navigation--open"):navBar.classList.add("mobile-navigation--open"),e?bodyEl.classList.remove("no-scroll"):bodyEl.classList.add("no-scroll"),e?hamburger.classList.remove("hamburger--active"):hamburger.classList.add("hamburger--active"),anime.timeline({begin:function(){!function(){var e=navBar.classList.contains("mobile-navigation--open");anime.timeline({easing:"easeOutBack"}).add({targets:document.querySelector(".hamburger > span:nth-child(1)"),translateY:e?[0,10]:[10,0],rotate:e?[0,45]:[45,0],duration:300}).add({targets:document.querySelector(".hamburger > span:nth-child(3)"),translateY:e?[0,-10]:[-10,0],rotate:e?[0,-45]:[-45,0],duration:300},"-=300").add({targets:document.querySelector(".hamburger > span:nth-child(2)"),scaleX:e?[1,0]:[0,1],duration:300},"-=300")}()},complete:function(){return isAnimating=!1}}).add({targets:navBar,translateX:e?["0","100%"]:["100%","0"],duration:600,easing:"easeOutQuart"}).add({targets:mainMenuItems,opacity:e?[1,0]:[0,1],translateX:e?[0,-50]:[-50,0],duration:1e3,easing:"easeOutQuart",delay:function(e,t){return 100+50*t}},"-=300")}};Array.from(document.querySelectorAll(".sub-menu")).forEach(function(e){var t=e.previousElementSibling,a=document.createElement("span"),i=document.createTextNode("+");a.appendChild(i),t.insertAdjacentElement("beforeend",a)}),Array.from(document.querySelectorAll("a")).forEach(function(e,a){if("external"===e.getAttribute("rel")||"designer"===e.getAttribute("rel")){var i=document.createAttribute("target");i.value="_blank",e.setAttributeNode(i)}e.addEventListener("click",function(a){if(a.preventDefault(),e.classList.contains("toggle-nav"))t();else if(e.classList.contains("scroll-to"))!function(e){var t=e.getAttribute("href").replace("#",""),a=document.getElementById(t).getBoundingClientRect(),i=window.pageYOffset+a.top;isAnimatingScroll||(isAnimatingScroll=!0,anime({targets:scrollElement,scrollTop:i-50,duration:600,easing:"easeOutQuart",complete:function(){isAnimatingScroll=!1}}))}(e);else{var i=e.nextElementSibling;null!==i&&i.classList.contains("sub-menu")?function(e,t){var a=t.classList.contains("submenu--open");a?t.classList.remove("submenu--open"):t.classList.add("submenu--open"),e.querySelector("span").innerHTML=a?"+":"-";var i=t.scrollHeight;anime({targets:t,height:a?[i,"0px"]:["0px",i],opacity:{value:a?[1,0]:[0,1],duration:300,easing:"linear"},duration:600,easing:"easeInOutQuart",complete:function(){t.style.pointerEvents=a?"none":"all"}})}(e,i):"_blank"===e.getAttribute("target")?window.open(e.getAttribute("href")):window.location.href=e.getAttribute("href")}})})}elemExists(mission_block)&&mission_tl.add({targets:mission_block__title,opacity:[0,1],translateY:[50,0],easing:"easeOutQuart",duration:600}).add({targets:mission_block__img,opacity:[0,1],translateX:[-50,0],easing:"easeOutQuart",duration:600},"-=300").add({targets:mission_block__quote,opacity:[0,1],translateX:[50,0],easing:"easeOutQuart",duration:600},"-=300"),elemExists(operations_block)&&operations_tl.add({targets:operations_block__title,opacity:[0,1],translateY:[50,0],easing:"easeOutQuart",duration:600}).add({targets:operations_block__p,opacity:[0,1],translateY:[50,0],easing:"easeOutQuart",duration:600,delay:function(e,t){return 100+50*t}},"-=300").add({targets:operations_block__img,opacity:[0,1],translateY:[50,0],easing:"easeOutQuart",duration:600,delay:function(e,t){return 200+50*t}},"-=300"),elemExists(mailing_block)&&mailing_tl.add({targets:mailing_block__title,opacity:[0,1],translateY:[50,0],easing:"easeOutQuart",duration:600}).add({targets:mailing_block__subtitle,opacity:[0,1],translateY:[50,0],easing:"easeOutQuart",duration:600},"-=300").add({targets:mailing_block__button,opacity:[0,1],translateY:[50,0],easing:"easeOutQuart",duration:600},"-=300"),elemExists(preamble)&&(preamble_tl.add({targets:preambleEls,opacity:[0,1],translateY:[50,0],duration:600,delay:anime.stagger(200),easing:"easeOutQuart"}),elemExists(featuredImage)&&preamble_tl.add({targets:featuredImage,opacity:[0,1],translateY:[50,0],duration:600,easing:"easeOutQuart"},"-=300"),elemExists(featuredImageSrcset)&&preamble_tl.add({targets:featuredImageSrcset,opacity:[0,1],translateY:[50,0],duration:600,easing:"easeOutQuart"},"-=300"),preamble_tl.add({targets:pageContent,opacity:[0,1],translateY:[50,0],duration:600,easing:"easeOutQuart"},"-=300")),window.addEventListener("scroll",function(e){last_known_scroll_position=window.scrollY,ticking||(window.requestAnimationFrame(function(){animateHeaderArea(last_known_scroll_position),ticking=!1}),ticking=!0)});var Slide=function(){function e(t){_classCallCheck(this,e),this.DOM={el:t}}return _createClass(e,[{key:"setCurrent",value:function(){this.DOM.el.style.opacity=1}},{key:"toggle",value:function(e){var t=this;return new Promise(function(a,i){anime({targets:t.DOM.el,easing:"easeInOutQuart",scale:"hide"===e?[1,1.2]:[1.2,1],opacity:"hide"===e?[1,0]:[0,1],duration:600,complete:function(){a()}})})}}]),e}(),Slideshow=function(){function e(t){var a=this;_classCallCheck(this,e),this.DOM={el:t},this.slides=[],Array.from(this.DOM.el.querySelectorAll(".slide")).forEach(function(e){return a.slides.push(new Slide(e))}),this.slidesTotal=this.slides.length,this.current=0,this.nextSlide=this.setNextSlide(),this.slides[this.current].setCurrent(),setTimeout(this.navigate(),3e3)}return _createClass(e,[{key:"setNextSlide",value:function(){return this.current>0?this.current-1:this.slidesTotal-1}},{key:"navigate",value:function(){var e=this;this.nextSlide=this.setNextSlide(),Promise.all([this.slides[this.current].toggle("hide"),this.slides[this.nextSlide].toggle("show")]).then(function(){anime({targets:e.DOM.el.querySelector(".slideshow__loader"),easing:"easeOutQuart",width:"100%",duration:3e3,complete:function(){e.DOM.el.querySelector(".slideshow__loader").style.width=0}}),e.current=e.nextSlide,setTimeout(function(){e.navigate()},3e3)})}}]),e}();imagesLoaded(bodyEl,{background:!0},function(){if(elemExists(inlineSlider))new Slideshow(inlineSlider);setTimeout(init,300)});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImN1c3RvbS5qcyIsInNjcmlwdHMuanMiXSwibmFtZXMiOlsiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJpIiwibGVuZ3RoIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwicHJvdG90eXBlIiwiYm9keUVsIiwiZG9jdW1lbnQiLCJib2R5Iiwic2Nyb2xsRWxlbWVudCIsIndpbmRvdyIsInNjcm9sbGluZ0VsZW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJlbGVtRXhpc3RzIiwibm9kZSIsImNvbnRhaW5zIiwic2l0ZUhlYWRlciIsInF1ZXJ5U2VsZWN0b3IiLCJ0b2dnbGVOYXYiLCJxdWVyeVNlbGVjdG9yQWxsIiwibmF2QmFyIiwibWFpbk1lbnVJdGVtcyIsInN0YXRzIiwiY2FyZHMiLCJmYWN0cyIsImludHJvX2Jsb2NrIiwiaW50cm9fYmxvY2tfX3RpdGxlIiwiaW50cm9fYmxvY2tfX3N1YnRpdGxlIiwiaW50cm9fYmxvY2tfX2ltZyIsImludHJvX2Jsb2NrX19saW5rIiwibWlzc2lvbl9ibG9jayIsIm1pc3Npb25fYmxvY2tfX3RpdGxlIiwibWlzc2lvbl9ibG9ja19faW1nIiwibWlzc2lvbl9ibG9ja19fcXVvdGUiLCJvcGVyYXRpb25zX2Jsb2NrIiwib3BlcmF0aW9uc19ibG9ja19fdGl0bGUiLCJvcGVyYXRpb25zX2Jsb2NrX19pbWciLCJvcGVyYXRpb25zX2Jsb2NrX19wIiwibWFpbGluZ19ibG9jayIsIm1haWxpbmdfYmxvY2tfX3RpdGxlIiwibWFpbGluZ19ibG9ja19fc3VidGl0bGUiLCJtYWlsaW5nX2Jsb2NrX19idXR0b24iLCJwcmVhbWJsZSIsInByZWFtYmxlRWxzIiwiZmVhdHVyZWRJbWFnZSIsImZlYXR1cmVkSW1hZ2VTcmNzZXQiLCJwYWdlQ29udGVudCIsImlubGluZVNsaWRlciIsImhhbWJ1cmdlciIsImJ0dF9idG4iLCJpc0FuaW1hdGluZyIsImlzQW5pbWF0aW5nU2Nyb2xsIiwiaXNNb2JpbGUiLCJtYXRjaE1lZGlhIiwibGFzdF9rbm93bl9zY3JvbGxfcG9zaXRpb24iLCJ0aWNraW5nIiwicHJlYW1ibGVfdGwiLCJhbmltZSIsInRpbWVsaW5lIiwiYXV0b3BsYXkiLCJpbnRyb190bCIsIm1pc3Npb25fdGwiLCJvcGVyYXRpb25zX3RsIiwibWFpbGluZ190bCIsInNldCIsIm9wYWNpdHkiLCJ0cmFuc2xhdGVZIiwidHJhbnNsYXRlWCIsInNjYWxlIiwiYWRkIiwidGFyZ2V0cyIsInRyYW5zbGF0ZVoiLCJlYXNpbmciLCJkdXJhdGlvbiIsImFuaW1hdGVDYXJkIiwidCIsImRlbGF5IiwidmFsdWUiLCJhbmltYXRlSGVhZGVyQXJlYSIsInNjcm9sbF9wb3MiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJpbml0IiwicGxheSIsImlvIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJlbnRyaWVzIiwib2JzZXJ2ZXIiLCJmb3JFYWNoIiwiZW50cnkiLCJpc0ludGVyc2VjdGluZyIsImludGVyc2VjdGlvblJhdGlvIiwidW5vYnNlcnZlIiwicm9vdE1hcmdpbiIsInRocmVzaG9sZCIsInN0YXQiLCJvYnNlcnZlIiwiZmFjdCIsImNhcmQiLCJhbmltYXRlTmF2aWdhdGlvbiIsImlzT3BlbiIsImJlZ2luIiwicm90YXRlIiwic2NhbGVYIiwiYW5pbWF0ZUhhbWJ1cmdlciIsImNvbXBsZXRlIiwiZWwiLCJBcnJheSIsImZyb20iLCJtZW51IiwidG9nZ2xlTGluayIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIm5ld0NvbnRlbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImFwcGVuZENoaWxkIiwiaW5zZXJ0QWRqYWNlbnRFbGVtZW50IiwiaW5kZXgiLCJnZXRBdHRyaWJ1dGUiLCJhdHQiLCJjcmVhdGVBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGVOb2RlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2IiwicHJldmVudERlZmF1bHQiLCJlbExpbmsiLCJyZXBsYWNlIiwiZWxMaW5rUG9zIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJlbE5ld1BvcyIsInBhZ2VZT2Zmc2V0IiwidG9wIiwic2Nyb2xsVG9wIiwiaXNJbnRlcm5hbExpbmsiLCJzdWJNZW51IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiaW5uZXJIVE1MIiwibWVudUhlaWdodCIsInNjcm9sbEhlaWdodCIsImhlaWdodCIsInN0eWxlIiwicG9pbnRlckV2ZW50cyIsIkRyb3BEb3duTmF2aWdhdGlvbiIsIm9wZW4iLCJsb2NhdGlvbiIsImhyZWYiLCJzdGFnZ2VyIiwiZSIsInNjcm9sbFkiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJTbGlkZSIsInRoaXMiLCJET00iLCJhY3Rpb24iLCJfdGhpcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiU2xpZGVzaG93IiwiX3RoaXMyIiwic2xpZGVzIiwic2xpZGVFbCIsInB1c2giLCJzbGlkZXNUb3RhbCIsImN1cnJlbnQiLCJuZXh0U2xpZGUiLCJzZXROZXh0U2xpZGUiLCJzZXRDdXJyZW50Iiwic2V0VGltZW91dCIsIm5hdmlnYXRlIiwiX3RoaXMzIiwiYWxsIiwidG9nZ2xlIiwidGhlbiIsIndpZHRoIiwiaW1hZ2VzTG9hZGVkIiwiYmFja2dyb3VuZCJdLCJtYXBwaW5ncyI6IkFBQUEsYUFFQSxTQUFTQSxnQkFBZ0JDLEVBQVVDLEdBQWUsS0FBTUQsYUFBb0JDLEdBQWdCLE1BQU0sSUFBSUMsVUFBVSxxQ0FFaEgsU0FBU0Msa0JBQWtCQyxFQUFRQyxHQUFTLElBQUssSUFBSUMsRUFBSSxFQUFHQSxFQUFJRCxFQUFNRSxPQUFRRCxJQUFLLENBQUUsSUFBSUUsRUFB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WUFBYyxJRDJMdkUsQ0FDRHBLLElBQUssV0FDTDRFLE1BQU8sV0MzTFEsSUFBQStGLEVBQUFuQixLQUNQQSxLQUFLYyxVQUFZZCxLQUFLZSxlQUN0QlgsUUFBUWdCLElBQUksQ0FDUnBCLEtBQUtTLE9BQU9ULEtBQUthLFNBQVNRLE9BQU8sUUFDakNyQixLQUFLUyxPQUFPVCxLQUFLYyxXQUFXTyxPQUFPLFVBQ3BDQyxLQUFLLFdBQ0h0SCxNQUFNLENBQ0hhLFFBQVVzRyxFQUFLbEIsSUFBSWhELEdBQUd6RixjQUFjLHNCQUNwQ3VELE9BQVEsZUFDUndHLE1BQU8sT0FDUHZHLFNBQVUsSUFDVmdDLFNBQVUsV0FBU21FLEVBQUtsQixJQUFJaEQsR0FBR3pGLGNBQWMsc0JBQXNCNkgsTUFBTWtDLE1BQVEsS0FFckZKLEVBQUtOLFFBQVVNLEVBQUtMLFVBQ3BCRyxXQUFZLFdBQVFFLEVBQUtELFlBQWUsV0RtTS9DWCxFQWhEVCxHQzFJSWlCLGFBQWMzSyxPQUFRLENBQUU0SyxZQUFZLEdBQVEsV0FDeEMsR0FBSXJLLFdBQVdrQyxjQUFrQyxJQUFJaUgsVUFBVWpILGNBQy9EMkgsV0FBV3hGLEtBQU0iLCJmaWxlIjoiY3VzdG9tLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCIvKipcbiAqIEN1c3RvbS5qc1xuICogaHR0cDovL3d3dy5ncmVlbnJlc291cmNlcy5ub1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gKiBcbiAqIENvcHlyaWdodCAyMDE5LCBTdHVhcnQgQW5kcmV3IExlZXNcbiAqIGh0dHA6Ly93d3cuc3R1YXJ0YW5kcmV3bGVlcy5jby51a1xuICovXG5cbi8qKiBcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkRlZmF1bHQgY29uc3RhbnRzXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKi9cbmNvbnN0IGJvZHlFbCA9IGRvY3VtZW50LmJvZHk7XG5jb25zdCBzY3JvbGxFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgfHwgd2luZG93LmRvY3VtZW50LmJvZHkgfHwgd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbmNvbnN0IGVsZW1FeGlzdHMgPSAobm9kZSkgPT4gKG5vZGUgPT09IGRvY3VtZW50LmJvZHkpID8gZmFsc2UgOiBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKG5vZGUpO1xuY29uc3Qgc2l0ZUhlYWRlciA9ICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2l0ZS1oZWFkZXInKTtcbmNvbnN0IHRvZ2dsZU5hdiA9ICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudG9nZ2xlLW5hdicpO1xuY29uc3QgbmF2QmFyID0gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tb2JpbGUtbmF2aWdhdGlvbicpO1xuY29uc3QgbWFpbk1lbnVJdGVtcyA9ICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWVudS1tb2JpbGUtY29udGFpbmVyPnVsPmxpJyk7XG5jb25zdCBzdGF0cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdGF0aXN0aWMnKTtcbmNvbnN0IGNhcmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNhcmQnKTtcbmNvbnN0IGZhY3RzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmZhc3QtZmFjdF9fbnVtYmVyJyk7XG5jb25zdCBpbnRyb19ibG9jayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWN0aW9uLWZyb250cGFnZS0taW50cm8nKTtcbmNvbnN0IGludHJvX2Jsb2NrX190aXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWN0aW9uLWZyb250cGFnZS0taW50cm9fX3RpdGxlJyk7XG5jb25zdCBpbnRyb19ibG9ja19fc3VidGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VjdGlvbi1mcm9udHBhZ2UtLWludHJvX19zdWJ0aXRsZScpO1xuY29uc3QgaW50cm9fYmxvY2tfX2ltZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWN0aW9uLWZyb250cGFnZS0taW50cm9fX2ltZycpO1xuY29uc3QgaW50cm9fYmxvY2tfX2xpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VjdGlvbi1mcm9udHBhZ2UtLWludHJvX19saW5rJyk7XG5jb25zdCBtaXNzaW9uX2Jsb2NrID0gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWN0aW9uLWZyb250cGFnZS0tbWlzc2lvbicpO1xuY29uc3QgbWlzc2lvbl9ibG9ja19fdGl0bGUgPSAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNlY3Rpb24tZnJvbnRwYWdlLS1taXNzaW9uIGhlYWRlciBoMicpO1xuY29uc3QgbWlzc2lvbl9ibG9ja19faW1nID0gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWN0aW9uLWZyb250cGFnZS0tbWlzc2lvbl9faW1nJyk7XG5jb25zdCBtaXNzaW9uX2Jsb2NrX19xdW90ZSA9ICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VjdGlvbi1mcm9udHBhZ2UtLW1pc3Npb25fX3F1b3RlJyk7XG5jb25zdCBvcGVyYXRpb25zX2Jsb2NrID0gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWN0aW9uLWZyb250cGFnZS0tb3BlcmF0aW9ucycpO1xuY29uc3Qgb3BlcmF0aW9uc19ibG9ja19fdGl0bGUgPSAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNlY3Rpb24tZnJvbnRwYWdlLS1vcGVyYXRpb25zX190aXRsZScpO1xuY29uc3Qgb3BlcmF0aW9uc19ibG9ja19faW1nID0gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZWN0aW9uLWZyb250cGFnZS0tb3BlcmF0aW9uc19faW1nJyk7XG5jb25zdCBvcGVyYXRpb25zX2Jsb2NrX19wID0gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZWN0aW9uLWZyb250cGFnZS0tb3BlcmF0aW9ucyBwJyk7XG5jb25zdCBtYWlsaW5nX2Jsb2NrID0gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWN0aW9uLWZyb250cGFnZS0tbWFpbGluZy1saXN0Jyk7XG5jb25zdCBtYWlsaW5nX2Jsb2NrX190aXRsZSA9ICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VjdGlvbi1mcm9udHBhZ2UtLW1haWxpbmctbGlzdF9fdGl0bGUnKTtcbmNvbnN0IG1haWxpbmdfYmxvY2tfX3N1YnRpdGxlID0gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZWN0aW9uLWZyb250cGFnZS0tbWFpbGluZy1saXN0X19zdWJ0aXRsZScpO1xuY29uc3QgbWFpbGluZ19ibG9ja19fYnV0dG9uID0gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWN0aW9uLWZyb250cGFnZS0tbWFpbGluZy1saXN0X19idG4nKTtcbmNvbnN0IHByZWFtYmxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByZWFtYmxlJyk7XG5jb25zdCBwcmVhbWJsZUVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wcmVhbWJsZSBoZWFkZXIgPiAqJyk7XG5jb25zdCBmZWF0dXJlZEltYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmZlYXR1cmVkLWltYWdlLWhlYWRlcicpO1xuY29uc3QgZmVhdHVyZWRJbWFnZVNyY3NldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mZWF0dXJlZC1pbWcnKTtcbmNvbnN0IHBhZ2VDb250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFuaW1hdGVkLXBhZ2UtY29udGVudCcpO1xuY29uc3QgaW5saW5lU2xpZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNsaWRlc2hvdycpO1xuY29uc3QgaGFtYnVyZ2VyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmhhbWJ1cmdlcicpO1xuY29uc3QgYnR0X2J0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5iYWNrLXRvLXRvcCcpO1xuXG5sZXQgaXNBbmltYXRpbmcgPSBmYWxzZTtcbmxldCBpc0FuaW1hdGluZ1Njcm9sbCA9IGZhbHNlO1xubGV0IGlzTW9iaWxlID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDYwMHB4KScpO1xubGV0IGxhc3Rfa25vd25fc2Nyb2xsX3Bvc2l0aW9uID0gMDtcbmxldCB0aWNraW5nID0gZmFsc2U7XG5cbmNvbnN0IHByZWFtYmxlX3RsID0gYW5pbWUudGltZWxpbmUoeyBhdXRvcGxheTpmYWxzZSB9KTtcbmNvbnN0IGludHJvX3RsID0gYW5pbWUudGltZWxpbmUoeyBhdXRvcGxheTogZmFsc2UgfSk7XG5jb25zdCBtaXNzaW9uX3RsID0gYW5pbWUudGltZWxpbmUoeyBhdXRvcGxheTogZmFsc2UgfSk7XG5jb25zdCBvcGVyYXRpb25zX3RsID0gYW5pbWUudGltZWxpbmUoeyBhdXRvcGxheTogZmFsc2UgfSk7XG5jb25zdCBtYWlsaW5nX3RsID0gYW5pbWUudGltZWxpbmUoeyBhdXRvcGxheTogZmFsc2UgfSk7XG5cbi8qKlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuU2V0IGRlZmF1bHQgc3RhdGVzXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKi9cbmFuaW1lLnNldChtaXNzaW9uX2Jsb2NrX190aXRsZSwge29wYWNpdHk6MCwgdHJhbnNsYXRlWTo1MCB9KTtcbmFuaW1lLnNldChtaXNzaW9uX2Jsb2NrX19pbWcsIHtvcGFjaXR5OjAsIHRyYW5zbGF0ZVg6LTUwIH0pO1xuYW5pbWUuc2V0KG1pc3Npb25fYmxvY2tfX3F1b3RlLCB7b3BhY2l0eTowLCB0cmFuc2xhdGVYOjUwIH0pO1xuYW5pbWUuc2V0KGludHJvX2Jsb2NrX190aXRsZSwge29wYWNpdHk6MCwgdHJhbnNsYXRlWTo1MCB9KTtcbmFuaW1lLnNldChpbnRyb19ibG9ja19faW1nLCB7b3BhY2l0eTowLCBzY2FsZToyIH0pO1xuYW5pbWUuc2V0KGludHJvX2Jsb2NrX19zdWJ0aXRsZSwge29wYWNpdHk6MCwgdHJhbnNsYXRlWTo1MCB9KTtcbmFuaW1lLnNldChpbnRyb19ibG9ja19fbGluaywge29wYWNpdHk6MCwgdHJhbnNsYXRlWTo1MCB9KTtcbmFuaW1lLnNldChvcGVyYXRpb25zX2Jsb2NrX190aXRsZSwge29wYWNpdHk6MCwgdHJhbnNsYXRlWTo1MCB9KTtcbmFuaW1lLnNldChvcGVyYXRpb25zX2Jsb2NrX19wLCB7b3BhY2l0eTowLCB0cmFuc2xhdGVZOjUwIH0pO1xuYW5pbWUuc2V0KG9wZXJhdGlvbnNfYmxvY2tfX2ltZywge29wYWNpdHk6MCwgdHJhbnNsYXRlWTo1MCB9KTtcbmFuaW1lLnNldChtYWlsaW5nX2Jsb2NrX190aXRsZSwge29wYWNpdHk6MCwgdHJhbnNsYXRlWTo1MCB9KTtcbmFuaW1lLnNldChtYWlsaW5nX2Jsb2NrX19zdWJ0aXRsZSwge29wYWNpdHk6MCwgdHJhbnNsYXRlWTo1MCB9KTtcbmFuaW1lLnNldChtYWlsaW5nX2Jsb2NrX19idXR0b24sIHtvcGFjaXR5OjAsIHRyYW5zbGF0ZVk6NTAgfSk7XG5hbmltZS5zZXQoW3N0YXRzLGNhcmRzXSwge29wYWNpdHk6MCwgdHJhbnNsYXRlWTo1MCB9KTtcbmFuaW1lLnNldChwcmVhbWJsZUVscywge29wYWNpdHk6MCwgdHJhbnNsYXRlWTo1MCB9KTtcbmFuaW1lLnNldChmZWF0dXJlZEltYWdlLCB7b3BhY2l0eTowLCB0cmFuc2xhdGVZOjUwIH0pO1xuYW5pbWUuc2V0KHBhZ2VDb250ZW50LCB7b3BhY2l0eTowLCB0cmFuc2xhdGVZOjUwIH0pO1xuXG4vKipcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkFuaW1hdGlvbnNcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4qL1xuaWYoZWxlbUV4aXN0cyhpbnRyb19ibG9jaykpe1xuLy8gSG9tZXBhZ2UgaW50cm9cbmludHJvX3RsXG4gICAgLmFkZCh7XG4gICAgICAgIHRhcmdldHM6IGludHJvX2Jsb2NrX19pbWcsXG4gICAgICAgIHNjYWxlOiBbMiwxXSxcbiAgICAgICAgb3BhY2l0eTogWzAsMV0sXG4gICAgICAgIHRyYW5zbGF0ZVo6IDAsXG4gICAgICAgIGVhc2luZzogXCJlYXNlT3V0RXhwb1wiLFxuICAgICAgICBkdXJhdGlvbjogMTAwMFxuICAgIH0pXG4gICAgLmFkZCh7XG4gICAgICAgIHRhcmdldHM6IGludHJvX2Jsb2NrX190aXRsZSxcbiAgICAgICAgdHJhbnNsYXRlWTogWzUwLDBdLFxuICAgICAgICBvcGFjaXR5OiBbMCwxXSxcbiAgICAgICAgZWFzaW5nOiBcImVhc2VPdXRRdWFydFwiLFxuICAgICAgICBkdXJhdGlvbjogNjAwLFxuICAgIH0sICctPTMwMCcpXG4gICAgLmFkZCh7XG4gICAgICAgIHRhcmdldHM6IGludHJvX2Jsb2NrX19zdWJ0aXRsZSxcbiAgICAgICAgdHJhbnNsYXRlWTogWzUwLDBdLFxuICAgICAgICBvcGFjaXR5OiBbMCwxXSxcbiAgICAgICAgZWFzaW5nOiBcImVhc2VPdXRRdWFydFwiLFxuICAgICAgICBkdXJhdGlvbjogNjAwLFxuICAgIH0sICctPTMwMCcpXG4gICAgLmFkZCh7XG4gICAgICAgIHRhcmdldHM6IGludHJvX2Jsb2NrX19saW5rLFxuICAgICAgICB0cmFuc2xhdGVZOiBbNTAsMF0sXG4gICAgICAgIHRyYW5zbGF0ZVg6IFstNTAsLTUwXSxcbiAgICAgICAgb3BhY2l0eTogWzAsMV0sXG4gICAgICAgIGVhc2luZzogXCJlYXNlT3V0UXVhcnRcIixcbiAgICAgICAgZHVyYXRpb246IDYwMCxcbiAgICB9LCAnLT0zMDAnKTtcbn1cblxuLy8gSG9tZXBhZ2Ugc3RhdHNcbmNvbnN0IGFuaW1hdGVDYXJkID0gKHQpID0+IHtcbiAgICBhbmltZSh7XG4gICAgICAgIHRhcmdldHM6IHQsXG4gICAgICAgIGRlbGF5OiAxNTAsXG4gICAgICAgIG9wYWNpdHk6IHsgdmFsdWU6IDEsIGR1cmF0aW9uOiAzMDAsIGVhc2luZzogJ2xpbmVhcicgfSxcbiAgICAgICAgdHJhbnNsYXRlWTogMCxcbiAgICAgICAgZHVyYXRpb246NjAwLFxuICAgICAgICBlYXNpbmc6ICdlYXNlT3V0UXVhcnQnXG4gICAgfSk7IFxufTtcblxuaWYoZWxlbUV4aXN0cyhtaXNzaW9uX2Jsb2NrKSl7XG4gICAgLy8gSG9tZXBhZ2Ugb3VyIG1pc3Npb25cbiAgICBtaXNzaW9uX3RsXG4gICAgLmFkZCh7XG4gICAgICAgICAgICB0YXJnZXRzOiBtaXNzaW9uX2Jsb2NrX190aXRsZSxcbiAgICAgICAgICAgIG9wYWNpdHk6IFswLDFdLFxuICAgICAgICAgICAgdHJhbnNsYXRlWTogWzUwLDBdLFxuICAgICAgICAgICAgZWFzaW5nOiBcImVhc2VPdXRRdWFydFwiLFxuICAgICAgICAgICAgZHVyYXRpb246IDYwMFxuICAgIH0pXG4gICAgLmFkZCh7XG4gICAgICAgICAgICB0YXJnZXRzOiBtaXNzaW9uX2Jsb2NrX19pbWcsXG4gICAgICAgICAgICBvcGFjaXR5OiBbMCwxXSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZVg6IFstNTAsMF0sXG4gICAgICAgICAgICBlYXNpbmc6IFwiZWFzZU91dFF1YXJ0XCIsXG4gICAgICAgICAgICBkdXJhdGlvbjogNjAwXG4gICAgfSwgXCItPTMwMFwiKVxuICAgIC5hZGQoe1xuICAgICAgICAgICAgdGFyZ2V0czogbWlzc2lvbl9ibG9ja19fcXVvdGUsXG4gICAgICAgICAgICBvcGFjaXR5OiBbMCwxXSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZVg6IFs1MCwwXSxcbiAgICAgICAgICAgIGVhc2luZzogXCJlYXNlT3V0UXVhcnRcIixcbiAgICAgICAgICAgIGR1cmF0aW9uOiA2MDBcbiAgICB9LCBcIi09MzAwXCIpO1xufVxuXG5pZihlbGVtRXhpc3RzKG9wZXJhdGlvbnNfYmxvY2spKXtcbiAgICAvLyBIb21lcGFnZSBvdXIgb3BlcmF0aW9uc1xuICAgIG9wZXJhdGlvbnNfdGxcbiAgICAuYWRkKHtcbiAgICAgICAgICAgIHRhcmdldHM6IG9wZXJhdGlvbnNfYmxvY2tfX3RpdGxlLFxuICAgICAgICAgICAgb3BhY2l0eTogWzAsMV0sXG4gICAgICAgICAgICB0cmFuc2xhdGVZOiBbNTAsMF0sXG4gICAgICAgICAgICBlYXNpbmc6IFwiZWFzZU91dFF1YXJ0XCIsXG4gICAgICAgICAgICBkdXJhdGlvbjogNjAwXG4gICAgfSlcbiAgICAuYWRkKHtcbiAgICAgICAgICAgIHRhcmdldHM6IG9wZXJhdGlvbnNfYmxvY2tfX3AsXG4gICAgICAgICAgICBvcGFjaXR5OiBbMCwxXSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZVk6IFs1MCwwXSxcbiAgICAgICAgICAgIGVhc2luZzogXCJlYXNlT3V0UXVhcnRcIixcbiAgICAgICAgICAgIGR1cmF0aW9uOiA2MDAsXG4gICAgICAgICAgICBkZWxheTogKGVsLCBpKSA9PiAxMDAgKyA1MCAqIGlcbiAgICB9LCBcIi09MzAwXCIpXG4gICAgLmFkZCh7XG4gICAgICAgICAgICB0YXJnZXRzOiBvcGVyYXRpb25zX2Jsb2NrX19pbWcsXG4gICAgICAgICAgICBvcGFjaXR5OiBbMCwxXSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZVk6IFs1MCwwXSxcbiAgICAgICAgICAgIGVhc2luZzogXCJlYXNlT3V0UXVhcnRcIixcbiAgICAgICAgICAgIGR1cmF0aW9uOiA2MDAsXG4gICAgICAgICAgICBkZWxheTogKGVsLCBpKSA9PiAyMDAgKyA1MCAqIGlcbiAgICB9LCBcIi09MzAwXCIpO1xufVxuXG5pZihlbGVtRXhpc3RzKG1haWxpbmdfYmxvY2spKXtcbiAgICAvLyBIb21lcGFnZSBtYWlsaW5nIGxpc3RzXG4gICAgbWFpbGluZ190bFxuICAgIC5hZGQoe1xuICAgICAgICAgICAgdGFyZ2V0czogbWFpbGluZ19ibG9ja19fdGl0bGUsXG4gICAgICAgICAgICBvcGFjaXR5OiBbMCwxXSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZVk6IFs1MCwwXSxcbiAgICAgICAgICAgIGVhc2luZzogXCJlYXNlT3V0UXVhcnRcIixcbiAgICAgICAgICAgIGR1cmF0aW9uOiA2MDBcbiAgICB9KVxuICAgIC5hZGQoe1xuICAgICAgICAgICAgdGFyZ2V0czogbWFpbGluZ19ibG9ja19fc3VidGl0bGUsXG4gICAgICAgICAgICBvcGFjaXR5OiBbMCwxXSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZVk6IFs1MCwwXSxcbiAgICAgICAgICAgIGVhc2luZzogXCJlYXNlT3V0UXVhcnRcIixcbiAgICAgICAgICAgIGR1cmF0aW9uOiA2MDAsXG4gICAgfSwgXCItPTMwMFwiKVxuICAgIC5hZGQoe1xuICAgICAgICAgICAgdGFyZ2V0czogbWFpbGluZ19ibG9ja19fYnV0dG9uLFxuICAgICAgICAgICAgb3BhY2l0eTogWzAsMV0sXG4gICAgICAgICAgICB0cmFuc2xhdGVZOiBbNTAsMF0sXG4gICAgICAgICAgICBlYXNpbmc6IFwiZWFzZU91dFF1YXJ0XCIsXG4gICAgICAgICAgICBkdXJhdGlvbjogNjAwLFxuICAgIH0sIFwiLT0zMDBcIik7XG59XG5cbi8qIFxuRmFzdCBGYWN0cyAgXG5jb25zdCBhbmltYXRlRmFzdEZhY3QgPSAoZWwpID0+IHtcbiAgICBsZXQgZmlsZXNTY2FubmVkID0geyBjb3VudDogMCB9O1xuICAgIGxldCB0b1ZhbHVlID0gIGVsLmlubmVySFRNTDtcbiAgICBhbmltZSh7XG4gICAgICB0YXJnZXRzOiBmaWxlc1NjYW5uZWQsXG4gICAgICBhdXRvcGxheTogdHJ1ZSxcbiAgICAgIGNvdW50OiB0b1ZhbHVlLFxuICAgICAgZHVyYXRpb246IDEwMDAsXG4gICAgICBlYXNpbmc6IFwibGluZWFyXCIsXG4gICAgICByb3VuZDogMSxcbiAgICAgIHVwZGF0ZTogKCkgPT4gZWwuaW5uZXJIVE1MID0gZmlsZXNTY2FubmVkLmNvdW50XG4gICAgfSk7XG59OyBcbiovXG5cbi8vIFByZWFtYmxlXG5pZihlbGVtRXhpc3RzKHByZWFtYmxlKSl7XG4gICAgcHJlYW1ibGVfdGwuYWRkKHtcbiAgICAgICAgdGFyZ2V0czogcHJlYW1ibGVFbHMsXG4gICAgICAgIG9wYWNpdHk6IFswLDFdLFxuICAgICAgICB0cmFuc2xhdGVZOiBbNTAsMF0sXG4gICAgICAgIGR1cmF0aW9uOjYwMCxcbiAgICAgICAgZGVsYXk6IGFuaW1lLnN0YWdnZXIoMjAwKSxcbiAgICAgICAgZWFzaW5nOiBcImVhc2VPdXRRdWFydFwiLFxuICAgIH0pO1xuICAgIGlmKCBlbGVtRXhpc3RzKGZlYXR1cmVkSW1hZ2UpICl7XG4gICAgICAgIHByZWFtYmxlX3RsLmFkZCh7XG4gICAgICAgICAgICB0YXJnZXRzOiBmZWF0dXJlZEltYWdlLFxuICAgICAgICAgICAgb3BhY2l0eTogWzAsMV0sXG4gICAgICAgICAgICB0cmFuc2xhdGVZOiBbNTAsMF0sXG4gICAgICAgICAgICBkdXJhdGlvbjo2MDAsXG4gICAgICAgICAgICBlYXNpbmc6IFwiZWFzZU91dFF1YXJ0XCIsXG4gICAgICAgIH0sICctPTMwMCcpO1xuICAgIH1cbiAgICBpZiggZWxlbUV4aXN0cyhmZWF0dXJlZEltYWdlU3Jjc2V0KSApe1xuICAgICAgICBwcmVhbWJsZV90bC5hZGQoe1xuICAgICAgICAgICAgdGFyZ2V0czogZmVhdHVyZWRJbWFnZVNyY3NldCxcbiAgICAgICAgICAgIG9wYWNpdHk6IFswLDFdLFxuICAgICAgICAgICAgdHJhbnNsYXRlWTogWzUwLDBdLFxuICAgICAgICAgICAgZHVyYXRpb246NjAwLFxuICAgICAgICAgICAgZWFzaW5nOiBcImVhc2VPdXRRdWFydFwiLFxuICAgICAgICB9LCAnLT0zMDAnKTtcbiAgICB9XG4gICAgcHJlYW1ibGVfdGwuYWRkKHtcbiAgICAgICAgdGFyZ2V0czogcGFnZUNvbnRlbnQsXG4gICAgICAgIG9wYWNpdHk6IFswLDFdLFxuICAgICAgICB0cmFuc2xhdGVZOiBbNTAsMF0sXG4gICAgICAgIGR1cmF0aW9uOjYwMCxcbiAgICAgICAgZWFzaW5nOiBcImVhc2VPdXRRdWFydFwiLFxuICAgIH0sICctPTMwMCcpO1xufVxuXG4vKipcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblNjcm9sbCBFdmVudFxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiovXG5mdW5jdGlvbiBhbmltYXRlSGVhZGVyQXJlYShzY3JvbGxfcG9zKSB7XG4gICAgKHNjcm9sbF9wb3MgPj0gNzUpID8gc2l0ZUhlYWRlci5jbGFzc0xpc3QuYWRkKCdpcy1zY3JvbGxlZCcpIDogc2l0ZUhlYWRlci5jbGFzc0xpc3QucmVtb3ZlKCdpcy1zY3JvbGxlZCcpO1xuICAgIChzY3JvbGxfcG9zID49IDc1KSA/IGJvZHlFbC5jbGFzc0xpc3QuYWRkKCdpcy1zY3JvbGxpbmcnKSA6IGJvZHlFbC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1zY3JvbGxpbmcnKTtcbiAgICAoc2Nyb2xsX3BvcyA+PSA3NSkgPyBidHRfYnRuLmNsYXNzTGlzdC5hZGQoJ2lzLXZpc2libGUnKSA6IGJ0dF9idG4uY2xhc3NMaXN0LnJlbW92ZSgnaXMtdmlzaWJsZScpO1xufVxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uKGUpIHtcbiAgICBsYXN0X2tub3duX3Njcm9sbF9wb3NpdGlvbiA9IHdpbmRvdy5zY3JvbGxZO1xuICAgIGlmICghdGlja2luZykge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkge1xuICAgICAgICBhbmltYXRlSGVhZGVyQXJlYShsYXN0X2tub3duX3Njcm9sbF9wb3NpdGlvbik7XG4gICAgICAgIHRpY2tpbmcgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aWNraW5nID0gdHJ1ZTtcbiAgICB9XG59KTtcblxuLyoqIFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuSW5pdFxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiovXG5mdW5jdGlvbiBpbml0KCl7XG5cbiAgICAvLyBSZW1vdmUgUHJlbG9hZGVyXG4gICAgYm9keUVsLmNsYXNzTGlzdC5yZW1vdmUoJ2xvYWRpbmcnKTtcblxuICAgIC8vIFByZWFtYmxlXG4gICAgaWYgKGVsZW1FeGlzdHMocHJlYW1ibGUpKXtcbiAgICAgICBwcmVhbWJsZV90bC5wbGF5KCk7XG4gICAgfTtcbiAgICBcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgXG4gICAgaWYgKFwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcIiBpbiB3aW5kb3cgKSB7XG4gICAgICAgIGZ1bmN0aW9uIG9uSW50ZXJzZWN0aW9uKGVudHJpZXMsIG9ic2VydmVyKSB7XG4gICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCBlbnRyeS5pc0ludGVyc2VjdGluZyAmJiBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA+IDAgKSB7IFxuICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnc2VjdGlvbi1mcm9udHBhZ2UtLWludHJvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludHJvX3RsLnBsYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3NlY3Rpb24tZnJvbnRwYWdlLS1taXNzaW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npb25fdGwucGxheSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnc2VjdGlvbi1mcm9udHBhZ2UtLW9wZXJhdGlvbnMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uc190bC5wbGF5KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdzZWN0aW9uLWZyb250cGFnZS0tbWFpbGluZy1saXN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1haWxpbmdfdGwucGxheSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnc3RhdGlzdGljJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVDYXJkKGVudHJ5LnRhcmdldCk7IFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnY2FyZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlQ2FyZChlbnRyeS50YXJnZXQpOyBcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGVudHJ5LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Zhc3QtZmFjdF9fbnVtYmVyJykpeyBhbmltYXRlRmFzdEZhY3QoZW50cnkudGFyZ2V0KTsgfTtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGVudHJ5LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlnID0geyByb290TWFyZ2luOiAnMTBweCcsIHRocmVzaG9sZDogMC4yNSB9O1xuICAgICAgICBjb25zdCBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihvbkludGVyc2VjdGlvbiwgY29uZmlnKTtcbiAgICAgICAgaWYgKCBzdGF0cyAhPT0gbnVsbCApeyBzdGF0cy5mb3JFYWNoKChzdGF0KSA9PiB7IGlvLm9ic2VydmUoc3RhdCk7IH0pOyB9XG4gICAgICAgIGlmICggZmFjdHMgIT09IG51bGwgKXsgZmFjdHMuZm9yRWFjaCgoZmFjdCkgPT4geyBpby5vYnNlcnZlKGZhY3QpOyB9KTsgfVxuICAgICAgICBpZiAoIGNhcmRzICE9PSBudWxsICl7IGNhcmRzLmZvckVhY2goKGNhcmQpID0+IHsgaW8ub2JzZXJ2ZShjYXJkKTsgfSk7IH1cbiAgICAgICAgaWYgKCBpbnRyb19ibG9jayAhPT0gbnVsbCApeyBpby5vYnNlcnZlKGludHJvX2Jsb2NrKTsgfVxuICAgICAgICBpZiAoIG1pc3Npb25fYmxvY2sgIT09IG51bGwgKXsgaW8ub2JzZXJ2ZShtaXNzaW9uX2Jsb2NrKTsgfVxuICAgICAgICBpZiAoIG9wZXJhdGlvbnNfYmxvY2sgIT09IG51bGwgKXsgaW8ub2JzZXJ2ZShvcGVyYXRpb25zX2Jsb2NrKTsgfVxuICAgICAgICBpZiAoIG1haWxpbmdfYmxvY2sgIT09IG51bGwgKXsgaW8ub2JzZXJ2ZShtYWlsaW5nX2Jsb2NrKTsgfVxuICAgIH1cbiAgICBcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gTmF2aWdhdGlvblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIGNvbnN0IGFuaW1hdGVIYW1idXJnZXIgPSAoKSA9PiB7XG4gICAgICAgIGxldCBpc09wZW4gPSBuYXZCYXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdtb2JpbGUtbmF2aWdhdGlvbi0tb3BlbicpO1xuICAgICAgICBsZXQgbWVudVRvZ2dsZSA9IGFuaW1lLnRpbWVsaW5lKHsgZWFzaW5nOiAnZWFzZU91dEJhY2snIH0pO1xuICAgICAgICBtZW51VG9nZ2xlXG4gICAgICAgICAgICAuYWRkKHtcbiAgICAgICAgICAgICAgICB0YXJnZXRzOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGFtYnVyZ2VyID4gc3BhbjpudGgtY2hpbGQoMSknKSxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVZOiAoaXNPcGVuKSA/IFswLDEwXSA6IFsxMCwwXSxcbiAgICAgICAgICAgICAgICByb3RhdGU6IChpc09wZW4pID8gWzAsNDVdIDogWzQ1LDBdLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKHtcbiAgICAgICAgICAgICAgICB0YXJnZXRzOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGFtYnVyZ2VyID4gc3BhbjpudGgtY2hpbGQoMyknKSxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVZOiAoaXNPcGVuKSA/IFswLC0xMF0gOiBbLTEwLDBdLFxuICAgICAgICAgICAgICAgIHJvdGF0ZTogKGlzT3BlbikgPyBbMCwtNDVdIDogWy00NSwwXSxcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwXG4gICAgICAgICAgICAgIH0sICctPTMwMCcpXG4gICAgICAgICAgICAgIC5hZGQoe1xuICAgICAgICAgICAgICAgIHRhcmdldHM6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5oYW1idXJnZXIgPiBzcGFuOm50aC1jaGlsZCgyKScpLFxuICAgICAgICAgICAgICAgIHNjYWxlWDogKGlzT3BlbikgPyBbMSwwXSA6IFswLDFdLFxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAsXG4gICAgICAgICAgICB9LCAnLT0zMDAnKTtcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IGFuaW1hdGVOYXZpZ2F0aW9uID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXNBbmltYXRpbmcpIHsgcmV0dXJuOyB9O1xuICAgICAgICBpc0FuaW1hdGluZyA9IHRydWU7XG4gICAgICAgIGxldCBpc09wZW4gPSBuYXZCYXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdtb2JpbGUtbmF2aWdhdGlvbi0tb3BlbicpO1xuICAgICAgICAoaXNPcGVuKSA/IG5hdkJhci5jbGFzc0xpc3QucmVtb3ZlKCdtb2JpbGUtbmF2aWdhdGlvbi0tb3BlbicpIDogbmF2QmFyLmNsYXNzTGlzdC5hZGQoJ21vYmlsZS1uYXZpZ2F0aW9uLS1vcGVuJyk7XG4gICAgICAgIChpc09wZW4pID8gYm9keUVsLmNsYXNzTGlzdC5yZW1vdmUoJ25vLXNjcm9sbCcpIDogYm9keUVsLmNsYXNzTGlzdC5hZGQoJ25vLXNjcm9sbCcpO1xuICAgICAgICAoaXNPcGVuKSA/IGhhbWJ1cmdlci5jbGFzc0xpc3QucmVtb3ZlKCdoYW1idXJnZXItLWFjdGl2ZScpIDogaGFtYnVyZ2VyLmNsYXNzTGlzdC5hZGQoJ2hhbWJ1cmdlci0tYWN0aXZlJyk7XG4gICAgICAgIGFuaW1lLnRpbWVsaW5lKHsgXG4gICAgICAgICAgICBiZWdpbjogKCkgPT4geyBhbmltYXRlSGFtYnVyZ2VyKCk7IH0sXG4gICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4gaXNBbmltYXRpbmcgPSBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICAuYWRkKHtcbiAgICAgICAgICAgIHRhcmdldHM6IG5hdkJhcixcbiAgICAgICAgICAgIHRyYW5zbGF0ZVg6ICAoaXNPcGVuKSA/IFsnMCcsICcxMDAlJ10gOiBbJzEwMCUnLCAnMCddLFxuICAgICAgICAgICAgZHVyYXRpb246IDYwMCxcbiAgICAgICAgICAgIGVhc2luZzogJ2Vhc2VPdXRRdWFydCdcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZCh7XG4gICAgICAgICAgICB0YXJnZXRzOiBtYWluTWVudUl0ZW1zLFxuICAgICAgICAgICAgb3BhY2l0eTogIChpc09wZW4pID8gWzEsMF0gOiBbMCwxXSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZVg6ICAoaXNPcGVuKSA/IFswLC01MF0gOiBbLTUwLDBdLFxuICAgICAgICAgICAgZHVyYXRpb246IDEwMDAsXG4gICAgICAgICAgICBlYXNpbmc6ICdlYXNlT3V0UXVhcnQnLFxuICAgICAgICAgICAgZGVsYXk6IChlbCwgaSkgPT4gMTAwICsgNTAgKiBpXG4gICAgICAgIH0sJy09MzAwJyk7XG4gICAgfTtcbiAgICBcbiAgICBmdW5jdGlvbiBEcm9wRG93bk5hdmlnYXRpb24oZWwsIHN1Yk1lbnUpe1xuICAgICAgICBsZXQgaXNPcGVuID0gc3ViTWVudS5jbGFzc0xpc3QuY29udGFpbnMoJ3N1Ym1lbnUtLW9wZW4nKTtcbiAgICAgICAgKGlzT3BlbikgPyBzdWJNZW51LmNsYXNzTGlzdC5yZW1vdmUoJ3N1Ym1lbnUtLW9wZW4nKSA6IHN1Yk1lbnUuY2xhc3NMaXN0LmFkZCgnc3VibWVudS0tb3BlbicpO1xuICAgICAgICBlbC5xdWVyeVNlbGVjdG9yKCdzcGFuJykuaW5uZXJIVE1MICA9ICAoaXNPcGVuKSA/ICcrJyA6ICctJztcbiAgICAgICAgbGV0IG1lbnVIZWlnaHQgPSBzdWJNZW51LnNjcm9sbEhlaWdodDtcbiAgICAgICAgYW5pbWUoe1xuICAgICAgICAgICAgdGFyZ2V0czogc3ViTWVudSxcbiAgICAgICAgICAgIGhlaWdodDogIChpc09wZW4pID8gW21lbnVIZWlnaHQsICcwcHgnXSAgOiBbJzBweCcsIG1lbnVIZWlnaHRdLFxuICAgICAgICAgICAgb3BhY2l0eTogeyB2YWx1ZTogKGlzT3BlbikgPyBbMSwwXSA6IFswLDFdLCBkdXJhdGlvbjogMzAwLCBlYXNpbmc6ICdsaW5lYXInIH0sXG4gICAgICAgICAgICBkdXJhdGlvbjogNjAwLFxuICAgICAgICAgICAgZWFzaW5nOiAnZWFzZUluT3V0UXVhcnQnLFxuICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgc3ViTWVudS5zdHlsZS5wb2ludGVyRXZlbnRzID0gKGlzT3BlbikgPyAnbm9uZScgOiAnYWxsJzsgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFxuICAgIGZ1bmN0aW9uIGlzSW50ZXJuYWxMaW5rKGVsKXtcbiAgICAgICAgbGV0IGVsTGluayA9IGVsLmdldEF0dHJpYnV0ZSgnaHJlZicpLnJlcGxhY2UoJyMnLCAnJyk7XG4gICAgICAgIGxldCBlbExpbmtQb3MgPSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGVsTGluayApLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBsZXQgZWxOZXdQb3MgPSB3aW5kb3cucGFnZVlPZmZzZXQgKyBlbExpbmtQb3MudG9wO1xuICAgICAgICBpZiAoaXNBbmltYXRpbmdTY3JvbGwpIHsgcmV0dXJuOyB9O1xuICAgICAgICBpc0FuaW1hdGluZ1Njcm9sbCA9IHRydWU7XG4gICAgICAgIGFuaW1lKHsgXG4gICAgICAgICAgICB0YXJnZXRzOiBzY3JvbGxFbGVtZW50LCBcbiAgICAgICAgICAgIHNjcm9sbFRvcDogZWxOZXdQb3MgLSA1MCwgXG4gICAgICAgICAgICBkdXJhdGlvbjogNjAwLCBcbiAgICAgICAgICAgIGVhc2luZzogJ2Vhc2VPdXRRdWFydCcsIFxuICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgaXNBbmltYXRpbmdTY3JvbGwgPSBmYWxzZTsgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFxuICAgIGZ1bmN0aW9uIGlzTWVudUxpbmsoKXtcbiAgICAgICAgYW5pbWF0ZU5hdmlnYXRpb24oKTtcbiAgICB9O1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEFkZCArIHRvIGxpbmtzIHdpdGggYSBzdWIgbWVudVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBcbiAgICBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdWItbWVudScpKS5mb3JFYWNoKChtZW51KSA9PiB7XG4gICAgICAgIGxldCB0b2dnbGVMaW5rID0gIG1lbnUucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgbGV0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTsgXG4gICAgICAgIGxldCBuZXdDb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCIrXCIpOyBcbiAgICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChuZXdDb250ZW50KTsgXG4gICAgICAgIHRvZ2dsZUxpbmsuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdiZWZvcmVlbmQnLG5ld0VsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIExpbmtzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiYVwiKSkuZm9yRWFjaCgoZWwsaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCBlbC5nZXRBdHRyaWJ1dGUoJ3JlbCcpID09PSBcImV4dGVybmFsXCIgfHwgZWwuZ2V0QXR0cmlidXRlKCdyZWwnKSA9PT0gJ2Rlc2lnbmVyJyApIHsgXG4gICAgICAgICAgICB2YXIgYXR0ID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKFwidGFyZ2V0XCIpOyBcbiAgICAgICAgICAgIGF0dC52YWx1ZSA9IFwiX2JsYW5rXCI7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGVOb2RlKGF0dCk7XG4gICAgICAgIH07XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXYpID0+IHsgXG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKCBlbC5jbGFzc0xpc3QuY29udGFpbnMoJ3RvZ2dsZS1uYXYnKSApIHsgXG4gICAgICAgICAgICAgICAgaXNNZW51TGluaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoIGVsLmNsYXNzTGlzdC5jb250YWlucygnc2Nyb2xsLXRvJykgKSB7XG4gICAgICAgICAgICAgICAgaXNJbnRlcm5hbExpbmsoZWwpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsZXQgc3ViTWVudSA9ICBlbC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICBpZiAoIHN1Yk1lbnUgIT09IG51bGwgJiYgc3ViTWVudS5jbGFzc0xpc3QuY29udGFpbnMoJ3N1Yi1tZW51JykgKXtcbiAgICAgICAgICAgICAgICBEcm9wRG93bk5hdmlnYXRpb24oZWwsIHN1Yk1lbnUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAoICBlbC5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpID09PSBcIl9ibGFua1wiICkgID8gIHdpbmRvdy5vcGVuKGVsLmdldEF0dHJpYnV0ZSgnaHJlZicpKSA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIGVsLmdldEF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICB9KTsgXG4gICAgIH0pOyBcbiAgICBcbiAgICB9OyAvLyBlbmQgaW5pdFxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNsaWRlclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIGNsYXNzIFNsaWRlIHtcbiAgICAgICAgY29uc3RydWN0b3IoZWwpIHsgdGhpcy5ET00gPSB7IGVsOiBlbCB9OyB9XG4gICAgICAgIHNldEN1cnJlbnQoKSB7IHRoaXMuRE9NLmVsLnN0eWxlLm9wYWNpdHkgPSAxOyB9XG4gICAgICAgIHRvZ2dsZShhY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgYW5pbWUoe1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiB0aGlzLkRPTS5lbCxcbiAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBcImVhc2VJbk91dFF1YXJ0XCIsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiBhY3Rpb24gPT09ICdoaWRlJyA/IFsxLDEuMl0gOiBbMS4yLDFdLFxuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiBhY3Rpb24gPT09ICdoaWRlJyA/IFsxLDBdIDogWzAsMV0sXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiA2MDAsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IHJlc29sdmUoKTsgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgU2xpZGVzaG93IHtcbiAgICAgICAgY29uc3RydWN0b3IoZWwpIHtcbiAgICAgICAgICAgIHRoaXMuRE9NID0geyBlbDogZWwgfTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzID0gW107XG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuRE9NLmVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zbGlkZScpKS5mb3JFYWNoKChzbGlkZUVsKSA9PiB0aGlzLnNsaWRlcy5wdXNoKG5ldyBTbGlkZShzbGlkZUVsKSkpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXNUb3RhbCA9IHRoaXMuc2xpZGVzLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IDA7XG4gICAgICAgICAgICB0aGlzLm5leHRTbGlkZSA9IHRoaXMuc2V0TmV4dFNsaWRlKCk7XG4gICAgICAgICAgICB0aGlzLnNsaWRlc1t0aGlzLmN1cnJlbnRdLnNldEN1cnJlbnQoKSxcbiAgICAgICAgICAgIHNldFRpbWVvdXQodGhpcy5uYXZpZ2F0ZSgpLCAzMDAwKTtcbiAgICAgICAgfVxuICAgICAgICBzZXROZXh0U2xpZGUoKXsgXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50ID4gMCA/IHRoaXMuY3VycmVudCAtIDEgOiB0aGlzLnNsaWRlc1RvdGFsIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBuYXZpZ2F0ZSgpIHtcbiAgICAgICAgICAgIHRoaXMubmV4dFNsaWRlID0gdGhpcy5zZXROZXh0U2xpZGUoKTtcbiAgICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlc1t0aGlzLmN1cnJlbnRdLnRvZ2dsZSgnaGlkZScpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVzW3RoaXMubmV4dFNsaWRlXS50b2dnbGUoJ3Nob3cnKVxuICAgICAgICAgICAgXSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgIGFuaW1lKHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0czogIHRoaXMuRE9NLmVsLnF1ZXJ5U2VsZWN0b3IoJy5zbGlkZXNob3dfX2xvYWRlcicpLFxuICAgICAgICAgICAgICAgICAgICBlYXNpbmc6IFwiZWFzZU91dFF1YXJ0XCIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyAgdGhpcy5ET00uZWwucXVlcnlTZWxlY3RvcignLnNsaWRlc2hvd19fbG9hZGVyJykuc3R5bGUud2lkdGggPSAwOyB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5uZXh0U2xpZGU7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4geyB0aGlzLm5hdmlnYXRlKCk7IH0sIDMwMDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gXG4gICAgfSBcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBTbGlkZXJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBpbWFnZXNMb2FkZWQoIGJvZHlFbCwgeyBiYWNrZ3JvdW5kOiB0cnVlIH0sICgpID0+IHtcbiAgICAgICAgaWYgKGVsZW1FeGlzdHMoaW5saW5lU2xpZGVyKSl7IGNvbnN0IHNsaWRlc2hvdyA9IG5ldyBTbGlkZXNob3coaW5saW5lU2xpZGVyKTsgfVxuICAgICAgICBzZXRUaW1lb3V0KGluaXQsIDMwMCk7XG4gICAgfSk7Il19
