File: D:/HostingSpaces/SBogers10/hem-mechatronics.komma.pro/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 s(){throw new Error("clearTimeout has not been defined")}function a(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:s}catch(e){i=s}}();var l,c=[],u=!1,d=-1;function f(){u&&l&&(u=!1,l.length?c=l.concat(c):d=-1,c.length&&g())}function g(){if(!u){var e=a(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===s||!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 h(e,t){this.fun=e,this.array=t}function m(){}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 h(e,t)),1!==c.length||u||a(g)},h.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=m,o.addListener=m,o.once=m,o.off=m,o.removeListener=m,o.removeAllListeners=m,o.emit=m,o.prependListener=m,o.prependOnceListener=m,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,s,a;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)}a=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 s(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)}a(t.promise,i)}else(1===e._state?a:c)(t.promise,e._value)})):e._deferreds.push(t)}function a(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++)s(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,a(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 s(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,s){try{if(s&&("object"===l(s)||"function"==typeof s)){var a=s.then;if("function"==typeof a)return void a.call(s,function(t){r(e,t)},n)}i[e]=s,0==--o&&t(i)}catch(e){n(e)}}for(var s=0;s<i.length;s++)r(s,i[s])})},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 g=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 g?g.Promise.prototype.finally||(g.Promise.prototype.finally=e):g.Promise=r},"object"===l(t)&&void 0!==e?a():void 0===(s="function"==typeof(r=a)?r.call(t,n,t,e):r)||(e.exports=s)}).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 s=i[r].getAttribute("id");if(null!==s){var a=new l({sliderId:s,slideQuery:"#"+s+" .js-slider-slide",navigationButtons:"#"+s+" .js-slider-button",dots:"#"+s+" .js-slider-indicator"});n.push(new c(a.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 s=document.querySelectorAll(this.settings.dots),a=s.length,l=0;l<a;l++){s[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,s,a,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(){h(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){h(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(){h(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):i=function(e){setTimeout(h,0,e)}:(s="setImmediate$"+Math.random()+"$",a=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(s)&&h(+t.data.slice(s.length))},e.addEventListener?e.addEventListener("message",a,!1):e.attachEvent("onmessage",a),i=function(t){e.postMessage(s+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=g}function g(e){delete c[e]}function h(e){if(u)setTimeout(h,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{g(e),u=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,n("yLpj"),n("8oxB"))},kdf5:function(e,t){var n={map:"",key:"AIzaSyCVGPUmRmQRxXvzzWu3Xyu77XebQxQ-f4Y",location:{lat:51.261089,lng:5.598172},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,s=0;s<r;s++){var a=t[s],l=a.getAttribute("name");n._isVisitorBanned(l)||(i[l]=n._getArrangement(a),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,s=null;if("_honey"!==o&&"_secretCode"!==o){var a=t.querySelector("#"+o);r=n._grabVisitorJacket(a),isset(r)&&(s=r.querySelector(".js-form-group-error")),isset(s)&&(s.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(s)&&d.length>0)){var f=s.innerHTML;f+="<span>"+capitalizeFirstLetter(d)+"</span>",s.innerHTML=f}if(isset(i)&&d.length>0){var g=i.innerHTML;g+="<li>"+capitalizeFirstLetter(d)+"</li>",i.innerHTML=g}}})},_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("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()},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,s=function(){i=null,n||e.apply(o,r)},a=n&&!i;clearTimeout(i),i=setTimeout(s,t),a&&e.apply(o,r)}},window.Cookie={set:function(e,t,n){var i,o,r,s,a;n?((r=new Date).setTime(r.getTime()+24*n*60*60*1e3),s="; expires="+r.toGMTString()):s="",1===(a=location.host).split(".").length?document.cookie=e+"="+t+s+"; path=/":((o=a.split(".")).shift(),i="."+o.join("."),document.cookie=e+"="+t+s+"; path=/; domain="+i,null!=Cookie.get(e)&&Cookie.get(e)==t||(i="."+a,document.cookie=e+"="+t+s+"; 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,s=void 0===i?",":i,a=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,s)),(l[1]||"").length<r&&(l[1]=l[1]||"",l[1]+=new Array(r-l[1].length+1).join("0")),l.join(a)},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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9nbG9iYWwvc2Nyb2xsSGFuZGxlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2NvbXBvbmVudHMvb3ZlcmxheU1lbnVIYW5kbGVyLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2NvbXBvbmVudHMveW91dHViZUhhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy9zY3JvbGxUb0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2dsb2JhbC9wb2x5ZmlsbHMvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvZ2xvYmFsL3BvbHlmaWxscy9pc0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy9zbGlkZXJIYW5kbGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2NvbXBvbmVudHMvbWFwc0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvY29tcG9uZW50cy9jaG9jb2xhdGVGYWN0b3J5LmpzIiwid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9zaXRlL2FwcC5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9nbG9iYWwvYnJvd3NlckhhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3NpdGUvZ2xvYmFsL2hlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvc2l0ZS9jb21wb25lbnRzL2Nvb2tpZUhhbmRsZXIuanMiXSwibmFtZXMiOlsiU2Nyb2xsSGFuZGxlciIsInRpbWUiLCJEYXRlIiwibm93IiwidGltZW91dCIsIndhaXRUaHJvdHRsZSIsIndhaXREZWJvdW5jZSIsImxhc3RTY3JvbGxUb3BQb3NpdGlvbiIsInNjcm9sbERpcmVjdGlvbkRvd24iLCJzY3JvbGxEaXJlY3Rpb25VcCIsImluaXQiLCJ0cmlnZ2VyT25Jbml0Iiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInRyaWdnZXJUaHJvdHRsZSIsInRyaWdnZXJTbW9vdGgiLCJpc3NldCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJ0cmlnZ2VyRGVib3VuY2UiLCJ0cmlnZ2VyRWxlbWVudEluVmlld3BvcnRBbmltYXRpb24iLCJkZXRlY3RTY3JvbGxEaXJlY3Rpb24iLCJ0b2dnbGVTdGlja3lIZWFkZXIiLCJkZXRlY3RJZkVsZW1lbnRJc1BhcnRseUluVmlld3BvcnQiLCJlbCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aW5kb3dIZWlnaHQiLCJpbm5lckhlaWdodCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50SGVpZ2h0Iiwid2luZG93V2lkdGgiLCJpbm5lcldpZHRoIiwiY2xpZW50V2lkdGgiLCJ2ZXJ0aWNhbEluVmlldyIsInRvcCIsImhlaWdodCIsImhvcml6b250YWxJblZpZXciLCJsZWZ0Iiwid2lkdGgiLCJkZXRlY3RJZkVsZW1lbnRJc0Z1bGx5SW5WaWV3cG9ydCIsImJvdHRvbSIsInNjcm9sbFRvcFBvc2l0aW9uIiwicGFnZVlPZmZzZXQiLCJzY3JvbGxUb3AiLCJlbGVtZW50cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJlbGVtZW50c0xlbmd0aCIsImxlbmd0aCIsImUiLCJlbGVtZW50IiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwic3RpY2t5SGVhZGVyIiwicXVlcnlTZWxlY3RvciIsInN1Ym5hdkxpc3QiLCJzdWJOYXZJc1Zpc2libGUiLCJoaWRkZW4iLCJpIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInZpc2liaWxpdHkiLCJib2R5IiwiYWRkIiwiY2FjaGVkU2V0VGltZW91dCIsImNhY2hlZENsZWFyVGltZW91dCIsInByb2Nlc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdFNldFRpbW91dCIsIkVycm9yIiwiZGVmYXVsdENsZWFyVGltZW91dCIsInJ1blRpbWVvdXQiLCJmdW4iLCJjYWxsIiwidGhpcyIsImN1cnJlbnRRdWV1ZSIsInF1ZXVlIiwiZHJhaW5pbmciLCJxdWV1ZUluZGV4IiwiY2xlYW5VcE5leHRUaWNrIiwiY29uY2F0IiwiZHJhaW5RdWV1ZSIsImxlbiIsInJ1biIsIm1hcmtlciIsInJ1bkNsZWFyVGltZW91dCIsIkl0ZW0iLCJhcnJheSIsIm5vb3AiLCJuZXh0VGljayIsImFyZ3MiLCJBcnJheSIsImFyZ3VtZW50cyIsInB1c2giLCJwcm90b3R5cGUiLCJhcHBseSIsInRpdGxlIiwiYnJvd3NlciIsImVudiIsImFyZ3YiLCJ2ZXJzaW9uIiwidmVyc2lvbnMiLCJvbiIsImFkZExpc3RlbmVyIiwib25jZSIsIm9mZiIsInJlbW92ZUxpc3RlbmVyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiZW1pdCIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJuYW1lIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwiZGlyIiwidW1hc2siLCJib2R5U2Nyb2xsTG9jayIsInJlcXVpcmUiLCJPdmVybGF5TWVudUhhbmRsZXIiLCJvdmVybGF5TWVudVRyaWdnZXJMaXN0Iiwib3ZlcmxheU1lbnVUcmlnZ2VyTGlzdENvdW50Iiwib3ZlcmxheU1lbnVUcmlnZ2VyIiwiaW5pdE92ZXJsYXlNZW51IiwidG9nZ2xlT3ZlcmxheU1lbnUiLCJldmVudCIsIm92ZXJsYXlNZW51TmF2IiwiZW5hYmxlQm9keVNjcm9sbCIsImNvbnRhaW5zIiwiZm9yRWFjaCIsImVsZW0iLCJ0YWJJbmRleCIsImRpc2FibGVCb2R5U2Nyb2xsIiwidG9nZ2xlIiwiWW91dHViZUhhbmRsZXIiLCJ5b3V0dWJlQ2xhc3MiLCJwbGF5ZXJzIiwieW91dHViZVBsYXllcnMiLCJ5b3V0dWJlUGxheWVyc0Ftb3VudCIsInlvdXR1YmVQbGF5ZXIiLCJnZXRBdHRyaWJ1dGUiLCJ5b3V0dWJlRWxlbWVudCIsImlkIiwibGluayIsImF1dG9QbGF5IiwicGFyc2VJbnQiLCJjb25zb2xlIiwibG9nIiwiaW5pdFlvdXR1YmUiLCJZVCIsIlBsYXllciIsIm9uWW91VHViZVBsYXllckFQSVJlYWR5IiwibG9hZFBsYXllcnMiLCJnZXRTY3JpcHQiLCJwbGF5ZXIiLCJ2aWRlb0lkIiwiaG9zdCIsInBsYXllclZhcnMiLCJtb2Rlc3RicmFuZGluZyIsInJlbCIsImRpc2FibGVrYiIsImF1dG9wbGF5IiwiZXZlbnRzIiwib25TdGF0ZUNoYW5nZSIsIm9uUmVhZHkiLCJwbGF5ZXJDb250YWluZXJJZCIsInRhcmdldCIsImdldElmcmFtZSIsImRhdGEiLCJQbGF5ZXJTdGF0ZSIsIkVOREVEIiwicGxheVZpZGVvIiwiU2Nyb2xsVG9IYW5kbGVyIiwib2Zmc2V0IiwiZHVyYXRpb24iLCJzdGFydCIsImNoYW5nZSIsImN1cnJlbnRUaW1lIiwiYWxsb3dBbmltYXRpb24iLCJzY3JvbGxUb0FuaW1hdGlvbiIsImVhc2luZyIsImFuY2hvckxpbmtzIiwiYW5jaG9yTGlua3NBbW91bnQiLCJwcmVwYXJlU2Nyb2xsVG8iLCJwcmV2ZW50RGVmYXVsdCIsImVsZW1lbnRJZCIsInN1YnN0ciIsImluZGV4T2YiLCJzY3JvbGxUb0VsZW1lbnRQb3NpdGlvbiIsImdldEVsZW1lbnRCeUlkIiwiTWF0aCIsIm1heCIsInN0YXJ0VGltZSIsInBlcmZvcm1hbmNlIiwiZ2V0VGltZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGwiLCJhYm9ydFNjcm9sbEFuaW1hdGlvbiIsInRpbWVzdGFtcCIsInByb2dyZXNzIiwibWluIiwiRWFzaW5nRnVuY3Rpb25zIiwibmV3U2Nyb2xsVG9wIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJmYWN0b3J5IiwiZmluYWxseUNvbnN0cnVjdG9yIiwiY2FsbGJhY2siLCJjb25zdHJ1Y3RvciIsInRoZW4iLCJ2YWx1ZSIsInJlc29sdmUiLCJyZWFzb24iLCJyZWplY3QiLCJzZXRUaW1lb3V0RnVuYyIsIlByb21pc2UiLCJmbiIsIlR5cGVFcnJvciIsIl9zdGF0ZSIsIl9oYW5kbGVkIiwiX3ZhbHVlIiwidW5kZWZpbmVkIiwiX2RlZmVycmVkcyIsImRvUmVzb2x2ZSIsImhhbmRsZSIsInNlbGYiLCJkZWZlcnJlZCIsIl9pbW1lZGlhdGVGbiIsImNiIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwicmV0IiwicHJvbWlzZSIsIm5ld1ZhbHVlIiwiX3R5cGVvZiIsImZpbmFsZSIsInRoaXNBcmciLCJfdW5oYW5kbGVkUmVqZWN0aW9uRm4iLCJIYW5kbGVyIiwiZG9uZSIsImV4IiwicHJvbSIsImFsbCIsImFyciIsInNsaWNlIiwicmVtYWluaW5nIiwicmVzIiwidmFsIiwicmFjZSIsInZhbHVlcyIsInNldEltbWVkaWF0ZSIsImVyciIsIndhcm4iLCJnbG9iYWxOUyIsImdsb2JhbCIsIl9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fIiwiZGVmaW5lIiwiX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIk51bWJlciIsImlzSW50ZWdlciIsImlzRmluaXRlIiwiZmxvb3IiLCJTbGlkZXJzIiwic2xpZGVyQ29udGFpbmVycyIsInNsaWRlckNvbnRhaW5lcnNMZW5ndGgiLCJzbGlkZXJJZCIsIlNsaWRlcnNldHRpbmciLCJTbGlkZXJTZXR0aW5nIiwic2xpZGVRdWVyeSIsIm5hdmlnYXRpb25CdXR0b25zIiwiZG90cyIsIlNsaWRlciIsInByZXBhcmVQYXJhbWV0ZXJzIiwic2V0dGluZ3NPYmplY3QiLCJkZWZpbmVkUHJldmlvdXNOZXh0IiwiYXV0b1NsaWRlciIsInNsaWRlckludGVydmFsIiwic2V0U2xpZGVySWQiLCJzdHJpbmciLCJzZXREZWZpbmVkUHJldmlvdXNOZXh0IiwiYm9vbGVhbiIsInNldEF1dG9TbGlkZXIiLCJzZXRTbGlkZXJJbnRlcnZhbCIsImludGVnZXIiLCJzZXRTbGlkZVF1ZXJ5Iiwic2V0TmF2aWdhdGlvbkJ1dHRvbnMiLCJzZXREb3RzIiwiZ2V0U2xpZGVySWQiLCJnZXREZWZpbmVkUHJldmlvdXNOZXh0IiwiZ2V0QXV0b1NsaWRlciIsImdldFNsaWRlckludGVydmFsIiwiZ2V0U2xpZGVRdWVyeSIsImdldE5hdmlnYXRpb25CdXR0b25zIiwiZ2V0RG90cyIsImZpbGwiLCJzZXR0aW5nc09iamVjdEtleXMiLCJPYmplY3QiLCJrZXlzIiwic2V0dGluZ3NPYmplY3RMZW5ndGgiLCJrZXkiLCJzZXR0aW5ncyIsInNsaWRlck9iamVjdCIsImFjdGl2ZVNsaWRlSWQiLCJwcmV2aW91c1NsaWRlSWQiLCJuZXh0U2xpZGVJZCIsImF2YWlsYWJsZVNsaWRlcyIsInNsaWRlcyIsImF1dG9TbGlkZXJJbnRlcnZhbCIsInNldFByZXZpb3VzQW5kTmV4dFNsaWRlIiwic2V0U2xpZGUiLCJzd2lwZUdlc3R1cmVzIiwiSGFtbWVyIiwicmVzZXRBdXRvU2xpZGVyIiwibmV4dFNsaWRlIiwicHJldmlvdXNTbGlkZSIsIm5hdmlnYXRpb25CdXR0b25zTGVuZ3RoIiwiY2xpY2tOYXZpZ2F0aW9uQnV0dG9uIiwiZG90c0xlbmd0aCIsImNsaWNrRG90IiwiY2xlYXJJbnRlcnZhbCIsInNldEludGVydmFsIiwic2xpZGVzTGVuZ3RoIiwic2xpZGUiLCJzdHlsZSIsInBvaW50ZXJFdmVudHMiLCJzbGlkZU9yZGVyIiwic2V0QWN0aXZlRG90IiwibmF2QnV0dG9uIiwibmV4dCIsInByZXZpb3VzIiwic2V0QXR0cmlidXRlIiwiY2xpY2tlZERvdCIsImRvdCIsImRvdE9yZGVyIiwic2NvcGUiLCJGdW5jdGlvbiIsIlRpbWVvdXQiLCJjbGVhckZuIiwiX2lkIiwiX2NsZWFyRm4iLCJjbG9zZSIsInVucmVmIiwicmVmIiwiZW5yb2xsIiwiaXRlbSIsIm1zZWNzIiwiX2lkbGVUaW1lb3V0SWQiLCJfaWRsZVRpbWVvdXQiLCJ1bmVucm9sbCIsIl91bnJlZkFjdGl2ZSIsImFjdGl2ZSIsIl9vblRpbWVvdXQiLCJjbGVhckltbWVkaWF0ZSIsInJlZ2lzdGVySW1tZWRpYXRlIiwiaHRtbCIsImNoYW5uZWwiLCJtZXNzYWdlUHJlZml4Iiwib25HbG9iYWxNZXNzYWdlIiwibmV4dEhhbmRsZSIsInRhc2tzQnlIYW5kbGUiLCJjdXJyZW50bHlSdW5uaW5nQVRhc2siLCJkb2MiLCJhdHRhY2hUbyIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmciLCJydW5JZlByZXNlbnQiLCJwb3N0TWVzc2FnZSIsImltcG9ydFNjcmlwdHMiLCJwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzIiwib2xkT25NZXNzYWdlIiwib25tZXNzYWdlIiwiY2FuVXNlUG9zdE1lc3NhZ2UiLCJNZXNzYWdlQ2hhbm5lbCIsInBvcnQxIiwicG9ydDIiLCJjcmVhdGVFbGVtZW50Iiwic2NyaXB0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVtb3ZlQ2hpbGQiLCJhcHBlbmRDaGlsZCIsInJhbmRvbSIsInNvdXJjZSIsImF0dGFjaEV2ZW50IiwidGFzayIsIk1hcHNIYW5kbGVyIiwibWFwIiwibG9jYXRpb24iLCJsYXQiLCJsbmciLCJzdHlsaW5nIiwiaGFzQXR0cmlidXRlIiwicGFyc2VGbG9hdCIsInNldEN1c3RvbVN0eWxpbmciLCJnb29nbGUiLCJtYXBzIiwiZHJhd01hcCIsIk1hcCIsInpvb20iLCJjZW50ZXIiLCJkaXNhYmxlRGVmYXVsdFVJIiwic3R5bGVzIiwiY29udGVudFN0cmluZyIsImluZm93aW5kb3ciLCJJbmZvV2luZG93IiwiY29udGVudCIsIk1hcmtlciIsInBvc2l0aW9uIiwib3BlbiIsImZlYXR1cmVUeXBlIiwiZWxlbWVudFR5cGUiLCJzdHlsZXJzIiwiY29sb3IiLCJsaWdodG5lc3MiLCJ3ZWlnaHQiLCJzYXR1cmF0aW9uIiwiQ2hvY29sYXRlRmFjdG9yeSIsImJhbm5lZFZpc2l0b3IiLCJlbnRlciIsImNob2NvbGF0ZUZhY3RvcmllcyIsImFtb3VudE9mQ2hvY29sYXRlRmFjdG9yaWVzIiwiQ2hvY29sYXRlQmFyIiwiX2ZsYXNoVGlja2V0IiwiY2hvY29sYXRlQmFyIiwiZ29sZGVuVGlja2V0IiwiZW5qb3lUaGVUb3VyIiwiY2hvY29sYXRlRmFjdG9yeSIsInRvdXJHcm91cCIsIm9vbXBhTG9vbXBhcyIsImFtb3VudE9mT29tcGFMb29tcGFzIiwidG91ckdyb3VwU2l6ZSIsInZpc2l0b3IiLCJ2aXNpdG9yTmFtZSIsIl9pc1Zpc2l0b3JCYW5uZWQiLCJfZ2V0QXJyYW5nZW1lbnQiLCJfZmluaXNoVG91ciIsIm5vZGVOYW1lIiwiZ3JvdXAiLCJfYWRkV2lsbGllV29ua2EiLCJBamF4IiwicG9zdCIsIkh0dHBSZXF1ZXN0IiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJzdGF0dXMiLCJfdGhhbmtzRm9yVmlzaXRpbmciLCJyZWRpcmVjdFVybCIsIl9naXZlRmVlZGJhY2tUb01lbWJlcnMiLCJlcnJvcnMiLCJfdW5rbm93bkdhcEluRmFjdG9yeSIsIl93aWxsaWUiLCJmZWVkYmFja0FyZWEiLCJpbm5lckhUTUwiLCJfY2xlYXJQcmV2aW91c01hcmtlZEphY2tldHMiLCJqYWNrZXQiLCJ2aXNpdG9yRmVlZGJhY2tBcmVhIiwidmlzaXRvck5vZGUiLCJfZ3JhYlZpc2l0b3JKYWNrZXQiLCJ2aXNpdG9yRmVlZGJhY2siLCJ2aXNpdG9yRmVlZGJhY2tBbW91bnQiLCJ2aXNpdG9yRmVlZGJhY2tMaW5lIiwiY3VycmVudEZlZWRiYWNrQXJlYSIsImNhcGl0YWxpemVGaXJzdExldHRlciIsIm1hcmtlZEphY2tldHMiLCJtYXJrZWRKYWNrZXRzQW1vdW50IiwiY3VycmVudExheWVyIiwic2FmZXR5QnJlYWsiLCJwYXJlbnROb2RlIiwidGFnTmFtZSIsIm5leHRTdG9wIiwiQnJvd3NlckhhbmRsZXIiLCJ1c2VyQWdlbnQiLCJicm93c2VySW5mbyIsIm5hdmlnYXRvciIsImdldEJyb3dzZXJJbmZvIiwiaGFuZGxlSUUiLCJoYW5kbGVTYWZhcmkiLCJtc2llIiwiaWVsdDExIiwiaWUxMSIsIm1hdGNoIiwic3Vic3RyaW5nIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0ZW0iLCJ1YSIsIk0iLCJ0ZXN0IiwiZXhlYyIsImFwcE5hbWUiLCJhcHBWZXJzaW9uIiwic3BsaWNlIiwib2JqIiwibGluZWFyIiwidCIsImVhc2VJblF1YWQiLCJlYXNlT3V0UXVhZCIsImVhc2VJbk91dFF1YWQiLCJlYXNlSW5DdWJpYyIsImVhc2VPdXRDdWJpYyIsImVhc2VJbk91dEN1YmljIiwiZWFzZUluUXVhcnQiLCJlYXNlT3V0UXVhcnQiLCJlYXNlSW5PdXRRdWFydCIsImVhc2VJblF1aW50IiwiZWFzZU91dFF1aW50IiwiZWFzZUluT3V0UXVpbnQiLCJhc3luYyIsInNjcmlwdHMiLCJwcmlvciIsIm9ubG9hZCIsIl8iLCJpc0Fib3J0IiwicmVhZHlTdGF0ZSIsInNyYyIsImluc2VydEJlZm9yZSIsImRlYm91bmNlIiwiZnVuYyIsIndhaXQiLCJpbW1lZGlhdGUiLCJjb250ZXh0IiwibGF0ZXIiLCJjYWxsTm93IiwiQ29va2llIiwic2V0IiwiZGF5cyIsImRvbWFpbiIsImRvbWFpblBhcnRzIiwiZGF0ZSIsImV4cGlyZXMiLCJzZXRUaW1lIiwidG9HTVRTdHJpbmciLCJzcGxpdCIsImNvb2tpZSIsInNoaWZ0Iiwiam9pbiIsImdldCIsIm5hbWVFUSIsImNhIiwiYyIsImNoYXJBdCIsImVyYXNlIiwibnVtYmVyX2Zvcm1hdCIsIm51bWJlciIsImRlY2ltYWxzIiwiZGVjX3BvaW50IiwidGhvdXNhbmRzX3NlcCIsInJlcGxhY2UiLCJuIiwicHJlYyIsImFicyIsInNlcCIsImRlYyIsInMiLCJrIiwicG93Iiwicm91bmQiLCJ0b0ZpeGVkRml4IiwiRWxlbWVudCIsImNsb3Nlc3QiLCJtYXRjaGVzIiwibXNNYXRjaGVzU2VsZWN0b3IiLCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCJhbmNlc3RvciIsInBhcmVudEVsZW1lbnQiLCJ1cmwiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsInRva2VuIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJzdHJpbmdpZnkiLCJ0b1VwcGVyQ2FzZSIsInNuYWtlVG9DYW1lbCIsIm0iLCJpbmRleEluUGFyZW50Iiwibm9kZSIsImNoaWxkcmVuIiwiY2hpbGROb2RlcyIsIm51bSIsIm5vZGVUeXBlIiwiY29weVRvQ2xpcGJvYXJkIiwiZWRpdGFibGUiLCJjb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInNldFNlbGVjdGlvblJhbmdlIiwic2VsZWN0IiwiZXhlY0NvbW1hbmQiLCJib2R5T2Zmc2V0Iiwic2Nyb2xsTGVmdCIsInBhZ2VYT2Zmc2V0IiwiZyIsIkNvb2tpZUhhbmRsZXIiLCJjb29raWVCYXIiLCJjb29raWVPdmVybGF5IiwiY29va2llTWVzc2FnZSIsImNvb2tpZVN3aXRjaCIsImNvb2tpZUZhZGVPdXRBbmltYXRpb25EdXJhdGlvbiIsImFjY2VwdFRyYWNraW5nIiwiaW5pdENvb2tpZUJhciIsImluaXRDb29raWVPdmVybGF5IiwiY2hlY2tGb3JDb29raWVTZXR0aW5ncyIsImluaXRDb29raWVTd2l0Y2giLCJjbG9zZUJ1dHRvbiIsImNsb3NlQ29va2llTWVzc2FnZSIsIm9wZW5Db29raWVTZXR0aW5nc0J1dHRvbiIsIm9wZW5Db29raWVTZXR0aW5ncyIsInRvZ2dsZVRyYWNraW5nSW5wdXQiLCJjaGVja2VkIiwidG9nZ2xlVHJhY2tpbmdTZXR0aW5nIiwiYWNjZXB0QnV0dG9uIiwic2V0Q29va2llU2V0dGluZ3MiLCJzYXZlQnV0dG9u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bUIsdUJBTTFCVix1QkFBd0IsV0FDaEJyRixPQUFPYSxJQUFJLGtCQUNYK0QsRUFBY0csY0FBY3ZpQixVQUFVVyxJQUFJLGVBQzFDbEMsU0FBU2lDLEtBQUtWLFVBQVVXLElBQUkseUJBRzVCeWhCLEVBQWNHLGNBQWN2aUIsVUFBVUMsT0FBTyxlQUM3Q3hCLFNBQVNpQyxLQUFLVixVQUFVQyxPQUFPLHlCQUl2QytpQixtQkFBb0IsV0FDaEJ4RixPQUFPQyxJQUFJLGlCQUFpQixFQUFNLElBQ2xDMkUsRUFBY0csY0FBY3ZpQixVQUFVVyxJQUFJLHdCQUMxQ2xDLFNBQVNpQyxLQUFLVixVQUFVVyxJQUFJLHdCQUdoQ3VpQixtQkFBb0IsV0FDaEJkLEVBQWNFLGNBQWNuaUIsY0FBYyx1QkFBdUJILFVBQVVDLE9BQU8sYUFDbEZtaUIsRUFBY0UsY0FBY25pQixjQUFjLG1CQUFtQkgsVUFBVVcsSUFBSSxjQUcvRTBpQixzQkFBdUIsV0FDaEJqQixFQUFjTSxlQUNiTixFQUFjTSxnQkFBaUIsRUFHL0JOLEVBQWNNLGdCQUFpQixHQUl2Q2Esa0JBQW1CLFdBR1puQixFQUFjTSxlQUNibEYsT0FBT0MsSUFBSSx5QkFBMEIsT0FBUSxJQUcxQ0QsT0FBT2EsSUFBSSwyQkFDVmIsT0FBT2tCLE1BQU0sMEJBSXJCMEQsRUFBY1kscUJBR2RsbEIsV0FBVyxXQUNQa1gsU0FBU3lPLFVBQ1ZyQixFQUFjSyxrQ0FLekJMLEVBQWM5a0IiLCJmaWxlIjoiL2pzL3NpdGUvYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFNjcm9sbCBoYW5kbGVyXG4gICAtIEhhbmRsZXIgdGhlIG9iamVjdHMgd2hpY2ggYXJlIGJpbmQgb24gc2Nyb2xsIGV2ZW50cyBvciB2aXNpYmxlIGluIHZpZXdwb3J0XG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgU2Nyb2xsSGFuZGxlciA9IHtcblxuICAgIC8vIFZhcmlhYmxlcyBmb3IgZGVib3VuY2UgYW5kIHRocm90dGxlIGVmZmVjdHNcbiAgICB0aW1lOiBEYXRlLm5vdygpLFxuICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgd2FpdFRocm90dGxlOiAxMDAwLFxuICAgIHdhaXREZWJvdW5jZTogMzAwLFxuXG4gICAgLy8gVmFyaWFibGVzIGZvciBzY3JvbGwgZGlyZWN0aW9uXG4gICAgbGFzdFNjcm9sbFRvcFBvc2l0aW9uOiAwLFxuICAgIHNjcm9sbERpcmVjdGlvbkRvd246IHRydWUsXG4gICAgc2Nyb2xsRGlyZWN0aW9uVXA6IGZhbHNlLFxuXG4gICAgLy9Jbml0aWFsaXNhdGlvblxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLyBUcmlnZ2VyIHN0YXJ0IG9uIHN0YXJ0IHVwXG4gICAgICAgIFNjcm9sbEhhbmRsZXIudHJpZ2dlck9uSW5pdCgpO1xuXG4gICAgICAgIC8vIFRocm90dGxlIHNjcm9sbFxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKChTY3JvbGxIYW5kbGVyLnRpbWUgKyBTY3JvbGxIYW5kbGVyLndhaXRUaHJvdHRsZSAtIERhdGUubm93KCkpIDwgMCkge1xuICAgICAgICAgICAgICAgIFNjcm9sbEhhbmRsZXIudHJpZ2dlclRocm90dGxlKCk7XG4gICAgICAgICAgICAgICAgU2Nyb2xsSGFuZGxlci50aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU21vb3RoIHNjcm9sbFxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgU2Nyb2xsSGFuZGxlci50cmlnZ2VyU21vb3RoKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIERlYm91bmNlIHNjcm9sbFxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYoaXNzZXQoU2Nyb2xsSGFuZGxlci50aW1lb3V0KSkgY2xlYXJUaW1lb3V0KFNjcm9sbEhhbmRsZXIudGltZW91dCk7XG4gICAgICAgICAgICBTY3JvbGxIYW5kbGVyLnRpbWVvdXQgPSBzZXRUaW1lb3V0KFNjcm9sbEhhbmRsZXIudHJpZ2dlckRlYm91bmNlLCBTY3JvbGxIYW5kbGVyLndhaXREZWJvdW5jZSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvLyBUcmlnZ2VyIG9uIHN0YXJ0IHVwXG4gICAgdHJpZ2dlck9uSW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICBTY3JvbGxIYW5kbGVyLnRyaWdnZXJFbGVtZW50SW5WaWV3cG9ydEFuaW1hdGlvbigpO1xuICAgIH0sXG5cbiAgICAvLyBUcmlnZ2VyIHNjcm9sbCBmdW5jdGlvbnMgd2l0aCB0aHJvdHRsZSAocHJlZmVycmVkKVxuICAgIHRyaWdnZXJUaHJvdHRsZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnVGhyb3R0bGVkIHNjcm9sbCcpO1xuICAgICAgICBTY3JvbGxIYW5kbGVyLnRyaWdnZXJFbGVtZW50SW5WaWV3cG9ydEFuaW1hdGlvbigpO1xuICAgIH0sXG5cbiAgICAvLyBUcmlnZ2VyIHNjcm9sbCBvbiBkZWJvdW5jZVxuICAgIHRyaWdnZXJEZWJvdW5jZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnRGVib3VuY2Ugc2Nyb2xsJyk7XG4gICAgfSxcblxuICAgIC8vIFRyaWdnZXIgc2Nyb2xsIG9uIHRoZSBmbGlnaHRcbiAgICB0cmlnZ2VyU21vb3RoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdTbW9vdGggc2Nyb2xsJyk7XG4gICAgICAgIFNjcm9sbEhhbmRsZXIuZGV0ZWN0U2Nyb2xsRGlyZWN0aW9uKCk7XG4gICAgICAgIFNjcm9sbEhhbmRsZXIudG9nZ2xlU3RpY2t5SGVhZGVyKCk7XG4gICAgfSxcblxuICAgIC8vIERldGVjdCBpZiBwYXJ0IG9mIGEgZ2l2ZW4gZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydFxuICAgIC8vIEVsIG11c3QgYmUgYSBub2RlIGVsZW1lbnRcbiAgICBkZXRlY3RJZkVsZW1lbnRJc1BhcnRseUluVmlld3BvcnQ6IGZ1bmN0aW9uKGVsKVxuICAgIHtcbiAgICAgICAgaWYoaXNzZXQoZWwpKXtcblxuICAgICAgICAgICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgLy8gRE9NUmVjdCB7IHg6IDgsIHk6IDgsIHdpZHRoOiAxMDAsIGhlaWdodDogMTAwLCB0b3A6IDgsIHJpZ2h0OiAxMDgsIGJvdHRvbTogMTA4LCBsZWZ0OiA4IH1cbiAgICAgICAgICAgIGNvbnN0IHdpbmRvd0hlaWdodCA9ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCB3aW5kb3dXaWR0aCA9ICh3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpO1xuXG4gICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbEluVmlldyA9IChyZWN0LnRvcCA8PSAod2luZG93SGVpZ2h0KSkgJiYgKChyZWN0LnRvcCArIHJlY3QuaGVpZ2h0KSA+PSAwKTtcbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxJblZpZXcgPSAocmVjdC5sZWZ0IDw9IHdpbmRvd1dpZHRoKSAmJiAoKHJlY3QubGVmdCArIHJlY3Qud2lkdGgpID49IDApO1xuXG4gICAgICAgICAgICByZXR1cm4gKHZlcnRpY2FsSW5WaWV3ICYmIGhvcml6b250YWxJblZpZXcpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIERldGVjdCBpZiBhIGdpdmVuIGVsZW1lbnQgaXMgZnVsbHkgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnRcbiAgICAvLyBFbCBtdXN0IGJlIGEgbm9kZSBlbGVtZW50XG4gICAgZGV0ZWN0SWZFbGVtZW50SXNGdWxseUluVmlld3BvcnQ6IGZ1bmN0aW9uKGVsKVxuICAgIHtcbiAgICAgICAgaWYoaXNzZXQoZWwpKXtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICByZWN0LnRvcCA+PSAwICYmXG4gICAgICAgICAgICAgICAgcmVjdC5ib3R0b20gPD0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGRldGVjdFNjcm9sbERpcmVjdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbiA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOyAvLyBDcmVkaXRzOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9xZXJlbXkvc28vYmxvYi9tYXN0ZXIvc28uZG9tLmpzI0w0MjZcIlxuICAgICAgICBpZiAoc2Nyb2xsVG9wUG9zaXRpb24gPj0gU2Nyb2xsSGFuZGxlci5sYXN0U2Nyb2xsVG9wUG9zaXRpb24pe1xuICAgICAgICAgICAgU2Nyb2xsSGFuZGxlci5zY3JvbGxEaXJlY3Rpb25Eb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIFNjcm9sbEhhbmRsZXIuc2Nyb2xsRGlyZWN0aW9uVXAgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFNjcm9sbEhhbmRsZXIuc2Nyb2xsRGlyZWN0aW9uRG93biA9IGZhbHNlO1xuICAgICAgICAgICAgU2Nyb2xsSGFuZGxlci5zY3JvbGxEaXJlY3Rpb25VcCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgU2Nyb2xsSGFuZGxlci5sYXN0U2Nyb2xsVG9wUG9zaXRpb24gPSBzY3JvbGxUb3BQb3NpdGlvbjtcbiAgICB9LFxuXG4gICAgLy8gVHJpZ2dlciBhbmltYXRpb24gb24gZWxlbWVudHMgdGhhdCBoYXZlICdlbGVtZW50LWluLXZpZXdwb3J0JyBhbmQgdGhhdCBhcmUgaW4gdGhlIHZpZXdwb3J0XG4gICAgLy8gVGhlc2UgYW5pbWF0aW9uIGNhbiBvbmx5IGJlIHRyaWdnZXJlZCBvbmNlLCBpZiB5b3Ugd2FudCBtb3JlIHRoZW4gdGhhdCB5b3Ugc2hvdWxkIHdyaXRlIGFuIHNwZWNpZmljIGZ1bmN0aW9uIGZvciB0aGlzXG4gICAgdHJpZ2dlckVsZW1lbnRJblZpZXdwb3J0QW5pbWF0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmVsZW1lbnQtaW4tdmlld3BvcnQnKTtcbiAgICAgICAgY29uc3QgZWxlbWVudHNMZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgICAgZm9yKGxldCBlID0gMDsgZSA8IGVsZW1lbnRzTGVuZ3RoOyBlKyspe1xuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbZV07XG4gICAgICAgICAgICBpZihTY3JvbGxIYW5kbGVyLmRldGVjdElmRWxlbWVudElzUGFydGx5SW5WaWV3cG9ydChlbGVtZW50KSl7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdlbGVtZW50LWluLXZpZXdwb3J0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH0sXG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1VTVE9NIFNDUk9MTCBIQU5ETEVSUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8vIEhpZGUgb3Igc2hvdyBzdGlja3kgbmF2aWdhdGlvbiB3aGVuIGhlYWRlciBpc24ndCB2aXNpYmxlXG4gICAgdG9nZ2xlU3RpY2t5SGVhZGVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHN0aWNreUhlYWRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy1zdGlja3ktaGVhZGVyJyk7XG4gICAgICAgIGNvbnN0IHZpc2libGVTdGlja3lIZWFkZXJDbGFzcyA9ICdpcy1zdGlja3ktaGVhZGVyLXZpc2libGUnO1xuICAgICAgICBjb25zdCBzdWJuYXZMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLXN1Ym5hdicpO1xuICAgICAgICB2YXIgc3ViTmF2SXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHN0aWNreUhlYWRlci5oaWRkZW4gPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1Ym5hdkxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdWJuYXZMaXN0W2ldLCBudWxsKS52aXNpYmlsaXR5ID09IFwidmlzaWJsZVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Yk5hdklzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihpc3NldChzdGlja3lIZWFkZXIpICYmICFzdWJOYXZJc1Zpc2libGUpe1xuICAgICAgICAgICAgLy8gSGlkZSB3aGVuIHNjcm9sbGluZyBET1dOIChPUiB3aXRoaW4gb2Zmc2V0KVxuICAgICAgICAgICAgaWYoU2Nyb2xsSGFuZGxlci5zY3JvbGxEaXJlY3Rpb25Eb3duIHx8IFNjcm9sbEhhbmRsZXIubGFzdFNjcm9sbFRvcFBvc2l0aW9uIDwgMTEwKXtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUodmlzaWJsZVN0aWNreUhlYWRlckNsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNob3cgd2hlbiBzY3JvbGxpbmcgVVAgYW5kIG91dHNpZGUgb2Ygb2Zmc2V0XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQodmlzaWJsZVN0aWNreUhlYWRlckNsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbn07XG5cblNjcm9sbEhhbmRsZXIuaW5pdCgpOyIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTmF2aWdhdGlvbiBoYW5kbGVyXG4gICAtIEhhbmRsZXMgdGhlIHNob3dpbmcgYW5kIGhpZGluZyBvZiB0aGUgb3ZlcmxheS1tZW51IGNvbXBvbmVudCB3aGljaCBoYXMgdGhlIHByb3BlciBjbGFzc2VzLlxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbmNvbnN0IGJvZHlTY3JvbGxMb2NrID0gcmVxdWlyZSgnYm9keS1zY3JvbGwtbG9jaycpO1xuXG5jb25zdCBPdmVybGF5TWVudUhhbmRsZXIgPSB7XG5cbiAgICAvLyBpbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gICAgIGNvbnN0IG92ZXJsYXlNZW51VHJpZ2dlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy1vdmVybGF5LW1lbnUtdHJpZ2dlcicpO1xuICAgIC8vICAgICBPdmVybGF5TWVudUhhbmRsZXIuaW5pdE92ZXJsYXlNZW51KG92ZXJsYXlNZW51VHJpZ2dlcik7XG4gICAgLy8gfSxcblxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBvdmVybGF5TWVudVRyaWdnZXJMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLW92ZXJsYXktbWVudS10cmlnZ2VyJyk7XG4gICAgICAgIGNvbnN0IG92ZXJsYXlNZW51VHJpZ2dlckxpc3RDb3VudCA9IG92ZXJsYXlNZW51VHJpZ2dlckxpc3QubGVuZ3RoO1xuXG4gICAgICAgIGlmKGlzc2V0KG92ZXJsYXlNZW51VHJpZ2dlckxpc3QpICYmIG92ZXJsYXlNZW51VHJpZ2dlckxpc3RDb3VudCAhPT0gMCl7XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgb3ZlcmxheU1lbnVUcmlnZ2VyTGlzdENvdW50OyBpKyspe1xuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJsYXlNZW51VHJpZ2dlciA9IG92ZXJsYXlNZW51VHJpZ2dlckxpc3RbaV07XG4gICAgICAgICAgICAgICAgT3ZlcmxheU1lbnVIYW5kbGVyLmluaXRPdmVybGF5TWVudShvdmVybGF5TWVudVRyaWdnZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGluaXRPdmVybGF5TWVudTogZnVuY3Rpb24gKG92ZXJsYXlNZW51VHJpZ2dlcikge1xuICAgICAgICBvdmVybGF5TWVudVRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBPdmVybGF5TWVudUhhbmRsZXIudG9nZ2xlT3ZlcmxheU1lbnUsIGZhbHNlKTtcbiAgICB9LFxuXG4gICAgdG9nZ2xlT3ZlcmxheU1lbnU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBjb25zdCBvdmVybGF5TWVudU5hdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy1vdmVybGF5LW1lbnUnKTtcbiAgICAgICAgLy8gY29uc3Qgb3ZlcmxheU1lbnVCb2R5ID0gb3ZlcmxheU1lbnUucXVlcnlTZWxlY3RvcignLmpzLW92ZXJsYXktbWVudS1wZXJzaXN0LXNjcm9sbGluZycpO1xuXG4gICAgICAgIC8vIEJhaWwgaWYgb3ZlcmxheU1lbnUgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIW92ZXJsYXlNZW51TmF2KSByZXR1cm47XG5cbiAgICAgICAgLy8gQ2xlYXIgcHJldmlvdXNseSBsb2NrZWQgc2Nyb2xsIG9uIHRoZSBib2R5XG4gICAgICAgIGJvZHlTY3JvbGxMb2NrLmVuYWJsZUJvZHlTY3JvbGwob3ZlcmxheU1lbnVOYXYpO1xuXG4gICAgICAgIC8vIElmIHRoZSBvdmVybGF5TWVudSBpcyBhbHJlYWR5IGFjdGl2ZSwgY29sbGFwc2UgaXQgYW5kIHF1aXRcbiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1vdmVybGF5LW1lbnUtYWN0aXZlJykpIHtcbiAgICAgICAgICAgIG92ZXJsYXlNZW51TmF2LnF1ZXJ5U2VsZWN0b3JBbGwoJ1t0YWJpbmRleD1cIjBcIl0nKS5mb3JFYWNoKGZ1bmN0aW9uKGVsZW0pIHtcbiAgICAgICAgICAgICAgICBlbGVtLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdpcy1vdmVybGF5LW1lbnUtYWN0aXZlJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMb2NrIHNjcm9sbGluZyBvbiB0aGUgYm9keVxuICAgICAgICBib2R5U2Nyb2xsTG9jay5kaXNhYmxlQm9keVNjcm9sbChvdmVybGF5TWVudU5hdik7XG5cbiAgICAgICAgb3ZlcmxheU1lbnVOYXYucXVlcnlTZWxlY3RvckFsbCgnW3RhYmluZGV4PVwiLTFcIl0nKS5mb3JFYWNoKGZ1bmN0aW9uKGVsZW0pIHtcbiAgICAgICAgICAgIGVsZW0udGFiSW5kZXggPSAwO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUb2dnbGUgYWN0aXZlIG92ZXJsYXlNZW51IGJ5IHNldHRpbmcgYSBjbGFzcyBvbiB0aGUgYm9keVxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2lzLW92ZXJsYXktbWVudS1hY3RpdmUnKTtcbiAgICAgICAgb3ZlcmxheU1lbnVOYXYuaGlkZGVuID0gZmFsc2U7XG4gICAgfVxufTtcblxuT3ZlcmxheU1lbnVIYW5kbGVyLmluaXQoKTsiLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIFlvdXR1YmUgaGFuZGxlclxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbmNvbnN0IFlvdXR1YmVIYW5kbGVyID0ge1xuXG4gICAgeW91dHViZUNsYXNzIDogJy5qcy15b3V0dWJlLXBsYXllcicsXG4gICAgcGxheWVyczogW10sXG5cbiAgICBpbml0IDogZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgLy8gR2V0IHRoZSB5b3V0dWJlIHBsYXllcnMgY29udGFpbmVyc1xuICAgICAgICBjb25zdCB5b3V0dWJlUGxheWVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoWW91dHViZUhhbmRsZXIueW91dHViZUNsYXNzKTtcbiAgICAgICAgY29uc3QgeW91dHViZVBsYXllcnNBbW91bnQgPSB5b3V0dWJlUGxheWVycy5sZW5ndGg7XG5cbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHlvdXR1YmVQbGF5ZXJzQW1vdW50OyBpKyspe1xuXG4gICAgICAgICAgICBjb25zdCB5b3V0dWJlUGxheWVyID0geW91dHViZVBsYXllcnNbaV07XG5cblxuICAgICAgICAgICAgY29uc3QgeW91dHViZVBsYXllcklkID0geW91dHViZVBsYXllci5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgICBpZih5b3V0dWJlUGxheWVySWQgIT09IG51bGwgKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFN0cmlwIHRoZSBuZWNlc3NhcnkgZGF0YSBmcm9tIHRoZSBodG1sIGFuZCBjcmVhdGUgb2JqZWN0cyBmcm9tIGl0XG4gICAgICAgICAgICAgICAgY29uc3QgeW91dHViZUVsZW1lbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB5b3V0dWJlUGxheWVyLmdldEF0dHJpYnV0ZSgnaWQnKSxcbiAgICAgICAgICAgICAgICAgICAgbGluazogeW91dHViZVBsYXllci5nZXRBdHRyaWJ1dGUoJ2RhdGEteW91dHViZS1saW5rJyksXG4gICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5OiBwYXJzZUludCh5b3V0dWJlUGxheWVyLmdldEF0dHJpYnV0ZSgnZGF0YS1hdXRvLXBsYXknKSksXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIFlvdXR1YmVIYW5kbGVyLnBsYXllcnMucHVzaCh5b3V0dWJlRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRWxlbWVudCBub3QgaW5jbHVkZSBiZWNhdXNlIHRoZXJlIGlzbid0IGEgaWQgb24gdGhlIHBsYXllclwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh5b3V0dWJlUGxheWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHlvdXR1YmVQbGF5ZXJzQW1vdW50ID49IDEpIFlvdXR1YmVIYW5kbGVyLmluaXRZb3V0dWJlKCk7XG5cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgZXh0ZXJuYWwgc2NyaXB0IGlzIGxvYWRlZFxuICAgICAqXG4gICAgICovXG4gICAgaW5pdFlvdXR1YmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBTZWUgaWYgWVQgdmFyaWFibGUgZXhpc3RzXG4gICAgICAgIGlmICh0eXBlb2YoWVQpID09ICd1bmRlZmluZWQnIHx8IHR5cGVvZihZVC5QbGF5ZXIpID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAvLyBTZXR1cCBBUEkgcmVhZHkgZnVuY3Rpb25cbiAgICAgICAgICAgIHdpbmRvdy5vbllvdVR1YmVQbGF5ZXJBUElSZWFkeSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIFlvdXR1YmVIYW5kbGVyLmxvYWRQbGF5ZXJzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gTG9hZCBleHRlcm5hbCBzY3JpcHRcbiAgICAgICAgICAgIGdldFNjcmlwdCgnaHR0cHM6Ly93d3cueW91dHViZS5jb20vaWZyYW1lX2FwaScpO1xuICAgICAgICAgICAgLy8gSWYgWVQgYWxyZWFkeSBleGlzdHMgbG9hZCBwbGF5ZXJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFlvdXR1YmVIYW5kbGVyLmxvYWRQbGF5ZXJzKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSBZb3V0dWJlIHBsYXllcihzKSB3aXRoIHBhcmFtZXRlcnNcbiAgICAgKiBBbmQgcmV3cml0ZSB0aGUgcGxheWVycyB0byBrZXkgdGhlbSBieSB0aGUgZWxlbWVudCBpZFxuICAgICAqXG4gICAgICovXG4gICAgbG9hZFBsYXllcnM6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgIGxldCBwbGF5ZXJzID0gW107XG5cbiAgICAgICAgY29uc3QgeW91dHViZVBsYXllcnNBbW91bnQgPSBZb3V0dWJlSGFuZGxlci5wbGF5ZXJzLmxlbmd0aDtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHlvdXR1YmVQbGF5ZXJzQW1vdW50OyBpKyspe1xuXG4gICAgICAgICAgICBsZXQgeW91dHViZVBsYXllciA9IFlvdXR1YmVIYW5kbGVyLnBsYXllcnNbaV07XG5cbiAgICAgICAgICAgIC8vIExvYWQgcGxheWVyXG4gICAgICAgICAgICB5b3V0dWJlUGxheWVyLnBsYXllciA9IG5ldyBZVC5QbGF5ZXIoeW91dHViZVBsYXllci5pZCx7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyMDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICB2aWRlb0lkOiB5b3V0dWJlUGxheWVyLmxpbmssXG4gICAgICAgICAgICAgICAgaG9zdDogJ2h0dHBzOi8vd3d3LnlvdXR1YmUtbm9jb29raWUuY29tJyxcbiAgICAgICAgICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVzdGJyYW5kaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgICByZWw6IDAsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVrYjogMSxcbiAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXk6IHlvdXR1YmVQbGF5ZXIuYXV0b1BsYXlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgICAvLyAnb25SZWFkeSc6IFlvdXR1YmVIYW5kbGVyLm9uUmVhZHksXG4gICAgICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogWW91dHViZUhhbmRsZXIub25TdGF0ZUNoYW5nZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBwbGF5ZXJzW3lvdXR1YmVQbGF5ZXIuaWRdID0geW91dHViZVBsYXllcjtcblxuICAgICAgICB9XG5cbiAgICAgICAgWW91dHViZUhhbmRsZXIucGxheWVycyA9IHBsYXllcnM7XG5cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2hlbiBwbGF5ZXIgaXMgcmVhZHkgdG8gcGxheVxuICAgICAqL1xuICAgIG9uUmVhZHkgOiBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgIGNvbnN0IHBsYXllckNvbnRhaW5lcklkID0gZXZlbnQudGFyZ2V0LmdldElmcmFtZSgpLmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgY29uc3QgcGxheWVyID0gWW91dHViZUhhbmRsZXIucGxheWVyc1twbGF5ZXJDb250YWluZXJJZF0ucGxheWVyO1xuXG4gICAgICAgIC8vIFNob3cgdmlkZW9cbiAgICAgICAgLy8gc2V0VGltZW91dChmdW5jdGlvbigpeyAkKCcjJyArIHBsYXllckNvbnRhaW5lcklkKS5zdG9wKCkuYW5pbWF0ZSh7IG9wYWNpdHk6IDEgfSwxMDAwKSB9LDgwMCk7XG5cbiAgICAgICAgLy8gSWYgbm90IG9uIHRhYmxldCBvciBtb2JpbGUsIHBsYXkgb24gaGlnaCBxdWFsaXR5XG4gICAgICAgIC8vIHBsYXllci5tdXRlKCk7XG4gICAgICAgIC8vIHBsYXllci5wbGF5VmlkZW8oKTtcbiAgICAgICAgLy8gcGxheWVyLnNldFBsYXliYWNrUXVhbGl0eSgnaGQxMDgwJyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExpc3RlbmVyIGZvciBZb3V0dWJlIHN0YXRlIGNoYW5nZVxuICAgICAqL1xuICAgIG9uU3RhdGVDaGFuZ2UgOiBmdW5jdGlvbihldmVudCkge1xuXG4gICAgICAgIGNvbnN0IHBsYXllckNvbnRhaW5lcklkID0gZXZlbnQudGFyZ2V0LmdldElmcmFtZSgpLmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgY29uc3QgcGxheWVyID0gWW91dHViZUhhbmRsZXIucGxheWVyc1twbGF5ZXJDb250YWluZXJJZF0ucGxheWVyO1xuXG4gICAgICAgIGNvbnN0IHZpZGVvU3RhdGUgPSBldmVudC5kYXRhO1xuXG4gICAgICAgIC8vIExvb3AgdmlkZW9cbiAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT09IFlULlBsYXllclN0YXRlLkVOREVEICkge1xuICAgICAgICAgICAgcGxheWVyLnBsYXlWaWRlbygpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuWW91dHViZUhhbmRsZXIuaW5pdCgpOyIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgU2Nyb2xsIFRvIENsaWNrIGhhbmRsZXJcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5jb25zdCBTY3JvbGxUb0hhbmRsZXIgPSB7XG5cbiAgICAvLyBBbmltYXRpb24gc2V0dGluZ3NcbiAgICBvZmZzZXQgOiA2MCwgLy9waXhlbFxuICAgIGR1cmF0aW9uIDogMTQwMCwgLy9tc1xuXG4gICAgLy8gQW5pbWF0aW9uIHZhcmlhYmxlc1xuICAgIGJvZHkgOiBudWxsLFxuICAgIHN0YXJ0IDogMCxcbiAgICBjaGFuZ2UgOiAwLFxuICAgIGN1cnJlbnRUaW1lIDogMCxcbiAgICBhbGxvd0FuaW1hdGlvbiA6IGZhbHNlLFxuICAgIHNjcm9sbFRvQW5pbWF0aW9uIDogbnVsbCxcblxuICAgIC8vIFdhdGNoIHRoZSBFYXNpbmdGdW5jdGlvbiBoZWxwZXIgZm9yIHRoZSBhdmFpbGFibGUgbWV0aG9kc1xuICAgIGVhc2luZzogJ2Vhc2VJbk91dFF1YWQnLFxuXG4gICAgaW5pdCA6IGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgY29uc3QgYW5jaG9yTGlua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtc2Nyb2xsLXRvLXRhcmdldCcpO1xuICAgICAgICBjb25zdCBhbmNob3JMaW5rc0Ftb3VudCA9IGFuY2hvckxpbmtzLmxlbmd0aDtcblxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgYW5jaG9yTGlua3NBbW91bnQ7IGkrKykge1xuXG4gICAgICAgICAgICBjb25zdCBhbmNob3JMaW5rID0gYW5jaG9yTGlua3NbaV07XG5cbiAgICAgICAgICAgIGFuY2hvckxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBTY3JvbGxUb0hhbmRsZXIucHJlcGFyZVNjcm9sbFRvKHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJykpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlIHRoZSBIYW5kbGVyIGZvciB0aGUgYW5pbWF0aW9uXG4gICAgICovXG4gICAgcHJlcGFyZVNjcm9sbFRvIDogZnVuY3Rpb24oZWxlbWVudElkKXtcblxuICAgICAgICAvLyBHZXQgdGhlIHNjcm9sbCB0byBlbGVtZW50XG4gICAgICAgIGVsZW1lbnRJZCA9IGVsZW1lbnRJZC5zdWJzdHIoZWxlbWVudElkLmluZGV4T2YoJyMnKSsxKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9FbGVtZW50UG9zaXRpb24gPSBzY3JvbGxUb0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgLy8gUmVzZXQgb3IgZGVmaW5lIHRoZSBIYW5kbGVyIHZhcmlhYmxlc1xuICAgICAgICBTY3JvbGxUb0hhbmRsZXIuYm9keSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgU2Nyb2xsVG9IYW5kbGVyLnN0YXJ0ID0gTWF0aC5tYXgoU2Nyb2xsVG9IYW5kbGVyLmJvZHkuc2Nyb2xsVG9wLCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCwgd2luZG93LnBhZ2VZT2Zmc2V0KTsgLy9Vc2UgTWF0aC5tYXggYmVjYXVzZSBzYWZhcmkgZG9lc24ndCBzdXBwb3J0IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcbiAgICAgICAgU2Nyb2xsVG9IYW5kbGVyLmNoYW5nZSA9ICgoc2Nyb2xsVG9FbGVtZW50UG9zaXRpb24udG9wICsgU2Nyb2xsVG9IYW5kbGVyLnN0YXJ0KSAtIFNjcm9sbFRvSGFuZGxlci5zdGFydCkgLSBTY3JvbGxUb0hhbmRsZXIub2Zmc2V0O1xuICAgICAgICBTY3JvbGxUb0hhbmRsZXIuc3RhcnRUaW1lID0gJ25vdycgaW4gd2luZG93LnBlcmZvcm1hbmNlID8gcGVyZm9ybWFuY2Uubm93KCkgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgU2Nyb2xsVG9IYW5kbGVyLmFsbG93QW5pbWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAvLyBUcmlnZ2VyIGFuaW1hdGlvblxuICAgICAgICBzY3JvbGxUb0FuaW1hdGlvbiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShTY3JvbGxUb0hhbmRsZXIuYW5pbWF0ZVNjcm9sbCk7XG5cbiAgICAgICAgLy8gU3RvcCBvbiBzY3JvbGxcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIFNjcm9sbFRvSGFuZGxlci5hYm9ydFNjcm9sbEFuaW1hdGlvbik7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIFNjcm9sbFRvSGFuZGxlci5hYm9ydFNjcm9sbEFuaW1hdGlvbik7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Nb3VzZVNjcm9sbCcsIFNjcm9sbFRvSGFuZGxlci5hYm9ydFNjcm9sbEFuaW1hdGlvbik7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXdoZWVsJywgU2Nyb2xsVG9IYW5kbGVyLmFib3J0U2Nyb2xsQW5pbWF0aW9uKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgU2Nyb2xsVG9IYW5kbGVyLmFib3J0U2Nyb2xsQW5pbWF0aW9uKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIFNjcm9sbFRvSGFuZGxlci5hYm9ydFNjcm9sbEFuaW1hdGlvbik7XG5cbiAgICB9LFxuXG4gICAgLypcbiAgICAgKiBBbmltYXRlIHRoZSBzY3JvbGwgcG9zaXRpb25cbiAgICAgKi9cbiAgICBhbmltYXRlU2Nyb2xsIDogZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBwcm9ncmVzcyBmcm9tIDAgLSAxXG4gICAgICAgIGxldCBwcm9ncmVzcyA9IE1hdGgubWluKDEsICh0aW1lc3RhbXAgLSAgU2Nyb2xsVG9IYW5kbGVyLnN0YXJ0VGltZSkgLyBTY3JvbGxUb0hhbmRsZXIuZHVyYXRpb24pO1xuICAgICAgICBpZihwcm9ncmVzcyA8IDApIHByb2dyZXNzID0gMDtcblxuICAgICAgICAvLyBDb252ZXJ0IHByb2dyZXNzIHdpdGggZWFzaW5nIGZ1bmN0aW9uXG4gICAgICAgIHByb2dyZXNzID0gRWFzaW5nRnVuY3Rpb25zW1Njcm9sbFRvSGFuZGxlci5lYXNpbmddKHByb2dyZXNzKTtcblxuICAgICAgICBjb25zdCBuZXdTY3JvbGxUb3AgPSBTY3JvbGxUb0hhbmRsZXIuc3RhcnQgKyAoIFNjcm9sbFRvSGFuZGxlci5jaGFuZ2UgKiBwcm9ncmVzcyApO1xuXG4gICAgICAgIFNjcm9sbFRvSGFuZGxlci5ib2R5LnNjcm9sbFRvcCA9IG5ld1Njcm9sbFRvcDtcbiAgICAgICAgaWYoIFNjcm9sbFRvSGFuZGxlci5ib2R5LnNjcm9sbFRvcCA9PT0gMCApIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wID0gbmV3U2Nyb2xsVG9wOyAvLyBTYWZhcmkgZG9lc24ndCBzdXBwb3J0IHNvIGlmIFNjcm9sbFRvSGFuZGxlci5ib2R5LnNjcm9sbFRvcCBpcyAwIGZvcmNlIHRoZSBzY3JvbGwgcG9zaXRpb24gdGhyb3VnaCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcFxuXG4gICAgICAgIGlmKHByb2dyZXNzIDwgMSAmJiBTY3JvbGxUb0hhbmRsZXIuYWxsb3dBbmltYXRpb24pe1xuICAgICAgICAgICAgc2Nyb2xsVG9BbmltYXRpb24gPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoU2Nyb2xsVG9IYW5kbGVyLmFuaW1hdGVTY3JvbGwpO1xuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgLypcbiAgICAgKiBBYm9ydCB0aGUgc2Nyb2xsIGFuaW1hdGlvblxuICAgICAqL1xuICAgIGFib3J0U2Nyb2xsQW5pbWF0aW9uIDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIFNjcm9sbFRvSGFuZGxlci5hbGxvd0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShTY3JvbGxUb0hhbmRsZXIuc2Nyb2xsVG9BbmltYXRpb24pO1xuICAgIH1cblxufTtcblxuU2Nyb2xsVG9IYW5kbGVyLmluaXQoKTsiLCIoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoKSA6XG4gICAgICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgICAgICAgICAoZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogQHRoaXMge1Byb21pc2V9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluYWxseUNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiB0aGlzLnRoZW4oXG4gICAgICAgICAgICBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3IucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4vLyBTdG9yZSBzZXRUaW1lb3V0IHJlZmVyZW5jZSBzbyBwcm9taXNlLXBvbHlmaWxsIHdpbGwgYmUgdW5hZmZlY3RlZCBieVxuLy8gb3RoZXIgY29kZSBtb2RpZnlpbmcgc2V0VGltZW91dCAobGlrZSBzaW5vbi51c2VGYWtlVGltZXJzKCkpXG4gICAgdmFyIHNldFRpbWVvdXRGdW5jID0gc2V0VGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vLyBQb2x5ZmlsbCBmb3IgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbiAgICBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBQcm9taXNlKGZuKSB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldycpO1xuICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICAvKiogQHR5cGUgeyFudW1iZXJ9ICovXG4gICAgICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICAgICAgLyoqIEB0eXBlIHshYm9vbGVhbn0gKi9cbiAgICAgICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAvKiogQHR5cGUge1Byb21pc2V8dW5kZWZpbmVkfSAqL1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqIEB0eXBlIHshQXJyYXk8IUZ1bmN0aW9uPn0gKi9cbiAgICAgICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICAgICAgZG9SZXNvbHZlKGZuLCB0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGUoc2VsZiwgZGVmZXJyZWQpIHtcbiAgICAgICAgd2hpbGUgKHNlbGYuX3N0YXRlID09PSAzKSB7XG4gICAgICAgICAgICBzZWxmID0gc2VsZi5fdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuX3N0YXRlID09PSAwKSB7XG4gICAgICAgICAgICBzZWxmLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5faGFuZGxlZCA9IHRydWU7XG4gICAgICAgIFByb21pc2UuX2ltbWVkaWF0ZUZuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGNiID0gc2VsZi5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG4gICAgICAgICAgICBpZiAoY2IgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAoc2VsZi5fc3RhdGUgPT09IDEgPyByZXNvbHZlIDogcmVqZWN0KShkZWZlcnJlZC5wcm9taXNlLCBzZWxmLl92YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHJldDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gY2Ioc2VsZi5fdmFsdWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdChkZWZlcnJlZC5wcm9taXNlLCBlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKGRlZmVycmVkLnByb21pc2UsIHJldCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmUoc2VsZiwgbmV3VmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9taXNlcy1hcGx1cy9wcm9taXNlcy1zcGVjI3RoZS1wcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IHNlbGYpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBwcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0c2VsZi4nKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciB0aGVuID0gbmV3VmFsdWUudGhlbjtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gMztcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmluYWxlKHNlbGYpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBkb1Jlc29sdmUoYmluZCh0aGVuLCBuZXdWYWx1ZSksIHNlbGYpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSAxO1xuICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIGZpbmFsZShzZWxmKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KHNlbGYsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVqZWN0KHNlbGYsIG5ld1ZhbHVlKSB7XG4gICAgICAgIHNlbGYuX3N0YXRlID0gMjtcbiAgICAgICAgc2VsZi5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgZmluYWxlKHNlbGYpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmFsZShzZWxmKSB7XG4gICAgICAgIGlmIChzZWxmLl9zdGF0ZSA9PT0gMiAmJiBzZWxmLl9kZWZlcnJlZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBQcm9taXNlLl9pbW1lZGlhdGVGbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGYuX2hhbmRsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uRm4oc2VsZi5fdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNlbGYuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaGFuZGxlKHNlbGYsIHNlbGYuX2RlZmVycmVkc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5fZGVmZXJyZWRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7XG4gICAgICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgICAgIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gICAgICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFrZSBhIHBvdGVudGlhbGx5IG1pc2JlaGF2aW5nIHJlc29sdmVyIGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmVcbiAgICAgKiBvbkZ1bGZpbGxlZCBhbmQgb25SZWplY3RlZCBhcmUgb25seSBjYWxsZWQgb25jZS5cbiAgICAgKlxuICAgICAqIE1ha2VzIG5vIGd1YXJhbnRlZXMgYWJvdXQgYXN5bmNocm9ueS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb1Jlc29sdmUoZm4sIHNlbGYpIHtcbiAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZuKFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNlbGYsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHNlbGYsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlamVjdChzZWxmLCBleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBQcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uKG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbiAgICB9O1xuXG4gICAgUHJvbWlzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdmFyIHByb20gPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihub29wKTtcblxuICAgICAgICBoYW5kbGUodGhpcywgbmV3IEhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb20pKTtcbiAgICAgICAgcmV0dXJuIHByb207XG4gICAgfTtcblxuICAgIFByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmaW5hbGx5Q29uc3RydWN0b3I7XG5cbiAgICBQcm9taXNlLmFsbCA9IGZ1bmN0aW9uKGFycikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBpZiAoIWFyciB8fCB0eXBlb2YgYXJyLmxlbmd0aCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpO1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlcyhpLCB2YWwpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsICYmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRoZW4gPSB2YWwudGhlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyhpLCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmVzKGksIGFyZ3NbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgUHJvbWlzZS5yZXNvbHZlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIFByb21pc2UucmVqZWN0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgcmVqZWN0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIFByb21pc2UucmFjZSA9IGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsdWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzW2ldLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuLy8gVXNlIHBvbHlmaWxsIGZvciBzZXRJbW1lZGlhdGUgZm9yIHBlcmZvcm1hbmNlIGdhaW5zXG4gICAgUHJvbWlzZS5faW1tZWRpYXRlRm4gPVxuICAgICAgICAodHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoZm4pO1xuICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXRGdW5jKGZuLCAwKTtcbiAgICAgICAgfTtcblxuICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbkZuID0gZnVuY3Rpb24gX3VuaGFuZGxlZFJlamVjdGlvbkZuKGVycikge1xuICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiBAc3VwcHJlc3Mge3VuZGVmaW5lZFZhcnN9ICovXG4gICAgdmFyIGdsb2JhbE5TID0gKGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyB0aGUgb25seSByZWxpYWJsZSBtZWFucyB0byBnZXQgdGhlIGdsb2JhbCBvYmplY3QgaXNcbiAgICAgICAgLy8gYEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKClgXG4gICAgICAgIC8vIEhvd2V2ZXIsIHRoaXMgY2F1c2VzIENTUCB2aW9sYXRpb25zIGluIENocm9tZSBhcHBzLlxuICAgICAgICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0Jyk7XG4gICAgfSkoKTtcblxuICAgIGlmICghKCdQcm9taXNlJyBpbiBnbG9iYWxOUykpIHtcbiAgICAgICAgZ2xvYmFsTlNbJ1Byb21pc2UnXSA9IFByb21pc2U7XG4gICAgfSBlbHNlIGlmICghZ2xvYmFsTlMuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSkge1xuICAgICAgICBnbG9iYWxOUy5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZmluYWxseUNvbnN0cnVjdG9yO1xuICAgIH1cblxufSkpKTsiLCJOdW1iZXIuaXNJbnRlZ2VyID0gTnVtYmVyLmlzSW50ZWdlciB8fCBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgaXNGaW5pdGUodmFsdWUpICYmXG4gICAgICAgIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn07IiwiXG4vKiBFeGFtcGxlXG5cbmNvbnN0IGhlYWRlckltYWdlU2xpZGVyU2V0dGluZyA9IG5ldyBTbGlkZXJQcm9qZWN0b3JTZXR0aW5nKHtcbiAgICBzbGlkZXJQcm9qZWN0b3JJZDogJ2hlYWRlci1pbWFnZS1zbGlkZXInLFxuICAgIHNsaWRlUXVlcnk6ICcjaGVhZGVyLWltYWdlLXNsaWRlciAucGxhY2Vob2xkZXIgZmlndXJlJyxcbiAgICBkb3RzOiAnI2hlYWRlci1pbWFnZS1zbGlkZXIgLnNsaWRlci1uYXZpZ2F0aW9uLWxhYmVscyAubmF2aWdhdGlvbiBzcGFuJyxcbiAgICBhdXRvU2xpZGVyOiB0cnVlLFxuICAgIHNsaWRlckludGVydmFsOiA0MDAwXG59KTtcbmhlYWRlckltYWdlU2xpZGVyU2V0dGluZyA9IGhlYWRlckltYWdlU2xpZGVyU2V0dGluZy5wcmVwYXJlUGFyYW1ldGVycygpO1xuXG5jb25zdCBoZWFkZXJJbWFnZVNsaWRlciA9IG5ldyBTbGlkZXJQcm9qZWN0b3IoaGVhZGVySW1hZ2VTbGlkZXJTZXR0aW5nKS5pbml0KCk7XG5cbiAqL1xuXG5cbmxldCBTbGlkZXJzID0gW107XG5cbmNvbnN0IHNsaWRlckNvbnRhaW5lcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtc2xpZGVyJyk7XG5jb25zdCBzbGlkZXJDb250YWluZXJzTGVuZ3RoID0gc2xpZGVyQ29udGFpbmVycy5sZW5ndGg7XG5cbmZvcihsZXQgaSA9MDsgaSA8IHNsaWRlckNvbnRhaW5lcnNMZW5ndGg7IGkrKyl7XG5cbiAgICBjb25zdCBzbGlkZXIgPSBzbGlkZXJDb250YWluZXJzW2ldO1xuICAgIGNvbnN0IHNsaWRlcklkID0gc2xpZGVyLmdldEF0dHJpYnV0ZSgnaWQnKTtcblxuICAgIGlmKHNsaWRlcklkICE9PSBudWxsKXtcblxuICAgICAgICBjb25zdCBTbGlkZXJzZXR0aW5nID0gbmV3IFNsaWRlclNldHRpbmcoe1xuICAgICAgICAgICAgc2xpZGVySWQ6IHNsaWRlcklkLFxuICAgICAgICAgICAgc2xpZGVRdWVyeTogJyMnICsgc2xpZGVySWQgKycgLmpzLXNsaWRlci1zbGlkZScsXG4gICAgICAgICAgICBuYXZpZ2F0aW9uQnV0dG9uczogJyMnICsgc2xpZGVySWQgKycgLmpzLXNsaWRlci1idXR0b24nLFxuICAgICAgICAgICAgZG90czogJyMnICsgc2xpZGVySWQgKycgLmpzLXNsaWRlci1pbmRpY2F0b3InLFxuICAgICAgICB9KTtcblxuICAgICAgICBTbGlkZXJzLnB1c2goIG5ldyBTbGlkZXIoU2xpZGVyc2V0dGluZy5wcmVwYXJlUGFyYW1ldGVycygpKS5pbml0KCkgKTtcbiAgICB9XG4gICAgZWxzZSBjb25zb2xlLmxvZygnQW4gaW1hZ2Ugc2xpZGVyIGhhcyBubyBpZC4uLicpO1xufVxuXG5cbmZ1bmN0aW9uIFNsaWRlclNldHRpbmcoc2V0dGluZ3NPYmplY3QpIHtcblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5zbGlkZXJJZCA9ICcnO1xuICAgIHRoaXMuZGVmaW5lZFByZXZpb3VzTmV4dCA9IHRydWU7XG4gICAgdGhpcy5hdXRvU2xpZGVyID0gZmFsc2U7XG4gICAgdGhpcy5zbGlkZXJJbnRlcnZhbCA9IDQwMDA7XG4gICAgdGhpcy5uYXZpZ2F0aW9uQnV0dG9ucyA9ICcnO1xuICAgIHRoaXMuZG90cyA9ICcnO1xuICAgIHRoaXMuc2xpZGVRdWVyeSA9ICcnO1xuXG4gICAgdGhpcy5zZXRTbGlkZXJJZCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zbGlkZXJJZCA9IHN0cmluZztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICB0aGlzLnNldERlZmluZWRQcmV2aW91c05leHQgPSBmdW5jdGlvbiAoYm9vbGVhbikge1xuICAgICAgICB0aGlzLmRlZmluZWRQcmV2aW91c05leHQgPSBib29sZWFuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHRoaXMuc2V0QXV0b1NsaWRlciA9IGZ1bmN0aW9uIChib29sZWFuKSB7XG4gICAgICAgIHRoaXMuYXV0b1NsaWRlciA9IGJvb2xlYW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgdGhpcy5zZXRTbGlkZXJJbnRlcnZhbCA9IGZ1bmN0aW9uIChpbnRlZ2VyKSB7XG4gICAgICAgIHRoaXMuc2xpZGVySW50ZXJ2YWwgPSBpbnRlZ2VyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHRoaXMuc2V0U2xpZGVRdWVyeSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zbGlkZVF1ZXJ5ID0gc3RyaW5nO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHRoaXMuc2V0TmF2aWdhdGlvbkJ1dHRvbnMgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkJ1dHRvbnMgPSBzdHJpbmc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgdGhpcy5zZXREb3RzID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICB0aGlzLmRvdHMgPSBzdHJpbmc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgdGhpcy5nZXRTbGlkZXJJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVySWQ7XG4gICAgfTtcbiAgICB0aGlzLmdldERlZmluZWRQcmV2aW91c05leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmluZWRQcmV2aW91c05leHQ7XG4gICAgfTtcbiAgICB0aGlzLmdldEF1dG9TbGlkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dG9TbGlkZXI7XG4gICAgfTtcbiAgICB0aGlzLmdldFNsaWRlckludGVydmFsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXJJbnRlcnZhbDtcbiAgICB9O1xuICAgIHRoaXMuZ2V0U2xpZGVRdWVyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVRdWVyeTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0TmF2aWdhdGlvbkJ1dHRvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25CdXR0b25zO1xuICAgIH07XG4gICAgdGhpcy5nZXREb3RzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb3RzO1xuICAgIH07XG5cbiAgICAvLyBJbnZlcnQgc2V0dGVycyB0byBnZXR0ZXJzXG4gICAgdGhpcy5wcmVwYXJlUGFyYW1ldGVycyA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2xpZGVySWQ6IHNlbGYuZ2V0U2xpZGVySWQoKSxcbiAgICAgICAgICAgIGRlZmluZWRQcmV2aW91c05leHQ6IHNlbGYuZ2V0RGVmaW5lZFByZXZpb3VzTmV4dCgpLFxuICAgICAgICAgICAgYXV0b1NsaWRlcjogc2VsZi5nZXRBdXRvU2xpZGVyKCksXG4gICAgICAgICAgICBzbGlkZXJJbnRlcnZhbDogc2VsZi5nZXRTbGlkZXJJbnRlcnZhbCgpLFxuICAgICAgICAgICAgbmF2aWdhdGlvbkJ1dHRvbnM6IHNlbGYuZ2V0TmF2aWdhdGlvbkJ1dHRvbnMoKSxcbiAgICAgICAgICAgIGRvdHM6IHNlbGYuZ2V0RG90cygpLFxuICAgICAgICAgICAgc2xpZGVRdWVyeTogc2VsZi5nZXRTbGlkZVF1ZXJ5KClcbiAgICAgICAgfVxuXG4gICAgfTtcblxuICAgIC8vIE1hc3MgYXNzaWduIHNldHRpbmdzXG4gICAgdGhpcy5maWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBPYmplY3Qua2V5cyhzZXR0aW5nc09iamVjdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIC8vICAgICBzZWxmW2tleV0gPSBzZXR0aW5nc09iamVjdFtrZXldO1xuICAgICAgICAvLyB9KTtcblxuICAgICAgICBjb25zdCBzZXR0aW5nc09iamVjdEtleXMgPSBPYmplY3Qua2V5cyhzZXR0aW5nc09iamVjdCk7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzT2JqZWN0TGVuZ3RoID0gc2V0dGluZ3NPYmplY3RLZXlzLmxlbmd0aDtcblxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2V0dGluZ3NPYmplY3RMZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzZXR0aW5nc09iamVjdEtleXNbaV07XG4gICAgICAgICAgICBzZWxmW2tleV0gPSBzZXR0aW5nc09iamVjdFtrZXldO1xuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgdGhpcy5maWxsKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBzbGlkZXJJZDogc2VsZi5zZXRTbGlkZXJJZCxcbiAgICAgICAgZGVmaW5lZFByZXZpb3VzTmV4dDogc2VsZi5zZXREZWZpbmVkUHJldmlvdXNOZXh0LFxuICAgICAgICBhdXRvU2xpZGVyOiBzZWxmLnNldEF1dG9TbGlkZXIsXG4gICAgICAgIHNsaWRlckludGVydmFsOiBzZWxmLnNldFNsaWRlckludGVydmFsLFxuICAgICAgICBuYXZpZ2F0aW9uQnV0dG9uczogc2VsZi5zZXROYXZpZ2F0aW9uQnV0dG9ucyxcbiAgICAgICAgZG90czogc2VsZi5zZXREb3RzLFxuICAgICAgICBzbGlkZVF1ZXJ5OiBzZWxmLnNldFNsaWRlUXVlcnksXG4gICAgICAgIHByZXBhcmVQYXJhbWV0ZXJzOiBzZWxmLnByZXBhcmVQYXJhbWV0ZXJzXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gU2xpZGVyKHNldHRpbmdzKSB7XG5cbiAgICAvL0RlZmluZSBTbGlkZXIgb2JqZWN0XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5zbGlkZXJPYmplY3QgPSAnJztcblxuICAgIC8vU2xpZGVQYXJhbWV0ZXJzXG4gICAgdGhpcy5hY3RpdmVTbGlkZUlkID0gMDtcbiAgICB0aGlzLnByZXZpb3VzU2xpZGVJZCA9IDA7XG4gICAgdGhpcy5uZXh0U2xpZGVJZCA9IDA7XG4gICAgdGhpcy5hdmFpbGFibGVTbGlkZXMgPSAxO1xuICAgIHRoaXMuc2xpZGVzID0gW107XG4gICAgdGhpcy5hdXRvU2xpZGVySW50ZXJ2YWwgPSBudWxsO1xuXG4gICAgdGhpcy5zZXR0aW5ncyA9IHt9O1xuXG4gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIC8vQXBwZW5kIHNldHRpbmdzIHRvIHNlbGZcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuXG4gICAgICAgIC8vQXNzaWduIG5lZWRlZCBlbGVtZW50cyBhbmQgY2FsY3VsYXRpb25zXG4gICAgICAgIHRoaXMuc2xpZGVyT2JqZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZXR0aW5ncy5zbGlkZXJJZCk7XG4gICAgICAgIHRoaXMuc2xpZGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0aGlzLnNldHRpbmdzLnNsaWRlUXVlcnkpO1xuICAgICAgICB0aGlzLmF2YWlsYWJsZVNsaWRlcyA9IHRoaXMuc2xpZGVzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5hY3RpdmVTbGlkZUlkID0gMDtcblxuICAgICAgICAvL0RlZmluZSBwcmV2aW91cyBhbmQgbmV4dCBpZiB3ZSB3YW50IHRvIHVzZSB0aG9zZVxuICAgICAgICBpZiAoc2VsZi5zZXR0aW5ncy5kZWZpbmVkUHJldmlvdXNOZXh0KSB0aGlzLnNldFByZXZpb3VzQW5kTmV4dFNsaWRlKCk7XG5cbiAgICAgICAgLy8gU2V0IGFjdGl2ZSBzbGlkZSAoYW5kIHBvc3NpYmxlIHByZXZpb3VzIGFuZCBuZXh0IGNsYXNzZXMpXG4gICAgICAgIHRoaXMuc2V0U2xpZGUoKTtcblxuICAgICAgICAvLyBTd2lwZSBpbnRlcmFjdGlvblxuICAgICAgICBjb25zdCBzd2lwZUdlc3R1cmVzID0gbmV3IEhhbW1lcih0aGlzLnNsaWRlck9iamVjdCk7XG4gICAgICAgIHN3aXBlR2VzdHVyZXMub24oJ3N3aXBlbGVmdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYucmVzZXRBdXRvU2xpZGVyKCk7XG4gICAgICAgICAgICBzZWxmLm5leHRTbGlkZSgpO1xuICAgICAgICAgICAgc2VsZi5zZXRTbGlkZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3dpcGVHZXN0dXJlcy5vbignc3dpcGVyaWdodCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYucmVzZXRBdXRvU2xpZGVyKCk7XG4gICAgICAgICAgICBzZWxmLnByZXZpb3VzU2xpZGUoKTtcbiAgICAgICAgICAgIHNlbGYuc2V0U2xpZGUoKTtcbiAgICAgICAgfSk7XG5cblxuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLm5hdmlnYXRpb25CdXR0b25zICE9PSAnJykge1xuXG4gICAgICAgICAgICAvLyBDbGljayBpbnRlcmFjdGlvblxuICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvbkJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuc2V0dGluZ3MubmF2aWdhdGlvbkJ1dHRvbnMpO1xuICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvbkJ1dHRvbnNMZW5ndGggPSBuYXZpZ2F0aW9uQnV0dG9ucy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbmF2aWdhdGlvbkJ1dHRvbnNMZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvbkJ1dHRvbiA9IG5hdmlnYXRpb25CdXR0b25zW2ldO1xuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpY2tOYXZpZ2F0aW9uQnV0dG9uKHRoaXMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5kb3RzICE9PSAnJykge1xuICAgICAgICAgICAgLy8gQ2xpY2sgaW50ZXJhY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGRvdHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuc2V0dGluZ3MuZG90cyk7XG4gICAgICAgICAgICBjb25zdCBkb3RzTGVuZ3RoID0gZG90cy5sZW5ndGg7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnNldHRpbmdzLmRvdHMpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZG90cyk7XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgZG90c0xlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICBjb25zdCBkb3QgPSBkb3RzW2ldO1xuICAgICAgICAgICAgICAgIGRvdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGlja0RvdCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi5hdXRvU2xpZGVyKCk7XG4gICAgfTtcblxuXG4gICAgdGhpcy5hdXRvU2xpZGVyID0gZnVuY3Rpb24gKCl7XG5cbiAgICAgICAgaWYodGhpcy5hdXRvU2xpZGVySW50ZXJ2YWwgIT09IG51bGwpIGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvU2xpZGVySW50ZXJ2YWwpO1xuXG4gICAgICAgIGlmKHRoaXMuc2V0dGluZ3MuYXV0b1NsaWRlciAmJiBOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuc2V0dGluZ3Muc2xpZGVySW50ZXJ2YWwpICl7XG5cbiAgICAgICAgICAgIHRoaXMuYXV0b1NsaWRlckludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubmV4dFNsaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0U2xpZGUoKTtcbiAgICAgICAgICAgICAgICB9LCB0aGlzLnNldHRpbmdzLnNsaWRlckludGVydmFsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMucmVzZXRBdXRvU2xpZGVyID0gc2VsZi5hdXRvU2xpZGVyO1xuXG5cbiAgICB0aGlzLm5leHRTbGlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTbGlkZUlkKys7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVNsaWRlSWQgPj0gdGhpcy5hdmFpbGFibGVTbGlkZXMpIHRoaXMuYWN0aXZlU2xpZGVJZCA9IDA7XG5cbiAgICAgICAgaWYgKHNlbGYuc2V0dGluZ3MuZGVmaW5lZFByZXZpb3VzTmV4dCkgdGhpcy5zZXRQcmV2aW91c0FuZE5leHRTbGlkZSgpO1xuICAgIH07XG5cbiAgICB0aGlzLnByZXZpb3VzU2xpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlU2xpZGVJZC0tO1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVTbGlkZUlkIDwgMCkgdGhpcy5hY3RpdmVTbGlkZUlkID0gdGhpcy5hdmFpbGFibGVTbGlkZXMgLSAxO1xuXG4gICAgICAgIGlmIChzZWxmLnNldHRpbmdzLmRlZmluZWRQcmV2aW91c05leHQpIHRoaXMuc2V0UHJldmlvdXNBbmROZXh0U2xpZGUoKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRQcmV2aW91c0FuZE5leHRTbGlkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5uZXh0U2xpZGVJZCA9IHRoaXMuYWN0aXZlU2xpZGVJZCArIDE7XG4gICAgICAgIGlmICh0aGlzLm5leHRTbGlkZUlkID49IHRoaXMuYXZhaWxhYmxlU2xpZGVzKSB0aGlzLm5leHRTbGlkZUlkID0gMDtcblxuICAgICAgICB0aGlzLnByZXZpb3VzU2xpZGVJZCA9IHRoaXMuYWN0aXZlU2xpZGVJZCAtIDE7XG4gICAgICAgIGlmICh0aGlzLnByZXZpb3VzU2xpZGVJZCA8IDApIHRoaXMucHJldmlvdXNTbGlkZUlkID0gdGhpcy5hdmFpbGFibGVTbGlkZXMgLSAxO1xuICAgIH07XG5cbiAgICB0aGlzLnNldFNsaWRlID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgZm9ybSBlbGVtZW50c1xuICAgICAgICBjb25zdCBzbGlkZXNMZW5ndGggPSBzZWxmLnNsaWRlcy5sZW5ndGg7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBzbGlkZXNMZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCBzbGlkZSA9IHNlbGYuc2xpZGVzW2ldO1xuXG4gICAgICAgICAgICBzbGlkZS5zdHlsZS5wb2ludGVyRXZlbnRzID0gXCJub25lXCI7IC8vIE5lZWRlZCBmb3Igc3dpcGUgZnVuY3Rpb25hbGl0eVxuXG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgc2V0IGF0dHJpYnV0ZSB0byBkZXNpcmVkIHR5cGVcbiAgICAgICAgICAgIGNvbnN0IHNsaWRlT3JkZXIgPSBwYXJzZUludChzbGlkZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JkZXInKSk7XG5cbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbmQgc2V0IGFjdGl2ZSBmb3IgYWxsIHNsaWRlc1xuICAgICAgICAgICAgaWYgKHNsaWRlT3JkZXIgIT09IHNlbGYuYWN0aXZlU2xpZGVJZCkgc2xpZGUuY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJyk7XG4gICAgICAgICAgICBlbHNlIHNsaWRlLmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpO1xuXG4gICAgICAgICAgICAvLyBJZiB3ZSB1c2UgdGhlIHByZXZpb3VzIGFuZCBuZXh0LCBhbHNvIHNldCB0aG9zZSBjbGFzc2VzXG4gICAgICAgICAgICBpZiAoc2VsZi5zZXR0aW5ncy5kZWZpbmVkUHJldmlvdXNOZXh0KSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2xpZGVPcmRlciAhPT0gc2VsZi5wcmV2aW91c1NsaWRlSWQpIHNsaWRlLmNsYXNzTGlzdC5yZW1vdmUoJ3ByZXZpb3VzJyk7XG4gICAgICAgICAgICAgICAgZWxzZSBzbGlkZS5jbGFzc0xpc3QuYWRkKCdwcmV2aW91cycpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNsaWRlT3JkZXIgIT09IHNlbGYubmV4dFNsaWRlSWQpIHNsaWRlLmNsYXNzTGlzdC5yZW1vdmUoJ25leHQnKTtcbiAgICAgICAgICAgICAgICBlbHNlIHNsaWRlLmNsYXNzTGlzdC5hZGQoJ25leHQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWxmLnNldHRpbmdzLmRvdHMgIT09ICcnKSB7IHNlbGYuc2V0QWN0aXZlRG90KCk7IH1cbiAgICB9O1xuXG4gICAgdGhpcy5jbGlja05hdmlnYXRpb25CdXR0b24gPSBmdW5jdGlvbiAobmF2QnV0dG9uKSB7XG4gICAgICAgIHNlbGYuYWN0aXZlU2xpZGVJZCA9IHBhcnNlSW50KG5hdkJ1dHRvbi5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3JkZXInKSk7XG4gICAgICAgIGlmIChzZWxmLnNldHRpbmdzLmRlZmluZWRQcmV2aW91c05leHQpIHNlbGYuc2V0UHJldmlvdXNBbmROZXh0U2xpZGUoKTtcbiAgICAgICAgc2VsZi5zZXRTbGlkZSgpO1xuXG4gICAgICAgIGNvbnN0IG5leHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGYuc2V0dGluZ3MubmF2aWdhdGlvbkJ1dHRvbnMgKyAnLm5leHQnKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGYuc2V0dGluZ3MubmF2aWdhdGlvbkJ1dHRvbnMgKyAnLnByZXZpb3VzJyk7XG5cbiAgICAgICAgbmV4dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtb3JkZXInLCBzZWxmLm5leHRTbGlkZUlkKTtcbiAgICAgICAgcHJldmlvdXMuc2V0QXR0cmlidXRlKCdkYXRhLW9yZGVyJywgc2VsZi5wcmV2aW91c1NsaWRlSWQpO1xuXG4gICAgICAgIHNlbGYucmVzZXRBdXRvU2xpZGVyKCk7XG5cbiAgICAgICAgLy8gbmV4dC5xdWVyeVNlbGVjdG9yKCdwJykuaW5uZXJIVE1MID0gc2VsZi5zbGlkZXNbc2VsZi5uZXh0U2xpZGVJZF0uZGF0YXNldC5uYW1lO1xuICAgICAgICAvLyBwcmV2aW91cy5xdWVyeVNlbGVjdG9yKCdwJykuaW5uZXJIVE1MID0gc2VsZi5zbGlkZXNbc2VsZi5wcmV2aW91c1NsaWRlSWRdLmRhdGFzZXQubmFtZTtcbiAgICB9O1xuXG4gICAgdGhpcy5jbGlja0RvdCA9IGZ1bmN0aW9uIChjbGlja2VkRG90KSB7XG4gICAgICAgIHNlbGYuYWN0aXZlU2xpZGVJZCA9IHBhcnNlSW50KGNsaWNrZWREb3QuZ2V0QXR0cmlidXRlKCdkYXRhLW9yZGVyJykpO1xuICAgICAgICBzZWxmLnNldFNsaWRlKCk7XG4gICAgICAgIHNlbGYucmVzZXRBdXRvU2xpZGVyKCk7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0QWN0aXZlRG90ID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IGRvdHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuc2V0dGluZ3MuZG90cyk7XG4gICAgICAgIGNvbnN0IGRvdHNMZW5ndGggPSBkb3RzLmxlbmd0aDtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGRvdHNMZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCBkb3QgPSBkb3RzW2ldO1xuICAgICAgICAgICAgZG90T3JkZXIgPSBwYXJzZUludChkb3QuZ2V0QXR0cmlidXRlKCdkYXRhLW9yZGVyJykpO1xuXG4gICAgICAgICAgICBpZihkb3RPcmRlciAhPT0gc2VsZi5hY3RpdmVTbGlkZUlkKSB7XG4gICAgICAgICAgICAgICAgZG90LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGRvdC50YWJJbmRleCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb3QuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgZG90LnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufSIsInZhciBzY29wZSA9ICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbCkgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmKSB8fFxuICAgICAgICAgICAgd2luZG93O1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuXG4vLyBET00gQVBJcywgZm9yIGNvbXBsZXRlbmVzc1xuXG5leHBvcnRzLnNldFRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0VGltZW91dCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFySW50ZXJ2YWwpO1xufTtcbmV4cG9ydHMuY2xlYXJUaW1lb3V0ID1cbmV4cG9ydHMuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgaWYgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsb3NlKCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFRpbWVvdXQoaWQsIGNsZWFyRm4pIHtcbiAgdGhpcy5faWQgPSBpZDtcbiAgdGhpcy5fY2xlYXJGbiA9IGNsZWFyRm47XG59XG5UaW1lb3V0LnByb3RvdHlwZS51bnJlZiA9IFRpbWVvdXQucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uKCkge307XG5UaW1lb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhckZuLmNhbGwoc2NvcGUsIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBzZXRpbW1lZGlhdGUgYXR0YWNoZXMgaXRzZWxmIHRvIHRoZSBnbG9iYWwgb2JqZWN0XG5yZXF1aXJlKFwic2V0aW1tZWRpYXRlXCIpO1xuLy8gT24gc29tZSBleG90aWMgZW52aXJvbm1lbnRzLCBpdCdzIG5vdCBjbGVhciB3aGljaCBvYmplY3QgYHNldGltbWVkaWF0ZWAgd2FzXG4vLyBhYmxlIHRvIGluc3RhbGwgb250by4gIFNlYXJjaCBlYWNoIHBvc3NpYmlsaXR5IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZVxuLy8gYHNldGltbWVkaWF0ZWAgbGlicmFyeS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLnNldEltbWVkaWF0ZSk7XG5leHBvcnRzLmNsZWFySW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuY2xlYXJJbW1lZGlhdGUpO1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBHb29nbGUgTWFwcyBoYW5kbGVyXG4gICAgLSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9hZGRpbmctYS1nb29nbGUtbWFwXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgTWFwc0hhbmRsZXIgPSB7XG5cbiAgICBtYXA6ICcnLFxuICAgIGtleTogJ0FJemFTeUNWR1BVbVJtUVJ4WHZ6eld1M1h5dTc3WGViUXhRLWY0WScsXG4gICAgbG9jYXRpb246IHtsYXQ6IDUxLjI2MTA4OSwgbG5nOiA1LjU5ODE3Mn0sXG4gICAgc3R5bGluZzogJycsXG5cbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIEdldCBtYXAgYnkgaWRcbiAgICAgICAgTWFwc0hhbmRsZXIubWFwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWdvb2dsZS1tYXAnKTtcblxuICAgICAgICAvLyBDaGVjayBpZiBhIG1hcCBpcyBkZWZpbmVkXG4gICAgICAgIGlmIChpc3NldChNYXBzSGFuZGxlci5tYXApKSB7XG5cbiAgICAgICAgICAgIGlmKE1hcHNIYW5kbGVyLm1hcC5oYXNBdHRyaWJ1dGUoJ2RhdGEtZ29vZ2xlLWxhdCcpKSBNYXBzSGFuZGxlci5sb2NhdGlvbi5sYXQgPSBwYXJzZUZsb2F0KE1hcHNIYW5kbGVyLm1hcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZ29vZ2xlLWxhdCcpKTtcbiAgICAgICAgICAgIGlmKE1hcHNIYW5kbGVyLm1hcC5oYXNBdHRyaWJ1dGUoJ2RhdGEtZ29vZ2xlLWxuZycpKSBNYXBzSGFuZGxlci5sb2NhdGlvbi5sbmcgPSBwYXJzZUZsb2F0KE1hcHNIYW5kbGVyLm1hcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZ29vZ2xlLWxuZycpKTtcblxuICAgICAgICAgICAgTWFwc0hhbmRsZXIuc2V0Q3VzdG9tU3R5bGluZygpO1xuXG4gICAgICAgICAgICAvLyBTZWUgaWYgZ29vZ2xlIHZhcmlhYmxlIGV4aXN0c1xuICAgICAgICAgICAgaWYgKHR5cGVvZihnb29nbGUpID09ICd1bmRlZmluZWQnIHx8IHR5cGVvZihnb29nbGUubWFwcykgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAvLyBMb2FkIGV4dGVybmFsIHNjcmlwdFxuICAgICAgICAgICAgICAgIGdldFNjcmlwdCgnaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2pzP2tleT0nICsgTWFwc0hhbmRsZXIua2V5LCBNYXBzSGFuZGxlci5kcmF3TWFwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgTWFwc0hhbmRsZXIuZHJhd01hcCgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBkcmF3TWFwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG1hcFxuICAgICAgICBsZXQgbWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcChNYXBzSGFuZGxlci5tYXAsIHtcbiAgICAgICAgICAgIHpvb206IDE0LFxuICAgICAgICAgICAgY2VudGVyOiBNYXBzSGFuZGxlci5sb2NhdGlvbixcbiAgICAgICAgICAgIGRpc2FibGVEZWZhdWx0VUk6IHRydWUsXG4gICAgICAgICAgICBzdHlsZXM6IE1hcHNIYW5kbGVyLnN0eWxpbmdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGNvbnRlbnRTdHJpbmcgPSAnPGRpdj48cD5QbGFuIGVlbiByb3V0ZSBvcCAnK1xuICAgICAgICAgICAgJzxhIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCJodHRwczovL3d3dy5nb29nbGUuY29tL21hcHMvZGlyLz9hcGk9MSZkZXN0aW5hdGlvbj0nICsgTWFwc0hhbmRsZXIubG9jYXRpb24ubGF0ICsgJywnICsgTWFwc0hhbmRsZXIubG9jYXRpb24ubG5nICsnXCIgY2xhc3M9XCJsaW5rXCI+JytcbiAgICAgICAgICAgICdnb29nbGUgbWFwczwvYT4gJytcbiAgICAgICAgICAgICc8L3A+PC9kaXY+JztcblxuICAgICAgICB2YXIgaW5mb3dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRTdHJpbmdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQWRkIGEgbWFya2VyXG4gICAgICAgIGxldCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBNYXBzSGFuZGxlci5sb2NhdGlvbixcbiAgICAgICAgICAgIG1hcDogbWFwLFxuICAgICAgICAgICAgLy8gbGFiZWw6ICdBJ1xuICAgICAgICB9KTtcblxuICAgICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpbmZvd2luZG93Lm9wZW4obWFwLCBtYXJrZXIpO1xuICAgICAgICB9KTtcblxuICAgIH0sXG5cbiAgICBzZXRDdXN0b21TdHlsaW5nOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgTWFwc0hhbmRsZXIuc3R5bGluZyA9XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwid2F0ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNlOWU5ZTlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAxN1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJsYW5kc2NhcGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmNWY1ZjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAyMFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJyb2FkLmhpZ2h3YXlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5LmZpbGxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2ZmZmZmZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDE3XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInJvYWQuaGlnaHdheVwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnkuc3Ryb2tlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmZmZmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAyOVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAwLjJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwicm9hZC5hcnRlcmlhbFwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2ZmZmZmZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDE4XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcInJvYWQubG9jYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmZmZmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAxNlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJwb2lcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5XCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmNWY1ZjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAyMVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJwb2kucGFya1wiLFxuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwiZ2VvbWV0cnlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2RlZGVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDIxXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImxhYmVscy50ZXh0LnN0cm9rZVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmlzaWJpbGl0eVwiOiBcIm9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmZmZmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpZ2h0bmVzc1wiOiAxNlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJsYWJlbHMudGV4dC5maWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVyc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzYXR1cmF0aW9uXCI6IDM2XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjMzMzMzMzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogNDBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImVsZW1lbnRUeXBlXCI6IFwibGFiZWxzLmljb25cIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZpc2liaWxpdHlcIjogXCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiZmVhdHVyZVR5cGVcIjogXCJ0cmFuc2l0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeVwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0eWxlcnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZjJmMmYyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaWdodG5lc3NcIjogMTlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImZlYXR1cmVUeXBlXCI6IFwiYWRtaW5pc3RyYXRpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJlbGVtZW50VHlwZVwiOiBcImdlb21ldHJ5LmZpbGxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2ZlZmVmZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDIwXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJmZWF0dXJlVHlwZVwiOiBcImFkbWluaXN0cmF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWxlbWVudFR5cGVcIjogXCJnZW9tZXRyeS5zdHJva2VcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZXJzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2ZlZmVmZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlnaHRuZXNzXCI6IDE3XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEuMlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcblxuICAgIH1cbn07XG5cbk1hcHNIYW5kbGVyLmluaXQoKTsiLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIHwgUHJldmVudCBCb3RzIGhhbmRsZXJcbiB8XG4gfCBXZSBuYW1lZCB0aGlzIGNob2NvbGF0ZSBmYWN0b3J5IGFuZCBiZWxvbmdpbmcgY29uZnVzaW5nIGpzIGhvb2tzXG4gfCB0byBwcmV2ZW50IHNtYXJ0IGJvdHMgZnJvbSBibG9ja2luZyB0aGVzZSB2YXJpYWJsZSBvciBmdW5jdGlvbnMuXG4gfFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbmNvbnN0IENob2NvbGF0ZUZhY3RvcnkgPSB7XG5cbiAgICBiYW5uZWRWaXNpdG9yOiBbXSxcblxuICAgIC8qKiBHZXQgYWxsIHRoZSBjaG9jb2xhdGUgZmFjdG9yeSBhbmQgc3RhcnRcbiAgICAgKiAgTG9vcGluZyB0aHJvdWdoIHRob3NlIHN0YXJ0IGZsYXNoaW5nIHRpY2tldHNcbiAgICAgKi9cbiAgICBlbnRlcjogZnVuY3Rpb24oKVxuICAgIHtcblxuICAgICAgICBjb25zdCBjaG9jb2xhdGVGYWN0b3JpZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtY2hvY29sYXRlLWZhY3RvcnknKTtcblxuICAgICAgICBpZihpc3NldChjaG9jb2xhdGVGYWN0b3JpZXMpKXtcblxuICAgICAgICAgICAgY29uc3QgYW1vdW50T2ZDaG9jb2xhdGVGYWN0b3JpZXMgPSBjaG9jb2xhdGVGYWN0b3JpZXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGFtb3VudE9mQ2hvY29sYXRlRmFjdG9yaWVzOyBpKyspe1xuXG4gICAgICAgICAgICAgICAgY29uc3QgQ2hvY29sYXRlQmFyID0gY2hvY29sYXRlRmFjdG9yaWVzW2ldO1xuICAgICAgICAgICAgICAgIENob2NvbGF0ZUZhY3RvcnkuX2ZsYXNoVGlja2V0KENob2NvbGF0ZUJhcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSWYgZmFjdG9yeSBoYXMgYSBnb2xkZW4gdGlja2V0XG4gICAgICogVGhlbiB3ZSBjYW4gbWFrZSB0aGVtIGdvIG9uIHRoZSB0b3VyIGlmIHRoZXJlIGhhcyBiZWVuIGNsaWNrIG9uIHRoZSB0aWNrZXRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaG9jb2xhdGVCYXJcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9mbGFzaFRpY2tldDogZnVuY3Rpb24gKGNob2NvbGF0ZUJhcikge1xuXG4gICAgICAgIC8vIFRyeSBnZXQgdGhlIHRpY2tldCBmcm9tIHRoZSBjaG9jb2xhdGVCYXJcbiAgICAgICAgY29uc3QgZ29sZGVuVGlja2V0ID0gY2hvY29sYXRlQmFyLnF1ZXJ5U2VsZWN0b3IoJy5qcy1nb2xkZW4tdGlja2V0Jyk7XG5cbiAgICAgICAgLy8gT25seSBjb250aW51ZSBpZiBjaG9jb2xhdGUgYmFyIGhhcyBhIGdvbGRlbiB0aWNrZXRcbiAgICAgICAgaWYoaXNzZXQoZ29sZGVuVGlja2V0KSl7XG5cbiAgICAgICAgICAgIGdvbGRlblRpY2tldC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBDaG9jb2xhdGVGYWN0b3J5LmVuam95VGhlVG91cihjaG9jb2xhdGVCYXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdUbyBiYWQsIG5vIGdvbGRlbiB0aWNrZXRzIGhhcyBiZWVuIGZvdW5kLicpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN0YXJ0IHRoZSB0b3VyIHRocm91Z2ggdGhlIGZhY3RvcnlcbiAgICAgKiBBbmQgZ2V0IHRoZSBuYW1lcyBhbmQgcHJvcGVydGllcyBvZiB0aGUgbWVtYmVycyBvZiB0aGUgZ3JvdXBcbiAgICAgKiBJZiB0aGVyZSBhcmUgbWVtYmVycyBpbiB0aGUgZ3JvdXAgb2YgY291cnNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hvY29sYXRlRmFjdG9yeVxuICAgICAqL1xuICAgIGVuam95VGhlVG91cihjaG9jb2xhdGVGYWN0b3J5KXtcblxuICAgICAgICAvLyBBc2sgZm9yIHRoZSB0b3VyIGdyb3VwXG4gICAgICAgIGNvbnN0IHRvdXJHcm91cCA9IGNob2NvbGF0ZUZhY3RvcnkucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHRleHRhcmVhJyk7XG5cbiAgICAgICAgaWYoaXNzZXQodG91ckdyb3VwKSl7XG5cbiAgICAgICAgICAgIC8vIEZvciBlYWNoIHZpc2l0b3Igd2Ugd2FudCBhIGJlbG9uZ2luZyBPb21wYSBMb29tcGFcbiAgICAgICAgICAgIGxldCBvb21wYUxvb21wYXMgPSB7fTtcbiAgICAgICAgICAgIGxldCBhbW91bnRPZk9vbXBhTG9vbXBhcyA9IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvdXJHcm91cFNpemUgPSB0b3VyR3JvdXAubGVuZ3RoO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRvdXJHcm91cFNpemU7IGkrKyl7XG5cbiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHZpc2l0b3IgZnJvbSB0aGUgZ3JvdXBcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpdG9yID0gdG91ckdyb3VwW2ldO1xuXG4gICAgICAgICAgICAgICAgLy8gQXNrIGZvciBpdHMgbmFtZVxuICAgICAgICAgICAgICAgIGNvbnN0IHZpc2l0b3JOYW1lID0gdmlzaXRvci5nZXRBdHRyaWJ1dGUoJ25hbWUnKTtcblxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB2aXNpdG9yIGlzIGJhbm5lZFxuICAgICAgICAgICAgICAgIGlmKCBDaG9jb2xhdGVGYWN0b3J5Ll9pc1Zpc2l0b3JCYW5uZWQodmlzaXRvck5hbWUpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIG9vbXBhTG9vbXBhc1sgdmlzaXRvck5hbWUgXSA9IENob2NvbGF0ZUZhY3RvcnkuX2dldEFycmFuZ2VtZW50KHZpc2l0b3IpO1xuICAgICAgICAgICAgICAgIGFtb3VudE9mT29tcGFMb29tcGFzKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBpbnN1cmFuY2UgdGhhdCB0aGVyZSBhcmUgb29tcGEgbG9vbXBhc1xuICAgICAgICAgICAgaWYoYW1vdW50T2ZPb21wYUxvb21wYXMgPT09IDApIHJldHVybjtcblxuICAgICAgICAgICAgLy8gU2VuZCBzdWJtaXQgcmVxdWVzdFxuICAgICAgICAgICAgQ2hvY29sYXRlRmFjdG9yeS5fZmluaXNoVG91cihvb21wYUxvb21wYXMsIGNob2NvbGF0ZUZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVG8gYmFkLCBubyBtZW1iZXJzIHRvIHZpc2l0IHRoaXMgZmFjdG9yeScpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIHZpc2l0b3IgbmFtZSBpc24ndCBhbGxvd1xuICAgICAqXG4gICAgICogQHBhcmFtIHZpc2l0b3JOYW1lXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfaXNWaXNpdG9yQmFubmVkOiBmdW5jdGlvbih2aXNpdG9yTmFtZSl7XG4gICAgICAgIGlmKENob2NvbGF0ZUZhY3RvcnkuYmFubmVkVmlzaXRvci5pbmRleE9mKHZpc2l0b3JOYW1lKSAhPT0gLTEpe1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBNb3N0IGdldCB2aXNpdG9yIGhhdmUgYSBub3JtYWwgYXJyYW5nZW1lbnRcbiAgICAgKiBCdXQgc29tZXRpbWVzIHRoZXJlIGFyZSBzcGVjaWFsIGNhc2VzXG4gICAgICogTGlrZSBhIFNlbGVjdG9yIG9yIGNoZWNrYm94XG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmlzaXRvclxuICAgICAqIEByZXR1cm5zIHsqfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2dldEFycmFuZ2VtZW50OiBmdW5jdGlvbih2aXNpdG9yKVxuICAgIHtcblxuICAgICAgICBjb25zdCB2aXNpdG9yVHlwZSA9IHZpc2l0b3Iubm9kZU5hbWU7XG5cbiAgICAgICAgc3dpdGNoICh2aXNpdG9yVHlwZSkge1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlzaXRvci52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGaW5pc2ggdGhlIHRvdXJcbiAgICAgKiBJZiBzdWNjZXNzZnVsIHNob3cgdGhhbmtzIG1lc3NhZ2VcbiAgICAgKiBPciBzaG93IGRlZmluZWQgZXJyb3IgbWVzc2FnZSBvciBmYWxsYmFja1xuICAgICAqXG4gICAgICogQHBhcmFtIGdyb3VwXG4gICAgICogQHBhcmFtIGNob2NvbGF0ZUZhY3RvcnlcbiAgICAgKiBAcmV0dXJucyB7Knx2b2lkfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2ZpbmlzaFRvdXI6IGZ1bmN0aW9uKGdyb3VwLCBjaG9jb2xhdGVGYWN0b3J5KVxuICAgIHtcbiAgICAgICAgLy8gQWRkIHdpbGxpZSB0byB0aGUgZ3JvdXBcbiAgICAgICAgZ3JvdXAgPSBDaG9jb2xhdGVGYWN0b3J5Ll9hZGRXaWxsaWVXb25rYShncm91cCk7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBnYXRlIGZvciBmaW5pc2ggdGhlIHRvdXJcbiAgICAgICAgY29uc3QgZ2F0ZSA9ICcvY29udGFjdC9wcm9jZXNzJztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgQWpheC5wb3N0KGdhdGUsIGdyb3VwLCBmdW5jdGlvbiAoSHR0cFJlcXVlc3QpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShIdHRwUmVxdWVzdC5yZXNwb25zZSk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKEh0dHBSZXF1ZXN0LnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDIwMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaG9jb2xhdGVGYWN0b3J5Ll90aGFua3NGb3JWaXNpdGluZyhyZXNwb25zZS5yZWRpcmVjdFVybCk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDIyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENob2NvbGF0ZUZhY3RvcnkuX2dpdmVGZWVkYmFja1RvTWVtYmVycyhyZXNwb25zZS5lcnJvcnMsIGNob2NvbGF0ZUZhY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIENob2NvbGF0ZUZhY3RvcnkuX3Vua25vd25HYXBJbkZhY3RvcnkoY2hvY29sYXRlRmFjdG9yeSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIENob2NvbGF0ZUZhY3RvcnkuX3Vua25vd25HYXBJbkZhY3RvcnkoY2hvY29sYXRlRmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIHdpbGxpZSB3b25rYSB0byB0aGUgZ3JvdXBcbiAgICAgKiBQcy4uLiBpdCBhY3R1YWxseSB0aGUgc2VjcmV0IGNvZGUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3JvdXBcbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9hZGRXaWxsaWVXb25rYTogZnVuY3Rpb24oZ3JvdXApe1xuICAgICAgICBncm91cC5fd2lsbGllID0gJ3dvbmthJztcbiAgICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGQgdGhlIGZlZWRiYWNrIHRvIHRoZSBkZXNpcmVkIGFyZWEuXG4gICAgICogTW9zdCBsaWtlbHkgdG8gdGhlIHZpc2l0b3IgZGlyZWN0bHksIGJ1dCBzb21ldGltZSB0byB0aGUgZmFjdG9yeSBkZXNpcmVkIGZlZWRiYWNrIGFyZWFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlcnJvcnNcbiAgICAgKiBAcGFyYW0gY2hvY29sYXRlRmFjdG9yeVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2dpdmVGZWVkYmFja1RvTWVtYmVyczogZnVuY3Rpb24oZXJyb3JzLCBjaG9jb2xhdGVGYWN0b3J5KXtcblxuICAgICAgICAvLyBHcmFiIHRoZSBmYWN0b3J5IGZlZWRiYWNrIGFyZWFcbiAgICAgICAgY29uc3QgZmVlZGJhY2tBcmVhID0gY2hvY29sYXRlRmFjdG9yeS5xdWVyeVNlbGVjdG9yKCcuanMtZXJyb3ItYXJlYScpO1xuXG4gICAgICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IGh0bWxcbiAgICAgICAgaWYoaXNzZXQoZmVlZGJhY2tBcmVhKSkgZmVlZGJhY2tBcmVhLmlubmVySFRNTCA9ICcnO1xuXG4gICAgICAgIC8vIENsZWFyIHRoZSBwcmV2aW91cyBtYXJrZWQgamFja2V0c1xuICAgICAgICBDaG9jb2xhdGVGYWN0b3J5Ll9jbGVhclByZXZpb3VzTWFya2VkSmFja2V0cyhjaG9jb2xhdGVGYWN0b3J5KTtcblxuICAgICAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goZnVuY3Rpb24odmlzaXRvcikge1xuXG4gICAgICAgICAgICBsZXQgamFja2V0ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCB2aXNpdG9yRmVlZGJhY2tBcmVhID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gSG9uZXkgZWxlbWVudHMgZG9lc24ndCBoYXMgYSBhY2Nlc3NpYmxlIGVsZW1lbnRcbiAgICAgICAgICAgIGlmKHZpc2l0b3IgIT09ICdfaG9uZXknICYmIHZpc2l0b3IgIT09ICdfc2VjcmV0Q29kZScpIHtcblxuICAgICAgICAgICAgICAgIC8vIEdyYWIgdGhlIHZpc2l0b3JcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpdG9yTm9kZSA9IGNob2NvbGF0ZUZhY3RvcnkucXVlcnlTZWxlY3RvcignIycgKyB2aXNpdG9yKTtcblxuICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGphY2tldCBvZiBhIHZpc2l0b3JcbiAgICAgICAgICAgICAgICBqYWNrZXQgPSBDaG9jb2xhdGVGYWN0b3J5Ll9ncmFiVmlzaXRvckphY2tldCh2aXNpdG9yTm9kZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBmb3VuZCBnZXQgdGhlIGRlc2lyZWQgYXJlYVxuICAgICAgICAgICAgICAgIGlmKGlzc2V0KGphY2tldCkpIHZpc2l0b3JGZWVkYmFja0FyZWEgPSBqYWNrZXQucXVlcnlTZWxlY3RvcignLmpzLWZvcm0tZ3JvdXAtZXJyb3InKTtcblxuICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IGh0bWxcbiAgICAgICAgICAgICAgICBpZihpc3NldCh2aXNpdG9yRmVlZGJhY2tBcmVhKSkgdmlzaXRvckZlZWRiYWNrQXJlYS5pbm5lckhUTUwgPSAnJztcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBHZXQgdGhlIGZlZWRiYWNrIGZvciB0aGlzIHZpc2l0b3JcbiAgICAgICAgICAgIGNvbnN0IHZpc2l0b3JGZWVkYmFjayA9IGVycm9yc1t2aXNpdG9yXTtcblxuICAgICAgICAgICAgLy8gU3BpdCBvdXQgZWFjaCBsaW5lXG4gICAgICAgICAgICBjb25zdCB2aXNpdG9yRmVlZGJhY2tBbW91bnQgPSB2aXNpdG9yRmVlZGJhY2subGVuZ3RoO1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHZpc2l0b3JGZWVkYmFja0Ftb3VudDsgaSsrKXtcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpdG9yRmVlZGJhY2tMaW5lID0gdmlzaXRvckZlZWRiYWNrW2ldO1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2codmlzaXRvciwgdmlzaXRvckZlZWRiYWNrTGluZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBIb25leSBlbGVtZW50cyBkb2Vzbid0IGhhcyBhIGFjY2Vzc2libGUgZWxlbWVudCBhcmVhXG4gICAgICAgICAgICAgICAgaWYodmlzaXRvciAhPT0gJ19ob25leScgJiYgdmlzaXRvciAhPT0gJ19zZWNyZXRDb2RlJykge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgdGhlIGphY2tldFxuICAgICAgICAgICAgICAgICAgICBpZihpc3NldChqYWNrZXQpKSBqYWNrZXQuY2xhc3NMaXN0LmFkZCgnaGFzLWVycm9yJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIGZlZWRiYWNrIHRvIHZpc2l0b3IgZmVlZGJhY2sgYXJlYSBpZiBkZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIGlmKGlzc2V0KHZpc2l0b3JGZWVkYmFja0FyZWEpICYmIHZpc2l0b3JGZWVkYmFja0xpbmUubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRGZWVkYmFja0FyZWEgPSB2aXNpdG9yRmVlZGJhY2tBcmVhLmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZWVkYmFja0FyZWEgKz0gJzxzcGFuPicgKyBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodmlzaXRvckZlZWRiYWNrTGluZSkgKyAnPC9zcGFuPic7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yRmVlZGJhY2tBcmVhLmlubmVySFRNTCA9IGN1cnJlbnRGZWVkYmFja0FyZWE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgZmVlZGJhY2sgdG8gZmFjdG9yeSBmZWVkYmFjayBhcmVhIGlmIGRlZmluZWRcbiAgICAgICAgICAgICAgICBpZihpc3NldChmZWVkYmFja0FyZWEpICYmIHZpc2l0b3JGZWVkYmFja0xpbmUubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RmVlZGJhY2tBcmVhID0gZmVlZGJhY2tBcmVhLmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZlZWRiYWNrQXJlYSArPSAnPGxpPicgKyBjYXBpdGFsaXplRmlyc3RMZXR0ZXIodmlzaXRvckZlZWRiYWNrTGluZSkgKyAnPC9saT4nO1xuICAgICAgICAgICAgICAgICAgICBmZWVkYmFja0FyZWEuaW5uZXJIVE1MID0gY3VycmVudEZlZWRiYWNrQXJlYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgcHJldmlvdXMgbWFya2VkIGphY2tldHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaG9jb2xhdGVGYWN0b3J5XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfY2xlYXJQcmV2aW91c01hcmtlZEphY2tldHMoY2hvY29sYXRlRmFjdG9yeSkge1xuXG4gICAgICAgIGNvbnN0IG1hcmtlZEphY2tldHMgPSBjaG9jb2xhdGVGYWN0b3J5LnF1ZXJ5U2VsZWN0b3JBbGwoJy5oYXMtZXJyb3InKTtcbiAgICAgICAgY29uc3QgbWFya2VkSmFja2V0c0Ftb3VudCA9IG1hcmtlZEphY2tldHMubGVuZ3RoO1xuXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBtYXJrZWRKYWNrZXRzQW1vdW50OyBpKyspe1xuICAgICAgICAgICAgbWFya2VkSmFja2V0c1tpXS5jbGFzc0xpc3QucmVtb3ZlKCdoYXMtZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHcmFiIHRoZSBqYWNrZXQgb2YgdGhlIHZpc2l0b3JcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2aXNpdG9yXG4gICAgICogQHJldHVybnMge251bGx8KnwoKCkgPT4gKE5vZGUgfCBudWxsKSl8QWN0aXZlWC5JWE1MRE9NTm9kZXwoTm9kZSAmIFBhcmVudE5vZGUpfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2dyYWJWaXNpdG9ySmFja2V0OiBmdW5jdGlvbih2aXNpdG9yKXtcblxuICAgICAgICAvLyBDaGVjayBpZiB2aXNpdG9yIGlzIGRlZmluZWRcbiAgICAgICAgaWYgKCFpc3NldCh2aXNpdG9yKSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgLy8gRG8gbG9vcCBzZXR0aW5nc1xuICAgICAgICBjdXJyZW50TGF5ZXIgPSB2aXNpdG9yO1xuICAgICAgICBzYWZldHlCcmVhayA9IDA7XG5cbiAgICAgICAgLy8gR3JhYiB0aGUgbmV4dCBsYXllciB0aWxsIGl0IGlzIHRoZSBqYWNrZXQgKG9yIHNhZmV0eUJyZWFrIGhhcyBiZWVuIHJlYWNoZWRcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgc2FmZXR5QnJlYWsrKztcbiAgICAgICAgICAgIGN1cnJlbnRMYXllciA9IGN1cnJlbnRMYXllci5wYXJlbnROb2RlO1xuICAgICAgICAgICAgaWYoY3VycmVudExheWVyLmNsYXNzTGlzdC5jb250YWlucygnanMtZm9ybS1ncm91cCcpKSByZXR1cm4gY3VycmVudExheWVyO1xuICAgICAgICB9IHdoaWxlIChjdXJyZW50TGF5ZXIudGFnTmFtZSAhPT0gJ0JPRFknICYmIHNhZmV0eUJyZWFrIDw9IDEwKTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVkaXJlY3QgdGhlIHZpc2l0b3IgdG8gdGhlIHRoYW5rcyBwYWdlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV4dFN0b3BcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF90aGFua3NGb3JWaXNpdGluZzogZnVuY3Rpb24gKG5leHRTdG9wKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IG5leHRTdG9wO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVbmtub3duIGVycm9yIG9jY3VycmVkLCBsb2cgdGhlIGVycm9yXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hvY29sYXRlRmFjdG9yeVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3Vua25vd25HYXBJbkZhY3Rvcnk6IGZ1bmN0aW9uIChjaG9jb2xhdGVGYWN0b3J5KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNob2NvbGF0ZUZhY3RvcnkpO1xuICAgICAgICBjb25zb2xlLmxvZygnQ2hvY29sYXRlRmFjdG9yeTogVW5rb3duIEVycm9yJyk7XG4gICAgfSxcbn07XG5cbkNob2NvbGF0ZUZhY3RvcnkuZW50ZXIoKTsiLCIvKiogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqICBEZXBlbmRlbmNpZXNcbiAqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxuLyoqXG4gKiBFeHRlcm5hbFxuICovXG5yZXF1aXJlKCdoYW1tZXJqcycpO1xucmVxdWlyZSgnb2JqZWN0Rml0UG9seWZpbGwnKTtcblxuLyoqXG4gKiBHbG9iYWwgLyBTaGFyZWQgd2l0aCBLTVNcbiAqL1xucmVxdWlyZSgnLi8uLi9nbG9iYWwvcG9seWZpbGxzL2V2ZW50UG9seUZpbGwnKTtcbnJlcXVpcmUoJy4vLi4vZ2xvYmFsL3BvbHlmaWxscy9pc0ludGVnZXInKTtcbnJlcXVpcmUoJy4vLi4vZ2xvYmFsL3BvbHlmaWxscy9wcm9taXNlJyk7XG5cblxuLyoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiAgR2xvYmFsIGZ1bmN0aW9uYWxpdGllc1xuICogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG5yZXF1aXJlKCcuL2dsb2JhbC9oZWxwZXJzJyk7IC8vIFNob3VsZCBiZSBmaXJzdFxucmVxdWlyZSgnLi9nbG9iYWwvYnJvd3NlckhhbmRsZXInKTtcbi8vIHJlcXVpcmUoJy4vZ2xvYmFsL3BhZ2V0cmFuc2l0aW9uSGFuZGxlcicpO1xuLy8gcmVxdWlyZSgnLi9nbG9iYWwvcmVzaXplSGFuZGxlcicpO1xucmVxdWlyZSgnLi9nbG9iYWwvc2Nyb2xsSGFuZGxlcicpO1xuXG5cbi8qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogIENvbXBvbmVudCBmdW5jdGlvbmFsaXRpZXNcbiAqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblxucmVxdWlyZSgnLi9jb21wb25lbnRzL2Nob2NvbGF0ZUZhY3RvcnknKTtcbnJlcXVpcmUoJy4vY29tcG9uZW50cy9jb29raWVIYW5kbGVyJyk7XG4vLyByZXF1aXJlKCcuL2NvbXBvbmVudHMvSW5wdXRIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvbWFwc0hhbmRsZXInKTtcbnJlcXVpcmUoJy4vY29tcG9uZW50cy9vdmVybGF5TWVudUhhbmRsZXInKTtcbi8vIHJlcXVpcmUoJy4vY29tcG9uZW50cy9wcm9qZWN0b3JIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMvc2xpZGVySGFuZGxlcicpO1xucmVxdWlyZSgnLi9jb21wb25lbnRzL3Njcm9sbFRvSGFuZGxlcicpO1xuLy8gcmVxdWlyZSgnLi9jb21wb25lbnRzL3NlYXJjaEhhbmRsZXInKTtcbi8vIHJlcXVpcmUoJy4vY29tcG9uZW50cy9zaGFyZUJ1dHRvbnNIYW5kbGVyJyk7XG5yZXF1aXJlKCcuL2NvbXBvbmVudHMveW91dHViZUhhbmRsZXInKTtcblxuLyoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiAgU2hvcCBDb21wb25lbnQgZnVuY3Rpb25hbGl0aWVzXG4gKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cbi8vIHJlcXVpcmUoJy4vLi4vc2hvcC9jb21wb25lbnRzL3Nob3BwaW5nY2FydEhhbmRsZXInKTsiLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQnJvd3NlciBIYW5kbGVyXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgQnJvd3NlckhhbmRsZXIgPSB7XG5cbiAgICB1c2VyQWdlbnQ6ICcnLFxuICAgIGJyb3dzZXJJbmZvOiAnJyxcblxuXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgICBCcm93c2VySGFuZGxlci51c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICAgICAgQnJvd3NlckhhbmRsZXIuYnJvd3NlckluZm8gPSBCcm93c2VySGFuZGxlci5nZXRCcm93c2VySW5mbygpO1xuICAgICAgICBCcm93c2VySGFuZGxlci5oYW5kbGVJRSgpO1xuICAgICAgICBCcm93c2VySGFuZGxlci5oYW5kbGVTYWZhcmkoKTtcbiAgICB9LFxuXG4gICAgaGFuZGxlSUU6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvLyBEZXRlY3QgdmVyc2lvbnMgYmVsb3cgaWUxMVxuICAgICAgICBsZXQgbXNpZSA9IEJyb3dzZXJIYW5kbGVyLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFICcpO1xuICAgICAgICBjb25zdCBpZWx0MTEgPSBtc2llID4gMDtcblxuICAgICAgICAvLyBEZXRlY3QgaWUxMVxuICAgICAgICBjb25zdCBpZTExID0gISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50LipydlxcOjExXFwuLyk7XG5cbiAgICAgICAgLy8gSWYgSW50ZXJuZXQgRXhwbG9yZXJcbiAgICAgICAgaWYgKGllbHQxMSB8fCBpZTExKSB7XG4gICAgICAgICAgICAvLyBEZWZhdWx0IHZlcnNpb25cbiAgICAgICAgICAgIGxldCB2ZXJzaW9uID0gJzExJztcblxuICAgICAgICAgICAgLy8gV2F5IHRvIGRldGVjdCB2ZXJzaW9uIDwgMTFcbiAgICAgICAgICAgIGlmIChpZWx0MTEpIHZlcnNpb24gPSBwYXJzZUludChCcm93c2VySGFuZGxlci51c2VyQWdlbnQuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgIG1zaWUgKyA1LFxuICAgICAgICAgICAgICAgIEJyb3dzZXJIYW5kbGVyLnVzZXJBZ2VudC5pbmRleE9mKFwiLlwiLCBtc2llKVxuICAgICAgICAgICAgKSk7XG5cbiAgICAgICAgICAgIC8vIEFwcGVuZCBjbGFzc2VzIHRvIEhUTUwgKHdlIGhhdmUgdG8gZG8gdGhpcyBzZXBhcmF0ZWx5IGJlY2F1c2UgZWxzZSBpZSB3aWxsIGZhaWwpXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2llJyk7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3YnK3ZlcnNpb24pO1xuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG9sZGVyIHNhZmFyaSB2ZXJzaW9uXG4gICAgaGFuZGxlU2FmYXJpOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaWYoQnJvd3NlckhhbmRsZXIuYnJvd3NlckluZm8ubmFtZSA9PT0gJ1NhZmFyaScgJiYgQnJvd3NlckhhbmRsZXIuYnJvd3NlckluZm8udmVyc2lvbiA8PSAxMCl7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbCcpWzBdLmNsYXNzTGlzdC5hZGQoJ2llJyk7XG4gICAgICAgIH1cblxuICAgIH0sXG5cbiAgICBnZXRCcm93c2VySW5mbzogZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgdWE9bmF2aWdhdG9yLnVzZXJBZ2VudCx0ZW0sTT11YS5tYXRjaCgvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHxtc2llfHRyaWRlbnQoPz1cXC8pKVxcLz9cXHMqKFxcZCspL2kpIHx8IFtdO1xuICAgICAgICBpZigvdHJpZGVudC9pLnRlc3QoTVsxXSkpe1xuICAgICAgICAgICAgdGVtPS9cXGJydlsgOl0rKFxcZCspL2cuZXhlYyh1YSkgfHwgW107XG4gICAgICAgICAgICByZXR1cm4ge25hbWU6J0lFICcsdmVyc2lvbjoodGVtWzFdfHwnJyl9O1xuICAgICAgICB9XG4gICAgICAgIGlmKE1bMV09PT0nQ2hyb21lJyl7XG4gICAgICAgICAgICB0ZW09dWEubWF0Y2goL1xcYk9QUlxcLyhcXGQrKS8pXG4gICAgICAgICAgICBpZih0ZW0hPW51bGwpICAge3JldHVybiB7bmFtZTonT3BlcmEnLCB2ZXJzaW9uOnRlbVsxXX07fVxuICAgICAgICB9XG4gICAgICAgIE09TVsyXT8gW01bMV0sIE1bMl1dOiBbbmF2aWdhdG9yLmFwcE5hbWUsIG5hdmlnYXRvci5hcHBWZXJzaW9uLCAnLT8nXTtcbiAgICAgICAgaWYoKHRlbT11YS5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKSkhPW51bGwpIHtNLnNwbGljZSgxLDEsdGVtWzFdKTt9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBNWzBdLFxuICAgICAgICAgICAgdmVyc2lvbjogTVsxXVxuICAgICAgICB9O1xuICAgIH1cbn07XG5cbkJyb3dzZXJIYW5kbGVyLmluaXQoKTsiLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIEhlbHBlciBmdW5jdGlvbnNcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKlxuICogU2ltcGxlIGlzc2V0IG1ldGhvZCBmb3IgdGhpcyBkb2VzIG5vdCBleGlzdCBpbiBqYXZhc2NyaXB0XG4gKi9cbndpbmRvdy5pc3NldCA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqICE9PSBudWxsO1xufTtcblxuLypcbiAqIEVhc2luZyBGdW5jdGlvbnMgLSBpbnNwaXJlZCBmcm9tIGh0dHA6Ly9naXptYS5jb20vZWFzaW5nL1xuICogb25seSBjb25zaWRlcmluZyB0aGUgdCB2YWx1ZSBmb3IgdGhlIHJhbmdlIFswLCAxXSA9PiBbMCwgMV1cbiAqL1xud2luZG93LkVhc2luZ0Z1bmN0aW9ucyA9IHtcbiAgICAvLyBubyBlYXNpbmcsIG5vIGFjY2VsZXJhdGlvblxuICAgIGxpbmVhcjogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGluZyBmcm9tIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlSW5RdWFkOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCAqIHRcbiAgICB9LFxuICAgIC8vIGRlY2VsZXJhdGluZyB0byB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZU91dFF1YWQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ICogKDIgLSB0KVxuICAgIH0sXG4gICAgLy8gYWNjZWxlcmF0aW9uIHVudGlsIGhhbGZ3YXksIHRoZW4gZGVjZWxlcmF0aW9uXG4gICAgZWFzZUluT3V0UXVhZDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgPCAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0XG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpbmcgZnJvbSB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZUluQ3ViaWM6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ICogdCAqIHRcbiAgICB9LFxuICAgIC8vIGRlY2VsZXJhdGluZyB0byB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZU91dEN1YmljOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gKC0tdCkgKiB0ICogdCArIDFcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGlvbiB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGlvblxuICAgIGVhc2VJbk91dEN1YmljOiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCA8IC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMVxuICAgIH0sXG4gICAgLy8gYWNjZWxlcmF0aW5nIGZyb20gemVybyB2ZWxvY2l0eVxuICAgIGVhc2VJblF1YXJ0OiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdFxuICAgIH0sXG4gICAgLy8gZGVjZWxlcmF0aW5nIHRvIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlT3V0UXVhcnQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiAxIC0gKC0tdCkgKiB0ICogdCAqIHRcbiAgICB9LFxuICAgIC8vIGFjY2VsZXJhdGlvbiB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGlvblxuICAgIGVhc2VJbk91dFF1YXJ0OiBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCA8IC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqICgtLXQpICogdCAqIHQgKiB0XG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpbmcgZnJvbSB6ZXJvIHZlbG9jaXR5XG4gICAgZWFzZUluUXVpbnQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdFxuICAgIH0sXG4gICAgLy8gZGVjZWxlcmF0aW5nIHRvIHplcm8gdmVsb2NpdHlcbiAgICBlYXNlT3V0UXVpbnQ6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiAxICsgKC0tdCkgKiB0ICogdCAqIHQgKiB0XG4gICAgfSxcbiAgICAvLyBhY2NlbGVyYXRpb24gdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRpb25cbiAgICBlYXNlSW5PdXRRdWludDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgPCAuNSA/IDE2ICogdCAqIHQgKiB0ICogdCAqIHQgOiAxICsgMTYgKiAoLS10KSAqIHQgKiB0ICogdCAqIHRcbiAgICB9XG59O1xuXG4vKlxuICogVmFuaWxsYSB2ZXJzaW9uIG9mIHRoZSAkLmdldFNjcmlwdFxuICovXG53aW5kb3cuZ2V0U2NyaXB0ID0gZnVuY3Rpb24gKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgc2NyaXB0LmFzeW5jID0gMTtcblxuICAgIGNvbnN0IHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG4gICAgbGV0IHByaW9yID0gc2NyaXB0c1tzY3JpcHRzLmxlbmd0aCAtIDFdO1xuXG4gICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoXywgaXNBYm9ydCkge1xuICAgICAgICBpZiAoaXNBYm9ydCB8fCAhc2NyaXB0LnJlYWR5U3RhdGUgfHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdChzY3JpcHQucmVhZHlTdGF0ZSkpIHtcbiAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgIHNjcmlwdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgaWYgKCFpc0Fib3J0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHNjcmlwdC5zcmMgPSBzb3VyY2U7XG4gICAgcHJpb3IucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2NyaXB0LCBwcmlvcik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3RcbiAqIGJlIHRyaWdnZXJlZC4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGl0IHN0b3BzIGJlaW5nIGNhbGxlZCBmb3JcbiAqIE4gbWlsbGlzZWNvbmRzLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZVxuICogbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy5cbiAqIEBwYXJhbSBmdW5jXG4gKiBAcGFyYW0gd2FpdFxuICogQHBhcmFtIGltbWVkaWF0ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG53aW5kb3cuZGVib3VuY2UgPSBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICBsZXQgdGltZW91dDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGxldCBsYXRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGUpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcbn07XG5cbi8qXG4gKiBDb29raWUgaGVscGVyIGNsYXNzXG4gKi9cbndpbmRvdy5Db29raWUgPSB7XG4gICAgc2V0OiBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIGRheXMpIHtcbiAgICAgICAgbGV0IGRvbWFpbiwgZG9tYWluUGFydHMsIGRhdGUsIGV4cGlyZXMsIGhvc3Q7XG5cbiAgICAgICAgaWYgKGRheXMpIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgKGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7XG4gICAgICAgICAgICBleHBpcmVzID0gXCI7IGV4cGlyZXM9XCIgKyBkYXRlLnRvR01UU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBleHBpcmVzID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGhvc3QgPSBsb2NhdGlvbi5ob3N0O1xuICAgICAgICBpZiAoaG9zdC5zcGxpdCgnLicpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gbm8gXCIuXCIgaW4gYSBkb21haW4gLSBpdCdzIGxvY2FsaG9zdCBvciBzb21ldGhpbmcgc2ltaWxhclxuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgdmFsdWUgKyBleHBpcmVzICsgXCI7IHBhdGg9L1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIGNvb2tpZSBvbiBhbGwgc3ViIGRvbWFpbnMuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gU3RhcnQgd2l0aCB0cnlpbmcgdG8gc2V0IGNvb2tpZSB0byB0aGUgdG9wIGRvbWFpbi5cbiAgICAgICAgICAgIC8vIChleGFtcGxlOiBpZiB1c2VyIGlzIG9uIGZvby5jb20sIHRyeSB0byBzZXRcbiAgICAgICAgICAgIC8vICBjb29raWUgdG8gZG9tYWluIFwiLmNvbVwiKVxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIElmIHRoZSBjb29raWUgd2lsbCBub3QgYmUgc2V0LCBpdCBtZWFucyBcIi5jb21cIlxuICAgICAgICAgICAgLy8gaXMgYSB0b3AgbGV2ZWwgZG9tYWluIGFuZCB3ZSBuZWVkIHRvXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGNvb2tpZSB0byBcIi5mb28uY29tXCJcbiAgICAgICAgICAgIGRvbWFpblBhcnRzID0gaG9zdC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgZG9tYWluUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGRvbWFpbiA9ICcuJyArIGRvbWFpblBhcnRzLmpvaW4oJy4nKTtcblxuICAgICAgICAgICAgLy8gRm9yIGRldmVsb3BtZW50IHB1cnBvc2UsIHJlbW92ZSB0aGlzIHdoZW4gbW92aW5nIHRvIHByb2R1Y3Rpb25cbiAgICAgICAgICAgIC8vIGRvbWFpbiA9ICcua29tbWEucHJvJztcblxuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgdmFsdWUgKyBleHBpcmVzICsgXCI7IHBhdGg9LzsgZG9tYWluPVwiICsgZG9tYWluO1xuXG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjb29raWUgd2FzIHN1Y2Nlc3NmdWx5IHNldCB0byB0aGUgZ2l2ZW4gZG9tYWluXG4gICAgICAgICAgICAvLyAob3RoZXJ3aXNlIGl0IHdhcyBhIFRvcC1MZXZlbCBEb21haW4pXG4gICAgICAgICAgICBpZiAoQ29va2llLmdldChuYW1lKSA9PSBudWxsIHx8IENvb2tpZS5nZXQobmFtZSkgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBhcHBlbmQgXCIuXCIgdG8gY3VycmVudCBkb21haW5cbiAgICAgICAgICAgICAgICBkb21haW4gPSAnLicgKyBob3N0O1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyBcIj1cIiArIHZhbHVlICsgZXhwaXJlcyArIFwiOyBwYXRoPS87IGRvbWFpbj1cIiArIGRvbWFpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGNvbnN0IG5hbWVFUSA9IG5hbWUgKyBcIj1cIjtcbiAgICAgICAgY29uc3QgY2EgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGMgPSBjYVtpXTtcbiAgICAgICAgICAgIHdoaWxlIChjLmNoYXJBdCgwKSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgYyA9IGMuc3Vic3RyaW5nKDEsIGMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lRVEpID09PSAwKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCwgYy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG5cbiAgICBlcmFzZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgQ29va2llLnNldChuYW1lLCAnJywgLTEpO1xuICAgIH1cbn07XG5cbi8qXG4gKiBKYXZhc2NyaXB0IHZlcnNpb24gb2YgdGhlIG51bWJlcl9mb3JtYXQgbWV0aG9kIG9mIFBIUFxuICovXG53aW5kb3cubnVtYmVyX2Zvcm1hdCA9IGZ1bmN0aW9uIChudW1iZXIsIGRlY2ltYWxzLCBkZWNfcG9pbnQsIHRob3VzYW5kc19zZXApIHtcbiAgICAvLyBTdHJpcCBhbGwgY2hhcmFjdGVycyBidXQgbnVtZXJpY2FsIG9uZXMuXG4gICAgbnVtYmVyID0gKG51bWJlciArICcnKS5yZXBsYWNlKC9bXjAtOStcXC1FZS5dL2csICcnKTtcbiAgICBsZXQgbiA9ICFpc0Zpbml0ZSgrbnVtYmVyKSA/IDAgOiArbnVtYmVyLFxuICAgICAgICBwcmVjID0gIWlzRmluaXRlKCtkZWNpbWFscykgPyAwIDogTWF0aC5hYnMoZGVjaW1hbHMpLFxuICAgICAgICBzZXAgPSAodHlwZW9mIHRob3VzYW5kc19zZXAgPT09ICd1bmRlZmluZWQnKSA/ICcsJyA6IHRob3VzYW5kc19zZXAsXG4gICAgICAgIGRlYyA9ICh0eXBlb2YgZGVjX3BvaW50ID09PSAndW5kZWZpbmVkJykgPyAnLicgOiBkZWNfcG9pbnQsXG4gICAgICAgIHMgPSAnJyxcbiAgICAgICAgdG9GaXhlZEZpeCA9IGZ1bmN0aW9uIChuLCBwcmVjKSB7XG4gICAgICAgICAgICB2YXIgayA9IE1hdGgucG93KDEwLCBwcmVjKTtcbiAgICAgICAgICAgIHJldHVybiAnJyArIE1hdGgucm91bmQobiAqIGspIC8gaztcbiAgICAgICAgfTtcbiAgICAvLyBGaXggZm9yIElFIHBhcnNlRmxvYXQoMC41NSkudG9GaXhlZCgwKSA9IDA7XG4gICAgcyA9IChwcmVjID8gdG9GaXhlZEZpeChuLCBwcmVjKSA6ICcnICsgTWF0aC5yb3VuZChuKSkuc3BsaXQoJy4nKTtcbiAgICBpZiAoc1swXS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNbMF0gPSBzWzBdLnJlcGxhY2UoL1xcQig/PSg/OlxcZHszfSkrKD8hXFxkKSkvZywgc2VwKTtcbiAgICB9XG4gICAgaWYgKChzWzFdIHx8ICcnKS5sZW5ndGggPCBwcmVjKSB7XG4gICAgICAgIHNbMV0gPSBzWzFdIHx8ICcnO1xuICAgICAgICBzWzFdICs9IG5ldyBBcnJheShwcmVjIC0gc1sxXS5sZW5ndGggKyAxKS5qb2luKCcwJyk7XG4gICAgfVxuICAgIHJldHVybiBzLmpvaW4oZGVjKTtcbn07XG5cblxuLyoqXG4gKiBFbGVtZW50LmNsb3Nlc3QoKSBwb2x5ZmlsbFxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvY2xvc2VzdCNQb2x5ZmlsbFxuICovXG5pZiAoIUVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3QpIHtcbiAgICBpZiAoIUVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMpIHtcbiAgICAgICAgRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyA9IEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yIHx8IEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtcbiAgICB9XG4gICAgRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHZhciBlbCA9IHRoaXM7XG4gICAgICAgIHZhciBhbmNlc3RvciA9IHRoaXM7XG4gICAgICAgIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGVsKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChhbmNlc3Rvci5tYXRjaGVzKHMpKSByZXR1cm4gYW5jZXN0b3I7XG4gICAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH0gd2hpbGUgKGFuY2VzdG9yICE9PSBudWxsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbn1cblxud2luZG93LkFqYXggPSB7XG5cbiAgICAvL1RPRE86IENhbiB3ZSBjcmVhdGUgYSBwcmVwYXJlIHJlcXVlc3QgZnVuY3Rpb24gPz9cblxuICAgIGdldDogZnVuY3Rpb24odXJsLCBjYWxsYmFjaykge1xuICAgICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIGxldCB0b2tlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5jb250ZW50O1xuXG4gICAgICAgIHhoci5vcGVuKCdnZXQnLCB1cmwsIHRydWUpO1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtQ1NSRi1UT0tFTicsIHRva2VuKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtUmVxdWVzdGVkLVdpdGgnLCAnWE1MSHR0cFJlcXVlc3QnKTtcbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soeGhyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9LFxuXG4gICAgcG9zdDogZnVuY3Rpb24odXJsLCBkYXRhLCBjYWxsYmFjaykge1xuICAgICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIGxldCB0b2tlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5jb250ZW50O1xuXG4gICAgICAgIHhoci5vcGVuKCdwb3N0JywgdXJsLCB0cnVlKTtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLUNTUkYtVE9LRU4nLCB0b2tlbik7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLVJlcXVlc3RlZC1XaXRoJywgJ1hNTEh0dHBSZXF1ZXN0Jyk7XG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHhocik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHhoci5zZW5kKCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIHN0cmluZ1xuICogQHBhcmFtIHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xud2luZG93LmNhcGl0YWxpemVGaXJzdExldHRlciA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0IHNuYWtlIGNhc2UgaW50byBjYW1lbGNhc2VcbiAqXG4gKiBAcGFyYW0gc3RyaW5nXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xud2luZG93LnNuYWtlVG9DYW1lbCA9IGZ1bmN0aW9uIChzdHJpbmcpe1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFxcLVxcdykvZywgZnVuY3Rpb24obSl7cmV0dXJuIG1bMV0udG9VcHBlckNhc2UoKTt9KTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBpbmRleCBvZiBhbiBlbGVtZW50IGluc2lkZSBpdHMgcGFyZW50XG4gKi9cbndpbmRvdy5pbmRleEluUGFyZW50PSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXM7XG4gICAgbGV0IG51bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY2hpbGRyZW5baV0gPT0gbm9kZSkgcmV0dXJuIG51bTtcbiAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5vZGVUeXBlID09IDEpIG51bSsrO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG59O1xuXG4vKipcbiAqIEZvciBzZWN1cml0eSByZWFzb25zIGlPUyBTYWZhcmkgb25seSBhbGxvd3MgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKSBmb3IgdGV4dCB3aXRoaW4gYSBjb250ZW50RWRpdGFibGUgY29udGFpbmVyLlxuICogVGhlIHdvcmthcm91bmQgaXMgdG8gZGV0ZWN0IGlPUyBTYWZhcmkgYW5kIHF1aWNrbHkgdG9nZ2xlIGNvbnRlbnRFZGl0YWJsZSBiZWZvcmUgZXhlY3V0aW5nIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykuXG4gKiBXaGViIGlucHV0IG9yIHRleHRhcmVhIGlzIFJFQURPTkxZIHlvdSBjYW4gcHJldmVudCB0aGUgdW53YW50ZWQgcG9wdXAgd2l0aCBjb3B5L3Bhc3RlIGZ1bmN0aW9ucyBhbmQgdGhlIGlucHV0IGtleWJvYXJkXG4gKiBDb2RlIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80Njk4MTg0N1xuICovXG53aW5kb3cuY29weVRvQ2xpcGJvYXJkID0gZnVuY3Rpb24gKGVsKSB7XG5cbiAgICAvLyByZXNvbHZlIHRoZSBlbGVtZW50XG4gICAgZWwgPSAodHlwZW9mIGVsID09PSAnc3RyaW5nJykgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKSA6IGVsO1xuXG4gICAgLy8gaGFuZGxlIGlPUyBhcyBhIHNwZWNpYWwgY2FzZVxuICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pcGFkfGlwb2R8aXBob25lL2kpKSB7XG5cbiAgICAgICAgLy8gc2F2ZSBjdXJyZW50IGNvbnRlbnRFZGl0YWJsZS9yZWFkT25seSBzdGF0dXNcbiAgICAgICAgY29uc3QgZWRpdGFibGUgPSBlbC5jb250ZW50RWRpdGFibGU7XG4gICAgICAgIGNvbnN0IHJlYWRPbmx5ID0gZWwucmVhZE9ubHk7XG5cbiAgICAgICAgLy8gY29udmVydCB0byBlZGl0YWJsZSB3aXRoIHJlYWRvbmx5IHRvIHN0b3AgaU9TIGtleWJvYXJkIG9wZW5pbmdcbiAgICAgICAgZWwuY29udGVudEVkaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgZWwucmVhZE9ubHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBhIHNlbGVjdGFibGUgcmFuZ2VcbiAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsKTtcblxuICAgICAgICAvLyBzZWxlY3QgdGhlIHJhbmdlXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICBlbC5zZXRTZWxlY3Rpb25SYW5nZSgwLCA5OTk5OTkpO1xuXG4gICAgICAgIC8vIHJlc3RvcmUgY29udGVudEVkaXRhYmxlL3JlYWRPbmx5IHRvIG9yaWdpbmFsIHN0YXRlXG4gICAgICAgIGVsLmNvbnRlbnRFZGl0YWJsZSA9IGVkaXRhYmxlO1xuICAgICAgICBlbC5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZWwuc2VsZWN0KCk7XG4gICAgfVxuXG4gICAgLy8gZXhlY3V0ZSBjb3B5IGNvbW1hbmRcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IHJlbGF0ZWQgdG8gdGhlIGJvZHlcbiAqXG4gKiBAcGFyYW0gZWxcbiAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIGxlZnQ6IG51bWJlcn19XG4gKi9cbndpbmRvdy5ib2R5T2Zmc2V0ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICBzY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcbiAgICByZXR1cm4geyB0b3A6IHJlY3QudG9wICsgc2Nyb2xsVG9wLCBsZWZ0OiByZWN0LmxlZnQgKyBzY3JvbGxMZWZ0IH1cbn07IiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENvb2tpZSBoYW5kbGVyXG4gICAtIFByaW1hcnkgdXNhZ2UgZm9yIHRvZ2dsaW5nIHRoZSBjb29raWUgbWVzc2FnZSBhbmQvb3Igc3dpdGNoXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuY29uc3QgQ29va2llSGFuZGxlciA9IHtcblxuICAgIGNvb2tpZUJhciA6IG51bGwsXG4gICAgY29va2llT3ZlcmxheSA6IG51bGwsXG4gICAgY29va2llTWVzc2FnZSA6IG51bGwsXG5cbiAgICBjb29raWVTd2l0Y2ggOiBudWxsLFxuXG4gICAgY29va2llRmFkZU91dEFuaW1hdGlvbkR1cmF0aW9uIDogNDAwLFxuICAgIGFjY2VwdFRyYWNraW5nIDogZmFsc2UsXG5cbiAgICAvLyBJbml0aWFsaXplIGNvb2tpZSBoYW5kbGVyXG4gICAgaW5pdCA6IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIC8vIEJpbmQgY29va2llIGJhciBvciBvdmVybGF5IHRvIGNvb2tpZU1lc3NhZ2VcbiAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVNZXNzYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmpzLWNvb2tpZS1iYXIsIC5qcy1jb29raWUtb3ZlcmxheScpO1xuXG4gICAgICAgIC8vIEJpbmQgY29va2llIGJhciB0byBjb29raWVCYXJcbiAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVCYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtY29va2llLWJhcicpO1xuXG4gICAgICAgIC8vIElmIGlzc2V0IGluaXQgdGhlIGZ1bmN0aW9ucyBmb3IgY29va2llIGJhclxuICAgICAgICBpZihpc3NldChDb29raWVIYW5kbGVyLmNvb2tpZUJhcikpe1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5pbml0Q29va2llQmFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIC8vIEVsc2UgdHJ5IHRvIGNvbm5lY3QgY29va2llIG92ZXJsYXkgd2l0aCB0cmFja2luZyB0byBjb29raWVPdmVybGF5XG4gICAgICAgICAgICBDb29raWVIYW5kbGVyLmNvb2tpZU92ZXJsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtY29va2llLW92ZXJsYXknKTtcblxuICAgICAgICAgICAgLy8gSWYgaXNzZXQgaW5pdCB0aGUgZnVuY3Rpb25zIGZvciBjb29raWUgb3ZlcmxheVxuICAgICAgICAgICAgaWYoaXNzZXQoQ29va2llSGFuZGxlci5jb29raWVPdmVybGF5KSl7XG4gICAgICAgICAgICAgICAgQ29va2llSGFuZGxlci5pbml0Q29va2llT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgZWl0aGVyIHR5cGUgb2YgY29va2llIGhhcyBiZWVuIGZvdW5kIGNoZWNrIGlmIHNldHRpbmdzIGFyZSBkZWZpbmVkXG4gICAgICAgIGlmKGlzc2V0KENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZSkpe1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5jaGVja0ZvckNvb2tpZVNldHRpbmdzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCaW5kIGNvb2tpZSBzd2l0Y2ggdG8gSGFuZGxlclxuICAgICAgICBDb29raWVIYW5kbGVyLmNvb2tpZVN3aXRjaCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5qcy1jb29raWUtc3dpdGNoJyk7XG4gICAgICAgIC8vIElmIGlzc2V0IGluaXQgdGhlIGZ1bmN0aW9ucyBmb3IgY29va2llIHN3aXRjaFxuICAgICAgICBpZihpc3NldChDb29raWVIYW5kbGVyLmNvb2tpZVN3aXRjaCkpe1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5pbml0Q29va2llU3dpdGNoKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gSW5pdCB0aGUgY29va2llIGJhciBhY3Rpb25zXG4gICAgaW5pdENvb2tpZUJhcjogZnVuY3Rpb24oKXtcbiAgICAgICAgY29uc3QgY2xvc2VCdXR0b24gPSBDb29raWVIYW5kbGVyLmNvb2tpZUJhci5xdWVyeVNlbGVjdG9yKCcuanMtZGlzYWJsZS1jb29raWUtYmFyJyk7XG4gICAgICAgIGlmKGlzc2V0KGNsb3NlQnV0dG9uKSl7XG4gICAgICAgICAgICBjbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIENvb2tpZUhhbmRsZXIuY2xvc2VDb29raWVNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBJbml0IHRoZSBjb29raWUgb3ZlcmxheSBhY3Rpb25zXG4gICAgaW5pdENvb2tpZU92ZXJsYXk6IGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgLy8gT3BlbiB0aGUgY29va2llIHNldHRpbmdzIGV2ZW50XG4gICAgICAgIGNvbnN0IG9wZW5Db29raWVTZXR0aW5nc0J1dHRvbiA9IENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZS5xdWVyeVNlbGVjdG9yKCcuanMtY2hhbmdlLWNvb2tpZXMtc2V0dGluZ3MnKTtcbiAgICAgICAgaWYoaXNzZXQob3BlbkNvb2tpZVNldHRpbmdzQnV0dG9uKSl7XG4gICAgICAgICAgICBvcGVuQ29va2llU2V0dGluZ3NCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBDb29raWVIYW5kbGVyLm9wZW5Db29raWVTZXR0aW5ncyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUb2dnbGUgb2YgdGhlIHRyYWNraW5nIGlucHV0XG4gICAgICAgIGNvbnN0IHRvZ2dsZVRyYWNraW5nSW5wdXQgPSBDb29raWVIYW5kbGVyLmNvb2tpZU1lc3NhZ2UucXVlcnlTZWxlY3RvcignLmMtY29va2llLXR5cGVfX2lucHV0LS10cmFja2luZycpO1xuICAgICAgICBpZihpc3NldCh0b2dnbGVUcmFja2luZ0lucHV0KSl7XG5cbiAgICAgICAgICAgIGlmKHRvZ2dsZVRyYWNraW5nSW5wdXQuY2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuYWNjZXB0VHJhY2tpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b2dnbGVUcmFja2luZ0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIENvb2tpZUhhbmRsZXIudG9nZ2xlVHJhY2tpbmdTZXR0aW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFjY2VwdCAvIFNhdmUgY29va2llcyBidXR0b24gZXZlbnRcbiAgICAgICAgY29uc3QgYWNjZXB0QnV0dG9uID0gQ29va2llSGFuZGxlci5jb29raWVNZXNzYWdlLnF1ZXJ5U2VsZWN0b3IoJy5qcy1hY2NlcHQtY29va2llcycpO1xuICAgICAgICBpZihpc3NldChhY2NlcHRCdXR0b24pKXtcbiAgICAgICAgICAgIGFjY2VwdEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIENvb2tpZUhhbmRsZXIuc2V0Q29va2llU2V0dGluZ3MpO1xuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgLy8gSW5pdCB0aGUgY29va2llIHN3aXRjaCBhY3Rpb25zXG4gICAgaW5pdENvb2tpZVN3aXRjaDogZnVuY3Rpb24oKXtcblxuICAgICAgICAvLyBUb2dnbGUgb2YgdGhlIHRyYWNraW5nIGlucHV0XG4gICAgICAgIGNvbnN0IHRvZ2dsZVRyYWNraW5nSW5wdXQgPSBDb29raWVIYW5kbGVyLmNvb2tpZVN3aXRjaC5xdWVyeVNlbGVjdG9yKCcuYy1jb29raWUtdHlwZV9faW5wdXQtLXRyYWNraW5nJyk7XG4gICAgICAgIGlmKGlzc2V0KHRvZ2dsZVRyYWNraW5nSW5wdXQpKXtcblxuICAgICAgICAgICAgLy8gRm9yY2UgdGhlIHN0YXRlIG9mIHRoZSBjb29raWUgc3dpdGNoIGlucHV0IGJlY2F1c2UgdGhlIHBvcC11cCBpcyBmb3JjZWQgb24gY2hlY2tlZFxuICAgICAgICAgICAgLy8gd2hpbGUgdGhlIHN3aXRjaCBjaGVja3MgYnkgcGhwIGlmIHRoZSBjb29raWUgcmVhbGx5IGV4aXN0IG9yIG5vdFxuICAgICAgICAgICAgaWYodG9nZ2xlVHJhY2tpbmdJbnB1dC5jaGVja2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgQ29va2llSGFuZGxlci5hY2NlcHRUcmFja2luZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuYWNjZXB0VHJhY2tpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG9nZ2xlVHJhY2tpbmdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBDb29raWVIYW5kbGVyLnRvZ2dsZVRyYWNraW5nU2V0dGluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYXZlIGNvb2tpZXMgYnV0dG9uIGV2ZW50XG4gICAgICAgIGNvbnN0IHNhdmVCdXR0b24gPSBDb29raWVIYW5kbGVyLmNvb2tpZVN3aXRjaC5xdWVyeVNlbGVjdG9yKCcuanMtc2F2ZS1jb29raWUtc2V0dGluZ3MnKTtcbiAgICAgICAgaWYoaXNzZXQoc2F2ZUJ1dHRvbikpe1xuICAgICAgICAgICAgc2F2ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVGYWRlT3V0QW5pbWF0aW9uRHVyYXRpb24gPSAwOyAvLyBPbiB0aGUgc3dpdGNoIGNsaWNrIHdlIHdhbnQgbm8gZGVsYXkgOilcbiAgICAgICAgICAgICAgICBDb29raWVIYW5kbGVyLnNldENvb2tpZVNldHRpbmdzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgfSxcblxuICAgIGNoZWNrRm9yQ29va2llU2V0dGluZ3M6IGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmIChDb29raWUuZ2V0KCdjb29raWVNZXNzYWdlJykpIHtcbiAgICAgICAgICAgIENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZS5jbGFzc0xpc3QuYWRkKCdpcy1hY2NlcHRlZCcpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdpcy1jb29raWVzLWFjY2VwdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBDb29raWVIYW5kbGVyLmNvb2tpZU1lc3NhZ2UuY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWNjZXB0ZWQnKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnaXMtY29va2llcy1hY2NlcHRlZCcpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGNsb3NlQ29va2llTWVzc2FnZTogZnVuY3Rpb24gKCl7XG4gICAgICAgIENvb2tpZS5zZXQoJ2Nvb2tpZU1lc3NhZ2UnLCB0cnVlLCA5MCk7XG4gICAgICAgIENvb2tpZUhhbmRsZXIuY29va2llTWVzc2FnZS5jbGFzc0xpc3QuYWRkKCdpcy10cmFuc2l0aW9uaW5nLW91dCcpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2lzLWNvb2tpZXMtYWNjZXB0ZWQnKTtcbiAgICB9LFxuXG4gICAgb3BlbkNvb2tpZVNldHRpbmdzOiBmdW5jdGlvbiAoKXtcbiAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVPdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5qcy1jb29raWUtc2V0dGluZ3MnKS5jbGFzc0xpc3QucmVtb3ZlKCdpcy1oaWRkZW4nKTtcbiAgICAgICAgQ29va2llSGFuZGxlci5jb29raWVPdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5qcy1jb29raWUtaW5mbycpLmNsYXNzTGlzdC5hZGQoJ2lzLWhpZGRlbicpO1xuICAgIH0sXG5cbiAgICB0b2dnbGVUcmFja2luZ1NldHRpbmc6IGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKENvb2tpZUhhbmRsZXIuYWNjZXB0VHJhY2tpbmcpe1xuICAgICAgICAgICAgQ29va2llSGFuZGxlci5hY2NlcHRUcmFja2luZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgICBDb29raWVIYW5kbGVyLmFjY2VwdFRyYWNraW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRDb29raWVTZXR0aW5nczogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIC8vIFNldCB0cmFja2luZyBjb29raWUgb3IgZGVsZXRlIGl0IGlmIGlzc2V0IGFjY29yZGluZyB0byB0aGUgZGVzaXJlZCBzZXR0aW5nc1xuICAgICAgICBpZihDb29raWVIYW5kbGVyLmFjY2VwdFRyYWNraW5nKXtcbiAgICAgICAgICAgIENvb2tpZS5zZXQoJ3RyYWNraW5nQ29va2llQWNjZXB0ZWQnLCAndHJ1ZScsIDkwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgaWYoQ29va2llLmdldCgndHJhY2tpbmdDb29raWVBY2NlcHRlZCcpKXtcbiAgICAgICAgICAgICAgICBDb29raWUuZXJhc2UoJ3RyYWNraW5nQ29va2llQWNjZXB0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIENvb2tpZUhhbmRsZXIuY2xvc2VDb29raWVNZXNzYWdlKCk7XG5cbiAgICAgICAgLy8gUmVsb2FkIGFmdGVyIGFuaW1hdGlvbiB0byBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgdGhlIHRyYWNraW5nIGFmdGVyIGFjY2VwdGluZyBpdFxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgICB9LCBDb29raWVIYW5kbGVyLmNvb2tpZUZhZGVPdXRBbmltYXRpb25EdXJhdGlvbik7XG4gICAgfSxcblxufTtcblxuQ29va2llSGFuZGxlci5pbml0KCk7Il0sInNvdXJjZVJvb3QiOiIifQ==