!function(){"use strict";function e(e){var t=[],a=[];this.getId=function(){return e.sliderid},this.getCbHandle=function(){return e.cbhandle},this.getView=function(n){return n||(n=0),e.value[n]===t[n]?a[n]:(t[n]=e.value[n],e.formatter?a[n]=e.formatter(e.value[n],e.ctrlhandle):a[n]=e.value[n],a[n])},this.updateClass=function(t,a){e.updateClass(t,a)},this.forceRefresh=function(t){e.forceRefresh(t)},this.getValue=function(t){return t||(t=0),e.value[t]},this.getRelative=function(t){return t||(t=0),e.relative[t]},this.setValue=function(t,a){a||(a=0),e.setValue(t,a)},this.setDisable=function(t){e.setDisable(t)}}var t=angular.module("RangeSlider",[]);t.directive("rangeSlider",["$log","$document","$timeout",function(t,a,n){function i(t,i,s,l){t.initWidget=function(e){e.byStep&&(t.byStep=parseInt(e.byStep)),e.notMore&&(t.notMore=parseInt(e.notMore)),e.notLess&&(t.notLess=parseInt(e.notLess)),e.id&&(t.sliderid=e.id),void 0!==e.value&&(t.value=e.value,t.forceRefresh(50))},t.forceRefresh=function(e){var a=t.value;t.value=[void 0,void 0],n(function(){t.setValue(a[0],0),t.dual&&t.setValue(a[1],1)},e)},t.updateClass=function(e,t){t?i.addClass(e):i.removeClass(e)},t.setDisable=function(e){e?(i.addClass("disable"),t.handles[0].css("visibility","hidden"),t.dual&&t.handles[1].css("visibility","hidden")):(i.removeClass("disable"),t.handles[0].css("visibility","visible"),t.dual&&t.handles[1].css("visibility","visible"))},t.normalize=function(e){var a,n=t.notMore-t.notLess,i=e*n;if(t.byStep>0){var s=(i-i%t.byStep)/t.byStep,l=i%t.byStep,o=l>=.5*t.byStep?t.byStep:0;return a=s*t.byStep+o+t.notLess}if(t.byStep<0){var r=Math.pow(10,-1*t.byStep);return a=t.notLess+parseInt(i*r)/r}return i},t.getValue=function(e,a){t.vertical?t.relative[a]=(e-t.bounds.handles[a].getBoundingClientRect().height)/(t.bounds.bar.getBoundingClientRect().height-t.bounds.handles[a].getBoundingClientRect().height):t.relative[a]=e/(t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[a].getBoundingClientRect().width);var n=t.normalize(t.relative[a]);n!==t.value[a]&&(nt.stopValue&&(n=t.stopValue),t.formatter?t.viewValue=t.formatter(n,t.ctrlhandle):t.viewValue=n,t.displays[a]&&t.displays[a].html(t.viewValue),t.value[a]=n,l&&l.$setViewValue(t.viewValue),t.$apply(),n>t.startValue&&nt.value[0]&&(t.dual?t.setValue(e,1):t.setValue(e,0)),t.vertical?(a=t.bounds.bar.getBoundingClientRect().height*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("height",a+"px")):(a=t.bounds.bar.getBoundingClientRect().width*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("width",a+"px")),t.startValue=e},t.setStop=function(e){var a;et.notMore&&(e=t.notMore),e0&&t.$apply(t.setValue(t.value[t.actif]+t.byStep,t.actif)),t.byStep<0&&t.$apply(t.setValue(t.value[t.actif]+1/Math.pow(10,-1*t.byStep),t.actif)),t.callback&&t.callback(t.value[t.actif],t.ctrlhandle);break;case 37:case 40:t.byStep>0&&t.$apply(t.setValue(t.value[t.actif]-t.byStep,t.actif)),t.byStep<0&&t.$apply(t.setValue(t.value[t.actif]-1/Math.pow(10,-1*t.byStep),t.actif)),t.callback&&t.callback(t.value[t.actif],t.ctrlhandle);break;case 27:t.handles[t.actif][0].blur()}},t.moveHandle=function(e,a,n){var i;t.vertical?(i=t.bounds.bar.getBoundingClientRect().bottom-n,i>t.bounds.bar.getBoundingClientRect().height&&(i=t.bounds.bar.getBoundingClientRect().height),ii&&(i=0),a+t.bounds.handles[e].getBoundingClientRect().width>t.bounds.bar.getBoundingClientRect().right&&(i=t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[e].getBoundingClientRect().width)),t.getValue(i,e),t.dual&&t.value[0]>t.value[1]&&(0===e?t.setValue(t.value[0],1):t.setValue(t.value[1],0))},t.focusCB=function(e){e?a.on("keydown",t.keydown):a.unbind("keydown",t.keydown)},t.touchBarCB=function(e){var a,n=0,i=e.changedTouches,s=t.value[n];if(e.preventDefault(),t.dual){a=t.vertical?(i[0].pageY-t.bounds.bar.getBoundingClientRect().bottom)/t.bounds.bar.getBoundingClientRect().height:(i[0].pageX-t.bounds.bar.getBoundingClientRect().left)/t.bounds.bar.getBoundingClientRect().width;var l=Math.abs(a-t.relative[0]),o=Math.abs(a-t.relative[1]);l>o&&(n=1)}t.moveHandle(n,i[0].pageX,i[0].pageY),t.callback&&s!==t.value[n]&&t.callback(t.value[n],t.ctrlhandle)},t.touchHandleCB=function(e,n){function s(e){e.preventDefault();for(var a=e.changedTouches,i=0;it.stopAt,t.stopAt&&t.setStop(t.stopAt)}),t.initialSettings(t.initial)},t.init(),t.$watch("inithook",function(){t.inithook&&t.inithook(t.ctrlhandle)}),t.$watch("initvalues",function(){t.initvalues&&t.initWidget(t.initvalues)}),t.$watch("ngModel",function(e){t.setValue(e,0)})}var s='
';return{restrict:"E",scope:{startAt:"=",stopAt:"=",callback:"=",formatter:"=",inithook:"=",cbhandle:"=",initvalues:"=",ngModel:"="},require:"?ngModel",template:s,replace:!0,link:i}}])}(),function(){"use strict";var e='
afb://{{hostname}}:{{httpdport}}
';angular.module("TokenRefresh",["AppConfig","ModalNotification"]).directive("tokenRefresh",["$timeout","$http","$location","Notification","AppConfig",function(t,a,n,i,s){function l(e,l,o){e.status=void 0,e.online=function(){l.addClass("online"),l.removeClass("offline")},e.offline=function(){l.addClass("offline"),l.removeClass("online")},e.onerror=function(t,a,n){e.status!==!1&&(i.warning({message:"AppFramework Binder Lost",delay:5e3}),e.offline()),e.status=0},e.onsuccess=function(t,a,n,l){e.status!==!0&&(t.request.token&&(s.session.token=t.request.token),t.request.uuid&&(s.session.uuid=t.request.uuid),t.request.timeout&&(s.session.timeout=t.request.timeout),i.success({message:"AppFramework Binder Back to Live",delay:3e3}),e.online(),e.callback&&e.callback()),e.status=1},e.getping=function(){var n=a.get(s.session.ping+"?token="+s.session.token);n.success(e.onsuccess),n.error(e.onerror),t(e.getping,1e3*s.session.pingrate)},e.refresh=function(){var n=a.get(s.session.refresh+"?token="+s.session.token);n.success(e.onsuccess),n.error(e.onerror),t(e.refresh,250*s.session.timeout)},e.tkcreate=function(){var t=a.get(s.session.create+"?token="+s.session.initial);t.success(e.onsuccess),t.error(e.onerror)},e.icon=o.icon||"fi-lightbulb",e.hostname=n.host(),e.httpdport=n.port(),e.autolog=JSON.parse(o.autolog||!1),e.autolog&&e.tkcreate(),t(e.getping,1e3*s.session.pingrate),t(e.refresh,250*s.session.timeout)}return{template:e,scope:{callback:"="},restrict:"E",link:l}}])}(),function(){"use strict";var e='
{{tip}}
';angular.module("ModalNotification",[]).directive("tipModal",["$timeout",function(t){function a(e,a,n){function i(){function a(){e.show&&e.modal.css({opacity:1,visibility:"visible"})}e.show=!0,e.timeout=t(a,e.delay)}function s(){e.show=!1,e.modal.css({opacity:0,visibility:"hidden"})}e.parent=a.parent(),e.modal=a.find("div"),e.icon=n.icon||"fi-lightbulb",e.parent.addClass("as-modal-tip"),e.parent.bind("click",s),e.parent.bind("focus",i),e.parent.bind("mouseover",i),e.parent.bind("mouseleave",s),e.parent.bind("blur",s),e.delay=n.delay||1e3}return{restrict:"E",template:e,link:a,scope:{tip:"="}}}])}(),function(){"use strict";var e='{{label}}';angular.module("LinkButton",[]).directive("linkButton",["$location",function(t){function a(e,a,n){e.clicked=function(){n.query?t.path(n.href).search(n.query):t.path(n.href)},e.icon=n.icon||"fi-link",e.label=n.label||"Jump",e.href=n.href||"/home",a.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:a,scope:{}}}])}(),function(){"use strict";function e(e,t,a){var n=new XMLHttpRequest,i=new FormData;n.upload.onprogress=function(t){var a=Math.round(t.lengthComputable?100*t.loaded/t.total:0);e.slider&&e.slider.setValue(a)},n.onload=function(){e.divElem.addClass("success"),e.divElem.removeClass("error");var t={status:n.status,headers:n.getAllResponseHeaders()};e.callback(t)},n.onerror=function(){e.divElem.addClass("error"),e.divElem.removeClass("success")},n.onabort=function(){e.divElem.addClass("error"),e.divElem.removeClass("success");var t={status:n.status,headers:n.getAllResponseHeaders()};e.callback(t)},this.postfile=function(e){n.open("POST",e,!0),n.send(i)};for(var s=0;s1024*e.maxsize)setTimeout(a,100);else{var l=new FileReader;l.readAsArrayBuffer(this.file),l.onload=a,i.append(e.name,this.file,this.file.name)}}var t='
{{label}}
',a='Upload Application {{appname}} ?
',n='Invalid Application {{appname}} ?
';angular.module("UploadFiles",["AppConfig","ModalNotification","RangeSlider"]).directive("uploadAppli",["AppConfig","JQemu","Notification","ModalFactory","$timeout",function(i,s,l,o,r){function u(t,s,l){if(t.inputElem=s.find("input"),t.divElem=s.find("div"),t.imgClicked=function(){t.inputElem[0].click()},t.SliderInitCB=function(e){t.slider=e},t.UpLoadFile=function(s){var u,c,d,p=function(){u.postfile(l.posturl+"?token="+i.session.token),t.modal.deactivate(),r(function(){t.modal.destroy()},1e3)},f=function(){t.modal.deactivate(),r(function(){t.modal.destroy()},1e3)},g=function(e){if(e){var i=new JSZip(e.target.result),s=i.file("icon_128.png");s?(c=window.URL.createObjectURL(new Blob([s.asArrayBuffer()],{type:"image"})),d=a):(c=t.isnotvalid,d=n)}else u.file.size>1024*t.maxsize&&(c=t.istoobig,d=n),isNaN(u.file.size)&&(c=t.isnotvalid,d=n);var l={animationIn:"slideInFromTop",contentScope:{success:p,abandon:f,icon:c,appname:u.basename},template:d};t.modal=new o(l),t.modal.activate()};u=new e(t,s,g)},t.name=l.name||"appli",t.category=l.category||"appli",t.mimetype=l.accept||".wgt",t.maxsize=l.maxsize||1e5,t.regexp=new RegExp(l.accept+".*","i"),t.icon=l.icon||"fi-upload",t.label=l.label||"Upload",l.thumbnail?t.isnotvalid=i.paths[t.category]+l.isnotvalid:t.isnotvalid=i.paths[t.category]+"w3c-widget.png",l.istoobig?t.istoobig=i.paths[t.category]+l.istoobig:t.istoobig=i.paths[t.category]+"istoobig.png",t.noslider=l.noslider||!1,!l.posturl)throw new TypeError("file-upload %s posturl=/api/xxxx/xxxx required",t.attrs)}return{restrict:"E",template:t,link:u,scope:{callback:"="}}}])}(),function(){"use strict";var e='{{errmsg}}',t=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;angular.module("InputText",["JQueryEmu"]).directive("inputText",["JQemu",function(a){function n(e,n,i){e.error=!1,e.valid=!1,e.status="untouch",e.input=n.find("input"),e.required=0,"required"in i&&(e.required=1,n.addClass("required")),e.selected=function(){e.error=!1,e.errmsg=!1,e.status="touch"},e.validate=function(){e.parent.removeClass("ng-pristine"),e.value?(e.error=!1,e.value=e.value.trim(),"nospace"in i&&(e.value=e.value.replace(/\s/g,"")),"lowercase"in i&&(e.value=e.value.toLowerCase()),"minlen"in i&&e.value.length0&&e.l4acounter.validated--),e.callback(i.name,null,e.done)):(e.required&&!e.valid&&e.l4acounter.validated++,e.status="valid",e.valid=!0,e.callback(i.name,e.value,e.done))},e.done=function(t){for(var a in t)e[a]=t[a]},e.label=i.label,e.name=i.name,e.placeholder=i.placeholder,e.type=i.type||"text",e.tip=i.tip,e.parent=a.parent(n,"FORM"),"email"in i&&(i.lowercase=!0,i.nospace=!0,i.minlen=6),e.required&&(e.l4acounter=e.parent.data("l4acounter"),e.l4acounter?e.l4acounter.required++:(e.l4acounter={required:1,validated:0},e.parent.data("l4acounter",e.l4acounter))),e.$watch("value",function(){e.value&&e.validate()})}return{restrict:"E",template:e,link:n,scope:{callback:"=",value:"="}}}])}(),function(){"use strict";var e=' ';angular.module("InputPassword",[]).directive("inputPassword",function(){function t(e,t,a){e.valid1=function(t,a){e.firstpwd=a},e.valid2=function(t,n,i){e.firstpwd!==n?i({valid:!1,status:"invalid",errmsg:"both password should match"}):e.callback(a.name,n)},e.done=function(t){for(var a in t)e[a]=t[a]},e.name=a.name,e.label1=a.label||"Password",e.label2=a.label||"Password Verification",e.place1=a.placeholder1||"User Password",e.tip1=a.tip||"Choose a Password",e.place2=a.placeholder1||"Password Verification",e.tip2=a.tip||"Confirme your Password",e.minlen=a.minlen||10,"required"in a&&(e.required="required")}return{restrict:"E",template:e,link:t,scope:{callback:"="}}})}(),function(){"use strict";var e='
{{label}}
';angular.module("SubmitButton",[]).directive("submitButton",function(){function t(e,t,a){e.icon=a.icon||"fi-foot",e.label=a.label||"Next",t.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:t,scope:{clicked:"="}}})}(),function(){"use strict";var e='
{{label}}
',t='×Application {{label}}',a='×Application {{label}}
  • Name : {{detail.name}}
  • Description {{detail.description}}
  • Author : {{detail.author}}
';angular.module("AppliButton",[]).directive("appliButton",["AppConfig","AppCall","ModalFactory","Notification","$timeout",function(n,i,s,l,o){function r(e,r,u){e.clicked=function(){var n=function(t,a){l.error({message:"Fail /api/afm-main"+t+"="+e.label+" RunID="+e.appID,delay:5e3}),r.addClass("fail"),r.removeClass("success"),e.callback(e.appID,t,a)},u=function(t,a){r.removeClass("fail"),e.runID=a.data.response.runid,e.callback(e.appID,"/api/afm-main/start",a)},c=function(){e.modal.deactivate(),o(function(){e.modal.destroy()},1e3)},d=function(t){switch(t){case"start":i.get("afm-main","start",{id:e.appID},function(e){return 200!==e.status||"AJB_reply"!==e.data.jtype?void n("start",e):void u("start",e)});break;case"stop":i.get("afm-main","terminate",{runid:e.runID},function(e){return 200!==e.status||"AJB_reply"!==e.data.jtype?void n("stop",e):void u("stop",e)});break;case"info":i.get("afm-main","detail",{id:e.appID},function(t){if(200!==t.status||"AJB_reply"!==t.data.jtype)return void n("detail",t);var i={animationIn:"slideInFromTop",contentScope:{close:c,icon:e.icon,label:e.appID,detail:t.data.response},template:a};e.modal=new s(i),e.modal.activate()});break;case"uninstall":i.get("afm-main","uninstall",{id:e.appID},function(e){return 200!==e.status||"AJB_reply"!==e.data.jtype?void n("uninstall",e):void u("uninstall",e)})}c()},p={animationIn:"slideInFromTop",contentScope:{action:d,close:c,icon:e.icon,label:e.label},template:t};e.modal=new s(p),e.modal.activate()},u.handle&&e.store[u.handle].name?(e.icon=n.paths.icons+e.store[u.handle].name.toLowerCase()+"-ico.png",e.label=e.store[u.handle].name,e.appID=u.handle):(e.icon=n.paths.icons+"w3c-ico.png",e.label=u.handle),r.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:r,scope:{callback:"=",store:"="}}}])}(),function(){"use strict";angular.module("DashboardModule",["SubmitButton","TokenRefresh","AppliButton"]).controller("DashboardController",["AppCall","Notification",function(e,t){var a=this;a.uuid="none",a.token="none",a.session="none",a.status="err-no",a.appliIDs=[],a.appliStore={},a.AppliCB=function(e,t,n){a.request=t,a.errcode=n.status,n.data&&(a.response=n.data)},a.GetRunnables=function(){e.get("afm-main","runnables",{},function(e){if(a.request="/api/afm-main/runnable",a.response=e.data,a.errcode=e.status,200===e.status){if("AJB_reply"!==e.data.request.jtype&&"runnables"!==e.data.request.api)return void t.error({message:"Invalid Respond to /opa/afm-main/runnable response.data="+e.data,delay:5e3});for(var n=[],i=e.data.response.runnables,s=0;s\n \n \n\n')}])}(),function(){angular.module("AFBclient").run(["$templateCache",function(e){e.put("pages/Dashboard/Dashboard.html",'

Application Framework Manager Simple Client

req= {{ctrl.request}} res= {{ctrl.response}} status= {{ctrl.errcode}}
')}])}(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndpZGdldHMvUmFuZ2VTbGlkZXJzL1JhbmdlU2xpZGVyTW9kLmpzIiwid2lkZ2V0cy9Ob3RpZmljYXRpb25zL1Rva2VuUmVmcmVzaFN2Yy5qcyIsIndpZGdldHMvTm90aWZpY2F0aW9ucy9Nb2RhbE5vdGlmaWNhdGlvbi5qcyIsIndpZGdldHMvTmF2aWdhdGlvbi9MaW5rQnV0dG9uLmpzIiwid2lkZ2V0cy9Gb3JtSW5wdXQvVXBsb2FkQXBwbGkuanMiLCJ3aWRnZXRzL0Zvcm1JbnB1dC9JbnB1dFRleHQuanMiLCJ3aWRnZXRzL0Zvcm1JbnB1dC9JbnB1dFBhc3N3b3JkLmpzIiwid2lkZ2V0cy9BY3Rpb25CdXR0b25zL1N1Ym1pdEJ1dHRvbi5qcyIsIndpZGdldHMvQWN0aW9uQnV0dG9ucy9BcHBsaUJ1dHRvbi5qcyIsInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmRNb2R1bGUuanMiLCJzZXJ2aWNlcy9KUXVlcnlFbXUuanMiLCJldGMvcm91dGVzLmpzIiwiZXRjL0FwcENvbmZpZy5qcyIsImFwcC5qcyIsInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmQuanMiXSwibmFtZXMiOlsiUmFuZ2VTbGlkZXJIYW5kbGUiLCJzY29wZSIsImludGVybmFscyIsImV4dGVybmFscyIsInRoaXMiLCJnZXRJZCIsInNsaWRlcmlkIiwiZ2V0Q2JIYW5kbGUiLCJjYmhhbmRsZSIsImdldFZpZXciLCJoYW5kbGUiLCJ2YWx1ZSIsImZvcm1hdHRlciIsImN0cmxoYW5kbGUiLCJ1cGRhdGVDbGFzcyIsImNsYXNzZSIsInN0YXR1cyIsImZvcmNlUmVmcmVzaCIsInRpbWVyIiwiZ2V0VmFsdWUiLCJnZXRSZWxhdGl2ZSIsInJlbGF0aXZlIiwic2V0VmFsdWUiLCJzZXREaXNhYmxlIiwiZmxhZyIsIlJhbmdlU2xpZGVyIiwiYW5ndWxhciIsIm1vZHVsZSIsImRpcmVjdGl2ZSIsIiRsb2ciLCIkZG9jdW1lbnQiLCIkdGltZW91dCIsImxpbmsiLCJlbGVtZW50IiwiYXR0cnMiLCJtb2RlbCIsImluaXRXaWRnZXQiLCJpbml0dmFsdWVzIiwiYnlTdGVwIiwicGFyc2VJbnQiLCJub3RNb3JlIiwibm90TGVzcyIsImlkIiwidW5kZWZpbmVkIiwiZHVhbCIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJkaXNhYmxlZCIsImhhbmRsZXMiLCJjc3MiLCJub3JtYWxpemUiLCJyZXN1bHQiLCJyYW5nZSIsInBvaW50IiwibW9kIiwicmVtIiwicm91bmQiLCJwb3dlciIsIk1hdGgiLCJwb3ciLCJvZmZzZXQiLCJ2ZXJ0aWNhbCIsImJvdW5kcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsImJhciIsIndpZHRoIiwibmV3dmFsdWUiLCJzdGFydFZhbHVlIiwic3RvcFZhbHVlIiwidmlld1ZhbHVlIiwiZGlzcGxheXMiLCJodG1sIiwiJHNldFZpZXdWYWx1ZSIsIiRhcHBseSIsInRyYW5zbGF0ZSIsInNldFN0YXJ0Iiwic3RhcnQiLCJzZXRTdG9wIiwic3RvcCIsInJpZ2h0Iiwidm9mZnNldCIsIi13ZWJraXQtdHJhbnNmb3JtIiwiLW1vei10cmFuc2Zvcm0iLCItbXMtdHJhbnNmb3JtIiwiLW8tdHJhbnNmb3JtIiwidHJhbnNmb3JtIiwic2xpZGVyIiwiYm90dG9tIiwibGVmdCIsImtleWRvd24iLCJlIiwia2V5Q29kZSIsImFjdGlmIiwiY2FsbGJhY2siLCJibHVyIiwibW92ZUhhbmRsZSIsImNsaWVudFgiLCJjbGllbnRZIiwiZm9jdXNDQiIsImluc2lkZSIsIm9uIiwidW5iaW5kIiwidG91Y2hCYXJDQiIsImV2ZW50IiwidG91Y2hlcyIsImNoYW5nZWRUb3VjaGVzIiwib2xkdmFsdWUiLCJwcmV2ZW50RGVmYXVsdCIsInBhZ2VZIiwicGFnZVgiLCJkaXN0YW5jZTAiLCJhYnMiLCJkaXN0YW5jZTEiLCJ0b3VjaEhhbmRsZUNCIiwidG91Y2hldnQiLCJ0b3VjaG1vdmUiLCJpZHgiLCJsZW5ndGgiLCJ0b3VjaGVuZCIsImhhbmRsZUNCIiwiY2xpY2tldmVudCIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJhdXRvbWF0aWMiLCJmb2N1cyIsImZpbmQiLCJzZWxlY3QiLCJlbGVtIiwiZG9tZWxlbSIsInF1ZXJ5U2VsZWN0b3IiLCJhbmdlbGVtIiwiaW5pdGlhbFNldHRpbmdzIiwiaW5pdGlhbCIsImRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdCIsInByZWNpc2lvbiIsIm1hdGNoIiwiZXZ0IiwiaW5pdCIsInJhbmRvbSIsIkluZmluaXR5IiwiZHVhbEhhbmRsZXMiLCJ0cmlnZ2VyX2lucHV0X2NoYW5nZSIsImRpc2FibGUiLCJkaXNwbGF5VGFyZ2V0IiwiZ2V0RWxlbWVudEJ5SWQiLCJzcGxpdCIsIm5nTW9kZWwiLCIkd2F0Y2giLCJzdGFydEF0Iiwic3RvcEF0IiwiaW5pdGhvb2siLCJuZXdWYWx1ZSIsInRlbXBsYXRlIiwicmVzdHJpY3QiLCJyZXF1aXJlIiwicmVwbGFjZSIsIiRodHRwIiwiJGxvY2F0aW9uIiwiTm90aWZpY2F0aW9uIiwiQXBwQ29uZmlnIiwibXltZXRob2RzIiwib25saW5lIiwib2ZmbGluZSIsIm9uZXJyb3IiLCJkYXRhIiwiZXJyY29kZSIsImhlYWRlcnMiLCJ3YXJuaW5nIiwibWVzc2FnZSIsImRlbGF5Iiwib25zdWNjZXNzIiwiY29uZmlnIiwicmVxdWVzdCIsInRva2VuIiwic2Vzc2lvbiIsInV1aWQiLCJ0aW1lb3V0Iiwic3VjY2VzcyIsImdldHBpbmciLCJoYW5kbGVyIiwiZ2V0IiwicGluZyIsImVycm9yIiwicGluZ3JhdGUiLCJyZWZyZXNoIiwidGtjcmVhdGUiLCJjcmVhdGUiLCJpY29uIiwiaG9zdG5hbWUiLCJob3N0IiwiaHR0cGRwb3J0IiwicG9ydCIsImF1dG9sb2ciLCJKU09OIiwicGFyc2UiLCJ0bXBsIiwiZGlzcGxheSIsImFjdGlvbiIsInNob3ciLCJtb2RhbCIsIm9wYWNpdHkiLCJ2aXNpYmlsaXR5IiwiY2xvc2UiLCJwYXJlbnQiLCJiaW5kIiwidGlwIiwiY2xpY2tlZCIsInF1ZXJ5IiwicGF0aCIsImhyZWYiLCJzZWFyY2giLCJsYWJlbCIsInRvTG93ZXJDYXNlIiwiTG9hZEZpbGVTdmMiLCJmaWxlcyIsImZpbGVDQiIsInhtbFJlcSIsIlhNTEh0dHBSZXF1ZXN0IiwieGZvcm0iLCJGb3JtRGF0YSIsInVwbG9hZCIsIm9ucHJvZ3Jlc3MiLCJwcm9ncmVzcyIsImxlbmd0aENvbXB1dGFibGUiLCJsb2FkZWQiLCJ0b3RhbCIsIm9ubG9hZCIsImRpdkVsZW0iLCJyZXNwb25zZSIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsIm9uYWJvcnQiLCJwb3N0ZmlsZSIsInBvc3R1cmwiLCJvcGVuIiwic2VuZCIsImkiLCJmaWxlIiwiYmFzZW5hbWUiLCJuYW1lIiwicmV2ZXJzZSIsImlzTmFOIiwic2l6ZSIsIm1heHNpemUiLCJzZXRUaW1lb3V0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsInJlYWRBc0FycmF5QnVmZmVyIiwiYXBwZW5kIiwidG1wbEFwcGxpIiwidG1wbE1vZGFsIiwidG1wbEVycm9yIiwiSlFlbXUiLCJNb2RhbEZhY3RvcnkiLCJpbnB1dEVsZW0iLCJpbWdDbGlja2VkIiwiY2xpY2siLCJTbGlkZXJJbml0Q0IiLCJVcExvYWRGaWxlIiwiYXBwaWNvbiIsImRlYWN0aXZhdGUiLCJkZXN0cm95IiwiYWJhbmRvbiIsInJlYWRlckNCIiwiemlwYXBwIiwiSlNaaXAiLCJ0YXJnZXQiLCJ0aHVtYm5haWwiLCJ3aW5kb3ciLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJCbG9iIiwiYXNBcnJheUJ1ZmZlciIsInR5cGUiLCJpc25vdHZhbGlkIiwiaXN0b29iaWciLCJhbmltYXRpb25JbiIsImNvbnRlbnRTY29wZSIsImFwcG5hbWUiLCJhY3RpdmF0ZSIsImNhdGVnb3J5IiwibWltZXR5cGUiLCJhY2NlcHQiLCJyZWdleHAiLCJSZWdFeHAiLCJwYXRocyIsIm5vc2xpZGVyIiwiVHlwZUVycm9yIiwiZW1haWxwYXRlcm4iLCJ2YWxpZCIsImlucHV0IiwicmVxdWlyZWQiLCJzZWxlY3RlZCIsImVycm1zZyIsInZhbGlkYXRlIiwidHJpbSIsIm1pbmxlbiIsInRlc3QiLCJsNGFjb3VudGVyIiwidmFsaWRhdGVkIiwiZG9uZSIsInBsYWNlaG9sZGVyIiwibG93ZXJjYXNlIiwibm9zcGFjZSIsInZhbGlkMSIsImZpcnN0cHdkIiwidmFsaWQyIiwibGFiZWwxIiwibGFiZWwyIiwicGxhY2UxIiwicGxhY2Vob2xkZXIxIiwidGlwMSIsInBsYWNlMiIsInRpcDIiLCJ0bXBsRGV0YWlsIiwiQXBwQ2FsbCIsIm5vdGlmeUVycm9yIiwiYXBpIiwiYXBwSUQiLCJub3RpZnlTdWNjZXNzIiwicnVuSUQiLCJydW5pZCIsImNsb3NlTW9kYWwiLCJhY3Rpb25Nb2RhbCIsImp0eXBlIiwiZGV0YWlsIiwic3RvcmUiLCJpY29ucyIsImNvbnRyb2xsZXIiLCJhcHBsaUlEcyIsImFwcGxpU3RvcmUiLCJBcHBsaUNCIiwiYXBwbGlJRCIsIkdldFJ1bm5hYmxlcyIsInJ1bm5hYmxlcyIsIkZpbGVVcGxvYWRlZCIsIkF1dG9TdGFydCIsImZhY3RvcnkiLCJGaW5kSW5QYXJlbnQiLCJzZWxlY3RvciIsInRvVXBwZXJDYXNlIiwidGFnTmFtZSIsIkZpbmRCeVRhZyIsInRhZyIsImNoaWxkcmVuIiwibmV4dCIsIkZpbmRCeUNsYXNzIiwiaGFzQ2xhc3MiLCJteU1ldGhvZHMiLCJmb3VuZGF0aW9uUm91dGVzIiwidXJsIiwidXJscXVlcnkiLCJteUNvbmZpZyIsImltYWdlIiwiYXZhdGFyIiwiYXVkaW8iLCJhcHBsaSIsIm15YXBpIiwiY2hlY2siLCJyZXNldCIsIm15Q2FsbHMiLCJwbHVnaW4iLCJwYXJhbXMiLCJ0aGVuIiwiUGFyc2VRdWVyeVN0cmluZyIsInFkIiwibG9jYXRpb24iLCJzdWJzdHIiLCJmb3JFYWNoIiwiaXRlbSIsImsiLCJ2IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicHVzaCIsIiR1cmxQcm92aWRlciIsIiRsb2NhdGlvblByb3ZpZGVyIiwib3RoZXJ3aXNlIiwiaHRtbDVNb2RlIiwiaGFzaFByZWZpeCIsInJ1biIsIkZhc3RDbGljayIsImF0dGFjaCIsImRv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R0FBQUcsS0FBQUYsR0FBQU4sRUFBQUssSUFBQUMsS0FFQU4sRUFnQ0EsUUFBQWpNLEdBQUEwTSxFQUFBQyxFQUFBdk4sR0FDQXNOLEVBQUFFLFVBQUEsY0FHQUQsRUFBQUUsV0FBQSxHQUFBQyxXQUFBLEtBSUEsUUFBQUMsS0FDQUMsVUFBQUMsT0FBQUMsU0FBQUMsTUF0Q0FyVyxRQUFBQyxPQUFBLGFBQ0EsWUFDQSxZQUdBLGFBQ0EsNEJBQ0EsdUNBR0Esa0JBR0EsWUFDQSxZQUNBLGtCQUNBLGNBQ0EsYUFDQSxlQUNBLGNBQ0Esc0JBRUFoQixNQUFBLFdBQUFpVyxLQUNBaE0sT0FBQUEsR0FDQStNLElBQUFBLEdBR0EvTSxFQUFBb04sU0FBQSxxQkFBQSxxQkFnQkF0VyxRQUFBQyxPQUFBLGNBQUFnVyxLQUFBLGlCQUFBLFNBQUFNLEdBQ0FBLEVBQUFDLElBQUEsOEJBQ0EscUxDMURBLFdBQUF4VyxRQUFBQyxPQUFBLGFBQUFnVyxLQUFBLGlCQUFBLFNBQUFNLEdBQUFBLEVBQUFDLElBQUEsaUNBQ0EiLCJmaWxlIjoiQUZCY2xpZW50Lm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICogXG4gKiBCdWdzOiBJbnB1dCB3aXRoIENhbGxiYWNrIFNIT1VMRCBCRSBnZXQgJ3JlcXVpcmVkJyBjbGFzc1xuICogXG4gKiByZWY6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9tb3VzZW92ZXJcbiAqIFxuICogdXNhZ2U6IFxuVXNhZ2UgIDxyYW5nZS1zbGlkZXI+XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgIDxyYW5nZS1zbGlkZXJcbiAgICAgIGlkPVwibXktc2xpZGVyLW5hbWVcIiAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgdXNlIGFzIGFuIGFyZ3VtZW50IHRvIGNhbGxiYWNrXG4gICAgICBjbGFzcz1cIm15LWN1c3RvbS1jbGFzc1wiICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IGNsYXNzIGlzIGliei1yYW5nZS1zbGlkZXJcbiAgICAgIHBsYWNlaG9sZGVyPVwiVHJhY2sgRGF0ZSBTZWxlY3Rpb25cIiAgICAgIC8vIHBsYWNlIGhvbGRlciBmb3IgZGF0ZSByZWFkb25seSBpbnB1dCB6b25lXG5cbiAgICAgIDwhLS0gRm91bmRhdGlvbiBjbGFzc2VzIC0tPlxuICAgICAgY2xhc3M9XCJyYWRpdXNcIiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgWnVyYiBmb3VuZGF0aW9uIGRvYyBmb3IgZnVydGhlciBpbmZvLlxuICAgICAgY2xhc3M9XCJpYnotaGFuZGxlLWRpc3BsYXlcIiAgICAgICAgICAgICAgLy8gaW5jcmVhc2UgaGFuZGxlIHdpZHRoIHRvIGhvbGQgc2xpZGVyIGN1cnJlbnQgdmFsdWVcblxuICAgICAgPCEtLSBBbmd1bGFyIFNjb3BlIFZhcmlhYmxlcyAtLT5cbiAgICAgIGNhbGxiYWNrPVwibXlDYWxsQmFja1wiICAgICAgICAgICAgICAgICAgICAvLyAkc2NvcGUubXlDYWxsQmFjayhzbGlkZXJoYW5kbGUpIGlzIGNhbGxlZCB3aGVuIGV2ZXIgc2xpZGVyIGhhbmRsZSBibHVyXG4gICAgICBmb3JtYXR0ZXI9XCJTbGlkZXJGb3JtYXRDQlwiICAgICAgICAgICAgICAgLy8gJHNjb3BlLm15Rm9ybWF0dGVyKHZhbHVlLCBzbGlkZXJpZCkgd2hlbiBleGlzdCBpcyBjYWxsIHdoZW4gZXZlciBzbGlkZXIgaGFuZGxlIG1vdmVzLiBTaG91bGQgcmV0dXJuIGV4dGVybmFsIGZvcm0gb2Ygc2xpZGVyIHZhbHVlLlxuICAgICAgbmctbW9kZWw9XCJ4eHh4eHhcIiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHh4eCBNdXN0IGJlIGRlZmluZWQsIHNjcmlwdCB3aWxsIHN0b3JlIGEgbmV3IFJhbmdlck9iamVjdCB3aXRoaW4gcHJvdmlkZWQgbmctbW9kZWwgdmFyaWFibGUuXG4gICAgICBzdGFydC1hdD1cIlNjb3BlVmFyXCIgICAgICAgICAgICAgICAgICAgICAgLy8gRHluYW1pYyBsaW1pdGF0aW9uIHdoZW4gc2xpZGVyIGlzIGNvbnN0cmFpbnMgYnkgYW4gZXh0ZXJuYWwgY29tcG9uYW50IFtleDogY2hlY2sgaW4vb3V0XVxuICAgICAgc3RvcC1hdD1cIlNjb3BlVmFyXCIgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW0gYnV0IGZvciBlbmQuXG5cbiAgICAgIDwhLS0gQW5ndWxhciBEaXJlY3RpdmUgQXR0cmlidXRlcyAtLT5cbiAgICAgIG5vdC1sZXNzPVwiaW50ZWdlclwiICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlZCBzdGFydGluZyB2YWx1ZSBmb3Igc2xpZGVyIFtkZWZhdWx0IDBdXG4gICAgICBub3QtbW9yZT1cImludGVnZXJcIiAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWQgZW5kIHZhbHVlIGZvciBzbGlkZXJzIFtkZWZhdWx0IDEwMF1cbiAgICAgIGJ5LXN0ZXA9XCIrLWludGVnZXJcIiAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBieS1zdGVwIGlzID4wIHRoZW4gc2xpZGVyIHVzZSBpdCBhcyBzdGVwLXZhbHVlLCB3aGVuIG5lZ2F0aXZlIHVzZSBpdCBmb3IgZGVjaW1hbCBwcmVjaXNpb25cbiAgICAgIGRpc3BsYXktdGFyZ2V0PVwiaGFuZGxlXCIgICAgICAgICAgICAgICAgICAvLyBkaXNwbGF5IHNsaWRlciBleHRlcm5hbCBmb3JtYXRlZCB2YWx1ZSBpbiB0aGUgaGFuZGxlIFtyZXF1aXJlciBjYWxzcz1cImliei1oYW5kbGUtZGlzcGxheVwiXVxuICAgICAgZHVhbC1oYW5kbGVzPSd0cnVlJyAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgYSBzZWNvbmQgaGFuZGxlIHRvIHNsaWRlciBmb3IgbWluL21heCByYW5nZVxuICAgICAgaW5pdGlhbD0ndmFsdWV8W3N0YXJ0L3N0b3BdJyAgICAgICAgICAgICAvLyBzbGlkZXIgaW5pdGlhbCB2YWx1ZSBbZHVhbC1oYW5kbGVzXSBtYXkgaGF2ZSBpbml0aWFsIHZhbHVlc1xuICAgLz48L3JhbmdlLXNsaWRlcj5cbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxudmFyIFJhbmdlU2xpZGVyID0gYW5ndWxhci5tb2R1bGUoJ1JhbmdlU2xpZGVyJyxbXSk7XG5cbmZ1bmN0aW9uIFJhbmdlU2xpZGVySGFuZGxlIChzY29wZSkge1xuICAgIHZhciBpbnRlcm5hbHMgPSBbXTtcbiAgICB2YXIgZXh0ZXJuYWxzID0gW107XG5cbiAgICB0aGlzLmdldElkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzY29wZS5zbGlkZXJpZDtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRDYkhhbmRsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2NvcGUuY2JoYW5kbGU7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0Vmlldz0gZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICBpZiAoIWhhbmRsZSkgaGFuZGxlID0gMDtcblxuICAgICAgICAvLyBpZiB2YWx1ZSBkaWQgbm90IGNoYW5nZSByZXR1cm4gY3VycmVudCBleHRlcm5hbCByZXByZXNlbnRhdGlvblxuICAgICAgICBpZiAoc2NvcGUudmFsdWVbaGFuZGxlXSA9PT0gaW50ZXJuYWxzW2hhbmRsZV0pIHJldHVybiBleHRlcm5hbHNbaGFuZGxlXTtcblxuICAgICAgICAvLyBidWlsZCBleHRlcm5hbCByZXByZXNlbnRhdGlvbiBhbmQgc2F2ZSBpdCBmb3IgZnVydGhlciByZXF1ZXN0c1xuICAgICAgICBpbnRlcm5hbHNbaGFuZGxlXSA9IHNjb3BlLnZhbHVlW2hhbmRsZV07XG4gICAgICAgIGlmIChzY29wZS5mb3JtYXR0ZXIpIGV4dGVybmFsc1toYW5kbGVdID0gc2NvcGUuZm9ybWF0dGVyKHNjb3BlLnZhbHVlW2hhbmRsZV0sIHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICBlbHNlICBleHRlcm5hbHNbaGFuZGxlXSA9IHNjb3BlLnZhbHVlW2hhbmRsZV07XG5cbiAgICAgICAgcmV0dXJuIGV4dGVybmFsc1toYW5kbGVdO1xuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZUNsYXNzID0gZnVuY3Rpb24gKGNsYXNzZSwgc3RhdHVzKSB7XG4gICAgICAgc2NvcGUudXBkYXRlQ2xhc3MgKGNsYXNzZSwgc3RhdHVzKTtcbiAgICB9O1xuXG4gICAgdGhpcy5mb3JjZVJlZnJlc2ggPSBmdW5jdGlvbiAodGltZXIpIHtcbiAgICAgICBzY29wZS5mb3JjZVJlZnJlc2godGltZXIpO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFZhbHVlPSBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIGlmICghaGFuZGxlKSBoYW5kbGUgPSAwO1xuICAgICAgICByZXR1cm4gc2NvcGUudmFsdWVbaGFuZGxlXTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRSZWxhdGl2ZT0gZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICBpZiAoIWhhbmRsZSkgaGFuZGxlID0gMDtcbiAgICAgICAgcmV0dXJuIHNjb3BlLnJlbGF0aXZlW2hhbmRsZV07XG4gICAgfTtcblxuICAgIHRoaXMuc2V0VmFsdWU9IGZ1bmN0aW9uICh2YWx1ZSwgaGFuZGxlKSB7XG4gICAgICAgIGlmICghaGFuZGxlKSBoYW5kbGUgPSAwO1xuICAgICAgICBzY29wZS5zZXRWYWx1ZSAodmFsdWUsIGhhbmRsZSk7XG4gICAgfTtcblxuICAgIHRoaXMuc2V0RGlzYWJsZT0gZnVuY3Rpb24gKGZsYWcpIHtcbiAgICAgICAgc2NvcGUuc2V0RGlzYWJsZShmbGFnKTtcbiAgICB9O1xufVxuXG5SYW5nZVNsaWRlci5kaXJlY3RpdmUoJ3JhbmdlU2xpZGVyJywgW1wiJGxvZ1wiLCBcIiRkb2N1bWVudFwiLCBcIiR0aW1lb3V0XCIsIGZ1bmN0aW9uICgkbG9nLCAkZG9jdW1lbnQsICR0aW1lb3V0KSB7XG5cbiAgICB2YXIgdGVtcGxhdGU9ICc8ZGl2IGNsYXNzPVwiaWJ6LXJhbmdlLXNsaWRlciByYW5nZS1zbGlkZXJcIiB0aXRsZT1cInt7dGl0bGV9fVwiZGF0YS1zbGlkZXI+JytcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInJhbmdlLXNsaWRlci1oYW5kbGUgaGFuZGxlLW1pblwiIG5nLW1vdXNlZG93bj1cImhhbmRsZUNCKCRldmVudCwwKVwiIG5nLWZvY3VzPVwiZm9jdXNDQih0cnVlKVwiIG5nLWJsdXI9XCJmb2N1c0NCKGZhbHNlKVwiIHJvbGU9XCJzbGlkZXJcIiB0YWJpbmRleD1cIjBcIj48L3NwYW4+JytcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImhhbmRsZS1tYXhcIiBuZy1tb3VzZWRvd249XCJoYW5kbGVDQigkZXZlbnQsMSlcIiBuZy1mb2N1cz1cImZvY3VzQ0IodHJ1ZSlcIiBuZy1ibHVyPVwiZm9jdXNDQihmYWxzZSlcIiByb2xlPVwic2xpZGVyXCIgdGFiaW5kZXg9XCIwXCI+PC9zcGFuPicrXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJyYW5nZS1zbGlkZXItYWN0aXZlLXNlZ21lbnRcIj48L3NwYW4+JytcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImliei1yYW5nZS1zbGlkZXItc3RhcnRcIiA+PC9zcGFuPiAnK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiaWJ6LXJhbmdlLXNsaWRlci1zdG9wXCI+PC9zcGFuPiAnK1xuICAgICAgICAgICAgICAgICAgJzxpbnB1dCBpZD17e3NsaWRlcmlkfX0gdHlwZT1cImhpZGRlblwiPicrXG4gICAgICAgICAgICAgICAgICAnPC9kaXY+JztcblxuXG4gICAgZnVuY3Rpb24gbGluayAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzLCBtb2RlbCkge1xuICAgICAgICAvLyBmdWxsIGluaXRpYWxpc2F0aW9uIG9mIHNsaWRlciBmcm9tIGEgc2luZ2xlIG9iamVjdFxuICAgICAgICBzY29wZS5pbml0V2lkZ2V0ID0gZnVuY3Rpb24gKGluaXR2YWx1ZXMpIHtcblxuICAgICAgICAgICAgaWYgKGluaXR2YWx1ZXMuYnlTdGVwKSAgc2NvcGUuYnlTdGVwICA9IHBhcnNlSW50KGluaXR2YWx1ZXMuYnlTdGVwKTtcbiAgICAgICAgICAgIGlmIChpbml0dmFsdWVzLm5vdE1vcmUpIHNjb3BlLm5vdE1vcmUgPSBwYXJzZUludChpbml0dmFsdWVzLm5vdE1vcmUpO1xuICAgICAgICAgICAgaWYgKGluaXR2YWx1ZXMubm90TGVzcykgc2NvcGUubm90TGVzcyA9IHBhcnNlSW50KGluaXR2YWx1ZXMubm90TGVzcyk7XG4gICAgICAgICAgICBpZiAoaW5pdHZhbHVlcy5pZCkgICAgICBzY29wZS5zbGlkZXJpZD0gaW5pdHZhbHVlcy5pZDtcblxuICAgICAgICAgICAgLy8gaHVnZWx5IGJ1dCBpbiBzb21lIGNhc2UgRE9NIGlzIG5vdCBmaW5pc2ggd2hlbiB3ZSB0cnkgdG8gc2V0IHZhbHVlcyAhISFcbiAgICAgICAgICAgIGlmIChpbml0dmFsdWVzLnZhbHVlICE9PSB1bmRlZmluZWQpICAge1xuICAgICAgICAgICAgICAgIHNjb3BlLnZhbHVlID0gaW5pdHZhbHVlcy52YWx1ZTtcbiAgICAgICAgICAgICAgICBzY29wZS5mb3JjZVJlZnJlc2ggKDUwKTsgLy8gd2FpdCA1MG1zIGZvciBET00gdG8gYmUgcmVhZHlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIHJlY29tcHV0ZSBzbGlkZSBwb3NpdGlvbmluZ1xuICAgICAgICBzY29wZS5mb3JjZVJlZnJlc2ggPSBmdW5jdGlvbiAodGltZXIpIHtcbiAgICAgICAgICAgdmFyIHZhbHVlID0gc2NvcGUudmFsdWU7XG4gICAgICAgICAgIHNjb3BlLnZhbHVlID0gW3VuZGVmaW5lZCx1bmRlZmluZWRdO1xuICAgICAgICAgICAkdGltZW91dCAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICBzY29wZS5zZXRWYWx1ZSh2YWx1ZVswXSwwKTtcbiAgICAgICAgICAgICAgIGlmIChzY29wZS5kdWFsKSAgc2NvcGUuc2V0VmFsdWUodmFsdWVbMV0sMSk7XG4gICAgICAgICAgIH0sIHRpbWVyKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBoYW5kbGVyIHRvIGNoYW5nZSBjbGFzcyBmcm9tIHNsaWRlciBoYW5kbGVcbiAgICAgICAgc2NvcGUudXBkYXRlQ2xhc3MgPSBmdW5jdGlvbiAoY2xhc3NlLCBzdGF0dXMpIHtcblxuICAgICAgICAgICAgaWYgKHN0YXR1cykgZWxlbWVudC5hZGRDbGFzcyAoY2xhc3NlKTtcbiAgICAgICAgICAgIGVsc2UgIGVsZW1lbnQucmVtb3ZlQ2xhc3MgKGNsYXNzZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUuc2V0RGlzYWJsZSA9IGZ1bmN0aW9uIChkaXNhYmxlZCkge1xuXG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmFkZENsYXNzIChcImRpc2FibGVcIik7XG4gICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1swXS5jc3MgKCd2aXNpYmlsaXR5JywnaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1sxXS5jc3MgKCd2aXNpYmlsaXR5JywnaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUNsYXNzIChcImRpc2FibGVcIik7XG4gICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1swXS5jc3MgKCd2aXNpYmlsaXR5JywndmlzaWJsZScpO1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5kdWFsKSBzY29wZS5oYW5kbGVzWzFdLmNzcyAoJ3Zpc2liaWxpdHknLCd2aXNpYmxlJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5ub3JtYWxpemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSBzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcztcbiAgICAgICAgICAgIHZhciBwb2ludCA9IHZhbHVlICogcmFuZ2U7XG5cbiAgICAgICAgICAgIC8vIGlmIHN0ZXAgaXMgcG9zaXRpdmUgbGV0J3Mgcm91bmQgc3RlcCBieSBzdGVwXG4gICAgICAgICAgICBpZiAoc2NvcGUuYnlTdGVwID4gIDApIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9kID0gKHBvaW50IC0gKHBvaW50ICUgc2NvcGUuYnlTdGVwKSkgLyBzY29wZS5ieVN0ZXA7XG4gICAgICAgICAgICAgICAgdmFyIHJlbSA9IHBvaW50ICUgc2NvcGUuYnlTdGVwO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJvdW5kID0gKHJlbSA+PSBzY29wZS5ieVN0ZXAgKiAwLjUgPyBzY29wZS5ieVN0ZXAgOiAwKTtcbiAgICAgICAgICAgICAgICByZXN1bHQ9IChtb2QgKiBzY29wZS5ieVN0ZXAgKyByb3VuZCkgKyBzY29wZS5ub3RMZXNzO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2cgKFwicmFuZ2U9JWQgdmFsdWU9JWQgcG9pbnQ9JWQgbW9kPSVkIHJlbT0lZCByb3VuZD0lZCByZXN1bHQ9JWRcIiwgcmFuZ2UsIHZhbHVlLCBwb2ludCwgbW9kLCByZW0sIHJvdW5kLCByZXN1bHQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgc3RlcCBpcyBuZWdhdGl2ZSByZXR1cm4gcm91bmQgdG8gYXNrZWQgZGVjaW1hbFxuICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA8ICAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBvd2VyICA9ICBNYXRoLnBvdyAoMTAsKHNjb3BlLmJ5U3RlcCAqIC0xKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2NvcGUubm90TGVzcyArIHBhcnNlSW50IChwb2ludCAqIHBvd2VyKSAvIHBvd2VyO1xuICAgICAgICAgICAgICAgIHJldHVybiAocmVzdWx0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgc3RlcCBpcyBudWxsIHJldHVybiBmdWxsIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gcG9pbnQ7XG4gICAgICAgfTtcblxuICAgICAgICAvLyByZXR1cm4gY3VycmVudCB2YWx1ZVxuICAgICAgICBzY29wZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uIChvZmZzZXQsIGhhbmRsZSkge1xuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUucmVsYXRpdmVbaGFuZGxlXSA9IChvZmZzZXQgLSBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgLyAoc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgLSBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gPSBvZmZzZXQgLyAgKHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5ld3ZhbHVlID0gc2NvcGUubm9ybWFsaXplIChzY29wZS5yZWxhdGl2ZVtoYW5kbGVdKTtcblxuXG4gICAgICAgICAgICAvLyBpZiBpbnRlcm5hbCB2YWx1ZSBjaGFuZ2UgdXBkYXRlIG9yIG1vZGVsXG4gICAgICAgICAgICBpZiAobmV3dmFsdWUgIT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3dmFsdWUgPCBzY29wZS5zdGFydFZhbHVlKSBuZXd2YWx1ZT1zY29wZS5zdGFydFZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChuZXd2YWx1ZSA+IHNjb3BlLnN0b3BWYWx1ZSkgIG5ld3ZhbHVlPXNjb3BlLnN0b3BWYWx1ZTtcblxuXG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS52aWV3VmFsdWUgPSBzY29wZS5mb3JtYXR0ZXIgKG5ld3ZhbHVlLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS52aWV3VmFsdWUgPSBuZXd2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLmRpc3BsYXlzW2hhbmRsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuZGlzcGxheXNbaGFuZGxlXS5odG1sIChzY29wZS52aWV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBleHRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWxcbiAgICAgICAgICAgICAgICBzY29wZS52YWx1ZVtoYW5kbGVdID0gbmV3dmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGVsKSBtb2RlbC4kc2V0Vmlld1ZhbHVlIChzY29wZS52aWV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIHNjb3BlLiRhcHBseSgpO1xuICAgICAgICAgICAgICAgIGlmIChuZXd2YWx1ZSA+IHNjb3BlLnN0YXJ0VmFsdWUgJiYgbmV3dmFsdWUgPCBzY29wZS5zdG9wVmFsdWUpIHNjb3BlLnRyYW5zbGF0ZShvZmZzZXQsIGhhbmRsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cblxuICAgICAgICBzY29wZS5zZXRTdGFydCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG9mZnNldDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHZhbHVlID4gc2NvcGUudmFsdWVbMF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNjb3BlLmR1YWwpIHNjb3BlLnNldFZhbHVlICh2YWx1ZSwwKTtcbiAgICAgICAgICAgICAgICBlbHNlIHNjb3BlLnNldFZhbHVlICh2YWx1ZSwxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgKiAodmFsdWUgLSBzY29wZS5ub3RMZXNzKSAvIChzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuc3RhcnQuY3NzKCdoZWlnaHQnLG9mZnNldCArICdweCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICogKHZhbHVlIC0gc2NvcGUubm90TGVzcykgLyAoc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3MpO1xuICAgICAgICAgICAgICAgIHNjb3BlLnN0YXJ0LmNzcygnd2lkdGgnLG9mZnNldCArICdweCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5zdGFydFZhbHVlPSB2YWx1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5zZXRTdG9wID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodmFsdWUgPCBzY29wZS52YWx1ZVswXSkge1xuICAgICAgICAgICAgICAgIGlmICghc2NvcGUuZHVhbCkgc2NvcGUuc2V0VmFsdWUgKHZhbHVlLDApO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2NvcGUuc2V0VmFsdWUgKHZhbHVlLDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAqICh2YWx1ZSAtIHNjb3BlLm5vdExlc3MpIC8gKHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzKTtcbiAgICAgICAgICAgICAgICBzY29wZS5zdGFydC5jc3MoJ2hlaWdodCcsb2Zmc2V0ICsgJ3B4Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKiAodmFsdWUgLSBzY29wZS5ub3RMZXNzKSAvIChzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuc3RvcC5jc3MoeydyaWdodCc6IDAsICd3aWR0aCc6IChzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICAtIG9mZnNldCkgKyAncHgnfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLnN0b3BWYWx1ZT0gdmFsdWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUudHJhbnNsYXRlID0gZnVuY3Rpb24gKG9mZnNldCwgaGFuZGxlKSB7XG4gICAgICAgICAgICB2YXIgc3RhcnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIC8vIHRha2UgaGFuZGxlIHNpemUgaW4gYWNjb3VudCB0byBjb21wdXRlIG1pZGRsZVxuICAgICAgICAgICAgICAgIHZhciB2b2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgLSBvZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzW2hhbmRsZV0uY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVkoJyArIHZvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJy1tb3otdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVkoJyArIHZvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJy1tcy10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWSgnICsgdm9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW8tdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVkoJyArIHZvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJ3RyYW5zZm9ybSc6ICd0cmFuc2xhdGVZKCcgKyB2b2Zmc2V0ICsgJ3B4KSdcbiAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgaWYgKCFzY29wZS5kdWFsKSBzY29wZS5zbGlkZXIuY3NzKCdoZWlnaHQnLCBvZmZzZXQgKyAncHgnKTtcbiAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjb3BlLnJlbGF0aXZlWzFdICYmIHNjb3BlLnJlbGF0aXZlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IChzY29wZS5yZWxhdGl2ZVsxXSAtIHNjb3BlLnJlbGF0aXZlWzBdKSAqICBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICBzdGFydCAgPSAoc2NvcGUucmVsYXRpdmVbMF0gKiAgc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgIHNjb3BlLnNsaWRlci5jc3MgKHsnYm90dG9tJzogc3RhcnQrJ3B4JywnaGVpZ2h0JzogaGVpZ2h0ICsgJ3B4J30pO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbaGFuZGxlXS5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWCgnICsgb2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctbW96LXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVYKCcgKyBvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJy1tcy10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWCgnICsgb2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctby10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWCgnICsgb2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICd0cmFuc2Zvcm0nOiAndHJhbnNsYXRlWCgnICsgb2Zmc2V0ICsgJ3B4KSdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIXNjb3BlLmR1YWwpIHNjb3BlLnNsaWRlci5jc3MoJ3dpZHRoJyxvZmZzZXQgKyAncHgnKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY29wZS5yZWxhdGl2ZVsxXSAmJiBzY29wZS5yZWxhdGl2ZVswXSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSAoc2NvcGUucmVsYXRpdmVbMV0gLSBzY29wZS5yZWxhdGl2ZVswXSkgKiAgc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAoc2NvcGUucmVsYXRpdmVbMF0gKiAgc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnNsaWRlci5jc3MgKHsnbGVmdCc6IHN0YXJ0KydweCcsJ3dpZHRoJzogd2lkdGggKyAncHgnfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHBvc2l0aW9uIGhhbmRsZSBvbiB0aGUgYmFyIGRlcGVuZGluZyBhIGdpdmVuIHZhbHVlXG4gICAgICAgIHNjb3BlLnNldFZhbHVlID0gZnVuY3Rpb24gKHZhbHVlICwgaGFuZGxlKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0O1xuXG4gICAgICAgICAgICAvLyBpZiB2YWx1ZSBkaWQgbm90IGNoYW5nZSBpZ25vcmVcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gc2NvcGUudmFsdWVbaGFuZGxlXSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpICAgdmFsdWU9MDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+IHNjb3BlLm5vdE1vcmUpIHZhbHVlPXNjb3BlLm5vdE1vcmU7XG4gICAgICAgICAgICBpZiAodmFsdWUgPCBzY29wZS5ub3RMZXNzKSB2YWx1ZT1zY29wZS5ub3RMZXNzO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdID0gKHZhbHVlIC0gc2NvcGUubm90TGVzcykgLyAoc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3MpO1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUgPT09IDApIG9mZnNldCA9IChzY29wZS5yZWxhdGl2ZVtoYW5kbGVdICogc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpICsgc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQvMjtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlID09PSAxKSBvZmZzZXQgPSBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdICogc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2NvcGUucmVsYXRpdmVbaGFuZGxlXSA9ICh2YWx1ZSAtIHNjb3BlLm5vdExlc3MpIC8gKHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzKTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdICogIChzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLnRyYW5zbGF0ZSAob2Zmc2V0LGhhbmRsZSk7XG4gICAgICAgICAgICBzY29wZS52YWx1ZVtoYW5kbGVdID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChzY29wZS5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAvLyB3aGVuIGNhbGwgdGhyb3VnaCBzZXRWYWx1ZSB3ZSBkbyBub3QgcGFzcyBjYkhhbmRsZVxuICAgICAgICAgICAgICAgIHNjb3BlLnZpZXdWYWx1ZSA9IHNjb3BlLmZvcm1hdHRlciAodmFsdWUsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjb3BlLnZpZXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobW9kZWwpIG1vZGVsLiRzZXRWaWV3VmFsdWUoIHNjb3BlLnZpZXdWYWx1ZSk7XG5cbiAgICAgICAgICAgIGlmIChzY29wZS5kaXNwbGF5c1toYW5kbGVdKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUuZGlzcGxheXNbaGFuZGxlXS5odG1sIChzY29wZS52aWV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG5cbiAgICAgICAgLy8gTWluaW1hbCBrZXlzdHJva2UgaGFuZGxpbmcgdG8gY2xvc2UgcGlja2VyIHdpdGggRVNDIFtzY29wZS5hY3RpZiBpcyBjdXJyZW50IGhhbmRsZSBpbmRleF1cbiAgICAgICAgc2NvcGUua2V5ZG93bj0gIGZ1bmN0aW9uKGUpe1xuXG4gICAgICAgICAgICBzd2l0Y2goZS5rZXlDb2RlKXtcbiAgICAgICAgICAgICAgICBjYXNlIDM5OiAvLyBSaWdodFxuICAgICAgICAgICAgICAgIGNhc2UgMzg6IC8vIHVwXG4gICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuYnlTdGVwID4gMCkgc2NvcGUuJGFwcGx5KHNjb3BlLnNldFZhbHVlICgoc2NvcGUudmFsdWVbc2NvcGUuYWN0aWZdK3Njb3BlLmJ5U3RlcCksIHNjb3BlLmFjdGlmKSk7XG4gICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuYnlTdGVwIDwgMCkgc2NvcGUuJGFwcGx5KHNjb3BlLnNldFZhbHVlICgoc2NvcGUudmFsdWVbc2NvcGUuYWN0aWZdKygxIC8gTWF0aC5wb3coMTAsIHNjb3BlLmJ5U3RlcCotMSkpKSxzY29wZS5hY3RpZikpO1xuICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmNhbGxiYWNrKSAgc2NvcGUuY2FsbGJhY2sgKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM3OiAvLyBsZWZ0XG4gICAgICAgICAgICAgICAgY2FzZSA0MDogLy8gZG93blxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuYnlTdGVwID4gMCkgc2NvcGUuJGFwcGx5KHNjb3BlLnNldFZhbHVlICgoc2NvcGUudmFsdWVbc2NvcGUuYWN0aWZdIC0gc2NvcGUuYnlTdGVwKSwgc2NvcGUuYWN0aWYpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA8IDApIHNjb3BlLiRhcHBseShzY29wZS5zZXRWYWx1ZSAoKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXSAtICgxIC8gTWF0aC5wb3coMTAsIHNjb3BlLmJ5U3RlcCotMSkpKSxzY29wZS5hY3RpZikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2spICBzY29wZS5jYWxsYmFjayAoc2NvcGUudmFsdWVbc2NvcGUuYWN0aWZdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyNzogLy8gZXNjXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbc2NvcGUuYWN0aWZdWzBdLmJsdXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5tb3ZlSGFuZGxlID0gZnVuY3Rpb24gKGhhbmRsZSwgY2xpZW50WCwgY2xpZW50WSkge1xuICAgICAgICAgICAgdmFyIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIC0gY2xpZW50WTtcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPCBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IGNsaWVudFggLSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoKGNsaWVudFggKyBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKSA+IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5nZXRWYWx1ZSAgKG9mZnNldCwgaGFuZGxlKTtcblxuICAgICAgICAgICAgLy8gcHJldmVudCBkdWFsIGhhbmRsZSB0byBjcm9zc1xuICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwgJiYgc2NvcGUudmFsdWUgWzBdID4gc2NvcGUudmFsdWVbMV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlID09PSAwKSBzY29wZS5zZXRWYWx1ZSAoc2NvcGUudmFsdWVbMF0gLCAxKTtcbiAgICAgICAgICAgICAgICBlbHNlIHNjb3BlLnNldFZhbHVlKHNjb3BlLnZhbHVlWzFdLDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG5cbiAgICAgICAgc2NvcGUuZm9jdXNDQiA9IGZ1bmN0aW9uIChpbnNpZGUpIHtcbiAgICAgICAgICAgIGlmIChpbnNpZGUpIHtcbiAgICAgICAgICAgICAgICAkZG9jdW1lbnQub24oJ2tleWRvd24nLHNjb3BlLmtleWRvd24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCdrZXlkb3duJyxzY29wZS5rZXlkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBiYXIgd2FzIHRvdWNoIGxldCBtb3ZlIGhhbmRsZSB0byB0aGlzIHBvaW50XG4gICAgICAgIHNjb3BlLnRvdWNoQmFyQ0IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGU9MDtcbiAgICAgICAgICAgIHZhciByZWxhdGl2ZTtcbiAgICAgICAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgICAgICAgICB2YXIgb2xkdmFsdWUgPSBzY29wZS52YWx1ZVtoYW5kbGVdO1xuXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIHR3byBoYW5kbGVzIHNlbGVjdCBjbG9zZXN0IG9uZSBmcm9tIHRvdWNoIHBvaW50XG4gICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkge1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkgcmVsYXRpdmUgPSAodG91Y2hlc1swXS5wYWdlWSAtIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tKSAvIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGVsc2UgcmVsYXRpdmU9ICh0b3VjaGVzWzBdLnBhZ2VYIC0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KSAvIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UwID0gTWF0aC5hYnMocmVsYXRpdmUgLSBzY29wZS5yZWxhdGl2ZVswXSk7XG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlMSA9IE1hdGguYWJzKHJlbGF0aXZlIC0gc2NvcGUucmVsYXRpdmVbMV0pO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZTEgPCBkaXN0YW5jZTApIGhhbmRsZT0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBtb3ZlIGhhbmRsZSB0byBuZXcgcGxhY2VcbiAgICAgICAgICAgIHNjb3BlLm1vdmVIYW5kbGUgKGhhbmRsZSx0b3VjaGVzWzBdLnBhZ2VYLCB0b3VjaGVzWzBdLnBhZ2VZKTtcbiAgICAgICAgICAgIGlmIChzY29wZS5jYWxsYmFjayAmJiBvbGR2YWx1ZSAhPT0gc2NvcGUudmFsdWVbaGFuZGxlXSkgc2NvcGUuY2FsbGJhY2sgKHNjb3BlLnZhbHVlW2hhbmRsZV0sIHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGhhbmRsZSB3YXMgdG91Y2ggYW5kIGRyYWdcbiAgICAgICAgc2NvcGUudG91Y2hIYW5kbGVDQiA9IGZ1bmN0aW9uICh0b3VjaGV2dCwgaGFuZGxlKSB7XG4gICAgICAgICAgICB2YXIgb2xkdmFsdWUgPSBzY29wZS52YWx1ZVtoYW5kbGVdO1xuXG4gICAgICAgICAgICB0b3VjaGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgJGRvY3VtZW50Lm9uKCd0b3VjaG1vdmUnLHRvdWNobW92ZSk7XG4gICAgICAgICAgICAkZG9jdW1lbnQub24oJ3RvdWNoZW5kJyAsdG91Y2hlbmQpO1xuICAgICAgICAgICAgZWxlbWVudC51bmJpbmQoJ3RvdWNoc3RhcnQnLCBzY29wZS50b3VjaEJhckNCKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdG91Y2htb3ZlKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IHRvdWNoZXMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5tb3ZlSGFuZGxlIChoYW5kbGUsdG91Y2hlc1tpZHhdLnBhZ2VYLCB0b3VjaGVzW2lkeF0ucGFnZVkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG91Y2hlbmQoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICRkb2N1bWVudC51bmJpbmQoJ3RvdWNobW92ZScsdG91Y2htb3ZlKTtcbiAgICAgICAgICAgICAgICRkb2N1bWVudC51bmJpbmQoJ3RvdWNoZW5kJyAsdG91Y2hlbmQpO1xuICAgICAgICAgICAgICAgZWxlbWVudC5vbigndG91Y2hzdGFydCcsIHNjb3BlLnRvdWNoQmFyQ0IpO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgdmFsdWUgY2hhbmdlIG5vdGlmeSBhcHBsaWNhdGlvbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5jYWxsYmFjayAmJiBvbGR2YWx1ZSAhPT0gc2NvcGUudmFsdWVbaGFuZGxlXSkgc2NvcGUuY2FsbGJhY2sgKHNjb3BlLnZhbHVlW2hhbmRsZV0sIHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLmhhbmRsZUNCID0gZnVuY3Rpb24gKGNsaWNrZXZlbnQsIGhhbmRsZSkge1xuXG4gICAgICAgICAgICBpZiAoYXR0cnMuYXV0b21hdGljKSByZXR1cm47XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBvbGR2YWx1ZSA9IHNjb3BlLnZhbHVlW2hhbmRsZV07XG4gICAgICAgICAgICAvLyByZWdpc3RlciBtb3VzZSBldmVudCB0byB0cmFjayBoYW5kbGVcbiAgICAgICAgICAgIGNsaWNrZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgJGRvY3VtZW50Lm9uKCdtb3VzZW1vdmUnLG1vdXNlbW92ZSk7XG4gICAgICAgICAgICAkZG9jdW1lbnQub24oJ21vdXNldXAnLCBtb3VzZXVwKTtcbiAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbaGFuZGxlXVswXS5mb2N1cygpO1xuICAgICAgICAgICAgc2NvcGUuYWN0aWY9aGFuZGxlO1xuXG4gICAgICAgICAgICAvLyBzbGlkZXIgaGFuZGxlIGlzIG1vdmluZ1xuICAgICAgICAgICAgZnVuY3Rpb24gbW91c2Vtb3ZlKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgc2NvcGUubW92ZUhhbmRsZSAoaGFuZGxlLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbW91c2UgaXMgdXAgZGFucyBsZWF2ZSBzbGlkZXIgc2VuZCByZXNpemUgZXZlbnRzXG4gICAgICAgICAgICBmdW5jdGlvbiBtb3VzZXVwKCkge1xuICAgICAgICAgICAgICAgICRkb2N1bWVudC51bmJpbmQoJ21vdXNlbW92ZScsIG1vdXNlbW92ZSk7XG4gICAgICAgICAgICAgICAgJGRvY3VtZW50LnVuYmluZCgnbW91c2V1cCcsIG1vdXNldXApO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgdmFsdWUgY2hhbmdlIG5vdGlmeSBhcHBsaWNhdGlvbiBjYWxsYmFja1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5jYWxsYmFjayAmJiBvbGR2YWx1ZSAhPT0gc2NvcGUudmFsdWVbaGFuZGxlXSkgc2NvcGUuY2FsbGJhY2sgKHNjb3BlLnZhbHVlW2hhbmRsZV0sIHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHNpbXVsYXRlIGpxdWVyeSBmaW5kIGJ5IGNsYXNzZXMgY2FwYWJpbGl0aWVzIFt3YXJuaW5nIG9ubHkgcmV0dXJuIDFzdCBlbGVtZW50c11cbiAgICAgICAgc2NvcGUuZmluZCA9IGZ1bmN0aW9uIChzZWxlY3QsIGVsZW0pIHtcbiAgICAgICAgICAgIHZhciBkb21lbGVtO1xuXG4gICAgICAgICAgICBpZiAoZWxlbSkgZG9tZWxlbSA9IGVsZW1bMF0ucXVlcnlTZWxlY3RvcihzZWxlY3QpO1xuICAgICAgICAgICAgZWxzZSBkb21lbGVtID0gZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgICAgICAgICAgIHZhciBhbmdlbGVtID0gYW5ndWxhci5lbGVtZW50KGRvbWVsZW0pO1xuICAgICAgICAgICAgcmV0dXJuIChhbmdlbGVtKTtcbiAgICAgICAgfTtcblxuXG5cbiAgICAgICAgc2NvcGUuaW5pdGlhbFNldHRpbmdzID0gZnVuY3Rpb24gKGluaXRpYWwpIHtcbiAgICAgICAgICAgIHZhciBkZWNpbWFsX3BsYWNlc19tYXRjaF9yZXN1bHQ7XG4gICAgICAgICAgICBzY29wZS52YWx1ZT1bXTsgIC8vIHN0b3JlIGxvdy9oZWlnaHQgdmFsdWUgd2hlbiB0d28gaGFuZGxlc1xuICAgICAgICAgICAgc2NvcGUucmVsYXRpdmU9W107XG5cbiAgICAgICAgICAgIGlmIChzY29wZS5wcmVjaXNpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZWNpbWFsX3BsYWNlc19tYXRjaF9yZXN1bHQgPSAoJycgKyBzY29wZS5ieVN0ZXApLm1hdGNoKC9cXC4oW1xcZF0qKS8pO1xuICAgICAgICAgICAgICAgIHNjb3BlLnByZWNpc2lvbiA9IGRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdCAmJiBkZWNpbWFsX3BsYWNlc19tYXRjaF9yZXN1bHRbMV0gPyBkZWNpbWFsX3BsYWNlc19tYXRjaF9yZXN1bHRbMV0ubGVuZ3RoIDogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcG9zaXRpb24gaGFuZGxlIHRvIGluaXRpYWwgdmFsdWUocylcbiAgICAgICAgICAgIGVsZW1lbnQub24oJ3RvdWNoc3RhcnQnLCBzY29wZS50b3VjaEJhckNCKTtcbiAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMF0ub24oJ3RvdWNoc3RhcnQnLCBmdW5jdGlvbihldnQpe3Njb3BlLnRvdWNoSGFuZGxlQ0IoZXZ0LDApO30pO1xuXG4gICAgICAgICAgICAvLyB0aGlzIHNsaWRlciBoYXMgdHdvIGhhbmRsZXMgbG93L2hpZ2h0XG4gICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMV0uYWRkQ2xhc3MoJ3JhbmdlLXNsaWRlci1oYW5kbGUnKTtcbiAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzWzFdLm9uKCd0b3VjaHN0YXJ0JywgZnVuY3Rpb24oZXZ0KXtzY29wZS50b3VjaEhhbmRsZUNCKGV2dCwxKTt9KTtcbiAgICAgICAgICAgICAgICBpZiAoIXNjb3BlLmluaXR2YWx1ZXMpIHNjb3BlLnNldFZhbHVlIChpbml0aWFsWzFdLDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGFuIGluaXRzdGF0ZSBvYmplY3QgYXBwbHkgaXRcbiAgICAgICAgICAgIGlmIChzY29wZS5pbml0dmFsdWVzKSBzY29wZS5pbml0V2lkZ2V0IChzY29wZS5pbml0dmFsdWVzKTtcbiAgICAgICAgICAgIGVsc2UgICBzY29wZS5zZXRWYWx1ZSAoaW5pdGlhbFswXSwwKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2NvcGUuc2xpZGVyaWQgICA9IGF0dHJzLmlkIHx8IFwic2xpZGVyLVwiICsgcGFyc2VJbnQgKE1hdGgucmFuZG9tKCkgKiAxMDAwKTtcbiAgICAgICAgICAgIHNjb3BlLnN0YXJ0VmFsdWUgPSAtSW5maW5pdHk7XG4gICAgICAgICAgICBzY29wZS5zdG9wVmFsdWUgID0gSW5maW5pdHk7XG4gICAgICAgICAgICBzY29wZS5ieVN0ZXAgICA9IHBhcnNlSW50KGF0dHJzLmJ5U3RlcCkgfHwgMTtcbiAgICAgICAgICAgIHNjb3BlLnZlcnRpY2FsID0gYXR0cnMudmVydGljYWwgICB8fCBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLmR1YWwgICAgID0gYXR0cnMuZHVhbEhhbmRsZXN8fCBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLnRyaWdnZXJfaW5wdXRfY2hhbmdlPSBmYWxzZTtcbiAgICAgICAgICAgIHNjb3BlLm5vdE1vcmUgID0gcGFyc2VJbnQoYXR0cnMubm90TW9yZSkgICB8fCAxMDA7XG4gICAgICAgICAgICBzY29wZS5ub3RMZXNzICA9IHBhcnNlSW50KGF0dHJzLm5vdExlc3MpICAgfHwgMDtcblxuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSBlbGVtZW50LmFkZENsYXNzKFwidmVydGljYWwtcmFuZ2VcIik7XG5cbiAgICAgICAgICAgIHNjb3BlLmhhbmRsZXM9IFtzY29wZS5maW5kKCcuaGFuZGxlLW1pbicpLCBzY29wZS5maW5kKCcuaGFuZGxlLW1heCcpXTtcbiAgICAgICAgICAgIHNjb3BlLmJhciAgICA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBzY29wZS5zbGlkZXIgPSBzY29wZS5maW5kKCcucmFuZ2Utc2xpZGVyLWFjdGl2ZS1zZWdtZW50Jyk7XG4gICAgICAgICAgICBzY29wZS5zdGFydCAgPSBzY29wZS5maW5kKCcuaWJ6LXJhbmdlLXNsaWRlci1zdGFydCcpO1xuICAgICAgICAgICAgc2NvcGUuc3RvcCAgID0gc2NvcGUuZmluZCgnLmliei1yYW5nZS1zbGlkZXItc3RvcCcpO1xuICAgICAgICAgICAgc2NvcGUuZGlzYWJsZT0gYXR0cnMuZGlzYWJsZSB8fCBmYWxzZTtcblxuICAgICAgICAgICAgc2NvcGUuY3RybGhhbmRsZSA9IG5ldyBSYW5nZVNsaWRlckhhbmRsZSAoc2NvcGUpO1xuXG4gICAgICAgICAgICAvLyBwcmVwYXJlIERPTSBvYmplY3QgcG9pbnRlciB0byBjb21wdXRlIHNpemUgZHluYW1pY2FsbHlcbiAgICAgICAgICAgIHNjb3BlLmJvdW5kcyA9IHtcbiAgICAgICAgICAgICAgICBiYXIgICAgOiBlbGVtZW50WzBdLFxuICAgICAgICAgICAgICAgIGhhbmRsZXM6IFtzY29wZS5oYW5kbGVzWzBdWzBdLCBzY29wZS5oYW5kbGVzWzFdWzBdXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGF0dHJzLmRpc2FibGUgPT09ICd0cnVlJykgc2NvcGUuc2V0RGlzYWJsZSh0cnVlKTtcblxuICAgICAgICAgICAgaWYgKGF0dHJzLmRpc3BsYXlUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dHJzLmRpc3BsYXlUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cnVlIDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaGFuZGxlJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5kaXNwbGF5cyA9IHNjb3BlLmhhbmRsZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzWzBdLmFkZENsYXNzKCdpYnotcmFuZ2Utc2xpZGVyLWRpc3BsYXknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5kdWFsKSBzY29wZS5oYW5kbGVzWzFdLmFkZENsYXNzKCdpYnotcmFuZ2Utc2xpZGVyLWRpc3BsYXknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZGlzcGxheXMgPSAgWyRkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAoYXR0cnMuZGlzcGxheVRhcmdldCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBzY29wZS5kaXNwbGF5cz1bXTtcblxuICAgICAgICAgICAgLy8gZXh0cmFjdCBpbml0aWFsIHZhbHVlcyBmcm9tIGF0dHJzIGFuZCBwYXJzZSBpbnRvIGludFxuICAgICAgICAgICAgaWYgKCFhdHRycy5pbml0aWFsKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUuaW5pdGlhbCAgPSBbc2NvcGUubmdNb2RlbCwgc2NvcGUubmdNb2RlbF07IC8vIGluaXRpYWxpemUgdG8gbW9kZWwgdmFsdWVzXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBpbml0aWFsICA9IGF0dHJzLmluaXRpYWwuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICBzY29wZS5pbml0aWFsID0gW1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsWzBdICE9PSB1bmRlZmluZWQgPyBwYXJzZUludCAoaW5pdGlhbFswXSkgOiBzY29wZS5ub3RMZXNzLFxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsWzFdICE9PSB1bmRlZmluZWQgPyBwYXJzZUludCAoaW5pdGlhbFsxXSkgOiBzY29wZS5ub3RNb3JlXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTW9uaXRvciBhbnkgY2hhbmdlcyBvbiBzdGFydC9zdG9wIGRhdGVzLlxuICAgICAgICAgICAgc2NvcGUuJHdhdGNoKCdzdGFydEF0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLnZhbHVlIDwgc2NvcGUuc3RhcnRBdCApIHtcbiAgICAgICAgICAgICAgICAgICAgLy9zY29wZS5zZXRWYWx1ZSAoc2NvcGUuc3RhcnRBdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzY29wZS5zdGFydEF0KSBzY29wZS5zZXRTdGFydCAoc2NvcGUuc3RhcnRBdCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2NvcGUuJHdhdGNoKCdzdG9wQXQnICwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLnZhbHVlID4gc2NvcGUuc3RvcEF0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vc2NvcGUuc2V0VmFsdWUgKHNjb3BlLnN0b3BBdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzY29wZS5zdG9wQXQpIHNjb3BlLnNldFN0b3AgKHNjb3BlLnN0b3BBdCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gZmluaXNoIHdpZGdldCBpbml0aWFsaXNhdGlvblxuICAgICAgICAgICAgc2NvcGUuaW5pdGlhbFNldHRpbmdzIChzY29wZS5pbml0aWFsKTtcblxuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLmluaXQoKTtcbiAgICAgICAgXG4gICAgICAgICAvLyBzbGlkZXIgaXMgcmVhZHkgcHJvdmlkZSBjb250cm9sIGhhbmRsZSB0byBhcHBsaWNhdGlvbiBjb250cm9sbGVyXG4gICAgICAgIHNjb3BlLiR3YXRjaCAoJ2luaXRob29rJywgZnVuY3Rpb24gKCkgeyAgICAgICAgIC8vIGluaXQgVmFsdWVzIG1heSBhcnJpdmUgbGF0ZVxuICAgICAgICAgICAgaWYgKHNjb3BlLmluaXRob29rKSBzY29wZS5pbml0aG9vayAoc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNjb3BlLiR3YXRjaCAoJ2luaXR2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7IFx0Ly8gaW5pdCBWYWx1ZXMgbWF5IGFycml2ZSBsYXRlXG4gICAgICAgICAgICBpZiAoc2NvcGUuaW5pdHZhbHVlcykgc2NvcGUuaW5pdFdpZGdldChzY29wZS5pbml0dmFsdWVzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdHdvLXdheSBiaW5kaW5nIGlmIG1vZGVsIHZhbHVlIGNoYW5nZXNcbiAgICAgICAgc2NvcGUuJHdhdGNoICgnbmdNb2RlbCcsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICAgIHNjb3BlLnNldFZhbHVlKG5ld1ZhbHVlLCAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG5yZXR1cm4ge1xuICAgIHJlc3RyaWN0OiBcIkVcIiwgICAgLy8gcmVzdHJpY3QgdG8gPHJhbmdlLXNsaWRlcj4gSFRNTCBlbGVtZW50IG5hbWVcbiAgICBzY29wZToge1xuICAgICAgICBzdGFydEF0ICA6Jz0nLCAgLy8gRmlyc3QgYWNjZXB0YWJsZSBkYXRlXG4gICAgICAgIHN0b3BBdCAgIDonPScsICAvLyBMYXN0IGFjY2VwdGFibGUgZGF0ZVxuICAgICAgICBjYWxsYmFjayA6Jz0nLCAgLy8gQ2FsbGJhY2sgdG8gYWN0aWYgd2hlbiBhIGRhdGUgaXMgc2VsZWN0ZWRcbiAgICAgICAgZm9ybWF0dGVyOic9JywgIC8vIENhbGxiYWNrIGZvciBkcmFnIGV2ZW50IGNhbGwgZWFjaCB0aW1lIGludGVybmFsIHZhbHVlIGNoYW5nZXNcbiAgICAgICAgaW5pdGhvb2sgOic9JywgIC8vIEhvb2sgcG9pbnQgdG8gY29udHJvbCBzbGlkZXIgZnJvbSBBUElcbiAgICAgICAgY2JoYW5kbGUgOic9JywgIC8vIEFyZ3VtZW50IGFkZGVkIHRvIGV2ZXJ5IGNhbGxiYWNrXG4gICAgICAgIGluaXR2YWx1ZXM6Jz0nLCAgIC8vIEluaXRpYWwgdmFsdWVzIGFzIGEgc2luZ2xlIG9iamVjdFxuICAgICAgICBuZ01vZGVsOiAnPScgICAgLy8gdGhlIG1vZGVsIHZhbHVlXG4gICAgfSxcbiAgICByZXF1aXJlOiAnP25nTW9kZWwnLFxuICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSwgLy8gaHRtbCB0ZW1wbGF0ZSBpcyBidWlsZCBmcm9tIEpTXG4gICAgcmVwbGFjZTogdHJ1ZSwgICAgICAvLyByZXBsYWNlIGN1cnJlbnQgZGlyZWN0aXZlIHdpdGggdGVtcGxhdGUgd2hpbGUgaW5oZXJpdGluZyBvZiBjbGFzc1xuICAgIGxpbms6IGxpbmsgICAgICAgICAgLy8gcGlja2FkYXRlIG9iamVjdCdzIG1ldGhvZHNcbn07XG59XSk7XG5cbmNvbnNvbGUubG9nIChcIlJhbmdlU2xpZGVyIExvYWRlZFwiKTtcblxufSkoKTsiLCIvKlxuIGFsc2EtZ2F0ZXdheSAtLSBwcm92aWRlIGEgUkVTVC9IVFRQIGludGVyZmFjZSB0byBBTFNBLU1peGVyXG5cbiBDb3B5cmlnaHQgKEMpIDIwMTUsIEZ1bHVwIEFyIEZvbGxcblxuIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvclxuIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiBhbG9uZyB3aXRoIHNjb3BlIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS5cblxuIFJlZmVyZW5jZXM6XG5cbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0ZW1wbGF0ZSA9XG4gICAgICAgICAgJzxkaXYgY2xhc3M9XCJhZmItbW9uaXRvclwiIG5nLWNsaWNrPVwiZ2V0cGluZygpXCI+JyArXG4gICAgICAgICAnPHNwYW4gY2xhc3M9XCJhZmItcmVmcmVzaC10b2tlblwiICA+YWZiOi8ve3tob3N0bmFtZX19Ont7aHR0cGRwb3J0fX08L3NwYW4+JyArXG4gICAgICAgICAnPGkgY2xhc3M9XCJ7e2ljb259fVwiPjwvaT4nICtcbiAgICAgICAgICc8L2Rpdj4nO1xuXG5cbi8vIHNjb3BlIG1vZHVsZSBpcyBsb2FkIHN0YXRpY2FsbHkgYmVmb3JlIGFueSByb3V0ZSBpcyBjYXRpdmF0ZWRcbmFuZ3VsYXIubW9kdWxlKCdUb2tlblJlZnJlc2gnLCBbJ0FwcENvbmZpZycsICdNb2RhbE5vdGlmaWNhdGlvbiddKVxuXG4gICAgLmRpcmVjdGl2ZSAoJ3Rva2VuUmVmcmVzaCcsIFtcIiR0aW1lb3V0XCIsIFwiJGh0dHBcIiwgXCIkbG9jYXRpb25cIiwgXCJOb3RpZmljYXRpb25cIiwgXCJBcHBDb25maWdcIiwgZnVuY3Rpb24oJHRpbWVvdXQsICRodHRwLCAkbG9jYXRpb24sIE5vdGlmaWNhdGlvbiwgQXBwQ29uZmlnKSB7XG5cbiAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgICAgIHNjb3BlLnN0YXR1cz11bmRlZmluZWQ7IC8vIG5laXRoZXIgdGh1IG5laXRoZXIgZmFsc2VcbiAgICAgICAgXG4gICAgXG4gICAgICAgIHNjb3BlLm9ubGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgICAgKFwib25saW5lXCIpO1xuICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyAoXCJvZmZsaW5lXCIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLm9mZmxpbmUgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyAgICAoXCJvZmZsaW5lXCIpO1xuICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyAoXCJvbmxpbmVcIik7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzY29wZS5vbmVycm9yID0gZnVuY3Rpb24oZGF0YSwgZXJyY29kZSwgaGVhZGVycykge1xuICAgICAgICAgICAgaWYgKHNjb3BlLnN0YXR1cyAhPT0gZmFsc2UpICB7XG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLndhcm5pbmcgKHttZXNzYWdlOiBcIkFwcEZyYW1ld29yayBCaW5kZXIgTG9zdFwiLCBkZWxheTogNTAwMH0pO1xuICAgICAgICAgICAgICAgIHNjb3BlLm9mZmxpbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLnN0YXR1cyA9IDA7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzY29wZS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihkYXRhLCBlcnJjb2RlLCBoZWFkZXJzLCBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChzY29wZS5zdGF0dXMgIT09IHRydWUpICB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucmVxdWVzdC50b2tlbikgQXBwQ29uZmlnLnNlc3Npb24udG9rZW4gPSBkYXRhLnJlcXVlc3QudG9rZW47XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucmVxdWVzdC51dWlkKSAgQXBwQ29uZmlnLnNlc3Npb24udXVpZCAgPSBkYXRhLnJlcXVlc3QudXVpZDtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXF1ZXN0LnRpbWVvdXQpICBBcHBDb25maWcuc2Vzc2lvbi50aW1lb3V0ICA9IGRhdGEucmVxdWVzdC50aW1lb3V0O1xuXG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLnN1Y2Nlc3MgKHttZXNzYWdlOiBcIkFwcEZyYW1ld29yayBCaW5kZXIgQmFjayB0byBMaXZlXCIsIGRlbGF5OiAzMDAwfSk7XG4gICAgICAgICAgICAgICAgc2NvcGUub25saW5lKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLmNhbGxiYWNrKSBzY29wZS5jYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NvcGUuc3RhdHVzID0gMTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDaGVjayBCaW5kZXIgc3RhdHVzXG4gICAgICAgIHNjb3BlLmdldHBpbmcgPSBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSAkaHR0cC5nZXQoQXBwQ29uZmlnLnNlc3Npb24ucGluZysnP3Rva2VuPScrIEFwcENvbmZpZy5zZXNzaW9uLnRva2VuKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHJvY2VzcyBzdWNjZXNzIGFuZCBlcnJvclxuICAgICAgICAgICAgaGFuZGxlci5zdWNjZXNzKHNjb3BlLm9uc3VjY2Vzcyk7XG4gICAgICAgICAgICBoYW5kbGVyLmVycm9yKHNjb3BlLm9uZXJyb3IpO1xuXG4gICAgICAgICAgICAvLyByZXN0YXJ0IGEgbmV3IHRpbWVyIGZvciBuZXh0IHBpbmdcbiAgICAgICAgICAgICR0aW1lb3V0IChzY29wZS5nZXRwaW5nLCBBcHBDb25maWcuc2Vzc2lvbi5waW5ncmF0ZSoxMDAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIEJpbmRlciBzdGF0dXNcbiAgICAgICAgc2NvcGUucmVmcmVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSAkaHR0cC5nZXQoQXBwQ29uZmlnLnNlc3Npb24ucmVmcmVzaCsnP3Rva2VuPScrIEFwcENvbmZpZy5zZXNzaW9uLnRva2VuKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHJvY2VzcyBzdWNjZXNzIGFuZCBlcnJvclxuICAgICAgICAgICAgaGFuZGxlci5zdWNjZXNzKHNjb3BlLm9uc3VjY2Vzcyk7XG4gICAgICAgICAgICBoYW5kbGVyLmVycm9yKHNjb3BlLm9uZXJyb3IpO1xuICAgICAgICAgICAgLy8gcmVzdGFydCBhIG5ldyB0aW1lciBmb3IgbmV4dCByZWZyZXNoIHRvIDEvNCBvZiB0aW1lb3V0IHNlc3Npb25cbiAgICAgICAgICAgICR0aW1lb3V0IChzY29wZS5yZWZyZXNoLCBBcHBDb25maWcuc2Vzc2lvbi50aW1lb3V0ICoyNTApO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgLy8gSW5pdGlhbCBjb25uZWN0aW9uXG4gICAgICAgIHNjb3BlLnRrY3JlYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlciA9ICRodHRwLmdldChBcHBDb25maWcuc2Vzc2lvbi5jcmVhdGUrJz90b2tlbj0nKyBBcHBDb25maWcuc2Vzc2lvbi5pbml0aWFsKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHJvY2VzcyBzdWNjZXNzIGFuZCBlcnJvclxuICAgICAgICAgICAgaGFuZGxlci5zdWNjZXNzKHNjb3BlLm9uc3VjY2Vzcyk7XG4gICAgICAgICAgICBoYW5kbGVyLmVycm9yKHNjb3BlLm9uZXJyb3IpO1xuICAgICAgICB9O1xuIFxuICAgICAgICBzY29wZS5pY29uICAgICAgPSBhdHRycy5pY29uICAgfHwgXCJmaS1saWdodGJ1bGJcIjtcbiAgICAgICAgc2NvcGUuaG9zdG5hbWUgID0gJGxvY2F0aW9uLmhvc3QoKTtcbiAgICAgICAgc2NvcGUuaHR0cGRwb3J0ID0gJGxvY2F0aW9uLnBvcnQoKTtcbiAgICAgICAgc2NvcGUuYXV0b2xvZyAgID0gSlNPTi5wYXJzZShhdHRycy5hdXRvbG9nIHx8IGZhbHNlKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChzY29wZS5hdXRvbG9nKSBzY29wZS50a2NyZWF0ZSgpO1xuXG4gICAgICAgIC8vIEluaXQgcGluZyBhbmQgcmVmcmVzaCBwcm9jZXNzXG4gICAgICAgICR0aW1lb3V0IChzY29wZS5nZXRwaW5nLCBBcHBDb25maWcuc2Vzc2lvbi5waW5ncmF0ZSoxMDAwKTtcbiAgICAgICAgJHRpbWVvdXQgKHNjb3BlLnJlZnJlc2gsIEFwcENvbmZpZy5zZXNzaW9uLnRpbWVvdXQgKjI1MCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgY2FsbGJhY2sgOiBcIj1cIlxuICAgICAgICB9LFxuICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICBsaW5rOiBteW1ldGhvZHNcbiAgICB9O1xufV0pO1xuXG59KSgpO1xuY29uc29sZS5sb2cgKFwiVG9rZW4gUmVmcmVzaCBMb2FkZWRcIik7XG5cbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICogXG4gKiBCdWdzOiBJbnB1dCB3aXRoIENhbGxiYWNrIFNIT1VMRCBCRSBnZXQgJ3JlcXVpcmVkJyBjbGFzc1xuICogXG4gKiByZWY6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9tb3VzZW92ZXJcbiAqIFxuICogdXNhZ2U6IFxuICogXG4gKiB0aXBNb2RhbDogbGlzdGVuIGV2ZW50IGZyb20gZWxlbS5wYXJlbnQoKSB0byBkaXNwbGF5IHRpcC1tb2RhbFxuICogICAgICA8ZGl2IGNsYXNzPVwieHh4eFwiPlxuICogICAgICAgICAgPHRpcC1tb2RhbCB0aXA9eHh4eD48L3RpcC1tb2RhbD5cbiAqICAgICAgICAgIDxpbnB1dC10ZXh0IC4uLi4+PC9pbnB1dC10ZXh0PlxuICogICAgICA8L2Rpdj5cbiAqICAgICAgXG4gKiBOb3RlOiB1c2UgQ1NTLnZpc2liaWxpdHkgdG8gYXZvaWQgZGlzcGxheSBmbGlja2VyaW5nIGF0IGluaXRpYWwgZGlzcGxheS5cbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0bXBsID0gJzxkaXYgY2xhc3M9XCJ0aXAtbW9kYWwtcG9wdXBcIj4nICtcbiAgICAgICAgICAgICc8aSBjbGFzcz1cInt7aWNvbn19XCI+PC9pPicgK1xuICAgICAgICAgICAgJzxzcGFuPnt7dGlwfX08L3NwYW4+JyArXG4gICAgICAgICAgICAnPC9zcGFuPjwvZGl2PicgO1xuXG4gICAgYW5ndWxhci5tb2R1bGUoJ01vZGFsTm90aWZpY2F0aW9uJywgW10pXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCd0aXBNb2RhbCcsIFtcIiR0aW1lb3V0XCIsIGZ1bmN0aW9uICgkdGltZW91dCkge1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5wYXJlbnQgPSBlbGVtLnBhcmVudCgpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5tb2RhbCAgICA9IGVsZW0uZmluZChcImRpdlwiKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGRlbGF5IHRpcCBkaXNwbGF5IHRvIGF2b2lkIGJsaW5raW5nIHdoZW4gbW92aW5nIG1vdXNlIGZhc3RcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGlzcGxheSAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5zaG93KSBzY29wZS5tb2RhbC5jc3Moe29wYWNpdHk6IDEsIHZpc2liaWxpdHk6J3Zpc2libGUnfSk7ICBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUudGltZW91dCA9ICR0aW1lb3V0KGFjdGlvbiwgc2NvcGUuZGVsYXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjbG9zZSAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2NvcGUuc2hvdyA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsLmNzcyh7b3BhY2l0eTogMCwgdmlzaWJpbGl0eTonaGlkZGVuJ30pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFqdXN0IGljb24gb3IgdXNlIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaWNvbiAgPSBhdHRycy5pY29uIHx8ICdmaS1saWdodGJ1bGInO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIFBhcmVudCBlbGVtZW50IHRvIGdldCBtb3VzZSBldmVudFxuICAgICAgICAgICAgICAgICAgICBzY29wZS5wYXJlbnQuYWRkQ2xhc3MgKCdhcy1tb2RhbC10aXAnKTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50LmJpbmQoJ2NsaWNrJywgY2xvc2UpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5wYXJlbnQuYmluZCgnZm9jdXMnLCBkaXNwbGF5KTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50LmJpbmQoJ21vdXNlb3ZlcicsIGRpc3BsYXkpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5wYXJlbnQuYmluZCgnbW91c2VsZWF2ZScsIGNsb3NlKTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50LmJpbmQoJ2JsdXInLCBjbG9zZSk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBzY29wZS5kZWxheSA9IGF0dHJzLmRlbGF5IHx8IDEwMDA7IC8vIHdhaXQgMXMgYmVmb3JlIGRpc3BsYXlpbmcgdGlwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRtcGwsXG4gICAgICAgICAgICAgICAgICAgIGxpbms6IG15bWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgc2NvcGU6IHt0aXA6IFwiPVwifSAvLyB0aXAgbWF5IG5vdCBiZSBkZWZpbmVkIHdoZW4gd2lkZ2V0IGlzIGRpc3BsYXlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfV0pO1xufSkoKTtcbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICogXG4gKiBCdWdzOiBJbnB1dCB3aXRoIENhbGxiYWNrIFNIT1VMRCBCRSBnZXQgJ3JlcXVpcmVkJyBjbGFzc1xuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRtcGwgPSAnPHNwYW4gdGl0bGU9XCJHb3RvOiB7e2hyZWZ9fVwiIG5nLWNsaWNrPVwiY2xpY2tlZCgpXCI+JyArXG4gICAgICAgICAgICAnPGkgY2xhc3M9XCJ7e2ljb259fVwiPjwvaT4nICtcbiAgICAgICAgICAgICc8c3Bhbj57e2xhYmVsfX08L3NwYW4+JyArXG4gICAgICAgICAgICAnPC9zcGFuPic7XG5cblxuICAgIGFuZ3VsYXIubW9kdWxlKCdMaW5rQnV0dG9uJywgW10pXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCdsaW5rQnV0dG9uJywgW1wiJGxvY2F0aW9uXCIsIGZ1bmN0aW9uICgkbG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuY2xpY2tlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdHRycy5xdWVyeSkgJGxvY2F0aW9uLnBhdGgoYXR0cnMuaHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlICRsb2NhdGlvbi5wYXRoKGF0dHJzLmhyZWYpLnNlYXJjaChhdHRycy5xdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gYWp1c3QgaWNvbiBvciB1c2UgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICBzY29wZS5pY29uID0gYXR0cnMuaWNvbiAgIHx8ICdmaS1saW5rJztcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUubGFiZWwgPSBhdHRycy5sYWJlbCB8fCAnSnVtcCc7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmhyZWYgID0gYXR0cnMuaHJlZiAgfHwgJy9ob21lJztcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBsYWJlbCBhcyBjbGFzc1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzIChzY29wZS5sYWJlbC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdG1wbCxcbiAgICAgICAgICAgICAgICAgICAgbGluazogbXltZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBzY29wZToge31cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfV0pO1xufSkoKTtcbiIsIlxuLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4uXG4gKiBcbiAqIFJlZmVyZW5jZTpcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvQVBJL0ZpbGVSZWFkZXIgXG4gKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVXNpbmdfZmlsZXNfZnJvbV93ZWJfYXBwbGljYXRpb25zI1VzaW5nX2hpZGRlbl9maWxlX2lucHV0X2VsZW1lbnRzX3VzaW5nX3RoZV9jbGljayUyOCUyOV9tZXRob2RcbiAqICAgaHR0cHM6Ly91bmNvcmtlZHN0dWRpb3MuY29tL2Jsb2cvbXVsdGlwYXJ0Zm9ybWRhdGEtZmlsZS11cGxvYWQtd2l0aC1hbmd1bGFyanNcbiAqICAgaHR0cHM6Ly93d3cudGVybGljaS5jb20vMjAxNS8wNS8xNi91cGxvYWRpbmctZmlsZXMtbG9jYWxseS5odG1sXG4gKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXJ2Z2gvYW5ndWxhci1maWxlLXVwbG9hZC9ibG9iL21hc3Rlci9zcmMvc2VydmljZXMvRmlsZVVwbG9hZGVyLmpzXG4gKiAgIGh0dHBzOi8vc3R1ay5naXRodWIuaW8vanN6aXAvZG9jdW1lbnRhdGlvbi9ob3d0by9yZWFkX3ppcC5odG1sXG4gKiAgIGh0dHA6Ly9vbmVodW5ncnltaW5kLmNvbS96aXAtcGFyc2luZy1qc3ppcC1hbmd1bGFyL1xuICogICBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1MzQxOTEyL2hvdy10by1nby1mcm9tLWJsb2ItdG8tYXJyYXlidWZmZXJcbiAqICAgXG4gKiAgIEJ1Z3M6IHppcCBmaWxlIHNlbnQgZXZlbiB3aGVuIGZsYWcgYXMgaW52YWxpZCBcbiAqL1xuXG4gXG5cbihmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIHRtcGxBcHBsaSA9ICc8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwie3tuYW1lfX0taW5wdXRcIiBvbmNoYW5nZT1cImFuZ3VsYXIuZWxlbWVudCh0aGlzKS5zY29wZSgpLlVwTG9hZEZpbGUodGhpcy5maWxlcylcIiBhY2NlcHQ9XCJ7e21pbWV0eXBlfX1cIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPicrXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInVwbG9hZC1maWxlXCIgbmctY2xpY2s9XCJpbWdDbGlja2VkKClcIj4nICtcbiAgICAgICAgICAgICc8aSBjbGFzcz1cInt7aWNvbn19XCI+PC9pPiA8c3Bhbj57e2xhYmVsfX08L3NwYW4+JyArXG4gICAgICAgICAgICAnPHJhbmdlLXNsaWRlciBuZy1zaG93PVwiIW5vc2xpZGVyXCIgaWQ9XCJ7e25hbWV9fS1zbGlkZXJcIiBhdXRvbWF0aWM9dHJ1ZSBpbml0aG9vaz1cIlNsaWRlckluaXRDQlwiPjwvcmFuZ2Utc2xpZGVyPicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgXG52YXIgdG1wbE1vZGFsID0gJzxzcGFuIGNsYXNzPVwibW9kYWwtdGV4dFwiPlVwbG9hZCBBcHBsaWNhdGlvbiA8Yj57e2FwcG5hbWV9fTwvYj4gPzwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8ZGl2PicrXG4gICAgICAgICAgICAnPGltZyBuZy1zcmM9XCJ7e2ljb259fVwiPicgK1xuICAgICAgICAgICAgJzxzdWJtaXQtYnV0dG9uIGljb249XCJmaS14XCIgbGFiZWw9XCJDYW5jZWxcIiBjbGlja2VkPVwiYWJhbmRvblwiPjwvc3VibWl0LWJ1dHRvbj4nK1xuICAgICAgICAgICAgJzxzdWJtaXQtYnV0dG9uIGljb249XCJmaS1saWtlXCIgbGFiZWw9XCJJbnN0YWxsXCIgY2xpY2tlZD1cInN1Y2Nlc3NcIj48L3N1Ym1pdC1idXR0b24+ICcgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgXG52YXIgdG1wbEVycm9yID0gJzxzcGFuIGNsYXNzPVwibW9kYWwtdGV4dFwiPkludmFsaWQgQXBwbGljYXRpb24gPGI+e3thcHBuYW1lfX08L2I+ID88L3NwYW4+JyArXG4gICAgICAgICAgICAnPGRpdj4nK1xuICAgICAgICAgICAgJzxpbWcgbmctc3JjPVwie3tpY29ufX1cIj4nICtcbiAgICAgICAgICAgICc8c3VibWl0LWJ1dHRvbiBpY29uPVwiZmkteFwiIGxhYmVsPVwiQ2xvc2VcIiBjbGlja2VkPVwiYWJhbmRvblwiPjwvc3VibWl0LWJ1dHRvbj4nK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgXG5cbi8vIFNlcnZpY2UgQ3JlYXRlIHhmb3JtIGluc2VydCBmaWxlcyBpbiBhbmQgUG9zdCBpdCB0byB1cmxcbmZ1bmN0aW9uIExvYWRGaWxlU3ZjIChzY29wZSwgZmlsZXMsIGZpbGVDQikge1xuICAgIHZhciB4bWxSZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgeGZvcm0gID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgXG4gICAgLy8gVXBkYXRlIHNsaWRlciBkdXJpbmcgVXBsb2FkXG4gICAgeG1sUmVxLnVwbG9hZC5vbnByb2dyZXNzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBwcm9ncmVzcyA9IE1hdGgucm91bmQoZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSA/IGV2ZW50LmxvYWRlZCAqIDEwMCAvIGV2ZW50LnRvdGFsIDogMCk7XG4gICAgICAgIGlmIChzY29wZS5zbGlkZXIpIHNjb3BlLnNsaWRlci5zZXRWYWx1ZSAocHJvZ3Jlc3MpO1xuICAgIH07XG5cbiAgICAvLyBVcGxvYWQgaXMgZmluaXNoIGxldCdzIG5vdGlmeSBjb250cm9sZXIgY2FsbGJhY2tcbiAgICB4bWxSZXEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzY29wZS5kaXZFbGVtLmFkZENsYXNzIChcInN1Y2Nlc3NcIik7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0ucmVtb3ZlQ2xhc3MgKFwiZXJyb3JcIik7XG4gICAgICAgIHZhciByZXNwb25zZSA9e1xuICAgICAgICAgICAgc3RhdHVzIDogeG1sUmVxLnN0YXR1cyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHhtbFJlcS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBcbiAgICAgICAgfTtcbiAgICAgICAgc2NvcGUuY2FsbGJhY2sgKHJlc3BvbnNlKTtcbiAgICB9O1xuXG4gICAgeG1sUmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0uYWRkQ2xhc3MgKFwiZXJyb3JcIik7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0ucmVtb3ZlQ2xhc3MgKFwic3VjY2Vzc1wiKTtcbiAgICB9O1xuXG4gICAgeG1sUmVxLm9uYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0uYWRkQ2xhc3MgKFwiZXJyb3JcIik7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0ucmVtb3ZlQ2xhc3MgKFwic3VjY2Vzc1wiKTtcbiAgICAgICAgdmFyIHJlc3BvbnNlID17XG4gICAgICAgICAgICBzdGF0dXMgOiB4bWxSZXEuc3RhdHVzLFxuICAgICAgICAgICAgaGVhZGVyczogeG1sUmVxLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIFxuICAgICAgICB9O1xuICAgICAgICBzY29wZS5jYWxsYmFjayAocmVzcG9uc2UpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5wb3N0ZmlsZSA9IGZ1bmN0aW9uKHBvc3R1cmwpIHsgXG4gICAgICAgIC8vIGV2ZXJ5dGhpbmcgbG9va3MgT0sgbGV0J3MgUG9zdCBpdFxuICAgICAgICB4bWxSZXEub3BlbihcIlBPU1RcIiwgcG9zdHVybCAsIHRydWUpO1xuICAgICAgICB4bWxSZXEuc2VuZCh4Zm9ybSk7XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5maWxlID0gZmlsZXNbaV07XG4gICAgICAgIC8vIFVua25vdyBUeXBlICEhISBpZiAoIXRoaXMuZmlsZS50eXBlLm1hdGNoKHNjb3BlLm1pbWV0eXBlKSkgY29udGludWU7XG5cbiAgICAgICAgY29uc29sZS5sb2cgKFwiU2VsZWN0ZWQgZmlsZT1cIiArIHRoaXMuZmlsZS5uYW1lICsgXCIgc2l6ZT1cIisgdGhpcy5maWxlLnNpemUvMTAyNCArIFwiIFR5cGU9XCIrIHRoaXMuZmlsZS50eXBlKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuYmFzZW5hbWU9IHRoaXMuZmlsZS5uYW1lLnNwbGl0KCcvJykucmV2ZXJzZSgpWzBdO1xuXG4gICAgICAgIC8vIEZpbGUgdG8gdXBsb2FkIGlzIHRvbyBiaWdcbiAgICAgICAgaWYgKGlzTmFOKHRoaXMuZmlsZS5zaXplKSB8fCB0aGlzLmZpbGUuc2l6ZSA+IHNjb3BlLm1heHNpemUqMTAyNCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCAoZmlsZUNCLDEwMCk7ICAvLyBPbiBlcnJvciBhc3luY2hyb25vdXMgY2FsbGJhY2sgd2l0aG91dCBhcmd1bWVudFxuICAgICAgICAgICAgXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIC8vIElmIEZpbGUgaXMgcmVhZGFibGUgbGV0J3MgcmVhZCBpdFxuICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIodGhpcy5maWxlKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmaWxlQ0I7XG5cbiAgICAgICAgICAgIC8vIGlmIGV2ZXJ5dGhpbmcgaXMgT0sgbGV0J3MgYWRkIGZpbGUgdG8geGZvcm1cbiAgICAgICAgICAgIHhmb3JtLmFwcGVuZChzY29wZS5uYW1lLCB0aGlzLmZpbGUsIHRoaXMuZmlsZS5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuYW5ndWxhci5tb2R1bGUoJ1VwbG9hZEZpbGVzJyxbJ0FwcENvbmZpZycsICdNb2RhbE5vdGlmaWNhdGlvbicsICdSYW5nZVNsaWRlciddKVxuXG4uZGlyZWN0aXZlKCd1cGxvYWRBcHBsaScsIFtcIkFwcENvbmZpZ1wiLCBcIkpRZW11XCIsIFwiTm90aWZpY2F0aW9uXCIsIFwiTW9kYWxGYWN0b3J5XCIsIFwiJHRpbWVvdXRcIiwgZnVuY3Rpb24oQXBwQ29uZmlnLCAgSlFlbXUsIE5vdGlmaWNhdGlvbiwgTW9kYWxGYWN0b3J5LCAkdGltZW91dCkge1xuICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICAgICAgXG4gICAgICAgIC8vIGdldCB3aWRnZXQgaW1hZ2UgaGFuZGxlIGZyb20gdGVtcGxhdGVcbiAgICAgICAgc2NvcGUuaW5wdXRFbGVtICA9IGVsZW0uZmluZCgnaW5wdXQnKTtcbiAgICAgICAgc2NvcGUuZGl2RWxlbSAgICA9IGVsZW0uZmluZCgnZGl2Jyk7XG4gICAgICAgIFxuICAgICAgICAvLyBJbWFnZSB3YXMgY2tpY2sgbGV0J3Mgc2ltdWxhdGUgYW4gaW5wdXQgKGZpbGUpIGNsaWNrXG4gICAgICAgIHNjb3BlLmltZ0NsaWNrZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzY29wZS5pbnB1dEVsZW1bMF0uY2xpY2soKTsgLy8gV2FybmluZyBBbmd1bGFyIFRyaWdnZXJFdmVudCBkb2VzIG5vdCB3b3JrISEhXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAvLyBTbGlkZXIgY29udHJvbCBoYW5kbGUgcmVnaXN0cmF0aW9uIGFmdGVyIGNyZWF0aW9uXG4gICAgICAgIHNjb3BlLlNsaWRlckluaXRDQj1mdW5jdGlvbiAoc2xpZGVyKSB7XG4gICAgICAgICAgIHNjb3BlLnNsaWRlcj0gc2xpZGVyOyBcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwbG9hZCBpcyBkZWxlZ2F0ZWQgdG8gYSBzaGFyZWQgZnVuY3Rpb25cbiAgICAgICAgc2NvcGUuVXBMb2FkRmlsZT1mdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGU7IFxuICAgICAgICAgICAgdmFyIGFwcGljb247XG4gICAgICAgICAgICB2YXIgdGVtcGxhdGU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBzdWNjZXNzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBMb29rcyBPSyBsZXQncyBQb3N0IFhmb3JtL0ZpbGVcbiAgICAgICAgICAgICAgICBoYW5kbGUucG9zdGZpbGUoYXR0cnMucG9zdHVybCArIFwiP3Rva2VuPVwiICsgQXBwQ29uZmlnLnNlc3Npb24udG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgc2NvcGUubW9kYWwuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgICR0aW1lb3V0IChmdW5jdGlvbigpIHtzY29wZS5tb2RhbC5kZXN0cm95KCk7fSwgMTAwMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgYWJhbmRvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgICAgICAkdGltZW91dCAoZnVuY3Rpb24oKSB7c2NvcGUubW9kYWwuZGVzdHJveSgpO30sIDEwMDApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgcmVhZGVyQ0IgPSBmdW5jdGlvbiAodXBsb2FkKSB7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBGaWxlIHVwbG9hZCBmYWlsIGhhbmRsZSBlcnJvclxuICAgICAgICAgICAgICAgIGlmICghIHVwbG9hZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLmZpbGUuc2l6ZSA+IHNjb3BlLm1heHNpemUqMTAyNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwaWNvbiA9IHNjb3BlLmlzdG9vYmlnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU9IHRtcGxFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKGhhbmRsZS5maWxlLnNpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBpY29uID0gc2NvcGUuaXNub3R2YWxpZDsgXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZT0gdG1wbEVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgemlwYXBwID0gbmV3IEpTWmlwICh1cGxvYWQudGFyZ2V0LnJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aHVtYm5haWwgPSB6aXBhcHAuZmlsZShcImljb25fMTI4LnBuZ1wiKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpcyB3ZSBoYXZlIGEgdGh1bWJuYWlsIHdpdGhpbiBsb2FkZWQgWmlwZmlsZVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRodW1ibmFpbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiVGhpcyBpcyBub3QgYSB2YWxpZCBBcHBsaWNhdGlvbiBGcmFtZXdvcmsgQVBQXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwaWNvbiA9IHNjb3BlLmlzbm90dmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZT0gdG1wbEVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL3Njb3BlLmltZ0VsZW1bMF0uc3JjID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3RodW1ibmFpbC5hc0FycmF5QnVmZmVyKCldLCB7dHlwZTogXCJpbWFnZVwifSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwaWNvbiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0aHVtYm5haWwuYXNBcnJheUJ1ZmZlcigpXSwge3R5cGU6IFwiaW1hZ2VcIn0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gdG1wbE1vZGFsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIHJlZmVyZW5jZSBodHRwOi8vZm91bmRhdGlvbi56dXJiLmNvbS9hcHBzL2RvY3MvIyEvYW5ndWxhci1tb2R1bGVzXG4gICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uSW46ICdzbGlkZUluRnJvbVRvcCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRTY29wZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA6IHN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBhYmFuZG9uIDogYWJhbmRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb24gICAgOiBhcHBpY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbmFtZSA6IGhhbmRsZS5iYXNlbmFtZVxuICAgICAgICAgICAgICAgICAgICB9LCB0ZW1wbGF0ZSA6IHRlbXBsYXRlXG4gICAgICAgICAgICAgICAgfTsgXG4gICAgICAgICAgICAgICAgLy8gUG9wdXAgTW9kYWwgdG8gcmVuZGVyIGFwcGxpY2F0aW9uIGRhdGFcbiAgICAgICAgICAgICAgICBzY29wZS5tb2RhbCA9IG5ldyBNb2RhbEZhY3RvcnkoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBzY29wZS5tb2RhbC5hY3RpdmF0ZSAoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIExvYWQgZmlsZSB3aXRoaW4gYnJvd3NlciBhbmQgaWYgT0sgY2FsbCByZWFkZXJDQlxuICAgICAgICAgICAgaGFuZGxlID0gbmV3IExvYWRGaWxlU3ZjIChzY29wZSwgZmlsZXMsIHJlYWRlckNCKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nIChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEluaXRpYWxsaXplIGRlZmF1bHQgdmFsdWVzIGZyb20gYXR0cmlidXRlcyB2YWx1ZXNcbiAgICAgICAgc2NvcGUubmFtZT0gYXR0cnMubmFtZSB8fCAnYXBwbGknO1xuICAgICAgICBzY29wZS5jYXRlZ29yeT0gYXR0cnMuY2F0ZWdvcnkgIHx8ICdhcHBsaSc7XG4gICAgICAgIHNjb3BlLm1pbWV0eXBlPSAoYXR0cnMuYWNjZXB0IHx8ICcud2d0Jyk7XG4gICAgICAgIHNjb3BlLm1heHNpemUgPSBhdHRycy5tYXhzaXplIHx8IDEwMDAwMDsgLy8gZGVmYXVsdCBtYXggc2l6ZSAxMDBNQlxuICAgICAgICBzY29wZS5yZWdleHAgID0gbmV3IFJlZ0V4cCAoYXR0cnMuYWNjZXB0KyAnLionLCdpJyk7XG4gICAgICAgIHNjb3BlLmljb24gICAgPSBhdHRycy5pY29uIHx8ICdmaS11cGxvYWQnO1xuICAgICAgICBzY29wZS5sYWJlbCAgID0gYXR0cnMubGFiZWwgfHwgJ1VwbG9hZCc7XG4gICAgICAgIFxuICAgICAgICBpZiAoYXR0cnMudGh1bWJuYWlsKSBzY29wZS5pc25vdHZhbGlkPSBBcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgIGF0dHJzLmlzbm90dmFsaWQ7XG4gICAgICAgIGVsc2UgIHNjb3BlLmlzbm90dmFsaWQ9QXBwQ29uZmlnLnBhdGhzW3Njb3BlLmNhdGVnb3J5XSArICd3M2Mtd2lkZ2V0LnBuZyc7XG5cbiAgICAgICAgaWYgKGF0dHJzLmlzdG9vYmlnKSBzY29wZS5pc3Rvb2JpZz0gQXBwQ29uZmlnLnBhdGhzW3Njb3BlLmNhdGVnb3J5XSArICBhdHRycy5pc3Rvb2JpZztcbiAgICAgICAgZWxzZSAgc2NvcGUuaXN0b29iaWc9QXBwQ29uZmlnLnBhdGhzW3Njb3BlLmNhdGVnb3J5XSArICdpc3Rvb2JpZy5wbmcnO1xuICAgICAgICBzY29wZS5ub3NsaWRlciA9IGF0dHJzLm5vc2xpZGVyIHx8IGZhbHNlO1xuXG4gICAgICAgIGlmICghYXR0cnMucG9zdHVybCkgdGhyb3cgbmV3IFR5cGVFcnJvcignZmlsZS11cGxvYWQgJXMgcG9zdHVybD0vYXBpL3h4eHgveHh4eCByZXF1aXJlZCcsIHNjb3BlLmF0dHJzKTsgICAgICAgICAgICBcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgdGVtcGxhdGU6IHRtcGxBcHBsaSxcbiAgICAgICAgbGluazogbXltZXRob2RzLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgY2FsbGJhY2sgOiAnPSdcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG59XSk7XG5cbmNvbnNvbGUubG9nIChcIlVwbG9hZEZpbGUgTG9hZGVkXCIpO1xufSkoKTtcbiIsIlxuLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4uXG4gKi9cblxuXG5cbihmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIHRtcGwgPSAnPHRpcC1tb2RhbCB0aXA9XCJ0aXBcIj48L3RpcC1tb2RhbD4nICtcbiAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJ7e25hbWV9fS1pbnRleHRcIj57e2xhYmVsfX0gPGkgbmctc2hvdz1cInJlcXVpcmVkXCIgbmctY2xpY2s9XCJUb0JlRGVmaW5lZFwiICcgK1xuICAgICAgICAgICAnY2xhc3M9XCJyZXF1aXJlZCB7e3N0YXR1c319IGZpLWNoZWNrYm94XCIgdGl0bGU9XCJGcmVlIFZhbHVlIEJ1dCBNYW5kYXRvcnkgQXJndW1lbnRcIiBhbHQ9XCI/XCI+ICZuYnNwOyA8L2k+PC9sYWJlbD4nKyAgICAgICAgICBcbiAgICAgICAgICAgJzxpbnB1dCAnK1xuICAgICAgICAgICAnIHR5cGU9XCJ7e3R5cGV9fVwiIGlkPVwie3tuYW1lfX0taW50ZXh0XCIgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlaG9sZGVyfX1cIiAgY2xhc3M9XCJzdGF0dXMte3tzdGF0dXN9fVwiJytcbiAgICAgICAgICAgJyBuZy1tb2RlbD1cInZhbHVlXCIgbmctYmx1cj1cInZhbGlkYXRlKClcIiBuZy1mb2N1cz1cInNlbGVjdGVkKClcIiAnK1xuICAgICAgICAgICAnIG5nLW1vZGVsLW9wdGlvbnM9XCJ7IHVwZGF0ZU9uOiBcXCdkZWZhdWx0IGJsdXJcXCcsIGRlYm91bmNlOiB7ZGVmYXVsdDogNTAwLCBibHVyOiAwfSB9XCInICtcbiAgICAgICAgICAgJz48YWxlcnQgZGF0YS1uZy1zaG93PVwiIXZhbGlkJiZlcnJtc2dcIj57e2Vycm1zZ319PC9hbGVydD4nO1xuXG52YXIgZW1haWxwYXRlcm4gPSAvXigoW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXSsoXFwuW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFtePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl0rXFwuKStbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdezIsfSkkL2k7XG5cbmFuZ3VsYXIubW9kdWxlKCdJbnB1dFRleHQnLFsnSlF1ZXJ5RW11J10pXG5cbi5kaXJlY3RpdmUoJ2lucHV0VGV4dCcsIFtcIkpRZW11XCIsIGZ1bmN0aW9uKEpRZW11KSB7XG4gICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgIFxuICAgIC8vIGRlZmF1bHQgdmFsdWUgYXQgMXN0IHJlbmRlcmluZ1xuICAgIHNjb3BlLmVycm9yICA9IGZhbHNlO1xuICAgIHNjb3BlLnZhbGlkICA9IGZhbHNlO1xuICAgIHNjb3BlLnN0YXR1cyA9ICd1bnRvdWNoJztcbiAgIFxuICAgIHNjb3BlLmlucHV0ID0gZWxlbS5maW5kIChcImlucHV0XCIpO1xuICAgIHNjb3BlLnJlcXVpcmVkID0gMDtcbiAgICBcbiAgICAvLyByZXF1aXJlciBpcyB1c2UgdG8gaW5jcmVtZW50IHJlcXVlc3RlZCBjb3VudGVyXG4gICAgaWYgKFwicmVxdWlyZWRcIiBpbiBhdHRycykge1xuICAgICAgICBzY29wZS5yZXF1aXJlZCA9IDE7XG4gICAgICAgIGVsZW0uYWRkQ2xhc3MgKFwicmVxdWlyZWRcIik7XG4gICAgfVxuICAgICAgIFxuICAgICAvLyB1c2VyIGVudGVyIGlucHV0IHJlc2V0IGVycm9yIHN0YXR1c1xuICAgICBzY29wZS5zZWxlY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NvcGUuZXJyb3I9ZmFsc2U7IFxuICAgICAgICBzY29wZS5lcnJtc2c9ZmFsc2U7IFxuICAgICAgICBzY29wZS5zdGF0dXMgPSAndG91Y2gnO1xuICAgICB9OyAgIFxuICAgICAgICAgICAgXG4gICAgIHNjb3BlLnZhbGlkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgXG4gICAgICAgICAvLyBnZXQgdmFsdWUgZnJvbSBpbnB1dCBmaWVsZCBieXBhc3NpbmcgQW5ndWxhciBuZy1tb2RlbFxuICAgICAgICAgY29uc29sZS5sb2cgKFwiQ2xpY2tlZCBJbnB1dFRleHQgbmFtZT0lcyB2YWx1ZT0lcyB2YWxpZD0lc1wiLCBzY29wZS5uYW1lLCBzY29wZS52YWx1ZSwgc2NvcGUudmFsaWQpOyAgICAgICAgXG5cbiAgICAgICAgIC8vIGZvcm0gaXMgbm90IHVudG91Y2hlZCBhbnltb3JlXG4gICAgICAgICBzY29wZS5wYXJlbnQucmVtb3ZlQ2xhc3MgKFwibmctcHJpc3RpbmVcIik7XG5cbiAgICAgICAgIC8vIGlmIHZhbHVlIG5vdCBudWxsIGNsZWFuIHVwIHN0cmluZ1xuICAgICAgICAgaWYgKHNjb3BlLnZhbHVlKSB7XG4gICAgICAgICAgICAgc2NvcGUuZXJyb3I9ZmFsc2U7IFxuICAgICAgICAgICAgLy8gcmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsbGluZyBzcGFjZVxuICAgICAgICAgICAgc2NvcGUudmFsdWUgPSBzY29wZS52YWx1ZS50cmltKCk7XG4gICAgICAgICBcbiAgICAgICAgICAgIC8vIHJlbW92ZSBhbnkgc3BhY2UgaXMgbm90IGFsbG93ZWRcbiAgICAgICAgICAgIGlmICgnbm9zcGFjZScgaW4gYXR0cnMpIHtcbiAgICAgICAgICAgICAgIHNjb3BlLnZhbHVlPXNjb3BlLnZhbHVlLnJlcGxhY2UoL1xccy9nLCAnJyk7ICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgXG4gICAgICAgICAgICBpZiAoJ2xvd2VyY2FzZScgaW4gYXR0cnMpIHtcbiAgICAgICAgICAgICAgIHNjb3BlLnZhbHVlID0gc2NvcGUudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgIFxuICAgICAgICAgICAgLy8gY2hlY2sgbWluaW11bSBsZW5naHRcbiAgICAgICAgICAgIGlmIChcIm1pbmxlblwiIGluIGF0dHJzKSB7XG4gICAgICAgICAgICAgIGlmIChzY29wZS52YWx1ZS5sZW5ndGggPCBhdHRycy5taW5sZW4pIHtcbiAgICAgICAgICAgICAgICAgc2NvcGUuc3RhdHVzPSdpbnZhbGlkJztcbiAgICAgICAgICAgICAgICAgc2NvcGUuZXJybXNnPXNjb3BlLm5hbWUgKyAnOiBNaW5pbnVtIExlbmdoPSAnICsgYXR0cnMubWlubGVuICsgJyBDaGFyYWN0ZXJzJztcbiAgICAgICAgICAgICAgICAgc2NvcGUuZXJyb3I9dHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoJ2VtYWlsJyBpbiBhdHRycykge1xuICAgICAgICAgICAgaWYgKCFlbWFpbHBhdGVybi50ZXN0IChzY29wZS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5zdGF0dXM9J2ludmFsaWQnO1xuICAgICAgICAgICAgICAgIHNjb3BlLmVycm1zZz0naW52YWxpZCBlbWFpbCBhZGRyZXNzJztcbiAgICAgICAgICAgICAgICBzY29wZS5lcnJvcj10cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgfVxuICAgICAgICAgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2NvcGUucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgc2NvcGUuc3RhdHVzPSdpbnZhbGlkJztcbiAgICAgICAgICAgICAgICAgc2NvcGUuZXJybXNnPXNjb3BlLm5hbWUgKyAnOiBSZXF1aXJlZCBBdHRyaWJ1dGUnO1xuICAgICAgICAgICAgICAgICBzY29wZS5lcnJvcj10cnVlOyBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAvLyBJZiBsb2NhbCBjb250cm9sIGZhaWwgbGV0J3MgcmVmdXNlIGlucHV0XG4gICAgICAgICBpZiAoc2NvcGUuZXJyb3IpIHtcbiAgICAgICAgICAgICBpZiAoc2NvcGUucmVxdWlyZWQgJiYgc2NvcGUudmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgc2NvcGUudmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmw0YWNvdW50ZXIudmFsaWRhdGVkID4gMCkgc2NvcGUubDRhY291bnRlci52YWxpZGF0ZWQgLS07XG4gICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAvLyB1c2UgY2FsbCB0byB1cGRhdGUgZm9ybSBzY29wZSBvbiBmb3JtIGNvbXBsZXRlbmVzc1xuICAgICAgICAgICAgIHNjb3BlLmNhbGxiYWNrIChhdHRycy5uYW1lLCBudWxsLCBzY29wZS5kb25lKTtcbiAgICAgICAgIH0gZWxzZSB7IFxuICAgICAgICAgICAgIC8vIGxvY2FsY2hlY2sgaXMgT0sgYmFja3VwIG1heSBuZXZlcnRoZWxlc3MgY2hhbmdlIHN0YXR1cyB0byBmYWxzZVxuICAgICAgICAgICAgaWYgKHNjb3BlLnJlcXVpcmVkICAmJiAhc2NvcGUudmFsaWQpIHNjb3BlLmw0YWNvdW50ZXIudmFsaWRhdGVkICsrO1xuICAgICAgICAgICAgc2NvcGUuc3RhdHVzPSd2YWxpZCc7XG4gICAgICAgICAgICBzY29wZS52YWxpZD10cnVlO1xuICAgICAgICAgICAgc2NvcGUuY2FsbGJhY2sgKGF0dHJzLm5hbWUsIHNjb3BlLnZhbHVlLCBzY29wZS5kb25lKTtcbiAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgfTtcbiAgICAgXG4gICAgIC8vIHRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgZnJvbSBjb250cm9sbGVyIHRvIHVwZGF0ZSB3aWRnZXQgc3RhdHVzXG4gICAgIHNjb3BlLmRvbmU9ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICBjb25zb2xlLmxvZyAoXCJUZXh0LUlucHV0IENhbGxiYWNrIElEPVwiKyBhdHRycy5uYW1lICsgXCIgZGF0YT1cIiwgZGF0YSk7XG4gICAgICAgZm9yICh2YXIgaSBpbiBkYXRhKSBzY29wZVtpXSA9IGRhdGFbaV07ICAgICAgICAgXG4gICAgIH07XG4gICAgIFxuICAgICAvLyBFeHBvcnQgc29tZSBhdHRyaWJ1dGVzIHdpdGhpbiBkaXJlY3RpdmUgc2NvcGUgZm9yIHRlbXBsYXRlXG4gICAgIHNjb3BlLmxhYmVsICAgICAgID0gYXR0cnMubGFiZWw7XG4gICAgIHNjb3BlLm5hbWUgICAgICAgID0gYXR0cnMubmFtZTtcbiAgICAgc2NvcGUucGxhY2Vob2xkZXIgPSBhdHRycy5wbGFjZWhvbGRlcjtcbiAgICAgc2NvcGUudHlwZSAgICAgICAgPSBhdHRycy50eXBlIHx8IFwidGV4dFwiO1xuICAgICBzY29wZS50aXAgICAgICAgICA9IGF0dHJzLnRpcDtcblxuICAgICAvLyBzZWFyY2ggZm9yIGZvcm0gd2l0aGluIHBhcmVudCBlbGVtbnRzXG4gICAgIHNjb3BlLnBhcmVudCA9IEpRZW11LnBhcmVudCAoZWxlbSwgXCJGT1JNXCIpO1xuXG4gICAgIC8vIGVtYWlsIGVuZm9yY2UgbG93ZXJjYXNlIGFuZCBub3NwYWNlICAgXG4gICAgIGlmIChcImVtYWlsXCIgaW4gYXR0cnMpIHtcbiAgICAgICAgYXR0cnMubG93ZXJjYXNlPXRydWU7IFxuICAgICAgICBhdHRycy5ub3NwYWNlPXRydWU7IFxuICAgICAgICBhdHRycy5taW5sZW49NjsgXG4gICAgIH1cblxuICAgICBpZiAoc2NvcGUucmVxdWlyZWQpIHtcbiAgICAgICAgIHNjb3BlLmw0YWNvdW50ZXIgPSBzY29wZS5wYXJlbnQuZGF0YSAoXCJsNGFjb3VudGVyXCIpO1xuICAgICAgICAgaWYgKCFzY29wZS5sNGFjb3VudGVyKSB7IFxuICAgICAgICAgICAgc2NvcGUubDRhY291bnRlciA9ICB7cmVxdWlyZWQ6MSwgdmFsaWRhdGVkOjB9O1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGaWVsZCBcIitzY29wZS5uYW1lK1wiIGlzIHJlcXVpcmVkICgxc3QpXCIpO1xuICAgICAgICAgICAgc2NvcGUucGFyZW50LmRhdGEgKFwibDRhY291bnRlclwiLCBzY29wZS5sNGFjb3VudGVyKTsgXG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmllbGQgXCIrc2NvcGUubmFtZStcIiBpcyByZXF1aXJlZFwiKTtcbiAgICAgICAgICAgICBzY29wZS5sNGFjb3VudGVyLnJlcXVpcmVkICsrO1xuICAgICAgICAgfVxuICAgICB9XG4gICAgICAgICBcbiAgICAgLy8gcmVmcmVzaCB2YWxpZGF0aW9uIGVhY2ggdGltZSBjb250cm9sZXIgdXBkYXRlIHZhbHVlXG4gICAgIHNjb3BlLiR3YXRjaCAoJ3ZhbHVlJywgZnVuY3Rpb24oKXtcbiAgICAgICAgIGlmKHNjb3BlLnZhbHVlKSBzY29wZS52YWxpZGF0ZSgpOyB9XG4gICAgICk7XG4gICAgXG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgICBjYWxsYmFjayA6ICc9JyxcbiAgICAgICAgICAgIHZhbHVlOiAnPSdcbiAgICAgICAgfVxuICAgIH07XG59XSk7XG5cbmNvbnNvbGUubG9nIChcIklucHV0VGV4dCBMb2FkZWRcIik7XG59KSgpO1xuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciB0bXBsID0gJzxpbnB1dC10ZXh0ICBjbGFzcz1cInBhc3N3b3JkXCIgdGlwPVwie3t0aXAxfX1cIiAgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlMX19XCInICtcbiAgICAgICAgICAgJ2xhYmVsPVwie3tsYWJlbDF9fVwiIGNhbGxiYWNrPVwidmFsaWQxXCIgbmFtZT1cInt7bmFtZX19LTFcIiB2YWx1ZT1cInBhc3MxXCIgcmVxdWlyZWQgbWlubGVuPVwie3ttaW5sZW59fVwiIHR5cGU9XCJwYXNzd29yZFwiID4nICtcbiAgICAgICAgICAgJzwvaW5wdXQtdGV4dD4nICsgXG4gICAgICAgICAgICc8aW5wdXQtdGV4dCAgY2xhc3M9XCJwYXNzd29yZFwiIHRpcD1cInRpcDJcIiAgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlMn19XCInICtcbiAgICAgICAgICAgJ2xhYmVsPVwie3tsYWJlbDJ9fVwiIGNhbGxiYWNrPVwidmFsaWQyXCIgbmFtZT1cInt7bmFtZX19LTJcIiB2YWx1ZT1cInBhc3MyXCIgcmVxdWlyZWQgbWlubGVuPVwie3ttaW5sZW59fVwiIHR5cGU9XCJwYXNzd29yZFwiID4gJytcbiAgICAgICAgICAgJzwvaW5wdXQtdGV4dD4nO1xuXG5hbmd1bGFyLm1vZHVsZSgnSW5wdXRQYXNzd29yZCcsW10pXG5cbi5kaXJlY3RpdmUoJ2lucHV0UGFzc3dvcmQnLCBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgXG4gICAgc2NvcGUudmFsaWQxID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nIChcIkNsaWNrZWQgSW5wdXRQYXNzd29yZDEgbmFtZT0lcyB2YWx1ZT0lc1wiLCBuYW1lLCB2YWx1ZSk7ICAgICAgICBcbiAgICAgICAgc2NvcGUuZmlyc3Rwd2QgPSB2YWx1ZTtcbiAgICB9O1xuICAgIFxuICAgIHNjb3BlLnZhbGlkMiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgZG9uZSkgeyAgICAgICAgXG4gICAgICAgIGNvbnNvbGUubG9nIChcIkNsaWNrZWQgSW5wdXRQYXNzd29yZDIgbmFtZT0lcyB2YWx1ZT0lc1wiLCBuYW1lLCB2YWx1ZSk7ICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIC8vIGlmIGJvdGggcGFzc3dkIGVxdWFsIHRoZW4gY2FsbCBmb3JtIENCXG4gICAgICAgIGlmIChzY29wZS5maXJzdHB3ZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICBkb25lKHt2YWxpZDogZmFsc2UsIHN0YXR1czogJ2ludmFsaWQnLCBlcnJtc2c6IFwiYm90aCBwYXNzd29yZCBzaG91bGQgbWF0Y2hcIn0pOyAgXG4gICAgICAgIH0gZWxzZSB7ICBcbiAgICAgICAgICBzY29wZS5jYWxsYmFjayAoYXR0cnMubmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcbiAgICAgfTtcbiAgICAgXG4gICAgIC8vIHRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgZnJvbSBjb250cm9sbGVyIHRvIHVwZGF0ZSB3aWRnZXQgc3RhdHVzXG4gICAgIHNjb3BlLmRvbmU9ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICBjb25zb2xlLmxvZyAoXCJUZXh0LUlucHV0IENhbGxiYWNrIElEPVwiKyBhdHRycy5uYW1lICsgXCIgZGF0YT1cIiwgZGF0YSk7XG4gICAgICAgZm9yICh2YXIgaSBpbiBkYXRhKSBzY29wZVtpXSA9IGRhdGFbaV07ICAgICAgICAgXG4gICAgIH07XG4gICAgIFxuICAgICAvLyBFeHBvcnQgc29tZSBhdHRyaWJ1dGVzIHdpdGhpbiBkaXJlY3RpdmUgc2NvcGUgZm9yIHRlbXBsYXRlXG4gICAgIHNjb3BlLm5hbWUgICA9IGF0dHJzLm5hbWU7XG4gICAgIHNjb3BlLmxhYmVsMSA9IGF0dHJzLmxhYmVsIHx8ICdQYXNzd29yZCc7XG4gICAgIHNjb3BlLmxhYmVsMiA9IGF0dHJzLmxhYmVsIHx8ICdQYXNzd29yZCBWZXJpZmljYXRpb24nO1xuICAgICBzY29wZS5wbGFjZTEgPSBhdHRycy5wbGFjZWhvbGRlcjEgfHwgJ1VzZXIgUGFzc3dvcmQnO1xuICAgICBzY29wZS50aXAxICAgPSBhdHRycy50aXAgfHwgJ0Nob29zZSBhIFBhc3N3b3JkJztcbiAgICAgc2NvcGUucGxhY2UyID0gYXR0cnMucGxhY2Vob2xkZXIxIHx8ICdQYXNzd29yZCBWZXJpZmljYXRpb24nO1xuICAgICBzY29wZS50aXAyICAgPSBhdHRycy50aXAgICAgfHwgJ0NvbmZpcm1lIHlvdXIgUGFzc3dvcmQnO1xuICAgICBzY29wZS5taW5sZW4gPSBhdHRycy5taW5sZW4gfHwgMTA7XG4gICAgIFxuICAgICBpZiAoXCJyZXF1aXJlZFwiIGluIGF0dHJzKSBzY29wZS5yZXF1aXJlZCA9ICdyZXF1aXJlZCc7XG4gICAgICAgICBcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgdGVtcGxhdGU6IHRtcGwsXG4gICAgICAgIGxpbms6IG15bWV0aG9kcyxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAgIGNhbGxiYWNrIDogJz0nLFxuICAgICAgICB9XG4gICAgfTtcbn0pO1xuXG5jb25zb2xlLmxvZyAoXCJJbnB1dFBhc3N3b3JkIExvYWRlZFwiKTtcbn0pKCk7XG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqIFxuICogQnVnczogSW5wdXQgd2l0aCBDYWxsYmFjayBTSE9VTEQgQkUgZ2V0ICdyZXF1aXJlZCcgY2xhc3NcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0bXBsID0gJzxkaXYgIG5nLWNsaWNrPVwiY2xpY2tlZCgpXCI+JyArXG4gICAgICAgICAgICAnPGkgY2xhc3M9XCJ7e2ljb259fVwiPjwvaT4nICtcbiAgICAgICAgICAgICc8c3Bhbj57e2xhYmVsfX08L3NwYW4+JyArXG4gICAgICAgICAgICAnPC9kaXY+JztcblxuICAgIGFuZ3VsYXIubW9kdWxlKCdTdWJtaXRCdXR0b24nLCBbXSlcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3N1Ym1pdEJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBhanVzdCBpY29uIG9yIHVzZSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmljb24gPSBhdHRycy5pY29uIHx8ICdmaS1mb290JztcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUubGFiZWwgPSBhdHRycy5sYWJlbCB8fCAnTmV4dCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgbGFiZWwgYXMgY2xhc3NcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyAoc2NvcGUubGFiZWwudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBub3RlOiBjbGlja2VkIGluIGltcG9ydGVkIGFuZCB3aGVuIHRlbXBsYXRlIGlzIGNsaWNrZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgd2lsbCBjYWxsIGNsaWNrZWQgbWV0aG9kIHBhc3NlZCBpbiBwYXJhbS5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRtcGwsXG4gICAgICAgICAgICAgICAgICAgIGxpbms6IG15bWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgc2NvcGU6IHtjbGlja2VkIDogJz0nfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbn0pKCk7XG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqIFxuICogQnVnczogSW5wdXQgd2l0aCBDYWxsYmFjayBTSE9VTEQgQkUgZ2V0ICdyZXF1aXJlZCcgY2xhc3NcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0bXBsQXBwbGkgPSAnPGRpdiAgbmctY2xpY2s9XCJjbGlja2VkKClcIj4nICtcbiAgICAgICAgICAgICc8aW1nIG5nLXNyYz1cInt7aWNvbn19XCI+JyArXG4gICAgICAgICAgICAnPHNwYW4+e3tsYWJlbH19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgXG4gICAgdmFyIHRtcGxNb2RhbCA9IFxuICAgICAgICAgICAgJzxiIGNsYXNzPVwiY2xvc2UtYnV0dG9uXCIgbmctY2xpY2s9XCJjbG9zZSgpXCI+w5c8L2I+JyArXG4gICAgICAgICAgICAnPGltZyBuZy1zcmM9XCJ7e2ljb259fVwiPicgK1xuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwibW9kYWwtdGV4dFwiPkFwcGxpY2F0aW9uIDxiPnt7bGFiZWx9fTwvYj48L3NwYW4+JyArXG4gICAgICAgICAgICAnPHVsIGNsYXNzPVwidmVydGljYWwgaWNvbi1sZWZ0IHByaW1hcnkgbWVudS1iYXJcIj4nICtcbiAgICAgICAgICAgICc8bGk+PGEgbmctY2xpY2s9YWN0aW9uKFwic3RhcnRcIik+PGkgY2xhc3M9XCJmaS1jaGVja1wiPiBTdGFydDwvaT48L2E+PC9saT4nICtcbiAgICAgICAgICAgICc8bGk+PGEgbmctY2xpY2s9YWN0aW9uKFwic3RvcFwiKT48aSBjbGFzcz1cImZpLXhcIj4gU3RvcDwvaT48L2E+PC9saT4nICtcbiAgICAgICAgICAgICc8bGk+PGEgbmctY2xpY2s9YWN0aW9uKFwiaW5mb1wiKT48aSBjbGFzcz1cImZpLWluZm9cIj4gSW5mbzwvaT48L2E+PC9saT4nICtcbiAgICAgICAgICAgICc8bGk+PGEgbmctY2xpY2s9YWN0aW9uKFwidW5pbnN0YWxsXCIpPjxpIGNsYXNzPVwiZmkteFwiPiBVbmluc3RhbGw8L2k+PC9hPjwvbGk+JyArXG4gICAgICAgICAgICAnPC91bD4nICtcbiAgICAgICAgICAgICcnO1xuICAgIFxuICAgIHZhciB0bXBsRGV0YWlsID0gXG4gICAgICAgICAgICAnPGIgY2xhc3M9XCJjbG9zZS1idXR0b25cIiBuZy1jbGljaz1cImNsb3NlKClcIj7DlzwvYj4nICtcbiAgICAgICAgICAgICc8aW1nIG5nLXNyYz1cInt7aWNvbn19XCI+JyArXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJtb2RhbC10ZXh0XCI+QXBwbGljYXRpb24gPGI+e3tsYWJlbH19PC9iPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8dWwgY2xhc3M9XCJ2ZXJ0aWNhbCBpY29uLWxlZnRcIj4nICtcbiAgICAgICAgICAgICc8bGk+PGkgY2xhc3M9XCJmaS1wYXBlcmNsaXBcIj4gTmFtZSA6IHt7ZGV0YWlsLm5hbWV9fSA8L2k+PC9saT4nICtcbiAgICAgICAgICAgICc8bGk+PGkgY2xhc3M9XCJmaS1pbmZvXCI+IERlc2NyaXB0aW9uIHt7ZGV0YWlsLmRlc2NyaXB0aW9ufX08L2k+PC9saT4nICtcbiAgICAgICAgICAgICc8bGk+PGkgY2xhc3M9XCJmaS10b3Jzb1wiPiBBdXRob3IgOiB7e2RldGFpbC5hdXRob3J9fTwvaT48L2xpPicgK1xuICAgICAgICAgICAgJzwvdWw+JyArXG4gICAgICAgICAgICAnJztcblxuICAgIGFuZ3VsYXIubW9kdWxlKCdBcHBsaUJ1dHRvbicsIFtdKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgnYXBwbGlCdXR0b24nLCBbXCJBcHBDb25maWdcIiwgXCJBcHBDYWxsXCIsIFwiTW9kYWxGYWN0b3J5XCIsIFwiTm90aWZpY2F0aW9uXCIsIFwiJHRpbWVvdXRcIiwgZnVuY3Rpb24gKEFwcENvbmZpZywgQXBwQ2FsbCwgTW9kYWxGYWN0b3J5LCBOb3RpZmljYXRpb24sICR0aW1lb3V0KSB7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmNsaWNrZWQgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RpZnlFcnJvciA9IGZ1bmN0aW9uKGFwaSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uZXJyb3IgKHttZXNzYWdlOiBcIkZhaWwgL2FwaS9hZm0tbWFpblwiICsgYXBpICsgXCI9XCIgKyBzY29wZS5sYWJlbCArIFwiIFJ1bklEPVwiKyBzY29wZS5hcHBJRCwgZGVsYXk6IDUwMDB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzIChcImZhaWxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyAoXCJzdWNjZXNzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmNhbGxiYWNrIChzY29wZS5hcHBJRCwgYXBpLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90aWZ5U3VjY2VzcyA9IGZ1bmN0aW9uIChhcGksIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyAoXCJmYWlsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnJ1bklEID0gcmVzcG9uc2UuZGF0YS5yZXNwb25zZS5ydW5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5jYWxsYmFjayAoc2NvcGUuYXBwSUQsIFwiL2FwaS9hZm0tbWFpbi9zdGFydFwiLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xvc2VNb2RhbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIk1vZGFsIENsb3NpbmdcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubW9kYWwuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0IChmdW5jdGlvbigpIHtzY29wZS5tb2RhbC5kZXN0cm95KCk7fSwgMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uTW9kYWwgPSBmdW5jdGlvbihhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyAoXCJNb2RhbCBBY3Rpb249JXNcIiwgYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0YXJ0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBDYWxsLmdldCAoXCJhZm0tbWFpblwiLCBcInN0YXJ0XCIsIHtpZDogc2NvcGUuYXBwSUR9LCBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCB8fCByZXNwb25zZS5kYXRhLmp0eXBlICE9PSBcIkFKQl9yZXBseVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUVycm9yIChcInN0YXJ0XCIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlTdWNjZXNzIChcInN0YXJ0XCIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0b3BcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcENhbGwuZ2V0IChcImFmbS1tYWluXCIsIFwidGVybWluYXRlXCIsIHtydW5pZDogc2NvcGUucnVuSUR9LCBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCB8fCByZXNwb25zZS5kYXRhLmp0eXBlICE9PSBcIkFKQl9yZXBseVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUVycm9yIChcInN0b3BcIiwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeVN1Y2Nlc3MgKFwic3RvcFwiLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5mb1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwQ2FsbC5nZXQgKFwiYWZtLW1haW5cIiwgXCJkZXRhaWxcIiwge2lkOiBzY29wZS5hcHBJRH0sIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwIHx8IHJlc3BvbnNlLmRhdGEuanR5cGUgIT09IFwiQUpCX3JlcGx5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5RXJyb3IgKFwiZGV0YWlsXCIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgaHR0cDovL2ZvdW5kYXRpb24uenVyYi5jb20vYXBwcy9kb2NzLyMhL2FuZ3VsYXItbW9kdWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkluOiAnc2xpZGVJbkZyb21Ub3AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50U2NvcGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlICAgOiBjbG9zZU1vZGFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbiAgICA6IHNjb3BlLmljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCAgIDogc2NvcGUuYXBwSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWwgIDogcmVzcG9uc2UuZGF0YS5yZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0ZW1wbGF0ZSA6IHRtcGxEZXRhaWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQb3B1cCBNb2RhbCB0byByZW5kZXIgYXBwbGljYXRpb24gZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsID0gbmV3IE1vZGFsRmFjdG9yeShjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsLmFjdGl2YXRlICgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ1bmluc3RhbGxcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcENhbGwuZ2V0IChcImFmbS1tYWluXCIsIFwidW5pbnN0YWxsXCIsIHtpZDogc2NvcGUuYXBwSUR9LCBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCB8fCByZXNwb25zZS5kYXRhLmp0eXBlICE9PSBcIkFKQl9yZXBseVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUVycm9yIChcInVuaW5zdGFsbFwiLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5U3VjY2VzcyAoXCJ1bmluc3RhbGxcIiwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiQWN0aW9uTW9kYWwgdW5rbm93biBhY3Rpb249WyVzXVwiLCBhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlTW9kYWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZmVyZW5jZSBodHRwOi8vZm91bmRhdGlvbi56dXJiLmNvbS9hcHBzL2RvY3MvIyEvYW5ndWxhci1tb2R1bGVzXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkluOiAnc2xpZGVJbkZyb21Ub3AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRTY29wZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gIDogYWN0aW9uTW9kYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlICAgOiBjbG9zZU1vZGFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uICAgIDogc2NvcGUuaWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgICA6IHNjb3BlLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGVtcGxhdGUgOiB0bXBsTW9kYWxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07IFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9wdXAgTW9kYWwgdG8gcmVuZGVyIGFwcGxpY2F0aW9uIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsID0gbmV3IE1vZGFsRmFjdG9yeShjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubW9kYWwuYWN0aXZhdGUgKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZXh0cmFjdCBhcHBsaWNhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIEFwcElEK1N0b3JlXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRycy5oYW5kbGUgJiYgc2NvcGUuc3RvcmUgW2F0dHJzLmhhbmRsZV0ubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuaWNvbiAgPSBBcHBDb25maWcucGF0aHMuaWNvbnMgKyBzY29wZS5zdG9yZSBbYXR0cnMuaGFuZGxlXS5uYW1lLnRvTG93ZXJDYXNlKCkgKyAnLWljby5wbmcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubGFiZWwgPSBzY29wZS5zdG9yZSBbYXR0cnMuaGFuZGxlXS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuYXBwSUQ9IGF0dHJzLmhhbmRsZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5pY29uICA9IEFwcENvbmZpZy5wYXRocy5pY29ucyArICd3M2MtaWNvLnBuZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubGFiZWwgPSBhdHRycy5oYW5kbGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBsYWJlbCBhcyBjbGFzc1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzIChzY29wZS5sYWJlbC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGNsaWNrZWQgaW4gaW1wb3J0ZWQgYW5kIHdoZW4gdGVtcGxhdGUgaXMgY2xpY2tlZFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCB3aWxsIGNhbGwgY2xpY2tlZCBtZXRob2QgcGFzc2VkIGluIHBhcmFtLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdG1wbEFwcGxpLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7Y2FsbGJhY2s6ICc9Jywgc3RvcmU6ICc9J31cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfV0pO1xufSkoKTtcbiIsIihmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gV0FSTklORzogbWFrZSBzdXJlIHRoYW4gYXBwL2Zyb250ZW5kL3NlcnZpY2VzL0FwcENvbmZpZy5qcyBtYXRjaCB5b3VyIHNlcnZlclxuXG4vLyBsaXN0IGFsbCByZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBwYWdlICsgY29udHJvbGVyIGlmIG5lZWRlZFxuYW5ndWxhci5tb2R1bGUoJ0Rhc2hib2FyZE1vZHVsZScsIFsnU3VibWl0QnV0dG9uJywgJ1Rva2VuUmVmcmVzaCcsICdBcHBsaUJ1dHRvbiddKVxuXG4gIC5jb250cm9sbGVyKCdEYXNoYm9hcmRDb250cm9sbGVyJywgW1wiQXBwQ2FsbFwiLCBcIk5vdGlmaWNhdGlvblwiLCBmdW5jdGlvbiAoQXBwQ2FsbCwgTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7IC8vIEkgaGF0ZSBKYXZhU2NyaXB0XG4gICAgICAgIHNjb3BlLnV1aWQgICA9XCJub25lXCI7XG4gICAgICAgIHNjb3BlLnRva2VuICA9XCJub25lXCI7XG4gICAgICAgIHNjb3BlLnNlc3Npb249XCJub25lXCI7XG4gICAgICAgIHNjb3BlLnN0YXR1cyA9XCJlcnItbm9cIjtcbiAgICAgICAgc2NvcGUuYXBwbGlJRHMgPVtdOyAvLyBhcnJheSB0byBob2xkIGFwcGxpY2F0aW9ucyBJRFxuICAgICAgICBzY29wZS5hcHBsaVN0b3JlPXt9OyAvLyBhcnJheSB0byBob2xkIGFwcGxpY2F0aW9ucyBqc29uIGRlc2NyaXB0aW9uXG5cbiAgICAgICBcbiAgICAgICAgc2NvcGUuQXBwbGlDQiA9IGZ1bmN0aW9uKGFwcGxpSUQsIGFjdGlvbiwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBBY3Rpb24gaXMgZG9uZSB3aXRoaW4gV2lkZ2V0IENvbnRyb2xsZXIgb25seSB1cGRhdGUgZGVidWcgVUkgem9uZVxuICAgICAgICAgICAgICAgIHNjb3BlLnJlcXVlc3QgID0gYWN0aW9uOyBcbiAgICAgICAgICAgICAgICBzY29wZS5lcnJjb2RlICA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkgc2NvcGUucmVzcG9uc2UgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2NvcGUuR2V0UnVubmFibGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyAoXCJEYXNoYm9hcmQgR2V0UnVubmFibGVzXCIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBBcHBDYWxsLmdldCAoXCJhZm0tbWFpblwiLCBcInJ1bm5hYmxlc1wiLCB7LypxdWVyeSovfSwgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZGVidWcgVUkgem9uZVxuICAgICAgICAgICAgICAgIHNjb3BlLnJlcXVlc3QgID0gXCIvYXBpL2FmbS1tYWluL3J1bm5hYmxlXCI7IFxuICAgICAgICAgICAgICAgIHNjb3BlLnJlc3BvbnNlID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICBzY29wZS5lcnJjb2RlICA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiSG9vcCBHZXRSdW5uYWJsZSBmYWlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhpcyBpcyBhIHZhbGlkIHJlc3BvbnNlIGZyb20gQmluZGVyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEucmVxdWVzdC5qdHlwZSAhPT0gXCJBSkJfcmVwbHlcIiAmJiByZXNwb25zZS5kYXRhLnJlcXVlc3QuYXBpICE9PSBcInJ1bm5hYmxlc1wiKSB7XG4gICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uZXJyb3IgKHttZXNzYWdlOiBcIkludmFsaWQgUmVzcG9uZCB0byAvb3BhL2FmbS1tYWluL3J1bm5hYmxlIHJlc3BvbnNlLmRhdGE9XCIrcmVzcG9uc2UuZGF0YSwgZGVsYXk6IDUwMDB9KTsgXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIGxvb3Agb24gcnVubmFibGUgYXBwbGljYXRpb24gdG8gcHJlcGFyZSBmb3IgZGlzcGxheVxuICAgICAgICAgICAgICAgIHZhciAgYXBwbGlJRHM9W107XG4gICAgICAgICAgICAgICAgdmFyICBydW5uYWJsZXMgPSByZXNwb25zZS5kYXRhLnJlc3BvbnNlLnJ1bm5hYmxlcztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpZHg9MDsgaWR4IDwgcnVubmFibGVzLmxlbmd0aDsgaWR4ICsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpSURzW2lkeF0gPSBydW5uYWJsZXMgW2lkeF0uaWQ7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmFwcGxpU3RvcmUgW3J1bm5hYmxlcyBbaWR4XS5pZF0gPSAgcnVubmFibGVzIFtpZHhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzY29wZS5hcHBsaUlEcyA9IGFwcGxpSURzOyAvLyBhdm9pZCBwYXJ0aWFsIHVwZGF0ZSB0byBsaW1pdCBVSSByZWZyZXNoXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICBcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNjb3BlLkZpbGVVcGxvYWRlZCA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiZmlsZSBVcGxvYWRlZFwiKTtcbiAgICAgICAgICAgIC8vIENhbm5vdCBkaXNwbGF5IHBvc3QgcmVzdWx0cyBhcyBHZXRSdW5uYWJsZSB3aWxsIG92ZXJsb2FkIHRoZW0gYXluY2hyb25vdXNseVxuICAgICAgICAgICAgc2NvcGUucmVxdWVzdCAgPSBcIi9hcGkvYWZtLW1haW4vaW5zdGFsbFwiOyBcbiAgICAgICAgICAgIHNjb3BlLnJlc3BvbnNlID0gcmVzcG9uc2UuaGVhZGVycztcbiAgICAgICAgICAgIHNjb3BlLmVycmNvZGUgID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBldmVyeXRoaW5nIGxvb2tzIE9LIHVwZGF0ZSBhcHAgbGlzdFxuICAgICAgICAgICAgc2NvcGUuR2V0UnVubmFibGVzKCk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzY29wZS5BdXRvU3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyAoXCJBdXRvU3RhcnQgcmVxdWVzdGluZyBBcHBzIGxpc3RcIik7XG4gICAgICAgICAgICBzY29wZS5HZXRSdW5uYWJsZXMoKTtcbiAgICAgICAgfTtcbiAgICAgICAgICBcbiAgIH1dKTtcblxuY29uc29sZS5sb2cgKFwiRGFzaGJvYXJkIENvbnRyb2xsZXIgTG9hZGVkXCIpO1xufSkoKTsgIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqIFxuICogVXNhZ2U6XG4gKiBcbiAqICAgLy8gbW91c2UgZXZlbnQgcHJvYmFibHkgcG9pbnQgb24gaWNvbiBhbmQgbm90IG9uIGJ1dHRvbiBkaXZcbiAqICAgLi4uIG5nLWNsaWNrPVwiTG9ja0NoYW5uZWwoJGV2ZW50KVxuICAgICB2YXIgdGFyZ2V0PSBhbmd1bGFyLmVsZW1lbnQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgIHZhciBidXR0b249IEpRZW11LkZpbmRJblBhcmVudCAodGFyZ2V0LCAnZGl2Jyk7XG4gKiBcbiAqL1xuXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICAgICAgICBcbiAgICAvLyBfYWxsIG1vZHVsZXMgb25seSByZWZlcmVuY2UgZGVwZW5kZW5jaWVzXG4gICAgYW5ndWxhci5tb2R1bGUoJ0pRdWVyeUVtdScsIFtdKVxuXG4gICAgICAgICAgICAvLyBGYWN0b3J5IGlzIGEgc2luZ2xldG9uIGFuZCBzaGFyZSBpdHMgY29udGV4dCB3aXRoaW4gYWxsIGluc3RhbmNlcy5cbiAgICAgICAgICAgIC5mYWN0b3J5KCdKUWVtdScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIHZhciBGaW5kSW5QYXJlbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBzZWxlY3Rvci50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50WzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoID09PSBwYXJlbnRbMF0udGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAvLyBIVE1MRGl2RWxlbWVudCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciAgRmluZEJ5VGFnPSBmdW5jdGlvbiAoZWxlbWVudCwgdGFnLCBzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoID0gc2VsZWN0b3IudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgICA9IHRhZy50b0xvd2VyQ2FzZSgpKyBcIk5hbWVcIjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2ggPT09IGNoaWxkcmVuWzBdW3R5cGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSAgLy8gSFRNTERpdkVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciAgRmluZEJ5Q2xhc3M9IGZ1bmN0aW9uIChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoID0gc2VsZWN0b3IudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5oYXNDbGFzcyhzZWFyY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSAgLy8gSFRNTERpdkVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIG15TWV0aG9kcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgRmluZEluUGFyZW50OiBGaW5kSW5QYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIEZpbmRCeVRhZzogRmluZEJ5VGFnLFxuICAgICAgICAgICAgICAgICAgICBGaW5kQnlDbGFzczogRmluZEJ5Q2xhc3NcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG15TWV0aG9kcztcbiAgICAgICAgICAgIH0pO1xuXG59KSgpOyIsInZhciBmb3VuZGF0aW9uUm91dGVzID0gW3tcIm5hbWVcIjpcIkRhc2hib2FyZFwiLFwidXJsXCI6XCIvZGFzaGJvYXJkXCIsXCJjb250cm9sbGVyXCI6XCJEYXNoYm9hcmRDb250cm9sbGVyIGFzIGN0cmxcIixcImFuaW1hdGlvbkluXCI6XCJzbGlkZUluUmlnaHRcIixcInBhdGhcIjpcInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmQuaHRtbFwifV07IFxuIiwiKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvLyBfYWxsIG1vZHVsZXMgb25seSByZWZlcmVuY2UgZGVwZW5kZW5jaWVzXG4gICAgYW5ndWxhci5tb2R1bGUoJ0FwcENvbmZpZycsIFtdKVxuICAgIFxuICAgICAgICAgICAgLy8gRmFjdG9yeSBpcyBhIHNpbmdsZXRvbiBhbmQgc2hhcmUgaXRzIGNvbnRleHQgd2l0aGluIGFsbCBpbnN0YW5jZXMuXG4gICAgICAgICAgICAuZmFjdG9yeSgnQXBwQ29uZmlnJywgW1widXJscXVlcnlcIiwgZnVuY3Rpb24gKHVybHF1ZXJ5KSB7XG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyAoXCJVUkw9XCIrICRsb2NhdGlvbi51cmwoKSArIFwiIFF1ZXJ5PVwiICsgbG9jYXRpb24uaHJlZisgXCIgd2luZG93PVwiICsgZG9jdW1lbnQucmVmZXJyZXIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG15Q29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHsgLy8gV2FybmluZyBwYXRocyBzaG91bGQgZW5kIHdpdGggL1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgOiAnaW1hZ2VzLycsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucyA6ICcvaWNvbnMvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YXRhcjogJ2ltYWdlcy9hdmF0YXJzLycsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdWRpbyA6ICdpbWFnZXMvYXVkaW8vJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpIDogJ2ltYWdlcy9hcHBsaS8nXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBteWFwaTogeyAvLyBXYXJuaW5nIHBhdGhzIHNob3VsZCBlbmQgd2l0aCAvXG4gICAgICAgICAgICAgICAgICAgICAgIHRva2VuIDogJy9hcGkvbXlwbHVnaW4veHh4eCdcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb246IHsgLy8gVGhvc2UgZGF0YSBhcmUgdXBkYXRlZCBieSBzZXNzaW9uIHNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlICA6ICcvYXBpL3Rva2VuL2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2ggOiAnL2FwaS90b2tlbi9yZWZyZXNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sgICA6ICcvYXBpL3Rva2VuL2NoZWNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQgICA6ICcvYXBpL3Rva2VuL3Jlc2V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgcGluZyAgICA6ICcvYXBpL3Rva2VuL2NoZWNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCA6IHVybHF1ZXJ5LnRva2VuIHx8ICcxMjM0NTY3ODknLCAgLy8gdHlwaWNhbCBkZXYgaW5pdGlhbCB0b2tlblxuICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0IDogMzYwMCwgICAgICAgICAvLyB0aW1lb3V0IGlzIHVwZGF0ZWQgY2xpZW50IHNlc3NpbiBjb250ZXh0IGNyZWF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgIHBpbmdyYXRlOiA2MCwgICAgICAgICAgIC8vIFBpbmcgcmF0ZSB0byBjaGVjayBpZiBzZXJ2ZXIgaXMgc3RpbGwgYWxpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAgICA6ICcnLCAgICAgICAgICAgLy8gdXVpZCBtYXAgd2l0aCBjb29raWUgb3IgbG9uZyB0ZXJtIHNlc3Npb24gYWNjZXNzIGtleVxuICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiAgIDogJycgICAgICAgICAgICAvLyB3aWxsIGJlIHJldHVybmVkIGZyb20gYXV0aGVudGljYXRpb24gICAgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG15Q29uZmlnO1xuICAgICAgICAgICAgfV0pXG5cbiAgICAgICAgICAgIC8vIEZhY3RvcnkgaXMgYSBzaW5nbGV0b24gYW5kIHNoYXJlIGl0cyBjb250ZXh0IHdpdGhpbiBhbGwgaW5zdGFuY2VzLlxuICAgICAgICAgICAgLmZhY3RvcnkoJ0FwcENhbGwnLCBbXCIkaHR0cFwiLCBcIkFwcENvbmZpZ1wiLCBmdW5jdGlvbiAoJGh0dHAsIEFwcENvbmZpZykge1xuICAgICAgICAgICAgICAgIHZhciBteUNhbGxzID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXQgOiBmdW5jdGlvbihwbHVnaW4sIGFjdGlvbiwgcXVlcnksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS50b2tlbiA9IEFwcENvbmZpZy5zZXNzaW9uLnRva2VuOyAvLyBhZGQgdG9rZW4gdG8gcHJvdmlkZWQgcXVlcnkgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICRodHRwLmdldCgnL2FwaS8nICsgcGx1Z2luICsgJy8nICsgYWN0aW9uICwge3BhcmFtczogcXVlcnl9KS50aGVuIChjYWxsYmFjaywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBteUNhbGxzO1xuICAgICAgICAgICAgfV0pO1xuICAgIFxuIFxufSkoKTtcbiIsIihmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICBcbiAgICBmdW5jdGlvbiAgUGFyc2VRdWVyeVN0cmluZyAoKSB7XG4gICAgICB2YXIgcWQgPSB7fTtcbiAgICAgIGxvY2F0aW9uLnNlYXJjaC5zdWJzdHIoMSkuc3BsaXQoXCImXCIpLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgIHZhciBrID0gaXRlbS5zcGxpdChcIj1cIilbMF07XG4gICAgICAgICAgdmFyIHYgPSBkZWNvZGVVUklDb21wb25lbnQoaXRlbS5zcGxpdChcIj1cIilbMV0pOyBcbiAgICAgICAgICBpZiAoayBpbiBxZCkgcWRba10ucHVzaCh2KTsgZWxzZSBxZFtrXSA9IFt2XTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHFkO1xuICAgIH1cblxuICBhbmd1bGFyLm1vZHVsZSgnQUZCY2xpZW50JywgWyAvLyBXYXJuaW5nOiBBcHBuYW1lIHNob3VsZCBmaXQgd2l0aCBndWxwZmlsZS5qcyAmIGluZGV4Lmh0bWxcbiAgICAndWkucm91dGVyJyxcbiAgICAnbmdBbmltYXRlJyxcblxuICAgIC8vZm91bmRhdGlvblxuICAgICdmb3VuZGF0aW9uJyxcbiAgICAnZm91bmRhdGlvbi5keW5hbWljUm91dGluZycsXG4gICAgJ2ZvdW5kYXRpb24uZHluYW1pY1JvdXRpbmcuYW5pbWF0aW9ucycsXG4gICAgXG4gICAgLy8gZXh0ZXJuYWwgY29tcG9uZW50c1xuICAgICd1aS1ub3RpZmljYXRpb24nLFxuICAgIFxuICAgIC8vIEFwcGxpY2F0aW9uIENvbXBvbmVudHNcbiAgICAnQXBwQ29uZmlnJyxcbiAgICAnSlF1ZXJ5RW11JyxcbiAgICAnRGFzaGJvYXJkTW9kdWxlJyxcbiAgICAnVXBsb2FkRmlsZXMnLFxuICAgICdMaW5rQnV0dG9uJyxcbiAgICAnVG9rZW5SZWZyZXNoJyxcbiAgICAnUmFuZ2VTbGlkZXInLFxuICAgICdNb2RhbE5vdGlmaWNhdGlvbidcbiAgXSlcbiAgICAudmFsdWUgKCd1cmxxdWVyeScsIFBhcnNlUXVlcnlTdHJpbmcoKSlcbiAgICAuY29uZmlnKGNvbmZpZylcbiAgICAucnVuKHJ1bilcbiAgO1xuXG4gIGNvbmZpZy4kaW5qZWN0ID0gWyckdXJsUm91dGVyUHJvdmlkZXInLCAnJGxvY2F0aW9uUHJvdmlkZXInXTtcbiAgXG4gIGZ1bmN0aW9uIGNvbmZpZygkdXJsUHJvdmlkZXIsICRsb2NhdGlvblByb3ZpZGVyLCBBcHBDb25maWcpIHtcbiAgICAkdXJsUHJvdmlkZXIub3RoZXJ3aXNlKCcvZGFzaGJvYXJkJyk7XG5cbiAgICAvLyBodHRwczovL2RvY3MuYW5ndWxhcmpzLm9yZy9lcnJvci8kbG9jYXRpb24vbm9iYXNlXG4gICAgJGxvY2F0aW9uUHJvdmlkZXIuaHRtbDVNb2RlKHRydWUpLmhhc2hQcmVmaXgoJyEnKTtcbiAgICBcbiAgfVxuXG4gIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICBGYXN0Q2xpY2suYXR0YWNoKGRvY3VtZW50LmJvZHkpO1xuICB9XG4gIFxuLy8gRm9uZGF0aW9uLWFwcC50ZW1wbGF0ZSBpcyBub3QgaW5jbHVkZWQgY29ycmVjdGx5IGJ5IGd1bHAgXG4vLyBJbmNsdWRlIGhlcmUgbWlzc2luZyB0ZW1wbGF0ZXMgZnJvbSBmb3VuZGF0aW9uLWFwcHMvZGlzdC9qcy9mb3VuZGF0aW9uLWFwcHMtdGVtcGxhdGVzLmpzXG5hbmd1bGFyLm1vZHVsZSgnZm91bmRhdGlvbicpLnJ1bihbJyR0ZW1wbGF0ZUNhY2hlJywgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KCdjb21wb25lbnRzL21vZGFsL21vZGFsLmh0bWwnLFxuICAgICc8ZGl2XFxuJyArXG4gICAgJyAgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcXG4nICtcbiAgICAnICBuZy1jbGljaz1cImhpZGVPdmVybGF5KClcIj5cXG4nICtcbiAgICAnICA8YXNpZGVcXG4nICtcbiAgICAnICAgIGNsYXNzPVwibW9kYWxcIlxcbicgK1xuICAgICcgICAgbmctY2xpY2s9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCJcXG4nICtcbiAgICAnICAgIG5nLXRyYW5zY2x1ZGU+XFxuJyArXG4gICAgJyAgPC9hc2lkZT5cXG4nICtcbiAgICAnPC9kaXY+XFxuJyArXG4gICAgJycpO1xufV0pO1xuXG5jb25zb2xlLmxvZyAoXCJvcGE9QUZCY2xpZW50IExvYWRlZFwiKTtcbn0pKCk7XG4iLCIoZnVuY3Rpb24oKSB7YW5ndWxhci5tb2R1bGUoJ0FGQmNsaWVudCcpLnJ1bihbJyR0ZW1wbGF0ZUNhY2hlJywgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHskdGVtcGxhdGVDYWNoZS5wdXQoJ3BhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmQuaHRtbCcsXG4gICAgJzxoMz48aW1nIGNsYXNzPVwibG9nb1wiIHNyYz1cImltYWdlcy9sb2dvL3RyaXNrZWxfaW90X2J6aHgyNTAucG5nXCIgYWx0PVwiSW9ULmJ6aCBMb2dvXCIgc3R5bGU9XCJoZWlnaHQ6MTUwcHhcIj4gQXBwbGljYXRpb24gRnJhbWV3b3JrIE1hbmFnZXIgU2ltcGxlIENsaWVudDwvaDM+PGRpdiBjbGFzcz1cImJ1dHRvbi1ib3ggYm94LWNvbnRlbnRcIj48YXBwbGktYnV0dG9uIG5nLXJlcGVhdD1cImFwcGxpSUQgaW4gY3RybC5hcHBsaUlEc1wiIHN0b3JlPVwiY3RybC5hcHBsaVN0b3JlXCIgaGFuZGxlPVwie3thcHBsaUlEfX1cIiBjYWxsYmFjaz1cImN0cmwuQXBwbGlDQlwiPjwvYXBwbGktYnV0dG9uPjx1cGxvYWQtYXBwbGkgY2xhc3M9XCJpYnotcmlnaHRcIiBsYWJlbD1cIlVwbG9hZFwiIGljb249XCJmaS11cGxvYWRcIiBwb3N0dXJsPVwiL2FwaS9hZm0tbWFpbi9pbnN0YWxsXCIgY2FsbGJhY2s9XCJjdHJsLkZpbGVVcGxvYWRlZFwiIHRpdGxlPVwiVXBsb2FkIEFHTCBBcHBcIj48L3VwbG9hZC1hcHBsaT48L2Rpdj48ZGl2IGNsYXNzPVwibWVzc2FnZS1ib3ggYm94LWNvbnRlbnQgdmVydGljYWwgZ3JpZC1mcmFtZVwiPjxkaXYgY2xhc3M9XCJyZXNwb25zZVwiPjxzcGFuIGNsYXNzPVwiZ3JpZC1jb250ZW50IG5vc2Nyb2xsIHJlcSB7e2N0cmwuc3RhdHVzfX1cIj5yZXE9IHt7Y3RybC5yZXF1ZXN0fX08L3NwYW4+IDxzcGFuIGNsYXNzPVwiZ3JpZC1jb250ZW50IG5vc2Nyb2xsIHJlcyB7e2N0cmwuc3RhdHVzfX1cIj5yZXM9IHt7Y3RybC5yZXNwb25zZX19PC9zcGFuPiA8c3BhbiBjbGFzcz1cImdyaWQtY29udGVudCBub3Njcm9sbCBzdGF0dXMge3tjdHJsLnN0YXR1c319XCI+c3RhdHVzPSB7e2N0cmwuZXJyY29kZX19PC9zcGFuPjwvZGl2PjwvZGl2Pjx0b2tlbi1yZWZyZXNoIGF1dG9sb2c9XCJ0cnVlXCIgY2FsbGJhY2s9XCJjdHJsLkF1dG9TdGFydFwiPjwvdG9rZW4tcmVmcmVzaD4nKTt9XSk7XG59KSgpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9