File: D:/HostingSpaces/ReturnIndustries/return-industries.nl/wwwroot/js/site/app.js
(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{0:function(e,t,n){n("pjEF"),n("mf46"),e.exports=n("o6KM")},"8Lci":function(e,t){var n={time:Date.now(),timeout:null,waitThrottle:1e3,waitDebounce:300,lastScrollTopPosition:0,scrollDirectionDown:!0,scrollDirectionUp:!1,init:function(){n.triggerOnInit(),window.addEventListener("scroll",(function(){n.time+n.waitThrottle-Date.now()<0&&(n.triggerThrottle(),n.time=Date.now())})),window.addEventListener("scroll",(function(){n.triggerSmooth()})),window.addEventListener("scroll",(function(){isset(n.timeout)&&clearTimeout(n.timeout),n.timeout=setTimeout(n.triggerDebounce,n.waitDebounce)}))},triggerOnInit:function(){n.triggerElementInViewportAnimation()},triggerThrottle:function(){n.triggerElementInViewportAnimation()},triggerDebounce:function(){},triggerSmooth:function(){n.detectScrollDirection(),n.toggleStickyHeader()},detectIfElementIsPartlyInViewport:function(e){if(isset(e)){var t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth,o=t.top<=n&&t.top+t.height>=0,r=t.left<=i&&t.left+t.width>=0;return o&&r}},detectIfElementIsFullyInViewport:function(e){if(isset(e)){var t=e.getBoundingClientRect();return t.top>=0&&t.bottom<=window.innerHeight}},detectScrollDirection:function(){var e=window.pageYOffset||document.documentElement.scrollTop;e>=n.lastScrollTopPosition?(n.scrollDirectionDown=!0,n.scrollDirectionUp=!1):(n.scrollDirectionDown=!1,n.scrollDirectionUp=!0),n.lastScrollTopPosition=e},triggerElementInViewportAnimation:function(){for(var e=document.querySelectorAll(".element-in-viewport"),t=e.length,i=0;i<t;i++){var o=e[i];n.detectIfElementIsPartlyInViewport(o)&&o.classList.remove("element-in-viewport")}},toggleStickyHeader:function(){var e=document.querySelector(".js-sticky-header"),t=document.querySelectorAll(".js-subnav"),i=!1;e.hidden=!1;for(var o=0;o<t.length;o++)if("visible"==window.getComputedStyle(t[o],null).visibility)return!0;isset(e)&&!i&&(n.scrollDirectionDown||n.lastScrollTopPosition<110?document.body.classList.remove("is-sticky-header-visible"):document.body.classList.add("is-sticky-header-visible"))}};n.init()},"8oxB":function(e,t){var n,i,o=e.exports={};function r(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(n===setTimeout)return setTimeout(e,0);if((n===r||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:r}catch(e){n=r}try{i="function"==typeof clearTimeout?clearTimeout:a}catch(e){i=a}}();var l,c=[],u=!1,d=-1;function f(){u&&l&&(u=!1,l.length?c=l.concat(c):d=-1,c.length&&h())}function h(){if(!u){var e=s(f);u=!0;for(var t=c.length;t;){for(l=c,c=[];++d<t;)l&&l[d].run();d=-1,t=c.length}l=null,u=!1,function(e){if(i===clearTimeout)return clearTimeout(e);if((i===a||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(e);try{i(e)}catch(t){try{return i.call(null,e)}catch(t){return i.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function g(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];c.push(new p(e,t)),1!==c.length||u||s(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=g,o.addListener=g,o.once=g,o.off=g,o.removeListener=g,o.removeAllListeners=g,o.emit=g,o.prependListener=g,o.prependOnceListener=g,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},Jxke:function(e,t,n){var i=n("x0D+"),o={init:function(){var e=document.querySelectorAll(".js-overlay-menu-trigger"),t=e.length;if(isset(e)&&0!==t)for(var n=0;n<t;n++){var i=e[n];o.initOverlayMenu(i)}},initOverlayMenu:function(e){e.addEventListener("click",o.toggleOverlayMenu,!1)},toggleOverlayMenu:function(e){var t=document.querySelector(".js-overlay-menu");if(t){if(i.enableBodyScroll(t),document.body.classList.contains("is-overlay-menu-active"))return t.querySelectorAll('[tabindex="0"]').forEach((function(e){e.tabIndex=-1})),void document.body.classList.remove("is-overlay-menu-active");i.disableBodyScroll(t),t.querySelectorAll('[tabindex="-1"]').forEach((function(e){e.tabIndex=0})),document.body.classList.toggle("is-overlay-menu-active"),t.hidden=!1}}};o.init()},K6O8:function(e,t){var n={youtubeClass:".js-youtube-player",players:[],init:function(){for(var e=document.querySelectorAll(n.youtubeClass),t=e.length,i=0;i<t;i++){var o=e[i];if(null!==o.getAttribute("id")){var r={id:o.getAttribute("id"),link:o.getAttribute("data-youtube-link"),autoPlay:parseInt(o.getAttribute("data-auto-play"))};n.players.push(r)}else console.log("Element not include because there isn't a id on the player"),console.log(o)}t>=1&&n.initYoutube()},initYoutube:function(){"undefined"==typeof YT||void 0===YT.Player?(window.onYouTubePlayerAPIReady=function(){n.loadPlayers()},getScript("https://www.youtube.com/iframe_api")):n.loadPlayers()},loadPlayers:function(){for(var e=[],t=n.players.length,i=0;i<t;i++){var o=n.players[i];o.player=new YT.Player(o.id,{height:200,width:200,videoId:o.link,host:"https://www.youtube-nocookie.com",playerVars:{modestbranding:0,rel:0,disablekb:1,autoplay:o.autoPlay},events:{onStateChange:n.onStateChange}}),e[o.id]=o}n.players=e},onReady:function(e){var t=e.target.getIframe().getAttribute("id");n.players[t].player},onStateChange:function(e){var t=e.target.getIframe().getAttribute("id"),i=n.players[t].player;e.data;e.data===YT.PlayerState.ENDED&&i.playVideo()}};n.init()},NzwN:function(e,t){var n={offset:60,duration:1400,body:null,start:0,change:0,currentTime:0,allowAnimation:!1,scrollToAnimation:null,easing:"easeInOutQuad",init:function(){for(var e=document.querySelectorAll(".js-scroll-to-target"),t=e.length,i=0;i<t;i++){e[i].addEventListener("click",(function(e){n.prepareScrollTo(this.getAttribute("href")),e.preventDefault()}))}},prepareScrollTo:function(e){e=e.substr(e.indexOf("#")+1);var t=document.getElementById(e).getBoundingClientRect();n.body=document.documentElement,n.start=Math.max(n.body.scrollTop,document.body.scrollTop,window.pageYOffset),n.change=t.top+n.start-n.start-n.offset,n.startTime="now"in window.performance?performance.now():(new Date).getTime(),n.allowAnimation=!0,scrollToAnimation=requestAnimationFrame(n.animateScroll),window.addEventListener("mousedown",n.abortScrollAnimation),window.addEventListener("wheel",n.abortScrollAnimation),window.addEventListener("DOMMouseScroll",n.abortScrollAnimation),window.addEventListener("mousewheel",n.abortScrollAnimation),window.addEventListener("keyup",n.abortScrollAnimation),window.addEventListener("touchmove",n.abortScrollAnimation)},animateScroll:function(e){var t=Math.min(1,(e-n.startTime)/n.duration);t<0&&(t=0),t=EasingFunctions[n.easing](t);var i=n.start+n.change*t;n.body.scrollTop=i,0===n.body.scrollTop&&(document.body.scrollTop=i),t<1&&n.allowAnimation&&(scrollToAnimation=requestAnimationFrame(n.animateScroll))},abortScrollAnimation:function(e){n.allowAnimation=!1,cancelAnimationFrame(n.scrollToAnimation)}};n.init()},QZD3:function(e,t,n){(function(i,o){var r,a,s;function l(e){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}s=function(){"use strict";function e(e){var t=this.constructor;return this.then((function(n){return t.resolve(e()).then((function(){return n}))}),(function(n){return t.resolve(e()).then((function(){return t.reject(n)}))}))}var t=setTimeout;function n(){}function r(e){if(!(this instanceof r))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(e,this)}function a(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,r._immediateFn((function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null!==n){var i;try{i=n(e._value)}catch(e){return void c(t.promise,e)}s(t.promise,i)}else(1===e._state?s:c)(t.promise,e._value)}))):e._deferreds.push(t)}function s(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"===l(t)||"function"==typeof t)){var n=t.then;if(t instanceof r)return e._state=3,e._value=t,void u(e);if("function"==typeof n)return void f((i=n,o=t,function(){i.apply(o,arguments)}),e)}e._state=1,e._value=t,u(e)}catch(t){c(e,t)}var i,o}function c(e,t){e._state=2,e._value=t,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&r._immediateFn((function(){e._handled||r._unhandledRejectionFn(e._value)}));for(var t=0,n=e._deferreds.length;t<n;t++)a(e,e._deferreds[t]);e._deferreds=null}function d(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function f(e,t){var n=!1;try{e((function(e){n||(n=!0,s(t,e))}),(function(e){n||(n=!0,c(t,e))}))}catch(e){if(n)return;n=!0,c(t,e)}}r.prototype.catch=function(e){return this.then(null,e)},r.prototype.then=function(e,t){var i=new this.constructor(n);return a(this,new d(e,t,i)),i},r.prototype.finally=e,r.all=function(e){return new r((function(t,n){if(!e||void 0===e.length)throw new TypeError("Promise.all accepts an array");var i=Array.prototype.slice.call(e);if(0===i.length)return t([]);var o=i.length;function r(e,a){try{if(a&&("object"===l(a)||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,(function(t){r(e,t)}),n)}i[e]=a,0==--o&&t(i)}catch(e){n(e)}}for(var a=0;a<i.length;a++)r(a,i[a])}))},r.resolve=function(e){return e&&"object"===l(e)&&e.constructor===r?e:new r((function(t){t(e)}))},r.reject=function(e){return new r((function(t,n){n(e)}))},r.race=function(e){return new r((function(t,n){for(var i=0,o=e.length;i<o;i++)e[i].then(t,n)}))},r._immediateFn="function"==typeof i&&function(e){i(e)}||function(e){t(e,0)},r._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var h=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==o)return o;throw new Error("unable to locate global object")}();"Promise"in h?h.Promise.prototype.finally||(h.Promise.prototype.finally=e):h.Promise=r},"object"===l(t)&&void 0!==e?s():void 0===(a="function"==typeof(r=s)?r.call(t,n,t,e):r)||(e.exports=a)}).call(this,n("URgk").setImmediate,n("yLpj"))},Qr8U:function(e,t){Number.isInteger=Number.isInteger||function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}},T9bL:function(e,t){for(var n=[],i=document.querySelectorAll(".js-slider"),o=i.length,r=0;r<o;r++){var a=i[r].getAttribute("id");if(null!==a){var s=new l({sliderId:a,slideQuery:"#"+a+" .js-slider-slide",navigationButtons:"#"+a+" .js-slider-button",dots:"#"+a+" .js-slider-indicator"});n.push(new c(s.prepareParameters()).init())}else console.log("An image slider has no id...")}function l(e){var t=this;return this.sliderId="",this.definedPreviousNext=!0,this.autoSlider=!1,this.sliderInterval=4e3,this.navigationButtons="",this.dots="",this.slideQuery="",this.setSliderId=function(e){return this.sliderId=e,this},this.setDefinedPreviousNext=function(e){return this.definedPreviousNext=e,this},this.setAutoSlider=function(e){return this.autoSlider=e,this},this.setSliderInterval=function(e){return this.sliderInterval=e,this},this.setSlideQuery=function(e){return this.slideQuery=e,this},this.setNavigationButtons=function(e){return this.navigationButtons=e,this},this.setDots=function(e){return this.dots=e,this},this.getSliderId=function(){return this.sliderId},this.getDefinedPreviousNext=function(){return this.definedPreviousNext},this.getAutoSlider=function(){return this.autoSlider},this.getSliderInterval=function(){return this.sliderInterval},this.getSlideQuery=function(){return this.slideQuery},this.getNavigationButtons=function(){return this.navigationButtons},this.getDots=function(){return this.dots},this.prepareParameters=function(){return{sliderId:t.getSliderId(),definedPreviousNext:t.getDefinedPreviousNext(),autoSlider:t.getAutoSlider(),sliderInterval:t.getSliderInterval(),navigationButtons:t.getNavigationButtons(),dots:t.getDots(),slideQuery:t.getSlideQuery()}},this.fill=function(){for(var n=Object.keys(e),i=n.length,o=0;o<i;o++){var r=n[o];t[r]=e[r]}},this.fill(),{sliderId:t.setSliderId,definedPreviousNext:t.setDefinedPreviousNext,autoSlider:t.setAutoSlider,sliderInterval:t.setSliderInterval,navigationButtons:t.setNavigationButtons,dots:t.setDots,slideQuery:t.setSlideQuery,prepareParameters:t.prepareParameters}}function c(e){var t=this;this.sliderObject="",this.activeSlideId=0,this.previousSlideId=0,this.nextSlideId=0,this.availableSlides=1,this.slides=[],this.autoSliderInterval=null,this.settings={},this.init=function(){this.settings=e,this.sliderObject=document.getElementById(this.settings.sliderId),this.slides=document.querySelectorAll(this.settings.slideQuery),this.availableSlides=this.slides.length,this.activeSlideId=0,t.settings.definedPreviousNext&&this.setPreviousAndNextSlide(),this.setSlide();var n=new Hammer(this.sliderObject);if(n.on("swipeleft",(function(){t.resetAutoSlider(),t.nextSlide(),t.setSlide()})),n.on("swiperight",(function(){t.resetAutoSlider(),t.previousSlide(),t.setSlide()})),""!==this.settings.navigationButtons)for(var i=document.querySelectorAll(this.settings.navigationButtons),o=i.length,r=0;r<o;r++){i[r].addEventListener("click",(function(){t.clickNavigationButton(this)}))}if(""!==this.settings.dots)for(var a=document.querySelectorAll(this.settings.dots),s=a.length,l=0;l<s;l++){a[l].addEventListener("click",(function(){t.clickDot(this)}))}t.autoSlider()},this.autoSlider=function(){null!==this.autoSliderInterval&&clearInterval(this.autoSliderInterval),this.settings.autoSlider&&Number.isInteger(this.settings.sliderInterval)&&(this.autoSliderInterval=setInterval((function(){t.nextSlide(),t.setSlide()}),this.settings.sliderInterval))},this.resetAutoSlider=t.autoSlider,this.nextSlide=function(){this.activeSlideId++,this.activeSlideId>=this.availableSlides&&(this.activeSlideId=0),t.settings.definedPreviousNext&&this.setPreviousAndNextSlide()},this.previousSlide=function(){this.activeSlideId--,this.activeSlideId<0&&(this.activeSlideId=this.availableSlides-1),t.settings.definedPreviousNext&&this.setPreviousAndNextSlide()},this.setPreviousAndNextSlide=function(){this.nextSlideId=this.activeSlideId+1,this.nextSlideId>=this.availableSlides&&(this.nextSlideId=0),this.previousSlideId=this.activeSlideId-1,this.previousSlideId<0&&(this.previousSlideId=this.availableSlides-1)},this.setSlide=function(){for(var e=t.slides.length,n=0;n<e;n++){var i=t.slides[n];i.style.pointerEvents="none";var o=parseInt(i.getAttribute("data-order"));o!==t.activeSlideId?i.classList.remove("is-active"):i.classList.add("is-active"),t.settings.definedPreviousNext&&(o!==t.previousSlideId?i.classList.remove("previous"):i.classList.add("previous"),o!==t.nextSlideId?i.classList.remove("next"):i.classList.add("next"))}""!==t.settings.dots&&t.setActiveDot()},this.clickNavigationButton=function(e){t.activeSlideId=parseInt(e.getAttribute("data-order")),t.settings.definedPreviousNext&&t.setPreviousAndNextSlide(),t.setSlide();var n=document.querySelector(t.settings.navigationButtons+".next"),i=document.querySelector(t.settings.navigationButtons+".previous");n.setAttribute("data-order",t.nextSlideId),i.setAttribute("data-order",t.previousSlideId),t.resetAutoSlider()},this.clickDot=function(e){t.activeSlideId=parseInt(e.getAttribute("data-order")),t.setSlide(),t.resetAutoSlider()},this.setActiveDot=function(){for(var e=document.querySelectorAll(this.settings.dots),n=e.length,i=0;i<n;i++){var o=e[i];dotOrder=parseInt(o.getAttribute("data-order")),dotOrder!==t.activeSlideId?(o.classList.remove("is-active"),o.tabIndex=0):(o.classList.add("is-active"),o.tabIndex=-1)}}}},URgk:function(e,t,n){(function(e){var i=void 0!==e&&e||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function r(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new r(o.call(setTimeout,i,arguments),clearTimeout)},t.setInterval=function(){return new r(o.call(setInterval,i,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},r.prototype.unref=r.prototype.ref=function(){},r.prototype.close=function(){this._clearFn.call(i,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},n("YBdB"),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n("yLpj"))},YBdB:function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var i,o,r,a,s,l=1,c={},u=!1,d=e.document,f=Object.getPrototypeOf&&Object.getPrototypeOf(e);f=f&&f.setTimeout?f:e,"[object process]"==={}.toString.call(e.process)?i=function(e){t.nextTick((function(){p(e)}))}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((r=new MessageChannel).port1.onmessage=function(e){p(e.data)},i=function(e){r.port2.postMessage(e)}):d&&"onreadystatechange"in d.createElement("script")?(o=d.documentElement,i=function(e){var t=d.createElement("script");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):i=function(e){setTimeout(p,0,e)}:(a="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(a)&&p(+t.data.slice(a.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),i=function(t){e.postMessage(a+t,"*")}),f.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var o={callback:e,args:t};return c[l]=o,i(l),l++},f.clearImmediate=h}function h(e){delete c[e]}function p(e){if(u)setTimeout(p,0,e);else{var t=c[e];if(t){u=!0;try{!function(e){var t=e.callback,i=e.args;switch(i.length){case 0:t();break;case 1:t(i[0]);break;case 2:t(i[0],i[1]);break;case 3:t(i[0],i[1],i[2]);break;default:t.apply(n,i)}}(t)}finally{h(e),u=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,n("yLpj"),n("8oxB"))},YuTi:function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},kdf5:function(e,t){var n={map:"",key:"AIzaSyBpep09vuxUqIIo3Z4fY8bh_s4E4qNr1xw",location:{lat:51.255972,lng:5.592083},styling:"",init:function(){n.map=document.querySelector(".js-google-map"),isset(n.map)&&(n.map.hasAttribute("data-google-lat")&&(n.location.lat=parseFloat(n.map.getAttribute("data-google-lat"))),n.map.hasAttribute("data-google-lng")&&(n.location.lng=parseFloat(n.map.getAttribute("data-google-lng"))),n.setCustomStyling(),"undefined"==typeof google||void 0===google.maps?getScript("https://maps.googleapis.com/maps/api/js?key="+n.key,n.drawMap):n.drawMap())},drawMap:function(){var e=new google.maps.Map(n.map,{zoom:14,center:n.location,disableDefaultUI:!0,styles:n.styling}),t='<div><p>Plan een route op <a target="_blank" href="https://www.google.com/maps/dir/?api=1&destination='+n.location.lat+","+n.location.lng+'" class="link">google maps</a> </p></div>',i=new google.maps.InfoWindow({content:t}),o=new google.maps.Marker({position:n.location,map:e});o.addListener("click",(function(){i.open(e,o)}))},setCustomStyling:function(){n.styling=[{featureType:"water",elementType:"geometry",stylers:[{color:"#e9e9e9"},{lightness:17}]},{featureType:"landscape",elementType:"geometry",stylers:[{color:"#f5f5f5"},{lightness:20}]},{featureType:"road.highway",elementType:"geometry.fill",stylers:[{color:"#ffffff"},{lightness:17}]},{featureType:"road.highway",elementType:"geometry.stroke",stylers:[{color:"#ffffff"},{lightness:29},{weight:.2}]},{featureType:"road.arterial",elementType:"geometry",stylers:[{color:"#ffffff"},{lightness:18}]},{featureType:"road.local",elementType:"geometry",stylers:[{color:"#ffffff"},{lightness:16}]},{featureType:"poi",elementType:"geometry",stylers:[{color:"#f5f5f5"},{lightness:21}]},{featureType:"poi.park",elementType:"geometry",stylers:[{color:"#dedede"},{lightness:21}]},{elementType:"labels.text.stroke",stylers:[{visibility:"on"},{color:"#ffffff"},{lightness:16}]},{elementType:"labels.text.fill",stylers:[{saturation:36},{color:"#333333"},{lightness:40}]},{elementType:"labels.icon",stylers:[{visibility:"off"}]},{featureType:"transit",elementType:"geometry",stylers:[{color:"#f2f2f2"},{lightness:19}]},{featureType:"administrative",elementType:"geometry.fill",stylers:[{color:"#fefefe"},{lightness:20}]},{featureType:"administrative",elementType:"geometry.stroke",stylers:[{color:"#fefefe"},{lightness:17},{weight:1.2}]}]}};n.init()},mBdS:function(e,t){},mf46:function(e,t){},o5AR:function(e,t){var n={bannedVisitor:[],enter:function(){var e=document.querySelectorAll(".js-chocolate-factory");if(isset(e))for(var t=e.length,i=0;i<t;i++){var o=e[i];n._flashTicket(o)}},_flashTicket:function(e){var t=e.querySelector(".js-golden-ticket");isset(t)?t.addEventListener("click",(function(){n.enjoyTheTour(e)})):console.log("To bad, no golden tickets has been found.")},enjoyTheTour:function(e){var t=e.querySelectorAll("input, textarea");if(isset(t)){for(var i={},o=0,r=t.length,a=0;a<r;a++){var s=t[a],l=s.getAttribute("name");n._isVisitorBanned(l)||(i[l]=n._getArrangement(s),o++)}if(0===o)return;n._finishTour(i,e)}else console.log("To bad, no members to visit this factory")},_isVisitorBanned:function(e){return-1!==n.bannedVisitor.indexOf(e)},_getArrangement:function(e){e.nodeName;return e.value},_finishTour:function(e,t){e=n._addWillieWonka(e);try{Ajax.post("/contact/process",e,(function(e){var i=JSON.parse(e.response);switch(e.status){case 200:return n._thanksForVisiting(i.redirectUrl);case 422:return n._giveFeedbackToMembers(i.errors,t)}return n._unknownGapInFactory(t)}))}catch(e){return n._unknownGapInFactory(t)}},_addWillieWonka:function(e){return e._willie="wonka",e},_giveFeedbackToMembers:function(e,t){var i=t.querySelector(".js-error-area");isset(i)&&(i.innerHTML=""),n._clearPreviousMarkedJackets(t),Object.keys(e).forEach((function(o){var r=null,a=null;if("_honey"!==o&&"_secretCode"!==o){var s=t.querySelector("#"+o);r=n._grabVisitorJacket(s),isset(r)&&(a=r.querySelector(".js-form-group-error")),isset(a)&&(a.innerHTML="")}for(var l=e[o],c=l.length,u=0;u<c;u++){var d=l[u];if(console.log(o,d),"_honey"!==o&&"_secretCode"!==o&&(isset(r)&&r.classList.add("has-error"),isset(a)&&d.length>0)){var f=a.innerHTML;f+="<span>"+capitalizeFirstLetter(d)+"</span>",a.innerHTML=f}if(isset(i)&&d.length>0){var h=i.innerHTML;h+="<li>"+capitalizeFirstLetter(d)+"</li>",i.innerHTML=h}}}))},_clearPreviousMarkedJackets:function(e){for(var t=e.querySelectorAll(".has-error"),n=t.length,i=0;i<n;i++)t[i].classList.remove("has-error")},_grabVisitorJacket:function(e){if(!isset(e))return null;currentLayer=e,safetyBreak=0;do{if(safetyBreak++,currentLayer=currentLayer.parentNode,currentLayer.classList.contains("js-form-group"))return currentLayer}while("BODY"!==currentLayer.tagName&&safetyBreak<=10);return null},_thanksForVisiting:function(e){window.location=e},_unknownGapInFactory:function(e){console.log(e),console.log("ChocolateFactory: Unkown Error")}};n.enter()},o6KM:function(e,t){},pjEF:function(e,t,n){n("yLV6"),n("eCb9"),n("mBdS"),n("Qr8U"),n("QZD3"),n("wLoJ"),n("yFlJ"),n("q2ye"),n("8Lci"),n("o5AR"),n("yQ37"),n("kdf5"),n("Jxke"),n("T9bL"),n("NzwN"),n("K6O8")},q2ye:function(e,t){var n={userAgent:"",browserInfo:"",init:function(){n.userAgent=window.navigator.userAgent,n.browserInfo=n.getBrowserInfo(),n.handleIE(),n.handleSafari()},handleIE:function(){var e=n.userAgent.indexOf("MSIE "),t=e>0,i=!!navigator.userAgent.match(/Trident.*rv\:11\./);if(t||i){var o="11";t&&(o=parseInt(n.userAgent.substring(e+5,n.userAgent.indexOf(".",e)))),document.body.classList.add("ie"),document.body.classList.add("v"+o)}},handleSafari:function(){"Safari"===n.browserInfo.name&&n.browserInfo.version<=10&&document.getElementsByTagName("html")[0].classList.add("ie")},getBrowserInfo:function(){var e,t=navigator.userAgent,n=t.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];return/trident/i.test(n[1])?{name:"IE ",version:(e=/\brv[ :]+(\d+)/g.exec(t)||[])[1]||""}:"Chrome"===n[1]&&null!=(e=t.match(/\bOPR\/(\d+)/))?{name:"Opera",version:e[1]}:(n=n[2]?[n[1],n[2]]:[navigator.appName,navigator.appVersion,"-?"],null!=(e=t.match(/version\/(\d+)/i))&&n.splice(1,1,e[1]),{name:n[0],version:n[1]})}};n.init()},wLoJ:function(e,t,n){(function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(e,i){"use strict";"object"==n(t)&&"object"==n(t.exports)?t.exports=i(e):i(e)}("undefined"!=typeof window?window:e,(function(e){"use strict";var t=Object.defineProperty,i=Object.defineProperties,o=0,r=[],a=Array.prototype.slice,s="object"==n(e.ES6)?e.ES6:e.ES6={},l=Array.isArray,c=Object.prototype.toString,u=Array.prototype.push,d=function(){},f=function(e){return e},h=function(e){return"function"==typeof e},p=function(){},g=function(e,t){this._array=e,this._flag=t,this._nextIndex=0},y=function(e,t){this._string=e,this._flag=t,this._nextIndex=0},m=function(e){return null!==e&&("object"==n(e)||"function"==typeof e)},v=function(e,t){if("number"==typeof e.length&&e.length>=0&&"number"==typeof t.length&&t.length>=0){var n=Math.floor(e.length),i=Math.floor(t.length),o=0;for(e.length=n+i;o<i;++o)t.hasOwnProperty(o)&&(e[n+o]=t[o])}},w=function(e,t){if("function"!=typeof e||"function"!=typeof t)throw new TypeError("Child and Parent must be function type");e.prototype=Object.create(t.prototype),e.prototype.constructor=e},b=function e(t){if(t=void 0===t?"":String(t),this instanceof e)throw new TypeError("Symbol is not a constructor");return function(e,t){return i(e,{_description:{value:t},_isSymbol:{value:!0},_id:{value:o++}}),e}(Object.create(e.prototype),t)};i(b,{for:{value:function(e){e=String(e);for(var t,n=r.length,i=0;i<n;++i)if((t=r[i]).key===e)return t.symbol;return t={key:e,symbol:b(e)},r.push(t),t.symbol},writable:!0,configurable:!0},keyFor:{value:function(e){if(!s.isSymbol(e))throw new TypeError(String(e)+" is not a symbol");for(var t,n=r.length,i=0;i<n;++i)if((t=r[i]).symbol===e)return t.key},writable:!0,configurable:!0},hasInstance:{value:b("Symbol.hasInstance")},isConcatSpreadable:{value:b("Symbol.isConcatSpreadable")},iterator:{value:b("Symbol.iterator")},toStringTag:{value:b("Symbol.toStringTag")}}),b.prototype.toString=function(){return"@@_____"+this._id+"_____"},b.prototype.valueOf=function(){return this},t(p.prototype,b.iterator.toString(),{value:function(){return this},writable:!0,configurable:!0}),w(g,p),w(y,p),t(g.prototype,b.toStringTag.toString(),{value:"Array Iterator",configurable:!0}),t(y.prototype,b.toStringTag.toString(),{value:"String Iterator",configurable:!0}),g.prototype.next=function(){if(!(this instanceof g))throw new TypeError("Method Array Iterator.prototype.next called on incompatible receiver "+String(this));var e;return-1===this._nextIndex?{done:!0,value:void 0}:"number"==typeof this._array.length&&this._array.length>=0&&this._nextIndex<Math.floor(this._array.length)?(1===this._flag?e=[this._nextIndex,this._array[this._nextIndex]]:2===this._flag?e=this._array[this._nextIndex]:3===this._flag&&(e=this._nextIndex),this._nextIndex++,{done:!1,value:e}):(this._nextIndex=-1,{done:!0,value:void 0})},y.prototype.next=function(){if(!(this instanceof y))throw new TypeError("Method String Iterator.prototype.next called on incompatible receiver "+String(this));var e,t=new String(this._string);return-1===this._nextIndex?{done:!0,value:void 0}:this._nextIndex<t.length?(e=t[this._nextIndex],this._nextIndex++,{done:!1,value:e}):(this._nextIndex=-1,{done:!0,value:void 0})};var S=function(e,t){this._target=e,this._values=[],this._thisArg=t};return S.prototype.spread=function(){var e=this;return a.call(arguments).forEach((function(t){s.forOf(t,(function(t){e._values.push(t)}))})),e},S.prototype.add=function(){var e=this;return a.call(arguments).forEach((function(t){e._values.push(t)})),e},S.prototype.call=function(e){if("function"!=typeof this._target)throw new TypeError("Target is not a function");return e=arguments.length<=0?this._thisArg:e,this._target.apply(e,this._values)},S.prototype.new=function(){if("function"!=typeof this._target)throw new TypeError("Target is not a constructor");var e,t;return e=Object.create(this._target.prototype),t=this._target.apply(e,this._values),m(t)?t:e},S.prototype.array=function(){if(!l(this._target))throw new TypeError("Target is not a array");return u.apply(this._target,this._values),this._target},i(s,{isSymbol:{value:function(e){return e instanceof b&&function(e){return!0===e._isSymbol&&"number"==typeof e._id&&"string"==typeof e._description}(e)},writable:!0,configurable:!0},instanceOf:{value:function(e,t){if(!m(t))throw new TypeError("Right-hand side of 'instanceof' is not an object");var i=t[b.hasInstance];if(void 0===i)return e instanceof t;if("function"!=typeof i)throw new TypeError(n(i)+" is not a function");return i.call(t,e)},writable:!0,configurable:!0},forOf:{value:function(e,t,n){if(t="function"!=typeof t?d:t,"function"!=typeof e[b.iterator])throw new TypeError("Iterable[Symbol.iterator] is not a function");var i,o=e[b.iterator]();if("function"!=typeof o.next)throw new TypeError(".iterator.next is not a function");for(;;){if(i=o.next(),!m(i))throw new TypeError("Iterator result "+i+" is not an object");if(i.done)break;t.call(n,i.value)}},writable:!0,configurable:!0},spreadOperator:{value:function(e,t){if("function"!=typeof e&&!l(e))throw new TypeError("Spread operator only supports on array and function objects at this moment");return new S(e,t)},writable:!0,configurable:!0}}),t(e,"Symbol",{value:b,writable:!0,configurable:!0}),t(Function.prototype,b.hasInstance.toString(),{value:function(e){return"function"==typeof this&&e instanceof this}}),t(Array.prototype,"concat",{value:function(){if(null==this)throw new TypeError("Array.prototype.concat called on null or undefined");var e=Object(this),t=a.call(arguments),n=[];return t.unshift(e),t.forEach((function(e){m(e)?void 0!==e[b.isConcatSpreadable]?e[b.isConcatSpreadable]?v(n,e):n.push(e):l(e)?v(n,e):n.push(e):n.push(e)})),n},writable:!0,configurable:!0}),t(Object.prototype,"toString",{value:function(){return null==this?c.call(this):"string"==typeof this[b.toStringTag]?"[object "+this[b.toStringTag]+"]":c.call(this)},writable:!0,configurable:!0}),t(Array.prototype,b.iterator.toString(),{value:function(){if(null==this)throw new TypeError("Cannot convert undefined or null to object");var e=Object(this);return new g(e,2)},writable:!0,configurable:!0}),t(Array,"from",{value:function(e,t,n){var i,o,r,a=0;if(i=h(this)?this:Array,null==e)throw new TypeError("Cannot convert undefined or null to object");if(e=Object(e),void 0===t)t=f;else if(!h(t))throw new TypeError(t+" is not a function");if(void 0===e[b.iterator]){if(!("number"==typeof e.length&&e.length>=0))return(r=new i(0)).length=0,r;for(o=Math.floor(e.length),(r=new i(o)).length=o;a<o;++a)r[a]=t.call(n,e[a])}else(r=new i).length=0,s.forOf(e,(function(e){r.length++,r[r.length-1]=t.call(n,e)}));return r},writable:!0,configurable:!0}),t(Array.prototype,"entries",{value:function(){if(null==this)throw new TypeError("Cannot convert undefined or null to object");var e=Object(this);return new g(e,1)},writable:!0,configurable:!0}),t(Array.prototype,"keys",{value:function(){if(null==this)throw new TypeError("Cannot convert undefined or null to object");var e=Object(this);return new g(e,3)},writable:!0,configurable:!0}),t(String.prototype,b.iterator.toString(),{value:function(){if(null==this)throw new TypeError("String.prototype[Symbol.iterator] called on null or undefined");return new y(String(this),0)},writable:!0,configurable:!0}),s}))}).call(this,n("yLpj"),n("YuTi")(e))},yFlJ:function(e,t){window.isset=function(e){return null!=e},window.EasingFunctions={linear:function(e){return e},easeInQuad:function(e){return e*e},easeOutQuad:function(e){return e*(2-e)},easeInOutQuad:function(e){return e<.5?2*e*e:(4-2*e)*e-1},easeInCubic:function(e){return e*e*e},easeOutCubic:function(e){return--e*e*e+1},easeInOutCubic:function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1},easeInQuart:function(e){return e*e*e*e},easeOutQuart:function(e){return 1- --e*e*e*e},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},easeInQuint:function(e){return e*e*e*e*e},easeOutQuint:function(e){return 1+--e*e*e*e*e},easeInOutQuint:function(e){return e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e}},window.getScript=function(e,t){var n=document.createElement("script");n.async=1;var i=document.getElementsByTagName("script"),o=i[i.length-1];n.onload=n.onreadystatechange=function(e,i){(i||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n=void 0,i||t&&t())},n.src=e,o.parentNode.insertBefore(n,o)},window.debounce=function(e,t,n){var i;return function(){var o=this,r=arguments,a=function(){i=null,n||e.apply(o,r)},s=n&&!i;clearTimeout(i),i=setTimeout(a,t),s&&e.apply(o,r)}},window.Cookie={set:function(e,t,n){var i,o,r,a,s;n?((r=new Date).setTime(r.getTime()+24*n*60*60*1e3),a="; expires="+r.toGMTString()):a="",1===(s=location.host).split(".").length?document.cookie=e+"="+t+a+"; path=/":((o=s.split(".")).shift(),i="."+o.join("."),document.cookie=e+"="+t+a+"; path=/; domain="+i,null!=Cookie.get(e)&&Cookie.get(e)==t||(i="."+s,document.cookie=e+"="+t+a+"; path=/; domain="+i))},get:function(e){for(var t=e+"=",n=document.cookie.split(";"),i=0;i<n.length;i++){for(var o=n[i];" "===o.charAt(0);)o=o.substring(1,o.length);if(0===o.indexOf(t))return o.substring(t.length,o.length)}return null},erase:function(e){Cookie.set(e,"",-1)}},window.number_format=function(e,t,n,i){e=(e+"").replace(/[^0-9+\-Ee.]/g,"");var o=isFinite(+e)?+e:0,r=isFinite(+t)?Math.abs(t):0,a=void 0===i?",":i,s=void 0===n?".":n,l="";return(l=(r?function(e,t){var n=Math.pow(10,t);return""+Math.round(e*n)/n}(o,r):""+Math.round(o)).split("."))[0].length>3&&(l[0]=l[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,a)),(l[1]||"").length<r&&(l[1]=l[1]||"",l[1]+=new Array(r-l[1].length+1).join("0")),l.join(s)},Element.prototype.closest||(Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest=function(e){var t=this;if(!document.documentElement.contains(this))return null;do{if(t.matches(e))return t;t=t.parentElement}while(null!==t);return null}),window.Ajax={get:function(e,t){var n=new XMLHttpRequest,i=document.querySelector('meta[name="csrf-token"]').content;n.open("get",e,!0),n.setRequestHeader("Content-Type","application/json"),n.setRequestHeader("X-CSRF-TOKEN",i),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.onreadystatechange=function(){4===n.readyState&&t(n)},n.send()},post:function(e,t,n){var i=new XMLHttpRequest,o=document.querySelector('meta[name="csrf-token"]').content;i.open("post",e,!0),i.setRequestHeader("Content-Type","application/json"),i.setRequestHeader("X-CSRF-TOKEN",o),i.setRequestHeader("X-Requested-With","XMLHttpRequest"),i.onreadystatechange=function(){4===i.readyState&&n(i)},i.send(JSON.stringify(t))}},window.capitalizeFirstLetter=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},window.snakeToCamel=function(e){return e.replace(/(\-\w)/g,(function(e){return e[1].toUpperCase()}))},window.indexInParent=function(e){for(var t=e.parentNode.childNodes,n=0,i=0;i<t.length;i++){if(t[i]==e)return n;1==t[i].nodeType&&n++}return-1},window.copyToClipboard=function(e){if(e="string"==typeof e?document.querySelector(e):e,navigator.userAgent.match(/ipad|ipod|iphone/i)){var t=e.contentEditable,n=e.readOnly;e.contentEditable=!0,e.readOnly=!0;var i=document.createRange();i.selectNodeContents(e);var o=window.getSelection();o.removeAllRanges(),o.addRange(i),e.setSelectionRange(0,999999),e.contentEditable=t,e.readOnly=n}else e.select();document.execCommand("copy")},window.bodyOffset=function(e){var t=e.getBoundingClientRect(),n=window.pageXOffset||document.documentElement.scrollLeft,i=window.pageYOffset||document.documentElement.scrollTop;return{top:t.top+i,left:t.left+n}}},yLpj:function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},yQ37:function(e,t){var n={cookieBar:null,cookieOverlay:null,cookieMessage:null,cookieSwitch:null,cookieFadeOutAnimationDuration:400,acceptTracking:!1,init:function(){n.cookieMessage=document.querySelector(".js-cookie-bar, .js-cookie-overlay"),n.cookieBar=document.querySelector(".js-cookie-bar"),isset(n.cookieBar)?n.initCookieBar():(n.cookieOverlay=document.querySelector(".js-cookie-overlay"),isset(n.cookieOverlay)&&n.initCookieOverlay()),isset(n.cookieMessage)&&n.checkForCookieSettings(),n.cookieSwitch=document.querySelector(".js-cookie-switch"),isset(n.cookieSwitch)&&n.initCookieSwitch()},initCookieBar:function(){var e=n.cookieBar.querySelector(".js-disable-cookie-bar");isset(e)&&e.addEventListener("click",n.closeCookieMessage)},initCookieOverlay:function(){var e=n.cookieMessage.querySelector(".js-change-cookies-settings");isset(e)&&e.addEventListener("click",n.openCookieSettings);var t=n.cookieMessage.querySelector(".c-cookie-type__input--tracking");isset(t)&&(!0===t.checked&&(n.acceptTracking=!0),t.addEventListener("change",n.toggleTrackingSetting));var i=n.cookieMessage.querySelector(".js-accept-cookies");isset(i)&&i.addEventListener("click",n.setCookieSettings)},initCookieSwitch:function(){var e=n.cookieSwitch.querySelector(".c-cookie-type__input--tracking");isset(e)&&(!0===e.checked?n.acceptTracking=!0:n.acceptTracking=!1,e.addEventListener("change",n.toggleTrackingSetting));var t=n.cookieSwitch.querySelector(".js-save-cookie-settings");isset(t)&&t.addEventListener("click",(function(){n.cookieFadeOutAnimationDuration=0,n.setCookieSettings()}))},checkForCookieSettings:function(){Cookie.get("cookieMessage")?(n.cookieMessage.classList.add("is-accepted"),document.body.classList.add("is-cookies-accepted")):(n.cookieMessage.classList.remove("is-accepted"),document.body.classList.remove("is-cookies-accepted"))},closeCookieMessage:function(){Cookie.set("cookieMessage",!0,90),n.cookieMessage.classList.add("is-transitioning-out"),document.body.classList.add("is-cookies-accepted")},openCookieSettings:function(){n.cookieOverlay.querySelector(".js-cookie-settings").classList.remove("is-hidden"),n.cookieOverlay.querySelector(".js-cookie-info").classList.add("is-hidden")},toggleTrackingSetting:function(){n.acceptTracking?n.acceptTracking=!1:n.acceptTracking=!0},setCookieSettings:function(){n.acceptTracking?Cookie.set("trackingCookieAccepted","true",90):Cookie.get("trackingCookieAccepted")&&Cookie.erase("trackingCookieAccepted"),n.closeCookieMessage(),setTimeout((function(){location.reload()}),n.cookieFadeOutAnimationDuration)}};n.init()}},[[0,1,2]]]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9nbG9iYWwvc2Nyb2xsSGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2NvbXBvbmVudHMvb3ZlcmxheU1lbnVIYW5kbGVyLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2NvbXBvbmVudHMveW91dHViZUhhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy9zY3JvbGxUb0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2dsb2JhbC9wb2x5ZmlsbHMvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvZ2xvYmFsL3BvbHlmaWxscy9pc0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy9zbGlkZXJIYW5kbGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy9tYXBzSGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9jb21wb25lbnRzL2Nob2NvbGF0ZUZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvYXBwLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2dsb2JhbC9icm93c2VySGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvZ2xvYmFsL3BvbHlmaWxscy9zeW1ib2wtZXM2Lm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9nbG9iYWwvaGVscGVycy5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2NvbXBvbmVudHMvY29va2llSGFuZGxlci5qcyJdLCJuYW1lcyI6WyJTY3JvbGxIYW5kbGVyIiwidGltZSIsIkRhdGUiLCJub3ciLCJ0aW1lb3V0Iiwid2FpdFRocm90dGxlIiwid2FpdERlYm91bmNlIiwibGFzdFNjcm9sbFRvcFBvc2l0aW9uIiwic2Nyb2xsRGlyZWN0aW9uRG93biIsInNjcm9sbERpcmVjdGlvblVwIiwiaW5pdCIsInRyaWdnZXJPbkluaXQiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwidHJpZ2dlclRocm90dGxlIiwidHJpZ2dlclNtb290aCIsImlzc2V0IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInRyaWdnZXJEZWJvdW5jZSIsInRyaWdnZXJFbGVtZW50SW5WaWV3cG9ydEFuaW1hdGlvbiIsImRldGVjdFNjcm9sbERpcmVjdGlvbiIsInRvZ2dsZVN0aWNreUhlYWRlciIsImRldGVjdElmRWxlbWVudElzUGFydGx5SW5WaWV3cG9ydCIsImVsIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpbmRvd0hlaWdodCIsImlubmVySGVpZ2h0IiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRIZWlnaHQiLCJ3aW5kb3dXaWR0aCIsImlubmVyV2lkdGgiLCJjbGllbnRXaWR0aCIsInZlcnRpY2FsSW5WaWV3IiwidG9wIiwiaGVpZ2h0IiwiaG9yaXpvbnRhbEluVmlldyIsImxlZnQiLCJ3aWR0aCIsImRldGVjdElmRWxlbWVudElzRnVsbHlJblZpZXdwb3J0IiwiYm90dG9tIiwic2Nyb2xsVG9wUG9zaXRpb24iLCJwYWdlWU9mZnNldCIsInNjcm9sbFRvcCIsImVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsImVsZW1lbnRzTGVuZ3RoIiwibGVuZ3RoIiwiZSIsImVsZW1lbnQiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJzdGlja3lIZWFkZXIiLCJxdWVyeVNlbGVjdG9yIiwic3VibmF2TGlzdCIsInN1Yk5hdklzVmlzaWJsZSIsImhpZGRlbiIsImkiLCJnZXRDb21wdXRlZFN0eWxlIiwidmlzaWJpbGl0eSIsImJvZHkiLCJhZGQiLCJjYWNoZWRTZXRUaW1lb3V0IiwiY2FjaGVkQ2xlYXJUaW1lb3V0IiwicHJvY2VzcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0U2V0VGltb3V0IiwiRXJyb3IiLCJkZWZhdWx0Q2xlYXJUaW1lb3V0IiwicnVuVGltZW91dCIsImZ1biIsImNhbGwiLCJ0aGlzIiwiY3VycmVudFF1ZXVlIiwicXVldWUiLCJkcmFpbmluZyIsInF1ZXVlSW5kZXgiLCJjbGVhblVwTmV4dFRpY2siLCJjb25jYXQiLCJkcmFpblF1ZXVlIiwibGVuIiwicnVuIiwibWFya2VyIiwicnVuQ2xlYXJUaW1lb3V0IiwiSXRlbSIsImFycmF5Iiwibm9vcCIsIm5leHRUaWNrIiwiYXJncyIsIkFycmF5IiwiYXJndW1lbnRzIiwicHVzaCIsInByb3RvdHlwZSIsImFwcGx5IiwidGl0bGUiLCJicm93c2VyIiwiZW52IiwiYXJndiIsInZlcnNpb24iLCJ2ZXJzaW9ucyIsIm9uIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImxpc3RlbmVycyIsIm5hbWUiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJkaXIiLCJ1bWFzayIsImJvZHlTY3JvbGxMb2NrIiwicmVxdWlyZSIsIk92ZXJsYXlNZW51SGFuZGxlciIsIm92ZXJsYXlNZW51VHJpZ2dlckxpc3QiLCJvdmVybGF5TWVudVRyaWdnZXJMaXN0Q291bnQiLCJvdmVybGF5TWVudVRyaWdnZXIiLCJpbml0T3ZlcmxheU1lbnUiLCJ0b2dnbGVPdmVybGF5TWVudSIsImV2ZW50Iiwib3ZlcmxheU1lbnVOYXYiLCJlbmFibGVCb2R5U2Nyb2xsIiwiY29udGFpbnMiLCJmb3JFYWNoIiwiZWxlbSIsInRhYkluZGV4IiwiZGlzYWJsZUJvZHlTY3JvbGwiLCJ0b2dnbGUiLCJZb3V0dWJlSGFuZGxlciIsInlvdXR1YmVDbGFzcyIsInBsYXllcnMiLCJ5b3V0dWJlUGxheWVycyIsInlvdXR1YmVQbGF5ZXJzQW1vdW50IiwieW91dHViZVBsYXllciIsImdldEF0dHJpYnV0ZSIsInlvdXR1YmVFbGVtZW50IiwiaWQiLCJsaW5rIiwiYXV0b1BsYXkiLCJwYXJzZUludCIsImNvbnNvbGUiLCJsb2ciLCJpbml0WW91dHViZSIsIllUIiwiUGxheWVyIiwib25Zb3VUdWJlUGxheWVyQVBJUmVhZHkiLCJsb2FkUGxheWVycyIsImdldFNjcmlwdCIsInBsYXllciIsInZpZGVvSWQiLCJob3N0IiwicGxheWVyVmFycyIsIm1vZGVzdGJyYW5kaW5nIiwicmVsIiwiZGlzYWJsZWtiIiwiYXV0b3BsYXkiLCJldmVudHMiLCJvblN0YXRlQ2hhbmdlIiwib25SZWFkeSIsInBsYXllckNvbnRhaW5lcklkIiwidGFyZ2V0IiwiZ2V0SWZyYW1lIiwiZGF0YSIsIlBsYXllclN0YXRlIiwiRU5ERUQiLCJwbGF5VmlkZW8iLCJTY3JvbGxUb0hhbmRsZXIiLCJvZmZzZXQiLCJkdXJhdGlvbiIsInN0YXJ0IiwiY2hhbmdlIiwiY3VycmVudFRpbWUiLCJhbGxvd0FuaW1hdGlvbiIsInNjcm9sbFRvQW5pbWF0aW9uIiwiZWFzaW5nIiwiYW5jaG9yTGlua3MiLCJhbmNob3JMaW5rc0Ftb3VudCIsInByZXBhcmVTY3JvbGxUbyIsInByZXZlbnREZWZhdWx0IiwiZWxlbWVudElkIiwic3Vic3RyIiwiaW5kZXhPZiIsInNjcm9sbFRvRWxlbWVudFBvc2l0aW9uIiwiZ2V0RWxlbWVudEJ5SWQiLCJNYXRoIiwibWF4Iiwic3RhcnRUaW1lIiwicGVyZm9ybWFuY2UiLCJnZXRUaW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiYW5pbWF0ZVNjcm9sbCIsImFib3J0U2Nyb2xsQW5pbWF0aW9uIiwidGltZXN0YW1wIiwicHJvZ3Jlc3MiLCJtaW4iLCJFYXNpbmdGdW5jdGlvbnMiLCJuZXdTY3JvbGxUb3AiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImZhY3RvcnkiLCJmaW5hbGx5Q29uc3RydWN0b3IiLCJjYWxsYmFjayIsImNvbnN0cnVjdG9yIiwidGhlbiIsInZhbHVlIiwicmVzb2x2ZSIsInJlYXNvbiIsInJlamVjdCIsInNldFRpbWVvdXRGdW5jIiwiUHJvbWlzZSIsImZuIiwiVHlwZUVycm9yIiwiX3N0YXRlIiwiX2hhbmRsZWQiLCJfdmFsdWUiLCJ1bmRlZmluZWQiLCJfZGVmZXJyZWRzIiwiZG9SZXNvbHZlIiwiaGFuZGxlIiwic2VsZiIsImRlZmVycmVkIiwiX2ltbWVkaWF0ZUZuIiwiY2IiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXQiLCJwcm9taXNlIiwibmV3VmFsdWUiLCJmaW5hbGUiLCJ0aGlzQXJnIiwiX3VuaGFuZGxlZFJlamVjdGlvbkZuIiwiSGFuZGxlciIsImRvbmUiLCJleCIsInByb20iLCJhbGwiLCJhcnIiLCJzbGljZSIsInJlbWFpbmluZyIsInJlcyIsInZhbCIsInJhY2UiLCJ2YWx1ZXMiLCJzZXRJbW1lZGlhdGUiLCJlcnIiLCJ3YXJuIiwiZ2xvYmFsTlMiLCJnbG9iYWwiLCJkZWZpbmUiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJpc0Zpbml0ZSIsImZsb29yIiwiU2xpZGVycyIsInNsaWRlckNvbnRhaW5lcnMiLCJzbGlkZXJDb250YWluZXJzTGVuZ3RoIiwic2xpZGVySWQiLCJTbGlkZXJzZXR0aW5nIiwiU2xpZGVyU2V0dGluZyIsInNsaWRlUXVlcnkiLCJuYXZpZ2F0aW9uQnV0dG9ucyIsImRvdHMiLCJTbGlkZXIiLCJwcmVwYXJlUGFyYW1ldGVycyIsInNldHRpbmdzT2JqZWN0IiwiZGVmaW5lZFByZXZpb3VzTmV4dCIsImF1dG9TbGlkZXIiLCJzbGlkZXJJbnRlcnZhbCIsInNldFNsaWRlcklkIiwic3RyaW5nIiwic2V0RGVmaW5lZFByZXZpb3VzTmV4dCIsImJvb2xlYW4iLCJzZXRBdXRvU2xpZGVyIiwic2V0U2xpZGVySW50ZXJ2YWwiLCJpbnRlZ2VyIiwic2V0U2xpZGVRdWVyeSIsInNldE5hdmlnYXRpb25CdXR0b25zIiwic2V0RG90cyIsImdldFNsaWRlcklkIiwiZ2V0RGVmaW5lZFByZXZpb3VzTmV4dCIsImdldEF1dG9TbGlkZXIiLCJnZXRTbGlkZXJJbnRlcnZhbCIsImdldFNsaWRlUXVlcnkiLCJnZXROYXZpZ2F0aW9uQnV0dG9ucyIsImdldERvdHMiLCJmaWxsIiwic2V0dGluZ3NPYmplY3RLZXlzIiwiT2JqZWN0Iiwia2V5cyIsInNldHRpbmdzT2JqZWN0TGVuZ3RoIiwia2V5Iiwic2V0dGluZ3MiLCJzbGlkZXJPYmplY3QiLCJhY3RpdmVTbGlkZUlkIiwicHJldmlvdXNTbGlkZUlkIiwibmV4dFNsaWRlSWQiLCJhdmFpbGFibGVTbGlkZXMiLCJzbGlkZXMiLCJhdXRvU2xpZGVySW50ZXJ2YWwiLCJzZXRQcmV2aW91c0FuZE5leHRTbGlkZSIsInNldFNsaWRlIiwic3dpcGVHZXN0dXJlcyIsIkhhbW1lciIsInJlc2V0QXV0b1NsaWRlciIsIm5leHRTbGlkZSIsInByZXZpb3VzU2xpZGUiLCJuYXZpZ2F0aW9uQnV0dG9uc0xlbmd0aCIsImNsaWNrTmF2aWdhdGlvbkJ1dHRvbiIsImRvdHNMZW5ndGgiLCJjbGlja0RvdCIsImNsZWFySW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsInNsaWRlc0xlbmd0aCIsInNsaWRlIiwic3R5bGUiLCJwb2ludGVyRXZlbnRzIiwic2xpZGVPcmRlciIsInNldEFjdGl2ZURvdCIsIm5hdkJ1dHRvbiIsIm5leHQiLCJwcmV2aW91cyIsInNldEF0dHJpYnV0ZSIsImNsaWNrZWREb3QiLCJkb3QiLCJkb3RPcmRlciIsIkZ1bmN0aW9uIiwiVGltZW91dCIsImNsZWFyRm4iLCJfaWQiLCJfY2xlYXJGbiIsInNjb3BlIiwiY2xvc2UiLCJ1bnJlZiIsInJlZiIsImVucm9sbCIsIml0ZW0iLCJtc2VjcyIsIl9pZGxlVGltZW91dElkIiwiX2lkbGVUaW1lb3V0IiwidW5lbnJvbGwiLCJfdW5yZWZBY3RpdmUiLCJhY3RpdmUiLCJfb25UaW1lb3V0IiwiY2xlYXJJbW1lZGlhdGUiLCJyZWdpc3RlckltbWVkaWF0ZSIsImh0bWwiLCJjaGFubmVsIiwibWVzc2FnZVByZWZpeCIsIm9uR2xvYmFsTWVzc2FnZSIsIm5leHRIYW5kbGUiLCJ0YXNrc0J5SGFuZGxlIiwiY3VycmVudGx5UnVubmluZ0FUYXNrIiwiZG9jIiwiYXR0YWNoVG8iLCJnZXRQcm90b3R5cGVPZiIsInRvU3RyaW5nIiwicnVuSWZQcmVzZW50IiwicG9zdE1lc3NhZ2UiLCJpbXBvcnRTY3JpcHRzIiwicG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyIsIm9sZE9uTWVzc2FnZSIsIm9ubWVzc2FnZSIsImNhblVzZVBvc3RNZXNzYWdlIiwiTWVzc2FnZUNoYW5uZWwiLCJwb3J0MSIsInBvcnQyIiwiY3JlYXRlRWxlbWVudCIsInNjcmlwdCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlbW92ZUNoaWxkIiwiYXBwZW5kQ2hpbGQiLCJyYW5kb20iLCJzb3VyY2UiLCJhdHRhY2hFdmVudCIsInRhc2siLCJ3ZWJwYWNrUG9seWZpbGwiLCJkZXByZWNhdGUiLCJwYXRocyIsImNoaWxkcmVuIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwibCIsIk1hcHNIYW5kbGVyIiwibWFwIiwibG9jYXRpb24iLCJsYXQiLCJsbmciLCJzdHlsaW5nIiwiaGFzQXR0cmlidXRlIiwicGFyc2VGbG9hdCIsInNldEN1c3RvbVN0eWxpbmciLCJnb29nbGUiLCJtYXBzIiwiZHJhd01hcCIsIk1hcCIsInpvb20iLCJjZW50ZXIiLCJkaXNhYmxlRGVmYXVsdFVJIiwic3R5bGVzIiwiY29udGVudFN0cmluZyIsImluZm93aW5kb3ciLCJJbmZvV2luZG93IiwiY29udGVudCIsIk1hcmtlciIsInBvc2l0aW9uIiwib3BlbiIsIkNob2NvbGF0ZUZhY3RvcnkiLCJiYW5uZWRWaXNpdG9yIiwiZW50ZXIiLCJjaG9jb2xhdGVGYWN0b3JpZXMiLCJhbW91bnRPZkNob2NvbGF0ZUZhY3RvcmllcyIsIkNob2NvbGF0ZUJhciIsIl9mbGFzaFRpY2tldCIsImNob2NvbGF0ZUJhciIsImdvbGRlblRpY2tldCIsImVuam95VGhlVG91ciIsImNob2NvbGF0ZUZhY3RvcnkiLCJ0b3VyR3JvdXAiLCJvb21wYUxvb21wYXMiLCJhbW91bnRPZk9vbXBhTG9vbXBhcyIsInRvdXJHcm91cFNpemUiLCJ2aXNpdG9yIiwidmlzaXRvck5hbWUiLCJfaXNWaXNpdG9yQmFubmVkIiwiX2dldEFycmFuZ2VtZW50IiwiX2ZpbmlzaFRvdXIiLCJub2RlTmFtZSIsImdyb3VwIiwiX2FkZFdpbGxpZVdvbmthIiwiQWpheCIsInBvc3QiLCJIdHRwUmVxdWVzdCIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwic3RhdHVzIiwiX3RoYW5rc0ZvclZpc2l0aW5nIiwicmVkaXJlY3RVcmwiLCJfZ2l2ZUZlZWRiYWNrVG9NZW1iZXJzIiwiZXJyb3JzIiwiX3Vua25vd25HYXBJbkZhY3RvcnkiLCJfd2lsbGllIiwiZmVlZGJhY2tBcmVhIiwiaW5uZXJIVE1MIiwiX2NsZWFyUHJldmlvdXNNYXJrZWRKYWNrZXRzIiwiamFja2V0IiwidmlzaXRvckZlZWRiYWNrQXJlYSIsInZpc2l0b3JOb2RlIiwiX2dyYWJWaXNpdG9ySmFja2V0IiwidmlzaXRvckZlZWRiYWNrIiwidmlzaXRvckZlZWRiYWNrQW1vdW50IiwidmlzaXRvckZlZWRiYWNrTGluZSIsImN1cnJlbnRGZWVkYmFja0FyZWEiLCJjYXBpdGFsaXplRmlyc3RMZXR0ZXIiLCJtYXJrZWRKYWNrZXRzIiwibWFya2VkSmFja2V0c0Ftb3VudCIsImN1cnJlbnRMYXllciIsInNhZmV0eUJyZWFrIiwicGFyZW50Tm9kZSIsInRhZ05hbWUiLCJuZXh0U3RvcCIsIkJyb3dzZXJIYW5kbGVyIiwidXNlckFnZW50IiwiYnJvd3NlckluZm8iLCJuYXZpZ2F0b3IiLCJnZXRCcm93c2VySW5mbyIsImhhbmRsZUlFIiwiaGFuZGxlU2FmYXJpIiwibXNpZSIsImllbHQxMSIsImllMTEiLCJtYXRjaCIsInN1YnN0cmluZyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGVtIiwidWEiLCJNIiwidGVzdCIsImV4ZWMiLCJhcHBOYW1lIiwiYXBwVmVyc2lvbiIsInNwbGljZSIsImRlZmluZVByb3BlcnRpZXMiLCJzeW1ib2xIaWRkZW5Db3VudGVyIiwiZ2xvYmFsU3ltYm9sUmVnaXN0cnkiLCJFUzYiLCJpc0FycmF5Iiwib2JqZWN0VG9TdHJpbmciLCJlbXB0eUZ1bmN0aW9uIiwic2ltcGxlRnVuY3Rpb24iLCJhcmciLCJpc0NhbGxhYmxlIiwiSXRlcmF0b3IiLCJBcnJheUl0ZXJhdG9yIiwiZmxhZyIsIl9hcnJheSIsIl9mbGFnIiwiX25leHRJbmRleCIsIlN0cmluZ0l0ZXJhdG9yIiwiX3N0cmluZyIsImlzT2JqZWN0IiwiYXBwZW5kQXJyYXkiLCJhcnJheTEiLCJhcnJheTIiLCJsZW5ndGgxIiwibGVuZ3RoMiIsImhhc093blByb3BlcnR5Iiwic2ltcGxlSW5oZXJpdGFuY2UiLCJjaGlsZCIsInBhcmVudCIsImNyZWF0ZSIsIlN5bWJvbCIsImRlc2MiLCJTdHJpbmciLCJzeW1ib2wiLCJfZGVzY3JpcHRpb24iLCJfaXNTeW1ib2wiLCJzZXR1cFN5bWJvbEludGVybmFscyIsImZvciIsInJlY29yZCIsInJlZ2lzdHJ5TGVuZ3RoIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJrZXlGb3IiLCJpc1N5bWJvbCIsImhhc0luc3RhbmNlIiwiaXNDb25jYXRTcHJlYWRhYmxlIiwiaXRlcmF0b3IiLCJ0b1N0cmluZ1RhZyIsInZhbHVlT2YiLCJuZXh0VmFsdWUiLCJzdHJpbmdPYmplY3QiLCJTcHJlYWRPcGVyYXRvckltcGwiLCJfdGFyZ2V0IiwiX3ZhbHVlcyIsIl90aGlzQXJnIiwic3ByZWFkIiwiaXRlcmFibGUiLCJmb3JPZiIsInRlbXAiLCJyZXR1cm5WYWx1ZSIsImluc3RhbmNlT2YiLCJvYmplY3QiLCJoYXNJbnN0YW5jZVN5bWJvbFByb3AiLCJpdGVyYXRpb25SZXN1bHQiLCJzcHJlYWRPcGVyYXRvciIsImluc3RhbmNlIiwidGFyZ2V0cyIsIm91dHB1dHMiLCJ1bnNoaWZ0IiwiYXJyYXlMaWtlIiwibWFwRm4iLCJvYmoiLCJsaW5lYXIiLCJ0IiwiZWFzZUluUXVhZCIsImVhc2VPdXRRdWFkIiwiZWFzZUluT3V0UXVhZCIsImVhc2VJbkN1YmljIiwiZWFzZU91dEN1YmljIiwiZWFzZUluT3V0Q3ViaWMiLCJlYXNlSW5RdWFydCIsImVhc2VPdXRRdWFydCIsImVhc2VJbk91dFF1YXJ0IiwiZWFzZUluUXVpbnQiLCJlYXNlT3V0UXVpbnQiLCJlYXNlSW5PdXRRdWludCIsImFzeW5jIiwic2NyaXB0cyIsInByaW9yIiwib25sb2FkIiwiXyIsImlzQWJvcnQiLCJyZWFkeVN0YXRlIiwic3JjIiwiaW5zZXJ0QmVmb3JlIiwiZGVib3VuY2UiLCJmdW5jIiwid2FpdCIsImltbWVkaWF0ZSIsImNvbnRleHQiLCJsYXRlciIsImNhbGxOb3ciLCJDb29raWUiLCJzZXQiLCJkYXlzIiwiZG9tYWluIiwiZG9tYWluUGFydHMiLCJkYXRlIiwiZXhwaXJlcyIsInNldFRpbWUiLCJ0b0dNVFN0cmluZyIsInNwbGl0IiwiY29va2llIiwic2hpZnQiLCJqb2luIiwibmFtZUVRIiwiY2EiLCJjIiwiY2hhckF0IiwiZXJhc2UiLCJudW1iZXJfZm9ybWF0IiwibnVtYmVyIiwiZGVjaW1hbHMiLCJkZWNfcG9pbnQiLCJ0aG91c2FuZHNfc2VwIiwicmVwbGFjZSIsIm4iLCJwcmVjIiwiYWJzIiwic2VwIiwiZGVjIiwicyIsImsiLCJwb3ciLCJyb3VuZCIsInRvRml4ZWRGaXgiLCJFbGVtZW50IiwiY2xvc2VzdCIsIm1hdGNoZXMiLCJtc01hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsImFuY2VzdG9yIiwicGFyZW50RWxlbWVudCIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwidG9rZW4iLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsInN0cmluZ2lmeSIsInRvVXBwZXJDYXNlIiwic25ha2VUb0NhbWVsIiwibSIsImluZGV4SW5QYXJlbnQiLCJub2RlIiwiY2hpbGROb2RlcyIsIm51bSIsIm5vZGVUeXBlIiwiY29weVRvQ2xpcGJvYXJkIiwiZWRpdGFibGUiLCJjb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInNldFNlbGVjdGlvblJhbmdlIiwic2VsZWN0IiwiZXhlY0NvbW1hbmQiLCJib2R5T2Zmc2V0Iiwic2Nyb2xsTGVmdCIsInBhZ2VYT2Zmc2V0IiwiZyIsIkNvb2tpZUhhbmRsZXIiLCJjb29raWVCYXIiLCJjb29raWVPdmVybGF5IiwiY29va2llTWVzc2FnZSIsImNvb2tpZVN3aXRjaCIsImNvb2tpZUZhZGVPdXRBbmltYXRpb25EdXJhdGlvbiIsImFjY2VwdFRyYWNraW5nIiwiaW5pdENvb2tpZUJhciIsImluaXRDb29raWVPdmVybGF5IiwiY2hlY2tGb3JDb29raWVTZXR0aW5ncyIsImluaXRDb29raWVTd2l0Y2giLCJjbG9zZUJ1dHRvbiIsImNsb3NlQ29va2llTWVzc2FnZSIsIm9wZW5Db29raWVTZXR0aW5nc0J1dHRvbiIsIm9wZW5Db29raWVTZXR0aW5ncyIsInRvZ2dsZVRyYWNraW5nSW5wdXQiLCJjaGVja2VkIiwidG9nZ2xlVHJhY2tpbmdTZXR0aW5nIiwiYWNjZXB0QnV0dG9uIiwic2V0Q29va2llU2V0dGluZ3MiLCJzYXZlQnV0dG9uIiwicmVsb2FkIl0sIm1hcHBpbmdzIjoieUlBS0EsSUFB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SSx3QkFDMUNsQyxTQUFTaUMsS0FBS1YsVUFBVVcsSUFBSSx3QkFHaEN3bUIsbUJBQW9CLFdBQ2hCZCxFQUFjRSxjQUFjcG1CLGNBQWMsdUJBQXVCSCxVQUFVQyxPQUFPLGFBQ2xGb21CLEVBQWNFLGNBQWNwbUIsY0FBYyxtQkFBbUJILFVBQVVXLElBQUksY0FHL0UybUIsc0JBQXVCLFdBQ2hCakIsRUFBY00sZUFDYk4sRUFBY00sZ0JBQWlCLEVBRy9CTixFQUFjTSxnQkFBaUIsR0FJdkNhLGtCQUFtQixXQUdabkIsRUFBY00sZUFDYmhGLE9BQU9DLElBQUkseUJBQTBCLE9BQVEsSUFHMUNELE9BQU8zTSxJQUFJLDJCQUNWMk0sT0FBT2lCLE1BQU0sMEJBSXJCeUQsRUFBY1kscUJBR2RucEIsWUFBVyxXQUNQc1gsU0FBU3NTLFdBQ1ZyQixFQUFjSyxrQ0FLekJMLEVBQWMvb0IsUyIsImZpbGUiOiIvanMvc2l0ZS9hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgU2Nyb2xsIGhhbmRsZXJcbiAgIC0gSGFuZGxlciB0aGUgb2JqZWN0cyB3aGljaCBhcmUgYmluZCBvbiBzY3JvbGwgZXZlbnRzIG9yIHZpc2libGUgaW4gdmlld3BvcnRcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5jb25zdCBTY3JvbGxIYW5kbGVyID0ge1xuXG4gICAgLy8gVmFyaWFibGVzIGZvciBkZWJvdW5jZSBhbmQgdGhyb3R0bGUgZWZmZWN0c1xuICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgdGltZW91dDogbnVsbCxcbiAgICB3YWl0VGhyb3R0bGU6IDEwMDAsXG4gICAgd2FpdERlYm91bmNlOiAzMDAsXG5cbiAgICAvLyBWYXJpYWJsZXMgZm9yIHNjcm9sbCBkaXJlY3Rpb25cbiAgICBsYXN0U2Nyb2xsVG9wUG9zaXRpb246IDAsXG4gICAgc2Nyb2xsRGlyZWN0aW9uRG93bjogdHJ1ZSxcbiAgICBzY3JvbGxEaXJlY3Rpb25VcDogZmFsc2UsXG5cbiAgICAvL0luaXRpYWxpc2F0aW9uXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIC8vIFRyaWdnZXIgc3RhcnQgb24gc3RhcnQgdXBcbiAgICAgICAgU2Nyb2xsSGFuZGxlci50cmlnZ2VyT25Jbml0KCk7XG5cbiAgICAgICAgLy8gVGhyb3R0bGUgc2Nyb2xsXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoKFNjcm9sbEhhbmRsZXIudGltZSArIFNjcm9sbEhhbmRsZXIud2FpdFRocm90dGxlIC0gRGF0ZS5ub3coKSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgU2Nyb2xsSGFuZGxlci50cmlnZ2VyVGhyb3R0bGUoKTtcbiAgICAgICAgICAgICAgICBTY3JvbGxIYW5kbGVyLnRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTbW9vdGggc2Nyb2xsXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBTY3JvbGxIYW5kbGVyLnRyaWdnZXJTbW9vdGgoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRGVib3VuY2Ugc2Nyb2xsXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZihpc3NldChTY3JvbGxIYW5kbGVyLnRpbWVvdXQpKSBjbGVhclRpbWVvdXQoU2Nyb2xsSGFuZGxlci50aW1lb3V0KTtcbiAgICAgICAgICAgIFNjcm9sbEhhbmRsZXIudGltZW91dCA9IHNldFRpbWVvdXQoU2Nyb2xsSGFuZGxlci50cmlnZ2VyRGVib3VuY2UsIFNjcm9sbEhhbmRsZXIud2FpdERlYm91bmNlKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8vIFRyaWdnZXIgb24gc3RhcnQgdXBcbiAgICB0cmlnZ2VyT25Jbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFNjcm9sbEhhbmRsZXIudHJpZ2dlckVsZW1lbnRJblZpZXdwb3J0QW5pbWF0aW9uKCk7XG4gICAgfSxcblxuICAgIC8vIFRyaWdnZXIgc2Nyb2xsIGZ1bmN0aW9ucyB3aXRoIHRocm90dGxlIChwcmVmZXJyZWQpXG4gICAgdHJpZ2dlclRocm90dGxlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdUaHJvdHRsZWQgc2Nyb2xsJyk7XG4gICAgICAgIFNjcm9sbEhhbmRsZXIudHJpZ2dlckVsZW1lbnRJblZpZXdwb3J0QW5pbWF0aW9uKCk7XG4gICAgfSxcblxuICAgIC8vIFRyaWdnZXIgc2Nyb2xsIG9uIGRlYm91bmNlXG4gICAgdHJpZ2dlckRlYm91bmNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdEZWJvdW5jZSBzY3JvbGwnKTtcbiAgICB9LFxuXG4gICAgLy8gVHJpZ2dlciBzY3JvbGwgb24gdGhlIGZsaWdodFxuICAgIHRyaWdnZXJTbW9vdGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1Ntb290aCBzY3JvbGwnKTtcbiAgICAgICAgU2Nyb2xsSGFuZGxlci5kZXRlY3RTY3JvbGxEaXJlY3Rpb24oKTtcbiAgICAgICAgU2Nyb2xsSGFuZGxlci50b2dnbGVTdGlja3lIZWFkZXIoKTtcbiAgICB9LFxuXG4gICAgLy8gRGV0ZWN0IGlmIHBhcnQgb2YgYSBnaXZlbiBlbGVtZW50IGlzIHZpc2libGUgaW4gdGhlIHZpZXdwb3J0XG4gICAgLy8gRWwgbXVzdCBiZSBhIG5vZGUgZWxlbWVudFxuICAgIGRldGVjdElmRWxlbWVudElzUGFydGx5SW5WaWV3cG9ydDogZnVuY3Rpb24oZWwpXG4gICAge1xuICAgICAgICBpZihpc3NldChlbCkpe1xuXG4gICAgICAgICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAvLyBET01SZWN0IHsgeDogOCwgeTogOCwgd2lkdGg6IDEwMCwgaGVpZ2h0OiAxMDAsIHRvcDogOCwgcmlnaHQ6IDEwOCwgYm90dG9tOiAxMDgsIGxlZnQ6IDggfVxuICAgICAgICAgICAgY29uc3Qgd2luZG93SGVpZ2h0ID0gKHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IHdpbmRvd1dpZHRoID0gKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsSW5WaWV3ID0gKHJlY3QudG9wIDw9ICh3aW5kb3dIZWlnaHQpKSAmJiAoKHJlY3QudG9wICsgcmVjdC5oZWlnaHQpID49IDApO1xuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbEluVmlldyA9IChyZWN0LmxlZnQgPD0gd2luZG93V2lkdGgpICYmICgocmVjdC5sZWZ0ICsgcmVjdC53aWR0aCkgPj0gMCk7XG5cbiAgICAgICAgICAgIHJldHVybiAodmVydGljYWxJblZpZXcgJiYgaG9yaXpvbnRhbEluVmlldyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gRGV0ZWN0IGlmIGEgZ2l2ZW4gZWxlbWVudCBpcyBmdWxseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydFxuICAgIC8vIEVsIG11c3QgYmUgYSBub2RlIGVsZW1lbnRcbiAgICBkZXRlY3RJZkVsZW1lbnRJc0Z1bGx5SW5WaWV3cG9ydDogZnVuY3Rpb24oZWwpXG4gICAge1xuICAgICAgICBpZihpc3NldChlbCkpe1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHJlY3QudG9wID49IDAgJiZcbiAgICAgICAgICAgICAgICByZWN0LmJvdHRvbSA8PSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZGV0ZWN0U2Nyb2xsRGlyZWN0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcFBvc2l0aW9uID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7IC8vIENyZWRpdHM6IFwiaHR0cHM6Ly9naXRodWIuY29tL3FlcmVteS9zby9ibG9iL21hc3Rlci9zby5kb20uanMjTDQyNlwiXG4gICAgICAgIGlmIChzY3JvbGxUb3BQb3NpdGlvbiA+PSBTY3JvbGxIYW5kbGVyLmxhc3RTY3JvbGxUb3BQb3NpdGlvbil7XG4gICAgICAgICAgICBTY3JvbGxIYW5kbGVyLnNjcm9sbERpcmVjdGlvbkRvd24gPSB0cnVlO1xuICAgICAgICAgICAgU2Nyb2xsSGFuZGxlci5zY3JvbGxEaXJlY3Rpb25VcCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU2Nyb2xsSGFuZGxlci5zY3JvbGxEaXJlY3Rpb25Eb3duID0gZmFsc2U7XG4gICAgICAgICAgICBTY3JvbGxIYW5kbGVyLnNjcm9sbERpcmVjdGlvblVwID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBTY3JvbGxIYW5kbGVyLmxhc3RTY3JvbGxUb3BQb3NpdGlvbiA9IHNjcm9sbFRvcFBvc2l0aW9uO1xuICAgIH0sXG5cbiAgICAvLyBUcmlnZ2VyIGFuaW1hdGlvbiBvbiBlbGVtZW50cyB0aGF0IGhhdmUgJ2VsZW1lbnQtaW4tdmlld3BvcnQnIGFuZCB0aGF0IGFyZSBpbiB0aGUgdmlld3BvcnRcbiAgICAvLyBUaGVzZSBhbmltYXRpb24gY2FuIG9ubHkgYmUgdHJpZ2dlcmVkIG9uY2UsIGlmIHlvdSB3YW50IG1vcmUgdGhlbiB0aGF0IHlvdSBzaG91bGQgd3JpdGUgYW4gc3BlY2lmaWMgZnVuY3Rpb24gZm9yIHRoaXNcbiAgICB0cmlnZ2VyRWxlbWVudEluVmlld3BvcnRBbmltYXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZWxlbWVudC1pbi12aWV3cG9ydCcpO1xuICAgICAgICBjb25zdCBlbGVtZW50c0xlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuICAgICAgICBmb3IobGV0IGUgPSAwOyBlIDwgZWxlbWVudHNMZW5ndGg7IGUrKyl7XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tlXTtcbiAgICAgICAgICAgIGlmKFNjcm9sbEhhbmRsZXIuZGV0ZWN0SWZFbGVtZW50SXNQYXJ0bHlJblZpZXdwb3J0KGVsZW1lbnQpKXtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2VsZW1lbnQtaW4tdmlld3BvcnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDVVNUT00gU0NST0xMIEhBTkRMRVJTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLy8gSGlkZSBvciBzaG93IHN0aWNreSBuYXZpZ2F0aW9uIHdoZW4gaGVhZGVyIGlzbid0IHZpc2libGVcbiAgICB0b2dnbGVTdGlja3lIZWFkZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgc3RpY2t5SGVhZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLXN0aWNreS1oZWFkZXInKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZVN0aWNreUhlYWRlckNsYXNzID0gJ2lzLXN0aWNreS1oZWFkZXItdmlzaWJsZSc7XG4gICAgICAgIGNvbnN0IHN1Ym5hdkxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtc3VibmF2Jyk7XG4gICAgICAgIHZhciBzdWJOYXZJc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgc3RpY2t5SGVhZGVyLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3VibmF2TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHN1Ym5hdkxpc3RbaV0sIG51bGwpLnZpc2liaWxpdHkgPT0gXCJ2aXNpYmxlXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ViTmF2SXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGlzc2V0KHN0aWNreUhlYWRlcikgJiYgIXN1Yk5hdklzVmlzaWJsZSl7XG4gICAgICAgICAgICAvLyBIaWRlIHdoZW4gc2Nyb2xsaW5nIERPV04gKE9SIHdpdGhpbiBvZmZzZXQpXG4gICAgICAgICAgICBpZihTY3JvbGxIYW5kbGVyLnNjcm9sbERpcmVjdGlvbkRvd24gfHwgU2Nyb2xsSGFuZGxlci5sYXN0U2Nyb2xsVG9wUG9zaXRpb24gPCAxMTApe1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSh2aXNpYmxlU3RpY2t5SGVhZGVyQ2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2hvdyB3aGVuIHNjcm9sbGluZyBVUCBhbmQgb3V0c2lkZSBvZiBvZmZzZXRcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCh2aXNpYmxlU3RpY2t5SGVhZGVyQ2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxufTtcblxuU2Nyb2xsSGFuZGxlci5pbml0KCk7IiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBOYXZpZ2F0aW9uIGhhbmRsZXJcbiAgIC0gSGFuZGxlcyB0aGUgc2hvd2luZyBhbmQgaGlkaW5nIG9mIHRoZSBvdmVybGF5LW1lbnUgY29tcG9uZW50IHdoaWNoIGhhcyB0aGUgcHJvcGVyIGNsYXNzZXMuXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgYm9keVNjcm9sbExvY2sgPSByZXF1aXJlKCdib2R5LXNjcm9sbC1sb2NrJyk7XG5cbmNvbnN0IE92ZXJsYXlNZW51SGFuZGxlciA9IHtcblxuICAgIC8vIGluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAvLyAgICAgY29uc3Qgb3ZlcmxheU1lbnVUcmlnZ2VyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLW92ZXJsYXktbWVudS10cmlnZ2VyJyk7XG4gICAgLy8gICAgIE92ZXJsYXlNZW51SGFuZGxlci5pbml0T3ZlcmxheU1lbnUob3ZlcmxheU1lbnVUcmlnZ2VyKTtcbiAgICAvLyB9LFxuXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlNZW51VHJpZ2dlckxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtb3ZlcmxheS1tZW51LXRyaWdnZXInKTtcbiAgICAgICAgY29uc3Qgb3ZlcmxheU1lbnVUcmlnZ2VyTGlzdENvdW50ID0gb3ZlcmxheU1lbnVUcmlnZ2VyTGlzdC5sZW5ndGg7XG5cbiAgICAgICAgaWYoaXNzZXQob3ZlcmxheU1lbnVUcmlnZ2VyTGlzdCkgJiYgb3ZlcmxheU1lbnVUcmlnZ2VyTGlzdENvdW50ICE9PSAwKXtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBvdmVybGF5TWVudVRyaWdnZXJMaXN0Q291bnQ7IGkrKyl7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3ZlcmxheU1lbnVUcmlnZ2VyID0gb3ZlcmxheU1lbnVUcmlnZ2VyTGlzdFtpXTtcbiAgICAgICAgICAgICAgICBPdmVybGF5TWVudUhhbmRsZXIuaW5pdE92ZXJsYXlNZW51KG92ZXJsYXlNZW51VHJpZ2dlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5pdE92ZXJsYXlNZW51OiBmdW5jdGlvbiAob3ZlcmxheU1lbnVUcmlnZ2VyKSB7XG4gICAgICAgIG92ZXJsYXlNZW51VHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIE92ZXJsYXlNZW51SGFuZGxlci50b2dnbGVPdmVybGF5TWVudSwgZmFsc2UpO1xuICAgIH0sXG5cbiAgICB0b2dnbGVPdmVybGF5TWVudTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlNZW51TmF2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLW92ZXJsYXktbWVudScpO1xuICAgICAgICAvLyBjb25zdCBvdmVybGF5TWVudUJvZHkgPSBvdmVybGF5TWVudS5xdWVyeVNlbGVjdG9yKCcuanMtb3ZlcmxheS1tZW51LXBlcnNpc3Qtc2Nyb2xsaW5nJyk7XG5cbiAgICAgICAgLy8gQmFpbCBpZiBvdmVybGF5TWVudSBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghb3ZlcmxheU1lbnVOYXYpIHJldHVybjtcblxuICAgICAgICAvLyBDbGVhciBwcmV2aW91c2x5IGxvY2tlZCBzY3JvbGwgb24gdGhlIGJvZHlcbiAgICAgICAgYm9keVNjcm9sbExvY2suZW5hYmxlQm9keVNjcm9sbChvdmVybGF5TWVudU5hdik7XG5cbiAgICAgICAgLy8gSWYgdGhlIG92ZXJsYXlNZW51IGlzIGFscmVhZHkgYWN0aXZlLCBjb2xsYXBzZSBpdCBhbmQgcXVpdFxuICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLW92ZXJsYXktbWVudS1hY3RpdmUnKSkge1xuICAgICAgICAgICAgb3ZlcmxheU1lbnVOYXYucXVlcnlTZWxlY3RvckFsbCgnW3RhYmluZGV4PVwiMFwiXScpLmZvckVhY2goZnVuY3Rpb24oZWxlbSkge1xuICAgICAgICAgICAgICAgIGVsZW0udGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLW92ZXJsYXktbWVudS1hY3RpdmUnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvY2sgc2Nyb2xsaW5nIG9uIHRoZSBib2R5XG4gICAgICAgIGJvZHlTY3JvbGxMb2NrLmRpc2FibGVCb2R5U2Nyb2xsKG92ZXJsYXlNZW51TmF2KTtcblxuICAgICAgICBvdmVybGF5TWVudU5hdi5xdWVyeVNlbGVjdG9yQWxsKCdbdGFiaW5kZXg9XCItMVwiXScpLmZvckVhY2goZnVuY3Rpb24oZWxlbSkge1xuICAgICAgICAgICAgZWxlbS50YWJJbmRleCA9IDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFRvZ2dsZSBhY3RpdmUgb3ZlcmxheU1lbnUgYnkgc2V0dGluZyBhIGNsYXNzIG9uIHRoZSBib2R5XG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnaXMtb3ZlcmxheS1tZW51LWFjdGl2ZScpO1xuICAgICAgICBvdmVybGF5TWVudU5hdi5oaWRkZW4gPSBmYWxzZTtcbiAgICB9XG59O1xuXG5PdmVybGF5TWVudUhhbmRsZXIuaW5pdCgpOyIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgWW91dHViZSBoYW5kbGVyXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgWW91dHViZUhhbmRsZXIgPSB7XG5cbiAgICB5b3V0dWJlQ2xhc3MgOiAnLmpzLXlvdXR1YmUtcGxheWVyJyxcbiAgICBwbGF5ZXJzOiBbXSxcblxuICAgIGluaXQgOiBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICAvLyBHZXQgdGhlIHlvdXR1YmUgcGxheWVycyBjb250YWluZXJzXG4gICAgICAgIGNvbnN0IHlvdXR1YmVQbGF5ZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChZb3V0dWJlSGFuZGxlci55b3V0dWJlQ2xhc3MpO1xuICAgICAgICBjb25zdCB5b3V0dWJlUGxheWVyc0Ftb3VudCA9IHlvdXR1YmVQbGF5ZXJzLmxlbmd0aDtcblxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgeW91dHViZVBsYXllcnNBbW91bnQ7IGkrKyl7XG5cbiAgICAgICAgICAgIGNvbnN0IHlvdXR1YmVQbGF5ZXIgPSB5b3V0dWJlUGxheWVyc1tpXTtcblxuXG4gICAgICAgICAgICBjb25zdCB5b3V0dWJlUGxheWVySWQgPSB5b3V0dWJlUGxheWVyLmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICAgIGlmKHlvdXR1YmVQbGF5ZXJJZCAhPT0gbnVsbCApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU3RyaXAgdGhlIG5lY2Vzc2FyeSBkYXRhIGZyb20gdGhlIGh0bWwgYW5kIGNyZWF0ZSBvYmplY3RzIGZyb20gaXRcbiAgICAgICAgICAgICAgICBjb25zdCB5b3V0dWJlRWxlbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHlvdXR1YmVQbGF5ZXIuZ2V0QXR0cmlidXRlKCdpZCcpLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiB5b3V0dWJlUGxheWVyLmdldEF0dHJpYnV0ZSgnZGF0YS15b3V0dWJlLWxpbmsnKSxcbiAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXk6IHBhcnNlSW50KHlvdXR1YmVQbGF5ZXIuZ2V0QXR0cmlidXRlKCdkYXRhLWF1dG8tcGxheScpKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgWW91dHViZUhhbmRsZXIucGxheWVycy5wdXNoKHlvdXR1YmVFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFbGVtZW50IG5vdCBpbmNsdWRlIGJlY2F1c2UgdGhlcmUgaXNuJ3QgYSBpZCBvbiB0aGUgcGxheWVyXCIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHlvdXR1YmVQbGF5ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoeW91dHViZVBsYXllcnNBbW91bnQgPj0gMSkgWW91dHViZUhhbmRsZXIuaW5pdFlvdXR1YmUoKTtcblxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBleHRlcm5hbCBzY3JpcHQgaXMgbG9hZGVkXG4gICAgICpcbiAgICAgKi9cbiAgICBpbml0WW91dHViZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIFNlZSBpZiBZVCB2YXJpYWJsZSBleGlzdHNcbiAgICAgICAgaWYgKHR5cGVvZihZVCkgPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mKFlULlBsYXllcikgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIC8vIFNldHVwIEFQSSByZWFkeSBmdW5jdGlvblxuICAgICAgICAgICAgd2luZG93Lm9uWW91VHViZVBsYXllckFQSVJlYWR5ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgWW91dHViZUhhbmRsZXIubG9hZFBsYXllcnMoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBMb2FkIGV4dGVybmFsIHNjcmlwdFxuICAgICAgICAgICAgZ2V0U2NyaXB0KCdodHRwczovL3d3dy55b3V0dWJlLmNvbS9pZnJhbWVfYXBpJyk7XG4gICAgICAgICAgICAvLyBJZiBZVCBhbHJlYWR5IGV4aXN0cyBsb2FkIHBsYXllclxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgWW91dHViZUhhbmRsZXIubG9hZFBsYXllcnMoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgdGhlIFlvdXR1YmUgcGxheWVyKHMpIHdpdGggcGFyYW1ldGVyc1xuICAgICAqIEFuZCByZXdyaXRlIHRoZSBwbGF5ZXJzIHRvIGtleSB0aGVtIGJ5IHRoZSBlbGVtZW50IGlkXG4gICAgICpcbiAgICAgKi9cbiAgICBsb2FkUGxheWVyczogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgbGV0IHBsYXllcnMgPSBbXTtcblxuICAgICAgICBjb25zdCB5b3V0dWJlUGxheWVyc0Ftb3VudCA9IFlvdXR1YmVIYW5kbGVyLnBsYXllcnMubGVuZ3RoO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgeW91dHViZVBsYXllcnNBbW91bnQ7IGkrKyl7XG5cbiAgICAgICAgICAgIGxldCB5b3V0dWJlUGxheWVyID0gWW91dHViZUhhbmRsZXIucGxheWVyc1tpXTtcblxuICAgICAgICAgICAgLy8gTG9hZCBwbGF5ZXJcbiAgICAgICAgICAgIHlvdXR1YmVQbGF5ZXIucGxheWVyID0gbmV3IFlULlBsYXllcih5b3V0dWJlUGxheWVyLmlkLHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwMCxcbiAgICAgICAgICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgICAgICAgICAgIHZpZGVvSWQ6IHlvdXR1YmVQbGF5ZXIubGluayxcbiAgICAgICAgICAgICAgICBob3N0OiAnaHR0cHM6Ly93d3cueW91dHViZS1ub2Nvb2tpZS5jb20nLFxuICAgICAgICAgICAgICAgIHBsYXllclZhcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZXN0YnJhbmRpbmc6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJlbDogMCxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWtiOiAxLFxuICAgICAgICAgICAgICAgICAgICBhdXRvcGxheTogeW91dHViZVBsYXllci5hdXRvUGxheVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vICdvblJlYWR5JzogWW91dHViZUhhbmRsZXIub25SZWFkeSxcbiAgICAgICAgICAgICAgICAgICAgJ29uU3RhdGVDaGFuZ2UnOiBZb3V0dWJlSGFuZGxlci5vblN0YXRlQ2hhbmdlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHBsYXllcnNbeW91dHViZVBsYXllci5pZF0gPSB5b3V0dWJlUGxheWVyO1xuXG4gICAgICAgIH1cblxuICAgICAgICBZb3V0dWJlSGFuZGxlci5wbGF5ZXJzID0gcGxheWVycztcblxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHBsYXllciBpcyByZWFkeSB0byBwbGF5XG4gICAgICovXG4gICAgb25SZWFkeSA6IGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAgICAgY29uc3QgcGxheWVyQ29udGFpbmVySWQgPSBldmVudC50YXJnZXQuZ2V0SWZyYW1lKCkuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICBjb25zdCBwbGF5ZXIgPSBZb3V0dWJlSGFuZGxlci5wbGF5ZXJzW3BsYXllckNvbnRhaW5lcklkXS5wbGF5ZXI7XG5cbiAgICAgICAgLy8gU2hvdyB2aWRlb1xuICAgICAgICAvLyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ICQoJyMnICsgcGxheWVyQ29udGFpbmVySWQpLnN0b3AoKS5hbmltYXRlKHsgb3BhY2l0eTogMSB9LDEwMDApIH0sODAwKTtcblxuICAgICAgICAvLyBJZiBub3Qgb24gdGFibGV0IG9yIG1vYmlsZSwgcGxheSBvbiBoaWdoIHF1YWxpdHlcbiAgICAgICAgLy8gcGxheWVyLm11dGUoKTtcbiAgICAgICAgLy8gcGxheWVyLnBsYXlWaWRlbygpO1xuICAgICAgICAvLyBwbGF5ZXIuc2V0UGxheWJhY2tRdWFsaXR5KCdoZDEwODAnKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTGlzdGVuZXIgZm9yIFlvdXR1YmUgc3RhdGUgY2hhbmdlXG4gICAgICovXG4gICAgb25TdGF0ZUNoYW5nZSA6IGZ1bmN0aW9uKGV2ZW50KSB7XG5cbiAgICAgICAgY29uc3QgcGxheWVyQ29udGFpbmVySWQgPSBldmVudC50YXJnZXQuZ2V0SWZyYW1lKCkuZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICBjb25zdCBwbGF5ZXIgPSBZb3V0dWJlSGFuZGxlci5wbGF5ZXJzW3BsYXllckNvbnRhaW5lcklkXS5wbGF5ZXI7XG5cbiAgICAgICAgY29uc3QgdmlkZW9TdGF0ZSA9IGV2ZW50LmRhdGE7XG5cbiAgICAgICAgLy8gTG9vcCB2aWRlb1xuICAgICAgICBpZiAoZXZlbnQuZGF0YSA9PT0gWVQuUGxheWVyU3RhdGUuRU5ERUQgKSB7XG4gICAgICAgICAgICBwbGF5ZXIucGxheVZpZGVvKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5Zb3V0dWJlSGFuZGxlci5pbml0KCk7IiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBTY3JvbGwgVG8gQ2xpY2sgaGFuZGxlclxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbmNvbnN0IFNjcm9sbFRvSGFuZGxlciA9IHtcblxuICAgIC8vIEFuaW1hdGlvbiBzZXR0aW5nc1xuICAgIG9mZnNldCA6IDYwLCAvL3BpeGVsXG4gICAgZHVyYXRpb24gOiAxNDAwLCAvL21zXG5cbiAgICAvLyBBbmltYXRpb24gdmFyaWFibGVzXG4gICAgYm9keSA6IG51bGwsXG4gICAgc3RhcnQgOiAwLFxuICAgIGNoYW5nZSA6IDAsXG4gICAgY3VycmVudFRpbWUgOiAwLFxuICAgIGFsbG93QW5pbWF0aW9uIDogZmFsc2UsXG4gICAgc2Nyb2xsVG9BbmltYXRpb24gOiBudWxsLFxuXG4gICAgLy8gV2F0Y2ggdGhlIEVhc2luZ0Z1bmN0aW9uIGhlbHBlciBmb3IgdGhlIGF2YWlsYWJsZSBtZXRob2RzXG4gICAgZWFzaW5nOiAnZWFzZUluT3V0UXVhZCcsXG5cbiAgICBpbml0IDogZnVuY3Rpb24oKXtcblxuICAgICAgICBjb25zdCBhbmNob3JMaW5rcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy1zY3JvbGwtdG8tdGFyZ2V0Jyk7XG4gICAgICAgIGNvbnN0IGFuY2hvckxpbmtzQW1vdW50ID0gYW5jaG9yTGlua3MubGVuZ3RoO1xuXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBhbmNob3JMaW5rc0Ftb3VudDsgaSsrKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGFuY2hvckxpbmsgPSBhbmNob3JMaW5rc1tpXTtcblxuICAgICAgICAgICAgYW5jaG9yTGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgIFNjcm9sbFRvSGFuZGxlci5wcmVwYXJlU2Nyb2xsVG8odGhpcy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFByZXBhcmUgdGhlIEhhbmRsZXIgZm9yIHRoZSBhbmltYXRpb25cbiAgICAgKi9cbiAgICBwcmVwYXJlU2Nyb2xsVG8gOiBmdW5jdGlvbihlbGVtZW50SWQpe1xuXG4gICAgICAgIC8vIEdldCB0aGUgc2Nyb2xsIHRvIGVsZW1lbnRcbiAgICAgICAgZWxlbWVudElkID0gZWxlbWVudElkLnN1YnN0cihlbGVtZW50SWQuaW5kZXhPZignIycpKzEpO1xuICAgICAgICBjb25zdCBzY3JvbGxUb0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuICAgICAgICBjb25zdCBzY3JvbGxUb0VsZW1lbnRQb3NpdGlvbiA9IHNjcm9sbFRvRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAvLyBSZXNldCBvciBkZWZpbmUgdGhlIEhhbmRsZXIgdmFyaWFibGVzXG4gICAgICAgIFNjcm9sbFRvSGFuZGxlci5ib2R5ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBTY3JvbGxUb0hhbmRsZXIuc3RhcnQgPSBNYXRoLm1heChTY3JvbGxUb0hhbmRsZXIuYm9keS5zY3JvbGxUb3AsIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLCB3aW5kb3cucGFnZVlPZmZzZXQpOyAvL1VzZSBNYXRoLm1heCBiZWNhdXNlIHNhZmFyaSBkb2Vzbid0IHN1cHBvcnQgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcFxuICAgICAgICBTY3JvbGxUb0hhbmRsZXIuY2hhbmdlID0gKChzY3JvbGxUb0VsZW1lbnRQb3NpdGlvbi50b3AgKyBTY3JvbGxUb0hhbmRsZXIuc3RhcnQpIC0gU2Nyb2xsVG9IYW5kbGVyLnN0YXJ0KSAtIFNjcm9sbFRvSGFuZGxlci5vZmZzZXQ7XG4gICAgICAgIFNjcm9sbFRvSGFuZGxlci5zdGFydFRpbWUgPSAnbm93JyBpbiB3aW5kb3cucGVyZm9ybWFuY2UgPyBwZXJmb3JtYW5jZS5ub3coKSA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBTY3JvbGxUb0hhbmRsZXIuYWxsb3dBbmltYXRpb24gPSB0cnVlO1xuXG4gICAgICAgIC8vIFRyaWdnZXIgYW5pbWF0aW9uXG4gICAgICAgIHNjcm9sbFRvQW5pbWF0aW9uID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFNjcm9sbFRvSGFuZGxlci5hbmltYXRlU2Nyb2xsKTtcblxuICAgICAgICAvLyBTdG9wIG9uIHNjcm9sbFxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgU2Nyb2xsVG9IYW5kbGVyLmFib3J0U2Nyb2xsQW5pbWF0aW9uKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgU2Nyb2xsVG9IYW5kbGVyLmFib3J0U2Nyb2xsQW5pbWF0aW9uKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTU1vdXNlU2Nyb2xsJywgU2Nyb2xsVG9IYW5kbGVyLmFib3J0U2Nyb2xsQW5pbWF0aW9uKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNld2hlZWwnLCBTY3JvbGxUb0hhbmRsZXIuYWJvcnRTY3JvbGxBbmltYXRpb24pO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBTY3JvbGxUb0hhbmRsZXIuYWJvcnRTY3JvbGxBbmltYXRpb24pO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgU2Nyb2xsVG9IYW5kbGVyLmFib3J0U2Nyb2xsQW5pbWF0aW9uKTtcblxuICAgIH0sXG5cbiAgICAvKlxuICAgICAqIEFuaW1hdGUgdGhlIHNjcm9sbCBwb3NpdGlvblxuICAgICAqL1xuICAgIGFuaW1hdGVTY3JvbGwgOiBmdW5jdGlvbiAodGltZXN0YW1wKSB7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHByb2dyZXNzIGZyb20gMCAtIDFcbiAgICAgICAgbGV0IHByb2dyZXNzID0gTWF0aC5taW4oMSwgKHRpbWVzdGFtcCAtICBTY3JvbGxUb0hhbmRsZXIuc3RhcnRUaW1lKSAvIFNjcm9sbFRvSGFuZGxlci5kdXJhdGlvbik7XG4gICAgICAgIGlmKHByb2dyZXNzIDwgMCkgcHJvZ3Jlc3MgPSAwO1xuXG4gICAgICAgIC8vIENvbnZlcnQgcHJvZ3Jlc3Mgd2l0aCBlYXNpbmcgZnVuY3Rpb25cbiAgICAgICAgcHJvZ3Jlc3MgPSBFYXNpbmdGdW5jdGlvbnNbU2Nyb2xsVG9IYW5kbGVyLmVhc2luZ10ocHJvZ3Jlc3MpO1xuXG4gICAgICAgIGNvbnN0IG5ld1Njcm9sbFRvcCA9IFNjcm9sbFRvSGFuZGxlci5zdGFydCArICggU2Nyb2xsVG9IYW5kbGVyLmNoYW5nZSAqIHByb2dyZXNzICk7XG5cbiAgICAgICAgU2Nyb2xsVG9IYW5kbGVyLmJvZHkuc2Nyb2xsVG9wID0gbmV3U2Nyb2xsVG9wO1xuICAgICAgICBpZiggU2Nyb2xsVG9IYW5kbGVyLmJvZHkuc2Nyb2xsVG9wID09PSAwICkgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPSBuZXdTY3JvbGxUb3A7IC8vIFNhZmFyaSBkb2Vzbid0IHN1cHBvcnQgc28gaWYgU2Nyb2xsVG9IYW5kbGVyLmJvZHkuc2Nyb2xsVG9wIGlzIDAgZm9yY2UgdGhlIHNjcm9sbCBwb3NpdGlvbiB0aHJvdWdoIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wXG5cbiAgICAgICAgaWYocHJvZ3Jlc3MgPCAxICYmIFNjcm9sbFRvSGFuZGxlci5hbGxvd0FuaW1hdGlvbil7XG4gICAgICAgICAgICBzY3JvbGxUb0FuaW1hdGlvbiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShTY3JvbGxUb0hhbmRsZXIuYW5pbWF0ZVNjcm9sbCk7XG4gICAgICAgIH1cblxuICAgIH0sXG5cbiAgICAvKlxuICAgICAqIEFib3J0IHRoZSBzY3JvbGwgYW5pbWF0aW9uXG4gICAgICovXG4gICAgYWJvcnRTY3JvbGxBbmltYXRpb24gOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgU2Nyb2xsVG9IYW5kbGVyLmFsbG93QW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKFNjcm9sbFRvSGFuZGxlci5zY3JvbGxUb0FuaW1hdGlvbik7XG4gICAgfVxuXG59O1xuXG5TY3JvbGxUb0hhbmRsZXIuaW5pdCgpOyIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeSgpIDpcbiAgICAgICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAgICAgICAgIChmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBAdGhpcyB7UHJvbWlzZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5hbGx5Q29uc3RydWN0b3IoY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbi8vIFN0b3JlIHNldFRpbWVvdXQgcmVmZXJlbmNlIHNvIHByb21pc2UtcG9seWZpbGwgd2lsbCBiZSB1bmFmZmVjdGVkIGJ5XG4vLyBvdGhlciBjb2RlIG1vZGlmeWluZyBzZXRUaW1lb3V0IChsaWtlIHNpbm9uLnVzZUZha2VUaW1lcnMoKSlcbiAgICB2YXIgc2V0VGltZW91dEZ1bmMgPSBzZXRUaW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG5cbi8vIFBvbHlmaWxsIGZvciBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuICAgIGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFByb21pc2UoZm4pIHtcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ25vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIC8qKiBAdHlwZSB7IW51bWJlcn0gKi9cbiAgICAgICAgdGhpcy5fc3RhdGUgPSAwO1xuICAgICAgICAvKiogQHR5cGUgeyFib29sZWFufSAqL1xuICAgICAgICB0aGlzLl9oYW5kbGVkID0gZmFsc2U7XG4gICAgICAgIC8qKiBAdHlwZSB7UHJvbWlzZXx1bmRlZmluZWR9ICovXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAvKiogQHR5cGUgeyFBcnJheTwhRnVuY3Rpb24+fSAqL1xuICAgICAgICB0aGlzLl9kZWZlcnJlZHMgPSBbXTtcblxuICAgICAgICBkb1Jlc29sdmUoZm4sIHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZShzZWxmLCBkZWZlcnJlZCkge1xuICAgICAgICB3aGlsZSAoc2VsZi5fc3RhdGUgPT09IDMpIHtcbiAgICAgICAgICAgIHNlbGYgPSBzZWxmLl92YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5fc3RhdGUgPT09IDApIHtcbiAgICAgICAgICAgIHNlbGYuX2RlZmVycmVkcy5wdXNoKGRlZmVycmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgUHJvbWlzZS5faW1tZWRpYXRlRm4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgY2IgPSBzZWxmLl9zdGF0ZSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcbiAgICAgICAgICAgIGlmIChjYiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIChzZWxmLl9zdGF0ZSA9PT0gMSA/IHJlc29sdmUgOiByZWplY3QpKGRlZmVycmVkLnByb21pc2UsIHNlbGYuX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcmV0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXQgPSBjYihzZWxmLl92YWx1ZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGRlZmVycmVkLnByb21pc2UsIGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoZGVmZXJyZWQucHJvbWlzZSwgcmV0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZShzZWxmLCBuZXdWYWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gUHJvbWlzZSBSZXNvbHV0aW9uIFByb2NlZHVyZTogaHR0cHM6Ly9naXRodWIuY29tL3Byb21pc2VzLWFwbHVzL3Byb21pc2VzLXNwZWMjdGhlLXByb21pc2UtcmVzb2x1dGlvbi1wcm9jZWR1cmVcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gc2VsZilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIHByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXRzZWxmLicpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoZW4gPSBuZXdWYWx1ZS50aGVuO1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSAzO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmaW5hbGUoc2VsZik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvUmVzb2x2ZShiaW5kKHRoZW4sIG5ld1ZhbHVlKSwgc2VsZik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IDE7XG4gICAgICAgICAgICBzZWxmLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgZmluYWxlKHNlbGYpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3Qoc2VsZiwgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWplY3Qoc2VsZiwgbmV3VmFsdWUpIHtcbiAgICAgICAgc2VsZi5fc3RhdGUgPSAyO1xuICAgICAgICBzZWxmLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICBmaW5hbGUoc2VsZik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluYWxlKHNlbGYpIHtcbiAgICAgICAgaWYgKHNlbGYuX3N0YXRlID09PSAyICYmIHNlbGYuX2RlZmVycmVkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIFByb21pc2UuX2ltbWVkaWF0ZUZuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5faGFuZGxlZCkge1xuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLl91bmhhbmRsZWRSZWplY3Rpb25GbihzZWxmLl92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc2VsZi5fZGVmZXJyZWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBoYW5kbGUoc2VsZiwgc2VsZi5fZGVmZXJyZWRzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLl9kZWZlcnJlZHMgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIEhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpIHtcbiAgICAgICAgdGhpcy5vbkZ1bGZpbGxlZCA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogbnVsbDtcbiAgICAgICAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWtlIGEgcG90ZW50aWFsbHkgbWlzYmVoYXZpbmcgcmVzb2x2ZXIgZnVuY3Rpb24gYW5kIG1ha2Ugc3VyZVxuICAgICAqIG9uRnVsZmlsbGVkIGFuZCBvblJlamVjdGVkIGFyZSBvbmx5IGNhbGxlZCBvbmNlLlxuICAgICAqXG4gICAgICogTWFrZXMgbm8gZ3VhcmFudGVlcyBhYm91dCBhc3luY2hyb255LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvUmVzb2x2ZShmbiwgc2VsZikge1xuICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm4oXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc2VsZiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZWplY3Qoc2VsZiwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgcmVqZWN0KHNlbGYsIGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24ob25SZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xuICAgIH07XG5cbiAgICBQcm9taXNlLnByb3RvdHlwZS50aGVuID0gZnVuY3Rpb24ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB2YXIgcHJvbSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKG5vb3ApO1xuXG4gICAgICAgIGhhbmRsZSh0aGlzLCBuZXcgSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbSkpO1xuICAgICAgICByZXR1cm4gcHJvbTtcbiAgICB9O1xuXG4gICAgUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZpbmFsbHlDb25zdHJ1Y3RvcjtcblxuICAgIFByb21pc2UuYWxsID0gZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGlmICghYXJyIHx8IHR5cGVvZiBhcnIubGVuZ3RoID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlLmFsbCBhY2NlcHRzIGFuIGFycmF5Jyk7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHJldHVybiByZXNvbHZlKFtdKTtcbiAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVzKGksIHZhbCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhlbiA9IHZhbC50aGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzKGksIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXMoaSwgYXJnc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBQcm9taXNlLnJlc29sdmUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgUHJvbWlzZS5yZWplY3QgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICByZWplY3QodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgUHJvbWlzZS5yYWNlID0gZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWx1ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXNbaV0udGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4vLyBVc2UgcG9seWZpbGwgZm9yIHNldEltbWVkaWF0ZSBmb3IgcGVyZm9ybWFuY2UgZ2FpbnNcbiAgICBQcm9taXNlLl9pbW1lZGlhdGVGbiA9XG4gICAgICAgICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICBmdW5jdGlvbihmbikge1xuICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZShmbik7XG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICBmdW5jdGlvbihmbikge1xuICAgICAgICAgICAgc2V0VGltZW91dEZ1bmMoZm4sIDApO1xuICAgICAgICB9O1xuXG4gICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uRm4gPSBmdW5jdGlvbiBfdW5oYW5kbGVkUmVqZWN0aW9uRm4oZXJyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246JywgZXJyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIEBzdXBwcmVzcyB7dW5kZWZpbmVkVmFyc30gKi9cbiAgICB2YXIgZ2xvYmFsTlMgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIHRoZSBvbmx5IHJlbGlhYmxlIG1lYW5zIHRvIGdldCB0aGUgZ2xvYmFsIG9iamVjdCBpc1xuICAgICAgICAvLyBgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKWBcbiAgICAgICAgLy8gSG93ZXZlciwgdGhpcyBjYXVzZXMgQ1NQIHZpb2xhdGlvbnMgaW4gQ2hyb21lIGFwcHMuXG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWw7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QnKTtcbiAgICB9KSgpO1xuXG4gICAgaWYgKCEoJ1Byb21pc2UnIGluIGdsb2JhbE5TKSkge1xuICAgICAgICBnbG9iYWxOU1snUHJvbWlzZSddID0gUHJvbWlzZTtcbiAgICB9IGVsc2UgaWYgKCFnbG9iYWxOUy5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddKSB7XG4gICAgICAgIGdsb2JhbE5TLlByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmaW5hbGx5Q29uc3RydWN0b3I7XG4gICAgfVxuXG59KSkpOyIsIk51bWJlci5pc0ludGVnZXIgPSBOdW1iZXIuaXNJbnRlZ2VyIHx8IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICBpc0Zpbml0ZSh2YWx1ZSkgJiZcbiAgICAgICAgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufTsiLCJcbi8qIEV4YW1wbGVcblxuY29uc3QgaGVhZGVySW1hZ2VTbGlkZXJTZXR0aW5nID0gbmV3IFNsaWRlclByb2plY3RvclNldHRpbmcoe1xuICAgIHNsaWRlclByb2plY3RvcklkOiAnaGVhZGVyLWltYWdlLXNsaWRlcicsXG4gICAgc2xpZGVRdWVyeTogJyNoZWFkZXItaW1hZ2Utc2xpZGVyIC5wbGFjZWhvbGRlciBmaWd1cmUnLFxuICAgIGRvdHM6ICcjaGVhZGVyLWltYWdlLXNsaWRlciAuc2xpZGVyLW5hdmlnYXRpb24tbGFiZWxzIC5uYXZpZ2F0aW9uIHNwYW4nLFxuICAgIGF1dG9TbGlkZXI6IHRydWUsXG4gICAgc2xpZGVySW50ZXJ2YWw6IDQwMDBcbn0pO1xuaGVhZGVySW1hZ2VTbGlkZXJTZXR0aW5nID0gaGVhZGVySW1hZ2VTbGlkZXJTZXR0aW5nLnByZXBhcmVQYXJhbWV0ZXJzKCk7XG5cbmNvbnN0IGhlYWRlckltYWdlU2xpZGVyID0gbmV3IFNsaWRlclByb2plY3RvcihoZWFkZXJJbWFnZVNsaWRlclNldHRpbmcpLmluaXQoKTtcblxuICovXG5cblxubGV0IFNsaWRlcnMgPSBbXTtcblxuY29uc3Qgc2xpZGVyQ29udGFpbmVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy1zbGlkZXInKTtcbmNvbnN0IHNsaWRlckNvbnRhaW5lcnNMZW5ndGggPSBzbGlkZXJDb250YWluZXJzLmxlbmd0aDtcblxuZm9yKGxldCBpID0wOyBpIDwgc2xpZGVyQ29udGFpbmVyc0xlbmd0aDsgaSsrKXtcblxuICAgIGNvbnN0IHNsaWRlciA9IHNsaWRlckNvbnRhaW5lcnNbaV07XG4gICAgY29uc3Qgc2xpZGVySWQgPSBzbGlkZXIuZ2V0QXR0cmlidXRlKCdpZCcpO1xuXG4gICAgaWYoc2xpZGVySWQgIT09IG51bGwpe1xuXG4gICAgICAgIGNvbnN0IFNsaWRlcnNldHRpbmcgPSBuZXcgU2xpZGVyU2V0dGluZyh7XG4gICAgICAgICAgICBzbGlkZXJJZDogc2xpZGVySWQsXG4gICAgICAgICAgICBzbGlkZVF1ZXJ5OiAnIycgKyBzbGlkZXJJZCArJyAuanMtc2xpZGVyLXNsaWRlJyxcbiAgICAgICAgICAgIG5hdmlnYXRpb25CdXR0b25zOiAnIycgKyBzbGlkZXJJZCArJyAuanMtc2xpZGVyLWJ1dHRvbicsXG4gICAgICAgICAgICBkb3RzOiAnIycgKyBzbGlkZXJJZCArJyAuanMtc2xpZGVyLWluZGljYXRvcicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIFNsaWRlcnMucHVzaCggbmV3IFNsaWRlcihTbGlkZXJzZXR0aW5nLnByZXBhcmVQYXJhbWV0ZXJzKCkpLmluaXQoKSApO1xuICAgIH1cbiAgICBlbHNlIGNvbnNvbGUubG9nKCdBbiBpbWFnZSBzbGlkZXIgaGFzIG5vIGlkLi4uJyk7XG59XG5cblxuZnVuY3Rpb24gU2xpZGVyU2V0dGluZyhzZXR0aW5nc09iamVjdCkge1xuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLnNsaWRlcklkID0gJyc7XG4gICAgdGhpcy5kZWZpbmVkUHJldmlvdXNOZXh0ID0gdHJ1ZTtcbiAgICB0aGlzLmF1dG9TbGlkZXIgPSBmYWxzZTtcbiAgICB0aGlzLnNsaWRlckludGVydmFsID0gNDAwMDtcbiAgICB0aGlzLm5hdmlnYXRpb25CdXR0b25zID0gJyc7XG4gICAgdGhpcy5kb3RzID0gJyc7XG4gICAgdGhpcy5zbGlkZVF1ZXJ5ID0gJyc7XG5cbiAgICB0aGlzLnNldFNsaWRlcklkID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICB0aGlzLnNsaWRlcklkID0gc3RyaW5nO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHRoaXMuc2V0RGVmaW5lZFByZXZpb3VzTmV4dCA9IGZ1bmN0aW9uIChib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZGVmaW5lZFByZXZpb3VzTmV4dCA9IGJvb2xlYW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgdGhpcy5zZXRBdXRvU2xpZGVyID0gZnVuY3Rpb24gKGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5hdXRvU2xpZGVyID0gYm9vbGVhbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLnNldFNsaWRlckludGVydmFsID0gZnVuY3Rpb24gKGludGVnZXIpIHtcbiAgICAgICAgdGhpcy5zbGlkZXJJbnRlcnZhbCA9IGludGVnZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgdGhpcy5zZXRTbGlkZVF1ZXJ5ID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICB0aGlzLnNsaWRlUXVlcnkgPSBzdHJpbmc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgdGhpcy5zZXROYXZpZ2F0aW9uQnV0dG9ucyA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQnV0dG9ucyA9IHN0cmluZztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLnNldERvdHMgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZG90cyA9IHN0cmluZztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLmdldFNsaWRlcklkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXJJZDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0RGVmaW5lZFByZXZpb3VzTmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmaW5lZFByZXZpb3VzTmV4dDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0QXV0b1NsaWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0b1NsaWRlcjtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2xpZGVySW50ZXJ2YWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlckludGVydmFsO1xuICAgIH07XG4gICAgdGhpcy5nZXRTbGlkZVF1ZXJ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZVF1ZXJ5O1xuICAgIH07XG4gICAgdGhpcy5nZXROYXZpZ2F0aW9uQnV0dG9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvbkJ1dHRvbnM7XG4gICAgfTtcbiAgICB0aGlzLmdldERvdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvdHM7XG4gICAgfTtcblxuICAgIC8vIEludmVydCBzZXR0ZXJzIHRvIGdldHRlcnNcbiAgICB0aGlzLnByZXBhcmVQYXJhbWV0ZXJzID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzbGlkZXJJZDogc2VsZi5nZXRTbGlkZXJJZCgpLFxuICAgICAgICAgICAgZGVmaW5lZFByZXZpb3VzTmV4dDogc2VsZi5nZXREZWZpbmVkUHJldmlvdXNOZXh0KCksXG4gICAgICAgICAgICBhdXRvU2xpZGVyOiBzZWxmLmdldEF1dG9TbGlkZXIoKSxcbiAgICAgICAgICAgIHNsaWRlckludGVydmFsOiBzZWxmLmdldFNsaWRlckludGVydmFsKCksXG4gICAgICAgICAgICBuYXZpZ2F0aW9uQnV0dG9uczogc2VsZi5nZXROYXZpZ2F0aW9uQnV0dG9ucygpLFxuICAgICAgICAgICAgZG90czogc2VsZi5nZXREb3RzKCksXG4gICAgICAgICAgICBzbGlkZVF1ZXJ5OiBzZWxmLmdldFNsaWRlUXVlcnkoKVxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgLy8gTWFzcyBhc3NpZ24gc2V0dGluZ3NcbiAgICB0aGlzLmZpbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIE9iamVjdC5rZXlzKHNldHRpbmdzT2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgLy8gICAgIHNlbGZba2V5XSA9IHNldHRpbmdzT2JqZWN0W2tleV07XG4gICAgICAgIC8vIH0pO1xuXG4gICAgICAgIGNvbnN0IHNldHRpbmdzT2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzKHNldHRpbmdzT2JqZWN0KTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3NPYmplY3RMZW5ndGggPSBzZXR0aW5nc09iamVjdEtleXMubGVuZ3RoO1xuXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBzZXR0aW5nc09iamVjdExlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNldHRpbmdzT2JqZWN0S2V5c1tpXTtcbiAgICAgICAgICAgIHNlbGZba2V5XSA9IHNldHRpbmdzT2JqZWN0W2tleV07XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICB0aGlzLmZpbGwoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHNsaWRlcklkOiBzZWxmLnNldFNsaWRlcklkLFxuICAgICAgICBkZWZpbmVkUHJldmlvdXNOZXh0OiBzZWxmLnNldERlZmluZWRQcmV2aW91c05leHQsXG4gICAgICAgIGF1dG9TbGlkZXI6IHNlbGYuc2V0QXV0b1NsaWRlcixcbiAgICAgICAgc2xpZGVySW50ZXJ2YWw6IHNlbGYuc2V0U2xpZGVySW50ZXJ2YWwsXG4gICAgICAgIG5hdmlnYXRpb25CdXR0b25zOiBzZWxmLnNldE5hdmlnYXRpb25CdXR0b25zLFxuICAgICAgICBkb3RzOiBzZWxmLnNldERvdHMsXG4gICAgICAgIHNsaWRlUXVlcnk6IHNlbGYuc2V0U2xpZGVRdWVyeSxcbiAgICAgICAgcHJlcGFyZVBhcmFtZXRlcnM6IHNlbGYucHJlcGFyZVBhcmFtZXRlcnNcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBTbGlkZXIoc2V0dGluZ3MpIHtcblxuICAgIC8vRGVmaW5lIFNsaWRlciBvYmplY3RcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLnNsaWRlck9iamVjdCA9ICcnO1xuXG4gICAgLy9TbGlkZVBhcmFtZXRlcnNcbiAgICB0aGlzLmFjdGl2ZVNsaWRlSWQgPSAwO1xuICAgIHRoaXMucHJldmlvdXNTbGlkZUlkID0gMDtcbiAgICB0aGlzLm5leHRTbGlkZUlkID0gMDtcbiAgICB0aGlzLmF2YWlsYWJsZVNsaWRlcyA9IDE7XG4gICAgdGhpcy5zbGlkZXMgPSBbXTtcbiAgICB0aGlzLmF1dG9TbGlkZXJJbnRlcnZhbCA9IG51bGw7XG5cbiAgICB0aGlzLnNldHRpbmdzID0ge307XG5cbiAgICB0aGlzLmluaXQgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLy9BcHBlbmQgc2V0dGluZ3MgdG8gc2VsZlxuICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG5cbiAgICAgICAgLy9Bc3NpZ24gbmVlZGVkIGVsZW1lbnRzIGFuZCBjYWxjdWxhdGlvbnNcbiAgICAgICAgdGhpcy5zbGlkZXJPYmplY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNldHRpbmdzLnNsaWRlcklkKTtcbiAgICAgICAgdGhpcy5zbGlkZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuc2V0dGluZ3Muc2xpZGVRdWVyeSk7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlU2xpZGVzID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xuICAgICAgICB0aGlzLmFjdGl2ZVNsaWRlSWQgPSAwO1xuXG4gICAgICAgIC8vRGVmaW5lIHByZXZpb3VzIGFuZCBuZXh0IGlmIHdlIHdhbnQgdG8gdXNlIHRob3NlXG4gICAgICAgIGlmIChzZWxmLnNldHRpbmdzLmRlZmluZWRQcmV2aW91c05leHQpIHRoaXMuc2V0UHJldmlvdXNBbmROZXh0U2xpZGUoKTtcblxuICAgICAgICAvLyBTZXQgYWN0aXZlIHNsaWRlIChhbmQgcG9zc2libGUgcHJldmlvdXMgYW5kIG5leHQgY2xhc3NlcylcbiAgICAgICAgdGhpcy5zZXRTbGlkZSgpO1xuXG4gICAgICAgIC8vIFN3aXBlIGludGVyYWN0aW9uXG4gICAgICAgIGNvbnN0IHN3aXBlR2VzdHVyZXMgPSBuZXcgSGFtbWVyKHRoaXMuc2xpZGVyT2JqZWN0KTtcbiAgICAgICAgc3dpcGVHZXN0dXJlcy5vbignc3dpcGVsZWZ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5yZXNldEF1dG9TbGlkZXIoKTtcbiAgICAgICAgICAgIHNlbGYubmV4dFNsaWRlKCk7XG4gICAgICAgICAgICBzZWxmLnNldFNsaWRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzd2lwZUdlc3R1cmVzLm9uKCdzd2lwZXJpZ2h0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5yZXNldEF1dG9TbGlkZXIoKTtcbiAgICAgICAgICAgIHNlbGYucHJldmlvdXNTbGlkZSgpO1xuICAgICAgICAgICAgc2VsZi5zZXRTbGlkZSgpO1xuICAgICAgICB9KTtcblxuXG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubmF2aWdhdGlvbkJ1dHRvbnMgIT09ICcnKSB7XG5cbiAgICAgICAgICAgIC8vIENsaWNrIGludGVyYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uQnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZXR0aW5ncy5uYXZpZ2F0aW9uQnV0dG9ucyk7XG4gICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uQnV0dG9uc0xlbmd0aCA9IG5hdmlnYXRpb25CdXR0b25zLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBuYXZpZ2F0aW9uQnV0dG9uc0xlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uQnV0dG9uID0gbmF2aWdhdGlvbkJ1dHRvbnNbaV07XG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGlja05hdmlnYXRpb25CdXR0b24odGhpcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRvdHMgIT09ICcnKSB7XG4gICAgICAgICAgICAvLyBDbGljayBpbnRlcmFjdGlvblxuICAgICAgICAgICAgY29uc3QgZG90cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZXR0aW5ncy5kb3RzKTtcbiAgICAgICAgICAgIGNvbnN0IGRvdHNMZW5ndGggPSBkb3RzLmxlbmd0aDtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuc2V0dGluZ3MuZG90cyk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhkb3RzKTtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBkb3RzTGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvdCA9IGRvdHNbaV07XG4gICAgICAgICAgICAgICAgZG90LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWNrRG90KHRoaXMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLmF1dG9TbGlkZXIoKTtcbiAgICB9O1xuXG5cbiAgICB0aGlzLmF1dG9TbGlkZXIgPSBmdW5jdGlvbiAoKXtcblxuICAgICAgICBpZih0aGlzLmF1dG9TbGlkZXJJbnRlcnZhbCAhPT0gbnVsbCkgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TbGlkZXJJbnRlcnZhbCk7XG5cbiAgICAgICAgaWYodGhpcy5zZXR0aW5ncy5hdXRvU2xpZGVyICYmIE51bWJlci5pc0ludGVnZXIodGhpcy5zZXR0aW5ncy5zbGlkZXJJbnRlcnZhbCkgKXtcblxuICAgICAgICAgICAgdGhpcy5hdXRvU2xpZGVySW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXh0U2xpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRTbGlkZSgpO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMuc2V0dGluZ3Muc2xpZGVySW50ZXJ2YWxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5yZXNldEF1dG9TbGlkZXIgPSBzZWxmLmF1dG9TbGlkZXI7XG5cblxuICAgIHRoaXMubmV4dFNsaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVNsaWRlSWQrKztcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlU2xpZGVJZCA+PSB0aGlzLmF2YWlsYWJsZVNsaWRlcykgdGhpcy5hY3RpdmVTbGlkZUlkID0gMDtcblxuICAgICAgICBpZiAoc2VsZi5zZXR0aW5ncy5kZWZpbmVkUHJldmlvdXNOZXh0KSB0aGlzLnNldFByZXZpb3VzQW5kTmV4dFNsaWRlKCk7XG4gICAgfTtcblxuICAgIHRoaXMucHJldmlvdXNTbGlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTbGlkZUlkLS07XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVNsaWRlSWQgPCAwKSB0aGlzLmFjdGl2ZVNsaWRlSWQgPSB0aGlzLmF2YWlsYWJsZVNsaWRlcyAtIDE7XG5cbiAgICAgICAgaWYgKHNlbGYuc2V0dGluZ3MuZGVmaW5lZFByZXZpb3VzTmV4dCkgdGhpcy5zZXRQcmV2aW91c0FuZE5leHRTbGlkZSgpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldFByZXZpb3VzQW5kTmV4dFNsaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5leHRTbGlkZUlkID0gdGhpcy5hY3RpdmVTbGlkZUlkICsgMTtcbiAgICAgICAgaWYgKHRoaXMubmV4dFNsaWRlSWQgPj0gdGhpcy5hdmFpbGFibGVTbGlkZXMpIHRoaXMubmV4dFNsaWRlSWQgPSAwO1xuXG4gICAgICAgIHRoaXMucHJldmlvdXNTbGlkZUlkID0gdGhpcy5hY3RpdmVTbGlkZUlkIC0gMTtcbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNTbGlkZUlkIDwgMCkgdGhpcy5wcmV2aW91c1NsaWRlSWQgPSB0aGlzLmF2YWlsYWJsZVNsaWRlcyAtIDE7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0U2xpZGUgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBmb3JtIGVsZW1lbnRzXG4gICAgICAgIGNvbnN0IHNsaWRlc0xlbmd0aCA9IHNlbGYuc2xpZGVzLmxlbmd0aDtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHNsaWRlc0xlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IHNsaWRlID0gc2VsZi5zbGlkZXNbaV07XG5cbiAgICAgICAgICAgIHNsaWRlLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjsgLy8gTmVlZGVkIGZvciBzd2lwZSBmdW5jdGlvbmFsaXR5XG5cbiAgICAgICAgICAgIC8vIENvbnZlcnQgZGF0YSBzZXQgYXR0cmlidXRlIHRvIGRlc2lyZWQgdHlwZVxuICAgICAgICAgICAgY29uc3Qgc2xpZGVPcmRlciA9IHBhcnNlSW50KHNsaWRlLmdldEF0dHJpYnV0ZSgnZGF0YS1vcmRlcicpKTtcblxuICAgICAgICAgICAgLy8gUmVtb3ZlIGFuZCBzZXQgYWN0aXZlIGZvciBhbGwgc2xpZGVzXG4gICAgICAgICAgICBpZiAoc2xpZGVPcmRlciAhPT0gc2VsZi5hY3RpdmVTbGlkZUlkKSBzbGlkZS5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgIGVsc2Ugc2xpZGUuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyk7XG5cbiAgICAgICAgICAgIC8vIElmIHdlIHVzZSB0aGUgcHJldmlvdXMgYW5kIG5leHQsIGFsc28gc2V0IHRob3NlIGNsYXNzZXNcbiAgICAgICAgICAgIGlmIChzZWxmLnNldHRpbmdzLmRlZmluZWRQcmV2aW91c05leHQpIHtcblxuICAgICAgICAgICAgICAgIGlmIChzbGlkZU9yZGVyICE9PSBzZWxmLnByZXZpb3VzU2xpZGVJZCkgc2xpZGUuY2xhc3NMaXN0LnJlbW92ZSgncHJldmlvdXMnKTtcbiAgICAgICAgICAgICAgICBlbHNlIHNsaWRlLmNsYXNzTGlzdC5hZGQoJ3ByZXZpb3VzJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2xpZGVPcmRlciAhPT0gc2VsZi5uZXh0U2xpZGVJZCkgc2xpZGUuY2xhc3NMaXN0LnJlbW92ZSgnbmV4dCcpO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2xpZGUuY2xhc3NMaXN0LmFkZCgnbmV4dCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlbGYuc2V0dGluZ3MuZG90cyAhPT0gJycpIHsgc2VsZi5zZXRBY3RpdmVEb3QoKTsgfVxuICAgIH07XG5cbiAgICB0aGlzLmNsaWNrTmF2aWdhdGlvbkJ1dHRvbiA9IGZ1bmN0aW9uIChuYXZCdXR0b24pIHtcbiAgICAgICAgc2VsZi5hY3RpdmVTbGlkZUlkID0gcGFyc2VJbnQobmF2QnV0dG9uLmdldEF0dHJpYnV0ZSgnZGF0YS1vcmRlcicpKTtcbiAgICAgICAgaWYgKHNlbGYuc2V0dGluZ3MuZGVmaW5lZFByZXZpb3VzTmV4dCkgc2VsZi5zZXRQcmV2aW91c0FuZE5leHRTbGlkZSgpO1xuICAgICAgICBzZWxmLnNldFNsaWRlKCk7XG5cbiAgICAgICAgY29uc3QgbmV4dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZi5zZXR0aW5ncy5uYXZpZ2F0aW9uQnV0dG9ucyArICcubmV4dCcpO1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZi5zZXR0aW5ncy5uYXZpZ2F0aW9uQnV0dG9ucyArICcucHJldmlvdXMnKTtcblxuICAgICAgICBuZXh0LnNldEF0dHJpYnV0ZSgnZGF0YS1vcmRlcicsIHNlbGYubmV4dFNsaWRlSWQpO1xuICAgICAgICBwcmV2aW91cy5zZXRBdHRyaWJ1dGUoJ2RhdGEtb3JkZXInLCBzZWxmLnByZXZpb3VzU2xpZGVJZCk7XG5cbiAgICAgICAgc2VsZi5yZXNldEF1dG9TbGlkZXIoKTtcblxuICAgICAgICAvLyBuZXh0LnF1ZXJ5U2VsZWN0b3IoJ3AnKS5pbm5lckhUTUwgPSBzZWxmLnNsaWRlc1tzZWxmLm5leHRTbGlkZUlkXS5kYXRhc2V0Lm5hbWU7XG4gICAgICAgIC8vIHByZXZpb3VzLnF1ZXJ5U2VsZWN0b3IoJ3AnKS5pbm5lckhUTUwgPSBzZWxmLnNsaWRlc1tzZWxmLnByZXZpb3VzU2xpZGVJZF0uZGF0YXNldC5uYW1lO1xuICAgIH07XG5cbiAgICB0aGlzLmNsaWNrRG90ID0gZnVuY3Rpb24gKGNsaWNrZWREb3QpIHtcbiAgICAgICAgc2VsZi5hY3RpdmVTbGlkZUlkID0gcGFyc2VJbnQoY2xpY2tlZERvdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JkZXInKSk7XG4gICAgICAgIHNlbGYuc2V0U2xpZGUoKTtcbiAgICAgICAgc2VsZi5yZXNldEF1dG9TbGlkZXIoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRBY3RpdmVEb3QgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgZG90cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5zZXR0aW5ncy5kb3RzKTtcbiAgICAgICAgY29uc3QgZG90c0xlbmd0aCA9IGRvdHMubGVuZ3RoO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgZG90c0xlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IGRvdCA9IGRvdHNbaV07XG4gICAgICAgICAgICBkb3RPcmRlciA9IHBhcnNlSW50KGRvdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JkZXInKSk7XG5cbiAgICAgICAgICAgIGlmKGRvdE9yZGVyICE9PSBzZWxmLmFjdGl2ZVNsaWRlSWQpIHtcbiAgICAgICAgICAgICAgICBkb3QuY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgZG90LnRhYkluZGV4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvdC5jbGFzc0xpc3QuYWRkKCdpcy1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBkb3QudGFiSW5kZXggPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59IiwidmFyIHNjb3BlID0gKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYpIHx8XG4gICAgICAgICAgICB3aW5kb3c7XG52YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJUaW1lb3V0KTtcbn07XG5leHBvcnRzLnNldEludGVydmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldEludGVydmFsLCBzY29wZSwgYXJndW1lbnRzKSwgY2xlYXJJbnRlcnZhbCk7XG59O1xuZXhwb3J0cy5jbGVhclRpbWVvdXQgPVxuZXhwb3J0cy5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dCkge1xuICBpZiAodGltZW91dCkge1xuICAgIHRpbWVvdXQuY2xvc2UoKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbChzY29wZSwgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIHNldGltbWVkaWF0ZSBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGdsb2JhbCBvYmplY3RcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG4vLyBPbiBzb21lIGV4b3RpYyBlbnZpcm9ubWVudHMsIGl0J3Mgbm90IGNsZWFyIHdoaWNoIG9iamVjdCBgc2V0aW1tZWRpYXRlYCB3YXNcbi8vIGFibGUgdG8gaW5zdGFsbCBvbnRvLiAgU2VhcmNoIGVhY2ggcG9zc2liaWxpdHkgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlXG4vLyBgc2V0aW1tZWRpYXRlYCBsaWJyYXJ5LlxuZXhwb3J0cy5zZXRJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5zZXRJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuc2V0SW1tZWRpYXRlKTtcbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5jbGVhckltbWVkaWF0ZSk7XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCwgdW5kZWZpbmVkKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICBpZiAoZ2xvYmFsLnNldEltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5leHRIYW5kbGUgPSAxOyAvLyBTcGVjIHNheXMgZ3JlYXRlciB0aGFuIHplcm9cbiAgICB2YXIgdGFza3NCeUhhbmRsZSA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICB2YXIgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciByZWdpc3RlckltbWVkaWF0ZTtcblxuICAgIGZ1bmN0aW9uIHNldEltbWVkaWF0ZShjYWxsYmFjaykge1xuICAgICAgLy8gQ2FsbGJhY2sgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24oXCJcIiArIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgIC8vIENvcHkgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3JlIGFuZCByZWdpc3RlciB0aGUgdGFza1xuICAgICAgdmFyIHRhc2sgPSB7IGNhbGxiYWNrOiBjYWxsYmFjaywgYXJnczogYXJncyB9O1xuICAgICAgdGFza3NCeUhhbmRsZVtuZXh0SGFuZGxlXSA9IHRhc2s7XG4gICAgICByZWdpc3RlckltbWVkaWF0ZShuZXh0SGFuZGxlKTtcbiAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuKHRhc2spIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdGFzay5jYWxsYmFjaztcbiAgICAgICAgdmFyIGFyZ3MgPSB0YXNrLmFyZ3M7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiBcIldhaXQgdW50aWwgYW55IGludm9jYXRpb25zIG9mIHRoaXMgYWxnb3JpdGhtIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgY29tcGxldGVkLlwiXG4gICAgICAgIC8vIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIGEgdGFzaywgd2UnbGwgbmVlZCB0byBkZWxheSB0aGlzIGludm9jYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyBcInRvbyBtdWNoIHJlY3Vyc2lvblwiIGVycm9yLlxuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBydW4odGFzayk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcnVuSWZQcmVzZW50KGhhbmRsZSk7IH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKG1lc3NhZ2VQcmVmaXggKyBoYW5kbGUsIFwiKlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZShoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gdHlwZW9mIGdsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMgOiBnbG9iYWwgOiBzZWxmKSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIEdvb2dsZSBNYXBzIGhhbmRsZXJcbiAgICAtIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L2FkZGluZy1hLWdvb2dsZS1tYXBcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5jb25zdCBNYXBzSGFuZGxlciA9IHtcblxuICAgIG1hcDogJycsXG4gICAga2V5OiAnQUl6YVN5QnBlcDA5dnV4VXFJSW8zWjRmWThiaF9zNEU0cU5yMXh3JyxcbiAgICBsb2NhdGlvbjoge2xhdDogNTEuMjU1OTcyLCBsbmc6IDUuNTkyMDgzfSxcbiAgICBzdHlsaW5nOiAnJyxcblxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gR2V0IG1hcCBieSBpZFxuICAgICAgICBNYXBzSGFuZGxlci5tYXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtZ29vZ2xlLW1hcCcpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGEgbWFwIGlzIGRlZmluZWRcbiAgICAgICAgaWYgKGlzc2V0KE1hcHNIYW5kbGVyLm1hcCkpIHtcblxuICAgICAgICAgICAgaWYoTWFwc0hhbmRsZXIubWFwLmhhc0F0dHJpYnV0ZSgnZGF0YS1nb29nbGUtbGF0JykpIE1hcHNIYW5kbGVyLmxvY2F0aW9uLmxhdCA9IHBhcnNlRmxvYXQoTWFwc0hhbmRsZXIubWFwLmdldEF0dHJpYnV0ZSgnZGF0YS1nb29nbGUtbGF0JykpO1xuICAgICAgICAgICAgaWYoTWFwc0hhbmRsZXIubWFwLmhhc0F0dHJpYnV0ZSgnZGF0YS1nb29nbGUtbG5nJykpIE1hcHNIYW5kbGVyLmxvY2F0aW9uLmxuZyA9IHBhcnNlRmxvYXQoTWFwc0hhbmRsZXIubWFwLmdldEF0dHJpYnV0ZSgnZGF0YS1nb29nbGUtbG5nJykpO1xuXG4gICAgICAgICAgICBNYXBzSGFuZGxlci5zZXRDdXN0b21TdHlsaW5nKCk7XG5cbiAgICAgICAgICAgIC8vIFNlZSBpZiBnb29nbGUgdmFyaWFibGUgZXhpc3RzXG4gICAgICAgICAgICBpZiAodHlwZW9mKGdvb2dsZSkgPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mKGdvb2dsZS5tYXBzKSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIC8vIExvYWQgZXh0ZXJuYWwgc2NyaXB0XG4gICAgICAgICAgICAgICAgZ2V0U2NyaXB0KCdodHRwczovL21hcHMuZ29vZ2xlYXBpcy5jb20vbWFwcy9hcGkvanM/a2V5PScgKyBNYXBzSGFuZGxlci5rZXksIE1hcHNIYW5kbGVyLmRyYXdNYXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBNYXBzSGFuZGxlci5kcmF3TWFwKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGRyYXdNYXA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgbWFwXG4gICAgICAgIGxldCBtYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKE1hcHNIYW5kbGVyLm1hcCwge1xuICAgICAgICAgICAgem9vbTogMTQsXG4gICAgICAgICAgICBjZW50ZXI6IE1hcHNIYW5kbGVyLmxvY2F0aW9uLFxuICAgICAgICAgICAgZGlzYWJsZURlZmF1bHRVSTogdHJ1ZSxcbiAgICAgICAgICAgIHN0eWxlczogTWFwc0hhbmRsZXIuc3R5bGluZ1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgY29udGVudFN0cmluZyA9ICc8ZGl2PjxwPlBsYW4gZWVuIHJvdXRlIG9wICcrXG4gICAgICAgICAgICAnPGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cImh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy9kaXIvP2FwaT0xJmRlc3RpbmF0aW9uPScgKyBNYXBzSGFuZGxlci5sb2NhdGlvbi5sYXQgKyAnLCcgKyBNYXBzSGFuZGxlci5sb2NhdGlvbi5sbmcgKydcIiBjbGFzcz1cImxpbmtcIj4nK1xuICAgICAgICAgICAgJ2dvb2dsZSBtYXBzPC9hPiAnK1xuICAgICAgICAgICAgJzwvcD48L2Rpdj4nO1xuXG4gICAgICAgIHZhciBpbmZvd2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coe1xuICAgICAgICAgICAgY29udGVudDogY29udGVudFN0cmluZ1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBZGQgYSBtYXJrZXJcbiAgICAgICAgbGV0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICAgICAgcG9zaXRpb246IE1hcHNIYW5kbGVyLmxvY2F0aW9uLFxuICAgICAgICAgICAgbWFwOiBtYXAsXG4gICAgICAgICAgICAvLyBsYWJlbDogJ0EnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1hcmtlci5hZGRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGluZm93aW5kb3cub3BlbihtYXAsIG1hcmtlcik7XG4gICAgICAgIH0pO1xuXG4gICAgfSxcblxuICAgIHNldEN1c3RvbVN0eWxpbmc6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBNYXBzSGFuZGxlci5zdHlsaW5nID1cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJ3YXRlclwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2U5ZTllOVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDE3XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcImxhbmRzY2FwZVwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2Y1ZjVmNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDIwXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInJvYWQuaGlnaHdheVwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnkuZmlsbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZmZmZmZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogMTdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicm9hZC5oaWdod2F5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeS5zdHJva2VcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2ZmZmZmZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDI5XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDAuMlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJyb2FkLmFydGVyaWFsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZmZmZmZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogMThcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicm9hZC5sb2NhbFwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2ZmZmZmZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDE2XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInBvaVwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2Y1ZjVmNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDIxXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInBvaS5wYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZGVkZWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogMjFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwibGFiZWxzLnRleHQuc3Ryb2tlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXNpYmlsaXR5XCI6IFwib25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2ZmZmZmZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDE2XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImxhYmVscy50ZXh0LmZpbGxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhdHVyYXRpb25cIjogMzZcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiMzMzMzMzNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiA0MFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJsYWJlbHMuaWNvblwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmlzaWJpbGl0eVwiOiBcIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInRyYW5zaXRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmMmYyZjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAxOVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJhZG1pbmlzdHJhdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnkuZmlsbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZmVmZWZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogMjBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwiYWRtaW5pc3RyYXRpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5LnN0cm9rZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZmVmZWZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogMTdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMS4yXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdO1xuXG4gICAgfVxufTtcblxuTWFwc0hhbmRsZXIuaW5pdCgpOyIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gfCBQcmV2ZW50IEJvdHMgaGFuZGxlclxuIHxcbiB8IFdlIG5hbWVkIHRoaXMgY2hvY29sYXRlIGZhY3RvcnkgYW5kIGJlbG9uZ2luZyBjb25mdXNpbmcganMgaG9va3NcbiB8IHRvIHByZXZlbnQgc21hcnQgYm90cyBmcm9tIGJsb2NraW5nIHRoZXNlIHZhcmlhYmxlIG9yIGZ1bmN0aW9ucy5cbiB8XG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgQ2hvY29sYXRlRmFjdG9yeSA9IHtcblxuICAgIGJhbm5lZFZpc2l0b3I6IFtdLFxuXG4gICAgLyoqIEdldCBhbGwgdGhlIGNob2NvbGF0ZSBmYWN0b3J5IGFuZCBzdGFydFxuICAgICAqICBMb29waW5nIHRocm91Z2ggdGhvc2Ugc3RhcnQgZmxhc2hpbmcgdGlja2V0c1xuICAgICAqL1xuICAgIGVudGVyOiBmdW5jdGlvbigpXG4gICAge1xuXG4gICAgICAgIGNvbnN0IGNob2NvbGF0ZUZhY3RvcmllcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy1jaG9jb2xhdGUtZmFjdG9yeScpO1xuXG4gICAgICAgIGlmKGlzc2V0KGNob2NvbGF0ZUZhY3Rvcmllcykpe1xuXG4gICAgICAgICAgICBjb25zdCBhbW91bnRPZkNob2NvbGF0ZUZhY3RvcmllcyA9IGNob2NvbGF0ZUZhY3Rvcmllcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgYW1vdW50T2ZDaG9jb2xhdGVGYWN0b3JpZXM7IGkrKyl7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBDaG9jb2xhdGVCYXIgPSBjaG9jb2xhdGVGYWN0b3JpZXNbaV07XG4gICAgICAgICAgICAgICAgQ2hvY29sYXRlRmFjdG9yeS5fZmxhc2hUaWNrZXQoQ2hvY29sYXRlQmFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBJZiBmYWN0b3J5IGhhcyBhIGdvbGRlbiB0aWNrZXRcbiAgICAgKiBUaGVuIHdlIGNhbiBtYWtlIHRoZW0gZ28gb24gdGhlIHRvdXIgaWYgdGhlcmUgaGFzIGJlZW4gY2xpY2sgb24gdGhlIHRpY2tldFxuICAgICAqXG4gICAgICogQHBhcmFtIGNob2NvbGF0ZUJhclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2ZsYXNoVGlja2V0OiBmdW5jdGlvbiAoY2hvY29sYXRlQmFyKSB7XG5cbiAgICAgICAgLy8gVHJ5IGdldCB0aGUgdGlja2V0IGZyb20gdGhlIGNob2NvbGF0ZUJhclxuICAgICAgICBjb25zdCBnb2xkZW5UaWNrZXQgPSBjaG9jb2xhdGVCYXIucXVlcnlTZWxlY3RvcignLmpzLWdvbGRlbi10aWNrZXQnKTtcblxuICAgICAgICAvLyBPbmx5IGNvbnRpbnVlIGlmIGNob2NvbGF0ZSBiYXIgaGFzIGEgZ29sZGVuIHRpY2tldFxuICAgICAgICBpZihpc3NldChnb2xkZW5UaWNrZXQpKXtcblxuICAgICAgICAgICAgZ29sZGVuVGlja2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIENob2NvbGF0ZUZhY3RvcnkuZW5qb3lUaGVUb3VyKGNob2NvbGF0ZUJhcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RvIGJhZCwgbm8gZ29sZGVuIHRpY2tldHMgaGFzIGJlZW4gZm91bmQuJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3RhcnQgdGhlIHRvdXIgdGhyb3VnaCB0aGUgZmFjdG9yeVxuICAgICAqIEFuZCBnZXQgdGhlIG5hbWVzIGFuZCBwcm9wZXJ0aWVzIG9mIHRoZSBtZW1iZXJzIG9mIHRoZSBncm91cFxuICAgICAqIElmIHRoZXJlIGFyZSBtZW1iZXJzIGluIHRoZSBncm91cCBvZiBjb3Vyc2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaG9jb2xhdGVGYWN0b3J5XG4gICAgICovXG4gICAgZW5qb3lUaGVUb3VyKGNob2NvbGF0ZUZhY3Rvcnkpe1xuXG4gICAgICAgIC8vIEFzayBmb3IgdGhlIHRvdXIgZ3JvdXBcbiAgICAgICAgY29uc3QgdG91ckdyb3VwID0gY2hvY29sYXRlRmFjdG9yeS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgdGV4dGFyZWEnKTtcblxuICAgICAgICBpZihpc3NldCh0b3VyR3JvdXApKXtcblxuICAgICAgICAgICAgLy8gRm9yIGVhY2ggdmlzaXRvciB3ZSB3YW50IGEgYmVsb25naW5nIE9vbXBhIExvb21wYVxuICAgICAgICAgICAgbGV0IG9vbXBhTG9vbXBhcyA9IHt9O1xuICAgICAgICAgICAgbGV0IGFtb3VudE9mT29tcGFMb29tcGFzID0gMDtcblxuICAgICAgICAgICAgY29uc3QgdG91ckdyb3VwU2l6ZSA9IHRvdXJHcm91cC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdG91ckdyb3VwU2l6ZTsgaSsrKXtcblxuICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgdmlzaXRvciBmcm9tIHRoZSBncm91cFxuICAgICAgICAgICAgICAgIGNvbnN0IHZpc2l0b3IgPSB0b3VyR3JvdXBbaV07XG5cbiAgICAgICAgICAgICAgICAvLyBBc2sgZm9yIGl0cyBuYW1lXG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaXRvck5hbWUgPSB2aXNpdG9yLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHZpc2l0b3IgaXMgYmFubmVkXG4gICAgICAgICAgICAgICAgaWYoIENob2NvbGF0ZUZhY3RvcnkuX2lzVmlzaXRvckJhbm5lZCh2aXNpdG9yTmFtZSkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgb29tcGFMb29tcGFzWyB2aXNpdG9yTmFtZSBdID0gQ2hvY29sYXRlRmFjdG9yeS5fZ2V0QXJyYW5nZW1lbnQodmlzaXRvcik7XG4gICAgICAgICAgICAgICAgYW1vdW50T2ZPb21wYUxvb21wYXMrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGluc3VyYW5jZSB0aGF0IHRoZXJlIGFyZSBvb21wYSBsb29tcGFzXG4gICAgICAgICAgICBpZihhbW91bnRPZk9vbXBhTG9vbXBhcyA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAvLyBTZW5kIHN1Ym1pdCByZXF1ZXN0XG4gICAgICAgICAgICBDaG9jb2xhdGVGYWN0b3J5Ll9maW5pc2hUb3VyKG9vbXBhTG9vbXBhcywgY2hvY29sYXRlRmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUbyBiYWQsIG5vIG1lbWJlcnMgdG8gdmlzaXQgdGhpcyBmYWN0b3J5JylcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0aGUgdmlzaXRvciBuYW1lIGlzbid0IGFsbG93XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmlzaXRvck5hbWVcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9pc1Zpc2l0b3JCYW5uZWQ6IGZ1bmN0aW9uKHZpc2l0b3JOYW1lKXtcbiAgICAgICAgaWYoQ2hvY29sYXRlRmFjdG9yeS5iYW5uZWRWaXNpdG9yLmluZGV4T2YodmlzaXRvck5hbWUpICE9PSAtMSl7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE1vc3QgZ2V0IHZpc2l0b3IgaGF2ZSBhIG5vcm1hbCBhcnJhbmdlbWVudFxuICAgICAqIEJ1dCBzb21ldGltZXMgdGhlcmUgYXJlIHNwZWNpYWwgY2FzZXNcbiAgICAgKiBMaWtlIGEgU2VsZWN0b3Igb3IgY2hlY2tib3hcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aXNpdG9yXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZ2V0QXJyYW5nZW1lbnQ6IGZ1bmN0aW9uKHZpc2l0b3IpXG4gICAge1xuXG4gICAgICAgIGNvbnN0IHZpc2l0b3JUeXBlID0gdmlzaXRvci5ub2RlTmFtZTtcblxuICAgICAgICBzd2l0Y2ggKHZpc2l0b3JUeXBlKSB7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB2aXNpdG9yLnZhbHVlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEZpbmlzaCB0aGUgdG91clxuICAgICAqIElmIHN1Y2Nlc3NmdWwgc2hvdyB0aGFua3MgbWVzc2FnZVxuICAgICAqIE9yIHNob3cgZGVmaW5lZCBlcnJvciBtZXNzYWdlIG9yIGZhbGxiYWNrXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3JvdXBcbiAgICAgKiBAcGFyYW0gY2hvY29sYXRlRmFjdG9yeVxuICAgICAqIEByZXR1cm5zIHsqfHZvaWR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZmluaXNoVG91cjogZnVuY3Rpb24oZ3JvdXAsIGNob2NvbGF0ZUZhY3RvcnkpXG4gICAge1xuICAgICAgICAvLyBBZGQgd2lsbGllIHRvIHRoZSBncm91cFxuICAgICAgICBncm91cCA9IENob2NvbGF0ZUZhY3RvcnkuX2FkZFdpbGxpZVdvbmthKGdyb3VwKTtcblxuICAgICAgICAvLyBHZXQgdGhlIGdhdGUgZm9yIGZpbmlzaCB0aGUgdG91clxuICAgICAgICBjb25zdCBnYXRlID0gJy9jb250YWN0L3Byb2Nlc3MnO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBBamF4LnBvc3QoZ2F0ZSwgZ3JvdXAsIGZ1bmN0aW9uIChIdHRwUmVxdWVzdCkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKEh0dHBSZXF1ZXN0LnJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoSHR0cFJlcXVlc3Quc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENob2NvbGF0ZUZhY3RvcnkuX3RoYW5rc0ZvclZpc2l0aW5nKHJlc3BvbnNlLnJlZGlyZWN0VXJsKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MjI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2hvY29sYXRlRmFjdG9yeS5fZ2l2ZUZlZWRiYWNrVG9NZW1iZXJzKHJlc3BvbnNlLmVycm9ycywgY2hvY29sYXRlRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gQ2hvY29sYXRlRmFjdG9yeS5fdW5rbm93bkdhcEluRmFjdG9yeShjaG9jb2xhdGVGYWN0b3J5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gQ2hvY29sYXRlRmFjdG9yeS5fdW5rbm93bkdhcEluRmFjdG9yeShjaG9jb2xhdGVGYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGQgd2lsbGllIHdvbmthIHRvIHRoZSBncm91cFxuICAgICAqIFBzLi4uIGl0IGFjdHVhbGx5IHRoZSBzZWNyZXQgY29kZSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBncm91cFxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2FkZFdpbGxpZVdvbmthOiBmdW5jdGlvbihncm91cCl7XG4gICAgICAgIGdyb3VwLl93aWxsaWUgPSAnd29ua2EnO1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgZmVlZGJhY2sgdG8gdGhlIGRlc2lyZWQgYXJlYS5cbiAgICAgKiBNb3N0IGxpa2VseSB0byB0aGUgdmlzaXRvciBkaXJlY3RseSwgYnV0IHNvbWV0aW1lIHRvIHRoZSBmYWN0b3J5IGRlc2lyZWQgZmVlZGJhY2sgYXJlYVxuICAgICAqXG4gICAgICogQHBhcmFtIGVycm9yc1xuICAgICAqIEBwYXJhbSBjaG9jb2xhdGVGYWN0b3J5XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZ2l2ZUZlZWRiYWNrVG9NZW1iZXJzOiBmdW5jdGlvbihlcnJvcnMsIGNob2NvbGF0ZUZhY3Rvcnkpe1xuXG4gICAgICAgIC8vIEdyYWIgdGhlIGZhY3RvcnkgZmVlZGJhY2sgYXJlYVxuICAgICAgICBjb25zdCBmZWVkYmFja0FyZWEgPSBjaG9jb2xhdGVGYWN0b3J5LnF1ZXJ5U2VsZWN0b3IoJy5qcy1lcnJvci1hcmVhJyk7XG5cbiAgICAgICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgaHRtbFxuICAgICAgICBpZihpc3NldChmZWVkYmFja0FyZWEpKSBmZWVkYmFja0FyZWEuaW5uZXJIVE1MID0gJyc7XG5cbiAgICAgICAgLy8gQ2xlYXIgdGhlIHByZXZpb3VzIG1hcmtlZCBqYWNrZXRzXG4gICAgICAgIENob2NvbGF0ZUZhY3RvcnkuX2NsZWFyUHJldmlvdXNNYXJrZWRKYWNrZXRzKGNob2NvbGF0ZUZhY3RvcnkpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaChmdW5jdGlvbih2aXNpdG9yKSB7XG5cbiAgICAgICAgICAgIGxldCBqYWNrZXQgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHZpc2l0b3JGZWVkYmFja0FyZWEgPSBudWxsO1xuXG4gICAgICAgICAgICAvLyBIb25leSBlbGVtZW50cyBkb2Vzbid0IGhhcyBhIGFjY2Vzc2libGUgZWxlbWVudFxuICAgICAgICAgICAgaWYodmlzaXRvciAhPT0gJ19ob25leScgJiYgdmlzaXRvciAhPT0gJ19zZWNyZXRDb2RlJykge1xuXG4gICAgICAgICAgICAgICAgLy8gR3JhYiB0aGUgdmlzaXRvclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpc2l0b3JOb2RlID0gY2hvY29sYXRlRmFjdG9yeS5xdWVyeVNlbGVjdG9yKCcjJyArIHZpc2l0b3IpO1xuXG4gICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgamFja2V0IG9mIGEgdmlzaXRvclxuICAgICAgICAgICAgICAgIGphY2tldCA9IENob2NvbGF0ZUZhY3RvcnkuX2dyYWJWaXNpdG9ySmFja2V0KHZpc2l0b3JOb2RlKTtcblxuICAgICAgICAgICAgICAgIC8vIElmIGZvdW5kIGdldCB0aGUgZGVzaXJlZCBhcmVhXG4gICAgICAgICAgICAgICAgaWYoaXNzZXQoamFja2V0KSkgdmlzaXRvckZlZWRiYWNrQXJlYSA9IGphY2tldC5xdWVyeVNlbGVjdG9yKCcuanMtZm9ybS1ncm91cC1lcnJvcicpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgaHRtbFxuICAgICAgICAgICAgICAgIGlmKGlzc2V0KHZpc2l0b3JGZWVkYmFja0FyZWEpKSB2aXNpdG9yRmVlZGJhY2tBcmVhLmlubmVySFRNTCA9ICcnO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgZmVlZGJhY2sgZm9yIHRoaXMgdmlzaXRvclxuICAgICAgICAgICAgY29uc3QgdmlzaXRvckZlZWRiYWNrID0gZXJyb3JzW3Zpc2l0b3JdO1xuXG4gICAgICAgICAgICAvLyBTcGl0IG91dCBlYWNoIGxpbmVcbiAgICAgICAgICAgIGNvbnN0IHZpc2l0b3JGZWVkYmFja0Ftb3VudCA9IHZpc2l0b3JGZWVkYmFjay5sZW5ndGg7XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdmlzaXRvckZlZWRiYWNrQW1vdW50OyBpKyspe1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpc2l0b3JGZWVkYmFja0xpbmUgPSB2aXNpdG9yRmVlZGJhY2tbaV07XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2aXNpdG9yLCB2aXNpdG9yRmVlZGJhY2tMaW5lKTtcblxuICAgICAgICAgICAgICAgIC8vIEhvbmV5IGVsZW1lbnRzIGRvZXNuJ3QgaGFzIGEgYWNjZXNzaWJsZSBlbGVtZW50IGFyZWFcbiAgICAgICAgICAgICAgICBpZih2aXNpdG9yICE9PSAnX2hvbmV5JyAmJiB2aXNpdG9yICE9PSAnX3NlY3JldENvZGUnKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gTWFyayB0aGUgamFja2V0XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzc2V0KGphY2tldCkpIGphY2tldC5jbGFzc0xpc3QuYWRkKCdoYXMtZXJyb3InKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgZmVlZGJhY2sgdG8gdmlzaXRvciBmZWVkYmFjayBhcmVhIGlmIGRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNzZXQodmlzaXRvckZlZWRiYWNrQXJlYSkgJiYgdmlzaXRvckZlZWRiYWNrTGluZS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudEZlZWRiYWNrQXJlYSA9IHZpc2l0b3JGZWVkYmFja0FyZWEuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZlZWRiYWNrQXJlYSArPSAnPHNwYW4+JyArIGNhcGl0YWxpemVGaXJzdExldHRlcih2aXNpdG9yRmVlZGJhY2tMaW5lKSArICc8L3NwYW4+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3JGZWVkYmFja0FyZWEuaW5uZXJIVE1MID0gY3VycmVudEZlZWRiYWNrQXJlYTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEFwcGVuZCBmZWVkYmFjayB0byBmYWN0b3J5IGZlZWRiYWNrIGFyZWEgaWYgZGVmaW5lZFxuICAgICAgICAgICAgICAgIGlmKGlzc2V0KGZlZWRiYWNrQXJlYSkgJiYgdmlzaXRvckZlZWRiYWNrTGluZS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRGZWVkYmFja0FyZWEgPSBmZWVkYmFja0FyZWEuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmVlZGJhY2tBcmVhICs9ICc8bGk+JyArIGNhcGl0YWxpemVGaXJzdExldHRlcih2aXNpdG9yRmVlZGJhY2tMaW5lKSArICc8L2xpPic7XG4gICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrQXJlYS5pbm5lckhUTUwgPSBjdXJyZW50RmVlZGJhY2tBcmVhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENsZWFyIHRoZSBwcmV2aW91cyBtYXJrZWQgamFja2V0c1xuICAgICAqXG4gICAgICogQHBhcmFtIGNob2NvbGF0ZUZhY3RvcnlcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9jbGVhclByZXZpb3VzTWFya2VkSmFja2V0cyhjaG9jb2xhdGVGYWN0b3J5KSB7XG5cbiAgICAgICAgY29uc3QgbWFya2VkSmFja2V0cyA9IGNob2NvbGF0ZUZhY3RvcnkucXVlcnlTZWxlY3RvckFsbCgnLmhhcy1lcnJvcicpO1xuICAgICAgICBjb25zdCBtYXJrZWRKYWNrZXRzQW1vdW50ID0gbWFya2VkSmFja2V0cy5sZW5ndGg7XG5cbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IG1hcmtlZEphY2tldHNBbW91bnQ7IGkrKyl7XG4gICAgICAgICAgICBtYXJrZWRKYWNrZXRzW2ldLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1lcnJvcicpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdyYWIgdGhlIGphY2tldCBvZiB0aGUgdmlzaXRvclxuICAgICAqXG4gICAgICogQHBhcmFtIHZpc2l0b3JcbiAgICAgKiBAcmV0dXJucyB7bnVsbHwqfCgoKSA9PiAoTm9kZSB8IG51bGwpKXxBY3RpdmVYLklYTUxET01Ob2RlfChOb2RlICYgUGFyZW50Tm9kZSl9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZ3JhYlZpc2l0b3JKYWNrZXQ6IGZ1bmN0aW9uKHZpc2l0b3Ipe1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHZpc2l0b3IgaXMgZGVmaW5lZFxuICAgICAgICBpZiAoIWlzc2V0KHZpc2l0b3IpKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAvLyBEbyBsb29wIHNldHRpbmdzXG4gICAgICAgIGN1cnJlbnRMYXllciA9IHZpc2l0b3I7XG4gICAgICAgIHNhZmV0eUJyZWFrID0gMDtcblxuICAgICAgICAvLyBHcmFiIHRoZSBuZXh0IGxheWVyIHRpbGwgaXQgaXMgdGhlIGphY2tldCAob3Igc2FmZXR5QnJlYWsgaGFzIGJlZW4gcmVhY2hlZFxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBzYWZldHlCcmVhaysrO1xuICAgICAgICAgICAgY3VycmVudExheWVyID0gY3VycmVudExheWVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgICBpZihjdXJyZW50TGF5ZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdqcy1mb3JtLWdyb3VwJykpIHJldHVybiBjdXJyZW50TGF5ZXI7XG4gICAgICAgIH0gd2hpbGUgKGN1cnJlbnRMYXllci50YWdOYW1lICE9PSAnQk9EWScgJiYgc2FmZXR5QnJlYWsgPD0gMTApO1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZWRpcmVjdCB0aGUgdmlzaXRvciB0byB0aGUgdGhhbmtzIHBhZ2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXh0U3RvcFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3RoYW5rc0ZvclZpc2l0aW5nOiBmdW5jdGlvbiAobmV4dFN0b3ApIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uID0gbmV4dFN0b3A7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVua25vd24gZXJyb3Igb2NjdXJyZWQsIGxvZyB0aGUgZXJyb3JcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaG9jb2xhdGVGYWN0b3J5XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdW5rbm93bkdhcEluRmFjdG9yeTogZnVuY3Rpb24gKGNob2NvbGF0ZUZhY3RvcnkpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hvY29sYXRlRmFjdG9yeSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDaG9jb2xhdGVGYWN0b3J5OiBVbmtvd24gRXJyb3InKTtcbiAgICB9LFxufTtcblxuQ2hvY29sYXRlRmFjdG9yeS5lbnRlcigpOyIsIi8qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogIERlcGVuZGVuY2llc1xuICogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4vKipcbiAqIEV4dGVybmFsXG4gKi9cbnJlcXVpcmUoJ2hhbW1lcmpzJyk7XG5yZXF1aXJlKCdvYmplY3RGaXRQb2x5ZmlsbCcpO1xuXG4vKipcbiAqIEdsb2JhbCAvIFNoYXJlZCB3aXRoIEtNU1xuICovXG5yZXF1aXJlKCcuLy4uL2dsb2JhbC9wb2x5ZmlsbHMvZXZlbnRQb2x5RmlsbCcpO1xucmVxdWlyZSgnLi8uLi9nbG9iYWwvcG9seWZpbGxzL2lzSW50ZWdlcicpO1xucmVxdWlyZSgnLi8uLi9nbG9iYWwvcG9seWZpbGxzL3Byb21pc2UnKTtcbnJlcXVpcmUoJy4vLi4vZ2xvYmFsL3BvbHlmaWxscy9zeW1ib2wtZXM2Lm1pbicpO1xuXG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogIEdsb2JhbCBmdW5jdGlvbmFsaXRpZXNcbiAqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxucmVxdWlyZSgnLi9nbG9iYWwvaGVscGVycycpOyAvLyBTaG91bGQgYmUgZmlyc3RcbnJlcXVpcmUoJy4vZ2xvYmFsL2Jyb3dzZXJIYW5kbGVyJyk7XG4vLyByZXF1aXJlKCcuL2dsb2JhbC9wYWdldHJhbnNpdGlvbkhhbmRsZXInKTtcbi8vIHJlcXVpcmUoJy4vZ2xvYmFsL3Jlc2l6ZUhhbmRsZXInKTtcbnJlcXVpcmUoJy4vZ2xvYmFsL3Njcm9sbEhhbmRsZXInKTtcblxuXG4vKiogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqICBDb21wb25lbnQgZnVuY3Rpb25hbGl0aWVzXG4gKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cbnJlcXVpcmUoJy4vY29tcG9uZW50cy9jaG9jb2xhdGVGYWN0b3J5Jyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvY29va2llSGFuZGxlcicpO1xuLy8gcmVxdWlyZSgnLi9jb21wb25lbnRzL0lucHV0SGFuZGxlcicpO1xucmVxdWlyZSgnLi9jb21wb25lbnRzL21hcHNIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvb3ZlcmxheU1lbnVIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvc2xpZGVySGFuZGxlcicpO1xucmVxdWlyZSgnLi9jb21wb25lbnRzL3Njcm9sbFRvSGFuZGxlcicpO1xuLy8gcmVxdWlyZSgnLi9jb21wb25lbnRzL3NlYXJjaEhhbmRsZXInKTtcbi8vIHJlcXVpcmUoJy4vY29tcG9uZW50cy9zaGFyZUJ1dHRvbnNIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMveW91dHViZUhhbmRsZXInKTtcblxuLyoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiAgU2hvcCBDb21wb25lbnQgZnVuY3Rpb25hbGl0aWVzXG4gKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cbi8vIHJlcXVpcmUoJy4vLi4vc2hvcC9jb21wb25lbnRzL3Nob3BwaW5nY2FydEhhbmRsZXInKTsiLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQnJvd3NlciBIYW5kbGVyXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgQnJvd3NlckhhbmRsZXIgPSB7XG5cbiAgICB1c2VyQWdlbnQ6ICcnLFxuICAgIGJyb3dzZXJJbmZvOiAnJyxcblxuXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICBCcm93c2VySGFuZGxlci51c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICAgICAgQnJvd3NlckhhbmRsZXIuYnJvd3NlckluZm8gPSBCcm93c2VySGFuZGxlci5nZXRCcm93c2VySW5mbygpO1xuICAgICAgICBCcm93c2VySGFuZGxlci5oYW5kbGVJRSgpO1xuICAgICAgICBCcm93c2VySGFuZGxlci5oYW5kbGVTYWZhcmkoKTtcbiAgICB9LFxuXG4gICAgaGFuZGxlSUU6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLyBEZXRlY3QgdmVyc2lvbnMgYmVsb3cgaWUxMVxuICAgICAgICBsZXQgbXNpZSA9IEJyb3dzZXJIYW5kbGVyLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFICcpO1xuICAgICAgICBjb25zdCBpZWx0MTEgPSBtc2llID4gMDtcblxuICAgICAgICAvLyBEZXRlY3QgaWUxMVxuICAgICAgICBjb25zdCBpZTExID0gISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50LipydlxcOjExXFwuLyk7XG5cbiAgICAgICAgLy8gSWYgSW50ZXJuZXQgRXhwbG9yZXJcbiAgICAgICAgaWYgKGllbHQxMSB8fCBpZTExKSB7XG4gICAgICAgICAgICAvLyBEZWZhdWx0IHZlcnNpb25cbiAgICAgICAgICAgIGxldCB2ZXJzaW9uID0gJzExJztcblxuICAgICAgICAgICAgLy8gV2F5IHRvIGRldGVjdCB2ZXJzaW9uIDwgMTFcbiAgICAgICAgICAgIGlmIChpZWx0MTEpIHZlcnNpb24gPSBwYXJzZUludChCcm93c2VySGFuZGxlci51c2VyQWdlbnQuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgIG1zaWUgKyA1LFxuICAgICAgICAgICAgICAgIEJyb3dzZXJIYW5kbGVyLnVzZXJBZ2VudC5pbmRleE9mKFwiLlwiLCBtc2llKVxuICAgICAgICAgICAgKSk7XG5cbiAgICAgICAgICAgIC8vIEFwcGVuZCBjbGFzc2VzIHRvIEhUTUwgKHdlIGhhdmUgdG8gZG8gdGhpcyBzZXBhcmF0ZWx5IGJlY2F1c2UgZWxzZSBpZSB3aWxsIGZhaWwpXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2llJyk7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3YnK3ZlcnNpb24pO1xuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG9sZGVyIHNhZmFyaSB2ZXJzaW9uXG4gICAgaGFuZGxlU2FmYXJpOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaWYoQnJvd3NlckhhbmRsZXIuYnJvd3NlckluZm8ubmFtZSA9PT0gJ1NhZmFyaScgJiYgQnJvd3NlckhhbmRsZXIuYnJvd3NlckluZm8udmVyc2lvbiA8PSAxMCl7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpWzBdLmNsYXNzTGlzdC5hZGQoJ2llJyk7XG4gICAgICAgIH1cblxuICAgIH0sXG5cbiAgICBnZXRCcm93c2VySW5mbzogZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgdWE9bmF2aWdhdG9yLnVzZXJBZ2VudCx0ZW0sTT11YS5tYXRjaCgvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHxtc2llfHRyaWRlbnQoPz1cXC8pKVxcLz9cXHMqKFxcZCspL2kpIHx8IFtdO1xuICAgICAgICBpZigvdHJpZGVudC9pLnRlc3QoTVsxXSkpe1xuICAgICAgICAgICAgdGVtPS9cXGJydlsgOl0rKFxcZCspL2cuZXhlYyh1YSkgfHwgW107XG4gICAgICAgICAgICByZXR1cm4ge25hbWU6J0lFICcsdmVyc2lvbjoodGVtWzFdfHwnJyl9O1xuICAgICAgICB9XG4gICAgICAgIGlmKE1bMV09PT0nQ2hyb21lJyl7XG4gICAgICAgICAgICB0ZW09dWEubWF0Y2goL1xcYk9QUlxcLyhcXGQrKS8pXG4gICAgICAgICAgICBpZih0ZW0hPW51bGwpICAge3JldHVybiB7bmFtZTonT3BlcmEnLCB2ZXJzaW9uOnRlbVsxXX07fVxuICAgICAgICB9XG4gICAgICAgIE09TVsyXT8gW01bMV0sIE1bMl1dOiBbbmF2aWdhdG9yLmFwcE5hbWUsIG5hdmlnYXRvci5hcHBWZXJzaW9uLCAnLT8nXTtcbiAgICAgICAgaWYoKHRlbT11YS5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKSkhPW51bGwpIHtNLnNwbGljZSgxLDEsdGVtWzFdKTt9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBNWzBdLFxuICAgICAgICAgICAgdmVyc2lvbjogTVsxXVxuICAgICAgICB9O1xuICAgIH1cbn07XG5cbkJyb3dzZXJIYW5kbGVyLmluaXQoKTsiLCIhZnVuY3Rpb24oZ2xvYmFsLGZhY3Rvcnkpe1widXNlIHN0cmljdFwiO1wib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1mYWN0b3J5KGdsb2JhbCk6ZmFjdG9yeShnbG9iYWwpfShcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpnbG9iYWwsZnVuY3Rpb24oZ2xvYmFsKXtcInVzZSBzdHJpY3RcIjt2YXIgZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LGRlZmluZVByb3BlcnRpZXM9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMsc3ltYm9sSGlkZGVuQ291bnRlcj0wLGdsb2JhbFN5bWJvbFJlZ2lzdHJ5PVtdLHNsaWNlPUFycmF5LnByb3RvdHlwZS5zbGljZSxFUzY9XCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbC5FUzY/Z2xvYmFsLkVTNjpnbG9iYWwuRVM2PXt9LGlzQXJyYXk9QXJyYXkuaXNBcnJheSxvYmplY3RUb1N0cmluZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHB1c2g9QXJyYXkucHJvdG90eXBlLnB1c2gsZW1wdHlGdW5jdGlvbj1mdW5jdGlvbigpe30sc2ltcGxlRnVuY3Rpb249ZnVuY3Rpb24oYXJnKXtyZXR1cm4gYXJnfSxpc0NhbGxhYmxlPWZ1bmN0aW9uKGZuKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBmbn0sSXRlcmF0b3I9ZnVuY3Rpb24oKXt9LEFycmF5SXRlcmF0b3I9ZnVuY3Rpb24oYXJyYXksZmxhZyl7dGhpcy5fYXJyYXk9YXJyYXksdGhpcy5fZmxhZz1mbGFnLHRoaXMuX25leHRJbmRleD0wfSxTdHJpbmdJdGVyYXRvcj1mdW5jdGlvbihzdHJpbmcsZmxhZyl7dGhpcy5fc3RyaW5nPXN0cmluZyx0aGlzLl9mbGFnPWZsYWcsdGhpcy5fbmV4dEluZGV4PTB9LGlzT2JqZWN0PWZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gbnVsbCE9PXZhbHVlJiYoXCJvYmplY3RcIj09dHlwZW9mIHZhbHVlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB2YWx1ZSl9LHNldHVwU3ltYm9sSW50ZXJuYWxzPWZ1bmN0aW9uKHN5bWJvbCxkZXNjKXtyZXR1cm4gZGVmaW5lUHJvcGVydGllcyhzeW1ib2wse19kZXNjcmlwdGlvbjp7dmFsdWU6ZGVzY30sX2lzU3ltYm9sOnt2YWx1ZTohMH0sX2lkOnt2YWx1ZTpzeW1ib2xIaWRkZW5Db3VudGVyKyt9fSksc3ltYm9sfSxhcHBlbmRBcnJheT1mdW5jdGlvbihhcnJheTEsYXJyYXkyKXtpZihcIm51bWJlclwiPT10eXBlb2YgYXJyYXkxLmxlbmd0aCYmYXJyYXkxLmxlbmd0aD49MCYmXCJudW1iZXJcIj09dHlwZW9mIGFycmF5Mi5sZW5ndGgmJmFycmF5Mi5sZW5ndGg+PTApe3ZhciBsZW5ndGgxPU1hdGguZmxvb3IoYXJyYXkxLmxlbmd0aCksbGVuZ3RoMj1NYXRoLmZsb29yKGFycmF5Mi5sZW5ndGgpLGk9MDtmb3IoYXJyYXkxLmxlbmd0aD1sZW5ndGgxK2xlbmd0aDI7aTxsZW5ndGgyOysraSlhcnJheTIuaGFzT3duUHJvcGVydHkoaSkmJihhcnJheTFbbGVuZ3RoMStpXT1hcnJheTJbaV0pfX0sc2ltcGxlSW5oZXJpdGFuY2U9ZnVuY3Rpb24oY2hpbGQscGFyZW50KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBjaGlsZHx8XCJmdW5jdGlvblwiIT10eXBlb2YgcGFyZW50KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDaGlsZCBhbmQgUGFyZW50IG11c3QgYmUgZnVuY3Rpb24gdHlwZVwiKTtjaGlsZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKSxjaGlsZC5wcm90b3R5cGUuY29uc3RydWN0b3I9Y2hpbGR9LFN5bWJvbD1mdW5jdGlvbiBTeW1ib2woZGVzYyl7aWYoZGVzYz12b2lkIDA9PT1kZXNjP1wiXCI6U3RyaW5nKGRlc2MpLHRoaXMgaW5zdGFuY2VvZiBTeW1ib2wpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKTtyZXR1cm4gc2V0dXBTeW1ib2xJbnRlcm5hbHMoT2JqZWN0LmNyZWF0ZShTeW1ib2wucHJvdG90eXBlKSxkZXNjKX07ZGVmaW5lUHJvcGVydGllcyhTeW1ib2wse2Zvcjp7dmFsdWU6ZnVuY3Rpb24oa2V5KXtrZXk9U3RyaW5nKGtleSk7Zm9yKHZhciByZWNvcmQscmVnaXN0cnlMZW5ndGg9Z2xvYmFsU3ltYm9sUmVnaXN0cnkubGVuZ3RoLGk9MDtpPHJlZ2lzdHJ5TGVuZ3RoOysraSlpZigocmVjb3JkPWdsb2JhbFN5bWJvbFJlZ2lzdHJ5W2ldKS5rZXk9PT1rZXkpcmV0dXJuIHJlY29yZC5zeW1ib2w7cmV0dXJuIHJlY29yZD17a2V5OmtleSxzeW1ib2w6U3ltYm9sKGtleSl9LGdsb2JhbFN5bWJvbFJlZ2lzdHJ5LnB1c2gocmVjb3JkKSxyZWNvcmQuc3ltYm9sfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGtleUZvcjp7dmFsdWU6ZnVuY3Rpb24oc3ltYm9sKXtpZighRVM2LmlzU3ltYm9sKHN5bWJvbCkpdGhyb3cgbmV3IFR5cGVFcnJvcihTdHJpbmcoc3ltYm9sKStcIiBpcyBub3QgYSBzeW1ib2xcIik7Zm9yKHZhciByZWNvcmQscmVnaXN0cnlMZW5ndGg9Z2xvYmFsU3ltYm9sUmVnaXN0cnkubGVuZ3RoLGk9MDtpPHJlZ2lzdHJ5TGVuZ3RoOysraSlpZigocmVjb3JkPWdsb2JhbFN5bWJvbFJlZ2lzdHJ5W2ldKS5zeW1ib2w9PT1zeW1ib2wpcmV0dXJuIHJlY29yZC5rZXl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saGFzSW5zdGFuY2U6e3ZhbHVlOlN5bWJvbChcIlN5bWJvbC5oYXNJbnN0YW5jZVwiKX0saXNDb25jYXRTcHJlYWRhYmxlOnt2YWx1ZTpTeW1ib2woXCJTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlXCIpfSxpdGVyYXRvcjp7dmFsdWU6U3ltYm9sKFwiU3ltYm9sLml0ZXJhdG9yXCIpfSx0b1N0cmluZ1RhZzp7dmFsdWU6U3ltYm9sKFwiU3ltYm9sLnRvU3RyaW5nVGFnXCIpfX0pLFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkBAX19fX19cIit0aGlzLl9pZCtcIl9fX19fXCJ9LFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxkZWZpbmVQcm9wZXJ0eShJdGVyYXRvci5wcm90b3R5cGUsU3ltYm9sLml0ZXJhdG9yLnRvU3RyaW5nKCkse3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHNpbXBsZUluaGVyaXRhbmNlKEFycmF5SXRlcmF0b3IsSXRlcmF0b3IpLHNpbXBsZUluaGVyaXRhbmNlKFN0cmluZ0l0ZXJhdG9yLEl0ZXJhdG9yKSxkZWZpbmVQcm9wZXJ0eShBcnJheUl0ZXJhdG9yLnByb3RvdHlwZSxTeW1ib2wudG9TdHJpbmdUYWcudG9TdHJpbmcoKSx7dmFsdWU6XCJBcnJheSBJdGVyYXRvclwiLGNvbmZpZ3VyYWJsZTohMH0pLGRlZmluZVByb3BlcnR5KFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSxTeW1ib2wudG9TdHJpbmdUYWcudG9TdHJpbmcoKSx7dmFsdWU6XCJTdHJpbmcgSXRlcmF0b3JcIixjb25maWd1cmFibGU6ITB9KSxBcnJheUl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgQXJyYXlJdGVyYXRvcikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1ldGhvZCBBcnJheSBJdGVyYXRvci5wcm90b3R5cGUubmV4dCBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIFwiK1N0cmluZyh0aGlzKSk7dmFyIG5leHRWYWx1ZTtyZXR1cm4tMT09PXRoaXMuX25leHRJbmRleD97ZG9uZTohMCx2YWx1ZTp2b2lkIDB9OlwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLl9hcnJheS5sZW5ndGgmJnRoaXMuX2FycmF5Lmxlbmd0aD49MCYmdGhpcy5fbmV4dEluZGV4PE1hdGguZmxvb3IodGhpcy5fYXJyYXkubGVuZ3RoKT8oMT09PXRoaXMuX2ZsYWc/bmV4dFZhbHVlPVt0aGlzLl9uZXh0SW5kZXgsdGhpcy5fYXJyYXlbdGhpcy5fbmV4dEluZGV4XV06Mj09PXRoaXMuX2ZsYWc/bmV4dFZhbHVlPXRoaXMuX2FycmF5W3RoaXMuX25leHRJbmRleF06Mz09PXRoaXMuX2ZsYWcmJihuZXh0VmFsdWU9dGhpcy5fbmV4dEluZGV4KSx0aGlzLl9uZXh0SW5kZXgrKyx7ZG9uZTohMSx2YWx1ZTpuZXh0VmFsdWV9KToodGhpcy5fbmV4dEluZGV4PS0xLHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pfSxTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFN0cmluZ0l0ZXJhdG9yKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWV0aG9kIFN0cmluZyBJdGVyYXRvci5wcm90b3R5cGUubmV4dCBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIFwiK1N0cmluZyh0aGlzKSk7dmFyIG5leHRWYWx1ZSxzdHJpbmdPYmplY3Q9bmV3IFN0cmluZyh0aGlzLl9zdHJpbmcpO3JldHVybi0xPT09dGhpcy5fbmV4dEluZGV4P3tkb25lOiEwLHZhbHVlOnZvaWQgMH06dGhpcy5fbmV4dEluZGV4PHN0cmluZ09iamVjdC5sZW5ndGg/KG5leHRWYWx1ZT1zdHJpbmdPYmplY3RbdGhpcy5fbmV4dEluZGV4XSx0aGlzLl9uZXh0SW5kZXgrKyx7ZG9uZTohMSx2YWx1ZTpuZXh0VmFsdWV9KToodGhpcy5fbmV4dEluZGV4PS0xLHtkb25lOiEwLHZhbHVlOnZvaWQgMH0pfTt2YXIgU3ByZWFkT3BlcmF0b3JJbXBsPWZ1bmN0aW9uKHRhcmdldCx0aGlzQXJnKXt0aGlzLl90YXJnZXQ9dGFyZ2V0LHRoaXMuX3ZhbHVlcz1bXSx0aGlzLl90aGlzQXJnPXRoaXNBcmd9O1NwcmVhZE9wZXJhdG9ySW1wbC5wcm90b3R5cGUuc3ByZWFkPWZ1bmN0aW9uKCl7dmFyIHNlbGY9dGhpcztyZXR1cm4gc2xpY2UuY2FsbChhcmd1bWVudHMpLmZvckVhY2goZnVuY3Rpb24oaXRlcmFibGUpe0VTNi5mb3JPZihpdGVyYWJsZSxmdW5jdGlvbih2YWx1ZSl7c2VsZi5fdmFsdWVzLnB1c2godmFsdWUpfSl9KSxzZWxmfSxTcHJlYWRPcGVyYXRvckltcGwucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3ZhciBzZWxmPXRoaXM7cmV0dXJuIHNsaWNlLmNhbGwoYXJndW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKXtzZWxmLl92YWx1ZXMucHVzaCh2YWx1ZSl9KSxzZWxmfSxTcHJlYWRPcGVyYXRvckltcGwucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odGhpc0FyZyl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpcy5fdGFyZ2V0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJUYXJnZXQgaXMgbm90IGEgZnVuY3Rpb25cIik7cmV0dXJuIHRoaXNBcmc9YXJndW1lbnRzLmxlbmd0aDw9MD90aGlzLl90aGlzQXJnOnRoaXNBcmcsdGhpcy5fdGFyZ2V0LmFwcGx5KHRoaXNBcmcsdGhpcy5fdmFsdWVzKX0sU3ByZWFkT3BlcmF0b3JJbXBsLnByb3RvdHlwZS5uZXc9ZnVuY3Rpb24oKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0aGlzLl90YXJnZXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRhcmdldCBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKTt2YXIgdGVtcCxyZXR1cm5WYWx1ZTtyZXR1cm4gdGVtcD1PYmplY3QuY3JlYXRlKHRoaXMuX3RhcmdldC5wcm90b3R5cGUpLHJldHVyblZhbHVlPXRoaXMuX3RhcmdldC5hcHBseSh0ZW1wLHRoaXMuX3ZhbHVlcyksaXNPYmplY3QocmV0dXJuVmFsdWUpP3JldHVyblZhbHVlOnRlbXB9LFNwcmVhZE9wZXJhdG9ySW1wbC5wcm90b3R5cGUuYXJyYXk9ZnVuY3Rpb24oKXtpZighaXNBcnJheSh0aGlzLl90YXJnZXQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUYXJnZXQgaXMgbm90IGEgYXJyYXlcIik7cmV0dXJuIHB1c2guYXBwbHkodGhpcy5fdGFyZ2V0LHRoaXMuX3ZhbHVlcyksdGhpcy5fdGFyZ2V0fTtyZXR1cm4gZGVmaW5lUHJvcGVydGllcyhFUzYse2lzU3ltYm9sOnt2YWx1ZTpmdW5jdGlvbihzeW1ib2wpe3JldHVybiBzeW1ib2wgaW5zdGFuY2VvZiBTeW1ib2wmJmZ1bmN0aW9uKHN5bWJvbCl7cmV0dXJuITA9PT1zeW1ib2wuX2lzU3ltYm9sJiZcIm51bWJlclwiPT10eXBlb2Ygc3ltYm9sLl9pZCYmXCJzdHJpbmdcIj09dHlwZW9mIHN5bWJvbC5fZGVzY3JpcHRpb259KHN5bWJvbCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saW5zdGFuY2VPZjp7dmFsdWU6ZnVuY3Rpb24ob2JqZWN0LGNvbnN0cnVjdG9yKXtpZighaXNPYmplY3QoY29uc3RydWN0b3IpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJSaWdodC1oYW5kIHNpZGUgb2YgJ2luc3RhbmNlb2YnIGlzIG5vdCBhbiBvYmplY3RcIik7dmFyIGhhc0luc3RhbmNlU3ltYm9sUHJvcD1jb25zdHJ1Y3RvcltTeW1ib2wuaGFzSW5zdGFuY2VdO2lmKHZvaWQgMD09PWhhc0luc3RhbmNlU3ltYm9sUHJvcClyZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3I7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgaGFzSW5zdGFuY2VTeW1ib2xQcm9wKXRocm93IG5ldyBUeXBlRXJyb3IodHlwZW9mIGhhc0luc3RhbmNlU3ltYm9sUHJvcCtcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtyZXR1cm4gaGFzSW5zdGFuY2VTeW1ib2xQcm9wLmNhbGwoY29uc3RydWN0b3Isb2JqZWN0KX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxmb3JPZjp7dmFsdWU6ZnVuY3Rpb24oaXRlcmFibGUsY2FsbGJhY2ssdGhpc0FyZyl7aWYoY2FsbGJhY2s9XCJmdW5jdGlvblwiIT10eXBlb2YgY2FsbGJhY2s/ZW1wdHlGdW5jdGlvbjpjYWxsYmFjayxcImZ1bmN0aW9uXCIhPXR5cGVvZiBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO3ZhciBpdGVyYXRpb25SZXN1bHQsaXRlcmF0b3I9aXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGl0ZXJhdG9yLm5leHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIi5pdGVyYXRvci5uZXh0IGlzIG5vdCBhIGZ1bmN0aW9uXCIpO2Zvcig7Oyl7aWYoaXRlcmF0aW9uUmVzdWx0PWl0ZXJhdG9yLm5leHQoKSwhaXNPYmplY3QoaXRlcmF0aW9uUmVzdWx0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSXRlcmF0b3IgcmVzdWx0IFwiK2l0ZXJhdGlvblJlc3VsdCtcIiBpcyBub3QgYW4gb2JqZWN0XCIpO2lmKGl0ZXJhdGlvblJlc3VsdC5kb25lKWJyZWFrO2NhbGxiYWNrLmNhbGwodGhpc0FyZyxpdGVyYXRpb25SZXN1bHQudmFsdWUpfX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzcHJlYWRPcGVyYXRvcjp7dmFsdWU6ZnVuY3Rpb24odGFyZ2V0LHRoaXNBcmcpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHRhcmdldCYmIWlzQXJyYXkodGFyZ2V0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ByZWFkIG9wZXJhdG9yIG9ubHkgc3VwcG9ydHMgb24gYXJyYXkgYW5kIGZ1bmN0aW9uIG9iamVjdHMgYXQgdGhpcyBtb21lbnRcIik7cmV0dXJuIG5ldyBTcHJlYWRPcGVyYXRvckltcGwodGFyZ2V0LHRoaXNBcmcpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZGVmaW5lUHJvcGVydHkoZ2xvYmFsLFwiU3ltYm9sXCIse3ZhbHVlOlN5bWJvbCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxkZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsU3ltYm9sLmhhc0luc3RhbmNlLnRvU3RyaW5nKCkse3ZhbHVlOmZ1bmN0aW9uKGluc3RhbmNlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzJiZpbnN0YW5jZSBpbnN0YW5jZW9mIHRoaXN9fSksZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLFwiY29uY2F0XCIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpc3x8bnVsbD09PXRoaXMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5LnByb3RvdHlwZS5jb25jYXQgY2FsbGVkIG9uIG51bGwgb3IgdW5kZWZpbmVkXCIpO3ZhciBzZWxmPU9iamVjdCh0aGlzKSx0YXJnZXRzPXNsaWNlLmNhbGwoYXJndW1lbnRzKSxvdXRwdXRzPVtdO3JldHVybiB0YXJnZXRzLnVuc2hpZnQoc2VsZiksdGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uKHRhcmdldCl7aXNPYmplY3QodGFyZ2V0KT92b2lkIDAhPT10YXJnZXRbU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZV0/dGFyZ2V0W1N5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVdP2FwcGVuZEFycmF5KG91dHB1dHMsdGFyZ2V0KTpvdXRwdXRzLnB1c2godGFyZ2V0KTppc0FycmF5KHRhcmdldCk/YXBwZW5kQXJyYXkob3V0cHV0cyx0YXJnZXQpOm91dHB1dHMucHVzaCh0YXJnZXQpOm91dHB1dHMucHVzaCh0YXJnZXQpfSksb3V0cHV0c30sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSxcInRvU3RyaW5nXCIse3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXN8fG51bGw9PT10aGlzP29iamVjdFRvU3RyaW5nLmNhbGwodGhpcyk6XCJzdHJpbmdcIj09dHlwZW9mIHRoaXNbU3ltYm9sLnRvU3RyaW5nVGFnXT9cIltvYmplY3QgXCIrdGhpc1tTeW1ib2wudG9TdHJpbmdUYWddK1wiXVwiOm9iamVjdFRvU3RyaW5nLmNhbGwodGhpcyl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSxTeW1ib2wuaXRlcmF0b3IudG9TdHJpbmcoKSx7dmFsdWU6ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT10aGlzfHxudWxsPT09dGhpcyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0XCIpO3ZhciBzZWxmPU9iamVjdCh0aGlzKTtyZXR1cm4gbmV3IEFycmF5SXRlcmF0b3Ioc2VsZiwyKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZGVmaW5lUHJvcGVydHkoQXJyYXksXCJmcm9tXCIse3ZhbHVlOmZ1bmN0aW9uKGFycmF5TGlrZSxtYXBGbix0aGlzQXJnKXt2YXIgY29uc3RydWN0b3IsbGVuZ3RoLG91dHB1dHMsaT0wO2lmKGNvbnN0cnVjdG9yPWlzQ2FsbGFibGUodGhpcyk/dGhpczpBcnJheSx2b2lkIDA9PT1hcnJheUxpa2V8fG51bGw9PT1hcnJheUxpa2UpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdFwiKTtpZihhcnJheUxpa2U9T2JqZWN0KGFycmF5TGlrZSksdm9pZCAwPT09bWFwRm4pbWFwRm49c2ltcGxlRnVuY3Rpb247ZWxzZSBpZighaXNDYWxsYWJsZShtYXBGbikpdGhyb3cgbmV3IFR5cGVFcnJvcihtYXBGbitcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtpZih2b2lkIDA9PT1hcnJheUxpa2VbU3ltYm9sLml0ZXJhdG9yXSl7aWYoIShcIm51bWJlclwiPT10eXBlb2YgYXJyYXlMaWtlLmxlbmd0aCYmYXJyYXlMaWtlLmxlbmd0aD49MCkpcmV0dXJuKG91dHB1dHM9bmV3IGNvbnN0cnVjdG9yKDApKS5sZW5ndGg9MCxvdXRwdXRzO2ZvcihsZW5ndGg9TWF0aC5mbG9vcihhcnJheUxpa2UubGVuZ3RoKSwob3V0cHV0cz1uZXcgY29uc3RydWN0b3IobGVuZ3RoKSkubGVuZ3RoPWxlbmd0aDtpPGxlbmd0aDsrK2kpb3V0cHV0c1tpXT1tYXBGbi5jYWxsKHRoaXNBcmcsYXJyYXlMaWtlW2ldKX1lbHNlKG91dHB1dHM9bmV3IGNvbnN0cnVjdG9yKS5sZW5ndGg9MCxFUzYuZm9yT2YoYXJyYXlMaWtlLGZ1bmN0aW9uKHZhbHVlKXtvdXRwdXRzLmxlbmd0aCsrLG91dHB1dHNbb3V0cHV0cy5sZW5ndGgtMV09bWFwRm4uY2FsbCh0aGlzQXJnLHZhbHVlKX0pO3JldHVybiBvdXRwdXRzfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxkZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsXCJlbnRyaWVzXCIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dGhpc3x8bnVsbD09PXRoaXMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdFwiKTt2YXIgc2VsZj1PYmplY3QodGhpcyk7cmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKHNlbGYsMSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSxcImtleXNcIix7dmFsdWU6ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT10aGlzfHxudWxsPT09dGhpcyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0XCIpO3ZhciBzZWxmPU9iamVjdCh0aGlzKTtyZXR1cm4gbmV3IEFycmF5SXRlcmF0b3Ioc2VsZiwzKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZGVmaW5lUHJvcGVydHkoU3RyaW5nLnByb3RvdHlwZSxTeW1ib2wuaXRlcmF0b3IudG9TdHJpbmcoKSx7dmFsdWU6ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT10aGlzfHxudWxsPT09dGhpcyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3RyaW5nLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdIGNhbGxlZCBvbiBudWxsIG9yIHVuZGVmaW5lZFwiKTtyZXR1cm4gbmV3IFN0cmluZ0l0ZXJhdG9yKFN0cmluZyh0aGlzKSwwKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksRVM2fSk7IiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBIZWxwZXIgZnVuY3Rpb25zXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLypcbiAqIFNpbXBsZSBpc3NldCBtZXRob2QgZm9yIHRoaXMgZG9lcyBub3QgZXhpc3QgaW4gamF2YXNjcmlwdFxuICovXG53aW5kb3cuaXNzZXQgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogIT09ICd1bmRlZmluZWQnICYmIG9iaiAhPT0gbnVsbDtcbn07XG5cbi8qXG4gKiBFYXNpbmcgRnVuY3Rpb25zIC0gaW5zcGlyZWQgZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cbiAqIG9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdXG4gKi9cbndpbmRvdy5FYXNpbmdGdW5jdGlvbnMgPSB7XG4gICAgLy8gbm8gZWFzaW5nLCBubyBhY2NlbGVyYXRpb25cbiAgICBsaW5lYXI6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0XG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpbmcgZnJvbSB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZUluUXVhZDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgKiB0XG4gICAgfSxcbiAgICAvLyBkZWNlbGVyYXRpbmcgdG8gemVybyB2ZWxvY2l0eVxuICAgIGVhc2VPdXRRdWFkOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCAqICgyIC0gdClcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGlvbiB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGlvblxuICAgIGVhc2VJbk91dFF1YWQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0IDwgLjUgPyAyICogdCAqIHQgOiAtMSArICg0IC0gMiAqIHQpICogdFxuICAgIH0sXG4gICAgLy8gYWNjZWxlcmF0aW5nIGZyb20gemVybyB2ZWxvY2l0eVxuICAgIGVhc2VJbkN1YmljOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCAqIHQgKiB0XG4gICAgfSxcbiAgICAvLyBkZWNlbGVyYXRpbmcgdG8gemVybyB2ZWxvY2l0eVxuICAgIGVhc2VPdXRDdWJpYzogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuICgtLXQpICogdCAqIHQgKyAxXG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpb24gdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRpb25cbiAgICBlYXNlSW5PdXRDdWJpYzogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgPCAuNSA/IDQgKiB0ICogdCAqIHQgOiAodCAtIDEpICogKDIgKiB0IC0gMikgKiAoMiAqIHQgLSAyKSArIDFcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGluZyBmcm9tIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlSW5RdWFydDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdCAqIHRcbiAgICB9LFxuICAgIC8vIGRlY2VsZXJhdGluZyB0byB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZU91dFF1YXJ0OiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gMSAtICgtLXQpICogdCAqIHQgKiB0XG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpb24gdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRpb25cbiAgICBlYXNlSW5PdXRRdWFydDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgPCAuNSA/IDggKiB0ICogdCAqIHQgKiB0IDogMSAtIDggKiAoLS10KSAqIHQgKiB0ICogdFxuICAgIH0sXG4gICAgLy8gYWNjZWxlcmF0aW5nIGZyb20gemVybyB2ZWxvY2l0eVxuICAgIGVhc2VJblF1aW50OiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdCAqIHRcbiAgICB9LFxuICAgIC8vIGRlY2VsZXJhdGluZyB0byB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZU91dFF1aW50OiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gMSArICgtLXQpICogdCAqIHQgKiB0ICogdFxuICAgIH0sXG4gICAgLy8gYWNjZWxlcmF0aW9uIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0aW9uXG4gICAgZWFzZUluT3V0UXVpbnQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0IDwgLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogKC0tdCkgKiB0ICogdCAqIHQgKiB0XG4gICAgfVxufTtcblxuLypcbiAqIFZhbmlsbGEgdmVyc2lvbiBvZiB0aGUgJC5nZXRTY3JpcHRcbiAqL1xud2luZG93LmdldFNjcmlwdCA9IGZ1bmN0aW9uIChzb3VyY2UsIGNhbGxiYWNrKSB7XG4gICAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdC5hc3luYyA9IDE7XG5cbiAgICBjb25zdCBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpO1xuICAgIGxldCBwcmlvciA9IHNjcmlwdHNbc2NyaXB0cy5sZW5ndGggLSAxXTtcblxuICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKF8sIGlzQWJvcnQpIHtcbiAgICAgICAgaWYgKGlzQWJvcnQgfHwgIXNjcmlwdC5yZWFkeVN0YXRlIHx8IC9sb2FkZWR8Y29tcGxldGUvLnRlc3Qoc2NyaXB0LnJlYWR5U3RhdGUpKSB7XG4gICAgICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICBzY3JpcHQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGlmICghaXNBYm9ydCkge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBzY3JpcHQuc3JjID0gc291cmNlO1xuICAgIHByaW9yLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNjcmlwdCwgcHJpb3IpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4gKiBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gKiBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbiAqIGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuXG4gKiBAcGFyYW0gZnVuY1xuICogQHBhcmFtIHdhaXRcbiAqIEBwYXJhbSBpbW1lZGlhdGVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xud2luZG93LmRlYm91bmNlID0gZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgbGV0IHRpbWVvdXQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBsZXQgbGF0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgICAgICBsZXQgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICAgIGlmIChjYWxsTm93KSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIH07XG59O1xuXG4vKlxuICogQ29va2llIGhlbHBlciBjbGFzc1xuICovXG53aW5kb3cuQ29va2llID0ge1xuICAgIHNldDogZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBkYXlzKSB7XG4gICAgICAgIGxldCBkb21haW4sIGRvbWFpblBhcnRzLCBkYXRlLCBleHBpcmVzLCBob3N0O1xuXG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIChkYXlzICogMjQgKiA2MCAqIDYwICogMTAwMCkpO1xuICAgICAgICAgICAgZXhwaXJlcyA9IFwiOyBleHBpcmVzPVwiICsgZGF0ZS50b0dNVFN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZXhwaXJlcyA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBob3N0ID0gbG9jYXRpb24uaG9zdDtcbiAgICAgICAgaWYgKGhvc3Quc3BsaXQoJy4nKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIC8vIG5vIFwiLlwiIGluIGEgZG9tYWluIC0gaXQncyBsb2NhbGhvc3Qgb3Igc29tZXRoaW5nIHNpbWlsYXJcbiAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyBcIj1cIiArIHZhbHVlICsgZXhwaXJlcyArIFwiOyBwYXRoPS9cIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoZSBjb29raWUgb24gYWxsIHN1YiBkb21haW5zLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIFN0YXJ0IHdpdGggdHJ5aW5nIHRvIHNldCBjb29raWUgdG8gdGhlIHRvcCBkb21haW4uXG4gICAgICAgICAgICAvLyAoZXhhbXBsZTogaWYgdXNlciBpcyBvbiBmb28uY29tLCB0cnkgdG8gc2V0XG4gICAgICAgICAgICAvLyAgY29va2llIHRvIGRvbWFpbiBcIi5jb21cIilcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBJZiB0aGUgY29va2llIHdpbGwgbm90IGJlIHNldCwgaXQgbWVhbnMgXCIuY29tXCJcbiAgICAgICAgICAgIC8vIGlzIGEgdG9wIGxldmVsIGRvbWFpbiBhbmQgd2UgbmVlZCB0b1xuICAgICAgICAgICAgLy8gc2V0IHRoZSBjb29raWUgdG8gXCIuZm9vLmNvbVwiXG4gICAgICAgICAgICBkb21haW5QYXJ0cyA9IGhvc3Quc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGRvbWFpblBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBkb21haW4gPSAnLicgKyBkb21haW5QYXJ0cy5qb2luKCcuJyk7XG5cbiAgICAgICAgICAgIC8vIEZvciBkZXZlbG9wbWVudCBwdXJwb3NlLCByZW1vdmUgdGhpcyB3aGVuIG1vdmluZyB0byBwcm9kdWN0aW9uXG4gICAgICAgICAgICAvLyBkb21haW4gPSAnLmtvbW1hLnBybyc7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyBcIj1cIiArIHZhbHVlICsgZXhwaXJlcyArIFwiOyBwYXRoPS87IGRvbWFpbj1cIiArIGRvbWFpbjtcblxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgY29va2llIHdhcyBzdWNjZXNzZnVseSBzZXQgdG8gdGhlIGdpdmVuIGRvbWFpblxuICAgICAgICAgICAgLy8gKG90aGVyd2lzZSBpdCB3YXMgYSBUb3AtTGV2ZWwgRG9tYWluKVxuICAgICAgICAgICAgaWYgKENvb2tpZS5nZXQobmFtZSkgPT0gbnVsbCB8fCBDb29raWUuZ2V0KG5hbWUpICE9IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gYXBwZW5kIFwiLlwiIHRvIGN1cnJlbnQgZG9tYWluXG4gICAgICAgICAgICAgICAgZG9tYWluID0gJy4nICsgaG9zdDtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgXCI9XCIgKyB2YWx1ZSArIGV4cGlyZXMgKyBcIjsgcGF0aD0vOyBkb21haW49XCIgKyBkb21haW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBjb25zdCBuYW1lRVEgPSBuYW1lICsgXCI9XCI7XG4gICAgICAgIGNvbnN0IGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2EubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjID0gY2FbaV07XG4gICAgICAgICAgICB3aGlsZSAoYy5jaGFyQXQoMCkgPT09ICcgJykge1xuICAgICAgICAgICAgICAgIGMgPSBjLnN1YnN0cmluZygxLCBjLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjLmluZGV4T2YobmFtZUVRKSA9PT0gMCkgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWVFUS5sZW5ndGgsIGMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgZXJhc2U6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIENvb2tpZS5zZXQobmFtZSwgJycsIC0xKTtcbiAgICB9XG59O1xuXG4vKlxuICogSmF2YXNjcmlwdCB2ZXJzaW9uIG9mIHRoZSBudW1iZXJfZm9ybWF0IG1ldGhvZCBvZiBQSFBcbiAqL1xud2luZG93Lm51bWJlcl9mb3JtYXQgPSBmdW5jdGlvbiAobnVtYmVyLCBkZWNpbWFscywgZGVjX3BvaW50LCB0aG91c2FuZHNfc2VwKSB7XG4gICAgLy8gU3RyaXAgYWxsIGNoYXJhY3RlcnMgYnV0IG51bWVyaWNhbCBvbmVzLlxuICAgIG51bWJlciA9IChudW1iZXIgKyAnJykucmVwbGFjZSgvW14wLTkrXFwtRWUuXS9nLCAnJyk7XG4gICAgbGV0IG4gPSAhaXNGaW5pdGUoK251bWJlcikgPyAwIDogK251bWJlcixcbiAgICAgICAgcHJlYyA9ICFpc0Zpbml0ZSgrZGVjaW1hbHMpID8gMCA6IE1hdGguYWJzKGRlY2ltYWxzKSxcbiAgICAgICAgc2VwID0gKHR5cGVvZiB0aG91c2FuZHNfc2VwID09PSAndW5kZWZpbmVkJykgPyAnLCcgOiB0aG91c2FuZHNfc2VwLFxuICAgICAgICBkZWMgPSAodHlwZW9mIGRlY19wb2ludCA9PT0gJ3VuZGVmaW5lZCcpID8gJy4nIDogZGVjX3BvaW50LFxuICAgICAgICBzID0gJycsXG4gICAgICAgIHRvRml4ZWRGaXggPSBmdW5jdGlvbiAobiwgcHJlYykge1xuICAgICAgICAgICAgdmFyIGsgPSBNYXRoLnBvdygxMCwgcHJlYyk7XG4gICAgICAgICAgICByZXR1cm4gJycgKyBNYXRoLnJvdW5kKG4gKiBrKSAvIGs7XG4gICAgICAgIH07XG4gICAgLy8gRml4IGZvciBJRSBwYXJzZUZsb2F0KDAuNTUpLnRvRml4ZWQoMCkgPSAwO1xuICAgIHMgPSAocHJlYyA/IHRvRml4ZWRGaXgobiwgcHJlYykgOiAnJyArIE1hdGgucm91bmQobikpLnNwbGl0KCcuJyk7XG4gICAgaWYgKHNbMF0ubGVuZ3RoID4gMykge1xuICAgICAgICBzWzBdID0gc1swXS5yZXBsYWNlKC9cXEIoPz0oPzpcXGR7M30pKyg/IVxcZCkpL2csIHNlcCk7XG4gICAgfVxuICAgIGlmICgoc1sxXSB8fCAnJykubGVuZ3RoIDwgcHJlYykge1xuICAgICAgICBzWzFdID0gc1sxXSB8fCAnJztcbiAgICAgICAgc1sxXSArPSBuZXcgQXJyYXkocHJlYyAtIHNbMV0ubGVuZ3RoICsgMSkuam9pbignMCcpO1xuICAgIH1cbiAgICByZXR1cm4gcy5qb2luKGRlYyk7XG59O1xuXG5cbi8qKlxuICogRWxlbWVudC5jbG9zZXN0KCkgcG9seWZpbGxcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2Nsb3Nlc3QjUG9seWZpbGxcbiAqL1xuaWYgKCFFbGVtZW50LnByb3RvdHlwZS5jbG9zZXN0KSB7XG4gICAgaWYgKCFFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzKSB7XG4gICAgICAgIEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgPSBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG4gICAgfVxuICAgIEVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3QgPSBmdW5jdGlvbiAocykge1xuICAgICAgICB2YXIgZWwgPSB0aGlzO1xuICAgICAgICB2YXIgYW5jZXN0b3IgPSB0aGlzO1xuICAgICAgICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyhlbCkpIHJldHVybiBudWxsO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoYW5jZXN0b3IubWF0Y2hlcyhzKSkgcmV0dXJuIGFuY2VzdG9yO1xuICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9IHdoaWxlIChhbmNlc3RvciAhPT0gbnVsbCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG59XG5cbndpbmRvdy5BamF4ID0ge1xuXG4gICAgLy9UT0RPOiBDYW4gd2UgY3JlYXRlIGEgcHJlcGFyZSByZXF1ZXN0IGZ1bmN0aW9uID8/XG5cbiAgICBnZXQ6IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICBsZXQgdG9rZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJjc3JmLXRva2VuXCJdJykuY29udGVudDtcblxuICAgICAgICB4aHIub3BlbignZ2V0JywgdXJsLCB0cnVlKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLUNTUkYtVE9LRU4nLCB0b2tlbik7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLVJlcXVlc3RlZC1XaXRoJywgJ1hNTEh0dHBSZXF1ZXN0Jyk7XG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHhocik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfSxcblxuICAgIHBvc3Q6IGZ1bmN0aW9uKHVybCwgZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICBsZXQgdG9rZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJjc3JmLXRva2VuXCJdJykuY29udGVudDtcblxuICAgICAgICB4aHIub3BlbigncG9zdCcsIHVybCwgdHJ1ZSk7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignWC1DU1JGLVRPS0VOJywgdG9rZW4pO1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignWC1SZXF1ZXN0ZWQtV2l0aCcsICdYTUxIdHRwUmVxdWVzdCcpO1xuICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh4aHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB4aHIuc2VuZCggSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2FwaXRhbGl6ZSB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBzdHJpbmdcbiAqIEBwYXJhbSBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbndpbmRvdy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn07XG5cbi8qKlxuICogQ29udmVydCBzbmFrZSBjYXNlIGludG8gY2FtZWxjYXNlXG4gKlxuICogQHBhcmFtIHN0cmluZ1xuICogQHJldHVybnMgeyp9XG4gKi9cbndpbmRvdy5zbmFrZVRvQ2FtZWwgPSBmdW5jdGlvbiAoc3RyaW5nKXtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhcXC1cXHcpL2csIGZ1bmN0aW9uKG0pe3JldHVybiBtWzFdLnRvVXBwZXJDYXNlKCk7fSk7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgaW5kZXggb2YgYW4gZWxlbWVudCBpbnNpZGUgaXRzIHBhcmVudFxuICovXG53aW5kb3cuaW5kZXhJblBhcmVudD0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xuICAgIGxldCBudW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGNoaWxkcmVuW2ldID09IG5vZGUpIHJldHVybiBudW07XG4gICAgICAgIGlmIChjaGlsZHJlbltpXS5ub2RlVHlwZSA9PSAxKSBudW0rKztcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufTtcblxuLyoqXG4gKiBGb3Igc2VjdXJpdHkgcmVhc29ucyBpT1MgU2FmYXJpIG9ubHkgYWxsb3dzIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykgZm9yIHRleHQgd2l0aGluIGEgY29udGVudEVkaXRhYmxlIGNvbnRhaW5lci5cbiAqIFRoZSB3b3JrYXJvdW5kIGlzIHRvIGRldGVjdCBpT1MgU2FmYXJpIGFuZCBxdWlja2x5IHRvZ2dsZSBjb250ZW50RWRpdGFibGUgYmVmb3JlIGV4ZWN1dGluZyBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpLlxuICogV2hlYiBpbnB1dCBvciB0ZXh0YXJlYSBpcyBSRUFET05MWSB5b3UgY2FuIHByZXZlbnQgdGhlIHVud2FudGVkIHBvcHVwIHdpdGggY29weS9wYXN0ZSBmdW5jdGlvbnMgYW5kIHRoZSBpbnB1dCBrZXlib2FyZFxuICogQ29kZSBmcm9tOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDY5ODE4NDdcbiAqL1xud2luZG93LmNvcHlUb0NsaXBib2FyZCA9IGZ1bmN0aW9uIChlbCkge1xuXG4gICAgLy8gcmVzb2x2ZSB0aGUgZWxlbWVudFxuICAgIGVsID0gKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCkgOiBlbDtcblxuICAgIC8vIGhhbmRsZSBpT1MgYXMgYSBzcGVjaWFsIGNhc2VcbiAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaXBhZHxpcG9kfGlwaG9uZS9pKSkge1xuXG4gICAgICAgIC8vIHNhdmUgY3VycmVudCBjb250ZW50RWRpdGFibGUvcmVhZE9ubHkgc3RhdHVzXG4gICAgICAgIGNvbnN0IGVkaXRhYmxlID0gZWwuY29udGVudEVkaXRhYmxlO1xuICAgICAgICBjb25zdCByZWFkT25seSA9IGVsLnJlYWRPbmx5O1xuXG4gICAgICAgIC8vIGNvbnZlcnQgdG8gZWRpdGFibGUgd2l0aCByZWFkb25seSB0byBzdG9wIGlPUyBrZXlib2FyZCBvcGVuaW5nXG4gICAgICAgIGVsLmNvbnRlbnRFZGl0YWJsZSA9IHRydWU7XG4gICAgICAgIGVsLnJlYWRPbmx5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBjcmVhdGUgYSBzZWxlY3RhYmxlIHJhbmdlXG4gICAgICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbCk7XG5cbiAgICAgICAgLy8gc2VsZWN0IHRoZSByYW5nZVxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgOTk5OTk5KTtcblxuICAgICAgICAvLyByZXN0b3JlIGNvbnRlbnRFZGl0YWJsZS9yZWFkT25seSB0byBvcmlnaW5hbCBzdGF0ZVxuICAgICAgICBlbC5jb250ZW50RWRpdGFibGUgPSBlZGl0YWJsZTtcbiAgICAgICAgZWwucmVhZE9ubHkgPSByZWFkT25seTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVsLnNlbGVjdCgpO1xuICAgIH1cblxuICAgIC8vIGV4ZWN1dGUgY29weSBjb21tYW5kXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCByZWxhdGVkIHRvIHRoZSBib2R5XG4gKlxuICogQHBhcmFtIGVsXG4gKiBAcmV0dXJucyB7e3RvcDogbnVtYmVyLCBsZWZ0OiBudW1iZXJ9fVxuICovXG53aW5kb3cuYm9keU9mZnNldCA9IGZ1bmN0aW9uIChlbCkge1xuICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgc2Nyb2xsTGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG4gICAgcmV0dXJuIHsgdG9wOiByZWN0LnRvcCArIHNjcm9sbFRvcCwgbGVmdDogcmVjdC5sZWZ0ICsgc2Nyb2xsTGVmdCB9XG59OyIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBDb29raWUgaGFuZGxlclxuICAgLSBQcmltYXJ5IHVzYWdlIGZvciB0b2dnbGluZyB0aGUgY29va2llIG1lc3NhZ2UgYW5kL29yIHN3aXRjaFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbmNvbnN0IENvb2tpZUhhbmRsZXIgPSB7XG5cbiAgICBjb29raWVCYXIgOiBudWxsLFxuICAgIGNvb2tpZU92ZXJsYXkgOiBudWxsLFxuICAgIGNvb2tpZU1lc3NhZ2UgOiBudWxsLFxuXG4gICAgY29va2llU3dpdGNoIDogbnVsbCxcblxuICAgIGNvb2tpZUZhZGVPdXRBbmltYXRpb25EdXJhdGlvbiA6IDQwMCxcbiAgICBhY2NlcHRUcmFja2luZyA6IGZhbHNlLFxuXG4gICAgLy8gSW5pdGlhbGl6ZSBjb29raWUgaGFuZGxlclxuICAgIGluaXQgOiBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICAvLyBCaW5kIGNvb2tpZSBiYXIgb3Igb3ZlcmxheSB0byBjb29raWVNZXNzYWdlXG4gICAgICAgIENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy1jb29raWUtYmFyLCAuanMtY29va2llLW92ZXJsYXknKTtcblxuICAgICAgICAvLyBCaW5kIGNvb2tpZSBiYXIgdG8gY29va2llQmFyXG4gICAgICAgIENvb2tpZUhhbmRsZXIuY29va2llQmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWNvb2tpZS1iYXInKTtcblxuICAgICAgICAvLyBJZiBpc3NldCBpbml0IHRoZSBmdW5jdGlvbnMgZm9yIGNvb2tpZSBiYXJcbiAgICAgICAgaWYoaXNzZXQoQ29va2llSGFuZGxlci5jb29raWVCYXIpKXtcbiAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuaW5pdENvb2tpZUJhcigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICAvLyBFbHNlIHRyeSB0byBjb25uZWN0IGNvb2tpZSBvdmVybGF5IHdpdGggdHJhY2tpbmcgdG8gY29va2llT3ZlcmxheVxuICAgICAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVPdmVybGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWNvb2tpZS1vdmVybGF5Jyk7XG5cbiAgICAgICAgICAgIC8vIElmIGlzc2V0IGluaXQgdGhlIGZ1bmN0aW9ucyBmb3IgY29va2llIG92ZXJsYXlcbiAgICAgICAgICAgIGlmKGlzc2V0KENvb2tpZUhhbmRsZXIuY29va2llT3ZlcmxheSkpe1xuICAgICAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuaW5pdENvb2tpZU92ZXJsYXkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGVpdGhlciB0eXBlIG9mIGNvb2tpZSBoYXMgYmVlbiBmb3VuZCBjaGVjayBpZiBzZXR0aW5ncyBhcmUgZGVmaW5lZFxuICAgICAgICBpZihpc3NldChDb29raWVIYW5kbGVyLmNvb2tpZU1lc3NhZ2UpKXtcbiAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuY2hlY2tGb3JDb29raWVTZXR0aW5ncygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmluZCBjb29raWUgc3dpdGNoIHRvIEhhbmRsZXJcbiAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVTd2l0Y2ggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtY29va2llLXN3aXRjaCcpO1xuICAgICAgICAvLyBJZiBpc3NldCBpbml0IHRoZSBmdW5jdGlvbnMgZm9yIGNvb2tpZSBzd2l0Y2hcbiAgICAgICAgaWYoaXNzZXQoQ29va2llSGFuZGxlci5jb29raWVTd2l0Y2gpKXtcbiAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuaW5pdENvb2tpZVN3aXRjaCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIEluaXQgdGhlIGNvb2tpZSBiYXIgYWN0aW9uc1xuICAgIGluaXRDb29raWVCYXI6IGZ1bmN0aW9uKCl7XG4gICAgICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gQ29va2llSGFuZGxlci5jb29raWVCYXIucXVlcnlTZWxlY3RvcignLmpzLWRpc2FibGUtY29va2llLWJhcicpO1xuICAgICAgICBpZihpc3NldChjbG9zZUJ1dHRvbikpe1xuICAgICAgICAgICAgY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBDb29raWVIYW5kbGVyLmNsb3NlQ29va2llTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gSW5pdCB0aGUgY29va2llIG92ZXJsYXkgYWN0aW9uc1xuICAgIGluaXRDb29raWVPdmVybGF5OiBmdW5jdGlvbigpe1xuXG4gICAgICAgIC8vIE9wZW4gdGhlIGNvb2tpZSBzZXR0aW5ncyBldmVudFxuICAgICAgICBjb25zdCBvcGVuQ29va2llU2V0dGluZ3NCdXR0b24gPSBDb29raWVIYW5kbGVyLmNvb2tpZU1lc3NhZ2UucXVlcnlTZWxlY3RvcignLmpzLWNoYW5nZS1jb29raWVzLXNldHRpbmdzJyk7XG4gICAgICAgIGlmKGlzc2V0KG9wZW5Db29raWVTZXR0aW5nc0J1dHRvbikpe1xuICAgICAgICAgICAgb3BlbkNvb2tpZVNldHRpbmdzQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgQ29va2llSGFuZGxlci5vcGVuQ29va2llU2V0dGluZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVG9nZ2xlIG9mIHRoZSB0cmFja2luZyBpbnB1dFxuICAgICAgICBjb25zdCB0b2dnbGVUcmFja2luZ0lucHV0ID0gQ29va2llSGFuZGxlci5jb29raWVNZXNzYWdlLnF1ZXJ5U2VsZWN0b3IoJy5jLWNvb2tpZS10eXBlX19pbnB1dC0tdHJhY2tpbmcnKTtcbiAgICAgICAgaWYoaXNzZXQodG9nZ2xlVHJhY2tpbmdJbnB1dCkpe1xuXG4gICAgICAgICAgICBpZih0b2dnbGVUcmFja2luZ0lucHV0LmNoZWNrZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBDb29raWVIYW5kbGVyLmFjY2VwdFRyYWNraW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9nZ2xlVHJhY2tpbmdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBDb29raWVIYW5kbGVyLnRvZ2dsZVRyYWNraW5nU2V0dGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBY2NlcHQgLyBTYXZlIGNvb2tpZXMgYnV0dG9uIGV2ZW50XG4gICAgICAgIGNvbnN0IGFjY2VwdEJ1dHRvbiA9IENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZS5xdWVyeVNlbGVjdG9yKCcuanMtYWNjZXB0LWNvb2tpZXMnKTtcbiAgICAgICAgaWYoaXNzZXQoYWNjZXB0QnV0dG9uKSl7XG4gICAgICAgICAgICBhY2NlcHRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBDb29raWVIYW5kbGVyLnNldENvb2tpZVNldHRpbmdzKTtcbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIC8vIEluaXQgdGhlIGNvb2tpZSBzd2l0Y2ggYWN0aW9uc1xuICAgIGluaXRDb29raWVTd2l0Y2g6IGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgLy8gVG9nZ2xlIG9mIHRoZSB0cmFja2luZyBpbnB1dFxuICAgICAgICBjb25zdCB0b2dnbGVUcmFja2luZ0lucHV0ID0gQ29va2llSGFuZGxlci5jb29raWVTd2l0Y2gucXVlcnlTZWxlY3RvcignLmMtY29va2llLXR5cGVfX2lucHV0LS10cmFja2luZycpO1xuICAgICAgICBpZihpc3NldCh0b2dnbGVUcmFja2luZ0lucHV0KSl7XG5cbiAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBzdGF0ZSBvZiB0aGUgY29va2llIHN3aXRjaCBpbnB1dCBiZWNhdXNlIHRoZSBwb3AtdXAgaXMgZm9yY2VkIG9uIGNoZWNrZWRcbiAgICAgICAgICAgIC8vIHdoaWxlIHRoZSBzd2l0Y2ggY2hlY2tzIGJ5IHBocCBpZiB0aGUgY29va2llIHJlYWxseSBleGlzdCBvciBub3RcbiAgICAgICAgICAgIGlmKHRvZ2dsZVRyYWNraW5nSW5wdXQuY2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuYWNjZXB0VHJhY2tpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBDb29raWVIYW5kbGVyLmFjY2VwdFRyYWNraW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRvZ2dsZVRyYWNraW5nSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgQ29va2llSGFuZGxlci50b2dnbGVUcmFja2luZ1NldHRpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2F2ZSBjb29raWVzIGJ1dHRvbiBldmVudFxuICAgICAgICBjb25zdCBzYXZlQnV0dG9uID0gQ29va2llSGFuZGxlci5jb29raWVTd2l0Y2gucXVlcnlTZWxlY3RvcignLmpzLXNhdmUtY29va2llLXNldHRpbmdzJyk7XG4gICAgICAgIGlmKGlzc2V0KHNhdmVCdXR0b24pKXtcbiAgICAgICAgICAgIHNhdmVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuY29va2llRmFkZU91dEFuaW1hdGlvbkR1cmF0aW9uID0gMDsgLy8gT24gdGhlIHN3aXRjaCBjbGljayB3ZSB3YW50IG5vIGRlbGF5IDopXG4gICAgICAgICAgICAgICAgQ29va2llSGFuZGxlci5zZXRDb29raWVTZXR0aW5ncygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgIH0sXG5cbiAgICBjaGVja0ZvckNvb2tpZVNldHRpbmdzOiBmdW5jdGlvbigpe1xuICAgICAgICBpZiAoQ29va2llLmdldCgnY29va2llTWVzc2FnZScpKSB7XG4gICAgICAgICAgICBDb29raWVIYW5kbGVyLmNvb2tpZU1lc3NhZ2UuY2xhc3NMaXN0LmFkZCgnaXMtYWNjZXB0ZWQnKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnaXMtY29va2llcy1hY2NlcHRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVNZXNzYWdlLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjY2VwdGVkJyk7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWNvb2tpZXMtYWNjZXB0ZWQnKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjbG9zZUNvb2tpZU1lc3NhZ2U6IGZ1bmN0aW9uICgpe1xuICAgICAgICBDb29raWUuc2V0KCdjb29raWVNZXNzYWdlJywgdHJ1ZSwgOTApO1xuICAgICAgICBDb29raWVIYW5kbGVyLmNvb2tpZU1lc3NhZ2UuY2xhc3NMaXN0LmFkZCgnaXMtdHJhbnNpdGlvbmluZy1vdXQnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdpcy1jb29raWVzLWFjY2VwdGVkJyk7XG4gICAgfSxcblxuICAgIG9wZW5Db29raWVTZXR0aW5nczogZnVuY3Rpb24gKCl7XG4gICAgICAgIENvb2tpZUhhbmRsZXIuY29va2llT3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuanMtY29va2llLXNldHRpbmdzJykuY2xhc3NMaXN0LnJlbW92ZSgnaXMtaGlkZGVuJyk7XG4gICAgICAgIENvb2tpZUhhbmRsZXIuY29va2llT3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuanMtY29va2llLWluZm8nKS5jbGFzc0xpc3QuYWRkKCdpcy1oaWRkZW4nKTtcbiAgICB9LFxuXG4gICAgdG9nZ2xlVHJhY2tpbmdTZXR0aW5nOiBmdW5jdGlvbigpe1xuICAgICAgICBpZihDb29raWVIYW5kbGVyLmFjY2VwdFRyYWNraW5nKXtcbiAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuYWNjZXB0VHJhY2tpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5hY2NlcHRUcmFja2luZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0Q29va2llU2V0dGluZ3M6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLyBTZXQgdHJhY2tpbmcgY29va2llIG9yIGRlbGV0ZSBpdCBpZiBpc3NldCBhY2NvcmRpbmcgdG8gdGhlIGRlc2lyZWQgc2V0dGluZ3NcbiAgICAgICAgaWYoQ29va2llSGFuZGxlci5hY2NlcHRUcmFja2luZyl7XG4gICAgICAgICAgICBDb29raWUuc2V0KCd0cmFja2luZ0Nvb2tpZUFjY2VwdGVkJywgJ3RydWUnLCA5MCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGlmKENvb2tpZS5nZXQoJ3RyYWNraW5nQ29va2llQWNjZXB0ZWQnKSl7XG4gICAgICAgICAgICAgICAgQ29va2llLmVyYXNlKCd0cmFja2luZ0Nvb2tpZUFjY2VwdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBDb29raWVIYW5kbGVyLmNsb3NlQ29va2llTWVzc2FnZSgpO1xuXG4gICAgICAgIC8vIFJlbG9hZCBhZnRlciBhbmltYXRpb24gdG8gYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZSB0cmFja2luZyBhZnRlciBhY2NlcHRpbmcgaXRcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKClcbiAgICAgICAgfSwgQ29va2llSGFuZGxlci5jb29raWVGYWRlT3V0QW5pbWF0aW9uRHVyYXRpb24pO1xuICAgIH0sXG5cbn07XG5cbkNvb2tpZUhhbmRsZXIuaW5pdCgpOyJdLCJzb3VyY2VSb290IjoiIn0=